summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--config.tests/avx512/avx512.cpp29
-rw-r--r--config.tests/avx512/avx512.pro2
-rw-r--r--config.tests/common/aesni/aesni.cpp49
-rw-r--r--config.tests/common/aesni/aesni.pro3
-rw-r--r--config.tests/common/rdrnd/rdrnd.cpp56
-rw-r--r--config.tests/common/rdrnd/rdrnd.pro3
-rw-r--r--config.tests/common/shani/shani.cpp50
-rw-r--r--config.tests/common/shani/shani.pro3
-rw-r--r--config.tests/x86_simd/main.cpp253
-rw-r--r--config.tests/x86_simd/x86_simd.pro11
-rw-r--r--config_help.txt6
-rwxr-xr-xconfigure4
-rw-r--r--configure.json215
-rw-r--r--configure.pri23
-rw-r--r--doc/global/qt-cpp-defines.qdocconf4
-rw-r--r--examples/corelib/corelib.pro2
-rw-r--r--examples/corelib/json/savegame/savegame.pro22
-rw-r--r--examples/corelib/mimetypes/mimetypebrowser/mainwindow.cpp7
-rw-r--r--examples/corelib/serialization/savegame/character.cpp (renamed from examples/corelib/json/savegame/character.cpp)0
-rw-r--r--examples/corelib/serialization/savegame/character.h (renamed from examples/corelib/json/savegame/character.h)0
-rw-r--r--examples/corelib/serialization/savegame/doc/src/savegame.qdoc (renamed from examples/corelib/json/savegame/doc/src/savegame.qdoc)0
-rw-r--r--examples/corelib/serialization/savegame/game.cpp (renamed from examples/corelib/json/savegame/game.cpp)0
-rw-r--r--examples/corelib/serialization/savegame/game.h (renamed from examples/corelib/json/savegame/game.h)0
-rw-r--r--examples/corelib/serialization/savegame/level.cpp (renamed from examples/corelib/json/savegame/level.cpp)0
-rw-r--r--examples/corelib/serialization/savegame/level.h (renamed from examples/corelib/json/savegame/level.h)0
-rw-r--r--examples/corelib/serialization/savegame/main.cpp (renamed from examples/corelib/json/savegame/main.cpp)0
-rw-r--r--examples/corelib/serialization/savegame/savegame.pro22
-rw-r--r--examples/corelib/serialization/serialization.pro (renamed from examples/corelib/json/json.pro)0
-rw-r--r--examples/corelib/threads/mandelbrot/mandelbrotwidget.cpp2
-rw-r--r--examples/corelib/tools/tools.pro1
-rw-r--r--examples/dbus/complexpingpong/complexpingpong.pro1
-rw-r--r--examples/dbus/pingpong/pingpong.pro1
-rw-r--r--examples/network/multistreamclient/chatconsumer.h4
-rw-r--r--examples/network/multistreamclient/movieconsumer.h6
-rw-r--r--examples/network/multistreamclient/timeconsumer.h6
-rw-r--r--examples/network/multistreamserver/chatprovider.h6
-rw-r--r--examples/network/multistreamserver/server.h2
-rw-r--r--examples/network/multistreamserver/timeprovider.h2
-rw-r--r--examples/network/torrent/mainwindow.cpp18
-rw-r--r--examples/opengl/computegles31/glwindow.h2
-rw-r--r--examples/opengl/qopenglwindow/background_renderer.cpp6
-rw-r--r--examples/widgets/desktop/desktop.pro1
-rw-r--r--examples/widgets/doc/src/stylesheet.qdoc2
-rw-r--r--examples/widgets/doc/src/wiggly.qdoc8
-rw-r--r--examples/widgets/effects/fademessage/fademessage.cpp2
-rw-r--r--examples/widgets/itemviews/fetchmore/filelistmodel.cpp3
-rw-r--r--examples/widgets/itemviews/flattreeview/flattreeview.pro7
-rw-r--r--examples/widgets/itemviews/flattreeview/main.cpp84
-rw-r--r--examples/widgets/itemviews/itemviews.pro1
-rw-r--r--examples/widgets/itemviews/puzzle/piecesmodel.cpp10
-rw-r--r--examples/widgets/itemviews/spreadsheet/spreadsheetitem.cpp2
-rw-r--r--examples/widgets/mainwindows/mainwindow/colorswatch.cpp2
-rw-r--r--examples/widgets/mainwindows/mainwindow/colorswatch.h4
-rw-r--r--examples/widgets/mainwindows/mainwindow/main.cpp2
-rw-r--r--examples/widgets/mainwindows/mainwindow/mainwindow.cpp2
-rw-r--r--examples/widgets/mainwindows/mainwindow/mainwindow.h2
-rw-r--r--examples/widgets/mainwindows/mainwindow/toolbar.cpp37
-rw-r--r--examples/widgets/mainwindows/sdi/main.cpp2
-rw-r--r--examples/widgets/painting/deform/pathdeform.cpp2
-rw-r--r--examples/widgets/painting/shared/arthurstyle.cpp4
-rw-r--r--examples/widgets/statemachine/rogue/window.cpp4
-rw-r--r--examples/widgets/tools/codecs/previewform.h2
-rw-r--r--examples/widgets/tools/completer/fsmodel.h2
-rw-r--r--examples/widgets/tools/settingseditor/mainwindow.cpp2
-rw-r--r--examples/widgets/widgets/charactermap/characterwidget.cpp2
-rw-r--r--examples/widgets/widgets/charactermap/mainwindow.cpp2
-rw-r--r--examples/widgets/widgets/codeeditor/codeeditor.cpp2
-rw-r--r--examples/widgets/widgets/icons/iconpreviewarea.cpp2
-rw-r--r--examples/widgets/widgets/icons/iconpreviewarea.h2
-rw-r--r--examples/widgets/widgets/icons/iconsizespinbox.h2
-rw-r--r--examples/widgets/widgets/icons/imagedelegate.h2
-rw-r--r--examples/widgets/widgets/tablet/mainwindow.cpp2
-rw-r--r--examples/widgets/widgets/tablet/tabletcanvas.cpp9
-rw-r--r--examples/widgets/widgets/tablet/tabletcanvas.h2
-rw-r--r--examples/widgets/widgets/wiggly/wigglywidget.cpp4
-rw-r--r--examples/xml/dombookmarks/xbeltree.h2
-rw-r--r--mkspecs/android-clang/qplatformdefs.h5
-rw-r--r--mkspecs/android-g++/qplatformdefs.h5
-rw-r--r--mkspecs/common/aix/qplatformdefs.h3
-rw-r--r--mkspecs/common/android/qplatformdefs.h5
-rw-r--r--mkspecs/common/bsd/qplatformdefs.h3
-rw-r--r--mkspecs/common/gcc-base-unix.conf1
-rw-r--r--mkspecs/common/integrity/qplatformdefs.h3
-rw-r--r--mkspecs/common/mac/qplatformdefs.h3
-rw-r--r--mkspecs/common/msvc-version.conf14
-rw-r--r--mkspecs/common/posix/qplatformdefs.h1
-rw-r--r--mkspecs/common/qnx/qplatformdefs.h3
-rw-r--r--mkspecs/darwin-g++/qplatformdefs.h3
-rw-r--r--mkspecs/devices/linux-rcar-m3-g++/qmake.conf17
-rw-r--r--mkspecs/devices/linux-rcar-m3-g++/qplatformdefs.h40
-rw-r--r--mkspecs/features/data/android/dx.bat108
-rw-r--r--mkspecs/features/default_post.prf1
-rw-r--r--mkspecs/features/exclusive_builds.prf4
-rw-r--r--mkspecs/features/java.prf27
-rw-r--r--mkspecs/features/qt_build_config.prf1
-rw-r--r--mkspecs/features/qt_docs.prf6
-rw-r--r--mkspecs/features/qt_plugin.prf2
-rw-r--r--mkspecs/features/qt_tracepoints.prf54
-rw-r--r--mkspecs/features/simd.prf29
-rw-r--r--mkspecs/haiku-g++/qplatformdefs.h3
-rw-r--r--mkspecs/hpuxi-g++-64/qplatformdefs.h3
-rw-r--r--mkspecs/hurd-g++/qplatformdefs.h3
-rw-r--r--mkspecs/linux-clang/qplatformdefs.h3
-rw-r--r--mkspecs/linux-g++/qplatformdefs.h3
-rw-r--r--mkspecs/linux-llvm/qplatformdefs.h3
-rw-r--r--mkspecs/linux-lsb-g++/qplatformdefs.h3
-rw-r--r--mkspecs/lynxos-g++/qplatformdefs.h3
-rw-r--r--mkspecs/macx-clang/qmake.conf21
-rw-r--r--mkspecs/macx-g++/qmake.conf2
-rw-r--r--mkspecs/macx-icc/qmake.conf2
-rw-r--r--mkspecs/solaris-cc-64/qplatformdefs.h3
-rw-r--r--mkspecs/solaris-cc/qplatformdefs.h3
-rw-r--r--mkspecs/solaris-g++-64/qplatformdefs.h3
-rw-r--r--mkspecs/solaris-g++/qplatformdefs.h3
-rw-r--r--mkspecs/unsupported/qnx-X11-g++/qplatformdefs.h3
-rw-r--r--qmake/Makefile.unix52
-rw-r--r--qmake/Makefile.win327
-rw-r--r--qmake/doc/qmake.qdocconf1
-rw-r--r--qmake/doc/src/qmake-manual.qdoc12
-rw-r--r--qmake/generators/win32/registry.cpp4
-rw-r--r--qmake/qmake.pro3
-rw-r--r--src/3rdparty/harfbuzz-ng/NEWS276
-rw-r--r--src/3rdparty/harfbuzz-ng/README9
-rw-r--r--src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro19
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-var.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/patches/0001-Qt-specific-workaround-for-AAT-shaper.patch58
-rw-r--r--src/3rdparty/harfbuzz-ng/qt_attribution.json2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-atomic-private.hh12
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-blob.cc27
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-private.hh144
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc42
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer.cc230
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer.h67
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-common.cc470
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-common.h60
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-coretext.cc337
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-coretext.h4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-debug.hh431
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-deprecated.h4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-dsalgs.hh167
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-face-private.hh12
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-face.cc53
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-face.h5
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font-private.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font.cc210
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font.h29
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-mutex-private.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-object-private.hh10
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-open-file-private.hh56
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh277
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-cbdt-table.hh183
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-cmap-table.hh247
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-font.cc534
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-glyf-table.hh120
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-head-table.hh28
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-hhea-table.hh23
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh123
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh394
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common-private.hh261
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gdef-table.hh32
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh142
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh102
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh478
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-jstf-table.hh4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-private.hh44
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc91
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-map-private.hh38
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-map.cc25
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-math-table.hh722
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-math.cc33
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-maxp-table.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-name-table.hh24
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh70
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-post-macroman.hh294
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh187
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-fallback.hh18
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-table.hh29
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-win1256.hh32
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc134
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc22
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc36
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc20
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh1616
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-private.hh11
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-table.cc92
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc129
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh378
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc52
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh58
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc35
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc20
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-machine.hh437
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-private.hh3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-table.cc147
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use.cc44
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc9
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc74
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh6
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc151
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-tag.cc110
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh149
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh209
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-hvar-table.hh165
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var-mvar-table.hh114
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var.cc159
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-var.h105
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-private.hh587
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set-digest-private.hh179
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set-private.hh647
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set.cc9
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set.h3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape-plan.cc65
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape.cc258
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape.h16
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper-private.hh32
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper.cc6
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-string-array.hh81
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh33
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-unicode.cc4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-utf-private.hh18
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-version.h6
-rw-r--r--src/3rdparty/sqlite.pri1
-rw-r--r--src/3rdparty/sqlite/sqlite3.c13650
-rw-r--r--src/3rdparty/sqlite/sqlite3.h321
-rw-r--r--src/android/jar/bundledjar.pro3
-rw-r--r--src/android/jar/distributedjar.pro2
-rw-r--r--src/android/jar/jar.pri26
-rw-r--r--src/android/jar/jar.pro31
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java4
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java134
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java4
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtThread.java112
-rw-r--r--src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java4
-rw-r--r--src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp14
-rw-r--r--src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp12
-rw-r--r--src/concurrent/qtconcurrentexception.h9
-rw-r--r--src/concurrent/qtconcurrentfilter.cpp92
-rw-r--r--src/concurrent/qtconcurrentfilter.h60
-rw-r--r--src/concurrent/qtconcurrentfilterkernel.h8
-rw-r--r--src/concurrent/qtconcurrentfunctionwrappers.h6
-rw-r--r--src/concurrent/qtconcurrentiteratekernel.cpp50
-rw-r--r--src/concurrent/qtconcurrentiteratekernel.h6
-rw-r--r--src/concurrent/qtconcurrentmap.cpp143
-rw-r--r--src/concurrent/qtconcurrentmap.h50
-rw-r--r--src/concurrent/qtconcurrentmapkernel.h9
-rw-r--r--src/concurrent/qtconcurrentmedian.h4
-rw-r--r--src/concurrent/qtconcurrentreducekernel.h20
-rw-r--r--src/concurrent/qtconcurrentrun.cpp9
-rw-r--r--src/concurrent/qtconcurrentrun.h7
-rw-r--r--src/concurrent/qtconcurrentthreadengine.cpp42
-rw-r--r--src/concurrent/qtconcurrentthreadengine.h12
-rw-r--r--src/corelib/animation/qabstractanimation.cpp8
-rw-r--r--src/corelib/animation/qabstractanimation.h10
-rw-r--r--src/corelib/animation/qabstractanimation_p.h10
-rw-r--r--src/corelib/animation/qanimationgroup.h4
-rw-r--r--src/corelib/animation/qparallelanimationgroup.h12
-rw-r--r--src/corelib/animation/qparallelanimationgroup_p.h2
-rw-r--r--src/corelib/animation/qpauseanimation.h10
-rw-r--r--src/corelib/animation/qpropertyanimation.h10
-rw-r--r--src/corelib/animation/qsequentialanimationgroup.h12
-rw-r--r--src/corelib/animation/qsequentialanimationgroup_p.h4
-rw-r--r--src/corelib/animation/qvariantanimation.cpp2
-rw-r--r--src/corelib/animation/qvariantanimation.h12
-rw-r--r--src/corelib/arch/qatomic_cxx11.h8
-rw-r--r--src/corelib/codecs/qiconvcodec.cpp4
-rw-r--r--src/corelib/codecs/qicucodec_p.h10
-rw-r--r--src/corelib/codecs/qisciicodec_p.h8
-rw-r--r--src/corelib/codecs/qlatincodec_p.h20
-rw-r--r--src/corelib/codecs/qtextcodec.cpp4
-rw-r--r--src/corelib/codecs/qtextcodec.h6
-rw-r--r--src/corelib/codecs/qtsciicodec_p.h8
-rw-r--r--src/corelib/codecs/qutfcodec.cpp163
-rw-r--r--src/corelib/codecs/qutfcodec_p.h59
-rw-r--r--src/corelib/configure.json36
-rw-r--r--src/corelib/corelib.pro17
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp2
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp2
-rw-r--r--src/corelib/global/global.pri21
-rw-r--r--src/corelib/global/qcompilerdetection.h99
-rw-r--r--src/corelib/global/qconfig-bootstrapped.h3
-rw-r--r--src/corelib/global/qendian.h4
-rw-r--r--src/corelib/global/qendian.qdoc84
-rw-r--r--src/corelib/global/qflags.h48
-rw-r--r--src/corelib/global/qfloat16.cpp99
-rw-r--r--src/corelib/global/qfloat16.h3
-rw-r--r--src/corelib/global/qfloat16_f16c.c91
-rw-r--r--src/corelib/global/qglobal.cpp358
-rw-r--r--src/corelib/global/qglobal.h87
-rw-r--r--src/corelib/global/qglobalstatic.qdoc12
-rw-r--r--src/corelib/global/qlibraryinfo.cpp10
-rw-r--r--src/corelib/global/qlogging.cpp288
-rw-r--r--src/corelib/global/qlogging.h17
-rw-r--r--src/corelib/global/qnamespace.h45
-rw-r--r--src/corelib/global/qnamespace.qdoc90
-rw-r--r--src/corelib/global/qnumeric_p.h280
-rw-r--r--src/corelib/global/qrandom.cpp165
-rw-r--r--src/corelib/global/qsysinfo.h2
-rw-r--r--src/corelib/global/qsystemdetection.h35
-rw-r--r--src/corelib/global/qtrace_p.h126
-rw-r--r--src/corelib/global/qversiontagging.cpp10
-rw-r--r--src/corelib/io/QTEMPORARYFILE_LICENSE.txt26
-rw-r--r--src/corelib/io/io.pri6
-rw-r--r--src/corelib/io/qbuffer.cpp4
-rw-r--r--src/corelib/io/qbuffer.h26
-rw-r--r--src/corelib/io/qdatastream.cpp1399
-rw-r--r--src/corelib/io/qdatastream.h465
-rw-r--r--src/corelib/io/qdebug.cpp123
-rw-r--r--src/corelib/io/qdir.cpp1
-rw-r--r--src/corelib/io/qfile.cpp10
-rw-r--r--src/corelib/io/qfile.h14
-rw-r--r--src/corelib/io/qfiledevice.h20
-rw-r--r--src/corelib/io/qfiledevice_p.h2
-rw-r--r--src/corelib/io/qfileselector.h2
-rw-r--r--src/corelib/io/qfilesystemiterator_unix.cpp17
-rw-r--r--src/corelib/io/qfilesystemwatcher.h4
-rw-r--r--src/corelib/io/qfilesystemwatcher_fsevents.mm2
-rw-r--r--src/corelib/io/qfilesystemwatcher_inotify_p.h4
-rw-r--r--src/corelib/io/qfilesystemwatcher_polling_p.h4
-rw-r--r--src/corelib/io/qfsfileengine.cpp64
-rw-r--r--src/corelib/io/qfsfileengine_iterator_p.h8
-rw-r--r--src/corelib/io/qfsfileengine_p.h79
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp15
-rw-r--r--src/corelib/io/qfsfileengine_win.cpp7
-rw-r--r--src/corelib/io/qiodevice.cpp17
-rw-r--r--src/corelib/io/qiodevice.h6
-rw-r--r--src/corelib/io/qiodevice_p.h4
-rw-r--r--src/corelib/io/qlockfile.cpp31
-rw-r--r--src/corelib/io/qlockfile_p.h16
-rw-r--r--src/corelib/io/qlockfile_unix.cpp2
-rw-r--r--src/corelib/io/qlockfile_win.cpp4
-rw-r--r--src/corelib/io/qnoncontiguousbytedevice_p.h58
-rw-r--r--src/corelib/io/qprocess.cpp9
-rw-r--r--src/corelib/io/qprocess.h26
-rw-r--r--src/corelib/io/qprocess_p.h2
-rw-r--r--src/corelib/io/qprocess_unix.cpp2
-rw-r--r--src/corelib/io/qprocess_win.cpp4
-rw-r--r--src/corelib/io/qresource.cpp6
-rw-r--r--src/corelib/io/qresource_iterator_p.h6
-rw-r--r--src/corelib/io/qresource_p.h60
-rw-r--r--src/corelib/io/qsavefile.cpp8
-rw-r--r--src/corelib/io/qsavefile.h10
-rw-r--r--src/corelib/io/qsettings.h14
-rw-r--r--src/corelib/io/qsettings_mac.cpp2
-rw-r--r--src/corelib/io/qsettings_p.h18
-rw-r--r--src/corelib/io/qstandardpaths_mac.mm29
-rw-r--r--src/corelib/io/qstandardpaths_unix.cpp4
-rw-r--r--src/corelib/io/qstorageinfo_mac.cpp6
-rw-r--r--src/corelib/io/qstorageinfo_unix.cpp239
-rw-r--r--src/corelib/io/qstorageinfo_win.cpp4
-rw-r--r--src/corelib/io/qt_attribution.json15
-rw-r--r--src/corelib/io/qtemporarydir.cpp6
-rw-r--r--src/corelib/io/qtemporarydir.h2
-rw-r--r--src/corelib/io/qtemporaryfile.cpp13
-rw-r--r--src/corelib/io/qtemporaryfile.h4
-rw-r--r--src/corelib/io/qtemporaryfile_p.h7
-rw-r--r--src/corelib/io/qtextstream.h287
-rw-r--r--src/corelib/io/qurl.h2
-rw-r--r--src/corelib/io/qurlidna.cpp5
-rw-r--r--src/corelib/io/qurlrecode.cpp4
-rw-r--r--src/corelib/io/qwindowspipereader.cpp2
-rw-r--r--src/corelib/io/qwindowspipewriter.cpp2
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp175
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.h63
-rw-r--r--src/corelib/itemmodels/qabstractproxymodel.h46
-rw-r--r--src/corelib/itemmodels/qidentityproxymodel.h40
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.cpp10
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.h2
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp20
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.h70
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.h22
-rw-r--r--src/corelib/json/json.pri17
-rw-r--r--src/corelib/json/qjson_p.h781
-rw-r--r--src/corelib/json/qjsonarray.cpp21
-rw-r--r--src/corelib/json/qjsonarray.h274
-rw-r--r--src/corelib/json/qjsondocument.cpp667
-rw-r--r--src/corelib/json/qjsondocument.h179
-rw-r--r--src/corelib/json/qjsonobject.h271
-rw-r--r--src/corelib/json/qjsonvalue.h255
-rw-r--r--src/corelib/kernel/qabstracteventdispatcher.cpp6
-rw-r--r--src/corelib/kernel/qabstracteventdispatcher.h10
-rw-r--r--src/corelib/kernel/qcore_mac.cpp95
-rw-r--r--src/corelib/kernel/qcore_mac_p.h31
-rw-r--r--src/corelib/kernel/qcore_unix.cpp2
-rw-r--r--src/corelib/kernel/qcore_unix_p.h2
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp37
-rw-r--r--src/corelib/kernel/qcoreapplication.h10
-rw-r--r--src/corelib/kernel/qdeadlinetimer.cpp16
-rw-r--r--src/corelib/kernel/qdeadlinetimer.h2
-rw-r--r--src/corelib/kernel/qeventdispatcher_cf.mm87
-rw-r--r--src/corelib/kernel/qeventdispatcher_cf_p.h20
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib_p.h24
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix_p.h26
-rw-r--r--src/corelib/kernel/qeventloop.cpp14
-rw-r--r--src/corelib/kernel/qeventloop.h4
-rw-r--r--src/corelib/kernel/qfunctions_vxworks.h3
-rw-r--r--src/corelib/kernel/qjni.cpp2
-rw-r--r--src/corelib/kernel/qjnihelpers.cpp14
-rw-r--r--src/corelib/kernel/qjnionload.cpp2
-rw-r--r--src/corelib/kernel/qmetaobject.cpp48
-rw-r--r--src/corelib/kernel/qmetaobject.h38
-rw-r--r--src/corelib/kernel/qmetatype.cpp9
-rw-r--r--src/corelib/kernel/qmetatype.h111
-rw-r--r--src/corelib/kernel/qobject.cpp49
-rw-r--r--src/corelib/kernel/qobject.h69
-rw-r--r--src/corelib/kernel/qobject_impl.h4
-rw-r--r--src/corelib/kernel/qobject_p.h16
-rw-r--r--src/corelib/kernel/qobjectdefs.h41
-rw-r--r--src/corelib/kernel/qobjectdefs_impl.h9
-rw-r--r--src/corelib/kernel/qpointer.cpp44
-rw-r--r--src/corelib/kernel/qsharedmemory.cpp8
-rw-r--r--src/corelib/kernel/qsharedmemory.h4
-rw-r--r--src/corelib/kernel/qsocketnotifier.cpp4
-rw-r--r--src/corelib/kernel/qsocketnotifier.h4
-rw-r--r--src/corelib/kernel/qsystemerror_p.h52
-rw-r--r--src/corelib/kernel/qtimer.cpp16
-rw-r--r--src/corelib/kernel/qtimer.h6
-rw-r--r--src/corelib/kernel/qtranslator.cpp2
-rw-r--r--src/corelib/kernel/qtranslator.h4
-rw-r--r--src/corelib/kernel/qvariant.cpp72
-rw-r--r--src/corelib/kernel/qvariant.h37
-rw-r--r--src/corelib/kernel/qvariant_p.h6
-rw-r--r--src/corelib/kernel/qwineventnotifier.h4
-rw-r--r--src/corelib/mimetypes/mimetypes.qrc2
-rw-r--r--src/corelib/mimetypes/qmimedatabase.cpp240
-rw-r--r--src/corelib/mimetypes/qmimedatabase_p.h27
-rw-r--r--src/corelib/mimetypes/qmimeglobpattern.cpp5
-rw-r--r--src/corelib/mimetypes/qmimeglobpattern_p.h2
-rw-r--r--src/corelib/mimetypes/qmimemagicrule.cpp2
-rw-r--r--src/corelib/mimetypes/qmimemagicrule_p.h2
-rw-r--r--src/corelib/mimetypes/qmimeprovider.cpp521
-rw-r--r--src/corelib/mimetypes/qmimeprovider_p.h80
-rw-r--r--src/corelib/mimetypes/qmimetype.cpp25
-rw-r--r--src/corelib/mimetypes/qmimetype_p.h3
-rw-r--r--src/corelib/mimetypes/qmimetypeparser.cpp1
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp5
-rw-r--r--src/corelib/plugin/qlibrary.cpp6
-rw-r--r--src/corelib/plugin/qlibrary.h8
-rw-r--r--src/corelib/plugin/qlibrary_unix.cpp35
-rw-r--r--src/corelib/plugin/qpluginloader.h4
-rw-r--r--src/corelib/plugin/quuid.cpp123
-rw-r--r--src/corelib/plugin/quuid.h25
-rw-r--r--src/corelib/qtcore.tracepoints5
-rw-r--r--src/corelib/serialization/.gitignore (renamed from src/corelib/xml/.gitignore)0
-rwxr-xr-xsrc/corelib/serialization/make-xml-parser.sh (renamed from src/corelib/xml/make-parser.sh)0
-rw-r--r--src/corelib/serialization/qdatastream.cpp1400
-rw-r--r--src/corelib/serialization/qdatastream.h466
-rw-r--r--src/corelib/serialization/qdatastream_p.h (renamed from src/corelib/io/qdatastream_p.h)0
-rw-r--r--src/corelib/serialization/qjson.cpp (renamed from src/corelib/json/qjson.cpp)0
-rw-r--r--src/corelib/serialization/qjson_p.h774
-rw-r--r--src/corelib/serialization/qjsonarray.cpp1258
-rw-r--r--src/corelib/serialization/qjsonarray.h274
-rw-r--r--src/corelib/serialization/qjsondocument.cpp667
-rw-r--r--src/corelib/serialization/qjsondocument.h177
-rw-r--r--src/corelib/serialization/qjsonobject.cpp (renamed from src/corelib/json/qjsonobject.cpp)0
-rw-r--r--src/corelib/serialization/qjsonobject.h271
-rw-r--r--src/corelib/serialization/qjsonparser.cpp (renamed from src/corelib/json/qjsonparser.cpp)0
-rw-r--r--src/corelib/serialization/qjsonparser_p.h (renamed from src/corelib/json/qjsonparser_p.h)0
-rw-r--r--src/corelib/serialization/qjsonvalue.cpp (renamed from src/corelib/json/qjsonvalue.cpp)0
-rw-r--r--src/corelib/serialization/qjsonvalue.h255
-rw-r--r--src/corelib/serialization/qjsonwriter.cpp (renamed from src/corelib/json/qjsonwriter.cpp)0
-rw-r--r--src/corelib/serialization/qjsonwriter_p.h (renamed from src/corelib/json/qjsonwriter_p.h)0
-rw-r--r--src/corelib/serialization/qtextstream.cpp (renamed from src/corelib/io/qtextstream.cpp)0
-rw-r--r--src/corelib/serialization/qtextstream.h287
-rw-r--r--src/corelib/serialization/qtextstream_p.h (renamed from src/corelib/io/qtextstream_p.h)0
-rw-r--r--src/corelib/serialization/qxmlstream.cpp4034
-rw-r--r--src/corelib/serialization/qxmlstream.g (renamed from src/corelib/xml/qxmlstream.g)0
-rw-r--r--src/corelib/serialization/qxmlstream.h540
-rw-r--r--src/corelib/serialization/qxmlstream_p.h1972
-rw-r--r--src/corelib/serialization/qxmlutils.cpp (renamed from src/corelib/xml/qxmlutils.cpp)0
-rw-r--r--src/corelib/serialization/qxmlutils_p.h (renamed from src/corelib/xml/qxmlutils_p.h)0
-rw-r--r--src/corelib/serialization/serialization.pri30
-rw-r--r--src/corelib/statemachine/qabstractstate.h4
-rw-r--r--src/corelib/statemachine/qabstracttransition.cpp2
-rw-r--r--src/corelib/statemachine/qabstracttransition.h4
-rw-r--r--src/corelib/statemachine/qeventtransition.h10
-rw-r--r--src/corelib/statemachine/qfinalstate.h8
-rw-r--r--src/corelib/statemachine/qhistorystate.cpp2
-rw-r--r--src/corelib/statemachine/qhistorystate.h10
-rw-r--r--src/corelib/statemachine/qsignaltransition.cpp3
-rw-r--r--src/corelib/statemachine/qsignaltransition.h14
-rw-r--r--src/corelib/statemachine/qsignaltransition_p.h2
-rw-r--r--src/corelib/statemachine/qstate.cpp9
-rw-r--r--src/corelib/statemachine/qstate.h10
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp14
-rw-r--r--src/corelib/statemachine/qstatemachine.h12
-rw-r--r--src/corelib/thread/qatomic.cpp182
-rw-r--r--src/corelib/thread/qatomic.h8
-rw-r--r--src/corelib/thread/qbasicatomic.h1
-rw-r--r--src/corelib/thread/qexception.cpp12
-rw-r--r--src/corelib/thread/qexception.h16
-rw-r--r--src/corelib/thread/qfutex_p.h142
-rw-r--r--src/corelib/thread/qfuture.h11
-rw-r--r--src/corelib/thread/qfuture.qdoc124
-rw-r--r--src/corelib/thread/qfutureinterface.cpp5
-rw-r--r--src/corelib/thread/qfutureinterface.h8
-rw-r--r--src/corelib/thread/qfutureinterface_p.h2
-rw-r--r--src/corelib/thread/qfuturesynchronizer.h3
-rw-r--r--src/corelib/thread/qfuturesynchronizer.qdoc20
-rw-r--r--src/corelib/thread/qfuturewatcher.cpp69
-rw-r--r--src/corelib/thread/qfuturewatcher.h24
-rw-r--r--src/corelib/thread/qfuturewatcher_p.h9
-rw-r--r--src/corelib/thread/qmutex.cpp4
-rw-r--r--src/corelib/thread/qmutex.h12
-rw-r--r--src/corelib/thread/qmutex_linux.cpp83
-rw-r--r--src/corelib/thread/qreadwritelock.h4
-rw-r--r--src/corelib/thread/qresultstore.cpp4
-rw-r--r--src/corelib/thread/qresultstore.h12
-rw-r--r--src/corelib/thread/qsemaphore.cpp206
-rw-r--r--src/corelib/thread/qsemaphore.h5
-rw-r--r--src/corelib/thread/qthread.cpp28
-rw-r--r--src/corelib/thread/qthread.h12
-rw-r--r--src/corelib/thread/qthread_p.h9
-rw-r--r--src/corelib/thread/qthread_unix.cpp102
-rw-r--r--src/corelib/thread/qthread_win.cpp20
-rw-r--r--src/corelib/thread/qthreadpool.cpp2
-rw-r--r--src/corelib/thread/qthreadpool.h2
-rw-r--r--src/corelib/thread/qthreadstorage.cpp12
-rw-r--r--src/corelib/thread/thread.pri31
-rw-r--r--src/corelib/tools/qalgorithms.h2
-rw-r--r--src/corelib/tools/qalgorithms.qdoc58
-rw-r--r--src/corelib/tools/qarraydata.h4
-rw-r--r--src/corelib/tools/qbitarray.cpp40
-rw-r--r--src/corelib/tools/qbitarray.h3
-rw-r--r--src/corelib/tools/qbytearray.cpp4
-rw-r--r--src/corelib/tools/qbytearray.h20
-rw-r--r--src/corelib/tools/qbytearraylist.h2
-rw-r--r--src/corelib/tools/qbytearraymatcher.cpp12
-rw-r--r--src/corelib/tools/qbytearraymatcher.h5
-rw-r--r--src/corelib/tools/qcache.qdoc32
-rw-r--r--src/corelib/tools/qchar.cpp14
-rw-r--r--src/corelib/tools/qchar.h20
-rw-r--r--src/corelib/tools/qcollator.h2
-rw-r--r--src/corelib/tools/qcollator_win.cpp8
-rw-r--r--src/corelib/tools/qcontiguouscache.cpp76
-rw-r--r--src/corelib/tools/qdatetime.cpp10
-rw-r--r--src/corelib/tools/qdatetime.h2
-rw-r--r--src/corelib/tools/qdatetimeparser.cpp26
-rw-r--r--src/corelib/tools/qdatetimeparser_p.h2
-rw-r--r--src/corelib/tools/qeasingcurve.cpp20
-rw-r--r--src/corelib/tools/qeasingcurve.h2
-rw-r--r--src/corelib/tools/qhash.cpp274
-rw-r--r--src/corelib/tools/qhash.h10
-rw-r--r--src/corelib/tools/qhashfunctions.h2
-rw-r--r--src/corelib/tools/qiterator.qdoc592
-rw-r--r--src/corelib/tools/qline.cpp2
-rw-r--r--src/corelib/tools/qlinkedlist.cpp211
-rw-r--r--src/corelib/tools/qlinkedlist.h4
-rw-r--r--src/corelib/tools/qlist.cpp294
-rw-r--r--src/corelib/tools/qlist.h4
-rw-r--r--src/corelib/tools/qlocale.cpp158
-rw-r--r--src/corelib/tools/qlocale.h32
-rw-r--r--src/corelib/tools/qlocale_tools.cpp5
-rw-r--r--src/corelib/tools/qlocale_tools_p.h1
-rw-r--r--src/corelib/tools/qlocale_win.cpp12
-rw-r--r--src/corelib/tools/qmap.cpp280
-rw-r--r--src/corelib/tools/qmap.h46
-rw-r--r--src/corelib/tools/qpair.qdoc34
-rw-r--r--src/corelib/tools/qqueue.cpp10
-rw-r--r--src/corelib/tools/qringbuffer.cpp250
-rw-r--r--src/corelib/tools/qringbuffer_p.h148
-rw-r--r--src/corelib/tools/qscopedpointer.cpp53
-rw-r--r--src/corelib/tools/qscopedpointer.h17
-rw-r--r--src/corelib/tools/qscopedvaluerollback.cpp8
-rw-r--r--src/corelib/tools/qset.qdoc196
-rw-r--r--src/corelib/tools/qshareddata.cpp126
-rw-r--r--src/corelib/tools/qshareddata.h12
-rw-r--r--src/corelib/tools/qsharedpointer.cpp187
-rw-r--r--src/corelib/tools/qsharedpointer.h1
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h39
-rw-r--r--src/corelib/tools/qsimd_p.h113
-rw-r--r--src/corelib/tools/qstack.cpp10
-rw-r--r--src/corelib/tools/qstring.cpp266
-rw-r--r--src/corelib/tools/qstring.h61
-rw-r--r--src/corelib/tools/qstringalgorithms.h6
-rw-r--r--src/corelib/tools/qstringbuilder.cpp13
-rw-r--r--src/corelib/tools/qstringbuilder.h66
-rw-r--r--src/corelib/tools/qstringview.cpp35
-rw-r--r--src/corelib/tools/qstringview.h7
-rw-r--r--src/corelib/tools/qtextboundaryfinder.h2
-rw-r--r--src/corelib/tools/qtimeline.cpp8
-rw-r--r--src/corelib/tools/qtimeline.h4
-rw-r--r--src/corelib/tools/qtimezone.cpp14
-rw-r--r--src/corelib/tools/qtimezoneprivate.cpp4
-rw-r--r--src/corelib/tools/qtimezoneprivate_p.h185
-rw-r--r--src/corelib/tools/qtimezoneprivate_win.cpp560
-rw-r--r--src/corelib/tools/qunicodetables.cpp14659
-rw-r--r--src/corelib/tools/qunicodetables_p.h42
-rw-r--r--src/corelib/tools/qunicodetools.cpp266
-rw-r--r--src/corelib/tools/qvarlengtharray.h42
-rw-r--r--src/corelib/tools/qvarlengtharray.qdoc155
-rw-r--r--src/corelib/tools/qvector.h88
-rw-r--r--src/corelib/tools/qvector.qdoc227
-rw-r--r--src/corelib/tools/qversionnumber.h2
-rw-r--r--src/corelib/tools/tools.pri1
-rw-r--r--src/corelib/xml/qxmlstream.cpp3979
-rw-r--r--src/corelib/xml/qxmlstream.h540
-rw-r--r--src/corelib/xml/qxmlstream_p.h73
-rw-r--r--src/corelib/xml/xml.pri10
-rw-r--r--src/dbus/qdbusabstractadaptor_p.h4
-rw-r--r--src/dbus/qdbusabstractinterface.cpp34
-rw-r--r--src/dbus/qdbusabstractinterface.h6
-rw-r--r--src/dbus/qdbusargument.cpp10
-rw-r--r--src/dbus/qdbusargument.h6
-rw-r--r--src/dbus/qdbusconnection.cpp16
-rw-r--r--src/dbus/qdbusconnection.h2
-rw-r--r--src/dbus/qdbusconnection_p.h20
-rw-r--r--src/dbus/qdbusconnectioninterface.cpp8
-rw-r--r--src/dbus/qdbusconnectioninterface.h4
-rw-r--r--src/dbus/qdbusconnectionmanager_p.h2
-rw-r--r--src/dbus/qdbusdemarshaller.cpp2
-rw-r--r--src/dbus/qdbuserror.cpp6
-rw-r--r--src/dbus/qdbusextratypes.cpp18
-rw-r--r--src/dbus/qdbusintegrator.cpp29
-rw-r--r--src/dbus/qdbusintegrator_p.h8
-rw-r--r--src/dbus/qdbusinterface.h8
-rw-r--r--src/dbus/qdbusmessage.cpp16
-rw-r--r--src/dbus/qdbusmetatype.cpp12
-rw-r--r--src/dbus/qdbuspendingcall.cpp2
-rw-r--r--src/dbus/qdbuspendingcall.h4
-rw-r--r--src/dbus/qdbuspendingreply.cpp24
-rw-r--r--src/dbus/qdbuspendingreply.h28
-rw-r--r--src/dbus/qdbusreply.cpp36
-rw-r--r--src/dbus/qdbusreply.h6
-rw-r--r--src/dbus/qdbusserver.cpp2
-rw-r--r--src/dbus/qdbusserver.h4
-rw-r--r--src/dbus/qdbusservicewatcher.h4
-rw-r--r--src/dbus/qdbusthreaddebug_p.h40
-rw-r--r--src/dbus/qdbusvirtualobject.h2
-rw-r--r--src/gui/accessible/qaccessible.cpp3
-rw-r--r--src/gui/accessible/qaccessible.h4
-rw-r--r--src/gui/accessible/qaccessiblebridge.h2
-rw-r--r--src/gui/accessible/qaccessiblecache.cpp2
-rw-r--r--src/gui/accessible/qaccessibleobject.h28
-rw-r--r--src/gui/accessible/qaccessibleplugin.h2
-rw-r--r--src/gui/configure.json64
-rw-r--r--src/gui/doc/snippets/code/src_gui_image_qicon.cpp3
-rw-r--r--src/gui/doc/snippets/code/src_gui_text_qfont.cpp2
-rw-r--r--src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp4
-rw-r--r--src/gui/gui.pro3
-rw-r--r--src/gui/image/qbitmap.h2
-rw-r--r--src/gui/image/qicon.cpp35
-rw-r--r--src/gui/image/qicon.h7
-rw-r--r--src/gui/image/qicon_p.h22
-rw-r--r--src/gui/image/qiconengineplugin.h2
-rw-r--r--src/gui/image/qiconloader.cpp88
-rw-r--r--src/gui/image/qiconloader_p.h27
-rw-r--r--src/gui/image/qimage.cpp72
-rw-r--r--src/gui/image/qimage.h34
-rw-r--r--src/gui/image/qimageiohandler.h2
-rw-r--r--src/gui/image/qmovie.h6
-rw-r--r--src/gui/image/qpaintengine_pic_p.h22
-rw-r--r--src/gui/image/qpicture.cpp4
-rw-r--r--src/gui/image/qpicture.h14
-rw-r--r--src/gui/image/qpictureformatplugin.h2
-rw-r--r--src/gui/image/qpixmap.h22
-rw-r--r--src/gui/image/qpixmap_blitter_p.h22
-rw-r--r--src/gui/image/qpixmap_raster_p.h38
-rw-r--r--src/gui/image/qpixmapcache.cpp2
-rw-r--r--src/gui/image/qpixmapcache.h2
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp126
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.h51
-rw-r--r--src/gui/itemmodels/qstandarditemmodel_p.h13
-rw-r--r--src/gui/kernel/qcursor.cpp6
-rw-r--r--src/gui/kernel/qcursor.h2
-rw-r--r--src/gui/kernel/qdnd_p.h6
-rw-r--r--src/gui/kernel/qdrag.cpp7
-rw-r--r--src/gui/kernel/qevent.cpp47
-rw-r--r--src/gui/kernel/qevent.h6
-rw-r--r--src/gui/kernel/qgenericplugin.h2
-rw-r--r--src/gui/kernel/qguiapplication.cpp308
-rw-r--r--src/gui/kernel/qguiapplication.h7
-rw-r--r--src/gui/kernel/qguiapplication_p.h8
-rw-r--r--src/gui/kernel/qhighdpiscaling.cpp6
-rw-r--r--src/gui/kernel/qkeysequence.cpp4
-rw-r--r--src/gui/kernel/qkeysequence.h8
-rw-r--r--src/gui/kernel/qoffscreensurface.h10
-rw-r--r--src/gui/kernel/qopenglcontext.h2
-rw-r--r--src/gui/kernel/qopenglcontext_p.h8
-rw-r--r--src/gui/kernel/qopenglwindow.cpp10
-rw-r--r--src/gui/kernel/qopenglwindow.h12
-rw-r--r--src/gui/kernel/qpaintdevicewindow.h8
-rw-r--r--src/gui/kernel/qpalette.h2
-rw-r--r--src/gui/kernel/qplatformcursor.cpp2
-rw-r--r--src/gui/kernel/qplatformdialoghelper.cpp1
-rw-r--r--src/gui/kernel/qplatformgraphicsbuffer.cpp4
-rw-r--r--src/gui/kernel/qplatformgraphicsbufferhelper.h2
-rw-r--r--src/gui/kernel/qplatformintegration.cpp4
-rw-r--r--src/gui/kernel/qplatformintegration.h3
-rw-r--r--src/gui/kernel/qplatformnativeinterface.cpp4
-rw-r--r--src/gui/kernel/qplatformoffscreensurface.cpp2
-rw-r--r--src/gui/kernel/qplatformoffscreensurface.h4
-rw-r--r--src/gui/kernel/qplatformsurface.h4
-rw-r--r--src/gui/kernel/qplatformtheme.cpp7
-rw-r--r--src/gui/kernel/qplatformtheme.h4
-rw-r--r--src/gui/kernel/qplatformwindow.cpp21
-rw-r--r--src/gui/kernel/qplatformwindow.h5
-rw-r--r--src/gui/kernel/qrasterwindow.cpp6
-rw-r--r--src/gui/kernel/qrasterwindow.h6
-rw-r--r--src/gui/kernel/qshapedpixmapdndwindow_p.h2
-rw-r--r--src/gui/kernel/qsimpledrag_p.h14
-rw-r--r--src/gui/kernel/qstylehints.cpp36
-rw-r--r--src/gui/kernel/qstylehints.h4
-rw-r--r--src/gui/kernel/qwindow.cpp2
-rw-r--r--src/gui/kernel/qwindow.h21
-rw-r--r--src/gui/kernel/qwindowsysteminterface.cpp85
-rw-r--r--src/gui/kernel/qwindowsysteminterface.h37
-rw-r--r--src/gui/kernel/qwindowsysteminterface_p.h29
-rw-r--r--src/gui/math3d/qgenericmatrix.cpp58
-rw-r--r--src/gui/math3d/qmatrix4x4.cpp4
-rw-r--r--src/gui/math3d/qmatrix4x4.h2
-rw-r--r--src/gui/opengl/qopengl.cpp4
-rw-r--r--src/gui/opengl/qopengl.h4
-rw-r--r--src/gui/opengl/qopenglbuffer.h2
-rw-r--r--src/gui/opengl/qopengldebug.h2
-rw-r--r--src/gui/opengl/qopenglengineshadermanager.cpp4
-rw-r--r--src/gui/opengl/qopenglext.h4
-rw-r--r--src/gui/opengl/qopenglextrafunctions.h2
-rw-r--r--src/gui/opengl/qopenglframebufferobject.cpp19
-rw-r--r--src/gui/opengl/qopenglframebufferobject.h12
-rw-r--r--src/gui/opengl/qopenglfunctions.cpp10
-rw-r--r--src/gui/opengl/qopenglfunctions.h27
-rw-r--r--src/gui/opengl/qopenglfunctions_1_0.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_1_1.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_1_2.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_1_3.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_1_4.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_1_5.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_2_0.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_2_0.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_2_1.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_2_1.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_0.cpp4
-rw-r--r--src/gui/opengl/qopenglfunctions_3_0.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_1.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_2_compatibility.cpp4
-rw-r--r--src/gui/opengl/qopenglfunctions_3_2_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_2_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_3_compatibility.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_3_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_3_3_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_0_compatibility.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_0_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_0_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_1_compatibility.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_1_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_1_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_2_compatibility.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_2_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_2_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_3_compatibility.cpp2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_3_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_3_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_4_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_4_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_5_compatibility.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_4_5_core.h2
-rw-r--r--src/gui/opengl/qopenglfunctions_es2.h2
-rw-r--r--src/gui/opengl/qopenglgradientcache_p.h4
-rw-r--r--src/gui/opengl/qopenglpaintdevice.cpp2
-rw-r--r--src/gui/opengl/qopenglpaintengine_p.h56
-rw-r--r--src/gui/opengl/qopenglshaderprogram.cpp2
-rw-r--r--src/gui/opengl/qopenglshaderprogram.h8
-rw-r--r--src/gui/opengl/qopengltexture.cpp2
-rw-r--r--src/gui/opengl/qopengltexture.h36
-rw-r--r--src/gui/opengl/qopengltexturecache_p.h4
-rw-r--r--src/gui/opengl/qopengltextureglyphcache_p.h16
-rw-r--r--src/gui/opengl/qopengltimerquery.h4
-rw-r--r--src/gui/opengl/qopenglversionfunctions.h2
-rw-r--r--src/gui/opengl/qopenglvertexarrayobject.h2
-rw-r--r--src/gui/opengl/qopenglvertexarrayobject_p.h8
-rw-r--r--src/gui/painting/qcolor.h16
-rw-r--r--src/gui/painting/qcompositionfunctions.cpp223
-rw-r--r--src/gui/painting/qcoregraphics.mm107
-rw-r--r--src/gui/painting/qcoregraphics_p.h3
-rw-r--r--src/gui/painting/qdrawhelper.cpp125
-rw-r--r--src/gui/painting/qdrawhelper_avx2.cpp165
-rw-r--r--src/gui/painting/qdrawhelper_neon.cpp40
-rw-r--r--src/gui/painting/qdrawhelper_p.h32
-rw-r--r--src/gui/painting/qmatrix.h2
-rw-r--r--src/gui/painting/qpaintengine_blitter_p.h64
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp12
-rw-r--r--src/gui/painting/qpaintengine_raster_p.h82
-rw-r--r--src/gui/painting/qpaintengineex.cpp37
-rw-r--r--src/gui/painting/qpaintengineex_p.h30
-rw-r--r--src/gui/painting/qpainter.cpp27
-rw-r--r--src/gui/painting/qpainter.h8
-rw-r--r--src/gui/painting/qpdf_p.h26
-rw-r--r--src/gui/painting/qpdfwriter.cpp12
-rw-r--r--src/gui/painting/qpen.h2
-rw-r--r--src/gui/painting/qplatformbackingstore.cpp2
-rw-r--r--src/gui/painting/qregion.cpp75
-rw-r--r--src/gui/painting/qregion.h3
-rw-r--r--src/gui/painting/qrgba64.qdoc8
-rw-r--r--src/gui/painting/qrgba64_p.h15
-rw-r--r--src/gui/painting/qt_mips_asm_dsp_p.h2
-rw-r--r--src/gui/painting/qtextureglyphcache_p.h6
-rw-r--r--src/gui/painting/qtransform.cpp8
-rw-r--r--src/gui/painting/qtransform.h6
-rw-r--r--src/gui/painting/qtriangulatingstroker.cpp2
-rw-r--r--src/gui/qtgui.tracepoints8
-rw-r--r--src/gui/text/qabstracttextdocumentlayout.h2
-rw-r--r--src/gui/text/qfont.cpp4
-rw-r--r--src/gui/text/qfont_p.h2
-rw-r--r--src/gui/text/qfontdatabase.cpp29
-rw-r--r--src/gui/text/qfontengine.cpp19
-rw-r--r--src/gui/text/qfontengine_p.h92
-rw-r--r--src/gui/text/qfontengine_qpf2_p.h48
-rw-r--r--src/gui/text/qfontmetrics.cpp174
-rw-r--r--src/gui/text/qfontmetrics.h25
-rw-r--r--src/gui/text/qharfbuzzng.cpp40
-rw-r--r--src/gui/text/qplatformfontdatabase.cpp13
-rw-r--r--src/gui/text/qstatictext.cpp40
-rw-r--r--src/gui/text/qstatictext_p.h2
-rw-r--r--src/gui/text/qtextdocument.cpp43
-rw-r--r--src/gui/text/qtextdocument.h8
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp6
-rw-r--r--src/gui/text/qtextdocumentlayout_p.h22
-rw-r--r--src/gui/text/qtextengine.cpp28
-rw-r--r--src/gui/text/qtextformat.cpp34
-rw-r--r--src/gui/text/qtexthtmlparser.cpp16
-rw-r--r--src/gui/text/qtextimagehandler_p.h4
-rw-r--r--src/gui/text/qtextlayout.cpp8
-rw-r--r--src/gui/text/qtextlayout.h8
-rw-r--r--src/gui/text/qtextobject.h6
-rw-r--r--src/gui/text/qtextodfwriter.cpp4
-rw-r--r--src/gui/text/qtextoption.cpp21
-rw-r--r--src/gui/text/qtexttable.h4
-rw-r--r--src/gui/text/qtexttable_p.h4
-rw-r--r--src/gui/util/qvalidator.h28
-rw-r--r--src/gui/vulkan/qplatformvulkaninstance.h61
-rw-r--r--src/gui/vulkan/qvulkaninstance.cpp4
-rw-r--r--src/network/access/access.pri59
-rw-r--r--src/network/access/http2/hpack.cpp22
-rw-r--r--src/network/access/http2/http2streams_p.h2
-rw-r--r--src/network/access/http2/huffman_p.h13
-rw-r--r--src/network/access/qabstractnetworkcache.h2
-rw-r--r--src/network/access/qabstractprotocolhandler.cpp4
-rw-r--r--src/network/access/qabstractprotocolhandler_p.h4
-rw-r--r--src/network/access/qhsts.cpp16
-rw-r--r--src/network/access/qhsts_p.h5
-rw-r--r--src/network/access/qhstspolicy.cpp18
-rw-r--r--src/network/access/qhttp2protocolhandler.cpp7
-rw-r--r--src/network/access/qhttp2protocolhandler_p.h6
-rw-r--r--src/network/access/qhttpmultipart.h6
-rw-r--r--src/network/access/qhttpmultipart_p.h20
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp16
-rw-r--r--src/network/access/qhttpnetworkconnection_p.h7
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp30
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel_p.h6
-rw-r--r--src/network/access/qhttpnetworkheader.cpp4
-rw-r--r--src/network/access/qhttpnetworkheader_p.h8
-rw-r--r--src/network/access/qhttpnetworkreply.cpp4
-rw-r--r--src/network/access/qhttpnetworkreply_p.h25
-rw-r--r--src/network/access/qhttpnetworkrequest.cpp18
-rw-r--r--src/network/access/qhttpnetworkrequest_p.h29
-rw-r--r--src/network/access/qhttpprotocolhandler.cpp4
-rw-r--r--src/network/access/qhttpprotocolhandler_p.h10
-rw-r--r--src/network/access/qhttpthreaddelegate.cpp12
-rw-r--r--src/network/access/qhttpthreaddelegate_p.h16
-rw-r--r--src/network/access/qnetworkaccessauthenticationmanager.cpp2
-rw-r--r--src/network/access/qnetworkaccesscache_p.h2
-rw-r--r--src/network/access/qnetworkaccesscachebackend_p.h6
-rw-r--r--src/network/access/qnetworkaccessdebugpipebackend_p.h10
-rw-r--r--src/network/access/qnetworkaccessfilebackend_p.h10
-rw-r--r--src/network/access/qnetworkaccessftpbackend.cpp2
-rw-r--r--src/network/access/qnetworkaccessftpbackend_p.h10
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp24
-rw-r--r--src/network/access/qnetworkaccessmanager.h13
-rw-r--r--src/network/access/qnetworkaccessmanager_p.h2
-rw-r--r--src/network/access/qnetworkcookiejar.h2
-rw-r--r--src/network/access/qnetworkdiskcache.h18
-rw-r--r--src/network/access/qnetworkfile_p.h2
-rw-r--r--src/network/access/qnetworkreply.h8
-rw-r--r--src/network/access/qnetworkreplydataimpl_p.h12
-rw-r--r--src/network/access/qnetworkreplyfileimpl_p.h12
-rw-r--r--src/network/access/qnetworkreplyhttpimpl.cpp14
-rw-r--r--src/network/access/qnetworkreplyhttpimpl_p.h28
-rw-r--r--src/network/access/qnetworkreplyimpl_p.h24
-rw-r--r--src/network/access/qnetworkrequest.cpp14
-rw-r--r--src/network/access/qnetworkrequest.h2
-rw-r--r--src/network/access/qspdyprotocolhandler.cpp4
-rw-r--r--src/network/access/qspdyprotocolhandler_p.h12
-rw-r--r--src/network/bearer/qnetworkconfigmanager.h2
-rw-r--r--src/network/bearer/qnetworksession.h6
-rw-r--r--src/network/configure.json34
-rw-r--r--src/network/kernel/kernel.pri29
-rw-r--r--src/network/kernel/qdnslookup.h8
-rw-r--r--src/network/kernel/qdnslookup_p.h4
-rw-r--r--src/network/kernel/qhostaddress.cpp226
-rw-r--r--src/network/kernel/qhostaddress.h6
-rw-r--r--src/network/kernel/qhostaddress_p.h45
-rw-r--r--src/network/kernel/qhostinfo.cpp6
-rw-r--r--src/network/kernel/qhostinfo.h2
-rw-r--r--src/network/kernel/qhostinfo_p.h4
-rw-r--r--src/network/kernel/qhostinfo_unix.cpp74
-rw-r--r--src/network/kernel/qnetworkdatagram.cpp11
-rw-r--r--src/network/kernel/qnetworkdatagram.h4
-rw-r--r--src/network/kernel/qnetworkinterface.cpp318
-rw-r--r--src/network/kernel/qnetworkinterface.h43
-rw-r--r--src/network/kernel/qnetworkinterface_linux.cpp443
-rw-r--r--src/network/kernel/qnetworkinterface_p.h23
-rw-r--r--src/network/kernel/qnetworkinterface_uikit_p.h262
-rw-r--r--src/network/kernel/qnetworkinterface_unix.cpp193
-rw-r--r--src/network/kernel/qnetworkinterface_unix_p.h102
-rw-r--r--src/network/kernel/qnetworkinterface_win.cpp58
-rw-r--r--src/network/kernel/qnetworkproxy.cpp12
-rw-r--r--src/network/network.pro2
-rw-r--r--src/network/socket/qabstractsocket.cpp33
-rw-r--r--src/network/socket/qabstractsocket.h27
-rw-r--r--src/network/socket/qabstractsocket_p.h3
-rw-r--r--src/network/socket/qabstractsocketengine_p.h3
-rw-r--r--src/network/socket/qhttpsocketengine.cpp21
-rw-r--r--src/network/socket/qhttpsocketengine_p.h74
-rw-r--r--src/network/socket/qlocalserver.h4
-rw-r--r--src/network/socket/qlocalserver_unix.cpp2
-rw-r--r--src/network/socket/qlocalsocket.h22
-rw-r--r--src/network/socket/qlocalsocket_p.h2
-rw-r--r--src/network/socket/qlocalsocket_tcp.cpp5
-rw-r--r--src/network/socket/qlocalsocket_unix.cpp5
-rw-r--r--src/network/socket/qnativesocketengine.cpp8
-rw-r--r--src/network/socket/qnativesocketengine_p.h68
-rw-r--r--src/network/socket/qnativesocketengine_unix.cpp30
-rw-r--r--src/network/socket/qnativesocketengine_win.cpp26
-rw-r--r--src/network/socket/qnativesocketengine_winrt.cpp4
-rw-r--r--src/network/socket/qnet_unix_p.h3
-rw-r--r--src/network/socket/qsctpserver.h2
-rw-r--r--src/network/socket/qsctpserver_p.h2
-rw-r--r--src/network/socket/qsctpsocket.h8
-rw-r--r--src/network/socket/qsctpsocket_p.h6
-rw-r--r--src/network/socket/qsocks5socketengine.cpp2
-rw-r--r--src/network/socket/qsocks5socketengine_p.h78
-rw-r--r--src/network/socket/qtcpserver.h6
-rw-r--r--src/network/socket/qtcpserver_p.h12
-rw-r--r--src/network/socket/qtcpsocket.h6
-rw-r--r--src/network/socket/qudpsocket.h4
-rw-r--r--src/network/socket/socket.pri9
-rw-r--r--src/network/ssl/qsslcertificate.h2
-rw-r--r--src/network/ssl/qsslconfiguration.cpp56
-rw-r--r--src/network/ssl/qsslconfiguration.h5
-rw-r--r--src/network/ssl/qsslconfiguration_p.h3
-rw-r--r--src/network/ssl/qsslcontext_openssl.cpp71
-rw-r--r--src/network/ssl/qsslcontext_openssl11.cpp4
-rw-r--r--src/network/ssl/qsslcontext_openssl_p.h1
-rw-r--r--src/network/ssl/qsslcontext_opensslpre11.cpp4
-rw-r--r--src/network/ssl/qssldiffiehellmanparameters.cpp2
-rw-r--r--src/network/ssl/qssldiffiehellmanparameters_openssl.cpp4
-rw-r--r--src/network/ssl/qsslkey_qt.cpp7
-rw-r--r--src/network/ssl/qsslsocket.cpp22
-rw-r--r--src/network/ssl/qsslsocket.h38
-rw-r--r--src/network/ssl/qsslsocket_mac.cpp70
-rw-r--r--src/network/ssl/qsslsocket_mac_p.h16
-rw-r--r--src/network/ssl/qsslsocket_openssl11.cpp3
-rw-r--r--src/network/ssl/qsslsocket_openssl_p.h18
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols.cpp18
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols_p.h16
-rw-r--r--src/network/ssl/qsslsocket_opensslpre11.cpp6
-rw-r--r--src/network/ssl/qsslsocket_p.h9
-rw-r--r--src/network/ssl/qsslsocket_winrt.cpp2
-rw-r--r--src/network/ssl/qsslsocket_winrt_p.h16
-rw-r--r--src/opengl/gl2paintengineex/qglengineshadermanager.cpp4
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h56
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h16
-rw-r--r--src/opengl/opengl.pro1
-rw-r--r--src/opengl/qgl.cpp22
-rw-r--r--src/opengl/qgl.h36
-rw-r--r--src/opengl/qgl_p.h8
-rw-r--r--src/opengl/qglbuffer.h2
-rw-r--r--src/opengl/qglcolormap.h2
-rw-r--r--src/opengl/qglframebufferobject.h6
-rw-r--r--src/opengl/qglframebufferobject_p.h10
-rw-r--r--src/opengl/qglfunctions.cpp4
-rw-r--r--src/opengl/qglfunctions.h6
-rw-r--r--src/opengl/qglpaintdevice_p.h14
-rw-r--r--src/opengl/qglpixelbuffer.h10
-rw-r--r--src/opengl/qglshaderprogram.h23
-rw-r--r--src/opengl/qgraphicsshadereffect.cpp2
-rw-r--r--src/opengl/qgraphicsshadereffect_p.h2
-rw-r--r--src/openglextensions/qopenglextensions.h502
-rw-r--r--src/platformheaders/eglfsfunctions/qeglfsfunctions.h59
-rw-r--r--src/platformheaders/eglfsfunctions/qeglfsfunctions.qdoc75
-rw-r--r--src/platformheaders/nativecontexts/qcocoanativecontext.h4
-rw-r--r--src/platformheaders/nativecontexts/qeglnativecontext.h5
-rw-r--r--src/platformheaders/nativecontexts/qglxnativecontext.h7
-rw-r--r--src/platformheaders/nativecontexts/qglxnativecontext.qdoc2
-rw-r--r--src/platformheaders/nativecontexts/qwglnativecontext.h5
-rw-r--r--src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc2
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_dummy_p.h2
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_static_p.h2
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_udev_p.h2
-rw-r--r--src/platformsupport/edid/qedidparser_p.h6
-rw-r--r--src/platformsupport/edid/qedidvendortable_p.h11
-rw-r--r--src/platformsupport/eglconvenience/qeglpbuffer_p.h4
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcontext_p.h16
-rw-r--r--src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h2
-rw-r--r--src/platformsupport/eventdispatchers/qwindowsguieventdispatcher_p.h4
-rw-r--r--src/platformsupport/fbconvenience/qfbbackingstore.cpp5
-rw-r--r--src/platformsupport/fbconvenience/qfbbackingstore_p.h10
-rw-r--r--src/platformsupport/fbconvenience/qfbscreen.cpp5
-rw-r--r--src/platformsupport/fbconvenience/qfbscreen_p.h14
-rw-r--r--src/platformsupport/fbconvenience/qfbwindow_p.h20
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp18
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h18
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h2
-rw-r--r--src/platformsupport/fontdatabases/fontdatabases.pro30
-rw-r--r--src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp10
-rw-r--r--src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h86
-rw-r--r--src/platformsupport/fontdatabases/freetype/qfreetypefontdatabase_p.h10
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm4
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h18
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm30
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h70
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp71
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp6
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h14
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h27
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp29
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h72
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp14
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h50
-rw-r--r--src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp8
-rw-r--r--src/platformsupport/graphics/qrasterbackingstore_p.h10
-rw-r--r--src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp4
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp7
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h6
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp6
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h3
-rw-r--r--src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h2
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp20
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h8
-rw-r--r--src/platformsupport/input/integrityhid/qintegrityhidmanager.cpp8
-rw-r--r--src/platformsupport/input/libinput/qlibinputhandler.cpp4
-rw-r--r--src/platformsupport/input/libinput/qlibinputkeyboard.cpp9
-rw-r--r--src/platformsupport/input/libinput/qlibinputpointer.cpp13
-rw-r--r--src/platformsupport/input/libinput/qlibinputtouch.cpp6
-rw-r--r--src/platformsupport/kmsconvenience/qkmsdevice.cpp345
-rw-r--r--src/platformsupport/kmsconvenience/qkmsdevice_p.h124
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor.cpp8
-rw-r--r--src/platformsupport/linuxaccessibility/bridge_p.h2
-rw-r--r--src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp6
-rw-r--r--src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h12
-rw-r--r--src/platformsupport/platformsupport.pro3
-rw-r--r--src/platformsupport/services/genericunix/qgenericunixservices.cpp107
-rw-r--r--src/platformsupport/services/genericunix/qgenericunixservices_p.h6
-rw-r--r--src/platformsupport/services/services.pro5
-rw-r--r--src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuadaptor.cpp2
-rw-r--r--src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar_p.h12
-rw-r--r--src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp10
-rw-r--r--src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h64
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp18
-rw-r--r--src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h20
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes.cpp18
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes_p.h29
-rw-r--r--src/platformsupport/themes/themes.pro2
-rw-r--r--src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp117
-rw-r--r--src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h100
-rw-r--r--src/platformsupport/windowsuiautomation/uiaattributeids_p.h88
-rw-r--r--src/platformsupport/windowsuiautomation/uiaclientinterfaces_p.h255
-rw-r--r--src/platformsupport/windowsuiautomation/uiacontroltypeids_p.h85
-rw-r--r--src/platformsupport/windowsuiautomation/uiaerrorids_p.h51
-rw-r--r--src/platformsupport/windowsuiautomation/uiaeventids_p.h79
-rw-r--r--src/platformsupport/windowsuiautomation/uiageneralids_p.h46
-rw-r--r--src/platformsupport/windowsuiautomation/uiapatternids_p.h78
-rw-r--r--src/platformsupport/windowsuiautomation/uiapropertyids_p.h212
-rw-r--r--src/platformsupport/windowsuiautomation/uiaserverinterfaces_p.h352
-rw-r--r--src/platformsupport/windowsuiautomation/uiatypes_p.h145
-rw-r--r--src/platformsupport/windowsuiautomation/windowsuiautomation.pro23
-rw-r--r--src/plugins/bearer/android/jar/bundledjar.pro3
-rw-r--r--src/plugins/bearer/android/jar/distributedjar.pro2
-rw-r--r--src/plugins/bearer/android/jar/jar.pri11
-rw-r--r--src/plugins/bearer/android/jar/jar.pro15
-rw-r--r--src/plugins/bearer/android/src/main.cpp2
-rw-r--r--src/plugins/bearer/android/src/qandroidbearerengine.h28
-rw-r--r--src/plugins/bearer/generic/main.cpp2
-rw-r--r--src/plugins/bearer/generic/qgenericengine.h18
-rw-r--r--src/plugins/bearer/qnetworksession_impl.h44
-rw-r--r--src/plugins/generic/evdevkeyboard/main.cpp2
-rw-r--r--src/plugins/generic/evdevmouse/main.cpp2
-rw-r--r--src/plugins/generic/evdevtablet/main.cpp2
-rw-r--r--src/plugins/generic/evdevtouch/main.cpp2
-rw-r--r--src/plugins/generic/generic.pro4
-rw-r--r--src/plugins/imageformats/jpeg/qjpeghandler.cpp3
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp32
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h10
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp2
-rw-r--r--src/plugins/platforminputcontexts/ibus/main.cpp2
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp71
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h21
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusproxy.cpp45
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusproxy.h50
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp107
-rw-r--r--src/plugins/platforms/android/qandroidplatformscreen.cpp5
-rw-r--r--src/plugins/platforms/bsdfb/qbsdfbscreen.cpp3
-rw-r--r--src/plugins/platforms/cocoa/cocoa.pro2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibility.h8
-rw-r--r--src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm20
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm41
-rw-r--r--src/plugins/platforms/cocoa/qcocoabackingstore.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoaclipboard.h8
-rw-r--r--src/plugins/platforms/cocoa/qcocoacolordialoghelper.h10
-rw-r--r--src/plugins/platforms/cocoa/qcocoacursor.h6
-rw-r--r--src/plugins/platforms/cocoa/qcocoacursor.mm5
-rw-r--r--src/plugins/platforms/cocoa/qcocoadrag.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoadrag.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.h22
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm18
-rw-r--r--src/plugins/platforms/cocoa/qcocoafontdialoghelper.h10
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.h14
-rw-r--r--src/plugins/platforms/cocoa/qcocoahelpers.h24
-rw-r--r--src/plugins/platforms/cocoa/qcocoahelpers.mm70
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.h6
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.h40
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.h39
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm234
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.h10
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.h26
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuloader.mm8
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.h8
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoansmenu.h86
-rw-r--r--src/plugins/platforms/cocoa/qcocoansmenu.mm311
-rw-r--r--src/plugins/platforms/cocoa/qcocoaprintdevice.h34
-rw-r--r--src/plugins/platforms/cocoa/qcocoaprintdevice.mm11
-rw-r--r--src/plugins/platforms/cocoa/qcocoaprintersupport.h10
-rw-r--r--src/plugins/platforms/cocoa/qcocoascreen.h40
-rw-r--r--src/plugins/platforms/cocoa/qcocoascreen.mm97
-rw-r--r--src/plugins/platforms/cocoa/qcocoaservices.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoasystemtrayicon.h18
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.h24
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.mm8
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h58
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm27
-rw-r--r--src/plugins/platforms/cocoa/qmultitouch_mac.mm3
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm49
-rw-r--r--src/plugins/platforms/cocoa/qnswindowdelegate.mm16
-rw-r--r--src/plugins/platforms/cocoa/qpaintengine_mac.mm98
-rw-r--r--src/plugins/platforms/cocoa/qpaintengine_mac_p.h6
-rw-r--r--src/plugins/platforms/cocoa/qprintengine_mac.mm2
-rw-r--r--src/plugins/platforms/cocoa/qprintengine_mac_p.h4
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h10
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp2
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp144
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h10
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h2
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h6
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp2
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h50
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h20
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp6
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h2
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp23
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsdeviceintegration_p.h4
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfsintegration.cpp8
-rw-r--r--src/plugins/platforms/eglfs/api/qeglfswindow_p.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro1
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro6
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp6
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp50
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h12
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp56
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp240
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.h34
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp80
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.h67
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp10
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp10
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro3
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmshelpers.h60
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp22
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h2
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp47
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h8
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.json3
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.pro31
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.cpp136
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.h78
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.cpp250
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.h81
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2main.cpp56
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.cpp365
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.h116
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.cpp627
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.h116
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.cpp333
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.h95
-rw-r--r--src/plugins/platforms/haiku/main.cpp2
-rw-r--r--src/plugins/platforms/haiku/main.h2
-rw-r--r--src/plugins/platforms/haiku/qhaikuapplication.h4
-rw-r--r--src/plugins/platforms/haiku/qhaikubuffer.cpp6
-rw-r--r--src/plugins/platforms/haiku/qhaikuclipboard.cpp10
-rw-r--r--src/plugins/platforms/haiku/qhaikuclipboard.h10
-rw-r--r--src/plugins/platforms/haiku/qhaikucursor.h2
-rw-r--r--src/plugins/platforms/haiku/qhaikuintegration.cpp6
-rw-r--r--src/plugins/platforms/haiku/qhaikuintegration.h14
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp6
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterbackingstore.h6
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterwindow.cpp4
-rw-r--r--src/plugins/platforms/haiku/qhaikurasterwindow.h16
-rw-r--r--src/plugins/platforms/haiku/qhaikuscreen.cpp8
-rw-r--r--src/plugins/platforms/haiku/qhaikuscreen.h10
-rw-r--r--src/plugins/platforms/haiku/qhaikuservices.h6
-rw-r--r--src/plugins/platforms/haiku/qhaikuwindow.cpp8
-rw-r--r--src/plugins/platforms/haiku/qhaikuwindow.h36
-rw-r--r--src/plugins/platforms/integrity/main.cpp2
-rw-r--r--src/plugins/platforms/integrity/qintegrityfbintegration.h18
-rw-r--r--src/plugins/platforms/integrity/qintegrityfbscreen.cpp13
-rw-r--r--src/plugins/platforms/integrity/qintegrityfbscreen.h4
-rw-r--r--src/plugins/platforms/integrity/qintegrityhidmanager.cpp8
-rw-r--r--src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm8
-rw-r--r--src/plugins/platforms/ios/qiosbackingstore.h2
-rw-r--r--src/plugins/platforms/ios/qiosclipboard.h8
-rw-r--r--src/plugins/platforms/ios/qiosclipboard.mm4
-rw-r--r--src/plugins/platforms/ios/qioscontext.h16
-rw-r--r--src/plugins/platforms/ios/qioseventdispatcher.h4
-rw-r--r--src/plugins/platforms/ios/qioseventdispatcher.mm39
-rw-r--r--src/plugins/platforms/ios/qiosfiledialog.h22
-rw-r--r--src/plugins/platforms/ios/qiosfiledialog.mm4
-rw-r--r--src/plugins/platforms/ios/qiosinputcontext.h22
-rw-r--r--src/plugins/platforms/ios/qiosintegration.h34
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm7
-rw-r--r--src/plugins/platforms/ios/qiosmenu.h52
-rw-r--r--src/plugins/platforms/ios/qiosmessagedialog.h6
-rw-r--r--src/plugins/platforms/ios/qiosmessagedialog.mm4
-rw-r--r--src/plugins/platforms/ios/qiosoptionalplugininterface.h2
-rw-r--r--src/plugins/platforms/ios/qiosscreen.h20
-rw-r--r--src/plugins/platforms/ios/qiostextinputoverlay.mm18
-rw-r--r--src/plugins/platforms/ios/qiostheme.h14
-rw-r--r--src/plugins/platforms/ios/qioswindow.h34
-rw-r--r--src/plugins/platforms/ios/quiview.h1
-rw-r--r--src/plugins/platforms/ios/quiview.mm94
-rw-r--r--src/plugins/platforms/linuxfb/main.cpp2
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp76
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbintegration.h18
-rw-r--r--src/plugins/platforms/minimal/main.cpp2
-rw-r--r--src/plugins/platforms/minimal/minimal.pro2
-rw-r--r--src/plugins/platforms/minimal/qminimalbackingstore.h6
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.cpp34
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.h19
-rw-r--r--src/plugins/platforms/minimalegl/main.cpp2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglbackingstore.h10
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglintegration.cpp4
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglintegration.h14
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglscreen.cpp2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglscreen.h6
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglwindow.h4
-rw-r--r--src/plugins/platforms/mirclient/qmirclientinput.cpp30
-rw-r--r--src/plugins/platforms/offscreen/main.cpp2
-rw-r--r--src/plugins/platforms/offscreen/qoffscreencommon.cpp6
-rw-r--r--src/plugins/platforms/offscreen/qoffscreencommon.h20
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenintegration.h22
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenintegration_x11.h18
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenwindow.h12
-rw-r--r--src/plugins/platforms/platforms.pro2
-rw-r--r--src/plugins/platforms/qnx/qnx.pro4
-rw-r--r--src/plugins/platforms/qnx/qqnxeglwindow.cpp130
-rw-r--r--src/plugins/platforms/qnx/qqnxeglwindow.h16
-rw-r--r--src/plugins/platforms/qnx/qqnxglcontext.cpp206
-rw-r--r--src/plugins/platforms/qnx/qqnxglcontext.h30
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.cpp53
-rw-r--r--src/plugins/platforms/qnx/qqnxnativeinterface.cpp2
-rw-r--r--src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp5
-rw-r--r--src/plugins/platforms/qnx/qqnxrasterwindow.cpp7
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.h10
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp19
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.h5
-rw-r--r--src/plugins/platforms/vnc/qvnc.cpp9
-rw-r--r--src/plugins/platforms/windows/accessible/accessible.pri19
-rw-r--r--src/plugins/platforms/windows/accessible/comutils.cpp280
-rw-r--r--src/plugins/platforms/windows/accessible/comutils.h64
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp1640
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.h358
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp245
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsaccessibility.h63
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp1223
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h176
-rw-r--r--src/plugins/platforms/windows/qwin10helpers.cpp3
-rw-r--r--src/plugins/platforms/windows/qwindowsbackingstore.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp34
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.h14
-rw-r--r--src/plugins/platforms/windows/qwindowscursor.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowscursor.h6
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp29
-rw-r--r--src/plugins/platforms/windows/qwindowsdrag.cpp14
-rw-r--r--src/plugins/platforms/windows/qwindowseglcontext.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsglcontext.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.cpp22
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.h4
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.cpp14
-rw-r--r--src/plugins/platforms/windows/qwindowsmousehandler.cpp40
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp35
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h1
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp140
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h65
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.cpp81
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.h78
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.cpp176
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.h71
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.cpp136
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.h69
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.cpp84
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.h67
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp638
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h105
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.cpp106
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.h77
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.cpp190
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.h73
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.cpp201
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.h71
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.cpp147
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.h69
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.cpp129
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.h68
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.cpp154
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.h69
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp261
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.h80
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp554
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.h88
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.cpp105
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.h68
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp221
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiautils.h89
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.cpp132
-rw-r--r--src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.h70
-rw-r--r--src/plugins/platforms/windows/uiautomation/uiautomation.pri43
-rw-r--r--src/plugins/platforms/windows/windows.pri4
-rw-r--r--src/plugins/platforms/winrt/qwinrtclipboard.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtcursor.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtdrag.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtfileengine.cpp2
-rw-r--r--src/plugins/platforms/winrt/qwinrtscreen.cpp53
-rw-r--r--src/plugins/platforms/winrt/qwinrtwindow.h4
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp12
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h8
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp10
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp4
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp4
-rw-r--r--src/plugins/platforms/xcb/nativepainting/qbackingstore_x11.cpp6
-rw-r--r--src/plugins/platforms/xcb/nativepainting/qpaintengine_x11_p.h38
-rw-r--r--src/plugins/platforms/xcb/nativepainting/qpixmap_x11_p.h34
-rw-r--r--src/plugins/platforms/xcb/nativepainting/qxcbnativepainting.cpp6
-rw-r--r--src/plugins/platforms/xcb/qxcbbackingstore.cpp215
-rw-r--r--src/plugins/platforms/xcb/qxcbclipboard.cpp5
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp29
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.h36
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp132
-rw-r--r--src/plugins/platforms/xcb/qxcbcursor.cpp72
-rw-r--r--src/plugins/platforms/xcb/qxcbdrag.cpp6
-rw-r--r--src/plugins/platforms/xcb/qxcbimage.cpp170
-rw-r--r--src/plugins/platforms/xcb/qxcbimage.h4
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbkeyboard.cpp539
-rw-r--r--src/plugins/platforms/xcb/qxcbkeyboard.h6
-rw-r--r--src/plugins/platforms/xcb/qxcbmime.cpp11
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.cpp110
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.h2
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.cpp18
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.h2
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp234
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.h20
-rw-r--r--src/plugins/platforms/xcb/xcb-plugin.pro2
-rw-r--r--src/plugins/platformthemes/flatpak/flatpak.json3
-rw-r--r--src/plugins/platformthemes/flatpak/flatpak.pro17
-rw-r--r--src/plugins/platformthemes/flatpak/main.cpp65
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp352
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h106
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpaktheme.cpp254
-rw-r--r--src/plugins/platformthemes/flatpak/qflatpaktheme.h90
-rw-r--r--src/plugins/platformthemes/gtk3/main.cpp2
-rw-r--r--src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.h42
-rw-r--r--src/plugins/platformthemes/gtk3/qgtk3theme.h12
-rw-r--r--src/plugins/platformthemes/platformthemes.pro2
-rw-r--r--src/plugins/printsupport/cups/main.cpp2
-rw-r--r--src/plugins/printsupport/cups/qcupsprintengine.cpp44
-rw-r--r--src/plugins/printsupport/cups/qcupsprintengine_p.h9
-rw-r--r--src/plugins/printsupport/cups/qcupsprintersupport_p.h10
-rw-r--r--src/plugins/printsupport/cups/qppdprintdevice.cpp46
-rw-r--r--src/plugins/printsupport/cups/qppdprintdevice.h38
-rw-r--r--src/plugins/printsupport/windows/qwindowsprintdevice.cpp4
-rw-r--r--src/plugins/printsupport/windows/qwindowsprintdevice.h30
-rw-r--r--src/plugins/printsupport/windows/qwindowsprintersupport.h10
-rw-r--r--src/plugins/sqldrivers/db2/qsql_db2.cpp89
-rw-r--r--src/plugins/sqldrivers/db2/qsql_db2_p.h26
-rw-r--r--src/plugins/sqldrivers/ibase/qsql_ibase.cpp19
-rw-r--r--src/plugins/sqldrivers/ibase/qsql_ibase_p.h32
-rw-r--r--src/plugins/sqldrivers/mysql/main.cpp2
-rw-r--r--src/plugins/sqldrivers/mysql/qsql_mysql.cpp36
-rw-r--r--src/plugins/sqldrivers/mysql/qsql_mysql_p.h28
-rw-r--r--src/plugins/sqldrivers/oci/qsql_oci.cpp232
-rw-r--r--src/plugins/sqldrivers/oci/qsql_oci_p.h24
-rw-r--r--src/plugins/sqldrivers/odbc/qsql_odbc.cpp42
-rw-r--r--src/plugins/sqldrivers/odbc/qsql_odbc_p.h28
-rw-r--r--src/plugins/sqldrivers/psql/main.cpp2
-rw-r--r--src/plugins/sqldrivers/psql/qsql_psql.cpp584
-rw-r--r--src/plugins/sqldrivers/psql/qsql_psql_p.h34
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp22
-rw-r--r--src/plugins/sqldrivers/sqlite/qsql_sqlite_p.h30
-rw-r--r--src/plugins/sqldrivers/sqlite/smain.cpp2
-rw-r--r--src/plugins/sqldrivers/sqlite2/qsql_sqlite2.cpp19
-rw-r--r--src/plugins/sqldrivers/sqlite2/qsql_sqlite2_p.h24
-rw-r--r--src/plugins/sqldrivers/tds/qsql_tds.cpp15
-rw-r--r--src/plugins/sqldrivers/tds/qsql_tds_p.h26
-rw-r--r--src/plugins/styles/mac/qmacstyle.qdoc28
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm973
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac_p_p.h16
-rw-r--r--src/plugins/styles/windowsvista/qwindowsvistastyle.cpp49
-rw-r--r--src/plugins/styles/windowsvista/qwindowsxpstyle.cpp108
-rw-r--r--src/plugins/styles/windowsvista/qwindowsxpstyle_p_p.h11
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog.h6
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix.cpp88
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix_p.h14
-rw-r--r--src/printsupport/dialogs/qprintdialog.h8
-rw-r--r--src/printsupport/dialogs/qprintdialog_unix.cpp894
-rw-r--r--src/printsupport/dialogs/qprintpreviewdialog.cpp10
-rw-r--r--src/printsupport/dialogs/qprintpreviewdialog.h4
-rw-r--r--src/printsupport/dialogs/qprintpropertieswidget.ui69
-rw-r--r--src/printsupport/dialogs/qprintsettingsoutput.ui90
-rw-r--r--src/printsupport/kernel/qcups.cpp111
-rw-r--r--src/printsupport/kernel/qcups_p.h36
-rw-r--r--src/printsupport/kernel/qpaintengine_alpha.cpp9
-rw-r--r--src/printsupport/kernel/qplatformprintdevice.cpp45
-rw-r--r--src/printsupport/kernel/qplatformprintdevice.h21
-rw-r--r--src/printsupport/kernel/qplatformprintersupport.cpp5
-rw-r--r--src/printsupport/kernel/qplatformprintersupport.h1
-rw-r--r--src/printsupport/kernel/qprint_p.h1
-rw-r--r--src/printsupport/kernel/qprintdevice.cpp31
-rw-r--r--src/printsupport/kernel/qprintdevice_p.h16
-rw-r--r--src/printsupport/kernel/qprintengine_pdf.cpp2
-rw-r--r--src/printsupport/kernel/qprintengine_pdf_p.h16
-rw-r--r--src/printsupport/kernel/qprintengine_win.cpp8
-rw-r--r--src/printsupport/kernel/qprinter.cpp12
-rw-r--r--src/printsupport/kernel/qprinter.h14
-rw-r--r--src/printsupport/kernel/qprinterinfo.cpp2
-rw-r--r--src/printsupport/widgets/qcupsjobwidget.cpp78
-rw-r--r--src/printsupport/widgets/qcupsjobwidget_p.h12
-rw-r--r--src/printsupport/widgets/qprintpreviewwidget.cpp8
-rw-r--r--src/printsupport/widgets/qprintpreviewwidget.h2
-rw-r--r--src/sql/doc/snippets/code/doc_src_sql-driver.cpp36
-rw-r--r--src/sql/doc/snippets/code/doc_src_sql-driver.qdoc12
-rw-r--r--src/sql/doc/src/sql-driver.qdoc43
-rw-r--r--src/sql/kernel/qsqlcachedresult_p.h20
-rw-r--r--src/sql/kernel/qsqldatabase.cpp18
-rw-r--r--src/sql/kernel/qsqldatabase.h9
-rw-r--r--src/sql/kernel/qsqldriver.cpp2
-rw-r--r--src/sql/kernel/qsqldriver.h4
-rw-r--r--src/sql/kernel/qsqldriverplugin.h2
-rw-r--r--src/sql/kernel/qsqlerror.cpp4
-rw-r--r--src/sql/kernel/qsqlfield.cpp6
-rw-r--r--src/sql/kernel/qsqlnulldriver_p.h52
-rw-r--r--src/sql/kernel/qsqlquery.cpp8
-rw-r--r--src/sql/kernel/qsqlresult.cpp12
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.cpp14
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.h24
-rw-r--r--src/sql/models/qsqltablemodel.h30
-rw-r--r--src/src.pro16
-rw-r--r--src/testlib/3rdparty/cycle_p.h17
-rw-r--r--src/testlib/doc/qttestlib.qdocconf1
-rw-r--r--src/testlib/doc/src/qttest-index.qdoc4
-rw-r--r--src/testlib/qabstractitemmodeltester.cpp807
-rw-r--r--src/testlib/qabstractitemmodeltester.h131
-rw-r--r--src/testlib/qbenchmarkperfevents.cpp4
-rw-r--r--src/testlib/qbenchmarkperfevents_p.h20
-rw-r--r--src/testlib/qcsvbenchmarklogger_p.h14
-rw-r--r--src/testlib/qplaintestlogger.cpp47
-rw-r--r--src/testlib/qsignalspy.h9
-rw-r--r--src/testlib/qsignalspy.qdoc2
-rw-r--r--src/testlib/qtest.h2
-rw-r--r--src/testlib/qtest_gui.h32
-rw-r--r--src/testlib/qtest_network.h12
-rw-r--r--src/testlib/qtestaccessible.h8
-rw-r--r--src/testlib/qtestcase.cpp112
-rw-r--r--src/testlib/qtestcase.h14
-rw-r--r--src/testlib/qtestcase.qdoc61
-rw-r--r--src/testlib/qtesteventloop.h6
-rw-r--r--src/testlib/qtestmouse.h37
-rw-r--r--src/testlib/qtesttable.cpp6
-rw-r--r--src/testlib/qtesttouch.h24
-rw-r--r--src/testlib/qxctestlogger_p.h16
-rw-r--r--src/testlib/testlib.pro8
-rw-r--r--src/tools/bootstrap/bootstrap.pro26
-rw-r--r--src/tools/moc/generator.cpp2
-rw-r--r--src/tools/moc/preprocessor.cpp6
-rw-r--r--src/tools/rcc/rcc.cpp6
-rw-r--r--src/tools/tracegen/etw.cpp228
-rw-r--r--src/tools/tracegen/etw.h48
-rw-r--r--src/tools/tracegen/helpers.cpp92
-rw-r--r--src/tools/tracegen/helpers.h57
-rw-r--r--src/tools/tracegen/lttng.cpp215
-rw-r--r--src/tools/tracegen/lttng.h48
-rw-r--r--src/tools/tracegen/panic.cpp59
-rw-r--r--src/tools/tracegen/panic.h45
-rw-r--r--src/tools/tracegen/provider.cpp304
-rw-r--r--src/tools/tracegen/provider.h95
-rw-r--r--src/tools/tracegen/qtheaders.cpp51
-rw-r--r--src/tools/tracegen/qtheaders.h45
-rw-r--r--src/tools/tracegen/tracegen.cpp109
-rw-r--r--src/tools/tracegen/tracegen.pro21
-rw-r--r--src/tools/uic/cpp/cppwritedeclaration.h14
-rw-r--r--src/tools/uic/cpp/cppwriteincludes.cpp31
-rw-r--r--src/tools/uic/cpp/cppwriteincludes.h25
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp13
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.h30
-rw-r--r--src/tools/uic/customwidgetsinfo.h6
-rw-r--r--src/tools/uic/databaseinfo.h4
-rw-r--r--src/tools/uic/driver.cpp1
-rw-r--r--src/tools/uic/driver.h4
-rw-r--r--src/tools/uic/ui4.cpp21
-rw-r--r--src/tools/uic/ui4.h24
-rw-r--r--src/tools/uic/uic.cpp2
-rw-r--r--src/tools/uic/validator.h12
-rw-r--r--src/widgets/accessible/complexwidgets.cpp32
-rw-r--r--src/widgets/accessible/complexwidgets_p.h36
-rw-r--r--src/widgets/accessible/itemviews_p.h178
-rw-r--r--src/widgets/accessible/qaccessiblemenu.cpp2
-rw-r--r--src/widgets/accessible/qaccessiblemenu_p.h54
-rw-r--r--src/widgets/accessible/qaccessiblewidget.h36
-rw-r--r--src/widgets/accessible/qaccessiblewidgets.cpp2
-rw-r--r--src/widgets/accessible/qaccessiblewidgets_p.h132
-rw-r--r--src/widgets/accessible/rangecontrols.cpp2
-rw-r--r--src/widgets/accessible/rangecontrols_p.h72
-rw-r--r--src/widgets/accessible/simplewidgets.cpp6
-rw-r--r--src/widgets/accessible/simplewidgets_p.h118
-rw-r--r--src/widgets/dialogs/qcolordialog.cpp87
-rw-r--r--src/widgets/dialogs/qcolordialog.h14
-rw-r--r--src/widgets/dialogs/qdialog.h2
-rw-r--r--src/widgets/dialogs/qdialog_p.h2
-rw-r--r--src/widgets/dialogs/qerrormessage.cpp4
-rw-r--r--src/widgets/dialogs/qerrormessage.h6
-rw-r--r--src/widgets/dialogs/qfiledialog.cpp12
-rw-r--r--src/widgets/dialogs/qfiledialog.h38
-rw-r--r--src/widgets/dialogs/qfiledialog_p.h22
-rw-r--r--src/widgets/dialogs/qfileinfogatherer_p.h9
-rw-r--r--src/widgets/dialogs/qfilesystemmodel.cpp93
-rw-r--r--src/widgets/dialogs/qfilesystemmodel.h42
-rw-r--r--src/widgets/dialogs/qfilesystemmodel_p.h8
-rw-r--r--src/widgets/dialogs/qfontdialog.cpp2
-rw-r--r--src/widgets/dialogs/qfontdialog.h16
-rw-r--r--src/widgets/dialogs/qfontdialog_p.h6
-rw-r--r--src/widgets/dialogs/qfscompleter_p.h4
-rw-r--r--src/widgets/dialogs/qinputdialog.cpp16
-rw-r--r--src/widgets/dialogs/qinputdialog.h22
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp14
-rw-r--r--src/widgets/dialogs/qmessagebox.h18
-rw-r--r--src/widgets/dialogs/qprogressdialog.h14
-rw-r--r--src/widgets/dialogs/qsidebar_p.h20
-rw-r--r--src/widgets/dialogs/qwizard.cpp12
-rw-r--r--src/widgets/dialogs/qwizard.h22
-rw-r--r--src/widgets/dialogs/qwizard_win.cpp11
-rw-r--r--src/widgets/dialogs/qwizard_win_p.h4
-rw-r--r--src/widgets/doc/qtwidgets.qdocconf2
-rw-r--r--src/widgets/doc/snippets/common-table-model/model.cpp12
-rw-r--r--src/widgets/doc/snippets/common-table-model/model.h22
-rw-r--r--src/widgets/doc/snippets/javastyle.cpp8
-rw-r--r--src/widgets/doc/snippets/stringlistmodel/model.cpp6
-rw-r--r--src/widgets/doc/snippets/stringlistmodel/model.h16
-rw-r--r--src/widgets/effects/qgraphicseffect.h26
-rw-r--r--src/widgets/effects/qpixmapfilter_p.h14
-rw-r--r--src/widgets/graphicsview/qgraphicsanchorlayout.h14
-rw-r--r--src/widgets/graphicsview/qgraphicsanchorlayout_p.h4
-rw-r--r--src/widgets/graphicsview/qgraphicsgridlayout.h14
-rw-r--r--src/widgets/graphicsview/qgraphicsgridlayoutengine_p.h14
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp94
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.h272
-rw-r--r--src/widgets/graphicsview/qgraphicsitem_p.h22
-rw-r--r--src/widgets/graphicsview/qgraphicsitemanimation.h2
-rw-r--r--src/widgets/graphicsview/qgraphicslayout.h6
-rw-r--r--src/widgets/graphicsview/qgraphicslayoutitem.h2
-rw-r--r--src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h10
-rw-r--r--src/widgets/graphicsview/qgraphicslinearlayout.h16
-rw-r--r--src/widgets/graphicsview/qgraphicsproxywidget.cpp8
-rw-r--r--src/widgets/graphicsview/qgraphicsproxywidget.h66
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp2
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.h22
-rw-r--r--src/widgets/graphicsview/qgraphicsscene_bsp.cpp6
-rw-r--r--src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h20
-rw-r--r--src/widgets/graphicsview/qgraphicsscenelinearindex_p.h10
-rw-r--r--src/widgets/graphicsview/qgraphicstransform.h10
-rw-r--r--src/widgets/graphicsview/qgraphicsview.h56
-rw-r--r--src/widgets/graphicsview/qgraphicswidget.cpp10
-rw-r--r--src/widgets/graphicsview/qgraphicswidget.h34
-rw-r--r--src/widgets/graphicsview/qgraphicswidget_p.cpp2
-rw-r--r--src/widgets/graphicsview/qgraphicswidget_p.h16
-rw-r--r--src/widgets/graphicsview/qsimplex_p.cpp2
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate.cpp25
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate.h4
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp22
-rw-r--r--src/widgets/itemviews/qabstractitemview.h45
-rw-r--r--src/widgets/itemviews/qcolumnview.h40
-rw-r--r--src/widgets/itemviews/qcolumnview_p.h26
-rw-r--r--src/widgets/itemviews/qcolumnviewgrip_p.h10
-rw-r--r--src/widgets/itemviews/qdatawidgetmapper.h2
-rw-r--r--src/widgets/itemviews/qdirmodel.h34
-rw-r--r--src/widgets/itemviews/qheaderview.cpp132
-rw-r--r--src/widgets/itemviews/qheaderview.h61
-rw-r--r--src/widgets/itemviews/qheaderview_p.h8
-rw-r--r--src/widgets/itemviews/qitemdelegate.cpp22
-rw-r--r--src/widgets/itemviews/qitemdelegate.h18
-rw-r--r--src/widgets/itemviews/qitemeditorfactory.cpp18
-rw-r--r--src/widgets/itemviews/qitemeditorfactory_p.h2
-rw-r--r--src/widgets/itemviews/qlistview.cpp9
-rw-r--r--src/widgets/itemviews/qlistview.h70
-rw-r--r--src/widgets/itemviews/qlistwidget.cpp38
-rw-r--r--src/widgets/itemviews/qlistwidget.h24
-rw-r--r--src/widgets/itemviews/qlistwidget_p.h4
-rw-r--r--src/widgets/itemviews/qstyleditemdelegate.cpp13
-rw-r--r--src/widgets/itemviews/qstyleditemdelegate.h18
-rw-r--r--src/widgets/itemviews/qtableview.cpp23
-rw-r--r--src/widgets/itemviews/qtableview.h54
-rw-r--r--src/widgets/itemviews/qtablewidget.cpp16
-rw-r--r--src/widgets/itemviews/qtablewidget.h17
-rw-r--r--src/widgets/itemviews/qtreeview.cpp23
-rw-r--r--src/widgets/itemviews/qtreeview.h77
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp21
-rw-r--r--src/widgets/itemviews/qtreewidget.h16
-rw-r--r--src/widgets/itemviews/qtreewidget_p.h40
-rw-r--r--src/widgets/kernel/mac.pri2
-rw-r--r--src/widgets/kernel/qaction.cpp7
-rw-r--r--src/widgets/kernel/qaction.h4
-rw-r--r--src/widgets/kernel/qapplication.cpp29
-rw-r--r--src/widgets/kernel/qapplication.h10
-rw-r--r--src/widgets/kernel/qapplication_p.h29
-rw-r--r--src/widgets/kernel/qboxlayout.cpp2
-rw-r--r--src/widgets/kernel/qboxlayout.h28
-rw-r--r--src/widgets/kernel/qdesktopwidget.cpp43
-rw-r--r--src/widgets/kernel/qdesktopwidget.h60
-rw-r--r--src/widgets/kernel/qdesktopwidget.qdoc56
-rw-r--r--src/widgets/kernel/qdesktopwidget_p.h2
-rw-r--r--src/widgets/kernel/qformlayout.cpp2
-rw-r--r--src/widgets/kernel/qformlayout.h28
-rw-r--r--src/widgets/kernel/qgesture.h12
-rw-r--r--src/widgets/kernel/qgesturerecognizer.cpp2
-rw-r--r--src/widgets/kernel/qgridlayout.cpp2
-rw-r--r--src/widgets/kernel/qgridlayout.h26
-rw-r--r--src/widgets/kernel/qlayout.h24
-rw-r--r--src/widgets/kernel/qlayoutitem.cpp4
-rw-r--r--src/widgets/kernel/qopenglwidget.cpp30
-rw-r--r--src/widgets/kernel/qopenglwidget.h14
-rw-r--r--src/widgets/kernel/qshortcut.h4
-rw-r--r--src/widgets/kernel/qstackedlayout.cpp2
-rw-r--r--src/widgets/kernel/qstackedlayout.h18
-rw-r--r--src/widgets/kernel/qstandardgestures_p.h30
-rw-r--r--src/widgets/kernel/qtooltip.cpp13
-rw-r--r--src/widgets/kernel/qtooltip.h2
-rw-r--r--src/widgets/kernel/qwhatsthis.cpp14
-rw-r--r--src/widgets/kernel/qwhatsthis.h4
-rw-r--r--src/widgets/kernel/qwidget.cpp21
-rw-r--r--src/widgets/kernel/qwidget.h22
-rw-r--r--src/widgets/kernel/qwidget_p.h22
-rw-r--r--src/widgets/kernel/qwidgetaction.h4
-rw-r--r--src/widgets/kernel/qwidgetbackingstore.cpp2
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp23
-rw-r--r--src/widgets/kernel/qwidgetwindow_p.h8
-rw-r--r--src/widgets/kernel/qwindowcontainer_p.h2
-rw-r--r--src/widgets/statemachine/qbasickeyeventtransition_p.h4
-rw-r--r--src/widgets/statemachine/qbasicmouseeventtransition_p.h4
-rw-r--r--src/widgets/statemachine/qkeyeventtransition.h8
-rw-r--r--src/widgets/statemachine/qmouseeventtransition.h8
-rw-r--r--src/widgets/styles/images/closedock-10.pngbin0 -> 284 bytes
-rw-r--r--src/widgets/styles/images/closedock-16.pngbin516 -> 299 bytes
-rw-r--r--src/widgets/styles/images/closedock-20.pngbin0 -> 374 bytes
-rw-r--r--src/widgets/styles/images/closedock-32.pngbin0 -> 368 bytes
-rw-r--r--src/widgets/styles/images/closedock-48.pngbin0 -> 468 bytes
-rw-r--r--src/widgets/styles/images/closedock-64.pngbin0 -> 541 bytes
-rw-r--r--src/widgets/styles/images/closedock-down-macstyle-16.png (renamed from src/widgets/styles/images/closedock-down-16.png)bin578 -> 578 bytes
-rw-r--r--src/widgets/styles/images/closedock-macstyle-16.pngbin0 -> 516 bytes
-rw-r--r--src/widgets/styles/images/dockdock-down-macstyle-16.png (renamed from src/widgets/styles/images/dockdock-down-16.png)bin406 -> 406 bytes
-rw-r--r--src/widgets/styles/images/dockdock-macstyle-16.png (renamed from src/widgets/styles/images/dockdock-16.png)bin438 -> 438 bytes
-rw-r--r--src/widgets/styles/images/normalizedockup-10.pngbin0 -> 138 bytes
-rw-r--r--src/widgets/styles/images/normalizedockup-16.pngbin0 -> 256 bytes
-rw-r--r--src/widgets/styles/images/normalizedockup-20.pngbin0 -> 143 bytes
-rw-r--r--src/widgets/styles/images/normalizedockup-32.pngbin0 -> 273 bytes
-rw-r--r--src/widgets/styles/images/normalizedockup-48.pngbin0 -> 279 bytes
-rw-r--r--src/widgets/styles/images/normalizedockup-64.pngbin0 -> 291 bytes
-rw-r--r--src/widgets/styles/qcommonstyle.cpp82
-rw-r--r--src/widgets/styles/qcommonstyle.h46
-rw-r--r--src/widgets/styles/qdrawutil.h20
-rw-r--r--src/widgets/styles/qfusionstyle.cpp22
-rw-r--r--src/widgets/styles/qfusionstyle_p.h42
-rw-r--r--src/widgets/styles/qpixmapstyle_p.h32
-rw-r--r--src/widgets/styles/qproxystyle.h50
-rw-r--r--src/widgets/styles/qstyle.cpp21
-rw-r--r--src/widgets/styles/qstyle.h36
-rw-r--r--src/widgets/styles/qstyle.qrc20
-rw-r--r--src/widgets/styles/qstyleanimation_p.h12
-rw-r--r--src/widgets/styles/qstylehelper.cpp8
-rw-r--r--src/widgets/styles/qstylehelper_p.h1
-rw-r--r--src/widgets/styles/qstyleoption.cpp8
-rw-r--r--src/widgets/styles/qstyleoption.h8
-rw-r--r--src/widgets/styles/qstylepainter.h2
-rw-r--r--src/widgets/styles/qstyleplugin.h2
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp53
-rw-r--r--src/widgets/styles/qstylesheetstyle_p.h48
-rw-r--r--src/widgets/styles/qwindowsstyle.cpp148
-rw-r--r--src/widgets/styles/qwindowsstyle_p.h30
-rw-r--r--src/widgets/styles/qwindowsstyle_p_p.h2
-rw-r--r--src/widgets/util/qcompleter.h10
-rw-r--r--src/widgets/util/qcompleter_p.h26
-rw-r--r--src/widgets/util/qflickgesture.cpp2
-rw-r--r--src/widgets/util/qscroller.cpp58
-rw-r--r--src/widgets/util/qscroller_p.h1
-rw-r--r--src/widgets/util/qsystemtrayicon.h6
-rw-r--r--src/widgets/util/qsystemtrayicon_p.h8
-rw-r--r--src/widgets/util/qsystemtrayicon_x11.cpp12
-rw-r--r--src/widgets/util/qundogroup.h2
-rw-r--r--src/widgets/util/qundostack.h6
-rw-r--r--src/widgets/util/qundoview.cpp10
-rw-r--r--src/widgets/util/qundoview.h6
-rw-r--r--src/widgets/widgets.pro1
-rw-r--r--src/widgets/widgets/qabstractbutton.h26
-rw-r--r--src/widgets/widgets/qabstractscrollarea.cpp2
-rw-r--r--src/widgets/widgets/qabstractscrollarea.h38
-rw-r--r--src/widgets/widgets/qabstractscrollarea_p.h2
-rw-r--r--src/widgets/widgets/qabstractslider.h14
-rw-r--r--src/widgets/widgets/qabstractspinbox.cpp25
-rw-r--r--src/widgets/widgets/qabstractspinbox.h4
-rw-r--r--src/widgets/widgets/qbuttongroup.h2
-rw-r--r--src/widgets/widgets/qcalendarwidget.cpp84
-rw-r--r--src/widgets/widgets/qcalendarwidget.h16
-rw-r--r--src/widgets/widgets/qcheckbox.cpp16
-rw-r--r--src/widgets/widgets/qcheckbox.h20
-rw-r--r--src/widgets/widgets/qcombobox.cpp21
-rw-r--r--src/widgets/widgets/qcombobox.h38
-rw-r--r--src/widgets/widgets/qcommandlinkbutton.cpp2
-rw-r--r--src/widgets/widgets/qcommandlinkbutton.h16
-rw-r--r--src/widgets/widgets/qdatetimeedit.cpp12
-rw-r--r--src/widgets/widgets/qdatetimeedit.h18
-rw-r--r--src/widgets/widgets/qdatetimeedit_p.h34
-rw-r--r--src/widgets/widgets/qdial.cpp2
-rw-r--r--src/widgets/widgets/qdial.h20
-rw-r--r--src/widgets/widgets/qdialogbuttonbox.cpp2
-rw-r--r--src/widgets/widgets/qdialogbuttonbox.h12
-rw-r--r--src/widgets/widgets/qdockwidget.cpp68
-rw-r--r--src/widgets/widgets/qdockwidget.h12
-rw-r--r--src/widgets/widgets/qdockwidget_p.h24
-rw-r--r--src/widgets/widgets/qeffects.cpp13
-rw-r--r--src/widgets/widgets/qfocusframe.h8
-rw-r--r--src/widgets/widgets/qfontcombobox.cpp12
-rw-r--r--src/widgets/widgets/qfontcombobox.h6
-rw-r--r--src/widgets/widgets/qframe.h12
-rw-r--r--src/widgets/widgets/qgroupbox.cpp2
-rw-r--r--src/widgets/widgets/qgroupbox.h24
-rw-r--r--src/widgets/widgets/qkeysequenceedit.h12
-rw-r--r--src/widgets/widgets/qlabel.cpp14
-rw-r--r--src/widgets/widgets/qlabel.h32
-rw-r--r--src/widgets/widgets/qlcdnumber.h10
-rw-r--r--src/widgets/widgets/qlineedit.cpp25
-rw-r--r--src/widgets/widgets/qlineedit.h42
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp12
-rw-r--r--src/widgets/widgets/qlineedit_p.h8
-rw-r--r--src/widgets/widgets/qmaccocoaviewcontainer_mac.h2
-rw-r--r--src/widgets/widgets/qmaccocoaviewcontainer_mac.mm8
-rw-r--r--src/widgets/widgets/qmacnativewidget_mac.h2
-rw-r--r--src/widgets/widgets/qmacnativewidget_mac.mm3
-rw-r--r--src/widgets/widgets/qmainwindow.cpp4
-rw-r--r--src/widgets/widgets/qmainwindow.h6
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp22
-rw-r--r--src/widgets/widgets/qmainwindowlayout_p.h26
-rw-r--r--src/widgets/widgets/qmdiarea.cpp8
-rw-r--r--src/widgets/widgets/qmdiarea.h26
-rw-r--r--src/widgets/widgets/qmdiarea_p.h16
-rw-r--r--src/widgets/widgets/qmdisubwindow.cpp33
-rw-r--r--src/widgets/widgets/qmdisubwindow.h46
-rw-r--r--src/widgets/widgets/qmdisubwindow_p.h2
-rw-r--r--src/widgets/widgets/qmenu.cpp49
-rw-r--r--src/widgets/widgets/qmenu.h44
-rw-r--r--src/widgets/widgets/qmenu_p.h6
-rw-r--r--src/widgets/widgets/qmenubar.cpp48
-rw-r--r--src/widgets/widgets/qmenubar.h28
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp45
-rw-r--r--src/widgets/widgets/qplaintextedit.h67
-rw-r--r--src/widgets/widgets/qplaintextedit_p.h18
-rw-r--r--src/widgets/widgets/qprogressbar.cpp2
-rw-r--r--src/widgets/widgets/qprogressbar.h10
-rw-r--r--src/widgets/widgets/qpushbutton.cpp2
-rw-r--r--src/widgets/widgets/qpushbutton.h22
-rw-r--r--src/widgets/widgets/qradiobutton.cpp1
-rw-r--r--src/widgets/widgets/qradiobutton.h16
-rw-r--r--src/widgets/widgets/qrubberband.h14
-rw-r--r--src/widgets/widgets/qscrollarea.h18
-rw-r--r--src/widgets/widgets/qscrollbar.h24
-rw-r--r--src/widgets/widgets/qsizegrip.h22
-rw-r--r--src/widgets/widgets/qslider.h18
-rw-r--r--src/widgets/widgets/qspinbox.cpp12
-rw-r--r--src/widgets/widgets/qspinbox.h4
-rw-r--r--src/widgets/widgets/qsplashscreen.h4
-rw-r--r--src/widgets/widgets/qsplitter.cpp2
-rw-r--r--src/widgets/widgets/qsplitter.h30
-rw-r--r--src/widgets/widgets/qstackedwidget.cpp2
-rw-r--r--src/widgets/widgets/qstackedwidget.h4
-rw-r--r--src/widgets/widgets/qstatusbar.cpp2
-rw-r--r--src/widgets/widgets/qstatusbar.h10
-rw-r--r--src/widgets/widgets/qtabbar.cpp4
-rw-r--r--src/widgets/widgets/qtabbar.h30
-rw-r--r--src/widgets/widgets/qtabbar_p.h18
-rw-r--r--src/widgets/widgets/qtabwidget.h22
-rw-r--r--src/widgets/widgets/qtextbrowser.cpp2
-rw-r--r--src/widgets/widgets/qtextbrowser.h20
-rw-r--r--src/widgets/widgets/qtextedit.cpp6
-rw-r--r--src/widgets/widgets/qtextedit.h52
-rw-r--r--src/widgets/widgets/qtoolbar.cpp12
-rw-r--r--src/widgets/widgets/qtoolbar.h12
-rw-r--r--src/widgets/widgets/qtoolbarextension_p.h4
-rw-r--r--src/widgets/widgets/qtoolbarlayout_p.h24
-rw-r--r--src/widgets/widgets/qtoolbarseparator_p.h4
-rw-r--r--src/widgets/widgets/qtoolbox.cpp6
-rw-r--r--src/widgets/widgets/qtoolbox.h8
-rw-r--r--src/widgets/widgets/qtoolbutton.cpp2
-rw-r--r--src/widgets/widgets/qtoolbutton.h32
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol.cpp10
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol_p.h6
-rw-r--r--src/widgets/widgets/qwidgetresizehandler_p.h2
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp13
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p.h8
-rw-r--r--src/winmain/qtmain_win.cpp2
-rw-r--r--src/winmain/qtmain_winrt.cpp18
-rw-r--r--src/xml/dom/qdom.cpp120
-rw-r--r--src/xml/dom/qdom.h16
-rw-r--r--src/xml/sax/qxml.cpp9
-rw-r--r--src/xml/sax/qxml.h124
-rw-r--r--sync.profile1
-rw-r--r--tests/auto/concurrent/qtconcurrentmap/BLACKLIST1
-rw-r--r--tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp2
-rw-r--r--tests/auto/corelib/animation/qpauseanimation/BLACKLIST2
-rw-r--r--tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp10
-rw-r--r--tests/auto/corelib/corelib.pro5
-rw-r--r--tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp38
-rw-r--r--tests/auto/corelib/global/qglobal/qglobal.c117
-rw-r--r--tests/auto/corelib/global/qglobal/qglobal.pro2
-rw-r--r--tests/auto/corelib/global/qglobal/tst_qglobal.cpp17
-rw-r--r--tests/auto/corelib/global/qlogging/qlogging.pro6
-rw-r--r--tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp154
-rw-r--r--tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp5
-rw-r--r--tests/auto/corelib/io/io.pro6
-rw-r--r--tests/auto/corelib/io/qfile/tst_qfile.cpp59
-rw-r--r--tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp10
-rw-r--r--tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp107
-rw-r--r--tests/auto/corelib/io/qlockfile/tst_qlockfile.pro2
-rw-r--r--tests/auto/corelib/io/qprocess/tst_qprocess.cpp6
-rw-r--r--tests/auto/corelib/io/qsettings/BLACKLIST1
-rw-r--r--tests/auto/corelib/io/qsettings/tst_qsettings.cpp2
-rw-r--r--tests/auto/corelib/io/qstorageinfo/BLACKLIST2
-rw-r--r--tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp3057
-rw-r--r--tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro8
-rw-r--r--tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp72
-rw-r--r--tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp4
-rw-r--r--tests/auto/corelib/itemmodels/qidentityproxymodel/qidentityproxymodel.pro6
-rw-r--r--tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp2
-rw-r--r--tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp12
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/qsortfilterproxymodel.pro6
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp35
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp40
-rw-r--r--tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp6
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp4
-rw-r--r--tests/auto/corelib/kernel/qeventloop/BLACKLIST1
-rw-r--r--tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp2
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp6
-rw-r--r--tests/auto/corelib/kernel/qobject/qobject.pro6
-rw-r--r--tests/auto/corelib/kernel/qobject/tst_qobject.cpp8
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp1
-rw-r--r--tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp8
-rw-r--r--tests/auto/corelib/kernel/qvariant/qvariant.pro3
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp54
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro2
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro2
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp21
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/qfactoryloader.pro3
-rw-r--r--tests/auto/corelib/plugin/qlibrary/qlibrary.pro3
-rw-r--r--[-rwxr-xr-x]tests/auto/corelib/plugin/qpluginloader/elftest/corrupt1.elf64.sobin239745 -> 239745 bytes
-rw-r--r--[-rwxr-xr-x]tests/auto/corelib/plugin/qpluginloader/elftest/corrupt2.elf64.sobin240097 -> 240097 bytes
-rw-r--r--[-rwxr-xr-x]tests/auto/corelib/plugin/qpluginloader/elftest/corrupt3.elf64.sobin240097 -> 240097 bytes
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro22
-rw-r--r--tests/auto/corelib/plugin/quuid/tst_quuid.cpp16
-rw-r--r--tests/auto/corelib/serialization/json/bom.json (renamed from tests/auto/corelib/json/bom.json)0
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/10.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/10.bjson)bin544 -> 544 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/11.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/11.bjson)bin542 -> 542 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/12.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/12.bjson)bin506 -> 506 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/13.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/13.bjson)bin544 -> 544 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/14.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/14.bjson)bin521 -> 521 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/15.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/15.bjson)bin536 -> 536 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/16.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/16.bjson)bin874 -> 874 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/17.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/17.bjson)bin49 -> 49 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/18.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/18.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/19.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/19.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/20.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/20.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/21.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/21.bjson)bin552 -> 552 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/22.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/22.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/23.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/23.bjson)bin533 -> 533 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/24.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/24.bjson)bin506 -> 506 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/25.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/25.bjson)bin542 -> 542 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/26.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/26.bjson)bin628 -> 628 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/27.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/27.bjson)bin51 -> 51 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/28.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/28.bjson)bin542 -> 542 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/29.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/29.bjson)bin544 -> 544 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/30.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/30.bjson)bin542 -> 542 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/31.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/31.bjson)bin553 -> 553 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/32.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/32.bjson)bin536 -> 536 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/33.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/33.bjson)bin544 -> 544 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/34.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/34.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/35.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/35.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/36.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/36.bjson)bin524 -> 524 bytes
-rw-r--r--tests/auto/corelib/serialization/json/invalidBinaryData/37.bjson (renamed from tests/auto/corelib/json/invalidBinaryData/37.bjson)bin536 -> 536 bytes
-rw-r--r--tests/auto/corelib/serialization/json/json.pro (renamed from tests/auto/corelib/json/json.pro)0
-rw-r--r--tests/auto/corelib/serialization/json/json.qrc (renamed from tests/auto/corelib/json/json.qrc)0
-rw-r--r--tests/auto/corelib/serialization/json/test.bjson (renamed from tests/auto/corelib/json/test.bjson)bin35392 -> 35392 bytes
-rw-r--r--tests/auto/corelib/serialization/json/test.json (renamed from tests/auto/corelib/json/test.json)0
-rw-r--r--tests/auto/corelib/serialization/json/test2.json (renamed from tests/auto/corelib/json/test2.json)0
-rw-r--r--tests/auto/corelib/serialization/json/test3.json (renamed from tests/auto/corelib/json/test3.json)0
-rw-r--r--tests/auto/corelib/serialization/json/tst_qtjson.cpp (renamed from tests/auto/corelib/json/tst_qtjson.cpp)0
-rw-r--r--tests/auto/corelib/serialization/qdatastream/.gitignore (renamed from tests/auto/corelib/io/qdatastream/.gitignore)0
-rw-r--r--tests/auto/corelib/serialization/qdatastream/datastream.q42 (renamed from tests/auto/corelib/io/qdatastream/datastream.q42)bin668 -> 668 bytes
-rw-r--r--tests/auto/corelib/serialization/qdatastream/qdatastream.pro (renamed from tests/auto/corelib/io/qdatastream/qdatastream.pro)0
-rw-r--r--tests/auto/corelib/serialization/qdatastream/testdata.qrc (renamed from tests/auto/corelib/io/qdatastream/testdata.qrc)0
-rw-r--r--tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp (renamed from tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/.gitattributes (renamed from tests/auto/corelib/io/qtextstream/.gitattributes)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/.gitignore (renamed from tests/auto/corelib/io/qtextstream/.gitignore)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/BLACKLIST (renamed from tests/auto/corelib/io/qtextstream/BLACKLIST)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/qtextstream.pro (renamed from tests/auto/corelib/io/qtextstream/qtextstream.pro)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/qtextstream.qrc (renamed from tests/auto/corelib/io/qtextstream/qtextstream.qrc)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp (renamed from tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/readAllStdinProcess.pro (renamed from tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp (renamed from tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/readLineStdinProcess.pro (renamed from tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data)bin6 -> 6 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data)bin116 -> 116 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data)bin6 -> 6 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data)bin116 -> 116 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data)bin32 -> 32 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data)bin36 -> 36 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data)bin36 -> 36 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data)bin36 -> 36 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource0.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource1.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource10.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource11.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource12.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource2.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource20.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource21.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource3.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource4.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource5.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource6.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource7.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource8.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource9.data (renamed from tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data)bin6 -> 6 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data)bin116 -> 116 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data)bin6 -> 6 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data)bin116 -> 116 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data)bin118 -> 118 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data)bin2 -> 2 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data)bin32 -> 32 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data)bin36 -> 36 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data)bin36 -> 36 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data)bin34 -> 34 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data)bin36 -> 36 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data)bin28 -> 28 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data)bin30 -> 30 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data)bin24 -> 24 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data)bin14 -> 14 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data)bin16 -> 16 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data)bin18 -> 18 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data)bin20 -> 20 bytes
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource0.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource1.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource10.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource11.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource12.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource2.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource20.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource21.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource3.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource4.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource5.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource6.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource7.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource8.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource9.data (renamed from tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/rfc3261.txt (renamed from tests/auto/corelib/io/qtextstream/rfc3261.txt)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/shift-jis.txt (renamed from tests/auto/corelib/io/qtextstream/shift-jis.txt)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp (renamed from tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/stdinProcess/stdinProcess.pro (renamed from tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/task113817.txt (renamed from tests/auto/corelib/io/qtextstream/task113817.txt)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/test/test.pro (renamed from tests/auto/corelib/io/qtextstream/test/test.pro)0
-rw-r--r--tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp3057
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/.gitattributes (renamed from tests/auto/corelib/xml/qxmlstream/.gitattributes)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/.gitignore (renamed from tests/auto/corelib/xml/qxmlstream/.gitignore)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite-LICENSE.txt (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite-LICENSE.txt)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/matrix.html (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/matrix.html)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/changes.html (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/changes.html)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15a.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15a.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15b.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15c.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15c.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15d.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15d.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15e.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15e.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15f.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15f.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15g.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15g.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15h.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15h.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15i.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15i.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15j.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15j.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15k.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15k.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15l.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15l.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18-ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18-ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2a.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2a.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2b.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E34.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E34.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E41.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E41.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E48.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E48.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E50.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E50.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E55.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E55.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E57.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E57.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E61.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E61.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9a.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9a.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9b.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/errata2e.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/errata2e.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-pe (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-pe)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-extpe (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-extpe)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/testcases.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/testcases.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/xmlconf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/xmlconf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05a.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05a.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05b.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06a.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06a.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06b.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06c.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06c.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06d.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06d.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06e.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06e.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06f.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06f.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06g.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06g.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06h.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06h.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06i.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06i.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/errata3e.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/errata3e.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/testcases.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/testcases.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/xmlconf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/xmlconf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/038.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/038.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/039.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/039.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/041.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/041.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/042.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/042.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/rmt-ns11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/rmt-ns11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries.Log (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries.Log)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13a.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13a.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13b.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13c.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13c.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/errata1e.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/errata1e.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/testcases.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/testcases.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/xmlconf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/xmlconf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/testcases.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/testcases.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/xmlconf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/xmlconf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.pe (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.pe)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_1.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_1.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_2.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_2.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_1.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_1.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_2.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_2.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/038.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/038.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/039.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/039.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/041.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/041.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/042.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/042.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/047.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/047.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/048.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/048.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/049.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/049.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/050.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/050.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/051.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/051.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/052.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/052.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/053.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/053.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/054.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/054.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/055.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/055.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/056.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/056.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/057.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/057.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/047.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/047.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/048.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/048.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/049.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/049.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/050.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/050.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/051.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/051.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/052.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/052.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/053.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/053.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/054.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/054.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/testcases.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/testcases.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xml11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xml11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xmlconf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xmlconf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/a_oasis-logo.gif (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/a_oasis-logo.gif)bin9383 -> 9383 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/committee.css (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/committee.css)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/top3.jpe (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/top3.jpe)bin22775 -> 22775 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/finalCatalog.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/finalCatalog.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_invalid.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_invalid.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_not-wf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_not-wf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_readme.txt (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_readme.txt)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_valid.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_valid.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/ibm28i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/ibm28i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/ibm28i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/ibm28i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/ibm45i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/ibm45i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/ibm45i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/ibm45i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/ibm50i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/ibm50i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/ibm59i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/ibm59i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/ibm59i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/ibm59i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/ibm76i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/ibm76i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/ibm76i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/ibm76i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n01.xml)bin91 -> 91 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n30.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n30.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n31.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n31.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n32.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n32.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n33.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n33.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/ibm03n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/ibm03n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/student.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/student.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/ibm20n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/ibm20n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/ibm26n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/ibm26n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/ibm27n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/ibm27n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/cat.txt (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/cat.txt)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/ibm57n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/ibm57n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm70n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm70n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/ibm74n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/ibm74n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/empty.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/empty.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n100.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n100.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n101.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n101.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n102.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n102.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n103.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n103.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n104.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n104.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n105.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n105.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n106.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n106.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n107.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n107.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n108.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n108.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n109.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n109.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n110.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n110.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n111.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n111.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n112.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n112.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n113.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n113.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n114.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n114.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n115.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n115.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n116.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n116.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n117.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n117.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n118.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n118.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n119.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n119.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n120.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n120.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n121.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n121.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n122.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n122.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n123.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n123.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n124.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n124.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n125.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n125.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n126.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n126.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n127.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n127.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n128.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n128.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n129.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n129.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n130.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n130.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n131.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n131.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n132.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n132.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n133.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n133.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n134.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n134.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n135.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n135.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n136.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n136.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n137.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n137.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n138.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n138.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n139.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n139.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n140.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n140.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n141.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n141.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n142.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n142.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n143.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n143.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n144.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n144.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n145.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n145.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n146.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n146.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n147.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n147.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n148.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n148.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n149.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n149.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n150.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n150.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n151.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n151.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n152.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n152.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n153.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n153.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n154.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n154.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n155.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n155.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n156.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n156.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n157.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n157.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n158.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n158.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n159.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n159.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n160.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n160.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n161.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n161.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n162.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n162.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n163.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n163.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n164.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n164.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n165.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n165.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n166.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n166.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n167.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n167.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n168.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n168.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n169.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n169.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n170.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n170.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n171.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n171.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n172.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n172.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n173.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n173.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n174.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n174.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n175.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n175.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n176.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n176.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n177.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n177.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n178.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n178.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n179.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n179.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n180.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n180.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n181.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n181.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n182.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n182.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n183.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n183.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n184.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n184.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n185.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n185.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n186.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n186.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n187.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n187.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n188.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n188.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n189.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n189.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n190.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n190.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n191.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n191.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n192.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n192.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n193.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n193.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n194.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n194.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n195.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n195.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n196.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n196.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n197.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n197.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n198.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n198.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n30.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n30.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n31.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n31.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n32.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n32.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n33.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n33.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n34.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n34.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n35.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n35.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n36.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n36.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n37.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n37.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n38.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n38.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n39.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n39.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n40.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n40.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n41.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n41.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n42.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n42.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n43.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n43.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n44.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n44.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n45.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n45.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n46.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n46.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n47.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n47.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n48.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n48.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n49.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n49.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n50.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n50.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n51.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n51.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n52.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n52.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n53.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n53.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n54.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n54.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n55.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n55.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n56.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n56.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n57.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n57.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n58.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n58.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n59.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n59.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n60.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n60.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n61.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n61.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n62.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n62.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n63.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n63.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n64.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n64.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n65.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n65.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n66.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n66.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n67.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n67.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n68.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n68.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n69.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n69.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n70.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n70.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n71.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n71.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n72.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n72.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n73.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n73.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n74.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n74.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n75.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n75.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n76.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n76.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n77.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n77.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n78.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n78.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n79.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n79.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n80.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n80.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n81.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n81.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n82.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n82.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n83.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n83.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n84.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n84.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n85.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n85.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n86.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n86.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n87.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n87.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n88.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n88.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n89.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n89.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n90.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n90.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n91.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n91.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n92.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n92.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n93.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n93.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n94.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n94.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n95.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n95.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n96.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n96.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n97.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n97.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n98.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n98.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n99.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n99.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n30.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n30.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n31.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n31.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n32.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n32.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n33.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n33.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n34.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n34.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n35.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n35.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n36.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n36.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n37.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n37.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n38.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n38.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n39.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n39.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n40.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n40.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n41.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n41.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n42.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n42.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n43.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n43.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n44.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n44.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n45.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n45.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n46.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n46.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n47.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n47.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n48.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n48.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n49.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n49.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n50.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n50.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n51.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n51.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n52.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n52.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n53.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n53.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n54.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n54.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n55.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n55.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n56.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n56.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n57.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n57.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n58.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n58.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n59.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n59.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n60.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n60.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n61.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n61.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n62.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n62.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n63.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n63.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n64.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n64.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n66.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n66.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n67.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n67.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n68.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n68.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n69.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n69.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n70.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n70.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n71.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n71.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n72.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n72.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n73.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n73.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n74.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n74.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n75.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n75.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n76.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n76.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n77.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n77.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n78.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n78.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n79.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n79.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n80.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n80.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n81.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n81.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n82.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n82.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n83.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n83.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n84.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n84.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n85.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n85.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/432gewf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/432gewf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/ltinentval.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/ltinentval.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/simpleltinentval.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/simpleltinentval.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/ibm01v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/ibm01v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/ibm01v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/ibm01v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/ibm02v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/ibm02v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/ibm02v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/ibm02v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/ibm03v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/ibm03v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/ibm03v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/ibm03v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/student.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/student.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/student.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/student.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/student.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/student.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/ibm13v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/ibm13v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/ibm13v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/ibm13v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/student.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/student.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/ibm17v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/ibm17v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/ibm17v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/ibm17v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/ibm18v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/ibm18v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/ibm18v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/ibm18v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/ibm19v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/ibm19v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/ibm19v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/ibm19v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/ibm21v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/ibm21v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/ibm21v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/ibm21v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/ibm26v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/ibm26v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/ibm26v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/ibm26v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.txt (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.txt)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.txt (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.txt)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/ibm31v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/ibm31v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/ibm33v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/ibm33v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/ibm33v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/ibm33v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/ibm34v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/ibm34v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/ibm34v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/ibm34v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/ibm35v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/ibm35v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/ibm35v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/ibm35v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/ibm36v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/ibm36v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/ibm36v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/ibm36v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/ibm37v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/ibm37v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/ibm37v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/ibm37v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/ibm38v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/ibm38v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/ibm38v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/ibm38v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/ibm39v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/ibm39v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/ibm39v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/ibm39v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/ibm40v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/ibm40v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/ibm40v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/ibm40v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/ibm41v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/ibm41v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/ibm41v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/ibm41v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/ibm42v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/ibm42v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/ibm42v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/ibm42v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/ibm43v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/ibm43v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/ibm43v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/ibm43v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/ibm44v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/ibm44v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/ibm44v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/ibm44v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/ibm45v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/ibm45v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/ibm45v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/ibm45v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/ibm47v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/ibm47v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/ibm47v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/ibm47v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/ibm49v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/ibm49v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/ibm50v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/ibm50v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/ibm52v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/ibm52v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/ibm52v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/ibm52v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibmlogo.gif (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibmlogo.gif)bin1082 -> 1082 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/xmltech.gif (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/xmltech.gif)bin4070 -> 4070 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/ibm55v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/ibm55v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/ibm55v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/ibm55v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/ibm57v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/ibm57v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/ibm57v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/ibm57v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/ibm66v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/ibm66v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/ibm66v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/ibm66v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/ibm67v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/ibm67v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/ibm67v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/ibm67v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/ibm70v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/ibm70v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v03.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v03.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/ibm78v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/ibm78v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/ibm79v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/ibm79v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/ibm82v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/ibm82v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/ibm82v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/ibm82v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/ibm85v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/ibm85v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/ibm85v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/ibm85v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/ibm86v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/ibm86v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/ibm86v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/ibm86v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/ibm87v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/ibm87v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/ibm87v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/ibm87v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/ibm88v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/ibm88v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/ibm88v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/ibm88v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/ibm89v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/ibm89v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/ibm89v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/ibm89v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_invalid.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_invalid.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_not-wf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_not-wf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_valid.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_valid.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n09.xml)bin121 -> 121 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n30.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n30.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n31.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n31.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n32.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n32.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n33.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n33.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n34.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n34.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n35.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n35.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n36.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n36.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n37.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n37.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n38.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n38.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n39.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n39.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n40.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n40.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n41.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n41.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n42.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n42.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n43.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n43.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n44.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n44.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n45.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n45.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n46.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n46.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n47.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n47.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n48.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n48.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n49.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n49.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n50.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n50.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n51.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n51.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n52.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n52.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n53.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n53.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n54.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n54.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n55.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n55.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n56.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n56.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n57.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n57.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n58.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n58.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n59.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n59.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n60.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n60.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n61.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n61.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n62.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n62.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n63.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n63.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n67.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n67.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n68.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n68.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n69.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n69.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n70.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n70.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n71.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n71.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/ibm04v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/ibm04v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/ibm04av01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/ibm04av01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/ibm07v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/ibm07v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/japanese.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/japanese.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-euc-jp.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-euc-jp.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-iso-2022-jp.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-iso-2022-jp.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-little-endian.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-little-endian.xml)bin313076 -> 313076 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-shift_jis.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-shift_jis.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-16.xml)bin313074 -> 313074 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-8.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-8.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/spec.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/spec.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-little-endian.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-little-endian.xml)bin3186 -> 3186 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.dtd)bin5222 -> 5222 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.xml)bin3186 -> 3186 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/e2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/e2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/oasis.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/oasis.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail1.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail10.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail11.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail12.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail13.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail14.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail15.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail16.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail17.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail18.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail19.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail2.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail20.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail21.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail22.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail23.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail24.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail25.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail26.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail27.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail28.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail29.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail3.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail30.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail30.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail31.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail31.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail4.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail5.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail6.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail7.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail7.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail8.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail8.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail9.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail9.xml)bin26 -> 26 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail1.xml)bin7 -> 7 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail17.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail17.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail18.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail18.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail19.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail19.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail26.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail26.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail27.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail27.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail28.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail28.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail29.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail29.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail7.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail7.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail8.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail8.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail9.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail9.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p07pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p07pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail7.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail7.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail7.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail7.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail7.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail7.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail8.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail8.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail5.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail6.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail2.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail3.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail4.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76pass1.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76pass1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/readme.html (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/readme.html)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/cxml.html (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/cxml.html)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr15.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr16.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/empty.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/empty.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional14.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional20.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional21.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional22.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional23.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional23.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional24.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional24.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional25.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional25.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/root.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/root.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16b.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16b.xml)bin98 -> 98 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16l.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16l.xml)bin98 -> 98 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/not-sa03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/not-sa03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pi.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pi.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml07.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml07.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml08.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml08.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml09.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml09.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml10.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml11.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml12.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml13.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/uri01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/uri01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-error.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-error.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-invalid.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-invalid.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-not-wf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-not-wf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-valid.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-valid.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtdtest.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtdtest.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/element.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/element.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/null.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/null.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/optional.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/optional.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/element.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/element.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/notation01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/notation01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/optional.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/optional.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/required00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/required00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sgml01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sgml01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/required00.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/required00.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sgml01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sgml01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang01.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang01.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang02.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang02.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang03.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang03.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang04.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang04.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang05.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang05.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang06.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang06.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/testcases.dtd (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/testcases.dtd)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.htm (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.htm)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20020521.htm (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20020521.htm)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20031030.htm (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20031030.htm)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.msxsl (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.msxsl)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.xsl (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.xsl)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/089.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/089.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/179.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/179.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent)bin54 -> 54 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent)bin12 -> 12 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml)bin124 -> 124 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml)bin132 -> 132 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml)bin140 -> 140 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml (renamed from tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/001.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/001.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/001.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/001.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/002.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/002.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/002.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/002.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/003.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/003.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/003.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/003.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/004.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/004.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/004.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/004.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/005.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/005.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/005.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/005.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/006.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/006.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/006.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/006.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/007.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/007.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/007.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/007.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/008.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/008.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/008.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/008.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/009.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/009.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/009.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/009.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/010.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/010.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/010.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/010.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/011.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/011.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/011.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/011.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/012.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/012.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/012.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/012.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/013.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/013.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/013.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/013.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/014.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/014.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/014.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/014.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/015.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/015.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/015.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/015.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/016.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/016.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/016.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/016.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/017.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/017.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/017.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/017.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/018.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/018.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/018.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/018.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/019.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/019.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/019.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/019.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/020.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/020.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/020.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/020.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/021.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/021.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/021.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/021.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/022.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/022.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/022.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/022.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/023.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/023.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/023.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/023.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/024.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/024.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/024.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/024.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/025.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/025.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/025.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/025.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/026.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/026.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/026.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/026.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/027.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/027.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/027.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/027.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/028.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/028.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/028.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/028.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/029.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/029.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/029.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/029.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/030.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/030.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/030.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/030.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/031.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/031.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/031.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/031.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/032.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/032.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/032.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/032.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/033.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/033.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/033.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/033.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/034.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/034.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/034.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/034.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/035.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/035.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/035.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/035.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/036.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/036.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/036.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/036.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/037.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/037.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/037.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/037.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/038.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/038.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/038.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/038.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/039.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/039.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/039.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/039.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/040.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/040.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/040.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/040.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/041.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/041.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/041.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/041.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/042.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/042.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/042.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/042.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/043.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/043.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/043.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/043.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/044.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/044.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/044.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/044.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/045.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/045.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/045.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/045.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/046.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/046.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/046.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/046.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/047.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/047.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/047.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/047.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/048.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/048.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/048.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/048.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/051reduced.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/051reduced.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/051reduced.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/051reduced.xml)bin22 -> 22 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/1.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/1.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/1.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/1.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/10.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/10.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/10.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/10.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/11.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/11.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/11.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/11.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/12.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/12.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/12.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/12.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/13.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/13.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/13.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/13.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/14.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/14.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/14.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/14.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/15.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/15.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/15.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/15.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/16.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/16.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/16.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/16.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/2.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/2.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/2.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/2.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/20.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/20.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/20.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/20.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/21.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/21.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/21.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/21.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/22.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/22.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/22.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/22.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/3.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/3.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/3.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/3.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/4.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/4.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/4.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/4.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/5.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/5.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/5.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/5.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/6.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/6.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/6.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/6.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/7.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/7.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/7.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/7.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/8.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/8.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/8.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/8.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/9.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/9.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/9.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/9.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/books.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/books.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/books.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/books.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/carriagereturn+nul.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/carriagereturn+nul.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml)bin60 -> 60 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/colonInPI.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/colonInPI.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/colonInPI.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/colonInPI.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/doctypeEmptyMarkupDecl.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/doctypeEmptyMarkupDecl.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/doctypeEmptyMarkupDecl.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/doctypeEmptyMarkupDecl.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/mixedContent.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/mixedContent.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/mixedContent.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/mixedContent.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/namespaceCDATA.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/namespaceCDATA.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/namespaces (renamed from tests/auto/corelib/xml/qxmlstream/data/namespaces)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul0.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul0.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul0.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul0.xml)bin1 -> 1 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul1.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul1.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul1.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul1.xml)bin3 -> 3 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul2.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul2.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul2.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul2.xml)bin4 -> 4 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul3.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul3.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul3.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul3.xml)bin7 -> 7 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul3bis.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul3bis.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml)bin9 -> 9 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul4.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul4.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul4.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul4.xml)bin8 -> 8 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul4bis.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul4bis.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml)bin10 -> 10 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul5.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/nul5.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/nul5.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/nul5.xml)bin23 -> 23 bytes
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/org_module.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/org_module.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/org_module.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/org_module.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/spaceBracket.ref (renamed from tests/auto/corelib/xml/qxmlstream/data/spaceBracket.ref)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/data/spaceBracket.xml (renamed from tests/auto/corelib/xml/qxmlstream/data/spaceBracket.xml)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/qc14n.h (renamed from tests/auto/corelib/xml/qxmlstream/qc14n.h)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro (renamed from tests/auto/corelib/xml/qxmlstream/qxmlstream.pro)0
-rwxr-xr-xtests/auto/corelib/serialization/qxmlstream/setupSuite.sh (renamed from tests/auto/corelib/xml/qxmlstream/setupSuite.sh)0
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp1745
-rw-r--r--tests/auto/corelib/serialization/serialization.pro15
-rw-r--r--tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp11
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp2
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp6
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/qthreadstorage.pro9
-rw-r--r--tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp2
-rw-r--r--tests/auto/corelib/tools/qbytearray/tst_qbytearray.cpp6
-rw-r--r--tests/auto/corelib/tools/qdate/tst_qdate.cpp5
-rw-r--r--tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp24
-rw-r--r--tests/auto/corelib/tools/qlatin1string/tst_qlatin1string.cpp8
-rw-r--r--tests/auto/corelib/tools/qlocale/tst_qlocale.cpp10
-rw-r--r--tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp18
-rw-r--r--tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp6
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/externaltests.cpp15
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp14
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp35
-rw-r--r--tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp193
-rw-r--r--tests/auto/corelib/tools/qstringref/tst_qstringref.cpp8
-rw-r--r--tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt572
-rw-r--r--tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt7519
-rw-r--r--tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt725
-rw-r--r--tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt852
-rw-r--r--tests/auto/corelib/tools/qtime/tst_qtime.cpp1
-rw-r--r--tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp120
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp148
-rw-r--r--tests/auto/corelib/tools/qvector/tst_qvector.cpp59
-rw-r--r--tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp11
-rw-r--r--tests/auto/corelib/xml/qxmlstream/tst_qxmlstream.cpp1699
-rw-r--r--tests/auto/corelib/xml/xml.pro3
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro3
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp14
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro2
-rw-r--r--tests/auto/dbus/qdbusinterface/qdbusinterface.pro2
-rw-r--r--tests/auto/dbus/qdbusmarshall/BLACKLIST3
-rw-r--r--tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro2
-rw-r--r--tests/auto/gui/image/qicon/fallback_icons/red.pngbin0 -> 105 bytes
-rw-r--r--tests/auto/gui/image/qicon/qicon.pro2
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.cpp11
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.qrc1
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/qstandarditemmodel.pro8
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp77
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp26
-rw-r--r--tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp22
-rw-r--r--tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp2
-rw-r--r--tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp14
-rw-r--r--tests/auto/gui/kernel/qwindow/BLACKLIST7
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp61
-rw-r--r--tests/auto/gui/painting/qcolor/tst_qcolor.cpp3
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp4
-rw-r--r--tests/auto/gui/painting/qregion/tst_qregion.cpp29
-rw-r--r--tests/auto/gui/qopengl/tst_qopengl.cpp2
-rw-r--r--tests/auto/gui/qvulkan/tst_qvulkan.cpp2
-rw-r--r--tests/auto/gui/text/qcssparser/tst_qcssparser.cpp4
-rw-r--r--tests/auto/gui/text/qfont/BLACKLIST4
-rw-r--r--tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp10
-rw-r--r--tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp10
-rw-r--r--tests/auto/gui/text/qrawfont/BLACKLIST4
-rw-r--r--tests/auto/gui/text/qrawfont/tst_qrawfont.cpp39
-rw-r--r--tests/auto/gui/text/qstatictext/tst_qstatictext.cpp59
-rw-r--r--tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp2
-rw-r--r--tests/auto/gui/text/qtextformat/tst_qtextformat.cpp9
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp2
-rw-r--r--tests/auto/gui/text/qtextscriptengine/BLACKLIST2
-rw-r--r--tests/auto/network/access/http2/http2srv.h2
-rw-r--r--tests/auto/network/access/qftp/BLACKLIST4
-rw-r--r--tests/auto/network/access/qftp/tst_qftp.cpp3
-rw-r--r--tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp2
-rw-r--r--tests/auto/network/access/qnetworkreply/BLACKLIST7
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp18
-rw-r--r--tests/auto/network/kernel/qhostaddress/qhostaddress.pro3
-rw-r--r--tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp164
-rw-r--r--tests/auto/network/kernel/qnetworkinterface/BLACKLIST6
-rw-r--r--tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp86
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp2
-rw-r--r--tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp9
-rw-r--r--tests/auto/network/socket/qtcpsocket/BLACKLIST4
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp2
-rw-r--r--tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp218
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.derbin0 -> 122 bytes
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.pem5
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.derbin0 -> 171 bytes
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.pem6
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.derbin0 -> 221 bytes
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.pem7
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.derbin0 -> 92 bytes
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.pem4
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.derbin0 -> 124 bytes
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.pem5
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.derbin0 -> 158 bytes
-rw-r--r--tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.pem6
-rwxr-xr-xtests/auto/network/ssl/qsslkey/keys/genkeys.sh4
-rw-r--r--tests/auto/network/ssl/qsslkey/qsslkey.pro3
-rw-r--r--tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp12
-rw-r--r--tests/auto/network/ssl/qsslsocket/BLACKLIST4
-rw-r--r--tests/auto/network/ssl/qsslsocket/qsslsocket.pro2
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp278
-rw-r--r--tests/auto/opengl/qgl/BLACKLIST1
-rw-r--r--tests/auto/other/compiler/tst_compiler.cpp3
-rw-r--r--tests/auto/other/gestures/BLACKLIST5
-rw-r--r--tests/auto/other/macnativeevents/BLACKLIST2
-rw-r--r--tests/auto/other/macnativeevents/tst_macnativeevents.cpp4
-rw-r--r--tests/auto/other/macplist/macplist.pro2
-rw-r--r--tests/auto/other/modeltest/modeltest.cpp581
-rw-r--r--tests/auto/other/modeltest/modeltest.h82
-rw-r--r--tests/auto/other/modeltest/modeltest.pro5
-rw-r--r--tests/auto/other/modeltest/tst_modeltest.cpp300
-rw-r--r--tests/auto/other/other.pro2
-rw-r--r--tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp (renamed from tests/auto/other/modeltest/dynamictreemodel.cpp)0
-rw-r--r--tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h (renamed from tests/auto/other/modeltest/dynamictreemodel.h)0
-rw-r--r--tests/auto/other/qaccessibility/accessiblewidgets.h2
-rw-r--r--tests/auto/other/qaccessibility/qaccessibility.pro5
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp289
-rw-r--r--tests/auto/other/qfocusevent/tst_qfocusevent.cpp4
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_databases.h124
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp71
-rw-r--r--tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp418
-rw-r--r--tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp23
-rw-r--r--tests/auto/testlib/qabstractitemmodeltester/.gitignore1
-rw-r--r--tests/auto/testlib/qabstractitemmodeltester/qabstractitemmodeltester.pro13
-rw-r--r--tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp299
-rw-r--r--tests/auto/testlib/selftests/deleteLater/deleteLater.pro7
-rw-r--r--tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp87
-rw-r--r--tests/auto/testlib/selftests/deleteLater_noApp/deleteLater_noApp.pro7
-rw-r--r--tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp88
-rw-r--r--tests/auto/testlib/selftests/expected_alive.txt13
-rw-r--r--tests/auto/testlib/selftests/expected_assert.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_assert.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_assert.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_assert.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_assert.xunitxml4
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.teamcity10
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.txt14
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcallgrind.lightxml26
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcallgrind.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcallgrind.xml32
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcallgrind.xunitxml25
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcallgrind_0.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcallgrind_1.txt (renamed from tests/auto/testlib/selftests/expected_benchlibcallgrind.txt)0
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcounting.lightxml14
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcounting.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcounting.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibcounting.xml14
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml6
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibeventcounter.teamcity20
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibeventcounter.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibeventcounter.xml6
-rw-r--r--tests/auto/testlib/selftests/expected_benchliboptions.lightxml57
-rw-r--r--tests/auto/testlib/selftests/expected_benchliboptions.teamcity24
-rw-r--r--tests/auto/testlib/selftests/expected_benchliboptions.txt12
-rw-r--r--tests/auto/testlib/selftests/expected_benchliboptions.xml66
-rw-r--r--tests/auto/testlib/selftests/expected_benchliboptions.xunitxml39
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibtickcounter.teamcity8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibtickcounter.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibtickcounter.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml14
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibwalltime.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibwalltime.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_benchlibwalltime.xml14
-rw-r--r--tests/auto/testlib/selftests/expected_blacklisted.lightxml66
-rw-r--r--tests/auto/testlib/selftests/expected_blacklisted.teamcity18
-rw-r--r--tests/auto/testlib/selftests/expected_blacklisted.txt16
-rw-r--r--tests/auto/testlib/selftests/expected_blacklisted.xml69
-rw-r--r--tests/auto/testlib/selftests/expected_blacklisted.xunitxml40
-rw-r--r--tests/auto/testlib/selftests/expected_commandlinedata.lightxml20
-rw-r--r--tests/auto/testlib/selftests/expected_commandlinedata.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_commandlinedata.txt16
-rw-r--r--tests/auto/testlib/selftests/expected_commandlinedata.xml20
-rw-r--r--tests/auto/testlib/selftests/expected_counting.lightxml62
-rw-r--r--tests/auto/testlib/selftests/expected_counting.teamcity32
-rw-r--r--tests/auto/testlib/selftests/expected_counting.txt36
-rw-r--r--tests/auto/testlib/selftests/expected_counting.xml62
-rw-r--r--tests/auto/testlib/selftests/expected_datatable.lightxml46
-rw-r--r--tests/auto/testlib/selftests/expected_datatable.teamcity26
-rw-r--r--tests/auto/testlib/selftests/expected_datatable.txt30
-rw-r--r--tests/auto/testlib/selftests/expected_datatable.xml46
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.lightxml14
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.teamcity6
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.txt10
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.xml14
-rw-r--r--tests/auto/testlib/selftests/expected_differentexec.lightxml21
-rw-r--r--tests/auto/testlib/selftests/expected_differentexec.teamcity21
-rw-r--r--tests/auto/testlib/selftests/expected_differentexec.txt12
-rw-r--r--tests/auto/testlib/selftests/expected_differentexec.xml21
-rw-r--r--tests/auto/testlib/selftests/expected_differentexec.xunitxml21
-rw-r--r--tests/auto/testlib/selftests/expected_exceptionthrow.lightxml6
-rw-r--r--tests/auto/testlib/selftests/expected_exceptionthrow.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_exceptionthrow.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_exceptionthrow.xml6
-rw-r--r--tests/auto/testlib/selftests/expected_expectfail.lightxml56
-rw-r--r--tests/auto/testlib/selftests/expected_expectfail.teamcity26
-rw-r--r--tests/auto/testlib/selftests/expected_expectfail.txt32
-rw-r--r--tests/auto/testlib/selftests/expected_expectfail.xml56
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_failinit.lightxml6
-rw-r--r--tests/auto/testlib/selftests/expected_failinit.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_failinit.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_failinit.xml6
-rw-r--r--tests/auto/testlib/selftests/expected_failinitdata.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_failinitdata.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_failinitdata.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_failinitdata.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_fetchbogus.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_fetchbogus.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_fetchbogus.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_fetchbogus.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_findtestdata.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_findtestdata.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_findtestdata.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_findtestdata.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_float.lightxml62
-rw-r--r--tests/auto/testlib/selftests/expected_float.teamcity28
-rw-r--r--tests/auto/testlib/selftests/expected_float.txt16
-rw-r--r--tests/auto/testlib/selftests/expected_float.xml65
-rw-r--r--tests/auto/testlib/selftests/expected_float.xunitxml33
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.lightxml20
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.teamcity8
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.txt12
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.xml20
-rw-r--r--tests/auto/testlib/selftests/expected_longstring.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_longstring.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_longstring.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_longstring.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_maxwarnings.lightxml6
-rw-r--r--tests/auto/testlib/selftests/expected_maxwarnings.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_maxwarnings.xml6
-rw-r--r--tests/auto/testlib/selftests/expected_multiexec.lightxml90
-rw-r--r--tests/auto/testlib/selftests/expected_multiexec.teamcity40
-rw-r--r--tests/auto/testlib/selftests/expected_multiexec.txt20
-rw-r--r--tests/auto/testlib/selftests/expected_multiexec.xml105
-rw-r--r--tests/auto/testlib/selftests/expected_multiexec.xunitxml60
-rw-r--r--tests/auto/testlib/selftests/expected_pairdiagnostics.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_pairdiagnostics.teamcity4
-rw-r--r--tests/auto/testlib/selftests/expected_pairdiagnostics.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_pairdiagnostics.xml14
-rw-r--r--tests/auto/testlib/selftests/expected_qexecstringlist.lightxml75
-rw-r--r--tests/auto/testlib/selftests/expected_qexecstringlist.teamcity57
-rw-r--r--tests/auto/testlib/selftests/expected_qexecstringlist.txt24
-rw-r--r--tests/auto/testlib/selftests/expected_qexecstringlist.xml78
-rw-r--r--tests/auto/testlib/selftests/expected_qexecstringlist.xunitxml55
-rw-r--r--tests/auto/testlib/selftests/expected_silent.lightxml66
-rw-r--r--tests/auto/testlib/selftests/expected_silent.teamcity6
-rw-r--r--tests/auto/testlib/selftests/expected_silent.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_silent.xml69
-rw-r--r--tests/auto/testlib/selftests/expected_silent.xunitxml43
-rw-r--r--tests/auto/testlib/selftests/expected_singleskip.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_singleskip.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_singleskip.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_singleskip.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_skip.lightxml16
-rw-r--r--tests/auto/testlib/selftests/expected_skip.teamcity6
-rw-r--r--tests/auto/testlib/selftests/expected_skip.txt10
-rw-r--r--tests/auto/testlib/selftests/expected_skip.xml16
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_skipinit.lightxml6
-rw-r--r--tests/auto/testlib/selftests/expected_skipinit.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_skipinit.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_skipinit.xml6
-rw-r--r--tests/auto/testlib/selftests/expected_skipinitdata.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_skipinitdata.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_skipinitdata.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_skipinitdata.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_sleep.lightxml18
-rw-r--r--tests/auto/testlib/selftests/expected_sleep.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_sleep.xml21
-rw-r--r--tests/auto/testlib/selftests/expected_sleep.xunitxml12
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.lightxml32
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.txt20
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.xml32
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.lightxml14
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.teamcity4
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.xml14
-rw-r--r--tests/auto/testlib/selftests/expected_verbose1.lightxml62
-rw-r--r--tests/auto/testlib/selftests/expected_verbose1.teamcity32
-rw-r--r--tests/auto/testlib/selftests/expected_verbose1.txt36
-rw-r--r--tests/auto/testlib/selftests/expected_verbose1.xml62
-rw-r--r--tests/auto/testlib/selftests/expected_verbose2.lightxml98
-rw-r--r--tests/auto/testlib/selftests/expected_verbose2.teamcity56
-rw-r--r--tests/auto/testlib/selftests/expected_verbose2.txt72
-rw-r--r--tests/auto/testlib/selftests/expected_verbose2.xml98
-rw-r--r--tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml34
-rw-r--r--tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity12
-rw-r--r--tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt16
-rw-r--r--tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml34
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.lightxml12
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.xml12
-rw-r--r--tests/auto/testlib/selftests/expected_xunit.lightxml32
-rw-r--r--tests/auto/testlib/selftests/expected_xunit.teamcity14
-rw-r--r--tests/auto/testlib/selftests/expected_xunit.txt18
-rw-r--r--tests/auto/testlib/selftests/expected_xunit.xml32
-rwxr-xr-xtests/auto/testlib/selftests/generate_expected_output.py8
-rw-r--r--tests/auto/testlib/selftests/selftests.pri2
-rw-r--r--tests/auto/testlib/selftests/selftests.qrc41
-rw-r--r--tests/auto/testlib/selftests/tst_selftests.cpp89
-rw-r--r--tests/auto/testlib/testlib.pro1
-rw-r--r--tests/auto/tools/moc/cxx11-explicit-override-control.h40
-rw-r--r--tests/auto/tools/moc/moc.pro2
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp8
-rw-r--r--tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/Main_Window.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/Widget.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/addlinkdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/addtorrentform.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/authenticationdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/backside.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/batchtranslation.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/bookmarkdialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/bookwindow.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/browserwidget.ui.h1
-rw-r--r--tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/buttongroup.ui270
-rw-r--r--tests/auto/tools/uic/baseline/buttongroup.ui.h216
-rw-r--r--tests/auto/tools/uic/baseline/calculator.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/calculatorform.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/certificateinfo.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/chatdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/chatmainwindow.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/chatsetnickname.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/config.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/connectdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/controller.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/cookies.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/cookiesexceptions.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/default.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/dialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/downloaditem.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/downloads.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/embeddeddialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/enumnostdset.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/filespage.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/filternamedialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/filterpage.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/finddialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/form.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/formwindowsettings.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/generalpage.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/gridalignment.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/gridpanel.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/helpdialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/history.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/icontheme.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/idbased.ui37
-rw-r--r--tests/auto/tools/uic/baseline/idbased.ui.h67
-rw-r--r--tests/auto/tools/uic/baseline/identifierpage.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/imagedialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/inputpage.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/installdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/languagesdialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/listwidgeteditor.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/mainwindow.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/mydialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/myform.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/newactiondialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/newform.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/orderdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/outputpage.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/pagefold.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/paletteeditor.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/passworddialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/pathpage.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/phrasebookbox.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/plugindialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/preferencesdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/previewdialogbase.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/previewwidget.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/proxy.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qfiledialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qprintwidget.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qtgradienteditor.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientview.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/qttoolbardialog.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/qttrid.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/querywidget.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/remotecontrol.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/saveformastemplate.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/settings.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/signalslotdialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/sslclient.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/sslerrors.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/statistics.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/stringlisteditor.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/stylesheeteditor.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/tabbedbrowser.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/tetrixwindow.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/textfinder.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/topicchooser.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/translatedialog.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h3
-rw-r--r--tests/auto/tools/uic/baseline/translationsettings.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/treewidgeteditor.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/trpreviewtool.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/validators.ui.h3
-rw-r--r--tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h3
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp2
-rw-r--r--tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp39
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/BLACKLIST5
-rw-r--r--tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp2
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/BLACKLIST2
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp10
-rw-r--r--tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp4
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp34
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST6
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp16
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp14
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST4
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp12
-rw-r--r--tests/auto/widgets/itemviews/itemviews.pro4
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp65
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp86
-rw-r--r--tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp80
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp2
-rw-r--r--tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp30
-rw-r--r--tests/auto/widgets/itemviews/qtableview/BLACKLIST2
-rw-r--r--tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp29
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp63
-rw-r--r--tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp47
-rw-r--r--tests/auto/widgets/kernel/qaction/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qaction/tst_qaction.cpp6
-rw-r--r--tests/auto/widgets/kernel/qactiongroup/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qapplication/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qapplication/test/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp2
-rw-r--r--tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp4
-rw-r--r--tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp2
-rw-r--r--tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp6
-rw-r--r--tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp2
-rw-r--r--tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp2
-rw-r--r--tests/auto/widgets/kernel/qtooltip/BLACKLIST4
-rw-r--r--tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp4
-rw-r--r--tests/auto/widgets/kernel/qwidget/BLACKLIST18
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp23
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/BLACKLIST4
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp10
-rw-r--r--tests/auto/widgets/styles/qstyle/tst_qstyle.cpp30
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST6
-rw-r--r--tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp4
-rw-r--r--tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp19
-rw-r--r--tests/auto/widgets/widgets/qcombobox/BLACKLIST4
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp16
-rw-r--r--tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp44
-rw-r--r--tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp2
-rw-r--r--tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp2
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp97
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp149
-rw-r--r--tests/auto/widgets/widgets/qmenubar/BLACKLIST4
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp95
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/BLACKLIST13
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp16
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp2
-rw-r--r--tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp2
-rw-r--r--tests/auto/widgets/widgets/qscrollbar/BLACKLIST3
-rw-r--r--tests/auto/widgets/widgets/qspinbox/BLACKLIST3
-rw-r--r--tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp59
-rw-r--r--tests/auto/widgets/widgets/qtabbar/BLACKLIST1
-rw-r--r--tests/benchmarks/corelib/io/qprocess/qprocess.pro2
-rw-r--r--tests/benchmarks/corelib/thread/qthreadpool/tst_qthreadpool.cpp2
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/qdbusperformance.pro2
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp2
-rw-r--r--tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp2
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp2
-rw-r--r--tests/benchmarks/gui/painting/drawtexture/drawtexture.pro7
-rw-r--r--tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp546
-rw-r--r--tests/benchmarks/gui/painting/painting.pro1
-rw-r--r--tests/benchmarks/gui/painting/qtbench/benchmarktests.h4
-rw-r--r--tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp1
-rw-r--r--tests/manual/cocoa/menurama/mainwindow.h2
-rw-r--r--tests/manual/cocoa/menurama/menuramaapplication.cpp2
-rw-r--r--tests/manual/diaglib/eventfilter.cpp29
-rw-r--r--tests/manual/diaglib/logwidget.cpp2
-rw-r--r--tests/manual/diaglib/nativewindowdump.cpp17
-rw-r--r--tests/manual/foreignwindows/main.cpp6
-rw-r--r--tests/manual/highdpi/dragwidget.h18
-rw-r--r--tests/manual/qlayout/gridwidget.cpp4
-rw-r--r--tests/manual/qlayout/hbwidget.cpp4
-rw-r--r--tests/manual/qlayout/vbwidget.cpp4
-rw-r--r--tests/manual/qscreen/main.cpp8
-rw-r--r--tests/manual/qscreen/propertywatcher.cpp2
-rw-r--r--tests/manual/qscreen/propertywatcher.h2
-rw-r--r--tests/manual/qsysinfo/main.cpp4
-rw-r--r--tests/manual/qtabletevent/regular_widgets/main.cpp37
-rw-r--r--tests/manual/touch/main.cpp12
-rw-r--r--tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp4
-rw-r--r--tests/manual/widgets/styles/main.cpp127
-rwxr-xr-xutil/edid/qedidvendortable.py11
-rw-r--r--util/glgen/codegenerator.cpp4
-rw-r--r--util/unicode/data/ArabicShaping.txt125
-rw-r--r--util/unicode/data/BidiMirroring.txt30
-rw-r--r--util/unicode/data/Blocks.txt30
-rw-r--r--util/unicode/data/CaseFolding.txt93
-rw-r--r--util/unicode/data/DerivedAge.txt124
-rw-r--r--util/unicode/data/DerivedNormalizationProps.txt110
-rw-r--r--util/unicode/data/GraphemeBreakProperty.txt175
-rw-r--r--util/unicode/data/LineBreak.txt359
-rw-r--r--util/unicode/data/NormalizationCorrections.txt16
-rw-r--r--util/unicode/data/Scripts.txt250
-rw-r--r--util/unicode/data/SentenceBreakProperty.txt136
-rw-r--r--util/unicode/data/SpecialCasing.txt13
-rw-r--r--util/unicode/data/UnicodeData.txt2411
-rw-r--r--util/unicode/data/WordBreakProperty.txt212
-rw-r--r--util/unicode/main.cpp125
7555 files changed, 100107 insertions, 59459 deletions
diff --git a/.qmake.conf b/.qmake.conf
index ed61e3732a..f3a052109f 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -4,4 +4,4 @@ CONFIG += warning_clean
QT_SOURCE_TREE = $$PWD
QT_BUILD_TREE = $$shadowed($$PWD)
-MODULE_VERSION = 5.10.1
+MODULE_VERSION = 5.11.0
diff --git a/config.tests/avx512/avx512.cpp b/config.tests/avx512/avx512.cpp
index ca1a5d1357..29e88ebf15 100644
--- a/config.tests/avx512/avx512.cpp
+++ b/config.tests/avx512/avx512.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2017 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the configuration of the Qt Toolkit.
@@ -39,15 +39,18 @@
#include <immintrin.h>
-#ifndef AVX512WANT
-# error ".pro file must define AVX512WANT macro to the AVX-512 feature to be tested"
+#ifndef __AVX512F__
+# error "There doesn't seem to be AVX-512 support in this compiler"
+#endif
+#ifndef WANT_AVX512
+# error ".pro file must define WANT_AVX512 macro to the AVX-512 feature to be tested"
#endif
// The following checks if __AVXx__ is defined, where x is the value in
-// AVX512WANT
+// WANT_AVX512
#define HAS2(x) __AVX512 ## x ## __
#define HAS(x) HAS2(x)
-#if !HAS(AVX512WANT)
+#if !HAS(WANT_AVX512)
# error "Feature not supported"
#endif
@@ -62,36 +65,36 @@ int main(int, char**argv)
d = _mm512_loadu_pd((double *)argv + 64);
f = _mm512_loadu_ps((float *)argv + 128);
-#ifdef __AVX512ER__
+#ifdef WANT_AVX512ER
/* AVX512 Exponential and Reciprocal */
f = _mm512_exp2a23_round_ps(f, 8);
#endif
-#ifdef __AVX512CD__
+#ifdef WANT_AVX512CD
/* AVX512 Conflict Detection */
i = _mm512_maskz_conflict_epi32(m, i);
#endif
-#ifdef __AVX512PF__
+#ifdef WANT_AVX512PF
/* AVX512 Prefetch */
_mm512_mask_prefetch_i64scatter_pd(argv, 0xf, i, 2, 2);
#endif
-#ifdef __AVX512DQ__
+#ifdef WANT_AVX512DQ
/* AVX512 Doubleword and Quadword support */
m = _mm512_movepi32_mask(i);
#endif
-#ifdef __AVX512BW__
+#ifdef WANT_AVX512BW
/* AVX512 Byte and Word support */
i = _mm512_mask_loadu_epi8(i, m, argv - 8);
#endif
-#ifdef __AVX512VL__
+#ifdef WANT_AVX512VL
/* AVX512 Vector Length */
__m256i i2 = _mm256_maskz_loadu_epi32(0, argv);
_mm256_mask_storeu_epi32(argv + 1, m, i2);
#endif
-#ifdef __AVX512IFMA__
+#ifdef WANT_AVX512IFMA
/* AVX512 Integer Fused Multiply-Add */
i = _mm512_madd52lo_epu64(i, i, i);
#endif
-#ifdef __AVX512VBMI__
+#ifdef WANT_AVX512VBMI
/* AVX512 Vector Byte Manipulation Instructions */
i = _mm512_permutexvar_epi8(i, i);
#endif
diff --git a/config.tests/avx512/avx512.pro b/config.tests/avx512/avx512.pro
index 1edf5e5432..d295f6320c 100644
--- a/config.tests/avx512/avx512.pro
+++ b/config.tests/avx512/avx512.pro
@@ -7,4 +7,4 @@ value = $$eval($$varname)
!defined($$varname, "var"): error("This compiler does not support AVX512")
QMAKE_CXXFLAGS += $$value
-DEFINES += AVX512WANT=$$AVX512
+DEFINES += WANT_AVX512=$$AVX512 WANT_AVX512$$AVX512
diff --git a/config.tests/common/aesni/aesni.cpp b/config.tests/common/aesni/aesni.cpp
deleted file mode 100644
index a177183c72..0000000000
--- a/config.tests/common/aesni/aesni.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the config.tests of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <wmmintrin.h>
-
-int main(int, char**)
-{
- __m128i a = _mm_setzero_si128();
- __m128i b = _mm_aesenc_si128(a, a);
- __m128i c = _mm_aesdec_si128(a, b);
- (void)c;
- return 0;
-}
diff --git a/config.tests/common/aesni/aesni.pro b/config.tests/common/aesni/aesni.pro
deleted file mode 100644
index 49cb132ef7..0000000000
--- a/config.tests/common/aesni/aesni.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-SOURCES = aesni.cpp
-!defined(QMAKE_CFLAGS_AESNI, "var"): error("This compiler does not support AES New Instructions")
-else: QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AESNI
diff --git a/config.tests/common/rdrnd/rdrnd.cpp b/config.tests/common/rdrnd/rdrnd.cpp
deleted file mode 100644
index 597f7257bf..0000000000
--- a/config.tests/common/rdrnd/rdrnd.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the config.tests of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <immintrin.h>
-
-int main(int, char**)
-{
- unsigned short us;
- unsigned int ui;
- if (_rdrand16_step(&us))
- return 1;
- if (_rdrand32_step(&ui))
- return 1;
-#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64)
- unsigned long long ull;
- if (_rdrand64_step(&ull))
- return 1;
-#endif
- return 0;
-}
diff --git a/config.tests/common/rdrnd/rdrnd.pro b/config.tests/common/rdrnd/rdrnd.pro
deleted file mode 100644
index 37e636dc3f..0000000000
--- a/config.tests/common/rdrnd/rdrnd.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-SOURCES += rdrnd.cpp
-!defined(QMAKE_CFLAGS_RDRND, "var"): error("This compiler does not support the RDRAND instruction")
-else: QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_RDRND
diff --git a/config.tests/common/shani/shani.cpp b/config.tests/common/shani/shani.cpp
deleted file mode 100644
index 0fe6e87dd8..0000000000
--- a/config.tests/common/shani/shani.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the config.tests of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <immintrin.h>
-
-int main(int, char**)
-{
- __m128i a = _mm_setzero_si128();
- __m128i b = _mm_sha1rnds4_epu32(a, a, 0);
- __m128i c = _mm_sha1msg1_epu32(a, b);
- __m128i d = _mm_sha256msg2_epu32(b, c);
- (void)d;
- return 0;
-}
diff --git a/config.tests/common/shani/shani.pro b/config.tests/common/shani/shani.pro
deleted file mode 100644
index 278f49ef90..0000000000
--- a/config.tests/common/shani/shani.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-SOURCES = shani.cpp
-!defined(QMAKE_CFLAGS_SHANI, "var"): error("This compiler does not support Secure Hash Algorithm extensions")
-else: QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SHANI
diff --git a/config.tests/x86_simd/main.cpp b/config.tests/x86_simd/main.cpp
new file mode 100644
index 0000000000..8120cb9d3f
--- /dev/null
+++ b/config.tests/x86_simd/main.cpp
@@ -0,0 +1,253 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Intel Corporation.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// All of our supported compilers support <immintrin.h>
+#include <immintrin.h>
+#define T(x) (QT_COMPILER_SUPPORTS_ ## x)
+
+#if !defined(__INTEL_COMPILER) && !defined(_MSC_VER) && !defined(NO_ATTRIBUTE)
+/* GCC requires attributes for a function */
+# define attribute_target(x) __attribute__((__target__(x)))
+#else
+# define attribute_target(x)
+#endif
+
+#if T(SSE2)
+attribute_target("sse2") void test_sse2()
+{
+ __m128i a = _mm_setzero_si128();
+ _mm_maskmoveu_si128(a, _mm_setzero_si128(), 0);
+}
+#endif
+
+#if T(SSE3)
+attribute_target("sse3") void test_sse3()
+{
+ __m128d a = _mm_set1_pd(6.28);
+ __m128d b = _mm_set1_pd(3.14);
+ __m128d result = _mm_addsub_pd(a, b);
+ (void) _mm_movedup_pd(result);
+}
+#endif
+
+#if T(SSSE3)
+attribute_target("ssse3") void test_ssse3()
+{
+ __m128i a = _mm_set1_epi32(42);
+ _mm_abs_epi8(a);
+ (void) _mm_sign_epi16(a, _mm_set1_epi32(64));
+}
+#endif
+
+#if T(SSE4_1)
+attribute_target("sse4.1") void test_sse4_1()
+{
+ __m128 a = _mm_setzero_ps();
+ _mm_ceil_ps(a);
+ __m128i result = _mm_mullo_epi32(_mm_set1_epi32(42), _mm_set1_epi32(64));
+ (void)result;
+}
+#endif
+
+#if T(SSE4_2)
+attribute_target("sse4.2") void test_sse4_2()
+{
+ __m128i a = _mm_setzero_si128();
+ __m128i b = _mm_set1_epi32(42);
+ (void) _mm_cmpestrm(a, 16, b, 16, 0);
+}
+#endif
+
+#if T(AESNI)
+attribute_target("aes,sse4.2") void test_aesni()
+{
+ __m128i a = _mm_setzero_si128();
+ __m128i b = _mm_aesenc_si128(a, a);
+ __m128i c = _mm_aesdec_si128(a, b);
+ (void)c;
+}
+#endif
+
+#if T(F16C)
+attribute_target("f16c") void test_f16c()
+{
+ __m128i a = _mm_setzero_si128();
+ __m128 b = _mm_cvtph_ps(a);
+ __m256 b256 = _mm256_cvtph_ps(a);
+ (void) _mm_cvtps_ph(b, 0);
+ (void) _mm256_cvtps_ph(b256, 0);
+}
+#endif
+
+#if T(RDRND)
+attribute_target("rdrnd") int test_rdrnd()
+{
+ unsigned short us;
+ unsigned int ui;
+ if (_rdrand16_step(&us))
+ return 1;
+ if (_rdrand32_step(&ui))
+ return 1;
+# if defined(__x86_64) || defined(__x86_64__) || defined(__amd64) || defined(_M_X64)
+ unsigned long long ull;
+ if (_rdrand64_step(&ull))
+ return 1;
+# endif
+}
+#endif
+
+#if T(SHANI)
+attribute_target("sha") void test_shani()
+{
+ __m128i a = _mm_setzero_si128();
+ __m128i b = _mm_sha1rnds4_epu32(a, a, 0);
+ __m128i c = _mm_sha1msg1_epu32(a, b);
+ __m128i d = _mm_sha256msg2_epu32(b, c);
+ (void)d;
+}
+#endif
+
+#if T(AVX)
+attribute_target("avx") void test_avx()
+{
+ __m256d a = _mm256_setzero_pd();
+ __m256d b = _mm256_set1_pd(42.42);
+ (void) _mm256_add_pd(a, b);
+}
+#endif
+
+#if T(AVX2)
+attribute_target("avx2") void test_avx2()
+{
+ _mm256_zeroall();
+ __m256i a = _mm256_setzero_si256();
+ __m256i b = _mm256_and_si256(a, a);
+ (void) _mm256_add_epi8(a, b);
+}
+#endif
+
+#if T(AVX512F)
+attribute_target("avx512f") void test_avx512f(char *ptr)
+{
+ /* AVX512 Foundation */
+ __mmask16 m = ~1;
+ __m512i i;
+ __m512d d;
+ __m512 f;
+ i = _mm512_maskz_loadu_epi32(0, ptr);
+ d = _mm512_loadu_pd((double *)ptr + 64);
+ f = _mm512_loadu_ps((float *)ptr + 128);
+ _mm512_mask_storeu_epi64(ptr, m, i);
+ _mm512_mask_storeu_ps(ptr + 64, m, f);
+ _mm512_mask_storeu_pd(ptr + 128, m, d);
+}
+#endif
+
+#if T(AVX512ER)
+attribute_target("avx512er") void test_avx512er()
+{
+ /* AVX512 Exponential and Reciprocal */
+ __m512 f;
+ f = _mm512_exp2a23_round_ps(f, 8);
+}
+#endif
+
+#if T(AVX512CD)
+attribute_target("avx512cd") void test_avx512cd()
+{
+ /* AVX512 Conflict Detection */
+ __mmask16 m = ~1;
+ __m512i i;
+ i = _mm512_maskz_conflict_epi32(m, i);
+}
+#endif
+
+#if T(AVX512PF)
+attribute_target("avx512pf") void test_avx512pf(void *ptr)
+{
+ /* AVX512 Prefetch */
+ __m512i i;
+ __mmask16 m = 0xf;
+ _mm512_mask_prefetch_i64scatter_pd(ptr, m, i, 2, 2);
+}
+#endif
+
+#if T(AVX512DQ)
+attribute_target("avx512dq") void test_avx512dq()
+{
+ /* AVX512 Doubleword and Quadword support */
+ __m512i i;
+ __mmask16 m = ~1;
+ m = _mm512_movepi32_mask(i);
+}
+#endif
+
+#if T(AVX512BW)
+attribute_target("avx512bw") void test_avx512bw(char *ptr)
+{
+ /* AVX512 Byte and Word support */
+ __m512i i;
+ __mmask16 m = ~1;
+ i = _mm512_mask_loadu_epi8(i, m, ptr - 8);
+}
+#endif
+
+#if T(AVX512VL)
+attribute_target("avx512vl") void test_avx512vl(char *ptr)
+{
+ /* AVX512 Vector Length */
+ __mmask16 m = ~1;
+ __m256i i2 = _mm256_maskz_loadu_epi32(0, ptr);
+ _mm256_mask_storeu_epi32(ptr + 1, m, i2);
+}
+#endif
+
+#if T(AVX512IFMA)
+attribute_target("avx512ifma") void test_avx512ifma()
+{
+ /* AVX512 Integer Fused Multiply-Add */
+ __m512i i;
+ i = _mm512_madd52lo_epu64(i, i, i);
+}
+#endif
+
+int main()
+{
+ return 0;
+}
diff --git a/config.tests/x86_simd/x86_simd.pro b/config.tests/x86_simd/x86_simd.pro
new file mode 100644
index 0000000000..5751432980
--- /dev/null
+++ b/config.tests/x86_simd/x86_simd.pro
@@ -0,0 +1,11 @@
+SOURCES = main.cpp
+for (config, SIMD) {
+ uc = $$upper($$config)
+ DEFINES += QT_COMPILER_SUPPORTS_$${uc}
+
+ add_cflags {
+ cflags = QMAKE_CFLAGS_$${uc}
+ !defined($$cflags, var): error("This compiler does not support $${uc}")
+ QMAKE_CXXFLAGS += $$eval($$cflags)
+ }
+}
diff --git a/config_help.txt b/config_help.txt
index 0bb440b556..4be797cc6b 100644
--- a/config_help.txt
+++ b/config_help.txt
@@ -119,6 +119,11 @@ Build options:
-testcocoon .......... Instrument with the TestCocoon code coverage tool [no]
-gcov ................ Instrument with the GCov code coverage tool [no]
+
+ -trace [backend] ..... Enable instrumentation with tracepoints.
+ Currently supported backends are 'etw' (Windows) and
+ 'lttng' (Linux), or 'yes' for auto-detection. [no]
+
-sanitize {address|thread|memory|undefined}
Instrument with the specified compiler sanitizer.
Note that some sanitizers cannot be combined;
@@ -212,7 +217,6 @@ Component selection:
-dbus-runtime ........ Build Qt D-Bus and dynamically load libdbus-1 [no]
-accessibility ....... Enable accessibility support [yes]
Note: Disabling accessibility is not recommended.
- -qml-debug ........... Enable QML debugging support [yes]
Qt comes with bundled copies of some 3rd party libraries. These are used
by default if auto-detection of the respective system library fails.
diff --git a/configure b/configure
index 08b49a8d12..9757254097 100755
--- a/configure
+++ b/configure
@@ -732,10 +732,6 @@ setBootstrapVariable()
EXTRA_CXXFLAGS="\$(QMAKE_CXXFLAGS) \$(QMAKE_CXXFLAGS_CXX11) \$(QMAKE_CXXFLAGS_SPLIT_SECTIONS)"
EXTRA_LFLAGS="\$(QMAKE_LFLAGS) \$(QMAKE_LFLAGS_GCSECTIONS)"
- if [ "$PLATFORM" = "irix-cc" ] || [ "$PLATFORM" = "irix-cc-64" ]; then
- EXTRA_LFLAGS="$EXTRA_LFLAGS -lm"
- fi
-
[ "$CFG_SILENT" = "yes" ] && CC_TRANSFORM='s,^,\@,' || CC_TRANSFORM=
setBootstrapVariable QMAKE_CC CC "$CC_TRANSFORM"
setBootstrapVariable QMAKE_CXX CXX "$CC_TRANSFORM"
diff --git a/configure.json b/configure.json
index a6f3ed66a9..a7b8149469 100644
--- a/configure.json
+++ b/configure.json
@@ -102,7 +102,6 @@
"platform": "string",
"plugin-manifests": "boolean",
"profile": "boolean",
- "qml-debug": "boolean",
"qreal": "string",
"qtlibinfix": { "type": "string", "name": "qt_libinfix" },
"qtnamespace": { "type": "string", "name": "qt_namespace" },
@@ -219,7 +218,7 @@
},
"testTypeAliases": {
- "compile": [ "library", "architecture" ]
+ "compile": [ "library", "architecture", "x86Simd", "x86SimdAlways" ]
},
"tests": {
@@ -308,6 +307,11 @@
"type": "linkerSupportsFlag",
"flag": "--enable-new-dtags"
},
+ "gdb_index": {
+ "label": "gdb index support",
+ "type": "linkerSupportsFlag",
+ "flag": "--gdb-index"
+ },
"reduce_exports": {
"label": "symbol visibility support",
"type": "compile",
@@ -363,206 +367,88 @@
},
"sse2": {
"label": "SSE2 instructions",
- "type": "compile",
- "test": {
- "include": "emmintrin.h",
- "main": [
- "__m128i a = _mm_setzero_si128();",
- "_mm_maskmoveu_si128(a, _mm_setzero_si128(), 0);"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_SSE2, var): error(\"This compiler does not support SSE2\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE2"
- ]
- }
+ "type": "x86Simd"
},
"sse3": {
"label": "SSE3 instructions",
- "type": "compile",
- "test": {
- "include": "pmmintrin.h",
- "main": [
- "__m128d a = _mm_set1_pd(6.28);",
- "__m128d b = _mm_set1_pd(3.14);",
- "__m128d result = _mm_addsub_pd(a, b);",
- "(void) _mm_movedup_pd(result);"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_SSE3, var): error(\"This compiler does not support SSE3\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE3"
- ]
- }
+ "type": "x86Simd"
},
"ssse3": {
"label": "SSSE3 instructions",
- "type": "compile",
- "test": {
- "include": "tmmintrin.h",
- "main": [
- "__m128i a = _mm_set1_epi32(42);",
- "_mm_abs_epi8(a);",
- "(void) _mm_sign_epi16(a, _mm_set1_epi32(64));"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_SSSE3, var): error(\"This compiler does not support SSSE3\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSSE3"
- ]
- }
+ "type": "x86Simd"
},
"sse4_1": {
"label": "SSE4.1 instructions",
- "type": "compile",
- "test": {
- "include": "smmintrin.h",
- "main": [
- "__m128 a = _mm_setzero_ps();",
- "_mm_ceil_ps(a);",
- "__m128i result = _mm_mullo_epi32(_mm_set1_epi32(42), _mm_set1_epi32(64));",
- "(void)result;"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_SSE4_1, var): error(\"This compiler does not support SSE4.1\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_1"
- ]
- }
+ "type": "x86Simd"
},
"sse4_2": {
"label": "SSE4.2 instructions",
- "type": "compile",
- "test": {
- "include": "nmmintrin.h",
- "main": [
- "__m128i a = _mm_setzero_si128();",
- "__m128i b = _mm_set1_epi32(42);",
- "(void) _mm_cmpestrm(a, 16, b, 16, 0);"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_SSE4_2, var): error(\"This compiler does not support SSE4.2\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_2"
- ]
- }
+ "type": "x86Simd"
},
"aesni": {
"label": "AES new instructions",
- "type": "compile",
- "test": "common/aesni"
+ "type": "x86Simd"
},
"f16c": {
"label": "F16C instructions",
- "type": "compile",
- "test": {
- "include": "immintrin.h",
- "main": [
- "__m128i a = _mm_setzero_si128();",
- "__m128 b = _mm_cvtph_ps(a);",
- "__m256 b256 = _mm256_cvtph_ps(a);",
- "(void) _mm_cvtps_ph(b, 0);",
- "(void) _mm256_cvtps_ph(b256, 0);"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_F16C, var): error(\"This compiler does not support F16C\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_F16C"
- ]
- }
+ "type": "x86Simd"
},
"rdrnd": {
"label": "RDRAND instruction",
- "type": "compile",
- "test": "common/rdrnd"
+ "type": "x86Simd"
},
"shani": {
"label": "SHA new instructions",
- "type": "compile",
- "test": "common/shani"
+ "type": "x86Simd"
},
"avx": {
"label": "AVX instructions",
- "type": "compile",
- "test": {
- "include": "immintrin.h",
- "main": [
- "__m256d a = _mm256_setzero_pd();",
- "__m256d b = _mm256_set1_pd(42.42);",
- "(void) _mm256_add_pd(a, b);"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_AVX, var): error(\"This compiler does not support AVX\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX"
- ]
- }
+ "type": "x86Simd"
},
"avx2": {
"label": "AVX2 instructions",
- "type": "compile",
- "test": {
- "include": "immintrin.h",
- "main": [
- "// AVX",
- "_mm256_zeroall();",
- "__m256i a = _mm256_setzero_si256();",
- "// AVX2",
- "__m256i b = _mm256_and_si256(a, a);",
- "(void) _mm256_add_epi8(a, b);"
- ],
- "qmake": [
- "!defined(QMAKE_CFLAGS_AVX2, var): error(\"This compiler does not support AVX2\")",
- "QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2"
- ]
- }
+ "type": "x86Simd"
},
"avx512f": {
"label": "AVX512 F instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=F"
+ "type": "x86Simd"
},
"avx512er": {
"label": "AVX512 ER instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=ER"
+ "type": "x86Simd"
},
"avx512cd": {
"label": "AVX512 CD instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=CD"
+ "type": "x86Simd"
},
"avx512pf": {
"label": "AVX512 PF instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=PF"
+ "type": "x86Simd"
},
"avx512dq": {
"label": "AVX512 DQ instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=DQ"
+ "type": "x86Simd"
},
"avx512bw": {
"label": "AVX512 BW instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=BW"
+ "type": "x86Simd"
},
"avx512vl": {
"label": "AVX512 VL instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=VL"
+ "type": "x86Simd"
},
"avx512ifma": {
"label": "AVX512 IFMA instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=IFMA"
+ "type": "x86Simd"
},
"avx512vbmi": {
"label": "AVX512 VBMI instructions",
- "type": "compile",
- "test": "avx512",
- "args": "AVX512=VBMI"
+ "type": "x86Simd"
+ },
+ "x86SimdAlways": {
+ "label": "Intrinsics without -mXXX argument",
+ "type": "x86SimdAlways",
+ "test": "x86_simd"
},
"mips_dsp": {
"label": "MIPS DSP instructions",
@@ -932,6 +818,12 @@
"condition": "config.linux && tests.enable_new_dtags",
"output": [ "privateConfig" ]
},
+ "enable_gdb_index": {
+ "label": "Generating GDB index",
+ "autoDetect": "features.developer-build",
+ "condition": "config.gcc && !config.clang && (features.debug || features.force_debug_info || features.debug_and_release) && tests.gdb_index",
+ "output": [ "privateConfig" ]
+ },
"reduce_exports": {
"label": "Reduce amount of exported symbols",
"condition": "!config.win32 && tests.reduce_exports",
@@ -1112,6 +1004,14 @@
{ "type": "define", "name": "QT_COMPILER_SUPPORTS_SHA", "value": 1 }
]
},
+ "x86SimdAlways": {
+ "label": "Intrinsics without -mXXX option",
+ "condition": "(arch.i386 || arch.x86_64) && tests.x86SimdAlways",
+ "output": [
+ "privateConfig",
+ { "type": "define", "name": "QT_COMPILER_SUPPORTS_SIMD_ALWAYS", "value": 1 }
+ ]
+ },
"mips_dsp": {
"label": "DSP",
"condition": "arch.mips && tests.mips_dsp",
@@ -1166,10 +1066,17 @@
"condition": "libs.zlib",
"output": [ "privateFeature" ]
},
+ "future": {
+ "label": "QFuture",
+ "purpose": "Provides QFuture and related classes.",
+ "section": "Kernel",
+ "output": [ "publicFeature" ]
+ },
"concurrent": {
"label": "Qt Concurrent",
"purpose": "Provides a high-level multi-threading API.",
"section": "Kernel",
+ "condition": "features.future",
"output": [ "publicFeature", "feature" ]
},
"dbus": {
@@ -1235,13 +1142,6 @@
"condition": "libs.libudev",
"output": [ "privateFeature" ]
},
- "qml-debug": {
- "label": "QML debugging",
- "output": [
- "privateFeature",
- { "type": "publicQtConfig", "negative": true }
- ]
- },
"compile_examples": {
"label": "Compile examples",
"output": [ "privateConfig" ]
@@ -1376,6 +1276,11 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
"args": "enable_new_dtags",
"condition": "config.linux"
},
+ {
+ "type": "feature",
+ "args": "enable_gdb_index",
+ "condition": "config.gcc && !config.clang && (features.debug || features.force_debug_info || features.debug_and_release)"
+ },
"precompile_header",
"ltcg",
{
@@ -1407,6 +1312,11 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
},
{
"type": "feature",
+ "args": "x86SimdAlways",
+ "condition": "(arch.i386 || arch.x86_64) && !config.msvc"
+ },
+ {
+ "type": "feature",
"args": "neon",
"condition": "arch.arm || arch.arm64"
},
@@ -1454,7 +1364,6 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
"section": "Support enabled for",
"entries": [
"pkg-config",
- "qml-debug",
"libudev",
"system-zlib"
]
diff --git a/configure.pri b/configure.pri
index ea482552c4..a67860fba0 100644
--- a/configure.pri
+++ b/configure.pri
@@ -395,6 +395,29 @@ defineTest(qtConfTest_buildParts) {
return(true)
}
+defineTest(qtConfTest_x86Simd) {
+ simd = $$section(1, ".", -1) # last component
+ $${1}.args = CONFIG+=add_cflags DEFINES+=NO_ATTRIBUTE SIMD=$$simd
+ $${1}.test = x86_simd
+ qtConfTest_compile($${1})
+}
+
+defineTest(qtConfTest_x86SimdAlways) {
+ configs =
+ fpfx = $${currentConfig}.features
+ tpfx = $${currentConfig}.tests
+
+ # Make a list of all passing features whose tests have type=x86Simd
+ for (f, $${tpfx}._KEYS_) {
+ !equals($${tpfx}.$${f}.type, "x86Simd"): \
+ next()
+ qtConfCheckFeature($$f)
+ equals($${fpfx}.$${f}.available, true): configs += $$f
+ }
+ $${1}.literal_args = $$system_quote(SIMD=$$join(configs, " "))
+ qtConfTest_compile($${1})
+}
+
# custom outputs
# this reloads the qmakespec as completely as reasonably possible.
diff --git a/doc/global/qt-cpp-defines.qdocconf b/doc/global/qt-cpp-defines.qdocconf
index 4dbe144913..13533555c5 100644
--- a/doc/global/qt-cpp-defines.qdocconf
+++ b/doc/global/qt-cpp-defines.qdocconf
@@ -13,7 +13,6 @@ defines += Q_QDOC \
QT_DEPRECATED \
QT_DEPRECATED_* \
Q_NO_USING_KEYWORD \
- __cplusplus \
Q_OS_.* \
Q_STDLIB_UNICODE_STRINGS \
Q_COMPILER_INITIALIZER_LISTS \
@@ -21,8 +20,7 @@ defines += Q_QDOC \
Q_COMPILER_UNIFORM_INIT \
Q_COMPILER_RVALUE_REFS
-clangdefines += __cplusplus \
- Q_QDOC \
+clangdefines += Q_QDOC \
Q_CLANG_QDOC \
QT_COMPAT \
QT3_SUPPORT \
diff --git a/examples/corelib/corelib.pro b/examples/corelib/corelib.pro
index a32b8ba51a..014e8af608 100644
--- a/examples/corelib/corelib.pro
+++ b/examples/corelib/corelib.pro
@@ -3,7 +3,7 @@ CONFIG += no_docs_target
SUBDIRS = \
ipc \
- json \
mimetypes \
+ serialization \
threads \
tools
diff --git a/examples/corelib/json/savegame/savegame.pro b/examples/corelib/json/savegame/savegame.pro
deleted file mode 100644
index 6706444506..0000000000
--- a/examples/corelib/json/savegame/savegame.pro
+++ /dev/null
@@ -1,22 +0,0 @@
-QT += core
-QT -= gui
-
-TARGET = savegame
-CONFIG += console
-CONFIG -= app_bundle
-
-TEMPLATE = app
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/corelib/json/savegame
-INSTALLS += target
-
-SOURCES += main.cpp \
- character.cpp \
- game.cpp \
- level.cpp
-
-HEADERS += \
- character.h \
- game.h \
- level.h
diff --git a/examples/corelib/mimetypes/mimetypebrowser/mainwindow.cpp b/examples/corelib/mimetypes/mimetypebrowser/mainwindow.cpp
index 1d36b7e5ef..bc7ec17d1c 100644
--- a/examples/corelib/mimetypes/mimetypebrowser/mainwindow.cpp
+++ b/examples/corelib/mimetypes/mimetypebrowser/mainwindow.cpp
@@ -72,8 +72,8 @@
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, m_model(new MimetypeModel(this))
- , m_treeView(new QTreeView)
- , m_detailsText(new QTextEdit)
+ , m_treeView(new QTreeView(this))
+ , m_detailsText(new QTextEdit(this))
, m_findIndex(0)
{
setWindowTitle(tr("Qt Mime Database Browser"));
@@ -97,9 +97,8 @@ MainWindow::MainWindow(QWidget *parent)
menuBar()->addMenu(tr("&About"))->addAction(tr("&About Qt"), qApp, &QApplication::aboutQt);
- QSplitter *centralSplitter = new QSplitter;
+ QSplitter *centralSplitter = new QSplitter(this);
setCentralWidget(centralSplitter);
- m_treeView = new QTreeView;
m_treeView->setUniformRowHeights(true);
m_treeView->setModel(m_model);
diff --git a/examples/corelib/json/savegame/character.cpp b/examples/corelib/serialization/savegame/character.cpp
index 046cde3091..046cde3091 100644
--- a/examples/corelib/json/savegame/character.cpp
+++ b/examples/corelib/serialization/savegame/character.cpp
diff --git a/examples/corelib/json/savegame/character.h b/examples/corelib/serialization/savegame/character.h
index cbf06d7fd6..cbf06d7fd6 100644
--- a/examples/corelib/json/savegame/character.h
+++ b/examples/corelib/serialization/savegame/character.h
diff --git a/examples/corelib/json/savegame/doc/src/savegame.qdoc b/examples/corelib/serialization/savegame/doc/src/savegame.qdoc
index 06e70680c6..06e70680c6 100644
--- a/examples/corelib/json/savegame/doc/src/savegame.qdoc
+++ b/examples/corelib/serialization/savegame/doc/src/savegame.qdoc
diff --git a/examples/corelib/json/savegame/game.cpp b/examples/corelib/serialization/savegame/game.cpp
index 4caec71a03..4caec71a03 100644
--- a/examples/corelib/json/savegame/game.cpp
+++ b/examples/corelib/serialization/savegame/game.cpp
diff --git a/examples/corelib/json/savegame/game.h b/examples/corelib/serialization/savegame/game.h
index 3da9c148be..3da9c148be 100644
--- a/examples/corelib/json/savegame/game.h
+++ b/examples/corelib/serialization/savegame/game.h
diff --git a/examples/corelib/json/savegame/level.cpp b/examples/corelib/serialization/savegame/level.cpp
index 8eda107f46..8eda107f46 100644
--- a/examples/corelib/json/savegame/level.cpp
+++ b/examples/corelib/serialization/savegame/level.cpp
diff --git a/examples/corelib/json/savegame/level.h b/examples/corelib/serialization/savegame/level.h
index 393524abfd..393524abfd 100644
--- a/examples/corelib/json/savegame/level.h
+++ b/examples/corelib/serialization/savegame/level.h
diff --git a/examples/corelib/json/savegame/main.cpp b/examples/corelib/serialization/savegame/main.cpp
index d091684211..d091684211 100644
--- a/examples/corelib/json/savegame/main.cpp
+++ b/examples/corelib/serialization/savegame/main.cpp
diff --git a/examples/corelib/serialization/savegame/savegame.pro b/examples/corelib/serialization/savegame/savegame.pro
new file mode 100644
index 0000000000..15a38c32ef
--- /dev/null
+++ b/examples/corelib/serialization/savegame/savegame.pro
@@ -0,0 +1,22 @@
+QT += core
+QT -= gui
+
+TARGET = savegame
+CONFIG += console
+CONFIG -= app_bundle
+
+TEMPLATE = app
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/corelib/serialization/savegame
+INSTALLS += target
+
+SOURCES += main.cpp \
+ character.cpp \
+ game.cpp \
+ level.cpp
+
+HEADERS += \
+ character.h \
+ game.h \
+ level.h
diff --git a/examples/corelib/json/json.pro b/examples/corelib/serialization/serialization.pro
index af4d3e6f0f..af4d3e6f0f 100644
--- a/examples/corelib/json/json.pro
+++ b/examples/corelib/serialization/serialization.pro
diff --git a/examples/corelib/threads/mandelbrot/mandelbrotwidget.cpp b/examples/corelib/threads/mandelbrot/mandelbrotwidget.cpp
index fd0060d8a9..b3e4af5dc8 100644
--- a/examples/corelib/threads/mandelbrot/mandelbrotwidget.cpp
+++ b/examples/corelib/threads/mandelbrot/mandelbrotwidget.cpp
@@ -126,7 +126,7 @@ void MandelbrotWidget::paintEvent(QPaintEvent * /* event */)
QString text = tr("Use mouse wheel or the '+' and '-' keys to zoom. "
"Press and hold left mouse button to scroll.");
QFontMetrics metrics = painter.fontMetrics();
- int textWidth = metrics.width(text);
+ int textWidth = metrics.horizontalAdvance(text);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(0, 0, 0, 127));
diff --git a/examples/corelib/tools/tools.pro b/examples/corelib/tools/tools.pro
index 36fa776980..6fb4a1214f 100644
--- a/examples/corelib/tools/tools.pro
+++ b/examples/corelib/tools/tools.pro
@@ -1,7 +1,6 @@
requires(qtHaveModule(widgets))
TEMPLATE = subdirs
-CONFIG += ordered
SUBDIRS = contiguouscache \
customtype \
customtypesending
diff --git a/examples/dbus/complexpingpong/complexpingpong.pro b/examples/dbus/complexpingpong/complexpingpong.pro
index cd618d549d..c30286b732 100644
--- a/examples/dbus/complexpingpong/complexpingpong.pro
+++ b/examples/dbus/complexpingpong/complexpingpong.pro
@@ -1,4 +1,3 @@
TEMPLATE = subdirs
-CONFIG += ordered
win32:CONFIG += console
SUBDIRS = complexping.pro complexpong.pro
diff --git a/examples/dbus/pingpong/pingpong.pro b/examples/dbus/pingpong/pingpong.pro
index 07fca74c9a..654574c76d 100644
--- a/examples/dbus/pingpong/pingpong.pro
+++ b/examples/dbus/pingpong/pingpong.pro
@@ -1,4 +1,3 @@
TEMPLATE = subdirs
-CONFIG += ordered
win32:CONFIG += console
SUBDIRS = ping.pro pong.pro
diff --git a/examples/network/multistreamclient/chatconsumer.h b/examples/network/multistreamclient/chatconsumer.h
index 9e12f99359..e10c0d7850 100644
--- a/examples/network/multistreamclient/chatconsumer.h
+++ b/examples/network/multistreamclient/chatconsumer.h
@@ -64,8 +64,8 @@ class ChatConsumer : public Consumer
public:
explicit ChatConsumer(QObject *parent = nullptr);
- QWidget *widget() Q_DECL_OVERRIDE;
- void readDatagram(const QByteArray &ba) Q_DECL_OVERRIDE;
+ QWidget *widget() override;
+ void readDatagram(const QByteArray &ba) override;
private slots:
void returnPressed();
diff --git a/examples/network/multistreamclient/movieconsumer.h b/examples/network/multistreamclient/movieconsumer.h
index 74321a8505..3f78bf2060 100644
--- a/examples/network/multistreamclient/movieconsumer.h
+++ b/examples/network/multistreamclient/movieconsumer.h
@@ -63,9 +63,9 @@ class MovieConsumer : public Consumer
public:
explicit MovieConsumer(QObject *parent = nullptr);
- QWidget *widget() Q_DECL_OVERRIDE;
- void readDatagram(const QByteArray &ba) Q_DECL_OVERRIDE;
- void serverDisconnected() Q_DECL_OVERRIDE;
+ QWidget *widget() override;
+ void readDatagram(const QByteArray &ba) override;
+ void serverDisconnected() override;
private:
QLabel *label;
diff --git a/examples/network/multistreamclient/timeconsumer.h b/examples/network/multistreamclient/timeconsumer.h
index 3faa4a6b1a..84a7796699 100644
--- a/examples/network/multistreamclient/timeconsumer.h
+++ b/examples/network/multistreamclient/timeconsumer.h
@@ -64,9 +64,9 @@ class TimeConsumer : public Consumer
public:
explicit TimeConsumer(QObject *parent = nullptr);
- QWidget *widget() Q_DECL_OVERRIDE;
- void readDatagram(const QByteArray &ba) Q_DECL_OVERRIDE;
- void serverDisconnected() Q_DECL_OVERRIDE;
+ QWidget *widget() override;
+ void readDatagram(const QByteArray &ba) override;
+ void serverDisconnected() override;
private slots:
void timerTick();
diff --git a/examples/network/multistreamserver/chatprovider.h b/examples/network/multistreamserver/chatprovider.h
index b6ff61a917..c52fa89240 100644
--- a/examples/network/multistreamserver/chatprovider.h
+++ b/examples/network/multistreamserver/chatprovider.h
@@ -59,9 +59,9 @@ class ChatProvider : public Provider
public:
explicit ChatProvider(QObject *parent = nullptr);
- void readDatagram(QSctpSocket &from, const QByteArray &ba) Q_DECL_OVERRIDE;
- void newConnection(QSctpSocket &client) Q_DECL_OVERRIDE;
- void clientDisconnected(QSctpSocket &client) Q_DECL_OVERRIDE;
+ void readDatagram(QSctpSocket &from, const QByteArray &ba) override;
+ void newConnection(QSctpSocket &client) override;
+ void clientDisconnected(QSctpSocket &client) override;
};
#endif
diff --git a/examples/network/multistreamserver/server.h b/examples/network/multistreamserver/server.h
index d9a38e61a4..2380d6ffd6 100644
--- a/examples/network/multistreamserver/server.h
+++ b/examples/network/multistreamserver/server.h
@@ -72,7 +72,7 @@ public:
virtual ~Server();
public slots:
- int exec() Q_DECL_OVERRIDE;
+ int exec() override;
private slots:
void newConnection();
diff --git a/examples/network/multistreamserver/timeprovider.h b/examples/network/multistreamserver/timeprovider.h
index f99cdbc717..a4d08fd67c 100644
--- a/examples/network/multistreamserver/timeprovider.h
+++ b/examples/network/multistreamserver/timeprovider.h
@@ -59,7 +59,7 @@ class TimeProvider : public Provider
public:
explicit TimeProvider(QObject *parent = nullptr);
- void readDatagram(QSctpSocket &from, const QByteArray &ba) Q_DECL_OVERRIDE;
+ void readDatagram(QSctpSocket &from, const QByteArray &ba) override;
};
#endif
diff --git a/examples/network/torrent/mainwindow.cpp b/examples/network/torrent/mainwindow.cpp
index efdf187174..f80c2c6975 100644
--- a/examples/network/torrent/mainwindow.cpp
+++ b/examples/network/torrent/mainwindow.cpp
@@ -129,12 +129,12 @@ MainWindow::MainWindow(QWidget *parent)
// Set header resize modes and initial section sizes
QFontMetrics fm = fontMetrics();
QHeaderView *header = torrentView->header();
- header->resizeSection(0, fm.width("typical-name-for-a-torrent.torrent"));
- header->resizeSection(1, fm.width(headers.at(1) + " "));
- header->resizeSection(2, fm.width(headers.at(2) + " "));
- header->resizeSection(3, qMax(fm.width(headers.at(3) + " "), fm.width(" 1234.0 KB/s ")));
- header->resizeSection(4, qMax(fm.width(headers.at(4) + " "), fm.width(" 1234.0 KB/s ")));
- header->resizeSection(5, qMax(fm.width(headers.at(5) + " "), fm.width(tr("Downloading") + " ")));
+ header->resizeSection(0, fm.horizontalAdvance("typical-name-for-a-torrent.torrent"));
+ header->resizeSection(1, fm.horizontalAdvance(headers.at(1) + " "));
+ header->resizeSection(2, fm.horizontalAdvance(headers.at(2) + " "));
+ header->resizeSection(3, qMax(fm.horizontalAdvance(headers.at(3) + " "), fm.horizontalAdvance(" 1234.0 KB/s ")));
+ header->resizeSection(4, qMax(fm.horizontalAdvance(headers.at(4) + " "), fm.horizontalAdvance(" 1234.0 KB/s ")));
+ header->resizeSection(5, qMax(fm.horizontalAdvance(headers.at(5) + " "), fm.horizontalAdvance(tr("Downloading") + " ")));
// Create common actions
QAction *newTorrentAction = new QAction(QIcon(":/icons/bottom.png"), tr("Add &new torrent"), this);
@@ -174,14 +174,14 @@ MainWindow::MainWindow(QWidget *parent)
bottomBar->addWidget(new QLabel(tr("Max download:")));
bottomBar->addWidget(downloadLimitSlider);
bottomBar->addWidget((downloadLimitLabel = new QLabel(tr("0 KB/s"))));
- downloadLimitLabel->setFixedSize(QSize(fm.width(tr("99999 KB/s")), fm.lineSpacing()));
+ downloadLimitLabel->setFixedSize(QSize(fm.horizontalAdvance(tr("99999 KB/s")), fm.lineSpacing()));
bottomBar->addSeparator();
uploadLimitSlider = new QSlider(Qt::Horizontal);
uploadLimitSlider->setRange(0, 1000);
bottomBar->addWidget(new QLabel(tr("Max upload:")));
bottomBar->addWidget(uploadLimitSlider);
bottomBar->addWidget((uploadLimitLabel = new QLabel(tr("0 KB/s"))));
- uploadLimitLabel->setFixedSize(QSize(fm.width(tr("99999 KB/s")), fm.lineSpacing()));
+ uploadLimitLabel->setFixedSize(QSize(fm.horizontalAdvance(tr("99999 KB/s")), fm.lineSpacing()));
#ifdef Q_OS_OSX
setUnifiedTitleAndToolBarOnMac(true);
@@ -220,7 +220,7 @@ QSize MainWindow::sizeHint() const
// Add up the sizes of all header sections. The last section is
// stretched, so its size is relative to the size of the width;
// instead of counting it, we count the size of its largest value.
- int width = fontMetrics().width(tr("Downloading") + " ");
+ int width = fontMetrics().horizontalAdvance(tr("Downloading") + " ");
for (int i = 0; i < header->count() - 1; ++i)
width += header->sectionSize(i);
diff --git a/examples/opengl/computegles31/glwindow.h b/examples/opengl/computegles31/glwindow.h
index 877f7b732e..f243858a45 100644
--- a/examples/opengl/computegles31/glwindow.h
+++ b/examples/opengl/computegles31/glwindow.h
@@ -86,7 +86,7 @@ public:
void setBlurRadius(float blurRadius);
protected:
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) override;
void setAnimating(bool animate);
private:
diff --git a/examples/opengl/qopenglwindow/background_renderer.cpp b/examples/opengl/qopenglwindow/background_renderer.cpp
index d57198444e..cba4ae1f2f 100644
--- a/examples/opengl/qopenglwindow/background_renderer.cpp
+++ b/examples/opengl/qopenglwindow/background_renderer.cpp
@@ -146,7 +146,7 @@ void FragmentToy::draw(const QSize &windowSize)
m_fragment_shader.reset(new QOpenGLShader(QOpenGLShader::Fragment));
if (!m_fragment_shader->compileSourceCode(data)) {
qWarning() << "Failed to compile fragment shader:" << m_fragment_shader->log();
- m_fragment_shader.reset(Q_NULLPTR);
+ m_fragment_shader.reset(nullptr);
}
} else {
qWarning() << "Unknown error, no fragment shader";
@@ -198,14 +198,14 @@ void FragmentToy::fileChanged(const QString &path)
m_recompile_shaders = true;
if (m_program) {
m_program->removeShader(m_fragment_shader.data());
- m_fragment_shader.reset(Q_NULLPTR);
+ m_fragment_shader.reset(nullptr);
}
}
} else {
m_recompile_shaders = true;
if (m_program) {
m_program->removeShader(m_fragment_shader.data());
- m_fragment_shader.reset(Q_NULLPTR);
+ m_fragment_shader.reset(nullptr);
}
}
}
diff --git a/examples/widgets/desktop/desktop.pro b/examples/widgets/desktop/desktop.pro
index db518c1c7a..4c9d0e2cec 100644
--- a/examples/widgets/desktop/desktop.pro
+++ b/examples/widgets/desktop/desktop.pro
@@ -1,3 +1,2 @@
TEMPLATE = subdirs
-CONFIG += ordered
SUBDIRS = screenshot systray
diff --git a/examples/widgets/doc/src/stylesheet.qdoc b/examples/widgets/doc/src/stylesheet.qdoc
index a86b697059..26c5663022 100644
--- a/examples/widgets/doc/src/stylesheet.qdoc
+++ b/examples/widgets/doc/src/stylesheet.qdoc
@@ -48,7 +48,7 @@
\section1 MainWindow Class
\c MainWindow inherits QWidget, and is the application's main window defined in
- \c mainwindow.ui. The style of \c MainWindow can be modified with \l StyleSheetEditor.
+ \c mainwindow.ui. The style of \c MainWindow can be modified with \c StyleSheetEditor.
\section1 StyleSheetEditor Class
diff --git a/examples/widgets/doc/src/wiggly.qdoc b/examples/widgets/doc/src/wiggly.qdoc
index f330b016df..d70d609e2b 100644
--- a/examples/widgets/doc/src/wiggly.qdoc
+++ b/examples/widgets/doc/src/wiggly.qdoc
@@ -143,10 +143,10 @@
position on the wiggly line based on \c step. In addition, \c x
is incremented by the character's width.
- For simplicity, we assume that QFontMetrics::width(\c text)
- returns the sum of the individual character widths
- (QFontMetrics::width(\c text[i])). In practice, this is not
- always the case because QFontMetrics::width(\c text) also takes
+ For simplicity, we assume that QFontMetrics::horizontalAdvance(\c text)
+ returns the sum of the individual character advances
+ (QFontMetrics::horizontalAdvance(\c text[i])). In practice, this is not
+ always the case because QFontMetrics::horizontalAdvance(\c text) also takes
into account the kerning between certain letters (e.g., 'A' and
'V'). The result is that the text isn't perfectly centered. You
can verify this by typing "AVAVAVAVAVAV" in the line edit.
diff --git a/examples/widgets/effects/fademessage/fademessage.cpp b/examples/widgets/effects/fademessage/fademessage.cpp
index d91293288c..9943147bb7 100644
--- a/examples/widgets/effects/fademessage/fademessage.cpp
+++ b/examples/widgets/effects/fademessage/fademessage.cpp
@@ -108,7 +108,7 @@ void FadeMessage::setupScene()
int fh = fontMetrics.height();
QString sceneText = "Qt Everywhere!";
- int sceneTextWidth = fontMetrics.width(sceneText);
+ int sceneTextWidth = fontMetrics.horizontalAdvance(sceneText);
QGraphicsRectItem *block = m_scene.addRect(50, 300, sceneTextWidth, fh + 3);
block->setPen(Qt::NoPen);
diff --git a/examples/widgets/itemviews/fetchmore/filelistmodel.cpp b/examples/widgets/itemviews/fetchmore/filelistmodel.cpp
index cd21712e04..086d45eca3 100644
--- a/examples/widgets/itemviews/fetchmore/filelistmodel.cpp
+++ b/examples/widgets/itemviews/fetchmore/filelistmodel.cpp
@@ -103,6 +103,9 @@ void FileListModel::fetchMore(const QModelIndex & /* index */)
int remainder = fileList.size() - fileCount;
int itemsToFetch = qMin(100, remainder);
+ if (itemsToFetch <= 0)
+ return;
+
beginInsertRows(QModelIndex(), fileCount, fileCount+itemsToFetch-1);
fileCount += itemsToFetch;
diff --git a/examples/widgets/itemviews/flattreeview/flattreeview.pro b/examples/widgets/itemviews/flattreeview/flattreeview.pro
new file mode 100644
index 0000000000..05a6573d33
--- /dev/null
+++ b/examples/widgets/itemviews/flattreeview/flattreeview.pro
@@ -0,0 +1,7 @@
+QT += widgets
+
+SOURCES = main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/flattreeview
+INSTALLS += target
diff --git a/examples/widgets/itemviews/flattreeview/main.cpp b/examples/widgets/itemviews/flattreeview/main.cpp
new file mode 100644
index 0000000000..e9bbb3fab1
--- /dev/null
+++ b/examples/widgets/itemviews/flattreeview/main.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*
+ main.cpp
+
+ A simple example that shows a multi-column list using QTreeView.
+ The data is not a tree, so the first column was made movable.
+*/
+
+#include <QApplication>
+#include <QHeaderView>
+#include <QStandardItemModel>
+#include <QTreeView>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QStandardItemModel model(4, 2);
+ QTreeView treeView;
+ treeView.setModel(&model);
+ treeView.setRootIsDecorated(false);
+ treeView.header()->setFirstSectionMovable(true);
+ treeView.header()->setStretchLastSection(true);
+
+ for (int row = 0; row < 4; ++row) {
+ for (int column = 0; column < 2; ++column) {
+ QModelIndex index = model.index(row, column, QModelIndex());
+ model.setData(index, QVariant((row + 1) * (column + 1)));
+ }
+ }
+
+ treeView.setWindowTitle(QObject::tr("Flat Tree View"));
+ treeView.show();
+ return app.exec();
+}
diff --git a/examples/widgets/itemviews/itemviews.pro b/examples/widgets/itemviews/itemviews.pro
index 787217a8e8..75307bd74e 100644
--- a/examples/widgets/itemviews/itemviews.pro
+++ b/examples/widgets/itemviews/itemviews.pro
@@ -8,6 +8,7 @@ SUBDIRS = addressbook \
dirview \
editabletreemodel \
fetchmore \
+ flattreeview \
frozencolumn \
interview \
pixelator \
diff --git a/examples/widgets/itemviews/puzzle/piecesmodel.cpp b/examples/widgets/itemviews/puzzle/piecesmodel.cpp
index f0649d3776..28b46836f4 100644
--- a/examples/widgets/itemviews/puzzle/piecesmodel.cpp
+++ b/examples/widgets/itemviews/puzzle/piecesmodel.cpp
@@ -203,10 +203,12 @@ Qt::DropActions PiecesModel::supportedDropActions() const
void PiecesModel::addPieces(const QPixmap& pixmap)
{
- beginRemoveRows(QModelIndex(), 0, 24);
- pixmaps.clear();
- locations.clear();
- endRemoveRows();
+ if (!pixmaps.isEmpty()) {
+ beginRemoveRows(QModelIndex(), 0, pixmaps.size() - 1);
+ pixmaps.clear();
+ locations.clear();
+ endRemoveRows();
+ }
for (int y = 0; y < 5; ++y) {
for (int x = 0; x < 5; ++x) {
QPixmap pieceImage = pixmap.copy(x*m_PieceSize, y*m_PieceSize, m_PieceSize, m_PieceSize);
diff --git a/examples/widgets/itemviews/spreadsheet/spreadsheetitem.cpp b/examples/widgets/itemviews/spreadsheet/spreadsheetitem.cpp
index e9d5235ddc..4c18fa8251 100644
--- a/examples/widgets/itemviews/spreadsheet/spreadsheetitem.cpp
+++ b/examples/widgets/itemviews/spreadsheet/spreadsheetitem.cpp
@@ -117,7 +117,7 @@ QVariant SpreadSheetItem::computeFormula(const QString &formula,
const QTableWidget *widget,
const QTableWidgetItem *self)
{
- // check if the s tring is actually a formula or not
+ // check if the string is actually a formula or not
QStringList list = formula.split(' ');
if (list.isEmpty() || !widget)
return formula; // it is a normal string
diff --git a/examples/widgets/mainwindows/mainwindow/colorswatch.cpp b/examples/widgets/mainwindows/mainwindow/colorswatch.cpp
index c47b80275f..720f9a2085 100644
--- a/examples/widgets/mainwindows/mainwindow/colorswatch.cpp
+++ b/examples/widgets/mainwindows/mainwindow/colorswatch.cpp
@@ -468,7 +468,7 @@ static ColorSwatch *findByName(const QMainWindow *mainWindow, const QString &nam
if (name == dock->objectName())
return dock;
}
- return Q_NULLPTR;
+ return nullptr;
}
void ColorSwatch::splitInto(QAction *action)
diff --git a/examples/widgets/mainwindows/mainwindow/colorswatch.h b/examples/widgets/mainwindows/mainwindow/colorswatch.h
index ec9d9e7372..7f73e46f31 100644
--- a/examples/widgets/mainwindows/mainwindow/colorswatch.h
+++ b/examples/widgets/mainwindows/mainwindow/colorswatch.h
@@ -62,7 +62,7 @@ class ColorSwatch : public QDockWidget
Q_OBJECT
public:
- explicit ColorSwatch(const QString &colorName, QMainWindow *parent = Q_NULLPTR, Qt::WindowFlags flags = 0);
+ explicit ColorSwatch(const QString &colorName, QMainWindow *parent = nullptr, Qt::WindowFlags flags = 0);
void setCustomSizeHint(const QSize &size);
QMenu *colorSwatchMenu() const { return menu; }
@@ -128,7 +128,7 @@ class BlueTitleBar : public QWidget
{
Q_OBJECT
public:
- explicit BlueTitleBar(QWidget *parent = Q_NULLPTR);
+ explicit BlueTitleBar(QWidget *parent = nullptr);
QSize sizeHint() const override { return minimumSizeHint(); }
QSize minimumSizeHint() const override;
diff --git a/examples/widgets/mainwindows/mainwindow/main.cpp b/examples/widgets/mainwindows/mainwindow/main.cpp
index c78022e392..b82f67b361 100644
--- a/examples/widgets/mainwindows/mainwindow/main.cpp
+++ b/examples/widgets/mainwindows/mainwindow/main.cpp
@@ -175,6 +175,8 @@ static ParseCommandLineArgumentsResult
int main(int argc, char **argv)
{
+ QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+ QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QApplication app(argc, argv);
MainWindow::CustomSizeHintMap customSizeHints;
switch (parseCustomSizeHints(QCoreApplication::arguments(), &customSizeHints)) {
diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.cpp b/examples/widgets/mainwindows/mainwindow/mainwindow.cpp
index afceddfca1..b2c5ccc473 100644
--- a/examples/widgets/mainwindows/mainwindow/mainwindow.cpp
+++ b/examples/widgets/mainwindows/mainwindow/mainwindow.cpp
@@ -382,7 +382,7 @@ void MainWindow::switchLayoutDirection()
class CreateDockWidgetDialog : public QDialog
{
public:
- explicit CreateDockWidgetDialog(QWidget *parent = Q_NULLPTR);
+ explicit CreateDockWidgetDialog(QWidget *parent = nullptr);
QString enteredObjectName() const { return m_objectName->text(); }
Qt::DockWidgetArea location() const;
diff --git a/examples/widgets/mainwindows/mainwindow/mainwindow.h b/examples/widgets/mainwindows/mainwindow/mainwindow.h
index af4f1f5745..9b1af6df80 100644
--- a/examples/widgets/mainwindows/mainwindow/mainwindow.h
+++ b/examples/widgets/mainwindows/mainwindow/mainwindow.h
@@ -64,7 +64,7 @@ public:
typedef QMap<QString, QSize> CustomSizeHintMap;
explicit MainWindow(const CustomSizeHintMap &customSizeHints,
- QWidget *parent = Q_NULLPTR,
+ QWidget *parent = nullptr,
Qt::WindowFlags flags = 0);
public slots:
diff --git a/examples/widgets/mainwindows/mainwindow/toolbar.cpp b/examples/widgets/mainwindows/mainwindow/toolbar.cpp
index 814cfc7f4d..7c96f5b1be 100644
--- a/examples/widgets/mainwindows/mainwindow/toolbar.cpp
+++ b/examples/widgets/mainwindows/mainwindow/toolbar.cpp
@@ -62,10 +62,10 @@
#include <stdlib.h>
-static QPixmap genIcon(const QSize &iconSize, const QString &, const QColor &color)
+static QPixmap genIcon(const QSize &iconSize, const QString &, const QColor &color, qreal pixelRatio)
{
- int w = iconSize.width();
- int h = iconSize.height();
+ int w = qRound(iconSize.width() * pixelRatio);
+ int h = qRound(iconSize.height() * pixelRatio);
QImage image(w, h, QImage::Format_ARGB32_Premultiplied);
image.fill(0);
@@ -75,38 +75,41 @@ static QPixmap genIcon(const QSize &iconSize, const QString &, const QColor &col
extern void render_qt_text(QPainter *, int, int, const QColor &);
render_qt_text(&p, w, h, color);
- return QPixmap::fromImage(image, Qt::DiffuseDither | Qt::DiffuseAlphaDither);
+ QPixmap pm = QPixmap::fromImage(image, Qt::DiffuseDither | Qt::DiffuseAlphaDither);
+ pm.setDevicePixelRatio(pixelRatio);
+ return pm;
}
-static QPixmap genIcon(const QSize &iconSize, int number, const QColor &color)
-{ return genIcon(iconSize, QString::number(number), color); }
+static QPixmap genIcon(const QSize &iconSize, int number, const QColor &color, qreal pixelRatio)
+{ return genIcon(iconSize, QString::number(number), color, pixelRatio); }
ToolBar::ToolBar(const QString &title, QWidget *parent)
: QToolBar(parent)
- , spinbox(Q_NULLPTR)
- , spinboxAction(Q_NULLPTR)
+ , spinbox(nullptr)
+ , spinboxAction(nullptr)
{
setWindowTitle(title);
setObjectName(title);
setIconSize(QSize(32, 32));
+ qreal dpr = devicePixelRatioF();
menu = new QMenu("One", this);
- menu->setIcon(genIcon(iconSize(), 1, Qt::black));
- menu->addAction(genIcon(iconSize(), "A", Qt::blue), "A");
- menu->addAction(genIcon(iconSize(), "B", Qt::blue), "B");
- menu->addAction(genIcon(iconSize(), "C", Qt::blue), "C");
+ menu->setIcon(genIcon(iconSize(), 1, Qt::black, dpr));
+ menu->addAction(genIcon(iconSize(), "A", Qt::blue, dpr), "A");
+ menu->addAction(genIcon(iconSize(), "B", Qt::blue, dpr), "B");
+ menu->addAction(genIcon(iconSize(), "C", Qt::blue, dpr), "C");
addAction(menu->menuAction());
- QAction *two = addAction(genIcon(iconSize(), 2, Qt::white), "Two");
+ QAction *two = addAction(genIcon(iconSize(), 2, Qt::white, dpr), "Two");
QFont boldFont;
boldFont.setBold(true);
two->setFont(boldFont);
- addAction(genIcon(iconSize(), 3, Qt::red), "Three");
- addAction(genIcon(iconSize(), 4, Qt::green), "Four");
- addAction(genIcon(iconSize(), 5, Qt::blue), "Five");
- addAction(genIcon(iconSize(), 6, Qt::yellow), "Six");
+ addAction(genIcon(iconSize(), 3, Qt::red, dpr), "Three");
+ addAction(genIcon(iconSize(), 4, Qt::green, dpr), "Four");
+ addAction(genIcon(iconSize(), 5, Qt::blue, dpr), "Five");
+ addAction(genIcon(iconSize(), 6, Qt::yellow, dpr), "Six");
orderAction = new QAction(this);
orderAction->setText(tr("Order Items in Tool Bar"));
connect(orderAction, &QAction::triggered, this, &ToolBar::order);
diff --git a/examples/widgets/mainwindows/sdi/main.cpp b/examples/widgets/mainwindows/sdi/main.cpp
index bed990d34d..6e29fafd6f 100644
--- a/examples/widgets/mainwindows/sdi/main.cpp
+++ b/examples/widgets/mainwindows/sdi/main.cpp
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
parser.addPositionalArgument("file", "The file(s) to open.");
parser.process(app);
- MainWindow *mainWin = Q_NULLPTR;
+ MainWindow *mainWin = nullptr;
foreach (const QString &file, parser.positionalArguments()) {
MainWindow *newWin = new MainWindow(file);
newWin->tile(mainWin);
diff --git a/examples/widgets/painting/deform/pathdeform.cpp b/examples/widgets/painting/deform/pathdeform.cpp
index 3f72a33902..490a8508d6 100644
--- a/examples/widgets/painting/deform/pathdeform.cpp
+++ b/examples/widgets/painting/deform/pathdeform.cpp
@@ -364,7 +364,7 @@ void PathDeformRenderer::setText(const QString &text)
path.addText(advance, f, text.mid(i, 1));
m_pathBounds |= path.boundingRect();
m_paths << path;
- advance += QPointF(fm.width(text.mid(i, 1)), 0);
+ advance += QPointF(fm.horizontalAdvance(text.mid(i, 1)), 0);
}
} else {
QPainterPath path;
diff --git a/examples/widgets/painting/shared/arthurstyle.cpp b/examples/widgets/painting/shared/arthurstyle.cpp
index 484eaec31c..f4fc76bda6 100644
--- a/examples/widgets/painting/shared/arthurstyle.cpp
+++ b/examples/widgets/painting/shared/arthurstyle.cpp
@@ -294,7 +294,7 @@ void ArthurStyle::drawComplexControl(ComplexControl control, const QStyleOptionC
QPixmap titleLeft = cached(":res/images/title_cap_left.png");
QPixmap titleRight = cached(":res/images/title_cap_right.png");
QPixmap titleStretch = cached(":res/images/title_stretch.png");
- int txt_width = groupBox->fontMetrics.width(groupBox->text) + 20;
+ int txt_width = groupBox->fontMetrics.horizontalAdvance(groupBox->text) + 20;
painter->drawPixmap(r.center().x() - txt_width/2, 0, titleLeft);
QRect tileRect = subControlRect(control, groupBox, SC_GroupBoxLabel, widget);
painter->drawTiledPixmap(tileRect, titleStretch);
@@ -385,7 +385,7 @@ QRect ArthurStyle::subControlRect(ComplexControl control, const QStyleOptionComp
QPixmap titleLeft = cached(":res/images/title_cap_left.png");
QPixmap titleRight = cached(":res/images/title_cap_right.png");
QPixmap titleStretch = cached(":res/images/title_stretch.png");
- int txt_width = group->fontMetrics.width(group->text) + 20;
+ int txt_width = group->fontMetrics.horizontalAdvance(group->text) + 20;
rect = QRect(group->rect.center().x() - txt_width/2 + titleLeft.width(), 0,
txt_width - titleLeft.width() - titleRight.width(),
titleStretch.height());
diff --git a/examples/widgets/statemachine/rogue/window.cpp b/examples/widgets/statemachine/rogue/window.cpp
index 3515138382..059fbf1003 100644
--- a/examples/widgets/statemachine/rogue/window.cpp
+++ b/examples/widgets/statemachine/rogue/window.cpp
@@ -98,7 +98,7 @@ void Window::paintEvent(QPaintEvent * /* event */)
QFontMetrics metrics(font());
QPainter painter(this);
int fontHeight = metrics.height();
- int fontWidth = metrics.width('X');
+ int fontWidth = metrics.horizontalAdvance('X');
int yPos = fontHeight;
int xPos;
@@ -177,7 +177,7 @@ QSize Window::sizeHint() const
{
QFontMetrics metrics(font());
- return QSize(metrics.width('X') * WIDTH, metrics.height() * (HEIGHT + 1));
+ return QSize(metrics.horizontalAdvance('X') * WIDTH, metrics.height() * (HEIGHT + 1));
}
//![2]
diff --git a/examples/widgets/tools/codecs/previewform.h b/examples/widgets/tools/codecs/previewform.h
index 1846b976de..6335b6539f 100644
--- a/examples/widgets/tools/codecs/previewform.h
+++ b/examples/widgets/tools/codecs/previewform.h
@@ -69,7 +69,7 @@ class PreviewForm : public QDialog
Q_OBJECT
public:
- explicit PreviewForm(QWidget *parent = Q_NULLPTR);
+ explicit PreviewForm(QWidget *parent = nullptr);
void setCodecList(const QList<QTextCodec *> &list);
void setEncodedData(const QByteArray &data);
diff --git a/examples/widgets/tools/completer/fsmodel.h b/examples/widgets/tools/completer/fsmodel.h
index a243c48b43..7b2e7b7dab 100644
--- a/examples/widgets/tools/completer/fsmodel.h
+++ b/examples/widgets/tools/completer/fsmodel.h
@@ -55,7 +55,7 @@
// With a QFileSystemModel, set on a view, you will see "Program Files" in the view
// But with this model, you will see "C:\Program Files" in the view.
-// We acheive this, by having the data() return the entire file path for
+// We achieve this, by having the data() return the entire file path for
// the display role. Note that the Qt::EditRole over which the QCompleter
// looks for matches is left unchanged
//! [0]
diff --git a/examples/widgets/tools/settingseditor/mainwindow.cpp b/examples/widgets/tools/settingseditor/mainwindow.cpp
index ab9837c513..a7a1e9b415 100644
--- a/examples/widgets/tools/settingseditor/mainwindow.cpp
+++ b/examples/widgets/tools/settingseditor/mainwindow.cpp
@@ -56,7 +56,7 @@
MainWindow::MainWindow()
: settingsTree(new SettingsTree)
- , locationDialog(Q_NULLPTR)
+ , locationDialog(nullptr)
{
setCentralWidget(settingsTree);
diff --git a/examples/widgets/widgets/charactermap/characterwidget.cpp b/examples/widgets/widgets/charactermap/characterwidget.cpp
index 55d45501f1..5bab921516 100644
--- a/examples/widgets/widgets/charactermap/characterwidget.cpp
+++ b/examples/widgets/widgets/charactermap/characterwidget.cpp
@@ -181,7 +181,7 @@ void CharacterWidget::paintEvent(QPaintEvent *event)
if (key == lastKey)
painter.fillRect(column*squareSize + 1, row*squareSize + 1, squareSize, squareSize, QBrush(Qt::red));
- painter.drawText(column*squareSize + (squareSize / 2) - fontMetrics.width(QChar(key))/2,
+ painter.drawText(column*squareSize + (squareSize / 2) - fontMetrics.horizontalAdvance(QChar(key))/2,
row*squareSize + 4 + fontMetrics.ascent(),
QString(QChar(key)));
}
diff --git a/examples/widgets/widgets/charactermap/mainwindow.cpp b/examples/widgets/widgets/charactermap/mainwindow.cpp
index 5f17128a2f..d3ac55483c 100644
--- a/examples/widgets/widgets/charactermap/mainwindow.cpp
+++ b/examples/widgets/widgets/charactermap/mainwindow.cpp
@@ -244,7 +244,7 @@ void MainWindow::updateClipboard()
class FontInfoDialog : public QDialog
{
public:
- explicit FontInfoDialog(QWidget *parent = Q_NULLPTR);
+ explicit FontInfoDialog(QWidget *parent = nullptr);
private:
QString text() const;
diff --git a/examples/widgets/widgets/codeeditor/codeeditor.cpp b/examples/widgets/widgets/codeeditor/codeeditor.cpp
index 69974e72be..7e56a75294 100644
--- a/examples/widgets/widgets/codeeditor/codeeditor.cpp
+++ b/examples/widgets/widgets/codeeditor/codeeditor.cpp
@@ -79,7 +79,7 @@ int CodeEditor::lineNumberAreaWidth()
++digits;
}
- int space = 3 + fontMetrics().width(QLatin1Char('9')) * digits;
+ int space = 3 + fontMetrics().horizontalAdvance(QLatin1Char('9')) * digits;
return space;
}
diff --git a/examples/widgets/widgets/icons/iconpreviewarea.cpp b/examples/widgets/widgets/icons/iconpreviewarea.cpp
index 35379610c5..9cb54c47f6 100644
--- a/examples/widgets/widgets/icons/iconpreviewarea.cpp
+++ b/examples/widgets/widgets/icons/iconpreviewarea.cpp
@@ -190,7 +190,7 @@ QLabel *IconPreviewArea::createPixmapLabel()
//! [5]
void IconPreviewArea::updatePixmapLabels()
{
- QWindow *window = Q_NULLPTR;
+ QWindow *window = nullptr;
if (const QWidget *nativeParent = nativeParentWidget())
window = nativeParent->windowHandle();
for (int column = 0; column < NumModes; ++column) {
diff --git a/examples/widgets/widgets/icons/iconpreviewarea.h b/examples/widgets/widgets/icons/iconpreviewarea.h
index 3ebb9ed3ce..6ea35a5230 100644
--- a/examples/widgets/widgets/icons/iconpreviewarea.h
+++ b/examples/widgets/widgets/icons/iconpreviewarea.h
@@ -66,7 +66,7 @@ class IconPreviewArea : public QWidget
Q_OBJECT
public:
- explicit IconPreviewArea(QWidget *parent = Q_NULLPTR);
+ explicit IconPreviewArea(QWidget *parent = nullptr);
void setIcon(const QIcon &icon);
void setSize(const QSize &size);
diff --git a/examples/widgets/widgets/icons/iconsizespinbox.h b/examples/widgets/widgets/icons/iconsizespinbox.h
index 96a56e75c9..87415ac5d6 100644
--- a/examples/widgets/widgets/icons/iconsizespinbox.h
+++ b/examples/widgets/widgets/icons/iconsizespinbox.h
@@ -59,7 +59,7 @@ class IconSizeSpinBox : public QSpinBox
Q_OBJECT
public:
- explicit IconSizeSpinBox(QWidget *parent = Q_NULLPTR);
+ explicit IconSizeSpinBox(QWidget *parent = nullptr);
int valueFromText(const QString &text) const override;
QString textFromValue(int value) const override;
diff --git a/examples/widgets/widgets/icons/imagedelegate.h b/examples/widgets/widgets/icons/imagedelegate.h
index 928085d85b..3b76b78339 100644
--- a/examples/widgets/widgets/icons/imagedelegate.h
+++ b/examples/widgets/widgets/icons/imagedelegate.h
@@ -59,7 +59,7 @@ class ImageDelegate : public QItemDelegate
Q_OBJECT
public:
- explicit ImageDelegate(QObject *parent = Q_NULLPTR);
+ explicit ImageDelegate(QObject *parent = nullptr);
//! [0]
//! [1]
diff --git a/examples/widgets/widgets/tablet/mainwindow.cpp b/examples/widgets/widgets/tablet/mainwindow.cpp
index feae16dd83..994666d4de 100644
--- a/examples/widgets/widgets/tablet/mainwindow.cpp
+++ b/examples/widgets/widgets/tablet/mainwindow.cpp
@@ -55,7 +55,7 @@
//! [0]
MainWindow::MainWindow(TabletCanvas *canvas)
- : m_canvas(canvas), m_colorDialog(Q_NULLPTR)
+ : m_canvas(canvas), m_colorDialog(nullptr)
{
createMenus();
setWindowTitle(tr("Tablet Example"));
diff --git a/examples/widgets/widgets/tablet/tabletcanvas.cpp b/examples/widgets/widgets/tablet/tabletcanvas.cpp
index 4b11568dfe..73678ab754 100644
--- a/examples/widgets/widgets/tablet/tabletcanvas.cpp
+++ b/examples/widgets/widgets/tablet/tabletcanvas.cpp
@@ -55,7 +55,7 @@
//! [0]
TabletCanvas::TabletCanvas()
- : QWidget(Q_NULLPTR)
+ : QWidget(nullptr)
, m_alphaChannelValuator(TangentialPressureValuator)
, m_colorSaturationValuator(NoValuator)
, m_lineWidthValuator(PressureValuator)
@@ -119,12 +119,12 @@ void TabletCanvas::tabletEvent(QTabletEvent *event)
case QEvent::TabletRelease:
if (m_deviceDown && event->buttons() == Qt::NoButton)
m_deviceDown = false;
+ update();
break;
default:
break;
}
event->accept();
- update();
}
//! [3]
@@ -154,6 +154,7 @@ void TabletCanvas::paintEvent(QPaintEvent *)
//! [5]
void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
{
+ static qreal maxPenRadius = pressureToWidth(1.0);
painter.setRenderHint(QPainter::Antialiasing);
switch (event->device()) {
@@ -169,6 +170,7 @@ void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
painter.setBrush(grad);
qreal radius = grad.radius();
painter.drawEllipse(event->posF(), radius, radius);
+ update(QRect(event->pos() - QPoint(radius, radius), QSize(radius * 2, radius * 2)));
}
break;
case QTabletEvent::RotationStylus:
@@ -188,6 +190,7 @@ void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
poly << event->posF() - brushAdjust;
poly << event->posF() + brushAdjust;
painter.drawConvexPolygon(poly);
+ update(poly.boundingRect().toRect());
}
break;
//! [6]
@@ -217,6 +220,8 @@ void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
case QTabletEvent::Stylus:
painter.setPen(m_pen);
painter.drawLine(lastPoint.pos, event->posF());
+ update(QRect(lastPoint.pos.toPoint(), event->pos()).normalized()
+ .adjusted(-maxPenRadius, -maxPenRadius, maxPenRadius, maxPenRadius));
break;
}
}
diff --git a/examples/widgets/widgets/tablet/tabletcanvas.h b/examples/widgets/widgets/tablet/tabletcanvas.h
index a1b31c65bf..671d5376f8 100644
--- a/examples/widgets/widgets/tablet/tabletcanvas.h
+++ b/examples/widgets/widgets/tablet/tabletcanvas.h
@@ -103,7 +103,7 @@ private:
void initPixmap();
void paintPixmap(QPainter &painter, QTabletEvent *event);
Qt::BrushStyle brushPattern(qreal value);
- qreal pressureToWidth(qreal pressure);
+ static qreal pressureToWidth(qreal pressure);
void updateBrush(const QTabletEvent *event);
void updateCursor(const QTabletEvent *event);
diff --git a/examples/widgets/widgets/wiggly/wigglywidget.cpp b/examples/widgets/widgets/wiggly/wigglywidget.cpp
index 9dfd43ff77..1b8f3cffad 100644
--- a/examples/widgets/widgets/wiggly/wigglywidget.cpp
+++ b/examples/widgets/widgets/wiggly/wigglywidget.cpp
@@ -77,7 +77,7 @@ void WigglyWidget::paintEvent(QPaintEvent * /* event */)
};
QFontMetrics metrics(font());
- int x = (width() - metrics.width(text)) / 2;
+ int x = (width() - metrics.horizontalAdvance(text)) / 2;
int y = (height() + metrics.ascent() - metrics.descent()) / 2;
QColor color;
//! [2]
@@ -91,7 +91,7 @@ void WigglyWidget::paintEvent(QPaintEvent * /* event */)
painter.setPen(color);
painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400),
QString(text[i]));
- x += metrics.width(text[i]);
+ x += metrics.horizontalAdvance(text[i]);
}
}
//! [4]
diff --git a/examples/xml/dombookmarks/xbeltree.h b/examples/xml/dombookmarks/xbeltree.h
index f6c7ef8bfe..c58e1148ff 100644
--- a/examples/xml/dombookmarks/xbeltree.h
+++ b/examples/xml/dombookmarks/xbeltree.h
@@ -67,7 +67,7 @@ public:
protected:
#if !defined(QT_NO_CONTEXTMENU) && !defined(QT_NO_CLIPBOARD)
- void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *event) override;
#endif
private slots:
diff --git a/mkspecs/android-clang/qplatformdefs.h b/mkspecs/android-clang/qplatformdefs.h
index 017233658e..f405c91ecb 100644
--- a/mkspecs/android-clang/qplatformdefs.h
+++ b/mkspecs/android-clang/qplatformdefs.h
@@ -71,10 +71,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
@@ -143,6 +139,7 @@
#define QT_OPEN_CREAT O_CREAT
#define QT_OPEN_TRUNC O_TRUNC
#define QT_OPEN_APPEND O_APPEND
+#define QT_OPEN_EXCL O_EXCL
// Directory iteration
#define QT_DIR DIR
diff --git a/mkspecs/android-g++/qplatformdefs.h b/mkspecs/android-g++/qplatformdefs.h
index 068f437c11..0b92709dd5 100644
--- a/mkspecs/android-g++/qplatformdefs.h
+++ b/mkspecs/android-g++/qplatformdefs.h
@@ -71,10 +71,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
@@ -143,6 +139,7 @@
#define QT_OPEN_CREAT O_CREAT
#define QT_OPEN_TRUNC O_TRUNC
#define QT_OPEN_APPEND O_APPEND
+#define QT_OPEN_EXCL O_EXCL
// Directory iteration
#define QT_DIR DIR
diff --git a/mkspecs/common/aix/qplatformdefs.h b/mkspecs/common/aix/qplatformdefs.h
index 7bb8dfedd2..3606a2f1cb 100644
--- a/mkspecs/common/aix/qplatformdefs.h
+++ b/mkspecs/common/aix/qplatformdefs.h
@@ -75,9 +75,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
// Only AIX 4.3 and better support 64-bit
diff --git a/mkspecs/common/android/qplatformdefs.h b/mkspecs/common/android/qplatformdefs.h
index 048eb47c6c..f75bc4093b 100644
--- a/mkspecs/common/android/qplatformdefs.h
+++ b/mkspecs/common/android/qplatformdefs.h
@@ -70,10 +70,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
@@ -119,6 +115,7 @@
#define QT_OPEN_CREAT O_CREAT
#define QT_OPEN_TRUNC O_TRUNC
#define QT_OPEN_APPEND O_APPEND
+#define QT_OPEN_EXCL O_EXCL
// Directory iteration
#define QT_DIR DIR
diff --git a/mkspecs/common/bsd/qplatformdefs.h b/mkspecs/common/bsd/qplatformdefs.h
index 6c3a00b194..8e976d3290 100644
--- a/mkspecs/common/bsd/qplatformdefs.h
+++ b/mkspecs/common/bsd/qplatformdefs.h
@@ -70,9 +70,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#include "../posix/qplatformdefs.h"
diff --git a/mkspecs/common/gcc-base-unix.conf b/mkspecs/common/gcc-base-unix.conf
index 2d63877dc9..700f228c36 100644
--- a/mkspecs/common/gcc-base-unix.conf
+++ b/mkspecs/common/gcc-base-unix.conf
@@ -19,6 +19,7 @@ QMAKE_LFLAGS_THREAD +=
QMAKE_LFLAGS_RPATH = -Wl,-rpath,
QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link,
QMAKE_LFLAGS_NEW_DTAGS = -Wl,--enable-new-dtags
+QMAKE_LFLAGS_GDB_INDEX = -Wl,--gdb-index
QMAKE_LFLAGS_USE_GOLD = -fuse-ld=gold
# -Bsymbolic-functions (ld) support
diff --git a/mkspecs/common/integrity/qplatformdefs.h b/mkspecs/common/integrity/qplatformdefs.h
index 7039318f25..f0b4dea8e1 100644
--- a/mkspecs/common/integrity/qplatformdefs.h
+++ b/mkspecs/common/integrity/qplatformdefs.h
@@ -68,9 +68,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
// for htonl
#include <arpa/inet.h>
diff --git a/mkspecs/common/mac/qplatformdefs.h b/mkspecs/common/mac/qplatformdefs.h
index 5cacd5a749..1927587097 100644
--- a/mkspecs/common/mac/qplatformdefs.h
+++ b/mkspecs/common/mac/qplatformdefs.h
@@ -70,9 +70,6 @@
#include <sys/wait.h>
#define __APPLE_USE_RFC_3542
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#include "../posix/qplatformdefs.h"
diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf
index e8c94cf18f..ccd809abf3 100644
--- a/mkspecs/common/msvc-version.conf
+++ b/mkspecs/common/msvc-version.conf
@@ -82,6 +82,20 @@ greaterThan(QMAKE_MSC_VER, 1909) {
MSVC_VER = 15.0
COMPAT_MKSPEC = win32-msvc2017
QMAKE_CXXFLAGS += -Zc:referenceBinding
+
+ # Only Visual Studio 2017 version 15.3 / Visual C++ 19.11 & up have support
+ # for AVX-512. We enable the switches anyway and let configure check if they
+ # work.
+ QMAKE_CFLAGS_AVX512F = -arch:AVX512
+ QMAKE_CFLAGS_AVX512ER = -arch:AVX512
+ QMAKE_CFLAGS_AVX512CD = -arch:AVX512
+ QMAKE_CFLAGS_AVX512PF = -arch:AVX512
+ QMAKE_CFLAGS_AVX512DQ = -arch:AVX512
+ QMAKE_CFLAGS_AVX512BW = -arch:AVX512
+ QMAKE_CFLAGS_AVX512VL = -arch:AVX512
+ QMAKE_CFLAGS_AVX512IFMA = -arch:AVX512
+ QMAKE_CFLAGS_AVX512VBMI = -arch:AVX512
+
# For now permissive fails as soon as UWP API comes into play. In qtbase this
# API is used in direct2d, but also in multimedia, positioning and sensors.
# We can try again with a later version of Visual Studio.
diff --git a/mkspecs/common/posix/qplatformdefs.h b/mkspecs/common/posix/qplatformdefs.h
index 90fb90a7e3..3ebc523338 100644
--- a/mkspecs/common/posix/qplatformdefs.h
+++ b/mkspecs/common/posix/qplatformdefs.h
@@ -128,6 +128,7 @@
#define QT_OPEN_CREAT O_CREAT
#define QT_OPEN_TRUNC O_TRUNC
#define QT_OPEN_APPEND O_APPEND
+#define QT_OPEN_EXCL O_EXCL
// Posix extensions to C89
#define QT_FILENO fileno
diff --git a/mkspecs/common/qnx/qplatformdefs.h b/mkspecs/common/qnx/qplatformdefs.h
index 72fc92738c..b30cd96002 100644
--- a/mkspecs/common/qnx/qplatformdefs.h
+++ b/mkspecs/common/qnx/qplatformdefs.h
@@ -73,9 +73,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
// for htonl
#include <arpa/inet.h>
diff --git a/mkspecs/darwin-g++/qplatformdefs.h b/mkspecs/darwin-g++/qplatformdefs.h
index 46a9383238..faed56310d 100644
--- a/mkspecs/darwin-g++/qplatformdefs.h
+++ b/mkspecs/darwin-g++/qplatformdefs.h
@@ -68,9 +68,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/devices/linux-rcar-m3-g++/qmake.conf b/mkspecs/devices/linux-rcar-m3-g++/qmake.conf
new file mode 100644
index 0000000000..1820457ffc
--- /dev/null
+++ b/mkspecs/devices/linux-rcar-m3-g++/qmake.conf
@@ -0,0 +1,17 @@
+#
+# qmake configuration for the Renesas R-Car M3
+#
+
+include(../common/linux_device_pre.conf)
+
+QMAKE_LIBS_EGL += -lEGL
+QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL
+
+DISTRO_OPTS += aarch64
+COMPILER_FLAGS += -march=armv8-a -mtune=cortex-a57.cortex-a53
+
+EGLFS_DEVICE_INTEGRATION = eglfs_kms
+
+include(../common/linux_arm_device_post.conf)
+
+load(qt_config)
diff --git a/mkspecs/devices/linux-rcar-m3-g++/qplatformdefs.h b/mkspecs/devices/linux-rcar-m3-g++/qplatformdefs.h
new file mode 100644
index 0000000000..dff192d7b2
--- /dev/null
+++ b/mkspecs/devices/linux-rcar-m3-g++/qplatformdefs.h
@@ -0,0 +1,40 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "../../linux-g++/qplatformdefs.h"
diff --git a/mkspecs/features/data/android/dx.bat b/mkspecs/features/data/android/dx.bat
deleted file mode 100644
index 9816f9607d..0000000000
--- a/mkspecs/features/data/android/dx.bat
+++ /dev/null
@@ -1,108 +0,0 @@
-@echo off
-REM Copyright (C) 2007 The Android Open Source Project
-REM
-REM Licensed under the Apache License, Version 2.0 (the "License");
-REM you may not use this file except in compliance with the License.
-REM You may obtain a copy of the License at
-REM
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-
-REM If/when Google merge:
-REM https://android-review.googlesource.com/#/c/52680/
-REM this file will become redundant.
-
-REM don't modify the caller's environment
-setlocal
-
-REM Locate dx.jar in the directory where dx.bat was found and start it.
-
-REM Set up prog to be the path of this script, including following symlinks,
-REM and set up progdir to be the fully-qualified pathname of its directory.
-set prog=%~f0
-
-if [%1]==[] goto badArgs
-set "dx_jar_path=%1"
-shift /1
-
-if [%1]==[] goto badArgs
-
-REM Use dpZ here to make it more like the Google version.
-for %%F in ("%dx_jar_path%") do set dpZ=%%~dpF
-
-rem Check we have a valid Java.exe in the path.
-set java_exe=
-if exist "%dpZ%..\tools\lib\find_java.bat" call "%dpZ%..\tools\lib\find_java.bat"
-if exist "%dpZ%..\..\tools\lib\find_java.bat" call "%dpZ%..\..\tools\lib\find_java.bat"
-
-if not defined java_exe goto :EOF
-
-set jarfile=dx.jar
-set "frameworkdir=%dpZ%"
-rem frameworkdir must not end with a dir sep.
-set "frameworkdir=%frameworkdir:~0,-1%"
-
-if exist "%frameworkdir%\%jarfile%" goto JarFileOk
- set "frameworkdir=%dpZ%lib"
-
-if exist "%frameworkdir%\%jarfile%" goto JarFileOk
- set "frameworkdir=%dpZ%..\framework"
-
-:JarFileOk
-
-set "jarpath=%frameworkdir%\%jarfile%"
-
-set javaOpts=
-set args=
-
-REM By default, give dx a max heap size of 1 gig and a stack size of 1meg.
-rem This can be overridden by using "-JXmx..." and "-JXss..." options below.
-set defaultXmx=-Xmx1024M
-set defaultXss=-Xss1m
-
-REM Capture all arguments that are not -J options.
-REM Note that when reading the input arguments with %1, the cmd.exe
-REM automagically converts --name=value arguments into 2 arguments "--name"
-REM followed by "value". Dx has been changed to know how to deal with that.
-set params=
-
-:firstArg
-if [%1]==[] goto endArgs
-set a=%~1
-
- if [%defaultXmx%]==[] goto notXmx
- if %a:~0,5% NEQ -JXmx goto notXmx
- set defaultXmx=
- :notXmx
-
- if [%defaultXss%]==[] goto notXss
- if %a:~0,5% NEQ -JXss goto notXss
- set defaultXss=
- :notXss
-
- if %a:~0,2% NEQ -J goto notJ
- set javaOpts=%javaOpts% -%a:~2%
- shift /1
- goto firstArg
-
- :notJ
- set params=%params% %1
- shift /1
- goto firstArg
-
-:endArgs
-
-set javaOpts=%javaOpts% %defaultXmx% %defaultXss%
-call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
-
-goto :EOF
-
-:badArgs
-echo Usage: dx (for Qt) ^<android_sdk_dx_jar_path^> ^<dx_arguments^>
-echo Example: dx (for Qt) C:\android-sdk\build-tools\17.0.0\dx.jar --dex --output=target.jar .classes
-
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index 7e027325bd..9eba5bcf00 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -80,6 +80,7 @@ stack_protector_strong {
!host_build|!cross_compile {
use_gold_linker: QMAKE_LFLAGS += $$QMAKE_LFLAGS_USE_GOLD
enable_new_dtags: QMAKE_LFLAGS += $$QMAKE_LFLAGS_NEW_DTAGS
+ enable_gdb_index: QMAKE_LFLAGS += $$QMAKE_LFLAGS_GDB_INDEX
}
dll:win32: QMAKE_LFLAGS += $$QMAKE_LFLAGS_DLL
diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf
index f40cc99172..b477cff162 100644
--- a/mkspecs/features/exclusive_builds.prf
+++ b/mkspecs/features/exclusive_builds.prf
@@ -38,5 +38,5 @@ defineTest(addExclusiveBuilds) {
}
# Default directories to process
-QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR
-QMAKE_DIR_REPLACE_SANE += QGLTF_DIR
+QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR TRACEGEN_DIR
+QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR
diff --git a/mkspecs/features/java.prf b/mkspecs/features/java.prf
index 852954e5ca..f1f5e4c10c 100644
--- a/mkspecs/features/java.prf
+++ b/mkspecs/features/java.prf
@@ -7,10 +7,8 @@ android {
CONFIG += android_app
}
-isEmpty(CLASS_DIR) {
- bundled_jar_file: CLASS_DIR = .classes.bundled
- else: CLASS_DIR = .classes
-}
+isEmpty(CLASS_DIR): \
+ CLASS_DIR = .classes
CONFIG -= qt
@@ -39,26 +37,7 @@ QMAKE_LIBS =
QMAKE_LIBS_OPENGL_ES2 =
QMAKE_LIBDIR =
QMAKE_EXTENSION_SHLIB = jar
-
-# Override linker with dex (for distributable Android archives) or jar (for other java builds)
-android:!bundled_jar_file {
- contains(QMAKE_HOST.os, Windows) {
- # The location where dx.bat expects itself to be found is used as the landmark instead
- # of the base sdk folder.
- # Doing it this way makes this logic more similar to the other platforms and
- # also means that our dx.bat is more like Google's dx.bat
- DEX_BAT = $$ANDROID_SDK_ROOT/platform-tools/dx.bat
- !exists($$DEX_BAT): DEX_BAT = $$ANDROID_SDK_ROOT/build-tools/$$ANDROID_SDK_BUILD_TOOLS_REVISION/dx.bat
- DEX_CMD = $$PWD/data/android/dx $$DEX_BAT
- } else {
- DEX_CMD = $$ANDROID_SDK_ROOT/platform-tools/dx
- !exists($$DEX_CMD): DEX_CMD = $$ANDROID_SDK_ROOT/build-tools/$$ANDROID_SDK_BUILD_TOOLS_REVISION/dx
- !exists($$DEX_CMD): error("The path $$DEX_CMD does not exist. Please set the environment variable ANDROID_BUILD_TOOLS_REVISION to the revision of the build tools installed in your Android SDK.")
- }
- QMAKE_LINK_SHLIB_CMD = $$DEX_CMD --dex --output $(TARGET) $$CLASS_DIR
-} else {
- QMAKE_LINK_SHLIB_CMD = jar cf $(TARGET) -C $$CLASS_DIR .
-}
+QMAKE_LINK_SHLIB_CMD = jar cf $(TARGET) -C $$CLASS_DIR .
# Force link step to always happen, since we are always updating the
# .class files
diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf
index 76e1d15319..a2fa1be481 100644
--- a/mkspecs/features/qt_build_config.prf
+++ b/mkspecs/features/qt_build_config.prf
@@ -25,6 +25,7 @@ OBJECTS_DIR = .obj
MOC_DIR = .moc
RCC_DIR = .rcc
UI_DIR = .uic
+TRACEGEN_DIR = .tracegen
intel_icl {
# ICL 14.0 has a bug that makes it not find #includes in dirs starting with .
MOC_DIR = tmp/moc
diff --git a/mkspecs/features/qt_docs.prf b/mkspecs/features/qt_docs.prf
index 72dde61a40..3139c443c6 100644
--- a/mkspecs/features/qt_docs.prf
+++ b/mkspecs/features/qt_docs.prf
@@ -76,11 +76,11 @@ QMAKE_EXTRA_TARGETS += qtattributionsscanner
doc_command = $$QDOC $$QMAKE_DOCS
prepare_docs {
- prepare_docs.commands += $$doc_command -prepare $$PREP_DOC_INDEXES -no-link-errors
- generate_docs.commands += $$doc_command -generate $$DOC_INDEXES
+ prepare_docs.commands += $$doc_command -prepare $$PREP_DOC_INDEXES -no-link-errors $(INCPATH)
+ generate_docs.commands += $$doc_command -generate $$DOC_INDEXES $(INCPATH)
prepare_docs.depends += qtattributionsscanner
} else {
- html_docs.commands += $$doc_command $$DOC_INDEXES
+ html_docs.commands += $$doc_command $$DOC_INDEXES $(INCPATH)
html_docs.depends += qtattributionsscanner
}
diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
index 14fc5f9a94..bf90adcf1e 100644
--- a/mkspecs/features/qt_plugin.prf
+++ b/mkspecs/features/qt_plugin.prf
@@ -95,6 +95,8 @@ TARGET = $$qt5LibraryTarget($$TARGET)
CONFIG += create_cmake
+DEFINES *= QT_DEPRECATED_WARNINGS
+
load(qt_targets)
load(qt_common)
diff --git a/mkspecs/features/qt_tracepoints.prf b/mkspecs/features/qt_tracepoints.prf
new file mode 100644
index 0000000000..d1b45a47cb
--- /dev/null
+++ b/mkspecs/features/qt_tracepoints.prf
@@ -0,0 +1,54 @@
+# W A R N I N G
+# -------------
+#
+# This file is not part of the Qt API. It exists purely as an
+# implementation detail. It may change from version to version
+# without notice, or even be removed.
+#
+# We mean it.
+#
+
+qtPrepareTool(QMAKE_TRACEGEN, tracegen)
+
+isEmpty(TRACEGEN_DIR): TRACEGEN_DIR = .
+
+PROVIDER_NAME = qt$$lower($$MODULE)
+INCLUDEPATH += $$absolute_path($$TRACEGEN_DIR, $$OUT_PWD)
+HEADER_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints_p$${first(QMAKE_EXT_H)}
+
+!force_bootstrap:if(qtConfig(lttng)|qtConfig(etw)) {
+ SOURCE_PATH = $$OUT_PWD/$$TRACEGEN_DIR/$${PROVIDER_NAME}_tracepoints$${first(QMAKE_EXT_CPP)}
+
+ isEmpty(BUILDS)|build_pass {
+ impl_file_contents = \
+ "$${LITERAL_HASH}define TRACEPOINT_CREATE_PROBES" \
+ "$${LITERAL_HASH}define TRACEPOINT_DEFINE" \
+ "$${LITERAL_HASH}include \"$${HEADER_PATH}\""
+
+ write_file($$SOURCE_PATH, impl_file_contents)|error()
+ }
+
+ GENERATED_SOURCES += $$SOURCE_PATH
+
+ tracegen.input = TRACEPOINT_PROVIDER
+ tracegen.output = $$HEADER_PATH
+ tracegen.variable_out = HEADERS
+ tracegen.depends += $$QMAKE_TRACEGEN_EXE
+ tracegen.CONFIG = target_predeps
+
+ qtConfig(lttng) {
+ tracegen.commands = $$QMAKE_TRACEGEN lttng ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ QMAKE_USE_PRIVATE += lttng-ust
+ } else {
+ tracegen.commands = $$QMAKE_TRACEGEN etw ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
+ }
+
+ QMAKE_EXTRA_COMPILERS += tracegen
+
+ DEFINES += Q_TRACEPOINT
+} else {
+ isEmpty(BUILDS)|build_pass {
+ header_file_contents = "$${LITERAL_HASH}include <private/qtrace_p.h>"
+ write_file($$HEADER_PATH, header_file_contents)|error()
+ }
+}
diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf
index 8471ce7e7c..e4bee7107c 100644
--- a/mkspecs/features/simd.prf
+++ b/mkspecs/features/simd.prf
@@ -23,6 +23,7 @@ defineTest(addSimdCompiler) {
upname = $$upper($$name)
headers_var = $${upname}_HEADERS
sources_var = $${upname}_SOURCES
+ csources_var = $${upname}_C_SOURCES
asm_var = $${upname}_ASM
CONFIG($$1) {
@@ -34,6 +35,14 @@ defineTest(addSimdCompiler) {
export(SOURCES)
} else {
# We need special compiler flags
+
+ # Split C and C++ sources
+ $$csources_var = $$find($$sources_var, ".*\\.c$")
+ $$sources_var -= $$eval($$csources_var)
+ export($$csources_var)
+ export($$sources_var)
+
+ # Add C++ compiler
$${name}_compiler.commands = $$QMAKE_CXX -c $(CXXFLAGS) $$cflags $(INCPATH) ${QMAKE_FILE_IN}
msvc: $${name}_compiler.commands += -Fo${QMAKE_FILE_OUT}
else: $${name}_compiler.commands += -o ${QMAKE_FILE_OUT}
@@ -52,6 +61,26 @@ defineTest(addSimdCompiler) {
export($${name}_compiler.input)
export($${name}_compiler.variable_out)
export($${name}_compiler.name)
+
+ # Add a C compiler
+ $${name}_c_compiler.commands = $$QMAKE_CC -c $(CFLAGS) $$cflags $(INCPATH) ${QMAKE_FILE_IN}
+ msvc: $${name}_c_compiler.commands += -Fo${QMAKE_FILE_OUT}
+ else: $${name}_c_compiler.commands += -o ${QMAKE_FILE_OUT}
+
+ $${name}_c_compiler.dependency_type = TYPE_C
+ $${name}_c_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
+ $${name}_c_compiler.input = $$csources_var
+ $${name}_c_compiler.variable_out = OBJECTS
+ $${name}_c_compiler.name = compiling[$${name}] ${QMAKE_FILE_IN}
+ silent: $${name}_c_compiler.commands = @echo compiling[$${name}] ${QMAKE_FILE_IN} && $$eval($${name}_c_compiler.commands)
+ QMAKE_EXTRA_COMPILERS += $${name}_c_compiler
+
+ export($${name}_c_compiler.commands)
+ export($${name}_c_compiler.dependency_type)
+ export($${name}_c_compiler.output)
+ export($${name}_c_compiler.input)
+ export($${name}_c_compiler.variable_out)
+ export($${name}_c_compiler.name)
}
# We always need an assembler (need to run the C compiler and without precompiled headers)
diff --git a/mkspecs/haiku-g++/qplatformdefs.h b/mkspecs/haiku-g++/qplatformdefs.h
index 000541912f..21636c031e 100644
--- a/mkspecs/haiku-g++/qplatformdefs.h
+++ b/mkspecs/haiku-g++/qplatformdefs.h
@@ -67,9 +67,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/hpuxi-g++-64/qplatformdefs.h b/mkspecs/hpuxi-g++-64/qplatformdefs.h
index 966dfcf8c2..816fd0de6c 100644
--- a/mkspecs/hpuxi-g++-64/qplatformdefs.h
+++ b/mkspecs/hpuxi-g++-64/qplatformdefs.h
@@ -70,9 +70,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#define QT_NO_READDIR64
diff --git a/mkspecs/hurd-g++/qplatformdefs.h b/mkspecs/hurd-g++/qplatformdefs.h
index 9ee7de783b..3c80cbdfad 100644
--- a/mkspecs/hurd-g++/qplatformdefs.h
+++ b/mkspecs/hurd-g++/qplatformdefs.h
@@ -76,9 +76,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/linux-clang/qplatformdefs.h b/mkspecs/linux-clang/qplatformdefs.h
index d29225f12f..a818d973f0 100644
--- a/mkspecs/linux-clang/qplatformdefs.h
+++ b/mkspecs/linux-clang/qplatformdefs.h
@@ -75,9 +75,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/linux-g++/qplatformdefs.h b/mkspecs/linux-g++/qplatformdefs.h
index c9c0db7b5e..13523f0702 100644
--- a/mkspecs/linux-g++/qplatformdefs.h
+++ b/mkspecs/linux-g++/qplatformdefs.h
@@ -75,9 +75,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/linux-llvm/qplatformdefs.h b/mkspecs/linux-llvm/qplatformdefs.h
index 1b2a8997cf..dc750ab1ef 100644
--- a/mkspecs/linux-llvm/qplatformdefs.h
+++ b/mkspecs/linux-llvm/qplatformdefs.h
@@ -76,9 +76,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/linux-lsb-g++/qplatformdefs.h b/mkspecs/linux-lsb-g++/qplatformdefs.h
index 0ff012aaf3..4c4e53da2a 100644
--- a/mkspecs/linux-lsb-g++/qplatformdefs.h
+++ b/mkspecs/linux-lsb-g++/qplatformdefs.h
@@ -77,9 +77,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
// LSB 3.1 defines htonl and friends here
#include <arpa/inet.h>
diff --git a/mkspecs/lynxos-g++/qplatformdefs.h b/mkspecs/lynxos-g++/qplatformdefs.h
index 7231b17840..4339ea2b23 100644
--- a/mkspecs/lynxos-g++/qplatformdefs.h
+++ b/mkspecs/lynxos-g++/qplatformdefs.h
@@ -69,9 +69,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/macx-clang/qmake.conf b/mkspecs/macx-clang/qmake.conf
index e34c08954d..170464d08f 100644
--- a/mkspecs/macx-clang/qmake.conf
+++ b/mkspecs/macx-clang/qmake.conf
@@ -2,10 +2,29 @@
# qmake configuration for Clang on OS X
#
-QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
+QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11
QMAKE_APPLE_DEVICE_ARCHS = x86_64
+# Opt-in xcb QPA support with XQuartz:
+#
+# configure \
+# -pkg-config \
+# -fontconfig -system-freetype \
+# -system-xcb -xkb -no-opengl \
+# -qt-xkbcommon -qt-xkbcommon-x11
+#
+# Ensure that pkg-config is properly configured, or that
+# PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/opt/X11/share/pkgconfig
+# is set in your build environment.
+#
+# Due to irreconcilable differences between Cocoa
+# and X11, OpenGL is currently not supported.
+
+QMAKE_LIBS_X11 = -lX11 -lXext -lm
+QMAKE_LIBDIR_X11 = /opt/X11/lib
+QMAKE_INCDIR_X11 = /opt/X11/include
+
include(../common/macx.conf)
include(../common/gcc-base-mac.conf)
include(../common/clang.conf)
diff --git a/mkspecs/macx-g++/qmake.conf b/mkspecs/macx-g++/qmake.conf
index 4209c9a62c..5686610b17 100644
--- a/mkspecs/macx-g++/qmake.conf
+++ b/mkspecs/macx-g++/qmake.conf
@@ -10,7 +10,7 @@ MAKEFILE_GENERATOR = UNIX
CONFIG += app_bundle incremental global_init_link_order lib_version_first
QMAKE_INCREMENTAL_STYLE = sublib
-QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
+QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11
QMAKE_APPLE_DEVICE_ARCHS = x86_64
diff --git a/mkspecs/macx-icc/qmake.conf b/mkspecs/macx-icc/qmake.conf
index 80cffbf9dc..fa3944f843 100644
--- a/mkspecs/macx-icc/qmake.conf
+++ b/mkspecs/macx-icc/qmake.conf
@@ -98,7 +98,7 @@ QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_
QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
+QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11
QMAKE_APPLE_DEVICE_ARCHS = x86_64
diff --git a/mkspecs/solaris-cc-64/qplatformdefs.h b/mkspecs/solaris-cc-64/qplatformdefs.h
index 7a01081933..f430664a9e 100644
--- a/mkspecs/solaris-cc-64/qplatformdefs.h
+++ b/mkspecs/solaris-cc-64/qplatformdefs.h
@@ -70,9 +70,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/solaris-cc/qplatformdefs.h b/mkspecs/solaris-cc/qplatformdefs.h
index a5ad9005a0..8350836deb 100644
--- a/mkspecs/solaris-cc/qplatformdefs.h
+++ b/mkspecs/solaris-cc/qplatformdefs.h
@@ -70,9 +70,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/solaris-g++-64/qplatformdefs.h b/mkspecs/solaris-g++-64/qplatformdefs.h
index 7504912a89..ae559183ff 100644
--- a/mkspecs/solaris-g++-64/qplatformdefs.h
+++ b/mkspecs/solaris-g++-64/qplatformdefs.h
@@ -73,9 +73,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/solaris-g++/qplatformdefs.h b/mkspecs/solaris-g++/qplatformdefs.h
index 112850ee8a..bd14a86b51 100644
--- a/mkspecs/solaris-g++/qplatformdefs.h
+++ b/mkspecs/solaris-g++/qplatformdefs.h
@@ -73,9 +73,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
#define QT_USE_XOPEN_LFS_EXTENSIONS
#include "../common/posix/qplatformdefs.h"
diff --git a/mkspecs/unsupported/qnx-X11-g++/qplatformdefs.h b/mkspecs/unsupported/qnx-X11-g++/qplatformdefs.h
index de4a2cc2cb..e090179f52 100644
--- a/mkspecs/unsupported/qnx-X11-g++/qplatformdefs.h
+++ b/mkspecs/unsupported/qnx-X11-g++/qplatformdefs.h
@@ -72,9 +72,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
// for htonl
#include <arpa/inet.h>
diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix
index 1da4b3727f..426387f0c2 100644
--- a/qmake/Makefile.unix
+++ b/qmake/Makefile.unix
@@ -77,7 +77,6 @@ DEPEND_SRC = \
$(SOURCE_PATH)/src/corelib/global/qrandom.cpp \
$(SOURCE_PATH)/src/corelib/io/qabstractfileengine.cpp \
$(SOURCE_PATH)/src/corelib/io/qbuffer.cpp \
- $(SOURCE_PATH)/src/corelib/io/qdatastream.cpp \
$(SOURCE_PATH)/src/corelib/io/qdebug.cpp \
$(SOURCE_PATH)/src/corelib/io/qdir.cpp \
$(SOURCE_PATH)/src/corelib/io/qdiriterator.cpp \
@@ -91,18 +90,21 @@ DEPEND_SRC = \
$(SOURCE_PATH)/src/corelib/io/qiodevice.cpp \
$(SOURCE_PATH)/src/corelib/io/qsettings.cpp \
$(SOURCE_PATH)/src/corelib/io/qtemporaryfile.cpp \
- $(SOURCE_PATH)/src/corelib/io/qtextstream.cpp \
- $(SOURCE_PATH)/src/corelib/json/qjsonarray.cpp \
- $(SOURCE_PATH)/src/corelib/json/qjson.cpp \
- $(SOURCE_PATH)/src/corelib/json/qjsondocument.cpp \
- $(SOURCE_PATH)/src/corelib/json/qjsonobject.cpp \
- $(SOURCE_PATH)/src/corelib/json/qjsonparser.cpp \
- $(SOURCE_PATH)/src/corelib/json/qjsonvalue.cpp \
$(SOURCE_PATH)/src/corelib/kernel/qcore_mac_objc.mm \
$(SOURCE_PATH)/src/corelib/kernel/qmetatype.cpp \
$(SOURCE_PATH)/src/corelib/kernel/qsystemerror.cpp \
$(SOURCE_PATH)/src/corelib/kernel/qvariant.cpp \
$(SOURCE_PATH)/src/corelib/plugin/quuid.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qdatastream.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qjsonarray.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qjson.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qjsondocument.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qjsonobject.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qjsonparser.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qjsonvalue.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qtextstream.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qxmlstream.cpp \
+ $(SOURCE_PATH)/src/corelib/serialization/qxmlutils.cpp \
$(SOURCE_PATH)/src/corelib/tools/qarraydata.cpp \
$(SOURCE_PATH)/src/corelib/tools/qbitarray.cpp \
$(SOURCE_PATH)/src/corelib/tools/qbytearray.cpp\
@@ -123,8 +125,6 @@ DEPEND_SRC = \
$(SOURCE_PATH)/src/corelib/tools/qstringlist.cpp \
$(SOURCE_PATH)/src/corelib/tools/qversionnumber.cpp \
$(SOURCE_PATH)/src/corelib/tools/qvsnprintf.cpp \
- $(SOURCE_PATH)/src/corelib/xml/qxmlstream.cpp \
- $(SOURCE_PATH)/src/corelib/xml/qxmlutils.cpp \
$(QTSRCS) $(QTSRCS2)
# QTSRCS and QTSRCS2 come from Makefile.unix.* (concatenated with this
# by configure); QTSRCS2 may include *.mm entries on macOS.
@@ -256,9 +256,6 @@ projectgenerator.o: $(QMKSRC)/generators/projectgenerator.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qtextstream.o: $(SOURCE_PATH)/src/corelib/io/qtextstream.cpp
- $(CXX) -c -o $@ $(CXXFLAGS) $<
-
qvariant.o: $(SOURCE_PATH)/src/corelib/kernel/qvariant.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
@@ -367,9 +364,6 @@ qlocale_win.o: $(SOURCE_PATH)/src/corelib/tools/qlocale_win.cpp
qversionnumber.o: $(SOURCE_PATH)/src/corelib/tools/qversionnumber.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qdatastream.o: $(SOURCE_PATH)/src/corelib/io/qdatastream.cpp
- $(CXX) -c -o $@ $(CXXFLAGS) $<
-
qbuffer.o: $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
@@ -454,34 +448,40 @@ qlinkedlist.o: $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp
qcryptographichash.o: $(SOURCE_PATH)/src/corelib/tools/qcryptographichash.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qxmlstream.o: $(SOURCE_PATH)/src/corelib/xml/qxmlstream.cpp
+qlogging.o: $(SOURCE_PATH)/src/corelib/global/qlogging.cpp
+ $(CXX) -c -o $@ $(CXXFLAGS) $<
+
+qsystemlibrary.o: $(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qxmlutils.o: $(SOURCE_PATH)/src/corelib/xml/qxmlutils.cpp
+qdatastream.o: $(SOURCE_PATH)/src/corelib/serialization/qdatastream.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qlogging.o: $(SOURCE_PATH)/src/corelib/global/qlogging.cpp
+qjson.o: $(SOURCE_PATH)/src/corelib/serialization/qjson.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qsystemlibrary.o: $(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp
+qjsondocument.o: $(SOURCE_PATH)/src/corelib/serialization/qjsondocument.cpp
+ $(CXX) -c -o $@ $(CXXFLAGS) $<
+
+qjsonparser.o: $(SOURCE_PATH)/src/corelib/serialization/qjsonparser.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qjson.o: $(SOURCE_PATH)/src/corelib/json/qjson.cpp
+qjsonarray.o: $(SOURCE_PATH)/src/corelib/serialization/qjsonarray.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qjsondocument.o: $(SOURCE_PATH)/src/corelib/json/qjsondocument.cpp
+qjsonobject.o: $(SOURCE_PATH)/src/corelib/serialization/qjsonobject.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qjsonparser.o: $(SOURCE_PATH)/src/corelib/json/qjsonparser.cpp
+qjsonvalue.o: $(SOURCE_PATH)/src/corelib/serialization/qjsonvalue.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qjsonarray.o: $(SOURCE_PATH)/src/corelib/json/qjsonarray.cpp
+qxmlstream.o: $(SOURCE_PATH)/src/corelib/serialization/qxmlstream.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qjsonobject.o: $(SOURCE_PATH)/src/corelib/json/qjsonobject.cpp
+qxmlutils.o: $(SOURCE_PATH)/src/corelib/serialization/qxmlutils.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
-qjsonvalue.o: $(SOURCE_PATH)/src/corelib/json/qjsonvalue.cpp
+qtextstream.o: $(SOURCE_PATH)/src/corelib/serialization/qtextstream.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
# DO NOT DELETE THIS LINE -- make depend depends on it
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index 28bf96939b..3abcc1f21c 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -197,13 +197,10 @@ qmake_pch.obj:
{$(SOURCE_PATH)\src\corelib\plugin}.cpp{}.obj::
$(CXX) $(CXXFLAGS) $<
-{$(SOURCE_PATH)\src\corelib\tools}.cpp{}.obj::
- $(CXX) $(CXXFLAGS) $<
-
-{$(SOURCE_PATH)\src\corelib\xml}.cpp{}.obj::
+{$(SOURCE_PATH)\src\corelib\serialization}.cpp{}.obj::
$(CXX) $(CXXFLAGS) $<
-{$(SOURCE_PATH)\src\corelib\json}.cpp{}.obj::
+{$(SOURCE_PATH)\src\corelib\tools}.cpp{}.obj::
$(CXX) $(CXXFLAGS) $<
# Make sure qstring_compat.obj and qlibraryinfo.obj aren't compiled with PCH enabled
diff --git a/qmake/doc/qmake.qdocconf b/qmake/doc/qmake.qdocconf
index 0c782262ff..3493a697f4 100644
--- a/qmake/doc/qmake.qdocconf
+++ b/qmake/doc/qmake.qdocconf
@@ -1,6 +1,7 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
project = QMake
+moduleheader = qmake_pch.h
description = QMake Manual
qhp.projects = qmake
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index 4a20c1dcb4..cc3b73418b 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -3171,11 +3171,6 @@
\snippet code/doc_src_qmake-manual.pro 70
- \section2 sprintf(string, arguments...)
-
- Replaces %1-%9 with the arguments passed in the comma-separated list
- of function \c arguments and returns the processed string.
-
\section2 resolve_depends(variablename, prefix)
This is an internal function that you will typically not need.
@@ -3242,6 +3237,11 @@
\snippet code/doc_src_qmake-manual.pro 168
+ \section2 sprintf(string, arguments...)
+
+ Replaces %1-%9 in \c string with the arguments passed in the comma-separated
+ list of function \c arguments and returns the processed string.
+
\target str_member()
\section2 str_member(arg [, start [, end]])
@@ -3309,7 +3309,7 @@
\section2 system_quote(arg)
- Quotes \c arg for the for the shell that is used by the \c{system()}
+ Quotes \c arg for the shell that is used by the \c{system()}
functions.
See also \l{shell_quote(arg)}{shell_quote()}.
diff --git a/qmake/generators/win32/registry.cpp b/qmake/generators/win32/registry.cpp
index 74c912ca43..7320cb0551 100644
--- a/qmake/generators/win32/registry.cpp
+++ b/qmake/generators/win32/registry.cpp
@@ -32,7 +32,7 @@
QT_BEGIN_NAMESPACE
#ifdef Q_OS_WIN32
-/*!
+/*
Returns the path part of a registry key.
e.g.
For a key
@@ -48,7 +48,7 @@ static QString keyPath(const QString &rKey)
return rKey.left(idx + 1);
}
-/*!
+/*
Returns the name part of a registry key.
e.g.
For a key
diff --git a/qmake/qmake.pro b/qmake/qmake.pro
index 1472aef3e4..000aec45fc 100644
--- a/qmake/qmake.pro
+++ b/qmake/qmake.pro
@@ -16,9 +16,8 @@ VPATH += \
../src/corelib/kernel \
../src/corelib/codecs \
../src/corelib/plugin \
- ../src/corelib/xml \
../src/corelib/io \
- ../src/corelib/json \
+ ../src/corelib/serialization \
../tools/shared/windows
INCLUDEPATH += . \
diff --git a/src/3rdparty/harfbuzz-ng/NEWS b/src/3rdparty/harfbuzz-ng/NEWS
index 8c3ef117dd..7434bcada0 100644
--- a/src/3rdparty/harfbuzz-ng/NEWS
+++ b/src/3rdparty/harfbuzz-ng/NEWS
@@ -1,3 +1,261 @@
+Overview of changes leading to 1.7.4
+Wednesday, December 20, 2017
+====================================
+
+- Fix collect_glyphs() regression caused by hb_set_t changes.
+
+
+Overview of changes leading to 1.7.3
+Monday, December 18, 2017
+====================================
+
+- hb_set_t performance tuning and optimizations.
+- Speed up collect_glyphs() and reject garbage data.
+- In hb_coretext_font_create() set font point-size (ptem).
+- Misc fixes.
+
+
+Overview of changes leading to 1.7.2
+Monday, December 4, 2017
+====================================
+
+- Optimize hb_set_add_range().
+- Misc fixes.
+- New API:
+hb_coretext_font_create()
+
+
+Overview of changes leading to 1.7.1
+Tuesday, November 14, 2017
+====================================
+
+- Fix atexit object destruction regression.
+- Fix minor integer-overflow.
+
+
+Overview of changes leading to 1.7.0
+Monday, November 13, 2017
+====================================
+
+- Minor Indic fixes.
+- Implement kerning and glyph names in hb-ot-font.
+- Various DSO optimization re .data and .bss sizes.
+- Make C++11 optional; build fixes.
+- Mark all other backends "unsafe-to-break".
+- Graphite fix.
+
+
+Overview of changes leading to 1.6.3
+Thursday, October 26th, 2017
+====================================
+
+- Fix hb_set_t some more. Should be solid now.
+- Implement get_glyph_name() for hb-ot-font.
+- Misc fixes.
+
+
+Overview of changes leading to 1.6.2
+Monday, October 23nd, 2017
+====================================
+
+- Yesterday's release had a bad crasher; don't use it. That's what
+ happens when one works on Sunday...
+ https://github.com/harfbuzz/harfbuzz/issues/578
+- Build fixes for FreeBSD and Chrome Android.
+
+
+Overview of changes leading to 1.6.1
+Sunday, October 22nd, 2017
+====================================
+
+- Don't skip over COMBINING GRAPHEME JOINER when ligating, etc.
+ To be refined: https://github.com/harfbuzz/harfbuzz/issues/554
+- Faster hb_set_t implementation.
+- Don't use deprecated ICU API.
+- Fix undefined-behavior in Myanmar shaper, introduced in 1.6.0
+- Deprecated API:
+ hb_set_invert()
+
+
+Overview of changes leading to 1.6.0
+Friday, October the 13th, 2017
+====================================
+
+- Update to Unicode 10.
+
+- Various Indic and Universal Shaping Engine fixes as a result of
+ HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
+ the Igalia offices in A Coruña, Spain. Thanks Igalia for having
+ us!
+
+- Implement Unicode Arabic Mark Ordering Algorithm UTR#53.
+
+- Implement optical sizing / tracking in CoreText backend, using
+ new API hb_font_set_ptem().
+
+- Allow notifying hb_font_t that underlying FT_Face changed sizing,
+ using new API hb_ft_font_changed().
+
+- More Graphite backend RTL fixes.
+
+- Fix caching of variable font shaping plans.
+
+- hb-view / hb-shape now accept following new arguments:
+
+ o --unicodes: takes a list of hex numbers that represent Unicode
+ codepoints.
+
+New API:
++hb_face_get_table_tags()
++hb_font_set_ptem()
++hb_font_get_ptem()
++hb_ft_font_changed()
+
+
+Overview of changes leading to 1.5.1
+Tuesday, September 5, 2017
+====================================
+
+- Fix "unsafe-to-break" in fallback shaping and other corner cases.
+ All our tests pass with --verify now, meaning unsafe-to-break API
+ works as expected.
+- Add --unicodes to hb-view / hb-shape.
+- [indic] Treat Consonant_With_Stacker as consonant. This will need
+ further tweaking.
+- hb_buffer_diff() tweaks.
+
+
+Overview of changes leading to 1.5.0
+Wednesday, August 23, 2017
+====================================
+
+- Misc new API, for appending a buffer to another, and for comparing
+ contents of two buffers for types of differences.
+
+- New "unsafe-to-break" API. Can be used to speed up reshaping
+ in line-breaking situations. Essentially, after shaping, it returns
+ positions in the input string (some of the cluster boundaries) that
+ are "safe to break" in that if the text is segmented at that position
+ and two sides reshaped and concatenated, the shaping result is
+ exactly the same as shaping the text in one piece.
+
+ hb-view and hb-shape and hb-shape now take --verify, which verifies
+ the above property.
+
+ Some corner cases of the implementation are still not quite working.
+ Those will be fixed in subsequent releases.
+
+- New API:
+
+hb_buffer_append()
+
+hb_glyph_flags_t
+HB_GLYPH_FLAG_UNSAFE_TO_BREAK
+HB_GLYPH_FLAG_DEFINED
+hb_glyph_info_get_glyph_flags()
+
+HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
+
+hb_buffer_diff_flags_t
+HB_BUFFER_DIFF_FLAG_EQUAL
+HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH
+HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH
+HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT
+HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
+HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH
+HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH
+HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH
+HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH
+hb_buffer_diff
+
+
+Overview of changes leading to 1.4.8
+Tuesday, August 8, 2017
+====================================
+
+- Major fix to avar table handling.
+- Rename hb-shape --show-message to --trace.
+- Build fixes.
+
+
+Overview of changes leading to 1.4.7
+Tuesday, July 18, 2017
+====================================
+
+- Multiple Indic, Tibetan, and Cham fixes.
+- CoreText: Allow disabling kerning.
+- Adjust Arabic feature order again.
+- Misc build fixes.
+
+
+Overview of changes leading to 1.4.6
+Sunday, April 23, 2017
+====================================
+
+- Graphite2: Fix RTL positioning issue.
+- Backlist GDEF of more versions of Padauk and Tahoma.
+- New, experimental, cmake alternative build system.
+
+
+Overview of changes leading to 1.4.5
+Friday, March 10, 2017
+====================================
+
+- Revert "Fix Context lookup application when moving back after a glyph..."
+ This introduced memory access problems. To be fixed properly soon.
+
+
+Overview of changes leading to 1.4.4
+Sunday, March 5, 2017
+====================================
+
+- Fix Context lookup application when moving back after a glyph deletion.
+- Fix buffer-overrun in Bengali.
+
+
+Overview of changes leading to 1.4.3
+Saturday, February 25, 2017
+====================================
+
+- Route Adlam script to Arabic shaper.
+- Misc fixes.
+- New API:
+ hb_font_set_face()
+- Deprecate API:
+ hb_graphite2_font_get_gr_font()
+
+
+Overview of changes leading to 1.4.2
+Monday, January 23, 2017
+====================================
+
+- Implement OpenType Font Variation tables avar/fvar/HVAR/VVAR.
+- hb-shape and hb-view now accept --variations.
+- New API:
+
+hb_variation_t
+hb_variation_from_string()
+hb_variation_to_string()
+
+hb_font_set_variations()
+hb_font_set_var_coords_design()
+hb_font_get_var_coords_normalized()
+
+hb-ot-var.h:
+hb_ot_var_axis_t
+hb_ot_var_has_data()
+hb_ot_var_get_axis_count()
+hb_ot_var_get_axes()
+hb_ot_var_find_axis()
+hb_ot_var_normalize_variations()
+hb_ot_var_normalize_coords()
+
+- MVAR to be implemented later. Access to named instances to be
+ implemented later as well.
+
+- Misc fixes.
+
+
Overview of changes leading to 1.4.1
Thursday, January 5, 2017
====================================
@@ -212,7 +470,7 @@ Tuesday, February 23, 2016
- CoreText: Drastically speed up font initialization.
- CoreText: Fix tiny leak.
- Group ZWJ/ZWNJ with previous syllable under cluster-level=0.
- https://github.com/behdad/harfbuzz/issues/217
+ https://github.com/harfbuzz/harfbuzz/issues/217
- Add test/shaping/README.md about how to add tests to the suite.
@@ -228,8 +486,8 @@ Friday, February 19, 2016
- Allow GPOS cursive connection on marks, and fix the interaction with
mark attachment. This work resulted in some changes to how mark
attachments work. See:
- https://github.com/behdad/harfbuzz/issues/211
- https://github.com/behdad/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
+ https://github.com/harfbuzz/harfbuzz/issues/211
+ https://github.com/harfbuzz/harfbuzz/commit/86c68c7a2c971efe8e35b1f1bd99401dc8b688d2
- Graphite2 shaper: improved negative advance handling (eg. Nastaliq).
- Add nmake-based build system for Windows.
- Minor speedup.
@@ -270,7 +528,7 @@ Wednesday, November 26, 2015
====================================
- Fix badly-broken fallback shaper that affected terminology.
- https://github.com/behdad/harfbuzz/issues/187
+ https://github.com/harfbuzz/harfbuzz/issues/187
- Fix y_scaling in Graphite shaper.
- API changes:
* An unset glyph_h_origin() function in font-funcs now (sensibly)
@@ -292,11 +550,11 @@ Wednesday, November 18, 2015
====================================
- Implement 'stch' stretch feature for Syriac Abbreviation Mark.
- https://github.com/behdad/harfbuzz/issues/141
+ https://github.com/harfbuzz/harfbuzz/issues/141
- Disable use of decompose_compatibility() callback.
- Implement "shaping" of various Unicode space characters, even
if the font does not support them.
- https://github.com/behdad/harfbuzz/issues/153
+ https://github.com/harfbuzz/harfbuzz/issues/153
- If font does not support U+2011 NO-BREAK HYPHEN, fallback to
U+2010 HYPHEN.
- Changes resulting from libFuzzer continuous fuzzing:
@@ -319,7 +577,7 @@ Thursday, October 15, 2015
- Revert default load-flags of fonts created using hb_ft_font_create()
back to FT_LOAD_DEFAULT|FT_LOAD_NO_HINTING. This was changed in
last release (1.0.5), but caused major issues, so revert.
- https://github.com/behdad/harfbuzz/issues/143
+ https://github.com/harfbuzz/harfbuzz/issues/143
Overview of changes leading to 1.0.5
@@ -327,7 +585,7 @@ Tuesday, October 13, 2015
====================================
- Fix multiple memory access bugs discovered using libFuzzer.
- https://github.com/behdad/harfbuzz/issues/139
+ https://github.com/harfbuzz/harfbuzz/issues/139
Everyone should upgrade to this version as soon as possible.
We now have continuous fuzzing set up, to avoid issues like
these creeping in again.
@@ -598,7 +856,7 @@ Wednesday, July 16, 2014
U+FFFD REPLACEMENT CHARACTER now.
- With all changes in this release, the buffer will contain fully
valid Unicode after hb_buffer_add_utf8/16/32 no matter how
- broken the input is. This can be overriden though. See below.
+ broken the input is. This can be overridden though. See below.
- Fix Mongolian Variation Selectors for fonts without GDEF.
- Fix minor invalid buffer access.
- Accept zh-Hant and zh-Hans language tags. hb_ot_tag_to_language()
diff --git a/src/3rdparty/harfbuzz-ng/README b/src/3rdparty/harfbuzz-ng/README
index 69a1bdd9ff..aa055169d5 100644
--- a/src/3rdparty/harfbuzz-ng/README
+++ b/src/3rdparty/harfbuzz-ng/README
@@ -1,6 +1,7 @@
-[![Build Status](https://travis-ci.org/behdad/harfbuzz.svg)](https://travis-ci.org/behdad/harfbuzz)
-[![Build Status](https://ci.appveyor.com/api/projects/status/4oaq58ns2h0m2soa?svg=true)](https://ci.appveyor.com/project/behdad/harfbuzz)
-[![Coverage Status](https://img.shields.io/coveralls/behdad/harfbuzz.svg)](https://coveralls.io/r/behdad/harfbuzz)
+[![Build Status](https://travis-ci.org/harfbuzz/harfbuzz.svg)](https://travis-ci.org/harfbuzz/harfbuzz)
+[![Build status](https://ci.appveyor.com/api/projects/status/0t0flrxpstj9lb9w?svg=true)](https://ci.appveyor.com/project/harfbuzz/harfbuzz)
+[![CircleCI](https://circleci.com/gh/harfbuzz/harfbuzz.svg?style=svg)](https://circleci.com/gh/harfbuzz/harfbuzz)
+[![Coverage Status](https://img.shields.io/coveralls/harfbuzz/harfbuzz.svg)](https://coveralls.io/r/harfbuzz/harfbuzz)
[ABI Tracker](http://abi-laboratory.pro/tracker/timeline/harfbuzz/)
This is HarfBuzz, a text shaping library.
@@ -10,3 +11,5 @@ For bug reports, mailing list, and other information please visit:
http://harfbuzz.org/
For license information, see the file COPYING.
+
+Documentation: https://harfbuzz.github.io
diff --git a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
index e5746bf3eb..ad40b98753 100644
--- a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
+++ b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
@@ -56,6 +56,8 @@ HEADERS += \
$$PWD/src/hb-buffer-deserialize-json.hh \
$$PWD/src/hb-buffer-deserialize-text.hh \
$$PWD/src/hb-cache-private.hh \
+ $$PWD/src/hb-debug.hh \
+ $$PWD/src/hb-dsalgs.hh \
$$PWD/src/hb-face-private.hh \
$$PWD/src/hb-font-private.hh \
$$PWD/src/hb-mutex-private.hh \
@@ -73,11 +75,13 @@ HEADERS += \
$$PWD/src/hb-ot-os2-table.hh \
$$PWD/src/hb-ot-post-table.hh \
$$PWD/src/hb-private.hh \
+ $$PWD/src/hb-set-digest-private.hh \
$$PWD/src/hb-set-private.hh \
$$PWD/src/hb-shape-plan-private.hh \
$$PWD/src/hb-shaper-impl-private.hh \
$$PWD/src/hb-shaper-list.hh \
$$PWD/src/hb-shaper-private.hh \
+ $$PWD/src/hb-string-array.hh \
$$PWD/src/hb-unicode-private.hh \
$$PWD/src/hb-utf-private.hh
@@ -116,9 +120,11 @@ contains(SHAPERS, opentype) {
$$PWD/src/hb-ot-shape-complex-use.cc \
$$PWD/src/hb-ot-shape-complex-use-table.cc \
$$PWD/src/hb-ot-shape-fallback.cc \
- $$PWD/src/hb-ot-shape-normalize.cc
+ $$PWD/src/hb-ot-shape-normalize.cc \
+ $$PWD/src/hb-ot-var.cc
HEADERS += \
+ $$PWD/src/hb-ot-kern-table.hh \
$$PWD/src/hb-ot-layout-common-private.hh \
$$PWD/src/hb-ot-layout-gdef-table.hh \
$$PWD/src/hb-ot-layout-gpos-table.hh \
@@ -128,6 +134,8 @@ contains(SHAPERS, opentype) {
$$PWD/src/hb-ot-layout-math-table.hh \
$$PWD/src/hb-ot-layout-private.hh \
$$PWD/src/hb-ot-map-private.hh \
+ $$PWD/src/hb-ot-math-table.hh \
+ $$PWD/src/hb-ot-post-macroman.hh \
$$PWD/src/hb-ot-shape-complex-arabic-fallback.hh \
$$PWD/src/hb-ot-shape-complex-arabic-private.hh \
$$PWD/src/hb-ot-shape-complex-arabic-table.hh \
@@ -140,7 +148,11 @@ contains(SHAPERS, opentype) {
$$PWD/src/hb-ot-shape-complex-use-private.hh \
$$PWD/src/hb-ot-shape-fallback-private.hh \
$$PWD/src/hb-ot-shape-normalize-private.hh \
- $$PWD/src/hb-ot-shape-private.hh
+ $$PWD/src/hb-ot-shape-private.hh \
+ $$PWD/src/hb-ot-var-avar-table.hh \
+ $$PWD/src/hb-ot-var-fvar-table.hh \
+ $$PWD/src/hb-ot-var-hvar-table.hh \
+ $$PWD/src/hb-ot-var-mvar-table.hh
HEADERS += \
$$PWD/src/hb-ot.h \
@@ -148,7 +160,8 @@ contains(SHAPERS, opentype) {
$$PWD/src/hb-ot-layout.h \
$$PWD/src/hb-ot-math.h \
$$PWD/src/hb-ot-shape.h \
- $$PWD/src/hb-ot-tag.h
+ $$PWD/src/hb-ot-tag.h \
+ $$PWD/src/hb-ot-var.h
}
contains(SHAPERS, coretext) {
diff --git a/src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-var.h b/src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-var.h
new file mode 100644
index 0000000000..629acbcb64
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-var.h
@@ -0,0 +1 @@
+#include "../../src/hb-ot-var.h"
diff --git a/src/3rdparty/harfbuzz-ng/patches/0001-Qt-specific-workaround-for-AAT-shaper.patch b/src/3rdparty/harfbuzz-ng/patches/0001-Qt-specific-workaround-for-AAT-shaper.patch
new file mode 100644
index 0000000000..470e0ffe5a
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/patches/0001-Qt-specific-workaround-for-AAT-shaper.patch
@@ -0,0 +1,58 @@
+From: Konstantin Ritt <ritt.ks@gmail.com>
+Date: Sun, 17 Dec 2017 07:46:20 +0400
+Subject: Qt-specific workaround for AAT shaper
+
+CoreText API doesn't give us a fontdata to reconstruct the original font,
+so we have to store the CTFont and CGFont of interest in context object
+passed to HB from native font engine
+---
+ src/3rdparty/harfbuzz-ng/src/hb-coretext.cc | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc b/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc
+index 2dd10d2..c993ec0 100644
+--- a/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc
++++ b/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc
+@@ -35,6 +35,20 @@
+ #include "hb-coretext.h"
+ #include <math.h>
+
++
++typedef bool (*qt_get_font_table_func_t) (void *user_data, unsigned int tag, unsigned char *buffer, unsigned int *length);
++
++struct FontEngineFaceData {
++ void *user_data;
++ qt_get_font_table_func_t get_font_table;
++};
++
++struct CoreTextFontEngineData {
++ CTFontRef ctFont;
++ CGFontRef cgFont;
++};
++
++
+ /* https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont */
+ #define HB_CORETEXT_DEFAULT_FONT_SIZE 12.f
+
+@@ -129,6 +143,7 @@ create_cg_font (hb_face_t *face)
+ }
+ else
+ {
++#if 0
+ hb_blob_t *blob = hb_face_reference_blob (face);
+ unsigned int blob_length;
+ const char *blob_data = hb_blob_get_data (blob, &blob_length);
+@@ -143,6 +158,11 @@ create_cg_font (hb_face_t *face)
+ DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
+ CGDataProviderRelease (provider);
+ }
++#else
++ FontEngineFaceData *fontEngineFaceData = (FontEngineFaceData *) face->user_data;
++ CoreTextFontEngineData *coreTextFontEngineData = (CoreTextFontEngineData *) fontEngineFaceData->user_data;
++ cg_font = CGFontRetain (coreTextFontEngineData->cgFont);
++#endif
+ }
+ return cg_font;
+ }
+--
+
diff --git a/src/3rdparty/harfbuzz-ng/qt_attribution.json b/src/3rdparty/harfbuzz-ng/qt_attribution.json
index a5eee600d6..0cf6a746f5 100644
--- a/src/3rdparty/harfbuzz-ng/qt_attribution.json
+++ b/src/3rdparty/harfbuzz-ng/qt_attribution.json
@@ -6,7 +6,7 @@
"Description": "HarfBuzz is an OpenType text shaping engine.",
"Homepage": "http://harfbuzz.org",
- "Version": "1.4.1",
+ "Version": "1.7.4",
"License": "MIT License",
"LicenseId": "MIT",
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-atomic-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-atomic-private.hh
index 100ba539e3..9343840140 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-atomic-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-atomic-private.hh
@@ -89,9 +89,9 @@ typedef int32_t hb_atomic_int_impl_t;
#define hb_atomic_ptr_impl_cmpexch(P,O,N) OSAtomicCompareAndSwapPtrBarrier ((void *) (O), (void *) (N), (void **) (P))
#else
#if __ppc64__ || __x86_64__ || __aarch64__
-#define hb_atomic_ptr_impl_cmpexch(P,O,N) OSAtomicCompareAndSwap64Barrier ((int64_t) (O), (int64_t) (N), (int64_t*) (P))
+#define hb_atomic_ptr_impl_cmpexch(P,O,N) OSAtomicCompareAndSwap64Barrier ((int64_t) (void *) (O), (int64_t) (void *) (N), (int64_t*) (P))
#else
-#define hb_atomic_ptr_impl_cmpexch(P,O,N) OSAtomicCompareAndSwap32Barrier ((int32_t) (O), (int32_t) (N), (int32_t*) (P))
+#define hb_atomic_ptr_impl_cmpexch(P,O,N) OSAtomicCompareAndSwap32Barrier ((int32_t) (void *) (O), (int32_t) (void *) (N), (int32_t*) (P))
#endif
#endif
@@ -124,13 +124,13 @@ typedef unsigned int hb_atomic_int_impl_t;
#include <builtins.h>
-static inline int hb_fetch_and_add(volatile int* AI, unsigned int V) {
+static inline int _hb_fetch_and_add(volatile int* AI, unsigned int V) {
__lwsync();
int result = __fetch_and_add(AI, V);
__isync();
return result;
}
-static inline int hb_compare_and_swaplp(volatile long* P, long O, long N) {
+static inline int _hb_compare_and_swaplp(volatile long* P, long O, long N) {
__sync();
int result = __compare_and_swaplp (P, &O, N);
__sync();
@@ -139,10 +139,10 @@ static inline int hb_compare_and_swaplp(volatile long* P, long O, long N) {
typedef int hb_atomic_int_impl_t;
#define HB_ATOMIC_INT_IMPL_INIT(V) (V)
-#define hb_atomic_int_impl_add(AI, V) hb_fetch_and_add (&(AI), (V))
+#define hb_atomic_int_impl_add(AI, V) _hb_fetch_and_add (&(AI), (V))
#define hb_atomic_ptr_impl_get(P) (__sync(), (void *) *(P))
-#define hb_atomic_ptr_impl_cmpexch(P,O,N) hb_compare_and_swaplp ((long*)(P), (long)(O), (long)(N))
+#define hb_atomic_ptr_impl_cmpexch(P,O,N) _hb_compare_and_swaplp ((long*)(P), (long)(O), (long)(N))
#elif !defined(HB_NO_MT)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-blob.cc b/src/3rdparty/harfbuzz-ng/src/hb-blob.cc
index fb48f03cab..59c8333637 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-blob.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-blob.cc
@@ -30,6 +30,7 @@
#endif
#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-object-private.hh"
@@ -44,12 +45,6 @@
#include <errno.h>
-
-#ifndef HB_DEBUG_BLOB
-#define HB_DEBUG_BLOB (HB_DEBUG+0)
-#endif
-
-
struct hb_blob_t {
hb_object_header_t header;
ASSERT_POD ();
@@ -72,8 +67,8 @@ _hb_blob_destroy_user_data (hb_blob_t *blob)
{
if (blob->destroy) {
blob->destroy (blob->user_data);
- blob->user_data = NULL;
- blob->destroy = NULL;
+ blob->user_data = nullptr;
+ blob->destroy = nullptr;
}
}
@@ -128,6 +123,12 @@ hb_blob_create (const char *data,
return blob;
}
+static void
+_hb_blob_destroy (void *data)
+{
+ hb_blob_destroy ((hb_blob_t *) data);
+}
+
/**
* hb_blob_create_sub_blob:
* @parent: Parent blob.
@@ -164,7 +165,7 @@ hb_blob_create_sub_blob (hb_blob_t *parent,
MIN (length, parent->length - offset),
HB_MEMORY_MODE_READONLY,
hb_blob_reference (parent),
- (hb_destroy_func_t) hb_blob_destroy);
+ _hb_blob_destroy);
return blob;
}
@@ -188,12 +189,12 @@ hb_blob_get_empty (void)
true, /* immutable */
- NULL, /* data */
+ nullptr, /* data */
0, /* length */
HB_MEMORY_MODE_READONLY, /* mode */
- NULL, /* user_data */
- NULL /* destroy */
+ nullptr, /* user_data */
+ nullptr /* destroy */
};
return const_cast<hb_blob_t *> (&_hb_blob_nil);
@@ -373,7 +374,7 @@ hb_blob_get_data_writable (hb_blob_t *blob, unsigned int *length)
if (length)
*length = 0;
- return NULL;
+ return nullptr;
}
if (length)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-buffer-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-buffer-private.hh
index bca308da2f..97bdc1be30 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-buffer-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-buffer-private.hh
@@ -35,8 +35,8 @@
#include "hb-unicode-private.hh"
-#ifndef HB_BUFFER_MAX_EXPANSION_FACTOR
-#define HB_BUFFER_MAX_EXPANSION_FACTOR 32
+#ifndef HB_BUFFER_MAX_LEN_FACTOR
+#define HB_BUFFER_MAX_LEN_FACTOR 32
#endif
#ifndef HB_BUFFER_MAX_LEN_MIN
#define HB_BUFFER_MAX_LEN_MIN 8192
@@ -45,11 +45,22 @@
#define HB_BUFFER_MAX_LEN_DEFAULT 0x3FFFFFFF /* Shaping more than a billion chars? Let us know! */
#endif
-ASSERT_STATIC (sizeof (hb_glyph_info_t) == 20);
-ASSERT_STATIC (sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t));
+#ifndef HB_BUFFER_MAX_OPS_FACTOR
+#define HB_BUFFER_MAX_OPS_FACTOR 64
+#endif
+#ifndef HB_BUFFER_MAX_OPS_MIN
+#define HB_BUFFER_MAX_OPS_MIN 1024
+#endif
+#ifndef HB_BUFFER_MAX_OPS_DEFAULT
+#define HB_BUFFER_MAX_OPS_DEFAULT 0x1FFFFFFF /* Shaping more than a billion operations? Let us know! */
+#endif
+
+static_assert ((sizeof (hb_glyph_info_t) == 20), "");
+static_assert ((sizeof (hb_glyph_info_t) == sizeof (hb_glyph_position_t)), "");
HB_MARK_AS_FLAG_T (hb_buffer_flags_t);
HB_MARK_AS_FLAG_T (hb_buffer_serialize_flags_t);
+HB_MARK_AS_FLAG_T (hb_buffer_diff_flags_t);
enum hb_buffer_scratch_flags_t {
HB_BUFFER_SCRATCH_FLAG_DEFAULT = 0x00000000u,
@@ -57,6 +68,8 @@ enum hb_buffer_scratch_flags_t {
HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES = 0x00000002u,
HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK = 0x00000004u,
HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT = 0x00000008u,
+ HB_BUFFER_SCRATCH_FLAG_HAS_UNSAFE_TO_BREAK = 0x00000010u,
+
/* Reserved for complex shapers' internal use. */
HB_BUFFER_SCRATCH_FLAG_COMPLEX0 = 0x01000000u,
HB_BUFFER_SCRATCH_FLAG_COMPLEX1 = 0x02000000u,
@@ -81,6 +94,7 @@ struct hb_buffer_t {
hb_codepoint_t replacement; /* U+FFFD or something else. */
hb_buffer_scratch_flags_t scratch_flags; /* Have space-flallback, etc. */
unsigned int max_len; /* Maximum allowed len. */
+ int max_ops; /* Maximum allowed operations. */
/* Buffer contents */
hb_buffer_content_type_t content_type;
@@ -99,17 +113,6 @@ struct hb_buffer_t {
hb_glyph_info_t *out_info;
hb_glyph_position_t *pos;
- inline hb_glyph_info_t &cur (unsigned int i = 0) { return info[idx + i]; }
- inline hb_glyph_info_t cur (unsigned int i = 0) const { return info[idx + i]; }
-
- inline hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
- inline hb_glyph_position_t cur_pos (unsigned int i = 0) const { return pos[idx + i]; }
-
- inline hb_glyph_info_t &prev (void) { return out_info[out_len ? out_len - 1 : 0]; }
- inline hb_glyph_info_t prev (void) const { return out_info[out_len ? out_len - 1 : 0]; }
-
- inline bool has_separate_output (void) const { return info != out_info; }
-
unsigned int serial;
/* Text before / after the main buffer contents.
@@ -129,6 +132,10 @@ struct hb_buffer_t {
#ifndef HB_NDEBUG
uint8_t allocated_var_bits;
#endif
+
+
+ /* Methods */
+
inline void allocate_var (unsigned int start, unsigned int count)
{
#ifndef HB_NDEBUG
@@ -165,8 +172,17 @@ struct hb_buffer_t {
#endif
}
+ inline hb_glyph_info_t &cur (unsigned int i = 0) { return info[idx + i]; }
+ inline hb_glyph_info_t cur (unsigned int i = 0) const { return info[idx + i]; }
+
+ inline hb_glyph_position_t &cur_pos (unsigned int i = 0) { return pos[idx + i]; }
+ inline hb_glyph_position_t cur_pos (unsigned int i = 0) const { return pos[idx + i]; }
+
+ inline hb_glyph_info_t &prev (void) { return out_info[out_len ? out_len - 1 : 0]; }
+ inline hb_glyph_info_t prev (void) const { return out_info[out_len ? out_len - 1 : 0]; }
+
+ inline bool has_separate_output (void) const { return info != out_info; }
- /* Methods */
HB_INTERNAL void reset (void);
HB_INTERNAL void clear (void);
@@ -232,25 +248,31 @@ struct hb_buffer_t {
for (unsigned int j = 0; j < len; j++)
info[j].mask |= mask;
}
- HB_INTERNAL void set_masks (hb_mask_t value,
- hb_mask_t mask,
- unsigned int cluster_start,
- unsigned int cluster_end);
+ HB_INTERNAL void set_masks (hb_mask_t value, hb_mask_t mask,
+ unsigned int cluster_start, unsigned int cluster_end);
- HB_INTERNAL void merge_clusters (unsigned int start,
- unsigned int end)
+ inline void merge_clusters (unsigned int start, unsigned int end)
{
if (end - start < 2)
return;
merge_clusters_impl (start, end);
}
- HB_INTERNAL void merge_clusters_impl (unsigned int start,
- unsigned int end);
- HB_INTERNAL void merge_out_clusters (unsigned int start,
- unsigned int end);
+ HB_INTERNAL void merge_clusters_impl (unsigned int start, unsigned int end);
+ HB_INTERNAL void merge_out_clusters (unsigned int start, unsigned int end);
/* Merge clusters for deleting current glyph, and skip it. */
HB_INTERNAL void delete_glyph (void);
+ inline void unsafe_to_break (unsigned int start,
+ unsigned int end)
+ {
+ if (end - start < 2)
+ return;
+ unsafe_to_break_impl (start, end);
+ }
+ HB_INTERNAL void unsafe_to_break_impl (unsigned int start, unsigned int end);
+ HB_INTERNAL void unsafe_to_break_from_outbuffer (unsigned int start, unsigned int end);
+
+
/* Internal methods */
HB_INTERNAL bool enlarge (unsigned int size);
@@ -282,9 +304,79 @@ struct hb_buffer_t {
return ret;
}
HB_INTERNAL bool message_impl (hb_font_t *font, const char *fmt, va_list ap) HB_PRINTF_FUNC(3, 0);
+
+ static inline void
+ set_cluster (hb_glyph_info_t &info, unsigned int cluster, unsigned int mask = 0)
+ {
+ if (info.cluster != cluster)
+ {
+ if (mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK)
+ info.mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ else
+ info.mask &= ~HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ }
+ info.cluster = cluster;
+ }
+
+ inline int
+ _unsafe_to_break_find_min_cluster (const hb_glyph_info_t *info,
+ unsigned int start, unsigned int end,
+ unsigned int cluster) const
+ {
+ for (unsigned int i = start; i < end; i++)
+ cluster = MIN<unsigned int> (cluster, info[i].cluster);
+ return cluster;
+ }
+ inline void
+ _unsafe_to_break_set_mask (hb_glyph_info_t *info,
+ unsigned int start, unsigned int end,
+ unsigned int cluster)
+ {
+ for (unsigned int i = start; i < end; i++)
+ if (cluster != info[i].cluster)
+ {
+ scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_UNSAFE_TO_BREAK;
+ info[i].mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ }
+ }
+
+ inline void
+ unsafe_to_break_all (void)
+ {
+ for (unsigned int i = 0; i < len; i++)
+ info[i].mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ }
+ inline void
+ safe_to_break_all (void)
+ {
+ for (unsigned int i = 0; i < len; i++)
+ info[i].mask &= ~HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ }
};
+/* Loop over clusters. Duplicated in foreach_syllable(). */
+#define foreach_cluster(buffer, start, end) \
+ for (unsigned int \
+ _count = buffer->len, \
+ start = 0, end = _count ? _next_cluster (buffer, 0) : 0; \
+ start < _count; \
+ start = end, end = _next_cluster (buffer, start))
+
+static inline unsigned int
+_next_cluster (hb_buffer_t *buffer, unsigned int start)
+{
+ hb_glyph_info_t *info = buffer->info;
+ unsigned int count = buffer->len;
+
+ unsigned int cluster = info[start].cluster;
+ while (++start < count && cluster == info[start].cluster)
+ ;
+
+ return start;
+}
+
+
#define HB_BUFFER_XALLOCATE_VAR(b, func, var) \
b->func (offsetof (hb_glyph_info_t, var) - offsetof(hb_glyph_info_t, var1), \
sizeof (b->info[0].var))
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc b/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc
index 63a0f34669..ea62e9ffdb 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc
@@ -30,7 +30,7 @@
static const char *serialize_formats[] = {
"text",
"json",
- NULL
+ nullptr
};
/**
@@ -90,7 +90,7 @@ hb_buffer_serialize_format_to_string (hb_buffer_serialize_format_t format)
case HB_BUFFER_SERIALIZE_FORMAT_TEXT: return serialize_formats[0];
case HB_BUFFER_SERIALIZE_FORMAT_JSON: return serialize_formats[1];
default:
- case HB_BUFFER_SERIALIZE_FORMAT_INVALID: return NULL;
+ case HB_BUFFER_SERIALIZE_FORMAT_INVALID: return nullptr;
}
}
@@ -104,9 +104,9 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
hb_font_t *font,
hb_buffer_serialize_flags_t flags)
{
- hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, nullptr);
hb_glyph_position_t *pos = (flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS) ?
- NULL : hb_buffer_get_glyph_positions (buffer, NULL);
+ nullptr : hb_buffer_get_glyph_positions (buffer, nullptr);
*buf_consumed = 0;
for (unsigned int i = start; i < end; i++)
@@ -145,10 +145,16 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
{
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
- pos[i].x_offset, pos[i].y_offset);
- p += snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
- pos[i].x_advance, pos[i].y_advance);
+ p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
+ pos[i].x_offset, pos[i].y_offset));
+ p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
+ pos[i].x_advance, pos[i].y_advance));
+ }
+
+ if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS)
+ {
+ if (info[i].mask & HB_GLYPH_FLAG_DEFINED)
+ p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"fl\":%u", info[i].mask & HB_GLYPH_FLAG_DEFINED));
}
if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS)
@@ -156,9 +162,9 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
hb_glyph_extents_t extents;
hb_font_get_glyph_extents(font, info[i].codepoint, &extents);
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"xb\":%d,\"yb\":%d",
- extents.x_bearing, extents.y_bearing));
+ extents.x_bearing, extents.y_bearing));
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"w\":%d,\"h\":%d",
- extents.width, extents.height));
+ extents.width, extents.height));
}
*p++ = '}';
@@ -188,9 +194,9 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
hb_font_t *font,
hb_buffer_serialize_flags_t flags)
{
- hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, NULL);
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, nullptr);
hb_glyph_position_t *pos = (flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS) ?
- NULL : hb_buffer_get_glyph_positions (buffer, NULL);
+ nullptr : hb_buffer_get_glyph_positions (buffer, nullptr);
*buf_consumed = 0;
for (unsigned int i = start; i < end; i++)
@@ -226,6 +232,12 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
}
+ if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS)
+ {
+ if (info[i].mask &HB_GLYPH_FLAG_DEFINED)
+ p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "#%X", info[i].mask &HB_GLYPH_FLAG_DEFINED));
+ }
+
if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS)
{
hb_glyph_extents_t extents;
@@ -311,6 +323,8 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
if (!buf_consumed)
buf_consumed = &sconsumed;
*buf_consumed = 0;
+ if (buf_size)
+ *buf = '\0';
assert ((!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID) ||
buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
@@ -408,8 +422,8 @@ hb_bool_t
hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
const char *buf,
int buf_len, /* -1 means nul-terminated */
- const char **end_ptr, /* May be NULL */
- hb_font_t *font, /* May be NULL */
+ const char **end_ptr, /* May be nullptr */
+ hb_font_t *font, /* May be nullptr */
hb_buffer_serialize_format_t format)
{
const char *end;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-buffer.cc b/src/3rdparty/harfbuzz-ng/src/hb-buffer.cc
index 3940a3dbf8..7ead43b018 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-buffer.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-buffer.cc
@@ -31,10 +31,6 @@
#include "hb-utf-private.hh"
-#ifndef HB_DEBUG_BUFFER
-#define HB_DEBUG_BUFFER (HB_DEBUG+0)
-#endif
-
/**
* SECTION: hb-buffer
* @title: Buffers
@@ -124,8 +120,8 @@ hb_buffer_t::enlarge (unsigned int size)
}
unsigned int new_allocated = allocated;
- hb_glyph_position_t *new_pos = NULL;
- hb_glyph_info_t *new_info = NULL;
+ hb_glyph_position_t *new_pos = nullptr;
+ hb_glyph_info_t *new_info = nullptr;
bool separate_out = out_info != info;
if (unlikely (_hb_unsigned_int_mul_overflows (size, sizeof (info[0]))))
@@ -134,7 +130,7 @@ hb_buffer_t::enlarge (unsigned int size)
while (size >= new_allocated)
new_allocated += (new_allocated >> 1) + 32;
- ASSERT_STATIC (sizeof (info[0]) == sizeof (pos[0]));
+ static_assert ((sizeof (info[0]) == sizeof (pos[0])), "");
if (unlikely (_hb_unsigned_int_mul_overflows (new_allocated, sizeof (info[0]))))
goto done;
@@ -267,7 +263,7 @@ hb_buffer_t::add (hb_codepoint_t codepoint,
memset (glyph, 0, sizeof (*glyph));
glyph->codepoint = codepoint;
- glyph->mask = 1;
+ glyph->mask = 0;
glyph->cluster = cluster;
len++;
@@ -550,12 +546,15 @@ hb_buffer_t::merge_clusters_impl (unsigned int start,
unsigned int end)
{
if (cluster_level == HB_BUFFER_CLUSTER_LEVEL_CHARACTERS)
+ {
+ unsafe_to_break (start, end);
return;
+ }
unsigned int cluster = info[start].cluster;
for (unsigned int i = start + 1; i < end; i++)
- cluster = MIN (cluster, info[i].cluster);
+ cluster = MIN<unsigned int> (cluster, info[i].cluster);
/* Extend end */
while (end < len && info[end - 1].cluster == info[end].cluster)
@@ -568,10 +567,10 @@ hb_buffer_t::merge_clusters_impl (unsigned int start,
/* If we hit the start of buffer, continue in out-buffer. */
if (idx == start)
for (unsigned int i = out_len; i && out_info[i - 1].cluster == info[start].cluster; i--)
- out_info[i - 1].cluster = cluster;
+ set_cluster (out_info[i - 1], cluster);
for (unsigned int i = start; i < end; i++)
- info[i].cluster = cluster;
+ set_cluster (info[i], cluster);
}
void
hb_buffer_t::merge_out_clusters (unsigned int start,
@@ -586,7 +585,7 @@ hb_buffer_t::merge_out_clusters (unsigned int start,
unsigned int cluster = out_info[start].cluster;
for (unsigned int i = start + 1; i < end; i++)
- cluster = MIN (cluster, out_info[i].cluster);
+ cluster = MIN<unsigned int> (cluster, out_info[i].cluster);
/* Extend start */
while (start && out_info[start - 1].cluster == out_info[start].cluster)
@@ -599,14 +598,16 @@ hb_buffer_t::merge_out_clusters (unsigned int start,
/* If we hit the end of out-buffer, continue in buffer. */
if (end == out_len)
for (unsigned int i = idx; i < len && info[i].cluster == out_info[end - 1].cluster; i++)
- info[i].cluster = cluster;
+ set_cluster (info[i], cluster);
for (unsigned int i = start; i < end; i++)
- out_info[i].cluster = cluster;
+ set_cluster (out_info[i], cluster);
}
void
hb_buffer_t::delete_glyph ()
{
+ /* The logic here is duplicated in hb_ot_hide_default_ignorables(). */
+
unsigned int cluster = info[idx].cluster;
if (idx + 1 < len && cluster == info[idx + 1].cluster)
{
@@ -619,9 +620,10 @@ hb_buffer_t::delete_glyph ()
/* Merge cluster backward. */
if (cluster < out_info[out_len - 1].cluster)
{
+ unsigned int mask = info[idx].mask;
unsigned int old_cluster = out_info[out_len - 1].cluster;
for (unsigned i = out_len; i && out_info[i - 1].cluster == old_cluster; i--)
- out_info[i - 1].cluster = cluster;
+ set_cluster (out_info[i - 1], cluster, mask);
}
goto done;
}
@@ -638,6 +640,32 @@ done:
}
void
+hb_buffer_t::unsafe_to_break_impl (unsigned int start, unsigned int end)
+{
+ unsigned int cluster = (unsigned int) -1;
+ cluster = _unsafe_to_break_find_min_cluster (info, start, end, cluster);
+ _unsafe_to_break_set_mask (info, start, end, cluster);
+}
+void
+hb_buffer_t::unsafe_to_break_from_outbuffer (unsigned int start, unsigned int end)
+{
+ if (!have_output)
+ {
+ unsafe_to_break_impl (start, end);
+ return;
+ }
+
+ assert (start <= out_len);
+ assert (idx <= end);
+
+ unsigned int cluster = (unsigned int) -1;
+ cluster = _unsafe_to_break_find_min_cluster (out_info, start, out_len, cluster);
+ cluster = _unsafe_to_break_find_min_cluster (info, idx, end, cluster);
+ _unsafe_to_break_set_mask (out_info, start, out_len, cluster);
+ _unsafe_to_break_set_mask (info, idx, end, cluster);
+}
+
+void
hb_buffer_t::guess_segment_properties (void)
{
assert (content_type == HB_BUFFER_CONTENT_TYPE_UNICODE ||
@@ -694,6 +722,7 @@ hb_buffer_create (void)
return hb_buffer_get_empty ();
buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
+ buffer->max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
buffer->reset ();
@@ -721,6 +750,7 @@ hb_buffer_get_empty (void)
HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
HB_BUFFER_SCRATCH_FLAG_DEFAULT,
HB_BUFFER_MAX_LEN_DEFAULT,
+ HB_BUFFER_MAX_OPS_DEFAULT,
HB_BUFFER_CONTENT_TYPE_INVALID,
HB_SEGMENT_PROPERTIES_DEFAULT,
@@ -1380,6 +1410,23 @@ hb_buffer_get_glyph_positions (hb_buffer_t *buffer,
}
/**
+ * hb_glyph_info_get_glyph_flags:
+ * @info: a #hb_glyph_info_t.
+ *
+ * Returns glyph flags encoded within a #hb_glyph_info_t.
+ *
+ * Return value:
+ * The #hb_glyph_flags_t encoded within @info.
+ *
+ * Since: 1.5.0
+ **/
+hb_glyph_flags_t
+(hb_glyph_info_get_glyph_flags) (const hb_glyph_info_t *info)
+{
+ return hb_glyph_info_get_glyph_flags (info);
+}
+
+/**
* hb_buffer_reverse:
* @buffer: an #hb_buffer_t.
*
@@ -1666,6 +1713,58 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
}
+/**
+ * hb_buffer_append:
+ * @buffer: an #hb_buffer_t.
+ * @source: source #hb_buffer_t.
+ * @start: start index into source buffer to copy. Use 0 to copy from start of buffer.
+ * @end: end index into source buffer to copy. Use (unsigned int) -1 to copy to end of buffer.
+ *
+ * Append (part of) contents of another buffer to this buffer.
+ *
+ * Since: 1.5.0
+ **/
+HB_EXTERN void
+hb_buffer_append (hb_buffer_t *buffer,
+ hb_buffer_t *source,
+ unsigned int start,
+ unsigned int end)
+{
+ assert (!buffer->have_output && !source->have_output);
+ assert (buffer->have_positions == source->have_positions ||
+ !buffer->len || !source->len);
+ assert (buffer->content_type == source->content_type ||
+ !buffer->len || !source->len);
+
+ if (end > source->len)
+ end = source->len;
+ if (start > end)
+ start = end;
+ if (start == end)
+ return;
+
+ if (!buffer->len)
+ buffer->content_type = source->content_type;
+ if (!buffer->have_positions && source->have_positions)
+ buffer->clear_positions ();
+
+ if (buffer->len + (end - start) < buffer->len) /* Overflows. */
+ {
+ buffer->in_error = true;
+ return;
+ }
+
+ unsigned int orig_len = buffer->len;
+ hb_buffer_set_length (buffer, buffer->len + (end - start));
+ if (buffer->in_error)
+ return;
+
+ memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0]));
+ if (buffer->have_positions)
+ memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0]));
+}
+
+
static int
compare_info_codepoint (const hb_glyph_info_t *pa,
const hb_glyph_info_t *pb)
@@ -1736,7 +1835,8 @@ void
hb_buffer_normalize_glyphs (hb_buffer_t *buffer)
{
assert (buffer->have_positions);
- assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS);
+ assert (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS ||
+ (!buffer->len && buffer->content_type == HB_BUFFER_CONTENT_TYPE_INVALID));
bool backward = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
@@ -1775,6 +1875,98 @@ hb_buffer_t::sort (unsigned int start, unsigned int end, int(*compar)(const hb_g
}
}
+
+/*
+ * Comparing buffers.
+ */
+
+/**
+ * hb_buffer_diff:
+ *
+ * If dottedcircle_glyph is (hb_codepoint_t) -1 then %HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT
+ * and %HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT are never returned. This should be used by most
+ * callers if just comparing two buffers is needed.
+ *
+ * Since: 1.5.0
+ **/
+hb_buffer_diff_flags_t
+hb_buffer_diff (hb_buffer_t *buffer,
+ hb_buffer_t *reference,
+ hb_codepoint_t dottedcircle_glyph,
+ unsigned int position_fuzz)
+{
+ if (buffer->content_type != reference->content_type && buffer->len && reference->len)
+ return HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH;
+
+ hb_buffer_diff_flags_t result = HB_BUFFER_DIFF_FLAG_EQUAL;
+ bool contains = dottedcircle_glyph != (hb_codepoint_t) -1;
+
+ unsigned int count = reference->len;
+
+ if (buffer->len != count)
+ {
+ /*
+ * we can't compare glyph-by-glyph, but we do want to know if there
+ * are .notdef or dottedcircle glyphs present in the reference buffer
+ */
+ const hb_glyph_info_t *info = reference->info;
+ unsigned int i;
+ for (i = 0; i < count; i++)
+ {
+ if (contains && info[i].codepoint == dottedcircle_glyph)
+ result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
+ if (contains && info[i].codepoint == 0)
+ result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT;
+ }
+ result |= HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH;
+ return hb_buffer_diff_flags_t (result);
+ }
+
+ if (!count)
+ return hb_buffer_diff_flags_t (result);
+
+ const hb_glyph_info_t *buf_info = buffer->info;
+ const hb_glyph_info_t *ref_info = reference->info;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (buf_info->codepoint != ref_info->codepoint)
+ result |= HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH;
+ if (buf_info->cluster != ref_info->cluster)
+ result |= HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH;
+ if ((buf_info->mask & HB_GLYPH_FLAG_DEFINED) != (ref_info->mask & HB_GLYPH_FLAG_DEFINED))
+ result |= HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH;
+ if (contains && ref_info->codepoint == dottedcircle_glyph)
+ result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
+ if (contains && ref_info->codepoint == 0)
+ result |= HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT;
+ buf_info++;
+ ref_info++;
+ }
+
+ if (buffer->content_type == HB_BUFFER_CONTENT_TYPE_GLYPHS)
+ {
+ assert (buffer->have_positions);
+ const hb_glyph_position_t *buf_pos = buffer->pos;
+ const hb_glyph_position_t *ref_pos = reference->pos;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if ((unsigned int) abs (buf_pos->x_advance - ref_pos->x_advance) > position_fuzz ||
+ (unsigned int) abs (buf_pos->y_advance - ref_pos->y_advance) > position_fuzz ||
+ (unsigned int) abs (buf_pos->x_offset - ref_pos->x_offset) > position_fuzz ||
+ (unsigned int) abs (buf_pos->y_offset - ref_pos->y_offset) > position_fuzz)
+ {
+ result |= HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH;
+ break;
+ }
+ buf_pos++;
+ ref_pos++;
+ }
+ }
+
+ return result;
+}
+
+
/*
* Debugging.
*/
@@ -1803,9 +1995,9 @@ hb_buffer_set_message_func (hb_buffer_t *buffer,
buffer->message_data = user_data;
buffer->message_destroy = destroy;
} else {
- buffer->message_func = NULL;
- buffer->message_data = NULL;
- buffer->message_destroy = NULL;
+ buffer->message_func = nullptr;
+ buffer->message_data = nullptr;
+ buffer->message_destroy = nullptr;
}
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-buffer.h b/src/3rdparty/harfbuzz-ng/src/hb-buffer.h
index bf289c19b3..a8a4b84e97 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-buffer.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-buffer.h
@@ -63,7 +63,7 @@ HB_BEGIN_DECLS
*/
typedef struct hb_glyph_info_t {
hb_codepoint_t codepoint;
- hb_mask_t mask;
+ hb_mask_t mask; /* Holds hb_glyph_flags_t after hb_shape(), plus other things. */
uint32_t cluster;
/*< private >*/
@@ -71,6 +71,19 @@ typedef struct hb_glyph_info_t {
hb_var_int_t var2;
} hb_glyph_info_t;
+typedef enum { /*< flags >*/
+ HB_GLYPH_FLAG_UNSAFE_TO_BREAK = 0x00000001,
+
+ HB_GLYPH_FLAG_DEFINED = 0x00000001 /* OR of all defined flags */
+} hb_glyph_flags_t;
+
+HB_EXTERN hb_glyph_flags_t
+hb_glyph_info_get_glyph_flags (const hb_glyph_info_t *info);
+
+#define hb_glyph_info_get_glyph_flags(info) \
+ ((hb_glyph_flags_t) ((unsigned int) (info)->mask & HB_GLYPH_FLAG_DEFINED))
+
+
/**
* hb_glyph_position_t:
* @x_advance: how much the line advances after drawing this glyph when setting
@@ -119,8 +132,8 @@ typedef struct hb_segment_properties_t {
#define HB_SEGMENT_PROPERTIES_DEFAULT {HB_DIRECTION_INVALID, \
HB_SCRIPT_INVALID, \
HB_LANGUAGE_INVALID, \
- NULL, \
- NULL}
+ (void *) 0, \
+ (void *) 0}
HB_EXTERN hb_bool_t
hb_segment_properties_equal (const hb_segment_properties_t *a,
@@ -163,6 +176,7 @@ HB_EXTERN void *
hb_buffer_get_user_data (hb_buffer_t *buffer,
hb_user_data_key_t *key);
+
/**
* hb_buffer_content_type_t:
* @HB_BUFFER_CONTENT_TYPE_INVALID: Initial value for new buffer.
@@ -359,6 +373,11 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
unsigned int item_offset,
int item_length);
+HB_EXTERN void
+hb_buffer_append (hb_buffer_t *buffer,
+ hb_buffer_t *source,
+ unsigned int start,
+ unsigned int end);
HB_EXTERN hb_bool_t
hb_buffer_set_length (hb_buffer_t *buffer,
@@ -403,7 +422,8 @@ typedef enum { /*< flags >*/
HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS = 0x00000001u,
HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS = 0x00000002u,
HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES = 0x00000004u,
- HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS = 0x00000008u
+ HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS = 0x00000008u,
+ HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS = 0x00000010u
} hb_buffer_serialize_flags_t;
/**
@@ -453,6 +473,45 @@ hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
/*
+ * Compare buffers
+ */
+
+typedef enum { /*< flags >*/
+ HB_BUFFER_DIFF_FLAG_EQUAL = 0x0000,
+
+ /* Buffers with different content_type cannot be meaningfully compared
+ * in any further detail. */
+ HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH = 0x0001,
+
+ /* For buffers with differing length, the per-glyph comparison is not
+ * attempted, though we do still scan reference for dottedcircle / .notdef
+ * glyphs. */
+ HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH = 0x0002,
+
+ /* We want to know if dottedcircle / .notdef glyphs are present in the
+ * reference, as we may not care so much about other differences in this
+ * case. */
+ HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT = 0x0004,
+ HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT = 0x0008,
+
+ /* If the buffers have the same length, we compare them glyph-by-glyph
+ * and report which aspect(s) of the glyph info/position are different. */
+ HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH = 0x0010,
+ HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH = 0x0020,
+ HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH = 0x0040,
+ HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH = 0x0080
+
+} hb_buffer_diff_flags_t;
+
+/* Compare the contents of two buffers, report types of differences. */
+HB_EXTERN hb_buffer_diff_flags_t
+hb_buffer_diff (hb_buffer_t *buffer,
+ hb_buffer_t *reference,
+ hb_codepoint_t dottedcircle_glyph,
+ unsigned int position_fuzz);
+
+
+/*
* Debugging.
*/
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-common.cc b/src/3rdparty/harfbuzz-ng/src/hb-common.cc
index 3564e43557..cb1fb43ffb 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-common.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-common.cc
@@ -32,6 +32,9 @@
#include "hb-object-private.hh"
#include <locale.h>
+#ifdef HAVE_XLOCALE_H
+#include <xlocale.h>
+#endif
/* hb_options_t */
@@ -82,7 +85,7 @@ hb_tag_from_string (const char *str, int len)
for (; i < 4; i++)
tag[i] = ' ';
- return HB_TAG_CHAR4 (tag);
+ return HB_TAG (tag[0], tag[1], tag[2], tag[3]);
}
/**
@@ -186,8 +189,10 @@ lang_equal (hb_language_t v1,
const unsigned char *p1 = (const unsigned char *) v1;
const unsigned char *p2 = (const unsigned char *) v2;
- while (*p1 && *p1 == canon_map[*p2])
- p1++, p2++;
+ while (*p1 && *p1 == canon_map[*p2]) {
+ p1++;
+ p2++;
+ }
return *p1 == canon_map[*p2];
}
@@ -219,9 +224,18 @@ struct hb_language_item_t {
}
inline hb_language_item_t & operator = (const char *s) {
- lang = (hb_language_t) strdup (s);
- for (unsigned char *p = (unsigned char *) lang; *p; p++)
- *p = canon_map[*p];
+ /* If a custom allocated is used calling strdup() pairs
+ badly with a call to the custom free() in finish() below.
+ Therefore don't call strdup(), implement its behavior.
+ */
+ size_t len = strlen(s) + 1;
+ lang = (hb_language_t) malloc(len);
+ if (likely (lang))
+ {
+ memcpy((unsigned char *) lang, s, len);
+ for (unsigned char *p = (unsigned char *) lang; *p; p++)
+ *p = canon_map[*p];
+ }
return *this;
}
@@ -235,8 +249,8 @@ struct hb_language_item_t {
static hb_language_item_t *langs;
#ifdef HB_USE_ATEXIT
-static
-void free_langs (void)
+static void
+free_langs (void)
{
while (langs) {
hb_language_item_t *next = langs->next;
@@ -260,9 +274,14 @@ retry:
/* Not found; allocate one. */
hb_language_item_t *lang = (hb_language_item_t *) calloc (1, sizeof (hb_language_item_t));
if (unlikely (!lang))
- return NULL;
+ return nullptr;
lang->next = first_lang;
*lang = key;
+ if (unlikely (!lang->lang))
+ {
+ free (lang);
+ return nullptr;
+ }
if (!hb_atomic_ptr_cmpexch (&langs, first_lang, lang)) {
lang->finish ();
@@ -299,7 +318,7 @@ hb_language_from_string (const char *str, int len)
if (!str || !len || !*str)
return HB_LANGUAGE_INVALID;
- hb_language_item_t *item = NULL;
+ hb_language_item_t *item = nullptr;
if (len >= 0)
{
/* NUL-terminate it. */
@@ -330,7 +349,7 @@ hb_language_from_string (const char *str, int len)
const char *
hb_language_to_string (hb_language_t language)
{
- /* This is actually NULL-safe! */
+ /* This is actually nullptr-safe! */
return language->s;
}
@@ -350,7 +369,7 @@ hb_language_get_default (void)
hb_language_t language = (hb_language_t) hb_atomic_ptr_get (&default_language);
if (unlikely (language == HB_LANGUAGE_INVALID)) {
- language = hb_language_from_string (setlocale (LC_CTYPE, NULL), -1);
+ language = hb_language_from_string (setlocale (LC_CTYPE, nullptr), -1);
(void) hb_atomic_ptr_cmpexch (&default_language, HB_LANGUAGE_INVALID, language);
}
@@ -543,9 +562,9 @@ hb_user_data_array_t::set (hb_user_data_key_t *key,
void *
hb_user_data_array_t::get (hb_user_data_key_t *key)
{
- hb_user_data_item_t item = {NULL, NULL, NULL};
+ hb_user_data_item_t item = {nullptr, nullptr, nullptr};
- return items.find (key, &item, lock) ? item.data : NULL;
+ return items.find (key, &item, lock) ? item.data : nullptr;
}
@@ -605,3 +624,426 @@ hb_version_atleast (unsigned int major,
{
return HB_VERSION_ATLEAST (major, minor, micro);
}
+
+
+
+/* hb_feature_t and hb_variation_t */
+
+static bool
+parse_space (const char **pp, const char *end)
+{
+ while (*pp < end && ISSPACE (**pp))
+ (*pp)++;
+ return true;
+}
+
+static bool
+parse_char (const char **pp, const char *end, char c)
+{
+ parse_space (pp, end);
+
+ if (*pp == end || **pp != c)
+ return false;
+
+ (*pp)++;
+ return true;
+}
+
+static bool
+parse_uint (const char **pp, const char *end, unsigned int *pv)
+{
+ char buf[32];
+ unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
+ strncpy (buf, *pp, len);
+ buf[len] = '\0';
+
+ char *p = buf;
+ char *pend = p;
+ unsigned int v;
+
+ /* Intentionally use strtol instead of strtoul, such that
+ * -1 turns into "big number"... */
+ errno = 0;
+ v = strtol (p, &pend, 0);
+ if (errno || p == pend)
+ return false;
+
+ *pv = v;
+ *pp += pend - p;
+ return true;
+}
+
+static bool
+parse_uint32 (const char **pp, const char *end, uint32_t *pv)
+{
+ char buf[32];
+ unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
+ strncpy (buf, *pp, len);
+ buf[len] = '\0';
+
+ char *p = buf;
+ char *pend = p;
+ unsigned int v;
+
+ /* Intentionally use strtol instead of strtoul, such that
+ * -1 turns into "big number"... */
+ errno = 0;
+ v = strtol (p, &pend, 0);
+ if (errno || p == pend)
+ return false;
+
+ *pv = v;
+ *pp += pend - p;
+ return true;
+}
+
+#if defined (HAVE_NEWLOCALE) && defined (HAVE_STRTOD_L)
+#define USE_XLOCALE 1
+#define HB_LOCALE_T locale_t
+#define HB_CREATE_LOCALE(locName) newlocale (LC_ALL_MASK, locName, nullptr)
+#define HB_FREE_LOCALE(loc) freelocale (loc)
+#elif defined(_MSC_VER)
+#define USE_XLOCALE 1
+#define HB_LOCALE_T _locale_t
+#define HB_CREATE_LOCALE(locName) _create_locale (LC_ALL, locName)
+#define HB_FREE_LOCALE(loc) _free_locale (loc)
+#define strtod_l(a, b, c) _strtod_l ((a), (b), (c))
+#endif
+
+#ifdef USE_XLOCALE
+
+static HB_LOCALE_T C_locale;
+
+#ifdef HB_USE_ATEXIT
+static void
+free_C_locale (void)
+{
+ if (C_locale)
+ HB_FREE_LOCALE (C_locale);
+}
+#endif
+
+static HB_LOCALE_T
+get_C_locale (void)
+{
+retry:
+ HB_LOCALE_T C = (HB_LOCALE_T) hb_atomic_ptr_get (&C_locale);
+
+ if (unlikely (!C))
+ {
+ C = HB_CREATE_LOCALE ("C");
+
+ if (!hb_atomic_ptr_cmpexch (&C_locale, nullptr, C))
+ {
+ HB_FREE_LOCALE (C_locale);
+ goto retry;
+ }
+
+#ifdef HB_USE_ATEXIT
+ atexit (free_C_locale); /* First person registers atexit() callback. */
+#endif
+ }
+
+ return C;
+}
+#endif
+
+static bool
+parse_float (const char **pp, const char *end, float *pv)
+{
+ char buf[32];
+ unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
+ strncpy (buf, *pp, len);
+ buf[len] = '\0';
+
+ char *p = buf;
+ char *pend = p;
+ float v;
+
+ errno = 0;
+#ifdef USE_XLOCALE
+ v = strtod_l (p, &pend, get_C_locale ());
+#else
+ v = strtod (p, &pend);
+#endif
+ if (errno || p == pend)
+ return false;
+
+ *pv = v;
+ *pp += pend - p;
+ return true;
+}
+
+static bool
+parse_bool (const char **pp, const char *end, uint32_t *pv)
+{
+ parse_space (pp, end);
+
+ const char *p = *pp;
+ while (*pp < end && ISALPHA(**pp))
+ (*pp)++;
+
+ /* CSS allows on/off as aliases 1/0. */
+ if (*pp - p == 2 && 0 == strncmp (p, "on", 2))
+ *pv = 1;
+ else if (*pp - p == 3 && 0 == strncmp (p, "off", 3))
+ *pv = 0;
+ else
+ return false;
+
+ return true;
+}
+
+/* hb_feature_t */
+
+static bool
+parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feature)
+{
+ if (parse_char (pp, end, '-'))
+ feature->value = 0;
+ else {
+ parse_char (pp, end, '+');
+ feature->value = 1;
+ }
+
+ return true;
+}
+
+static bool
+parse_tag (const char **pp, const char *end, hb_tag_t *tag)
+{
+ parse_space (pp, end);
+
+ char quote = 0;
+
+ if (*pp < end && (**pp == '\'' || **pp == '"'))
+ {
+ quote = **pp;
+ (*pp)++;
+ }
+
+ const char *p = *pp;
+ while (*pp < end && ISALNUM(**pp))
+ (*pp)++;
+
+ if (p == *pp || *pp - p > 4)
+ return false;
+
+ *tag = hb_tag_from_string (p, *pp - p);
+
+ if (quote)
+ {
+ /* CSS expects exactly four bytes. And we only allow quotations for
+ * CSS compatibility. So, enforce the length. */
+ if (*pp - p != 4)
+ return false;
+ if (*pp == end || **pp != quote)
+ return false;
+ (*pp)++;
+ }
+
+ return true;
+}
+
+static bool
+parse_feature_indices (const char **pp, const char *end, hb_feature_t *feature)
+{
+ parse_space (pp, end);
+
+ bool has_start;
+
+ feature->start = 0;
+ feature->end = (unsigned int) -1;
+
+ if (!parse_char (pp, end, '['))
+ return true;
+
+ has_start = parse_uint (pp, end, &feature->start);
+
+ if (parse_char (pp, end, ':')) {
+ parse_uint (pp, end, &feature->end);
+ } else {
+ if (has_start)
+ feature->end = feature->start + 1;
+ }
+
+ return parse_char (pp, end, ']');
+}
+
+static bool
+parse_feature_value_postfix (const char **pp, const char *end, hb_feature_t *feature)
+{
+ bool had_equal = parse_char (pp, end, '=');
+ bool had_value = parse_uint32 (pp, end, &feature->value) ||
+ parse_bool (pp, end, &feature->value);
+ /* CSS doesn't use equal-sign between tag and value.
+ * If there was an equal-sign, then there *must* be a value.
+ * A value without an eqaul-sign is ok, but not required. */
+ return !had_equal || had_value;
+}
+
+static bool
+parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
+{
+ return parse_feature_value_prefix (pp, end, feature) &&
+ parse_tag (pp, end, &feature->tag) &&
+ parse_feature_indices (pp, end, feature) &&
+ parse_feature_value_postfix (pp, end, feature) &&
+ parse_space (pp, end) &&
+ *pp == end;
+}
+
+/**
+ * hb_feature_from_string:
+ * @str: (array length=len) (element-type uint8_t): a string to parse
+ * @len: length of @str, or -1 if string is %NULL terminated
+ * @feature: (out): the #hb_feature_t to initialize with the parsed values
+ *
+ * Parses a string into a #hb_feature_t.
+ *
+ * TODO: document the syntax here.
+ *
+ * Return value:
+ * %true if @str is successfully parsed, %false otherwise.
+ *
+ * Since: 0.9.5
+ **/
+hb_bool_t
+hb_feature_from_string (const char *str, int len,
+ hb_feature_t *feature)
+{
+ hb_feature_t feat;
+
+ if (len < 0)
+ len = strlen (str);
+
+ if (likely (parse_one_feature (&str, str + len, &feat)))
+ {
+ if (feature)
+ *feature = feat;
+ return true;
+ }
+
+ if (feature)
+ memset (feature, 0, sizeof (*feature));
+ return false;
+}
+
+/**
+ * hb_feature_to_string:
+ * @feature: an #hb_feature_t to convert
+ * @buf: (array length=size) (out): output string
+ * @size: the allocated size of @buf
+ *
+ * Converts a #hb_feature_t into a %NULL-terminated string in the format
+ * understood by hb_feature_from_string(). The client in responsible for
+ * allocating big enough size for @buf, 128 bytes is more than enough.
+ *
+ * Since: 0.9.5
+ **/
+void
+hb_feature_to_string (hb_feature_t *feature,
+ char *buf, unsigned int size)
+{
+ if (unlikely (!size)) return;
+
+ char s[128];
+ unsigned int len = 0;
+ if (feature->value == 0)
+ s[len++] = '-';
+ hb_tag_to_string (feature->tag, s + len);
+ len += 4;
+ while (len && s[len - 1] == ' ')
+ len--;
+ if (feature->start != 0 || feature->end != (unsigned int) -1)
+ {
+ s[len++] = '[';
+ if (feature->start)
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->start));
+ if (feature->end != feature->start + 1) {
+ s[len++] = ':';
+ if (feature->end != (unsigned int) -1)
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->end));
+ }
+ s[len++] = ']';
+ }
+ if (feature->value > 1)
+ {
+ s[len++] = '=';
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->value));
+ }
+ assert (len < ARRAY_LENGTH (s));
+ len = MIN (len, size - 1);
+ memcpy (buf, s, len);
+ buf[len] = '\0';
+}
+
+/* hb_variation_t */
+
+static bool
+parse_variation_value (const char **pp, const char *end, hb_variation_t *variation)
+{
+ parse_char (pp, end, '='); /* Optional. */
+ return parse_float (pp, end, &variation->value);
+}
+
+static bool
+parse_one_variation (const char **pp, const char *end, hb_variation_t *variation)
+{
+ return parse_tag (pp, end, &variation->tag) &&
+ parse_variation_value (pp, end, variation) &&
+ parse_space (pp, end) &&
+ *pp == end;
+}
+
+/**
+ * hb_variation_from_string:
+ *
+ * Since: 1.4.2
+ */
+hb_bool_t
+hb_variation_from_string (const char *str, int len,
+ hb_variation_t *variation)
+{
+ hb_variation_t var;
+
+ if (len < 0)
+ len = strlen (str);
+
+ if (likely (parse_one_variation (&str, str + len, &var)))
+ {
+ if (variation)
+ *variation = var;
+ return true;
+ }
+
+ if (variation)
+ memset (variation, 0, sizeof (*variation));
+ return false;
+}
+
+/**
+ * hb_variation_to_string:
+ *
+ * Since: 1.4.2
+ */
+void
+hb_variation_to_string (hb_variation_t *variation,
+ char *buf, unsigned int size)
+{
+ if (unlikely (!size)) return;
+
+ char s[128];
+ unsigned int len = 0;
+ hb_tag_to_string (variation->tag, s + len);
+ len += 4;
+ while (len && s[len - 1] == ' ')
+ len--;
+ s[len++] = '=';
+ len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", variation->value));
+
+ assert (len < ARRAY_LENGTH (s));
+ len = MIN (len, size - 1);
+ memcpy (buf, s, len);
+ buf[len] = '\0';
+}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-common.h b/src/3rdparty/harfbuzz-ng/src/hb-common.h
index 2cbee76a8f..26200ce125 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-common.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-common.h
@@ -43,30 +43,16 @@
# endif /* !__cplusplus */
#endif
-#if !defined (HB_DONT_DEFINE_STDINT)
-
#if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \
defined (_sgi) || defined (__sun) || defined (sun) || \
defined (__digital__) || defined (__HP_cc)
# include <inttypes.h>
#elif defined (_AIX)
# include <sys/inttypes.h>
-/* VS 2010 (_MSC_VER 1600) has stdint.h */
-#elif defined (_MSC_VER) && _MSC_VER < 1600
-typedef __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
#else
# include <stdint.h>
#endif
-#endif
-
HB_BEGIN_DECLS
@@ -148,7 +134,7 @@ hb_language_from_string (const char *str, int len);
HB_EXTERN const char *
hb_language_to_string (hb_language_t language);
-#define HB_LANGUAGE_INVALID ((hb_language_t) NULL)
+#define HB_LANGUAGE_INVALID ((hb_language_t) 0)
HB_EXTERN hb_language_t
hb_language_get_default (void);
@@ -321,6 +307,14 @@ typedef enum
/*9.0*/ HB_SCRIPT_TANGUT = HB_TAG ('T','a','n','g'),
/*9.0*/ HB_SCRIPT_NEWA = HB_TAG ('N','e','w','a'),
+ /*
+ * Since 1.6.0
+ */
+ /*10.0*/HB_SCRIPT_MASARAM_GONDI = HB_TAG ('G','o','n','m'),
+ /*10.0*/HB_SCRIPT_NUSHU = HB_TAG ('N','s','h','u'),
+ /*10.0*/HB_SCRIPT_SOYOMBO = HB_TAG ('S','o','y','o'),
+ /*10.0*/HB_SCRIPT_ZANABAZAR_SQUARE = HB_TAG ('Z','a','n','b'),
+
/* No script set. */
HB_SCRIPT_INVALID = HB_TAG_NONE,
@@ -362,6 +356,42 @@ typedef struct hb_user_data_key_t {
typedef void (*hb_destroy_func_t) (void *user_data);
+/* Font features and variations. */
+
+typedef struct hb_feature_t {
+ hb_tag_t tag;
+ uint32_t value;
+ unsigned int start;
+ unsigned int end;
+} hb_feature_t;
+
+HB_EXTERN hb_bool_t
+hb_feature_from_string (const char *str, int len,
+ hb_feature_t *feature);
+
+HB_EXTERN void
+hb_feature_to_string (hb_feature_t *feature,
+ char *buf, unsigned int size);
+
+/**
+ * hb_variation_t:
+ *
+ * Since: 1.4.2
+ */
+typedef struct hb_variation_t {
+ hb_tag_t tag;
+ float value;
+} hb_variation_t;
+
+HB_EXTERN hb_bool_t
+hb_variation_from_string (const char *str, int len,
+ hb_variation_t *variation);
+
+HB_EXTERN void
+hb_variation_to_string (hb_variation_t *variation,
+ char *buf, unsigned int size);
+
+
HB_END_DECLS
#endif /* HB_COMMON_H */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc b/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc
index 9865bbba41..9431ba5fe1 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-coretext.cc
@@ -27,14 +27,13 @@
*/
#define HB_SHAPER coretext
+
+#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-shaper-impl-private.hh"
#include "hb-coretext.h"
-
-
-#ifndef HB_DEBUG_CORETEXT
-#define HB_DEBUG_CORETEXT (HB_DEBUG+0)
-#endif
+#include <math.h>
typedef bool (*qt_get_font_table_func_t) (void *user_data, unsigned int tag, unsigned char *buffer, unsigned int *length);
@@ -50,6 +49,27 @@ struct CoreTextFontEngineData {
};
+/* https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont */
+#define HB_CORETEXT_DEFAULT_FONT_SIZE 12.f
+
+static CGFloat
+coretext_font_size_from_ptem (float ptem)
+{
+ /* CoreText points are CSS pixels (96 per inch),
+ * NOT typographic points (72 per inch).
+ *
+ * https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html
+ */
+ ptem *= 96.f / 72.f;
+ return ptem <= 0.f ? HB_CORETEXT_DEFAULT_FONT_SIZE : ptem;
+}
+static float
+coretext_font_size_to_ptem (CGFloat size)
+{
+ size *= 72.f / 96.f;
+ return size <= 0.f ? 0 : size;
+}
+
static void
release_table_data (void *user_data)
{
@@ -63,32 +83,29 @@ reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
CGFontRef cg_font = reinterpret_cast<CGFontRef> (user_data);
CFDataRef cf_data = CGFontCopyTableForTag (cg_font, tag);
if (unlikely (!cf_data))
- return NULL;
+ return nullptr;
const char *data = reinterpret_cast<const char*> (CFDataGetBytePtr (cf_data));
const size_t length = CFDataGetLength (cf_data);
if (!data || !length)
- return NULL;
+ return nullptr;
return hb_blob_create (data, length, HB_MEMORY_MODE_READONLY,
reinterpret_cast<void *> (const_cast<__CFData *> (cf_data)),
release_table_data);
}
-hb_face_t *
-hb_coretext_face_create (CGFontRef cg_font)
+static void
+_hb_cg_font_release (void *data)
{
- return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), (hb_destroy_func_t) CGFontRelease);
+ CGFontRelease ((CGFontRef) data);
}
-HB_SHAPER_DATA_ENSURE_DECLARE(coretext, face)
-HB_SHAPER_DATA_ENSURE_DECLARE(coretext, font)
-
-
-/*
- * shaper face data
- */
+HB_SHAPER_DATA_ENSURE_DEFINE(coretext, face)
+HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(coretext, font,
+ fabs (CTFontGetSize((CTFontRef) data) - coretext_font_size_from_ptem (font->ptem)) <= .5
+)
static CTFontDescriptorRef
get_last_resort_font_desc (void)
@@ -117,7 +134,7 @@ static void
release_data (void *info, const void *data, size_t size)
{
assert (hb_blob_get_length ((hb_blob_t *) info) == size &&
- hb_blob_get_data ((hb_blob_t *) info, NULL) == data);
+ hb_blob_get_data ((hb_blob_t *) info, nullptr) == data);
hb_blob_destroy ((hb_blob_t *) info);
}
@@ -125,14 +142,14 @@ release_data (void *info, const void *data, size_t size)
static CGFontRef
create_cg_font (hb_face_t *face)
{
- CGFontRef cg_font = NULL;
-#if 0
- if (face->destroy == (hb_destroy_func_t) CGFontRelease)
+ CGFontRef cg_font = nullptr;
+ if (face->destroy == _hb_cg_font_release)
{
cg_font = CGFontRetain ((CGFontRef) face->user_data);
}
else
{
+#if 0
hb_blob_t *blob = hb_face_reference_blob (face);
unsigned int blob_length;
const char *blob_data = hb_blob_get_data (blob, &blob_length);
@@ -147,22 +164,48 @@ create_cg_font (hb_face_t *face)
DEBUG_MSG (CORETEXT, face, "Face CGFontCreateWithDataProvider() failed");
CGDataProviderRelease (provider);
}
- }
#else
- FontEngineFaceData *fontEngineFaceData = (FontEngineFaceData *) face->user_data;
- CoreTextFontEngineData *coreTextFontEngineData = (CoreTextFontEngineData *) fontEngineFaceData->user_data;
- cg_font = CGFontRetain (coreTextFontEngineData->cgFont);
+ FontEngineFaceData *fontEngineFaceData = (FontEngineFaceData *) face->user_data;
+ CoreTextFontEngineData *coreTextFontEngineData = (CoreTextFontEngineData *) fontEngineFaceData->user_data;
+ cg_font = CGFontRetain (coreTextFontEngineData->cgFont);
#endif
+ }
return cg_font;
}
static CTFontRef
create_ct_font (CGFontRef cg_font, CGFloat font_size)
{
- CTFontRef ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, NULL, NULL);
+ CTFontRef ct_font = nullptr;
+
+ /* CoreText does not enable trak table usage / tracking when creating a CTFont
+ * using CTFontCreateWithGraphicsFont. The only way of enabling tracking seems
+ * to be through the CTFontCreateUIFontForLanguage call. */
+ CFStringRef cg_postscript_name = CGFontCopyPostScriptName (cg_font);
+ if (CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSText")) ||
+ CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSDisplay")))
+ {
+ CTFontUIFontType font_type = kCTFontUIFontSystem;
+ if (CFStringHasSuffix (cg_postscript_name, CFSTR ("-Bold")))
+ font_type = kCTFontUIFontEmphasizedSystem;
+
+ ct_font = CTFontCreateUIFontForLanguage (font_type, font_size, nullptr);
+ CFStringRef ct_result_name = CTFontCopyPostScriptName(ct_font);
+ if (CFStringCompare (ct_result_name, cg_postscript_name, 0) != kCFCompareEqualTo)
+ {
+ CFRelease(ct_font);
+ ct_font = nullptr;
+ }
+ CFRelease (ct_result_name);
+ }
+ CFRelease (cg_postscript_name);
+
+ if (!ct_font)
+ ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, nullptr, nullptr);
+
if (unlikely (!ct_font)) {
DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed");
- return NULL;
+ return nullptr;
}
/* crbug.com/576941 and crbug.com/625902 and the investigation in the latter
@@ -172,7 +215,7 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size)
* reconfiguring the cascade list causes CoreText crashes. For details, see
* crbug.com/549610 */
// 0x00070000 stands for "kCTVersionNumber10_10", see CoreText.h
- if (&CTGetCoreTextVersion != NULL && CTGetCoreTextVersion() < 0x00070000) {
+ if (&CTGetCoreTextVersion != nullptr && CTGetCoreTextVersion() < 0x00070000) {
CFStringRef fontName = CTFontCopyPostScriptName (ct_font);
bool isEmojiFont = CFStringCompare (fontName, CFSTR("AppleColorEmoji"), 0) == kCFCompareEqualTo;
CFRelease (fontName);
@@ -186,7 +229,7 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size)
* font fallback which we don't need anyway. */
{
CTFontDescriptorRef last_resort_font_desc = get_last_resort_font_desc ();
- CTFontRef new_ct_font = CTFontCreateCopyWithAttributes (ct_font, 0.0, NULL, last_resort_font_desc);
+ CTFontRef new_ct_font = CTFontCreateCopyWithAttributes (ct_font, 0.0, nullptr, last_resort_font_desc);
CFRelease (last_resort_font_desc);
if (new_ct_font)
{
@@ -221,51 +264,30 @@ create_ct_font (CGFontRef cg_font, CGFloat font_size)
return ct_font;
}
-struct hb_coretext_shaper_face_data_t {
- CGFontRef cg_font;
- CTFontRef ct_font;
-};
-
hb_coretext_shaper_face_data_t *
_hb_coretext_shaper_face_data_create (hb_face_t *face)
{
- hb_coretext_shaper_face_data_t *data = (hb_coretext_shaper_face_data_t *) calloc (1, sizeof (hb_coretext_shaper_face_data_t));
- if (unlikely (!data))
- return NULL;
+ CGFontRef cg_font = create_cg_font (face);
- data->cg_font = create_cg_font (face);
- if (unlikely (!data->cg_font))
+ if (unlikely (!cg_font))
{
DEBUG_MSG (CORETEXT, face, "CGFont creation failed..");
- free (data);
- return NULL;
+ return nullptr;
}
- /* We use 36pt size instead of UPEM, because CoreText implements the 'trak' table,
- * which can make the font too tight at large sizes. 36pt should be a good semi-neutral
- * size.
- *
- * Since we always create CTFont at a fixed size, our CTFont lives in face_data
- * instead of font_data. Which is good, because when people change scale on
- * hb_font_t, we won't need to update our CTFont. */
- data->ct_font = create_ct_font (data->cg_font, 36.);
- if (unlikely (!data->ct_font))
- {
- DEBUG_MSG (CORETEXT, face, "CTFont creation failed.");
- CFRelease (data->cg_font);
- free (data);
- return NULL;
- }
-
- return data;
+ return (hb_coretext_shaper_face_data_t *) cg_font;
}
void
_hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
{
- CFRelease (data->ct_font);
- CFRelease (data->cg_font);
- free (data);
+ CFRelease ((CGFontRef) data);
+}
+
+hb_face_t *
+hb_coretext_face_create (CGFontRef cg_font)
+{
+ return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), _hb_cg_font_release);
}
/*
@@ -274,29 +296,66 @@ _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
CGFontRef
hb_coretext_face_get_cg_font (hb_face_t *face)
{
- if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
- hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
- return face_data->cg_font;
+ if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return nullptr;
+ return (CGFontRef) HB_SHAPER_DATA_GET (face);
}
-/*
- * shaper font data
- */
-
-struct hb_coretext_shaper_font_data_t {};
-
hb_coretext_shaper_font_data_t *
-_hb_coretext_shaper_font_data_create (hb_font_t *font HB_UNUSED)
+_hb_coretext_shaper_font_data_create (hb_font_t *font)
{
- return (hb_coretext_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
+ hb_face_t *face = font->face;
+ if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return nullptr;
+ CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face);
+
+ CTFontRef ct_font = create_ct_font (cg_font, coretext_font_size_from_ptem (font->ptem));
+
+ if (unlikely (!ct_font))
+ {
+ DEBUG_MSG (CORETEXT, font, "CGFont creation failed..");
+ return nullptr;
+ }
+
+ return (hb_coretext_shaper_font_data_t *) ct_font;
}
void
_hb_coretext_shaper_font_data_destroy (hb_coretext_shaper_font_data_t *data)
{
+ CFRelease ((CTFontRef) data);
}
+/*
+ * Since: 1.7.2
+ */
+hb_font_t *
+hb_coretext_font_create (CTFontRef ct_font)
+{
+ CGFontRef cg_font = CTFontCopyGraphicsFont (ct_font, 0);
+ hb_face_t *face = hb_coretext_face_create (cg_font);
+ CFRelease (cg_font);
+ hb_font_t *font = hb_font_create (face);
+ hb_face_destroy (face);
+
+ if (unlikely (hb_object_is_inert (font)))
+ return font;
+
+ hb_font_set_ptem (font, coretext_font_size_to_ptem (CTFontGetSize(ct_font)));
+
+ /* Let there be dragons here... */
+ HB_SHAPER_DATA_GET (font) = (hb_coretext_shaper_font_data_t *) CFRetain (ct_font);
+
+ return font;
+}
+
+CTFontRef
+hb_coretext_font_get_ct_font (hb_font_t *font)
+{
+ if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return nullptr;
+ return (CTFontRef) HB_SHAPER_DATA_GET (font);
+}
+
+
/*
* shaper shape_plan data
@@ -319,15 +378,6 @@ _hb_coretext_shaper_shape_plan_data_destroy (hb_coretext_shaper_shape_plan_data_
{
}
-CTFontRef
-hb_coretext_font_get_ct_font (hb_font_t *font)
-{
- hb_face_t *face = font->face;
- if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
- hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
- return face_data->ct_font;
-}
-
/*
* shaper
@@ -342,7 +392,9 @@ struct active_feature_t {
feature_record_t rec;
unsigned int order;
- static int cmp (const active_feature_t *a, const active_feature_t *b) {
+ static int cmp (const void *pa, const void *pb) {
+ const active_feature_t *a = (const active_feature_t *) pa;
+ const active_feature_t *b = (const active_feature_t *) pb;
return a->rec.feature < b->rec.feature ? -1 : a->rec.feature > b->rec.feature ? 1 :
a->order < b->order ? -1 : a->order > b->order ? 1 :
a->rec.setting < b->rec.setting ? -1 : a->rec.setting > b->rec.setting ? 1 :
@@ -358,7 +410,9 @@ struct feature_event_t {
bool start;
active_feature_t feature;
- static int cmp (const feature_event_t *a, const feature_event_t *b) {
+ static int cmp (const void *pa, const void *pb) {
+ const feature_event_t *a = (const feature_event_t *) pa;
+ const feature_event_t *b = (const feature_event_t *) pb;
return a->index < b->index ? -1 : a->index > b->index ? 1 :
a->start < b->start ? -1 : a->start > b->start ? 1 :
active_feature_t::cmp (&a->feature, &b->feature);
@@ -557,9 +611,10 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
unsigned int num_features)
{
hb_face_t *face = font->face;
- hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
+ CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face);
+ CTFontRef ct_font = (CTFontRef) HB_SHAPER_DATA_GET (font);
- CGFloat ct_font_size = CTFontGetSize (face_data->ct_font);
+ CGFloat ct_font_size = CTFontGetSize (ct_font);
CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
@@ -660,22 +715,23 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
/* active_features.qsort (); */
for (unsigned int j = 0; j < active_features.len; j++)
{
- CFStringRef keys[2] = {
+ CFStringRef keys[] = {
kCTFontFeatureTypeIdentifierKey,
kCTFontFeatureSelectorIdentifierKey
};
- CFNumberRef values[2] = {
+ CFNumberRef values[] = {
CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &active_features[j].rec.feature),
CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &active_features[j].rec.setting)
};
+ static_assert ((ARRAY_LENGTH_CONST (keys) == ARRAY_LENGTH_CONST (values)), "");
CFDictionaryRef dict = CFDictionaryCreate (kCFAllocatorDefault,
(const void **) keys,
(const void **) values,
- 2,
+ ARRAY_LENGTH (keys),
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
- CFRelease (values[0]);
- CFRelease (values[1]);
+ for (unsigned int i = 0; i < ARRAY_LENGTH (values); i++)
+ CFRelease (values[i]);
CFArrayAppendValue (features_array, dict);
CFRelease (dict);
@@ -693,12 +749,12 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
CFRelease (attributes);
- range->font = CTFontCreateCopyWithAttributes (face_data->ct_font, 0.0, NULL, font_desc);
+ range->font = CTFontCreateCopyWithAttributes (ct_font, 0.0, nullptr, font_desc);
CFRelease (font_desc);
}
else
{
- range->font = NULL;
+ range->font = nullptr;
}
range->index_first = last_index;
@@ -718,9 +774,6 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
active_features.remove (feature - active_features.array);
}
}
-
- if (!range_records.len) /* No active feature found. */
- goto fail_features;
}
else
{
@@ -771,14 +824,14 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
#define FAIL(...) \
HB_STMT_START { \
- DEBUG_MSG (CORETEXT, NULL, __VA_ARGS__); \
+ DEBUG_MSG (CORETEXT, nullptr, __VA_ARGS__); \
ret = false; \
goto fail; \
} HB_STMT_END;
bool ret = true;
- CFStringRef string_ref = NULL;
- CTLineRef line = NULL;
+ CFStringRef string_ref = nullptr;
+ CTLineRef line = nullptr;
if (0)
{
@@ -790,8 +843,8 @@ resize_and_retry:
assert (line);
CFRelease (string_ref);
CFRelease (line);
- string_ref = NULL;
- line = NULL;
+ string_ref = nullptr;
+ line = nullptr;
/* Get previous start-of-scratch-area, that we use later for readjusting
* our existing scratch arrays. */
@@ -812,7 +865,7 @@ resize_and_retry:
scratch_size -= old_scratch_used;
}
{
- string_ref = CFStringCreateWithCharactersNoCopy (NULL,
+ string_ref = CFStringCreateWithCharactersNoCopy (nullptr,
pchars, chars_len,
kCFAllocatorNull);
if (unlikely (!string_ref))
@@ -850,9 +903,9 @@ resize_and_retry:
CFRelease (lang);
}
CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
- kCTFontAttributeName, face_data->ct_font);
+ kCTFontAttributeName, ct_font);
- if (num_features)
+ if (num_features && range_records.len)
{
unsigned int start = 0;
range_record_t *last_range = &range_records[0];
@@ -878,6 +931,30 @@ resize_and_retry:
CFAttributedStringSetAttribute (attr_string, CFRangeMake (start, chars_len - start),
kCTFontAttributeName, last_range->font);
}
+ /* Enable/disable kern if requested.
+ *
+ * Note: once kern is disabled, reenabling it doesn't currently seem to work in CoreText.
+ */
+ if (num_features)
+ {
+ unsigned int zeroint = 0;
+ CFNumberRef zero = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &zeroint);
+ for (unsigned int i = 0; i < num_features; i++)
+ {
+ const hb_feature_t &feature = features[i];
+ if (feature.tag == HB_TAG('k','e','r','n') &&
+ feature.start < chars_len && feature.start < feature.end)
+ {
+ CFRange feature_range = CFRangeMake (feature.start,
+ MIN (feature.end, chars_len) - feature.start);
+ if (feature.value)
+ CFAttributedStringRemoveAttribute (attr_string, feature_range, kCTKernAttributeName);
+ else
+ CFAttributedStringSetAttribute (attr_string, feature_range, kCTKernAttributeName, zero);
+ }
+ }
+ CFRelease (zero);
+ }
int level = HB_DIRECTION_IS_FORWARD (buffer->props.direction) ? 0 : 1;
CFNumberRef level_number = CFNumberCreate (kCFAllocatorDefault, kCFNumberIntType, &level);
@@ -887,6 +964,7 @@ resize_and_retry:
1,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
+ CFRelease (level_number);
if (unlikely (!options))
FAIL ("CFDictionaryCreate failed");
@@ -904,7 +982,7 @@ resize_and_retry:
CFArrayRef glyph_runs = CTLineGetGlyphRuns (line);
unsigned int num_runs = CFArrayGetCount (glyph_runs);
- DEBUG_MSG (CORETEXT, NULL, "Num runs: %d", num_runs);
+ DEBUG_MSG (CORETEXT, nullptr, "Num runs: %d", num_runs);
buffer->len = 0;
uint32_t status_and = ~0, status_or = 0;
@@ -930,7 +1008,7 @@ resize_and_retry:
status_or |= run_status;
status_and &= run_status;
DEBUG_MSG (CORETEXT, run, "CTRunStatus: %x", run_status);
- double run_advance = CTRunGetTypographicBounds (run, range_all, NULL, NULL, NULL);
+ double run_advance = CTRunGetTypographicBounds (run, range_all, nullptr, nullptr, nullptr);
if (HB_DIRECTION_IS_VERTICAL (buffer->props.direction))
run_advance = -run_advance;
DEBUG_MSG (CORETEXT, run, "Run advance: %g", run_advance);
@@ -943,7 +1021,7 @@ resize_and_retry:
*/
CFDictionaryRef attributes = CTRunGetAttributes (run);
CTFontRef run_ct_font = static_cast<CTFontRef>(CFDictionaryGetValue (attributes, kCTFontAttributeName));
- if (!CFEqual (run_ct_font, face_data->ct_font))
+ if (!CFEqual (run_ct_font, ct_font))
{
/* The run doesn't use our main font instance. We have to figure out
* whether font fallback happened, or this is just CoreText giving us
@@ -965,7 +1043,7 @@ resize_and_retry:
* However, even that wouldn't work if we were passed in the CGFont to
* construct a hb_face to begin with.
*
- * See: http://github.com/behdad/harfbuzz/pull/36
+ * See: http://github.com/harfbuzz/harfbuzz/pull/36
*
* Also see: https://bugs.chromium.org/p/chromium/issues/detail?id=597098
*/
@@ -981,13 +1059,13 @@ resize_and_retry:
CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, 0);
if (run_cg_font)
{
- matched = CFEqual (run_cg_font, face_data->cg_font);
+ matched = CFEqual (run_cg_font, cg_font);
CFRelease (run_cg_font);
}
}
if (!matched)
{
- CFStringRef font_ps_name = CTFontCopyName (face_data->ct_font, kCTFontPostScriptNameKey);
+ CFStringRef font_ps_name = CTFontCopyName (ct_font, kCTFontPostScriptNameKey);
CFStringRef run_ps_name = CTFontCopyName (run_ct_font, kCTFontPostScriptNameKey);
CFComparisonResult result = CFStringCompare (run_ps_name, font_ps_name, 0);
CFRelease (run_ps_name);
@@ -1056,7 +1134,7 @@ resize_and_retry:
/* Testing used to indicate that CTRunGetGlyphsPtr, etc (almost?) always
* succeed, and so copying data to our own buffer will be rare. Reports
- * have it that this changed in OS X 10.10 Yosemite, and NULL is returned
+ * have it that this changed in OS X 10.10 Yosemite, and nullptr is returned
* frequently. At any rate, we can test that codepath by setting USE_PTR
* to false. */
@@ -1072,13 +1150,13 @@ resize_and_retry:
{ /* Setup glyphs */
SCRATCH_SAVE();
- const CGGlyph* glyphs = USE_PTR ? CTRunGetGlyphsPtr (run) : NULL;
+ const CGGlyph* glyphs = USE_PTR ? CTRunGetGlyphsPtr (run) : nullptr;
if (!glyphs) {
ALLOCATE_ARRAY (CGGlyph, glyph_buf, num_glyphs, goto resize_and_retry);
CTRunGetGlyphs (run, range_all, glyph_buf);
glyphs = glyph_buf;
}
- const CFIndex* string_indices = USE_PTR ? CTRunGetStringIndicesPtr (run) : NULL;
+ const CFIndex* string_indices = USE_PTR ? CTRunGetStringIndicesPtr (run) : nullptr;
if (!string_indices) {
ALLOCATE_ARRAY (CFIndex, index_buf, num_glyphs, goto resize_and_retry);
CTRunGetStringIndices (run, range_all, index_buf);
@@ -1100,7 +1178,7 @@ resize_and_retry:
* advance (in the advance direction only), and for last glyph we set
* whatever is needed to make the whole run's advance add up. */
SCRATCH_SAVE();
- const CGPoint* positions = USE_PTR ? CTRunGetPositionsPtr (run) : NULL;
+ const CGPoint* positions = USE_PTR ? CTRunGetPositionsPtr (run) : nullptr;
if (!positions) {
ALLOCATE_ARRAY (CGPoint, position_buf, num_glyphs, goto resize_and_retry);
CTRunGetPositions (run, range_all, position_buf);
@@ -1176,6 +1254,9 @@ resize_and_retry:
pos->x_advance = info->mask;
pos->x_offset = info->var1.i32;
pos->y_offset = info->var2.i32;
+
+ info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+
info++, pos++;
}
else
@@ -1184,6 +1265,9 @@ resize_and_retry:
pos->y_advance = info->mask;
pos->x_offset = info->var1.i32;
pos->y_offset = info->var2.i32;
+
+ info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+
info++, pos++;
}
@@ -1221,6 +1305,8 @@ resize_and_retry:
}
}
+ buffer->unsafe_to_break_all ();
+
#undef FAIL
fail:
@@ -1241,6 +1327,9 @@ fail:
* AAT shaper
*/
+HB_SHAPER_DATA_ENSURE_DEFINE(coretext_aat, face)
+HB_SHAPER_DATA_ENSURE_DEFINE(coretext_aat, font)
+
/*
* shaper face data
*/
@@ -1250,22 +1339,20 @@ struct hb_coretext_aat_shaper_face_data_t {};
hb_coretext_aat_shaper_face_data_t *
_hb_coretext_aat_shaper_face_data_create (hb_face_t *face)
{
- hb_blob_t *mort_blob = face->reference_table (HB_CORETEXT_TAG_MORT);
- /* Umm, we just reference the table to check whether it exists.
- * Maybe add better API for this? */
- if (!hb_blob_get_length (mort_blob))
+ static const hb_tag_t tags[] = {HB_CORETEXT_TAG_MORX, HB_CORETEXT_TAG_MORT, HB_CORETEXT_TAG_KERX};
+
+ for (unsigned int i = 0; i < ARRAY_LENGTH (tags); i++)
{
- hb_blob_destroy (mort_blob);
- mort_blob = face->reference_table (HB_CORETEXT_TAG_MORX);
- if (!hb_blob_get_length (mort_blob))
+ hb_blob_t *blob = face->reference_table (tags[i]);
+ if (hb_blob_get_length (blob))
{
- hb_blob_destroy (mort_blob);
- return NULL;
+ hb_blob_destroy (blob);
+ return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : nullptr;
}
+ hb_blob_destroy (blob);
}
- hb_blob_destroy (mort_blob);
- return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL;
+ return nullptr;
}
void
@@ -1283,7 +1370,7 @@ struct hb_coretext_aat_shaper_font_data_t {};
hb_coretext_aat_shaper_font_data_t *
_hb_coretext_aat_shaper_font_data_create (hb_font_t *font)
{
- return hb_coretext_shaper_font_data_ensure (font) ? (hb_coretext_aat_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL;
+ return hb_coretext_shaper_font_data_ensure (font) ? (hb_coretext_aat_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED : nullptr;
}
void
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-coretext.h b/src/3rdparty/harfbuzz-ng/src/hb-coretext.h
index 82066e4e0d..4b0a6f01b6 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-coretext.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-coretext.h
@@ -42,11 +42,15 @@ HB_BEGIN_DECLS
#define HB_CORETEXT_TAG_MORT HB_TAG('m','o','r','t')
#define HB_CORETEXT_TAG_MORX HB_TAG('m','o','r','x')
+#define HB_CORETEXT_TAG_KERX HB_TAG('k','e','r','x')
HB_EXTERN hb_face_t *
hb_coretext_face_create (CGFontRef cg_font);
+HB_EXTERN hb_font_t *
+hb_coretext_font_create (CTFontRef ct_font);
+
HB_EXTERN CGFontRef
hb_coretext_face_get_cg_font (hb_face_t *face);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-debug.hh b/src/3rdparty/harfbuzz-ng/src/hb-debug.hh
new file mode 100644
index 0000000000..6c425f7b9d
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-debug.hh
@@ -0,0 +1,431 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_DEBUG_HH
+#define HB_DEBUG_HH
+
+#include "hb-private.hh"
+
+
+#ifndef HB_DEBUG
+#define HB_DEBUG 0
+#endif
+
+static inline bool
+_hb_debug (unsigned int level,
+ unsigned int max_level)
+{
+ return level < max_level;
+}
+
+#define DEBUG_LEVEL_ENABLED(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
+#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0))
+
+static inline void
+_hb_print_func (const char *func)
+{
+ if (func)
+ {
+ unsigned int func_len = strlen (func);
+ /* Skip "static" */
+ if (0 == strncmp (func, "static ", 7))
+ func += 7;
+ /* Skip "typename" */
+ if (0 == strncmp (func, "typename ", 9))
+ func += 9;
+ /* Skip return type */
+ const char *space = strchr (func, ' ');
+ if (space)
+ func = space + 1;
+ /* Skip parameter list */
+ const char *paren = strchr (func, '(');
+ if (paren)
+ func_len = paren - func;
+ fprintf (stderr, "%.*s", func_len, func);
+ }
+}
+
+template <int max_level> static inline void
+_hb_debug_msg_va (const char *what,
+ const void *obj,
+ const char *func,
+ bool indented,
+ unsigned int level,
+ int level_dir,
+ const char *message,
+ va_list ap) HB_PRINTF_FUNC(7, 0);
+template <int max_level> static inline void
+_hb_debug_msg_va (const char *what,
+ const void *obj,
+ const char *func,
+ bool indented,
+ unsigned int level,
+ int level_dir,
+ const char *message,
+ va_list ap)
+{
+ if (!_hb_debug (level, max_level))
+ return;
+
+ fprintf (stderr, "%-10s", what ? what : "");
+
+ if (obj)
+ fprintf (stderr, "(%*p) ", (unsigned int) (2 * sizeof (void *)), obj);
+ else
+ fprintf (stderr, " %*s ", (unsigned int) (2 * sizeof (void *)), "");
+
+ if (indented) {
+#define VBAR "\342\224\202" /* U+2502 BOX DRAWINGS LIGHT VERTICAL */
+#define VRBAR "\342\224\234" /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
+#define DLBAR "\342\225\256" /* U+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT */
+#define ULBAR "\342\225\257" /* U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT */
+#define LBAR "\342\225\264" /* U+2574 BOX DRAWINGS LIGHT LEFT */
+ static const char bars[] =
+ VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
+ VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
+ VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
+ VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
+ VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR;
+ fprintf (stderr, "%2u %s" VRBAR "%s",
+ level,
+ bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars) - 1, (unsigned int) (sizeof (VBAR) - 1) * level),
+ level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR);
+ } else
+ fprintf (stderr, " " VRBAR LBAR);
+
+ _hb_print_func (func);
+
+ if (message)
+ {
+ fprintf (stderr, ": ");
+ vfprintf (stderr, message, ap);
+ }
+
+ fprintf (stderr, "\n");
+}
+template <> inline void
+_hb_debug_msg_va<0> (const char *what HB_UNUSED,
+ const void *obj HB_UNUSED,
+ const char *func HB_UNUSED,
+ bool indented HB_UNUSED,
+ unsigned int level HB_UNUSED,
+ int level_dir HB_UNUSED,
+ const char *message HB_UNUSED,
+ va_list ap HB_UNUSED) {}
+
+template <int max_level> static inline void
+_hb_debug_msg (const char *what,
+ const void *obj,
+ const char *func,
+ bool indented,
+ unsigned int level,
+ int level_dir,
+ const char *message,
+ ...) HB_PRINTF_FUNC(7, 8);
+template <int max_level> static inline void
+_hb_debug_msg (const char *what,
+ const void *obj,
+ const char *func,
+ bool indented,
+ unsigned int level,
+ int level_dir,
+ const char *message,
+ ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ _hb_debug_msg_va<max_level> (what, obj, func, indented, level, level_dir, message, ap);
+ va_end (ap);
+}
+template <> inline void
+_hb_debug_msg<0> (const char *what HB_UNUSED,
+ const void *obj HB_UNUSED,
+ const char *func HB_UNUSED,
+ bool indented HB_UNUSED,
+ unsigned int level HB_UNUSED,
+ int level_dir HB_UNUSED,
+ const char *message HB_UNUSED,
+ ...) HB_PRINTF_FUNC(7, 8);
+template <> inline void
+_hb_debug_msg<0> (const char *what HB_UNUSED,
+ const void *obj HB_UNUSED,
+ const char *func HB_UNUSED,
+ bool indented HB_UNUSED,
+ unsigned int level HB_UNUSED,
+ int level_dir HB_UNUSED,
+ const char *message HB_UNUSED,
+ ...) {}
+
+#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...) _hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr, true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
+#define DEBUG_MSG(WHAT, OBJ, ...) _hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), nullptr, false, 0, 0, __VA_ARGS__)
+#define DEBUG_MSG_FUNC(WHAT, OBJ, ...) _hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
+
+
+/*
+ * Printer
+ */
+
+template <typename T>
+struct hb_printer_t {
+ const char *print (const T&) { return "something"; }
+};
+
+template <>
+struct hb_printer_t<bool> {
+ const char *print (bool v) { return v ? "true" : "false"; }
+};
+
+template <>
+struct hb_printer_t<hb_void_t> {
+ const char *print (hb_void_t) { return ""; }
+};
+
+
+/*
+ * Trace
+ */
+
+template <typename T>
+static inline void _hb_warn_no_return (bool returned)
+{
+ if (unlikely (!returned)) {
+ fprintf (stderr, "OUCH, returned with no call to return_trace(). This is a bug, please report.\n");
+ }
+}
+template <>
+/*static*/ inline void _hb_warn_no_return<hb_void_t> (bool returned HB_UNUSED)
+{}
+
+template <int max_level, typename ret_t>
+struct hb_auto_trace_t
+{
+ explicit inline hb_auto_trace_t (unsigned int *plevel_,
+ const char *what_,
+ const void *obj_,
+ const char *func,
+ const char *message,
+ ...) HB_PRINTF_FUNC(6, 7)
+ : plevel (plevel_), what (what_), obj (obj_), returned (false)
+ {
+ if (plevel) ++*plevel;
+
+ va_list ap;
+ va_start (ap, message);
+ _hb_debug_msg_va<max_level> (what, obj, func, true, plevel ? *plevel : 0, +1, message, ap);
+ va_end (ap);
+ }
+ inline ~hb_auto_trace_t (void)
+ {
+ _hb_warn_no_return<ret_t> (returned);
+ if (!returned) {
+ _hb_debug_msg<max_level> (what, obj, nullptr, true, plevel ? *plevel : 1, -1, " ");
+ }
+ if (plevel) --*plevel;
+ }
+
+ inline ret_t ret (ret_t v, unsigned int line = 0)
+ {
+ if (unlikely (returned)) {
+ fprintf (stderr, "OUCH, double calls to return_trace(). This is a bug, please report.\n");
+ return v;
+ }
+
+ _hb_debug_msg<max_level> (what, obj, nullptr, true, plevel ? *plevel : 1, -1,
+ "return %s (line %d)",
+ hb_printer_t<ret_t>().print (v), line);
+ if (plevel) --*plevel;
+ plevel = nullptr;
+ returned = true;
+ return v;
+ }
+
+ private:
+ unsigned int *plevel;
+ const char *what;
+ const void *obj;
+ bool returned;
+};
+template <typename ret_t> /* Make sure we don't use hb_auto_trace_t when not tracing. */
+struct hb_auto_trace_t<0, ret_t>
+{
+ explicit inline hb_auto_trace_t (unsigned int *plevel_,
+ const char *what_,
+ const void *obj_,
+ const char *func,
+ const char *message,
+ ...) HB_PRINTF_FUNC(6, 7) {}
+
+ inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
+};
+
+/* For disabled tracing; optimize out everything.
+ * https://github.com/harfbuzz/harfbuzz/pull/605 */
+template <typename ret_t>
+struct hb_no_trace_t {
+ inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
+};
+
+#define return_trace(RET) return trace.ret (RET, __LINE__)
+
+
+/*
+ * Instances.
+ */
+
+#ifndef HB_DEBUG_ARABIC
+#define HB_DEBUG_ARABIC (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_BLOB
+#define HB_DEBUG_BLOB (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_CORETEXT
+#define HB_DEBUG_CORETEXT (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_DIRECTWRITE
+#define HB_DEBUG_DIRECTWRITE (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_FT
+#define HB_DEBUG_FT (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_GET_COVERAGE
+#define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_OBJECT
+#define HB_DEBUG_OBJECT (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_SHAPE_PLAN
+#define HB_DEBUG_SHAPE_PLAN (HB_DEBUG+0)
+#endif
+
+#ifndef HB_DEBUG_UNISCRIBE
+#define HB_DEBUG_UNISCRIBE (HB_DEBUG+0)
+#endif
+
+/*
+ * With tracing.
+ */
+
+#ifndef HB_DEBUG_APPLY
+#define HB_DEBUG_APPLY (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_APPLY
+#define TRACE_APPLY(this) \
+ hb_auto_trace_t<HB_DEBUG_APPLY, bool> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ "idx %d gid %u lookup %d", \
+ c->buffer->idx, c->buffer->cur().codepoint, (int) c->lookup_index)
+#else
+#define TRACE_APPLY(this) hb_no_trace_t<bool> trace
+#endif
+
+#ifndef HB_DEBUG_CLOSURE
+#define HB_DEBUG_CLOSURE (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_CLOSURE
+#define TRACE_CLOSURE(this) \
+ hb_auto_trace_t<HB_DEBUG_CLOSURE, hb_void_t> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ " ")
+#else
+#define TRACE_CLOSURE(this) hb_no_trace_t<hb_void_t> trace HB_UNUSED
+#endif
+
+#ifndef HB_DEBUG_COLLECT_GLYPHS
+#define HB_DEBUG_COLLECT_GLYPHS (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_COLLECT_GLYPHS
+#define TRACE_COLLECT_GLYPHS(this) \
+ hb_auto_trace_t<HB_DEBUG_COLLECT_GLYPHS, hb_void_t> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ " ")
+#else
+#define TRACE_COLLECT_GLYPHS(this) hb_no_trace_t<hb_void_t> trace HB_UNUSED
+#endif
+
+#ifndef HB_DEBUG_SANITIZE
+#define HB_DEBUG_SANITIZE (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_SANITIZE
+#define TRACE_SANITIZE(this) \
+ hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ " ");
+#else
+#define TRACE_SANITIZE(this) hb_no_trace_t<bool> trace
+#endif
+
+#ifndef HB_DEBUG_SERIALIZE
+#define HB_DEBUG_SERIALIZE (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_SERIALIZE
+#define TRACE_SERIALIZE(this) \
+ hb_auto_trace_t<HB_DEBUG_SERIALIZE, bool> trace \
+ (&c->debug_depth, "SERIALIZE", c, HB_FUNC, \
+ " ");
+#else
+#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
+#endif
+
+#ifndef HB_DEBUG_WOULD_APPLY
+#define HB_DEBUG_WOULD_APPLY (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_WOULD_APPLY
+#define TRACE_WOULD_APPLY(this) \
+ hb_auto_trace_t<HB_DEBUG_WOULD_APPLY, bool> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ "%d glyphs", c->len);
+#else
+#define TRACE_WOULD_APPLY(this) hb_no_trace_t<bool> trace
+#endif
+
+#ifndef HB_DEBUG_DISPATCH
+#define HB_DEBUG_DISPATCH ( \
+ HB_DEBUG_APPLY + \
+ HB_DEBUG_CLOSURE + \
+ HB_DEBUG_COLLECT_GLYPHS + \
+ HB_DEBUG_SANITIZE + \
+ HB_DEBUG_SERIALIZE + \
+ HB_DEBUG_WOULD_APPLY + \
+ 0)
+#endif
+#if HB_DEBUG_DISPATCH
+#define TRACE_DISPATCH(this, format) \
+ hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ "format %d", (int) format);
+#else
+#define TRACE_DISPATCH(this, format) hb_no_trace_t<typename context_t::return_t> trace
+#endif
+
+
+#endif /* HB_DEBUG_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-deprecated.h b/src/3rdparty/harfbuzz-ng/src/hb-deprecated.h
index 0398dfae60..eac7efb42f 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-deprecated.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-deprecated.h
@@ -34,6 +34,7 @@
#include "hb-common.h"
#include "hb-unicode.h"
#include "hb-font.h"
+#include "hb-set.h"
HB_BEGIN_DECLS
@@ -54,6 +55,9 @@ hb_font_funcs_set_glyph_func (hb_font_funcs_t *ffuncs,
hb_font_get_glyph_func_t func,
void *user_data, hb_destroy_func_t destroy);
+HB_EXTERN void
+hb_set_invert (hb_set_t *set);
+
#endif
HB_END_DECLS
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-dsalgs.hh b/src/3rdparty/harfbuzz-ng/src/hb-dsalgs.hh
new file mode 100644
index 0000000000..4e8f0431c6
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-dsalgs.hh
@@ -0,0 +1,167 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_DSALGS_HH
+#define HB_DSALGS_HH
+
+#include "hb-private.hh"
+
+#if defined(__ghs)
+// GHS compiler doesn't support the __restrict keyword
+#define __restrict
+#endif
+
+
+
+static inline void *
+hb_bsearch_r (const void *key, const void *base,
+ size_t nmemb, size_t size,
+ int (*compar)(const void *_key, const void *_item, void *_arg),
+ void *arg)
+{
+ int min = 0, max = (int) nmemb - 1;
+ while (min <= max)
+ {
+ int mid = (min + max) / 2;
+ const void *p = (const void *) (((const char *) base) + (mid * size));
+ int c = compar (key, p, arg);
+ if (c < 0)
+ max = mid - 1;
+ else if (c > 0)
+ min = mid + 1;
+ else
+ return (void *) p;
+ }
+ return NULL;
+}
+
+
+
+/* From https://github.com/noporpoise/sort_r */
+
+/* Isaac Turner 29 April 2014 Public Domain */
+
+/*
+
+hb_sort_r function to be exported.
+
+Parameters:
+ base is the array to be sorted
+ nel is the number of elements in the array
+ width is the size in bytes of each element of the array
+ compar is the comparison function
+ arg is a pointer to be passed to the comparison function
+
+void hb_sort_r(void *base, size_t nel, size_t width,
+ int (*compar)(const void *_a, const void *_b, void *_arg),
+ void *arg);
+*/
+
+
+/* swap a, b iff a>b */
+/* __restrict is same as restrict but better support on old machines */
+static int sort_r_cmpswap(char *__restrict a, char *__restrict b, size_t w,
+ int (*compar)(const void *_a, const void *_b,
+ void *_arg),
+ void *arg)
+{
+ char tmp, *end = a+w;
+ if(compar(a, b, arg) > 0) {
+ for(; a < end; a++, b++) { tmp = *a; *a = *b; *b = tmp; }
+ return 1;
+ }
+ return 0;
+}
+
+/* Note: quicksort is not stable, equivalent values may be swapped */
+static inline void sort_r_simple(void *base, size_t nel, size_t w,
+ int (*compar)(const void *_a, const void *_b,
+ void *_arg),
+ void *arg)
+{
+ char *b = (char *)base, *end = b + nel*w;
+ if(nel < 7) {
+ /* Insertion sort for arbitrarily small inputs */
+ char *pi, *pj;
+ for(pi = b+w; pi < end; pi += w) {
+ for(pj = pi; pj > b && sort_r_cmpswap(pj-w,pj,w,compar,arg); pj -= w) {}
+ }
+ }
+ else
+ {
+ /* nel > 6; Quicksort */
+
+ /* Use median of first, middle and last items as pivot */
+ char *x, *y, *xend, ch;
+ char *pl, *pr;
+ char *last = b+w*(nel-1), *tmp;
+ char *l[3];
+ l[0] = b;
+ l[1] = b+w*(nel/2);
+ l[2] = last;
+
+ if(compar(l[0],l[1],arg) > 0) { tmp=l[0]; l[0]=l[1]; l[1]=tmp; }
+ if(compar(l[1],l[2],arg) > 0) {
+ tmp=l[1]; l[1]=l[2]; l[2]=tmp; /* swap(l[1],l[2]) */
+ if(compar(l[0],l[1],arg) > 0) { tmp=l[0]; l[0]=l[1]; l[1]=tmp; }
+ }
+
+ /* swap l[id], l[2] to put pivot as last element */
+ for(x = l[1], y = last, xend = x+w; x<xend; x++, y++) {
+ ch = *x; *x = *y; *y = ch;
+ }
+
+ pl = b;
+ pr = last;
+
+ while(pl < pr) {
+ for(; pl < pr; pl += w) {
+ if(sort_r_cmpswap(pl, pr, w, compar, arg)) {
+ pr -= w; /* pivot now at pl */
+ break;
+ }
+ }
+ for(; pl < pr; pr -= w) {
+ if(sort_r_cmpswap(pl, pr, w, compar, arg)) {
+ pl += w; /* pivot now at pr */
+ break;
+ }
+ }
+ }
+
+ sort_r_simple(b, (pl-b)/w, w, compar, arg);
+ sort_r_simple(pl+w, (end-(pl+w))/w, w, compar, arg);
+ }
+}
+
+static inline void hb_sort_r(void *base, size_t nel, size_t width,
+ int (*compar)(const void *_a, const void *_b, void *_arg),
+ void *arg)
+{
+ sort_r_simple(base, nel, width, compar, arg);
+}
+
+#endif /* HB_DSALGS_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-face-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-face-private.hh
index c4266fff4f..43e7b1cb3f 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-face-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-face-private.hh
@@ -50,12 +50,16 @@ struct hb_face_t {
void *user_data;
hb_destroy_func_t destroy;
- unsigned int index;
- mutable unsigned int upem;
- mutable unsigned int num_glyphs;
+ unsigned int index; /* Face index in a collection, zero-based. */
+ mutable unsigned int upem; /* Units-per-EM. */
+ mutable unsigned int num_glyphs; /* Number of glyphs. */
- struct hb_shaper_data_t shaper_data;
+ struct hb_shaper_data_t shaper_data; /* Various shaper data. */
+ /* Various non-shaping data. */
+ /* ... */
+
+ /* Cache */
struct plan_node_t {
hb_shape_plan_t *shape_plan;
plan_node_t *next;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-face.cc b/src/3rdparty/harfbuzz-ng/src/hb-face.cc
index 6b563bc8f1..26fddbe529 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-face.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-face.cc
@@ -28,15 +28,11 @@
#include "hb-private.hh"
-#include "hb-ot-layout-private.hh"
-
-#include "hb-font-private.hh"
+#include "hb-face-private.hh"
#include "hb-open-file-private.hh"
#include "hb-ot-head-table.hh"
#include "hb-ot-maxp-table.hh"
-#include <string.h>
-
/*
* hb_face_t
@@ -47,9 +43,9 @@ const hb_face_t _hb_face_nil = {
true, /* immutable */
- NULL, /* reference_table_func */
- NULL, /* user_data */
- NULL, /* destroy */
+ nullptr, /* reference_table_func */
+ nullptr, /* user_data */
+ nullptr, /* destroy */
0, /* index */
1000, /* upem */
@@ -61,7 +57,7 @@ const hb_face_t _hb_face_nil = {
#undef HB_SHAPER_IMPLEMENT
},
- NULL, /* shape_plans */
+ nullptr, /* shape_plans */
};
@@ -113,7 +109,7 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
closure = (hb_face_for_data_closure_t *) calloc (1, sizeof (hb_face_for_data_closure_t));
if (unlikely (!closure))
- return NULL;
+ return nullptr;
closure->blob = blob;
closure->index = index;
@@ -122,8 +118,10 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
}
static void
-_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
+_hb_face_for_data_closure_destroy (void *data)
{
+ hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data;
+
hb_blob_destroy (closure->blob);
free (closure);
}
@@ -173,9 +171,9 @@ hb_face_create (hb_blob_t *blob,
face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
closure,
- (hb_destroy_func_t) _hb_face_for_data_closure_destroy);
+ _hb_face_for_data_closure_destroy);
- hb_face_set_index (face, index);
+ face->index = index;
return face;
}
@@ -476,4 +474,33 @@ hb_face_t::load_num_glyphs (void) const
hb_blob_destroy (maxp_blob);
}
+/**
+ * hb_face_get_table_tags:
+ * @face: a face.
+ *
+ * Retrieves table tags for a face, if possible.
+ *
+ * Return value: total number of tables, or 0 if not possible to list.
+ *
+ * Since: 1.6.0
+ **/
+unsigned int
+hb_face_get_table_tags (hb_face_t *face,
+ unsigned int start_offset,
+ unsigned int *table_count, /* IN/OUT */
+ hb_tag_t *table_tags /* OUT */)
+{
+ if (face->destroy != _hb_face_for_data_closure_destroy)
+ {
+ if (table_count)
+ *table_count = 0;
+ return 0;
+ }
+
+ hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) face->user_data;
+ const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
+ const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
+
+ return ot_face.get_table_tags (start_offset, table_count, table_tags);
+}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-face.h b/src/3rdparty/harfbuzz-ng/src/hb-face.h
index 91237b7085..9842d52b65 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-face.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-face.h
@@ -111,6 +111,11 @@ hb_face_set_glyph_count (hb_face_t *face,
HB_EXTERN unsigned int
hb_face_get_glyph_count (hb_face_t *face);
+HB_EXTERN unsigned int
+hb_face_get_table_tags (hb_face_t *face,
+ unsigned int start_offset,
+ unsigned int *table_count, /* IN/OUT */
+ hb_tag_t *table_tags /* OUT */);
HB_END_DECLS
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc b/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc
index ac6d4b00f5..3f09c3f530 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc
@@ -28,6 +28,10 @@
#include "hb-shaper-impl-private.hh"
+HB_SHAPER_DATA_ENSURE_DEFINE(fallback, face)
+HB_SHAPER_DATA_ENSURE_DEFINE(fallback, font)
+
+
/*
* shaper face data
*/
@@ -125,7 +129,7 @@ _hb_fallback_shape (hb_shape_plan_t *shape_plan HB_UNUSED,
pos[i].y_advance = 0;
continue;
}
- font->get_nominal_glyph (info[i].codepoint, &info[i].codepoint);
+ (void) font->get_nominal_glyph (info[i].codepoint, &info[i].codepoint);
font->get_glyph_advance_for_direction (info[i].codepoint,
direction,
&pos[i].x_advance,
@@ -139,5 +143,7 @@ _hb_fallback_shape (hb_shape_plan_t *shape_plan HB_UNUSED,
if (HB_DIRECTION_IS_BACKWARD (direction))
hb_buffer_reverse (buffer);
+ buffer->safe_to_break_all ();
+
return true;
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh
index 53671d78d2..d2801fb86e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh
@@ -108,6 +108,8 @@ struct hb_font_t {
unsigned int x_ppem;
unsigned int y_ppem;
+ float ptem;
+
/* Font variation coordinates. */
unsigned int num_coords;
int *coords;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-font.cc b/src/3rdparty/harfbuzz-ng/src/hb-font.cc
index 2935c4b4fd..f3534b686b 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-font.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-font.cc
@@ -28,14 +28,7 @@
#include "hb-private.hh"
-#include "hb-ot-layout-private.hh"
-
#include "hb-font-private.hh"
-#include "hb-open-file-private.hh"
-#include "hb-ot-head-table.hh"
-#include "hb-ot-maxp-table.hh"
-
-#include <string.h>
/*
@@ -43,7 +36,7 @@
*/
static hb_bool_t
-hb_font_get_font_h_extents_nil (hb_font_t *font,
+hb_font_get_font_h_extents_nil (hb_font_t *font HB_UNUSED,
void *font_data HB_UNUSED,
hb_font_extents_t *metrics,
void *user_data HB_UNUSED)
@@ -67,7 +60,7 @@ hb_font_get_font_h_extents_parent (hb_font_t *font,
}
static hb_bool_t
-hb_font_get_font_v_extents_nil (hb_font_t *font,
+hb_font_get_font_v_extents_nil (hb_font_t *font HB_UNUSED,
void *font_data HB_UNUSED,
hb_font_extents_t *metrics,
void *user_data HB_UNUSED)
@@ -354,12 +347,12 @@ static const hb_font_funcs_t _hb_font_funcs_nil = {
true, /* immutable */
{
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
+#define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
},
{
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
+#define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
},
@@ -377,12 +370,12 @@ static const hb_font_funcs_t _hb_font_funcs_parent = {
true, /* immutable */
{
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
+#define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
},
{
-#define HB_FONT_FUNC_IMPLEMENT(name) NULL,
+#define HB_FONT_FUNC_IMPLEMENT(name) nullptr,
HB_FONT_FUNCS_IMPLEMENT_CALLBACKS
#undef HB_FONT_FUNC_IMPLEMENT
},
@@ -570,8 +563,8 @@ hb_font_funcs_set_##name##_func (hb_font_funcs_t *ffuncs, \
ffuncs->destroy.name = destroy; \
} else { \
ffuncs->get.f.name = hb_font_get_##name##_parent; \
- ffuncs->user_data.name = NULL; \
- ffuncs->destroy.name = NULL; \
+ ffuncs->user_data.name = nullptr; \
+ ffuncs->destroy.name = nullptr; \
} \
}
@@ -1164,8 +1157,20 @@ hb_font_create_sub_font (hb_font_t *parent)
font->y_scale = parent->y_scale;
font->x_ppem = parent->x_ppem;
font->y_ppem = parent->y_ppem;
+ font->ptem = parent->ptem;
- /* TODO: copy variation coordinates. */
+ font->num_coords = parent->num_coords;
+ if (!font->num_coords)
+ font->coords = nullptr;
+ else
+ {
+ unsigned int size = parent->num_coords * sizeof (parent->coords[0]);
+ font->coords = (int *) malloc (size);
+ if (unlikely (!font->coords))
+ font->num_coords = 0;
+ else
+ memcpy (font->coords, parent->coords, size);
+ }
return font;
}
@@ -1187,7 +1192,7 @@ hb_font_get_empty (void)
true, /* immutable */
- NULL, /* parent */
+ nullptr, /* parent */
const_cast<hb_face_t *> (&_hb_face_nil),
1000, /* x_scale */
@@ -1195,13 +1200,14 @@ hb_font_get_empty (void)
0, /* x_ppem */
0, /* y_ppem */
+ 0, /* ptem */
0, /* num_coords */
- NULL, /* coords */
+ nullptr, /* coords */
const_cast<hb_font_funcs_t *> (&_hb_font_funcs_nil), /* klass */
- NULL, /* user_data */
- NULL, /* destroy */
+ nullptr, /* user_data */
+ nullptr, /* destroy */
{
#define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
@@ -1379,6 +1385,32 @@ hb_font_get_parent (hb_font_t *font)
}
/**
+ * hb_font_set_face:
+ * @font: a font.
+ * @face: new face.
+ *
+ * Sets font-face of @font.
+ *
+ * Since: 1.4.3
+ **/
+void
+hb_font_set_face (hb_font_t *font,
+ hb_face_t *face)
+{
+ if (font->immutable)
+ return;
+
+ if (unlikely (!face))
+ face = hb_face_get_empty ();
+
+ hb_face_t *old = font->face;
+
+ font->face = hb_face_reference (face);
+
+ hb_face_destroy (old);
+}
+
+/**
* hb_font_get_face:
* @font: a font.
*
@@ -1543,30 +1575,146 @@ hb_font_get_ppem (hb_font_t *font,
if (y_ppem) *y_ppem = font->y_ppem;
}
+/**
+ * hb_font_set_ptem:
+ * @font: a font.
+ * @ptem:
+ *
+ * Sets "point size" of the font.
+ *
+ * Since: 1.6.0
+ **/
+void
+hb_font_set_ptem (hb_font_t *font, float ptem)
+{
+ if (font->immutable)
+ return;
+
+ font->ptem = ptem;
+}
+
+/**
+ * hb_font_get_ptem:
+ * @font: a font.
+ *
+ * Gets the "point size" of the font. A value of 0 means unset.
+ *
+ * Return value: Point size.
+ *
+ * Since: 0.9.2
+ **/
+float
+hb_font_get_ptem (hb_font_t *font)
+{
+ return font->ptem;
+}
+/*
+ * Variations
+ */
+
+static void
+_hb_font_adopt_var_coords_normalized (hb_font_t *font,
+ int *coords, /* 2.14 normalized */
+ unsigned int coords_length)
+{
+ free (font->coords);
+
+ font->coords = coords;
+ font->num_coords = coords_length;
+}
+
+/**
+ * hb_font_set_variations:
+ *
+ * Since: 1.4.2
+ */
+void
+hb_font_set_variations (hb_font_t *font,
+ const hb_variation_t *variations,
+ unsigned int variations_length)
+{
+ if (font->immutable)
+ return;
+
+ if (!variations_length)
+ {
+ hb_font_set_var_coords_normalized (font, nullptr, 0);
+ return;
+ }
+
+ unsigned int coords_length = hb_ot_var_get_axis_count (font->face);
+
+ int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr;
+ if (unlikely (coords_length && !normalized))
+ return;
+
+ hb_ot_var_normalize_variations (font->face,
+ variations, variations_length,
+ normalized, coords_length);
+ _hb_font_adopt_var_coords_normalized (font, normalized, coords_length);
+}
+
+/**
+ * hb_font_set_var_coords_design:
+ *
+ * Since: 1.4.2
+ */
+void
+hb_font_set_var_coords_design (hb_font_t *font,
+ const float *coords,
+ unsigned int coords_length)
+{
+ if (font->immutable)
+ return;
+
+ int *normalized = coords_length ? (int *) calloc (coords_length, sizeof (int)) : nullptr;
+ if (unlikely (coords_length && !normalized))
+ return;
+
+ hb_ot_var_normalize_coords (font->face, coords_length, coords, normalized);
+ _hb_font_adopt_var_coords_normalized (font, normalized, coords_length);
+}
+
+/**
+ * hb_font_set_var_coords_normalized:
+ *
+ * Since: 1.4.2
+ */
void
hb_font_set_var_coords_normalized (hb_font_t *font,
- int *coords, /* XXX 2.14 normalized */
+ const int *coords, /* 2.14 normalized */
unsigned int coords_length)
{
if (font->immutable)
return;
- /* Skip tail zero entries. */
- while (coords_length && !coords[coords_length - 1])
- coords_length--;
-
- int *copy = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : NULL;
+ int *copy = coords_length ? (int *) calloc (coords_length, sizeof (coords[0])) : nullptr;
if (unlikely (coords_length && !copy))
return;
- free (font->coords);
-
if (coords_length)
memcpy (copy, coords, coords_length * sizeof (coords[0]));
- font->coords = copy;
- font->num_coords = coords_length;
+ _hb_font_adopt_var_coords_normalized (font, copy, coords_length);
+}
+
+/**
+ * hb_font_get_var_coords_normalized:
+ *
+ * Return value is valid as long as variation coordinates of the font
+ * are not modified.
+ *
+ * Since: 1.4.2
+ */
+const int *
+hb_font_get_var_coords_normalized (hb_font_t *font,
+ unsigned int *length)
+{
+ if (length)
+ *length = font->num_coords;
+
+ return font->coords;
}
@@ -1601,7 +1749,7 @@ trampoline_create (FuncType func,
trampoline_t *trampoline = (trampoline_t *) calloc (1, sizeof (trampoline_t));
if (unlikely (!trampoline))
- return NULL;
+ return nullptr;
trampoline->closure.user_data = user_data;
trampoline->closure.destroy = destroy;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-font.h b/src/3rdparty/harfbuzz-ng/src/hb-font.h
index 8813286726..540cdcab95 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-font.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-font.h
@@ -563,6 +563,10 @@ hb_font_set_parent (hb_font_t *font,
HB_EXTERN hb_font_t *
hb_font_get_parent (hb_font_t *font);
+HB_EXTERN void
+hb_font_set_face (hb_font_t *font,
+ hb_face_t *face);
+
HB_EXTERN hb_face_t *
hb_font_get_face (hb_font_t *font);
@@ -603,12 +607,35 @@ hb_font_get_ppem (hb_font_t *font,
unsigned int *x_ppem,
unsigned int *y_ppem);
+/*
+ * Point size per EM. Used for optical-sizing in CoreText.
+ * A value of zero means "not set".
+ */
+HB_EXTERN void
+hb_font_set_ptem (hb_font_t *font, float ptem);
+
+HB_EXTERN float
+hb_font_get_ptem (hb_font_t *font);
+
+HB_EXTERN void
+hb_font_set_variations (hb_font_t *font,
+ const hb_variation_t *variations,
+ unsigned int variations_length);
+
+HB_EXTERN void
+hb_font_set_var_coords_design (hb_font_t *font,
+ const float *coords,
+ unsigned int coords_length);
HB_EXTERN void
hb_font_set_var_coords_normalized (hb_font_t *font,
- int *coords, /* XXX 2.14 normalized */
+ const int *coords, /* 2.14 normalized */
unsigned int coords_length);
+HB_EXTERN const int *
+hb_font_get_var_coords_normalized (hb_font_t *font,
+ unsigned int *length);
+
HB_END_DECLS
#endif /* HB_FONT_H */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-mutex-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-mutex-private.hh
index ed2703571c..49ed10e08a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-mutex-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-mutex-private.hh
@@ -68,7 +68,7 @@ typedef CRITICAL_SECTION hb_mutex_impl_t;
#include <pthread.h>
typedef pthread_mutex_t hb_mutex_impl_t;
#define HB_MUTEX_IMPL_INIT PTHREAD_MUTEX_INITIALIZER
-#define hb_mutex_impl_init(M) pthread_mutex_init (M, NULL)
+#define hb_mutex_impl_init(M) pthread_mutex_init (M, nullptr)
#define hb_mutex_impl_lock(M) pthread_mutex_lock (M)
#define hb_mutex_impl_unlock(M) pthread_mutex_unlock (M)
#define hb_mutex_impl_finish(M) pthread_mutex_destroy (M)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-object-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-object-private.hh
index 6b73ff92d0..baa1f8f05c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-object-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-object-private.hh
@@ -33,18 +33,12 @@
#define HB_OBJECT_PRIVATE_HH
#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-atomic-private.hh"
#include "hb-mutex-private.hh"
-/* Debug */
-
-#ifndef HB_DEBUG_OBJECT
-#define HB_DEBUG_OBJECT (HB_DEBUG+0)
-#endif
-
-
/* reference_count */
#define HB_REFERENCE_COUNT_INERT_VALUE -1
@@ -193,7 +187,7 @@ static inline void *hb_object_get_user_data (Type *obj,
hb_user_data_key_t *key)
{
if (unlikely (!obj || hb_object_is_inert (obj)))
- return NULL;
+ return nullptr;
assert (hb_object_is_valid (obj));
return obj->header.user_data.get (key);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-open-file-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-open-file-private.hh
index 5357ddcf5b..644e0b40f6 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-open-file-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-open-file-private.hh
@@ -53,6 +53,9 @@ struct TTCHeader;
typedef struct TableRecord
{
+ int cmp (Tag t) const
+ { return t.cmp (tag); }
+
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -61,9 +64,9 @@ typedef struct TableRecord
Tag tag; /* 4-byte identifier. */
CheckSum checkSum; /* CheckSum for this table. */
- ULONG offset; /* Offset from beginning of TrueType font
+ UINT32 offset; /* Offset from beginning of TrueType font
* file. */
- ULONG length; /* Length of this table. */
+ UINT32 length; /* Length of this table. */
public:
DEFINE_SIZE_STATIC (16);
} OpenTypeTable;
@@ -73,27 +76,39 @@ typedef struct OffsetTable
friend struct OpenTypeFontFile;
inline unsigned int get_table_count (void) const
- { return numTables; }
+ { return tables.len; }
inline const TableRecord& get_table (unsigned int i) const
{
- if (unlikely (i >= numTables)) return Null(TableRecord);
return tables[i];
}
+ inline unsigned int get_table_tags (unsigned int start_offset,
+ unsigned int *table_count, /* IN/OUT */
+ hb_tag_t *table_tags /* OUT */) const
+ {
+ if (table_count)
+ {
+ if (start_offset >= tables.len)
+ *table_count = 0;
+ else
+ *table_count = MIN<unsigned int> (*table_count, tables.len - start_offset);
+
+ const TableRecord *sub_tables = tables.array + start_offset;
+ unsigned int count = *table_count;
+ for (unsigned int i = 0; i < count; i++)
+ table_tags[i] = sub_tables[i].tag;
+ }
+ return tables.len;
+ }
inline bool find_table_index (hb_tag_t tag, unsigned int *table_index) const
{
Tag t;
t.set (tag);
- unsigned int count = numTables;
- for (unsigned int i = 0; i < count; i++)
- {
- if (t == tables[i].tag)
- {
- if (table_index) *table_index = i;
- return true;
- }
- }
- if (table_index) *table_index = Index::NOT_FOUND_INDEX;
- return false;
+ /* Linear-search for small tables to work around fonts with unsorted
+ * table list. */
+ int i = tables.len < 64 ? tables.lsearch (t) : tables.bsearch (t);
+ if (table_index)
+ *table_index = i == -1 ? Index::NOT_FOUND_INDEX : (unsigned int) i;
+ return i != -1;
}
inline const TableRecord& get_table_by_tag (hb_tag_t tag) const
{
@@ -106,16 +121,13 @@ typedef struct OffsetTable
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) && c->check_array (tables, TableRecord::static_size, numTables));
+ return_trace (c->check_struct (this) && tables.sanitize (c));
}
protected:
Tag sfnt_version; /* '\0\001\0\00' if TrueType / 'OTTO' if CFF */
- USHORT numTables; /* Number of tables. */
- USHORT searchRangeZ; /* (Maximum power of 2 <= numTables) x 16 */
- USHORT entrySelectorZ; /* Log2(maximum power of 2 <= numTables). */
- USHORT rangeShiftZ; /* NumTables x 16-searchRange. */
- TableRecord tables[VAR]; /* TableRecord entries. numTables items */
+ BinSearchArrayOf<TableRecord>
+ tables;
public:
DEFINE_SIZE_ARRAY (12, tables);
} OpenTypeFontFace;
@@ -142,7 +154,7 @@ struct TTCHeaderVersion1
Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */
FixedVersion<>version; /* Version of the TTC Header (1.0),
* 0x00010000u */
- ArrayOf<OffsetTo<OffsetTable, ULONG>, ULONG>
+ ArrayOf<LOffsetTo<OffsetTable>, UINT32>
table; /* Array of offsets to the OffsetTable for each font
* from the beginning of the file */
public:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh
index 2cc1fb20d2..2f4e1b9e9e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh
@@ -30,6 +30,8 @@
#define HB_OPEN_TYPE_PRIVATE_HH
#include "hb-private.hh"
+#include "hb-debug.hh"
+#include "hb-face-private.hh"
namespace OT {
@@ -84,7 +86,7 @@ static inline Type& StructAfter(TObject &X)
#define _DEFINE_INSTANCE_ASSERTION1(_line, _assertion) \
inline void _instance_assertion_on_line_##_line (void) const \
{ \
- ASSERT_STATIC (_assertion); \
+ static_assert ((_assertion), ""); \
ASSERT_INSTANCE_POD (*this); /* Make sure it's POD. */ \
}
# define _DEFINE_INSTANCE_ASSERTION0(_line, _assertion) _DEFINE_INSTANCE_ASSERTION1 (_line, _assertion)
@@ -129,14 +131,16 @@ static inline Type& StructAfter(TObject &X)
*/
/* Global nul-content Null pool. Enlarge as necessary. */
-/* TODO This really should be a extern HB_INTERNAL and defined somewhere... */
-static const void *_NullPool[(256+8) / sizeof (void *)];
+
+#define HB_NULL_POOL_SIZE 264
+static_assert (HB_NULL_POOL_SIZE % sizeof (void *) == 0, "Align HB_NULL_POOL_SIZE.");
+extern HB_INTERNAL const void * const _hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)];
/* Generic nul-content Null objects. */
template <typename Type>
static inline const Type& Null (void) {
- ASSERT_STATIC (sizeof (Type) <= sizeof (_NullPool));
- return *CastP<Type> (_NullPool);
+ static_assert (sizeof (Type) <= HB_NULL_POOL_SIZE, "Increase HB_NULL_POOL_SIZE.");
+ return *CastP<Type> (_hb_NullPool);
}
/* Specializaiton for arbitrary-content arbitrary-sized Null objects. */
@@ -146,7 +150,7 @@ template <> \
/*static*/ inline const Type& Null<Type> (void) { \
return *CastP<Type> (_Null##Type); \
} /* The following line really exists such that we end in a place needing semicolon */ \
-ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
+static_assert (Type::min_size + 1 <= sizeof (_Null##Type), "Null pool too small. Enlarge.")
/* Accessor macro. */
#define Null(Type) Null<Type>()
@@ -171,16 +175,6 @@ struct hb_dispatch_context_t
* Sanitize
*/
-#ifndef HB_DEBUG_SANITIZE
-#define HB_DEBUG_SANITIZE (HB_DEBUG+0)
-#endif
-
-
-#define TRACE_SANITIZE(this) \
- hb_auto_trace_t<HB_DEBUG_SANITIZE, bool> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "");
-
/* This limits sanitizing time on really broken fonts. */
#ifndef HB_SANITIZE_MAX_EDITS
#define HB_SANITIZE_MAX_EDITS 32
@@ -191,9 +185,9 @@ struct hb_sanitize_context_t :
{
inline hb_sanitize_context_t (void) :
debug_depth (0),
- start (NULL), end (NULL),
+ start (nullptr), end (nullptr),
writable (false), edit_count (0),
- blob (NULL) {}
+ blob (nullptr) {}
inline const char *get_name (void) { return "SANITIZE"; }
template <typename T, typename F>
@@ -213,7 +207,7 @@ struct hb_sanitize_context_t :
inline void start_processing (void)
{
- this->start = hb_blob_get_data (this->blob, NULL);
+ this->start = hb_blob_get_data (this->blob, nullptr);
this->end = this->start + hb_blob_get_length (this->blob);
assert (this->start <= this->end); /* Must not overflow. */
this->edit_count = 0;
@@ -232,8 +226,8 @@ struct hb_sanitize_context_t :
this->start, this->end, this->edit_count);
hb_blob_destroy (this->blob);
- this->blob = NULL;
- this->start = this->end = NULL;
+ this->blob = nullptr;
+ this->start = this->end = nullptr;
}
inline bool check_range (const void *base, unsigned int len) const
@@ -348,7 +342,7 @@ struct Sanitizer
} else {
unsigned int edit_count = c->edit_count;
if (edit_count && !c->writable) {
- c->start = hb_blob_get_data_writable (blob, NULL);
+ c->start = hb_blob_get_data_writable (blob, nullptr);
c->end = c->start + hb_blob_get_length (blob);
if (c->start) {
@@ -373,7 +367,7 @@ struct Sanitizer
static const Type* lock_instance (hb_blob_t *blob) {
hb_blob_make_immutable (blob);
- const char *base = hb_blob_get_data (blob, NULL);
+ const char *base = hb_blob_get_data (blob, nullptr);
return unlikely (!base) ? &Null(Type) : CastP<Type> (base);
}
};
@@ -384,16 +378,6 @@ struct Sanitizer
* Serialize
*/
-#ifndef HB_DEBUG_SERIALIZE
-#define HB_DEBUG_SERIALIZE (HB_DEBUG+0)
-#endif
-
-
-#define TRACE_SERIALIZE(this) \
- hb_auto_trace_t<HB_DEBUG_SERIALIZE, bool> trace \
- (&c->debug_depth, "SERIALIZE", c, HB_FUNC, \
- "");
-
struct hb_serialize_context_t
{
@@ -444,7 +428,7 @@ struct hb_serialize_context_t
{
if (unlikely (this->ran_out_of_room || this->end - this->head < ptrdiff_t (size))) {
this->ran_out_of_room = true;
- return NULL;
+ return nullptr;
}
memset (this->head, 0, size);
char *ret = this->head;
@@ -470,7 +454,7 @@ struct hb_serialize_context_t
{
unsigned int size = obj.get_size ();
Type *ret = this->allocate_size<Type> (size);
- if (unlikely (!ret)) return NULL;
+ if (unlikely (!ret)) return nullptr;
memcpy (ret, obj, size);
return ret;
}
@@ -480,7 +464,7 @@ struct hb_serialize_context_t
{
unsigned int size = obj.min_size;
assert (this->start <= (char *) &obj && (char *) &obj <= this->head && (char *) &obj + size >= this->head);
- if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return NULL;
+ if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return nullptr;
return reinterpret_cast<Type *> (&obj);
}
@@ -489,7 +473,7 @@ struct hb_serialize_context_t
{
unsigned int size = obj.get_size ();
assert (this->start < (char *) &obj && (char *) &obj <= this->head && (char *) &obj + size >= this->head);
- if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return NULL;
+ if (unlikely (!this->allocate_size<Type> (((char *) &obj) + size - this->head))) return nullptr;
return reinterpret_cast<Type *> (&obj);
}
@@ -631,10 +615,11 @@ struct IntType
inline bool operator == (const IntType<Type,Size> &o) const { return (Type) v == (Type) o.v; }
inline bool operator != (const IntType<Type,Size> &o) const { return !(*this == o); }
static inline int cmp (const IntType<Type,Size> *a, const IntType<Type,Size> *b) { return b->cmp (*a); }
- inline int cmp (Type a) const
+ template <typename Type2>
+ inline int cmp (Type2 a) const
{
Type b = v;
- if (sizeof (Type) < sizeof (int))
+ if (sizeof (Type) < sizeof (int) && sizeof (Type2) < sizeof (int))
return (int) a - (int) b;
else
return a < b ? -1 : a == b ? 0 : +1;
@@ -650,23 +635,22 @@ struct IntType
DEFINE_SIZE_STATIC (Size);
};
-typedef IntType<int8_t , 1> CHAR; /* 8-bit signed integer. */
-typedef IntType<uint8_t , 1> BYTE; /* 8-bit unsigned integer. */
-typedef IntType<int8_t , 1> INT8; /* 8-bit signed integer. */
-typedef IntType<uint16_t, 2> USHORT; /* 16-bit unsigned integer. */
-typedef IntType<int16_t, 2> SHORT; /* 16-bit signed integer. */
-typedef IntType<uint32_t, 4> ULONG; /* 32-bit unsigned integer. */
-typedef IntType<int32_t, 4> LONG; /* 32-bit signed integer. */
+typedef IntType<uint8_t, 1> UINT8; /* 8-bit unsigned integer. */
+typedef IntType<int8_t, 1> INT8; /* 8-bit signed integer. */
+typedef IntType<uint16_t, 2> UINT16; /* 16-bit unsigned integer. */
+typedef IntType<int16_t, 2> INT16; /* 16-bit signed integer. */
+typedef IntType<uint32_t, 4> UINT32; /* 32-bit unsigned integer. */
+typedef IntType<int32_t, 4> INT32; /* 32-bit signed integer. */
typedef IntType<uint32_t, 3> UINT24; /* 24-bit unsigned integer. */
-/* 16-bit signed integer (SHORT) that describes a quantity in FUnits. */
-typedef SHORT FWORD;
+/* 16-bit signed integer (INT16) that describes a quantity in FUnits. */
+typedef INT16 FWORD;
-/* 16-bit unsigned integer (USHORT) that describes a quantity in FUnits. */
-typedef USHORT UFWORD;
+/* 16-bit unsigned integer (UINT16) that describes a quantity in FUnits. */
+typedef UINT16 UFWORD;
/* 16-bit signed fixed number with the low 14 bits of fraction (2.14). */
-struct F2DOT14 : SHORT
+struct F2DOT14 : INT16
{
//inline float to_float (void) const { return ???; }
//inline void set_float (float f) { v.set (f * ???); }
@@ -675,7 +659,7 @@ struct F2DOT14 : SHORT
};
/* 32-bit signed fixed-point number (16.16). */
-struct Fixed: LONG
+struct Fixed: INT32
{
//inline float to_float (void) const { return ???; }
//inline void set_float (float f) { v.set (f * ???); }
@@ -693,15 +677,15 @@ struct LONGDATETIME
return_trace (likely (c->check_struct (this)));
}
protected:
- LONG major;
- ULONG minor;
+ INT32 major;
+ UINT32 minor;
public:
DEFINE_SIZE_STATIC (8);
};
/* Array of four uint8s (length = 32 bits) used to identify a script, language
* system, feature, or baseline */
-struct Tag : ULONG
+struct Tag : UINT32
{
/* What the char* converters return is NOT nul-terminated. Print using "%.4s" */
inline operator const char* (void) const { return reinterpret_cast<const char *> (&this->v); }
@@ -712,19 +696,16 @@ struct Tag : ULONG
DEFINE_NULL_DATA (Tag, " ");
/* Glyph index number, same as uint16 (length = 16 bits) */
-struct GlyphID : USHORT {
- static inline int cmp (const GlyphID *a, const GlyphID *b) { return b->USHORT::cmp (*a); }
- inline int cmp (hb_codepoint_t a) const { return (int) a - (int) *this; }
-};
+typedef UINT16 GlyphID;
/* Script/language-system/feature index */
-struct Index : USHORT {
+struct Index : UINT16 {
static const unsigned int NOT_FOUND_INDEX = 0xFFFFu;
};
DEFINE_NULL_DATA (Index, "\xff\xff");
/* Offset, Null offset = 0 */
-template <typename Type=USHORT>
+template <typename Type>
struct Offset : Type
{
inline bool is_null (void) const { return 0 == *this; }
@@ -732,15 +713,18 @@ struct Offset : Type
DEFINE_SIZE_STATIC (sizeof(Type));
};
+typedef Offset<UINT16> Offset16;
+typedef Offset<UINT32> Offset32;
+
/* CheckSum */
-struct CheckSum : ULONG
+struct CheckSum : UINT32
{
/* This is reference implementation from the spec. */
- static inline uint32_t CalcTableChecksum (const ULONG *Table, uint32_t Length)
+ static inline uint32_t CalcTableChecksum (const UINT32 *Table, uint32_t Length)
{
uint32_t Sum = 0L;
- const ULONG *EndPtr = Table+((Length+3) & ~3) / ULONG::static_size;
+ const UINT32 *EndPtr = Table+((Length+3) & ~3) / UINT32::static_size;
while (Table < EndPtr)
Sum += *Table++;
@@ -749,7 +733,7 @@ struct CheckSum : ULONG
/* Note: data should be 4byte aligned and have 4byte padding at the end. */
inline void set_for_data (const void *data, unsigned int length)
- { set (CalcTableChecksum ((const ULONG *) data, length)); }
+ { set (CalcTableChecksum ((const UINT32 *) data, length)); }
public:
DEFINE_SIZE_STATIC (4);
@@ -760,7 +744,7 @@ struct CheckSum : ULONG
* Version Numbers
*/
-template <typename FixedType=USHORT>
+template <typename FixedType=UINT16>
struct FixedVersion
{
inline uint32_t to_int (void) const { return (major << (sizeof(FixedType) * 8)) + minor; }
@@ -784,7 +768,7 @@ struct FixedVersion
* Use: (base+offset)
*/
-template <typename Type, typename OffsetType=USHORT>
+template <typename Type, typename OffsetType=UINT16>
struct OffsetTo : Offset<OffsetType>
{
inline const Type& operator () (const void *base) const
@@ -829,6 +813,7 @@ struct OffsetTo : Offset<OffsetType>
}
DEFINE_SIZE_STATIC (sizeof(OffsetType));
};
+template <typename Type> struct LOffsetTo : OffsetTo<Type, UINT32> {};
template <typename Base, typename OffsetType, typename Type>
static inline const Type& operator + (const Base &base, const OffsetTo<Type, OffsetType> &offset) { return offset (base); }
template <typename Base, typename OffsetType, typename Type>
@@ -840,7 +825,7 @@ static inline Type& operator + (Base &base, OffsetTo<Type, OffsetType> &offset)
*/
/* An array with a number of elements. */
-template <typename Type, typename LenType=USHORT>
+template <typename Type, typename LenType=UINT16>
struct ArrayOf
{
const Type *sub_array (unsigned int start_offset, unsigned int *pcount /* IN/OUT */) const
@@ -941,7 +926,7 @@ struct ArrayOf
inline bool sanitize_shallow (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) && c->check_array (array, Type::static_size, len));
+ return_trace (len.sanitize (c) && c->check_array (array, Type::static_size, len));
}
public:
@@ -950,9 +935,10 @@ struct ArrayOf
public:
DEFINE_SIZE_ARRAY (sizeof (LenType), array);
};
+template <typename Type> struct LArrayOf : ArrayOf<Type, UINT32> {};
/* Array of Offset's */
-template <typename Type, typename OffsetType=USHORT>
+template <typename Type, typename OffsetType=UINT16>
struct OffsetArrayOf : ArrayOf<OffsetTo<Type, OffsetType> > {};
/* Array of offsets relative to the beginning of the array itself. */
@@ -980,7 +966,7 @@ struct OffsetListOf : OffsetArrayOf<Type>
/* An array starting at second element. */
-template <typename Type, typename LenType=USHORT>
+template <typename Type, typename LenType=UINT16>
struct HeadlessArrayOf
{
inline const Type& operator [] (unsigned int i) const
@@ -1006,12 +992,6 @@ struct HeadlessArrayOf
return_trace (true);
}
- inline bool sanitize_shallow (hb_sanitize_context_t *c) const
- {
- return c->check_struct (this)
- && c->check_array (this, Type::static_size, len);
- }
-
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -1029,6 +1009,15 @@ struct HeadlessArrayOf
return_trace (true);
}
+ private:
+ inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (len.sanitize (c) &&
+ (!len || c->check_array (array, Type::static_size, len - 1)));
+ }
+
+ public:
LenType len;
Type array[VAR];
public:
@@ -1036,19 +1025,22 @@ struct HeadlessArrayOf
};
-/* An array with sorted elements. Supports binary searching. */
-template <typename Type, typename LenType=USHORT>
+/*
+ * An array with sorted elements. Supports binary searching.
+ */
+template <typename Type, typename LenType=UINT16>
struct SortedArrayOf : ArrayOf<Type, LenType>
{
template <typename SearchType>
inline int bsearch (const SearchType &x) const
{
/* Hand-coded bsearch here since this is in the hot inner loop. */
+ const Type *array = this->array;
int min = 0, max = (int) this->len - 1;
while (min <= max)
{
int mid = (min + max) / 2;
- int c = this->array[mid].cmp (x);
+ int c = array[mid].cmp (x);
if (c < 0)
max = mid - 1;
else if (c > 0)
@@ -1060,6 +1052,131 @@ struct SortedArrayOf : ArrayOf<Type, LenType>
}
};
+/*
+ * Binary-search arrays
+ */
+
+struct BinSearchHeader
+{
+ inline operator uint32_t (void) const { return len; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ UINT16 len;
+ UINT16 searchRangeZ;
+ UINT16 entrySelectorZ;
+ UINT16 rangeShiftZ;
+
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+template <typename Type>
+struct BinSearchArrayOf : SortedArrayOf<Type, BinSearchHeader> {};
+
+
+/* Lazy struct and blob loaders. */
+
+/* Logic is shared between hb_lazy_loader_t and hb_lazy_table_loader_t */
+template <typename T>
+struct hb_lazy_loader_t
+{
+ inline void init (hb_face_t *face_)
+ {
+ face = face_;
+ instance = nullptr;
+ }
+
+ inline void fini (void)
+ {
+ if (instance && instance != &OT::Null(T))
+ {
+ instance->fini();
+ free (instance);
+ }
+ }
+
+ inline const T* get (void) const
+ {
+ retry:
+ T *p = (T *) hb_atomic_ptr_get (&instance);
+ if (unlikely (!p))
+ {
+ p = (T *) calloc (1, sizeof (T));
+ if (unlikely (!p))
+ p = const_cast<T *> (&OT::Null(T));
+ else
+ p->init (face);
+ if (unlikely (!hb_atomic_ptr_cmpexch (const_cast<T **>(&instance), nullptr, p)))
+ {
+ if (p != &OT::Null(T))
+ p->fini ();
+ goto retry;
+ }
+ }
+ return p;
+ }
+
+ inline const T* operator-> (void) const
+ {
+ return get ();
+ }
+
+ private:
+ hb_face_t *face;
+ T *instance;
+};
+
+/* Logic is shared between hb_lazy_loader_t and hb_lazy_table_loader_t */
+template <typename T>
+struct hb_lazy_table_loader_t
+{
+ inline void init (hb_face_t *face_)
+ {
+ face = face_;
+ instance = nullptr;
+ blob = nullptr;
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (blob);
+ }
+
+ inline const T* get (void) const
+ {
+ retry:
+ T *p = (T *) hb_atomic_ptr_get (&instance);
+ if (unlikely (!p))
+ {
+ hb_blob_t *blob_ = OT::Sanitizer<T>::sanitize (face->reference_table (T::tableTag));
+ p = const_cast<T *>(OT::Sanitizer<T>::lock_instance (blob_));
+ if (!hb_atomic_ptr_cmpexch (const_cast<T **>(&instance), nullptr, p))
+ {
+ hb_blob_destroy (blob_);
+ goto retry;
+ }
+ blob = blob_;
+ }
+ return p;
+ }
+
+ inline const T* operator-> (void) const
+ {
+ return get();
+ }
+
+ private:
+ hb_face_t *face;
+ T *instance;
+ mutable hb_blob_t *blob;
+};
+
} /* namespace OT */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-cbdt-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-cbdt-table.hh
index 52897abd3a..415625e5f8 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-cbdt-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-cbdt-table.hh
@@ -47,20 +47,20 @@ struct SmallGlyphMetrics
extents->height = -height;
}
- BYTE height;
- BYTE width;
- CHAR bearingX;
- CHAR bearingY;
- BYTE advance;
+ UINT8 height;
+ UINT8 width;
+ INT8 bearingX;
+ INT8 bearingY;
+ UINT8 advance;
DEFINE_SIZE_STATIC(5);
};
struct BigGlyphMetrics : SmallGlyphMetrics
{
- CHAR vertBearingX;
- CHAR vertBearingY;
- BYTE vertAdvance;
+ INT8 vertBearingX;
+ INT8 vertBearingY;
+ UINT8 vertAdvance;
DEFINE_SIZE_STATIC(8);
};
@@ -73,18 +73,18 @@ struct SBitLineMetrics
return_trace (c->check_struct (this));
}
- CHAR ascender;
- CHAR decender;
- BYTE widthMax;
- CHAR caretSlopeNumerator;
- CHAR caretSlopeDenominator;
- CHAR caretOffset;
- CHAR minOriginSB;
- CHAR minAdvanceSB;
- CHAR maxBeforeBL;
- CHAR minAfterBL;
- CHAR padding1;
- CHAR padding2;
+ INT8 ascender;
+ INT8 decender;
+ UINT8 widthMax;
+ INT8 caretSlopeNumerator;
+ INT8 caretSlopeDenominator;
+ INT8 caretOffset;
+ INT8 minOriginSB;
+ INT8 minAdvanceSB;
+ INT8 maxBeforeBL;
+ INT8 minAfterBL;
+ INT8 padding1;
+ INT8 padding2;
DEFINE_SIZE_STATIC(12);
};
@@ -102,9 +102,9 @@ struct IndexSubtableHeader
return_trace (c->check_struct (this));
}
- USHORT indexFormat;
- USHORT imageFormat;
- ULONG imageDataOffset;
+ UINT16 indexFormat;
+ UINT16 imageFormat;
+ UINT32 imageDataOffset;
DEFINE_SIZE_STATIC(8);
};
@@ -137,8 +137,8 @@ struct IndexSubtableFormat1Or3
DEFINE_SIZE_ARRAY(8, offsetArrayZ);
};
-struct IndexSubtableFormat1 : IndexSubtableFormat1Or3<ULONG> {};
-struct IndexSubtableFormat3 : IndexSubtableFormat1Or3<USHORT> {};
+struct IndexSubtableFormat1 : IndexSubtableFormat1Or3<UINT32> {};
+struct IndexSubtableFormat3 : IndexSubtableFormat1Or3<UINT16> {};
struct IndexSubtable
{
@@ -214,9 +214,9 @@ struct IndexSubtableRecord
offset, length, format);
}
- USHORT firstGlyphIndex;
- USHORT lastGlyphIndex;
- OffsetTo<IndexSubtable, ULONG> offsetToSubtable;
+ UINT16 firstGlyphIndex;
+ UINT16 lastGlyphIndex;
+ LOffsetTo<IndexSubtable> offsetToSubtable;
DEFINE_SIZE_STATIC(8);
};
@@ -245,7 +245,7 @@ struct IndexSubtableArray
return &indexSubtablesZ[i];
}
}
- return NULL;
+ return nullptr;
}
protected:
@@ -275,20 +275,20 @@ struct BitmapSizeTable
}
protected:
- OffsetTo<IndexSubtableArray, ULONG> indexSubtableArrayOffset;
- ULONG indexTablesSize;
- ULONG numberOfIndexSubtables;
- ULONG colorRef;
+ LOffsetTo<IndexSubtableArray> indexSubtableArrayOffset;
+ UINT32 indexTablesSize;
+ UINT32 numberOfIndexSubtables;
+ UINT32 colorRef;
SBitLineMetrics horizontal;
SBitLineMetrics vertical;
- USHORT startGlyphIndex;
- USHORT endGlyphIndex;
- BYTE ppemX;
- BYTE ppemY;
- BYTE bitDepth;
- CHAR flags;
-
-public:
+ UINT16 startGlyphIndex;
+ UINT16 endGlyphIndex;
+ UINT8 ppemX;
+ UINT8 ppemY;
+ UINT8 bitDepth;
+ INT8 flags;
+
+ public:
DEFINE_SIZE_STATIC(48);
};
@@ -300,8 +300,8 @@ public:
struct GlyphBitmapDataFormat17
{
SmallGlyphMetrics glyphMetrics;
- ULONG dataLen;
- BYTE dataZ[VAR];
+ UINT32 dataLen;
+ UINT8 dataZ[VAR];
DEFINE_SIZE_ARRAY(9, dataZ);
};
@@ -315,6 +315,8 @@ struct GlyphBitmapDataFormat17
struct CBLC
{
+ friend struct CBDT;
+
static const hb_tag_t tableTag = HB_OT_TAG_CBLC;
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -325,7 +327,7 @@ struct CBLC
sizeTables.sanitize (c, this));
}
- public:
+ protected:
const IndexSubtableRecord *find_table (hb_codepoint_t glyph,
unsigned int *x_ppem, unsigned int *y_ppem) const
{
@@ -344,12 +346,12 @@ struct CBLC
}
}
- return NULL;
+ return nullptr;
}
protected:
- FixedVersion<>version;
- ArrayOf<BitmapSizeTable, ULONG> sizeTables;
+ FixedVersion<> version;
+ LArrayOf<BitmapSizeTable> sizeTables;
public:
DEFINE_SIZE_ARRAY(8, sizeTables);
@@ -371,9 +373,94 @@ struct CBDT
likely (version.major == 2 || version.major == 3));
}
+ struct accelerator_t
+ {
+ inline void init (hb_face_t *face)
+ {
+ upem = face->get_upem();
+
+ cblc_blob = Sanitizer<CBLC>::sanitize (face->reference_table (HB_OT_TAG_CBLC));
+ cbdt_blob = Sanitizer<CBDT>::sanitize (face->reference_table (HB_OT_TAG_CBDT));
+ cbdt_len = hb_blob_get_length (cbdt_blob);
+
+ if (hb_blob_get_length (cblc_blob) == 0) {
+ cblc = nullptr;
+ cbdt = nullptr;
+ return; /* Not a bitmap font. */
+ }
+ cblc = Sanitizer<CBLC>::lock_instance (cblc_blob);
+ cbdt = Sanitizer<CBDT>::lock_instance (cbdt_blob);
+
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (this->cblc_blob);
+ hb_blob_destroy (this->cbdt_blob);
+ }
+
+ inline bool get_extents (hb_codepoint_t glyph, hb_glyph_extents_t *extents) const
+ {
+ unsigned int x_ppem = upem, y_ppem = upem; /* TODO Use font ppem if available. */
+
+ if (!cblc)
+ return false; // Not a color bitmap font.
+
+ const IndexSubtableRecord *subtable_record = this->cblc->find_table(glyph, &x_ppem, &y_ppem);
+ if (!subtable_record || !x_ppem || !y_ppem)
+ return false;
+
+ if (subtable_record->get_extents (extents))
+ return true;
+
+ unsigned int image_offset = 0, image_length = 0, image_format = 0;
+ if (!subtable_record->get_image_data (glyph, &image_offset, &image_length, &image_format))
+ return false;
+
+ {
+ if (unlikely (image_offset > cbdt_len || cbdt_len - image_offset < image_length))
+ return false;
+
+ switch (image_format)
+ {
+ case 17: {
+ if (unlikely (image_length < GlyphBitmapDataFormat17::min_size))
+ return false;
+
+ const GlyphBitmapDataFormat17& glyphFormat17 =
+ StructAtOffset<GlyphBitmapDataFormat17> (this->cbdt, image_offset);
+ glyphFormat17.glyphMetrics.get_extents (extents);
+ }
+ break;
+ default:
+ // TODO: Support other image formats.
+ return false;
+ }
+ }
+
+ /* Convert to the font units. */
+ extents->x_bearing *= upem / (float) x_ppem;
+ extents->y_bearing *= upem / (float) y_ppem;
+ extents->width *= upem / (float) x_ppem;
+ extents->height *= upem / (float) y_ppem;
+
+ return true;
+ }
+
+ private:
+ hb_blob_t *cblc_blob;
+ hb_blob_t *cbdt_blob;
+ const CBLC *cblc;
+ const CBDT *cbdt;
+
+ unsigned int cbdt_len;
+ unsigned int upem;
+ };
+
+
protected:
FixedVersion<>version;
- BYTE dataZ[VAR];
+ UINT8 dataZ[VAR];
public:
DEFINE_SIZE_ARRAY(4, dataZ);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-cmap-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-cmap-table.hh
index d7a94a1ef0..883d7b3f0b 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-cmap-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-cmap-table.hh
@@ -58,10 +58,10 @@ struct CmapSubtableFormat0
}
protected:
- USHORT format; /* Format number is set to 0. */
- USHORT lengthZ; /* Byte length of this subtable. */
- USHORT languageZ; /* Ignore. */
- BYTE glyphIdArray[256];/* An array that maps character
+ UINT16 format; /* Format number is set to 0. */
+ UINT16 lengthZ; /* Byte length of this subtable. */
+ UINT16 languageZ; /* Ignore. */
+ UINT8 glyphIdArray[256];/* An array that maps character
* code to glyph index values. */
public:
DEFINE_SIZE_STATIC (6 + 256);
@@ -88,8 +88,8 @@ struct CmapSubtableFormat4
/* Custom two-array bsearch. */
int min = 0, max = (int) thiz->segCount - 1;
- const USHORT *startCount = thiz->startCount;
- const USHORT *endCount = thiz->endCount;
+ const UINT16 *startCount = thiz->startCount;
+ const UINT16 *endCount = thiz->endCount;
unsigned int i;
while (min <= max)
{
@@ -127,11 +127,11 @@ struct CmapSubtableFormat4
return true;
}
- const USHORT *endCount;
- const USHORT *startCount;
- const USHORT *idDelta;
- const USHORT *idRangeOffset;
- const USHORT *glyphIdArray;
+ const UINT16 *endCount;
+ const UINT16 *startCount;
+ const UINT16 *idDelta;
+ const UINT16 *idRangeOffset;
+ const UINT16 *glyphIdArray;
unsigned int segCount;
unsigned int glyphIdArrayLength;
};
@@ -165,24 +165,24 @@ struct CmapSubtableFormat4
}
protected:
- USHORT format; /* Format number is set to 4. */
- USHORT length; /* This is the length in bytes of the
+ UINT16 format; /* Format number is set to 4. */
+ UINT16 length; /* This is the length in bytes of the
* subtable. */
- USHORT languageZ; /* Ignore. */
- USHORT segCountX2; /* 2 x segCount. */
- USHORT searchRangeZ; /* 2 * (2**floor(log2(segCount))) */
- USHORT entrySelectorZ; /* log2(searchRange/2) */
- USHORT rangeShiftZ; /* 2 x segCount - searchRange */
+ UINT16 languageZ; /* Ignore. */
+ UINT16 segCountX2; /* 2 x segCount. */
+ UINT16 searchRangeZ; /* 2 * (2**floor(log2(segCount))) */
+ UINT16 entrySelectorZ; /* log2(searchRange/2) */
+ UINT16 rangeShiftZ; /* 2 x segCount - searchRange */
- USHORT values[VAR];
+ UINT16 values[VAR];
#if 0
- USHORT endCount[segCount]; /* End characterCode for each segment,
+ UINT16 endCount[segCount]; /* End characterCode for each segment,
* last=0xFFFFu. */
- USHORT reservedPad; /* Set to 0. */
- USHORT startCount[segCount]; /* Start character code for each segment. */
- SHORT idDelta[segCount]; /* Delta for all character codes in segment. */
- USHORT idRangeOffset[segCount];/* Offsets into glyphIdArray or 0 */
- USHORT glyphIdArray[VAR]; /* Glyph index array (arbitrary length) */
+ UINT16 reservedPad; /* Set to 0. */
+ UINT16 startCount[segCount]; /* Start character code for each segment. */
+ INT16 idDelta[segCount]; /* Delta for all character codes in segment. */
+ UINT16 idRangeOffset[segCount];/* Offsets into glyphIdArray or 0 */
+ UINT16 glyphIdArray[VAR]; /* Glyph index array (arbitrary length) */
#endif
public:
@@ -208,9 +208,9 @@ struct CmapSubtableLongGroup
}
private:
- ULONG startCharCode; /* First character code in this group. */
- ULONG endCharCode; /* Last character code in this group. */
- ULONG glyphID; /* Glyph index; interpretation depends on
+ UINT32 startCharCode; /* First character code in this group. */
+ UINT32 endCharCode; /* Last character code in this group. */
+ UINT32 glyphID; /* Glyph index; interpretation depends on
* subtable format. */
public:
DEFINE_SIZE_STATIC (12);
@@ -247,8 +247,8 @@ struct CmapSubtableTrimmed
DEFINE_SIZE_ARRAY (5 * sizeof (UINT), glyphIdArray);
};
-struct CmapSubtableFormat6 : CmapSubtableTrimmed<USHORT> {};
-struct CmapSubtableFormat10 : CmapSubtableTrimmed<ULONG > {};
+struct CmapSubtableFormat6 : CmapSubtableTrimmed<UINT16> {};
+struct CmapSubtableFormat10 : CmapSubtableTrimmed<UINT32 > {};
template <typename T>
struct CmapSubtableLongSegmented
@@ -269,11 +269,11 @@ struct CmapSubtableLongSegmented
}
protected:
- USHORT format; /* Subtable format; set to 12. */
- USHORT reservedZ; /* Reserved; set to 0. */
- ULONG lengthZ; /* Byte length of this subtable. */
- ULONG languageZ; /* Ignore. */
- SortedArrayOf<CmapSubtableLongGroup, ULONG>
+ UINT16 format; /* Subtable format; set to 12. */
+ UINT16 reservedZ; /* Reserved; set to 0. */
+ UINT32 lengthZ; /* Byte length of this subtable. */
+ UINT32 languageZ; /* Ignore. */
+ SortedArrayOf<CmapSubtableLongGroup, UINT32>
groups; /* Groupings. */
public:
DEFINE_SIZE_ARRAY (16, groups);
@@ -316,13 +316,13 @@ struct UnicodeValueRange
}
UINT24 startUnicodeValue; /* First value in this range. */
- BYTE additionalCount; /* Number of additional values in this
+ UINT8 additionalCount; /* Number of additional values in this
* range. */
public:
DEFINE_SIZE_STATIC (4);
};
-typedef SortedArrayOf<UnicodeValueRange, ULONG> DefaultUVS;
+typedef SortedArrayOf<UnicodeValueRange, UINT32> DefaultUVS;
struct UVSMapping
{
@@ -343,7 +343,7 @@ struct UVSMapping
DEFINE_SIZE_STATIC (5);
};
-typedef SortedArrayOf<UVSMapping, ULONG> NonDefaultUVS;
+typedef SortedArrayOf<UVSMapping, UINT32> NonDefaultUVS;
struct VariationSelectorRecord
{
@@ -380,9 +380,9 @@ struct VariationSelectorRecord
}
UINT24 varSelector; /* Variation selector. */
- OffsetTo<DefaultUVS, ULONG>
+ LOffsetTo<DefaultUVS>
defaultUVS; /* Offset to Default UVS Table. May be 0. */
- OffsetTo<NonDefaultUVS, ULONG>
+ LOffsetTo<NonDefaultUVS>
nonDefaultUVS; /* Offset to Non-Default UVS Table. May be 0. */
public:
DEFINE_SIZE_STATIC (11);
@@ -405,9 +405,9 @@ struct CmapSubtableFormat14
}
protected:
- USHORT format; /* Format number is set to 14. */
- ULONG lengthZ; /* Byte length of this subtable. */
- SortedArrayOf<VariationSelectorRecord, ULONG>
+ UINT16 format; /* Format number is set to 14. */
+ UINT32 lengthZ; /* Byte length of this subtable. */
+ SortedArrayOf<VariationSelectorRecord, UINT32>
record; /* Variation selector records; sorted
* in increasing order of `varSelector'. */
public:
@@ -451,7 +451,7 @@ struct CmapSubtable
public:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
CmapSubtableFormat0 format0;
CmapSubtableFormat4 format4;
CmapSubtableFormat6 format6;
@@ -484,9 +484,9 @@ struct EncodingRecord
subtable.sanitize (c, base));
}
- USHORT platformID; /* Platform ID. */
- USHORT encodingID; /* Platform-specific encoding ID. */
- OffsetTo<CmapSubtable, ULONG>
+ UINT16 platformID; /* Platform ID. */
+ UINT16 encodingID; /* Platform-specific encoding ID. */
+ LOffsetTo<CmapSubtable>
subtable; /* Byte offset from beginning of table to the subtable for this encoding. */
public:
DEFINE_SIZE_STATIC (8);
@@ -496,6 +496,146 @@ struct cmap
{
static const hb_tag_t tableTag = HB_OT_TAG_cmap;
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ likely (version == 0) &&
+ encodingRecord.sanitize (c, this));
+ }
+
+ struct accelerator_t
+ {
+ inline void init (hb_face_t *face)
+ {
+ this->blob = OT::Sanitizer<OT::cmap>::sanitize (face->reference_table (HB_OT_TAG_cmap));
+ const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (this->blob);
+ const OT::CmapSubtable *subtable = nullptr;
+ const OT::CmapSubtableFormat14 *subtable_uvs = nullptr;
+
+ bool symbol = false;
+ /* 32-bit subtables. */
+ if (!subtable) subtable = cmap->find_subtable (3, 10);
+ if (!subtable) subtable = cmap->find_subtable (0, 6);
+ if (!subtable) subtable = cmap->find_subtable (0, 4);
+ /* 16-bit subtables. */
+ if (!subtable) subtable = cmap->find_subtable (3, 1);
+ if (!subtable) subtable = cmap->find_subtable (0, 3);
+ if (!subtable) subtable = cmap->find_subtable (0, 2);
+ if (!subtable) subtable = cmap->find_subtable (0, 1);
+ if (!subtable) subtable = cmap->find_subtable (0, 0);
+ if (!subtable)
+ {
+ subtable = cmap->find_subtable (3, 0);
+ if (subtable) symbol = true;
+ }
+ /* Meh. */
+ if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
+
+ /* UVS subtable. */
+ if (!subtable_uvs)
+ {
+ const OT::CmapSubtable *st = cmap->find_subtable (0, 5);
+ if (st && st->u.format == 14)
+ subtable_uvs = &st->u.format14;
+ }
+ /* Meh. */
+ if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtableFormat14);
+
+ this->uvs_table = subtable_uvs;
+
+ this->get_glyph_data = subtable;
+ if (unlikely (symbol))
+ this->get_glyph_func = get_glyph_from_symbol<OT::CmapSubtable>;
+ else
+ switch (subtable->u.format) {
+ /* Accelerate format 4 and format 12. */
+ default: this->get_glyph_func = get_glyph_from<OT::CmapSubtable>; break;
+ case 12: this->get_glyph_func = get_glyph_from<OT::CmapSubtableFormat12>; break;
+ case 4:
+ {
+ this->format4_accel.init (&subtable->u.format4);
+ this->get_glyph_data = &this->format4_accel;
+ this->get_glyph_func = this->format4_accel.get_glyph_func;
+ }
+ break;
+ }
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (this->blob);
+ }
+
+ inline bool get_nominal_glyph (hb_codepoint_t unicode,
+ hb_codepoint_t *glyph) const
+ {
+ return this->get_glyph_func (this->get_glyph_data, unicode, glyph);
+ }
+
+ inline bool get_variation_glyph (hb_codepoint_t unicode,
+ hb_codepoint_t variation_selector,
+ hb_codepoint_t *glyph) const
+ {
+ switch (this->uvs_table->get_glyph_variant (unicode,
+ variation_selector,
+ glyph))
+ {
+ case OT::GLYPH_VARIANT_NOT_FOUND: return false;
+ case OT::GLYPH_VARIANT_FOUND: return true;
+ case OT::GLYPH_VARIANT_USE_DEFAULT: break;
+ }
+
+ return get_nominal_glyph (unicode, glyph);
+ }
+
+ protected:
+ typedef bool (*hb_cmap_get_glyph_func_t) (const void *obj,
+ hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph);
+
+ template <typename Type>
+ static inline bool get_glyph_from (const void *obj,
+ hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph)
+ {
+ const Type *typed_obj = (const Type *) obj;
+ return typed_obj->get_glyph (codepoint, glyph);
+ }
+
+ template <typename Type>
+ static inline bool get_glyph_from_symbol (const void *obj,
+ hb_codepoint_t codepoint,
+ hb_codepoint_t *glyph)
+ {
+ const Type *typed_obj = (const Type *) obj;
+ if (likely (typed_obj->get_glyph (codepoint, glyph)))
+ return true;
+
+ if (codepoint <= 0x00FFu)
+ {
+ /* For symbol-encoded OpenType fonts, we duplicate the
+ * U+F000..F0FF range at U+0000..U+00FF. That's what
+ * Windows seems to do, and that's hinted about at:
+ * http://www.microsoft.com/typography/otspec/recom.htm
+ * under "Non-Standard (Symbol) Fonts". */
+ return typed_obj->get_glyph (0xF000u + codepoint, glyph);
+ }
+
+ return false;
+ }
+
+ private:
+ hb_cmap_get_glyph_func_t get_glyph_func;
+ const void *get_glyph_data;
+ OT::CmapSubtableFormat4::accelerator_t format4_accel;
+
+ const OT::CmapSubtableFormat14 *uvs_table;
+ hb_blob_t *blob;
+ };
+
+ protected:
+
inline const CmapSubtable *find_subtable (unsigned int platform_id,
unsigned int encoding_id) const
{
@@ -508,20 +648,13 @@ struct cmap
* unsorted subtable list. */
int result = encodingRecord./*bsearch*/lsearch (key);
if (result == -1 || !encodingRecord[result].subtable)
- return NULL;
+ return nullptr;
return &(this+encodingRecord[result].subtable);
}
- inline bool sanitize (hb_sanitize_context_t *c) const
- {
- TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) &&
- likely (version == 0) &&
- encodingRecord.sanitize (c, this));
- }
-
- USHORT version; /* Table version number (0). */
+ protected:
+ UINT16 version; /* Table version number (0). */
SortedArrayOf<EncodingRecord>
encodingRecord; /* Encoding tables. */
public:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-font.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-font.cc
index 5be055d344..9864064b11 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-font.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-font.cc
@@ -33,443 +33,20 @@
#include "hb-ot-cmap-table.hh"
#include "hb-ot-cbdt-table.hh"
#include "hb-ot-glyf-table.hh"
-#include "hb-ot-head-table.hh"
-#include "hb-ot-hhea-table.hh"
#include "hb-ot-hmtx-table.hh"
-#include "hb-ot-os2-table.hh"
-//#include "hb-ot-post-table.hh"
+#include "hb-ot-kern-table.hh"
+#include "hb-ot-post-table.hh"
-struct hb_ot_face_metrics_accelerator_t
-{
- unsigned int num_metrics;
- unsigned int num_advances;
- unsigned int default_advance;
- unsigned short ascender;
- unsigned short descender;
- unsigned short line_gap;
- bool has_font_extents;
-
- const OT::_mtx *table;
- hb_blob_t *blob;
-
- inline void init (hb_face_t *face,
- hb_tag_t _hea_tag,
- hb_tag_t _mtx_tag,
- hb_tag_t os2_tag,
- unsigned int default_advance = 0)
- {
- this->default_advance = default_advance ? default_advance : face->get_upem ();
-
- bool got_font_extents = false;
- if (os2_tag)
- {
- hb_blob_t *os2_blob = OT::Sanitizer<OT::os2>::sanitize (face->reference_table (os2_tag));
- const OT::os2 *os2 = OT::Sanitizer<OT::os2>::lock_instance (os2_blob);
-#define USE_TYPO_METRICS (1u<<7)
- if (0 != (os2->fsSelection & USE_TYPO_METRICS))
- {
- this->ascender = os2->sTypoAscender;
- this->descender = os2->sTypoDescender;
- this->line_gap = os2->sTypoLineGap;
- got_font_extents = (this->ascender | this->descender) != 0;
- }
- hb_blob_destroy (os2_blob);
- }
-
- hb_blob_t *_hea_blob = OT::Sanitizer<OT::_hea>::sanitize (face->reference_table (_hea_tag));
- const OT::_hea *_hea = OT::Sanitizer<OT::_hea>::lock_instance (_hea_blob);
- this->num_advances = _hea->numberOfLongMetrics;
- if (!got_font_extents)
- {
- this->ascender = _hea->ascender;
- this->descender = _hea->descender;
- this->line_gap = _hea->lineGap;
- got_font_extents = (this->ascender | this->descender) != 0;
- }
- hb_blob_destroy (_hea_blob);
-
- this->has_font_extents = got_font_extents;
-
- this->blob = OT::Sanitizer<OT::_mtx>::sanitize (face->reference_table (_mtx_tag));
-
- /* Cap num_metrics() and num_advances() based on table length. */
- unsigned int len = hb_blob_get_length (this->blob);
- if (unlikely (this->num_advances * 4 > len))
- this->num_advances = len / 4;
- this->num_metrics = this->num_advances + (len - 4 * this->num_advances) / 2;
-
- /* We MUST set num_metrics to zero if num_advances is zero.
- * Our get_advance() depends on that. */
- if (unlikely (!this->num_advances))
- {
- this->num_metrics = this->num_advances = 0;
- hb_blob_destroy (this->blob);
- this->blob = hb_blob_get_empty ();
- }
- this->table = OT::Sanitizer<OT::_mtx>::lock_instance (this->blob);
- }
-
- inline void fini (void)
- {
- hb_blob_destroy (this->blob);
- }
-
- inline unsigned int get_advance (hb_codepoint_t glyph) const
- {
- if (unlikely (glyph >= this->num_metrics))
- {
- /* If this->num_metrics is zero, it means we don't have the metrics table
- * for this direction: return default advance. Otherwise, it means that the
- * glyph index is out of bound: return zero. */
- if (this->num_metrics)
- return 0;
- else
- return this->default_advance;
- }
-
- if (glyph >= this->num_advances)
- glyph = this->num_advances - 1;
-
- return this->table->longMetric[glyph].advance;
- }
-};
-
-struct hb_ot_face_glyf_accelerator_t
-{
- bool short_offset;
- unsigned int num_glyphs;
- const OT::loca *loca;
- const OT::glyf *glyf;
- hb_blob_t *loca_blob;
- hb_blob_t *glyf_blob;
- unsigned int glyf_len;
-
- inline void init (hb_face_t *face)
- {
- hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (face->reference_table (HB_OT_TAG_head));
- const OT::head *head = OT::Sanitizer<OT::head>::lock_instance (head_blob);
- if ((unsigned int) head->indexToLocFormat > 1 || head->glyphDataFormat != 0)
- {
- /* Unknown format. Leave num_glyphs=0, that takes care of disabling us. */
- hb_blob_destroy (head_blob);
- return;
- }
- this->short_offset = 0 == head->indexToLocFormat;
- hb_blob_destroy (head_blob);
-
- this->loca_blob = OT::Sanitizer<OT::loca>::sanitize (face->reference_table (HB_OT_TAG_loca));
- this->loca = OT::Sanitizer<OT::loca>::lock_instance (this->loca_blob);
- this->glyf_blob = OT::Sanitizer<OT::glyf>::sanitize (face->reference_table (HB_OT_TAG_glyf));
- this->glyf = OT::Sanitizer<OT::glyf>::lock_instance (this->glyf_blob);
-
- this->num_glyphs = MAX (1u, hb_blob_get_length (this->loca_blob) / (this->short_offset ? 2 : 4)) - 1;
- this->glyf_len = hb_blob_get_length (this->glyf_blob);
- }
-
- inline void fini (void)
- {
- hb_blob_destroy (this->loca_blob);
- hb_blob_destroy (this->glyf_blob);
- }
-
- inline bool get_extents (hb_codepoint_t glyph,
- hb_glyph_extents_t *extents) const
- {
- if (unlikely (glyph >= this->num_glyphs))
- return false;
-
- unsigned int start_offset, end_offset;
- if (this->short_offset)
- {
- start_offset = 2 * this->loca->u.shortsZ[glyph];
- end_offset = 2 * this->loca->u.shortsZ[glyph + 1];
- }
- else
- {
- start_offset = this->loca->u.longsZ[glyph];
- end_offset = this->loca->u.longsZ[glyph + 1];
- }
-
- if (start_offset > end_offset || end_offset > this->glyf_len)
- return false;
-
- if (end_offset - start_offset < OT::glyfGlyphHeader::static_size)
- return true; /* Empty glyph; zero extents. */
-
- const OT::glyfGlyphHeader &glyph_header = OT::StructAtOffset<OT::glyfGlyphHeader> (this->glyf, start_offset);
-
- extents->x_bearing = MIN (glyph_header.xMin, glyph_header.xMax);
- extents->y_bearing = MAX (glyph_header.yMin, glyph_header.yMax);
- extents->width = MAX (glyph_header.xMin, glyph_header.xMax) - extents->x_bearing;
- extents->height = MIN (glyph_header.yMin, glyph_header.yMax) - extents->y_bearing;
-
- return true;
- }
-};
-
-struct hb_ot_face_cbdt_accelerator_t
-{
- hb_blob_t *cblc_blob;
- hb_blob_t *cbdt_blob;
- const OT::CBLC *cblc;
- const OT::CBDT *cbdt;
-
- unsigned int cbdt_len;
- float upem;
-
- inline void init (hb_face_t *face)
- {
- upem = face->get_upem();
-
- cblc_blob = OT::Sanitizer<OT::CBLC>::sanitize (face->reference_table (HB_OT_TAG_CBLC));
- cbdt_blob = OT::Sanitizer<OT::CBDT>::sanitize (face->reference_table (HB_OT_TAG_CBDT));
- cbdt_len = hb_blob_get_length (cbdt_blob);
-
- if (hb_blob_get_length (cblc_blob) == 0) {
- cblc = NULL;
- cbdt = NULL;
- return; /* Not a bitmap font. */
- }
- cblc = OT::Sanitizer<OT::CBLC>::lock_instance (cblc_blob);
- cbdt = OT::Sanitizer<OT::CBDT>::lock_instance (cbdt_blob);
-
- }
-
- inline void fini (void)
- {
- hb_blob_destroy (this->cblc_blob);
- hb_blob_destroy (this->cbdt_blob);
- }
-
- inline bool get_extents (hb_codepoint_t glyph, hb_glyph_extents_t *extents) const
- {
- unsigned int x_ppem = upem, y_ppem = upem; /* TODO Use font ppem if available. */
-
- if (cblc == NULL)
- return false; // Not a color bitmap font.
-
- const OT::IndexSubtableRecord *subtable_record = this->cblc->find_table(glyph, &x_ppem, &y_ppem);
- if (subtable_record == NULL)
- return false;
-
- if (subtable_record->get_extents (extents))
- return true;
-
- unsigned int image_offset = 0, image_length = 0, image_format = 0;
- if (!subtable_record->get_image_data (glyph, &image_offset, &image_length, &image_format))
- return false;
-
- {
- /* TODO Move the following into CBDT struct when adding more formats. */
-
- if (unlikely (image_offset > cbdt_len || cbdt_len - image_offset < image_length))
- return false;
-
- switch (image_format)
- {
- case 17: {
- if (unlikely (image_length < OT::GlyphBitmapDataFormat17::min_size))
- return false;
-
- const OT::GlyphBitmapDataFormat17& glyphFormat17 =
- OT::StructAtOffset<OT::GlyphBitmapDataFormat17> (this->cbdt, image_offset);
- glyphFormat17.glyphMetrics.get_extents (extents);
- }
- break;
- default:
- // TODO: Support other image formats.
- return false;
- }
- }
-
- /* Convert to the font units. */
- extents->x_bearing *= upem / (float) x_ppem;
- extents->y_bearing *= upem / (float) y_ppem;
- extents->width *= upem / (float) x_ppem;
- extents->height *= upem / (float) y_ppem;
-
- return true;
- }
-};
-
-typedef bool (*hb_cmap_get_glyph_func_t) (const void *obj,
- hb_codepoint_t codepoint,
- hb_codepoint_t *glyph);
-
-template <typename Type>
-static inline bool get_glyph_from (const void *obj,
- hb_codepoint_t codepoint,
- hb_codepoint_t *glyph)
-{
- const Type *typed_obj = (const Type *) obj;
- return typed_obj->get_glyph (codepoint, glyph);
-}
-
-template <typename Type>
-static inline bool get_glyph_from_symbol (const void *obj,
- hb_codepoint_t codepoint,
- hb_codepoint_t *glyph)
-{
- const Type *typed_obj = (const Type *) obj;
- if (likely (typed_obj->get_glyph (codepoint, glyph)))
- return true;
-
- if (codepoint <= 0x00FFu)
- {
- /* For symbol-encoded OpenType fonts, we duplicate the
- * U+F000..F0FF range at U+0000..U+00FF. That's what
- * Windows seems to do, and that's hinted about at:
- * http://www.microsoft.com/typography/otspec/recom.htm
- * under "Non-Standard (Symbol) Fonts". */
- return typed_obj->get_glyph (0xF000u + codepoint, glyph);
- }
-
- return false;
-}
-
-struct hb_ot_face_cmap_accelerator_t
-{
- hb_cmap_get_glyph_func_t get_glyph_func;
- const void *get_glyph_data;
- OT::CmapSubtableFormat4::accelerator_t format4_accel;
-
- const OT::CmapSubtableFormat14 *uvs_table;
- hb_blob_t *blob;
-
- inline void init (hb_face_t *face)
- {
- this->blob = OT::Sanitizer<OT::cmap>::sanitize (face->reference_table (HB_OT_TAG_cmap));
- const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (this->blob);
- const OT::CmapSubtable *subtable = NULL;
- const OT::CmapSubtableFormat14 *subtable_uvs = NULL;
-
- bool symbol = false;
- /* 32-bit subtables. */
- if (!subtable) subtable = cmap->find_subtable (3, 10);
- if (!subtable) subtable = cmap->find_subtable (0, 6);
- if (!subtable) subtable = cmap->find_subtable (0, 4);
- /* 16-bit subtables. */
- if (!subtable) subtable = cmap->find_subtable (3, 1);
- if (!subtable) subtable = cmap->find_subtable (0, 3);
- if (!subtable) subtable = cmap->find_subtable (0, 2);
- if (!subtable) subtable = cmap->find_subtable (0, 1);
- if (!subtable) subtable = cmap->find_subtable (0, 0);
- if (!subtable)
- {
- subtable = cmap->find_subtable (3, 0);
- if (subtable) symbol = true;
- }
- /* Meh. */
- if (!subtable) subtable = &OT::Null(OT::CmapSubtable);
-
- /* UVS subtable. */
- if (!subtable_uvs)
- {
- const OT::CmapSubtable *st = cmap->find_subtable (0, 5);
- if (st && st->u.format == 14)
- subtable_uvs = &st->u.format14;
- }
- /* Meh. */
- if (!subtable_uvs) subtable_uvs = &OT::Null(OT::CmapSubtableFormat14);
-
- this->uvs_table = subtable_uvs;
-
- this->get_glyph_data = subtable;
- if (unlikely (symbol))
- this->get_glyph_func = get_glyph_from_symbol<OT::CmapSubtable>;
- else
- switch (subtable->u.format) {
- /* Accelerate format 4 and format 12. */
- default: this->get_glyph_func = get_glyph_from<OT::CmapSubtable>; break;
- case 12: this->get_glyph_func = get_glyph_from<OT::CmapSubtableFormat12>; break;
- case 4:
- {
- this->format4_accel.init (&subtable->u.format4);
- this->get_glyph_data = &this->format4_accel;
- this->get_glyph_func = this->format4_accel.get_glyph_func;
- }
- break;
- }
- }
-
- inline void fini (void)
- {
- hb_blob_destroy (this->blob);
- }
-
- inline bool get_nominal_glyph (hb_codepoint_t unicode,
- hb_codepoint_t *glyph) const
- {
- return this->get_glyph_func (this->get_glyph_data, unicode, glyph);
- }
-
- inline bool get_variation_glyph (hb_codepoint_t unicode,
- hb_codepoint_t variation_selector,
- hb_codepoint_t *glyph) const
- {
- switch (this->uvs_table->get_glyph_variant (unicode,
- variation_selector,
- glyph))
- {
- case OT::GLYPH_VARIANT_NOT_FOUND: return false;
- case OT::GLYPH_VARIANT_FOUND: return true;
- case OT::GLYPH_VARIANT_USE_DEFAULT: break;
- }
-
- return get_nominal_glyph (unicode, glyph);
- }
-};
-
-template <typename T>
-struct hb_lazy_loader_t
-{
- inline void init (hb_face_t *face_)
- {
- face = face_;
- instance = NULL;
- }
-
- inline void fini (void)
- {
- if (instance && instance != &OT::Null(T))
- {
- instance->fini();
- free (instance);
- }
- }
-
- inline const T* operator-> (void) const
- {
- retry:
- T *p = (T *) hb_atomic_ptr_get (&instance);
- if (unlikely (!p))
- {
- p = (T *) calloc (1, sizeof (T));
- if (unlikely (!p))
- return &OT::Null(T);
- p->init (face);
- if (unlikely (!hb_atomic_ptr_cmpexch (const_cast<T **>(&instance), NULL, p)))
- {
- p->fini ();
- goto retry;
- }
- }
- return p;
- }
-
- private:
- hb_face_t *face;
- T *instance;
-};
-
struct hb_ot_font_t
{
- hb_ot_face_cmap_accelerator_t cmap;
- hb_ot_face_metrics_accelerator_t h_metrics;
- hb_ot_face_metrics_accelerator_t v_metrics;
- hb_lazy_loader_t<hb_ot_face_glyf_accelerator_t> glyf;
- hb_lazy_loader_t<hb_ot_face_cbdt_accelerator_t> cbdt;
+ OT::cmap::accelerator_t cmap;
+ OT::hmtx::accelerator_t h_metrics;
+ OT::vmtx::accelerator_t v_metrics;
+ OT::hb_lazy_loader_t<OT::glyf::accelerator_t> glyf;
+ OT::hb_lazy_loader_t<OT::CBDT::accelerator_t> cbdt;
+ OT::hb_lazy_loader_t<OT::post::accelerator_t> post;
+ OT::hb_lazy_loader_t<OT::kern::accelerator_t> kern;
};
@@ -479,26 +56,31 @@ _hb_ot_font_create (hb_face_t *face)
hb_ot_font_t *ot_font = (hb_ot_font_t *) calloc (1, sizeof (hb_ot_font_t));
if (unlikely (!ot_font))
- return NULL;
+ return nullptr;
ot_font->cmap.init (face);
- ot_font->h_metrics.init (face, HB_OT_TAG_hhea, HB_OT_TAG_hmtx, HB_OT_TAG_os2);
- ot_font->v_metrics.init (face, HB_OT_TAG_vhea, HB_OT_TAG_vmtx, HB_TAG_NONE,
- ot_font->h_metrics.ascender - ot_font->h_metrics.descender); /* TODO Can we do this lazily? */
+ ot_font->h_metrics.init (face);
+ ot_font->v_metrics.init (face, ot_font->h_metrics.ascender - ot_font->h_metrics.descender); /* TODO Can we do this lazily? */
ot_font->glyf.init (face);
ot_font->cbdt.init (face);
+ ot_font->post.init (face);
+ ot_font->kern.init (face);
return ot_font;
}
static void
-_hb_ot_font_destroy (hb_ot_font_t *ot_font)
+_hb_ot_font_destroy (void *data)
{
+ hb_ot_font_t *ot_font = (hb_ot_font_t *) data;
+
ot_font->cmap.fini ();
ot_font->h_metrics.fini ();
ot_font->v_metrics.fini ();
ot_font->glyf.fini ();
ot_font->cbdt.fini ();
+ ot_font->post.fini ();
+ ot_font->kern.fini ();
free (ot_font);
}
@@ -529,23 +111,34 @@ hb_ot_get_variation_glyph (hb_font_t *font HB_UNUSED,
}
static hb_position_t
-hb_ot_get_glyph_h_advance (hb_font_t *font HB_UNUSED,
+hb_ot_get_glyph_h_advance (hb_font_t *font,
void *font_data,
hb_codepoint_t glyph,
void *user_data HB_UNUSED)
{
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
- return font->em_scale_x (ot_font->h_metrics.get_advance (glyph));
+ return font->em_scale_x (ot_font->h_metrics.get_advance (glyph, font));
}
static hb_position_t
-hb_ot_get_glyph_v_advance (hb_font_t *font HB_UNUSED,
+hb_ot_get_glyph_v_advance (hb_font_t *font,
void *font_data,
hb_codepoint_t glyph,
void *user_data HB_UNUSED)
{
const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
- return font->em_scale_y (-(int) ot_font->v_metrics.get_advance (glyph));
+ return font->em_scale_y (-(int) ot_font->v_metrics.get_advance (glyph, font));
+}
+
+static hb_position_t
+hb_ot_get_glyph_h_kerning (hb_font_t *font,
+ void *font_data,
+ hb_codepoint_t left_glyph,
+ hb_codepoint_t right_glyph,
+ void *user_data HB_UNUSED)
+{
+ const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
+ return font->em_scale_x (ot_font->kern->get_h_kerning (left_glyph, right_glyph));
}
static hb_bool_t
@@ -559,6 +152,7 @@ hb_ot_get_glyph_extents (hb_font_t *font HB_UNUSED,
bool ret = ot_font->glyf->get_extents (glyph, extents);
if (!ret)
ret = ot_font->cbdt->get_extents (glyph, extents);
+ // TODO Hook up side-bearings variations.
extents->x_bearing = font->em_scale_x (extents->x_bearing);
extents->y_bearing = font->em_scale_y (extents->y_bearing);
extents->width = font->em_scale_x (extents->width);
@@ -567,6 +161,28 @@ hb_ot_get_glyph_extents (hb_font_t *font HB_UNUSED,
}
static hb_bool_t
+hb_ot_get_glyph_name (hb_font_t *font HB_UNUSED,
+ void *font_data,
+ hb_codepoint_t glyph,
+ char *name, unsigned int size,
+ void *user_data HB_UNUSED)
+{
+ const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
+ return ot_font->post->get_glyph_name (glyph, name, size);
+}
+
+static hb_bool_t
+hb_ot_get_glyph_from_name (hb_font_t *font HB_UNUSED,
+ void *font_data,
+ const char *name, int len,
+ hb_codepoint_t *glyph,
+ void *user_data HB_UNUSED)
+{
+ const hb_ot_font_t *ot_font = (const hb_ot_font_t *) font_data;
+ return ot_font->post->get_glyph_from_name (name, len, glyph);
+}
+
+static hb_bool_t
hb_ot_get_font_h_extents (hb_font_t *font HB_UNUSED,
void *font_data,
hb_font_extents_t *metrics,
@@ -576,6 +192,7 @@ hb_ot_get_font_h_extents (hb_font_t *font HB_UNUSED,
metrics->ascender = font->em_scale_y (ot_font->h_metrics.ascender);
metrics->descender = font->em_scale_y (ot_font->h_metrics.descender);
metrics->line_gap = font->em_scale_y (ot_font->h_metrics.line_gap);
+ // TODO Hook up variations.
return ot_font->h_metrics.has_font_extents;
}
@@ -589,10 +206,11 @@ hb_ot_get_font_v_extents (hb_font_t *font HB_UNUSED,
metrics->ascender = font->em_scale_x (ot_font->v_metrics.ascender);
metrics->descender = font->em_scale_x (ot_font->v_metrics.descender);
metrics->line_gap = font->em_scale_x (ot_font->v_metrics.line_gap);
+ // TODO Hook up variations.
return ot_font->v_metrics.has_font_extents;
}
-static hb_font_funcs_t *static_ot_funcs = NULL;
+static hb_font_funcs_t *static_ot_funcs = nullptr;
#ifdef HB_USE_ATEXIT
static
@@ -612,24 +230,24 @@ retry:
{
funcs = hb_font_funcs_create ();
- hb_font_funcs_set_font_h_extents_func (funcs, hb_ot_get_font_h_extents, NULL, NULL);
- hb_font_funcs_set_font_v_extents_func (funcs, hb_ot_get_font_v_extents, NULL, NULL);
- hb_font_funcs_set_nominal_glyph_func (funcs, hb_ot_get_nominal_glyph, NULL, NULL);
- hb_font_funcs_set_variation_glyph_func (funcs, hb_ot_get_variation_glyph, NULL, NULL);
- hb_font_funcs_set_glyph_h_advance_func (funcs, hb_ot_get_glyph_h_advance, NULL, NULL);
- hb_font_funcs_set_glyph_v_advance_func (funcs, hb_ot_get_glyph_v_advance, NULL, NULL);
- //hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ot_get_glyph_h_origin, NULL, NULL);
- //hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, NULL, NULL);
- //hb_font_funcs_set_glyph_h_kerning_func (funcs, hb_ot_get_glyph_h_kerning, NULL, NULL); TODO
- //hb_font_funcs_set_glyph_v_kerning_func (funcs, hb_ot_get_glyph_v_kerning, NULL, NULL);
- hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, NULL, NULL);
- //hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, NULL, NULL); TODO
- //hb_font_funcs_set_glyph_name_func (funcs, hb_ot_get_glyph_name, NULL, NULL); TODO
- //hb_font_funcs_set_glyph_from_name_func (funcs, hb_ot_get_glyph_from_name, NULL, NULL); TODO
+ hb_font_funcs_set_font_h_extents_func (funcs, hb_ot_get_font_h_extents, nullptr, nullptr);
+ hb_font_funcs_set_font_v_extents_func (funcs, hb_ot_get_font_v_extents, nullptr, nullptr);
+ hb_font_funcs_set_nominal_glyph_func (funcs, hb_ot_get_nominal_glyph, nullptr, nullptr);
+ hb_font_funcs_set_variation_glyph_func (funcs, hb_ot_get_variation_glyph, nullptr, nullptr);
+ hb_font_funcs_set_glyph_h_advance_func (funcs, hb_ot_get_glyph_h_advance, nullptr, nullptr);
+ hb_font_funcs_set_glyph_v_advance_func (funcs, hb_ot_get_glyph_v_advance, nullptr, nullptr);
+ //hb_font_funcs_set_glyph_h_origin_func (funcs, hb_ot_get_glyph_h_origin, nullptr, nullptr);
+ //hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, nullptr, nullptr);
+ hb_font_funcs_set_glyph_h_kerning_func (funcs, hb_ot_get_glyph_h_kerning, nullptr, nullptr);
+ //hb_font_funcs_set_glyph_v_kerning_func (funcs, hb_ot_get_glyph_v_kerning, nullptr, nullptr);
+ hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, nullptr, nullptr);
+ //hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, nullptr, nullptr);
+ hb_font_funcs_set_glyph_name_func (funcs, hb_ot_get_glyph_name, nullptr, nullptr);
+ hb_font_funcs_set_glyph_from_name_func (funcs, hb_ot_get_glyph_from_name, nullptr, nullptr);
hb_font_funcs_make_immutable (funcs);
- if (!hb_atomic_ptr_cmpexch (&static_ot_funcs, NULL, funcs)) {
+ if (!hb_atomic_ptr_cmpexch (&static_ot_funcs, nullptr, funcs)) {
hb_font_funcs_destroy (funcs);
goto retry;
}
@@ -658,5 +276,5 @@ hb_ot_font_set_funcs (hb_font_t *font)
hb_font_set_funcs (font,
_hb_ot_get_font_funcs (),
ot_font,
- (hb_destroy_func_t) _hb_ot_font_destroy);
+ _hb_ot_font_destroy);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-glyf-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-glyf-table.hh
index dc7aa8469a..88d3850b6e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-glyf-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-glyf-table.hh
@@ -28,6 +28,7 @@
#define HB_OT_GLYF_TABLE_HH
#include "hb-open-type-private.hh"
+#include "hb-ot-head-table.hh"
namespace OT {
@@ -42,6 +43,8 @@ namespace OT {
struct loca
{
+ friend struct glyf;
+
static const hb_tag_t tableTag = HB_OT_TAG_loca;
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -50,12 +53,9 @@ struct loca
return_trace (true);
}
- public:
- union {
- USHORT shortsZ[VAR]; /* Location offset divided by 2. */
- ULONG longsZ[VAR]; /* Location offset. */
- } u;
- DEFINE_SIZE_ARRAY (0, u.longsZ);
+ protected:
+ UINT8 dataX[VAR]; /* Location data. */
+ DEFINE_SIZE_ARRAY (0, dataX);
};
@@ -78,26 +78,102 @@ struct glyf
return_trace (true);
}
- public:
- BYTE dataX[VAR]; /* Glyphs data. */
+ struct GlyphHeader
+ {
+ INT16 numberOfContours; /* If the number of contours is
+ * greater than or equal to zero,
+ * this is a simple glyph; if negative,
+ * this is a composite glyph. */
+ FWORD xMin; /* Minimum x for coordinate data. */
+ FWORD yMin; /* Minimum y for coordinate data. */
+ FWORD xMax; /* Maximum x for coordinate data. */
+ FWORD yMax; /* Maximum y for coordinate data. */
+
+ DEFINE_SIZE_STATIC (10);
+ };
+
+ struct accelerator_t
+ {
+ inline void init (hb_face_t *face)
+ {
+ hb_blob_t *head_blob = Sanitizer<head>::sanitize (face->reference_table (HB_OT_TAG_head));
+ const head *head_table = Sanitizer<head>::lock_instance (head_blob);
+ if ((unsigned int) head_table->indexToLocFormat > 1 || head_table->glyphDataFormat != 0)
+ {
+ /* Unknown format. Leave num_glyphs=0, that takes care of disabling us. */
+ hb_blob_destroy (head_blob);
+ return;
+ }
+ short_offset = 0 == head_table->indexToLocFormat;
+ hb_blob_destroy (head_blob);
+
+ loca_blob = Sanitizer<loca>::sanitize (face->reference_table (HB_OT_TAG_loca));
+ loca_table = Sanitizer<loca>::lock_instance (loca_blob);
+ glyf_blob = Sanitizer<glyf>::sanitize (face->reference_table (HB_OT_TAG_glyf));
+ glyf_table = Sanitizer<glyf>::lock_instance (glyf_blob);
+
+ num_glyphs = MAX (1u, hb_blob_get_length (loca_blob) / (short_offset ? 2 : 4)) - 1;
+ glyf_len = hb_blob_get_length (glyf_blob);
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (loca_blob);
+ hb_blob_destroy (glyf_blob);
+ }
+
+ inline bool get_extents (hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const
+ {
+ if (unlikely (glyph >= num_glyphs))
+ return false;
+
+ unsigned int start_offset, end_offset;
+ if (short_offset)
+ {
+ const UINT16 *offsets = (const UINT16 *) loca_table->dataX;
+ start_offset = 2 * offsets[glyph];
+ end_offset = 2 * offsets[glyph + 1];
+ }
+ else
+ {
+ const UINT32 *offsets = (const UINT32 *) loca_table->dataX;
+ start_offset = offsets[glyph];
+ end_offset = offsets[glyph + 1];
+ }
+
+ if (start_offset > end_offset || end_offset > glyf_len)
+ return false;
+
+ if (end_offset - start_offset < GlyphHeader::static_size)
+ return true; /* Empty glyph; zero extents. */
+
+ const GlyphHeader &glyph_header = StructAtOffset<GlyphHeader> (glyf_table, start_offset);
+
+ extents->x_bearing = MIN (glyph_header.xMin, glyph_header.xMax);
+ extents->y_bearing = MAX (glyph_header.yMin, glyph_header.yMax);
+ extents->width = MAX (glyph_header.xMin, glyph_header.xMax) - extents->x_bearing;
+ extents->height = MIN (glyph_header.yMin, glyph_header.yMax) - extents->y_bearing;
+
+ return true;
+ }
+
+ private:
+ bool short_offset;
+ unsigned int num_glyphs;
+ const loca *loca_table;
+ const glyf *glyf_table;
+ hb_blob_t *loca_blob;
+ hb_blob_t *glyf_blob;
+ unsigned int glyf_len;
+ };
+
+ protected:
+ UINT8 dataX[VAR]; /* Glyphs data. */
DEFINE_SIZE_ARRAY (0, dataX);
};
-struct glyfGlyphHeader
-{
- SHORT numberOfContours; /* If the number of contours is
- * greater than or equal to zero,
- * this is a simple glyph; if negative,
- * this is a composite glyph. */
- FWORD xMin; /* Minimum x for coordinate data. */
- FWORD yMin; /* Minimum y for coordinate data. */
- FWORD xMax; /* Maximum x for coordinate data. */
- FWORD yMax; /* Maximum y for coordinate data. */
-
- DEFINE_SIZE_STATIC (10);
-};
-
} /* namespace OT */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-head-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-head-table.hh
index 9c3e51eb08..dd4349ef85 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-head-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-head-table.hh
@@ -64,11 +64,11 @@ struct head
FixedVersion<>version; /* Version of the head table--currently
* 0x00010000u for version 1.0. */
FixedVersion<>fontRevision; /* Set by font manufacturer. */
- ULONG checkSumAdjustment; /* To compute: set it to 0, sum the
- * entire font as ULONG, then store
+ UINT32 checkSumAdjustment; /* To compute: set it to 0, sum the
+ * entire font as UINT32, then store
* 0xB1B0AFBAu - sum. */
- ULONG magicNumber; /* Set to 0x5F0F3CF5u. */
- USHORT flags; /* Bit 0: Baseline for font at y=0;
+ UINT32 magicNumber; /* Set to 0x5F0F3CF5u. */
+ UINT16 flags; /* Bit 0: Baseline for font at y=0;
* Bit 1: Left sidebearing point at x=0;
* Bit 2: Instructions may depend on point size;
* Bit 3: Force ppem to integer values for all
@@ -114,18 +114,18 @@ struct head
* encoded in the cmap subtables represent proper
* support for those code points.
* Bit 15: Reserved, set to 0. */
- USHORT unitsPerEm; /* Valid range is from 16 to 16384. This value
+ UINT16 unitsPerEm; /* Valid range is from 16 to 16384. This value
* should be a power of 2 for fonts that have
* TrueType outlines. */
LONGDATETIME created; /* Number of seconds since 12:00 midnight,
January 1, 1904. 64-bit integer */
LONGDATETIME modified; /* Number of seconds since 12:00 midnight,
January 1, 1904. 64-bit integer */
- SHORT xMin; /* For all glyph bounding boxes. */
- SHORT yMin; /* For all glyph bounding boxes. */
- SHORT xMax; /* For all glyph bounding boxes. */
- SHORT yMax; /* For all glyph bounding boxes. */
- USHORT macStyle; /* Bit 0: Bold (if set to 1);
+ INT16 xMin; /* For all glyph bounding boxes. */
+ INT16 yMin; /* For all glyph bounding boxes. */
+ INT16 xMax; /* For all glyph bounding boxes. */
+ INT16 yMax; /* For all glyph bounding boxes. */
+ UINT16 macStyle; /* Bit 0: Bold (if set to 1);
* Bit 1: Italic (if set to 1)
* Bit 2: Underline (if set to 1)
* Bit 3: Outline (if set to 1)
@@ -133,16 +133,16 @@ struct head
* Bit 5: Condensed (if set to 1)
* Bit 6: Extended (if set to 1)
* Bits 7-15: Reserved (set to 0). */
- USHORT lowestRecPPEM; /* Smallest readable size in pixels. */
- SHORT fontDirectionHint; /* Deprecated (Set to 2).
+ UINT16 lowestRecPPEM; /* Smallest readable size in pixels. */
+ INT16 fontDirectionHint; /* Deprecated (Set to 2).
* 0: Fully mixed directional glyphs;
* 1: Only strongly left to right;
* 2: Like 1 but also contains neutrals;
* -1: Only strongly right to left;
* -2: Like -1 but also contains neutrals. */
public:
- SHORT indexToLocFormat; /* 0 for short offsets, 1 for long. */
- SHORT glyphDataFormat; /* 0 for current format. */
+ INT16 indexToLocFormat; /* 0 for short offsets, 1 for long. */
+ INT16 glyphDataFormat; /* 0 for current format. */
DEFINE_SIZE_STATIC (54);
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-hhea-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-hhea-table.hh
index c8e9536cf1..dca014148e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-hhea-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-hhea-table.hh
@@ -44,11 +44,6 @@ namespace OT {
struct _hea
{
- static const hb_tag_t tableTag = HB_TAG('_','h','e','a');
-
- static const hb_tag_t hheaTag = HB_OT_TAG_hhea;
- static const hb_tag_t vheaTag = HB_OT_TAG_vhea;
-
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -69,21 +64,21 @@ struct _hea
* (xMax - xMin)) for horizontal. */
FWORD maxExtent; /* horizontal: Max(lsb + (xMax - xMin)),
* vertical: minLeadingBearing+(yMax-yMin). */
- SHORT caretSlopeRise; /* Used to calculate the slope of the
+ INT16 caretSlopeRise; /* Used to calculate the slope of the
* cursor (rise/run); 1 for vertical caret,
* 0 for horizontal.*/
- SHORT caretSlopeRun; /* 0 for vertical caret, 1 for horizontal. */
- SHORT caretOffset; /* The amount by which a slanted
+ INT16 caretSlopeRun; /* 0 for vertical caret, 1 for horizontal. */
+ INT16 caretOffset; /* The amount by which a slanted
* highlight on a glyph needs
* to be shifted to produce the
* best appearance. Set to 0 for
* non-slanted fonts. */
- SHORT reserved1; /* Set to 0. */
- SHORT reserved2; /* Set to 0. */
- SHORT reserved3; /* Set to 0. */
- SHORT reserved4; /* Set to 0. */
- SHORT metricDataFormat; /* 0 for current format. */
- USHORT numberOfLongMetrics; /* Number of LongMetric entries in metric
+ INT16 reserved1; /* Set to 0. */
+ INT16 reserved2; /* Set to 0. */
+ INT16 reserved3; /* Set to 0. */
+ INT16 reserved4; /* Set to 0. */
+ INT16 metricDataFormat; /* 0 for current format. */
+ UINT16 numberOfLongMetrics; /* Number of LongMetric entries in metric
* table. */
public:
DEFINE_SIZE_STATIC (36);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh
index a9606b3d27..e710aee42e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh
@@ -28,6 +28,9 @@
#define HB_OT_HMTX_TABLE_HH
#include "hb-open-type-private.hh"
+#include "hb-ot-hhea-table.hh"
+#include "hb-ot-os2-table.hh"
+#include "hb-ot-var-hvar-table.hh"
namespace OT {
@@ -50,13 +53,9 @@ struct LongMetric
DEFINE_SIZE_STATIC (4);
};
-struct _mtx
+template <typename T>
+struct hmtxvmtx
{
- static const hb_tag_t tableTag = HB_TAG('_','m','t','x');
-
- static const hb_tag_t hmtxTag = HB_OT_TAG_hmtx;
- static const hb_tag_t vmtxTag = HB_OT_TAG_vmtx;
-
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -65,7 +64,107 @@ struct _mtx
return_trace (true);
}
- public:
+ struct accelerator_t
+ {
+ inline void init (hb_face_t *face,
+ unsigned int default_advance_ = 0)
+ {
+ default_advance = default_advance_ ? default_advance_ : face->get_upem ();
+
+ bool got_font_extents = false;
+ if (T::os2Tag)
+ {
+ hb_blob_t *os2_blob = Sanitizer<os2>::sanitize (face->reference_table (T::os2Tag));
+ const os2 *os2_table = Sanitizer<os2>::lock_instance (os2_blob);
+#define USE_TYPO_METRICS (1u<<7)
+ if (0 != (os2_table->fsSelection & USE_TYPO_METRICS))
+ {
+ ascender = os2_table->sTypoAscender;
+ descender = os2_table->sTypoDescender;
+ line_gap = os2_table->sTypoLineGap;
+ got_font_extents = (ascender | descender) != 0;
+ }
+ hb_blob_destroy (os2_blob);
+ }
+
+ hb_blob_t *_hea_blob = Sanitizer<_hea>::sanitize (face->reference_table (T::headerTag));
+ const _hea *_hea_table = Sanitizer<_hea>::lock_instance (_hea_blob);
+ num_advances = _hea_table->numberOfLongMetrics;
+ if (!got_font_extents)
+ {
+ ascender = _hea_table->ascender;
+ descender = _hea_table->descender;
+ line_gap = _hea_table->lineGap;
+ got_font_extents = (ascender | descender) != 0;
+ }
+ hb_blob_destroy (_hea_blob);
+
+ has_font_extents = got_font_extents;
+
+ blob = Sanitizer<hmtxvmtx>::sanitize (face->reference_table (T::tableTag));
+
+ /* Cap num_metrics() and num_advances() based on table length. */
+ unsigned int len = hb_blob_get_length (blob);
+ if (unlikely (num_advances * 4 > len))
+ num_advances = len / 4;
+ num_metrics = num_advances + (len - 4 * num_advances) / 2;
+
+ /* We MUST set num_metrics to zero if num_advances is zero.
+ * Our get_advance() depends on that. */
+ if (unlikely (!num_advances))
+ {
+ num_metrics = num_advances = 0;
+ hb_blob_destroy (blob);
+ blob = hb_blob_get_empty ();
+ }
+ table = Sanitizer<hmtxvmtx>::lock_instance (blob);
+
+ var_blob = Sanitizer<HVARVVAR>::sanitize (face->reference_table (T::variationsTag));
+ var_table = Sanitizer<HVARVVAR>::lock_instance (var_blob);
+ }
+
+ inline void fini (void)
+ {
+ hb_blob_destroy (blob);
+ hb_blob_destroy (var_blob);
+ }
+
+ inline unsigned int get_advance (hb_codepoint_t glyph,
+ hb_font_t *font) const
+ {
+ if (unlikely (glyph >= num_metrics))
+ {
+ /* If num_metrics is zero, it means we don't have the metrics table
+ * for this direction: return default advance. Otherwise, it means that the
+ * glyph index is out of bound: return zero. */
+ if (num_metrics)
+ return 0;
+ else
+ return default_advance;
+ }
+
+ return table->longMetric[MIN (glyph, (uint32_t) num_advances - 1)].advance
+ + var_table->get_advance_var (glyph, font->coords, font->num_coords); // TODO Optimize?!
+ }
+
+ public:
+ bool has_font_extents;
+ unsigned short ascender;
+ unsigned short descender;
+ unsigned short line_gap;
+
+ private:
+ unsigned int num_metrics;
+ unsigned int num_advances;
+ unsigned int default_advance;
+
+ const hmtxvmtx *table;
+ hb_blob_t *blob;
+ const HVARVVAR *var_table;
+ hb_blob_t *var_blob;
+ };
+
+ protected:
LongMetric longMetric[VAR]; /* Paired advance width and leading
* bearing values for each glyph. The
* value numOfHMetrics comes from
@@ -91,11 +190,17 @@ struct _mtx
DEFINE_SIZE_ARRAY2 (0, longMetric, leadingBearingX);
};
-struct hmtx : _mtx {
+struct hmtx : hmtxvmtx<hmtx> {
static const hb_tag_t tableTag = HB_OT_TAG_hmtx;
+ static const hb_tag_t headerTag = HB_OT_TAG_hhea;
+ static const hb_tag_t variationsTag = HB_OT_TAG_HVAR;
+ static const hb_tag_t os2Tag = HB_OT_TAG_os2;
};
-struct vmtx : _mtx {
+struct vmtx : hmtxvmtx<vmtx> {
static const hb_tag_t tableTag = HB_OT_TAG_vmtx;
+ static const hb_tag_t headerTag = HB_OT_TAG_vhea;
+ static const hb_tag_t variationsTag = HB_OT_TAG_VVAR;
+ static const hb_tag_t os2Tag = HB_TAG_NONE;
};
} /* namespace OT */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh
new file mode 100644
index 0000000000..e07faca63f
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-kern-table.hh
@@ -0,0 +1,394 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_KERN_TABLE_HH
+#define HB_OT_KERN_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+namespace OT {
+
+
+/*
+ * kern -- Kerning
+ */
+
+#define HB_OT_TAG_kern HB_TAG('k','e','r','n')
+
+struct hb_glyph_pair_t
+{
+ hb_codepoint_t left;
+ hb_codepoint_t right;
+};
+
+struct KernPair
+{
+ inline int get_kerning (void) const
+ { return value; }
+
+ inline int cmp (const hb_glyph_pair_t &o) const
+ {
+ int ret = left.cmp (o.left);
+ if (ret) return ret;
+ return right.cmp (o.right);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ GlyphID left;
+ GlyphID right;
+ FWORD value;
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct KernSubTableFormat0
+{
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ {
+ hb_glyph_pair_t pair = {left, right};
+ int i = pairs.bsearch (pair);
+ if (i == -1)
+ return 0;
+ return pairs[i].get_kerning ();
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (pairs.sanitize (c));
+ }
+
+ protected:
+ BinSearchArrayOf<KernPair> pairs; /* Array of kerning pairs. */
+ public:
+ DEFINE_SIZE_ARRAY (8, pairs);
+};
+
+struct KernClassTable
+{
+ inline unsigned int get_class (hb_codepoint_t g) const { return classes[g - firstGlyph]; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (firstGlyph.sanitize (c) && classes.sanitize (c));
+ }
+
+ protected:
+ UINT16 firstGlyph; /* First glyph in class range. */
+ ArrayOf<UINT16> classes; /* Glyph classes. */
+ public:
+ DEFINE_SIZE_ARRAY (4, classes);
+};
+
+struct KernSubTableFormat2
+{
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, const char *end) const
+ {
+ unsigned int l = (this+leftClassTable).get_class (left);
+ unsigned int r = (this+leftClassTable).get_class (left);
+ unsigned int offset = l * rowWidth + r * sizeof (FWORD);
+ const FWORD *arr = &(this+array);
+ if (unlikely ((const void *) arr < (const void *) this || (const void *) arr >= (const void *) end))
+ return 0;
+ const FWORD *v = &StructAtOffset<FWORD> (arr, offset);
+ if (unlikely ((const void *) v < (const void *) arr || (const void *) (v + 1) > (const void *) end))
+ return 0;
+ return *v;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (rowWidth.sanitize (c) &&
+ leftClassTable.sanitize (c, this) &&
+ rightClassTable.sanitize (c, this) &&
+ array.sanitize (c, this));
+ }
+
+ protected:
+ UINT16 rowWidth; /* The width, in bytes, of a row in the table. */
+ OffsetTo<KernClassTable>
+ leftClassTable; /* Offset from beginning of this subtable to
+ * left-hand class table. */
+ OffsetTo<KernClassTable>
+ rightClassTable;/* Offset from beginning of this subtable to
+ * right-hand class table. */
+ OffsetTo<FWORD>
+ array; /* Offset from beginning of this subtable to
+ * the start of the kerning array. */
+ public:
+ DEFINE_SIZE_MIN (8);
+};
+
+struct KernSubTable
+{
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, const char *end, unsigned int format) const
+ {
+ switch (format) {
+ case 0: return u.format0.get_kerning (left, right);
+ case 2: return u.format2.get_kerning (left, right, end);
+ default:return 0;
+ }
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int format) const
+ {
+ TRACE_SANITIZE (this);
+ switch (format) {
+ case 0: return_trace (u.format0.sanitize (c));
+ case 2: return_trace (u.format2.sanitize (c));
+ default:return_trace (true);
+ }
+ }
+
+ protected:
+ union {
+ KernSubTableFormat0 format0;
+ KernSubTableFormat2 format2;
+ } u;
+ public:
+ DEFINE_SIZE_MIN (0);
+};
+
+
+template <typename T>
+struct KernSubTableWrapper
+{
+ /* https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern */
+ inline const T* thiz (void) const { return static_cast<const T *> (this); }
+
+ inline bool is_horizontal (void) const
+ { return (thiz()->coverage & T::COVERAGE_CHECK_FLAGS) == T::COVERAGE_CHECK_HORIZONTAL; }
+
+ inline bool is_override (void) const
+ { return bool (thiz()->coverage & T::COVERAGE_OVERRIDE_FLAG); }
+
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, const char *end) const
+ { return thiz()->subtable.get_kerning (left, right, end, thiz()->format); }
+
+ inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right, const char *end) const
+ { return is_horizontal () ? get_kerning (left, right, end) : 0; }
+
+ inline unsigned int get_size (void) const { return thiz()->length; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (thiz()) &&
+ thiz()->length >= thiz()->min_size &&
+ c->check_array (thiz(), 1, thiz()->length) &&
+ thiz()->subtable.sanitize (c, thiz()->format));
+ }
+};
+
+template <typename T>
+struct KernTable
+{
+ /* https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern */
+ inline const T* thiz (void) const { return static_cast<const T *> (this); }
+
+ inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right, unsigned int table_length) const
+ {
+ int v = 0;
+ const typename T::SubTableWrapper *st = CastP<typename T::SubTableWrapper> (thiz()->data);
+ unsigned int count = thiz()->nTables;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (st->is_override ())
+ v = 0;
+ v += st->get_h_kerning (left, right, table_length + (const char *) this);
+ st = &StructAfter<typename T::SubTableWrapper> (*st);
+ }
+ return v;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (unlikely (!c->check_struct (thiz()) ||
+ thiz()->version != T::VERSION))
+ return_trace (false);
+
+ const typename T::SubTableWrapper *st = CastP<typename T::SubTableWrapper> (thiz()->data);
+ unsigned int count = thiz()->nTables;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (unlikely (!st->sanitize (c)))
+ return_trace (false);
+ st = &StructAfter<typename T::SubTableWrapper> (*st);
+ }
+
+ return_trace (true);
+ }
+};
+
+struct KernOT : KernTable<KernOT>
+{
+ friend struct KernTable<KernOT>;
+
+ static const uint16_t VERSION = 0x0000u;
+
+ struct SubTableWrapper : KernSubTableWrapper<SubTableWrapper>
+ {
+ friend struct KernSubTableWrapper<SubTableWrapper>;
+
+ enum coverage_flags_t {
+ COVERAGE_DIRECTION_FLAG = 0x01u,
+ COVERAGE_MINIMUM_FLAG = 0x02u,
+ COVERAGE_CROSSSTREAM_FLAG = 0x04u,
+ COVERAGE_OVERRIDE_FLAG = 0x08u,
+
+ COVERAGE_VARIATION_FLAG = 0x00u, /* Not supported. */
+
+ COVERAGE_CHECK_FLAGS = 0x07u,
+ COVERAGE_CHECK_HORIZONTAL = 0x01u
+ };
+
+ protected:
+ UINT16 versionZ; /* Unused. */
+ UINT16 length; /* Length of the subtable (including this header). */
+ UINT8 format; /* Subtable format. */
+ UINT8 coverage; /* Coverage bits. */
+ KernSubTable subtable; /* Subtable data. */
+ public:
+ DEFINE_SIZE_MIN (6);
+ };
+
+ protected:
+ UINT16 version; /* Version--0x0000u */
+ UINT16 nTables; /* Number of subtables in the kerning table. */
+ UINT8 data[VAR];
+ public:
+ DEFINE_SIZE_ARRAY (4, data);
+};
+
+struct KernAAT : KernTable<KernAAT>
+{
+ friend struct KernTable<KernAAT>;
+
+ static const uint32_t VERSION = 0x00010000u;
+
+ struct SubTableWrapper : KernSubTableWrapper<SubTableWrapper>
+ {
+ friend struct KernSubTableWrapper<SubTableWrapper>;
+
+ enum coverage_flags_t {
+ COVERAGE_DIRECTION_FLAG = 0x80u,
+ COVERAGE_CROSSSTREAM_FLAG = 0x40u,
+ COVERAGE_VARIATION_FLAG = 0x20u,
+
+ COVERAGE_OVERRIDE_FLAG = 0x00u, /* Not supported. */
+
+ COVERAGE_CHECK_FLAGS = 0xE0u,
+ COVERAGE_CHECK_HORIZONTAL = 0x00u
+ };
+
+ protected:
+ UINT32 length; /* Length of the subtable (including this header). */
+ UINT8 coverage; /* Coverage bits. */
+ UINT8 format; /* Subtable format. */
+ UINT16 tupleIndex; /* The tuple index (used for variations fonts).
+ * This value specifies which tuple this subtable covers. */
+ KernSubTable subtable; /* Subtable data. */
+ public:
+ DEFINE_SIZE_MIN (8);
+ };
+
+ protected:
+ UINT32 version; /* Version--0x00010000u */
+ UINT32 nTables; /* Number of subtables in the kerning table. */
+ UINT8 data[VAR];
+ public:
+ DEFINE_SIZE_ARRAY (8, data);
+};
+
+struct kern
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_kern;
+
+ inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right, unsigned int table_length) const
+ {
+ switch (u.major) {
+ case 0: return u.ot.get_h_kerning (left, right, table_length);
+ case 1: return u.aat.get_h_kerning (left, right, table_length);
+ default:return 0;
+ }
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!u.major.sanitize (c)) return_trace (false);
+ switch (u.major) {
+ case 0: return_trace (u.ot.sanitize (c));
+ case 1: return_trace (u.aat.sanitize (c));
+ default:return_trace (true);
+ }
+ }
+
+ struct accelerator_t
+ {
+ inline void init (hb_face_t *face)
+ {
+ blob = Sanitizer<kern>::sanitize (face->reference_table (HB_OT_TAG_kern));
+ table = Sanitizer<kern>::lock_instance (blob);
+ table_length = hb_blob_get_length (blob);
+ }
+ inline void fini (void)
+ {
+ hb_blob_destroy (blob);
+ }
+
+ inline int get_h_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ { return table->get_h_kerning (left, right, table_length); }
+
+ private:
+ hb_blob_t *blob;
+ const kern *table;
+ unsigned int table_length;
+ };
+
+ protected:
+ union {
+ UINT16 major;
+ KernOT ot;
+ KernAAT aat;
+ } u;
+ public:
+ DEFINE_SIZE_UNION (2, major);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_KERN_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common-private.hh
index 62ca7a348e..5e699e1967 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common-private.hh
@@ -29,6 +29,8 @@
#ifndef HB_OT_LAYOUT_COMMON_PRIVATE_HH
#define HB_OT_LAYOUT_COMMON_PRIVATE_HH
+#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-ot-layout-private.hh"
#include "hb-open-type-private.hh"
#include "hb-set-private.hh"
@@ -45,12 +47,6 @@
namespace OT {
-#define TRACE_DISPATCH(this, format) \
- hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "format %d", (int) format);
-
-
#define NOT_COVERED ((unsigned int) -1)
@@ -159,13 +155,13 @@ struct RangeRecord
}
template <typename set_t>
- inline void add_coverage (set_t *glyphs) const {
- glyphs->add_range (start, end);
+ inline bool add_coverage (set_t *glyphs) const {
+ return glyphs->add_range (start, end);
}
GlyphID start; /* First GlyphID in the range */
GlyphID end; /* Last GlyphID in the range */
- USHORT value; /* Value */
+ UINT16 value; /* Value */
public:
DEFINE_SIZE_STATIC (6);
};
@@ -179,7 +175,7 @@ struct IndexArray : ArrayOf<Index>
unsigned int *_indexes /* OUT */) const
{
if (_count) {
- const USHORT *arr = this->sub_array (start_offset, _count);
+ const UINT16 *arr = this->sub_array (start_offset, _count);
unsigned int count = *_count;
for (unsigned int i = 0; i < count; i++)
_indexes[i] = arr[i];
@@ -214,15 +210,15 @@ struct LangSys
}
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<LangSys>::sanitize_closure_t * = NULL) const
+ const Record<LangSys>::sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (c->check_struct (this) && featureIndex.sanitize (c));
}
- Offset<> lookupOrderZ; /* = Null (reserved for an offset to a
+ Offset16 lookupOrderZ; /* = Null (reserved for an offset to a
* reordering table) */
- USHORT reqFeatureIndex;/* Index of a feature required for this
+ UINT16 reqFeatureIndex;/* Index of a feature required for this
* language system--if no required features
* = 0xFFFFu */
IndexArray featureIndex; /* Array of indices into the FeatureList */
@@ -254,7 +250,7 @@ struct Script
inline const LangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<Script>::sanitize_closure_t * = NULL) const
+ const Record<Script>::sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (defaultLangSys.sanitize (c, this) && langSys.sanitize (c, this));
@@ -347,12 +343,12 @@ struct FeatureParamsSize
return_trace (true);
}
- USHORT designSize; /* Represents the design size in 720/inch
+ UINT16 designSize; /* Represents the design size in 720/inch
* units (decipoints). The design size entry
* must be non-zero. When there is a design
* size but no recommended size range, the
* rest of the array will consist of zeros. */
- USHORT subfamilyID; /* Has no independent meaning, but serves
+ UINT16 subfamilyID; /* Has no independent meaning, but serves
* as an identifier that associates fonts
* in a subfamily. All fonts which share a
* Preferred or Font Family name and which
@@ -362,7 +358,7 @@ struct FeatureParamsSize
* same subfamily value. If this value is
* zero, the remaining fields in the array
* will be ignored. */
- USHORT subfamilyNameID;/* If the preceding value is non-zero, this
+ UINT16 subfamilyNameID;/* If the preceding value is non-zero, this
* value must be set in the range 256 - 32767
* (inclusive). It records the value of a
* field in the name table, which must
@@ -376,10 +372,10 @@ struct FeatureParamsSize
* subfamily in a menu. Applications will
* choose the appropriate version based on
* their selection criteria. */
- USHORT rangeStart; /* Large end of the recommended usage range
+ UINT16 rangeStart; /* Large end of the recommended usage range
* (inclusive), stored in 720/inch units
* (decipoints). */
- USHORT rangeEnd; /* Small end of the recommended usage range
+ UINT16 rangeEnd; /* Small end of the recommended usage range
(exclusive), stored in 720/inch units
* (decipoints). */
public:
@@ -397,12 +393,12 @@ struct FeatureParamsStylisticSet
return_trace (c->check_struct (this));
}
- USHORT version; /* (set to 0): This corresponds to a “minor”
+ UINT16 version; /* (set to 0): This corresponds to a “minor”
* version number. Additional data may be
* added to the end of this Feature Parameters
* table in the future. */
- USHORT uiNameID; /* The 'name' table name ID that specifies a
+ UINT16 uiNameID; /* The 'name' table name ID that specifies a
* string (or strings, for multiple languages)
* for a user-interface label for this
* feature. The values of uiLabelNameId and
@@ -430,25 +426,25 @@ struct FeatureParamsCharacterVariants
characters.sanitize (c));
}
- USHORT format; /* Format number is set to 0. */
- USHORT featUILableNameID; /* The ‘name’ table name ID that
+ UINT16 format; /* Format number is set to 0. */
+ UINT16 featUILableNameID; /* The ‘name’ table name ID that
* specifies a string (or strings,
* for multiple languages) for a
* user-interface label for this
- * feature. (May be NULL.) */
- USHORT featUITooltipTextNameID;/* The ‘name’ table name ID that
+ * feature. (May be nullptr.) */
+ UINT16 featUITooltipTextNameID;/* The ‘name’ table name ID that
* specifies a string (or strings,
* for multiple languages) that an
* application can use for tooltip
* text for this feature. (May be
- * NULL.) */
- USHORT sampleTextNameID; /* The ‘name’ table name ID that
+ * nullptr.) */
+ UINT16 sampleTextNameID; /* The ‘name’ table name ID that
* specifies sample text that
* illustrates the effect of this
- * feature. (May be NULL.) */
- USHORT numNamedParameters; /* Number of named parameters. (May
+ * feature. (May be nullptr.) */
+ UINT16 numNamedParameters; /* Number of named parameters. (May
* be zero.) */
- USHORT firstParamUILabelNameID;/* The first ‘name’ table name ID
+ UINT16 firstParamUILabelNameID;/* The first ‘name’ table name ID
* used to specify strings for
* user-interface labels for the
* feature parameters. (Must be zero
@@ -507,7 +503,7 @@ struct Feature
{ return this+featureParams; }
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<Feature>::sanitize_closure_t *closure = NULL) const
+ const Record<Feature>::sanitize_closure_t *closure = nullptr) const
{
TRACE_SANITIZE (this);
if (unlikely (!(c->check_struct (this) && lookupIndex.sanitize (c))))
@@ -566,7 +562,7 @@ struct Feature
typedef RecordListOf<Feature> FeatureList;
-struct LookupFlag : USHORT
+struct LookupFlag : UINT16
{
enum Flags {
RightToLeft = 0x0001u,
@@ -612,7 +608,7 @@ struct Lookup
unsigned int flag = lookupFlag;
if (unlikely (flag & LookupFlag::UseMarkFilteringSet))
{
- const USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
+ const UINT16 &markFilteringSet = StructAfter<UINT16> (subTable);
flag += (markFilteringSet << 16);
}
return flag;
@@ -644,7 +640,7 @@ struct Lookup
if (unlikely (!subTable.serialize (c, num_subtables))) return_trace (false);
if (lookupFlag & LookupFlag::UseMarkFilteringSet)
{
- USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
+ UINT16 &markFilteringSet = StructAfter<UINT16> (subTable);
markFilteringSet.set (lookup_props >> 16);
}
return_trace (true);
@@ -657,18 +653,18 @@ struct Lookup
if (!(c->check_struct (this) && subTable.sanitize (c))) return_trace (false);
if (lookupFlag & LookupFlag::UseMarkFilteringSet)
{
- const USHORT &markFilteringSet = StructAfter<USHORT> (subTable);
+ const UINT16 &markFilteringSet = StructAfter<UINT16> (subTable);
if (!markFilteringSet.sanitize (c)) return_trace (false);
}
return_trace (true);
}
private:
- USHORT lookupType; /* Different enumerations for GSUB and GPOS */
- USHORT lookupFlag; /* Lookup qualifiers */
- ArrayOf<Offset<> >
+ UINT16 lookupType; /* Different enumerations for GSUB and GPOS */
+ UINT16 lookupFlag; /* Lookup qualifiers */
+ ArrayOf<Offset16>
subTable; /* Array of SubTables */
- USHORT markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets
+ UINT16 markFilteringSetX[VAR]; /* Index (base 0) into GDEF mark glyph sets
* structure. This field is only present if bit
* UseMarkFilteringSet of lookup flags is set. */
public:
@@ -690,7 +686,7 @@ struct CoverageFormat1
inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
{
int i = glyphArray.bsearch (glyph_id);
- ASSERT_STATIC (((unsigned int) -1) == NOT_COVERED);
+ static_assert ((((unsigned int) -1) == NOT_COVERED), "");
return i;
}
@@ -719,10 +715,8 @@ struct CoverageFormat1
}
template <typename set_t>
- inline void add_coverage (set_t *glyphs) const {
- unsigned int count = glyphArray.len;
- for (unsigned int i = 0; i < count; i++)
- glyphs->add (glyphArray[i]);
+ inline bool add_coverage (set_t *glyphs) const {
+ return glyphs->add_sorted_array (glyphArray.array, glyphArray.len);
}
public:
@@ -741,7 +735,7 @@ struct CoverageFormat1
private:
protected:
- USHORT coverageFormat; /* Format identifier--format = 1 */
+ UINT16 coverageFormat; /* Format identifier--format = 1 */
SortedArrayOf<GlyphID>
glyphArray; /* Array of GlyphIDs--in numerical order */
public:
@@ -821,10 +815,12 @@ struct CoverageFormat2
}
template <typename set_t>
- inline void add_coverage (set_t *glyphs) const {
+ inline bool add_coverage (set_t *glyphs) const {
unsigned int count = rangeRecord.len;
for (unsigned int i = 0; i < count; i++)
- rangeRecord[i].add_coverage (glyphs);
+ if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
+ return false;
+ return true;
}
public:
@@ -864,7 +860,7 @@ struct CoverageFormat2
private:
protected:
- USHORT coverageFormat; /* Format identifier--format = 2 */
+ UINT16 coverageFormat; /* Format identifier--format = 2 */
SortedArrayOf<RangeRecord>
rangeRecord; /* Array of glyph ranges--ordered by
* Start GlyphID. rangeCount entries
@@ -931,17 +927,19 @@ struct Coverage
}
}
+ /* Might return false if array looks unsorted.
+ * Used for faster rejection of corrupt data. */
template <typename set_t>
- inline void add_coverage (set_t *glyphs) const {
+ inline bool add_coverage (set_t *glyphs) const {
switch (u.format) {
- case 1: u.format1.add_coverage (glyphs); break;
- case 2: u.format2.add_coverage (glyphs); break;
- default: break;
+ case 1: return u.format1.add_coverage (glyphs);
+ case 2: return u.format2.add_coverage (glyphs);
+ default:return false;
}
}
struct Iter {
- Iter (void) : format (0) {};
+ Iter (void) : format (0), u () {};
inline void init (const Coverage &c_) {
format = c_.u.format;
switch (format) {
@@ -982,14 +980,14 @@ struct Coverage
private:
unsigned int format;
union {
+ CoverageFormat2::Iter format2; /* Put this one first since it's larger; helps shut up compiler. */
CoverageFormat1::Iter format1;
- CoverageFormat2::Iter format2;
} u;
};
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
CoverageFormat1 format1;
CoverageFormat2 format2;
} u;
@@ -1022,11 +1020,36 @@ struct ClassDefFormat1
}
template <typename set_t>
- inline void add_class (set_t *glyphs, unsigned int klass) const {
+ inline bool add_coverage (set_t *glyphs) const {
+ unsigned int start = 0;
unsigned int count = classValue.len;
for (unsigned int i = 0; i < count; i++)
+ {
+ if (classValue[i])
+ continue;
+
+ if (start != i)
+ if (unlikely (!glyphs->add_range (startGlyph + start, startGlyph + i)))
+ return false;
+
+ start = i + 1;
+ }
+ if (start != count)
+ if (unlikely (!glyphs->add_range (startGlyph + start, startGlyph + count)))
+ return false;
+
+ return true;
+ }
+
+ template <typename set_t>
+ inline bool add_class (set_t *glyphs, unsigned int klass) const {
+ unsigned int count = classValue.len;
+ for (unsigned int i = 0; i < count; i++)
+ {
if (classValue[i] == klass)
glyphs->add (startGlyph + i);
+ }
+ return true;
}
inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
@@ -1051,9 +1074,9 @@ struct ClassDefFormat1
}
protected:
- USHORT classFormat; /* Format identifier--format = 1 */
+ UINT16 classFormat; /* Format identifier--format = 1 */
GlyphID startGlyph; /* First GlyphID of the classValueArray */
- ArrayOf<USHORT>
+ ArrayOf<UINT16>
classValue; /* Array of Class Values--one per GlyphID */
public:
DEFINE_SIZE_ARRAY (6, classValue);
@@ -1079,11 +1102,25 @@ struct ClassDefFormat2
}
template <typename set_t>
- inline void add_class (set_t *glyphs, unsigned int klass) const {
+ inline bool add_coverage (set_t *glyphs) const {
unsigned int count = rangeRecord.len;
for (unsigned int i = 0; i < count; i++)
+ if (rangeRecord[i].value)
+ if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
+ return false;
+ return true;
+ }
+
+ template <typename set_t>
+ inline bool add_class (set_t *glyphs, unsigned int klass) const {
+ unsigned int count = rangeRecord.len;
+ for (unsigned int i = 0; i < count; i++)
+ {
if (rangeRecord[i].value == klass)
- rangeRecord[i].add_coverage (glyphs);
+ if (unlikely (!rangeRecord[i].add_coverage (glyphs)))
+ return false;
+ }
+ return true;
}
inline bool intersects_class (const hb_set_t *glyphs, unsigned int klass) const {
@@ -1111,7 +1148,7 @@ struct ClassDefFormat2
}
protected:
- USHORT classFormat; /* Format identifier--format = 2 */
+ UINT16 classFormat; /* Format identifier--format = 2 */
SortedArrayOf<RangeRecord>
rangeRecord; /* Array of glyph ranges--ordered by
* Start GlyphID */
@@ -1141,11 +1178,25 @@ struct ClassDef
}
}
- inline void add_class (hb_set_t *glyphs, unsigned int klass) const {
+ /* Might return false if array looks unsorted.
+ * Used for faster rejection of corrupt data. */
+ template <typename set_t>
+ inline bool add_coverage (set_t *glyphs) const {
+ switch (u.format) {
+ case 1: return u.format1.add_coverage (glyphs);
+ case 2: return u.format2.add_coverage (glyphs);
+ default:return false;
+ }
+ }
+
+ /* Might return false if array looks unsorted.
+ * Used for faster rejection of corrupt data. */
+ template <typename set_t>
+ inline bool add_class (set_t *glyphs, unsigned int klass) const {
switch (u.format) {
- case 1: u.format1.add_class (glyphs, klass); return;
- case 2: u.format2.add_class (glyphs, klass); return;
- default:return;
+ case 1: return u.format1.add_class (glyphs, klass);
+ case 2: return u.format2.add_class (glyphs, klass);
+ default:return false;
}
}
@@ -1159,7 +1210,7 @@ struct ClassDef
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
ClassDefFormat1 format1;
ClassDefFormat2 format2;
} u;
@@ -1244,8 +1295,8 @@ struct VarRegionList
}
protected:
- USHORT axisCount;
- USHORT regionCount;
+ UINT16 axisCount;
+ UINT16 regionCount;
VarRegionAxis axesZ[VAR];
public:
DEFINE_SIZE_ARRAY (4, axesZ);
@@ -1269,13 +1320,13 @@ struct VarData
unsigned int count = regionIndices.len;
unsigned int scount = shortCount;
- const BYTE *bytes = &StructAfter<BYTE> (regionIndices);
- const BYTE *row = bytes + inner * (scount + count);
+ const UINT8 *bytes = &StructAfter<UINT8> (regionIndices);
+ const UINT8 *row = bytes + inner * (scount + count);
float delta = 0.;
unsigned int i = 0;
- const SHORT *scursor = reinterpret_cast<const SHORT *> (row);
+ const INT16 *scursor = reinterpret_cast<const INT16 *> (row);
for (; i < scount; i++)
{
float scalar = regions.evaluate (regionIndices.array[i], coords, coord_count);
@@ -1297,15 +1348,15 @@ struct VarData
return_trace (c->check_struct (this) &&
regionIndices.sanitize(c) &&
shortCount <= regionIndices.len &&
- c->check_array (&StructAfter<BYTE> (regionIndices),
+ c->check_array (&StructAfter<UINT8> (regionIndices),
get_row_size (), itemCount));
}
protected:
- USHORT itemCount;
- USHORT shortCount;
- ArrayOf<USHORT> regionIndices;
- BYTE bytesX[VAR];
+ UINT16 itemCount;
+ UINT16 shortCount;
+ ArrayOf<UINT16> regionIndices;
+ UINT8 bytesX[VAR];
public:
DEFINE_SIZE_ARRAY2 (6, regionIndices, bytesX);
};
@@ -1323,6 +1374,14 @@ struct VariationStore
this+regions);
}
+ inline float get_delta (unsigned int index,
+ int *coords, unsigned int coord_count) const
+ {
+ unsigned int outer = index >> 16;
+ unsigned int inner = index & 0xFFFF;
+ return get_delta (outer, inner, coords, coord_count);
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -1333,9 +1392,9 @@ struct VariationStore
}
protected:
- USHORT format;
- OffsetTo<VarRegionList, ULONG> regions;
- OffsetArrayOf<VarData, ULONG> dataSets;
+ UINT16 format;
+ LOffsetTo<VarRegionList> regions;
+ OffsetArrayOf<VarData, UINT32> dataSets;
public:
DEFINE_SIZE_ARRAY (8, dataSets);
};
@@ -1362,8 +1421,8 @@ struct ConditionFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
- USHORT axisIndex;
+ UINT16 format; /* Format identifier--format = 1 */
+ UINT16 axisIndex;
F2DOT14 filterRangeMinValue;
F2DOT14 filterRangeMaxValue;
public:
@@ -1392,7 +1451,7 @@ struct Condition
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
ConditionFormat1 format1;
} u;
public:
@@ -1417,7 +1476,7 @@ struct ConditionSet
}
protected:
- OffsetArrayOf<Condition, ULONG> conditions;
+ OffsetArrayOf<Condition, UINT32> conditions;
public:
DEFINE_SIZE_ARRAY (2, conditions);
};
@@ -1433,8 +1492,8 @@ struct FeatureTableSubstitutionRecord
}
protected:
- USHORT featureIndex;
- OffsetTo<Feature, ULONG> feature;
+ UINT16 featureIndex;
+ LOffsetTo<Feature> feature;
public:
DEFINE_SIZE_STATIC (6);
};
@@ -1450,7 +1509,7 @@ struct FeatureTableSubstitution
if (record.featureIndex == feature_index)
return &(this+record.feature);
}
- return NULL;
+ return nullptr;
}
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -1481,9 +1540,9 @@ struct FeatureVariationRecord
}
protected:
- OffsetTo<ConditionSet, ULONG>
+ LOffsetTo<ConditionSet>
conditions;
- OffsetTo<FeatureTableSubstitution, ULONG>
+ LOffsetTo<FeatureTableSubstitution>
substitutions;
public:
DEFINE_SIZE_STATIC (8);
@@ -1527,7 +1586,7 @@ struct FeatureVariations
protected:
FixedVersion<> version; /* Version--0x00010000u */
- ArrayOf<FeatureVariationRecord, ULONG>
+ LArrayOf<FeatureVariationRecord>
varRecords;
public:
DEFINE_SIZE_ARRAY (8, varRecords);
@@ -1553,8 +1612,8 @@ struct HintingDevice
inline unsigned int get_size (void) const
{
unsigned int f = deltaFormat;
- if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * USHORT::static_size;
- return USHORT::static_size * (4 + ((endSize - startSize) >> (4 - f)));
+ if (unlikely (f < 1 || f > 3 || startSize > endSize)) return 3 * UINT16::static_size;
+ return UINT16::static_size * (4 + ((endSize - startSize) >> (4 - f)));
}
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -1599,14 +1658,14 @@ struct HintingDevice
}
protected:
- USHORT startSize; /* Smallest size to correct--in ppem */
- USHORT endSize; /* Largest size to correct--in ppem */
- USHORT deltaFormat; /* Format of DeltaValue array data: 1, 2, or 3
+ UINT16 startSize; /* Smallest size to correct--in ppem */
+ UINT16 endSize; /* Largest size to correct--in ppem */
+ UINT16 deltaFormat; /* Format of DeltaValue array data: 1, 2, or 3
* 1 Signed 2-bit value, 8 values per uint16
* 2 Signed 4-bit value, 4 values per uint16
* 3 Signed 8-bit value, 2 values per uint16
*/
- USHORT deltaValue[VAR]; /* Array of compressed data */
+ UINT16 deltaValue[VAR]; /* Array of compressed data */
public:
DEFINE_SIZE_ARRAY (6, deltaValue);
};
@@ -1637,9 +1696,9 @@ struct VariationDevice
}
protected:
- USHORT outerIndex;
- USHORT innerIndex;
- USHORT deltaFormat; /* Format identifier for this table: 0x0x8000 */
+ UINT16 outerIndex;
+ UINT16 innerIndex;
+ UINT16 deltaFormat; /* Format identifier for this table: 0x0x8000 */
public:
DEFINE_SIZE_STATIC (6);
};
@@ -1647,10 +1706,10 @@ struct VariationDevice
struct DeviceHeader
{
protected:
- USHORT reserved1;
- USHORT reserved2;
+ UINT16 reserved1;
+ UINT16 reserved2;
public:
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
public:
DEFINE_SIZE_STATIC (6);
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gdef-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gdef-table.hh
index b70cbb7a38..eed46dd672 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gdef-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gdef-table.hh
@@ -41,7 +41,7 @@ namespace OT {
* Attachment List Table
*/
-typedef ArrayOf<USHORT> AttachPoint; /* Array of contour point indices--in
+typedef ArrayOf<UINT16> AttachPoint; /* Array of contour point indices--in
* increasing numerical order */
struct AttachList
@@ -62,7 +62,7 @@ struct AttachList
const AttachPoint &points = this+attachPoint[index];
if (point_count) {
- const USHORT *array = points.sub_array (start_offset, point_count);
+ const UINT16 *array = points.sub_array (start_offset, point_count);
unsigned int count = *point_count;
for (unsigned int i = 0; i < count; i++)
point_array[i] = array[i];
@@ -109,8 +109,8 @@ struct CaretValueFormat1
}
protected:
- USHORT caretValueFormat; /* Format identifier--format = 1 */
- SHORT coordinate; /* X or Y value, in design units */
+ UINT16 caretValueFormat; /* Format identifier--format = 1 */
+ INT16 coordinate; /* X or Y value, in design units */
public:
DEFINE_SIZE_STATIC (4);
};
@@ -136,8 +136,8 @@ struct CaretValueFormat2
}
protected:
- USHORT caretValueFormat; /* Format identifier--format = 2 */
- USHORT caretValuePoint; /* Contour point index on glyph */
+ UINT16 caretValueFormat; /* Format identifier--format = 2 */
+ UINT16 caretValuePoint; /* Contour point index on glyph */
public:
DEFINE_SIZE_STATIC (4);
};
@@ -160,8 +160,8 @@ struct CaretValueFormat3
}
protected:
- USHORT caretValueFormat; /* Format identifier--format = 3 */
- SHORT coordinate; /* X or Y value, in design units */
+ UINT16 caretValueFormat; /* Format identifier--format = 3 */
+ INT16 coordinate; /* X or Y value, in design units */
OffsetTo<Device>
deviceTable; /* Offset to Device table for X or Y
* value--from beginning of CaretValue
@@ -199,7 +199,7 @@ struct CaretValue
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
CaretValueFormat1 format1;
CaretValueFormat2 format2;
CaretValueFormat3 format3;
@@ -294,8 +294,8 @@ struct MarkGlyphSetsFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
- ArrayOf<OffsetTo<Coverage, ULONG> >
+ UINT16 format; /* Format identifier--format = 1 */
+ ArrayOf<LOffsetTo<Coverage> >
coverage; /* Array of long offsets to mark set
* coverage tables */
public:
@@ -324,7 +324,7 @@ struct MarkGlyphSets
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
MarkGlyphSetsFormat1 format1;
} u;
public:
@@ -404,9 +404,9 @@ struct GDEF
{
unsigned int klass = get_glyph_class (glyph);
- ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH == (unsigned int) LookupFlag::IgnoreBaseGlyphs);
- ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE == (unsigned int) LookupFlag::IgnoreLigatures);
- ASSERT_STATIC ((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_MARK == (unsigned int) LookupFlag::IgnoreMarks);
+ static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_BASE_GLYPH == (unsigned int) LookupFlag::IgnoreBaseGlyphs), "");
+ static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_LIGATURE == (unsigned int) LookupFlag::IgnoreLigatures), "");
+ static_assert (((unsigned int) HB_OT_LAYOUT_GLYPH_PROPS_MARK == (unsigned int) LookupFlag::IgnoreMarks), "");
switch (klass) {
default: return 0;
@@ -443,7 +443,7 @@ struct GDEF
* definitions--from beginning of GDEF
* header (may be NULL). Introduced
* in version 0x00010002. */
- OffsetTo<VariationStore, ULONG>
+ LOffsetTo<VariationStore>
varStore; /* Offset to the table of Item Variation
* Store--from beginning of GDEF
* header (may be NULL). Introduced
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh
index 952fd60fec..b344d793c7 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh
@@ -51,11 +51,11 @@ enum attach_type_t {
/* Shared Tables: ValueRecord, Anchor Table, and MarkArray */
-typedef USHORT Value;
+typedef UINT16 Value;
typedef Value ValueRecord[VAR];
-struct ValueFormat : USHORT
+struct ValueFormat : UINT16
{
enum Flags {
xPlacement = 0x0001u, /* Includes horizontal adjustment for placement */
@@ -74,14 +74,14 @@ struct ValueFormat : USHORT
/* All fields are options. Only those available advance the value pointer. */
#if 0
- SHORT xPlacement; /* Horizontal adjustment for
+ INT16 xPlacement; /* Horizontal adjustment for
* placement--in design units */
- SHORT yPlacement; /* Vertical adjustment for
+ INT16 yPlacement; /* Vertical adjustment for
* placement--in design units */
- SHORT xAdvance; /* Horizontal adjustment for
+ INT16 xAdvance; /* Horizontal adjustment for
* advance--in design units (only used
* for horizontal writing) */
- SHORT yAdvance; /* Vertical adjustment for advance--in
+ INT16 yAdvance; /* Vertical adjustment for advance--in
* design units (only used for vertical
* writing) */
Offset xPlaDevice; /* Offset to Device table for
@@ -178,8 +178,8 @@ struct ValueFormat : USHORT
static inline const OffsetTo<Device>& get_device (const Value* value)
{ return *CastP<OffsetTo<Device> > (value); }
- static inline const SHORT& get_short (const Value* value)
- { return *CastP<SHORT> (value); }
+ static inline const INT16& get_short (const Value* value)
+ { return *CastP<INT16> (value); }
public:
@@ -247,9 +247,9 @@ struct AnchorFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
- SHORT xCoordinate; /* Horizontal value--in design units */
- SHORT yCoordinate; /* Vertical value--in design units */
+ UINT16 format; /* Format identifier--format = 1 */
+ INT16 xCoordinate; /* Horizontal value--in design units */
+ INT16 yCoordinate; /* Vertical value--in design units */
public:
DEFINE_SIZE_STATIC (6);
};
@@ -278,10 +278,10 @@ struct AnchorFormat2
}
protected:
- USHORT format; /* Format identifier--format = 2 */
- SHORT xCoordinate; /* Horizontal value--in design units */
- SHORT yCoordinate; /* Vertical value--in design units */
- USHORT anchorPoint; /* Index to glyph contour point */
+ UINT16 format; /* Format identifier--format = 2 */
+ INT16 xCoordinate; /* Horizontal value--in design units */
+ INT16 yCoordinate; /* Vertical value--in design units */
+ UINT16 anchorPoint; /* Index to glyph contour point */
public:
DEFINE_SIZE_STATIC (8);
};
@@ -308,9 +308,9 @@ struct AnchorFormat3
}
protected:
- USHORT format; /* Format identifier--format = 3 */
- SHORT xCoordinate; /* Horizontal value--in design units */
- SHORT yCoordinate; /* Vertical value--in design units */
+ UINT16 format; /* Format identifier--format = 3 */
+ INT16 xCoordinate; /* Horizontal value--in design units */
+ INT16 yCoordinate; /* Vertical value--in design units */
OffsetTo<Device>
xDeviceTable; /* Offset to Device table for X
* coordinate-- from beginning of
@@ -351,7 +351,7 @@ struct Anchor
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
AnchorFormat1 format1;
AnchorFormat2 format2;
AnchorFormat3 format3;
@@ -382,7 +382,7 @@ struct AnchorMatrix
return_trace (true);
}
- USHORT rows; /* Number of rows */
+ UINT16 rows; /* Number of rows */
protected:
OffsetTo<Anchor>
matrixZ[VAR]; /* Matrix of offsets to Anchor tables--
@@ -403,7 +403,7 @@ struct MarkRecord
}
protected:
- USHORT klass; /* Class defined for this mark */
+ UINT16 klass; /* Class defined for this mark */
OffsetTo<Anchor>
markAnchor; /* Offset to Anchor table--from
* beginning of MarkArray table */
@@ -432,6 +432,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
hb_position_t mark_x, mark_y, base_x, base_y;
+ buffer->unsafe_to_break (glyph_pos, buffer->idx);
mark_anchor.get_anchor (c, buffer->cur().codepoint, &mark_x, &mark_y);
glyph_anchor.get_anchor (c, buffer->info[glyph_pos].codepoint, &base_x, &base_y);
@@ -461,7 +462,7 @@ struct SinglePosFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage).add_coverage (c->input);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -491,7 +492,7 @@ struct SinglePosFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
@@ -509,7 +510,7 @@ struct SinglePosFormat2
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage).add_coverage (c->input);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -543,13 +544,13 @@ struct SinglePosFormat2
}
protected:
- USHORT format; /* Format identifier--format = 2 */
+ UINT16 format; /* Format identifier--format = 2 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
ValueFormat valueFormat; /* Defines the types of data in the
* ValueRecord */
- USHORT valueCount; /* Number of ValueRecords */
+ UINT16 valueCount; /* Number of ValueRecords */
ValueRecord values; /* Array of ValueRecords--positioning
* values applied to glyphs */
public:
@@ -572,7 +573,7 @@ struct SinglePos
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
SinglePosFormat1 format1;
SinglePosFormat2 format2;
} u;
@@ -603,15 +604,10 @@ struct PairSet
TRACE_COLLECT_GLYPHS (this);
unsigned int len1 = valueFormats[0].get_len ();
unsigned int len2 = valueFormats[1].get_len ();
- unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
+ unsigned int record_size = UINT16::static_size * (1 + len1 + len2);
const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
- unsigned int count = len;
- for (unsigned int i = 0; i < count; i++)
- {
- c->input->add (record->secondGlyph);
- record = &StructAtOffset<PairValueRecord> (record, record_size);
- }
+ c->input->add_array (&record->secondGlyph, len, record_size);
}
inline bool apply (hb_apply_context_t *c,
@@ -622,7 +618,7 @@ struct PairSet
hb_buffer_t *buffer = c->buffer;
unsigned int len1 = valueFormats[0].get_len ();
unsigned int len2 = valueFormats[1].get_len ();
- unsigned int record_size = USHORT::static_size * (1 + len1 + len2);
+ unsigned int record_size = UINT16::static_size * (1 + len1 + len2);
const PairValueRecord *record_array = CastP<PairValueRecord> (arrayZ);
unsigned int count = len;
@@ -643,6 +639,7 @@ struct PairSet
min = mid + 1;
else
{
+ buffer->unsafe_to_break (buffer->idx, pos + 1);
valueFormats[0].apply_value (c, this, &record->values[0], buffer->cur_pos());
valueFormats[1].apply_value (c, this, &record->values[len1], buffer->pos[pos]);
if (len2)
@@ -666,7 +663,7 @@ struct PairSet
{
TRACE_SANITIZE (this);
if (!(c->check_struct (this)
- && c->check_array (arrayZ, USHORT::static_size * closure->stride, len))) return_trace (false);
+ && c->check_array (arrayZ, UINT16::static_size * closure->stride, len))) return_trace (false);
unsigned int count = len;
const PairValueRecord *record = CastP<PairValueRecord> (arrayZ);
@@ -675,8 +672,8 @@ struct PairSet
}
protected:
- USHORT len; /* Number of PairValueRecords */
- USHORT arrayZ[VAR]; /* Array of PairValueRecords--ordered
+ UINT16 len; /* Number of PairValueRecords */
+ UINT16 arrayZ[VAR]; /* Array of PairValueRecords--ordered
* by GlyphID of the second glyph */
public:
DEFINE_SIZE_ARRAY (2, arrayZ);
@@ -687,7 +684,7 @@ struct PairPosFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage).add_coverage (c->input);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
unsigned int count = pairSet.len;
for (unsigned int i = 0; i < count; i++)
(this+pairSet[i]).collect_glyphs (c, valueFormat);
@@ -731,7 +728,7 @@ struct PairPosFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
@@ -753,17 +750,8 @@ struct PairPosFormat2
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage).add_coverage (c->input);
-
- unsigned int count1 = class1Count;
- const ClassDef &klass1 = this+classDef1;
- for (unsigned int i = 0; i < count1; i++)
- klass1.add_class (c->input, i);
-
- unsigned int count2 = class2Count;
- const ClassDef &klass2 = this+classDef2;
- for (unsigned int i = 0; i < count2; i++)
- klass2.add_class (c->input, i);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
+ if (unlikely (!(this+classDef2).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -790,6 +778,7 @@ struct PairPosFormat2
unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint);
if (unlikely (klass1 >= class1Count || klass2 >= class2Count)) return_trace (false);
+ buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
valueFormat1.apply_value (c, this, v, buffer->cur_pos());
valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
@@ -820,7 +809,7 @@ struct PairPosFormat2
}
protected:
- USHORT format; /* Format identifier--format = 2 */
+ UINT16 format; /* Format identifier--format = 2 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
@@ -838,9 +827,9 @@ struct PairPosFormat2
classDef2; /* Offset to ClassDef table--from
* beginning of PairPos subtable--for
* the second glyph of the pair */
- USHORT class1Count; /* Number of classes in ClassDef1
+ UINT16 class1Count; /* Number of classes in ClassDef1
* table--includes Class0 */
- USHORT class2Count; /* Number of classes in ClassDef2
+ UINT16 class2Count; /* Number of classes in ClassDef2
* table--includes Class0 */
ValueRecord values; /* Matrix of value pairs:
* class1-major, class2-minor,
@@ -865,7 +854,7 @@ struct PairPos
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
PairPosFormat1 format1;
PairPosFormat2 format2;
} u;
@@ -903,7 +892,7 @@ struct CursivePosFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage).add_coverage (c->input);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -929,6 +918,7 @@ struct CursivePosFormat1
unsigned int i = buffer->idx;
unsigned int j = skippy_iter.idx;
+ buffer->unsafe_to_break (i, j);
hb_position_t entry_x, entry_y, exit_x, exit_y;
(this+this_record.exitAnchor).get_anchor (c, buffer->info[i].codepoint, &exit_x, &exit_y);
(this+next_record.entryAnchor).get_anchor (c, buffer->info[j].codepoint, &entry_x, &entry_y);
@@ -1018,7 +1008,7 @@ struct CursivePosFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of subtable */
@@ -1044,7 +1034,7 @@ struct CursivePos
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
CursivePosFormat1 format1;
} u;
};
@@ -1060,8 +1050,8 @@ struct MarkBasePosFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+markCoverage).add_coverage (c->input);
- (this+baseCoverage).add_coverage (c->input);
+ if (unlikely (!(this+markCoverage).add_coverage (c->input))) return;
+ if (unlikely (!(this+baseCoverage).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -1083,7 +1073,9 @@ struct MarkBasePosFormat1
do {
if (!skippy_iter.prev ()) return_trace (false);
/* We only want to attach to the first of a MultipleSubst sequence. Reject others. */
- if (0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx])) break;
+ if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) ||
+ 0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]))
+ break;
skippy_iter.reject ();
} while (1);
@@ -1107,14 +1099,14 @@ struct MarkBasePosFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
markCoverage; /* Offset to MarkCoverage table--from
* beginning of MarkBasePos subtable */
OffsetTo<Coverage>
baseCoverage; /* Offset to BaseCoverage table--from
* beginning of MarkBasePos subtable */
- USHORT classCount; /* Number of classes defined for marks */
+ UINT16 classCount; /* Number of classes defined for marks */
OffsetTo<MarkArray>
markArray; /* Offset to MarkArray table--from
* beginning of MarkBasePos subtable */
@@ -1140,7 +1132,7 @@ struct MarkBasePos
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
MarkBasePosFormat1 format1;
} u;
};
@@ -1161,8 +1153,8 @@ struct MarkLigPosFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+markCoverage).add_coverage (c->input);
- (this+ligatureCoverage).add_coverage (c->input);
+ if (unlikely (!(this+markCoverage).add_coverage (c->input))) return;
+ if (unlikely (!(this+ligatureCoverage).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -1224,7 +1216,7 @@ struct MarkLigPosFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
markCoverage; /* Offset to Mark Coverage table--from
* beginning of MarkLigPos subtable */
@@ -1232,7 +1224,7 @@ struct MarkLigPosFormat1
ligatureCoverage; /* Offset to Ligature Coverage
* table--from beginning of MarkLigPos
* subtable */
- USHORT classCount; /* Number of defined mark classes */
+ UINT16 classCount; /* Number of defined mark classes */
OffsetTo<MarkArray>
markArray; /* Offset to MarkArray table--from
* beginning of MarkLigPos subtable */
@@ -1258,7 +1250,7 @@ struct MarkLigPos
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
MarkLigPosFormat1 format1;
} u;
};
@@ -1274,8 +1266,8 @@ struct MarkMarkPosFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+mark1Coverage).add_coverage (c->input);
- (this+mark2Coverage).add_coverage (c->input);
+ if (unlikely (!(this+mark1Coverage).add_coverage (c->input))) return;
+ if (unlikely (!(this+mark2Coverage).add_coverage (c->input))) return;
}
inline const Coverage &get_coverage (void) const
@@ -1338,7 +1330,7 @@ struct MarkMarkPosFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
mark1Coverage; /* Offset to Combining Mark1 Coverage
* table--from beginning of MarkMarkPos
@@ -1347,7 +1339,7 @@ struct MarkMarkPosFormat1
mark2Coverage; /* Offset to Combining Mark2 Coverage
* table--from beginning of MarkMarkPos
* subtable */
- USHORT classCount; /* Number of defined mark classes */
+ UINT16 classCount; /* Number of defined mark classes */
OffsetTo<MarkArray>
mark1Array; /* Offset to Mark1Array table--from
* beginning of MarkMarkPos subtable */
@@ -1373,7 +1365,7 @@ struct MarkMarkPos
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
MarkMarkPosFormat1 format1;
} u;
};
@@ -1432,7 +1424,7 @@ struct PosLookupSubTable
protected:
union {
- USHORT sub_format;
+ UINT16 sub_format;
SinglePos single;
PairPos pair;
CursivePos cursive;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh
index 66fcb3f3af..0b09c4e4a1 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh
@@ -44,7 +44,7 @@ struct SingleSubstFormat1
for (iter.init (this+coverage); iter.more (); iter.next ())
{
/* TODO Switch to range-based API to work around malicious fonts.
- * https://github.com/behdad/harfbuzz/issues/363 */
+ * https://github.com/harfbuzz/harfbuzz/issues/363 */
hb_codepoint_t glyph_id = iter.get_glyph ();
if (c->glyphs->has (glyph_id))
c->glyphs->add ((glyph_id + deltaGlyphID) & 0xFFFFu);
@@ -54,13 +54,13 @@ struct SingleSubstFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
Coverage::Iter iter;
for (iter.init (this+coverage); iter.more (); iter.next ())
{
/* TODO Switch to range-based API to work around malicious fonts.
- * https://github.com/behdad/harfbuzz/issues/363 */
+ * https://github.com/harfbuzz/harfbuzz/issues/363 */
hb_codepoint_t glyph_id = iter.get_glyph ();
- c->input->add (glyph_id);
c->output->add ((glyph_id + deltaGlyphID) & 0xFFFFu);
}
}
@@ -110,11 +110,11 @@ struct SingleSubstFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- SHORT deltaGlyphID; /* Add to original GlyphID to get
+ INT16 deltaGlyphID; /* Add to original GlyphID to get
* substitute GlyphID */
public:
DEFINE_SIZE_STATIC (6);
@@ -130,7 +130,7 @@ struct SingleSubstFormat2
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
if (c->glyphs->has (iter.get_glyph ()))
c->glyphs->add (substitute[iter.get_coverage ()]);
}
@@ -139,13 +139,13 @@ struct SingleSubstFormat2
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
Coverage::Iter iter;
unsigned int count = substitute.len;
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
- c->input->add (iter.get_glyph ());
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
c->output->add (substitute[iter.get_coverage ()]);
}
}
@@ -195,7 +195,7 @@ struct SingleSubstFormat2
}
protected:
- USHORT format; /* Format identifier--format = 2 */
+ UINT16 format; /* Format identifier--format = 2 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
@@ -249,7 +249,7 @@ struct SingleSubst
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
SingleSubstFormat1 format1;
SingleSubstFormat2 format2;
} u;
@@ -269,9 +269,7 @@ struct Sequence
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- unsigned int count = substitute.len;
- for (unsigned int i = 0; i < count; i++)
- c->output->add (substitute[i]);
+ c->output->add_array (substitute.array, substitute.len);
}
inline bool apply (hb_apply_context_t *c) const
@@ -287,7 +285,7 @@ struct Sequence
return_trace (true);
}
/* Spec disallows this, but Uniscribe allows it.
- * https://github.com/behdad/harfbuzz/issues/253 */
+ * https://github.com/harfbuzz/harfbuzz/issues/253 */
else if (unlikely (count == 0))
{
c->buffer->delete_glyph ();
@@ -339,7 +337,7 @@ struct MultipleSubstFormat1
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
if (c->glyphs->has (iter.get_glyph ()))
(this+sequence[iter.get_coverage ()]).closure (c);
}
@@ -348,7 +346,7 @@ struct MultipleSubstFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- (this+coverage).add_coverage (c->input);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
unsigned int count = sequence.len;
for (unsigned int i = 0; i < count; i++)
(this+sequence[i]).collect_glyphs (c);
@@ -400,7 +398,7 @@ struct MultipleSubstFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
@@ -442,7 +440,7 @@ struct MultipleSubst
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
MultipleSubstFormat1 format1;
} u;
};
@@ -461,7 +459,7 @@ struct AlternateSubstFormat1
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
if (c->glyphs->has (iter.get_glyph ())) {
const AlternateSet &alt_set = this+alternateSet[iter.get_coverage ()];
unsigned int count = alt_set.len;
@@ -474,17 +472,15 @@ struct AlternateSubstFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
Coverage::Iter iter;
unsigned int count = alternateSet.len;
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
- c->input->add (iter.get_glyph ());
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
const AlternateSet &alt_set = this+alternateSet[iter.get_coverage ()];
- unsigned int count = alt_set.len;
- for (unsigned int i = 0; i < count; i++)
- c->output->add (alt_set[i]);
+ c->output->add_array (alt_set.array, alt_set.len);
}
}
@@ -552,7 +548,7 @@ struct AlternateSubstFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
@@ -594,7 +590,7 @@ struct AlternateSubst
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
AlternateSubstFormat1 format1;
} u;
};
@@ -615,9 +611,7 @@ struct Ligature
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
- unsigned int count = component.len;
- for (unsigned int i = 1; i < count; i++)
- c->input->add (component[i]);
+ c->input->add_array (component.array, component.len ? component.len - 1 : 0);
c->output->add (ligGlyph);
}
@@ -658,7 +652,7 @@ struct Ligature
if (likely (!match_input (c, count,
&component[1],
match_glyph,
- NULL,
+ nullptr,
&match_length,
match_positions,
&is_mark_ligature,
@@ -792,7 +786,7 @@ struct LigatureSubstFormat1
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
if (c->glyphs->has (iter.get_glyph ()))
(this+ligatureSet[iter.get_coverage ()]).closure (c);
}
@@ -801,13 +795,13 @@ struct LigatureSubstFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
Coverage::Iter iter;
unsigned int count = ligatureSet.len;
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
- c->input->add (iter.get_glyph ());
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
(this+ligatureSet[iter.get_coverage ()]).collect_glyphs (c);
}
}
@@ -868,7 +862,7 @@ struct LigatureSubstFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
@@ -918,7 +912,7 @@ struct LigatureSubst
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
LigatureSubstFormat1 format1;
} u;
};
@@ -961,7 +955,7 @@ struct ReverseChainSingleSubstFormat1
for (iter.init (this+coverage); iter.more (); iter.next ())
{
if (unlikely (iter.get_coverage () >= count))
- break; /* Work around malicious fonts. https://github.com/behdad/harfbuzz/issues/363 */
+ break; /* Work around malicious fonts. https://github.com/harfbuzz/harfbuzz/issues/363 */
if (c->glyphs->has (iter.get_glyph ()))
c->glyphs->add (substitute[iter.get_coverage ()]);
}
@@ -970,25 +964,22 @@ struct ReverseChainSingleSubstFormat1
inline void collect_glyphs (hb_collect_glyphs_context_t *c) const
{
TRACE_COLLECT_GLYPHS (this);
-
- const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
+ if (unlikely (!(this+coverage).add_coverage (c->input))) return;
unsigned int count;
- (this+coverage).add_coverage (c->input);
-
count = backtrack.len;
for (unsigned int i = 0; i < count; i++)
- (this+backtrack[i]).add_coverage (c->before);
+ if (unlikely (!(this+backtrack[i]).add_coverage (c->before))) return;
+ const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
count = lookahead.len;
for (unsigned int i = 0; i < count; i++)
- (this+lookahead[i]).add_coverage (c->after);
+ if (unlikely (!(this+lookahead[i]).add_coverage (c->after))) return;
const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
count = substitute.len;
- for (unsigned int i = 0; i < count; i++)
- c->output->add (substitute[i]);
+ c->output->add_array (substitute.array, substitute.len);
}
inline const Coverage &get_coverage (void) const
@@ -1014,14 +1005,17 @@ struct ReverseChainSingleSubstFormat1
const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage> > (backtrack);
const ArrayOf<GlyphID> &substitute = StructAfter<ArrayOf<GlyphID> > (lookahead);
+ unsigned int start_index = 0, end_index = 0;
if (match_backtrack (c,
- backtrack.len, (USHORT *) backtrack.array,
- match_coverage, this) &&
+ backtrack.len, (UINT16 *) backtrack.array,
+ match_coverage, this,
+ &start_index) &&
match_lookahead (c,
- lookahead.len, (USHORT *) lookahead.array,
+ lookahead.len, (UINT16 *) lookahead.array,
match_coverage, this,
- 1))
+ 1, &end_index))
{
+ c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
c->replace_glyph_inplace (substitute[index]);
/* Note: We DON'T decrease buffer->idx. The main loop does it
* for us. This is useful for preventing surprises if someone
@@ -1045,7 +1039,7 @@ struct ReverseChainSingleSubstFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
@@ -1079,7 +1073,7 @@ struct ReverseChainSingleSubst
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
ReverseChainSingleSubstFormat1 format1;
} u;
};
@@ -1125,7 +1119,7 @@ struct SubstLookupSubTable
protected:
union {
- USHORT sub_format;
+ UINT16 sub_format;
SingleSubst single;
MultipleSubst multiple;
AlternateSubst alternate;
@@ -1277,9 +1271,11 @@ struct SubstLookup : Lookup
if (unlikely (get_type () == SubstLookupSubTable::Extension))
{
/* The spec says all subtables of an Extension lookup should
- * have the same type. This is specially important if one has
- * a reverse type! */
+ * have the same type, which shall not be the Extension type
+ * itself. This is specially important if one has a reverse type! */
unsigned int type = get_subtable (0).u.extension.get_type ();
+ if (unlikely (type == SubstLookupSubTable::Extension))
+ return_trace (false);
unsigned int count = get_subtable_count ();
for (unsigned int i = 1; i < count; i++)
if (get_subtable (i).u.extension.get_type () != type)
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh
index fd75c5425a..b08a59138e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh
@@ -29,6 +29,8 @@
#ifndef HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH
#define HB_OT_LAYOUT_GSUBGPOS_PRIVATE_HH
+#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-buffer-private.hh"
#include "hb-ot-layout-gdef-table.hh"
#include "hb-set-private.hh"
@@ -37,15 +39,6 @@
namespace OT {
-#ifndef HB_DEBUG_CLOSURE
-#define HB_DEBUG_CLOSURE (HB_DEBUG+0)
-#endif
-
-#define TRACE_CLOSURE(this) \
- hb_auto_trace_t<HB_DEBUG_CLOSURE, hb_void_t> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "");
-
struct hb_closure_context_t :
hb_dispatch_context_t<hb_closure_context_t, hb_void_t, HB_DEBUG_CLOSURE>
{
@@ -77,7 +70,7 @@ struct hb_closure_context_t :
unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
face (face_),
glyphs (glyphs_),
- recurse_func (NULL),
+ recurse_func (nullptr),
nesting_level_left (nesting_level_left_),
debug_depth (0) {}
@@ -85,16 +78,6 @@ struct hb_closure_context_t :
};
-
-#ifndef HB_DEBUG_WOULD_APPLY
-#define HB_DEBUG_WOULD_APPLY (HB_DEBUG+0)
-#endif
-
-#define TRACE_WOULD_APPLY(this) \
- hb_auto_trace_t<HB_DEBUG_WOULD_APPLY, bool> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "%d glyphs", c->len);
-
struct hb_would_apply_context_t :
hb_dispatch_context_t<hb_would_apply_context_t, bool, HB_DEBUG_WOULD_APPLY>
{
@@ -122,16 +105,6 @@ struct hb_would_apply_context_t :
};
-
-#ifndef HB_DEBUG_COLLECT_GLYPHS
-#define HB_DEBUG_COLLECT_GLYPHS (HB_DEBUG+0)
-#endif
-
-#define TRACE_COLLECT_GLYPHS(this) \
- hb_auto_trace_t<HB_DEBUG_COLLECT_GLYPHS, hb_void_t> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "");
-
struct hb_collect_glyphs_context_t :
hb_dispatch_context_t<hb_collect_glyphs_context_t, hb_void_t, HB_DEBUG_COLLECT_GLYPHS>
{
@@ -146,7 +119,7 @@ struct hb_collect_glyphs_context_t :
if (unlikely (nesting_level_left == 0 || !recurse_func))
return default_return_value ();
- /* Note that GPOS sets recurse_func to NULL already, so it doesn't get
+ /* Note that GPOS sets recurse_func to nullptr already, so it doesn't get
* past the previous check. For GSUB, we only want to collect the output
* glyphs in the recursion. If output is not requested, we can go home now.
*
@@ -160,7 +133,7 @@ struct hb_collect_glyphs_context_t :
return HB_VOID;
/* Return if new lookup was recursed to before. */
- if (recursed_lookups.has (lookup_index))
+ if (recursed_lookups->has (lookup_index))
return HB_VOID;
hb_set_t *old_before = before;
@@ -176,7 +149,7 @@ struct hb_collect_glyphs_context_t :
input = old_input;
after = old_after;
- recursed_lookups.add (lookup_index);
+ recursed_lookups->add (lookup_index);
return HB_VOID;
}
@@ -187,31 +160,31 @@ struct hb_collect_glyphs_context_t :
hb_set_t *after;
hb_set_t *output;
recurse_func_t recurse_func;
- hb_set_t recursed_lookups;
+ hb_set_t *recursed_lookups;
unsigned int nesting_level_left;
unsigned int debug_depth;
hb_collect_glyphs_context_t (hb_face_t *face_,
- hb_set_t *glyphs_before, /* OUT. May be NULL */
- hb_set_t *glyphs_input, /* OUT. May be NULL */
- hb_set_t *glyphs_after, /* OUT. May be NULL */
- hb_set_t *glyphs_output, /* OUT. May be NULL */
+ hb_set_t *glyphs_before, /* OUT. May be nullptr */
+ hb_set_t *glyphs_input, /* OUT. May be nullptr */
+ hb_set_t *glyphs_after, /* OUT. May be nullptr */
+ hb_set_t *glyphs_output, /* OUT. May be nullptr */
unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
face (face_),
before (glyphs_before ? glyphs_before : hb_set_get_empty ()),
input (glyphs_input ? glyphs_input : hb_set_get_empty ()),
after (glyphs_after ? glyphs_after : hb_set_get_empty ()),
output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
- recurse_func (NULL),
- recursed_lookups (),
+ recurse_func (nullptr),
+ recursed_lookups (nullptr),
nesting_level_left (nesting_level_left_),
debug_depth (0)
{
- recursed_lookups.init ();
+ recursed_lookups = hb_set_create ();
}
~hb_collect_glyphs_context_t (void)
{
- recursed_lookups.fini ();
+ hb_set_destroy (recursed_lookups);
}
void set_recurse_func (recurse_func_t func) { recurse_func = func; }
@@ -219,10 +192,6 @@ struct hb_collect_glyphs_context_t :
-#ifndef HB_DEBUG_GET_COVERAGE
-#define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0)
-#endif
-
/* XXX Can we remove this? */
template <typename set_t>
@@ -249,17 +218,6 @@ struct hb_add_coverage_context_t :
};
-
-#ifndef HB_DEBUG_APPLY
-#define HB_DEBUG_APPLY (HB_DEBUG+0)
-#endif
-
-#define TRACE_APPLY(this) \
- hb_auto_trace_t<HB_DEBUG_APPLY, bool> trace \
- (&c->debug_depth, c->get_name (), this, HB_FUNC, \
- "idx %d gid %u lookup %d", \
- c->buffer->idx, c->buffer->cur().codepoint, (int) c->lookup_index);
-
struct hb_apply_context_t :
hb_dispatch_context_t<hb_apply_context_t, bool, HB_DEBUG_APPLY>
{
@@ -273,10 +231,10 @@ struct hb_apply_context_t :
#define arg1(arg) (arg) /* Remove the macro to see why it's needed! */
syllable arg1(0),
#undef arg1
- match_func (NULL),
- match_data (NULL) {};
+ match_func (nullptr),
+ match_data (nullptr) {};
- typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const void *data);
+ typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const UINT16 &value, const void *data);
inline void set_ignore_zwnj (bool ignore_zwnj_) { ignore_zwnj = ignore_zwnj_; }
inline void set_ignore_zwj (bool ignore_zwj_) { ignore_zwj = ignore_zwj_; }
@@ -294,7 +252,7 @@ struct hb_apply_context_t :
};
inline may_match_t may_match (const hb_glyph_info_t &info,
- const USHORT *glyph_data) const
+ const UINT16 *glyph_data) const
{
if (!(info.mask & mask) ||
(syllable && syllable != info.syllable ()))
@@ -319,7 +277,7 @@ struct hb_apply_context_t :
if (!c->check_glyph_property (&info, lookup_props))
return SKIP_YES;
- if (unlikely (_hb_glyph_info_is_default_ignorable_and_not_fvs (&info) &&
+ if (unlikely (_hb_glyph_info_is_default_ignorable_and_not_hidden (&info) &&
(ignore_zwnj || !_hb_glyph_info_is_zwnj (&info)) &&
(ignore_zwj || !_hb_glyph_info_is_zwj (&info))))
return SKIP_MAYBE;
@@ -342,13 +300,13 @@ struct hb_apply_context_t :
inline void init (hb_apply_context_t *c_, bool context_match = false)
{
c = c_;
- match_glyph_data = NULL,
- matcher.set_match_func (NULL, NULL);
+ match_glyph_data = nullptr;
+ matcher.set_match_func (nullptr, nullptr);
matcher.set_lookup_props (c->lookup_props);
/* Ignore ZWNJ if we are matching GSUB context, or matching GPOS. */
- matcher.set_ignore_zwnj (context_match || c->table_index == 1);
+ matcher.set_ignore_zwnj (c->table_index == 1 || (context_match && c->auto_zwnj));
/* Ignore ZWJ if we are matching GSUB context, or matching GPOS, or if asked to. */
- matcher.set_ignore_zwj (context_match || c->table_index == 1 || c->auto_zwj);
+ matcher.set_ignore_zwj (c->table_index == 1 || (context_match || c->auto_zwj));
matcher.set_mask (context_match ? -1 : c->lookup_mask);
}
inline void set_lookup_props (unsigned int lookup_props)
@@ -357,7 +315,7 @@ struct hb_apply_context_t :
}
inline void set_match_func (matcher_t::match_func_t match_func_,
const void *match_data_,
- const USHORT glyph_data[])
+ const UINT16 glyph_data[])
{
matcher.set_match_func (match_func_, match_data_);
match_glyph_data = glyph_data;
@@ -374,6 +332,13 @@ struct hb_apply_context_t :
inline void reject (void) { num_items++; match_glyph_data--; }
+ inline matcher_t::may_skip_t
+ may_skip (const hb_apply_context_t *c,
+ const hb_glyph_info_t &info) const
+ {
+ return matcher.may_skip (c, info);
+ }
+
inline bool next (void)
{
assert (num_items > 0);
@@ -433,7 +398,7 @@ struct hb_apply_context_t :
protected:
hb_apply_context_t *c;
matcher_t matcher;
- const USHORT *match_glyph_data;
+ const UINT16 *match_glyph_data;
unsigned int num_items;
unsigned int end;
@@ -448,7 +413,7 @@ struct hb_apply_context_t :
bool stop_sublookup_iteration (return_t r) const { return r; }
return_t recurse (unsigned int lookup_index)
{
- if (unlikely (nesting_level_left == 0 || !recurse_func))
+ if (unlikely (nesting_level_left == 0 || !recurse_func || buffer->max_ops-- <= 0))
return default_return_value ();
nesting_level_left--;
@@ -457,45 +422,50 @@ struct hb_apply_context_t :
return ret;
}
- unsigned int table_index; /* GSUB/GPOS */
+ skipping_iterator_t iter_input, iter_context;
+
hb_font_t *font;
hb_face_t *face;
hb_buffer_t *buffer;
- hb_direction_t direction;
- hb_mask_t lookup_mask;
- bool auto_zwj;
recurse_func_t recurse_func;
- unsigned int nesting_level_left;
- unsigned int lookup_props;
const GDEF &gdef;
- bool has_glyph_classes;
const VariationStore &var_store;
- skipping_iterator_t iter_input, iter_context;
+
+ hb_direction_t direction;
+ hb_mask_t lookup_mask;
+ unsigned int table_index; /* GSUB/GPOS */
unsigned int lookup_index;
+ unsigned int lookup_props;
+ unsigned int nesting_level_left;
unsigned int debug_depth;
+ bool auto_zwnj;
+ bool auto_zwj;
+ bool has_glyph_classes;
+
hb_apply_context_t (unsigned int table_index_,
hb_font_t *font_,
hb_buffer_t *buffer_) :
- table_index (table_index_),
+ iter_input (), iter_context (),
font (font_), face (font->face), buffer (buffer_),
- direction (buffer_->props.direction),
- lookup_mask (1),
- auto_zwj (true),
- recurse_func (NULL),
- nesting_level_left (HB_MAX_NESTING_LEVEL),
- lookup_props (0),
+ recurse_func (nullptr),
gdef (*hb_ot_layout_from_face (face)->gdef),
- has_glyph_classes (gdef.has_glyph_classes ()),
var_store (gdef.get_var_store ()),
- iter_input (),
- iter_context (),
+ direction (buffer_->props.direction),
+ lookup_mask (1),
+ table_index (table_index_),
lookup_index ((unsigned int) -1),
- debug_depth (0) {}
+ lookup_props (0),
+ nesting_level_left (HB_MAX_NESTING_LEVEL),
+ debug_depth (0),
+ auto_zwnj (true),
+ auto_zwj (true),
+ has_glyph_classes (gdef.has_glyph_classes ()) {}
inline void set_lookup_mask (hb_mask_t mask) { lookup_mask = mask; }
inline void set_auto_zwj (bool auto_zwj_) { auto_zwj = auto_zwj_; }
+ inline void set_auto_zwnj (bool auto_zwnj_) { auto_zwnj = auto_zwnj_; }
inline void set_recurse_func (recurse_func_t func) { recurse_func = func; }
inline void set_lookup_index (unsigned int lookup_index_) { lookup_index = lookup_index_; }
inline void set_lookup_props (unsigned int lookup_props_)
@@ -598,9 +568,9 @@ struct hb_apply_context_t :
-typedef bool (*intersects_func_t) (hb_set_t *glyphs, const USHORT &value, const void *data);
-typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, const USHORT &value, const void *data);
-typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const USHORT &value, const void *data);
+typedef bool (*intersects_func_t) (hb_set_t *glyphs, const UINT16 &value, const void *data);
+typedef void (*collect_glyphs_func_t) (hb_set_t *glyphs, const UINT16 &value, const void *data);
+typedef bool (*match_func_t) (hb_codepoint_t glyph_id, const UINT16 &value, const void *data);
struct ContextClosureFuncs
{
@@ -616,16 +586,16 @@ struct ContextApplyFuncs
};
-static inline bool intersects_glyph (hb_set_t *glyphs, const USHORT &value, const void *data HB_UNUSED)
+static inline bool intersects_glyph (hb_set_t *glyphs, const UINT16 &value, const void *data HB_UNUSED)
{
return glyphs->has (value);
}
-static inline bool intersects_class (hb_set_t *glyphs, const USHORT &value, const void *data)
+static inline bool intersects_class (hb_set_t *glyphs, const UINT16 &value, const void *data)
{
const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
return class_def.intersects_class (glyphs, value);
}
-static inline bool intersects_coverage (hb_set_t *glyphs, const USHORT &value, const void *data)
+static inline bool intersects_coverage (hb_set_t *glyphs, const UINT16 &value, const void *data)
{
const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
return (data+coverage).intersects (glyphs);
@@ -633,7 +603,7 @@ static inline bool intersects_coverage (hb_set_t *glyphs, const USHORT &value, c
static inline bool intersects_array (hb_closure_context_t *c,
unsigned int count,
- const USHORT values[],
+ const UINT16 values[],
intersects_func_t intersects_func,
const void *intersects_data)
{
@@ -644,16 +614,16 @@ static inline bool intersects_array (hb_closure_context_t *c,
}
-static inline void collect_glyph (hb_set_t *glyphs, const USHORT &value, const void *data HB_UNUSED)
+static inline void collect_glyph (hb_set_t *glyphs, const UINT16 &value, const void *data HB_UNUSED)
{
glyphs->add (value);
}
-static inline void collect_class (hb_set_t *glyphs, const USHORT &value, const void *data)
+static inline void collect_class (hb_set_t *glyphs, const UINT16 &value, const void *data)
{
const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
class_def.add_class (glyphs, value);
}
-static inline void collect_coverage (hb_set_t *glyphs, const USHORT &value, const void *data)
+static inline void collect_coverage (hb_set_t *glyphs, const UINT16 &value, const void *data)
{
const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
(data+coverage).add_coverage (glyphs);
@@ -661,7 +631,7 @@ static inline void collect_coverage (hb_set_t *glyphs, const USHORT &value, cons
static inline void collect_array (hb_collect_glyphs_context_t *c HB_UNUSED,
hb_set_t *glyphs,
unsigned int count,
- const USHORT values[],
+ const UINT16 values[],
collect_glyphs_func_t collect_func,
const void *collect_data)
{
@@ -670,16 +640,16 @@ static inline void collect_array (hb_collect_glyphs_context_t *c HB_UNUSED,
}
-static inline bool match_glyph (hb_codepoint_t glyph_id, const USHORT &value, const void *data HB_UNUSED)
+static inline bool match_glyph (hb_codepoint_t glyph_id, const UINT16 &value, const void *data HB_UNUSED)
{
return glyph_id == value;
}
-static inline bool match_class (hb_codepoint_t glyph_id, const USHORT &value, const void *data)
+static inline bool match_class (hb_codepoint_t glyph_id, const UINT16 &value, const void *data)
{
const ClassDef &class_def = *reinterpret_cast<const ClassDef *>(data);
return class_def.get_class (glyph_id) == value;
}
-static inline bool match_coverage (hb_codepoint_t glyph_id, const USHORT &value, const void *data)
+static inline bool match_coverage (hb_codepoint_t glyph_id, const UINT16 &value, const void *data)
{
const OffsetTo<Coverage> &coverage = (const OffsetTo<Coverage>&)value;
return (data+coverage).get_coverage (glyph_id) != NOT_COVERED;
@@ -687,7 +657,7 @@ static inline bool match_coverage (hb_codepoint_t glyph_id, const USHORT &value,
static inline bool would_match_input (hb_would_apply_context_t *c,
unsigned int count, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
match_func_t match_func,
const void *match_data)
{
@@ -702,15 +672,15 @@ static inline bool would_match_input (hb_would_apply_context_t *c,
}
static inline bool match_input (hb_apply_context_t *c,
unsigned int count, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
match_func_t match_func,
const void *match_data,
unsigned int *end_offset,
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH],
- bool *p_is_mark_ligature = NULL,
- unsigned int *p_total_component_count = NULL)
+ bool *p_is_mark_ligature = nullptr,
+ unsigned int *p_total_component_count = nullptr)
{
- TRACE_APPLY (NULL);
+ TRACE_APPLY (nullptr);
if (unlikely (count > HB_MAX_CONTEXT_LENGTH)) return_trace (false);
@@ -731,11 +701,17 @@ static inline bool match_input (hb_apply_context_t *c,
* - Ligatures cannot be formed across glyphs attached to different components
* of previous ligatures. Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
* LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
- * However, it would be wrong to ligate that SHADDA,FATHA sequence.o
- * There is an exception to this: If a ligature tries ligating with marks that
- * belong to it itself, go ahead, assuming that the font designer knows what
- * they are doing (otherwise it can break Indic stuff when a matra wants to
- * ligate with a conjunct...)
+ * However, it would be wrong to ligate that SHADDA,FATHA sequence.
+ * There are a couple of exceptions to this:
+ *
+ * o If a ligature tries ligating with marks that belong to it itself, go ahead,
+ * assuming that the font designer knows what they are doing (otherwise it can
+ * break Indic stuff when a matra wants to ligate with a conjunct,
+ *
+ * o If two marks want to ligate and they belong to different components of the
+ * same ligature glyph, and said ligature glyph is to be ignored according to
+ * mark-filtering rules, then allow.
+ * https://github.com/harfbuzz/harfbuzz/issues/545
*/
bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->cur());
@@ -746,6 +722,12 @@ static inline bool match_input (hb_apply_context_t *c,
unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
+ enum {
+ LIGBASE_NOT_CHECKED,
+ LIGBASE_MAY_NOT_SKIP,
+ LIGBASE_MAY_SKIP
+ } ligbase = LIGBASE_NOT_CHECKED;
+
match_positions[0] = buffer->idx;
for (unsigned int i = 1; i < count; i++)
{
@@ -756,13 +738,43 @@ static inline bool match_input (hb_apply_context_t *c,
unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
- if (first_lig_id && first_lig_comp) {
+ if (first_lig_id && first_lig_comp)
+ {
/* If first component was attached to a previous ligature component,
* all subsequent components should be attached to the same ligature
- * component, otherwise we shouldn't ligate them. */
+ * component, otherwise we shouldn't ligate them... */
if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
- return_trace (false);
- } else {
+ {
+ /* ...unless, we are attached to a base ligature and that base
+ * ligature is ignorable. */
+ if (ligbase == LIGBASE_NOT_CHECKED)
+ {
+ bool found = false;
+ const hb_glyph_info_t *out = buffer->out_info;
+ unsigned int j = buffer->out_len;
+ while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
+ {
+ if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
+ {
+ j--;
+ found = true;
+ break;
+ }
+ j--;
+ }
+
+ if (found && skippy_iter.may_skip (c, out[j]) == hb_apply_context_t::matcher_t::SKIP_YES)
+ ligbase = LIGBASE_MAY_SKIP;
+ else
+ ligbase = LIGBASE_MAY_NOT_SKIP;
+ }
+
+ if (ligbase == LIGBASE_MAY_NOT_SKIP)
+ return_trace (false);
+ }
+ }
+ else
+ {
/* If first component was NOT attached to a previous ligature component,
* all subsequent components should also NOT be attached to any ligature
* component, unless they are attached to the first component itself! */
@@ -792,7 +804,7 @@ static inline bool ligate_input (hb_apply_context_t *c,
bool is_mark_ligature,
unsigned int total_component_count)
{
- TRACE_APPLY (NULL);
+ TRACE_APPLY (nullptr);
hb_buffer_t *buffer = c->buffer;
@@ -884,11 +896,12 @@ static inline bool ligate_input (hb_apply_context_t *c,
static inline bool match_backtrack (hb_apply_context_t *c,
unsigned int count,
- const USHORT backtrack[],
+ const UINT16 backtrack[],
match_func_t match_func,
- const void *match_data)
+ const void *match_data,
+ unsigned int *match_start)
{
- TRACE_APPLY (NULL);
+ TRACE_APPLY (nullptr);
hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
skippy_iter.reset (c->buffer->backtrack_len (), count);
@@ -898,17 +911,20 @@ static inline bool match_backtrack (hb_apply_context_t *c,
if (!skippy_iter.prev ())
return_trace (false);
+ *match_start = skippy_iter.idx;
+
return_trace (true);
}
static inline bool match_lookahead (hb_apply_context_t *c,
unsigned int count,
- const USHORT lookahead[],
+ const UINT16 lookahead[],
match_func_t match_func,
const void *match_data,
- unsigned int offset)
+ unsigned int offset,
+ unsigned int *end_index)
{
- TRACE_APPLY (NULL);
+ TRACE_APPLY (nullptr);
hb_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
skippy_iter.reset (c->buffer->idx + offset - 1, count);
@@ -918,6 +934,8 @@ static inline bool match_lookahead (hb_apply_context_t *c,
if (!skippy_iter.next ())
return_trace (false);
+ *end_index = skippy_iter.idx + 1;
+
return_trace (true);
}
@@ -931,9 +949,9 @@ struct LookupRecord
return_trace (c->check_struct (this));
}
- USHORT sequenceIndex; /* Index into current glyph
+ UINT16 sequenceIndex; /* Index into current glyph
* sequence--first glyph = 0 */
- USHORT lookupListIndex; /* Lookup to apply to that
+ UINT16 lookupListIndex; /* Lookup to apply to that
* position--zero--based */
public:
DEFINE_SIZE_STATIC (4);
@@ -956,10 +974,10 @@ static inline bool apply_lookup (hb_apply_context_t *c,
const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
unsigned int match_length)
{
- TRACE_APPLY (NULL);
+ TRACE_APPLY (nullptr);
hb_buffer_t *buffer = c->buffer;
- unsigned int end;
+ int end;
/* All positions are distance from beginning of *output* buffer.
* Adjust. */
@@ -984,7 +1002,11 @@ static inline bool apply_lookup (hb_apply_context_t *c,
if (idx == 0 && lookupRecord[i].lookupListIndex == c->lookup_index)
continue;
- buffer->move_to (match_positions[idx]);
+ if (unlikely (!buffer->move_to (match_positions[idx])))
+ break;
+
+ if (unlikely (buffer->max_ops <= 0))
+ break;
unsigned int orig_len = buffer->backtrack_len () + buffer->lookahead_len ();
if (!c->recurse (lookupRecord[i].lookupListIndex))
@@ -996,10 +1018,32 @@ static inline bool apply_lookup (hb_apply_context_t *c,
if (!delta)
continue;
- /* Recursed lookup changed buffer len. Adjust. */
+ /* Recursed lookup changed buffer len. Adjust.
+ *
+ * TODO:
+ *
+ * Right now, if buffer length increased by n, we assume n new glyphs
+ * were added right after the current position, and if buffer length
+ * was decreased by n, we assume n match positions after the current
+ * one where removed. The former (buffer length increased) case is
+ * fine, but the decrease case can be improved in at least two ways,
+ * both of which are significant:
+ *
+ * - If recursed-to lookup is MultipleSubst and buffer length
+ * decreased, then it's current match position that was deleted,
+ * NOT the one after it.
+ *
+ * - If buffer length was decreased by n, it does not necessarily
+ * mean that n match positions where removed, as there might
+ * have been marks and default-ignorables in the sequence. We
+ * should instead drop match positions between current-position
+ * and current-position + n instead.
+ *
+ * It should be possible to construct tests for both of these cases.
+ */
- end = int (end) + delta;
- if (end <= match_positions[idx])
+ end += delta;
+ if (end <= int (match_positions[idx]))
{
/* End might end up being smaller than match_positions[idx] if the recursed
* lookup ended up removing many items, more than we have had matched.
@@ -1068,7 +1112,7 @@ struct ContextApplyLookupContext
static inline void context_closure_lookup (hb_closure_context_t *c,
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookupCount,
const LookupRecord lookupRecord[],
ContextClosureLookupContext &lookup_context)
@@ -1082,7 +1126,7 @@ static inline void context_closure_lookup (hb_closure_context_t *c,
static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookupCount,
const LookupRecord lookupRecord[],
ContextCollectGlyphsLookupContext &lookup_context)
@@ -1096,7 +1140,7 @@ static inline void context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c
static inline bool context_would_apply_lookup (hb_would_apply_context_t *c,
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookupCount HB_UNUSED,
const LookupRecord lookupRecord[] HB_UNUSED,
ContextApplyLookupContext &lookup_context)
@@ -1107,7 +1151,7 @@ static inline bool context_would_apply_lookup (hb_would_apply_context_t *c,
}
static inline bool context_apply_lookup (hb_apply_context_t *c,
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookupCount,
const LookupRecord lookupRecord[],
ContextApplyLookupContext &lookup_context)
@@ -1118,10 +1162,11 @@ static inline bool context_apply_lookup (hb_apply_context_t *c,
inputCount, input,
lookup_context.funcs.match, lookup_context.match_data,
&match_length, match_positions)
- && apply_lookup (c,
+ && (c->buffer->unsafe_to_break (c->buffer->idx, c->buffer->idx + match_length),
+ apply_lookup (c,
inputCount, match_positions,
lookupCount, lookupRecord,
- match_length);
+ match_length));
}
struct Rule
@@ -1164,19 +1209,19 @@ struct Rule
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return inputCount.sanitize (c)
- && lookupCount.sanitize (c)
- && c->check_range (inputZ,
- inputZ[0].static_size * inputCount
- + lookupRecordX[0].static_size * lookupCount);
+ return_trace (inputCount.sanitize (c) &&
+ lookupCount.sanitize (c) &&
+ c->check_range (inputZ,
+ inputZ[0].static_size * inputCount +
+ lookupRecordX[0].static_size * lookupCount));
}
protected:
- USHORT inputCount; /* Total number of glyphs in input
+ UINT16 inputCount; /* Total number of glyphs in input
* glyph sequence--includes the first
* glyph */
- USHORT lookupCount; /* Number of LookupRecords */
- USHORT inputZ[VAR]; /* Array of match inputs--start with
+ UINT16 lookupCount; /* Number of LookupRecords */
+ UINT16 inputZ[VAR]; /* Array of match inputs--start with
* second glyph */
LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in
* design order */
@@ -1251,7 +1296,7 @@ struct ContextFormat1
struct ContextClosureLookupContext lookup_context = {
{intersects_glyph},
- NULL
+ nullptr
};
unsigned int count = ruleSet.len;
@@ -1269,7 +1314,7 @@ struct ContextFormat1
struct ContextCollectGlyphsLookupContext lookup_context = {
{collect_glyph},
- NULL
+ nullptr
};
unsigned int count = ruleSet.len;
@@ -1284,7 +1329,7 @@ struct ContextFormat1
const RuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
struct ContextApplyLookupContext lookup_context = {
{match_glyph},
- NULL
+ nullptr
};
return_trace (rule_set.would_apply (c, lookup_context));
}
@@ -1304,7 +1349,7 @@ struct ContextFormat1
const RuleSet &rule_set = this+ruleSet[index];
struct ContextApplyLookupContext lookup_context = {
{match_glyph},
- NULL
+ nullptr
};
return_trace (rule_set.apply (c, lookup_context));
}
@@ -1316,7 +1361,7 @@ struct ContextFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
@@ -1409,7 +1454,7 @@ struct ContextFormat2
}
protected:
- USHORT format; /* Format identifier--format = 2 */
+ UINT16 format; /* Format identifier--format = 2 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
@@ -1438,7 +1483,7 @@ struct ContextFormat3
this
};
context_closure_lookup (c,
- glyphCount, (const USHORT *) (coverageZ + 1),
+ glyphCount, (const UINT16 *) (coverageZ + 1),
lookupCount, lookupRecord,
lookup_context);
}
@@ -1455,7 +1500,7 @@ struct ContextFormat3
};
context_collect_glyphs_lookup (c,
- glyphCount, (const USHORT *) (coverageZ + 1),
+ glyphCount, (const UINT16 *) (coverageZ + 1),
lookupCount, lookupRecord,
lookup_context);
}
@@ -1469,7 +1514,7 @@ struct ContextFormat3
{match_coverage},
this
};
- return_trace (context_would_apply_lookup (c, glyphCount, (const USHORT *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
+ return_trace (context_would_apply_lookup (c, glyphCount, (const UINT16 *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
}
inline const Coverage &get_coverage (void) const
@@ -1488,7 +1533,7 @@ struct ContextFormat3
{match_coverage},
this
};
- return_trace (context_apply_lookup (c, glyphCount, (const USHORT *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
+ return_trace (context_apply_lookup (c, glyphCount, (const UINT16 *) (coverageZ + 1), lookupCount, lookupRecord, lookup_context));
}
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -1505,10 +1550,10 @@ struct ContextFormat3
}
protected:
- USHORT format; /* Format identifier--format = 3 */
- USHORT glyphCount; /* Number of glyphs in the input glyph
+ UINT16 format; /* Format identifier--format = 3 */
+ UINT16 glyphCount; /* Number of glyphs in the input glyph
* sequence */
- USHORT lookupCount; /* Number of LookupRecords */
+ UINT16 lookupCount; /* Number of LookupRecords */
OffsetTo<Coverage>
coverageZ[VAR]; /* Array of offsets to Coverage
* table in glyph sequence order */
@@ -1535,7 +1580,7 @@ struct Context
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
ContextFormat1 format1;
ContextFormat2 format2;
ContextFormat3 format3;
@@ -1565,11 +1610,11 @@ struct ChainContextApplyLookupContext
static inline void chain_context_closure_lookup (hb_closure_context_t *c,
unsigned int backtrackCount,
- const USHORT backtrack[],
+ const UINT16 backtrack[],
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookaheadCount,
- const USHORT lookahead[],
+ const UINT16 lookahead[],
unsigned int lookupCount,
const LookupRecord lookupRecord[],
ChainContextClosureLookupContext &lookup_context)
@@ -1589,11 +1634,11 @@ static inline void chain_context_closure_lookup (hb_closure_context_t *c,
static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_context_t *c,
unsigned int backtrackCount,
- const USHORT backtrack[],
+ const UINT16 backtrack[],
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookaheadCount,
- const USHORT lookahead[],
+ const UINT16 lookahead[],
unsigned int lookupCount,
const LookupRecord lookupRecord[],
ChainContextCollectGlyphsLookupContext &lookup_context)
@@ -1613,11 +1658,11 @@ static inline void chain_context_collect_glyphs_lookup (hb_collect_glyphs_contex
static inline bool chain_context_would_apply_lookup (hb_would_apply_context_t *c,
unsigned int backtrackCount,
- const USHORT backtrack[] HB_UNUSED,
+ const UINT16 backtrack[] HB_UNUSED,
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookaheadCount,
- const USHORT lookahead[] HB_UNUSED,
+ const UINT16 lookahead[] HB_UNUSED,
unsigned int lookupCount HB_UNUSED,
const LookupRecord lookupRecord[] HB_UNUSED,
ChainContextApplyLookupContext &lookup_context)
@@ -1630,16 +1675,16 @@ static inline bool chain_context_would_apply_lookup (hb_would_apply_context_t *c
static inline bool chain_context_apply_lookup (hb_apply_context_t *c,
unsigned int backtrackCount,
- const USHORT backtrack[],
+ const UINT16 backtrack[],
unsigned int inputCount, /* Including the first glyph (not matched) */
- const USHORT input[], /* Array of input values--start with second glyph */
+ const UINT16 input[], /* Array of input values--start with second glyph */
unsigned int lookaheadCount,
- const USHORT lookahead[],
+ const UINT16 lookahead[],
unsigned int lookupCount,
const LookupRecord lookupRecord[],
ChainContextApplyLookupContext &lookup_context)
{
- unsigned int match_length = 0;
+ unsigned int start_index = 0, match_length = 0, end_index = 0;
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
return match_input (c,
inputCount, input,
@@ -1647,15 +1692,17 @@ static inline bool chain_context_apply_lookup (hb_apply_context_t *c,
&match_length, match_positions)
&& match_backtrack (c,
backtrackCount, backtrack,
- lookup_context.funcs.match, lookup_context.match_data[0])
+ lookup_context.funcs.match, lookup_context.match_data[0],
+ &start_index)
&& match_lookahead (c,
lookaheadCount, lookahead,
lookup_context.funcs.match, lookup_context.match_data[2],
- match_length)
- && apply_lookup (c,
+ match_length, &end_index)
+ && (c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index),
+ apply_lookup (c,
inputCount, match_positions,
lookupCount, lookupRecord,
- match_length);
+ match_length));
}
struct ChainRule
@@ -1663,8 +1710,8 @@ struct ChainRule
inline void closure (hb_closure_context_t *c, ChainContextClosureLookupContext &lookup_context) const
{
TRACE_CLOSURE (this);
- const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
- const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+ const HeadlessArrayOf<UINT16> &input = StructAfter<HeadlessArrayOf<UINT16> > (backtrack);
+ const ArrayOf<UINT16> &lookahead = StructAfter<ArrayOf<UINT16> > (input);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
chain_context_closure_lookup (c,
backtrack.len, backtrack.array,
@@ -1677,8 +1724,8 @@ struct ChainRule
inline void collect_glyphs (hb_collect_glyphs_context_t *c, ChainContextCollectGlyphsLookupContext &lookup_context) const
{
TRACE_COLLECT_GLYPHS (this);
- const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
- const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+ const HeadlessArrayOf<UINT16> &input = StructAfter<HeadlessArrayOf<UINT16> > (backtrack);
+ const ArrayOf<UINT16> &lookahead = StructAfter<ArrayOf<UINT16> > (input);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
chain_context_collect_glyphs_lookup (c,
backtrack.len, backtrack.array,
@@ -1691,8 +1738,8 @@ struct ChainRule
inline bool would_apply (hb_would_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
{
TRACE_WOULD_APPLY (this);
- const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
- const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+ const HeadlessArrayOf<UINT16> &input = StructAfter<HeadlessArrayOf<UINT16> > (backtrack);
+ const ArrayOf<UINT16> &lookahead = StructAfter<ArrayOf<UINT16> > (input);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
return_trace (chain_context_would_apply_lookup (c,
backtrack.len, backtrack.array,
@@ -1704,8 +1751,8 @@ struct ChainRule
inline bool apply (hb_apply_context_t *c, ChainContextApplyLookupContext &lookup_context) const
{
TRACE_APPLY (this);
- const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
- const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+ const HeadlessArrayOf<UINT16> &input = StructAfter<HeadlessArrayOf<UINT16> > (backtrack);
+ const ArrayOf<UINT16> &lookahead = StructAfter<ArrayOf<UINT16> > (input);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
return_trace (chain_context_apply_lookup (c,
backtrack.len, backtrack.array,
@@ -1718,23 +1765,23 @@ struct ChainRule
{
TRACE_SANITIZE (this);
if (!backtrack.sanitize (c)) return_trace (false);
- const HeadlessArrayOf<USHORT> &input = StructAfter<HeadlessArrayOf<USHORT> > (backtrack);
+ const HeadlessArrayOf<UINT16> &input = StructAfter<HeadlessArrayOf<UINT16> > (backtrack);
if (!input.sanitize (c)) return_trace (false);
- const ArrayOf<USHORT> &lookahead = StructAfter<ArrayOf<USHORT> > (input);
+ const ArrayOf<UINT16> &lookahead = StructAfter<ArrayOf<UINT16> > (input);
if (!lookahead.sanitize (c)) return_trace (false);
const ArrayOf<LookupRecord> &lookup = StructAfter<ArrayOf<LookupRecord> > (lookahead);
return_trace (lookup.sanitize (c));
}
protected:
- ArrayOf<USHORT>
+ ArrayOf<UINT16>
backtrack; /* Array of backtracking values
* (to be matched before the input
* sequence) */
- HeadlessArrayOf<USHORT>
+ HeadlessArrayOf<UINT16>
inputX; /* Array of input values (start with
* second glyph) */
- ArrayOf<USHORT>
+ ArrayOf<UINT16>
lookaheadX; /* Array of lookahead values's (to be
* matched after the input sequence) */
ArrayOf<LookupRecord>
@@ -1807,7 +1854,7 @@ struct ChainContextFormat1
struct ChainContextClosureLookupContext lookup_context = {
{intersects_glyph},
- {NULL, NULL, NULL}
+ {nullptr, nullptr, nullptr}
};
unsigned int count = ruleSet.len;
@@ -1825,7 +1872,7 @@ struct ChainContextFormat1
struct ChainContextCollectGlyphsLookupContext lookup_context = {
{collect_glyph},
- {NULL, NULL, NULL}
+ {nullptr, nullptr, nullptr}
};
unsigned int count = ruleSet.len;
@@ -1840,7 +1887,7 @@ struct ChainContextFormat1
const ChainRuleSet &rule_set = this+ruleSet[(this+coverage).get_coverage (c->glyphs[0])];
struct ChainContextApplyLookupContext lookup_context = {
{match_glyph},
- {NULL, NULL, NULL}
+ {nullptr, nullptr, nullptr}
};
return_trace (rule_set.would_apply (c, lookup_context));
}
@@ -1859,7 +1906,7 @@ struct ChainContextFormat1
const ChainRuleSet &rule_set = this+ruleSet[index];
struct ChainContextApplyLookupContext lookup_context = {
{match_glyph},
- {NULL, NULL, NULL}
+ {nullptr, nullptr, nullptr}
};
return_trace (rule_set.apply (c, lookup_context));
}
@@ -1871,7 +1918,7 @@ struct ChainContextFormat1
}
protected:
- USHORT format; /* Format identifier--format = 1 */
+ UINT16 format; /* Format identifier--format = 1 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
@@ -1986,7 +2033,7 @@ struct ChainContextFormat2
}
protected:
- USHORT format; /* Format identifier--format = 2 */
+ UINT16 format; /* Format identifier--format = 2 */
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of table */
@@ -2026,9 +2073,9 @@ struct ChainContextFormat3
{this, this, this}
};
chain_context_closure_lookup (c,
- backtrack.len, (const USHORT *) backtrack.array,
- input.len, (const USHORT *) input.array + 1,
- lookahead.len, (const USHORT *) lookahead.array,
+ backtrack.len, (const UINT16 *) backtrack.array,
+ input.len, (const UINT16 *) input.array + 1,
+ lookahead.len, (const UINT16 *) lookahead.array,
lookup.len, lookup.array,
lookup_context);
}
@@ -2047,9 +2094,9 @@ struct ChainContextFormat3
{this, this, this}
};
chain_context_collect_glyphs_lookup (c,
- backtrack.len, (const USHORT *) backtrack.array,
- input.len, (const USHORT *) input.array + 1,
- lookahead.len, (const USHORT *) lookahead.array,
+ backtrack.len, (const UINT16 *) backtrack.array,
+ input.len, (const UINT16 *) input.array + 1,
+ lookahead.len, (const UINT16 *) lookahead.array,
lookup.len, lookup.array,
lookup_context);
}
@@ -2066,9 +2113,9 @@ struct ChainContextFormat3
{this, this, this}
};
return_trace (chain_context_would_apply_lookup (c,
- backtrack.len, (const USHORT *) backtrack.array,
- input.len, (const USHORT *) input.array + 1,
- lookahead.len, (const USHORT *) lookahead.array,
+ backtrack.len, (const UINT16 *) backtrack.array,
+ input.len, (const UINT16 *) input.array + 1,
+ lookahead.len, (const UINT16 *) lookahead.array,
lookup.len, lookup.array, lookup_context));
}
@@ -2093,9 +2140,9 @@ struct ChainContextFormat3
{this, this, this}
};
return_trace (chain_context_apply_lookup (c,
- backtrack.len, (const USHORT *) backtrack.array,
- input.len, (const USHORT *) input.array + 1,
- lookahead.len, (const USHORT *) lookahead.array,
+ backtrack.len, (const UINT16 *) backtrack.array,
+ input.len, (const UINT16 *) input.array + 1,
+ lookahead.len, (const UINT16 *) lookahead.array,
lookup.len, lookup.array, lookup_context));
}
@@ -2113,7 +2160,7 @@ struct ChainContextFormat3
}
protected:
- USHORT format; /* Format identifier--format = 3 */
+ UINT16 format; /* Format identifier--format = 3 */
OffsetArrayOf<Coverage>
backtrack; /* Array of coverage tables
* in backtracking sequence, in glyph
@@ -2150,7 +2197,7 @@ struct ChainContext
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
ChainContextFormat1 format1;
ChainContextFormat2 format2;
ChainContextFormat3 format3;
@@ -2187,11 +2234,11 @@ struct ExtensionFormat1
}
protected:
- USHORT format; /* Format identifier. Set to 1. */
- USHORT extensionLookupType; /* Lookup type of subtable referenced
+ UINT16 format; /* Format identifier. Set to 1. */
+ UINT16 extensionLookupType; /* Lookup type of subtable referenced
* by ExtensionOffset (i.e. the
* extension subtable). */
- ULONG extensionOffset; /* Offset to the extension subtable,
+ UINT32 extensionOffset; /* Offset to the extension subtable,
* of lookup type subtable. */
public:
DEFINE_SIZE_STATIC (8);
@@ -2229,7 +2276,7 @@ struct Extension
protected:
union {
- USHORT format; /* Format identifier */
+ UINT16 format; /* Format identifier */
ExtensionFormat1<T> format1;
} u;
};
@@ -2241,9 +2288,6 @@ struct Extension
struct GSUBGPOS
{
- static const hb_tag_t GSUBTag = HB_OT_TAG_GSUB;
- static const hb_tag_t GPOSTag = HB_OT_TAG_GPOS;
-
inline unsigned int get_script_count (void) const
{ return (this+scriptList).len; }
inline const Tag& get_script_tag (unsigned int i) const
@@ -2313,7 +2357,7 @@ struct GSUBGPOS
featureList; /* FeatureList table */
OffsetTo<LookupList>
lookupList; /* LookupList table */
- OffsetTo<FeatureVariations, ULONG>
+ LOffsetTo<FeatureVariations>
featureVars; /* Offset to Feature Variations
table--from beginning of table
* (may be NULL). Introduced
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-jstf-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-jstf-table.hh
index c3068491be..adbaad64f3 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-jstf-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-jstf-table.hh
@@ -124,7 +124,7 @@ struct JstfPriority
struct JstfLangSys : OffsetListOf<JstfPriority>
{
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<JstfLangSys>::sanitize_closure_t * = NULL) const
+ const Record<JstfLangSys>::sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (OffsetListOf<JstfPriority>::sanitize (c));
@@ -165,7 +165,7 @@ struct JstfScript
inline const JstfLangSys& get_default_lang_sys (void) const { return this+defaultLangSys; }
inline bool sanitize (hb_sanitize_context_t *c,
- const Record<JstfScript>::sanitize_closure_t * = NULL) const
+ const Record<JstfScript>::sanitize_closure_t * = nullptr) const
{
TRACE_SANITIZE (this);
return_trace (extenderGlyphs.sanitize (c, this) &&
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-private.hh
index a4272de631..0f0926f890 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-private.hh
@@ -33,7 +33,8 @@
#include "hb-font-private.hh"
#include "hb-buffer-private.hh"
-#include "hb-set-private.hh"
+#include "hb-set-digest-private.hh"
+#include "hb-open-type-private.hh"
/* Private API corresponding to hb-ot-layout.h: */
@@ -125,6 +126,8 @@ namespace OT {
struct GSUB;
struct GPOS;
struct MATH;
+ struct fvar;
+ struct avar;
}
struct hb_ot_layout_lookup_accelerator_t
@@ -153,12 +156,15 @@ struct hb_ot_layout_t
hb_blob_t *gdef_blob;
hb_blob_t *gsub_blob;
hb_blob_t *gpos_blob;
- hb_blob_t *math_blob;
const struct OT::GDEF *gdef;
const struct OT::GSUB *gsub;
const struct OT::GPOS *gpos;
- const struct OT::MATH *math;
+
+ /* TODO Move the following out of this struct. */
+ OT::hb_lazy_table_loader_t<struct OT::MATH> math;
+ OT::hb_lazy_table_loader_t<struct OT::fvar> fvar;
+ OT::hb_lazy_table_loader_t<struct OT::avar> avar;
unsigned int gsub_lookup_count;
unsigned int gpos_lookup_count;
@@ -191,8 +197,7 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout);
#define syllable() var1.u8[3] /* GSUB/GPOS shaping boundaries */
-/* loop over syllables */
-
+/* Loop over syllables. Based on foreach_cluster(). */
#define foreach_syllable(buffer, start, end) \
for (unsigned int \
_count = buffer->len, \
@@ -221,7 +226,9 @@ _next_syllable (hb_buffer_t *buffer, unsigned int start)
* - General_Category: 5 bits.
* - A bit each for:
* * Is it Default_Ignorable(); we have a modified Default_Ignorable().
- * * Whether it's one of the three Mongolian Free Variation Selectors.
+ * * Whether it's one of the three Mongolian Free Variation Selectors,
+ * CGJ, or other characters that are hidden but should not be ignored
+ * like most other Default_Ignorable()s do during matching.
* * One free bit right now.
*
* The high-byte has different meanings, switched by the Gen-Cat:
@@ -234,7 +241,8 @@ _next_syllable (hb_buffer_t *buffer, unsigned int start)
enum hb_unicode_props_flags_t {
UPROPS_MASK_GEN_CAT = 0x001Fu,
UPROPS_MASK_IGNORABLE = 0x0020u,
- UPROPS_MASK_FVS = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..3 */
+ UPROPS_MASK_HIDDEN = 0x0040u, /* MONGOLIAN FREE VARIATION SELECTOR 1..3,
+ * or TAG characters */
/* If GEN_CAT=FORMAT, top byte masks: */
UPROPS_MASK_Cf_ZWJ = 0x0100u,
@@ -258,16 +266,21 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES;
props |= UPROPS_MASK_IGNORABLE;
if (u == 0x200Cu) props |= UPROPS_MASK_Cf_ZWNJ;
- if (u == 0x200Du) props |= UPROPS_MASK_Cf_ZWJ;
+ else if (u == 0x200Du) props |= UPROPS_MASK_Cf_ZWJ;
/* Mongolian Free Variation Selectors need to be remembered
* because although we need to hide them like default-ignorables,
* they need to non-ignorable during shaping. This is similar to
* what we do for joiners in Indic-like shapers, but since the
* FVSes are GC=Mn, we have use a separate bit to remember them.
* Fixes:
- * https://github.com/behdad/harfbuzz/issues/234
- */
- if (unlikely (hb_in_range (u, 0x180Bu, 0x180Du))) props |= UPROPS_MASK_FVS;
+ * https://github.com/harfbuzz/harfbuzz/issues/234 */
+ else if (unlikely (hb_in_range (u, 0x180Bu, 0x180Du))) props |= UPROPS_MASK_HIDDEN;
+ /* TAG characters need similar treatment. Fixes:
+ * https://github.com/harfbuzz/harfbuzz/issues/463 */
+ else if (unlikely (hb_in_range (u, 0xE0020u, 0xE007Fu))) props |= UPROPS_MASK_HIDDEN;
+ /* COMBINING GRAPHEME JOINER should not be skipped; at least some times.
+ * https://github.com/harfbuzz/harfbuzz/issues/554 */
+ else if (unlikely (u == 0x034Fu)) props |= UPROPS_MASK_HIDDEN;
}
else if (unlikely (HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL (gen_cat)))
{
@@ -292,7 +305,7 @@ _hb_glyph_info_set_unicode_props (hb_glyph_info_t *info, hb_buffer_t *buffer)
/* Recategorize emoji skin-tone modifiers as Unicode mark, so they
* behave correctly in non-native directionality. They originally
* are MODIFIER_SYMBOL. Fixes:
- * https://github.com/behdad/harfbuzz/issues/169
+ * https://github.com/harfbuzz/harfbuzz/issues/169
*/
if (unlikely (hb_in_range (u, 0x1F3FBu, 0x1F3FFu)))
{
@@ -337,6 +350,8 @@ _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
}
+#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
+
static inline bool
_hb_glyph_info_is_unicode_space (const hb_glyph_info_t *info)
{
@@ -367,9 +382,9 @@ _hb_glyph_info_is_default_ignorable (const hb_glyph_info_t *info)
!_hb_glyph_info_ligated (info);
}
static inline hb_bool_t
-_hb_glyph_info_is_default_ignorable_and_not_fvs (const hb_glyph_info_t *info)
+_hb_glyph_info_is_default_ignorable_and_not_hidden (const hb_glyph_info_t *info)
{
- return ((info->unicode_props() & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_FVS))
+ return ((info->unicode_props() & (UPROPS_MASK_IGNORABLE|UPROPS_MASK_HIDDEN))
== UPROPS_MASK_IGNORABLE) &&
!_hb_glyph_info_ligated (info);
}
@@ -617,5 +632,4 @@ _hb_buffer_assert_gsubgpos_vars (hb_buffer_t *buffer)
#undef lig_props
#undef glyph_props
-
#endif /* HB_OT_LAYOUT_PRIVATE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc
index 145ec76389..8845889827 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc
@@ -34,22 +34,21 @@
#include "hb-ot-layout-gdef-table.hh"
#include "hb-ot-layout-gsub-table.hh"
#include "hb-ot-layout-gpos-table.hh"
-#include "hb-ot-layout-jstf-table.hh"
+#include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise.
+#include "hb-ot-name-table.hh" // Just so we compile it; unused otherwise.
#include "hb-ot-map-private.hh"
-#include <stdlib.h>
-#include <string.h>
+const void * const OT::_hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
-HB_SHAPER_DATA_ENSURE_DECLARE(ot, face)
hb_ot_layout_t *
_hb_ot_layout_create (hb_face_t *face)
{
hb_ot_layout_t *layout = (hb_ot_layout_t *) calloc (1, sizeof (hb_ot_layout_t));
if (unlikely (!layout))
- return NULL;
+ return nullptr;
layout->gdef_blob = OT::Sanitizer<OT::GDEF>::sanitize (face->reference_table (HB_OT_TAG_GDEF));
layout->gdef = OT::Sanitizer<OT::GDEF>::lock_instance (layout->gdef_blob);
@@ -60,9 +59,9 @@ _hb_ot_layout_create (hb_face_t *face)
layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
- /* The MATH table is rarely used, so only try and load it in _get_math. */
- layout->math_blob = NULL;
- layout->math = NULL;
+ layout->math.init (face);
+ layout->fvar.init (face);
+ layout->avar.init (face);
{
/*
@@ -106,14 +105,28 @@ _hb_ot_layout_create (hb_face_t *face)
|| (928 == gdef_len && 59332 == gpos_len && 23298 == gsub_len)
/* sha1sum:6d400781948517c3c0441ba42acb309584b73033 tahomabd.ttf from Windows 8.1 */
|| (940 == gdef_len && 60732 == gpos_len && 23310 == gsub_len)
+ /* tahoma.ttf v6.04 from Windows 8.1 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
+ || (964 == gdef_len && 60072 == gpos_len && 23836 == gsub_len)
+ /* tahomabd.ttf v6.04 from Windows 8.1 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
+ || (976 == gdef_len && 61456 == gpos_len && 23832 == gsub_len)
/* sha1sum:e55fa2dfe957a9f7ec26be516a0e30b0c925f846 tahoma.ttf from Windows 10 */
|| (994 == gdef_len && 60336 == gpos_len && 24474 == gsub_len)
/* sha1sum:7199385abb4c2cc81c83a151a7599b6368e92343 tahomabd.ttf from Windows 10 */
|| (1006 == gdef_len && 61740 == gpos_len && 24470 == gsub_len)
+ /* tahoma.ttf v6.91 from Windows 10 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
+ || (1006 == gdef_len && 61346 == gpos_len && 24576 == gsub_len)
+ /* tahomabd.ttf v6.91 from Windows 10 x64, see https://bugzilla.mozilla.org/show_bug.cgi?id=1279925 */
+ || (1018 == gdef_len && 62828 == gpos_len && 24572 == gsub_len)
+ /* sha1sum:b9c84d820c49850d3d27ec498be93955b82772b5 tahoma.ttf from Windows 10 AU */
+ || (1006 == gdef_len && 61352 == gpos_len && 24576 == gsub_len)
+ /* sha1sum:2bdfaab28174bdadd2f3d4200a30a7ae31db79d2 tahomabd.ttf from Windows 10 AU */
+ || (1018 == gdef_len && 62834 == gpos_len && 24572 == gsub_len)
/* sha1sum:b0d36cf5a2fbe746a3dd277bffc6756a820807a7 Tahoma.ttf from Mac OS X 10.9 */
|| (832 == gdef_len && 47162 == gpos_len && 7324 == gsub_len)
/* sha1sum:12fc4538e84d461771b30c18b5eb6bd434e30fba Tahoma Bold.ttf from Mac OS X 10.9 */
|| (844 == gdef_len && 45474 == gpos_len && 7302 == gsub_len)
+ /* sha1sum:eb8afadd28e9cf963e886b23a30b44ab4fd83acc himalaya.ttf from Windows 7 */
+ || (180 == gdef_len && 7254 == gpos_len && 13054 == gsub_len)
/* sha1sum:73da7f025b238a3f737aa1fde22577a6370f77b0 himalaya.ttf from Windows 8 */
|| (192 == gdef_len && 7254 == gpos_len && 12638 == gsub_len)
/* sha1sum:6e80fd1c0b059bbee49272401583160dc1e6a427 himalaya.ttf from Windows 8.1 */
@@ -124,6 +137,14 @@ _hb_ot_layout_create (hb_face_t *face)
/* 2c0c90c6f6087ffbfea76589c93113a9cbb0e75f cantarell-fonts-0.0.21/otf/Cantarell-Bold.otf */
/* 55461f5b853c6da88069ffcdf7f4dd3f8d7e3e6b cantarell-fonts-0.0.21/otf/Cantarell-Bold-Oblique.otf */
|| (188 == gdef_len && 3426 == gpos_len && 264 == gsub_len)
+ /* d125afa82a77a6475ac0e74e7c207914af84b37a padauk-2.80/Padauk.ttf RHEL 7.2 */
+ || (1058 == gdef_len && 11818 == gpos_len && 47032 == gsub_len)
+ /* 0f7b80437227b90a577cc078c0216160ae61b031 padauk-2.80/Padauk-Bold.ttf RHEL 7.2*/
+ || (1046 == gdef_len && 12600 == gpos_len && 47030 == gsub_len)
+ /* d3dde9aa0a6b7f8f6a89ef1002e9aaa11b882290 padauk-2.80/Padauk.ttf Ubuntu 16.04 */
+ || (1058 == gdef_len && 16770 == gpos_len && 71796 == gsub_len)
+ /* 5f3c98ccccae8a953be2d122c1b3a77fd805093f padauk-2.80/Padauk-Bold.ttf Ubuntu 16.04 */
+ || (1046 == gdef_len && 17862 == gpos_len && 71790 == gsub_len)
/* 6c93b63b64e8b2c93f5e824e78caca555dc887c7 padauk-2.80/Padauk-book.ttf */
|| (1046 == gdef_len && 17112 == gpos_len && 71788 == gsub_len)
/* d89b1664058359b8ec82e35d3531931125991fb9 padauk-2.80/Padauk-bookbold.ttf */
@@ -132,6 +153,9 @@ _hb_ot_layout_create (hb_face_t *face)
|| (1330 == gdef_len && 57938 == gpos_len && 109904 == gsub_len)
/* 91fcc10cf15e012d27571e075b3b4dfe31754a8a padauk-3.0/Padauk-bookbold.ttf */
|| (1330 == gdef_len && 58972 == gpos_len && 109904 == gsub_len)
+ /* sha1sum: c26e41d567ed821bed997e937bc0c41435689e85 Padauk.ttf
+ * "Padauk Regular" "Version 2.5", see https://crbug.com/681813 */
+ || (1004 == gdef_len && 14836 == gpos_len && 59092 == gsub_len)
)
{
/* Many versions of Tahoma have bad GDEF tables that incorrectly classify some spacing marks
@@ -156,7 +180,7 @@ _hb_ot_layout_create (hb_face_t *face)
(layout->gpos_lookup_count && !layout->gpos_accels)))
{
_hb_ot_layout_destroy (layout);
- return NULL;
+ return nullptr;
}
for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
@@ -181,7 +205,10 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout)
hb_blob_destroy (layout->gdef_blob);
hb_blob_destroy (layout->gsub_blob);
hb_blob_destroy (layout->gpos_blob);
- hb_blob_destroy (layout->math_blob);
+
+ layout->math.fini ();
+ layout->fvar.fini ();
+ layout->avar.fini ();
free (layout);
}
@@ -256,7 +283,7 @@ hb_ot_layout_get_ligature_carets (hb_font_t *font,
hb_codepoint_t glyph,
unsigned int start_offset,
unsigned int *caret_count /* IN/OUT */,
- int *caret_array /* OUT */)
+ hb_position_t *caret_array /* OUT */)
{
return _get_gdef (font->face).get_lig_carets (font, direction, glyph, start_offset, caret_count, caret_array);
}
@@ -298,7 +325,7 @@ hb_ot_layout_table_find_script (hb_face_t *face,
hb_tag_t script_tag,
unsigned int *script_index)
{
- ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+ static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX), "");
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
if (g.find_script_index (script_tag, script_index))
@@ -329,7 +356,7 @@ hb_ot_layout_table_choose_script (hb_face_t *face,
unsigned int *script_index,
hb_tag_t *chosen_script)
{
- ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX);
+ static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_SCRIPT_INDEX), "");
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
while (*script_tags)
@@ -388,7 +415,7 @@ hb_ot_layout_table_find_feature (hb_face_t *face,
hb_tag_t feature_tag,
unsigned int *feature_index)
{
- ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
+ static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX), "");
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
unsigned int num_features = g.get_feature_count ();
@@ -425,7 +452,7 @@ hb_ot_layout_script_find_language (hb_face_t *face,
hb_tag_t language_tag,
unsigned int *language_index)
{
- ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX);
+ static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX), "");
const OT::Script &s = get_gsubgpos_table (face, table_tag).get_script (script_index);
if (s.find_lang_sys_index (language_tag, language_index))
@@ -451,7 +478,7 @@ hb_ot_layout_language_get_required_feature_index (hb_face_t *face,
script_index,
language_index,
feature_index,
- NULL);
+ nullptr);
}
/**
@@ -504,7 +531,7 @@ hb_ot_layout_language_get_feature_tags (hb_face_t *face,
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
- ASSERT_STATIC (sizeof (unsigned int) == sizeof (hb_tag_t));
+ static_assert ((sizeof (unsigned int) == sizeof (hb_tag_t)), "");
unsigned int ret = l.get_feature_indexes (start_offset, feature_count, (unsigned int *) feature_tags);
if (feature_tags) {
@@ -525,7 +552,7 @@ hb_ot_layout_language_find_feature (hb_face_t *face,
hb_tag_t feature_tag,
unsigned int *feature_index)
{
- ASSERT_STATIC (OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX);
+ static_assert ((OT::Index::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_FEATURE_INDEX), "");
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
const OT::LangSys &l = g.get_script (script_index).get_lang_sys (language_index);
@@ -574,6 +601,7 @@ unsigned int
hb_ot_layout_table_get_lookup_count (hb_face_t *face,
hb_tag_t table_tag)
{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return 0;
switch (table_tag)
{
case HB_OT_TAG_GSUB:
@@ -629,7 +657,7 @@ _hb_ot_layout_collect_lookups_features (hb_face_t *face,
script_index,
language_index,
&required_feature_index,
- NULL))
+ nullptr))
_hb_ot_layout_collect_lookups_lookups (face,
table_tag,
required_feature_index,
@@ -698,7 +726,7 @@ _hb_ot_layout_collect_lookups_languages (hb_face_t *face,
unsigned int count = hb_ot_layout_script_get_language_tags (face,
table_tag,
script_index,
- 0, NULL, NULL);
+ 0, nullptr, nullptr);
for (unsigned int language_index = 0; language_index < count; language_index++)
_hb_ot_layout_collect_lookups_features (face,
table_tag,
@@ -745,7 +773,7 @@ hb_ot_layout_collect_lookups (hb_face_t *face,
/* All scripts */
unsigned int count = hb_ot_layout_table_get_script_tags (face,
table_tag,
- 0, NULL, NULL);
+ 0, nullptr, nullptr);
for (unsigned int script_index = 0; script_index < count; script_index++)
_hb_ot_layout_collect_lookups_languages (face,
table_tag,
@@ -782,10 +810,10 @@ void
hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
hb_tag_t table_tag,
unsigned int lookup_index,
- hb_set_t *glyphs_before, /* OUT. May be NULL */
- hb_set_t *glyphs_input, /* OUT. May be NULL */
- hb_set_t *glyphs_after, /* OUT. May be NULL */
- hb_set_t *glyphs_output /* OUT. May be NULL */)
+ hb_set_t *glyphs_before, /* OUT. May be nullptr */
+ hb_set_t *glyphs_input, /* OUT. May be nullptr */
+ hb_set_t *glyphs_after, /* OUT. May be nullptr */
+ hb_set_t *glyphs_output /* OUT. May be nullptr */)
{
if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return;
@@ -836,7 +864,7 @@ hb_ot_layout_feature_with_variations_get_lookups (hb_face_t *face,
unsigned int *lookup_count /* IN/OUT */,
unsigned int *lookup_indexes /* OUT */)
{
- ASSERT_STATIC (OT::FeatureVariations::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_VARIATIONS_INDEX);
+ static_assert ((OT::FeatureVariations::NOT_FOUND_INDEX == HB_OT_LAYOUT_NO_VARIATIONS_INDEX), "");
const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
const OT::Feature &f = g.get_feature_variation (feature_index, variations_index);
@@ -944,11 +972,11 @@ hb_ot_layout_position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer)
**/
hb_bool_t
hb_ot_layout_get_size_params (hb_face_t *face,
- unsigned int *design_size, /* OUT. May be NULL */
- unsigned int *subfamily_id, /* OUT. May be NULL */
- unsigned int *subfamily_name_id, /* OUT. May be NULL */
- unsigned int *range_start, /* OUT. May be NULL */
- unsigned int *range_end /* OUT. May be NULL */)
+ unsigned int *design_size, /* OUT. May be nullptr */
+ unsigned int *subfamily_id, /* OUT. May be nullptr */
+ unsigned int *subfamily_name_id, /* OUT. May be nullptr */
+ unsigned int *range_start, /* OUT. May be nullptr */
+ unsigned int *range_end /* OUT. May be nullptr */)
{
const OT::GPOS &gpos = _get_gpos (face);
const hb_tag_t tag = HB_TAG ('s','i','z','e');
@@ -1196,6 +1224,7 @@ inline void hb_ot_map_t::apply (const Proxy &proxy,
c.set_lookup_index (lookup_index);
c.set_lookup_mask (lookups[table_index][i].mask);
c.set_auto_zwj (lookups[table_index][i].auto_zwj);
+ c.set_auto_zwnj (lookups[table_index][i].auto_zwnj);
apply_string<Proxy> (&c,
proxy.table.get_lookup (lookup_index),
proxy.accels[lookup_index]);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-map-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-map-private.hh
index 0395c9c22f..97b92cc9a8 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-map-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-map-private.hh
@@ -50,19 +50,25 @@ struct hb_ot_map_t
hb_mask_t mask;
hb_mask_t _1_mask; /* mask for value=1, for quick access */
unsigned int needs_fallback : 1;
+ unsigned int auto_zwnj : 1;
unsigned int auto_zwj : 1;
- static int cmp (const feature_map_t *a, const feature_map_t *b)
- { return a->tag < b->tag ? -1 : a->tag > b->tag ? 1 : 0; }
+ inline int cmp (const hb_tag_t *tag_) const
+ { return *tag_ < tag ? -1 : *tag_ > tag ? 1 : 0; }
};
struct lookup_map_t {
unsigned short index;
+ unsigned short auto_zwnj : 1;
unsigned short auto_zwj : 1;
hb_mask_t mask;
- static int cmp (const lookup_map_t *a, const lookup_map_t *b)
- { return a->index < b->index ? -1 : a->index > b->index ? 1 : 0; }
+ static int cmp (const void *pa, const void *pb)
+ {
+ const lookup_map_t *a = (const lookup_map_t *) pa;
+ const lookup_map_t *b = (const lookup_map_t *) pb;
+ return a->index < b->index ? -1 : a->index > b->index ? 1 : 0;
+ }
};
typedef void (*pause_func_t) (const struct hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer);
@@ -77,7 +83,7 @@ struct hb_ot_map_t
inline hb_mask_t get_global_mask (void) const { return global_mask; }
- inline hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = NULL) const {
+ inline hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = nullptr) const {
const feature_map_t *map = features.bsearch (&feature_tag);
if (shift) *shift = map ? map->shift : 0;
return map ? map->mask : 0;
@@ -106,14 +112,14 @@ struct hb_ot_map_t
inline void get_stage_lookups (unsigned int table_index, unsigned int stage,
const struct lookup_map_t **plookups, unsigned int *lookup_count) const {
if (unlikely (stage == (unsigned int) -1)) {
- *plookups = NULL;
+ *plookups = nullptr;
*lookup_count = 0;
return;
}
assert (stage <= stages[table_index].len);
unsigned int start = stage ? stages[table_index][stage - 1].last_lookup : 0;
unsigned int end = stage < stages[table_index].len ? stages[table_index][stage].last_lookup : lookups[table_index].len;
- *plookups = &lookups[table_index][start];
+ *plookups = end == start ? nullptr : &lookups[table_index][start];
*lookup_count = end - start;
}
@@ -150,8 +156,9 @@ enum hb_ot_map_feature_flags_t {
F_NONE = 0x0000u,
F_GLOBAL = 0x0001u, /* Feature applies to all characters; results in no mask allocated for it. */
F_HAS_FALLBACK = 0x0002u, /* Has fallback implementation, so include mask bit even if feature not found. */
- F_MANUAL_ZWJ = 0x0004u, /* Don't skip over ZWJ when matching. */
- F_GLOBAL_SEARCH = 0x0008u /* If feature not found in LangSys, look for it in global feature list and pick one. */
+ F_MANUAL_ZWNJ = 0x0004u, /* Don't skip over ZWNJ when matching **context**. */
+ F_MANUAL_ZWJ = 0x0008u, /* Don't skip over ZWJ when matching **input**. */
+ F_GLOBAL_SEARCH = 0x0010u /* If feature not found in LangSys, look for it in global feature list and pick one. */
};
HB_MARK_AS_FLAG_T (hb_ot_map_feature_flags_t);
/* Macro version for where const is desired. */
@@ -196,7 +203,8 @@ struct hb_ot_map_builder_t
unsigned int feature_index,
unsigned int variations_index,
hb_mask_t mask,
- bool auto_zwj);
+ bool auto_zwnj = true,
+ bool auto_zwj = true);
struct feature_info_t {
hb_tag_t tag;
@@ -206,9 +214,13 @@ struct hb_ot_map_builder_t
unsigned int default_value; /* for non-global features, what should the unset glyphs take */
unsigned int stage[2]; /* GSUB/GPOS */
- static int cmp (const feature_info_t *a, const feature_info_t *b)
- { return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) :
- (a->seq < b->seq ? -1 : a->seq > b->seq ? 1 : 0); }
+ static int cmp (const void *pa, const void *pb)
+ {
+ const feature_info_t *a = (const feature_info_t *) pa;
+ const feature_info_t *b = (const feature_info_t *) pb;
+ return (a->tag != b->tag) ? (a->tag < b->tag ? -1 : 1) :
+ (a->seq < b->seq ? -1 : a->seq > b->seq ? 1 : 0);
+ }
};
struct stage_info_t {
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-map.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-map.cc
index 9b331d5210..ea9bde9a66 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-map.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-map.cc
@@ -85,6 +85,7 @@ hb_ot_map_builder_t::add_lookups (hb_ot_map_t &m,
unsigned int feature_index,
unsigned int variations_index,
hb_mask_t mask,
+ bool auto_zwnj,
bool auto_zwj)
{
unsigned int lookup_indices[32];
@@ -112,6 +113,7 @@ hb_ot_map_builder_t::add_lookups (hb_ot_map_t &m,
return;
lookup->mask = mask;
lookup->index = lookup_indices[i];
+ lookup->auto_zwnj = auto_zwnj;
lookup->auto_zwj = auto_zwj;
}
@@ -136,7 +138,11 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
const int *coords,
unsigned int num_coords)
{
- m.global_mask = 1;
+ static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), "");
+ unsigned int global_bit_mask = HB_GLYPH_FLAG_DEFINED + 1;
+ unsigned int global_bit_shift = _hb_popcount32 (HB_GLYPH_FLAG_DEFINED);
+
+ m.global_mask = global_bit_mask;
unsigned int required_feature_index[2];
hb_tag_t required_feature_tag[2];
@@ -188,7 +194,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
/* Allocate bits now */
- unsigned int next_bit = 1;
+ unsigned int next_bit = global_bit_shift + 1;
+
for (unsigned int i = 0; i < feature_infos.len; i++)
{
const feature_info_t *info = &feature_infos[i];
@@ -243,11 +250,12 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
map->index[1] = feature_index[1];
map->stage[0] = info->stage[0];
map->stage[1] = info->stage[1];
+ map->auto_zwnj = !(info->flags & F_MANUAL_ZWNJ);
map->auto_zwj = !(info->flags & F_MANUAL_ZWJ);
if ((info->flags & F_GLOBAL) && info->max_value == 1) {
/* Uses the global bit */
- map->shift = 0;
- map->mask = 1;
+ map->shift = global_bit_shift;
+ map->mask = global_bit_mask;
} else {
map->shift = next_bit;
map->mask = (1u << (next_bit + bits_needed)) - (1u << next_bit);
@@ -261,8 +269,8 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
feature_infos.shrink (0); /* Done with these */
- add_gsub_pause (NULL);
- add_gpos_pause (NULL);
+ add_gsub_pause (nullptr);
+ add_gpos_pause (nullptr);
for (unsigned int table_index = 0; table_index < 2; table_index++)
{
@@ -284,8 +292,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
add_lookups (m, face, table_index,
required_feature_index[table_index],
variations_index,
- 1 /* mask */,
- true /* auto_zwj */);
+ global_bit_mask);
for (unsigned i = 0; i < m.features.len; i++)
if (m.features[i].stage[table_index] == stage)
@@ -293,6 +300,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
m.features[i].index[table_index],
variations_index,
m.features[i].mask,
+ m.features[i].auto_zwnj,
m.features[i].auto_zwj);
/* Sort lookups and merge duplicates */
@@ -307,6 +315,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
else
{
m.lookups[table_index][j].mask |= m.lookups[table_index][i].mask;
+ m.lookups[table_index][j].auto_zwnj &= m.lookups[table_index][i].auto_zwnj;
m.lookups[table_index][j].auto_zwj &= m.lookups[table_index][i].auto_zwj;
}
m.lookups[table_index].shrink (j + 1);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-math-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-math-table.hh
new file mode 100644
index 0000000000..7dc3283a28
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-math-table.hh
@@ -0,0 +1,722 @@
+/*
+ * Copyright © 2016 Igalia S.L.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Igalia Author(s): Frédéric Wang
+ */
+
+#ifndef HB_OT_MATH_TABLE_HH
+#define HB_OT_MATH_TABLE_HH
+
+#include "hb-open-type-private.hh"
+#include "hb-ot-layout-common-private.hh"
+#include "hb-ot-math.h"
+
+namespace OT {
+
+
+struct MathValueRecord
+{
+ inline hb_position_t get_x_value (hb_font_t *font, const void *base) const
+ { return font->em_scale_x (value) + (base+deviceTable).get_x_delta (font); }
+ inline hb_position_t get_y_value (hb_font_t *font, const void *base) const
+ { return font->em_scale_y (value) + (base+deviceTable).get_y_delta (font); }
+
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && deviceTable.sanitize (c, base));
+ }
+
+ protected:
+ INT16 value; /* The X or Y value in design units */
+ OffsetTo<Device> deviceTable; /* Offset to the device table - from the
+ * beginning of parent table. May be nullptr.
+ * Suggested format for device table is 1. */
+
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct MathConstants
+{
+ inline bool sanitize_math_value_records (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+
+ unsigned int count = ARRAY_LENGTH (mathValueRecords);
+ for (unsigned int i = 0; i < count; i++)
+ if (!mathValueRecords[i].sanitize (c, this))
+ return_trace (false);
+
+ return_trace (true);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && sanitize_math_value_records(c));
+ }
+
+ inline hb_position_t get_value (hb_ot_math_constant_t constant,
+ hb_font_t *font) const
+ {
+ switch (constant) {
+
+ case HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN:
+ case HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN:
+ return percentScaleDown[constant - HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN];
+
+ case HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT:
+ case HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT:
+ return font->em_scale_y (minHeight[constant - HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT]);
+
+ case HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE:
+ case HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE:
+ case HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP:
+ case HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT:
+ return mathValueRecords[constant - HB_OT_MATH_CONSTANT_MATH_LEADING].get_x_value(font, this);
+
+ case HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT:
+ case HB_OT_MATH_CONSTANT_AXIS_HEIGHT:
+ case HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT:
+ case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN:
+ case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN:
+ case HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP:
+ case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP:
+ case HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS:
+ case HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN:
+ case HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_MATH_LEADING:
+ case HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER:
+ case HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS:
+ case HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP:
+ case HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP:
+ case HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER:
+ case HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS:
+ case HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP:
+ case HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP:
+ case HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN:
+ case HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN:
+ case HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_STACK_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP:
+ case HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP:
+ case HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN:
+ case HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN:
+ case HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN:
+ case HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP:
+ case HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN:
+ case HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN:
+ case HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX:
+ case HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN:
+ case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX:
+ case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT:
+ case HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN:
+ case HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP:
+ case HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED:
+ case HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER:
+ case HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS:
+ case HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP:
+ case HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN:
+ case HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN:
+ return mathValueRecords[constant - HB_OT_MATH_CONSTANT_MATH_LEADING].get_y_value(font, this);
+
+ case HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT:
+ return radicalDegreeBottomRaisePercent;
+
+ default:
+ return 0;
+ }
+ }
+
+ protected:
+ INT16 percentScaleDown[2];
+ UINT16 minHeight[2];
+ MathValueRecord mathValueRecords[51];
+ INT16 radicalDegreeBottomRaisePercent;
+
+ public:
+ DEFINE_SIZE_STATIC (214);
+};
+
+struct MathItalicsCorrectionInfo
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ coverage.sanitize (c, this) &&
+ italicsCorrection.sanitize (c, this));
+ }
+
+ inline hb_position_t get_value (hb_codepoint_t glyph,
+ hb_font_t *font) const
+ {
+ unsigned int index = (this+coverage).get_coverage (glyph);
+ return italicsCorrection[index].get_x_value (font, this);
+ }
+
+ protected:
+ OffsetTo<Coverage> coverage; /* Offset to Coverage table -
+ * from the beginning of
+ * MathItalicsCorrectionInfo
+ * table. */
+ ArrayOf<MathValueRecord> italicsCorrection; /* Array of MathValueRecords
+ * defining italics correction
+ * values for each
+ * covered glyph. */
+
+ public:
+ DEFINE_SIZE_ARRAY (4, italicsCorrection);
+};
+
+struct MathTopAccentAttachment
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ topAccentCoverage.sanitize (c, this) &&
+ topAccentAttachment.sanitize (c, this));
+ }
+
+ inline hb_position_t get_value (hb_codepoint_t glyph,
+ hb_font_t *font) const
+ {
+ unsigned int index = (this+topAccentCoverage).get_coverage (glyph);
+ if (index == NOT_COVERED)
+ return font->get_glyph_h_advance (glyph) / 2;
+ return topAccentAttachment[index].get_x_value(font, this);
+ }
+
+ protected:
+ OffsetTo<Coverage> topAccentCoverage; /* Offset to Coverage table -
+ * from the beginning of
+ * MathTopAccentAttachment
+ * table. */
+ ArrayOf<MathValueRecord> topAccentAttachment; /* Array of MathValueRecords
+ * defining top accent
+ * attachment points for each
+ * covered glyph. */
+
+ public:
+ DEFINE_SIZE_ARRAY (2 + 2, topAccentAttachment);
+};
+
+struct MathKern
+{
+ inline bool sanitize_math_value_records (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ unsigned int count = 2 * heightCount + 1;
+ for (unsigned int i = 0; i < count; i++)
+ if (!mathValueRecords[i].sanitize (c, this)) return_trace (false);
+ return_trace (true);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ c->check_array (mathValueRecords,
+ mathValueRecords[0].static_size,
+ 2 * heightCount + 1) &&
+ sanitize_math_value_records (c));
+ }
+
+ inline hb_position_t get_value (hb_position_t correction_height, hb_font_t *font) const
+ {
+ const MathValueRecord* correctionHeight = mathValueRecords;
+ const MathValueRecord* kernValue = mathValueRecords + heightCount;
+ int sign = font->y_scale < 0 ? -1 : +1;
+
+ /* The description of the MathKern table is a ambiguous, but interpreting
+ * "between the two heights found at those indexes" for 0 < i < len as
+ *
+ * correctionHeight[i-1] < correction_height <= correctionHeight[i]
+ *
+ * makes the result consistent with the limit cases and we can just use the
+ * binary search algorithm of std::upper_bound:
+ */
+ unsigned int i = 0;
+ unsigned int count = heightCount;
+ while (count > 0)
+ {
+ unsigned int half = count / 2;
+ hb_position_t height = correctionHeight[i + half].get_y_value(font, this);
+ if (sign * height < sign * correction_height)
+ {
+ i += half + 1;
+ count -= half + 1;
+ } else
+ count = half;
+ }
+ return kernValue[i].get_x_value(font, this);
+ }
+
+ protected:
+ UINT16 heightCount;
+ MathValueRecord mathValueRecords[VAR]; /* Array of correction heights at
+ * which the kern value changes.
+ * Sorted by the height value in
+ * design units (heightCount entries),
+ * Followed by:
+ * Array of kern values corresponding
+ * to heights. (heightCount+1 entries).
+ */
+
+ public:
+ DEFINE_SIZE_ARRAY (2, mathValueRecords);
+};
+
+struct MathKernInfoRecord
+{
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+
+ unsigned int count = ARRAY_LENGTH (mathKern);
+ for (unsigned int i = 0; i < count; i++)
+ if (unlikely (!mathKern[i].sanitize (c, base)))
+ return_trace (false);
+
+ return_trace (true);
+ }
+
+ inline hb_position_t get_kerning (hb_ot_math_kern_t kern,
+ hb_position_t correction_height,
+ hb_font_t *font,
+ const void *base) const
+ {
+ unsigned int idx = kern;
+ if (unlikely (idx >= ARRAY_LENGTH (mathKern))) return 0;
+ return (base+mathKern[idx]).get_value (correction_height, font);
+ }
+
+ protected:
+ /* Offset to MathKern table for each corner -
+ * from the beginning of MathKernInfo table. May be nullptr. */
+ OffsetTo<MathKern> mathKern[4];
+
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct MathKernInfo
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ mathKernCoverage.sanitize (c, this) &&
+ mathKernInfoRecords.sanitize (c, this));
+ }
+
+ inline hb_position_t get_kerning (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ hb_position_t correction_height,
+ hb_font_t *font) const
+ {
+ unsigned int index = (this+mathKernCoverage).get_coverage (glyph);
+ return mathKernInfoRecords[index].get_kerning (kern, correction_height, font, this);
+ }
+
+ protected:
+ OffsetTo<Coverage> mathKernCoverage; /* Offset to Coverage table -
+ * from the beginning of the
+ * MathKernInfo table. */
+ ArrayOf<MathKernInfoRecord> mathKernInfoRecords; /* Array of
+ * MathKernInfoRecords,
+ * per-glyph information for
+ * mathematical positioning
+ * of subscripts and
+ * superscripts. */
+
+ public:
+ DEFINE_SIZE_ARRAY (4, mathKernInfoRecords);
+};
+
+struct MathGlyphInfo
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ mathItalicsCorrectionInfo.sanitize (c, this) &&
+ mathTopAccentAttachment.sanitize (c, this) &&
+ extendedShapeCoverage.sanitize (c, this) &&
+ mathKernInfo.sanitize(c, this));
+ }
+
+ inline hb_position_t
+ get_italics_correction (hb_codepoint_t glyph, hb_font_t *font) const
+ { return (this+mathItalicsCorrectionInfo).get_value (glyph, font); }
+
+ inline hb_position_t
+ get_top_accent_attachment (hb_codepoint_t glyph, hb_font_t *font) const
+ { return (this+mathTopAccentAttachment).get_value (glyph, font); }
+
+ inline bool is_extended_shape (hb_codepoint_t glyph) const
+ { return (this+extendedShapeCoverage).get_coverage (glyph) != NOT_COVERED; }
+
+ inline hb_position_t get_kerning (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ hb_position_t correction_height,
+ hb_font_t *font) const
+ { return (this+mathKernInfo).get_kerning (glyph, kern, correction_height, font); }
+
+ protected:
+ /* Offset to MathItalicsCorrectionInfo table -
+ * from the beginning of MathGlyphInfo table. */
+ OffsetTo<MathItalicsCorrectionInfo> mathItalicsCorrectionInfo;
+
+ /* Offset to MathTopAccentAttachment table -
+ * from the beginning of MathGlyphInfo table. */
+ OffsetTo<MathTopAccentAttachment> mathTopAccentAttachment;
+
+ /* Offset to coverage table for Extended Shape glyphs -
+ * from the beginning of MathGlyphInfo table. When the left or right glyph of
+ * a box is an extended shape variant, the (ink) box (and not the default
+ * position defined by values in MathConstants table) should be used for
+ * vertical positioning purposes. May be nullptr.. */
+ OffsetTo<Coverage> extendedShapeCoverage;
+
+ /* Offset to MathKernInfo table -
+ * from the beginning of MathGlyphInfo table. */
+ OffsetTo<MathKernInfo> mathKernInfo;
+
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct MathGlyphVariantRecord
+{
+ friend struct MathGlyphConstruction;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ GlyphID variantGlyph; /* Glyph ID for the variant. */
+ UINT16 advanceMeasurement; /* Advance width/height, in design units, of the
+ * variant, in the direction of requested
+ * glyph extension. */
+
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct PartFlags : UINT16
+{
+ enum Flags {
+ Extender = 0x0001u, /* If set, the part can be skipped or repeated. */
+
+ Defined = 0x0001u, /* All defined flags. */
+ };
+
+ public:
+ DEFINE_SIZE_STATIC (2);
+};
+
+struct MathGlyphPartRecord
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ inline void extract (hb_ot_math_glyph_part_t &out,
+ int scale,
+ hb_font_t *font) const
+ {
+ out.glyph = glyph;
+
+ out.start_connector_length = font->em_scale (startConnectorLength, scale);
+ out.end_connector_length = font->em_scale (endConnectorLength, scale);
+ out.full_advance = font->em_scale (fullAdvance, scale);
+
+ static_assert ((unsigned int) HB_MATH_GLYPH_PART_FLAG_EXTENDER ==
+ (unsigned int) PartFlags::Extender, "");
+
+ out.flags = (hb_ot_math_glyph_part_flags_t)
+ (unsigned int)
+ (partFlags & PartFlags::Defined);
+ }
+
+ protected:
+ GlyphID glyph; /* Glyph ID for the part. */
+ UINT16 startConnectorLength; /* Advance width/ height of the straight bar
+ * connector material, in design units, is at
+ * the beginning of the glyph, in the
+ * direction of the extension. */
+ UINT16 endConnectorLength; /* Advance width/ height of the straight bar
+ * connector material, in design units, is at
+ * the end of the glyph, in the direction of
+ * the extension. */
+ UINT16 fullAdvance; /* Full advance width/height for this part,
+ * in the direction of the extension.
+ * In design units. */
+ PartFlags partFlags; /* Part qualifiers. */
+
+ public:
+ DEFINE_SIZE_STATIC (10);
+};
+
+struct MathGlyphAssembly
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ italicsCorrection.sanitize(c, this) &&
+ partRecords.sanitize(c));
+ }
+
+ inline unsigned int get_parts (hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *parts_count, /* IN/OUT */
+ hb_ot_math_glyph_part_t *parts /* OUT */,
+ hb_position_t *italics_correction /* OUT */) const
+ {
+ if (parts_count)
+ {
+ int scale = font->dir_scale (direction);
+ const MathGlyphPartRecord *arr =
+ partRecords.sub_array (start_offset, parts_count);
+ unsigned int count = *parts_count;
+ for (unsigned int i = 0; i < count; i++)
+ arr[i].extract (parts[i], scale, font);
+ }
+
+ if (italics_correction)
+ *italics_correction = italicsCorrection.get_x_value (font, this);
+
+ return partRecords.len;
+ }
+
+ protected:
+ MathValueRecord italicsCorrection; /* Italics correction of this
+ * MathGlyphAssembly. Should not
+ * depend on the assembly size. */
+ ArrayOf<MathGlyphPartRecord> partRecords; /* Array of part records, from
+ * left to right and bottom to
+ * top. */
+
+ public:
+ DEFINE_SIZE_ARRAY (6, partRecords);
+};
+
+struct MathGlyphConstruction
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ glyphAssembly.sanitize(c, this) &&
+ mathGlyphVariantRecord.sanitize(c));
+ }
+
+ inline const MathGlyphAssembly &get_assembly (void) const
+ { return this+glyphAssembly; }
+
+ inline unsigned int get_variants (hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *variants_count, /* IN/OUT */
+ hb_ot_math_glyph_variant_t *variants /* OUT */) const
+ {
+ if (variants_count)
+ {
+ int scale = font->dir_scale (direction);
+ const MathGlyphVariantRecord *arr =
+ mathGlyphVariantRecord.sub_array (start_offset, variants_count);
+ unsigned int count = *variants_count;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ variants[i].glyph = arr[i].variantGlyph;
+ variants[i].advance = font->em_scale (arr[i].advanceMeasurement, scale);
+ }
+ }
+ return mathGlyphVariantRecord.len;
+ }
+
+ protected:
+ /* Offset to MathGlyphAssembly table for this shape - from the beginning of
+ MathGlyphConstruction table. May be nullptr. */
+ OffsetTo<MathGlyphAssembly> glyphAssembly;
+
+ /* MathGlyphVariantRecords for alternative variants of the glyphs. */
+ ArrayOf<MathGlyphVariantRecord> mathGlyphVariantRecord;
+
+ public:
+ DEFINE_SIZE_ARRAY (4, mathGlyphVariantRecord);
+};
+
+struct MathVariants
+{
+ inline bool sanitize_offsets (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ unsigned int count = vertGlyphCount + horizGlyphCount;
+ for (unsigned int i = 0; i < count; i++)
+ if (!glyphConstruction[i].sanitize (c, this)) return_trace (false);
+ return_trace (true);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ vertGlyphCoverage.sanitize (c, this) &&
+ horizGlyphCoverage.sanitize (c, this) &&
+ c->check_array (glyphConstruction,
+ glyphConstruction[0].static_size,
+ vertGlyphCount + horizGlyphCount) &&
+ sanitize_offsets (c));
+ }
+
+ inline hb_position_t get_min_connector_overlap (hb_direction_t direction,
+ hb_font_t *font) const
+ { return font->em_scale_dir (minConnectorOverlap, direction); }
+
+ inline unsigned int get_glyph_variants (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *variants_count, /* IN/OUT */
+ hb_ot_math_glyph_variant_t *variants /* OUT */) const
+ { return get_glyph_construction (glyph, direction, font)
+ .get_variants (direction, font, start_offset, variants_count, variants); }
+
+ inline unsigned int get_glyph_parts (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_font_t *font,
+ unsigned int start_offset,
+ unsigned int *parts_count, /* IN/OUT */
+ hb_ot_math_glyph_part_t *parts /* OUT */,
+ hb_position_t *italics_correction /* OUT */) const
+ { return get_glyph_construction (glyph, direction, font)
+ .get_assembly ()
+ .get_parts (direction, font,
+ start_offset, parts_count, parts,
+ italics_correction); }
+
+ private:
+ inline const MathGlyphConstruction &
+ get_glyph_construction (hb_codepoint_t glyph,
+ hb_direction_t direction,
+ hb_font_t *font) const
+ {
+ bool vertical = HB_DIRECTION_IS_VERTICAL (direction);
+ unsigned int count = vertical ? vertGlyphCount : horizGlyphCount;
+ const OffsetTo<Coverage> &coverage = vertical ? vertGlyphCoverage
+ : horizGlyphCoverage;
+
+ unsigned int index = (this+coverage).get_coverage (glyph);
+ if (unlikely (index >= count)) return Null(MathGlyphConstruction);
+
+ if (!vertical)
+ index += vertGlyphCount;
+
+ return this+glyphConstruction[index];
+ }
+
+ protected:
+ UINT16 minConnectorOverlap; /* Minimum overlap of connecting
+ * glyphs during glyph construction,
+ * in design units. */
+ OffsetTo<Coverage> vertGlyphCoverage; /* Offset to Coverage table -
+ * from the beginning of MathVariants
+ * table. */
+ OffsetTo<Coverage> horizGlyphCoverage; /* Offset to Coverage table -
+ * from the beginning of MathVariants
+ * table. */
+ UINT16 vertGlyphCount; /* Number of glyphs for which
+ * information is provided for
+ * vertically growing variants. */
+ UINT16 horizGlyphCount; /* Number of glyphs for which
+ * information is provided for
+ * horizontally growing variants. */
+
+ /* Array of offsets to MathGlyphConstruction tables - from the beginning of
+ the MathVariants table, for shapes growing in vertical/horizontal
+ direction. */
+ OffsetTo<MathGlyphConstruction> glyphConstruction[VAR];
+
+ public:
+ DEFINE_SIZE_ARRAY (10, glyphConstruction);
+};
+
+
+/*
+ * MATH -- The MATH Table
+ */
+
+struct MATH
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_MATH;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (version.sanitize (c) &&
+ likely (version.major == 1) &&
+ mathConstants.sanitize (c, this) &&
+ mathGlyphInfo.sanitize (c, this) &&
+ mathVariants.sanitize (c, this));
+ }
+
+ inline hb_position_t get_constant (hb_ot_math_constant_t constant,
+ hb_font_t *font) const
+ { return (this+mathConstants).get_value (constant, font); }
+
+ inline const MathGlyphInfo &get_math_glyph_info (void) const
+ { return this+mathGlyphInfo; }
+
+ inline const MathVariants &get_math_variants (void) const
+ { return this+mathVariants; }
+
+ protected:
+ FixedVersion<>version; /* Version of the MATH table
+ * initially set to 0x00010000u */
+ OffsetTo<MathConstants> mathConstants;/* MathConstants table */
+ OffsetTo<MathGlyphInfo> mathGlyphInfo;/* MathGlyphInfo table */
+ OffsetTo<MathVariants> mathVariants; /* MathVariants table */
+
+ public:
+ DEFINE_SIZE_STATIC (10);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_MATH_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-math.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-math.cc
index 9ef21d2995..f82a07353c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-math.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-math.cc
@@ -26,33 +26,15 @@
#include "hb-open-type-private.hh"
-#include "hb-ot-layout-math-table.hh"
-
-HB_SHAPER_DATA_ENSURE_DECLARE(ot, face)
+#include "hb-ot-layout-private.hh"
+#include "hb-ot-math-table.hh"
static inline const OT::MATH&
_get_math (hb_face_t *face)
{
if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::MATH);
-
hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
-
-retry:
- const OT::MATH *math = (const OT::MATH *) hb_atomic_ptr_get (&layout->math);
-
- if (unlikely (!math))
- {
- hb_blob_t *blob = OT::Sanitizer<OT::MATH>::sanitize (face->reference_table (HB_OT_TAG_MATH));
- math = OT::Sanitizer<OT::MATH>::lock_instance (blob);
- if (!hb_atomic_ptr_cmpexch (&layout->math, NULL, math))
- {
- hb_blob_destroy (blob);
- goto retry;
- }
- layout->math_blob = blob;
- }
-
- return *math;
+ return *(layout->math.get ());
}
/*
@@ -64,10 +46,9 @@ retry:
* @face: #hb_face_t to test
*
* This function allows to verify the presence of an OpenType MATH table on the
- * face. If so, such a table will be loaded into memory and sanitized. You can
- * then safely call other functions for math layout and shaping.
+ * face.
*
- * Return value: #TRUE if face has a MATH table and #FALSE otherwise
+ * Return value: true if face has a MATH table, false otherwise
*
* Since: 1.3.3
**/
@@ -136,10 +117,10 @@ hb_ot_math_get_glyph_top_accent_attachment (hb_font_t *font,
/**
* hb_ot_math_is_glyph_extended_shape:
- * @font: a #hb_font_t to test
+ * @face: a #hb_face_t to test
* @glyph: a glyph index to test
*
- * Return value: #TRUE if the glyph is an extended shape and #FALSE otherwise
+ * Return value: true if the glyph is an extended shape, false otherwise
*
* Since: 1.3.3
**/
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-maxp-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-maxp-table.hh
index 943e3908c7..f6d283eb14 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-maxp-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-maxp-table.hh
@@ -60,7 +60,7 @@ struct maxp
protected:
FixedVersion<>version; /* Version of the maxp table (0.5 or 1.0),
* 0x00005000u or 0x00010000u. */
- USHORT numGlyphs; /* The number of glyphs in the font. */
+ UINT16 numGlyphs; /* The number of glyphs in the font. */
public:
DEFINE_SIZE_STATIC (6);
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-name-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-name-table.hh
index 870f123325..4c5b3c0f98 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-name-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-name-table.hh
@@ -42,8 +42,10 @@ namespace OT {
struct NameRecord
{
- static int cmp (const NameRecord *a, const NameRecord *b)
+ static int cmp (const void *pa, const void *pb)
{
+ const NameRecord *a = (const NameRecord *) pa;
+ const NameRecord *b = (const NameRecord *) pb;
int ret;
ret = b->platformID.cmp (a->platformID);
if (ret) return ret;
@@ -63,12 +65,12 @@ struct NameRecord
return_trace (c->check_struct (this) && c->check_range ((char *) base, (unsigned int) length + offset));
}
- USHORT platformID; /* Platform ID. */
- USHORT encodingID; /* Platform-specific encoding ID. */
- USHORT languageID; /* Language ID. */
- USHORT nameID; /* Name ID. */
- USHORT length; /* String length (in bytes). */
- USHORT offset; /* String offset from start of storage area (in bytes). */
+ UINT16 platformID; /* Platform ID. */
+ UINT16 encodingID; /* Platform-specific encoding ID. */
+ UINT16 languageID; /* Language ID. */
+ UINT16 nameID; /* Name ID. */
+ UINT16 length; /* String length (in bytes). */
+ UINT16 offset; /* String offset from start of storage area (in bytes). */
public:
DEFINE_SIZE_STATIC (12);
};
@@ -89,7 +91,7 @@ struct name
key.encodingID.set (encoding_id);
key.languageID.set (language_id);
key.nameID.set (name_id);
- NameRecord *match = (NameRecord *) bsearch (&key, nameRecord, count, sizeof (nameRecord[0]), (hb_compare_func_t) NameRecord::cmp);
+ NameRecord *match = (NameRecord *) bsearch (&key, nameRecord, count, sizeof (nameRecord[0]), NameRecord::cmp);
if (!match)
return 0;
@@ -121,9 +123,9 @@ struct name
}
/* We only implement format 0 for now. */
- USHORT format; /* Format selector (=0/1). */
- USHORT count; /* Number of name records. */
- Offset<> stringOffset; /* Offset to start of string storage (from start of table). */
+ UINT16 format; /* Format selector (=0/1). */
+ UINT16 count; /* Number of name records. */
+ Offset16 stringOffset; /* Offset to start of string storage (from start of table). */
NameRecord nameRecord[VAR]; /* The name records where count is the number of records. */
public:
DEFINE_SIZE_ARRAY (6, nameRecord);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh
index 4709cd6e87..aa78f1e0a6 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-os2-table.hh
@@ -50,50 +50,50 @@ struct os2
}
public:
- USHORT version;
+ UINT16 version;
/* Version 0 */
- SHORT xAvgCharWidth;
- USHORT usWeightClass;
- USHORT usWidthClass;
- USHORT fsType;
- SHORT ySubscriptXSize;
- SHORT ySubscriptYSize;
- SHORT ySubscriptXOffset;
- SHORT ySubscriptYOffset;
- SHORT ySuperscriptXSize;
- SHORT ySuperscriptYSize;
- SHORT ySuperscriptXOffset;
- SHORT ySuperscriptYOffset;
- SHORT yStrikeoutSize;
- SHORT yStrikeoutPosition;
- SHORT sFamilyClass;
- BYTE panose[10];
- ULONG ulUnicodeRange[4];
+ INT16 xAvgCharWidth;
+ UINT16 usWeightClass;
+ UINT16 usWidthClass;
+ UINT16 fsType;
+ INT16 ySubscriptXSize;
+ INT16 ySubscriptYSize;
+ INT16 ySubscriptXOffset;
+ INT16 ySubscriptYOffset;
+ INT16 ySuperscriptXSize;
+ INT16 ySuperscriptYSize;
+ INT16 ySuperscriptXOffset;
+ INT16 ySuperscriptYOffset;
+ INT16 yStrikeoutSize;
+ INT16 yStrikeoutPosition;
+ INT16 sFamilyClass;
+ UINT8 panose[10];
+ UINT32 ulUnicodeRange[4];
Tag achVendID;
- USHORT fsSelection;
- USHORT usFirstCharIndex;
- USHORT usLastCharIndex;
- SHORT sTypoAscender;
- SHORT sTypoDescender;
- SHORT sTypoLineGap;
- USHORT usWinAscent;
- USHORT usWinDescent;
+ UINT16 fsSelection;
+ UINT16 usFirstCharIndex;
+ UINT16 usLastCharIndex;
+ INT16 sTypoAscender;
+ INT16 sTypoDescender;
+ INT16 sTypoLineGap;
+ UINT16 usWinAscent;
+ UINT16 usWinDescent;
/* Version 1 */
- //ULONG ulCodePageRange1;
- //ULONG ulCodePageRange2;
+ //UINT32 ulCodePageRange1;
+ //UINT32 ulCodePageRange2;
/* Version 2 */
- //SHORT sxHeight;
- //SHORT sCapHeight;
- //USHORT usDefaultChar;
- //USHORT usBreakChar;
- //USHORT usMaxContext;
+ //INT16 sxHeight;
+ //INT16 sCapHeight;
+ //UINT16 usDefaultChar;
+ //UINT16 usBreakChar;
+ //UINT16 usMaxContext;
/* Version 5 */
- //USHORT usLowerOpticalPointSize;
- //USHORT usUpperOpticalPointSize;
+ //UINT16 usLowerOpticalPointSize;
+ //UINT16 usUpperOpticalPointSize;
public:
DEFINE_SIZE_STATIC (78);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-post-macroman.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-post-macroman.hh
new file mode 100644
index 0000000000..dbbb97e5a9
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-post-macroman.hh
@@ -0,0 +1,294 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_POST_MACROMAN_HH
+#if 0 /* Make checks happy. */
+#define HB_OT_POST_MACROMAN_HH
+#include "hb-private.hh"
+#endif
+
+
+_S(".notdef")
+_S(".null")
+_S("nonmarkingreturn")
+_S("space")
+_S("exclam")
+_S("quotedbl")
+_S("numbersign")
+_S("dollar")
+_S("percent")
+_S("ampersand")
+_S("quotesingle")
+_S("parenleft")
+_S("parenright")
+_S("asterisk")
+_S("plus")
+_S("comma")
+_S("hyphen")
+_S("period")
+_S("slash")
+_S("zero")
+_S("one")
+_S("two")
+_S("three")
+_S("four")
+_S("five")
+_S("six")
+_S("seven")
+_S("eight")
+_S("nine")
+_S("colon")
+_S("semicolon")
+_S("less")
+_S("equal")
+_S("greater")
+_S("question")
+_S("at")
+_S("A")
+_S("B")
+_S("C")
+_S("D")
+_S("E")
+_S("F")
+_S("G")
+_S("H")
+_S("I")
+_S("J")
+_S("K")
+_S("L")
+_S("M")
+_S("N")
+_S("O")
+_S("P")
+_S("Q")
+_S("R")
+_S("S")
+_S("T")
+_S("U")
+_S("V")
+_S("W")
+_S("X")
+_S("Y")
+_S("Z")
+_S("bracketleft")
+_S("backslash")
+_S("bracketright")
+_S("asciicircum")
+_S("underscore")
+_S("grave")
+_S("a")
+_S("b")
+_S("c")
+_S("d")
+_S("e")
+_S("f")
+_S("g")
+_S("h")
+_S("i")
+_S("j")
+_S("k")
+_S("l")
+_S("m")
+_S("n")
+_S("o")
+_S("p")
+_S("q")
+_S("r")
+_S("s")
+_S("t")
+_S("u")
+_S("v")
+_S("w")
+_S("x")
+_S("y")
+_S("z")
+_S("braceleft")
+_S("bar")
+_S("braceright")
+_S("asciitilde")
+_S("Adieresis")
+_S("Aring")
+_S("Ccedilla")
+_S("Eacute")
+_S("Ntilde")
+_S("Odieresis")
+_S("Udieresis")
+_S("aacute")
+_S("agrave")
+_S("acircumflex")
+_S("adieresis")
+_S("atilde")
+_S("aring")
+_S("ccedilla")
+_S("eacute")
+_S("egrave")
+_S("ecircumflex")
+_S("edieresis")
+_S("iacute")
+_S("igrave")
+_S("icircumflex")
+_S("idieresis")
+_S("ntilde")
+_S("oacute")
+_S("ograve")
+_S("ocircumflex")
+_S("odieresis")
+_S("otilde")
+_S("uacute")
+_S("ugrave")
+_S("ucircumflex")
+_S("udieresis")
+_S("dagger")
+_S("degree")
+_S("cent")
+_S("sterling")
+_S("section")
+_S("bullet")
+_S("paragraph")
+_S("germandbls")
+_S("registered")
+_S("copyright")
+_S("trademark")
+_S("acute")
+_S("dieresis")
+_S("notequal")
+_S("AE")
+_S("Oslash")
+_S("infinity")
+_S("plusminus")
+_S("lessequal")
+_S("greaterequal")
+_S("yen")
+_S("mu")
+_S("partialdiff")
+_S("summation")
+_S("product")
+_S("pi")
+_S("integral")
+_S("ordfeminine")
+_S("ordmasculine")
+_S("Omega")
+_S("ae")
+_S("oslash")
+_S("questiondown")
+_S("exclamdown")
+_S("logicalnot")
+_S("radical")
+_S("florin")
+_S("approxequal")
+_S("Delta")
+_S("guillemotleft")
+_S("guillemotright")
+_S("ellipsis")
+_S("nonbreakingspace")
+_S("Agrave")
+_S("Atilde")
+_S("Otilde")
+_S("OE")
+_S("oe")
+_S("endash")
+_S("emdash")
+_S("quotedblleft")
+_S("quotedblright")
+_S("quoteleft")
+_S("quoteright")
+_S("divide")
+_S("lozenge")
+_S("ydieresis")
+_S("Ydieresis")
+_S("fraction")
+_S("currency")
+_S("guilsinglleft")
+_S("guilsinglright")
+_S("fi")
+_S("fl")
+_S("daggerdbl")
+_S("periodcentered")
+_S("quotesinglbase")
+_S("quotedblbase")
+_S("perthousand")
+_S("Acircumflex")
+_S("Ecircumflex")
+_S("Aacute")
+_S("Edieresis")
+_S("Egrave")
+_S("Iacute")
+_S("Icircumflex")
+_S("Idieresis")
+_S("Igrave")
+_S("Oacute")
+_S("Ocircumflex")
+_S("apple")
+_S("Ograve")
+_S("Uacute")
+_S("Ucircumflex")
+_S("Ugrave")
+_S("dotlessi")
+_S("circumflex")
+_S("tilde")
+_S("macron")
+_S("breve")
+_S("dotaccent")
+_S("ring")
+_S("cedilla")
+_S("hungarumlaut")
+_S("ogonek")
+_S("caron")
+_S("Lslash")
+_S("lslash")
+_S("Scaron")
+_S("scaron")
+_S("Zcaron")
+_S("zcaron")
+_S("brokenbar")
+_S("Eth")
+_S("eth")
+_S("Yacute")
+_S("yacute")
+_S("Thorn")
+_S("thorn")
+_S("minus")
+_S("multiply")
+_S("onesuperior")
+_S("twosuperior")
+_S("threesuperior")
+_S("onehalf")
+_S("onequarter")
+_S("threequarters")
+_S("franc")
+_S("Gbreve")
+_S("gbreve")
+_S("Idotaccent")
+_S("Scedilla")
+_S("scedilla")
+_S("Cacute")
+_S("cacute")
+_S("Ccaron")
+_S("ccaron")
+_S("dcroat")
+
+
+#endif /* HB_OT_POST_MACROMAN_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh
index 82ab3882a8..7f1c2c420f 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-post-table.hh
@@ -28,7 +28,15 @@
#define HB_OT_POST_TABLE_HH
#include "hb-open-type-private.hh"
+#include "hb-dsalgs.hh"
+#define HB_STRING_ARRAY_NAME format1_names
+#define HB_STRING_ARRAY_LIST "hb-ot-post-macroman.hh"
+#include "hb-string-array.hh"
+#undef HB_STRING_ARRAY_LIST
+#undef HB_STRING_ARRAY_NAME
+
+#define NUM_FORMAT1_NAMES 258
namespace OT {
@@ -45,16 +53,13 @@ struct postV2Tail
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (numberOfGlyphs.sanitize (c) &&
- c->check_array (glyphNameIndex, sizeof (USHORT), numberOfGlyphs));
+ return_trace (glyphNameIndex.sanitize (c));
}
- USHORT numberOfGlyphs; /* Number of glyphs (this should be the
- * same as numGlyphs in 'maxp' table). */
- USHORT glyphNameIndex[VAR]; /* This is not an offset, but is the
+ ArrayOf<UINT16>glyphNameIndex; /* This is not an offset, but is the
* ordinal number of the glyph in 'post'
* string tables. */
- BYTE namesX[VAR]; /* Glyph names with length bytes [variable]
+ UINT8 namesX[VAR]; /* Glyph names with length bytes [variable]
* (a Pascal string). */
DEFINE_SIZE_ARRAY2 (2, glyphNameIndex, namesX);
@@ -71,12 +76,170 @@ struct post
return_trace (false);
if (version.to_int () == 0x00020000)
{
- const postV2Tail &v2 = StructAfter<postV2Tail>(*this);
+ const postV2Tail &v2 = StructAfter<postV2Tail> (*this);
return_trace (v2.sanitize (c));
}
return_trace (true);
}
+ struct accelerator_t
+ {
+ inline void init (hb_face_t *face)
+ {
+ blob = Sanitizer<post>::sanitize (face->reference_table (HB_OT_TAG_post));
+ const post *table = Sanitizer<post>::lock_instance (blob);
+ unsigned int table_length = hb_blob_get_length (blob);
+
+ version = table->version.to_int ();
+ index_to_offset.init ();
+ if (version != 0x00020000)
+ return;
+
+ const postV2Tail &v2 = StructAfter<postV2Tail> (*table);
+
+ glyphNameIndex = &v2.glyphNameIndex;
+ pool = &StructAfter<uint8_t> (v2.glyphNameIndex);
+
+ const uint8_t *end = (uint8_t *) table + table_length;
+ for (const uint8_t *data = pool; data < end && data + *data <= end; data += 1 + *data)
+ {
+ uint32_t *offset = index_to_offset.push ();
+ if (unlikely (!offset))
+ break;
+ *offset = data - pool;
+ }
+ }
+ inline void fini (void)
+ {
+ index_to_offset.finish ();
+ free (gids_sorted_by_name);
+ }
+
+ inline bool get_glyph_name (hb_codepoint_t glyph,
+ char *buf, unsigned int buf_len) const
+ {
+ hb_string_t s = find_glyph_name (glyph);
+ if (!s.len)
+ return false;
+ if (!buf_len)
+ return true;
+ if (buf_len <= s.len) /* What to do with truncation? Returning false for now. */
+ return false;
+ strncpy (buf, s.bytes, s.len);
+ buf[s.len] = '\0';
+ return true;
+ }
+
+ inline bool get_glyph_from_name (const char *name, int len,
+ hb_codepoint_t *glyph) const
+ {
+ unsigned int count = get_glyph_count ();
+ if (unlikely (!count))
+ return false;
+
+ if (len < 0)
+ len = strlen (name);
+
+ if (unlikely (!len))
+ return false;
+
+ retry:
+ uint16_t *gids = (uint16_t *) hb_atomic_ptr_get (&gids_sorted_by_name);
+
+ if (unlikely (!gids))
+ {
+ gids = (uint16_t *) malloc (count * sizeof (gids[0]));
+ if (unlikely (!gids))
+ return false; /* Anything better?! */
+
+ for (unsigned int i = 0; i < count; i++)
+ gids[i] = i;
+ hb_sort_r (gids, count, sizeof (gids[0]), cmp_gids, (void *) this);
+
+ if (!hb_atomic_ptr_cmpexch (&gids_sorted_by_name, nullptr, gids)) {
+ free (gids);
+ goto retry;
+ }
+ }
+
+ hb_string_t st (name, len);
+ const uint16_t *gid = (const uint16_t *) hb_bsearch_r (&st, gids, count, sizeof (gids[0]), cmp_key, (void *) this);
+ if (gid)
+ {
+ *glyph = *gid;
+ return true;
+ }
+
+ return false;
+ }
+
+ protected:
+
+ inline unsigned int get_glyph_count (void) const
+ {
+ if (version == 0x00010000)
+ return NUM_FORMAT1_NAMES;
+
+ if (version == 0x00020000)
+ return glyphNameIndex->len;
+
+ return 0;
+ }
+
+ static inline int cmp_gids (const void *pa, const void *pb, void *arg)
+ {
+ const accelerator_t *thiz = (const accelerator_t *) arg;
+ uint16_t a = * (const uint16_t *) pa;
+ uint16_t b = * (const uint16_t *) pb;
+ return thiz->find_glyph_name (b).cmp (thiz->find_glyph_name (a));
+ }
+
+ static inline int cmp_key (const void *pk, const void *po, void *arg)
+ {
+ const accelerator_t *thiz = (const accelerator_t *) arg;
+ const hb_string_t *key = (const hb_string_t *) pk;
+ uint16_t o = * (const uint16_t *) po;
+ return thiz->find_glyph_name (o).cmp (*key);
+ }
+
+ inline hb_string_t find_glyph_name (hb_codepoint_t glyph) const
+ {
+ if (version == 0x00010000)
+ {
+ if (glyph >= NUM_FORMAT1_NAMES)
+ return hb_string_t ();
+
+ return format1_names (glyph);
+ }
+
+ if (version != 0x00020000 || glyph >= glyphNameIndex->len)
+ return hb_string_t ();
+
+ unsigned int index = glyphNameIndex->array[glyph];
+ if (index < NUM_FORMAT1_NAMES)
+ return format1_names (index);
+ index -= NUM_FORMAT1_NAMES;
+
+ if (index >= index_to_offset.len)
+ return hb_string_t ();
+ unsigned int offset = index_to_offset.array[index];
+
+ const uint8_t *data = pool + offset;
+ unsigned int name_length = *data;
+ data++;
+
+ return hb_string_t ((const char *) data, name_length);
+ }
+
+ private:
+ hb_blob_t *blob;
+ uint32_t version;
+ const ArrayOf<UINT16> *glyphNameIndex;
+ hb_prealloced_array_t<uint32_t, 1> index_to_offset;
+ const uint8_t *pool;
+ mutable uint16_t *gids_sorted_by_name;
+ };
+
public:
FixedVersion<>version; /* 0x00010000 for version 1.0
* 0x00020000 for version 2.0
@@ -98,16 +261,16 @@ struct post
* from the value of this field. */
FWORD underlineThickness; /* Suggested values for the underline
thickness. */
- ULONG isFixedPitch; /* Set to 0 if the font is proportionally
+ UINT32 isFixedPitch; /* Set to 0 if the font is proportionally
* spaced, non-zero if the font is not
* proportionally spaced (i.e. monospaced). */
- ULONG minMemType42; /* Minimum memory usage when an OpenType font
+ UINT32 minMemType42; /* Minimum memory usage when an OpenType font
* is downloaded. */
- ULONG maxMemType42; /* Maximum memory usage when an OpenType font
+ UINT32 maxMemType42; /* Maximum memory usage when an OpenType font
* is downloaded. */
- ULONG minMemType1; /* Minimum memory usage when an OpenType font
+ UINT32 minMemType1; /* Minimum memory usage when an OpenType font
* is downloaded as a Type 1 font. */
- ULONG maxMemType1; /* Maximum memory usage when an OpenType font
+ UINT32 maxMemType1; /* Maximum memory usage when an OpenType font
* is downloaded as a Type 1 font. */
/*postV2Tail v2[VAR];*/
DEFINE_SIZE_STATIC (32);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-fallback.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-fallback.hh
index d97d285210..d98cde121c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-fallback.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-fallback.hh
@@ -73,11 +73,11 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
}
if (!num_glyphs)
- return NULL;
+ return nullptr;
/* Bubble-sort or something equally good!
* May not be good-enough for presidential candidate interviews, but good-enough for us... */
- hb_stable_sort (&glyphs[0], num_glyphs, OT::GlyphID::cmp, &substitutes[0]);
+ hb_stable_sort (&glyphs[0], num_glyphs, (int(*)(const OT::GlyphID*, const OT::GlyphID *)) OT::GlyphID::cmp, &substitutes[0]);
OT::Supplier<OT::GlyphID> glyphs_supplier (glyphs, num_glyphs);
OT::Supplier<OT::GlyphID> substitutes_supplier (substitutes, num_glyphs);
@@ -94,7 +94,7 @@ arabic_fallback_synthesize_lookup_single (const hb_ot_shape_plan_t *plan HB_UNUS
c.end_serialize ();
/* TODO sanitize the results? */
- return ret ? c.copy<OT::SubstLookup> () : NULL;
+ return ret ? c.copy<OT::SubstLookup> () : nullptr;
}
static OT::SubstLookup *
@@ -126,7 +126,7 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
first_glyphs_indirection[num_first_glyphs] = first_glyph_idx;
num_first_glyphs++;
}
- hb_stable_sort (&first_glyphs[0], num_first_glyphs, OT::GlyphID::cmp, &first_glyphs_indirection[0]);
+ hb_stable_sort (&first_glyphs[0], num_first_glyphs, (int(*)(const OT::GlyphID*, const OT::GlyphID *)) OT::GlyphID::cmp, &first_glyphs_indirection[0]);
/* Now that the first-glyphs are sorted, walk again, populate ligatures. */
for (unsigned int i = 0; i < num_first_glyphs; i++)
@@ -153,7 +153,7 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
}
if (!num_ligatures)
- return NULL;
+ return nullptr;
OT::Supplier<OT::GlyphID> first_glyphs_supplier (first_glyphs, num_first_glyphs);
OT::Supplier<unsigned int > ligature_per_first_glyph_count_supplier (ligature_per_first_glyph_count_list, num_first_glyphs);
@@ -177,7 +177,7 @@ arabic_fallback_synthesize_lookup_ligature (const hb_ot_shape_plan_t *plan HB_UN
c.end_serialize ();
/* TODO sanitize the results? */
- return ret ? c.copy<OT::SubstLookup> () : NULL;
+ return ret ? c.copy<OT::SubstLookup> () : nullptr;
}
static OT::SubstLookup *
@@ -237,8 +237,8 @@ arabic_fallback_plan_init_win1256 (arabic_fallback_plan_t *fallback_plan,
return false;
const Manifest &manifest = reinterpret_cast<const Manifest&> (arabic_win1256_gsub_lookups.manifest);
- ASSERT_STATIC (sizeof (arabic_win1256_gsub_lookups.manifestData) / sizeof (ManifestLookup)
- <= ARABIC_FALLBACK_MAX_LOOKUPS);
+ static_assert (sizeof (arabic_win1256_gsub_lookups.manifestData) / sizeof (ManifestLookup)
+ <= ARABIC_FALLBACK_MAX_LOOKUPS, "");
/* TODO sanitize the table? */
unsigned j = 0;
@@ -271,7 +271,7 @@ arabic_fallback_plan_init_unicode (arabic_fallback_plan_t *fallback_plan,
const hb_ot_shape_plan_t *plan,
hb_font_t *font)
{
- ASSERT_STATIC (ARRAY_LENGTH_CONST(arabic_fallback_features) <= ARABIC_FALLBACK_MAX_LOOKUPS);
+ static_assert ((ARRAY_LENGTH_CONST(arabic_fallback_features) <= ARABIC_FALLBACK_MAX_LOOKUPS), "");
unsigned int j = 0;
for (unsigned int i = 0; i < ARRAY_LENGTH(arabic_fallback_features) ; i++)
{
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-table.hh
index 736c7f76b3..cd6e4058b5 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-table.hh
@@ -6,10 +6,10 @@
*
* on files with these headers:
*
- * # ArabicShaping-9.0.0.txt
- * # Date: 2016-02-24, 22:25:00 GMT [RP]
- * # Blocks-9.0.0.txt
- * # Date: 2016-02-05, 23:48:00 GMT [KW]
+ * # ArabicShaping-10.0.0.txt
+ * # Date: 2017-02-16, 00:00:00 GMT [RP, KW]
+ * # Blocks-10.0.0.txt
+ * # Date: 2017-04-12, 17:30:00 GMT [KW]
* UnicodeData.txt does not have a header.
*/
@@ -72,7 +72,10 @@ static const uint8_t joining_table[] =
/* Mandaic */
/* 0840 */ R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
- /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+ /* Syriac Supplement */
+
+ /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
/* Arabic Extended-A */
@@ -130,7 +133,7 @@ static const uint8_t joining_table[] =
/* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
/* 1E940 */ D,D,D,D,
-}; /* Table items: 1214; occupancy: 54% */
+}; /* Table items: 1214; occupancy: 55% */
static unsigned int
@@ -139,28 +142,28 @@ joining_type (hb_codepoint_t u)
switch (u >> 12)
{
case 0x0u:
- if (hb_in_range (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x0600u, 0x08E2u)) return joining_table[u - 0x0600u + joining_offset_0x0600u];
break;
case 0x1u:
- if (hb_in_range (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1806u, 0x18AAu)) return joining_table[u - 0x1806u + joining_offset_0x1806u];
break;
case 0x2u:
- if (hb_in_range (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
+ if (hb_in_range<hb_codepoint_t> (u, 0x200Cu, 0x2069u)) return joining_table[u - 0x200Cu + joining_offset_0x200cu];
break;
case 0xAu:
- if (hb_in_range (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xA840u, 0xA873u)) return joining_table[u - 0xA840u + joining_offset_0xa840u];
break;
case 0x10u:
- if (hb_in_range (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
- if (hb_in_range (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10AC0u, 0x10AEFu)) return joining_table[u - 0x10AC0u + joining_offset_0x10ac0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10B80u, 0x10BAFu)) return joining_table[u - 0x10B80u + joining_offset_0x10b80u];
break;
case 0x1Eu:
- if (hb_in_range (u, 0x1E900u, 0x1E943u)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1E900u, 0x1E943u)) return joining_table[u - 0x1E900u + joining_offset_0x1e900u];
break;
default:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-win1256.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-win1256.hh
index e70c48f427..54c6cdc24f 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-win1256.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-win1256.hh
@@ -43,16 +43,16 @@
#define OT_TABLE_END }
#define OT_LABEL_START(Name) unsigned char Name[
#define OT_LABEL_END ];
-#define OT_BYTE(u8) +1/*byte*/
-#define OT_USHORT(u16) +2/*bytes*/
+#define OT_UINT8(u8) +1/*byte*/
+#define OT_UINT16(u16) +2/*bytes*/
#else
#undef OT_MEASURE
#define OT_TABLE_START TABLE_NAME = {
#define OT_TABLE_END };
#define OT_LABEL_START(Name) {
#define OT_LABEL_END },
-#define OT_BYTE(u8) (u8),
-#define OT_USHORT(u16) (unsigned char)((u16)>>8), (unsigned char)((u16)&0xFFu),
+#define OT_UINT8(u8) (u8),
+#define OT_UINT16(u16) (unsigned char)((u16)>>8), (unsigned char)((u16)&0xFFu),
#define OT_COUNT(Name, ItemSize) ((unsigned int) sizeof(((struct TABLE_NAME*)0)->Name) \
/ (unsigned int)(ItemSize) \
/* OT_ASSERT it's divisible (and positive). */)
@@ -80,24 +80,24 @@
*/
#define OT_TAG(a,b,c,d) \
- OT_BYTE(a) OT_BYTE(b) OT_BYTE(c) OT_BYTE(d)
+ OT_UINT8(a) OT_UINT8(b) OT_UINT8(c) OT_UINT8(d)
#define OT_OFFSET(From, To) /* Offset from From to To in bytes */ \
- OT_USHORT(OT_DISTANCE(From, To))
+ OT_UINT16(OT_DISTANCE(From, To))
#define OT_GLYPHID /* GlyphID */ \
- OT_USHORT
+ OT_UINT16
#define OT_UARRAY(Name, Items) \
OT_LABEL_START(Name) \
- OT_USHORT(OT_COUNT(Name##Data, 2)) \
+ OT_UINT16(OT_COUNT(Name##Data, 2)) \
OT_LABEL(Name##Data) \
Items \
OT_LABEL_END
#define OT_UHEADLESSARRAY(Name, Items) \
OT_LABEL_START(Name) \
- OT_USHORT(OT_COUNT(Name##Data, 2) + 1) \
+ OT_UINT16(OT_COUNT(Name##Data, 2) + 1) \
OT_LABEL(Name##Data) \
Items \
OT_LABEL_END
@@ -111,19 +111,19 @@
#define OT_LOOKUP(Name, LookupType, LookupFlag, SubLookupOffsets) \
OT_LABEL_START(Name) \
- OT_USHORT(LookupType) \
- OT_USHORT(LookupFlag) \
+ OT_UINT16(LookupType) \
+ OT_UINT16(LookupFlag) \
OT_LABEL_END \
OT_UARRAY(Name##SubLookupOffsetsArray, OT_LIST(SubLookupOffsets))
#define OT_SUBLOOKUP(Name, SubFormat, Items) \
OT_LABEL_START(Name) \
- OT_USHORT(SubFormat) \
+ OT_UINT16(SubFormat) \
Items
#define OT_COVERAGE1(Name, Items) \
OT_LABEL_START(Name) \
- OT_USHORT(1) \
+ OT_UINT16(1) \
OT_LABEL_END \
OT_UARRAY(Name##Glyphs, OT_LIST(Items))
@@ -174,7 +174,7 @@
/* Table manifest. */
#define MANIFEST(Items) \
OT_LABEL_START(manifest) \
- OT_USHORT(OT_COUNT(manifestData, 6)) \
+ OT_UINT16(OT_COUNT(manifestData, 6)) \
OT_LABEL(manifestData) \
Items \
OT_LABEL_END
@@ -304,8 +304,8 @@ OT_TABLE_END
#undef OT_TABLE_END
#undef OT_LABEL_START
#undef OT_LABEL_END
-#undef OT_BYTE
-#undef OT_USHORT
+#undef OT_UINT8
+#undef OT_UINT16
#undef OT_DISTANCE
#undef OT_COUNT
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc
index 56ec5cd65c..eb9d36ff1d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc
@@ -24,24 +24,21 @@
* Google Author(s): Behdad Esfahbod
*/
+#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-ot-shape-complex-arabic-private.hh"
#include "hb-ot-shape-private.hh"
-#ifndef HB_DEBUG_ARABIC
-#define HB_DEBUG_ARABIC (HB_DEBUG+0)
-#endif
-
-
/* buffer var allocations */
#define arabic_shaping_action() complex_var_u8_0() /* arabic shaping action */
#define HB_BUFFER_SCRATCH_FLAG_ARABIC_HAS_STCH HB_BUFFER_SCRATCH_FLAG_COMPLEX0
/* See:
- * https://github.com/behdad/harfbuzz/commit/6e6f82b6f3dde0fc6c3c7d991d9ec6cfff57823d#commitcomment-14248516 */
+ * https://github.com/harfbuzz/harfbuzz/commit/6e6f82b6f3dde0fc6c3c7d991d9ec6cfff57823d#commitcomment-14248516 */
#define HB_ARABIC_GENERAL_CATEGORY_IS_WORD(gen_cat) \
- (FLAG_SAFE (gen_cat) & \
+ (FLAG_UNSAFE (gen_cat) & \
(FLAG (HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED) | \
FLAG (HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE) | \
/*FLAG (HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER) |*/ \
@@ -90,7 +87,7 @@ static unsigned int get_joining_type (hb_codepoint_t u, hb_unicode_general_categ
if (likely (j_type != JOINING_TYPE_X))
return j_type;
- return (FLAG_SAFE(gen_cat) &
+ return (FLAG_UNSAFE(gen_cat) &
(FLAG(HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) |
FLAG(HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) |
FLAG(HB_UNICODE_GENERAL_CATEGORY_FORMAT))
@@ -199,6 +196,9 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
* work. However, testing shows that rlig and calt are applied
* together for Mongolian in Uniscribe. As such, we only add a
* pause for Arabic, not other scripts.
+ *
+ * A pause after calt is required to make KFGQPC Uthmanic Script HAFS
+ * work correctly. See https://github.com/harfbuzz/harfbuzz/issues/505
*/
map->add_gsub_pause (nuke_joiners);
@@ -209,20 +209,23 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
map->add_global_bool_feature (HB_TAG('c','c','m','p'));
map->add_global_bool_feature (HB_TAG('l','o','c','l'));
- map->add_gsub_pause (NULL);
+ map->add_gsub_pause (nullptr);
for (unsigned int i = 0; i < ARABIC_NUM_FEATURES; i++)
{
bool has_fallback = plan->props.script == HB_SCRIPT_ARABIC && !FEATURE_IS_SYRIAC (arabic_features[i]);
map->add_feature (arabic_features[i], 1, has_fallback ? F_HAS_FALLBACK : F_NONE);
- map->add_gsub_pause (NULL);
+ map->add_gsub_pause (nullptr);
}
map->add_feature (HB_TAG('r','l','i','g'), 1, F_GLOBAL|F_HAS_FALLBACK);
if (plan->props.script == HB_SCRIPT_ARABIC)
map->add_gsub_pause (arabic_fallback_shape);
+ /* No pause after rclt. See 98460779bae19e4d64d29461ff154b3527bf8420. */
+ map->add_global_bool_feature (HB_TAG('r','c','l','t'));
map->add_global_bool_feature (HB_TAG('c','a','l','t'));
+ map->add_gsub_pause (nullptr);
/* The spec includes 'cswh'. Earlier versions of Windows
* used to enable this by default, but testing suggests
@@ -232,7 +235,6 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
* Note that IranNastaliq uses this feature extensively
* to fixup broken glyph sequences. Oh well...
* Test case: U+0643,U+0640,U+0631. */
- //map->add_gsub_pause (NULL);
//map->add_global_bool_feature (HB_TAG('c','s','w','h'));
map->add_global_bool_feature (HB_TAG('m','s','e','t'));
}
@@ -260,7 +262,7 @@ data_create_arabic (const hb_ot_shape_plan_t *plan)
{
arabic_shape_plan_t *arabic_plan = (arabic_shape_plan_t *) calloc (1, sizeof (arabic_shape_plan_t));
if (unlikely (!arabic_plan))
- return NULL;
+ return nullptr;
arabic_plan->do_fallback = plan->props.script == HB_SCRIPT_ARABIC;
arabic_plan->has_stch = !!plan->map.get_1_mask (HB_TAG ('s','t','c','h'));
@@ -316,7 +318,10 @@ arabic_joining (hb_buffer_t *buffer)
const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
if (entry->prev_action != NONE && prev != (unsigned int) -1)
+ {
info[prev].arabic_shaping_action() = entry->prev_action;
+ buffer->unsafe_to_break (prev, i + 1);
+ }
info[i].arabic_shaping_action() = entry->curr_action;
@@ -345,7 +350,7 @@ mongolian_variation_selectors (hb_buffer_t *buffer)
unsigned int count = buffer->len;
hb_glyph_info_t *info = buffer->info;
for (unsigned int i = 1; i < count; i++)
- if (unlikely (hb_in_range (info[i].codepoint, 0x180Bu, 0x180Du)))
+ if (unlikely (hb_in_range<hb_codepoint_t> (info[i].codepoint, 0x180Bu, 0x180Du)))
info[i].arabic_shaping_action() = info[i - 1].arabic_shaping_action();
}
@@ -404,7 +409,7 @@ retry:
{
/* This sucks. We need a font to build the fallback plan... */
fallback_plan = arabic_fallback_plan_create (plan, font);
- if (unlikely (!hb_atomic_ptr_cmpexch (&(const_cast<arabic_shape_plan_t *> (arabic_plan))->fallback_plan, NULL, fallback_plan))) {
+ if (unlikely (!hb_atomic_ptr_cmpexch (&(const_cast<arabic_shape_plan_t *> (arabic_plan))->fallback_plan, nullptr, fallback_plan))) {
arabic_fallback_plan_destroy (fallback_plan);
goto retry;
}
@@ -524,11 +529,11 @@ apply_stch (const hb_ot_shape_plan_t *plan,
}
i++; // Don't touch i again.
- DEBUG_MSG (ARABIC, NULL, "%s stretch at (%d,%d,%d)",
+ DEBUG_MSG (ARABIC, nullptr, "%s stretch at (%d,%d,%d)",
step == MEASURE ? "measuring" : "cutting", context, start, end);
- DEBUG_MSG (ARABIC, NULL, "rest of word: count=%d width %d", start - context, w_total);
- DEBUG_MSG (ARABIC, NULL, "fixed tiles: count=%d width=%d", n_fixed, w_fixed);
- DEBUG_MSG (ARABIC, NULL, "repeating tiles: count=%d width=%d", n_repeating, w_repeating);
+ DEBUG_MSG (ARABIC, nullptr, "rest of word: count=%d width %d", start - context, w_total);
+ DEBUG_MSG (ARABIC, nullptr, "fixed tiles: count=%d width=%d", n_fixed, w_fixed);
+ DEBUG_MSG (ARABIC, nullptr, "repeating tiles: count=%d width=%d", n_repeating, w_repeating);
/* Number of additional times to repeat each repeating tile. */
int n_copies = 0;
@@ -540,7 +545,7 @@ apply_stch (const hb_ot_shape_plan_t *plan,
/* See if we can improve the fit by adding an extra repeat and squeezing them together a bit. */
hb_position_t extra_repeat_overlap = 0;
hb_position_t shortfall = sign * w_remaining - sign * w_repeating * (n_copies + 1);
- if (shortfall > 0)
+ if (shortfall > 0 && n_repeating > 0)
{
++n_copies;
hb_position_t excess = (n_copies + 1) * sign * w_repeating - sign * w_remaining;
@@ -551,10 +556,11 @@ apply_stch (const hb_ot_shape_plan_t *plan,
if (step == MEASURE)
{
extra_glyphs_needed += n_copies * n_repeating;
- DEBUG_MSG (ARABIC, NULL, "will add extra %d copies of repeating tiles", n_copies);
+ DEBUG_MSG (ARABIC, nullptr, "will add extra %d copies of repeating tiles", n_copies);
}
else
{
+ buffer->unsafe_to_break (context, end);
hb_position_t x_offset = 0;
for (unsigned int k = end; k > start; k--)
{
@@ -564,7 +570,7 @@ apply_stch (const hb_ot_shape_plan_t *plan,
if (info[k - 1].arabic_shaping_action() == STCH_REPEATING)
repeat += n_copies;
- DEBUG_MSG (ARABIC, NULL, "appending %d copies of glyph %d; j=%d",
+ DEBUG_MSG (ARABIC, nullptr, "appending %d copies of glyph %d; j=%d",
repeat, info[k - 1].codepoint, j);
for (unsigned int n = 0; n < repeat; n++)
{
@@ -605,20 +611,94 @@ postprocess_glyphs_arabic (const hb_ot_shape_plan_t *plan,
HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
}
+/* http://www.unicode.org/reports/tr53/tr53-1.pdf */
+
+static hb_codepoint_t
+modifier_combining_marks[] =
+{
+ 0x0654u, /* ARABIC HAMZA ABOVE */
+ 0x0655u, /* ARABIC HAMZA BELOW */
+ 0x0658u, /* ARABIC MARK NOON GHUNNA */
+ 0x06DCu, /* ARABIC SMALL HIGH SEEN */
+ 0x06E3u, /* ARABIC SMALL LOW SEEN */
+ 0x06E7u, /* ARABIC SMALL HIGH YEH */
+ 0x06E8u, /* ARABIC SMALL HIGH NOON */
+ 0x08F3u, /* ARABIC SMALL HIGH WAW */
+};
+
+static inline bool
+info_is_mcm (const hb_glyph_info_t &info)
+{
+ hb_codepoint_t u = info.codepoint;
+ for (unsigned int i = 0; i < ARRAY_LENGTH (modifier_combining_marks); i++)
+ if (u == modifier_combining_marks[i])
+ return true;
+ return false;
+}
+
+static void
+reorder_marks_arabic (const hb_ot_shape_plan_t *plan,
+ hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end)
+{
+ hb_glyph_info_t *info = buffer->info;
+
+ unsigned int i = start;
+ for (unsigned int cc = 220; cc <= 230; cc += 10)
+ {
+ DEBUG_MSG (ARABIC, buffer, "Looking for %d's starting at %d\n", cc, i);
+ while (i < end && info_cc(info[i]) < cc)
+ i++;
+ DEBUG_MSG (ARABIC, buffer, "Looking for %d's stopped at %d\n", cc, i);
+
+ if (i == end)
+ break;
+
+ if (info_cc(info[i]) > cc)
+ continue;
+
+ /* Technically we should also check "info_cc(info[j]) == cc"
+ * in the following loop. But not doing it is safe; we might
+ * end up moving all the 220 MCMs and 230 MCMs together in one
+ * move and be done. */
+ unsigned int j = i;
+ while (j < end && info_is_mcm (info[j]))
+ j++;
+ DEBUG_MSG (ARABIC, buffer, "Found %d's from %d to %d\n", cc, i, j);
+
+ if (i == j)
+ continue;
+
+ /* Shift it! */
+ DEBUG_MSG (ARABIC, buffer, "Shifting %d's: %d %d\n", cc, i, j);
+ hb_glyph_info_t temp[HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS];
+ assert (j - i <= ARRAY_LENGTH (temp));
+ buffer->merge_clusters (start, j);
+ memmove (temp, &info[i], (j - i) * sizeof (hb_glyph_info_t));
+ memmove (&info[start + j - i], &info[start], (i - start) * sizeof (hb_glyph_info_t));
+ memmove (&info[start], temp, (j - i) * sizeof (hb_glyph_info_t));
+
+ start += j - i;
+
+ i = j;
+ }
+}
+
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
{
- "arabic",
collect_features_arabic,
- NULL, /* override_features */
+ nullptr, /* override_features */
data_create_arabic,
data_destroy_arabic,
- NULL, /* preprocess_text */
+ nullptr, /* preprocess_text */
postprocess_glyphs_arabic,
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
- NULL, /* decompose */
- NULL, /* compose */
+ nullptr, /* decompose */
+ nullptr, /* compose */
setup_masks_arabic,
- NULL, /* disable_otl */
+ nullptr, /* disable_otl */
+ reorder_marks_arabic,
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc
index 42830ab618..68a62a10d4 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc
@@ -29,18 +29,18 @@
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
{
- "default",
- NULL, /* collect_features */
- NULL, /* override_features */
- NULL, /* data_create */
- NULL, /* data_destroy */
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* collect_features */
+ nullptr, /* override_features */
+ nullptr, /* data_create */
+ nullptr, /* data_destroy */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
- NULL, /* decompose */
- NULL, /* compose */
- NULL, /* setup_masks */
- NULL, /* disable_otl */
+ nullptr, /* decompose */
+ nullptr, /* compose */
+ nullptr, /* setup_masks */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc
index eb95a28c09..7508c223c4 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc
@@ -32,7 +32,7 @@
/* Same order as the feature array below */
enum {
- NONE,
+ _JMO,
LJMO,
VJMO,
@@ -80,7 +80,7 @@ data_create_hangul (const hb_ot_shape_plan_t *plan)
{
hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) calloc (1, sizeof (hangul_shape_plan_t));
if (unlikely (!hangul_plan))
- return NULL;
+ return nullptr;
for (unsigned int i = 0; i < HANGUL_FEATURE_COUNT; i++)
hangul_plan->mask_array[i] = plan->map.get_1_mask (hangul_features[i]);
@@ -105,16 +105,16 @@ data_destroy_hangul (void *data)
#define NCount (VCount * TCount)
#define SCount (LCount * NCount)
-#define isCombiningL(u) (hb_in_range ((u), LBase, LBase+LCount-1))
-#define isCombiningV(u) (hb_in_range ((u), VBase, VBase+VCount-1))
-#define isCombiningT(u) (hb_in_range ((u), TBase+1, TBase+TCount-1))
-#define isCombinedS(u) (hb_in_range ((u), SBase, SBase+SCount-1))
+#define isCombiningL(u) (hb_in_range<hb_codepoint_t> ((u), LBase, LBase+LCount-1))
+#define isCombiningV(u) (hb_in_range<hb_codepoint_t> ((u), VBase, VBase+VCount-1))
+#define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
+#define isCombinedS(u) (hb_in_range<hb_codepoint_t> ((u), SBase, SBase+SCount-1))
-#define isL(u) (hb_in_ranges ((u), 0x1100u, 0x115Fu, 0xA960u, 0xA97Cu))
-#define isV(u) (hb_in_ranges ((u), 0x1160u, 0x11A7u, 0xD7B0u, 0xD7C6u))
-#define isT(u) (hb_in_ranges ((u), 0x11A8u, 0x11FFu, 0xD7CBu, 0xD7FBu))
+#define isL(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x1100u, 0x115Fu, 0xA960u, 0xA97Cu))
+#define isV(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x1160u, 0x11A7u, 0xD7B0u, 0xD7C6u))
+#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x11A8u, 0x11FFu, 0xD7CBu, 0xD7FBu))
-#define isHangulTone(u) (hb_in_range ((u), 0x302Eu, 0x302Fu))
+#define isHangulTone(u) (hb_in_range<hb_codepoint_t> ((u), 0x302Eu, 0x302Fu))
/* buffer var allocations */
#define hangul_shaping_feature() complex_var_u8_0() /* hangul jamo shaping feature */
@@ -202,6 +202,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
if (start < end && end == buffer->out_len)
{
/* Tone mark follows a valid syllable; move it in front, unless it's zero width. */
+ buffer->unsafe_to_break_from_outbuffer (start, buffer->idx);
buffer->next_glyph ();
if (!is_zero_width_char (font, u))
{
@@ -258,6 +259,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
else
t = 0; /* The next character was not a trailing jamo. */
}
+ buffer->unsafe_to_break (buffer->idx, buffer->idx + (t ? 3 : 2));
/* We've got a syllable <L,V,T?>; see if it can potentially be composed. */
if (isCombiningL (l) && isCombiningV (v) && (t == 0 || isCombiningT (t)))
@@ -322,6 +324,8 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
end = start + 1;
continue;
}
+ else
+ buffer->unsafe_to_break (buffer->idx, buffer->idx + 2); /* Mark unsafe between LV and T. */
}
/* Otherwise, decompose if font doesn't support <LV> or <LVT>,
@@ -368,6 +372,8 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
buffer->merge_out_clusters (start, end);
continue;
}
+ else if ((!tindex && buffer->idx + 1 < count && isT (buffer->cur(+1).codepoint)))
+ buffer->unsafe_to_break (buffer->idx, buffer->idx + 2); /* Mark unsafe between LV and T. */
}
if (has_glyph)
@@ -408,18 +414,18 @@ setup_masks_hangul (const hb_ot_shape_plan_t *plan,
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hangul =
{
- "hangul",
collect_features_hangul,
override_features_hangul,
data_create_hangul,
data_destroy_hangul,
preprocess_text_hangul,
- NULL, /* postprocess_glyphs */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
- NULL, /* decompose */
- NULL, /* compose */
+ nullptr, /* decompose */
+ nullptr, /* compose */
setup_masks_hangul,
- NULL, /* disable_otl */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
false, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc
index 96f2494616..34cf28b8e2 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc
@@ -161,7 +161,7 @@ disable_otl_hebrew (const hb_ot_shape_plan_t *plan)
* script. This matches Uniscribe better, and makes fonts like
* Arial that have GSUB/GPOS/GDEF but no data for Hebrew work.
* See:
- * https://github.com/behdad/harfbuzz/issues/347#issuecomment-267838368
+ * https://github.com/harfbuzz/harfbuzz/issues/347#issuecomment-267838368
*/
return plan->map.chosen_script[1] != HB_TAG ('h','e','b','r');
}
@@ -169,18 +169,18 @@ disable_otl_hebrew (const hb_ot_shape_plan_t *plan)
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hebrew =
{
- "hebrew",
- NULL, /* collect_features */
- NULL, /* override_features */
- NULL, /* data_create */
- NULL, /* data_destroy */
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* collect_features */
+ nullptr, /* override_features */
+ nullptr, /* data_create */
+ nullptr, /* data_destroy */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
- NULL, /* decompose */
+ nullptr, /* decompose */
compose_hebrew,
- NULL, /* setup_masks */
+ nullptr, /* setup_masks */
disable_otl_hebrew,
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh
index 5a7a265c87..7eaba4e4e7 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh
@@ -56,7 +56,7 @@ static const unsigned char _indic_syllable_machine_trans_keys[] = {
5u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u,
5u, 7u, 7u, 7u, 8u, 8u, 1u, 16u, 8u, 13u, 4u, 8u, 6u, 6u, 16u, 16u,
4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u,
- 16u, 16u, 8u, 8u, 1u, 18u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u,
+ 16u, 16u, 8u, 8u, 1u, 19u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u,
3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u,
3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u,
5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u,
@@ -101,7 +101,7 @@ static const unsigned char _indic_syllable_machine_trans_keys[] = {
3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u,
5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u,
3u, 13u, 1u, 16u, 3u, 10u, 5u, 10u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u,
- 9u, 10u, 9u, 9u, 5u, 10u, 0
+ 9u, 10u, 9u, 9u, 5u, 10u, 1u, 16u, 0
};
static const char _indic_syllable_machine_key_spans[] = {
@@ -127,7 +127,7 @@ static const char _indic_syllable_machine_key_spans[] = {
3, 4, 3, 1, 4, 3, 1, 4,
3, 1, 1, 16, 6, 5, 1, 1,
5, 1, 1, 5, 1, 1, 5, 1,
- 1, 1, 18, 15, 15, 14, 16, 15,
+ 1, 1, 19, 15, 15, 14, 16, 15,
15, 14, 16, 15, 15, 14, 16, 15,
15, 14, 16, 15, 15, 14, 10, 10,
6, 2, 1, 2, 2, 1, 6, 11,
@@ -172,7 +172,7 @@ static const char _indic_syllable_machine_key_spans[] = {
12, 11, 10, 12, 11, 10, 12, 11,
10, 12, 11, 10, 11, 8, 6, 8,
11, 16, 8, 6, 6, 2, 1, 2,
- 2, 1, 6
+ 2, 1, 6, 16
};
static const short _indic_syllable_machine_index_offsets[] = {
@@ -198,52 +198,52 @@ static const short _indic_syllable_machine_index_offsets[] = {
954, 958, 963, 967, 969, 974, 978, 980,
985, 989, 991, 993, 1010, 1017, 1023, 1025,
1027, 1033, 1035, 1037, 1043, 1045, 1047, 1053,
- 1055, 1057, 1059, 1078, 1094, 1110, 1125, 1142,
- 1158, 1174, 1189, 1206, 1222, 1238, 1253, 1270,
- 1286, 1302, 1317, 1334, 1350, 1366, 1381, 1392,
- 1403, 1410, 1413, 1415, 1418, 1421, 1423, 1430,
- 1442, 1451, 1458, 1467, 1479, 1492, 1505, 1517,
- 1528, 1541, 1553, 1564, 1577, 1589, 1600, 1613,
- 1625, 1636, 1649, 1666, 1678, 1694, 1710, 1727,
- 1744, 1761, 1778, 1795, 1811, 1827, 1844, 1861,
- 1878, 1895, 1912, 1928, 1944, 1961, 1978, 1995,
- 2012, 2029, 2045, 2061, 2078, 2095, 2112, 2129,
- 2146, 2162, 2178, 2194, 2210, 2225, 2242, 2258,
- 2274, 2289, 2306, 2322, 2338, 2353, 2370, 2386,
- 2402, 2417, 2434, 2450, 2466, 2481, 2492, 2503,
- 2510, 2513, 2515, 2518, 2521, 2523, 2530, 2542,
- 2551, 2558, 2567, 2579, 2592, 2605, 2617, 2628,
- 2641, 2653, 2664, 2677, 2689, 2700, 2713, 2725,
- 2736, 2749, 2766, 2778, 2794, 2810, 2827, 2844,
- 2861, 2878, 2895, 2911, 2927, 2944, 2961, 2978,
- 2995, 3012, 3028, 3044, 3061, 3078, 3095, 3112,
- 3129, 3145, 3161, 3178, 3195, 3212, 3229, 3241,
- 3258, 3274, 3290, 3305, 3322, 3338, 3354, 3369,
- 3386, 3402, 3418, 3433, 3450, 3466, 3482, 3497,
- 3514, 3530, 3546, 3561, 3572, 3583, 3590, 3593,
- 3595, 3598, 3601, 3603, 3610, 3622, 3631, 3638,
- 3647, 3659, 3672, 3685, 3697, 3708, 3721, 3733,
- 3744, 3757, 3769, 3780, 3793, 3805, 3816, 3829,
- 3846, 3858, 3874, 3890, 3907, 3924, 3941, 3958,
- 3975, 3991, 4007, 4024, 4041, 4058, 4075, 4092,
- 4108, 4124, 4141, 4158, 4175, 4192, 4209, 4225,
- 4241, 4258, 4275, 4292, 4309, 4326, 4338, 4354,
- 4366, 4382, 4398, 4413, 4430, 4446, 4462, 4477,
- 4494, 4510, 4526, 4541, 4558, 4574, 4590, 4605,
- 4622, 4638, 4654, 4669, 4680, 4691, 4698, 4701,
- 4703, 4706, 4709, 4711, 4718, 4730, 4739, 4746,
- 4755, 4767, 4780, 4793, 4805, 4816, 4829, 4841,
- 4852, 4865, 4877, 4888, 4901, 4913, 4924, 4937,
- 4954, 4966, 4982, 4998, 5015, 5032, 5049, 5066,
- 5083, 5099, 5115, 5132, 5149, 5166, 5183, 5200,
- 5216, 5232, 5249, 5266, 5283, 5300, 5317, 5333,
- 5349, 5366, 5383, 5400, 5417, 5434, 5450, 5468,
- 5484, 5502, 5514, 5521, 5524, 5526, 5529, 5532,
- 5534, 5541, 5558, 5574, 5590, 5605, 5621, 5637,
- 5654, 5667, 5679, 5690, 5703, 5715, 5726, 5739,
- 5751, 5762, 5775, 5787, 5798, 5810, 5819, 5826,
- 5835, 5847, 5864, 5873, 5880, 5887, 5890, 5892,
- 5895, 5898, 5900
+ 1055, 1057, 1059, 1079, 1095, 1111, 1126, 1143,
+ 1159, 1175, 1190, 1207, 1223, 1239, 1254, 1271,
+ 1287, 1303, 1318, 1335, 1351, 1367, 1382, 1393,
+ 1404, 1411, 1414, 1416, 1419, 1422, 1424, 1431,
+ 1443, 1452, 1459, 1468, 1480, 1493, 1506, 1518,
+ 1529, 1542, 1554, 1565, 1578, 1590, 1601, 1614,
+ 1626, 1637, 1650, 1667, 1679, 1695, 1711, 1728,
+ 1745, 1762, 1779, 1796, 1812, 1828, 1845, 1862,
+ 1879, 1896, 1913, 1929, 1945, 1962, 1979, 1996,
+ 2013, 2030, 2046, 2062, 2079, 2096, 2113, 2130,
+ 2147, 2163, 2179, 2195, 2211, 2226, 2243, 2259,
+ 2275, 2290, 2307, 2323, 2339, 2354, 2371, 2387,
+ 2403, 2418, 2435, 2451, 2467, 2482, 2493, 2504,
+ 2511, 2514, 2516, 2519, 2522, 2524, 2531, 2543,
+ 2552, 2559, 2568, 2580, 2593, 2606, 2618, 2629,
+ 2642, 2654, 2665, 2678, 2690, 2701, 2714, 2726,
+ 2737, 2750, 2767, 2779, 2795, 2811, 2828, 2845,
+ 2862, 2879, 2896, 2912, 2928, 2945, 2962, 2979,
+ 2996, 3013, 3029, 3045, 3062, 3079, 3096, 3113,
+ 3130, 3146, 3162, 3179, 3196, 3213, 3230, 3242,
+ 3259, 3275, 3291, 3306, 3323, 3339, 3355, 3370,
+ 3387, 3403, 3419, 3434, 3451, 3467, 3483, 3498,
+ 3515, 3531, 3547, 3562, 3573, 3584, 3591, 3594,
+ 3596, 3599, 3602, 3604, 3611, 3623, 3632, 3639,
+ 3648, 3660, 3673, 3686, 3698, 3709, 3722, 3734,
+ 3745, 3758, 3770, 3781, 3794, 3806, 3817, 3830,
+ 3847, 3859, 3875, 3891, 3908, 3925, 3942, 3959,
+ 3976, 3992, 4008, 4025, 4042, 4059, 4076, 4093,
+ 4109, 4125, 4142, 4159, 4176, 4193, 4210, 4226,
+ 4242, 4259, 4276, 4293, 4310, 4327, 4339, 4355,
+ 4367, 4383, 4399, 4414, 4431, 4447, 4463, 4478,
+ 4495, 4511, 4527, 4542, 4559, 4575, 4591, 4606,
+ 4623, 4639, 4655, 4670, 4681, 4692, 4699, 4702,
+ 4704, 4707, 4710, 4712, 4719, 4731, 4740, 4747,
+ 4756, 4768, 4781, 4794, 4806, 4817, 4830, 4842,
+ 4853, 4866, 4878, 4889, 4902, 4914, 4925, 4938,
+ 4955, 4967, 4983, 4999, 5016, 5033, 5050, 5067,
+ 5084, 5100, 5116, 5133, 5150, 5167, 5184, 5201,
+ 5217, 5233, 5250, 5267, 5284, 5301, 5318, 5334,
+ 5350, 5367, 5384, 5401, 5418, 5435, 5451, 5469,
+ 5485, 5503, 5515, 5522, 5525, 5527, 5530, 5533,
+ 5535, 5542, 5559, 5575, 5591, 5606, 5622, 5638,
+ 5655, 5668, 5680, 5691, 5704, 5716, 5727, 5740,
+ 5752, 5763, 5776, 5788, 5799, 5811, 5820, 5827,
+ 5836, 5848, 5865, 5874, 5881, 5888, 5891, 5893,
+ 5896, 5899, 5901, 5908
};
static const short _indic_syllable_machine_indicies[] = {
@@ -381,611 +381,613 @@ static const short _indic_syllable_machine_indicies[] = {
161, 161, 162, 157, 0, 183, 0, 184,
0, 186, 185, 188, 189, 190, 191, 192,
193, 84, 79, 194, 195, 196, 196, 156,
- 197, 198, 199, 200, 201, 187, 203, 204,
- 205, 206, 6, 1, 207, 208, 202, 202,
- 38, 209, 202, 202, 210, 202, 211, 204,
- 212, 212, 6, 1, 207, 208, 202, 202,
- 202, 209, 202, 202, 210, 202, 204, 212,
- 212, 6, 1, 207, 208, 202, 202, 202,
- 209, 202, 202, 210, 202, 213, 202, 202,
- 202, 19, 214, 202, 1, 207, 208, 202,
- 202, 202, 215, 202, 213, 202, 216, 217,
- 218, 219, 6, 1, 207, 208, 202, 202,
- 36, 220, 202, 202, 210, 202, 221, 217,
- 222, 222, 6, 1, 207, 208, 202, 202,
- 202, 220, 202, 202, 210, 202, 217, 222,
- 222, 6, 1, 207, 208, 202, 202, 202,
- 220, 202, 202, 210, 202, 223, 202, 202,
- 202, 19, 224, 202, 1, 207, 208, 202,
- 202, 202, 215, 202, 223, 202, 225, 226,
- 227, 228, 6, 1, 207, 208, 202, 202,
- 34, 229, 202, 202, 210, 202, 230, 226,
- 231, 231, 6, 1, 207, 208, 202, 202,
- 202, 229, 202, 202, 210, 202, 226, 231,
- 231, 6, 1, 207, 208, 202, 202, 202,
- 229, 202, 202, 210, 202, 232, 202, 202,
- 202, 19, 233, 202, 1, 207, 208, 202,
- 202, 202, 215, 202, 232, 202, 234, 235,
- 236, 237, 6, 1, 207, 208, 202, 202,
- 32, 238, 202, 202, 210, 202, 239, 235,
- 240, 240, 6, 1, 207, 208, 202, 202,
- 202, 238, 202, 202, 210, 202, 235, 240,
- 240, 6, 1, 207, 208, 202, 202, 202,
- 238, 202, 202, 210, 202, 241, 202, 202,
- 202, 19, 242, 202, 1, 207, 208, 202,
- 202, 202, 215, 202, 241, 202, 243, 244,
- 245, 246, 6, 1, 207, 208, 202, 202,
- 30, 247, 202, 202, 210, 202, 248, 244,
- 249, 249, 6, 1, 207, 208, 202, 202,
- 202, 247, 202, 202, 210, 202, 244, 249,
- 249, 6, 1, 207, 208, 202, 202, 202,
- 247, 202, 202, 210, 202, 19, 250, 202,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 251, 251, 202, 1, 207, 208, 202, 202,
- 202, 215, 202, 252, 202, 202, 253, 207,
- 208, 202, 207, 208, 202, 254, 202, 207,
- 255, 202, 207, 256, 202, 207, 202, 252,
- 202, 202, 202, 207, 208, 202, 257, 202,
- 258, 259, 202, 1, 207, 208, 202, 202,
- 4, 202, 3, 202, 251, 251, 202, 1,
- 207, 208, 202, 251, 251, 202, 1, 207,
- 208, 202, 257, 202, 251, 251, 202, 1,
- 207, 208, 202, 257, 202, 258, 251, 202,
- 1, 207, 208, 202, 202, 4, 202, 19,
- 202, 260, 260, 6, 1, 207, 208, 202,
- 202, 202, 215, 202, 261, 28, 262, 263,
- 9, 1, 207, 208, 202, 202, 202, 215,
- 202, 28, 262, 263, 9, 1, 207, 208,
- 202, 202, 202, 215, 202, 262, 262, 9,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 264, 25, 265, 266, 12, 1, 207, 208,
- 202, 202, 202, 215, 202, 25, 265, 266,
- 12, 1, 207, 208, 202, 202, 202, 215,
- 202, 265, 265, 12, 1, 207, 208, 202,
- 202, 202, 215, 202, 267, 22, 268, 269,
- 15, 1, 207, 208, 202, 202, 202, 215,
- 202, 22, 268, 269, 15, 1, 207, 208,
- 202, 202, 202, 215, 202, 268, 268, 15,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 270, 19, 251, 271, 202, 1, 207, 208,
- 202, 202, 202, 215, 202, 19, 251, 271,
- 202, 1, 207, 208, 202, 202, 202, 215,
- 202, 251, 272, 202, 1, 207, 208, 202,
- 202, 202, 215, 202, 19, 202, 251, 251,
- 202, 1, 207, 208, 202, 202, 202, 215,
- 202, 2, 3, 202, 202, 19, 250, 202,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 2, 202, 244, 249, 249, 6, 1, 207,
- 208, 202, 202, 202, 247, 202, 243, 244,
- 249, 249, 6, 1, 207, 208, 202, 202,
- 202, 247, 202, 202, 210, 202, 243, 244,
- 245, 249, 6, 1, 207, 208, 202, 202,
- 30, 247, 202, 202, 210, 202, 241, 202,
- 273, 202, 260, 260, 6, 1, 207, 208,
- 202, 202, 202, 215, 202, 241, 202, 241,
- 202, 202, 202, 251, 251, 202, 1, 207,
- 208, 202, 202, 202, 215, 202, 241, 202,
- 241, 202, 202, 202, 251, 274, 202, 1,
- 207, 208, 202, 202, 202, 215, 202, 241,
- 202, 241, 202, 273, 202, 251, 251, 202,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 241, 202, 241, 3, 202, 202, 19, 242,
- 202, 1, 207, 208, 202, 202, 202, 215,
- 202, 241, 202, 234, 235, 240, 240, 6,
- 1, 207, 208, 202, 202, 202, 238, 202,
- 202, 210, 202, 234, 235, 236, 240, 6,
- 1, 207, 208, 202, 202, 32, 238, 202,
- 202, 210, 202, 232, 202, 275, 202, 260,
- 260, 6, 1, 207, 208, 202, 202, 202,
- 215, 202, 232, 202, 232, 202, 202, 202,
- 251, 251, 202, 1, 207, 208, 202, 202,
- 202, 215, 202, 232, 202, 232, 202, 202,
- 202, 251, 276, 202, 1, 207, 208, 202,
- 202, 202, 215, 202, 232, 202, 232, 202,
- 275, 202, 251, 251, 202, 1, 207, 208,
- 202, 202, 202, 215, 202, 232, 202, 232,
- 3, 202, 202, 19, 233, 202, 1, 207,
- 208, 202, 202, 202, 215, 202, 232, 202,
- 225, 226, 231, 231, 6, 1, 207, 208,
- 202, 202, 202, 229, 202, 202, 210, 202,
- 225, 226, 227, 231, 6, 1, 207, 208,
- 202, 202, 34, 229, 202, 202, 210, 202,
- 223, 202, 277, 202, 260, 260, 6, 1,
- 207, 208, 202, 202, 202, 215, 202, 223,
- 202, 223, 202, 202, 202, 251, 251, 202,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 223, 202, 223, 202, 202, 202, 251, 278,
- 202, 1, 207, 208, 202, 202, 202, 215,
- 202, 223, 202, 223, 202, 277, 202, 251,
- 251, 202, 1, 207, 208, 202, 202, 202,
- 215, 202, 223, 202, 223, 3, 202, 202,
- 19, 224, 202, 1, 207, 208, 202, 202,
- 202, 215, 202, 223, 202, 216, 217, 222,
- 222, 6, 1, 207, 208, 202, 202, 202,
- 220, 202, 202, 210, 202, 216, 217, 218,
- 222, 6, 1, 207, 208, 202, 202, 36,
- 220, 202, 202, 210, 202, 213, 202, 279,
- 202, 260, 260, 6, 1, 207, 208, 202,
- 202, 202, 215, 202, 213, 202, 213, 202,
- 202, 202, 251, 251, 202, 1, 207, 208,
- 202, 202, 202, 215, 202, 213, 202, 213,
- 202, 202, 202, 251, 280, 202, 1, 207,
- 208, 202, 202, 202, 215, 202, 213, 202,
- 213, 202, 279, 202, 251, 251, 202, 1,
- 207, 208, 202, 202, 202, 215, 202, 213,
- 202, 213, 3, 202, 202, 19, 214, 202,
- 1, 207, 208, 202, 202, 202, 215, 202,
- 213, 202, 203, 204, 212, 212, 6, 1,
- 207, 208, 202, 202, 202, 209, 202, 202,
- 210, 202, 203, 204, 205, 212, 6, 1,
- 207, 208, 202, 202, 38, 209, 202, 202,
- 210, 202, 282, 283, 284, 285, 45, 40,
- 286, 287, 281, 281, 77, 288, 281, 281,
- 289, 281, 290, 283, 291, 285, 45, 40,
- 286, 287, 281, 281, 281, 288, 281, 281,
- 289, 281, 283, 291, 285, 45, 40, 286,
- 287, 281, 281, 281, 288, 281, 281, 289,
- 281, 292, 281, 281, 281, 58, 293, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 292, 281, 295, 296, 297, 298, 45, 40,
- 286, 287, 281, 281, 75, 299, 281, 281,
- 289, 281, 300, 296, 301, 301, 45, 40,
- 286, 287, 281, 281, 281, 299, 281, 281,
- 289, 281, 296, 301, 301, 45, 40, 286,
- 287, 281, 281, 281, 299, 281, 281, 289,
- 281, 302, 281, 281, 281, 58, 303, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 302, 281, 304, 305, 306, 307, 45, 40,
- 286, 287, 281, 281, 73, 308, 281, 281,
- 289, 281, 309, 305, 310, 310, 45, 40,
- 286, 287, 281, 281, 281, 308, 281, 281,
- 289, 281, 305, 310, 310, 45, 40, 286,
- 287, 281, 281, 281, 308, 281, 281, 289,
- 281, 311, 281, 281, 281, 58, 312, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 311, 281, 313, 314, 315, 316, 45, 40,
- 286, 287, 281, 281, 71, 317, 281, 281,
- 289, 281, 318, 314, 319, 319, 45, 40,
- 286, 287, 281, 281, 281, 317, 281, 281,
- 289, 281, 314, 319, 319, 45, 40, 286,
- 287, 281, 281, 281, 317, 281, 281, 289,
- 281, 320, 281, 281, 281, 58, 321, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 320, 281, 322, 323, 324, 325, 45, 40,
- 286, 287, 281, 281, 69, 326, 281, 281,
- 289, 281, 327, 323, 328, 328, 45, 40,
- 286, 287, 281, 281, 281, 326, 281, 281,
- 289, 281, 323, 328, 328, 45, 40, 286,
- 287, 281, 281, 281, 326, 281, 281, 289,
- 281, 58, 329, 281, 40, 286, 287, 281,
- 281, 281, 294, 281, 330, 330, 281, 40,
- 286, 287, 281, 281, 281, 294, 281, 331,
- 281, 281, 332, 286, 287, 281, 286, 287,
- 281, 333, 281, 286, 334, 281, 286, 335,
- 281, 286, 281, 331, 281, 281, 281, 286,
- 287, 281, 336, 281, 337, 338, 281, 40,
- 286, 287, 281, 281, 43, 281, 42, 281,
- 330, 330, 281, 40, 286, 287, 281, 330,
- 330, 281, 40, 286, 287, 281, 336, 281,
- 330, 330, 281, 40, 286, 287, 281, 336,
- 281, 337, 330, 281, 40, 286, 287, 281,
- 281, 43, 281, 58, 281, 339, 339, 45,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 340, 67, 341, 342, 48, 40, 286, 287,
- 281, 281, 281, 294, 281, 67, 341, 342,
- 48, 40, 286, 287, 281, 281, 281, 294,
- 281, 341, 341, 48, 40, 286, 287, 281,
- 281, 281, 294, 281, 343, 64, 344, 345,
- 51, 40, 286, 287, 281, 281, 281, 294,
- 281, 64, 344, 345, 51, 40, 286, 287,
- 281, 281, 281, 294, 281, 344, 344, 51,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 346, 61, 347, 348, 54, 40, 286, 287,
- 281, 281, 281, 294, 281, 61, 347, 348,
- 54, 40, 286, 287, 281, 281, 281, 294,
- 281, 347, 347, 54, 40, 286, 287, 281,
- 281, 281, 294, 281, 349, 58, 330, 350,
- 281, 40, 286, 287, 281, 281, 281, 294,
- 281, 58, 330, 350, 281, 40, 286, 287,
- 281, 281, 281, 294, 281, 330, 351, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 58, 281, 330, 330, 281, 40, 286, 287,
- 281, 281, 281, 294, 281, 41, 42, 281,
- 281, 58, 329, 281, 40, 286, 287, 281,
- 281, 281, 294, 281, 41, 281, 323, 328,
- 328, 45, 40, 286, 287, 281, 281, 281,
- 326, 281, 322, 323, 328, 328, 45, 40,
- 286, 287, 281, 281, 281, 326, 281, 281,
- 289, 281, 322, 323, 324, 328, 45, 40,
- 286, 287, 281, 281, 69, 326, 281, 281,
- 289, 281, 320, 281, 352, 281, 339, 339,
- 45, 40, 286, 287, 281, 281, 281, 294,
- 281, 320, 281, 320, 281, 281, 281, 330,
- 330, 281, 40, 286, 287, 281, 281, 281,
- 294, 281, 320, 281, 320, 281, 281, 281,
- 330, 353, 281, 40, 286, 287, 281, 281,
- 281, 294, 281, 320, 281, 320, 281, 352,
- 281, 330, 330, 281, 40, 286, 287, 281,
- 281, 281, 294, 281, 320, 281, 320, 42,
- 281, 281, 58, 321, 281, 40, 286, 287,
- 281, 281, 281, 294, 281, 320, 281, 313,
- 314, 319, 319, 45, 40, 286, 287, 281,
- 281, 281, 317, 281, 281, 289, 281, 313,
- 314, 315, 319, 45, 40, 286, 287, 281,
- 281, 71, 317, 281, 281, 289, 281, 311,
- 281, 354, 281, 339, 339, 45, 40, 286,
- 287, 281, 281, 281, 294, 281, 311, 281,
- 311, 281, 281, 281, 330, 330, 281, 40,
- 286, 287, 281, 281, 281, 294, 281, 311,
- 281, 311, 281, 281, 281, 330, 355, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 311, 281, 311, 281, 354, 281, 330, 330,
- 281, 40, 286, 287, 281, 281, 281, 294,
- 281, 311, 281, 311, 42, 281, 281, 58,
- 312, 281, 40, 286, 287, 281, 281, 281,
- 294, 281, 311, 281, 304, 305, 310, 310,
- 45, 40, 286, 287, 281, 281, 281, 308,
- 281, 281, 289, 281, 304, 305, 306, 310,
- 45, 40, 286, 287, 281, 281, 73, 308,
- 281, 281, 289, 281, 302, 281, 356, 281,
- 339, 339, 45, 40, 286, 287, 281, 281,
- 281, 294, 281, 302, 281, 302, 281, 281,
- 281, 330, 330, 281, 40, 286, 287, 281,
- 281, 281, 294, 281, 302, 281, 302, 281,
- 281, 281, 330, 357, 281, 40, 286, 287,
- 281, 281, 281, 294, 281, 302, 281, 302,
- 281, 356, 281, 330, 330, 281, 40, 286,
- 287, 281, 281, 281, 294, 281, 302, 281,
- 302, 42, 281, 281, 58, 303, 281, 40,
- 286, 287, 281, 281, 281, 294, 281, 302,
- 281, 295, 296, 301, 301, 45, 40, 286,
- 287, 281, 281, 281, 299, 281, 281, 289,
- 281, 295, 296, 297, 301, 45, 40, 286,
- 287, 281, 281, 75, 299, 281, 281, 289,
- 281, 292, 281, 358, 281, 339, 339, 45,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 292, 281, 292, 281, 281, 281, 330, 330,
- 281, 40, 286, 287, 281, 281, 281, 294,
- 281, 292, 281, 292, 281, 281, 281, 330,
- 359, 281, 40, 286, 287, 281, 281, 281,
- 294, 281, 292, 281, 292, 281, 358, 281,
- 330, 330, 281, 40, 286, 287, 281, 281,
- 281, 294, 281, 292, 281, 76, 44, 44,
- 45, 40, 281, 281, 281, 281, 281, 76,
- 281, 292, 42, 281, 281, 58, 293, 281,
- 40, 286, 287, 281, 281, 281, 294, 281,
- 292, 281, 282, 283, 291, 285, 45, 40,
- 286, 287, 281, 281, 281, 288, 281, 281,
- 289, 281, 361, 191, 362, 362, 84, 79,
- 194, 195, 360, 360, 360, 197, 360, 360,
- 200, 360, 191, 362, 362, 84, 79, 194,
- 195, 360, 360, 360, 197, 360, 360, 200,
- 360, 363, 360, 360, 360, 98, 364, 360,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 363, 360, 366, 367, 368, 369, 84, 79,
- 194, 195, 360, 360, 115, 370, 360, 360,
- 200, 360, 371, 367, 372, 372, 84, 79,
- 194, 195, 360, 360, 360, 370, 360, 360,
- 200, 360, 367, 372, 372, 84, 79, 194,
- 195, 360, 360, 360, 370, 360, 360, 200,
- 360, 373, 360, 360, 360, 98, 374, 360,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 373, 360, 375, 376, 377, 378, 84, 79,
- 194, 195, 360, 360, 113, 379, 360, 360,
- 200, 360, 380, 376, 381, 381, 84, 79,
- 194, 195, 360, 360, 360, 379, 360, 360,
- 200, 360, 376, 381, 381, 84, 79, 194,
- 195, 360, 360, 360, 379, 360, 360, 200,
- 360, 382, 360, 360, 360, 98, 383, 360,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 382, 360, 384, 385, 386, 387, 84, 79,
- 194, 195, 360, 360, 111, 388, 360, 360,
- 200, 360, 389, 385, 390, 390, 84, 79,
- 194, 195, 360, 360, 360, 388, 360, 360,
- 200, 360, 385, 390, 390, 84, 79, 194,
- 195, 360, 360, 360, 388, 360, 360, 200,
- 360, 391, 360, 360, 360, 98, 392, 360,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 391, 360, 393, 394, 395, 396, 84, 79,
- 194, 195, 360, 360, 109, 397, 360, 360,
- 200, 360, 398, 394, 399, 399, 84, 79,
- 194, 195, 360, 360, 360, 397, 360, 360,
- 200, 360, 394, 399, 399, 84, 79, 194,
- 195, 360, 360, 360, 397, 360, 360, 200,
- 360, 98, 400, 360, 79, 194, 195, 360,
- 360, 360, 365, 360, 401, 401, 360, 79,
- 194, 195, 360, 360, 360, 365, 360, 402,
- 360, 360, 403, 194, 195, 360, 194, 195,
- 360, 404, 360, 194, 405, 360, 194, 406,
- 360, 194, 360, 402, 360, 360, 360, 194,
- 195, 360, 407, 360, 408, 409, 360, 79,
- 194, 195, 360, 360, 82, 360, 81, 360,
- 401, 401, 360, 79, 194, 195, 360, 401,
- 401, 360, 79, 194, 195, 360, 407, 360,
- 401, 401, 360, 79, 194, 195, 360, 407,
- 360, 408, 401, 360, 79, 194, 195, 360,
- 360, 82, 360, 98, 360, 410, 410, 84,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 411, 107, 412, 413, 88, 79, 194, 195,
- 360, 360, 360, 365, 360, 107, 412, 413,
- 88, 79, 194, 195, 360, 360, 360, 365,
- 360, 412, 412, 88, 79, 194, 195, 360,
- 360, 360, 365, 360, 414, 104, 415, 416,
- 91, 79, 194, 195, 360, 360, 360, 365,
- 360, 104, 415, 416, 91, 79, 194, 195,
- 360, 360, 360, 365, 360, 415, 415, 91,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 417, 101, 418, 419, 94, 79, 194, 195,
- 360, 360, 360, 365, 360, 101, 418, 419,
- 94, 79, 194, 195, 360, 360, 360, 365,
- 360, 418, 418, 94, 79, 194, 195, 360,
- 360, 360, 365, 360, 420, 98, 401, 421,
- 360, 79, 194, 195, 360, 360, 360, 365,
- 360, 98, 401, 421, 360, 79, 194, 195,
- 360, 360, 360, 365, 360, 401, 422, 360,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 98, 360, 401, 401, 360, 79, 194, 195,
- 360, 360, 360, 365, 360, 80, 81, 360,
- 360, 98, 400, 360, 79, 194, 195, 360,
- 360, 360, 365, 360, 80, 360, 394, 399,
- 399, 84, 79, 194, 195, 360, 360, 360,
- 397, 360, 393, 394, 399, 399, 84, 79,
- 194, 195, 360, 360, 360, 397, 360, 360,
- 200, 360, 393, 394, 395, 399, 84, 79,
- 194, 195, 360, 360, 109, 397, 360, 360,
- 200, 360, 391, 360, 423, 360, 410, 410,
- 84, 79, 194, 195, 360, 360, 360, 365,
- 360, 391, 360, 391, 360, 360, 360, 401,
- 401, 360, 79, 194, 195, 360, 360, 360,
- 365, 360, 391, 360, 391, 360, 360, 360,
- 401, 424, 360, 79, 194, 195, 360, 360,
- 360, 365, 360, 391, 360, 391, 360, 423,
- 360, 401, 401, 360, 79, 194, 195, 360,
- 360, 360, 365, 360, 391, 360, 391, 81,
- 360, 360, 98, 392, 360, 79, 194, 195,
- 360, 360, 360, 365, 360, 391, 360, 384,
- 385, 390, 390, 84, 79, 194, 195, 360,
- 360, 360, 388, 360, 360, 200, 360, 384,
- 385, 386, 390, 84, 79, 194, 195, 360,
- 360, 111, 388, 360, 360, 200, 360, 382,
- 360, 425, 360, 410, 410, 84, 79, 194,
- 195, 360, 360, 360, 365, 360, 382, 360,
- 382, 360, 360, 360, 401, 401, 360, 79,
- 194, 195, 360, 360, 360, 365, 360, 382,
- 360, 382, 360, 360, 360, 401, 426, 360,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 382, 360, 382, 360, 425, 360, 401, 401,
- 360, 79, 194, 195, 360, 360, 360, 365,
- 360, 382, 360, 382, 81, 360, 360, 98,
- 383, 360, 79, 194, 195, 360, 360, 360,
- 365, 360, 382, 360, 375, 376, 381, 381,
- 84, 79, 194, 195, 360, 360, 360, 379,
- 360, 360, 200, 360, 375, 376, 377, 381,
- 84, 79, 194, 195, 360, 360, 113, 379,
- 360, 360, 200, 360, 373, 360, 427, 360,
- 410, 410, 84, 79, 194, 195, 360, 360,
- 360, 365, 360, 373, 360, 373, 360, 360,
- 360, 401, 401, 360, 79, 194, 195, 360,
- 360, 360, 365, 360, 373, 360, 373, 360,
- 360, 360, 401, 428, 360, 79, 194, 195,
- 360, 360, 360, 365, 360, 373, 360, 373,
- 360, 427, 360, 401, 401, 360, 79, 194,
- 195, 360, 360, 360, 365, 360, 373, 360,
- 373, 81, 360, 360, 98, 374, 360, 79,
- 194, 195, 360, 360, 360, 365, 360, 373,
- 360, 366, 367, 372, 372, 84, 79, 194,
- 195, 360, 360, 360, 370, 360, 360, 200,
- 360, 366, 367, 368, 372, 84, 79, 194,
- 195, 360, 360, 115, 370, 360, 360, 200,
- 360, 363, 360, 429, 360, 410, 410, 84,
- 79, 194, 195, 360, 360, 360, 365, 360,
- 363, 360, 363, 360, 360, 360, 401, 401,
- 360, 79, 194, 195, 360, 360, 360, 365,
- 360, 363, 360, 363, 360, 360, 360, 401,
- 430, 360, 79, 194, 195, 360, 360, 360,
- 365, 360, 363, 360, 363, 360, 429, 360,
- 401, 401, 360, 79, 194, 195, 360, 360,
- 360, 365, 360, 363, 360, 363, 81, 360,
- 360, 98, 364, 360, 79, 194, 195, 360,
- 360, 360, 365, 360, 363, 360, 116, 83,
- 83, 84, 79, 431, 431, 431, 431, 156,
- 116, 431, 190, 191, 362, 362, 84, 79,
- 194, 195, 360, 360, 360, 197, 360, 360,
- 200, 360, 116, 83, 83, 84, 79, 431,
- 431, 431, 431, 431, 116, 431, 433, 434,
- 435, 436, 123, 118, 437, 438, 432, 432,
- 155, 439, 432, 432, 440, 432, 441, 434,
- 436, 436, 123, 118, 437, 438, 432, 432,
- 432, 439, 432, 432, 440, 432, 434, 436,
- 436, 123, 118, 437, 438, 432, 432, 432,
- 439, 432, 432, 440, 432, 442, 432, 432,
- 432, 136, 443, 432, 118, 437, 438, 432,
- 432, 432, 444, 432, 442, 432, 445, 446,
- 447, 448, 123, 118, 437, 438, 432, 432,
- 153, 449, 432, 432, 440, 432, 450, 446,
- 451, 451, 123, 118, 437, 438, 432, 432,
- 432, 449, 432, 432, 440, 432, 446, 451,
- 451, 123, 118, 437, 438, 432, 432, 432,
- 449, 432, 432, 440, 432, 452, 432, 432,
- 432, 136, 453, 432, 118, 437, 438, 432,
- 432, 432, 444, 432, 452, 432, 454, 455,
- 456, 457, 123, 118, 437, 438, 432, 432,
- 151, 458, 432, 432, 440, 432, 459, 455,
- 460, 460, 123, 118, 437, 438, 432, 432,
- 432, 458, 432, 432, 440, 432, 455, 460,
- 460, 123, 118, 437, 438, 432, 432, 432,
- 458, 432, 432, 440, 432, 461, 432, 432,
- 432, 136, 462, 432, 118, 437, 438, 432,
- 432, 432, 444, 432, 461, 432, 463, 464,
- 465, 466, 123, 118, 437, 438, 432, 432,
- 149, 467, 432, 432, 440, 432, 468, 464,
- 469, 469, 123, 118, 437, 438, 432, 432,
- 432, 467, 432, 432, 440, 432, 464, 469,
- 469, 123, 118, 437, 438, 432, 432, 432,
- 467, 432, 432, 440, 432, 470, 432, 432,
- 432, 136, 471, 432, 118, 437, 438, 432,
- 432, 432, 444, 432, 470, 432, 472, 473,
- 474, 475, 123, 118, 437, 438, 432, 432,
- 147, 476, 432, 432, 440, 432, 477, 473,
- 478, 478, 123, 118, 437, 438, 432, 432,
- 432, 476, 432, 432, 440, 432, 473, 478,
- 478, 123, 118, 437, 438, 432, 432, 432,
- 476, 432, 432, 440, 432, 136, 479, 432,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 480, 480, 432, 118, 437, 438, 432, 432,
- 432, 444, 432, 481, 432, 432, 482, 437,
- 438, 432, 437, 438, 432, 483, 432, 437,
- 484, 432, 437, 485, 432, 437, 432, 481,
- 432, 432, 432, 437, 438, 432, 486, 432,
- 487, 488, 432, 118, 437, 438, 432, 432,
- 121, 432, 120, 432, 480, 480, 432, 118,
- 437, 438, 432, 480, 480, 432, 118, 437,
- 438, 432, 486, 432, 480, 480, 432, 118,
- 437, 438, 432, 486, 432, 487, 480, 432,
- 118, 437, 438, 432, 432, 121, 432, 136,
- 432, 489, 489, 123, 118, 437, 438, 432,
- 432, 432, 444, 432, 490, 145, 491, 492,
- 126, 118, 437, 438, 432, 432, 432, 444,
- 432, 145, 491, 492, 126, 118, 437, 438,
- 432, 432, 432, 444, 432, 491, 491, 126,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 493, 142, 494, 495, 129, 118, 437, 438,
- 432, 432, 432, 444, 432, 142, 494, 495,
- 129, 118, 437, 438, 432, 432, 432, 444,
- 432, 494, 494, 129, 118, 437, 438, 432,
- 432, 432, 444, 432, 496, 139, 497, 498,
- 132, 118, 437, 438, 432, 432, 432, 444,
- 432, 139, 497, 498, 132, 118, 437, 438,
- 432, 432, 432, 444, 432, 497, 497, 132,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 499, 136, 480, 500, 432, 118, 437, 438,
- 432, 432, 432, 444, 432, 136, 480, 500,
- 432, 118, 437, 438, 432, 432, 432, 444,
- 432, 480, 501, 432, 118, 437, 438, 432,
- 432, 432, 444, 432, 136, 432, 480, 480,
- 432, 118, 437, 438, 432, 432, 432, 444,
- 432, 119, 120, 432, 432, 136, 479, 432,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 119, 432, 473, 478, 478, 123, 118, 437,
- 438, 432, 432, 432, 476, 432, 472, 473,
- 478, 478, 123, 118, 437, 438, 432, 432,
- 432, 476, 432, 432, 440, 432, 472, 473,
- 474, 478, 123, 118, 437, 438, 432, 432,
- 147, 476, 432, 432, 440, 432, 470, 432,
- 502, 432, 489, 489, 123, 118, 437, 438,
- 432, 432, 432, 444, 432, 470, 432, 470,
- 432, 432, 432, 480, 480, 432, 118, 437,
- 438, 432, 432, 432, 444, 432, 470, 432,
- 470, 432, 432, 432, 480, 503, 432, 118,
- 437, 438, 432, 432, 432, 444, 432, 470,
- 432, 470, 432, 502, 432, 480, 480, 432,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 470, 432, 470, 120, 432, 432, 136, 471,
- 432, 118, 437, 438, 432, 432, 432, 444,
- 432, 470, 432, 463, 464, 469, 469, 123,
- 118, 437, 438, 432, 432, 432, 467, 432,
- 432, 440, 432, 463, 464, 465, 469, 123,
- 118, 437, 438, 432, 432, 149, 467, 432,
- 432, 440, 432, 461, 432, 504, 432, 489,
- 489, 123, 118, 437, 438, 432, 432, 432,
- 444, 432, 461, 432, 461, 432, 432, 432,
- 480, 480, 432, 118, 437, 438, 432, 432,
- 432, 444, 432, 461, 432, 461, 432, 432,
- 432, 480, 505, 432, 118, 437, 438, 432,
- 432, 432, 444, 432, 461, 432, 461, 432,
- 504, 432, 480, 480, 432, 118, 437, 438,
- 432, 432, 432, 444, 432, 461, 432, 461,
- 120, 432, 432, 136, 462, 432, 118, 437,
- 438, 432, 432, 432, 444, 432, 461, 432,
- 454, 455, 460, 460, 123, 118, 437, 438,
- 432, 432, 432, 458, 432, 432, 440, 432,
- 454, 455, 456, 460, 123, 118, 437, 438,
- 432, 432, 151, 458, 432, 432, 440, 432,
- 452, 432, 506, 432, 489, 489, 123, 118,
- 437, 438, 432, 432, 432, 444, 432, 452,
- 432, 452, 432, 432, 432, 480, 480, 432,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 452, 432, 452, 432, 432, 432, 480, 507,
- 432, 118, 437, 438, 432, 432, 432, 444,
- 432, 452, 432, 452, 432, 506, 432, 480,
- 480, 432, 118, 437, 438, 432, 432, 432,
- 444, 432, 452, 432, 452, 120, 432, 432,
- 136, 453, 432, 118, 437, 438, 432, 432,
- 432, 444, 432, 452, 432, 445, 446, 451,
- 451, 123, 118, 437, 438, 432, 432, 432,
- 449, 432, 432, 440, 432, 445, 446, 447,
- 451, 123, 118, 437, 438, 432, 432, 153,
- 449, 432, 432, 440, 432, 442, 432, 508,
- 432, 489, 489, 123, 118, 437, 438, 432,
- 432, 432, 444, 432, 442, 432, 442, 432,
- 432, 432, 480, 480, 432, 118, 437, 438,
- 432, 432, 432, 444, 432, 442, 432, 442,
- 432, 432, 432, 480, 509, 432, 118, 437,
- 438, 432, 432, 432, 444, 432, 442, 432,
- 442, 432, 508, 432, 480, 480, 432, 118,
- 437, 438, 432, 432, 432, 444, 432, 442,
- 432, 442, 120, 432, 432, 136, 443, 432,
- 118, 437, 438, 432, 432, 432, 444, 432,
- 442, 432, 433, 434, 436, 436, 123, 118,
- 437, 438, 432, 432, 432, 439, 432, 432,
- 440, 432, 188, 189, 190, 191, 510, 362,
- 84, 79, 194, 195, 196, 196, 156, 197,
- 360, 188, 200, 360, 203, 511, 205, 206,
- 6, 1, 207, 208, 202, 202, 38, 209,
- 202, 202, 210, 202, 213, 189, 190, 191,
- 512, 513, 84, 157, 514, 515, 202, 196,
- 156, 516, 202, 213, 200, 202, 116, 517,
- 517, 84, 157, 207, 208, 202, 202, 156,
- 518, 202, 519, 202, 202, 520, 514, 515,
- 202, 514, 515, 202, 254, 202, 514, 521,
- 202, 514, 522, 202, 514, 202, 519, 202,
- 202, 202, 514, 515, 202, 523, 3, 360,
- 360, 401, 430, 360, 79, 194, 195, 360,
- 360, 360, 365, 360, 523, 360, 524, 367,
- 525, 526, 84, 157, 514, 515, 202, 202,
- 158, 370, 202, 202, 200, 202, 527, 367,
- 528, 528, 84, 157, 514, 515, 202, 202,
- 202, 370, 202, 202, 200, 202, 367, 528,
- 528, 84, 157, 514, 515, 202, 202, 202,
- 370, 202, 202, 200, 202, 524, 367, 528,
- 528, 84, 157, 514, 515, 202, 202, 202,
- 370, 202, 202, 200, 202, 524, 367, 525,
- 528, 84, 157, 514, 515, 202, 202, 158,
- 370, 202, 202, 200, 202, 213, 202, 279,
- 116, 529, 529, 160, 157, 207, 208, 202,
- 202, 202, 518, 202, 213, 202, 530, 184,
- 531, 532, 162, 157, 514, 515, 202, 202,
- 202, 533, 202, 184, 531, 532, 162, 157,
- 514, 515, 202, 202, 202, 533, 202, 531,
- 531, 162, 157, 514, 515, 202, 202, 202,
- 533, 202, 534, 181, 535, 536, 165, 157,
- 514, 515, 202, 202, 202, 533, 202, 181,
- 535, 536, 165, 157, 514, 515, 202, 202,
- 202, 533, 202, 535, 535, 165, 157, 514,
- 515, 202, 202, 202, 533, 202, 537, 178,
- 538, 539, 168, 157, 514, 515, 202, 202,
- 202, 533, 202, 178, 538, 539, 168, 157,
- 514, 515, 202, 202, 202, 533, 202, 538,
- 538, 168, 157, 514, 515, 202, 202, 202,
- 533, 202, 540, 175, 541, 542, 202, 157,
- 514, 515, 202, 202, 202, 533, 202, 175,
- 541, 542, 202, 157, 514, 515, 202, 202,
- 202, 533, 202, 541, 541, 202, 157, 514,
- 515, 202, 202, 202, 533, 202, 543, 202,
- 544, 545, 202, 157, 514, 515, 202, 202,
- 172, 202, 171, 202, 541, 541, 202, 157,
- 514, 515, 202, 541, 541, 202, 157, 514,
- 515, 202, 543, 202, 541, 541, 202, 157,
- 514, 515, 202, 543, 202, 544, 541, 202,
- 157, 514, 515, 202, 202, 172, 202, 523,
- 171, 360, 360, 98, 364, 360, 79, 194,
- 195, 360, 360, 360, 365, 360, 523, 360,
- 547, 546, 548, 548, 546, 186, 549, 550,
- 546, 548, 548, 546, 186, 549, 550, 546,
- 551, 546, 546, 552, 549, 550, 546, 549,
- 550, 546, 553, 546, 549, 554, 546, 549,
- 555, 546, 549, 546, 551, 546, 546, 546,
- 549, 550, 546, 0
+ 197, 198, 199, 200, 201, 202, 187, 204,
+ 205, 206, 207, 6, 1, 208, 209, 203,
+ 203, 38, 210, 203, 203, 211, 203, 212,
+ 205, 213, 213, 6, 1, 208, 209, 203,
+ 203, 203, 210, 203, 203, 211, 203, 205,
+ 213, 213, 6, 1, 208, 209, 203, 203,
+ 203, 210, 203, 203, 211, 203, 214, 203,
+ 203, 203, 19, 215, 203, 1, 208, 209,
+ 203, 203, 203, 216, 203, 214, 203, 217,
+ 218, 219, 220, 6, 1, 208, 209, 203,
+ 203, 36, 221, 203, 203, 211, 203, 222,
+ 218, 223, 223, 6, 1, 208, 209, 203,
+ 203, 203, 221, 203, 203, 211, 203, 218,
+ 223, 223, 6, 1, 208, 209, 203, 203,
+ 203, 221, 203, 203, 211, 203, 224, 203,
+ 203, 203, 19, 225, 203, 1, 208, 209,
+ 203, 203, 203, 216, 203, 224, 203, 226,
+ 227, 228, 229, 6, 1, 208, 209, 203,
+ 203, 34, 230, 203, 203, 211, 203, 231,
+ 227, 232, 232, 6, 1, 208, 209, 203,
+ 203, 203, 230, 203, 203, 211, 203, 227,
+ 232, 232, 6, 1, 208, 209, 203, 203,
+ 203, 230, 203, 203, 211, 203, 233, 203,
+ 203, 203, 19, 234, 203, 1, 208, 209,
+ 203, 203, 203, 216, 203, 233, 203, 235,
+ 236, 237, 238, 6, 1, 208, 209, 203,
+ 203, 32, 239, 203, 203, 211, 203, 240,
+ 236, 241, 241, 6, 1, 208, 209, 203,
+ 203, 203, 239, 203, 203, 211, 203, 236,
+ 241, 241, 6, 1, 208, 209, 203, 203,
+ 203, 239, 203, 203, 211, 203, 242, 203,
+ 203, 203, 19, 243, 203, 1, 208, 209,
+ 203, 203, 203, 216, 203, 242, 203, 244,
+ 245, 246, 247, 6, 1, 208, 209, 203,
+ 203, 30, 248, 203, 203, 211, 203, 249,
+ 245, 250, 250, 6, 1, 208, 209, 203,
+ 203, 203, 248, 203, 203, 211, 203, 245,
+ 250, 250, 6, 1, 208, 209, 203, 203,
+ 203, 248, 203, 203, 211, 203, 19, 251,
+ 203, 1, 208, 209, 203, 203, 203, 216,
+ 203, 252, 252, 203, 1, 208, 209, 203,
+ 203, 203, 216, 203, 253, 203, 203, 254,
+ 208, 209, 203, 208, 209, 203, 255, 203,
+ 208, 256, 203, 208, 257, 203, 208, 203,
+ 253, 203, 203, 203, 208, 209, 203, 258,
+ 203, 259, 260, 203, 1, 208, 209, 203,
+ 203, 4, 203, 3, 203, 252, 252, 203,
+ 1, 208, 209, 203, 252, 252, 203, 1,
+ 208, 209, 203, 258, 203, 252, 252, 203,
+ 1, 208, 209, 203, 258, 203, 259, 252,
+ 203, 1, 208, 209, 203, 203, 4, 203,
+ 19, 203, 261, 261, 6, 1, 208, 209,
+ 203, 203, 203, 216, 203, 262, 28, 263,
+ 264, 9, 1, 208, 209, 203, 203, 203,
+ 216, 203, 28, 263, 264, 9, 1, 208,
+ 209, 203, 203, 203, 216, 203, 263, 263,
+ 9, 1, 208, 209, 203, 203, 203, 216,
+ 203, 265, 25, 266, 267, 12, 1, 208,
+ 209, 203, 203, 203, 216, 203, 25, 266,
+ 267, 12, 1, 208, 209, 203, 203, 203,
+ 216, 203, 266, 266, 12, 1, 208, 209,
+ 203, 203, 203, 216, 203, 268, 22, 269,
+ 270, 15, 1, 208, 209, 203, 203, 203,
+ 216, 203, 22, 269, 270, 15, 1, 208,
+ 209, 203, 203, 203, 216, 203, 269, 269,
+ 15, 1, 208, 209, 203, 203, 203, 216,
+ 203, 271, 19, 252, 272, 203, 1, 208,
+ 209, 203, 203, 203, 216, 203, 19, 252,
+ 272, 203, 1, 208, 209, 203, 203, 203,
+ 216, 203, 252, 273, 203, 1, 208, 209,
+ 203, 203, 203, 216, 203, 19, 203, 252,
+ 252, 203, 1, 208, 209, 203, 203, 203,
+ 216, 203, 2, 3, 203, 203, 19, 251,
+ 203, 1, 208, 209, 203, 203, 203, 216,
+ 203, 2, 203, 245, 250, 250, 6, 1,
+ 208, 209, 203, 203, 203, 248, 203, 244,
+ 245, 250, 250, 6, 1, 208, 209, 203,
+ 203, 203, 248, 203, 203, 211, 203, 244,
+ 245, 246, 250, 6, 1, 208, 209, 203,
+ 203, 30, 248, 203, 203, 211, 203, 242,
+ 203, 274, 203, 261, 261, 6, 1, 208,
+ 209, 203, 203, 203, 216, 203, 242, 203,
+ 242, 203, 203, 203, 252, 252, 203, 1,
+ 208, 209, 203, 203, 203, 216, 203, 242,
+ 203, 242, 203, 203, 203, 252, 275, 203,
+ 1, 208, 209, 203, 203, 203, 216, 203,
+ 242, 203, 242, 203, 274, 203, 252, 252,
+ 203, 1, 208, 209, 203, 203, 203, 216,
+ 203, 242, 203, 242, 3, 203, 203, 19,
+ 243, 203, 1, 208, 209, 203, 203, 203,
+ 216, 203, 242, 203, 235, 236, 241, 241,
+ 6, 1, 208, 209, 203, 203, 203, 239,
+ 203, 203, 211, 203, 235, 236, 237, 241,
+ 6, 1, 208, 209, 203, 203, 32, 239,
+ 203, 203, 211, 203, 233, 203, 276, 203,
+ 261, 261, 6, 1, 208, 209, 203, 203,
+ 203, 216, 203, 233, 203, 233, 203, 203,
+ 203, 252, 252, 203, 1, 208, 209, 203,
+ 203, 203, 216, 203, 233, 203, 233, 203,
+ 203, 203, 252, 277, 203, 1, 208, 209,
+ 203, 203, 203, 216, 203, 233, 203, 233,
+ 203, 276, 203, 252, 252, 203, 1, 208,
+ 209, 203, 203, 203, 216, 203, 233, 203,
+ 233, 3, 203, 203, 19, 234, 203, 1,
+ 208, 209, 203, 203, 203, 216, 203, 233,
+ 203, 226, 227, 232, 232, 6, 1, 208,
+ 209, 203, 203, 203, 230, 203, 203, 211,
+ 203, 226, 227, 228, 232, 6, 1, 208,
+ 209, 203, 203, 34, 230, 203, 203, 211,
+ 203, 224, 203, 278, 203, 261, 261, 6,
+ 1, 208, 209, 203, 203, 203, 216, 203,
+ 224, 203, 224, 203, 203, 203, 252, 252,
+ 203, 1, 208, 209, 203, 203, 203, 216,
+ 203, 224, 203, 224, 203, 203, 203, 252,
+ 279, 203, 1, 208, 209, 203, 203, 203,
+ 216, 203, 224, 203, 224, 203, 278, 203,
+ 252, 252, 203, 1, 208, 209, 203, 203,
+ 203, 216, 203, 224, 203, 224, 3, 203,
+ 203, 19, 225, 203, 1, 208, 209, 203,
+ 203, 203, 216, 203, 224, 203, 217, 218,
+ 223, 223, 6, 1, 208, 209, 203, 203,
+ 203, 221, 203, 203, 211, 203, 217, 218,
+ 219, 223, 6, 1, 208, 209, 203, 203,
+ 36, 221, 203, 203, 211, 203, 214, 203,
+ 280, 203, 261, 261, 6, 1, 208, 209,
+ 203, 203, 203, 216, 203, 214, 203, 214,
+ 203, 203, 203, 252, 252, 203, 1, 208,
+ 209, 203, 203, 203, 216, 203, 214, 203,
+ 214, 203, 203, 203, 252, 281, 203, 1,
+ 208, 209, 203, 203, 203, 216, 203, 214,
+ 203, 214, 203, 280, 203, 252, 252, 203,
+ 1, 208, 209, 203, 203, 203, 216, 203,
+ 214, 203, 214, 3, 203, 203, 19, 215,
+ 203, 1, 208, 209, 203, 203, 203, 216,
+ 203, 214, 203, 204, 205, 213, 213, 6,
+ 1, 208, 209, 203, 203, 203, 210, 203,
+ 203, 211, 203, 204, 205, 206, 213, 6,
+ 1, 208, 209, 203, 203, 38, 210, 203,
+ 203, 211, 203, 283, 284, 285, 286, 45,
+ 40, 287, 288, 282, 282, 77, 289, 282,
+ 282, 290, 282, 291, 284, 292, 286, 45,
+ 40, 287, 288, 282, 282, 282, 289, 282,
+ 282, 290, 282, 284, 292, 286, 45, 40,
+ 287, 288, 282, 282, 282, 289, 282, 282,
+ 290, 282, 293, 282, 282, 282, 58, 294,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 293, 282, 296, 297, 298, 299, 45,
+ 40, 287, 288, 282, 282, 75, 300, 282,
+ 282, 290, 282, 301, 297, 302, 302, 45,
+ 40, 287, 288, 282, 282, 282, 300, 282,
+ 282, 290, 282, 297, 302, 302, 45, 40,
+ 287, 288, 282, 282, 282, 300, 282, 282,
+ 290, 282, 303, 282, 282, 282, 58, 304,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 303, 282, 305, 306, 307, 308, 45,
+ 40, 287, 288, 282, 282, 73, 309, 282,
+ 282, 290, 282, 310, 306, 311, 311, 45,
+ 40, 287, 288, 282, 282, 282, 309, 282,
+ 282, 290, 282, 306, 311, 311, 45, 40,
+ 287, 288, 282, 282, 282, 309, 282, 282,
+ 290, 282, 312, 282, 282, 282, 58, 313,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 312, 282, 314, 315, 316, 317, 45,
+ 40, 287, 288, 282, 282, 71, 318, 282,
+ 282, 290, 282, 319, 315, 320, 320, 45,
+ 40, 287, 288, 282, 282, 282, 318, 282,
+ 282, 290, 282, 315, 320, 320, 45, 40,
+ 287, 288, 282, 282, 282, 318, 282, 282,
+ 290, 282, 321, 282, 282, 282, 58, 322,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 321, 282, 323, 324, 325, 326, 45,
+ 40, 287, 288, 282, 282, 69, 327, 282,
+ 282, 290, 282, 328, 324, 329, 329, 45,
+ 40, 287, 288, 282, 282, 282, 327, 282,
+ 282, 290, 282, 324, 329, 329, 45, 40,
+ 287, 288, 282, 282, 282, 327, 282, 282,
+ 290, 282, 58, 330, 282, 40, 287, 288,
+ 282, 282, 282, 295, 282, 331, 331, 282,
+ 40, 287, 288, 282, 282, 282, 295, 282,
+ 332, 282, 282, 333, 287, 288, 282, 287,
+ 288, 282, 334, 282, 287, 335, 282, 287,
+ 336, 282, 287, 282, 332, 282, 282, 282,
+ 287, 288, 282, 337, 282, 338, 339, 282,
+ 40, 287, 288, 282, 282, 43, 282, 42,
+ 282, 331, 331, 282, 40, 287, 288, 282,
+ 331, 331, 282, 40, 287, 288, 282, 337,
+ 282, 331, 331, 282, 40, 287, 288, 282,
+ 337, 282, 338, 331, 282, 40, 287, 288,
+ 282, 282, 43, 282, 58, 282, 340, 340,
+ 45, 40, 287, 288, 282, 282, 282, 295,
+ 282, 341, 67, 342, 343, 48, 40, 287,
+ 288, 282, 282, 282, 295, 282, 67, 342,
+ 343, 48, 40, 287, 288, 282, 282, 282,
+ 295, 282, 342, 342, 48, 40, 287, 288,
+ 282, 282, 282, 295, 282, 344, 64, 345,
+ 346, 51, 40, 287, 288, 282, 282, 282,
+ 295, 282, 64, 345, 346, 51, 40, 287,
+ 288, 282, 282, 282, 295, 282, 345, 345,
+ 51, 40, 287, 288, 282, 282, 282, 295,
+ 282, 347, 61, 348, 349, 54, 40, 287,
+ 288, 282, 282, 282, 295, 282, 61, 348,
+ 349, 54, 40, 287, 288, 282, 282, 282,
+ 295, 282, 348, 348, 54, 40, 287, 288,
+ 282, 282, 282, 295, 282, 350, 58, 331,
+ 351, 282, 40, 287, 288, 282, 282, 282,
+ 295, 282, 58, 331, 351, 282, 40, 287,
+ 288, 282, 282, 282, 295, 282, 331, 352,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 58, 282, 331, 331, 282, 40, 287,
+ 288, 282, 282, 282, 295, 282, 41, 42,
+ 282, 282, 58, 330, 282, 40, 287, 288,
+ 282, 282, 282, 295, 282, 41, 282, 324,
+ 329, 329, 45, 40, 287, 288, 282, 282,
+ 282, 327, 282, 323, 324, 329, 329, 45,
+ 40, 287, 288, 282, 282, 282, 327, 282,
+ 282, 290, 282, 323, 324, 325, 329, 45,
+ 40, 287, 288, 282, 282, 69, 327, 282,
+ 282, 290, 282, 321, 282, 353, 282, 340,
+ 340, 45, 40, 287, 288, 282, 282, 282,
+ 295, 282, 321, 282, 321, 282, 282, 282,
+ 331, 331, 282, 40, 287, 288, 282, 282,
+ 282, 295, 282, 321, 282, 321, 282, 282,
+ 282, 331, 354, 282, 40, 287, 288, 282,
+ 282, 282, 295, 282, 321, 282, 321, 282,
+ 353, 282, 331, 331, 282, 40, 287, 288,
+ 282, 282, 282, 295, 282, 321, 282, 321,
+ 42, 282, 282, 58, 322, 282, 40, 287,
+ 288, 282, 282, 282, 295, 282, 321, 282,
+ 314, 315, 320, 320, 45, 40, 287, 288,
+ 282, 282, 282, 318, 282, 282, 290, 282,
+ 314, 315, 316, 320, 45, 40, 287, 288,
+ 282, 282, 71, 318, 282, 282, 290, 282,
+ 312, 282, 355, 282, 340, 340, 45, 40,
+ 287, 288, 282, 282, 282, 295, 282, 312,
+ 282, 312, 282, 282, 282, 331, 331, 282,
+ 40, 287, 288, 282, 282, 282, 295, 282,
+ 312, 282, 312, 282, 282, 282, 331, 356,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 312, 282, 312, 282, 355, 282, 331,
+ 331, 282, 40, 287, 288, 282, 282, 282,
+ 295, 282, 312, 282, 312, 42, 282, 282,
+ 58, 313, 282, 40, 287, 288, 282, 282,
+ 282, 295, 282, 312, 282, 305, 306, 311,
+ 311, 45, 40, 287, 288, 282, 282, 282,
+ 309, 282, 282, 290, 282, 305, 306, 307,
+ 311, 45, 40, 287, 288, 282, 282, 73,
+ 309, 282, 282, 290, 282, 303, 282, 357,
+ 282, 340, 340, 45, 40, 287, 288, 282,
+ 282, 282, 295, 282, 303, 282, 303, 282,
+ 282, 282, 331, 331, 282, 40, 287, 288,
+ 282, 282, 282, 295, 282, 303, 282, 303,
+ 282, 282, 282, 331, 358, 282, 40, 287,
+ 288, 282, 282, 282, 295, 282, 303, 282,
+ 303, 282, 357, 282, 331, 331, 282, 40,
+ 287, 288, 282, 282, 282, 295, 282, 303,
+ 282, 303, 42, 282, 282, 58, 304, 282,
+ 40, 287, 288, 282, 282, 282, 295, 282,
+ 303, 282, 296, 297, 302, 302, 45, 40,
+ 287, 288, 282, 282, 282, 300, 282, 282,
+ 290, 282, 296, 297, 298, 302, 45, 40,
+ 287, 288, 282, 282, 75, 300, 282, 282,
+ 290, 282, 293, 282, 359, 282, 340, 340,
+ 45, 40, 287, 288, 282, 282, 282, 295,
+ 282, 293, 282, 293, 282, 282, 282, 331,
+ 331, 282, 40, 287, 288, 282, 282, 282,
+ 295, 282, 293, 282, 293, 282, 282, 282,
+ 331, 360, 282, 40, 287, 288, 282, 282,
+ 282, 295, 282, 293, 282, 293, 282, 359,
+ 282, 331, 331, 282, 40, 287, 288, 282,
+ 282, 282, 295, 282, 293, 282, 76, 44,
+ 44, 45, 40, 282, 282, 282, 282, 282,
+ 76, 282, 293, 42, 282, 282, 58, 294,
+ 282, 40, 287, 288, 282, 282, 282, 295,
+ 282, 293, 282, 283, 284, 292, 286, 45,
+ 40, 287, 288, 282, 282, 282, 289, 282,
+ 282, 290, 282, 362, 191, 363, 363, 84,
+ 79, 194, 195, 361, 361, 361, 197, 361,
+ 361, 200, 361, 191, 363, 363, 84, 79,
+ 194, 195, 361, 361, 361, 197, 361, 361,
+ 200, 361, 364, 361, 361, 361, 98, 365,
+ 361, 79, 194, 195, 361, 361, 361, 366,
+ 361, 364, 361, 367, 368, 369, 370, 84,
+ 79, 194, 195, 361, 361, 115, 371, 361,
+ 361, 200, 361, 372, 368, 373, 373, 84,
+ 79, 194, 195, 361, 361, 361, 371, 361,
+ 361, 200, 361, 368, 373, 373, 84, 79,
+ 194, 195, 361, 361, 361, 371, 361, 361,
+ 200, 361, 374, 361, 361, 361, 98, 375,
+ 361, 79, 194, 195, 361, 361, 361, 366,
+ 361, 374, 361, 376, 377, 378, 379, 84,
+ 79, 194, 195, 361, 361, 113, 380, 361,
+ 361, 200, 361, 381, 377, 382, 382, 84,
+ 79, 194, 195, 361, 361, 361, 380, 361,
+ 361, 200, 361, 377, 382, 382, 84, 79,
+ 194, 195, 361, 361, 361, 380, 361, 361,
+ 200, 361, 383, 361, 361, 361, 98, 384,
+ 361, 79, 194, 195, 361, 361, 361, 366,
+ 361, 383, 361, 385, 386, 387, 388, 84,
+ 79, 194, 195, 361, 361, 111, 389, 361,
+ 361, 200, 361, 390, 386, 391, 391, 84,
+ 79, 194, 195, 361, 361, 361, 389, 361,
+ 361, 200, 361, 386, 391, 391, 84, 79,
+ 194, 195, 361, 361, 361, 389, 361, 361,
+ 200, 361, 392, 361, 361, 361, 98, 393,
+ 361, 79, 194, 195, 361, 361, 361, 366,
+ 361, 392, 361, 394, 395, 396, 397, 84,
+ 79, 194, 195, 361, 361, 109, 398, 361,
+ 361, 200, 361, 399, 395, 400, 400, 84,
+ 79, 194, 195, 361, 361, 361, 398, 361,
+ 361, 200, 361, 395, 400, 400, 84, 79,
+ 194, 195, 361, 361, 361, 398, 361, 361,
+ 200, 361, 98, 401, 361, 79, 194, 195,
+ 361, 361, 361, 366, 361, 402, 402, 361,
+ 79, 194, 195, 361, 361, 361, 366, 361,
+ 403, 361, 361, 404, 194, 195, 361, 194,
+ 195, 361, 405, 361, 194, 406, 361, 194,
+ 407, 361, 194, 361, 403, 361, 361, 361,
+ 194, 195, 361, 408, 361, 409, 410, 361,
+ 79, 194, 195, 361, 361, 82, 361, 81,
+ 361, 402, 402, 361, 79, 194, 195, 361,
+ 402, 402, 361, 79, 194, 195, 361, 408,
+ 361, 402, 402, 361, 79, 194, 195, 361,
+ 408, 361, 409, 402, 361, 79, 194, 195,
+ 361, 361, 82, 361, 98, 361, 411, 411,
+ 84, 79, 194, 195, 361, 361, 361, 366,
+ 361, 412, 107, 413, 414, 88, 79, 194,
+ 195, 361, 361, 361, 366, 361, 107, 413,
+ 414, 88, 79, 194, 195, 361, 361, 361,
+ 366, 361, 413, 413, 88, 79, 194, 195,
+ 361, 361, 361, 366, 361, 415, 104, 416,
+ 417, 91, 79, 194, 195, 361, 361, 361,
+ 366, 361, 104, 416, 417, 91, 79, 194,
+ 195, 361, 361, 361, 366, 361, 416, 416,
+ 91, 79, 194, 195, 361, 361, 361, 366,
+ 361, 418, 101, 419, 420, 94, 79, 194,
+ 195, 361, 361, 361, 366, 361, 101, 419,
+ 420, 94, 79, 194, 195, 361, 361, 361,
+ 366, 361, 419, 419, 94, 79, 194, 195,
+ 361, 361, 361, 366, 361, 421, 98, 402,
+ 422, 361, 79, 194, 195, 361, 361, 361,
+ 366, 361, 98, 402, 422, 361, 79, 194,
+ 195, 361, 361, 361, 366, 361, 402, 423,
+ 361, 79, 194, 195, 361, 361, 361, 366,
+ 361, 98, 361, 402, 402, 361, 79, 194,
+ 195, 361, 361, 361, 366, 361, 80, 81,
+ 361, 361, 98, 401, 361, 79, 194, 195,
+ 361, 361, 361, 366, 361, 80, 361, 395,
+ 400, 400, 84, 79, 194, 195, 361, 361,
+ 361, 398, 361, 394, 395, 400, 400, 84,
+ 79, 194, 195, 361, 361, 361, 398, 361,
+ 361, 200, 361, 394, 395, 396, 400, 84,
+ 79, 194, 195, 361, 361, 109, 398, 361,
+ 361, 200, 361, 392, 361, 424, 361, 411,
+ 411, 84, 79, 194, 195, 361, 361, 361,
+ 366, 361, 392, 361, 392, 361, 361, 361,
+ 402, 402, 361, 79, 194, 195, 361, 361,
+ 361, 366, 361, 392, 361, 392, 361, 361,
+ 361, 402, 425, 361, 79, 194, 195, 361,
+ 361, 361, 366, 361, 392, 361, 392, 361,
+ 424, 361, 402, 402, 361, 79, 194, 195,
+ 361, 361, 361, 366, 361, 392, 361, 392,
+ 81, 361, 361, 98, 393, 361, 79, 194,
+ 195, 361, 361, 361, 366, 361, 392, 361,
+ 385, 386, 391, 391, 84, 79, 194, 195,
+ 361, 361, 361, 389, 361, 361, 200, 361,
+ 385, 386, 387, 391, 84, 79, 194, 195,
+ 361, 361, 111, 389, 361, 361, 200, 361,
+ 383, 361, 426, 361, 411, 411, 84, 79,
+ 194, 195, 361, 361, 361, 366, 361, 383,
+ 361, 383, 361, 361, 361, 402, 402, 361,
+ 79, 194, 195, 361, 361, 361, 366, 361,
+ 383, 361, 383, 361, 361, 361, 402, 427,
+ 361, 79, 194, 195, 361, 361, 361, 366,
+ 361, 383, 361, 383, 361, 426, 361, 402,
+ 402, 361, 79, 194, 195, 361, 361, 361,
+ 366, 361, 383, 361, 383, 81, 361, 361,
+ 98, 384, 361, 79, 194, 195, 361, 361,
+ 361, 366, 361, 383, 361, 376, 377, 382,
+ 382, 84, 79, 194, 195, 361, 361, 361,
+ 380, 361, 361, 200, 361, 376, 377, 378,
+ 382, 84, 79, 194, 195, 361, 361, 113,
+ 380, 361, 361, 200, 361, 374, 361, 428,
+ 361, 411, 411, 84, 79, 194, 195, 361,
+ 361, 361, 366, 361, 374, 361, 374, 361,
+ 361, 361, 402, 402, 361, 79, 194, 195,
+ 361, 361, 361, 366, 361, 374, 361, 374,
+ 361, 361, 361, 402, 429, 361, 79, 194,
+ 195, 361, 361, 361, 366, 361, 374, 361,
+ 374, 361, 428, 361, 402, 402, 361, 79,
+ 194, 195, 361, 361, 361, 366, 361, 374,
+ 361, 374, 81, 361, 361, 98, 375, 361,
+ 79, 194, 195, 361, 361, 361, 366, 361,
+ 374, 361, 367, 368, 373, 373, 84, 79,
+ 194, 195, 361, 361, 361, 371, 361, 361,
+ 200, 361, 367, 368, 369, 373, 84, 79,
+ 194, 195, 361, 361, 115, 371, 361, 361,
+ 200, 361, 364, 361, 430, 361, 411, 411,
+ 84, 79, 194, 195, 361, 361, 361, 366,
+ 361, 364, 361, 364, 361, 361, 361, 402,
+ 402, 361, 79, 194, 195, 361, 361, 361,
+ 366, 361, 364, 361, 364, 361, 361, 361,
+ 402, 431, 361, 79, 194, 195, 361, 361,
+ 361, 366, 361, 364, 361, 364, 361, 430,
+ 361, 402, 402, 361, 79, 194, 195, 361,
+ 361, 361, 366, 361, 364, 361, 364, 81,
+ 361, 361, 98, 365, 361, 79, 194, 195,
+ 361, 361, 361, 366, 361, 364, 361, 116,
+ 83, 83, 84, 79, 432, 432, 432, 432,
+ 156, 116, 432, 190, 191, 363, 363, 84,
+ 79, 194, 195, 361, 361, 361, 197, 361,
+ 361, 200, 361, 116, 83, 83, 84, 79,
+ 432, 432, 432, 432, 432, 116, 432, 434,
+ 435, 436, 437, 123, 118, 438, 439, 433,
+ 433, 155, 440, 433, 433, 441, 433, 442,
+ 435, 437, 437, 123, 118, 438, 439, 433,
+ 433, 433, 440, 433, 433, 441, 433, 435,
+ 437, 437, 123, 118, 438, 439, 433, 433,
+ 433, 440, 433, 433, 441, 433, 443, 433,
+ 433, 433, 136, 444, 433, 118, 438, 439,
+ 433, 433, 433, 445, 433, 443, 433, 446,
+ 447, 448, 449, 123, 118, 438, 439, 433,
+ 433, 153, 450, 433, 433, 441, 433, 451,
+ 447, 452, 452, 123, 118, 438, 439, 433,
+ 433, 433, 450, 433, 433, 441, 433, 447,
+ 452, 452, 123, 118, 438, 439, 433, 433,
+ 433, 450, 433, 433, 441, 433, 453, 433,
+ 433, 433, 136, 454, 433, 118, 438, 439,
+ 433, 433, 433, 445, 433, 453, 433, 455,
+ 456, 457, 458, 123, 118, 438, 439, 433,
+ 433, 151, 459, 433, 433, 441, 433, 460,
+ 456, 461, 461, 123, 118, 438, 439, 433,
+ 433, 433, 459, 433, 433, 441, 433, 456,
+ 461, 461, 123, 118, 438, 439, 433, 433,
+ 433, 459, 433, 433, 441, 433, 462, 433,
+ 433, 433, 136, 463, 433, 118, 438, 439,
+ 433, 433, 433, 445, 433, 462, 433, 464,
+ 465, 466, 467, 123, 118, 438, 439, 433,
+ 433, 149, 468, 433, 433, 441, 433, 469,
+ 465, 470, 470, 123, 118, 438, 439, 433,
+ 433, 433, 468, 433, 433, 441, 433, 465,
+ 470, 470, 123, 118, 438, 439, 433, 433,
+ 433, 468, 433, 433, 441, 433, 471, 433,
+ 433, 433, 136, 472, 433, 118, 438, 439,
+ 433, 433, 433, 445, 433, 471, 433, 473,
+ 474, 475, 476, 123, 118, 438, 439, 433,
+ 433, 147, 477, 433, 433, 441, 433, 478,
+ 474, 479, 479, 123, 118, 438, 439, 433,
+ 433, 433, 477, 433, 433, 441, 433, 474,
+ 479, 479, 123, 118, 438, 439, 433, 433,
+ 433, 477, 433, 433, 441, 433, 136, 480,
+ 433, 118, 438, 439, 433, 433, 433, 445,
+ 433, 481, 481, 433, 118, 438, 439, 433,
+ 433, 433, 445, 433, 482, 433, 433, 483,
+ 438, 439, 433, 438, 439, 433, 484, 433,
+ 438, 485, 433, 438, 486, 433, 438, 433,
+ 482, 433, 433, 433, 438, 439, 433, 487,
+ 433, 488, 489, 433, 118, 438, 439, 433,
+ 433, 121, 433, 120, 433, 481, 481, 433,
+ 118, 438, 439, 433, 481, 481, 433, 118,
+ 438, 439, 433, 487, 433, 481, 481, 433,
+ 118, 438, 439, 433, 487, 433, 488, 481,
+ 433, 118, 438, 439, 433, 433, 121, 433,
+ 136, 433, 490, 490, 123, 118, 438, 439,
+ 433, 433, 433, 445, 433, 491, 145, 492,
+ 493, 126, 118, 438, 439, 433, 433, 433,
+ 445, 433, 145, 492, 493, 126, 118, 438,
+ 439, 433, 433, 433, 445, 433, 492, 492,
+ 126, 118, 438, 439, 433, 433, 433, 445,
+ 433, 494, 142, 495, 496, 129, 118, 438,
+ 439, 433, 433, 433, 445, 433, 142, 495,
+ 496, 129, 118, 438, 439, 433, 433, 433,
+ 445, 433, 495, 495, 129, 118, 438, 439,
+ 433, 433, 433, 445, 433, 497, 139, 498,
+ 499, 132, 118, 438, 439, 433, 433, 433,
+ 445, 433, 139, 498, 499, 132, 118, 438,
+ 439, 433, 433, 433, 445, 433, 498, 498,
+ 132, 118, 438, 439, 433, 433, 433, 445,
+ 433, 500, 136, 481, 501, 433, 118, 438,
+ 439, 433, 433, 433, 445, 433, 136, 481,
+ 501, 433, 118, 438, 439, 433, 433, 433,
+ 445, 433, 481, 502, 433, 118, 438, 439,
+ 433, 433, 433, 445, 433, 136, 433, 481,
+ 481, 433, 118, 438, 439, 433, 433, 433,
+ 445, 433, 119, 120, 433, 433, 136, 480,
+ 433, 118, 438, 439, 433, 433, 433, 445,
+ 433, 119, 433, 474, 479, 479, 123, 118,
+ 438, 439, 433, 433, 433, 477, 433, 473,
+ 474, 479, 479, 123, 118, 438, 439, 433,
+ 433, 433, 477, 433, 433, 441, 433, 473,
+ 474, 475, 479, 123, 118, 438, 439, 433,
+ 433, 147, 477, 433, 433, 441, 433, 471,
+ 433, 503, 433, 490, 490, 123, 118, 438,
+ 439, 433, 433, 433, 445, 433, 471, 433,
+ 471, 433, 433, 433, 481, 481, 433, 118,
+ 438, 439, 433, 433, 433, 445, 433, 471,
+ 433, 471, 433, 433, 433, 481, 504, 433,
+ 118, 438, 439, 433, 433, 433, 445, 433,
+ 471, 433, 471, 433, 503, 433, 481, 481,
+ 433, 118, 438, 439, 433, 433, 433, 445,
+ 433, 471, 433, 471, 120, 433, 433, 136,
+ 472, 433, 118, 438, 439, 433, 433, 433,
+ 445, 433, 471, 433, 464, 465, 470, 470,
+ 123, 118, 438, 439, 433, 433, 433, 468,
+ 433, 433, 441, 433, 464, 465, 466, 470,
+ 123, 118, 438, 439, 433, 433, 149, 468,
+ 433, 433, 441, 433, 462, 433, 505, 433,
+ 490, 490, 123, 118, 438, 439, 433, 433,
+ 433, 445, 433, 462, 433, 462, 433, 433,
+ 433, 481, 481, 433, 118, 438, 439, 433,
+ 433, 433, 445, 433, 462, 433, 462, 433,
+ 433, 433, 481, 506, 433, 118, 438, 439,
+ 433, 433, 433, 445, 433, 462, 433, 462,
+ 433, 505, 433, 481, 481, 433, 118, 438,
+ 439, 433, 433, 433, 445, 433, 462, 433,
+ 462, 120, 433, 433, 136, 463, 433, 118,
+ 438, 439, 433, 433, 433, 445, 433, 462,
+ 433, 455, 456, 461, 461, 123, 118, 438,
+ 439, 433, 433, 433, 459, 433, 433, 441,
+ 433, 455, 456, 457, 461, 123, 118, 438,
+ 439, 433, 433, 151, 459, 433, 433, 441,
+ 433, 453, 433, 507, 433, 490, 490, 123,
+ 118, 438, 439, 433, 433, 433, 445, 433,
+ 453, 433, 453, 433, 433, 433, 481, 481,
+ 433, 118, 438, 439, 433, 433, 433, 445,
+ 433, 453, 433, 453, 433, 433, 433, 481,
+ 508, 433, 118, 438, 439, 433, 433, 433,
+ 445, 433, 453, 433, 453, 433, 507, 433,
+ 481, 481, 433, 118, 438, 439, 433, 433,
+ 433, 445, 433, 453, 433, 453, 120, 433,
+ 433, 136, 454, 433, 118, 438, 439, 433,
+ 433, 433, 445, 433, 453, 433, 446, 447,
+ 452, 452, 123, 118, 438, 439, 433, 433,
+ 433, 450, 433, 433, 441, 433, 446, 447,
+ 448, 452, 123, 118, 438, 439, 433, 433,
+ 153, 450, 433, 433, 441, 433, 443, 433,
+ 509, 433, 490, 490, 123, 118, 438, 439,
+ 433, 433, 433, 445, 433, 443, 433, 443,
+ 433, 433, 433, 481, 481, 433, 118, 438,
+ 439, 433, 433, 433, 445, 433, 443, 433,
+ 443, 433, 433, 433, 481, 510, 433, 118,
+ 438, 439, 433, 433, 433, 445, 433, 443,
+ 433, 443, 433, 509, 433, 481, 481, 433,
+ 118, 438, 439, 433, 433, 433, 445, 433,
+ 443, 433, 443, 120, 433, 433, 136, 444,
+ 433, 118, 438, 439, 433, 433, 433, 445,
+ 433, 443, 433, 434, 435, 437, 437, 123,
+ 118, 438, 439, 433, 433, 433, 440, 433,
+ 433, 441, 433, 188, 189, 190, 191, 511,
+ 363, 84, 79, 194, 195, 196, 196, 156,
+ 197, 361, 188, 200, 361, 204, 512, 206,
+ 207, 6, 1, 208, 209, 203, 203, 38,
+ 210, 203, 203, 211, 203, 214, 189, 190,
+ 191, 513, 514, 84, 157, 515, 516, 203,
+ 196, 156, 517, 203, 214, 200, 203, 116,
+ 518, 518, 84, 157, 208, 209, 203, 203,
+ 156, 519, 203, 520, 203, 203, 521, 515,
+ 516, 203, 515, 516, 203, 255, 203, 515,
+ 522, 203, 515, 523, 203, 515, 203, 520,
+ 203, 203, 203, 515, 516, 203, 524, 3,
+ 361, 361, 402, 431, 361, 79, 194, 195,
+ 361, 361, 361, 366, 361, 524, 361, 525,
+ 368, 526, 527, 84, 157, 515, 516, 203,
+ 203, 158, 371, 203, 203, 200, 203, 528,
+ 368, 529, 529, 84, 157, 515, 516, 203,
+ 203, 203, 371, 203, 203, 200, 203, 368,
+ 529, 529, 84, 157, 515, 516, 203, 203,
+ 203, 371, 203, 203, 200, 203, 525, 368,
+ 529, 529, 84, 157, 515, 516, 203, 203,
+ 203, 371, 203, 203, 200, 203, 525, 368,
+ 526, 529, 84, 157, 515, 516, 203, 203,
+ 158, 371, 203, 203, 200, 203, 214, 203,
+ 280, 116, 530, 530, 160, 157, 208, 209,
+ 203, 203, 203, 519, 203, 214, 203, 531,
+ 184, 532, 533, 162, 157, 515, 516, 203,
+ 203, 203, 534, 203, 184, 532, 533, 162,
+ 157, 515, 516, 203, 203, 203, 534, 203,
+ 532, 532, 162, 157, 515, 516, 203, 203,
+ 203, 534, 203, 535, 181, 536, 537, 165,
+ 157, 515, 516, 203, 203, 203, 534, 203,
+ 181, 536, 537, 165, 157, 515, 516, 203,
+ 203, 203, 534, 203, 536, 536, 165, 157,
+ 515, 516, 203, 203, 203, 534, 203, 538,
+ 178, 539, 540, 168, 157, 515, 516, 203,
+ 203, 203, 534, 203, 178, 539, 540, 168,
+ 157, 515, 516, 203, 203, 203, 534, 203,
+ 539, 539, 168, 157, 515, 516, 203, 203,
+ 203, 534, 203, 541, 175, 542, 543, 203,
+ 157, 515, 516, 203, 203, 203, 534, 203,
+ 175, 542, 543, 203, 157, 515, 516, 203,
+ 203, 203, 534, 203, 542, 542, 203, 157,
+ 515, 516, 203, 203, 203, 534, 203, 544,
+ 203, 545, 546, 203, 157, 515, 516, 203,
+ 203, 172, 203, 171, 203, 542, 542, 203,
+ 157, 515, 516, 203, 542, 542, 203, 157,
+ 515, 516, 203, 544, 203, 542, 542, 203,
+ 157, 515, 516, 203, 544, 203, 545, 542,
+ 203, 157, 515, 516, 203, 203, 172, 203,
+ 524, 171, 361, 361, 98, 365, 361, 79,
+ 194, 195, 361, 361, 361, 366, 361, 524,
+ 361, 548, 547, 549, 549, 547, 186, 550,
+ 551, 547, 549, 549, 547, 186, 550, 551,
+ 547, 552, 547, 547, 553, 550, 551, 547,
+ 550, 551, 547, 554, 547, 550, 555, 547,
+ 550, 556, 547, 550, 547, 552, 547, 547,
+ 547, 550, 551, 547, 188, 432, 432, 432,
+ 432, 432, 432, 432, 432, 432, 196, 432,
+ 432, 432, 432, 188, 432, 0
};
static const short _indic_syllable_machine_trans_targs[] = {
@@ -1014,51 +1016,51 @@ static const short _indic_syllable_machine_trans_targs[] = {
169, 170, 520, 172, 173, 517, 175, 176,
514, 178, 532, 178, 179, 258, 337, 339,
413, 415, 359, 360, 416, 412, 494, 495,
- 384, 530, 178, 180, 182, 36, 257, 202,
- 203, 255, 227, 181, 35, 183, 251, 1,
- 184, 186, 34, 250, 248, 185, 33, 187,
- 244, 188, 190, 32, 243, 241, 189, 31,
- 191, 237, 192, 194, 30, 236, 234, 193,
- 29, 195, 230, 196, 198, 28, 229, 226,
- 197, 27, 212, 0, 201, 206, 178, 204,
- 205, 208, 2, 211, 3, 214, 6, 24,
- 217, 9, 21, 220, 12, 18, 223, 15,
- 225, 231, 233, 238, 240, 245, 247, 252,
- 254, 178, 259, 261, 73, 334, 281, 282,
- 335, 306, 260, 72, 262, 330, 38, 263,
- 265, 71, 329, 327, 264, 70, 266, 323,
- 267, 269, 69, 322, 320, 268, 68, 270,
- 316, 271, 273, 67, 315, 313, 272, 66,
- 274, 309, 275, 277, 65, 308, 305, 276,
- 64, 291, 37, 280, 285, 178, 283, 284,
- 287, 39, 290, 40, 293, 43, 61, 296,
- 46, 58, 299, 49, 55, 302, 52, 304,
- 310, 312, 317, 319, 324, 326, 331, 333,
- 178, 338, 109, 340, 408, 75, 341, 343,
- 108, 407, 405, 342, 107, 344, 401, 345,
- 347, 106, 400, 398, 346, 105, 348, 394,
- 349, 351, 104, 393, 391, 350, 103, 352,
- 387, 353, 355, 102, 386, 383, 354, 101,
- 369, 74, 358, 363, 178, 361, 362, 365,
- 76, 368, 77, 371, 80, 98, 374, 83,
- 95, 377, 86, 92, 380, 89, 382, 388,
- 390, 395, 397, 402, 404, 409, 411, 178,
- 178, 417, 419, 146, 145, 439, 440, 492,
- 464, 418, 420, 488, 111, 421, 423, 144,
- 487, 485, 422, 143, 424, 481, 425, 427,
- 142, 480, 478, 426, 141, 428, 474, 429,
- 431, 140, 473, 471, 430, 139, 432, 467,
- 433, 435, 138, 466, 463, 434, 137, 449,
- 110, 438, 443, 178, 441, 442, 445, 112,
- 448, 113, 451, 116, 134, 454, 119, 131,
- 457, 122, 128, 460, 125, 462, 468, 470,
- 475, 477, 482, 484, 489, 491, 147, 496,
- 497, 511, 500, 501, 529, 148, 505, 499,
- 504, 502, 503, 506, 507, 150, 510, 508,
- 149, 151, 513, 153, 174, 163, 516, 156,
- 171, 519, 159, 168, 522, 162, 165, 525,
- 164, 528, 178, 531, 177, 534, 535, 533,
- 538, 178, 536, 537
+ 384, 530, 539, 178, 180, 182, 36, 257,
+ 202, 203, 255, 227, 181, 35, 183, 251,
+ 1, 184, 186, 34, 250, 248, 185, 33,
+ 187, 244, 188, 190, 32, 243, 241, 189,
+ 31, 191, 237, 192, 194, 30, 236, 234,
+ 193, 29, 195, 230, 196, 198, 28, 229,
+ 226, 197, 27, 212, 0, 201, 206, 178,
+ 204, 205, 208, 2, 211, 3, 214, 6,
+ 24, 217, 9, 21, 220, 12, 18, 223,
+ 15, 225, 231, 233, 238, 240, 245, 247,
+ 252, 254, 178, 259, 261, 73, 334, 281,
+ 282, 335, 306, 260, 72, 262, 330, 38,
+ 263, 265, 71, 329, 327, 264, 70, 266,
+ 323, 267, 269, 69, 322, 320, 268, 68,
+ 270, 316, 271, 273, 67, 315, 313, 272,
+ 66, 274, 309, 275, 277, 65, 308, 305,
+ 276, 64, 291, 37, 280, 285, 178, 283,
+ 284, 287, 39, 290, 40, 293, 43, 61,
+ 296, 46, 58, 299, 49, 55, 302, 52,
+ 304, 310, 312, 317, 319, 324, 326, 331,
+ 333, 178, 338, 109, 340, 408, 75, 341,
+ 343, 108, 407, 405, 342, 107, 344, 401,
+ 345, 347, 106, 400, 398, 346, 105, 348,
+ 394, 349, 351, 104, 393, 391, 350, 103,
+ 352, 387, 353, 355, 102, 386, 383, 354,
+ 101, 369, 74, 358, 363, 178, 361, 362,
+ 365, 76, 368, 77, 371, 80, 98, 374,
+ 83, 95, 377, 86, 92, 380, 89, 382,
+ 388, 390, 395, 397, 402, 404, 409, 411,
+ 178, 178, 417, 419, 146, 145, 439, 440,
+ 492, 464, 418, 420, 488, 111, 421, 423,
+ 144, 487, 485, 422, 143, 424, 481, 425,
+ 427, 142, 480, 478, 426, 141, 428, 474,
+ 429, 431, 140, 473, 471, 430, 139, 432,
+ 467, 433, 435, 138, 466, 463, 434, 137,
+ 449, 110, 438, 443, 178, 441, 442, 445,
+ 112, 448, 113, 451, 116, 134, 454, 119,
+ 131, 457, 122, 128, 460, 125, 462, 468,
+ 470, 475, 477, 482, 484, 489, 491, 147,
+ 496, 497, 511, 500, 501, 529, 148, 505,
+ 499, 504, 502, 503, 506, 507, 150, 510,
+ 508, 149, 151, 513, 153, 174, 163, 516,
+ 156, 171, 519, 159, 168, 522, 162, 165,
+ 525, 164, 528, 178, 531, 177, 534, 535,
+ 533, 538, 178, 536, 537
};
static const char _indic_syllable_machine_trans_actions[] = {
@@ -1087,51 +1089,51 @@ static const char _indic_syllable_machine_trans_actions[] = {
0, 0, 2, 0, 0, 2, 0, 0,
2, 9, 0, 12, 2, 2, 6, 2,
13, 13, 0, 0, 2, 2, 6, 2,
- 6, 2, 14, 2, 2, 0, 2, 0,
+ 6, 2, 0, 14, 2, 2, 0, 2,
+ 0, 0, 2, 2, 2, 0, 2, 2,
+ 0, 2, 2, 0, 2, 2, 2, 0,
+ 2, 2, 2, 2, 0, 2, 2, 2,
+ 0, 2, 2, 2, 2, 0, 2, 2,
+ 2, 0, 2, 2, 2, 2, 0, 2,
+ 2, 2, 0, 2, 0, 0, 0, 15,
+ 0, 0, 2, 0, 2, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 0, 2,
+ 0, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 16, 2, 2, 0, 2, 0,
0, 2, 2, 2, 0, 2, 2, 0,
2, 2, 0, 2, 2, 2, 0, 2,
2, 2, 2, 0, 2, 2, 2, 0,
2, 2, 2, 2, 0, 2, 2, 2,
0, 2, 2, 2, 2, 0, 2, 2,
- 2, 0, 2, 0, 0, 0, 15, 0,
+ 2, 0, 2, 0, 0, 0, 17, 0,
0, 2, 0, 2, 0, 2, 0, 0,
2, 0, 0, 2, 0, 0, 2, 0,
2, 2, 2, 2, 2, 2, 2, 2,
- 2, 16, 2, 2, 0, 2, 0, 0,
- 2, 2, 2, 0, 2, 2, 0, 2,
- 2, 0, 2, 2, 2, 0, 2, 2,
- 2, 2, 0, 2, 2, 2, 0, 2,
- 2, 2, 2, 0, 2, 2, 2, 0,
- 2, 2, 2, 2, 0, 2, 2, 2,
- 0, 2, 0, 0, 0, 17, 0, 0,
- 2, 0, 2, 0, 2, 0, 0, 2,
- 0, 0, 2, 0, 0, 2, 0, 2,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 18, 6, 0, 6, 6, 0, 6, 2,
- 0, 6, 2, 6, 0, 6, 6, 6,
+ 2, 18, 6, 0, 6, 6, 0, 6,
2, 0, 6, 2, 6, 0, 6, 6,
6, 2, 0, 6, 2, 6, 0, 6,
6, 6, 2, 0, 6, 2, 6, 0,
- 6, 0, 0, 0, 19, 0, 0, 2,
- 0, 2, 0, 2, 0, 0, 2, 0,
- 0, 2, 0, 0, 2, 0, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 20,
- 21, 2, 2, 0, 0, 0, 0, 2,
- 2, 2, 2, 2, 0, 2, 2, 0,
- 2, 2, 2, 0, 2, 2, 2, 2,
+ 6, 6, 6, 2, 0, 6, 2, 6,
+ 0, 6, 0, 0, 0, 19, 0, 0,
+ 2, 0, 2, 0, 2, 0, 0, 2,
+ 0, 0, 2, 0, 0, 2, 0, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2,
+ 20, 21, 2, 2, 0, 0, 0, 0,
+ 2, 2, 2, 2, 2, 0, 2, 2,
0, 2, 2, 2, 0, 2, 2, 2,
2, 0, 2, 2, 2, 0, 2, 2,
2, 2, 0, 2, 2, 2, 0, 2,
- 0, 0, 0, 22, 0, 0, 2, 0,
- 2, 0, 2, 0, 0, 2, 0, 0,
- 2, 0, 0, 2, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 0, 0,
- 8, 2, 0, 0, 2, 0, 2, 0,
- 0, 0, 0, 8, 8, 0, 8, 8,
- 0, 0, 2, 0, 0, 0, 2, 0,
- 0, 2, 0, 0, 2, 0, 0, 2,
- 0, 2, 23, 2, 0, 0, 0, 0,
- 0, 24, 0, 0
+ 2, 2, 2, 0, 2, 2, 2, 0,
+ 2, 0, 0, 0, 22, 0, 0, 2,
+ 0, 2, 0, 2, 0, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 0,
+ 0, 8, 2, 0, 0, 2, 0, 2,
+ 0, 0, 0, 0, 8, 8, 0, 8,
+ 8, 0, 0, 2, 0, 0, 0, 2,
+ 0, 0, 2, 0, 0, 2, 0, 0,
+ 2, 0, 2, 23, 2, 0, 0, 0,
+ 0, 0, 24, 0, 0
};
static const char _indic_syllable_machine_to_state_actions[] = {
@@ -1202,7 +1204,7 @@ static const char _indic_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0
+ 0, 0, 0, 0
};
static const char _indic_syllable_machine_from_state_actions[] = {
@@ -1273,7 +1275,7 @@ static const char _indic_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0
+ 0, 0, 0, 0
};
static const short _indic_syllable_machine_eof_trans[] = {
@@ -1299,52 +1301,52 @@ static const short _indic_syllable_machine_eof_trans[] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
- 1, 186, 0, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 361, 361, 361,
- 361, 361, 361, 361, 361, 432, 361, 432,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 361, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 361, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 203,
- 203, 361, 547, 547, 547, 547, 547, 547,
- 547, 547, 547
+ 1, 186, 0, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 283, 283,
+ 283, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 362, 362, 362,
+ 362, 362, 362, 362, 362, 433, 362, 433,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 362, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 362, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 204, 204, 204, 204, 204, 204, 204,
+ 204, 362, 548, 548, 548, 548, 548, 548,
+ 548, 548, 548, 433
};
static const int indic_syllable_machine_start = 178;
@@ -1358,7 +1360,7 @@ static const int indic_syllable_machine_en_main = 178;
-#line 96 "hb-ot-shape-complex-indic-machine.rl"
+#line 97 "hb-ot-shape-complex-indic-machine.rl"
#define found_syllable(syllable_type) \
@@ -1378,7 +1380,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 1382 "hb-ot-shape-complex-indic-machine.hh"
+#line 1384 "hb-ot-shape-complex-indic-machine.hh"
{
cs = indic_syllable_machine_start;
ts = 0;
@@ -1386,7 +1388,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 117 "hb-ot-shape-complex-indic-machine.rl"
+#line 118 "hb-ot-shape-complex-indic-machine.rl"
p = 0;
@@ -1395,7 +1397,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 1399 "hb-ot-shape-complex-indic-machine.hh"
+#line 1401 "hb-ot-shape-complex-indic-machine.hh"
{
int _slen;
int _trans;
@@ -1409,7 +1411,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 1413 "hb-ot-shape-complex-indic-machine.hh"
+#line 1415 "hb-ot-shape-complex-indic-machine.hh"
}
_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -1432,71 +1434,71 @@ _eof_trans:
{te = p+1;}
break;
case 15:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (consonant_syllable); }}
break;
case 17:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (vowel_syllable); }}
break;
case 22:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (standalone_cluster); }}
break;
case 24:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (symbol_cluster); }}
break;
case 19:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 12:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (non_indic_cluster); }}
break;
case 14:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
case 16:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (vowel_syllable); }}
break;
case 21:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (standalone_cluster); }}
break;
case 23:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }}
break;
case 18:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 20:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (non_indic_cluster); }}
break;
case 1:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
break;
case 3:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
break;
case 7:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
break;
case 9:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
break;
case 4:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
case 5:
@@ -1517,22 +1519,22 @@ _eof_trans:
case 8:
#line 1 "NONE"
{te = p+1;}
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
{act = 1;}
break;
case 6:
#line 1 "NONE"
{te = p+1;}
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
{act = 5;}
break;
case 13:
#line 1 "NONE"
{te = p+1;}
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{act = 6;}
break;
-#line 1536 "hb-ot-shape-complex-indic-machine.hh"
+#line 1538 "hb-ot-shape-complex-indic-machine.hh"
}
_again:
@@ -1541,7 +1543,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 1545 "hb-ot-shape-complex-indic-machine.hh"
+#line 1547 "hb-ot-shape-complex-indic-machine.hh"
}
if ( ++p != pe )
@@ -1557,7 +1559,7 @@ _again:
}
-#line 126 "hb-ot-shape-complex-indic-machine.rl"
+#line 127 "hb-ot-shape-complex-indic-machine.rl"
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-private.hh
index 5879c3e491..a1e0d5266b 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-private.hh
@@ -60,7 +60,8 @@ enum indic_category_t {
OT_Repha = 15, /* Atomically-encoded logical or visual repha. */
OT_Ra = 16,
OT_CM = 17, /* Consonant-Medial. */
- OT_Symbol = 18 /* Avagraha, etc that take marks (SM,A,VD). */
+ OT_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */
+ OT_CS = 19
};
#define MEDIAL_FLAGS (FLAG (OT_CM))
@@ -70,7 +71,7 @@ enum indic_category_t {
* We treat Vowels and placeholders as if they were consonants. This is safe because Vowels
* cannot happen in a consonant syllable. The plus side however is, we can call the
* consonant syllable logic from the vowel syllable function and get it all right! */
-#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
+#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CS) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
#define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ))
#define HALANT_OR_COENG_FLAGS (FLAG (OT_H) | FLAG (OT_Coeng))
@@ -121,8 +122,8 @@ enum indic_syllabic_category_t {
INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED = OT_X, /* Don't care. */
INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED = OT_CM,
INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA = OT_N,
- INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER = OT_Repha, /* TODO */
- INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK = OT_SM,
+ INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER = OT_CS,
+ INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK = OT_SM, /* https://github.com/harfbuzz/harfbuzz/issues/552 */
INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER = OT_Coeng,
INDIC_SYLLABIC_CATEGORY_JOINER = OT_ZWJ,
INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER = OT_X,
@@ -132,7 +133,7 @@ enum indic_syllabic_category_t {
INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER = OT_PLACEHOLDER, /* Don't care. */
INDIC_SYLLABIC_CATEGORY_PURE_KILLER = OT_M, /* Is like a vowel matra. */
INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER = OT_RS,
- INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER = OT_M, /* Misc Khmer signs. */
+ INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER = OT_SM,
INDIC_SYLLABIC_CATEGORY_TONE_LETTER = OT_X,
INDIC_SYLLABIC_CATEGORY_TONE_MARK = OT_N,
INDIC_SYLLABIC_CATEGORY_VIRAMA = OT_H,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-table.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-table.cc
index 80a6b25e3b..bfd1c6d342 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-table.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-table.cc
@@ -6,61 +6,62 @@
*
* on files with these headers:
*
- * # IndicSyllabicCategory-9.0.0.txt
- * # Date: 2016-05-21, 02:46:00 GMT [RP]
- * # IndicPositionalCategory-9.0.0.txt
- * # Date: 2016-02-25, 00:48:00 GMT [RP]
- * # Blocks-9.0.0.txt
- * # Date: 2016-02-05, 23:48:00 GMT [KW]
+ * # IndicSyllabicCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [KW, RP]
+ * # IndicPositionalCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [RP]
+ * # Blocks-10.0.0.txt
+ * # Date: 2017-04-12, 17:30:00 GMT [KW]
*/
#include "hb-ot-shape-complex-indic-private.hh"
#define ISC_A INDIC_SYLLABIC_CATEGORY_AVAGRAHA /* 15 chars; Avagraha */
-#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 67 chars; Bindu */
+#define ISC_Bi INDIC_SYLLABIC_CATEGORY_BINDU /* 80 chars; Bindu */
#define ISC_BJN INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER /* 20 chars; Brahmi_Joining_Number */
-#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 53 chars; Cantillation_Mark */
-#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 1907 chars; Consonant */
+#define ISC_Ca INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK /* 57 chars; Cantillation_Mark */
+#define ISC_C INDIC_SYLLABIC_CATEGORY_CONSONANT /* 2024 chars; Consonant */
#define ISC_CD INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD /* 10 chars; Consonant_Dead */
-#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 62 chars; Consonant_Final */
+#define ISC_CF INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL /* 68 chars; Consonant_Final */
#define ISC_CHL INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER /* 5 chars; Consonant_Head_Letter */
#define ISC_CK INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER /* 2 chars; Consonant_Killer */
-#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL /* 22 chars; Consonant_Medial */
-#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER /* 16 chars; Consonant_Placeholder */
-#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 1 chars; Consonant_Preceding_Repha */
-#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 2 chars; Consonant_Prefixed */
-#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 90 chars; Consonant_Subjoined */
-#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 4 chars; Consonant_Succeeding_Repha */
+#define ISC_CM INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL /* 27 chars; Consonant_Medial */
+#define ISC_CP INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER /* 18 chars; Consonant_Placeholder */
+#define ISC_CPR INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA /* 2 chars; Consonant_Preceding_Repha */
+#define ISC_CPrf INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED /* 7 chars; Consonant_Prefixed */
+#define ISC_CS INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED /* 95 chars; Consonant_Subjoined */
+#define ISC_CSR INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA /* 5 chars; Consonant_Succeeding_Repha */
#define ISC_CWS INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER /* 4 chars; Consonant_With_Stacker */
-#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 2 chars; Gemination_Mark */
-#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 7 chars; Invisible_Stacker */
+#define ISC_GM INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK /* 3 chars; Gemination_Mark */
+#define ISC_IS INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER /* 10 chars; Invisible_Stacker */
#define ISC_ZWJ INDIC_SYLLABIC_CATEGORY_JOINER /* 1 chars; Joiner */
#define ISC_ML INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER /* 1 chars; Modifying_Letter */
#define ISC_ZWNJ INDIC_SYLLABIC_CATEGORY_NON_JOINER /* 1 chars; Non_Joiner */
-#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 24 chars; Nukta */
-#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 459 chars; Number */
+#define ISC_N INDIC_SYLLABIC_CATEGORY_NUKTA /* 28 chars; Nukta */
+#define ISC_Nd INDIC_SYLLABIC_CATEGORY_NUMBER /* 469 chars; Number */
#define ISC_NJ INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER /* 1 chars; Number_Joiner */
#define ISC_x INDIC_SYLLABIC_CATEGORY_OTHER /* 1 chars; Other */
-#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 16 chars; Pure_Killer */
+#define ISC_PK INDIC_SYLLABIC_CATEGORY_PURE_KILLER /* 21 chars; Pure_Killer */
#define ISC_RS INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER /* 2 chars; Register_Shifter */
#define ISC_SM INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER /* 22 chars; Syllable_Modifier */
#define ISC_TL INDIC_SYLLABIC_CATEGORY_TONE_LETTER /* 7 chars; Tone_Letter */
#define ISC_TM INDIC_SYLLABIC_CATEGORY_TONE_MARK /* 42 chars; Tone_Mark */
#define ISC_V INDIC_SYLLABIC_CATEGORY_VIRAMA /* 24 chars; Virama */
-#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 31 chars; Visarga */
+#define ISC_Vs INDIC_SYLLABIC_CATEGORY_VISARGA /* 34 chars; Visarga */
#define ISC_Vo INDIC_SYLLABIC_CATEGORY_VOWEL /* 30 chars; Vowel */
-#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 602 chars; Vowel_Dependent */
-#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 431 chars; Vowel_Independent */
+#define ISC_M INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT /* 633 chars; Vowel_Dependent */
+#define ISC_VI INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT /* 443 chars; Vowel_Independent */
-#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 300 chars; Bottom */
+#define IMC_B INDIC_MATRA_CATEGORY_BOTTOM /* 330 chars; Bottom */
+#define IMC_BL INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT /* 1 chars; Bottom_And_Left */
#define IMC_BR INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT /* 2 chars; Bottom_And_Right */
#define IMC_L INDIC_MATRA_CATEGORY_LEFT /* 57 chars; Left */
#define IMC_LR INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT /* 21 chars; Left_And_Right */
#define IMC_x INDIC_MATRA_CATEGORY_NOT_APPLICABLE /* 1 chars; Not_Applicable */
#define IMC_O INDIC_MATRA_CATEGORY_OVERSTRUCK /* 10 chars; Overstruck */
-#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 258 chars; Right */
-#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 342 chars; Top */
+#define IMC_R INDIC_MATRA_CATEGORY_RIGHT /* 262 chars; Right */
+#define IMC_T INDIC_MATRA_CATEGORY_TOP /* 380 chars; Top */
#define IMC_TB INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM /* 10 chars; Top_And_Bottom */
#define IMC_TBR INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT /* 1 chars; Top_And_Bottom_And_Right */
#define IMC_TL INDIC_MATRA_CATEGORY_TOP_AND_LEFT /* 6 chars; Top_And_Left */
@@ -133,7 +134,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 09E0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
/* 09E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 09F0 */ _(C,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 09F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 09F8 */ _(x,x), _(x,x), _(x,x), _(x,x), _(Bi,x), _(x,x), _(x,x), _(x,x),
/* Gurmukhi */
@@ -171,7 +172,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 0AE0 */ _(VI,x), _(VI,x), _(M,B), _(M,B), _(x,x), _(x,x), _(Nd,x), _(Nd,x),
/* 0AE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
/* 0AF0 */ _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
- /* 0AF8 */ _(x,x), _(C,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* 0AF8 */ _(x,x), _(C,x), _(Ca,T), _(Ca,T), _(Ca,T), _(N,T), _(N,T), _(N,T),
/* Oriya */
@@ -251,14 +252,14 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* Malayalam */
- /* 0D00 */ _(x,x), _(Bi,T), _(Bi,R), _(Vs,R), _(x,x), _(VI,x), _(VI,x), _(VI,x),
+ /* 0D00 */ _(Bi,T), _(Bi,T), _(Bi,R), _(Vs,R), _(x,x), _(VI,x), _(VI,x), _(VI,x),
/* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(x,x), _(VI,x), _(VI,x),
/* 0D10 */ _(VI,x), _(x,x), _(VI,x), _(VI,x), _(VI,x), _(C,x), _(C,x), _(C,x),
/* 0D18 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0D20 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0D28 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
/* 0D30 */ _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x), _(C,x),
- /* 0D38 */ _(C,x), _(C,x), _(C,x), _(x,x), _(x,x), _(A,x), _(M,R), _(M,R),
+ /* 0D38 */ _(C,x), _(C,x), _(C,x), _(PK,T), _(PK,T), _(A,x), _(M,R), _(M,R),
/* 0D40 */ _(M,R), _(M,R), _(M,R), _(M,B), _(M,B), _(x,x), _(M,L), _(M,L),
/* 0D48 */ _(M,L), _(x,x), _(M,LR), _(M,LR), _(M,LR), _(V,T),_(CPR,x), _(x,x),
/* 0D50 */ _(x,x), _(x,x), _(x,x), _(x,x), _(CD,x), _(CD,x), _(CD,x), _(M,R),
@@ -341,7 +342,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* 1CD8 */ _(Ca,B), _(Ca,B), _(Ca,T), _(Ca,T), _(Ca,B), _(Ca,B), _(Ca,B), _(Ca,B),
/* 1CE0 */ _(Ca,T), _(Ca,R), _(x,O), _(x,O), _(x,O), _(x,O), _(x,O), _(x,O),
/* 1CE8 */ _(x,O), _(x,x), _(x,x), _(x,x), _(x,x), _(x,B), _(x,x), _(x,x),
- /* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(Ca,T), _(x,x), _(x,x), _(x,x),
+ /* 1CF0 */ _(x,x), _(x,x), _(Vs,x), _(Vs,x), _(Ca,T), _(x,x), _(x,x), _(Ca,R),
/* 1CF8 */ _(Ca,x), _(Ca,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0x2008u 1656
@@ -368,7 +369,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* A8E0 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
/* A8E8 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
- /* A8F0 */ _(Ca,T), _(Ca,T), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x), _(x,x),
+ /* A8F0 */ _(Ca,T), _(Ca,T), _(Bi,x), _(Bi,x), _(x,x), _(x,x), _(x,x), _(x,x),
#define indic_offset_0xa9e0u 1720
@@ -390,7 +391,7 @@ static const INDIC_TABLE_ELEMENT_TYPE indic_table[] = {
/* AA70 */ _(x,x), _(C,x), _(C,x), _(C,x), _(CP,x), _(CP,x), _(CP,x), _(x,x),
/* AA78 */ _(x,x), _(x,x), _(C,x), _(TM,R), _(TM,T), _(TM,R), _(C,x), _(C,x),
-}; /* Table items: 1784; occupancy: 69% */
+}; /* Table items: 1784; occupancy: 70% */
INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u)
@@ -398,28 +399,28 @@ hb_indic_get_categories (hb_codepoint_t u)
switch (u >> 12)
{
case 0x0u:
- if (hb_in_range (u, 0x0028u, 0x003Fu)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
- if (hb_in_range (u, 0x00B0u, 0x00D7u)) return indic_table[u - 0x00B0u + indic_offset_0x00b0u];
- if (hb_in_range (u, 0x0900u, 0x0DF7u)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x0028u, 0x003Fu)) return indic_table[u - 0x0028u + indic_offset_0x0028u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x00B0u, 0x00D7u)) return indic_table[u - 0x00B0u + indic_offset_0x00b0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x0900u, 0x0DF7u)) return indic_table[u - 0x0900u + indic_offset_0x0900u];
if (unlikely (u == 0x00A0u)) return _(CP,x);
break;
case 0x1u:
- if (hb_in_range (u, 0x1000u, 0x109Fu)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
- if (hb_in_range (u, 0x1780u, 0x17EFu)) return indic_table[u - 0x1780u + indic_offset_0x1780u];
- if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1000u, 0x109Fu)) return indic_table[u - 0x1000u + indic_offset_0x1000u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1780u, 0x17EFu)) return indic_table[u - 0x1780u + indic_offset_0x1780u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1CD0u, 0x1CFFu)) return indic_table[u - 0x1CD0u + indic_offset_0x1cd0u];
break;
case 0x2u:
- if (hb_in_range (u, 0x2008u, 0x2017u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
- if (hb_in_range (u, 0x2070u, 0x2087u)) return indic_table[u - 0x2070u + indic_offset_0x2070u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x2008u, 0x2017u)) return indic_table[u - 0x2008u + indic_offset_0x2008u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x2070u, 0x2087u)) return indic_table[u - 0x2070u + indic_offset_0x2070u];
if (unlikely (u == 0x25CCu)) return _(CP,x);
break;
case 0xAu:
- if (hb_in_range (u, 0xA8E0u, 0xA8F7u)) return indic_table[u - 0xA8E0u + indic_offset_0xa8e0u];
- if (hb_in_range (u, 0xA9E0u, 0xA9FFu)) return indic_table[u - 0xA9E0u + indic_offset_0xa9e0u];
- if (hb_in_range (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xA8E0u, 0xA8F7u)) return indic_table[u - 0xA8E0u + indic_offset_0xa8e0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xA9E0u, 0xA9FFu)) return indic_table[u - 0xA9E0u + indic_offset_0xa9e0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u];
break;
default:
@@ -467,6 +468,7 @@ hb_indic_get_categories (hb_codepoint_t u)
#undef ISC_VI
#undef IMC_B
+#undef IMC_BL
#undef IMC_BR
#undef IMC_L
#undef IMC_LR
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc
index b48fb561c3..97d6d38287 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc
@@ -142,7 +142,7 @@ is_one_of (const hb_glyph_info_t &info, unsigned int flags)
{
/* If it ligated, all bets are off. */
if (_hb_glyph_info_ligated (&info)) return false;
- return !!(FLAG_SAFE (info.indic_category()) & flags);
+ return !!(FLAG_UNSAFE (info.indic_category()) & flags);
}
static inline bool
@@ -177,15 +177,15 @@ set_indic_properties (hb_glyph_info_t &info)
*/
/* The following act more like the Bindus. */
- if (unlikely (hb_in_range (u, 0x0953u, 0x0954u)))
+ if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x0953u, 0x0954u)))
cat = OT_SM;
/* The following act like consonants. */
- else if (unlikely (hb_in_ranges (u, 0x0A72u, 0x0A73u,
+ else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x0A72u, 0x0A73u,
0x1CF5u, 0x1CF6u)))
cat = OT_C;
/* TODO: The following should only be allowed after a Visarga.
* For now, just treat them like regular tone marks. */
- else if (unlikely (hb_in_range (u, 0x1CE2u, 0x1CE8u)))
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1CE2u, 0x1CE8u)))
cat = OT_A;
/* TODO: The following should only be allowed after some of
* the nasalization marks, maybe only for U+1CE9..U+1CF1.
@@ -193,15 +193,39 @@ set_indic_properties (hb_glyph_info_t &info)
else if (unlikely (u == 0x1CEDu))
cat = OT_A;
/* The following take marks in standalone clusters, similar to Avagraha. */
- else if (unlikely (hb_in_ranges (u, 0xA8F2u, 0xA8F7u,
+ else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0xA8F2u, 0xA8F7u,
0x1CE9u, 0x1CECu,
0x1CEEu, 0x1CF1u)))
{
cat = OT_Symbol;
- ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol);
+ static_assert (((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol), "");
}
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x17CDu, 0x17D1u) ||
+ u == 0x17CBu || u == 0x17D3u || u == 0x17DDu)) /* Khmer Various signs */
+ {
+ /* These can occur mid-syllable (eg. before matras), even though Unicode marks them as Syllable_Modifier.
+ * https://github.com/roozbehp/unicode-data/issues/5 */
+ cat = OT_M;
+ pos = POS_ABOVE_C;
+ }
+ else if (unlikely (u == 0x0A51u))
+ {
+ /* https://github.com/harfbuzz/harfbuzz/issues/524 */
+ cat = OT_M;
+ pos = POS_BELOW_C;
+ }
+
+ /* According to ScriptExtensions.txt, these Grantha marks may also be used in Tamil,
+ * so the Indic shaper needs to know their categories. */
+ else if (unlikely (u == 0x11301u || u == 0x11303u)) cat = OT_SM;
+ else if (unlikely (u == 0x1133cu)) cat = OT_N;
+
+ else if (unlikely (u == 0x0AFBu)) cat = OT_N; /* https://github.com/harfbuzz/harfbuzz/issues/552 */
+
+ else if (unlikely (u == 0x0980u)) cat = OT_PLACEHOLDER; /* https://github.com/harfbuzz/harfbuzz/issues/538 */
+ else if (unlikely (u == 0x0C80u)) cat = OT_PLACEHOLDER; /* https://github.com/harfbuzz/harfbuzz/pull/623 */
else if (unlikely (u == 0x17C6u)) cat = OT_N; /* Khmer Bindu doesn't like to be repositioned. */
- else if (unlikely (hb_in_range (u, 0x2010u, 0x2011u)))
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u)))
cat = OT_PLACEHOLDER;
else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
@@ -210,7 +234,7 @@ set_indic_properties (hb_glyph_info_t &info)
* Re-assign position.
*/
- if ((FLAG_SAFE (cat) & CONSONANT_FLAGS))
+ if ((FLAG_UNSAFE (cat) & CONSONANT_FLAGS))
{
pos = POS_BASE_C;
if (is_ra (u))
@@ -220,7 +244,7 @@ set_indic_properties (hb_glyph_info_t &info)
{
pos = matra_position (u, pos);
}
- else if ((FLAG_SAFE (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Symbol))))
+ else if ((FLAG_UNSAFE (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Symbol))))
{
pos = POS_SMVD;
}
@@ -411,12 +435,12 @@ collect_features_indic (hb_ot_shape_planner_t *plan)
unsigned int i = 0;
map->add_gsub_pause (initial_reordering);
for (; i < INDIC_BASIC_FEATURES; i++) {
- map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ);
- map->add_gsub_pause (NULL);
+ map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ | F_MANUAL_ZWNJ);
+ map->add_gsub_pause (nullptr);
}
map->add_gsub_pause (final_reordering);
for (; i < INDIC_NUM_FEATURES; i++) {
- map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ);
+ map->add_feature (indic_features[i].tag, 1, indic_features[i].flags | F_MANUAL_ZWJ | F_MANUAL_ZWNJ);
}
map->add_global_bool_feature (HB_TAG('c','a','l','t'));
@@ -485,7 +509,7 @@ struct indic_shape_plan_t
/* Our get_nominal_glyph() function needs a font, so we can't get the virama glyph
* during shape planning... Instead, overwrite it here. It's safe. Don't worry! */
- (const_cast<indic_shape_plan_t *> (this))->virama_glyph = glyph;
+ virama_glyph = glyph;
}
*pglyph = glyph;
@@ -495,7 +519,7 @@ struct indic_shape_plan_t
const indic_config_t *config;
bool is_old_spec;
- hb_codepoint_t virama_glyph;
+ mutable hb_codepoint_t virama_glyph;
would_substitute_feature_t rphf;
would_substitute_feature_t pref;
@@ -510,7 +534,7 @@ data_create_indic (const hb_ot_shape_plan_t *plan)
{
indic_shape_plan_t *indic_plan = (indic_shape_plan_t *) calloc (1, sizeof (indic_shape_plan_t));
if (unlikely (!indic_plan))
- return NULL;
+ return nullptr;
indic_plan->config = &indic_configs[0];
for (unsigned int i = 1; i < ARRAY_LENGTH (indic_configs); i++)
@@ -615,6 +639,8 @@ setup_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
hb_buffer_t *buffer)
{
find_syllables (buffer);
+ foreach_syllable (buffer, start, end)
+ buffer->unsafe_to_break (start, end);
}
static int
@@ -666,6 +692,21 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
hb_glyph_info_t *info = buffer->info;
+ /* https://github.com/harfbuzz/harfbuzz/issues/435#issuecomment-335560167
+ * // For compatibility with legacy usage in Kannada,
+ * // Ra+h+ZWJ must behave like Ra+ZWJ+h...
+ */
+ if (buffer->props.script == HB_SCRIPT_KANNADA &&
+ start + 3 <= end &&
+ is_one_of (info[start ], FLAG (OT_Ra)) &&
+ is_one_of (info[start+1], FLAG (OT_H)) &&
+ is_one_of (info[start+2], FLAG (OT_ZWJ)))
+ {
+ buffer->merge_clusters (start+1, start+3);
+ hb_glyph_info_t tmp = info[start+1];
+ info[start+1] = info[start+2];
+ info[start+2] = tmp;
+ }
/* 1. Find base consonant:
*
@@ -673,7 +714,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
* following algorithm: starting from the end of the syllable, move backwards
* until a consonant is found that does not have a below-base or post-base
* form (post-base forms have to follow below-base forms), or that is not a
- * pre-base reordering Ra, or arrive at the first consonant. The consonant
+ * pre-base-reordering Ra, or arrive at the first consonant. The consonant
* stopped at will be the base.
*
* o If the syllable starts with Ra + Halant (in a script that has Reph)
@@ -744,11 +785,11 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
if (info[i].indic_position() == POS_BELOW_C)
seen_below = true;
- /* -> or that is not a pre-base reordering Ra,
+ /* -> or that is not a pre-base-reordering Ra,
*
* IMPLEMENTATION NOTES:
*
- * Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped
+ * Our pre-base-reordering Ra's are marked POS_POST_C, so will be skipped
* by the logic above already.
*/
@@ -831,8 +872,8 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
/* 2. Decompose and reorder Matras:
*
- * Each matra and any syllable modifier sign in the cluster are moved to the
- * appropriate position relative to the consonant(s) in the cluster. The
+ * Each matra and any syllable modifier sign in the syllable are moved to the
+ * appropriate position relative to the consonant(s) in the syllable. The
* shaping engine decomposes two- or three-part matras into their constituent
* parts before any repositioning. Matra characters are classified by which
* consonant in a conjunct they have affinity for and are reordered to the
@@ -928,7 +969,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
indic_position_t last_pos = POS_START;
for (unsigned int i = start; i < end; i++)
{
- if ((FLAG_SAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | MEDIAL_FLAGS | HALANT_OR_COENG_FLAGS)))
+ if ((FLAG_UNSAFE (info[i].indic_category()) & (JOINER_FLAGS | FLAG (OT_N) | FLAG (OT_RS) | MEDIAL_FLAGS | HALANT_OR_COENG_FLAGS)))
{
info[i].indic_position() = last_pos;
if (unlikely (info[i].indic_category() == OT_H &&
@@ -1083,7 +1124,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
unsigned int pref_len = 2;
if (indic_plan->mask_array[PREF] && base + pref_len < end)
{
- /* Find a Halant,Ra sequence and mark it for pre-base reordering processing. */
+ /* Find a Halant,Ra sequence and mark it for pre-base-reordering processing. */
for (unsigned int i = base + 1; i + pref_len - 1 < end; i++) {
hb_codepoint_t glyphs[2];
for (unsigned int j = 0; j < pref_len; j++)
@@ -1258,7 +1299,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
/* This function relies heavily on halant glyphs. Lots of ligation
- * and possibly multiplication substitutions happened prior to this
+ * and possibly multiple substitutions happened prior to this
* phase, and that might have messed up our properties. Recover
* from a particular case of that where we're fairly sure that a
* class of OT_H is desired but has been lost. */
@@ -1282,7 +1323,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
* After the localized forms and basic shaping forms GSUB features have been
* applied (see below), the shaping engine performs some final glyph
* reordering before applying all the remaining font features to the entire
- * cluster.
+ * syllable.
*/
bool try_pref = !!indic_plan->mask_array[PREF];
@@ -1477,7 +1518,7 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
/* 3. If reph should be repositioned after the main consonant: find the
* first consonant not ligated with main, or find the first
- * consonant that is not a potential pre-base reordering Ra.
+ * consonant that is not a potential pre-base-reordering Ra.
*/
if (reph_pos == REPH_POS_AFTER_MAIN)
{
@@ -1497,8 +1538,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
if (reph_pos == REPH_POS_AFTER_SUB)
{
new_reph_pos = base;
- while (new_reph_pos < end &&
- !( FLAG_SAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
+ while (new_reph_pos + 1 < end &&
+ !( FLAG_UNSAFE (info[new_reph_pos + 1].indic_position()) & (FLAG (POS_POST_C) | FLAG (POS_AFTER_POST) | FLAG (POS_SMVD))))
new_reph_pos++;
if (new_reph_pos < end)
goto reph_move;
@@ -1566,13 +1607,13 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
}
- /* o Reorder pre-base reordering consonants:
+ /* o Reorder pre-base-reordering consonants:
*
- * If a pre-base reordering consonant is found, reorder it according to
+ * If a pre-base-reordering consonant is found, reorder it according to
* the following rules:
*/
- if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base reordering Ra. */
+ if (try_pref && base + 1 < end) /* Otherwise there can't be any pre-base-reordering Ra. */
{
for (unsigned int i = base + 1; i < end; i++)
if ((info[i].mask & indic_plan->mask_array[PREF]) != 0)
@@ -1646,11 +1687,15 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
/* Apply 'init' to the Left Matra if it's a word start. */
- if (info[start].indic_position () == POS_PRE_M &&
- (!start ||
- !(FLAG_SAFE (_hb_glyph_info_get_general_category (&info[start - 1])) &
- FLAG_RANGE (HB_UNICODE_GENERAL_CATEGORY_FORMAT, HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK))))
- info[start].mask |= indic_plan->mask_array[INIT];
+ if (info[start].indic_position () == POS_PRE_M)
+ {
+ if (!start ||
+ !(FLAG_UNSAFE (_hb_glyph_info_get_general_category (&info[start - 1])) &
+ FLAG_RANGE (HB_UNICODE_GENERAL_CATEGORY_FORMAT, HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
+ info[start].mask |= indic_plan->mask_array[INIT];
+ else
+ buffer->unsafe_to_break (start - 1, start + 1);
+ }
/*
@@ -1665,8 +1710,8 @@ final_reordering_syllable (const hb_ot_shape_plan_t *plan,
break;
default:
- /* Uniscribe merges the entire cluster... Except for Tamil & Sinhala.
- * This means, half forms are submerged into the main consonants cluster.
+ /* Uniscribe merges the entire syllable into a single cluster... Except for Tamil & Sinhala.
+ * This means, half forms are submerged into the main consonant's cluster.
* This is unnecessary, and makes cursor positioning harder, but that's what
* Uniscribe does. */
buffer->merge_clusters (start, end);
@@ -1738,7 +1783,7 @@ decompose_indic (const hb_ot_shape_normalize_context_t *c,
#endif
}
- if ((ab == 0x0DDAu || hb_in_range (ab, 0x0DDCu, 0x0DDEu)))
+ if ((ab == 0x0DDAu || hb_in_range<hb_codepoint_t> (ab, 0x0DDCu, 0x0DDEu)))
{
/*
* Sinhala split matras... Let the fun begin.
@@ -1803,18 +1848,18 @@ compose_indic (const hb_ot_shape_normalize_context_t *c,
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
{
- "indic",
collect_features_indic,
override_features_indic,
data_create_indic,
data_destroy_indic,
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
decompose_indic,
compose_indic,
setup_masks_indic,
- NULL, /* disable_otl */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
false, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh
index 29fdf9a1ae..ed87404305 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh
@@ -34,197 +34,201 @@
#line 36 "hb-ot-shape-complex-myanmar-machine.hh"
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
- 1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
+ 1u, 32u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u,
3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 5u, 8u,
5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
- 3u, 30u, 3u, 29u, 1u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
- 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 8u, 8u, 0
+ 3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
+ 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u, 0
};
static const char _myanmar_syllable_machine_key_spans[] = {
- 31, 28, 25, 4, 25, 23, 21, 21,
+ 32, 28, 25, 4, 25, 23, 21, 21,
27, 27, 27, 27, 16, 27, 27, 27,
27, 27, 27, 27, 27, 27, 25, 4,
25, 23, 21, 21, 27, 27, 27, 27,
- 28, 27, 30, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 1
+ 28, 27, 32, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 32, 1
};
static const short _myanmar_syllable_machine_index_offsets[] = {
- 0, 32, 61, 87, 92, 118, 142, 164,
- 186, 214, 242, 270, 298, 315, 343, 371,
- 399, 427, 455, 483, 511, 539, 567, 593,
- 598, 624, 648, 670, 692, 720, 748, 776,
- 804, 833, 861, 892, 920, 948, 976, 1004,
- 1032, 1060, 1088, 1116, 1144
+ 0, 33, 62, 88, 93, 119, 143, 165,
+ 187, 215, 243, 271, 299, 316, 344, 372,
+ 400, 428, 456, 484, 512, 540, 568, 594,
+ 599, 625, 649, 671, 693, 721, 749, 777,
+ 805, 834, 862, 895, 923, 951, 979, 1007,
+ 1035, 1063, 1091, 1119, 1147, 1180
};
static const char _myanmar_syllable_machine_indicies[] = {
1, 1, 2, 3, 4, 4, 0, 5,
0, 6, 1, 0, 0, 0, 0, 7,
- 0, 8, 1, 0, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 0,
- 21, 22, 23, 23, 20, 24, 20, 25,
- 20, 20, 20, 20, 20, 20, 20, 26,
- 20, 20, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 20, 23, 23, 20,
- 24, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 37, 20, 20, 20, 20, 20,
- 20, 31, 20, 20, 20, 35, 20, 23,
- 23, 20, 24, 20, 23, 23, 20, 24,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 31, 20, 20, 20, 35, 20, 38, 20,
- 23, 23, 20, 24, 20, 31, 20, 20,
- 20, 20, 20, 20, 20, 39, 20, 20,
- 20, 20, 20, 20, 31, 20, 23, 23,
- 20, 24, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 39, 20, 20, 20, 20,
- 20, 20, 31, 20, 23, 23, 20, 24,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 31, 20, 21, 20, 23, 23, 20, 24,
- 20, 25, 20, 20, 20, 20, 20, 20,
- 20, 40, 20, 20, 40, 20, 20, 20,
- 31, 41, 20, 20, 35, 20, 21, 20,
- 23, 23, 20, 24, 20, 25, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 31, 20, 20, 20,
- 35, 20, 21, 20, 23, 23, 20, 24,
- 20, 25, 20, 20, 20, 20, 20, 20,
- 20, 40, 20, 20, 20, 20, 20, 20,
- 31, 41, 20, 20, 35, 20, 21, 20,
- 23, 23, 20, 24, 20, 25, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 31, 41, 20, 20,
- 35, 20, 1, 1, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 1, 20, 21, 20, 23, 23, 20,
- 24, 20, 25, 20, 20, 20, 20, 20,
- 20, 20, 26, 20, 20, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 20, 21,
- 20, 23, 23, 20, 24, 20, 25, 20,
- 20, 20, 20, 20, 20, 20, 34, 20,
- 20, 20, 20, 20, 20, 31, 32, 33,
- 34, 35, 20, 21, 20, 23, 23, 20,
- 24, 20, 25, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 31, 32, 33, 34, 35, 20, 21,
- 20, 23, 23, 20, 24, 20, 25, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 31, 32, 33,
- 20, 35, 20, 21, 20, 23, 23, 20,
- 24, 20, 25, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 31, 20, 33, 20, 35, 20, 21,
- 20, 23, 23, 20, 24, 20, 25, 20,
- 20, 20, 20, 20, 20, 20, 34, 20,
- 20, 27, 20, 29, 20, 31, 32, 33,
- 34, 35, 20, 21, 20, 23, 23, 20,
- 24, 20, 25, 20, 20, 20, 20, 20,
- 20, 20, 34, 20, 20, 27, 20, 20,
- 20, 31, 32, 33, 34, 35, 20, 21,
- 20, 23, 23, 20, 24, 20, 25, 20,
- 20, 20, 20, 20, 20, 20, 34, 20,
- 20, 27, 28, 29, 20, 31, 32, 33,
- 34, 35, 20, 21, 22, 23, 23, 20,
- 24, 20, 25, 20, 20, 20, 20, 20,
- 20, 20, 26, 20, 20, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 20, 3,
- 3, 42, 5, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 43, 42, 42, 42,
- 42, 42, 42, 13, 42, 42, 42, 17,
- 42, 3, 3, 42, 5, 42, 3, 3,
- 42, 5, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 13, 42, 42, 42, 17, 42,
- 44, 42, 3, 3, 42, 5, 42, 13,
- 42, 42, 42, 42, 42, 42, 42, 45,
- 42, 42, 42, 42, 42, 42, 13, 42,
- 3, 3, 42, 5, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 45, 42, 42,
- 42, 42, 42, 42, 13, 42, 3, 3,
- 42, 5, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 13, 42, 2, 42, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 46, 42, 42, 46, 42,
- 42, 42, 13, 47, 42, 42, 17, 42,
- 2, 42, 3, 3, 42, 5, 42, 6,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 13, 42,
- 42, 42, 17, 42, 2, 42, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 46, 42, 42, 42, 42,
- 42, 42, 13, 47, 42, 42, 17, 42,
- 2, 42, 3, 3, 42, 5, 42, 6,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 13, 47,
- 42, 42, 17, 42, 21, 22, 23, 23,
- 20, 24, 20, 25, 20, 20, 20, 20,
- 20, 20, 20, 48, 20, 20, 27, 28,
+ 0, 8, 9, 0, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 1,
+ 0, 22, 23, 24, 24, 21, 25, 21,
+ 26, 21, 21, 21, 21, 21, 21, 21,
+ 27, 21, 21, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 21, 24, 24,
+ 21, 25, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 38, 21, 21, 21, 21,
+ 21, 21, 32, 21, 21, 21, 36, 21,
+ 24, 24, 21, 25, 21, 24, 24, 21,
+ 25, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 32, 21, 21, 21, 36, 21, 39,
+ 21, 24, 24, 21, 25, 21, 32, 21,
+ 21, 21, 21, 21, 21, 21, 40, 21,
+ 21, 21, 21, 21, 21, 32, 21, 24,
+ 24, 21, 25, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 40, 21, 21, 21,
+ 21, 21, 21, 32, 21, 24, 24, 21,
+ 25, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 32, 21, 22, 21, 24, 24, 21,
+ 25, 21, 26, 21, 21, 21, 21, 21,
+ 21, 21, 41, 21, 21, 41, 21, 21,
+ 21, 32, 42, 21, 21, 36, 21, 22,
+ 21, 24, 24, 21, 25, 21, 26, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 32, 21, 21,
+ 21, 36, 21, 22, 21, 24, 24, 21,
+ 25, 21, 26, 21, 21, 21, 21, 21,
+ 21, 21, 41, 21, 21, 21, 21, 21,
+ 21, 32, 42, 21, 21, 36, 21, 22,
+ 21, 24, 24, 21, 25, 21, 26, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 32, 42, 21,
+ 21, 36, 21, 1, 1, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 1, 21, 22, 21, 24, 24,
+ 21, 25, 21, 26, 21, 21, 21, 21,
+ 21, 21, 21, 27, 21, 21, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 21,
+ 22, 21, 24, 24, 21, 25, 21, 26,
+ 21, 21, 21, 21, 21, 21, 21, 35,
+ 21, 21, 21, 21, 21, 21, 32, 33,
+ 34, 35, 36, 21, 22, 21, 24, 24,
+ 21, 25, 21, 26, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 32, 33, 34, 35, 36, 21,
+ 22, 21, 24, 24, 21, 25, 21, 26,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 32, 33,
+ 34, 21, 36, 21, 22, 21, 24, 24,
+ 21, 25, 21, 26, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 32, 21, 34, 21, 36, 21,
+ 22, 21, 24, 24, 21, 25, 21, 26,
+ 21, 21, 21, 21, 21, 21, 21, 35,
+ 21, 21, 28, 21, 30, 21, 32, 33,
+ 34, 35, 36, 21, 22, 21, 24, 24,
+ 21, 25, 21, 26, 21, 21, 21, 21,
+ 21, 21, 21, 35, 21, 21, 28, 21,
+ 21, 21, 32, 33, 34, 35, 36, 21,
+ 22, 21, 24, 24, 21, 25, 21, 26,
+ 21, 21, 21, 21, 21, 21, 21, 35,
+ 21, 21, 28, 29, 30, 21, 32, 33,
+ 34, 35, 36, 21, 22, 23, 24, 24,
+ 21, 25, 21, 26, 21, 21, 21, 21,
+ 21, 21, 21, 27, 21, 21, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 21,
+ 3, 3, 43, 5, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 44, 43, 43,
+ 43, 43, 43, 43, 14, 43, 43, 43,
+ 18, 43, 3, 3, 43, 5, 43, 3,
+ 3, 43, 5, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 14, 43, 43, 43, 18,
+ 43, 45, 43, 3, 3, 43, 5, 43,
+ 14, 43, 43, 43, 43, 43, 43, 43,
+ 46, 43, 43, 43, 43, 43, 43, 14,
+ 43, 3, 3, 43, 5, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 46, 43,
+ 43, 43, 43, 43, 43, 14, 43, 3,
+ 3, 43, 5, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 14, 43, 2, 43, 3,
+ 3, 43, 5, 43, 6, 43, 43, 43,
+ 43, 43, 43, 43, 47, 43, 43, 47,
+ 43, 43, 43, 14, 48, 43, 43, 18,
+ 43, 2, 43, 3, 3, 43, 5, 43,
+ 6, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 14,
+ 43, 43, 43, 18, 43, 2, 43, 3,
+ 3, 43, 5, 43, 6, 43, 43, 43,
+ 43, 43, 43, 43, 47, 43, 43, 43,
+ 43, 43, 43, 14, 48, 43, 43, 18,
+ 43, 2, 43, 3, 3, 43, 5, 43,
+ 6, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 14,
+ 48, 43, 43, 18, 43, 22, 23, 24,
+ 24, 21, 25, 21, 26, 21, 21, 21,
+ 21, 21, 21, 21, 49, 21, 21, 28,
29, 30, 31, 32, 33, 34, 35, 36,
- 20, 21, 49, 23, 23, 20, 24, 20,
- 25, 20, 20, 20, 20, 20, 20, 20,
- 26, 20, 20, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 20, 1, 1, 2,
- 3, 3, 3, 42, 5, 42, 6, 1,
- 42, 42, 42, 42, 1, 42, 8, 1,
- 42, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 42, 2, 42, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 8, 42, 42, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 42,
- 2, 42, 3, 3, 42, 5, 42, 6,
- 42, 42, 42, 42, 42, 42, 42, 16,
- 42, 42, 42, 42, 42, 42, 13, 14,
- 15, 16, 17, 42, 2, 42, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 13, 14, 15, 16, 17, 42,
- 2, 42, 3, 3, 42, 5, 42, 6,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 13, 14,
- 15, 42, 17, 42, 2, 42, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 13, 42, 15, 42, 17, 42,
- 2, 42, 3, 3, 42, 5, 42, 6,
- 42, 42, 42, 42, 42, 42, 42, 16,
- 42, 42, 9, 42, 11, 42, 13, 14,
- 15, 16, 17, 42, 2, 42, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 16, 42, 42, 9, 42,
- 42, 42, 13, 14, 15, 16, 17, 42,
- 2, 42, 3, 3, 42, 5, 42, 6,
- 42, 42, 42, 42, 42, 42, 42, 16,
- 42, 42, 9, 10, 11, 42, 13, 14,
- 15, 16, 17, 42, 2, 3, 3, 3,
- 42, 5, 42, 6, 42, 42, 42, 42,
- 42, 42, 42, 8, 42, 42, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 42,
- 51, 50, 0
+ 37, 21, 22, 50, 24, 24, 21, 25,
+ 21, 26, 21, 21, 21, 21, 21, 21,
+ 21, 27, 21, 21, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 21, 1, 1,
+ 2, 3, 3, 3, 43, 5, 43, 6,
+ 1, 43, 43, 43, 43, 1, 43, 8,
+ 43, 43, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 43, 1, 43, 2,
+ 43, 3, 3, 43, 5, 43, 6, 43,
+ 43, 43, 43, 43, 43, 43, 8, 43,
+ 43, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 43, 2, 43, 3, 3, 43,
+ 5, 43, 6, 43, 43, 43, 43, 43,
+ 43, 43, 17, 43, 43, 43, 43, 43,
+ 43, 14, 15, 16, 17, 18, 43, 2,
+ 43, 3, 3, 43, 5, 43, 6, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 14, 15, 16,
+ 17, 18, 43, 2, 43, 3, 3, 43,
+ 5, 43, 6, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 14, 15, 16, 43, 18, 43, 2,
+ 43, 3, 3, 43, 5, 43, 6, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 43, 14, 43, 16,
+ 43, 18, 43, 2, 43, 3, 3, 43,
+ 5, 43, 6, 43, 43, 43, 43, 43,
+ 43, 43, 17, 43, 43, 10, 43, 12,
+ 43, 14, 15, 16, 17, 18, 43, 2,
+ 43, 3, 3, 43, 5, 43, 6, 43,
+ 43, 43, 43, 43, 43, 43, 17, 43,
+ 43, 10, 43, 43, 43, 14, 15, 16,
+ 17, 18, 43, 2, 43, 3, 3, 43,
+ 5, 43, 6, 43, 43, 43, 43, 43,
+ 43, 43, 17, 43, 43, 10, 11, 12,
+ 43, 14, 15, 16, 17, 18, 43, 2,
+ 3, 3, 3, 43, 5, 43, 6, 43,
+ 43, 43, 43, 43, 43, 43, 8, 43,
+ 43, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 43, 1, 1, 51, 51, 51,
+ 51, 51, 51, 51, 51, 1, 51, 51,
+ 51, 51, 1, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 1, 51, 52, 51, 0
};
static const char _myanmar_syllable_machine_trans_targs[] = {
0, 1, 22, 0, 0, 23, 29, 32,
- 35, 36, 40, 41, 42, 25, 38, 39,
- 37, 28, 43, 44, 0, 2, 12, 0,
- 3, 9, 13, 14, 18, 19, 20, 5,
- 16, 17, 15, 8, 21, 4, 6, 7,
- 10, 11, 0, 24, 26, 27, 30, 31,
- 33, 34, 0, 0
+ 35, 44, 36, 40, 41, 42, 25, 38,
+ 39, 37, 28, 43, 45, 0, 2, 12,
+ 0, 3, 9, 13, 14, 18, 19, 20,
+ 5, 16, 17, 15, 8, 21, 4, 6,
+ 7, 10, 11, 0, 24, 26, 27, 30,
+ 31, 33, 34, 0, 0
};
static const char _myanmar_syllable_machine_trans_actions[] = {
3, 0, 0, 4, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 0, 0, 7,
- 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 6, 0, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 8, 0, 0, 0, 0, 0,
- 0, 0, 9, 10
+ 0, 0, 0, 8, 0, 0, 0, 0,
+ 0, 0, 0, 9, 10
};
static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -233,7 +237,7 @@ static const char _myanmar_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
};
static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -242,16 +246,16 @@ static const char _myanmar_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
};
static const short _myanmar_syllable_machine_eof_trans[] = {
- 0, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 43, 43,
- 43, 43, 43, 43, 43, 43, 43, 43,
- 21, 21, 43, 43, 43, 43, 43, 43,
- 43, 43, 43, 43, 51
+ 0, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 22, 22,
+ 22, 22, 22, 22, 22, 22, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 22, 22, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 52, 52
};
static const int myanmar_syllable_machine_start = 0;
@@ -265,7 +269,7 @@ static const int myanmar_syllable_machine_en_main = 0;
-#line 93 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 94 "hb-ot-shape-complex-myanmar-machine.rl"
#define found_syllable(syllable_type) \
@@ -285,7 +289,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 289 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 293 "hb-ot-shape-complex-myanmar-machine.hh"
{
cs = myanmar_syllable_machine_start;
ts = 0;
@@ -293,7 +297,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 114 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 115 "hb-ot-shape-complex-myanmar-machine.rl"
p = 0;
@@ -302,7 +306,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 306 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 310 "hb-ot-shape-complex-myanmar-machine.hh"
{
int _slen;
int _trans;
@@ -316,7 +320,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 320 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 324 "hb-ot-shape-complex-myanmar-machine.hh"
}
_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -335,38 +339,38 @@ _eof_trans:
switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
case 7:
-#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (consonant_syllable); }}
break;
case 5:
-#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (non_myanmar_cluster); }}
break;
case 10:
-#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (punctuation_cluster); }}
break;
case 4:
-#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 3:
-#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (non_myanmar_cluster); }}
break;
case 6:
-#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
case 8:
-#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 9:
-#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (non_myanmar_cluster); }}
break;
-#line 370 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 374 "hb-ot-shape-complex-myanmar-machine.hh"
}
_again:
@@ -375,7 +379,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 379 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 383 "hb-ot-shape-complex-myanmar-machine.hh"
}
if ( ++p != pe )
@@ -391,7 +395,7 @@ _again:
}
-#line 123 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 124 "hb-ot-shape-complex-myanmar-machine.rl"
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc
index bb68622e2a..5ea1dbff27 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc
@@ -103,7 +103,7 @@ collect_features_myanmar (hb_ot_shape_planner_t *plan)
for (unsigned int i = 0; i < ARRAY_LENGTH (basic_features); i++)
{
map->add_feature (basic_features[i], 1, F_GLOBAL | F_MANUAL_ZWJ);
- map->add_gsub_pause (NULL);
+ map->add_gsub_pause (nullptr);
}
map->add_gsub_pause (final_reordering);
for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
@@ -130,8 +130,7 @@ enum syllable_type_t {
/* Note: This enum is duplicated in the -machine.rl source file.
* Not sure how to avoid duplication. */
enum myanmar_category_t {
- OT_As = 18, /* Asat */
- OT_D = 19, /* Digits except zero */
+ OT_As = 18, /* Asat */
OT_D0 = 20, /* Digit zero */
OT_DB = OT_N, /* Dot below */
OT_GB = OT_PLACEHOLDER,
@@ -145,7 +144,8 @@ enum myanmar_category_t {
OT_VPre = 28,
OT_VPst = 29,
OT_VS = 30, /* Variation selectors */
- OT_P = 31 /* Punctuation */
+ OT_P = 31, /* Punctuation */
+ OT_D = 32, /* Digits except zero */
};
@@ -154,7 +154,7 @@ is_one_of (const hb_glyph_info_t &info, unsigned int flags)
{
/* If it ligated, all bets are off. */
if (_hb_glyph_info_ligated (&info)) return false;
- return !!(FLAG_SAFE (info.myanmar_category()) & flags);
+ return !!(FLAG_UNSAFE (info.myanmar_category()) & flags);
}
static inline bool
@@ -175,7 +175,7 @@ set_myanmar_properties (hb_glyph_info_t &info)
/* Myanmar
* http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm#analyze
*/
- if (unlikely (hb_in_range (u, 0xFE00u, 0xFE0Fu)))
+ if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xFE00u, 0xFE0Fu)))
cat = (indic_category_t) OT_VS;
switch (u)
@@ -297,6 +297,8 @@ setup_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
hb_buffer_t *buffer)
{
find_syllables (buffer);
+ foreach_syllable (buffer, start, end)
+ buffer->unsafe_to_break (start, end);
}
static int
@@ -510,36 +512,36 @@ final_reordering (const hb_ot_shape_plan_t *plan,
* generic shaper, except that it zeros mark advances GDEF_LATE. */
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar_old =
{
- "default",
- NULL, /* collect_features */
- NULL, /* override_features */
- NULL, /* data_create */
- NULL, /* data_destroy */
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* collect_features */
+ nullptr, /* override_features */
+ nullptr, /* data_create */
+ nullptr, /* data_destroy */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
- NULL, /* decompose */
- NULL, /* compose */
- NULL, /* setup_masks */
- NULL, /* disable_otl */
+ nullptr, /* decompose */
+ nullptr, /* compose */
+ nullptr, /* setup_masks */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */
};
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar =
{
- "myanmar",
collect_features_myanmar,
override_features_myanmar,
- NULL, /* data_create */
- NULL, /* data_destroy */
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* data_create */
+ nullptr, /* data_destroy */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
- NULL, /* decompose */
- NULL, /* compose */
+ nullptr, /* decompose */
+ nullptr, /* compose */
setup_masks_myanmar,
- NULL, /* disable_otl */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
false, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh
index 39572dfe00..fb2f61157a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh
@@ -39,6 +39,8 @@
#define complex_var_u8_1() var2.u8[3]
+#define HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS 32
+
enum hb_ot_shape_zero_width_marks_type_t {
HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
@@ -63,12 +65,10 @@ enum hb_ot_shape_zero_width_marks_type_t {
struct hb_ot_complex_shaper_t
{
- char name[8];
-
/* collect_features()
* Called during shape_plan().
* Shapers should use plan->map to add their features and callbacks.
- * May be NULL.
+ * May be nullptr.
*/
void (*collect_features) (hb_ot_shape_planner_t *plan);
@@ -76,7 +76,7 @@ struct hb_ot_complex_shaper_t
* Called during shape_plan().
* Shapers should use plan->map to override features and add callbacks after
* common features are added.
- * May be NULL.
+ * May be nullptr.
*/
void (*override_features) (hb_ot_shape_planner_t *plan);
@@ -84,15 +84,15 @@ struct hb_ot_complex_shaper_t
/* data_create()
* Called at the end of shape_plan().
* Whatever shapers return will be accessible through plan->data later.
- * If NULL is returned, means a plan failure.
+ * If nullptr is returned, means a plan failure.
*/
void *(*data_create) (const hb_ot_shape_plan_t *plan);
/* data_destroy()
* Called when the shape_plan is being destroyed.
* plan->data is passed here for destruction.
- * If NULL is returned, means a plan failure.
- * May be NULL.
+ * If nullptr is returned, means a plan failure.
+ * May be nullptr.
*/
void (*data_destroy) (void *data);
@@ -100,7 +100,7 @@ struct hb_ot_complex_shaper_t
/* preprocess_text()
* Called during shape().
* Shapers can use to modify text before shaping starts.
- * May be NULL.
+ * May be nullptr.
*/
void (*preprocess_text) (const hb_ot_shape_plan_t *plan,
hb_buffer_t *buffer,
@@ -109,7 +109,7 @@ struct hb_ot_complex_shaper_t
/* postprocess_glyphs()
* Called during shape().
* Shapers can use to modify glyphs after shaping ends.
- * May be NULL.
+ * May be nullptr.
*/
void (*postprocess_glyphs) (const hb_ot_shape_plan_t *plan,
hb_buffer_t *buffer,
@@ -120,7 +120,7 @@ struct hb_ot_complex_shaper_t
/* decompose()
* Called during shape()'s normalization.
- * May be NULL.
+ * May be nullptr.
*/
bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
hb_codepoint_t ab,
@@ -129,7 +129,7 @@ struct hb_ot_complex_shaper_t
/* compose()
* Called during shape()'s normalization.
- * May be NULL.
+ * May be nullptr.
*/
bool (*compose) (const hb_ot_shape_normalize_context_t *c,
hb_codepoint_t a,
@@ -140,7 +140,7 @@ struct hb_ot_complex_shaper_t
* Called during shape().
* Shapers should use map to get feature masks and set on buffer.
* Shapers may NOT modify characters.
- * May be NULL.
+ * May be nullptr.
*/
void (*setup_masks) (const hb_ot_shape_plan_t *plan,
hb_buffer_t *buffer,
@@ -150,10 +150,20 @@ struct hb_ot_complex_shaper_t
* Called during shape().
* If set and returns true, GDEF/GSUB/GPOS of the font are ignored
* and fallback operations used.
- * May be NULL.
+ * May be nullptr.
*/
bool (*disable_otl) (const hb_ot_shape_plan_t *plan);
+ /* reorder_marks()
+ * Called during shape().
+ * Shapers can use to modify ordering of combining marks.
+ * May be nullptr.
+ */
+ void (*reorder_marks) (const hb_ot_shape_plan_t *plan,
+ hb_buffer_t *buffer,
+ unsigned int start,
+ unsigned int end);
+
hb_ot_shape_zero_width_marks_type_t zero_width_marks;
bool fallback_position;
@@ -191,6 +201,9 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
case HB_SCRIPT_MANICHAEAN:
case HB_SCRIPT_PSALTER_PAHLAVI:
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_ADLAM:
+
/* For Arabic script, use the Arabic shaper even if no OT script tag was found.
* This is because we do fallback shaping for Arabic script (and not others).
* But note that Arabic shaping is applicable only to horizontal layout; for
@@ -250,10 +263,12 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
case HB_SCRIPT_SINHALA:
/* If the designer designed the font for the 'DFLT' script,
- * use the default shaper. Otherwise, use the specific shaper.
+ * (or we ended up arbitrarily pick 'latn'), use the default shaper.
+ * Otherwise, use the specific shaper.
* Note that for some simple scripts, there may not be *any*
* GSUB/GPOS needed, so there may be no scripts found! */
- if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T'))
+ if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
+ planner->map.chosen_script[0] == HB_TAG ('l','a','t','n'))
return &_hb_ot_complex_shaper_default;
else
return &_hb_ot_complex_shaper_indic;
@@ -269,7 +284,7 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
planner->map.script_index[0],
planner->map.language_index[0],
HB_TAG ('p','r','e','f'),
- NULL))
+ nullptr))
return &_hb_ot_complex_shaper_indic;
else
return &_hb_ot_complex_shaper_default;
@@ -359,11 +374,18 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
case HB_SCRIPT_MARCHEN:
case HB_SCRIPT_NEWA:
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_MASARAM_GONDI:
+ case HB_SCRIPT_SOYOMBO:
+ case HB_SCRIPT_ZANABAZAR_SQUARE:
+
/* If the designer designed the font for the 'DFLT' script,
- * use the default shaper. Otherwise, use the specific shaper.
+ * (or we ended up arbitrarily pick 'latn'), use the default shaper.
+ * Otherwise, use the specific shaper.
* Note that for some simple scripts, there may not be *any*
* GSUB/GPOS needed, so there may be no scripts found! */
- if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T'))
+ if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
+ planner->map.chosen_script[0] == HB_TAG ('l','a','t','n'))
return &_hb_ot_complex_shaper_default;
else
return &_hb_ot_complex_shaper_use;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc
index e6f80f59e7..6ba925c675 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc
@@ -52,7 +52,7 @@ get_consonant_type (hb_codepoint_t u)
return RC;
if (u == 0x0E0Eu || u == 0x0E0Fu)
return DC;
- if (hb_in_range (u, 0x0E01u, 0x0E2Eu))
+ if (hb_in_range<hb_codepoint_t> (u, 0x0E01u, 0x0E2Eu))
return NC;
return NOT_CONSONANT;
}
@@ -70,12 +70,12 @@ enum thai_mark_type_t
static thai_mark_type_t
get_mark_type (hb_codepoint_t u)
{
- if (u == 0x0E31u || hb_in_range (u, 0x0E34u, 0x0E37u) ||
- u == 0x0E47u || hb_in_range (u, 0x0E4Du, 0x0E4Eu))
+ if (u == 0x0E31u || hb_in_range<hb_codepoint_t> (u, 0x0E34u, 0x0E37u) ||
+ u == 0x0E47u || hb_in_range<hb_codepoint_t> (u, 0x0E4Du, 0x0E4Eu))
return AV;
- if (hb_in_range (u, 0x0E38u, 0x0E3Au))
+ if (hb_in_range<hb_codepoint_t> (u, 0x0E38u, 0x0E3Au))
return BV;
- if (hb_in_range (u, 0x0E48u, 0x0E4Cu))
+ if (hb_in_range<hb_codepoint_t> (u, 0x0E48u, 0x0E4Cu))
return T;
return NOT_MARK;
}
@@ -97,7 +97,7 @@ thai_pua_shape (hb_codepoint_t u, thai_action_t action, hb_font_t *font)
hb_codepoint_t u;
hb_codepoint_t win_pua;
hb_codepoint_t mac_pua;
- } const *pua_mappings = NULL;
+ } const *pua_mappings = nullptr;
static const thai_pua_mapping_t SD_mappings[] = {
{0x0E48u, 0xF70Au, 0xF88Bu}, /* MAI EK */
{0x0E49u, 0xF70Bu, 0xF88Eu}, /* MAI THO */
@@ -244,6 +244,7 @@ do_thai_pua_shaping (const hb_ot_shape_plan_t *plan HB_UNUSED,
/* At least one of the above/below actions is NOP. */
thai_action_t action = above_edge.action != NOP ? above_edge.action : below_edge.action;
+ buffer->unsafe_to_break (base, i);
if (action == RD)
info[base].codepoint = thai_pua_shape (info[base].codepoint, action, font);
else
@@ -310,7 +311,7 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
#define IS_SARA_AM(x) (((x) & ~0x0080u) == 0x0E33u)
#define NIKHAHIT_FROM_SARA_AM(x) ((x) - 0x0E33u + 0x0E4Du)
#define SARA_AA_FROM_SARA_AM(x) ((x) - 1)
-#define IS_TONE_MARK(x) (hb_in_ranges ((x) & ~0x0080u, 0x0E34u, 0x0E37u, 0x0E47u, 0x0E4Eu, 0x0E31u, 0x0E31u))
+#define IS_TONE_MARK(x) (hb_in_ranges<hb_codepoint_t> ((x) & ~0x0080u, 0x0E34u, 0x0E37u, 0x0E47u, 0x0E4Eu, 0x0E31u, 0x0E31u))
buffer->clear_output ();
unsigned int count = buffer->len;
@@ -365,18 +366,18 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
{
- "thai",
- NULL, /* collect_features */
- NULL, /* override_features */
- NULL, /* data_create */
- NULL, /* data_destroy */
+ nullptr, /* collect_features */
+ nullptr, /* override_features */
+ nullptr, /* data_create */
+ nullptr, /* data_destroy */
preprocess_text_thai,
- NULL, /* postprocess_glyphs */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
- NULL, /* decompose */
- NULL, /* compose */
- NULL, /* setup_masks */
- NULL, /* disable_otl */
+ nullptr, /* decompose */
+ nullptr, /* compose */
+ nullptr, /* setup_masks */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
false,/* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc
index aadf59f5ad..eaac0bf689 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc
@@ -46,18 +46,18 @@ collect_features_tibetan (hb_ot_shape_planner_t *plan)
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan =
{
- "default",
collect_features_tibetan,
- NULL, /* override_features */
- NULL, /* data_create */
- NULL, /* data_destroy */
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* override_features */
+ nullptr, /* data_create */
+ nullptr, /* data_destroy */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
- NULL, /* decompose */
- NULL, /* compose */
- NULL, /* setup_masks */
- NULL, /* disable_otl */
+ nullptr, /* decompose */
+ nullptr, /* compose */
+ nullptr, /* setup_masks */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
true, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-machine.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-machine.hh
index 44e5d0d56b..4f6727186d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-machine.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-machine.hh
@@ -36,33 +36,33 @@
#line 38 "hb-ot-shape-complex-use-machine.hh"
static const unsigned char _use_syllable_machine_trans_keys[] = {
- 1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u,
+ 1u, 1u, 0u, 43u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u,
8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
- 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 13u, 21u,
- 4u, 4u, 13u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 8u, 26u,
- 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
- 8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u,
- 42u, 42u, 0
+ 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
+ 13u, 21u, 4u, 4u, 13u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u,
+ 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u,
+ 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 1u, 39u, 8u, 39u,
+ 21u, 42u, 41u, 42u, 42u, 42u, 1u, 5u, 0
};
static const char _use_syllable_machine_key_spans[] = {
- 1, 40, 1, 32, 32, 1, 32, 32,
+ 1, 44, 1, 32, 32, 1, 32, 32,
32, 19, 19, 19, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 9,
- 1, 1, 32, 32, 32, 32, 19, 19,
- 19, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 1, 39, 32, 22, 2,
- 1
+ 32, 32, 32, 32, 32, 32, 32, 32,
+ 9, 1, 1, 32, 32, 32, 32, 19,
+ 19, 19, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 1, 39, 32,
+ 22, 2, 1, 5
};
static const short _use_syllable_machine_index_offsets[] = {
- 0, 2, 43, 45, 78, 111, 113, 146,
- 179, 212, 232, 252, 272, 305, 338, 371,
- 404, 437, 470, 503, 536, 569, 602, 635,
- 645, 647, 649, 682, 715, 748, 781, 801,
- 821, 841, 874, 907, 940, 973, 1006, 1039,
- 1072, 1105, 1138, 1171, 1173, 1213, 1246, 1269,
- 1272
+ 0, 2, 47, 49, 82, 115, 117, 150,
+ 183, 216, 236, 256, 276, 309, 342, 375,
+ 408, 441, 474, 507, 540, 573, 606, 639,
+ 672, 682, 684, 686, 719, 752, 785, 818,
+ 838, 858, 878, 911, 944, 977, 1010, 1043,
+ 1076, 1109, 1142, 1175, 1208, 1241, 1243, 1283,
+ 1316, 1339, 1342, 1344
};
static const char _use_syllable_machine_indicies[] = {
@@ -71,183 +71,192 @@ static const char _use_syllable_machine_indicies[] = {
4, 4, 2, 2, 8, 9, 4, 4,
10, 11, 12, 13, 14, 15, 16, 10,
17, 18, 19, 20, 21, 22, 4, 23,
- 24, 25, 4, 27, 26, 29, 28, 28,
- 30, 31, 28, 28, 28, 28, 28, 28,
- 28, 28, 32, 33, 34, 35, 36, 37,
- 38, 39, 33, 40, 32, 41, 42, 43,
- 44, 28, 45, 46, 47, 28, 29, 28,
- 28, 30, 31, 28, 28, 28, 28, 28,
- 28, 28, 28, 48, 33, 34, 35, 36,
- 37, 38, 39, 33, 40, 41, 41, 42,
- 43, 44, 28, 45, 46, 47, 28, 30,
- 49, 29, 28, 28, 30, 31, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 33,
- 34, 35, 36, 37, 38, 39, 33, 40,
- 41, 41, 42, 43, 44, 28, 45, 46,
- 47, 28, 29, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 33, 34, 35, 36, 37, 28, 28, 28,
- 28, 28, 28, 42, 43, 44, 28, 45,
- 46, 47, 28, 29, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 34, 35, 36, 37, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 45, 46, 47, 28, 29, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 35, 36, 37, 28,
- 29, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 36, 37, 28, 29, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 37, 28,
- 29, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 35, 36, 37, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 45, 46, 47,
- 28, 29, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 35, 36, 37, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 46,
- 47, 28, 29, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 35, 36, 37, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 47, 28, 29, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 34, 35, 36, 37, 28, 28,
- 28, 28, 28, 28, 42, 43, 44, 28,
- 45, 46, 47, 28, 29, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 34, 35, 36, 37, 28,
- 28, 28, 28, 28, 28, 28, 43, 44,
- 28, 45, 46, 47, 28, 29, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 34, 35, 36, 37,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 44, 28, 45, 46, 47, 28, 29, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 33, 34, 35, 36,
- 37, 28, 39, 33, 28, 28, 28, 42,
- 43, 44, 28, 45, 46, 47, 28, 29,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 33, 34, 35,
- 36, 37, 28, 28, 33, 28, 28, 28,
- 42, 43, 44, 28, 45, 46, 47, 28,
- 29, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 33, 34,
- 35, 36, 37, 38, 39, 33, 28, 28,
- 28, 42, 43, 44, 28, 45, 46, 47,
- 28, 29, 28, 28, 30, 31, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 33,
- 34, 35, 36, 37, 38, 39, 33, 40,
- 28, 41, 42, 43, 44, 28, 45, 46,
- 47, 28, 29, 28, 28, 30, 31, 28,
- 28, 28, 28, 28, 28, 28, 28, 28,
- 33, 34, 35, 36, 37, 38, 39, 33,
- 40, 32, 41, 42, 43, 44, 28, 45,
- 46, 47, 28, 51, 50, 50, 50, 50,
- 50, 50, 50, 52, 50, 5, 53, 51,
- 50, 6, 54, 54, 1, 55, 54, 54,
- 54, 54, 54, 54, 54, 54, 56, 10,
- 11, 12, 13, 14, 15, 16, 10, 17,
- 19, 19, 20, 21, 22, 54, 23, 24,
- 25, 54, 6, 54, 54, 1, 55, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 10, 11, 12, 13, 14, 15, 16, 10,
- 17, 19, 19, 20, 21, 22, 54, 23,
- 24, 25, 54, 6, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 10, 11, 12, 13, 14, 54, 54,
- 54, 54, 54, 54, 20, 21, 22, 54,
- 23, 24, 25, 54, 6, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 11, 12, 13, 14, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 23, 24, 25, 54, 6, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 12, 13, 14,
- 54, 6, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 13, 14, 54, 6, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 14,
- 54, 6, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 12, 13, 14, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 23, 24,
- 25, 54, 6, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 12, 13, 14, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 24, 25, 54, 6, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 12, 13, 14, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 25, 54, 6, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 11, 12, 13, 14, 54,
- 54, 54, 54, 54, 54, 20, 21, 22,
- 54, 23, 24, 25, 54, 6, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 11, 12, 13, 14,
- 54, 54, 54, 54, 54, 54, 54, 21,
- 22, 54, 23, 24, 25, 54, 6, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 11, 12, 13,
- 14, 54, 54, 54, 54, 54, 54, 54,
- 54, 22, 54, 23, 24, 25, 54, 6,
- 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 10, 11, 12,
- 13, 14, 54, 16, 10, 54, 54, 54,
- 20, 21, 22, 54, 23, 24, 25, 54,
- 6, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 10, 11,
- 12, 13, 14, 54, 54, 10, 54, 54,
- 54, 20, 21, 22, 54, 23, 24, 25,
- 54, 6, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 10,
- 11, 12, 13, 14, 15, 16, 10, 54,
- 54, 54, 20, 21, 22, 54, 23, 24,
- 25, 54, 6, 54, 54, 1, 55, 54,
- 54, 54, 54, 54, 54, 54, 54, 54,
+ 24, 25, 4, 4, 4, 26, 4, 28,
+ 27, 30, 29, 29, 31, 32, 29, 29,
+ 29, 29, 29, 29, 29, 29, 33, 34,
+ 35, 36, 37, 38, 39, 40, 34, 41,
+ 33, 42, 43, 44, 45, 29, 46, 47,
+ 48, 29, 30, 29, 29, 31, 32, 29,
+ 29, 29, 29, 29, 29, 29, 29, 49,
+ 34, 35, 36, 37, 38, 39, 40, 34,
+ 41, 42, 42, 43, 44, 45, 29, 46,
+ 47, 48, 29, 31, 50, 30, 29, 29,
+ 31, 32, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 34, 35, 36, 37, 38,
+ 39, 40, 34, 41, 42, 42, 43, 44,
+ 45, 29, 46, 47, 48, 29, 30, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 34, 35, 36, 37,
+ 38, 29, 29, 29, 29, 29, 29, 43,
+ 44, 45, 29, 46, 47, 48, 29, 30,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 35, 36,
+ 37, 38, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 46, 47, 48, 29,
+ 30, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 36, 37, 38, 29, 30, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 37, 38, 29,
+ 30, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 38, 29, 30, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 36, 37, 38, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 46, 47, 48, 29, 30, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 36, 37, 38,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 47, 48, 29, 30, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 36, 37,
+ 38, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 48, 29, 30,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 35, 36,
+ 37, 38, 29, 29, 29, 29, 29, 29,
+ 43, 44, 45, 29, 46, 47, 48, 29,
+ 30, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 35,
+ 36, 37, 38, 29, 29, 29, 29, 29,
+ 29, 29, 44, 45, 29, 46, 47, 48,
+ 29, 30, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 35, 36, 37, 38, 29, 29, 29, 29,
+ 29, 29, 29, 29, 45, 29, 46, 47,
+ 48, 29, 30, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 34, 35, 36, 37, 38, 29, 40, 34,
+ 29, 29, 29, 43, 44, 45, 29, 46,
+ 47, 48, 29, 30, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 34, 35, 36, 37, 38, 29, 51,
+ 34, 29, 29, 29, 43, 44, 45, 29,
+ 46, 47, 48, 29, 30, 29, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 34, 35, 36, 37, 38, 29,
+ 29, 34, 29, 29, 29, 43, 44, 45,
+ 29, 46, 47, 48, 29, 30, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 29, 29, 29, 34, 35, 36, 37, 38,
+ 39, 40, 34, 29, 29, 29, 43, 44,
+ 45, 29, 46, 47, 48, 29, 30, 29,
+ 29, 31, 32, 29, 29, 29, 29, 29,
+ 29, 29, 29, 29, 34, 35, 36, 37,
+ 38, 39, 40, 34, 41, 29, 42, 43,
+ 44, 45, 29, 46, 47, 48, 29, 30,
+ 29, 29, 31, 32, 29, 29, 29, 29,
+ 29, 29, 29, 29, 29, 34, 35, 36,
+ 37, 38, 39, 40, 34, 41, 33, 42,
+ 43, 44, 45, 29, 46, 47, 48, 29,
+ 53, 52, 52, 52, 52, 52, 52, 52,
+ 54, 52, 5, 55, 53, 52, 6, 56,
+ 56, 1, 57, 56, 56, 56, 56, 56,
+ 56, 56, 56, 58, 10, 11, 12, 13,
+ 14, 15, 16, 10, 17, 19, 19, 20,
+ 21, 22, 56, 23, 24, 25, 56, 6,
+ 56, 56, 1, 57, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 10, 11, 12,
+ 13, 14, 15, 16, 10, 17, 19, 19,
+ 20, 21, 22, 56, 23, 24, 25, 56,
+ 6, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 10, 11,
+ 12, 13, 14, 56, 56, 56, 56, 56,
+ 56, 20, 21, 22, 56, 23, 24, 25,
+ 56, 6, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 11, 12, 13, 14, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 23, 24,
+ 25, 56, 6, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 12, 13, 14, 56, 6, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 13,
+ 14, 56, 6, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 14, 56, 6, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 12, 13,
+ 14, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 23, 24, 25, 56, 6,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 12,
+ 13, 14, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 24, 25, 56,
+ 6, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 12, 13, 14, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 25,
+ 56, 6, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 11, 12, 13, 14, 56, 56, 56, 56,
+ 56, 56, 20, 21, 22, 56, 23, 24,
+ 25, 56, 6, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 11, 12, 13, 14, 56, 56, 56,
+ 56, 56, 56, 56, 21, 22, 56, 23,
+ 24, 25, 56, 6, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 11, 12, 13, 14, 56, 56,
+ 56, 56, 56, 56, 56, 56, 22, 56,
+ 23, 24, 25, 56, 6, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 10, 11, 12, 13, 14, 56,
+ 16, 10, 56, 56, 56, 20, 21, 22,
+ 56, 23, 24, 25, 56, 6, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 10, 11, 12, 13, 14,
+ 56, 59, 10, 56, 56, 56, 20, 21,
+ 22, 56, 23, 24, 25, 56, 6, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 10, 11, 12, 13,
+ 14, 56, 56, 10, 56, 56, 56, 20,
+ 21, 22, 56, 23, 24, 25, 56, 6,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 10, 11, 12,
+ 13, 14, 15, 16, 10, 56, 56, 56,
+ 20, 21, 22, 56, 23, 24, 25, 56,
+ 6, 56, 56, 1, 57, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 10, 11,
+ 12, 13, 14, 15, 16, 10, 17, 56,
+ 19, 20, 21, 22, 56, 23, 24, 25,
+ 56, 1, 60, 3, 56, 56, 56, 3,
+ 56, 56, 6, 56, 56, 1, 57, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56,
10, 11, 12, 13, 14, 15, 16, 10,
- 17, 54, 19, 20, 21, 22, 54, 23,
- 24, 25, 54, 1, 57, 3, 54, 54,
- 54, 3, 54, 54, 6, 54, 54, 1,
- 55, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 10, 11, 12, 13, 14, 15,
- 16, 10, 17, 18, 19, 20, 21, 22,
- 54, 23, 24, 25, 54, 6, 54, 54,
- 1, 55, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 10, 11, 12, 13, 14,
- 15, 16, 10, 17, 18, 19, 20, 21,
- 22, 54, 23, 24, 25, 54, 59, 58,
- 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 59, 60, 58, 59, 60, 58,
- 60, 58, 0
+ 17, 18, 19, 20, 21, 22, 56, 23,
+ 24, 25, 56, 6, 56, 56, 1, 57,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 10, 11, 12, 13, 14, 15, 16,
+ 10, 17, 18, 19, 20, 21, 22, 56,
+ 23, 24, 25, 56, 62, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 61,
+ 62, 63, 61, 62, 63, 61, 63, 61,
+ 3, 60, 60, 60, 3, 60, 0
};
static const char _use_syllable_machine_trans_targs[] = {
- 1, 26, 2, 3, 1, 23, 1, 43,
- 44, 46, 28, 29, 30, 31, 32, 39,
- 40, 41, 45, 42, 36, 37, 38, 33,
- 34, 35, 1, 1, 1, 1, 4, 5,
- 22, 7, 8, 9, 10, 11, 18, 19,
- 20, 21, 15, 16, 17, 12, 13, 14,
- 6, 1, 1, 24, 25, 1, 1, 0,
- 27, 1, 1, 47, 48
+ 1, 27, 2, 3, 1, 24, 1, 45,
+ 46, 48, 29, 30, 31, 32, 33, 40,
+ 41, 43, 47, 44, 37, 38, 39, 34,
+ 35, 36, 51, 1, 1, 1, 1, 4,
+ 5, 23, 7, 8, 9, 10, 11, 18,
+ 19, 21, 22, 15, 16, 17, 12, 13,
+ 14, 6, 1, 20, 1, 25, 26, 1,
+ 1, 0, 28, 42, 1, 1, 49, 50
};
static const char _use_syllable_machine_trans_actions[] = {
1, 2, 0, 0, 5, 0, 6, 0,
2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 2, 2, 0, 0, 0, 0,
- 0, 0, 7, 8, 9, 10, 0, 0,
+ 0, 0, 0, 7, 8, 9, 10, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 11, 12, 0, 0, 13, 14, 0,
- 2, 15, 16, 0, 0
+ 0, 0, 11, 0, 12, 0, 0, 13,
+ 14, 0, 2, 0, 15, 16, 0, 0
};
static const char _use_syllable_machine_to_state_actions[] = {
@@ -257,7 +266,7 @@ static const char _use_syllable_machine_to_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0
+ 0, 0, 0, 0
};
static const char _use_syllable_machine_from_state_actions[] = {
@@ -267,17 +276,17 @@ static const char _use_syllable_machine_from_state_actions[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0
+ 0, 0, 0, 0
};
static const short _use_syllable_machine_eof_trans[] = {
- 1, 0, 27, 29, 29, 50, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 51,
- 54, 51, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 58, 55, 55, 59, 59,
- 59
+ 1, 0, 28, 30, 30, 51, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 30, 30, 30, 30, 30, 30, 30, 30,
+ 53, 56, 53, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 57, 57, 57,
+ 57, 57, 57, 57, 57, 61, 57, 57,
+ 62, 62, 62, 61
};
static const int use_syllable_machine_start = 1;
@@ -291,7 +300,7 @@ static const int use_syllable_machine_en_main = 1;
-#line 138 "hb-ot-shape-complex-use-machine.rl"
+#line 140 "hb-ot-shape-complex-use-machine.rl"
#define found_syllable(syllable_type) \
@@ -311,7 +320,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 315 "hb-ot-shape-complex-use-machine.hh"
+#line 324 "hb-ot-shape-complex-use-machine.hh"
{
cs = use_syllable_machine_start;
ts = 0;
@@ -319,7 +328,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 159 "hb-ot-shape-complex-use-machine.rl"
+#line 161 "hb-ot-shape-complex-use-machine.rl"
p = 0;
@@ -328,7 +337,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 332 "hb-ot-shape-complex-use-machine.hh"
+#line 341 "hb-ot-shape-complex-use-machine.hh"
{
int _slen;
int _trans;
@@ -342,7 +351,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 346 "hb-ot-shape-complex-use-machine.hh"
+#line 355 "hb-ot-shape-complex-use-machine.hh"
}
_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -365,58 +374,58 @@ _eof_trans:
{te = p+1;}
break;
case 8:
-#line 127 "hb-ot-shape-complex-use-machine.rl"
+#line 129 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (independent_cluster); }}
break;
case 10:
-#line 129 "hb-ot-shape-complex-use-machine.rl"
+#line 131 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (standard_cluster); }}
break;
case 6:
-#line 133 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 5:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 136 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (non_cluster); }}
break;
case 7:
-#line 127 "hb-ot-shape-complex-use-machine.rl"
+#line 129 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (independent_cluster); }}
break;
case 11:
-#line 128 "hb-ot-shape-complex-use-machine.rl"
+#line 130 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
break;
case 9:
-#line 129 "hb-ot-shape-complex-use-machine.rl"
+#line 131 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (standard_cluster); }}
break;
case 13:
-#line 130 "hb-ot-shape-complex-use-machine.rl"
+#line 132 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
break;
case 12:
-#line 131 "hb-ot-shape-complex-use-machine.rl"
+#line 133 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (numeral_cluster); }}
break;
case 16:
-#line 132 "hb-ot-shape-complex-use-machine.rl"
+#line 134 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }}
break;
case 14:
-#line 133 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 15:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 136 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (non_cluster); }}
break;
case 1:
-#line 133 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
-#line 420 "hb-ot-shape-complex-use-machine.hh"
+#line 429 "hb-ot-shape-complex-use-machine.hh"
}
_again:
@@ -425,7 +434,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 429 "hb-ot-shape-complex-use-machine.hh"
+#line 438 "hb-ot-shape-complex-use-machine.hh"
}
if ( ++p != pe )
@@ -441,7 +450,7 @@ _again:
}
-#line 168 "hb-ot-shape-complex-use-machine.rl"
+#line 170 "hb-ot-shape-complex-use-machine.rl"
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-private.hh
index ae428cb5eb..3e763ae393 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-private.hh
@@ -87,7 +87,8 @@ enum use_category_t {
USE_VMPst = 39, /* VOWEL_MOD_POST */
USE_VMPre = 23, /* VOWEL_MOD_PRE */
USE_SMAbv = 41, /* SYM_MOD_ABOVE */
- USE_SMBlw = 42 /* SYM_MOD_BELOW */
+ USE_SMBlw = 42, /* SYM_MOD_BELOW */
+ USE_CS = 43 /* CONS_WITH_STACKER */
};
HB_INTERNAL USE_TABLE_ELEMENT_TYPE
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-table.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-table.cc
index 38c46d002d..fd6978f281 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-table.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use-table.cc
@@ -6,12 +6,12 @@
*
* on files with these headers:
*
- * # IndicSyllabicCategory-9.0.0.txt
- * # Date: 2016-05-21, 02:46:00 GMT [RP]
- * # IndicPositionalCategory-9.0.0.txt
- * # Date: 2016-02-25, 00:48:00 GMT [RP]
- * # Blocks-9.0.0.txt
- * # Date: 2016-02-05, 23:48:00 GMT [KW]
+ * # IndicSyllabicCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [KW, RP]
+ * # IndicPositionalCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [RP]
+ * # Blocks-10.0.0.txt
+ * # Date: 2017-04-12, 17:30:00 GMT [KW]
* UnicodeData.txt does not have a header.
*/
@@ -19,6 +19,7 @@
#define B USE_B /* BASE */
#define CGJ USE_CGJ /* CGJ */
+#define CS USE_CS /* CONS_WITH_STACKER */
#define FM USE_FM /* CONS_FINAL_MOD */
#define GB USE_GB /* BASE_OTHER */
#define H USE_H /* HALANT */
@@ -97,7 +98,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 09C0 */ VPst, VBlw, VBlw, VBlw, VBlw, O, O, VPre, VPre, O, O, VPre, VPre, H, IND, O,
/* 09D0 */ O, O, O, O, O, O, O, VPst, O, O, O, O, B, B, O, B,
/* 09E0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
- /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
+ /* 09F0 */ B, B, O, O, O, O, O, O, O, O, O, O, B, O, O, O,
/* Gurmukhi */
@@ -119,7 +120,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 0AC0 */ VPst, VBlw, VBlw, VBlw, VBlw, VAbv, O, VAbv, VAbv, VAbv, O, VPst, VPst, H, O, O,
/* 0AD0 */ O, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* 0AE0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
- /* 0AF0 */ O, O, O, O, O, O, O, O, O, B, O, O, O, O, O, O,
+ /* 0AF0 */ O, O, O, O, O, O, O, O, O, B, VMAbv, VMAbv, VMAbv, CMAbv, CMAbv, CMAbv,
/* Oriya */
@@ -163,14 +164,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 0CC0 */ VAbv, VPst, VPst, VPst, VPst, O, VAbv, VAbv, VAbv, O, VAbv, VAbv, VAbv, H, O, O,
/* 0CD0 */ O, O, O, O, O, VPst, VPst, O, O, O, O, O, O, O, B, O,
/* 0CE0 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
- /* 0CF0 */ O, R, R, O, O, O, O, O, O, O, O, O, O, O, O, O,
+ /* 0CF0 */ O, CS, CS, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* Malayalam */
- /* 0D00 */ O, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, B, B,
+ /* 0D00 */ VMAbv, VMAbv, VMPst, VMPst, O, B, B, B, B, B, B, B, B, O, B, B,
/* 0D10 */ B, O, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 0D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* 0D30 */ B, B, B, B, B, B, B, B, B, B, B, O, O, B, VPst, VPst,
+ /* 0D30 */ B, B, B, B, B, B, B, B, B, B, B, VAbv, VAbv, B, VPst, VPst,
/* 0D40 */ VPst, VPst, VPst, VBlw, VBlw, O, VPre, VPre, VPre, O, VPre, VPre, VPre, H, R, O,
/* 0D50 */ O, O, O, O, IND, IND, IND, VPst, O, O, O, O, O, O, O, B,
/* 0D60 */ B, B, VBlw, VBlw, O, O, B, B, B, B, B, B, B, B, B, B,
@@ -274,9 +275,9 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1A30 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 1A40 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* 1A50 */ B, B, B, B, B, MPre, MBlw, FPst, FAbv, FAbv, FAbv, FBlw, FBlw, FBlw, FBlw, O,
+ /* 1A50 */ B, B, B, B, B, MPre, MBlw, SUB, FAbv, FAbv, FAbv, SUB, SUB, SUB, SUB, O,
/* 1A60 */ H, VPst, VAbv, VPst, VPst, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VAbv, VBlw, VPst, VPre, VPre,
- /* 1A70 */ VPre, VPre, VPre, VAbv, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, FM, FM, FM, O, O, FM,
+ /* 1A70 */ VPre, VPre, VPre, VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VAbv, FM, FM, O, O, FBlw,
/* 1A80 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
/* 1A90 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
@@ -323,7 +324,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 1CD0 */ VMAbv, VMAbv, VMAbv, O, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMAbv, VMAbv, VMBlw, VMBlw, VMBlw, VMBlw,
/* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, O, O, O, O, VMBlw, O, O,
- /* 1CF0 */ O, O, VMPst, VMPst, VMAbv, O, O, O, VMAbv, VMAbv, O, O, O, O, O, O,
+ /* 1CF0 */ O, O, VMPst, VMPst, VMAbv, O, O, VMPst, VMAbv, VMAbv, O, O, O, O, O, O,
#define use_offset_0x1df8u 2552
@@ -347,7 +348,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 2070 */ O, O, O, O, FM, O, O, O, O, O, O, O, O, O, O, O,
/* 2080 */ O, O, FM, FM, FM, O, O, O,
-#define use_offset_0xa800u 2616
+#define use_offset_0x20f0u 2616
+
+
+ /* Combining Diacritical Marks for Symbols */
+
+ /* 20F0 */ VMAbv, O, O, O, O, O, O, O,
+
+#define use_offset_0xa800u 2624
/* Syloti Nagri */
@@ -369,14 +377,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* A880 */ VMPst, VMPst, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* A890 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* A8A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* A8B0 */ B, B, B, B, FPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst,
+ /* A8B0 */ B, B, B, B, MPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst, VPst,
/* A8C0 */ VPst, VPst, VPst, VPst, H, VMAbv, O, O, O, O, O, O, O, O, O, O,
/* A8D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
/* Devanagari Extended */
/* A8E0 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,
- /* A8F0 */ VMAbv, VMAbv, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
+ /* A8F0 */ VMAbv, VMAbv, B, B, O, O, O, O, O, O, O, O, O, O, O, O,
/* Kayah Li */
@@ -397,7 +405,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* A980 */ VMAbv, VMAbv, FAbv, VMPst, B, B, B, B, B, B, B, B, B, B, B, B,
/* A990 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* A9A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* A9B0 */ B, B, B, CMAbv, VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VPre, VAbv, SUB, MPst, MPst,
+ /* A9B0 */ B, B, B, CMAbv, VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VPre, VAbv, SUB, MPst, MBlw,
/* A9C0 */ H, O, O, O, O, O, O, O, O, O, O, O, O, O, O, O,
/* A9D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
@@ -410,7 +418,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* AA00 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* AA10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
- /* AA20 */ B, B, B, B, B, B, B, B, B, VAbv, VAbv, VAbv, VAbv, VBlw, VAbv, VPre,
+ /* AA20 */ B, B, B, B, B, B, B, B, B, VMAbv, VAbv, VAbv, VAbv, VBlw, VAbv, VPre,
/* AA30 */ VPre, VAbv, VBlw, MPst, MPre, MBlw, MBlw, O, O, O, O, O, O, O, O, O,
/* AA40 */ B, B, B, FAbv, B, B, B, B, B, B, B, B, FAbv, FPst, O, O,
/* AA50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
@@ -434,7 +442,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* AAE0 */ B, B, B, B, B, B, B, B, B, B, B, VPre, VBlw, VAbv, VPre, VPst,
/* AAF0 */ O, O, O, O, O, VMPst, H, O,
-#define use_offset_0xabc0u 3376
+#define use_offset_0xabc0u 3384
/* Meetei Mayek */
@@ -444,14 +452,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* ABE0 */ B, B, B, VPst, VPst, VAbv, VPst, VPst, VBlw, VPst, VPst, O, VMPst, VBlw, O, O,
/* ABF0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0xfe00u 3440
+#define use_offset_0xfe00u 3448
/* Variation Selectors */
/* FE00 */ VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS, VS,
-#define use_offset_0x10a00u 3456
+#define use_offset_0x10a00u 3464
/* Kharoshthi */
@@ -462,12 +470,12 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 10A30 */ B, B, B, B, O, O, O, O, CMAbv, CMBlw, CMBlw, O, O, O, O, H,
/* 10A40 */ B, B, B, B, B, B, B, B,
-#define use_offset_0x11000u 3528
+#define use_offset_0x11000u 3536
/* Brahmi */
- /* 11000 */ VMPst, VMAbv, VMPst, R, R, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11000 */ VMPst, VMAbv, VMPst, CS, CS, B, B, B, B, B, B, B, B, B, B, B,
/* 11010 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11020 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 11030 */ B, B, B, B, B, B, B, B, VAbv, VAbv, VAbv, VAbv, VBlw, VBlw, VBlw, VBlw,
@@ -483,7 +491,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 110A0 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
/* 110B0 */ VPst, VPre, VPst, VBlw, VBlw, VAbv, VAbv, VPst, VPst, H, CMBlw, O, O, O, O, O,
-#define use_offset_0x11100u 3720
+#define use_offset_0x11100u 3728
/* Chakma */
@@ -521,7 +529,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11220 */ B, B, B, B, B, B, B, B, B, B, B, B, VPst, VPst, VPst, VBlw,
/* 11230 */ VAbv, VAbv, VAbv, VAbv, VMAbv, H, CMAbv, CMAbv, O, O, O, O, O, O, VMAbv, O,
-#define use_offset_0x11280u 4040
+#define use_offset_0x11280u 4048
/* Multani */
@@ -545,11 +553,11 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11320 */ B, B, B, B, B, B, B, B, B, O, B, B, B, B, B, B,
/* 11330 */ B, O, B, B, O, B, B, B, B, B, O, O, CMBlw, B, VPst, VPst,
/* 11340 */ VAbv, VPst, VPst, VPst, VPst, O, O, VPre, VPre, O, O, VPre, VPre, H, O, O,
- /* 11350 */ O, O, O, O, O, O, O, VPst, O, O, O, O, O, O, O, O,
+ /* 11350 */ O, O, O, O, O, O, O, VPst, O, O, O, O, O, O, B, B,
/* 11360 */ B, B, VPst, VPst, O, O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
/* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, O, O, O,
-#define use_offset_0x11400u 4288
+#define use_offset_0x11400u 4296
/* Newa */
@@ -572,7 +580,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 114C0 */ VMAbv, VMPst, H, CMBlw, B, O, O, O, O, O, O, O, O, O, O, O,
/* 114D0 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
-#define use_offset_0x11580u 4512
+#define use_offset_0x11580u 4520
/* Siddham */
@@ -615,7 +623,26 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11720 */ VPst, VPst, VAbv, VAbv, VBlw, VBlw, VPre, VAbv, VBlw, VAbv, VAbv, VAbv, O, O, O, O,
/* 11730 */ B, B, B, B, B, B, B, B, B, B, B, B, O, O, O, O,
-#define use_offset_0x11c00u 4960
+#define use_offset_0x11a00u 4968
+
+
+ /* Zanabazar Square */
+
+ /* 11A00 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, B, B, B, B, B,
+ /* 11A10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11A20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11A30 */ B, B, B, FM, VBlw, VMAbv, VMAbv, VMAbv, VMAbv, VMPst, R, MBlw, MBlw, MBlw, MBlw, GB,
+ /* 11A40 */ O, O, O, O, O, GB, O, H, O, O, O, O, O, O, O, O,
+
+ /* Soyombo */
+
+ /* 11A50 */ B, VAbv, VBlw, VBlw, VAbv, VAbv, VAbv, VPst, VPst, VBlw, VBlw, VBlw, B, B, B, B,
+ /* 11A60 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11A70 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11A80 */ B, B, B, B, O, O, R, R, R, R, FBlw, FBlw, FBlw, FBlw, FBlw, FBlw,
+ /* 11A90 */ FBlw, FBlw, FBlw, FBlw, FBlw, FBlw, VMAbv, VMPst, CMAbv, H, O, O, O, O, O, O,
+
+#define use_offset_0x11c00u 5128
/* Bhaiksuki */
@@ -636,7 +663,19 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
/* 11CA0 */ SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, O, SUB, SUB, SUB, SUB, SUB, SUB, SUB,
/* 11CB0 */ VBlw, VPre, VBlw, VAbv, VPst, VMAbv, VMAbv, O,
-}; /* Table items: 5144; occupancy: 72% */
+#define use_offset_0x11d00u 5312
+
+
+ /* Masaram Gondi */
+
+ /* 11D00 */ B, B, B, B, B, B, B, O, B, B, O, B, B, B, B, B,
+ /* 11D10 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11D20 */ B, B, B, B, B, B, B, B, B, B, B, B, B, B, B, B,
+ /* 11D30 */ B, VAbv, VAbv, VAbv, VAbv, VAbv, VBlw, O, O, O, VAbv, O, VAbv, VAbv, O, VAbv,
+ /* 11D40 */ VMAbv, VMAbv, CMBlw, VAbv, VBlw, H, R, MBlw, O, O, O, O, O, O, O, O,
+ /* 11D50 */ B, B, B, B, B, B, B, B, B, B, O, O, O, O, O, O,
+
+}; /* Table items: 5408; occupancy: 73% */
USE_TABLE_ELEMENT_TYPE
hb_use_get_categories (hb_codepoint_t u)
@@ -644,47 +683,50 @@ hb_use_get_categories (hb_codepoint_t u)
switch (u >> 12)
{
case 0x0u:
- if (hb_in_range (u, 0x0028u, 0x003Fu)) return use_table[u - 0x0028u + use_offset_0x0028u];
- if (hb_in_range (u, 0x00A0u, 0x00D7u)) return use_table[u - 0x00A0u + use_offset_0x00a0u];
- if (hb_in_range (u, 0x0900u, 0x0DF7u)) return use_table[u - 0x0900u + use_offset_0x0900u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x0028u, 0x003Fu)) return use_table[u - 0x0028u + use_offset_0x0028u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x00A0u, 0x00D7u)) return use_table[u - 0x00A0u + use_offset_0x00a0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x0900u, 0x0DF7u)) return use_table[u - 0x0900u + use_offset_0x0900u];
if (unlikely (u == 0x034Fu)) return CGJ;
break;
case 0x1u:
- if (hb_in_range (u, 0x1000u, 0x109Fu)) return use_table[u - 0x1000u + use_offset_0x1000u];
- if (hb_in_range (u, 0x1700u, 0x17EFu)) return use_table[u - 0x1700u + use_offset_0x1700u];
- if (hb_in_range (u, 0x1900u, 0x1A9Fu)) return use_table[u - 0x1900u + use_offset_0x1900u];
- if (hb_in_range (u, 0x1B00u, 0x1C4Fu)) return use_table[u - 0x1B00u + use_offset_0x1b00u];
- if (hb_in_range (u, 0x1CD0u, 0x1CFFu)) return use_table[u - 0x1CD0u + use_offset_0x1cd0u];
- if (hb_in_range (u, 0x1DF8u, 0x1DFFu)) return use_table[u - 0x1DF8u + use_offset_0x1df8u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1000u, 0x109Fu)) return use_table[u - 0x1000u + use_offset_0x1000u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1700u, 0x17EFu)) return use_table[u - 0x1700u + use_offset_0x1700u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1900u, 0x1A9Fu)) return use_table[u - 0x1900u + use_offset_0x1900u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1B00u, 0x1C4Fu)) return use_table[u - 0x1B00u + use_offset_0x1b00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1CD0u, 0x1CFFu)) return use_table[u - 0x1CD0u + use_offset_0x1cd0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x1DF8u, 0x1DFFu)) return use_table[u - 0x1DF8u + use_offset_0x1df8u];
break;
case 0x2u:
- if (hb_in_range (u, 0x2008u, 0x2017u)) return use_table[u - 0x2008u + use_offset_0x2008u];
- if (hb_in_range (u, 0x2060u, 0x2087u)) return use_table[u - 0x2060u + use_offset_0x2060u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x2008u, 0x2017u)) return use_table[u - 0x2008u + use_offset_0x2008u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x2060u, 0x2087u)) return use_table[u - 0x2060u + use_offset_0x2060u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x20F0u, 0x20F7u)) return use_table[u - 0x20F0u + use_offset_0x20f0u];
if (unlikely (u == 0x25CCu)) return GB;
break;
case 0xAu:
- if (hb_in_range (u, 0xA800u, 0xAAF7u)) return use_table[u - 0xA800u + use_offset_0xa800u];
- if (hb_in_range (u, 0xABC0u, 0xABFFu)) return use_table[u - 0xABC0u + use_offset_0xabc0u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xA800u, 0xAAF7u)) return use_table[u - 0xA800u + use_offset_0xa800u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xABC0u, 0xABFFu)) return use_table[u - 0xABC0u + use_offset_0xabc0u];
break;
case 0xFu:
- if (hb_in_range (u, 0xFE00u, 0xFE0Fu)) return use_table[u - 0xFE00u + use_offset_0xfe00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0xFE00u, 0xFE0Fu)) return use_table[u - 0xFE00u + use_offset_0xfe00u];
break;
case 0x10u:
- if (hb_in_range (u, 0x10A00u, 0x10A47u)) return use_table[u - 0x10A00u + use_offset_0x10a00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x10A00u, 0x10A47u)) return use_table[u - 0x10A00u + use_offset_0x10a00u];
break;
case 0x11u:
- if (hb_in_range (u, 0x11000u, 0x110BFu)) return use_table[u - 0x11000u + use_offset_0x11000u];
- if (hb_in_range (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u];
- if (hb_in_range (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
- if (hb_in_range (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
- if (hb_in_range (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
- if (hb_in_range (u, 0x11C00u, 0x11CB7u)) return use_table[u - 0x11C00u + use_offset_0x11c00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11000u, 0x110BFu)) return use_table[u - 0x11000u + use_offset_0x11000u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11100u, 0x1123Fu)) return use_table[u - 0x11100u + use_offset_0x11100u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11A00u, 0x11A9Fu)) return use_table[u - 0x11A00u + use_offset_0x11a00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11C00u, 0x11CB7u)) return use_table[u - 0x11C00u + use_offset_0x11c00u];
+ if (hb_in_range<hb_codepoint_t> (u, 0x11D00u, 0x11D5Fu)) return use_table[u - 0x11D00u + use_offset_0x11d00u];
if (unlikely (u == 0x1107Fu)) return HN;
break;
@@ -696,6 +738,7 @@ hb_use_get_categories (hb_codepoint_t u)
#undef B
#undef CGJ
+#undef CS
#undef FM
#undef GB
#undef H
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use.cc
index 5b19d5d74a..62acd697bd 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-use.cc
@@ -144,7 +144,7 @@ collect_features_use (hb_ot_shape_planner_t *plan)
/* "Topographical features" */
for (unsigned int i = 0; i < ARRAY_LENGTH (arabic_features); i++)
map->add_feature (arabic_features[i], 1, F_NONE);
- map->add_gsub_pause (NULL);
+ map->add_gsub_pause (nullptr);
/* "Standard typographic presentation" and "Positional feature application" */
for (unsigned int i = 0; i < ARRAY_LENGTH (other_features); i++)
@@ -199,7 +199,7 @@ data_create_use (const hb_ot_shape_plan_t *plan)
{
use_shape_plan_t *use_plan = (use_shape_plan_t *) calloc (1, sizeof (use_shape_plan_t));
if (unlikely (!use_plan))
- return NULL;
+ return nullptr;
use_plan->rphf_mask = plan->map.get_1_mask (HB_TAG('r','p','h','f'));
@@ -209,7 +209,7 @@ data_create_use (const hb_ot_shape_plan_t *plan)
if (unlikely (!use_plan->arabic_plan))
{
free (use_plan);
- return NULL;
+ return nullptr;
}
}
@@ -292,7 +292,7 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan,
if (use_plan->arabic_plan)
return;
- ASSERT_STATIC (INIT < 4 && ISOL < 4 && MEDI < 4 && FINA < 4);
+ static_assert ((INIT < 4 && ISOL < 4 && MEDI < 4 && FINA < 4), "");
hb_mask_t masks[4], all_masks = 0;
for (unsigned int i = 0; i < 4; i++)
{
@@ -354,6 +354,8 @@ setup_syllables (const hb_ot_shape_plan_t *plan,
hb_buffer_t *buffer)
{
find_syllables (buffer);
+ foreach_syllable (buffer, start, end)
+ buffer->unsafe_to_break (start, end);
setup_rphf_mask (plan, buffer);
setup_topographical_masks (plan, buffer);
}
@@ -422,7 +424,7 @@ reorder_syllable (hb_buffer_t *buffer, unsigned int start, unsigned int end)
{
syllable_type_t syllable_type = (syllable_type_t) (buffer->info[start].syllable() & 0x0F);
/* Only a few syllable types need reordering. */
- if (unlikely (!(FLAG_SAFE (syllable_type) &
+ if (unlikely (!(FLAG_UNSAFE (syllable_type) &
(FLAG (virama_terminated_cluster) |
FLAG (standard_cluster) |
FLAG (broken_cluster) |
@@ -572,28 +574,6 @@ decompose_use (const hb_ot_shape_normalize_context_t *c,
*/
case 0x1112Eu : *a = 0x11127u; *b= 0x11131u; return true;
case 0x1112Fu : *a = 0x11127u; *b= 0x11132u; return true;
-
- /*
- * Decompose split matras that don't have Unicode decompositions.
- */
-
- /* Limbu */
- case 0x1925u : *a = 0x1920u; *b= 0x1923u; return true;
- case 0x1926u : *a = 0x1920u; *b= 0x1924u; return true;
-
- /* Balinese */
- case 0x1B3Cu : *a = 0x1B42u; *b= 0x1B3Cu; return true;
-
-#if 0
- /* Lepcha */
- case 0x1C29u : *a = no decomp, -> LEFT; return true;
-
- /* Javanese */
- case 0xA9C0u : *a = no decomp, -> RIGHT; return true;
-
- /* Sharada */
- case 0x111BFu : *a = no decomp, -> ABOVE; return true;
-#endif
}
return (bool) c->unicode->decompose (ab, a, b);
@@ -615,18 +595,18 @@ compose_use (const hb_ot_shape_normalize_context_t *c,
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_use =
{
- "use",
collect_features_use,
- NULL, /* override_features */
+ nullptr, /* override_features */
data_create_use,
data_destroy_use,
- NULL, /* preprocess_text */
- NULL, /* postprocess_glyphs */
+ nullptr, /* preprocess_text */
+ nullptr, /* postprocess_glyphs */
HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
decompose_use,
compose_use,
setup_masks_use,
- NULL, /* disable_otl */
+ nullptr, /* disable_otl */
+ nullptr, /* reorder_marks */
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
false, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc
index ea8312b223..458c8eaa04 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc
@@ -210,7 +210,7 @@ position_mark (const hb_ot_shape_plan_t *plan,
pos.x_offset = pos.y_offset = 0;
- /* We dont position LEFT and RIGHT marks. */
+ /* We don't position LEFT and RIGHT marks. */
/* X positioning */
switch (combining_class)
@@ -218,10 +218,10 @@ position_mark (const hb_ot_shape_plan_t *plan,
case HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW:
case HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE:
if (buffer->props.direction == HB_DIRECTION_LTR) {
- pos.x_offset += base_extents.x_bearing - mark_extents.width / 2 - mark_extents.x_bearing;
+ pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width / 2 - mark_extents.x_bearing;
break;
} else if (buffer->props.direction == HB_DIRECTION_RTL) {
- pos.x_offset += base_extents.x_bearing + base_extents.width - mark_extents.width / 2 - mark_extents.x_bearing;
+ pos.x_offset += base_extents.x_bearing - mark_extents.width / 2 - mark_extents.x_bearing;
break;
}
HB_FALLTHROUGH;
@@ -307,6 +307,9 @@ position_around_base (const hb_ot_shape_plan_t *plan,
unsigned int end)
{
hb_direction_t horiz_dir = HB_DIRECTION_INVALID;
+
+ buffer->unsafe_to_break (base, end);
+
hb_glyph_extents_t base_extents;
if (!font->get_glyph_extents (buffer->info[base].codepoint,
&base_extents))
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc
index 107617e81c..fd9e7c2a8d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc
@@ -91,7 +91,7 @@ compose_unicode (const hb_ot_shape_normalize_context_t *c,
static inline void
set_glyph (hb_glyph_info_t &info, hb_font_t *font)
{
- font->get_nominal_glyph (info.codepoint, &info.glyph_index());
+ (void) font->get_nominal_glyph (info.codepoint, &info.glyph_index());
}
static inline void
@@ -345,14 +345,18 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
if (_hb_glyph_info_get_modified_combining_class (&buffer->info[end]) == 0)
break;
- /* We are going to do a O(n^2). Only do this if the sequence is short. */
- if (end - i > 10) {
+ /* We are going to do a O(n^2). Only do this if the sequence is short,
+ * but not too short ;). */
+ if (end - i < 2 || end - i > HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS) {
i = end;
continue;
}
buffer->sort (i, end, compare_combining_class);
+ if (plan->shaper->reorder_marks)
+ plan->shaper->reorder_marks (plan, buffer, i, end);
+
i = end;
}
@@ -369,46 +373,58 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
buffer->clear_output ();
count = buffer->len;
unsigned int starter = 0;
+ bool combine = true;
buffer->next_glyph ();
while (buffer->idx < count && !buffer->in_error)
{
hb_codepoint_t composed, glyph;
- if (/* We don't try to compose a non-mark character with it's preceding starter.
+ if (combine &&
+ /* We don't try to compose a non-mark character with it's preceding starter.
* This is both an optimization to avoid trying to compose every two neighboring
* glyphs in most scripts AND a desired feature for Hangul. Apparently Hangul
* fonts are not designed to mix-and-match pre-composed syllables and Jamo. */
- HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())) &&
- /* If there's anything between the starter and this char, they should have CCC
- * smaller than this character's. */
- (starter == buffer->out_len - 1 ||
- _hb_glyph_info_get_modified_combining_class (&buffer->prev()) < _hb_glyph_info_get_modified_combining_class (&buffer->cur())) &&
- /* And compose. */
- c.compose (&c,
- buffer->out_info[starter].codepoint,
- buffer->cur().codepoint,
- &composed) &&
- /* And the font has glyph for the composite. */
- font->get_nominal_glyph (composed, &glyph))
+ HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())))
{
- /* Composes. */
- buffer->next_glyph (); /* Copy to out-buffer. */
- if (unlikely (buffer->in_error))
- return;
- buffer->merge_out_clusters (starter, buffer->out_len);
- buffer->out_len--; /* Remove the second composable. */
- /* Modify starter and carry on. */
- buffer->out_info[starter].codepoint = composed;
- buffer->out_info[starter].glyph_index() = glyph;
- _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer);
-
- continue;
+ if (/* If there's anything between the starter and this char, they should have CCC
+ * smaller than this character's. */
+ (starter == buffer->out_len - 1 ||
+ info_cc (buffer->prev()) < info_cc (buffer->cur())) &&
+ /* And compose. */
+ c.compose (&c,
+ buffer->out_info[starter].codepoint,
+ buffer->cur().codepoint,
+ &composed) &&
+ /* And the font has glyph for the composite. */
+ font->get_nominal_glyph (composed, &glyph))
+ {
+ /* Composes. */
+ buffer->next_glyph (); /* Copy to out-buffer. */
+ if (unlikely (buffer->in_error))
+ return;
+ buffer->merge_out_clusters (starter, buffer->out_len);
+ buffer->out_len--; /* Remove the second composable. */
+ /* Modify starter and carry on. */
+ buffer->out_info[starter].codepoint = composed;
+ buffer->out_info[starter].glyph_index() = glyph;
+ _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer);
+
+ continue;
+ }
+ else if (/* We sometimes custom-tailor the sorted order of marks. In that case, stop
+ * trying to combine as soon as combining-class drops. */
+ starter < buffer->out_len - 1 &&
+ info_cc (buffer->prev()) > info_cc (buffer->cur()))
+ combine = false;
}
/* Blocked, or doesn't compose. */
buffer->next_glyph ();
- if (_hb_glyph_info_get_modified_combining_class (&buffer->prev()) == 0)
+ if (info_cc (buffer->prev()) == 0)
+ {
starter = buffer->out_len - 1;
+ combine = true;
+ }
}
buffer->swap_buffers ();
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh
index 594e54c026..fe5d2b7f33 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh
@@ -73,7 +73,7 @@ struct hb_ot_shape_planner_t
hb_ot_shape_planner_t (const hb_shape_plan_t *master_plan) :
face (master_plan->face_unsafe),
props (master_plan->props),
- shaper (NULL),
+ shaper (nullptr),
map (face, &props) {}
~hb_ot_shape_planner_t (void) { map.finish (); }
@@ -99,7 +99,9 @@ struct hb_ot_shape_planner_t
}
private:
- NO_COPY (hb_ot_shape_planner_t);
+ /* No copy. */
+ hb_ot_shape_planner_t (const hb_ot_shape_planner_t &);
+ hb_ot_shape_planner_t &operator = (const hb_ot_shape_planner_t &);
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc
index ddd6662e84..2f28b5620d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc
@@ -70,7 +70,7 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
hb_ot_map_builder_t *map = &planner->map;
map->add_global_bool_feature (HB_TAG('r','v','r','n'));
- map->add_gsub_pause (NULL);
+ map->add_gsub_pause (nullptr);
switch (props->direction) {
case HB_DIRECTION_LTR:
@@ -108,7 +108,7 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
/* We really want to find a 'vert' feature if there's any in the font, no
* matter which script/langsys it is listed (or not) under.
* See various bugs referenced from:
- * https://github.com/behdad/harfbuzz/issues/63 */
+ * https://github.com/harfbuzz/harfbuzz/issues/63 */
map->add_feature (HB_TAG ('v','e','r','t'), 1, F_GLOBAL | F_GLOBAL_SEARCH);
}
@@ -128,6 +128,8 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
* shaper face data
*/
+HB_SHAPER_DATA_ENSURE_DEFINE(ot, face)
+
hb_ot_shaper_face_data_t *
_hb_ot_shaper_face_data_create (hb_face_t *face)
{
@@ -145,6 +147,8 @@ _hb_ot_shaper_face_data_destroy (hb_ot_shaper_face_data_t *data)
* shaper font data
*/
+HB_SHAPER_DATA_ENSURE_DEFINE(ot, font)
+
struct hb_ot_shaper_font_data_t {};
hb_ot_shaper_font_data_t *
@@ -172,7 +176,7 @@ _hb_ot_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan,
{
hb_ot_shape_plan_t *plan = (hb_ot_shape_plan_t *) calloc (1, sizeof (hb_ot_shape_plan_t));
if (unlikely (!plan))
- return NULL;
+ return nullptr;
hb_ot_shape_planner_t planner (shape_plan);
@@ -186,7 +190,7 @@ _hb_ot_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan,
if (plan->shaper->data_create) {
plan->data = plan->shaper->data_create (plan);
if (unlikely (!plan->data))
- return NULL;
+ return nullptr;
}
return plan;
@@ -271,8 +275,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
static void
hb_form_clusters (hb_buffer_t *buffer)
{
- if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII) ||
- buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
+ if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_NON_ASCII))
return;
/* Loop duplicated in hb_ensure_native_direction(), and in _hb-coretext.cc */
@@ -284,11 +287,17 @@ hb_form_clusters (hb_buffer_t *buffer)
if (likely (!HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&info[i])) &&
!_hb_glyph_info_is_joiner (&info[i])))
{
- buffer->merge_clusters (base, i);
+ if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
+ buffer->merge_clusters (base, i);
+ else
+ buffer->unsafe_to_break (base, i);
base = i;
}
}
- buffer->merge_clusters (base, count);
+ if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES)
+ buffer->merge_clusters (base, count);
+ else
+ buffer->unsafe_to_break (base, count);
}
static void
@@ -362,7 +371,18 @@ hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c)
hb_buffer_t *buffer = c->buffer;
- /* TODO look in pre/post context text also. */
+ hb_mask_t pre_mask, post_mask;
+ if (HB_DIRECTION_IS_FORWARD (buffer->props.direction))
+ {
+ pre_mask = c->plan->numr_mask | c->plan->frac_mask;
+ post_mask = c->plan->frac_mask | c->plan->dnom_mask;
+ }
+ else
+ {
+ pre_mask = c->plan->frac_mask | c->plan->dnom_mask;
+ post_mask = c->plan->numr_mask | c->plan->frac_mask;
+ }
+
unsigned int count = buffer->len;
hb_glyph_info_t *info = buffer->info;
for (unsigned int i = 0; i < count; i++)
@@ -379,11 +399,13 @@ hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c)
HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
end++;
+ buffer->unsafe_to_break (start, end);
+
for (unsigned int j = start; j < i; j++)
- info[j].mask |= c->plan->numr_mask | c->plan->frac_mask;
+ info[j].mask |= pre_mask;
info[i].mask |= c->plan->frac_mask;
for (unsigned int j = i + 1; j < end; j++)
- info[j].mask |= c->plan->frac_mask | c->plan->dnom_mask;
+ info[j].mask |= post_mask;
i = end - 1;
}
@@ -494,9 +516,10 @@ hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
/* Merge cluster backward. */
if (cluster < info[j - 1].cluster)
{
+ unsigned int mask = info[i].mask;
unsigned int old_cluster = info[j - 1].cluster;
for (unsigned k = j; k && info[k - 1].cluster == old_cluster; k--)
- info[k - 1].cluster = cluster;
+ buffer->set_cluster (info[k - 1], cluster, mask);
}
continue;
}
@@ -562,8 +585,6 @@ hb_ot_substitute_default (hb_ot_shape_context_t *c)
{
hb_buffer_t *buffer = c->buffer;
- hb_ot_shape_initialize_masks (c);
-
hb_ot_mirror_chars (c);
HB_BUFFER_ALLOCATE_VAR (buffer, glyph_index);
@@ -672,9 +693,9 @@ hb_ot_position_default (hb_ot_shape_context_t *c)
static inline void
hb_ot_position_complex (hb_ot_shape_context_t *c)
{
- hb_ot_layout_position_start (c->font, c->buffer);
-
unsigned int count = c->buffer->len;
+ hb_glyph_info_t *info = c->buffer->info;
+ hb_glyph_position_t *pos = c->buffer->pos;
/* If the font has no GPOS, AND, no fallback positioning will
* happen, AND, direction is forward, then when zeroing mark
@@ -689,6 +710,17 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
!c->plan->shaper->fallback_position &&
HB_DIRECTION_IS_FORWARD (c->buffer->props.direction);
+ /* We change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */
+
+ /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
+ if (c->font->has_glyph_h_origin_func ())
+ for (unsigned int i = 0; i < count; i++)
+ c->font->add_glyph_h_origin (info[i].codepoint,
+ &pos[i].x_offset,
+ &pos[i].y_offset);
+
+ hb_ot_layout_position_start (c->font, c->buffer);
+
switch (c->plan->shaper->zero_width_marks)
{
case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
@@ -702,30 +734,8 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
}
if (likely (!c->fallback_positioning))
- {
- hb_glyph_info_t *info = c->buffer->info;
- hb_glyph_position_t *pos = c->buffer->pos;
-
- /* Change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */
-
- /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
- if (c->font->has_glyph_h_origin_func ())
- for (unsigned int i = 0; i < count; i++)
- c->font->add_glyph_h_origin (info[i].codepoint,
- &pos[i].x_offset,
- &pos[i].y_offset);
-
c->plan->position (c->font, c->buffer);
- /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
- if (c->font->has_glyph_h_origin_func ())
- for (unsigned int i = 0; i < count; i++)
- c->font->subtract_glyph_h_origin (info[i].codepoint,
- &pos[i].x_offset,
- &pos[i].y_offset);
-
- }
-
switch (c->plan->shaper->zero_width_marks)
{
case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
@@ -742,6 +752,13 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
hb_ot_layout_position_finish_advances (c->font, c->buffer);
hb_ot_zero_width_default_ignorables (c);
hb_ot_layout_position_finish_offsets (c->font, c->buffer);
+
+ /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
+ if (c->font->has_glyph_h_origin_func ())
+ for (unsigned int i = 0; i < count; i++)
+ c->font->subtract_glyph_h_origin (info[i].codepoint,
+ &pos[i].x_offset,
+ &pos[i].y_offset);
}
static inline void
@@ -767,6 +784,31 @@ hb_ot_position (hb_ot_shape_context_t *c)
_hb_buffer_deallocate_gsubgpos_vars (c->buffer);
}
+static inline void
+hb_propagate_flags (hb_buffer_t *buffer)
+{
+ /* Propagate cluster-level glyph flags to be the same on all cluster glyphs.
+ * Simplifies using them. */
+
+ if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_UNSAFE_TO_BREAK))
+ return;
+
+ hb_glyph_info_t *info = buffer->info;
+
+ foreach_cluster (buffer, start, end)
+ {
+ unsigned int mask = 0;
+ for (unsigned int i = start; i < end; i++)
+ if (info[i].mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK)
+ {
+ mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ break;
+ }
+ if (mask)
+ for (unsigned int i = start; i < end; i++)
+ info[i].mask |= mask;
+ }
+}
/* Pull it all together! */
@@ -775,11 +817,16 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
{
c->buffer->deallocate_var_all ();
c->buffer->scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
- if (likely (!_hb_unsigned_int_mul_overflows (c->buffer->len, HB_BUFFER_MAX_EXPANSION_FACTOR)))
+ if (likely (!_hb_unsigned_int_mul_overflows (c->buffer->len, HB_BUFFER_MAX_LEN_FACTOR)))
{
- c->buffer->max_len = MAX (c->buffer->len * HB_BUFFER_MAX_EXPANSION_FACTOR,
+ c->buffer->max_len = MAX (c->buffer->len * HB_BUFFER_MAX_LEN_FACTOR,
(unsigned) HB_BUFFER_MAX_LEN_MIN);
}
+ if (likely (!_hb_unsigned_int_mul_overflows (c->buffer->len, HB_BUFFER_MAX_OPS_FACTOR)))
+ {
+ c->buffer->max_ops = MAX (c->buffer->len * HB_BUFFER_MAX_OPS_FACTOR,
+ (unsigned) HB_BUFFER_MAX_OPS_MIN);
+ }
bool disable_otl = c->plan->shaper->disable_otl && c->plan->shaper->disable_otl (c->plan);
//c->fallback_substitute = disable_otl || !hb_ot_layout_has_substitution (c->face);
@@ -793,8 +840,10 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
c->buffer->clear_output ();
+ hb_ot_shape_initialize_masks (c);
hb_set_unicode_props (c->buffer);
hb_insert_dotted_circle (c->buffer, c->font);
+
hb_form_clusters (c->buffer);
hb_ensure_native_direction (c->buffer);
@@ -810,11 +859,14 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
if (c->plan->shaper->postprocess_glyphs)
c->plan->shaper->postprocess_glyphs (c->plan, c->buffer, c->font);
+ hb_propagate_flags (c->buffer);
+
_hb_buffer_deallocate_unicode_vars (c->buffer);
c->buffer->props.direction = c->target_direction;
c->buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
+ c->buffer->max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
c->buffer->deallocate_var_all ();
}
@@ -882,7 +934,7 @@ hb_ot_shape_glyphs_closure (hb_font_t *font,
{
hb_ot_shape_plan_t plan;
- const char *shapers[] = {"ot", NULL};
+ const char *shapers[] = {"ot", nullptr};
hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached (font->face, &buffer->props,
features, num_features, shapers);
@@ -893,18 +945,19 @@ hb_ot_shape_glyphs_closure (hb_font_t *font,
for (unsigned int i = 0; i < count; i++)
add_char (font, buffer->unicode, mirror, info[i].codepoint, glyphs);
- hb_set_t lookups;
- lookups.init ();
- hb_ot_shape_plan_collect_lookups (shape_plan, HB_OT_TAG_GSUB, &lookups);
+ hb_set_t *lookups = hb_set_create ();
+ hb_ot_shape_plan_collect_lookups (shape_plan, HB_OT_TAG_GSUB, lookups);
/* And find transitive closure. */
- hb_set_t copy;
- copy.init ();
+ hb_set_t *copy = hb_set_create ();
do {
- copy.set (glyphs);
- for (hb_codepoint_t lookup_index = -1; hb_set_next (&lookups, &lookup_index);)
+ copy->set (glyphs);
+ for (hb_codepoint_t lookup_index = -1; hb_set_next (lookups, &lookup_index);)
hb_ot_layout_lookup_substitute_closure (font->face, lookup_index, glyphs);
- } while (!copy.is_equal (glyphs));
+ } while (!copy->is_equal (glyphs));
+ hb_set_destroy (copy);
+
+ hb_set_destroy (lookups);
hb_shape_plan_destroy (shape_plan);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-tag.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-tag.cc
index 5f21ac0967..1338c31732 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-tag.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-tag.cc
@@ -28,9 +28,6 @@
#include "hb-private.hh"
-#include <string.h>
-
-
/* hb_script_t */
@@ -201,6 +198,7 @@ static const LangTag ot_languages[] = {
{"alt", HB_TAG('A','L','T',' ')}, /* [Southern] Altai */
{"am", HB_TAG('A','M','H',' ')}, /* Amharic */
{"amf", HB_TAG('H','B','N',' ')}, /* Hammer-Banna */
+ {"amw", HB_TAG('S','Y','R',' ')}, /* Western Neo-Aramaic */
{"an", HB_TAG('A','R','G',' ')}, /* Aragonese */
{"ang", HB_TAG('A','N','G',' ')}, /* Old English (ca. 450-1100) */
{"ar", HB_TAG('A','R','A',' ')}, /* Arabic [macrolanguage] */
@@ -239,6 +237,7 @@ static const LangTag ot_languages[] = {
{"bg", HB_TAG('B','G','R',' ')}, /* Bulgarian */
{"bgc", HB_TAG('B','G','C',' ')}, /* Haryanvi */
{"bgq", HB_TAG('B','G','Q',' ')}, /* Bagri */
+ {"bgr", HB_TAG('Q','I','N',' ')}, /* Bawm Chin */
{"bhb", HB_TAG('B','H','I',' ')}, /* Bhili */
{"bhk", HB_TAG('B','I','K',' ')}, /* Albay Bicolano (retired code) */
{"bho", HB_TAG('B','H','O',' ')}, /* Bhojpuri */
@@ -270,18 +269,37 @@ static const LangTag ot_languages[] = {
{"ca", HB_TAG('C','A','T',' ')}, /* Catalan */
{"cak", HB_TAG('C','A','K',' ')}, /* Kaqchikel */
{"cbk", HB_TAG('C','B','K',' ')}, /* Chavacano */
+ {"cbl", HB_TAG('Q','I','N',' ')}, /* Bualkhaw Chin */
+ {"cco", HB_TAG('C','C','H','N')}, /* Chinantec */
{"ce", HB_TAG('C','H','E',' ')}, /* Chechen */
{"ceb", HB_TAG('C','E','B',' ')}, /* Cebuano */
+ {"cfm", HB_TAG('H','A','L',' ')}, /* Halam/Falam Chin */
{"cgg", HB_TAG('C','G','G',' ')}, /* Chiga */
{"ch", HB_TAG('C','H','A',' ')}, /* Chamorro */
+ {"chj", HB_TAG('C','C','H','N')}, /* Chinantec */
{"chk", HB_TAG('C','H','K','0')}, /* Chuukese */
{"cho", HB_TAG('C','H','O',' ')}, /* Choctaw */
{"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */
+ {"chq", HB_TAG('C','C','H','N')}, /* Chinantec */
{"chr", HB_TAG('C','H','R',' ')}, /* Cherokee */
{"chy", HB_TAG('C','H','Y',' ')}, /* Cheyenne */
+ {"chz", HB_TAG('C','C','H','N')}, /* Chinantec */
+ {"cja", HB_TAG('C','J','A',' ')}, /* Western Cham */
+ {"cjm", HB_TAG('C','J','M',' ')}, /* Eastern Cham */
+ {"cka", HB_TAG('Q','I','N',' ')}, /* Khumi Awa Chin */
{"ckb", HB_TAG('K','U','R',' ')}, /* Central Kurdish (Sorani) */
{"ckt", HB_TAG('C','H','K',' ')}, /* Chukchi */
+ {"cld", HB_TAG('S','Y','R',' ')}, /* Chaldean Neo-Aramaic */
+ {"cle", HB_TAG('C','C','H','N')}, /* Chinantec */
+ {"cmr", HB_TAG('Q','I','N',' ')}, /* Mro-Khimi Chin */
+ {"cnb", HB_TAG('Q','I','N',' ')}, /* Chinbon Chin */
+ {"cnh", HB_TAG('Q','I','N',' ')}, /* Hakha Chin */
+ {"cnk", HB_TAG('Q','I','N',' ')}, /* Khumi Chin */
+ {"cnl", HB_TAG('C','C','H','N')}, /* Chinantec */
+ {"cnt", HB_TAG('C','C','H','N')}, /* Chinantec */
+ {"cnw", HB_TAG('Q','I','N',' ')}, /* Ngawn Chin */
{"cop", HB_TAG('C','O','P',' ')}, /* Coptic */
+ {"cpa", HB_TAG('C','C','H','N')}, /* Chinantec */
{"cpp", HB_TAG('C','P','P',' ')}, /* Creoles */
{"cr", HB_TAG('C','R','E',' ')}, /* Cree */
{"cre", HB_TAG('Y','C','R',' ')}, /* Y-Cree */
@@ -292,15 +310,26 @@ static const LangTag ot_languages[] = {
{"crm", HB_TAG('M','C','R',' ')}, /* Moose Cree */
{"crx", HB_TAG('C','R','R',' ')}, /* Carrier */
{"cs", HB_TAG('C','S','Y',' ')}, /* Czech */
+ {"csa", HB_TAG('C','C','H','N')}, /* Chinantec */
{"csb", HB_TAG('C','S','B',' ')}, /* Kashubian */
+ {"csh", HB_TAG('Q','I','N',' ')}, /* Asho Chin */
+ {"cso", HB_TAG('C','C','H','N')}, /* Chinantec */
+ {"csy", HB_TAG('Q','I','N',' ')}, /* Siyin Chin */
+ {"ctd", HB_TAG('Q','I','N',' ')}, /* Tedim Chin */
+ {"cte", HB_TAG('C','C','H','N')}, /* Chinantec */
{"ctg", HB_TAG('C','T','G',' ')}, /* Chittagonian */
+ {"ctl", HB_TAG('C','C','H','N')}, /* Chinantec */
{"cts", HB_TAG('B','I','K',' ')}, /* Northern Catanduanes Bikol */
{"cu", HB_TAG('C','S','L',' ')}, /* Church Slavic */
+ {"cuc", HB_TAG('C','C','H','N')}, /* Chinantec */
{"cuk", HB_TAG('C','U','K',' ')}, /* San Blas Kuna */
{"cv", HB_TAG('C','H','U',' ')}, /* Chuvash */
+ {"cvn", HB_TAG('C','C','H','N')}, /* Chinantec */
{"cwd", HB_TAG('D','C','R',' ')}, /* Woods Cree */
{"cy", HB_TAG('W','E','L',' ')}, /* Welsh */
+ {"czt", HB_TAG('Q','I','N',' ')}, /* Zotung Chin */
{"da", HB_TAG('D','A','N',' ')}, /* Danish */
+ {"dao", HB_TAG('Q','I','N',' ')}, /* Daai Chin */
{"dap", HB_TAG('N','I','S',' ')}, /* Nisi (India) */
{"dar", HB_TAG('D','A','R',' ')}, /* Dargwa */
{"dax", HB_TAG('D','A','X',' ')}, /* Dayi */
@@ -343,7 +372,7 @@ static const LangTag ot_languages[] = {
{"fi", HB_TAG('F','I','N',' ')}, /* Finnish */
{"fil", HB_TAG('P','I','L',' ')}, /* Filipino */
{"fj", HB_TAG('F','J','I',' ')}, /* Fijian */
- {"flm", HB_TAG('H','A','L',' ')}, /* Halam */
+ {"flm", HB_TAG('H','A','L',' ')}, /* Halam/Falam Chin [retired ISO639 code] */
{"fo", HB_TAG('F','O','S',' ')}, /* Faroese */
{"fon", HB_TAG('F','O','N',' ')}, /* Fon */
{"fr", HB_TAG('F','R','A',' ')}, /* French */
@@ -365,7 +394,6 @@ static const LangTag ot_languages[] = {
{"gkp", HB_TAG('G','K','P',' ')}, /* Kpelle (Guinea) */
{"gl", HB_TAG('G','A','L',' ')}, /* Galician */
{"gld", HB_TAG('N','A','N',' ')}, /* Nanai */
- {"gle", HB_TAG('I','R','T',' ')}, /* Irish Traditional */
{"glk", HB_TAG('G','L','K',' ')}, /* Gilaki */
{"gn", HB_TAG('G','U','A',' ')}, /* Guarani [macrolanguage] */
{"gnn", HB_TAG('G','N','N',' ')}, /* Gumatj */
@@ -390,6 +418,7 @@ static const LangTag ot_languages[] = {
{"he", HB_TAG('I','W','R',' ')}, /* Hebrew */
{"hi", HB_TAG('H','I','N',' ')}, /* Hindi */
{"hil", HB_TAG('H','I','L',' ')}, /* Hiligaynon */
+ {"hlt", HB_TAG('Q','I','N',' ')}, /* Matu Chin */
{"hmn", HB_TAG('H','M','N',' ')}, /* Hmong */
{"hnd", HB_TAG('H','N','D',' ')}, /* [Southern] Hindko */
{"hne", HB_TAG('C','H','H',' ')}, /* Chattisgarhi */
@@ -522,7 +551,6 @@ static const LangTag ot_languages[] = {
{"mag", HB_TAG('M','A','G',' ')}, /* Magahi */
{"mai", HB_TAG('M','T','H',' ')}, /* Maithili */
{"mak", HB_TAG('M','K','R',' ')}, /* Makasar */
- {"mal", HB_TAG('M','A','L',' ')}, /* Malayalam */
{"mam", HB_TAG('M','A','M',' ')}, /* Mam */
{"man", HB_TAG('M','N','K',' ')}, /* Manding/Mandingo [macrolanguage] */
{"mdc", HB_TAG('M','L','E',' ')}, /* Male (Papua New Guinea) */
@@ -553,6 +581,7 @@ static const LangTag ot_languages[] = {
{"mos", HB_TAG('M','O','S',' ')}, /* Mossi */
{"mpe", HB_TAG('M','A','J',' ')}, /* Majang */
{"mr", HB_TAG('M','A','R',' ')}, /* Marathi */
+ {"mrh", HB_TAG('Q','I','N',' ')}, /* Mara Chin */
{"mrj", HB_TAG('H','M','A',' ')}, /* High Mari */
{"ms", HB_TAG('M','L','Y',' ')}, /* Malay [macrolanguage] */
{"msc", HB_TAG('M','N','K',' ')}, /* Sankaran Maninka */
@@ -617,6 +646,7 @@ static const LangTag ot_languages[] = {
{"pcc", HB_TAG('P','C','C',' ')}, /* Bouyei */
{"pcd", HB_TAG('P','C','D',' ')}, /* Picard */
{"pce", HB_TAG('P','L','G',' ')}, /* [Ruching] Palaung */
+ {"pck", HB_TAG('Q','I','N',' ')}, /* Paite Chin */
{"pdc", HB_TAG('P','D','C',' ')}, /* Pennsylvania German */
{"pes", HB_TAG('F','A','R',' ')}, /* Iranian Persian */
{"phk", HB_TAG('P','H','K',' ')}, /* Phake */
@@ -674,6 +704,7 @@ static const LangTag ot_languages[] = {
{"se", HB_TAG('N','S','M',' ')}, /* Northern Sami */
{"seh", HB_TAG('S','N','A',' ')}, /* Sena */
{"sel", HB_TAG('S','E','L',' ')}, /* Selkup */
+ {"sez", HB_TAG('Q','I','N',' ')}, /* Senthang Chin */
{"sg", HB_TAG('S','G','O',' ')}, /* Sango */
{"sga", HB_TAG('S','G','A',' ')}, /* Old Irish (to 900) */
{"sgs", HB_TAG('S','G','S',' ')}, /* Samogitian */
@@ -713,12 +744,15 @@ static const LangTag ot_languages[] = {
{"swh", HB_TAG('S','W','K',' ')}, /* Kiswahili/Swahili */
{"swv", HB_TAG('M','A','W',' ')}, /* Shekhawati */
{"sxu", HB_TAG('S','X','U',' ')}, /* Upper Saxon */
+ {"syc", HB_TAG('S','Y','R',' ')}, /* Classical Syriac */
{"syl", HB_TAG('S','Y','L',' ')}, /* Sylheti */
{"syr", HB_TAG('S','Y','R',' ')}, /* Syriac [macrolanguage] */
{"szl", HB_TAG('S','Z','L',' ')}, /* Silesian */
{"ta", HB_TAG('T','A','M',' ')}, /* Tamil */
{"tab", HB_TAG('T','A','B',' ')}, /* Tabasaran */
+ {"tcp", HB_TAG('Q','I','N',' ')}, /* Tawr Chin */
{"tcy", HB_TAG('T','U','L',' ')}, /* Tulu */
+ {"tcz", HB_TAG('Q','I','N',' ')}, /* Thado Chin */
{"tdd", HB_TAG('T','D','D',' ')}, /* Tai Nüa */
{"te", HB_TAG('T','E','L',' ')}, /* Telugu */
{"tem", HB_TAG('T','M','N',' ')}, /* Temne */
@@ -786,11 +820,13 @@ static const LangTag ot_languages[] = {
{"yap", HB_TAG('Y','A','P',' ')}, /* Yapese */
{"yi", HB_TAG('J','I','I',' ')}, /* Yiddish [macrolanguage] */
{"yo", HB_TAG('Y','B','A',' ')}, /* Yoruba */
+ {"yos", HB_TAG('Q','I','N',' ')}, /* Yos, deprecated by IANA in favor of Zou [zom] */
{"yso", HB_TAG('N','I','S',' ')}, /* Nisi (China) */
{"za", HB_TAG('Z','H','A',' ')}, /* Chuang/Zhuang [macrolanguage] */
{"zea", HB_TAG('Z','E','A',' ')}, /* Zeeuws */
{"zgh", HB_TAG('Z','G','H',' ')}, /* Standard Morrocan Tamazigh */
{"zne", HB_TAG('Z','N','D',' ')}, /* Zande */
+ {"zom", HB_TAG('Q','I','N',' ')}, /* Zou */
{"zu", HB_TAG('Z','U','L',' ')}, /* Zulu */
{"zum", HB_TAG('L','R','C',' ')}, /* Kumzari */
{"zza", HB_TAG('Z','Z','A',' ')}, /* Zazaki */
@@ -843,9 +879,11 @@ static const LangTagLong ot_languages_zh[] = {
};
static int
-lang_compare_first_component (const char *a,
- const char *b)
+lang_compare_first_component (const void *pa,
+ const void *pb)
{
+ const char *a = (const char *) pa;
+ const char *b = (const char *) pb;
unsigned int da, db;
const char *p;
@@ -882,12 +920,12 @@ hb_ot_tag_from_language (hb_language_t language)
char tag[4];
int i;
s += 6;
- for (i = 0; i < 4 && ISALPHA (s[i]); i++)
+ for (i = 0; i < 4 && ISALNUM (s[i]); i++)
tag[i] = TOUPPER (s[i]);
if (i) {
for (; i < 4; i++)
tag[i] = ' ';
- return HB_TAG_CHAR4 (tag);
+ return HB_TAG (tag[0], tag[1], tag[2], tag[3]);
}
}
@@ -907,12 +945,36 @@ hb_ot_tag_from_language (hb_language_t language)
return HB_TAG('A','P','P','H'); /* Phonetic transcription—Americanist conventions */
}
+ /*
+ * "Syre" is a BCP-47 script tag, meaning the Estrangela variant of the Syriac script.
+ * It can be applied to any language.
+ */
+ if (strstr (lang_str, "-syre")) {
+ return HB_TAG('S','Y','R','E'); /* Estrangela Syriac */
+ }
+
+ /*
+ * "Syrj" is a BCP-47 script tag, meaning the Western variant of the Syriac script.
+ * It can be applied to any language.
+ */
+ if (strstr (lang_str, "-syrj")) {
+ return HB_TAG('S','Y','R','J'); /* Western Syriac */
+ }
+
+ /*
+ * "Syrn" is a BCP-47 script tag, meaning the Eastern variant of the Syriac script.
+ * It can be applied to any language.
+ */
+ if (strstr (lang_str, "-syrn")) {
+ return HB_TAG('S','Y','R','N'); /* Eastern Syriac */
+ }
+
/* Find a language matching in the first component */
{
const LangTag *lang_tag;
lang_tag = (LangTag *) bsearch (lang_str, ot_languages,
ARRAY_LENGTH (ot_languages), sizeof (LangTag),
- (hb_compare_func_t) lang_compare_first_component);
+ lang_compare_first_component);
if (lang_tag)
return lang_tag->tag;
}
@@ -960,7 +1022,23 @@ hb_ot_tag_to_language (hb_tag_t tag)
unsigned int i;
if (tag == HB_OT_TAG_DEFAULT_LANGUAGE)
- return NULL;
+ return nullptr;
+
+ /* struct LangTag has only room for 3-letter language tags. */
+ switch (tag) {
+ case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */
+ return hb_language_from_string ("und-fonnapa", -1);
+ case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */
+ return hb_language_from_string ("und-fonipa", -1);
+ case HB_TAG('S','Y','R',' '): /* Syriac [macrolanguage] */
+ return hb_language_from_string ("syr", -1);
+ case HB_TAG('S','Y','R','E'): /* Estrangela Syriac */
+ return hb_language_from_string ("und-Syre", -1);
+ case HB_TAG('S','Y','R','J'): /* Western Syriac */
+ return hb_language_from_string ("und-Syrj", -1);
+ case HB_TAG('S','Y','R','N'): /* Eastern Syriac */
+ return hb_language_from_string ("und-Syrn", -1);
+ }
for (i = 0; i < ARRAY_LENGTH (ot_languages); i++)
if (ot_languages[i].tag == tag)
@@ -976,14 +1054,6 @@ hb_ot_tag_to_language (hb_tag_t tag)
}
}
- /* struct LangTag has only room for 3-letter language tags. */
- switch (tag) {
- case HB_TAG('A','P','P','H'): /* Phonetic transcription—Americanist conventions */
- return hb_language_from_string ("und-fonnapa", -1);
- case HB_TAG('I','P','P','H'): /* Phonetic transcription—IPA conventions */
- return hb_language_from_string ("und-fonipa", -1);
- }
-
/* Else return a custom language in the form of "x-hbotABCD" */
{
unsigned char buf[11] = "x-hbot";
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh
new file mode 100644
index 0000000000..4b88a40304
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-avar-table.hh
@@ -0,0 +1,149 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_VAR_AVAR_TABLE_HH
+#define HB_OT_VAR_AVAR_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+namespace OT {
+
+
+struct AxisValueMap
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ F2DOT14 fromCoord; /* A normalized coordinate value obtained using
+ * default normalization. */
+ F2DOT14 toCoord; /* The modified, normalized coordinate value. */
+
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct SegmentMaps : ArrayOf<AxisValueMap>
+{
+ inline int map (int value) const
+ {
+ /* The following special-cases are not part of OpenType, which requires
+ * that at least -1, 0, and +1 must be mapped. But we include these as
+ * part of a better error recovery scheme. */
+
+ if (len < 2)
+ {
+ if (!len)
+ return value;
+ else /* len == 1*/
+ return value - array[0].fromCoord + array[0].toCoord;
+ }
+
+ if (value <= array[0].fromCoord)
+ return value - array[0].fromCoord + array[0].toCoord;
+
+ unsigned int i;
+ unsigned int count = len;
+ for (i = 1; i < count && value > array[i].fromCoord; i++)
+ ;
+
+ if (value >= array[i].fromCoord)
+ return value - array[i].fromCoord + array[i].toCoord;
+
+ if (unlikely (array[i-1].fromCoord == array[i].fromCoord))
+ return array[i-1].toCoord;
+
+ int denom = array[i].fromCoord - array[i-1].fromCoord;
+ return array[i-1].toCoord +
+ ((array[i].toCoord - array[i-1].toCoord) *
+ (value - array[i-1].fromCoord) + denom/2) / denom;
+ }
+
+ DEFINE_SIZE_ARRAY (2, array);
+};
+
+/*
+ * avar — Axis Variations Table
+ */
+
+#define HB_OT_TAG_avar HB_TAG('a','v','a','r')
+
+struct avar
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_avar;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (unlikely (!(version.sanitize (c) &&
+ version.major == 1 &&
+ c->check_struct (this))))
+ return_trace (false);
+
+ const SegmentMaps *map = &axisSegmentMapsZ;
+ unsigned int count = axisCount;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (unlikely (!map->sanitize (c)))
+ return_trace (false);
+ map = &StructAfter<SegmentMaps> (*map);
+ }
+
+ return_trace (true);
+ }
+
+ inline void map_coords (int *coords, unsigned int coords_length) const
+ {
+ unsigned int count = MIN<unsigned int> (coords_length, axisCount);
+
+ const SegmentMaps *map = &axisSegmentMapsZ;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ coords[i] = map->map (coords[i]);
+ map = &StructAfter<SegmentMaps> (*map);
+ }
+ }
+
+ protected:
+ FixedVersion<>version; /* Version of the avar table
+ * initially set to 0x00010000u */
+ UINT16 reserved; /* This field is permanently reserved. Set to 0. */
+ UINT16 axisCount; /* The number of variation axes in the font. This
+ * must be the same number as axisCount in the
+ * 'fvar' table. */
+ SegmentMaps axisSegmentMapsZ;
+
+ public:
+ DEFINE_SIZE_MIN (8);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_VAR_AVAR_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh
new file mode 100644
index 0000000000..2a9357a5e2
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-fvar-table.hh
@@ -0,0 +1,209 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_VAR_FVAR_TABLE_HH
+#define HB_OT_VAR_FVAR_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+namespace OT {
+
+
+struct InstanceRecord
+{
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int axis_count) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ c->check_array (coordinates, coordinates[0].static_size, axis_count));
+ }
+
+ protected:
+ UINT16 subfamilyNameID;/* The name ID for entries in the 'name' table
+ * that provide subfamily names for this instance. */
+ UINT16 reserved; /* Reserved for future use — set to 0. */
+ Fixed coordinates[VAR];/* The coordinates array for this instance. */
+ //UINT16 postScriptNameIDX;/*Optional. The name ID for entries in the 'name'
+ // * table that provide PostScript names for this
+ // * instance. */
+
+ public:
+ DEFINE_SIZE_ARRAY (4, coordinates);
+};
+
+struct AxisRecord
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ Tag axisTag; /* Tag identifying the design variation for the axis. */
+ Fixed minValue; /* The minimum coordinate value for the axis. */
+ Fixed defaultValue; /* The default coordinate value for the axis. */
+ Fixed maxValue; /* The maximum coordinate value for the axis. */
+ UINT16 reserved; /* Reserved for future use — set to 0. */
+ UINT16 axisNameID; /* The name ID for entries in the 'name' table that
+ * provide a display name for this axis. */
+
+ public:
+ DEFINE_SIZE_STATIC (20);
+};
+
+
+/*
+ * fvar — Font Variations Table
+ */
+
+#define HB_OT_TAG_fvar HB_TAG('f','v','a','r')
+
+struct fvar
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_fvar;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (version.sanitize (c) &&
+ likely (version.major == 1) &&
+ c->check_struct (this) &&
+ instanceSize >= axisCount * 4 + 4 &&
+ axisSize <= 1024 && /* Arbitrary, just to simplify overflow checks. */
+ instanceSize <= 1024 && /* Arbitrary, just to simplify overflow checks. */
+ c->check_range (this, things) &&
+ c->check_range (&StructAtOffset<char> (this, things),
+ axisCount * axisSize + instanceCount * instanceSize));
+ }
+
+ inline unsigned int get_axis_count (void) const
+ { return axisCount; }
+
+ inline bool get_axis (unsigned int index, hb_ot_var_axis_t *info) const
+ {
+ if (unlikely (index >= axisCount))
+ return false;
+
+ if (info)
+ {
+ const AxisRecord &axis = get_axes ()[index];
+ info->tag = axis.axisTag;
+ info->name_id = axis.axisNameID;
+ info->default_value = axis.defaultValue / 65536.;
+ /* Ensure order, to simplify client math. */
+ info->min_value = MIN<float> (info->default_value, axis.minValue / 65536.);
+ info->max_value = MAX<float> (info->default_value, axis.maxValue / 65536.);
+ }
+
+ return true;
+ }
+
+ inline unsigned int get_axis_infos (unsigned int start_offset,
+ unsigned int *axes_count /* IN/OUT */,
+ hb_ot_var_axis_t *axes_array /* OUT */) const
+ {
+ if (axes_count)
+ {
+ unsigned int count = axisCount;
+ start_offset = MIN (start_offset, count);
+
+ count -= start_offset;
+ axes_array += start_offset;
+
+ count = MIN (count, *axes_count);
+ *axes_count = count;
+
+ for (unsigned int i = 0; i < count; i++)
+ get_axis (start_offset + i, axes_array + i);
+ }
+ return axisCount;
+ }
+
+ inline bool find_axis (hb_tag_t tag, unsigned int *index, hb_ot_var_axis_t *info) const
+ {
+ const AxisRecord *axes = get_axes ();
+ unsigned int count = get_axis_count ();
+ for (unsigned int i = 0; i < count; i++)
+ if (axes[i].axisTag == tag)
+ {
+ if (index)
+ *index = i;
+ return get_axis (i, info);
+ }
+ if (index)
+ *index = HB_OT_VAR_NO_AXIS_INDEX;
+ return false;
+ }
+
+ inline int normalize_axis_value (unsigned int axis_index, float v) const
+ {
+ hb_ot_var_axis_t axis;
+ if (!get_axis (axis_index, &axis))
+ return 0;
+
+ v = MAX (MIN (v, axis.max_value), axis.min_value); /* Clamp. */
+
+ if (v == axis.default_value)
+ return 0;
+ else if (v < axis.default_value)
+ v = (v - axis.default_value) / (axis.default_value - axis.min_value);
+ else
+ v = (v - axis.default_value) / (axis.max_value - axis.default_value);
+ return (int) (v * 16384. + (v >= 0. ? .5 : -.5));
+ }
+
+ protected:
+ inline const AxisRecord * get_axes (void) const
+ { return &StructAtOffset<AxisRecord> (this, things); }
+
+ inline const InstanceRecord * get_instances (void) const
+ { return &StructAtOffset<InstanceRecord> (get_axes () + axisCount, 0); }
+
+ protected:
+ FixedVersion<>version; /* Version of the fvar table
+ * initially set to 0x00010000u */
+ Offset16 things; /* Offset in bytes from the beginning of the table
+ * to the start of the AxisRecord array. */
+ UINT16 reserved; /* This field is permanently reserved. Set to 2. */
+ UINT16 axisCount; /* The number of variation axes in the font (the
+ * number of records in the axes array). */
+ UINT16 axisSize; /* The size in bytes of each VariationAxisRecord —
+ * set to 20 (0x0014) for this version. */
+ UINT16 instanceCount; /* The number of named instances defined in the font
+ * (the number of records in the instances array). */
+ UINT16 instanceSize; /* The size in bytes of each InstanceRecord — set
+ * to either axisCount * sizeof(Fixed) + 4, or to
+ * axisCount * sizeof(Fixed) + 6. */
+
+ public:
+ DEFINE_SIZE_STATIC (16);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_VAR_FVAR_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-hvar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-hvar-table.hh
new file mode 100644
index 0000000000..fac843a719
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-hvar-table.hh
@@ -0,0 +1,165 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_VAR_HVAR_TABLE_HH
+#define HB_OT_VAR_HVAR_TABLE_HH
+
+#include "hb-ot-layout-common-private.hh"
+
+
+namespace OT {
+
+
+struct DeltaSetIndexMap
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ c->check_array (mapData, get_width (), mapCount));
+ }
+
+ unsigned int map (unsigned int v) const /* Returns 16.16 outer.inner. */
+ {
+ /* If count is zero, pass value unchanged. This takes
+ * care of direct mapping for advance map. */
+ if (!mapCount)
+ return v;
+
+ if (v >= mapCount)
+ v = mapCount - 1;
+
+ unsigned int u = 0;
+ { /* Fetch it. */
+ unsigned int w = get_width ();
+ const UINT8 *p = mapData + w * v;
+ for (; w; w--)
+ u = (u << 8) + *p++;
+ }
+
+ { /* Repack it. */
+ unsigned int n = get_inner_bitcount ();
+ unsigned int outer = u >> n;
+ unsigned int inner = u & ((1 << n) - 1);
+ u = (outer<<16) | inner;
+ }
+
+ return u;
+ }
+
+ protected:
+ inline unsigned int get_width (void) const
+ { return ((format >> 4) & 3) + 1; }
+
+ inline unsigned int get_inner_bitcount (void) const
+ { return (format & 0xF) + 1; }
+
+ protected:
+ UINT16 format; /* A packed field that describes the compressed
+ * representation of delta-set indices. */
+ UINT16 mapCount; /* The number of mapping entries. */
+ UINT8 mapData[VAR]; /* The delta-set index mapping data. */
+
+ public:
+ DEFINE_SIZE_ARRAY (4, mapData);
+};
+
+
+/*
+ * HVAR -- The Horizontal Metrics Variations Table
+ * VVAR -- The Vertical Metrics Variations Table
+ */
+
+#define HB_OT_TAG_HVAR HB_TAG('H','V','A','R')
+#define HB_OT_TAG_VVAR HB_TAG('V','V','A','R')
+
+struct HVARVVAR
+{
+ static const hb_tag_t HVARTag = HB_OT_TAG_HVAR;
+ static const hb_tag_t VVARTag = HB_OT_TAG_VVAR;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (version.sanitize (c) &&
+ likely (version.major == 1) &&
+ varStore.sanitize (c, this) &&
+ advMap.sanitize (c, this) &&
+ lsbMap.sanitize (c, this) &&
+ rsbMap.sanitize (c, this));
+ }
+
+ inline float get_advance_var (hb_codepoint_t glyph,
+ int *coords, unsigned int coord_count) const
+ {
+ unsigned int varidx = (this+advMap).map (glyph);
+ return (this+varStore).get_delta (varidx, coords, coord_count);
+ }
+
+ inline bool has_sidebearing_deltas (void) const
+ { return lsbMap && rsbMap; }
+
+ protected:
+ FixedVersion<>version; /* Version of the metrics variation table
+ * initially set to 0x00010000u */
+ LOffsetTo<VariationStore>
+ varStore; /* Offset to item variation store table. */
+ LOffsetTo<DeltaSetIndexMap>
+ advMap; /* Offset to advance var-idx mapping. */
+ LOffsetTo<DeltaSetIndexMap>
+ lsbMap; /* Offset to lsb/tsb var-idx mapping. */
+ LOffsetTo<DeltaSetIndexMap>
+ rsbMap; /* Offset to rsb/bsb var-idx mapping. */
+
+ public:
+ DEFINE_SIZE_STATIC (20);
+};
+
+struct HVAR : HVARVVAR {
+ static const hb_tag_t tableTag = HB_OT_TAG_HVAR;
+};
+struct VVAR : HVARVVAR {
+ static const hb_tag_t tableTag = HB_OT_TAG_VVAR;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (static_cast<const HVARVVAR *> (this)->sanitize (c) &&
+ vorgMap.sanitize (c, this));
+ }
+
+ protected:
+ LOffsetTo<DeltaSetIndexMap>
+ vorgMap; /* Offset to vertical-origin var-idx mapping. */
+
+ public:
+ DEFINE_SIZE_STATIC (24);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_VAR_HVAR_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var-mvar-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-mvar-table.hh
new file mode 100644
index 0000000000..e17ff5160a
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var-mvar-table.hh
@@ -0,0 +1,114 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_VAR_MVAR_TABLE_HH
+#define HB_OT_VAR_MVAR_TABLE_HH
+
+#include "hb-ot-layout-common-private.hh"
+
+
+namespace OT {
+
+
+struct VariationValueRecord
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ public:
+ Tag valueTag; /* Four-byte tag identifying a font-wide measure. */
+ UINT32 varIdx; /* Outer/inner index into VariationStore item. */
+
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+
+/*
+ * MVAR -- Metrics Variations Table
+ */
+
+#define HB_OT_TAG_MVAR HB_TAG('M','V','A','R')
+
+struct MVAR
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_MVAR;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (version.sanitize (c) &&
+ likely (version.major == 1) &&
+ c->check_struct (this) &&
+ valueRecordSize >= VariationValueRecord::static_size &&
+ varStore.sanitize (c, this) &&
+ c->check_array (values, valueRecordSize, valueRecordCount));
+ }
+
+ inline float get_var (hb_tag_t tag,
+ int *coords, unsigned int coord_count) const
+ {
+ const VariationValueRecord *record;
+ record = (VariationValueRecord *) bsearch (&tag, values,
+ valueRecordCount, valueRecordSize,
+ tag_compare);
+ if (!record)
+ return 0.;
+
+ return (this+varStore).get_delta (record->varIdx, coords, coord_count);
+ }
+
+protected:
+ static inline int tag_compare (const void *pa, const void *pb)
+ {
+ const hb_tag_t *a = (const hb_tag_t *) pa;
+ const Tag *b = (const Tag *) pb;
+ return b->cmp (*a);
+ }
+
+ protected:
+ FixedVersion<>version; /* Version of the metrics variation table
+ * initially set to 0x00010000u */
+ UINT16 reserved; /* Not used; set to 0. */
+ UINT16 valueRecordSize;/* The size in bytes of each value record —
+ * must be greater than zero. */
+ UINT16 valueRecordCount;/* The number of value records — may be zero. */
+ OffsetTo<VariationStore>
+ varStore; /* Offset to item variation store table. */
+ UINT8 values[VAR]; /* Array of value records. The records must be
+ * in binary order of their valueTag field. */
+
+ public:
+ DEFINE_SIZE_ARRAY (12, values);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_VAR_MVAR_TABLE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-var.cc
new file mode 100644
index 0000000000..90ba0bd02c
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var.cc
@@ -0,0 +1,159 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-open-type-private.hh"
+
+#include "hb-ot-layout-private.hh"
+#include "hb-ot-var-avar-table.hh"
+#include "hb-ot-var-fvar-table.hh"
+#include "hb-ot-var-mvar-table.hh"
+#include "hb-ot-var.h"
+
+/*
+ * fvar/avar
+ */
+
+static inline const OT::fvar&
+_get_fvar (hb_face_t *face)
+{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::fvar);
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ return *(layout->fvar.get ());
+}
+static inline const OT::avar&
+_get_avar (hb_face_t *face)
+{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::avar);
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ return *(layout->avar.get ());
+}
+
+/**
+ * hb_ot_var_has_data:
+ * @face: #hb_face_t to test
+ *
+ * This function allows to verify the presence of OpenType variation data on the face.
+ * Alternatively, use hb_ot_var_get_axis_count().
+ *
+ * Return value: true if face has a `fvar' table and false otherwise
+ *
+ * Since: 1.4.2
+ **/
+hb_bool_t
+hb_ot_var_has_data (hb_face_t *face)
+{
+ return &_get_fvar (face) != &OT::Null(OT::fvar);
+}
+
+/**
+ * hb_ot_var_get_axis_count:
+ *
+ * Since: 1.4.2
+ **/
+unsigned int
+hb_ot_var_get_axis_count (hb_face_t *face)
+{
+ const OT::fvar &fvar = _get_fvar (face);
+ return fvar.get_axis_count ();
+}
+
+/**
+ * hb_ot_var_get_axes:
+ *
+ * Since: 1.4.2
+ **/
+unsigned int
+hb_ot_var_get_axes (hb_face_t *face,
+ unsigned int start_offset,
+ unsigned int *axes_count /* IN/OUT */,
+ hb_ot_var_axis_t *axes_array /* OUT */)
+{
+ const OT::fvar &fvar = _get_fvar (face);
+ return fvar.get_axis_infos (start_offset, axes_count, axes_array);
+}
+
+/**
+ * hb_ot_var_find_axis:
+ *
+ * Since: 1.4.2
+ **/
+hb_bool_t
+hb_ot_var_find_axis (hb_face_t *face,
+ hb_tag_t axis_tag,
+ unsigned int *axis_index,
+ hb_ot_var_axis_t *axis_info)
+{
+ const OT::fvar &fvar = _get_fvar (face);
+ return fvar.find_axis (axis_tag, axis_index, axis_info);
+}
+
+
+/**
+ * hb_ot_var_normalize_variations:
+ *
+ * Since: 1.4.2
+ **/
+void
+hb_ot_var_normalize_variations (hb_face_t *face,
+ const hb_variation_t *variations, /* IN */
+ unsigned int variations_length,
+ int *coords, /* OUT */
+ unsigned int coords_length)
+{
+ for (unsigned int i = 0; i < coords_length; i++)
+ coords[i] = 0;
+
+ const OT::fvar &fvar = _get_fvar (face);
+ for (unsigned int i = 0; i < variations_length; i++)
+ {
+ unsigned int axis_index;
+ if (hb_ot_var_find_axis (face, variations[i].tag, &axis_index, nullptr) &&
+ axis_index < coords_length)
+ coords[axis_index] = fvar.normalize_axis_value (axis_index, variations[i].value);
+ }
+
+ const OT::avar &avar = _get_avar (face);
+ avar.map_coords (coords, coords_length);
+}
+
+/**
+ * hb_ot_var_normalize_coords:
+ *
+ * Since: 1.4.2
+ **/
+void
+hb_ot_var_normalize_coords (hb_face_t *face,
+ unsigned int coords_length,
+ const float *design_coords, /* IN */
+ int *normalized_coords /* OUT */)
+{
+ const OT::fvar &fvar = _get_fvar (face);
+ for (unsigned int i = 0; i < coords_length; i++)
+ normalized_coords[i] = fvar.normalize_axis_value (i, design_coords[i]);
+
+ const OT::avar &avar = _get_avar (face);
+ avar.map_coords (normalized_coords, coords_length);
+}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-var.h b/src/3rdparty/harfbuzz-ng/src/hb-ot-var.h
new file mode 100644
index 0000000000..a2c0c5f2b0
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-var.h
@@ -0,0 +1,105 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_H_IN
+#error "Include <hb-ot.h> instead."
+#endif
+
+#ifndef HB_OT_VAR_H
+#define HB_OT_VAR_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+
+#define HB_OT_TAG_VAR_AXIS_ITALIC HB_TAG('i','t','a','l')
+#define HB_OT_TAG_VAR_AXIS_OPTICAL_SIZE HB_TAG('o','p','s','z')
+#define HB_OT_TAG_VAR_AXIS_SLANT HB_TAG('s','l','n','t')
+#define HB_OT_TAG_VAR_AXIS_WIDTH HB_TAG('w','d','t','h')
+#define HB_OT_TAG_VAR_AXIS_WEIGHT HB_TAG('w','g','h','t')
+
+
+/*
+ * fvar / avar
+ */
+
+/**
+ * hb_ot_var_axis_t:
+ *
+ * Since: 1.4.2
+ */
+typedef struct hb_ot_var_axis_t {
+ hb_tag_t tag;
+ unsigned int name_id;
+ float min_value;
+ float default_value;
+ float max_value;
+} hb_ot_var_axis_t;
+
+HB_EXTERN hb_bool_t
+hb_ot_var_has_data (hb_face_t *face);
+
+/**
+ * HB_OT_VAR_NO_AXIS_INDEX:
+ *
+ * Since: 1.4.2
+ */
+#define HB_OT_VAR_NO_AXIS_INDEX 0xFFFFFFFFu
+
+HB_EXTERN unsigned int
+hb_ot_var_get_axis_count (hb_face_t *face);
+
+HB_EXTERN unsigned int
+hb_ot_var_get_axes (hb_face_t *face,
+ unsigned int start_offset,
+ unsigned int *axes_count /* IN/OUT */,
+ hb_ot_var_axis_t *axes_array /* OUT */);
+
+HB_EXTERN hb_bool_t
+hb_ot_var_find_axis (hb_face_t *face,
+ hb_tag_t axis_tag,
+ unsigned int *axis_index,
+ hb_ot_var_axis_t *axis_info);
+
+
+HB_EXTERN void
+hb_ot_var_normalize_variations (hb_face_t *face,
+ const hb_variation_t *variations, /* IN */
+ unsigned int variations_length,
+ int *coords, /* OUT */
+ unsigned int coords_length);
+
+HB_EXTERN void
+hb_ot_var_normalize_coords (hb_face_t *face,
+ unsigned int coords_length,
+ const float *design_coords, /* IN */
+ int *normalized_coords /* OUT */);
+
+
+HB_END_DECLS
+
+#endif /* HB_OT_VAR_H */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot.h b/src/3rdparty/harfbuzz-ng/src/hb-ot.h
index 113e37b08a..2120a3efa3 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot.h
@@ -35,6 +35,7 @@
#include "hb-ot-math.h"
#include "hb-ot-tag.h"
#include "hb-ot-shape.h"
+#include "hb-ot-var.h"
HB_BEGIN_DECLS
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-private.hh
index b20b2ca9c0..acddd89381 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-private.hh
@@ -44,16 +44,14 @@
#include <stddef.h>
#include <string.h>
#include <assert.h>
-
-/* We only use these two for debug output. However, the debug code is
- * always seen by the compiler (and optimized out in non-debug builds.
- * If including these becomes a problem, we can start thinking about
- * someway around that. */
-#include <stdio.h>
#include <errno.h>
+#include <stdio.h>
#include <stdarg.h>
+#define HB_PASTE1(a,b) a##b
+#define HB_PASTE(a,b) HB_PASTE1(a,b)
+
/* Compile-time custom allocator support. */
#if defined(hb_malloc_impl) \
@@ -74,10 +72,25 @@ extern "C" void hb_free_impl(void *ptr);
/* Compiler attributes */
-#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
-#define _HB_BOOLEAN_EXPR(expr) ((expr) ? 1 : 0)
-#define likely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 1))
-#define unlikely(expr) (__builtin_expect (_HB_BOOLEAN_EXPR(expr), 0))
+#if __cplusplus < 201103L
+
+#ifndef nullptr
+#define nullptr NULL
+#endif
+
+// Static assertions
+#ifndef static_assert
+#define static_assert(e, msg) \
+ HB_UNUSED typedef int HB_PASTE(static_assertion_failed_at_line_, __LINE__) [(e) ? 1 : -1]
+#endif // static_assert
+
+#endif // __cplusplus < 201103L
+
+#define _GNU_SOURCE 1
+
+#if (defined(__GNUC__) || defined(__clang__)) && defined(__OPTIMIZE__)
+#define likely(expr) (__builtin_expect (!!(expr), 1))
+#define unlikely(expr) (__builtin_expect (!!(expr), 0))
#else
#define likely(expr) (expr)
#define unlikely(expr) (expr)
@@ -99,6 +112,8 @@ extern "C" void hb_free_impl(void *ptr);
#endif
#if __GNUC__ >= 4
#define HB_UNUSED __attribute__((unused))
+#elif defined(_MSC_VER) /* https://github.com/harfbuzz/harfbuzz/issues/635 */
+#define HB_UNUSED __pragma(warning(suppress: 4100 4101))
#else
#define HB_UNUSED
#endif
@@ -168,21 +183,17 @@ extern "C" void hb_free_impl(void *ptr);
# if defined(_WIN32_WCE)
/* Some things not defined on Windows CE. */
-# define strdup _strdup
# define vsnprintf _vsnprintf
-# define getenv(Name) NULL
+# define getenv(Name) nullptr
# if _WIN32_WCE < 0x800
# define setlocale(Category, Locale) "C"
static int errno = 0; /* Use something better? */
# endif
# elif defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
-# define getenv(Name) NULL
+# define getenv(Name) nullptr
# endif
# if defined(_MSC_VER) && _MSC_VER < 1900
# define snprintf _snprintf
-# elif defined(_MSC_VER) && _MSC_VER >= 1900
-# /* Covers VC++ Error for strdup being a deprecated POSIX name and to instead use _strdup instead */
-# define strdup _strdup
# endif
#endif
@@ -214,11 +225,6 @@ static int errno = 0; /* Use something better? */
/* Basics */
-
-#ifndef NULL
-# define NULL ((void *) 0)
-#endif
-
#undef MIN
template <typename Type>
static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; }
@@ -240,32 +246,26 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
#define HB_STMT_START do
#define HB_STMT_END while (0)
-#define _ASSERT_STATIC1(_line, _cond) HB_UNUSED typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
-#define _ASSERT_STATIC0(_line, _cond) _ASSERT_STATIC1 (_line, (_cond))
-#define ASSERT_STATIC(_cond) _ASSERT_STATIC0 (__LINE__, (_cond))
-
-template <unsigned int cond> class hb_assert_constant_t {};
+template <unsigned int cond> class hb_assert_constant_t;
+template <> class hb_assert_constant_t<1> {};
#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * (unsigned int) sizeof (hb_assert_constant_t<_cond>))
-#define _PASTE1(a,b) a##b
-#define PASTE(a,b) _PASTE1(a,b)
-
/* Lets assert int types. Saves trouble down the road. */
-ASSERT_STATIC (sizeof (int8_t) == 1);
-ASSERT_STATIC (sizeof (uint8_t) == 1);
-ASSERT_STATIC (sizeof (int16_t) == 2);
-ASSERT_STATIC (sizeof (uint16_t) == 2);
-ASSERT_STATIC (sizeof (int32_t) == 4);
-ASSERT_STATIC (sizeof (uint32_t) == 4);
-ASSERT_STATIC (sizeof (int64_t) == 8);
-ASSERT_STATIC (sizeof (uint64_t) == 8);
+static_assert ((sizeof (int8_t) == 1), "");
+static_assert ((sizeof (uint8_t) == 1), "");
+static_assert ((sizeof (int16_t) == 2), "");
+static_assert ((sizeof (uint16_t) == 2), "");
+static_assert ((sizeof (int32_t) == 4), "");
+static_assert ((sizeof (uint32_t) == 4), "");
+static_assert ((sizeof (int64_t) == 8), "");
+static_assert ((sizeof (uint64_t) == 8), "");
-ASSERT_STATIC (sizeof (hb_codepoint_t) == 4);
-ASSERT_STATIC (sizeof (hb_position_t) == 4);
-ASSERT_STATIC (sizeof (hb_mask_t) == 4);
-ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
+static_assert ((sizeof (hb_codepoint_t) == 4), "");
+static_assert ((sizeof (hb_position_t) == 4), "");
+static_assert ((sizeof (hb_mask_t) == 4), "");
+static_assert ((sizeof (hb_var_int_t) == 4), "");
/* We like our types POD */
@@ -300,7 +300,7 @@ ASSERT_STATIC (sizeof (hb_var_int_t) == 4);
/* Void! */
struct _hb_void_t {};
typedef const _hb_void_t *hb_void_t;
-#define HB_VOID ((const _hb_void_t *) NULL)
+#define HB_VOID ((const _hb_void_t *) nullptr)
/* Return the number of 1 bits in mask. */
static inline HB_CONST_FUNC unsigned int
@@ -316,6 +316,18 @@ _hb_popcount32 (uint32_t mask)
return (((y + (y >> 3)) & 030707070707) % 077);
#endif
}
+static inline HB_CONST_FUNC unsigned int
+_hb_popcount64 (uint64_t mask)
+{
+#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+ if (sizeof (long) >= sizeof (mask))
+ return __builtin_popcountl (mask);
+#endif
+ return _hb_popcount32 (mask & 0xFFFFFFFF) + _hb_popcount32 (mask >> 32);
+}
+template <typename T> static inline unsigned int _hb_popcount (T mask);
+template <> inline unsigned int _hb_popcount<uint32_t> (uint32_t mask) { return _hb_popcount32 (mask); }
+template <> inline unsigned int _hb_popcount<uint64_t> (uint64_t mask) { return _hb_popcount64 (mask); }
/* Returns the number of bits needed to store number */
static inline HB_CONST_FUNC unsigned int
@@ -357,16 +369,11 @@ _hb_unsigned_int_mul_overflows (unsigned int count, unsigned int size)
}
-/* Type of bsearch() / qsort() compare function */
-typedef int (*hb_compare_func_t) (const void *, const void *);
-
-
-
/* arrays and maps */
-#define HB_PREALLOCED_ARRAY_INIT {0, 0, NULL}
+#define HB_PREALLOCED_ARRAY_INIT {0, 0, nullptr}
template <typename Type, unsigned int StaticSize=16>
struct hb_prealloced_array_t
{
@@ -375,41 +382,56 @@ struct hb_prealloced_array_t
Type *array;
Type static_array[StaticSize];
- void init (void) { memset (this, 0, sizeof (*this)); }
+ void init (void)
+ {
+ len = 0;
+ allocated = ARRAY_LENGTH (static_array);
+ array = static_array;
+ }
inline Type& operator [] (unsigned int i) { return array[i]; }
inline const Type& operator [] (unsigned int i) const { return array[i]; }
inline Type *push (void)
{
- if (!array) {
- array = static_array;
- allocated = ARRAY_LENGTH (static_array);
- }
- if (likely (len < allocated))
- return &array[len++];
+ if (unlikely (!resize (len + 1)))
+ return nullptr;
- /* Need to reallocate */
- unsigned int new_allocated = allocated + (allocated >> 1) + 8;
- Type *new_array = NULL;
+ return &array[len - 1];
+ }
- if (array == static_array) {
- new_array = (Type *) calloc (new_allocated, sizeof (Type));
- if (new_array)
- memcpy (new_array, array, len * sizeof (Type));
- } else {
- bool overflows = (new_allocated < allocated) || _hb_unsigned_int_mul_overflows (new_allocated, sizeof (Type));
- if (likely (!overflows)) {
- new_array = (Type *) realloc (array, new_allocated * sizeof (Type));
+ inline bool resize (unsigned int size)
+ {
+ if (unlikely (size > allocated))
+ {
+ /* Need to reallocate */
+
+ unsigned int new_allocated = allocated;
+ while (size >= new_allocated)
+ new_allocated += (new_allocated >> 1) + 8;
+
+ Type *new_array = nullptr;
+
+ if (array == static_array) {
+ new_array = (Type *) calloc (new_allocated, sizeof (Type));
+ if (new_array)
+ memcpy (new_array, array, len * sizeof (Type));
+ } else {
+ bool overflows = (new_allocated < allocated) || _hb_unsigned_int_mul_overflows (new_allocated, sizeof (Type));
+ if (likely (!overflows)) {
+ new_array = (Type *) realloc (array, new_allocated * sizeof (Type));
+ }
}
- }
- if (unlikely (!new_array))
- return NULL;
+ if (unlikely (!new_array))
+ return false;
+
+ array = new_array;
+ allocated = new_allocated;
+ }
- array = new_array;
- allocated = new_allocated;
- return &array[len++];
+ len = size;
+ return true;
}
inline void pop (void)
@@ -438,42 +460,67 @@ struct hb_prealloced_array_t
for (unsigned int i = 0; i < len; i++)
if (array[i] == v)
return &array[i];
- return NULL;
+ return nullptr;
}
template <typename T>
inline const Type *find (T v) const {
for (unsigned int i = 0; i < len; i++)
if (array[i] == v)
return &array[i];
- return NULL;
+ return nullptr;
}
inline void qsort (void)
{
- ::qsort (array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
+ ::qsort (array, len, sizeof (Type), Type::cmp);
}
inline void qsort (unsigned int start, unsigned int end)
{
- ::qsort (array + start, end - start, sizeof (Type), (hb_compare_func_t) Type::cmp);
+ ::qsort (array + start, end - start, sizeof (Type), Type::cmp);
}
template <typename T>
- inline Type *bsearch (T *key)
+ inline Type *bsearch (T *x)
{
- return (Type *) ::bsearch (key, array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
+ unsigned int i;
+ return bfind (x, &i) ? &array[i] : nullptr;
}
template <typename T>
- inline const Type *bsearch (T *key) const
+ inline const Type *bsearch (T *x) const
{
- return (const Type *) ::bsearch (key, array, len, sizeof (Type), (hb_compare_func_t) Type::cmp);
+ unsigned int i;
+ return bfind (x, &i) ? &array[i] : nullptr;
+ }
+ template <typename T>
+ inline bool bfind (T *x, unsigned int *i) const
+ {
+ int min = 0, max = (int) this->len - 1;
+ while (min <= max)
+ {
+ int mid = (min + max) / 2;
+ int c = this->array[mid].cmp (x);
+ if (c < 0)
+ max = mid - 1;
+ else if (c > 0)
+ min = mid + 1;
+ else
+ {
+ *i = mid;
+ return true;
+ }
+ }
+ if (max < 0 || (max < (int) this->len && this->array[max].cmp (x) > 0))
+ max++;
+ *i = max;
+ return false;
}
inline void finish (void)
{
if (array != static_array)
free (array);
- array = NULL;
+ array = nullptr;
allocated = len = 0;
}
};
@@ -490,7 +537,7 @@ struct hb_auto_array_t : hb_prealloced_array_t <Type>
template <typename item_t, typename lock_t>
struct hb_lockable_set_t
{
- hb_prealloced_array_t <item_t, 2> items;
+ hb_prealloced_array_t <item_t, 1> items;
inline void init (void) { items.init (); }
@@ -507,7 +554,7 @@ struct hb_lockable_set_t
old.finish ();
}
else {
- item = NULL;
+ item = nullptr;
l.unlock ();
}
} else {
@@ -595,22 +642,6 @@ static inline unsigned char TOUPPER (unsigned char c)
static inline unsigned char TOLOWER (unsigned char c)
{ return (c >= 'A' && c <= 'Z') ? c - 'A' + 'a' : c; }
-#define HB_TAG_CHAR4(s) (HB_TAG(((const char *) s)[0], \
- ((const char *) s)[1], \
- ((const char *) s)[2], \
- ((const char *) s)[3]))
-
-
-/* C++ helpers */
-
-/* Makes class uncopyable. Use in private: section. */
-#define NO_COPY(T) \
- T (const T &o); \
- T &operator = (const T &o)
-
-
-/* Debug */
-
/* HB_NDEBUG disables some sanity checks that are very safe to disable and
* should be disabled in production systems. If NDEBUG is defined, enable
@@ -621,255 +652,6 @@ static inline unsigned char TOLOWER (unsigned char c)
#define HB_NDEBUG
#endif
-#ifndef HB_DEBUG
-#define HB_DEBUG 0
-#endif
-
-static inline bool
-_hb_debug (unsigned int level,
- unsigned int max_level)
-{
- return level < max_level;
-}
-
-#define DEBUG_LEVEL_ENABLED(WHAT, LEVEL) (_hb_debug ((LEVEL), HB_DEBUG_##WHAT))
-#define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0))
-
-static inline void
-_hb_print_func (const char *func)
-{
- if (func)
- {
- unsigned int func_len = strlen (func);
- /* Skip "static" */
- if (0 == strncmp (func, "static ", 7))
- func += 7;
- /* Skip "typename" */
- if (0 == strncmp (func, "typename ", 9))
- func += 9;
- /* Skip return type */
- const char *space = strchr (func, ' ');
- if (space)
- func = space + 1;
- /* Skip parameter list */
- const char *paren = strchr (func, '(');
- if (paren)
- func_len = paren - func;
- fprintf (stderr, "%.*s", func_len, func);
- }
-}
-
-template <int max_level> static inline void
-_hb_debug_msg_va (const char *what,
- const void *obj,
- const char *func,
- bool indented,
- unsigned int level,
- int level_dir,
- const char *message,
- va_list ap) HB_PRINTF_FUNC(7, 0);
-template <int max_level> static inline void
-_hb_debug_msg_va (const char *what,
- const void *obj,
- const char *func,
- bool indented,
- unsigned int level,
- int level_dir,
- const char *message,
- va_list ap)
-{
- if (!_hb_debug (level, max_level))
- return;
-
- fprintf (stderr, "%-10s", what ? what : "");
-
- if (obj)
- fprintf (stderr, "(%*p) ", (unsigned int) (2 * sizeof (void *)), obj);
- else
- fprintf (stderr, " %*s ", (unsigned int) (2 * sizeof (void *)), "");
-
- if (indented) {
-#define VBAR "\342\224\202" /* U+2502 BOX DRAWINGS LIGHT VERTICAL */
-#define VRBAR "\342\224\234" /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
-#define DLBAR "\342\225\256" /* U+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT */
-#define ULBAR "\342\225\257" /* U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT */
-#define LBAR "\342\225\264" /* U+2574 BOX DRAWINGS LIGHT LEFT */
- static const char bars[] =
- VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
- VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
- VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
- VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
- VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR;
- fprintf (stderr, "%2u %s" VRBAR "%s",
- level,
- bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars) - 1, (unsigned int) (sizeof (VBAR) - 1) * level),
- level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR);
- } else
- fprintf (stderr, " " VRBAR LBAR);
-
- _hb_print_func (func);
-
- if (message)
- {
- fprintf (stderr, ": ");
- vfprintf (stderr, message, ap);
- }
-
- fprintf (stderr, "\n");
-}
-template <> inline void
-_hb_debug_msg_va<0> (const char *what HB_UNUSED,
- const void *obj HB_UNUSED,
- const char *func HB_UNUSED,
- bool indented HB_UNUSED,
- unsigned int level HB_UNUSED,
- int level_dir HB_UNUSED,
- const char *message HB_UNUSED,
- va_list ap HB_UNUSED) {}
-
-template <int max_level> static inline void
-_hb_debug_msg (const char *what,
- const void *obj,
- const char *func,
- bool indented,
- unsigned int level,
- int level_dir,
- const char *message,
- ...) HB_PRINTF_FUNC(7, 8);
-template <int max_level> static inline void
-_hb_debug_msg (const char *what,
- const void *obj,
- const char *func,
- bool indented,
- unsigned int level,
- int level_dir,
- const char *message,
- ...)
-{
- va_list ap;
- va_start (ap, message);
- _hb_debug_msg_va<max_level> (what, obj, func, indented, level, level_dir, message, ap);
- va_end (ap);
-}
-template <> inline void
-_hb_debug_msg<0> (const char *what HB_UNUSED,
- const void *obj HB_UNUSED,
- const char *func HB_UNUSED,
- bool indented HB_UNUSED,
- unsigned int level HB_UNUSED,
- int level_dir HB_UNUSED,
- const char *message HB_UNUSED,
- ...) HB_PRINTF_FUNC(7, 8);
-template <> inline void
-_hb_debug_msg<0> (const char *what HB_UNUSED,
- const void *obj HB_UNUSED,
- const char *func HB_UNUSED,
- bool indented HB_UNUSED,
- unsigned int level HB_UNUSED,
- int level_dir HB_UNUSED,
- const char *message HB_UNUSED,
- ...) {}
-
-#define DEBUG_MSG_LEVEL(WHAT, OBJ, LEVEL, LEVEL_DIR, ...) _hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), NULL, true, (LEVEL), (LEVEL_DIR), __VA_ARGS__)
-#define DEBUG_MSG(WHAT, OBJ, ...) _hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), NULL, false, 0, 0, __VA_ARGS__)
-#define DEBUG_MSG_FUNC(WHAT, OBJ, ...) _hb_debug_msg<HB_DEBUG_##WHAT> (#WHAT, (OBJ), HB_FUNC, false, 0, 0, __VA_ARGS__)
-
-
-/*
- * Printer
- */
-
-template <typename T>
-struct hb_printer_t {
- const char *print (const T&) { return "something"; }
-};
-
-template <>
-struct hb_printer_t<bool> {
- const char *print (bool v) { return v ? "true" : "false"; }
-};
-
-template <>
-struct hb_printer_t<hb_void_t> {
- const char *print (hb_void_t) { return ""; }
-};
-
-
-/*
- * Trace
- */
-
-template <typename T>
-static inline void _hb_warn_no_return (bool returned)
-{
- if (unlikely (!returned)) {
- fprintf (stderr, "OUCH, returned with no call to return_trace(). This is a bug, please report.\n");
- }
-}
-template <>
-/*static*/ inline void _hb_warn_no_return<hb_void_t> (bool returned HB_UNUSED)
-{}
-
-template <int max_level, typename ret_t>
-struct hb_auto_trace_t {
- explicit inline hb_auto_trace_t (unsigned int *plevel_,
- const char *what_,
- const void *obj_,
- const char *func,
- const char *message,
- ...) : plevel (plevel_), what (what_), obj (obj_), returned (false)
- {
- if (plevel) ++*plevel;
-
- va_list ap;
- va_start (ap, message);
- _hb_debug_msg_va<max_level> (what, obj, func, true, plevel ? *plevel : 0, +1, message, ap);
- va_end (ap);
- }
- inline ~hb_auto_trace_t (void)
- {
- _hb_warn_no_return<ret_t> (returned);
- if (!returned) {
- _hb_debug_msg<max_level> (what, obj, NULL, true, plevel ? *plevel : 1, -1, " ");
- }
- if (plevel) --*plevel;
- }
-
- inline ret_t ret (ret_t v, unsigned int line = 0)
- {
- if (unlikely (returned)) {
- fprintf (stderr, "OUCH, double calls to return_trace(). This is a bug, please report.\n");
- return v;
- }
-
- _hb_debug_msg<max_level> (what, obj, NULL, true, plevel ? *plevel : 1, -1,
- "return %s (line %d)",
- hb_printer_t<ret_t>().print (v), line);
- if (plevel) --*plevel;
- plevel = NULL;
- returned = true;
- return v;
- }
-
- private:
- unsigned int *plevel;
- const char *what;
- const void *obj;
- bool returned;
-};
-template <typename ret_t> /* Optimize when tracing is disabled */
-struct hb_auto_trace_t<0, ret_t> {
- explicit inline hb_auto_trace_t (unsigned int *plevel_ HB_UNUSED,
- const char *what HB_UNUSED,
- const void *obj HB_UNUSED,
- const char *func HB_UNUSED,
- const char *message HB_UNUSED,
- ...) {}
-
- inline ret_t ret (ret_t v, unsigned int line HB_UNUSED = 0) { return v; }
-};
-
-#define return_trace(RET) return trace.ret (RET, __LINE__)
/* Misc */
@@ -887,7 +669,7 @@ hb_in_range (T u, T lo, T hi)
* one right now. Declaring a variable won't work as HB_UNUSED
* is unusable on some platforms and unused types are less likely
* to generate a warning than unused variables. */
- ASSERT_STATIC (sizeof (hb_assert_unsigned_t<T>) >= 0);
+ static_assert ((sizeof (hb_assert_unsigned_t<T>) >= 0), "");
/* The casts below are important as if T is smaller than int,
* the subtract results will become a signed int! */
@@ -912,7 +694,7 @@ hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3)
* one enum to another... So this doesn't provide the type-checking that I
* originally had in mind... :(.
*
- * For MSVC warnings, see: https://github.com/behdad/harfbuzz/pull/163
+ * For MSVC warnings, see: https://github.com/harfbuzz/harfbuzz/pull/163
*/
#ifdef _MSC_VER
# pragma warning(disable:4200)
@@ -932,11 +714,10 @@ hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3)
/* Useful for set-operations on small enums.
* For example, for testing "x ∈ {x1, x2, x3}" use:
- * (FLAG_SAFE(x) & (FLAG(x1) | FLAG(x2) | FLAG(x3)))
+ * (FLAG_UNSAFE(x) & (FLAG(x1) | FLAG(x2) | FLAG(x3)))
*/
-#define FLAG(x) (ASSERT_STATIC_EXPR_ZERO ((x) < 32) + (1U << (x)))
-#define FLAG_SAFE(x) (1U << (x))
-#define FLAG_UNSAFE(x) ((x) < 32 ? FLAG_SAFE(x) : 0)
+#define FLAG(x) (ASSERT_STATIC_EXPR_ZERO ((unsigned int)(x) < 32) + (1U << (unsigned int)(x)))
+#define FLAG_UNSAFE(x) ((unsigned int)(x) < 32 ? (1U << (unsigned int)(x)) : 0)
#define FLAG_RANGE(x,y) (ASSERT_STATIC_EXPR_ZERO ((x) < (y)) + FLAG(y+1) - FLAG(x))
@@ -968,7 +749,7 @@ hb_stable_sort (T *array, unsigned int len, int(*compar)(const T *, const T *),
template <typename T> static inline void
hb_stable_sort (T *array, unsigned int len, int(*compar)(const T *, const T *))
{
- hb_stable_sort (array, len, compar, (int *) NULL);
+ hb_stable_sort (array, len, compar, (int *) nullptr);
}
static inline hb_bool_t
@@ -990,6 +771,73 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
}
+/* Vectorization */
+
+struct HbOpOr
+{
+ static const bool passthru_left = true;
+ static const bool passthru_right = true;
+ template <typename T> static void process (T &o, const T &a, const T &b) { o = a | b; }
+};
+struct HbOpAnd
+{
+ static const bool passthru_left = false;
+ static const bool passthru_right = false;
+ template <typename T> static void process (T &o, const T &a, const T &b) { o = a & b; }
+};
+struct HbOpMinus
+{
+ static const bool passthru_left = true;
+ static const bool passthru_right = false;
+ template <typename T> static void process (T &o, const T &a, const T &b) { o = a & ~b; }
+};
+struct HbOpXor
+{
+ static const bool passthru_left = true;
+ static const bool passthru_right = true;
+ template <typename T> static void process (T &o, const T &a, const T &b) { o = a ^ b; }
+};
+
+/* Type behaving similar to vectorized vars defined using __attribute__((vector_size(...))). */
+template <typename elt_t, unsigned int byte_size>
+struct hb_vector_size_t
+{
+ elt_t& operator [] (unsigned int i) { return v[i]; }
+ const elt_t& operator [] (unsigned int i) const { return v[i]; }
+
+ template <class Op>
+ inline hb_vector_size_t process (const hb_vector_size_t &o) const
+ {
+ hb_vector_size_t r;
+ for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
+ Op::process (r.v[i], v[i], o.v[i]);
+ return r;
+ }
+ inline hb_vector_size_t operator | (const hb_vector_size_t &o) const
+ { return process<HbOpOr> (o); }
+ inline hb_vector_size_t operator & (const hb_vector_size_t &o) const
+ { return process<HbOpAnd> (o); }
+ inline hb_vector_size_t operator ^ (const hb_vector_size_t &o) const
+ { return process<HbOpXor> (o); }
+ inline hb_vector_size_t operator ~ () const
+ {
+ hb_vector_size_t r;
+ for (unsigned int i = 0; i < ARRAY_LENGTH (v); i++)
+ r.v[i] = ~v[i];
+ return r;
+ }
+
+ private:
+ static_assert (byte_size / sizeof (elt_t) * sizeof (elt_t) == byte_size, "");
+ elt_t v[byte_size / sizeof (elt_t)];
+};
+
+/* The `vector_size' attribute was introduced in gcc 3.1. */
+#if defined( __GNUC__ ) && ( __GNUC__ >= 4 )
+#define HAVE_VECTOR_SIZE 1
+#endif
+
+
/* Global runtime options. */
struct hb_options_t
@@ -1002,7 +850,7 @@ union hb_options_union_t {
unsigned int i;
hb_options_t opts;
};
-ASSERT_STATIC (sizeof (int) == sizeof (hb_options_union_t));
+static_assert ((sizeof (int) == sizeof (hb_options_union_t)), "");
HB_INTERNAL void
_hb_options_init (void);
@@ -1021,4 +869,31 @@ hb_options (void)
/* Size signifying variable-sized array */
#define VAR 1
+
+/* String type. */
+
+struct hb_string_t
+{
+ inline hb_string_t (void) : bytes (nullptr), len (0) {}
+ inline hb_string_t (const char *bytes_, unsigned int len_) : bytes (bytes_), len (len_) {}
+
+ inline int cmp (const hb_string_t &a) const
+ {
+ if (len != a.len)
+ return (int) a.len - (int) len;
+
+ return memcmp (a.bytes, bytes, len);
+ }
+ static inline int cmp (const void *pa, const void *pb)
+ {
+ hb_string_t *a = (hb_string_t *) pa;
+ hb_string_t *b = (hb_string_t *) pb;
+ return b->cmp (*a);
+ }
+
+ const char *bytes;
+ unsigned int len;
+};
+
+
#endif /* HB_PRIVATE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-set-digest-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-set-digest-private.hh
new file mode 100644
index 0000000000..e099a82641
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-set-digest-private.hh
@@ -0,0 +1,179 @@
+/*
+ * Copyright © 2012 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_SET_DIGEST_PRIVATE_HH
+#define HB_SET_DIGEST_PRIVATE_HH
+
+#include "hb-private.hh"
+
+/*
+ * The set digests here implement various "filters" that support
+ * "approximate member query". Conceptually these are like Bloom
+ * Filter and Quotient Filter, however, much smaller, faster, and
+ * designed to fit the requirements of our uses for glyph coverage
+ * queries.
+ *
+ * Our filters are highly accurate if the lookup covers fairly local
+ * set of glyphs, but fully flooded and ineffective if coverage is
+ * all over the place.
+ *
+ * The frozen-set can be used instead of a digest, to trade more
+ * memory for 100% accuracy, but in practice, that doesn't look like
+ * an attractive trade-off.
+ */
+
+template <typename mask_t, unsigned int shift>
+struct hb_set_digest_lowest_bits_t
+{
+ ASSERT_POD ();
+
+ static const unsigned int mask_bytes = sizeof (mask_t);
+ static const unsigned int mask_bits = sizeof (mask_t) * 8;
+ static const unsigned int num_bits = 0
+ + (mask_bytes >= 1 ? 3 : 0)
+ + (mask_bytes >= 2 ? 1 : 0)
+ + (mask_bytes >= 4 ? 1 : 0)
+ + (mask_bytes >= 8 ? 1 : 0)
+ + (mask_bytes >= 16? 1 : 0)
+ + 0;
+
+ static_assert ((shift < sizeof (hb_codepoint_t) * 8), "");
+ static_assert ((shift + num_bits <= sizeof (hb_codepoint_t) * 8), "");
+
+ inline void init (void) {
+ mask = 0;
+ }
+
+ inline void add (hb_codepoint_t g) {
+ mask |= mask_for (g);
+ }
+
+ inline bool add_range (hb_codepoint_t a, hb_codepoint_t b) {
+ if ((b >> shift) - (a >> shift) >= mask_bits - 1)
+ mask = (mask_t) -1;
+ else {
+ mask_t ma = mask_for (a);
+ mask_t mb = mask_for (b);
+ mask |= mb + (mb - ma) - (mb < ma);
+ }
+ return true;
+ }
+
+ template <typename T>
+ inline void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ for (unsigned int i = 0; i < count; i++)
+ {
+ add (*array);
+ array = (const T *) (stride + (const char *) array);
+ }
+ }
+ template <typename T>
+ inline bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ for (unsigned int i = 0; i < count; i++)
+ {
+ add (*array);
+ array = (const T *) (stride + (const char *) array);
+ }
+ return true;
+ }
+
+ inline bool may_have (hb_codepoint_t g) const {
+ return !!(mask & mask_for (g));
+ }
+
+ private:
+
+ static inline mask_t mask_for (hb_codepoint_t g) {
+ return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1));
+ }
+ mask_t mask;
+};
+
+template <typename head_t, typename tail_t>
+struct hb_set_digest_combiner_t
+{
+ ASSERT_POD ();
+
+ inline void init (void) {
+ head.init ();
+ tail.init ();
+ }
+
+ inline void add (hb_codepoint_t g) {
+ head.add (g);
+ tail.add (g);
+ }
+
+ inline bool add_range (hb_codepoint_t a, hb_codepoint_t b) {
+ head.add_range (a, b);
+ tail.add_range (a, b);
+ return true;
+ }
+ template <typename T>
+ inline void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ head.add_array (array, count, stride);
+ tail.add_array (array, count, stride);
+ }
+ template <typename T>
+ inline bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ head.add_sorted_array (array, count, stride);
+ tail.add_sorted_array (array, count, stride);
+ return true;
+ }
+
+ inline bool may_have (hb_codepoint_t g) const {
+ return head.may_have (g) && tail.may_have (g);
+ }
+
+ private:
+ head_t head;
+ tail_t tail;
+};
+
+
+/*
+ * hb_set_digest_t
+ *
+ * This is a combination of digests that performs "best".
+ * There is not much science to this: it's a result of intuition
+ * and testing.
+ */
+typedef hb_set_digest_combiner_t
+<
+ hb_set_digest_lowest_bits_t<unsigned long, 4>,
+ hb_set_digest_combiner_t
+ <
+ hb_set_digest_lowest_bits_t<unsigned long, 0>,
+ hb_set_digest_lowest_bits_t<unsigned long, 9>
+ >
+> hb_set_digest_t;
+
+
+#endif /* HB_SET_DIGEST_PRIVATE_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-set-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-set-private.hh
index e2010d7626..9c6f3ee37a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-set-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-set-private.hh
@@ -1,5 +1,5 @@
/*
- * Copyright © 2012 Google, Inc.
+ * Copyright © 2012,2017 Google, Inc.
*
* This is part of HarfBuzz, a text shaping library.
*
@@ -32,254 +32,462 @@
/*
- * The set digests here implement various "filters" that support
- * "approximate member query". Conceptually these are like Bloom
- * Filter and Quotient Filter, however, much smaller, faster, and
- * designed to fit the requirements of our uses for glyph coverage
- * queries.
- *
- * Our filters are highly accurate if the lookup covers fairly local
- * set of glyphs, but fully flooded and ineffective if coverage is
- * all over the place.
- *
- * The frozen-set can be used instead of a digest, to trade more
- * memory for 100% accuracy, but in practice, that doesn't look like
- * an attractive trade-off.
+ * hb_set_t
*/
-template <typename mask_t, unsigned int shift>
-struct hb_set_digest_lowest_bits_t
-{
- ASSERT_POD ();
-
- static const unsigned int mask_bytes = sizeof (mask_t);
- static const unsigned int mask_bits = sizeof (mask_t) * 8;
- static const unsigned int num_bits = 0
- + (mask_bytes >= 1 ? 3 : 0)
- + (mask_bytes >= 2 ? 1 : 0)
- + (mask_bytes >= 4 ? 1 : 0)
- + (mask_bytes >= 8 ? 1 : 0)
- + (mask_bytes >= 16? 1 : 0)
- + 0;
-
- ASSERT_STATIC (shift < sizeof (hb_codepoint_t) * 8);
- ASSERT_STATIC (shift + num_bits <= sizeof (hb_codepoint_t) * 8);
-
- inline void init (void) {
- mask = 0;
- }
+/* TODO Keep a free-list so we can free pages that are completely zeroed. At that
+ * point maybe also use a sentinel value for "all-1" pages? */
- inline void add (hb_codepoint_t g) {
- mask |= mask_for (g);
- }
-
- inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
- if ((b >> shift) - (a >> shift) >= mask_bits - 1)
- mask = (mask_t) -1;
- else {
- mask_t ma = mask_for (a);
- mask_t mb = mask_for (b);
- mask |= mb + (mb - ma) - (mb < ma);
- }
- }
+struct hb_set_t
+{
+ struct page_map_t
+ {
+ inline int cmp (const page_map_t *o) const { return (int) o->major - (int) major; }
- inline bool may_have (hb_codepoint_t g) const {
- return !!(mask & mask_for (g));
- }
+ uint32_t major;
+ uint32_t index;
+ };
- private:
+ struct page_t
+ {
+ inline void init0 (void) { memset (&v, 0, sizeof (v)); }
+ inline void init1 (void) { memset (&v, 0xff, sizeof (v)); }
- static inline mask_t mask_for (hb_codepoint_t g) {
- return ((mask_t) 1) << ((g >> shift) & (mask_bits - 1));
- }
- mask_t mask;
-};
+ inline unsigned int len (void) const
+ { return ARRAY_LENGTH_CONST (v); }
-template <typename head_t, typename tail_t>
-struct hb_set_digest_combiner_t
-{
- ASSERT_POD ();
-
- inline void init (void) {
- head.init ();
- tail.init ();
- }
+ inline bool is_empty (void) const
+ {
+ for (unsigned int i = 0; i < len (); i++)
+ if (v[i])
+ return false;
+ return true;
+ }
- inline void add (hb_codepoint_t g) {
- head.add (g);
- tail.add (g);
- }
+ inline void add (hb_codepoint_t g) { elt (g) |= mask (g); }
+ inline void del (hb_codepoint_t g) { elt (g) &= ~mask (g); }
+ inline bool has (hb_codepoint_t g) const { return !!(elt (g) & mask (g)); }
- inline void add_range (hb_codepoint_t a, hb_codepoint_t b) {
- head.add_range (a, b);
- tail.add_range (a, b);
- }
+ inline void add_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
+ elt_t *la = &elt (a);
+ elt_t *lb = &elt (b);
+ if (la == lb)
+ *la |= (mask (b) << 1) - mask(a);
+ else
+ {
+ *la |= ~(mask (a) - 1);
+ la++;
+
+ memset (la, 0xff, (char *) lb - (char *) la);
+
+ *lb |= ((mask (b) << 1) - 1);
+ }
+ }
- inline bool may_have (hb_codepoint_t g) const {
- return head.may_have (g) && tail.may_have (g);
- }
+ inline bool is_equal (const page_t *other) const
+ {
+ return 0 == memcmp (&v, &other->v, sizeof (v));
+ }
- private:
- head_t head;
- tail_t tail;
-};
+ inline unsigned int get_population (void) const
+ {
+ unsigned int pop = 0;
+ for (unsigned int i = 0; i < len (); i++)
+ pop += _hb_popcount (v[i]);
+ return pop;
+ }
+ inline bool next (hb_codepoint_t *codepoint) const
+ {
+ unsigned int m = (*codepoint + 1) & MASK;
+ if (!m)
+ {
+ *codepoint = INVALID;
+ return false;
+ }
+ unsigned int i = m / ELT_BITS;
+ unsigned int j = m & ELT_MASK;
+
+ for (; j < ELT_BITS; j++)
+ if (v[i] & (elt_t (1) << j))
+ goto found;
+ for (i++; i < len (); i++)
+ if (v[i])
+ for (j = 0; j < ELT_BITS; j++)
+ if (v[i] & (elt_t (1) << j))
+ goto found;
+
+ *codepoint = INVALID;
+ return false;
-/*
- * hb_set_digest_t
- *
- * This is a combination of digests that performs "best".
- * There is not much science to this: it's a result of intuition
- * and testing.
- */
-typedef hb_set_digest_combiner_t
-<
- hb_set_digest_lowest_bits_t<unsigned long, 4>,
- hb_set_digest_combiner_t
- <
- hb_set_digest_lowest_bits_t<unsigned long, 0>,
- hb_set_digest_lowest_bits_t<unsigned long, 9>
- >
-> hb_set_digest_t;
+ found:
+ *codepoint = i * ELT_BITS + j;
+ return true;
+ }
+ inline hb_codepoint_t get_min (void) const
+ {
+ for (unsigned int i = 0; i < len (); i++)
+ if (v[i])
+ {
+ elt_t e = v[i];
+ for (unsigned int j = 0; j < ELT_BITS; j++)
+ if (e & (elt_t (1) << j))
+ return i * ELT_BITS + j;
+ }
+ return INVALID;
+ }
+ inline hb_codepoint_t get_max (void) const
+ {
+ for (int i = len () - 1; i >= 0; i--)
+ if (v[i])
+ {
+ elt_t e = v[i];
+ for (int j = ELT_BITS - 1; j >= 0; j--)
+ if (e & (elt_t (1) << j))
+ return i * ELT_BITS + j;
+ }
+ return 0;
+ }
+ static const unsigned int PAGE_BITS = 8192; /* Use to tune. */
+ static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, "");
+ typedef uint64_t elt_t;
-/*
- * hb_set_t
- */
+#if 0 && HAVE_VECTOR_SIZE
+ /* The vectorized version does not work with clang as non-const
+ * elt() errs "non-const reference cannot bind to vector element". */
+ typedef elt_t vector_t __attribute__((vector_size (PAGE_BITS / 8)));
+#else
+ typedef hb_vector_size_t<elt_t, PAGE_BITS / 8> vector_t;
+#endif
+ vector_t v;
-/* TODO Make this faster and memmory efficient. */
+ static const unsigned int ELT_BITS = sizeof (elt_t) * 8;
+ static const unsigned int ELT_MASK = ELT_BITS - 1;
+ static const unsigned int BITS = sizeof (vector_t) * 8;
+ static const unsigned int MASK = BITS - 1;
+ static_assert (PAGE_BITS == BITS, "");
-struct hb_set_t
-{
- friend struct hb_frozen_set_t;
+ elt_t &elt (hb_codepoint_t g) { return v[(g & MASK) / ELT_BITS]; }
+ elt_t const &elt (hb_codepoint_t g) const { return v[(g & MASK) / ELT_BITS]; }
+ elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & ELT_MASK); }
+ };
+ static_assert (page_t::PAGE_BITS == sizeof (page_t) * 8, "");
hb_object_header_t header;
ASSERT_POD ();
bool in_error;
+ hb_prealloced_array_t<page_map_t, 8> page_map;
+ hb_prealloced_array_t<page_t, 1> pages;
- inline void init (void) {
- hb_object_init (this);
- clear ();
+ inline void init (void)
+ {
+ page_map.init ();
+ pages.init ();
}
- inline void fini (void) {
+ inline void finish (void)
+ {
+ page_map.finish ();
+ pages.finish ();
+ }
+
+ inline bool resize (unsigned int count)
+ {
+ if (unlikely (in_error)) return false;
+ if (!pages.resize (count) || !page_map.resize (count))
+ {
+ pages.resize (page_map.len);
+ in_error = true;
+ return false;
+ }
+ return true;
}
+
inline void clear (void) {
if (unlikely (hb_object_is_inert (this)))
return;
in_error = false;
- memset (elts, 0, sizeof elts);
+ page_map.resize (0);
+ pages.resize (0);
}
inline bool is_empty (void) const {
- for (unsigned int i = 0; i < ARRAY_LENGTH (elts); i++)
- if (elts[i])
+ unsigned int count = pages.len;
+ for (unsigned int i = 0; i < count; i++)
+ if (!pages[i].is_empty ())
return false;
return true;
}
+
inline void add (hb_codepoint_t g)
{
if (unlikely (in_error)) return;
if (unlikely (g == INVALID)) return;
- if (unlikely (g > MAX_G)) return;
- elt (g) |= mask (g);
+ page_t *page = page_for_insert (g); if (unlikely (!page)) return;
+ page->add (g);
}
- inline void add_range (hb_codepoint_t a, hb_codepoint_t b)
+ inline bool add_range (hb_codepoint_t a, hb_codepoint_t b)
+ {
+ if (unlikely (in_error)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
+ if (unlikely (a > b || a == INVALID || b == INVALID)) return false;
+ unsigned int ma = get_major (a);
+ unsigned int mb = get_major (b);
+ if (ma == mb)
+ {
+ page_t *page = page_for_insert (a); if (unlikely (!page)) return false;
+ page->add_range (a, b);
+ }
+ else
+ {
+ page_t *page = page_for_insert (a); if (unlikely (!page)) return false;
+ page->add_range (a, major_start (ma + 1) - 1);
+
+ for (unsigned int m = ma + 1; m < mb; m++)
+ {
+ page = page_for_insert (major_start (m)); if (unlikely (!page)) return false;
+ page->init1 ();
+ }
+
+ page = page_for_insert (b); if (unlikely (!page)) return false;
+ page->add_range (major_start (mb), b);
+ }
+ return true;
+ }
+
+ template <typename T>
+ inline void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
{
if (unlikely (in_error)) return;
- /* TODO Speedup */
- for (unsigned int i = a; i < b + 1; i++)
- add (i);
+ if (!count) return;
+ hb_codepoint_t g = *array;
+ while (count)
+ {
+ unsigned int m = get_major (g);
+ page_t *page = page_for_insert (g); if (unlikely (!page)) return;
+ unsigned int start = major_start (m);
+ unsigned int end = major_start (m + 1);
+ do
+ {
+ page->add (g);
+
+ array++;
+ count--;
+ }
+ while (count && (g = *array, start <= g && g < end));
+ }
+ }
+
+ /* Might return false if array looks unsorted.
+ * Used for faster rejection of corrupt data. */
+ template <typename T>
+ inline bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
+ {
+ if (unlikely (in_error)) return true; /* https://github.com/harfbuzz/harfbuzz/issues/657 */
+ if (!count) return true;
+ hb_codepoint_t g = *array;
+ hb_codepoint_t last_g = g;
+ while (count)
+ {
+ unsigned int m = get_major (g);
+ page_t *page = page_for_insert (g); if (unlikely (!page)) return false;
+ unsigned int end = major_start (m + 1);
+ do
+ {
+ /* If we try harder we can change the following comparison to <=;
+ * Not sure if it's worth it. */
+ if (g < last_g) return false;
+ last_g = g;
+ page->add (g);
+
+ array++;
+ count--;
+ }
+ while (count && (g = *array, g < end));
+ }
+ return true;
}
+
inline void del (hb_codepoint_t g)
{
if (unlikely (in_error)) return;
- if (unlikely (g > MAX_G)) return;
- elt (g) &= ~mask (g);
+ page_t *p = page_for (g);
+ if (!p)
+ return;
+ p->del (g);
}
inline void del_range (hb_codepoint_t a, hb_codepoint_t b)
{
+ /* TODO Optimize, like add_range(). */
if (unlikely (in_error)) return;
- /* TODO Speedup */
for (unsigned int i = a; i < b + 1; i++)
del (i);
}
inline bool has (hb_codepoint_t g) const
{
- if (unlikely (g > MAX_G)) return false;
- return !!(elt (g) & mask (g));
+ const page_t *p = page_for (g);
+ if (!p)
+ return false;
+ return p->has (g);
}
inline bool intersects (hb_codepoint_t first,
hb_codepoint_t last) const
{
- if (unlikely (first > MAX_G)) return false;
- if (unlikely (last > MAX_G)) last = MAX_G;
- unsigned int end = last + 1;
- for (hb_codepoint_t i = first; i < end; i++)
- if (has (i))
- return true;
- return false;
+ hb_codepoint_t c = first - 1;
+ return next (&c) && c <= last;
+ }
+ inline void set (const hb_set_t *other)
+ {
+ if (unlikely (in_error)) return;
+ unsigned int count = other->pages.len;
+ if (!resize (count))
+ return;
+
+ memcpy (pages.array, other->pages.array, count * sizeof (pages.array[0]));
+ memcpy (page_map.array, other->page_map.array, count * sizeof (page_map.array[0]));
}
+
inline bool is_equal (const hb_set_t *other) const
{
- for (unsigned int i = 0; i < ELTS; i++)
- if (elts[i] != other->elts[i])
+ unsigned int na = pages.len;
+ unsigned int nb = other->pages.len;
+
+ unsigned int a = 0, b = 0;
+ for (; a < na && b < nb; )
+ {
+ if (page_at (a).is_empty ()) { a++; continue; }
+ if (other->page_at (b).is_empty ()) { b++; continue; }
+ if (page_map[a].major != other->page_map[b].major ||
+ !page_at (a).is_equal (&other->page_at (b)))
return false;
+ a++;
+ b++;
+ }
+ for (; a < na; a++)
+ if (!page_at (a).is_empty ()) { return false; }
+ for (; b < nb; b++)
+ if (!other->page_at (b).is_empty ()) { return false; }
+
return true;
}
- inline void set (const hb_set_t *other)
+
+ template <class Op>
+ inline void process (const hb_set_t *other)
{
if (unlikely (in_error)) return;
- for (unsigned int i = 0; i < ELTS; i++)
- elts[i] = other->elts[i];
+
+ unsigned int na = pages.len;
+ unsigned int nb = other->pages.len;
+
+ unsigned int count = 0;
+ unsigned int a = 0, b = 0;
+ for (; a < na && b < nb; )
+ {
+ if (page_map[a].major == other->page_map[b].major)
+ {
+ count++;
+ a++;
+ b++;
+ }
+ else if (page_map[a].major < other->page_map[b].major)
+ {
+ if (Op::passthru_left)
+ count++;
+ a++;
+ }
+ else
+ {
+ if (Op::passthru_right)
+ count++;
+ b++;
+ }
+ }
+ if (Op::passthru_left)
+ count += na - a;
+ if (Op::passthru_right)
+ count += nb - b;
+
+ if (!resize (count))
+ return;
+
+ /* Process in-place backward. */
+ a = na;
+ b = nb;
+ for (; a && b; )
+ {
+ if (page_map[a - 1].major == other->page_map[b - 1].major)
+ {
+ a--;
+ b--;
+ Op::process (page_at (--count).v, page_at (a).v, other->page_at (b).v);
+ }
+ else if (page_map[a - 1].major > other->page_map[b - 1].major)
+ {
+ a--;
+ if (Op::passthru_left)
+ page_at (--count).v = page_at (a).v;
+ }
+ else
+ {
+ b--;
+ if (Op::passthru_right)
+ page_at (--count).v = other->page_at (b).v;
+ }
+ }
+ if (Op::passthru_left)
+ while (a)
+ page_at (--count).v = page_at (--a).v;
+ if (Op::passthru_right)
+ while (b)
+ page_at (--count).v = other->page_at (--b).v;
+ assert (!count);
}
+
inline void union_ (const hb_set_t *other)
{
- if (unlikely (in_error)) return;
- for (unsigned int i = 0; i < ELTS; i++)
- elts[i] |= other->elts[i];
+ process<HbOpOr> (other);
}
inline void intersect (const hb_set_t *other)
{
- if (unlikely (in_error)) return;
- for (unsigned int i = 0; i < ELTS; i++)
- elts[i] &= other->elts[i];
+ process<HbOpAnd> (other);
}
inline void subtract (const hb_set_t *other)
{
- if (unlikely (in_error)) return;
- for (unsigned int i = 0; i < ELTS; i++)
- elts[i] &= ~other->elts[i];
+ process<HbOpMinus> (other);
}
inline void symmetric_difference (const hb_set_t *other)
{
- if (unlikely (in_error)) return;
- for (unsigned int i = 0; i < ELTS; i++)
- elts[i] ^= other->elts[i];
- }
- inline void invert (void)
- {
- if (unlikely (in_error)) return;
- for (unsigned int i = 0; i < ELTS; i++)
- elts[i] = ~elts[i];
+ process<HbOpXor> (other);
}
inline bool next (hb_codepoint_t *codepoint) const
{
if (unlikely (*codepoint == INVALID)) {
- hb_codepoint_t i = get_min ();
- if (i != INVALID) {
- *codepoint = i;
- return true;
- } else {
- *codepoint = INVALID;
- return false;
+ *codepoint = get_min ();
+ return *codepoint != INVALID;
+ }
+
+ page_map_t map = {get_major (*codepoint), 0};
+ unsigned int i;
+ page_map.bfind (&map, &i);
+ if (i < page_map.len)
+ {
+ if (pages[page_map[i].index].next (codepoint))
+ {
+ *codepoint += page_map[i].major * page_t::PAGE_BITS;
+ return true;
}
+ i++;
}
- for (hb_codepoint_t i = *codepoint + 1; i < MAX_G + 1; i++)
- if (has (i)) {
- *codepoint = i;
+ for (; i < page_map.len; i++)
+ {
+ hb_codepoint_t m = pages[page_map[i].index].get_min ();
+ if (m != INVALID)
+ {
+ *codepoint = page_map[i].major * page_t::PAGE_BITS + m;
return true;
}
+ }
*codepoint = INVALID;
return false;
}
@@ -303,99 +511,66 @@ struct hb_set_t
inline unsigned int get_population (void) const
{
- unsigned int count = 0;
- for (unsigned int i = 0; i < ELTS; i++)
- count += _hb_popcount32 (elts[i]);
- return count;
+ unsigned int pop = 0;
+ unsigned int count = pages.len;
+ for (unsigned int i = 0; i < count; i++)
+ pop += pages[i].get_population ();
+ return pop;
}
inline hb_codepoint_t get_min (void) const
{
- for (unsigned int i = 0; i < ELTS; i++)
- if (elts[i])
- for (unsigned int j = 0; j < BITS; j++)
- if (elts[i] & (1u << j))
- return i * BITS + j;
+ unsigned int count = pages.len;
+ for (unsigned int i = 0; i < count; i++)
+ if (!page_at (i).is_empty ())
+ return page_map[i].major * page_t::PAGE_BITS + page_at (i).get_min ();
return INVALID;
}
inline hb_codepoint_t get_max (void) const
{
- for (unsigned int i = ELTS; i; i--)
- if (elts[i - 1])
- for (unsigned int j = BITS; j; j--)
- if (elts[i - 1] & (1u << (j - 1)))
- return (i - 1) * BITS + (j - 1);
+ unsigned int count = pages.len;
+ for (int i = count - 1; i >= 0; i++)
+ if (!page_at (i).is_empty ())
+ return page_map[i].major * page_t::PAGE_BITS + page_at (i).get_max ();
return INVALID;
}
- typedef uint32_t elt_t;
- static const unsigned int MAX_G = 65536 - 1; /* XXX Fix this... */
- static const unsigned int SHIFT = 5;
- static const unsigned int BITS = (1 << SHIFT);
- static const unsigned int MASK = BITS - 1;
- static const unsigned int ELTS = (MAX_G + 1 + (BITS - 1)) / BITS;
static const hb_codepoint_t INVALID = HB_SET_VALUE_INVALID;
- elt_t &elt (hb_codepoint_t g) { return elts[g >> SHIFT]; }
- elt_t const &elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
- elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & MASK); }
-
- elt_t elts[ELTS]; /* XXX 8kb */
-
- ASSERT_STATIC (sizeof (elt_t) * 8 == BITS);
- ASSERT_STATIC (sizeof (elt_t) * 8 * ELTS > MAX_G);
-};
-
-struct hb_frozen_set_t
-{
- static const unsigned int SHIFT = hb_set_t::SHIFT;
- static const unsigned int BITS = hb_set_t::BITS;
- static const unsigned int MASK = hb_set_t::MASK;
- typedef hb_set_t::elt_t elt_t;
-
- inline void init (const hb_set_t &set)
+ inline page_t *page_for_insert (hb_codepoint_t g)
{
- start = count = 0;
- elts = NULL;
-
- unsigned int max = set.get_max ();
- if (max == set.INVALID)
- return;
- unsigned int min = set.get_min ();
- const elt_t &min_elt = set.elt (min);
-
- start = min & ~MASK;
- count = max - start + 1;
- unsigned int num_elts = (count + BITS - 1) / BITS;
- unsigned int elts_size = num_elts * sizeof (elt_t);
- elts = (elt_t *) malloc (elts_size);
- if (unlikely (!elts))
+ page_map_t map = {get_major (g), pages.len};
+ unsigned int i;
+ if (!page_map.bfind (&map, &i))
{
- start = count = 0;
- return;
+ if (!resize (pages.len + 1))
+ return nullptr;
+
+ pages[map.index].init0 ();
+ memmove (&page_map[i + 1], &page_map[i], (page_map.len - 1 - i) * sizeof (page_map[0]));
+ page_map[i] = map;
}
- memcpy (elts, &min_elt, elts_size);
+ return &pages[page_map[i].index];
}
-
- inline void fini (void)
+ inline page_t *page_for (hb_codepoint_t g)
{
- if (elts)
- free (elts);
+ page_map_t key = {get_major (g)};
+ const page_map_t *found = page_map.bsearch (&key);
+ if (found)
+ return &pages[found->index];
+ return nullptr;
}
-
- inline bool has (hb_codepoint_t g) const
+ inline const page_t *page_for (hb_codepoint_t g) const
{
- /* hb_codepoint_t is unsigned. */
- g -= start;
- if (unlikely (g > count)) return false;
- return !!(elt (g) & mask (g));
- }
-
- elt_t const &elt (hb_codepoint_t g) const { return elts[g >> SHIFT]; }
- elt_t mask (hb_codepoint_t g) const { return elt_t (1) << (g & MASK); }
-
- private:
- hb_codepoint_t start, count;
- elt_t *elts;
+ page_map_t key = {get_major (g)};
+ const page_map_t *found = page_map.bsearch (&key);
+ if (found)
+ return &pages[found->index];
+ return nullptr;
+ }
+ inline page_t &page_at (unsigned int i) { return pages[page_map[i].index]; }
+ inline const page_t &page_at (unsigned int i) const { return pages[page_map[i].index]; }
+ inline unsigned int get_major (hb_codepoint_t g) const { return g / page_t::PAGE_BITS; }
+ inline hb_codepoint_t major_start (unsigned int major) const { return major * page_t::PAGE_BITS; }
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-set.cc b/src/3rdparty/harfbuzz-ng/src/hb-set.cc
index cb7fcdbf64..0b4f871e85 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-set.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-set.cc
@@ -45,7 +45,7 @@ hb_set_create (void)
if (!(set = hb_object_create<hb_set_t> ()))
return hb_set_get_empty ();
- set->clear ();
+ set->init ();
return set;
}
@@ -95,7 +95,7 @@ hb_set_destroy (hb_set_t *set)
{
if (!hb_object_destroy (set)) return;
- set->fini ();
+ set->finish ();
free (set);
}
@@ -105,7 +105,7 @@ hb_set_destroy (hb_set_t *set)
* @set: a set.
* @key:
* @data:
- * @destroy (closure data):
+ * @destroy:
* @replace:
*
* Return value:
@@ -376,11 +376,12 @@ hb_set_symmetric_difference (hb_set_t *set,
*
*
* Since: 0.9.10
+ *
+ * Deprecated: 1.6.1
**/
void
hb_set_invert (hb_set_t *set)
{
- set->invert ();
}
/**
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-set.h b/src/3rdparty/harfbuzz-ng/src/hb-set.h
index 2164c1a654..2ce406073c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-set.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-set.h
@@ -126,9 +126,6 @@ HB_EXTERN void
hb_set_symmetric_difference (hb_set_t *set,
const hb_set_t *other);
-HB_EXTERN void
-hb_set_invert (hb_set_t *set);
-
HB_EXTERN unsigned int
hb_set_get_population (const hb_set_t *set);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-shape-plan.cc b/src/3rdparty/harfbuzz-ng/src/hb-shape-plan.cc
index 600faaeb18..6eeba2b3d1 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-shape-plan.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-shape-plan.cc
@@ -24,24 +24,14 @@
* Google Author(s): Behdad Esfahbod
*/
+#include "hb-private.hh"
+#include "hb-debug.hh"
#include "hb-shape-plan-private.hh"
#include "hb-shaper-private.hh"
#include "hb-font-private.hh"
#include "hb-buffer-private.hh"
-#ifndef HB_DEBUG_SHAPE_PLAN
-#define HB_DEBUG_SHAPE_PLAN (HB_DEBUG+0)
-#endif
-
-
-#define HB_SHAPER_IMPLEMENT(shaper) \
- HB_SHAPER_DATA_ENSURE_DECLARE(shaper, face) \
- HB_SHAPER_DATA_ENSURE_DECLARE(shaper, font)
-#include "hb-shaper-list.hh"
-#undef HB_SHAPER_IMPLEMENT
-
-
static void
hb_shape_plan_plan (hb_shape_plan_t *shape_plan,
const hb_feature_t *user_features,
@@ -122,7 +112,7 @@ hb_shape_plan_create (hb_face_t *face,
{
return hb_shape_plan_create2 (face, props,
user_features, num_user_features,
- NULL, 0,
+ nullptr, 0,
shaper_list);
}
@@ -135,7 +125,7 @@ hb_shape_plan_create2 (hb_face_t *face,
unsigned int num_coords,
const char * const *shaper_list)
{
- DEBUG_MSG_FUNC (SHAPE_PLAN, NULL,
+ DEBUG_MSG_FUNC (SHAPE_PLAN, nullptr,
"face=%p num_features=%d num_coords=%d shaper_list=%p",
face,
num_user_features,
@@ -143,8 +133,8 @@ hb_shape_plan_create2 (hb_face_t *face,
shaper_list);
hb_shape_plan_t *shape_plan;
- hb_feature_t *features = NULL;
- int *coords = NULL;
+ hb_feature_t *features = nullptr;
+ int *coords = nullptr;
if (unlikely (!face))
face = hb_face_get_empty ();
@@ -167,7 +157,7 @@ hb_shape_plan_create2 (hb_face_t *face,
assert (props->direction != HB_DIRECTION_INVALID);
hb_face_make_immutable (face);
- shape_plan->default_shaper_list = shaper_list == NULL;
+ shape_plan->default_shaper_list = !shaper_list;
shape_plan->face_unsafe = face;
shape_plan->props = *props;
shape_plan->num_user_features = num_user_features;
@@ -203,16 +193,16 @@ hb_shape_plan_get_empty (void)
HB_OBJECT_HEADER_STATIC,
true, /* default_shaper_list */
- NULL, /* face */
+ nullptr, /* face */
HB_SEGMENT_PROPERTIES_DEFAULT, /* props */
- NULL, /* shaper_func */
- NULL, /* shaper_name */
+ nullptr, /* shaper_func */
+ nullptr, /* shaper_name */
- NULL, /* user_features */
+ nullptr, /* user_features */
0, /* num_user_featurs */
- NULL, /* coords */
+ nullptr, /* coords */
0, /* num_coords */
{
@@ -430,7 +420,7 @@ hb_shape_plan_matches (const hb_shape_plan_t *shape_plan,
return hb_segment_properties_equal (&shape_plan->props, &proposal->props) &&
hb_shape_plan_user_features_match (shape_plan, proposal) &&
hb_shape_plan_coords_match (shape_plan, proposal) &&
- ((shape_plan->default_shaper_list && proposal->shaper_list == NULL) ||
+ ((shape_plan->default_shaper_list && !proposal->shaper_list) ||
(shape_plan->shaper_func == proposal->shaper_func));
}
@@ -438,11 +428,12 @@ static inline hb_bool_t
hb_non_global_user_features_present (const hb_feature_t *user_features,
unsigned int num_user_features)
{
- while (num_user_features)
+ while (num_user_features) {
if (user_features->start != 0 || user_features->end != (unsigned int) -1)
return true;
- else
- num_user_features--, user_features++;
+ num_user_features--;
+ user_features++;
+ }
return false;
}
@@ -476,7 +467,7 @@ hb_shape_plan_create_cached (hb_face_t *face,
{
return hb_shape_plan_create_cached2 (face, props,
user_features, num_user_features,
- NULL, 0,
+ nullptr, 0,
shaper_list);
}
@@ -489,7 +480,7 @@ hb_shape_plan_create_cached2 (hb_face_t *face,
unsigned int num_coords,
const char * const *shaper_list)
{
- DEBUG_MSG_FUNC (SHAPE_PLAN, NULL,
+ DEBUG_MSG_FUNC (SHAPE_PLAN, nullptr,
"face=%p num_features=%d shaper_list=%p",
face,
num_user_features,
@@ -500,7 +491,7 @@ hb_shape_plan_create_cached2 (hb_face_t *face,
shaper_list,
user_features,
num_user_features,
- NULL
+ nullptr
};
if (shaper_list) {
@@ -526,15 +517,17 @@ hb_shape_plan_create_cached2 (hb_face_t *face,
retry:
hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) hb_atomic_ptr_get (&face->shape_plans);
- for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
- if (hb_shape_plan_matches (node->shape_plan, &proposal))
- {
- DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
- return hb_shape_plan_reference (node->shape_plan);
- }
- /* Not found. */
+ /* Don't look for plan in the cache if there were variation coordinates XXX Fix me. */
+ if (!hb_coords_present (coords, num_coords))
+ for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
+ if (hb_shape_plan_matches (node->shape_plan, &proposal))
+ {
+ DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
+ return hb_shape_plan_reference (node->shape_plan);
+ }
+ /* Not found. */
hb_shape_plan_t *shape_plan = hb_shape_plan_create2 (face, props,
user_features, num_user_features,
coords, num_coords,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-shape.cc b/src/3rdparty/harfbuzz-ng/src/hb-shape.cc
index 706f14420d..39355b337d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-shape.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-shape.cc
@@ -45,254 +45,6 @@
* contains the output glyphs and their positions.
**/
-static bool
-parse_space (const char **pp, const char *end)
-{
- while (*pp < end && ISSPACE (**pp))
- (*pp)++;
- return true;
-}
-
-static bool
-parse_char (const char **pp, const char *end, char c)
-{
- parse_space (pp, end);
-
- if (*pp == end || **pp != c)
- return false;
-
- (*pp)++;
- return true;
-}
-
-static bool
-parse_uint (const char **pp, const char *end, unsigned int *pv)
-{
- char buf[32];
- unsigned int len = MIN (ARRAY_LENGTH (buf) - 1, (unsigned int) (end - *pp));
- strncpy (buf, *pp, len);
- buf[len] = '\0';
-
- char *p = buf;
- char *pend = p;
- unsigned int v;
-
- /* Intentionally use strtol instead of strtoul, such that
- * -1 turns into "big number"... */
- errno = 0;
- v = strtol (p, &pend, 0);
- if (errno || p == pend)
- return false;
-
- *pv = v;
- *pp += pend - p;
- return true;
-}
-
-static bool
-parse_bool (const char **pp, const char *end, unsigned int *pv)
-{
- parse_space (pp, end);
-
- const char *p = *pp;
- while (*pp < end && ISALPHA(**pp))
- (*pp)++;
-
- /* CSS allows on/off as aliases 1/0. */
- if (*pp - p == 2 || 0 == strncmp (p, "on", 2))
- *pv = 1;
- else if (*pp - p == 3 || 0 == strncmp (p, "off", 2))
- *pv = 0;
- else
- return false;
-
- return true;
-}
-
-static bool
-parse_feature_value_prefix (const char **pp, const char *end, hb_feature_t *feature)
-{
- if (parse_char (pp, end, '-'))
- feature->value = 0;
- else {
- parse_char (pp, end, '+');
- feature->value = 1;
- }
-
- return true;
-}
-
-static bool
-parse_feature_tag (const char **pp, const char *end, hb_feature_t *feature)
-{
- parse_space (pp, end);
-
- char quote = 0;
-
- if (*pp < end && (**pp == '\'' || **pp == '"'))
- {
- quote = **pp;
- (*pp)++;
- }
-
- const char *p = *pp;
- while (*pp < end && ISALNUM(**pp))
- (*pp)++;
-
- if (p == *pp || *pp - p > 4)
- return false;
-
- feature->tag = hb_tag_from_string (p, *pp - p);
-
- if (quote)
- {
- /* CSS expects exactly four bytes. And we only allow quotations for
- * CSS compatibility. So, enforce the length. */
- if (*pp - p != 4)
- return false;
- if (*pp == end || **pp != quote)
- return false;
- (*pp)++;
- }
-
- return true;
-}
-
-static bool
-parse_feature_indices (const char **pp, const char *end, hb_feature_t *feature)
-{
- parse_space (pp, end);
-
- bool has_start;
-
- feature->start = 0;
- feature->end = (unsigned int) -1;
-
- if (!parse_char (pp, end, '['))
- return true;
-
- has_start = parse_uint (pp, end, &feature->start);
-
- if (parse_char (pp, end, ':')) {
- parse_uint (pp, end, &feature->end);
- } else {
- if (has_start)
- feature->end = feature->start + 1;
- }
-
- return parse_char (pp, end, ']');
-}
-
-static bool
-parse_feature_value_postfix (const char **pp, const char *end, hb_feature_t *feature)
-{
- bool had_equal = parse_char (pp, end, '=');
- bool had_value = parse_uint (pp, end, &feature->value) ||
- parse_bool (pp, end, &feature->value);
- /* CSS doesn't use equal-sign between tag and value.
- * If there was an equal-sign, then there *must* be a value.
- * A value without an eqaul-sign is ok, but not required. */
- return !had_equal || had_value;
-}
-
-
-static bool
-parse_one_feature (const char **pp, const char *end, hb_feature_t *feature)
-{
- return parse_feature_value_prefix (pp, end, feature) &&
- parse_feature_tag (pp, end, feature) &&
- parse_feature_indices (pp, end, feature) &&
- parse_feature_value_postfix (pp, end, feature) &&
- parse_space (pp, end) &&
- *pp == end;
-}
-
-/**
- * hb_feature_from_string:
- * @str: (array length=len) (element-type uint8_t): a string to parse
- * @len: length of @str, or -1 if string is %NULL terminated
- * @feature: (out): the #hb_feature_t to initialize with the parsed values
- *
- * Parses a string into a #hb_feature_t.
- *
- * TODO: document the syntax here.
- *
- * Return value:
- * %true if @str is successfully parsed, %false otherwise.
- *
- * Since: 0.9.5
- **/
-hb_bool_t
-hb_feature_from_string (const char *str, int len,
- hb_feature_t *feature)
-{
- hb_feature_t feat;
-
- if (len < 0)
- len = strlen (str);
-
- if (likely (parse_one_feature (&str, str + len, &feat)))
- {
- if (feature)
- *feature = feat;
- return true;
- }
-
- if (feature)
- memset (feature, 0, sizeof (*feature));
- return false;
-}
-
-/**
- * hb_feature_to_string:
- * @feature: an #hb_feature_t to convert
- * @buf: (array length=size) (out): output string
- * @size: the allocated size of @buf
- *
- * Converts a #hb_feature_t into a %NULL-terminated string in the format
- * understood by hb_feature_from_string(). The client in responsible for
- * allocating big enough size for @buf, 128 bytes is more than enough.
- *
- * Since: 0.9.5
- **/
-void
-hb_feature_to_string (hb_feature_t *feature,
- char *buf, unsigned int size)
-{
- if (unlikely (!size)) return;
-
- char s[128];
- unsigned int len = 0;
- if (feature->value == 0)
- s[len++] = '-';
- hb_tag_to_string (feature->tag, s + len);
- len += 4;
- while (len && s[len - 1] == ' ')
- len--;
- if (feature->start != 0 || feature->end != (unsigned int) -1)
- {
- s[len++] = '[';
- if (feature->start)
- len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->start));
- if (feature->end != feature->start + 1) {
- s[len++] = ':';
- if (feature->end != (unsigned int) -1)
- len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->end));
- }
- s[len++] = ']';
- }
- if (feature->value > 1)
- {
- s[len++] = '=';
- len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%u", feature->value));
- }
- assert (len < ARRAY_LENGTH (s));
- len = MIN (len, size - 1);
- memcpy (buf, s, len);
- buf[len] = '\0';
-}
-
-
static const char **static_shaper_list;
#ifdef HB_USE_ATEXIT
@@ -324,7 +76,7 @@ retry:
/* Not found; allocate one. */
shaper_list = (const char **) calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *));
if (unlikely (!shaper_list)) {
- static const char *nil_shaper_list[] = {NULL};
+ static const char *nil_shaper_list[] = {nullptr};
return nil_shaper_list;
}
@@ -332,9 +84,9 @@ retry:
unsigned int i;
for (i = 0; i < HB_SHAPERS_COUNT; i++)
shaper_list[i] = shapers[i].name;
- shaper_list[i] = NULL;
+ shaper_list[i] = nullptr;
- if (!hb_atomic_ptr_cmpexch (&static_shaper_list, NULL, shaper_list)) {
+ if (!hb_atomic_ptr_cmpexch (&static_shaper_list, nullptr, shaper_list)) {
free (shaper_list);
goto retry;
}
@@ -362,7 +114,7 @@ retry:
* shapers will be used in the given order, otherwise the default shapers list
* will be used.
*
- * Return value: %FALSE if all shapers failed, %TRUE otherwise
+ * Return value: false if all shapers failed, true otherwise
*
* Since: 0.9.2
**/
@@ -405,5 +157,5 @@ hb_shape (hb_font_t *font,
const hb_feature_t *features,
unsigned int num_features)
{
- hb_shape_full (font, buffer, features, num_features, NULL);
+ hb_shape_full (font, buffer, features, num_features, nullptr);
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-shape.h b/src/3rdparty/harfbuzz-ng/src/hb-shape.h
index 53bb845bf4..39507ff744 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-shape.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-shape.h
@@ -40,22 +40,6 @@
HB_BEGIN_DECLS
-typedef struct hb_feature_t {
- hb_tag_t tag;
- uint32_t value;
- unsigned int start;
- unsigned int end;
-} hb_feature_t;
-
-HB_EXTERN hb_bool_t
-hb_feature_from_string (const char *str, int len,
- hb_feature_t *feature);
-
-HB_EXTERN void
-hb_feature_to_string (hb_feature_t *feature,
- char *buf, unsigned int size);
-
-
HB_EXTERN void
hb_shape (hb_font_t *font,
hb_buffer_t *buffer,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-shaper-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-shaper-private.hh
index d1d1146dad..ce2d9f2839 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-shaper-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-shaper-private.hh
@@ -65,35 +65,51 @@ struct hb_shaper_data_t {
#define HB_SHAPER_DATA_INVALID ((void *) -1)
#define HB_SHAPER_DATA_IS_INVALID(data) ((void *) (data) == HB_SHAPER_DATA_INVALID)
-#define HB_SHAPER_DATA_TYPE(shaper, object) struct hb_##shaper##_shaper_##object##_data_t
+#define HB_SHAPER_DATA_TYPE_NAME(shaper, object) hb_##shaper##_shaper_##object##_data_t
+#define HB_SHAPER_DATA_TYPE(shaper, object) struct HB_SHAPER_DATA_TYPE_NAME(shaper, object)
#define HB_SHAPER_DATA_INSTANCE(shaper, object, instance) (* (HB_SHAPER_DATA_TYPE(shaper, object) **) &(instance)->shaper_data.shaper)
-#define HB_SHAPER_DATA(shaper, object) HB_SHAPER_DATA_INSTANCE (shaper, object, object)
+#define HB_SHAPER_DATA(shaper, object) HB_SHAPER_DATA_INSTANCE(shaper, object, object)
#define HB_SHAPER_DATA_CREATE_FUNC(shaper, object) _hb_##shaper##_shaper_##object##_data_create
#define HB_SHAPER_DATA_DESTROY_FUNC(shaper, object) _hb_##shaper##_shaper_##object##_data_destroy
+#define HB_SHAPER_DATA_ENSURE_FUNC(shaper, object) hb_##shaper##_shaper_##object##_data_ensure
#define HB_SHAPER_DATA_PROTOTYPE(shaper, object) \
HB_SHAPER_DATA_TYPE (shaper, object); /* Type forward declaration. */ \
extern "C" HB_INTERNAL HB_SHAPER_DATA_TYPE (shaper, object) * \
HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (hb_##object##_t *object HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS); \
extern "C" HB_INTERNAL void \
- HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (HB_SHAPER_DATA_TYPE (shaper, object) *data)
+ HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (HB_SHAPER_DATA_TYPE (shaper, object) *data); \
+ extern "C" HB_INTERNAL bool \
+ HB_SHAPER_DATA_ENSURE_FUNC (shaper, object) (hb_##object##_t *object)
#define HB_SHAPER_DATA_DESTROY(shaper, object) \
if (HB_SHAPER_DATA_TYPE (shaper, object) *data = HB_SHAPER_DATA (shaper, object)) \
if (data != HB_SHAPER_DATA_INVALID && data != HB_SHAPER_DATA_SUCCEEDED) \
HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data);
-#define HB_SHAPER_DATA_ENSURE_DECLARE(shaper, object) \
-static inline bool \
-hb_##shaper##_shaper_##object##_data_ensure (hb_##object##_t *object) \
+#define HB_SHAPER_DATA_ENSURE_DEFINE(shaper, object) \
+ HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, true)
+
+#define HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, condition) \
+bool \
+HB_SHAPER_DATA_ENSURE_FUNC(shaper, object) (hb_##object##_t *object) \
{\
retry: \
HB_SHAPER_DATA_TYPE (shaper, object) *data = (HB_SHAPER_DATA_TYPE (shaper, object) *) hb_atomic_ptr_get (&HB_SHAPER_DATA (shaper, object)); \
+ if (likely (data) && !(condition)) { \
+ /* Drop and recreate. */ \
+ /* If someone dropped it in the mean time, throw it away and don't touch it. \
+ * Otherwise, destruct it. */ \
+ if (hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), data, nullptr)) { \
+ HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); \
+ } \
+ goto retry; \
+ } \
if (unlikely (!data)) { \
data = HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (object); \
if (unlikely (!data)) \
data = (HB_SHAPER_DATA_TYPE (shaper, object) *) HB_SHAPER_DATA_INVALID; \
- if (!hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), NULL, data)) { \
+ if (!hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), nullptr, data)) { \
if (data && \
data != HB_SHAPER_DATA_INVALID && \
data != HB_SHAPER_DATA_SUCCEEDED) \
@@ -101,7 +117,7 @@ hb_##shaper##_shaper_##object##_data_ensure (hb_##object##_t *object) \
goto retry; \
} \
} \
- return data != NULL && !HB_SHAPER_DATA_IS_INVALID (data); \
+ return data != nullptr && !HB_SHAPER_DATA_IS_INVALID (data); \
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-shaper.cc b/src/3rdparty/harfbuzz-ng/src/hb-shaper.cc
index b25566d8a7..2c44cf2653 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-shaper.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-shaper.cc
@@ -59,14 +59,14 @@ retry:
{
char *env = getenv ("HB_SHAPER_LIST");
if (!env || !*env) {
- (void) hb_atomic_ptr_cmpexch (&static_shapers, NULL, &all_shapers[0]);
+ (void) hb_atomic_ptr_cmpexch (&static_shapers, nullptr, &all_shapers[0]);
return (const hb_shaper_pair_t *) all_shapers;
}
/* Not found; allocate one. */
shapers = (hb_shaper_pair_t *) calloc (1, sizeof (all_shapers));
if (unlikely (!shapers)) {
- (void) hb_atomic_ptr_cmpexch (&static_shapers, NULL, &all_shapers[0]);
+ (void) hb_atomic_ptr_cmpexch (&static_shapers, nullptr, &all_shapers[0]);
return (const hb_shaper_pair_t *) all_shapers;
}
@@ -97,7 +97,7 @@ retry:
p = end + 1;
}
- if (!hb_atomic_ptr_cmpexch (&static_shapers, NULL, shapers)) {
+ if (!hb_atomic_ptr_cmpexch (&static_shapers, nullptr, shapers)) {
free (shapers);
goto retry;
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-string-array.hh b/src/3rdparty/harfbuzz-ng/src/hb-string-array.hh
new file mode 100644
index 0000000000..ba829b0cf0
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-string-array.hh
@@ -0,0 +1,81 @@
+/*
+ * Copyright © 2017 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_STRING_ARRAY_HH
+#if 0 /* Make checks happy. */
+#define HB_STRING_ARRAY_HH
+#endif
+
+#include "hb-private.hh"
+
+/* Based on Bruno Haible's code in Appendix B of Ulrich Drepper's dsohowto.pdf:
+ * https://software.intel.com/sites/default/files/m/a/1/e/dsohowto.pdf */
+
+#define HB_STRING_ARRAY_TYPE_NAME HB_PASTE(HB_STRING_ARRAY_NAME, _msgstr_t)
+#define HB_STRING_ARRAY_POOL_NAME HB_PASTE(HB_STRING_ARRAY_NAME, _msgstr)
+#define HB_STRING_ARRAY_OFFS_NAME HB_PASTE(HB_STRING_ARRAY_NAME, _msgidx)
+
+static const union HB_STRING_ARRAY_TYPE_NAME {
+ struct {
+/* I like to avoid storing the nul-termination byte since we don't need it,
+ * but C++ does not allow that.
+ * https://stackoverflow.com/questions/28433862/why-initializer-string-for-array-of-chars-is-too-long-compiles-fine-in-c-not
+ */
+#define _S(s) char HB_PASTE (str, __LINE__)[sizeof (s)];
+#include HB_STRING_ARRAY_LIST
+#undef _S
+ } st;
+ char str[VAR];
+}
+HB_STRING_ARRAY_POOL_NAME =
+{
+ {
+#define _S(s) s,
+#include HB_STRING_ARRAY_LIST
+#undef _S
+ }
+};
+static const unsigned int HB_STRING_ARRAY_OFFS_NAME[] =
+{
+#define _S(s) offsetof (union HB_STRING_ARRAY_TYPE_NAME, st.HB_PASTE(str, __LINE__)),
+#include HB_STRING_ARRAY_LIST
+#undef _S
+ sizeof (HB_STRING_ARRAY_TYPE_NAME)
+};
+
+static inline hb_string_t
+HB_STRING_ARRAY_NAME (unsigned int i)
+{
+ assert (i < ARRAY_LENGTH (HB_STRING_ARRAY_OFFS_NAME) - 1);
+ return hb_string_t (HB_STRING_ARRAY_POOL_NAME.str + HB_STRING_ARRAY_OFFS_NAME[i],
+ HB_STRING_ARRAY_OFFS_NAME[i + 1] - HB_STRING_ARRAY_OFFS_NAME[i] - 1);
+}
+
+#undef HB_STRING_ARRAY_TYPE_NAME
+#undef HB_STRING_ARRAY_POOL_NAME
+#undef HB_STRING_ARRAY_OFFS_NAME
+
+#endif /* HB_STRING_ARRAY_HH */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh
index a4d118b6dc..82bb9a4ddc 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh
@@ -108,7 +108,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
/* XXX This hack belongs to the Myanmar shaper. */
if (unlikely (unicode == 0x1037u)) unicode = 0x103Au;
- /* XXX This hack belongs to the SEA shaper (for Tai Tham):
+ /* XXX This hack belongs to the USE shaper (for Tai Tham):
* Reorder SAKOT to ensure it comes after any tone marks. */
if (unlikely (unicode == 0x1A60u)) return 254;
@@ -126,7 +126,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
{
/* U+180B..180D MONGOLIAN FREE VARIATION SELECTORs are handled in the
* Arabic shaper. No need to match them here. */
- return unlikely (hb_in_ranges (unicode,
+ return unlikely (hb_in_ranges<hb_codepoint_t> (unicode,
0xFE00u, 0xFE0Fu, /* VARIATION SELECTOR-1..16 */
0xE0100u, 0xE01EFu)); /* VARIATION SELECTOR-17..256 */
}
@@ -137,6 +137,7 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* we do NOT want to hide them, as the way Uniscribe has implemented them
* is with regular spacing glyphs, and that's the way fonts are made to work.
* As such, we make exceptions for those four.
+ * Also ignoring U+1BCA0..1BCA3. https://github.com/harfbuzz/harfbuzz/issues/503
*
* Unicode 7.0:
* $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/'
@@ -179,13 +180,13 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
case 0x00: return unlikely (ch == 0x00ADu);
case 0x03: return unlikely (ch == 0x034Fu);
case 0x06: return unlikely (ch == 0x061Cu);
- case 0x17: return hb_in_range (ch, 0x17B4u, 0x17B5u);
- case 0x18: return hb_in_range (ch, 0x180Bu, 0x180Eu);
- case 0x20: return hb_in_ranges (ch, 0x200Bu, 0x200Fu,
+ case 0x17: return hb_in_range<hb_codepoint_t> (ch, 0x17B4u, 0x17B5u);
+ case 0x18: return hb_in_range<hb_codepoint_t> (ch, 0x180Bu, 0x180Eu);
+ case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200Bu, 0x200Fu,
0x202Au, 0x202Eu,
0x2060u, 0x206Fu);
- case 0xFE: return hb_in_range (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
- case 0xFF: return hb_in_range (ch, 0xFFF0u, 0xFFF8u);
+ case 0xFE: return hb_in_range<hb_codepoint_t> (ch, 0xFE00u, 0xFE0Fu) || ch == 0xFEFFu;
+ case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0u, 0xFFF8u);
default: return false;
}
}
@@ -193,9 +194,8 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
{
/* Other planes */
switch (plane) {
- case 0x01: return hb_in_ranges (ch, 0x1BCA0u, 0x1BCA3u,
- 0x1D173u, 0x1D17Au);
- case 0x0E: return hb_in_range (ch, 0xE0000u, 0xE0FFFu);
+ case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x1D173u, 0x1D17Au);
+ case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0xE0000u, 0xE0FFFu);
default: return false;
}
}
@@ -346,23 +346,24 @@ extern HB_INTERNAL const hb_unicode_funcs_t _hb_unicode_funcs_nil;
#define HB_MODIFIED_COMBINING_CLASS_CCC122 122 /* mai * */
/* Tibetan
- * Modify U+0F74 (ccc=132) to reorder before ccc=130 marks.
+ *
+ * In case of multiple vowel-signs, use u first (but after achung)
+ * this allows Dzongkha multi-vowel shortcuts to render correctly
*/
#define HB_MODIFIED_COMBINING_CLASS_CCC129 129 /* sign aa */
-#define HB_MODIFIED_COMBINING_CLASS_CCC130 130 /* sign i */
-#define HB_MODIFIED_COMBINING_CLASS_CCC132 128 /* sign u */
-
+#define HB_MODIFIED_COMBINING_CLASS_CCC130 132 /* sign i */
+#define HB_MODIFIED_COMBINING_CLASS_CCC132 131 /* sign u */
/* Misc */
#define HB_UNICODE_GENERAL_CATEGORY_IS_MARK(gen_cat) \
- (FLAG_SAFE (gen_cat) & \
+ (FLAG_UNSAFE (gen_cat) & \
(FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
FLAG (HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK) | \
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)))
#define HB_UNICODE_GENERAL_CATEGORY_IS_NON_ENCLOSING_MARK_OR_MODIFIER_SYMBOL(gen_cat) \
- (FLAG_SAFE (gen_cat) & \
+ (FLAG_UNSAFE (gen_cat) & \
(FLAG (HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK) | \
FLAG (HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) | \
FLAG (HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL)))
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-unicode.cc b/src/3rdparty/harfbuzz-ng/src/hb-unicode.cc
index d553a7172f..726baeb0f1 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-unicode.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-unicode.cc
@@ -188,7 +188,7 @@ hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
const hb_unicode_funcs_t _hb_unicode_funcs_nil = {
HB_OBJECT_HEADER_STATIC,
- NULL, /* parent */
+ nullptr, /* parent */
true, /* immutable */
{
#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil,
@@ -365,7 +365,7 @@ hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t *ufuncs, \
} else { \
ufuncs->func.name = ufuncs->parent->func.name; \
ufuncs->user_data.name = ufuncs->parent->user_data.name; \
- ufuncs->destroy.name = NULL; \
+ ufuncs->destroy.name = nullptr; \
} \
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-utf-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-utf-private.hh
index 74cf5d66a2..211eb4dc02 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-utf-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-utf-private.hh
@@ -48,7 +48,7 @@ struct hb_utf8_t
if (c > 0x7Fu)
{
- if (hb_in_range (c, 0xC2u, 0xDFu)) /* Two-byte */
+ if (hb_in_range<hb_codepoint_t> (c, 0xC2u, 0xDFu)) /* Two-byte */
{
unsigned int t1;
if (likely (text < end &&
@@ -60,7 +60,7 @@ struct hb_utf8_t
else
goto error;
}
- else if (hb_in_range (c, 0xE0u, 0xEFu)) /* Three-byte */
+ else if (hb_in_range<hb_codepoint_t> (c, 0xE0u, 0xEFu)) /* Three-byte */
{
unsigned int t1, t2;
if (likely (1 < end - text &&
@@ -68,14 +68,14 @@ struct hb_utf8_t
(t2 = text[1] - 0x80u) <= 0x3Fu))
{
c = ((c&0xFu)<<12) | (t1<<6) | t2;
- if (unlikely (c < 0x0800u || hb_in_range (c, 0xD800u, 0xDFFFu)))
+ if (unlikely (c < 0x0800u || hb_in_range<hb_codepoint_t> (c, 0xD800u, 0xDFFFu)))
goto error;
text += 2;
}
else
goto error;
}
- else if (hb_in_range (c, 0xF0u, 0xF4u)) /* Four-byte */
+ else if (hb_in_range<hb_codepoint_t> (c, 0xF0u, 0xF4u)) /* Four-byte */
{
unsigned int t1, t2, t3;
if (likely (2 < end - text &&
@@ -84,7 +84,7 @@ struct hb_utf8_t
(t3 = text[2] - 0x80u) <= 0x3Fu))
{
c = ((c&0x7u)<<18) | (t1<<12) | (t2<<6) | t3;
- if (unlikely (!hb_in_range (c, 0x10000u, 0x10FFFFu)))
+ if (unlikely (!hb_in_range<hb_codepoint_t> (c, 0x10000u, 0x10FFFFu)))
goto error;
text += 3;
}
@@ -140,7 +140,7 @@ struct hb_utf16_t
{
hb_codepoint_t c = *text++;
- if (likely (!hb_in_range (c, 0xD800u, 0xDFFFu)))
+ if (likely (!hb_in_range<hb_codepoint_t> (c, 0xD800u, 0xDFFFu)))
{
*unicode = c;
return text;
@@ -150,7 +150,7 @@ struct hb_utf16_t
{
/* High-surrogate in c */
hb_codepoint_t l = *text;
- if (likely (hb_in_range (l, 0xDC00u, 0xDFFFu)))
+ if (likely (hb_in_range<hb_codepoint_t> (l, 0xDC00u, 0xDFFFu)))
{
/* Low-surrogate in l */
*unicode = (c << 10) + l - ((0xD800u << 10) - 0x10000u + 0xDC00u);
@@ -172,7 +172,7 @@ struct hb_utf16_t
{
hb_codepoint_t c = *--text;
- if (likely (!hb_in_range (c, 0xD800u, 0xDFFFu)))
+ if (likely (!hb_in_range<hb_codepoint_t> (c, 0xD800u, 0xDFFFu)))
{
*unicode = c;
return text;
@@ -182,7 +182,7 @@ struct hb_utf16_t
{
/* Low-surrogate in c */
hb_codepoint_t h = text[-1];
- if (likely (hb_in_range (h, 0xD800u, 0xDBFFu)))
+ if (likely (hb_in_range<hb_codepoint_t> (h, 0xD800u, 0xDBFFu)))
{
/* High-surrogate in h */
*unicode = (h << 10) + c - ((0xD800u << 10) - 0x10000u + 0xDC00u);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-version.h b/src/3rdparty/harfbuzz-ng/src/hb-version.h
index 0cbe947062..fc81b66b40 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-version.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-version.h
@@ -37,10 +37,10 @@ HB_BEGIN_DECLS
#define HB_VERSION_MAJOR 1
-#define HB_VERSION_MINOR 4
-#define HB_VERSION_MICRO 1
+#define HB_VERSION_MINOR 7
+#define HB_VERSION_MICRO 4
-#define HB_VERSION_STRING "1.4.1"
+#define HB_VERSION_STRING "1.7.4"
#define HB_VERSION_ATLEAST(major,minor,micro) \
((major)*10000+(minor)*100+(micro) <= \
diff --git a/src/3rdparty/sqlite.pri b/src/3rdparty/sqlite.pri
index 91083f84c4..4f3326a817 100644
--- a/src/3rdparty/sqlite.pri
+++ b/src/3rdparty/sqlite.pri
@@ -4,6 +4,7 @@ DEFINES += SQLITE_ENABLE_COLUMN_METADATA SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_
qtConfig(posix_fallocate): DEFINES += HAVE_POSIX_FALLOCATE=1
winrt: DEFINES += SQLITE_OS_WINRT
qnx: DEFINES += _QNX_SOURCE
+!win32:!winrt:!winphone: DEFINES += HAVE_USLEEP=1
integrity: QMAKE_CFLAGS += -include qplatformdefs.h
INCLUDEPATH += $$PWD/sqlite
SOURCES += $$PWD/sqlite/sqlite3.c
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index ea5ba16b6f..73c69efbd5 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.20.1. By combining all the individual C code files into this
+** version 3.22.0. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@@ -209,6 +209,9 @@ static const char * const sqlite3azCompileOpt[] = {
#if SQLITE_ENABLE_ATOMIC_WRITE
"ENABLE_ATOMIC_WRITE",
#endif
+#if SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+ "ENABLE_BATCH_ATOMIC_WRITE",
+#endif
#if SQLITE_ENABLE_CEROD
"ENABLE_CEROD",
#endif
@@ -828,14 +831,6 @@ SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt){
#endif
/*
-** Make sure that rand_s() is available on Windows systems with MSVC 2005
-** or higher.
-*/
-#if defined(_MSC_VER) && _MSC_VER>=1400
-# define _CRT_RAND_S
-#endif
-
-/*
** Include the header file used to customize the compiler options for MSVC.
** This should be done first so that it can successfully prevent spurious
** compiler warnings due to subsequent content in this file and other files
@@ -1144,15 +1139,17 @@ extern "C" {
** a string which identifies a particular check-in of SQLite
** within its configuration management system. ^The SQLITE_SOURCE_ID
** string contains the date and time of the check-in (UTC) and a SHA1
-** or SHA3-256 hash of the entire source tree.
+** or SHA3-256 hash of the entire source tree. If the source code has
+** been edited in any way since it was last checked in, then the last
+** four hexadecimal digits of the hash may be modified.
**
** See also: [sqlite3_libversion()],
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.20.1"
-#define SQLITE_VERSION_NUMBER 3020001
-#define SQLITE_SOURCE_ID "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
+#define SQLITE_VERSION "3.22.0"
+#define SQLITE_VERSION_NUMBER 3022000
+#define SQLITE_SOURCE_ID "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -1168,7 +1165,7 @@ extern "C" {
**
** <blockquote><pre>
** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
-** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
+** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
** </pre></blockquote>)^
**
@@ -1178,9 +1175,11 @@ extern "C" {
** function is provided for use in DLLs since DLL users usually do not have
** direct access to string constants within the DLL. ^The
** sqlite3_libversion_number() function returns an integer equal to
-** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns
+** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns
** a pointer to a string constant whose value is the same as the
-** [SQLITE_SOURCE_ID] C preprocessor macro.
+** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built
+** using an edited copy of [the amalgamation], then the last four characters
+** of the hash might be different from [SQLITE_SOURCE_ID].)^
**
** See also: [sqlite_version()] and [sqlite_source_id()].
*/
@@ -1461,7 +1460,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_FULL 13 /* Insertion failed because database is full */
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
-#define SQLITE_EMPTY 16 /* Not used */
+#define SQLITE_EMPTY 16 /* Internal use only */
#define SQLITE_SCHEMA 17 /* The database schema changed */
#define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */
#define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */
@@ -1495,6 +1494,8 @@ SQLITE_API int sqlite3_exec(
** the most recent error can be obtained using
** [sqlite3_extended_errcode()].
*/
+#define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8))
+#define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8))
#define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8))
#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8))
#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8))
@@ -1523,6 +1524,9 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_IOERR_CONVPATH (SQLITE_IOERR | (26<<8))
#define SQLITE_IOERR_VNODE (SQLITE_IOERR | (27<<8))
#define SQLITE_IOERR_AUTH (SQLITE_IOERR | (28<<8))
+#define SQLITE_IOERR_BEGIN_ATOMIC (SQLITE_IOERR | (29<<8))
+#define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30<<8))
+#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8))
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
#define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2<<8))
@@ -1535,6 +1539,8 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
#define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4<<8))
+#define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5<<8))
+#define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6<<8))
#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
@@ -1609,6 +1615,11 @@ SQLITE_API int sqlite3_exec(
** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
** read-only media and cannot be changed even by processes with
** elevated privileges.
+**
+** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+** filesystem supports doing multiple write operations atomically when those
+** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
+** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
*/
#define SQLITE_IOCAP_ATOMIC 0x00000001
#define SQLITE_IOCAP_ATOMIC512 0x00000002
@@ -1624,6 +1635,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
#define SQLITE_IOCAP_IMMUTABLE 0x00002000
+#define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000
/*
** CAPI3REF: File Locking Levels
@@ -1758,6 +1770,7 @@ struct sqlite3_file {
** <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN]
** <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE]
** <li> [SQLITE_IOCAP_IMMUTABLE]
+** <li> [SQLITE_IOCAP_BATCH_ATOMIC]
** </ul>
**
** The SQLITE_IOCAP_ATOMIC property means that all writes of
@@ -2041,6 +2054,40 @@ struct sqlite3_io_methods {
** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by
** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for
** this opcode.
+**
+** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]]
+** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then
+** the file descriptor is placed in "batch write mode", which
+** means all subsequent write operations will be deferred and done
+** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]. Systems
+** that do not support batch atomic writes will return SQLITE_NOTFOUND.
+** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
+** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or
+** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make
+** no VFS interface calls on the same [sqlite3_file] file descriptor
+** except for calls to the xWrite method and the xFileControl method
+** with [SQLITE_FCNTL_SIZE_HINT].
+**
+** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically.
+** This file control returns [SQLITE_OK] if and only if the writes were
+** all performed successfully and have been committed to persistent storage.
+** ^Regardless of whether or not it is successful, this file control takes
+** the file descriptor out of batch write mode so that all subsequent
+** write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
+**
+** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back.
+** ^This file control takes the file descriptor out of batch write mode
+** so that all subsequent write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
** </ul>
*/
#define SQLITE_FCNTL_LOCKSTATE 1
@@ -2072,6 +2119,9 @@ struct sqlite3_io_methods {
#define SQLITE_FCNTL_JOURNAL_POINTER 28
#define SQLITE_FCNTL_WIN32_GET_HANDLE 29
#define SQLITE_FCNTL_PDB 30
+#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31
+#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32
+#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33
/* deprecated names */
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
@@ -2109,12 +2159,18 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
** in the name of the object stands for "virtual file system". See
** the [VFS | VFS documentation] for further information.
**
-** The value of the iVersion field is initially 1 but may be larger in
-** future versions of SQLite. Additional fields may be appended to this
-** object when the iVersion value is increased. Note that the structure
-** of the sqlite3_vfs object changes in the transaction between
-** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not
-** modified.
+** The VFS interface is sometimes extended by adding new methods onto
+** the end. Each time such an extension occurs, the iVersion field
+** is incremented. The iVersion value started out as 1 in
+** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2
+** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased
+** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields
+** may be appended to the sqlite3_vfs object and the iVersion value
+** may increase again in future versions of SQLite.
+** Note that the structure
+** of the sqlite3_vfs object changes in the transition from
+** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0]
+** and yet the iVersion field was not modified.
**
** The szOsFile field is the size of the subclassed [sqlite3_file]
** structure used by this VFS. mxPathname is the maximum length of
@@ -2642,6 +2698,16 @@ struct sqlite3_mem_methods {
** routines with a wrapper that simulations memory allocation failure or
** tracks memory usage, for example. </dd>
**
+** [[SQLITE_CONFIG_SMALL_MALLOC]] <dt>SQLITE_CONFIG_SMALL_MALLOC</dt>
+** <dd> ^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of
+** type int, interpreted as a boolean, which if true provides a hint to
+** SQLite that it should avoid large memory allocations if possible.
+** SQLite will run faster if it is free to make large memory allocations,
+** but some application might prefer to run slower in exchange for
+** guarantees about memory fragmentation that are possible if large
+** allocations are avoided. This hint is normally off.
+** </dd>
+**
** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
** interpreted as a boolean, which enables or disables the collection of
@@ -2659,25 +2725,7 @@ struct sqlite3_mem_methods {
** </dd>
**
** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
-** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
-** that SQLite can use for scratch memory. ^(There are three arguments
-** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
-** aligned memory buffer from which the scratch allocations will be
-** drawn, the size of each scratch allocation (sz),
-** and the maximum number of scratch allocations (N).)^
-** The first argument must be a pointer to an 8-byte aligned buffer
-** of at least sz*N bytes of memory.
-** ^SQLite will not use more than one scratch buffers per thread.
-** ^SQLite will never request a scratch buffer that is more than 6
-** times the database page size.
-** ^If SQLite needs needs additional
-** scratch memory beyond what is provided by this configuration option, then
-** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
-** ^When the application provides any amount of scratch memory using
-** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
-** [sqlite3_malloc|heap allocations].
-** This can help [Robson proof|prevent memory allocation failures] due to heap
-** fragmentation in low-memory embedded systems.
+** <dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
** </dd>
**
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
@@ -2713,8 +2761,7 @@ struct sqlite3_mem_methods {
** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
** that SQLite will use for all of its dynamic memory allocation needs
-** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and
-** [SQLITE_CONFIG_PAGECACHE].
+** beyond those provided for by [SQLITE_CONFIG_PAGECACHE].
** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
** [SQLITE_ERROR] if invoked otherwise.
@@ -2907,7 +2954,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_SERIALIZED 3 /* nil */
#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
-#define SQLITE_CONFIG_SCRATCH 6 /* void*, int sz, int N */
+#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */
#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
@@ -2928,6 +2975,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */
#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
+#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
/*
** CAPI3REF: Database Connection Configuration Options
@@ -3035,7 +3083,6 @@ struct sqlite3_mem_methods {
** into which is written 0 or 1 to indicate whether checkpoints-on-close
** have been disabled - 0 if they are not disabled, 1 if they are.
** </dd>
-**
** <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
** the [query planner stability guarantee] (QPSG). When the QPSG is active,
@@ -3046,7 +3093,16 @@ struct sqlite3_mem_methods {
** the QPSG active, SQLite will always use the same query plan in the field as
** was used during testing in the lab.
** </dd>
-**
+** <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
+** <dd> By default, the output of EXPLAIN QUERY PLAN commands does not
+** include output for any operations performed by trigger programs. This
+** option is used to set or clear (the default) a flag that governs this
+** behavior. The first parameter passed to this operation is an integer -
+** non-zero to enable output for trigger programs, or zero to disable it.
+** The second parameter is a pointer to an integer into which is written
+** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if
+** it is not disabled, 1 if it is.
+** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -3057,7 +3113,8 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
-
+#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1008 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
@@ -3918,8 +3975,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*,
** KEYWORDS: SQLITE_TRACE
**
** These constants identify classes of events that can be monitored
-** using the [sqlite3_trace_v2()] tracing logic. The third argument
-** to [sqlite3_trace_v2()] is an OR-ed combination of one or more of
+** using the [sqlite3_trace_v2()] tracing logic. The M argument
+** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of
** the following constants. ^The first argument to the trace callback
** is one of the following constants.
**
@@ -4128,10 +4185,10 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** ^If [URI filename] interpretation is enabled, and the filename argument
** begins with "file:", then the filename is interpreted as a URI. ^URI
** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
-** set in the fourth argument to sqlite3_open_v2(), or if it has
+** set in the third argument to sqlite3_open_v2(), or if it has
** been enabled globally using the [SQLITE_CONFIG_URI] option with the
** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
-** As of SQLite version 3.7.7, URI filename interpretation is turned off
+** URI filename interpretation is turned off
** by default, but future releases of SQLite might enable URI filename
** interpretation by default. See "[URI filenames]" for additional
** information.
@@ -4805,8 +4862,9 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
** implementation of [application-defined SQL functions] are protected.
** ^The sqlite3_value object returned by
** [sqlite3_column_value()] is unprotected.
-** Unprotected sqlite3_value objects may only be used with
-** [sqlite3_result_value()] and [sqlite3_bind_value()].
+** Unprotected sqlite3_value objects may only be used as arguments
+** to [sqlite3_result_value()], [sqlite3_bind_value()], and
+** [sqlite3_value_dup()].
** The [sqlite3_value_blob | sqlite3_value_type()] family of
** interfaces require protected sqlite3_value objects.
*/
@@ -5228,7 +5286,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
** other than [SQLITE_ROW] before any subsequent invocation of
** sqlite3_step(). Failure to reset the prepared statement using
** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
-** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1]),
+** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1],
** sqlite3_step() began
** calling [sqlite3_reset()] automatically in this circumstance rather
** than returning [SQLITE_MISUSE]. This is not considered a compatibility
@@ -5764,6 +5822,9 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** datatype of the value
** <tr><td><b>sqlite3_value_numeric_type&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>Best numeric datatype of the value
+** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
+** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
+** against a virtual table.
** </table></blockquote>
**
** <b>Details:</b>
@@ -5812,6 +5873,19 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** then the conversion is performed. Otherwise no conversion occurs.
** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
**
+** ^Within the [xUpdate] method of a [virtual table], the
+** sqlite3_value_nochange(X) interface returns true if and only if
+** the column corresponding to X is unchanged by the UPDATE operation
+** that the xUpdate method call was invoked to implement and if
+** and the prior [xColumn] method call that was invoked to extracted
+** the value for that column returned without setting a result (probably
+** because it queried [sqlite3_vtab_nochange()] and found that the column
+** was unchanging). ^Within an [xUpdate] method, any value for which
+** sqlite3_value_nochange(X) is true will in all other respects appear
+** to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other
+** than within an [xUpdate] method call for an UPDATE statement, then
+** the return value is arbitrary and meaningless.
+**
** Please pay particular attention to the fact that the pointer returned
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
@@ -5834,6 +5908,7 @@ SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
+SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
/*
** CAPI3REF: Finding The Subtype Of SQL Values
@@ -7232,15 +7307,20 @@ struct sqlite3_index_info {
** an operator that is part of a constraint term in the wHERE clause of
** a query that uses a [virtual table].
*/
-#define SQLITE_INDEX_CONSTRAINT_EQ 2
-#define SQLITE_INDEX_CONSTRAINT_GT 4
-#define SQLITE_INDEX_CONSTRAINT_LE 8
-#define SQLITE_INDEX_CONSTRAINT_LT 16
-#define SQLITE_INDEX_CONSTRAINT_GE 32
-#define SQLITE_INDEX_CONSTRAINT_MATCH 64
-#define SQLITE_INDEX_CONSTRAINT_LIKE 65
-#define SQLITE_INDEX_CONSTRAINT_GLOB 66
-#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_EQ 2
+#define SQLITE_INDEX_CONSTRAINT_GT 4
+#define SQLITE_INDEX_CONSTRAINT_LE 8
+#define SQLITE_INDEX_CONSTRAINT_LT 16
+#define SQLITE_INDEX_CONSTRAINT_GE 32
+#define SQLITE_INDEX_CONSTRAINT_MATCH 64
+#define SQLITE_INDEX_CONSTRAINT_LIKE 65
+#define SQLITE_INDEX_CONSTRAINT_GLOB 66
+#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_NE 68
+#define SQLITE_INDEX_CONSTRAINT_ISNOT 69
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70
+#define SQLITE_INDEX_CONSTRAINT_ISNULL 71
+#define SQLITE_INDEX_CONSTRAINT_IS 72
/*
** CAPI3REF: Register A Virtual Table Implementation
@@ -7931,9 +8011,9 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
** the xFileControl method. ^The return value of the xFileControl
** method becomes the return value of this routine.
**
-** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
+** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes
** a pointer to the underlying [sqlite3_file] object to be written into
-** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER
+** the space pointed to by the 4th parameter. ^The [SQLITE_FCNTL_FILE_POINTER]
** case is a short-circuit path which does not actually invoke the
** underlying sqlite3_io_methods.xFileControl method.
**
@@ -7945,7 +8025,7 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
** an incorrect zDbName and an SQLITE_ERROR return from the underlying
** xFileControl method.
**
-** See also: [SQLITE_FCNTL_LOCKSTATE]
+** See also: [file control opcodes]
*/
SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
@@ -7992,7 +8072,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_RESERVE 14
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
#define SQLITE_TESTCTRL_ISKEYWORD 16
-#define SQLITE_TESTCTRL_SCRATCHMALLOC 17
+#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
@@ -8002,7 +8082,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_ISINIT 23
#define SQLITE_TESTCTRL_SORTER_MMAP 24
#define SQLITE_TESTCTRL_IMPOSTER 25
-#define SQLITE_TESTCTRL_LAST 25
+#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
+#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */
/*
** CAPI3REF: SQLite Runtime Status
@@ -8051,8 +8132,7 @@ SQLITE_API int sqlite3_status64(
** <dd>This parameter is the current amount of memory checked out
** using [sqlite3_malloc()], either directly or indirectly. The
** figure includes calls made to [sqlite3_malloc()] by the application
-** and internal memory usage by the SQLite library. Scratch memory
-** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
+** and internal memory usage by the SQLite library. Auxiliary page-cache
** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
** this parameter. The amount returned is the sum of the allocation
** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
@@ -8090,29 +8170,14 @@ SQLITE_API int sqlite3_status64(
** *pHighwater parameter to [sqlite3_status()] is of interest.
** The value written into the *pCurrent parameter is undefined.</dd>)^
**
-** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
-** <dd>This parameter returns the number of allocations used out of the
-** [scratch memory allocator] configured using
-** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not
-** in bytes. Since a single thread may only have one scratch allocation
-** outstanding at time, this parameter also reports the number of threads
-** using scratch memory at the same time.</dd>)^
+** [[SQLITE_STATUS_SCRATCH_USED]] <dt>SQLITE_STATUS_SCRATCH_USED</dt>
+** <dd>No longer used.</dd>
**
** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
-** <dd>This parameter returns the number of bytes of scratch memory
-** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
-** buffer and where forced to overflow to [sqlite3_malloc()]. The values
-** returned include overflows because the requested allocation was too
-** larger (that is, because the requested allocation was larger than the
-** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
-** slots were available.
-** </dd>)^
-**
-** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
-** <dd>This parameter records the largest memory allocation request
-** handed to [scratch memory allocator]. Only the value returned in the
-** *pHighwater parameter to [sqlite3_status()] is of interest.
-** The value written into the *pCurrent parameter is undefined.</dd>)^
+** <dd>No longer used.</dd>
+**
+** [[SQLITE_STATUS_SCRATCH_SIZE]] <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
+** <dd>No longer used.</dd>
**
** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
** <dd>The *pHighwater parameter records the deepest parser stack.
@@ -8125,12 +8190,12 @@ SQLITE_API int sqlite3_status64(
#define SQLITE_STATUS_MEMORY_USED 0
#define SQLITE_STATUS_PAGECACHE_USED 1
#define SQLITE_STATUS_PAGECACHE_OVERFLOW 2
-#define SQLITE_STATUS_SCRATCH_USED 3
-#define SQLITE_STATUS_SCRATCH_OVERFLOW 4
+#define SQLITE_STATUS_SCRATCH_USED 3 /* NOT USED */
+#define SQLITE_STATUS_SCRATCH_OVERFLOW 4 /* NOT USED */
#define SQLITE_STATUS_MALLOC_SIZE 5
#define SQLITE_STATUS_PARSER_STACK 6
#define SQLITE_STATUS_PAGECACHE_SIZE 7
-#define SQLITE_STATUS_SCRATCH_SIZE 8
+#define SQLITE_STATUS_SCRATCH_SIZE 8 /* NOT USED */
#define SQLITE_STATUS_MALLOC_COUNT 9
/*
@@ -9273,6 +9338,40 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
/*
+** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE
+**
+** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn]
+** method of a [virtual table], then it returns true if and only if the
+** column is being fetched as part of an UPDATE operation during which the
+** column value will not change. Applications might use this to substitute
+** a lighter-weight value to return that the corresponding [xUpdate] method
+** understands as a "no-change" value.
+**
+** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that
+** the column is not changed by the UPDATE statement, they the xColumn
+** method can optionally return without setting a result, without calling
+** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces].
+** In that case, [sqlite3_value_nochange(X)] will return true for the
+** same column in the [xUpdate] method.
+*/
+SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*);
+
+/*
+** CAPI3REF: Determine The Collation For a Virtual Table Constraint
+**
+** This function may only be called from within a call to the [xBestIndex]
+** method of a [virtual table].
+**
+** The first argument must be the sqlite3_index_info object that is the
+** first parameter to the xBestIndex() method. The second argument must be
+** an index into the aConstraint[] array belonging to the sqlite3_index_info
+** structure passed to xBestIndex. This function returns a pointer to a buffer
+** containing the name of the collation sequence for the corresponding
+** constraint.
+*/
+SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
+
+/*
** CAPI3REF: Conflict resolution modes
** KEYWORDS: {conflict resolution mode}
**
@@ -9999,6 +10098,35 @@ SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect)
**
** SQLITE_OK is returned if the call completes without error. Or, if an error
** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned.
+**
+** <h3>Special sqlite_stat1 Handling</h3>
+**
+** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to
+** some of the rules above. In SQLite, the schema of sqlite_stat1 is:
+** <pre>
+** &nbsp; CREATE TABLE sqlite_stat1(tbl,idx,stat)
+** </pre>
+**
+** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are
+** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes
+** are recorded for rows for which (idx IS NULL) is true. However, for such
+** rows a zero-length blob (SQL value X'') is stored in the changeset or
+** patchset instead of a NULL value. This allows such changesets to be
+** manipulated by legacy implementations of sqlite3changeset_invert(),
+** concat() and similar.
+**
+** The sqlite3changeset_apply() function automatically converts the
+** zero-length blob back to a NULL value when updating the sqlite_stat1
+** table. However, if the application calls sqlite3changeset_new(),
+** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset
+** iterator directly (including on a changeset iterator passed to a
+** conflict-handler callback) then the X'' value is returned. The application
+** must translate X'' to NULL itself if required.
+**
+** Legacy (older than 3.22.0) versions of the sessions module cannot capture
+** changes made to the sqlite_stat1 table. Legacy versions of the
+** sqlite3changeset_apply() function silently ignore any modifications to the
+** sqlite_stat1 table that are part of a changeset or patchset.
*/
SQLITE_API int sqlite3session_attach(
sqlite3_session *pSession, /* Session object */
@@ -10227,8 +10355,8 @@ SQLITE_API int sqlite3session_diff(
*/
SQLITE_API int sqlite3session_patchset(
sqlite3_session *pSession, /* Session object */
- int *pnPatchset, /* OUT: Size of buffer at *ppChangeset */
- void **ppPatchset /* OUT: Buffer containing changeset */
+ int *pnPatchset, /* OUT: Size of buffer at *ppPatchset */
+ void **ppPatchset /* OUT: Buffer containing patchset */
);
/*
@@ -10995,12 +11123,12 @@ SQLITE_API int sqlite3changeset_apply(
**
** <table border=1 style="margin-left:8ex;margin-right:8ex">
** <tr><th>Streaming function<th>Non-streaming equivalent</th>
-** <tr><td>sqlite3changeset_apply_str<td>[sqlite3changeset_apply]
-** <tr><td>sqlite3changeset_concat_str<td>[sqlite3changeset_concat]
-** <tr><td>sqlite3changeset_invert_str<td>[sqlite3changeset_invert]
-** <tr><td>sqlite3changeset_start_str<td>[sqlite3changeset_start]
-** <tr><td>sqlite3session_changeset_str<td>[sqlite3session_changeset]
-** <tr><td>sqlite3session_patchset_str<td>[sqlite3session_patchset]
+** <tr><td>sqlite3changeset_apply_strm<td>[sqlite3changeset_apply]
+** <tr><td>sqlite3changeset_concat_strm<td>[sqlite3changeset_concat]
+** <tr><td>sqlite3changeset_invert_strm<td>[sqlite3changeset_invert]
+** <tr><td>sqlite3changeset_start_strm<td>[sqlite3changeset_start]
+** <tr><td>sqlite3session_changeset_strm<td>[sqlite3session_changeset]
+** <tr><td>sqlite3session_patchset_strm<td>[sqlite3session_patchset]
** </table>
**
** Non-streaming functions that accept changesets (or patchsets) as input
@@ -12221,6 +12349,21 @@ SQLITE_PRIVATE void sqlite3Coverage(int);
#endif
/*
+** Some conditionals are optimizations only. In other words, if the
+** conditionals are replaced with a constant 1 (true) or 0 (false) then
+** the correct answer is still obtained, though perhaps not as quickly.
+**
+** The following macros mark these optimizations conditionals.
+*/
+#if defined(SQLITE_MUTATION_TEST)
+# define OK_IF_ALWAYS_TRUE(X) (1)
+# define OK_IF_ALWAYS_FALSE(X) (0)
+#else
+# define OK_IF_ALWAYS_TRUE(X) (X)
+# define OK_IF_ALWAYS_FALSE(X) (X)
+#endif
+
+/*
** Some malloc failures are only possible if SQLITE_TEST_REALLOC_STRESS is
** defined. We need to defend against those failures when testing with
** SQLITE_TEST_REALLOC_STRESS, but we don't want the unreachable branches
@@ -12414,63 +12557,63 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_AS 24
#define TK_WITHOUT 25
#define TK_COMMA 26
-#define TK_ID 27
-#define TK_ABORT 28
-#define TK_ACTION 29
-#define TK_AFTER 30
-#define TK_ANALYZE 31
-#define TK_ASC 32
-#define TK_ATTACH 33
-#define TK_BEFORE 34
-#define TK_BY 35
-#define TK_CASCADE 36
-#define TK_CAST 37
-#define TK_COLUMNKW 38
-#define TK_CONFLICT 39
-#define TK_DATABASE 40
-#define TK_DESC 41
-#define TK_DETACH 42
-#define TK_EACH 43
-#define TK_FAIL 44
-#define TK_FOR 45
-#define TK_IGNORE 46
-#define TK_INITIALLY 47
-#define TK_INSTEAD 48
-#define TK_LIKE_KW 49
-#define TK_MATCH 50
-#define TK_NO 51
-#define TK_KEY 52
-#define TK_OF 53
-#define TK_OFFSET 54
-#define TK_PRAGMA 55
-#define TK_RAISE 56
-#define TK_RECURSIVE 57
-#define TK_REPLACE 58
-#define TK_RESTRICT 59
-#define TK_ROW 60
-#define TK_TRIGGER 61
-#define TK_VACUUM 62
-#define TK_VIEW 63
-#define TK_VIRTUAL 64
-#define TK_WITH 65
-#define TK_REINDEX 66
-#define TK_RENAME 67
-#define TK_CTIME_KW 68
-#define TK_ANY 69
-#define TK_OR 70
-#define TK_AND 71
-#define TK_IS 72
-#define TK_BETWEEN 73
-#define TK_IN 74
-#define TK_ISNULL 75
-#define TK_NOTNULL 76
-#define TK_NE 77
-#define TK_EQ 78
-#define TK_GT 79
-#define TK_LE 80
-#define TK_LT 81
-#define TK_GE 82
-#define TK_ESCAPE 83
+#define TK_ABORT 27
+#define TK_ACTION 28
+#define TK_AFTER 29
+#define TK_ANALYZE 30
+#define TK_ASC 31
+#define TK_ATTACH 32
+#define TK_BEFORE 33
+#define TK_BY 34
+#define TK_CASCADE 35
+#define TK_CAST 36
+#define TK_CONFLICT 37
+#define TK_DATABASE 38
+#define TK_DESC 39
+#define TK_DETACH 40
+#define TK_EACH 41
+#define TK_FAIL 42
+#define TK_OR 43
+#define TK_AND 44
+#define TK_IS 45
+#define TK_MATCH 46
+#define TK_LIKE_KW 47
+#define TK_BETWEEN 48
+#define TK_IN 49
+#define TK_ISNULL 50
+#define TK_NOTNULL 51
+#define TK_NE 52
+#define TK_EQ 53
+#define TK_GT 54
+#define TK_LE 55
+#define TK_LT 56
+#define TK_GE 57
+#define TK_ESCAPE 58
+#define TK_ID 59
+#define TK_COLUMNKW 60
+#define TK_FOR 61
+#define TK_IGNORE 62
+#define TK_INITIALLY 63
+#define TK_INSTEAD 64
+#define TK_NO 65
+#define TK_KEY 66
+#define TK_OF 67
+#define TK_OFFSET 68
+#define TK_PRAGMA 69
+#define TK_RAISE 70
+#define TK_RECURSIVE 71
+#define TK_REPLACE 72
+#define TK_RESTRICT 73
+#define TK_ROW 74
+#define TK_TRIGGER 75
+#define TK_VACUUM 76
+#define TK_VIEW 77
+#define TK_VIRTUAL 78
+#define TK_WITH 79
+#define TK_REINDEX 80
+#define TK_RENAME 81
+#define TK_CTIME_KW 82
+#define TK_ANY 83
#define TK_BITAND 84
#define TK_BITOR 85
#define TK_LSHIFT 86
@@ -12530,28 +12673,23 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define TK_INDEX 140
#define TK_ALTER 141
#define TK_ADD 142
-#define TK_TO_TEXT 143
-#define TK_TO_BLOB 144
-#define TK_TO_NUMERIC 145
-#define TK_TO_INT 146
-#define TK_TO_REAL 147
-#define TK_ISNOT 148
-#define TK_END_OF_FILE 149
-#define TK_UNCLOSED_STRING 150
-#define TK_FUNCTION 151
-#define TK_COLUMN 152
-#define TK_AGG_FUNCTION 153
-#define TK_AGG_COLUMN 154
-#define TK_UMINUS 155
-#define TK_UPLUS 156
-#define TK_REGISTER 157
-#define TK_VECTOR 158
-#define TK_SELECT_COLUMN 159
-#define TK_IF_NULL_ROW 160
-#define TK_ASTERISK 161
-#define TK_SPAN 162
-#define TK_SPACE 163
-#define TK_ILLEGAL 164
+#define TK_ISNOT 143
+#define TK_FUNCTION 144
+#define TK_COLUMN 145
+#define TK_AGG_FUNCTION 146
+#define TK_AGG_COLUMN 147
+#define TK_UMINUS 148
+#define TK_UPLUS 149
+#define TK_REGISTER 150
+#define TK_VECTOR 151
+#define TK_SELECT_COLUMN 152
+#define TK_IF_NULL_ROW 153
+#define TK_ASTERISK 154
+#define TK_SPAN 155
+#define TK_END_OF_FILE 156
+#define TK_UNCLOSED_STRING 157
+#define TK_SPACE 158
+#define TK_ILLEGAL 159
/* The token codes above must all fit in 8 bits */
#define TKFLG_MASK 0xff
@@ -12672,6 +12810,15 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#endif
/*
+** The compile-time options SQLITE_MMAP_READWRITE and
+** SQLITE_ENABLE_BATCH_ATOMIC_WRITE are not compatible with one another.
+** You must choose one or the other (or neither) but not both.
+*/
+#if defined(SQLITE_MMAP_READWRITE) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+#error Cannot use both SQLITE_MMAP_READWRITE and SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+#endif
+
+/*
** GCC does not define the offsetof() macro so we'll have to do it
** ourselves.
*/
@@ -12969,7 +13116,7 @@ typedef INT16_TYPE LogEst;
** SELECTTRACE_ENABLED will be either 1 or 0 depending on whether or not
** the Select query generator tracing logic is turned on.
*/
-#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_SELECTTRACE)
+#if defined(SQLITE_ENABLE_SELECTTRACE)
# define SELECTTRACE_ENABLED 1
#else
# define SELECTTRACE_ENABLED 0
@@ -13088,7 +13235,6 @@ typedef struct Db Db;
typedef struct Schema Schema;
typedef struct Expr Expr;
typedef struct ExprList ExprList;
-typedef struct ExprSpan ExprSpan;
typedef struct FKey FKey;
typedef struct FuncDestructor FuncDestructor;
typedef struct FuncDef FuncDef;
@@ -13373,6 +13519,7 @@ SQLITE_PRIVATE int sqlite3BtreeCursor(
struct KeyInfo*, /* First argument to compare function */
BtCursor *pCursor /* Space to write cursor structure */
);
+SQLITE_PRIVATE BtCursor *sqlite3BtreeFakeValidCursor(void);
SQLITE_PRIVATE int sqlite3BtreeCursorSize(void);
SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*);
SQLITE_PRIVATE void sqlite3BtreeCursorHintFlags(BtCursor*, unsigned);
@@ -13433,6 +13580,9 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int flags);
SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*);
SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int flags);
SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor*);
+#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
+SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor*);
+#endif
SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor*, u32 offset, u32 amt, void*);
SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor*, u32 *pAmt);
SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor*);
@@ -13646,6 +13796,7 @@ typedef struct VdbeOpList VdbeOpList;
#define P4_INT64 (-14) /* P4 is a 64-bit signed integer */
#define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */
#define P4_FUNCCTX (-16) /* P4 is a pointer to an sqlite3_context object */
+#define P4_DYNBLOB (-17) /* Pointer to memory from sqliteMalloc() */
/* Error message codes for OP_Halt */
#define P5_ConstraintNotNull 1
@@ -13691,87 +13842,87 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Savepoint 0
#define OP_AutoCommit 1
#define OP_Transaction 2
-#define OP_SorterNext 3
-#define OP_PrevIfOpen 4
-#define OP_NextIfOpen 5
-#define OP_Prev 6
-#define OP_Next 7
+#define OP_SorterNext 3 /* jump */
+#define OP_PrevIfOpen 4 /* jump */
+#define OP_NextIfOpen 5 /* jump */
+#define OP_Prev 6 /* jump */
+#define OP_Next 7 /* jump */
#define OP_Checkpoint 8
#define OP_JournalMode 9
#define OP_Vacuum 10
-#define OP_VFilter 11 /* synopsis: iplan=r[P3] zplan='P4' */
+#define OP_VFilter 11 /* jump, synopsis: iplan=r[P3] zplan='P4' */
#define OP_VUpdate 12 /* synopsis: data=r[P3@P2] */
-#define OP_Goto 13
-#define OP_Gosub 14
-#define OP_InitCoroutine 15
-#define OP_Yield 16
-#define OP_MustBeInt 17
-#define OP_Jump 18
+#define OP_Goto 13 /* jump */
+#define OP_Gosub 14 /* jump */
+#define OP_InitCoroutine 15 /* jump */
+#define OP_Yield 16 /* jump */
+#define OP_MustBeInt 17 /* jump */
+#define OP_Jump 18 /* jump */
#define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */
-#define OP_Once 20
-#define OP_If 21
-#define OP_IfNot 22
-#define OP_IfNullRow 23 /* synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
-#define OP_SeekLT 24 /* synopsis: key=r[P3@P4] */
-#define OP_SeekLE 25 /* synopsis: key=r[P3@P4] */
-#define OP_SeekGE 26 /* synopsis: key=r[P3@P4] */
-#define OP_SeekGT 27 /* synopsis: key=r[P3@P4] */
-#define OP_NoConflict 28 /* synopsis: key=r[P3@P4] */
-#define OP_NotFound 29 /* synopsis: key=r[P3@P4] */
-#define OP_Found 30 /* synopsis: key=r[P3@P4] */
-#define OP_SeekRowid 31 /* synopsis: intkey=r[P3] */
-#define OP_NotExists 32 /* synopsis: intkey=r[P3] */
-#define OP_Last 33
-#define OP_IfSmaller 34
-#define OP_SorterSort 35
-#define OP_Sort 36
-#define OP_Rewind 37
-#define OP_IdxLE 38 /* synopsis: key=r[P3@P4] */
-#define OP_IdxGT 39 /* synopsis: key=r[P3@P4] */
-#define OP_IdxLT 40 /* synopsis: key=r[P3@P4] */
-#define OP_IdxGE 41 /* synopsis: key=r[P3@P4] */
-#define OP_RowSetRead 42 /* synopsis: r[P3]=rowset(P1) */
-#define OP_RowSetTest 43 /* synopsis: if r[P3] in rowset(P1) goto P2 */
-#define OP_Program 44
-#define OP_FkIfZero 45 /* synopsis: if fkctr[P1]==0 goto P2 */
-#define OP_IfPos 46 /* synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
-#define OP_IfNotZero 47 /* synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
-#define OP_DecrJumpZero 48 /* synopsis: if (--r[P1])==0 goto P2 */
-#define OP_IncrVacuum 49
-#define OP_VNext 50
-#define OP_Init 51 /* synopsis: Start at P2 */
-#define OP_Return 52
-#define OP_EndCoroutine 53
-#define OP_HaltIfNull 54 /* synopsis: if r[P3]=null halt */
-#define OP_Halt 55
-#define OP_Integer 56 /* synopsis: r[P2]=P1 */
-#define OP_Int64 57 /* synopsis: r[P2]=P4 */
-#define OP_String 58 /* synopsis: r[P2]='P4' (len=P1) */
-#define OP_Null 59 /* synopsis: r[P2..P3]=NULL */
-#define OP_SoftNull 60 /* synopsis: r[P1]=NULL */
-#define OP_Blob 61 /* synopsis: r[P2]=P4 (len=P1) */
-#define OP_Variable 62 /* synopsis: r[P2]=parameter(P1,P4) */
-#define OP_Move 63 /* synopsis: r[P2@P3]=r[P1@P3] */
-#define OP_Copy 64 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */
-#define OP_SCopy 65 /* synopsis: r[P2]=r[P1] */
-#define OP_IntCopy 66 /* synopsis: r[P2]=r[P1] */
-#define OP_ResultRow 67 /* synopsis: output=r[P1@P2] */
-#define OP_CollSeq 68
-#define OP_AddImm 69 /* synopsis: r[P1]=r[P1]+P2 */
-#define OP_Or 70 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
-#define OP_And 71 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
-#define OP_RealAffinity 72
-#define OP_Cast 73 /* synopsis: affinity(r[P1]) */
-#define OP_Permutation 74
-#define OP_IsNull 75 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
-#define OP_NotNull 76 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
-#define OP_Ne 77 /* same as TK_NE, synopsis: IF r[P3]!=r[P1] */
-#define OP_Eq 78 /* same as TK_EQ, synopsis: IF r[P3]==r[P1] */
-#define OP_Gt 79 /* same as TK_GT, synopsis: IF r[P3]>r[P1] */
-#define OP_Le 80 /* same as TK_LE, synopsis: IF r[P3]<=r[P1] */
-#define OP_Lt 81 /* same as TK_LT, synopsis: IF r[P3]<r[P1] */
-#define OP_Ge 82 /* same as TK_GE, synopsis: IF r[P3]>=r[P1] */
-#define OP_ElseNotEq 83 /* same as TK_ESCAPE */
+#define OP_Once 20 /* jump */
+#define OP_If 21 /* jump */
+#define OP_IfNot 22 /* jump */
+#define OP_IfNullRow 23 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */
+#define OP_SeekLT 24 /* jump, synopsis: key=r[P3@P4] */
+#define OP_SeekLE 25 /* jump, synopsis: key=r[P3@P4] */
+#define OP_SeekGE 26 /* jump, synopsis: key=r[P3@P4] */
+#define OP_SeekGT 27 /* jump, synopsis: key=r[P3@P4] */
+#define OP_NoConflict 28 /* jump, synopsis: key=r[P3@P4] */
+#define OP_NotFound 29 /* jump, synopsis: key=r[P3@P4] */
+#define OP_Found 30 /* jump, synopsis: key=r[P3@P4] */
+#define OP_SeekRowid 31 /* jump, synopsis: intkey=r[P3] */
+#define OP_NotExists 32 /* jump, synopsis: intkey=r[P3] */
+#define OP_Last 33 /* jump */
+#define OP_IfSmaller 34 /* jump */
+#define OP_SorterSort 35 /* jump */
+#define OP_Sort 36 /* jump */
+#define OP_Rewind 37 /* jump */
+#define OP_IdxLE 38 /* jump, synopsis: key=r[P3@P4] */
+#define OP_IdxGT 39 /* jump, synopsis: key=r[P3@P4] */
+#define OP_IdxLT 40 /* jump, synopsis: key=r[P3@P4] */
+#define OP_IdxGE 41 /* jump, synopsis: key=r[P3@P4] */
+#define OP_RowSetRead 42 /* jump, synopsis: r[P3]=rowset(P1) */
+#define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
+#define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
+#define OP_RowSetTest 45 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */
+#define OP_Program 46 /* jump */
+#define OP_FkIfZero 47 /* jump, synopsis: if fkctr[P1]==0 goto P2 */
+#define OP_IfPos 48 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */
+#define OP_IfNotZero 49 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */
+#define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
+#define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
+#define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */
+#define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */
+#define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */
+#define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */
+#define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */
+#define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */
+#define OP_ElseNotEq 58 /* jump, same as TK_ESCAPE */
+#define OP_DecrJumpZero 59 /* jump, synopsis: if (--r[P1])==0 goto P2 */
+#define OP_IncrVacuum 60 /* jump */
+#define OP_VNext 61 /* jump */
+#define OP_Init 62 /* jump, synopsis: Start at P2 */
+#define OP_Return 63
+#define OP_EndCoroutine 64
+#define OP_HaltIfNull 65 /* synopsis: if r[P3]=null halt */
+#define OP_Halt 66
+#define OP_Integer 67 /* synopsis: r[P2]=P1 */
+#define OP_Int64 68 /* synopsis: r[P2]=P4 */
+#define OP_String 69 /* synopsis: r[P2]='P4' (len=P1) */
+#define OP_Null 70 /* synopsis: r[P2..P3]=NULL */
+#define OP_SoftNull 71 /* synopsis: r[P1]=NULL */
+#define OP_Blob 72 /* synopsis: r[P2]=P4 (len=P1) */
+#define OP_Variable 73 /* synopsis: r[P2]=parameter(P1,P4) */
+#define OP_Move 74 /* synopsis: r[P2@P3]=r[P1@P3] */
+#define OP_Copy 75 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */
+#define OP_SCopy 76 /* synopsis: r[P2]=r[P1] */
+#define OP_IntCopy 77 /* synopsis: r[P2]=r[P1] */
+#define OP_ResultRow 78 /* synopsis: output=r[P1@P2] */
+#define OP_CollSeq 79
+#define OP_AddImm 80 /* synopsis: r[P1]=r[P1]+P2 */
+#define OP_RealAffinity 81
+#define OP_Cast 82 /* synopsis: affinity(r[P1]) */
+#define OP_Permutation 83
#define OP_BitAnd 84 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
#define OP_BitOr 85 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
#define OP_ShiftLeft 86 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
@@ -13784,78 +13935,80 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Concat 93 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
#define OP_Compare 94 /* synopsis: r[P1@P3] <-> r[P2@P3] */
#define OP_BitNot 95 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */
-#define OP_Column 96 /* synopsis: r[P3]=PX */
+#define OP_Offset 96 /* synopsis: r[P3] = sqlite_offset(P1) */
#define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */
-#define OP_Affinity 98 /* synopsis: affinity(r[P1@P2]) */
-#define OP_MakeRecord 99 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
-#define OP_Count 100 /* synopsis: r[P2]=count() */
-#define OP_ReadCookie 101
-#define OP_SetCookie 102
-#define OP_ReopenIdx 103 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenRead 104 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenWrite 105 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenDup 106
-#define OP_OpenAutoindex 107 /* synopsis: nColumn=P2 */
-#define OP_OpenEphemeral 108 /* synopsis: nColumn=P2 */
-#define OP_SorterOpen 109
-#define OP_SequenceTest 110 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */
-#define OP_OpenPseudo 111 /* synopsis: P3 columns in r[P2] */
-#define OP_Close 112
-#define OP_ColumnsUsed 113
-#define OP_Sequence 114 /* synopsis: r[P2]=cursor[P1].ctr++ */
-#define OP_NewRowid 115 /* synopsis: r[P2]=rowid */
-#define OP_Insert 116 /* synopsis: intkey=r[P3] data=r[P2] */
-#define OP_InsertInt 117 /* synopsis: intkey=P3 data=r[P2] */
-#define OP_Delete 118
-#define OP_ResetCount 119
-#define OP_SorterCompare 120 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
-#define OP_SorterData 121 /* synopsis: r[P2]=data */
-#define OP_RowData 122 /* synopsis: r[P2]=data */
-#define OP_Rowid 123 /* synopsis: r[P2]=rowid */
-#define OP_NullRow 124
-#define OP_SorterInsert 125 /* synopsis: key=r[P2] */
-#define OP_IdxInsert 126 /* synopsis: key=r[P2] */
-#define OP_IdxDelete 127 /* synopsis: key=r[P2@P3] */
-#define OP_DeferredSeek 128 /* synopsis: Move P3 to P1.rowid if needed */
-#define OP_IdxRowid 129 /* synopsis: r[P2]=rowid */
-#define OP_Destroy 130
-#define OP_Clear 131
+#define OP_Column 98 /* synopsis: r[P3]=PX */
+#define OP_Affinity 99 /* synopsis: affinity(r[P1@P2]) */
+#define OP_MakeRecord 100 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
+#define OP_Count 101 /* synopsis: r[P2]=count() */
+#define OP_ReadCookie 102
+#define OP_SetCookie 103
+#define OP_ReopenIdx 104 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenRead 105 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenWrite 106 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenDup 107
+#define OP_OpenAutoindex 108 /* synopsis: nColumn=P2 */
+#define OP_OpenEphemeral 109 /* synopsis: nColumn=P2 */
+#define OP_SorterOpen 110
+#define OP_SequenceTest 111 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */
+#define OP_OpenPseudo 112 /* synopsis: P3 columns in r[P2] */
+#define OP_Close 113
+#define OP_ColumnsUsed 114
+#define OP_Sequence 115 /* synopsis: r[P2]=cursor[P1].ctr++ */
+#define OP_NewRowid 116 /* synopsis: r[P2]=rowid */
+#define OP_Insert 117 /* synopsis: intkey=r[P3] data=r[P2] */
+#define OP_InsertInt 118 /* synopsis: intkey=P3 data=r[P2] */
+#define OP_Delete 119
+#define OP_ResetCount 120
+#define OP_SorterCompare 121 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
+#define OP_SorterData 122 /* synopsis: r[P2]=data */
+#define OP_RowData 123 /* synopsis: r[P2]=data */
+#define OP_Rowid 124 /* synopsis: r[P2]=rowid */
+#define OP_NullRow 125
+#define OP_SeekEnd 126
+#define OP_SorterInsert 127 /* synopsis: key=r[P2] */
+#define OP_IdxInsert 128 /* synopsis: key=r[P2] */
+#define OP_IdxDelete 129 /* synopsis: key=r[P2@P3] */
+#define OP_DeferredSeek 130 /* synopsis: Move P3 to P1.rowid if needed */
+#define OP_IdxRowid 131 /* synopsis: r[P2]=rowid */
#define OP_Real 132 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
-#define OP_ResetSorter 133
-#define OP_CreateIndex 134 /* synopsis: r[P2]=root iDb=P1 */
-#define OP_CreateTable 135 /* synopsis: r[P2]=root iDb=P1 */
-#define OP_SqlExec 136
-#define OP_ParseSchema 137
-#define OP_LoadAnalysis 138
-#define OP_DropTable 139
-#define OP_DropIndex 140
-#define OP_DropTrigger 141
-#define OP_IntegrityCk 142
-#define OP_RowSetAdd 143 /* synopsis: rowset(P1)=r[P2] */
-#define OP_Param 144
-#define OP_FkCounter 145 /* synopsis: fkctr[P1]+=P2 */
-#define OP_MemMax 146 /* synopsis: r[P1]=max(r[P1],r[P2]) */
-#define OP_OffsetLimit 147 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */
-#define OP_AggStep0 148 /* synopsis: accum=r[P3] step(r[P2@P5]) */
-#define OP_AggStep 149 /* synopsis: accum=r[P3] step(r[P2@P5]) */
-#define OP_AggFinal 150 /* synopsis: accum=r[P1] N=P2 */
-#define OP_Expire 151
-#define OP_TableLock 152 /* synopsis: iDb=P1 root=P2 write=P3 */
-#define OP_VBegin 153
-#define OP_VCreate 154
-#define OP_VDestroy 155
-#define OP_VOpen 156
-#define OP_VColumn 157 /* synopsis: r[P3]=vcolumn(P2) */
-#define OP_VRename 158
-#define OP_Pagecount 159
-#define OP_MaxPgcnt 160
-#define OP_PureFunc0 161
-#define OP_Function0 162 /* synopsis: r[P3]=func(r[P2@P5]) */
-#define OP_PureFunc 163
-#define OP_Function 164 /* synopsis: r[P3]=func(r[P2@P5]) */
-#define OP_CursorHint 165
-#define OP_Noop 166
-#define OP_Explain 167
+#define OP_Destroy 133
+#define OP_Clear 134
+#define OP_ResetSorter 135
+#define OP_CreateBtree 136 /* synopsis: r[P2]=root iDb=P1 flags=P3 */
+#define OP_SqlExec 137
+#define OP_ParseSchema 138
+#define OP_LoadAnalysis 139
+#define OP_DropTable 140
+#define OP_DropIndex 141
+#define OP_DropTrigger 142
+#define OP_IntegrityCk 143
+#define OP_RowSetAdd 144 /* synopsis: rowset(P1)=r[P2] */
+#define OP_Param 145
+#define OP_FkCounter 146 /* synopsis: fkctr[P1]+=P2 */
+#define OP_MemMax 147 /* synopsis: r[P1]=max(r[P1],r[P2]) */
+#define OP_OffsetLimit 148 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */
+#define OP_AggStep0 149 /* synopsis: accum=r[P3] step(r[P2@P5]) */
+#define OP_AggStep 150 /* synopsis: accum=r[P3] step(r[P2@P5]) */
+#define OP_AggFinal 151 /* synopsis: accum=r[P1] N=P2 */
+#define OP_Expire 152
+#define OP_TableLock 153 /* synopsis: iDb=P1 root=P2 write=P3 */
+#define OP_VBegin 154
+#define OP_VCreate 155
+#define OP_VDestroy 156
+#define OP_VOpen 157
+#define OP_VColumn 158 /* synopsis: r[P3]=vcolumn(P2) */
+#define OP_VRename 159
+#define OP_Pagecount 160
+#define OP_MaxPgcnt 161
+#define OP_PureFunc0 162
+#define OP_Function0 163 /* synopsis: r[P3]=func(r[P2@P5]) */
+#define OP_PureFunc 164
+#define OP_Function 165 /* synopsis: r[P3]=func(r[P2@P5]) */
+#define OP_Trace 166
+#define OP_CursorHint 167
+#define OP_Noop 168
+#define OP_Explain 169
/* Properties such as "out2" or "jump" that are specified in
** comments following the "case" for each opcode in the vdbe.c
@@ -13873,23 +14026,23 @@ typedef struct VdbeOpList VdbeOpList;
/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x03, 0x03, 0x01,\
/* 24 */ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\
/* 32 */ 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
-/* 40 */ 0x01, 0x01, 0x23, 0x0b, 0x01, 0x01, 0x03, 0x03,\
-/* 48 */ 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08, 0x00,\
-/* 56 */ 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00,\
-/* 64 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x02, 0x26, 0x26,\
-/* 72 */ 0x02, 0x02, 0x00, 0x03, 0x03, 0x0b, 0x0b, 0x0b,\
-/* 80 */ 0x0b, 0x0b, 0x0b, 0x01, 0x26, 0x26, 0x26, 0x26,\
+/* 40 */ 0x01, 0x01, 0x23, 0x26, 0x26, 0x0b, 0x01, 0x01,\
+/* 48 */ 0x03, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
+/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x01, 0x01, 0x01, 0x02,\
+/* 64 */ 0x02, 0x08, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00,\
+/* 72 */ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\
+/* 80 */ 0x02, 0x02, 0x02, 0x00, 0x26, 0x26, 0x26, 0x26,\
/* 88 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00, 0x12,\
-/* 96 */ 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\
+/* 96 */ 0x20, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,\
/* 104 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
-/* 112 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,\
-/* 120 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x04, 0x00,\
-/* 128 */ 0x00, 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10,\
-/* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,\
-/* 144 */ 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00,\
-/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\
-/* 160 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
-}
+/* 112 */ 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00,\
+/* 120 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04,\
+/* 128 */ 0x04, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00,\
+/* 136 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 144 */ 0x06, 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00, 0x00,\
+/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 160 */ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 168 */ 0x00, 0x00,}
/* The sqlite3P2Values() routine is able to run faster if it knows
** the value of the largest JUMP opcode. The smaller the maximum
@@ -13897,7 +14050,7 @@ typedef struct VdbeOpList VdbeOpList;
** generated this include file strives to group all JUMP opcodes
** together near the beginning of the list.
*/
-#define SQLITE_MX_JUMP_OPCODE 83 /* Maximum JUMP opcode */
+#define SQLITE_MX_JUMP_OPCODE 62 /* Maximum JUMP opcode */
/************** End of opcodes.h *********************************************/
/************** Continuing where we left off in vdbe.h ***********************/
@@ -14215,6 +14368,7 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
SQLITE_PRIVATE void sqlite3PagerRef(DbPage*);
SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*);
SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage*);
+SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage*);
/* Operations on page references. */
SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*);
@@ -14351,6 +14505,8 @@ struct PgHdr {
i16 nRef; /* Number of users of this page */
PgHdr *pDirtyNext; /* Next element in list of dirty pages */
PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */
+ /* NB: pDirtyNext and pDirtyPrev are undefined if the
+ ** PgHdr object is not dirty */
};
/* Bit values for PgHdr.flags */
@@ -14732,10 +14888,12 @@ SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file*,int,void*);
#define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0
SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id);
SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id);
+#ifndef SQLITE_OMIT_WAL
SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **);
SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int);
SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id);
SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int);
+#endif /* SQLITE_OMIT_WAL */
SQLITE_PRIVATE int sqlite3OsFetch(sqlite3_file *id, i64, int, void **);
SQLITE_PRIVATE int sqlite3OsUnfetch(sqlite3_file *, i64, void *);
@@ -14944,6 +15102,7 @@ struct Schema {
#define DB_SchemaLoaded 0x0001 /* The schema has been loaded */
#define DB_UnresetViews 0x0002 /* Some views have defined column names */
#define DB_Empty 0x0004 /* The file is empty (length 0 bytes) */
+#define DB_ResetWanted 0x0008 /* Reset the schema when nSchemaLock==0 */
/*
** The number of different kinds of things that can be limited
@@ -14975,9 +15134,9 @@ struct Lookaside {
u32 bDisable; /* Only operate the lookaside when zero */
u16 sz; /* Size of each buffer in bytes */
u8 bMalloced; /* True if pStart obtained from sqlite3_malloc() */
- int nOut; /* Number of buffers currently checked out */
- int mxOut; /* Highwater mark for nOut */
- int anStat[3]; /* 0: hits. 1: size misses. 2: full misses */
+ u32 nSlot; /* Number of lookaside slots allocated */
+ u32 anStat[3]; /* 0: hits. 1: size misses. 2: full misses */
+ LookasideSlot *pInit; /* List of buffers not previously used */
LookasideSlot *pFree; /* List of available buffers */
void *pStart; /* First byte of available memory space */
void *pEnd; /* First byte past end of available space */
@@ -15056,9 +15215,11 @@ struct sqlite3 {
sqlite3_mutex *mutex; /* Connection mutex */
Db *aDb; /* All backends */
int nDb; /* Number of backends currently in use */
- int flags; /* Miscellaneous flags. See below */
+ u32 mDbFlags; /* flags recording internal state */
+ u32 flags; /* flags settable by pragmas. See below */
i64 lastRowid; /* ROWID of most recent insert (see above) */
i64 szMmap; /* Default mmap_size setting */
+ u32 nSchemaLock; /* Do not reset the schema when non-zero */
unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */
int errCode; /* Most recent error code (SQLITE_*) */
int errMask; /* & result codes with this before returning */
@@ -15141,7 +15302,7 @@ struct sqlite3 {
Hash aModule; /* populated by sqlite3_create_module() */
VtabCtx *pVtabCtx; /* Context for active vtab connect/create */
VTable **aVTrans; /* Virtual tables with open transactions */
- VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */
+ VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */
#endif
Hash aFunc; /* Hash table of connection functions */
Hash aCollSeq; /* All collating sequences */
@@ -15210,18 +15371,15 @@ struct sqlite3 {
#define SQLITE_ForeignKeys 0x00004000 /* Enforce foreign key constraints */
#define SQLITE_AutoIndex 0x00008000 /* Enable automatic indexes */
#define SQLITE_LoadExtension 0x00010000 /* Enable load_extension */
-#define SQLITE_EnableTrigger 0x00020000 /* True to enable triggers */
-#define SQLITE_DeferFKs 0x00040000 /* Defer all FK constraints */
-#define SQLITE_QueryOnly 0x00080000 /* Disable database changes */
-#define SQLITE_CellSizeCk 0x00100000 /* Check btree cell sizes on load */
-#define SQLITE_Fts3Tokenizer 0x00200000 /* Enable fts3_tokenizer(2) */
-#define SQLITE_EnableQPSG 0x00400000 /* Query Planner Stability Guarantee */
-/* The next four values are not used by PRAGMAs or by sqlite3_dbconfig() and
-** could be factored out into a separate bit vector of the sqlite3 object. */
-#define SQLITE_InternChanges 0x00800000 /* Uncommitted Hash table changes */
-#define SQLITE_LoadExtFunc 0x01000000 /* Enable load_extension() SQL func */
-#define SQLITE_PreferBuiltin 0x02000000 /* Preference to built-in funcs */
-#define SQLITE_Vacuum 0x04000000 /* Currently in a VACUUM */
+#define SQLITE_LoadExtFunc 0x00020000 /* Enable load_extension() SQL func */
+#define SQLITE_EnableTrigger 0x00040000 /* True to enable triggers */
+#define SQLITE_DeferFKs 0x00080000 /* Defer all FK constraints */
+#define SQLITE_QueryOnly 0x00100000 /* Disable database changes */
+#define SQLITE_CellSizeCk 0x00200000 /* Check btree cell sizes on load */
+#define SQLITE_Fts3Tokenizer 0x00400000 /* Enable fts3_tokenizer(2) */
+#define SQLITE_EnableQPSG 0x00800000 /* Query Planner Stability Guarantee*/
+#define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */
+
/* Flags used only if debugging */
#ifdef SQLITE_DEBUG
#define SQLITE_SqlTrace 0x08000000 /* Debug print SQL as it executes */
@@ -15231,6 +15389,12 @@ struct sqlite3 {
#define SQLITE_VdbeEQP 0x80000000 /* Debug EXPLAIN QUERY PLAN */
#endif
+/*
+** Allowed values for sqlite3.mDbFlags
+*/
+#define DBFLAG_SchemaChange 0x0001 /* Uncommitted Hash table changes */
+#define DBFLAG_PreferBuiltin 0x0002 /* Preference to built-in funcs */
+#define DBFLAG_Vacuum 0x0004 /* Currently in a VACUUM */
/*
** Bits of the sqlite3.dbOptFlags field that are used by the
@@ -15241,16 +15405,15 @@ struct sqlite3 {
#define SQLITE_ColumnCache 0x0002 /* Column cache */
#define SQLITE_GroupByOrder 0x0004 /* GROUPBY cover of ORDERBY */
#define SQLITE_FactorOutConst 0x0008 /* Constant factoring */
-/* not used 0x0010 // Was: SQLITE_IdxRealAsInt */
-#define SQLITE_DistinctOpt 0x0020 /* DISTINCT using indexes */
-#define SQLITE_CoverIdxScan 0x0040 /* Covering index scans */
-#define SQLITE_OrderByIdxJoin 0x0080 /* ORDER BY of joins via index */
-#define SQLITE_SubqCoroutine 0x0100 /* Evaluate subqueries as coroutines */
-#define SQLITE_Transitive 0x0200 /* Transitive constraints */
-#define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */
+#define SQLITE_DistinctOpt 0x0010 /* DISTINCT using indexes */
+#define SQLITE_CoverIdxScan 0x0020 /* Covering index scans */
+#define SQLITE_OrderByIdxJoin 0x0040 /* ORDER BY of joins via index */
+#define SQLITE_Transitive 0x0080 /* Transitive constraints */
+#define SQLITE_OmitNoopJoin 0x0100 /* Omit unused tables in joins */
+#define SQLITE_CountOfView 0x0200 /* The count-of-view optimization */
+#define SQLITE_CursorHints 0x0400 /* Add OP_CursorHint opcodes */
#define SQLITE_Stat34 0x0800 /* Use STAT3 or STAT4 data */
-#define SQLITE_CountOfView 0x1000 /* The count-of-view optimization */
-#define SQLITE_CursorHints 0x2000 /* Add OP_CursorHint opcodes */
+ /* TH3 expects the Stat34 ^^^^^^ value to be 0x0800. Don't change it */
#define SQLITE_AllOpts 0xffff /* All optimizations */
/*
@@ -15349,6 +15512,7 @@ struct FuncDestructor {
#define SQLITE_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a
** single query - might change over time */
#define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */
+#define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */
/*
** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
@@ -15781,8 +15945,8 @@ struct FKey {
struct KeyInfo {
u32 nRef; /* Number of references to this KeyInfo object */
u8 enc; /* Text encoding - one of the SQLITE_UTF* values */
- u16 nField; /* Number of key columns in the index */
- u16 nXField; /* Number of columns beyond the key columns */
+ u16 nKeyField; /* Number of key columns in the index */
+ u16 nAllField; /* Total columns, including key plus others */
sqlite3 *db; /* The database connection */
u8 *aSortOrder; /* Sort order for each column. */
CollSeq *aColl[1]; /* Collating sequence for each term of the key */
@@ -15829,8 +15993,8 @@ struct UnpackedRecord {
u16 nField; /* Number of entries in apMem[] */
i8 default_rc; /* Comparison result if keys are equal */
u8 errCode; /* Error detected by xRecordCompare (CORRUPT or NOMEM) */
- i8 r1; /* Value to return if (lhs > rhs) */
- i8 r2; /* Value to return if (rhs < lhs) */
+ i8 r1; /* Value to return if (lhs < rhs) */
+ i8 r2; /* Value to return if (lhs > rhs) */
u8 eqSeen; /* True if an equality comparison has been seen */
};
@@ -15893,6 +16057,7 @@ struct Index {
unsigned isCovering:1; /* True if this is a covering index */
unsigned noSkipScan:1; /* Do not try to use skip-scan if true */
unsigned hasStat1:1; /* aiRowLogEst values come from sqlite_stat1 */
+ unsigned bNoQuery:1; /* Do not use this index to optimize queries */
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
int nSample; /* Number of elements in aSample[] */
int nSampleCol; /* Size of IndexSample.anEq[] and so on */
@@ -16114,7 +16279,8 @@ struct Expr {
** TK_COLUMN: the value of p5 for OP_Column
** TK_AGG_FUNCTION: nesting depth */
AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
- Table *pTab; /* Table for TK_COLUMN expressions. */
+ Table *pTab; /* Table for TK_COLUMN expressions. Can be NULL
+ ** for a column of an index on an expression */
};
/*
@@ -16122,7 +16288,7 @@ struct Expr {
*/
#define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */
#define EP_Agg 0x000002 /* Contains one or more aggregate functions */
- /* 0x000004 // available for use */
+#define EP_HasFunc 0x000004 /* Contains one or more functions of any kind */
/* 0x000008 // available for use */
#define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */
#define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */
@@ -16146,9 +16312,10 @@ struct Expr {
#define EP_Leaf 0x800000 /* Expr.pLeft, .pRight, .u.pSelect all NULL */
/*
-** Combinations of two or more EP_* flags
+** The EP_Propagate mask is a set of properties that automatically propagate
+** upwards into parent nodes.
*/
-#define EP_Propagate (EP_Collate|EP_Subquery) /* Propagate these bits up tree */
+#define EP_Propagate (EP_Collate|EP_Subquery|EP_HasFunc)
/*
** These macros can be used to test, set, or clear bits in the
@@ -16202,7 +16369,6 @@ struct Expr {
*/
struct ExprList {
int nExpr; /* Number of expressions on the list */
- int nAlloc; /* Number of a[] slots allocated */
struct ExprList_item { /* For each expression in the list */
Expr *pExpr; /* The parse tree for this expression */
char *zName; /* Token associated with this expression */
@@ -16222,17 +16388,6 @@ struct ExprList {
};
/*
-** An instance of this structure is used by the parser to record both
-** the parse tree for an expression and the span of input text for an
-** expression.
-*/
-struct ExprSpan {
- Expr *pExpr; /* The expression parse tree */
- const char *zStart; /* First character of input text */
- const char *zEnd; /* One character past the end of input text */
-};
-
-/*
** An instance of this structure can hold a simple list of identifiers,
** such as the list "a,b,c" in the following statements:
**
@@ -16429,6 +16584,7 @@ struct NameContext {
#define NC_IdxExpr 0x0020 /* True if resolving columns of CREATE INDEX */
#define NC_VarSelect 0x0040 /* A correlated subquery has been seen */
#define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */
+#define NC_Complex 0x2000 /* True if a function or subquery seen */
/*
** An instance of the following structure contains all information
@@ -16468,7 +16624,6 @@ struct Select {
Select *pPrior; /* Prior select in a compound select statement */
Select *pNext; /* Next select to the left in a compound */
Expr *pLimit; /* LIMIT expression. NULL means not used. */
- Expr *pOffset; /* OFFSET expression. NULL means not used. */
With *pWith; /* WITH clause attached to this select. Or NULL. */
};
@@ -16499,6 +16654,7 @@ struct Select {
#define SF_MaybeConvert 0x08000 /* Need convertCompoundSelectToSubquery() */
#define SF_Converted 0x10000 /* By convertCompoundSelectToSubquery() */
#define SF_IncludeHidden 0x20000 /* Include hidden columns in output */
+#define SF_ComplexResult 0x40000 /* Result set contains subquery or function */
/*
@@ -16703,7 +16859,7 @@ struct Parse {
int nMem; /* Number of memory cells used so far */
int nOpAlloc; /* Number of slots allocated for Vdbe.aOp[] */
int szOpAlloc; /* Bytes of memory space allocated for Vdbe.aOp[] */
- int iSelfTab; /* Table for associated with an index on expr, or negative
+ int iSelfTab; /* Table associated with an index on expr, or negative
** of the base register during check-constraint eval */
int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
int iCacheCnt; /* Counter used to generate aColCache[].lru values */
@@ -16727,7 +16883,7 @@ struct Parse {
AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */
Parse *pToplevel; /* Parse structure for main program (or NULL) */
Table *pTriggerTab; /* Table triggers are being coded for */
- int addrCrTab; /* Address of OP_CreateTable opcode on CREATE TABLE */
+ int addrCrTab; /* Address of OP_CreateBtree opcode on CREATE TABLE */
u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */
u32 oldmask; /* Mask of old.* columns referenced */
u32 newmask; /* Mask of new.* columns referenced */
@@ -16844,6 +17000,7 @@ struct AuthContext {
#define OPFLAG_PERMUTE 0x01 /* OP_Compare: use the permutation */
#define OPFLAG_SAVEPOSITION 0x02 /* OP_Delete/Insert: save cursor pos */
#define OPFLAG_AUXDELETE 0x04 /* OP_Delete: index in a DELETE op */
+#define OPFLAG_NOCHNG_MAGIC 0x6d /* OP_MakeRecord: serialtype 10 is ok */
/*
* Each trigger present in the database schema is stored as an instance of
@@ -16931,6 +17088,7 @@ struct TriggerStep {
Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */
ExprList *pExprList; /* SET clause for UPDATE. */
IdList *pIdList; /* Column names for INSERT */
+ char *zSpan; /* Original SQL text of this command */
TriggerStep *pNext; /* Next in the link-list */
TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */
};
@@ -16956,11 +17114,10 @@ struct DbFixer {
*/
struct StrAccum {
sqlite3 *db; /* Optional database for lookaside. Can be NULL */
- char *zBase; /* A base allocation. Not from malloc. */
char *zText; /* The string collected so far */
- u32 nChar; /* Length of the string so far */
u32 nAlloc; /* Amount of space allocated in zText */
u32 mxAlloc; /* Maximum allowed allocation. 0 for no malloc usage */
+ u32 nChar; /* Length of the string so far */
u8 accError; /* STRACCUM_NOMEM or STRACCUM_TOOBIG */
u8 printfFlags; /* SQLITE_PRINTF flags below */
};
@@ -16995,6 +17152,7 @@ struct Sqlite3Config {
int bFullMutex; /* True to enable full mutexing */
int bOpenUri; /* True to interpret filenames as URIs */
int bUseCis; /* Use covering indices for full-scans */
+ int bSmallMalloc; /* Avoid large memory allocations if true */
int mxStrlen; /* Maximum string length */
int neverCorrupt; /* Database is always well-formed */
int szLookaside; /* Default lookaside buffer size */
@@ -17008,9 +17166,6 @@ struct Sqlite3Config {
int mnReq, mxReq; /* Min and max heap requests sizes */
sqlite3_int64 szMmap; /* mmap() space per open file */
sqlite3_int64 mxMmap; /* Maximum value for szMmap */
- void *pScratch; /* Scratch memory */
- int szScratch; /* Size of each scratch buffer */
- int nScratch; /* Number of scratch buffers */
void *pPage; /* Page cache memory */
int szPage; /* Size of each page in pPage[] */
int nPage; /* Number of pages in pPage[] */
@@ -17097,6 +17252,7 @@ SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*);
SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*);
SQLITE_PRIVATE int sqlite3ExprWalkNoop(Walker*, Expr*);
SQLITE_PRIVATE int sqlite3SelectWalkNoop(Walker*, Select*);
+SQLITE_PRIVATE int sqlite3SelectWalkFail(Walker*, Select*);
#ifdef SQLITE_DEBUG
SQLITE_PRIVATE void sqlite3SelectWalkAssert2(Walker*, Select*);
#endif
@@ -17152,6 +17308,7 @@ struct TreeView {
** using sqlite3_log(). The routines also provide a convenient place
** to set a debugger breakpoint.
*/
+SQLITE_PRIVATE int sqlite3ReportError(int iErr, int lineno, const char *zType);
SQLITE_PRIVATE int sqlite3CorruptError(int);
SQLITE_PRIVATE int sqlite3MisuseError(int);
SQLITE_PRIVATE int sqlite3CantopenError(int);
@@ -17242,6 +17399,7 @@ SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, u64);
SQLITE_PRIVATE void *sqlite3DbMallocRawNN(sqlite3*, u64);
SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*);
SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, u64);
+SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3*,const char*,const char*);
SQLITE_PRIVATE void *sqlite3Realloc(void*, u64);
SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64);
SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64);
@@ -17249,8 +17407,6 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*);
SQLITE_PRIVATE int sqlite3MallocSize(void*);
SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*);
-SQLITE_PRIVATE void *sqlite3ScratchMalloc(int);
-SQLITE_PRIVATE void sqlite3ScratchFree(void*);
SQLITE_PRIVATE void *sqlite3PageMalloc(int);
SQLITE_PRIVATE void sqlite3PageFree(void*);
SQLITE_PRIVATE void sqlite3MemSetDefault(void);
@@ -17306,11 +17462,18 @@ SQLITE_PRIVATE sqlite3_int64 sqlite3StatusValue(int);
SQLITE_PRIVATE void sqlite3StatusUp(int, int);
SQLITE_PRIVATE void sqlite3StatusDown(int, int);
SQLITE_PRIVATE void sqlite3StatusHighwater(int, int);
+SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3*,int*);
/* Access to mutexes used by sqlite3_status() */
SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void);
SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void);
+#if defined(SQLITE_ENABLE_MULTITHREADED_CHECKS) && !defined(SQLITE_MUTEX_OMIT)
+SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex*);
+#else
+# define sqlite3MutexWarnOnContention(x)
+#endif
+
#ifndef SQLITE_OMIT_FLOATING_POINT
SQLITE_PRIVATE int sqlite3IsNaN(double);
#else
@@ -17375,7 +17538,7 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*);
SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int);
SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int);
-SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*);
+SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,const char*,const char*);
SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*);
SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList*);
SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**);
@@ -17405,7 +17568,7 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*,Token*);
SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int);
SQLITE_PRIVATE void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*);
-SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*);
+SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,Expr*,const char*,const char*);
SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*);
SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,u8,Select*);
SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*,
@@ -17477,16 +17640,16 @@ SQLITE_PRIVATE void sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,i
SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int);
SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*);
SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
- Expr*,ExprList*,u32,Expr*,Expr*);
+ Expr*,ExprList*,u32,Expr*);
SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
-SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,Expr*,char*);
+SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,char*);
#endif
-SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
-SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
+SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*, ExprList*, Expr*);
+SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*,Expr*,int,ExprList*,Expr*);
SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int);
SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
SQLITE_PRIVATE LogEst sqlite3WhereOutputRowCount(WhereInfo*);
@@ -17610,7 +17773,7 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*);
SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int);
#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
-SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
+SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, ExprList*,Expr*,int);
#endif
#ifndef SQLITE_OMIT_TRIGGER
@@ -17626,11 +17789,14 @@ SQLITE_PRIVATE void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, i
SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
-SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*);
+SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*,
+ const char*,const char*);
SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
- Select*,u8);
-SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8);
-SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*);
+ Select*,u8,const char*,const char*);
+SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8,
+ const char*,const char*);
+SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*,
+ const char*,const char*);
SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3*, Trigger*);
SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
SQLITE_PRIVATE u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int);
@@ -17742,6 +17908,8 @@ SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
+SQLITE_PRIVATE CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, Expr *pExpr);
+SQLITE_PRIVATE int sqlite3ExprCollSeqMatch(Parse*,Expr*,Expr*);
SQLITE_PRIVATE Expr *sqlite3ExprAddCollateToken(Parse *pParse, Expr*, const Token*, int);
SQLITE_PRIVATE Expr *sqlite3ExprAddCollateString(Parse*,Expr*,const char*);
SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr*);
@@ -18025,7 +18193,8 @@ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, u32, int*, int*);
SQLITE_PRIVATE int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *);
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *);
#endif
@@ -18057,6 +18226,9 @@ SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db);
#ifdef SQLITE_DEBUG
SQLITE_PRIVATE void sqlite3ParserTrace(FILE*, char *);
#endif
+#if defined(YYCOVERAGE)
+SQLITE_PRIVATE int sqlite3ParserCoverage(FILE*);
+#endif
/*
** If the SQLITE_ENABLE IOTRACE exists then the global variable
@@ -18111,8 +18283,7 @@ SQLITE_PRIVATE int sqlite3MemdebugNoType(void*,u8);
#endif
#define MEMTYPE_HEAP 0x01 /* General heap allocations */
#define MEMTYPE_LOOKASIDE 0x02 /* Heap that might have been lookaside */
-#define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */
-#define MEMTYPE_PCACHE 0x08 /* Page cache allocations */
+#define MEMTYPE_PCACHE 0x04 /* Page cache allocations */
/*
** Threading interface
@@ -18122,6 +18293,9 @@ SQLITE_PRIVATE int sqlite3ThreadCreate(SQLiteThread**,void*(*)(void*),void*);
SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread*, void**);
#endif
+#if defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)
+SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3*);
+#endif
#if defined(SQLITE_ENABLE_DBSTAT_VTAB) || defined(SQLITE_TEST)
SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3*);
#endif
@@ -18341,6 +18515,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
SQLITE_THREADSAFE==1, /* bFullMutex */
SQLITE_USE_URI, /* bOpenUri */
SQLITE_ALLOW_COVERING_INDEX_SCAN, /* bUseCis */
+ 0, /* bSmallMalloc */
0x7ffffffe, /* mxStrlen */
0, /* neverCorrupt */
SQLITE_DEFAULT_LOOKASIDE, /* szLookaside, nLookaside */
@@ -18353,9 +18528,6 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
0, 0, /* mnHeap, mxHeap */
SQLITE_DEFAULT_MMAP_SIZE, /* szMmap */
SQLITE_MAX_MMAP_SIZE, /* mxMmap */
- (void*)0, /* pScratch */
- 0, /* szScratch */
- 0, /* nScratch */
(void*)0, /* pPage */
0, /* szPage */
SQLITE_DEFAULT_PCACHE_INITSZ, /* nPage */
@@ -18557,18 +18729,18 @@ struct VdbeCursor {
u32 cacheStatus; /* Cache is valid if this matches Vdbe.cacheCtr */
int seekResult; /* Result of previous sqlite3BtreeMoveto() or 0
** if there have been no prior seeks on the cursor. */
- /* NB: seekResult does not distinguish between "no seeks have ever occurred
- ** on this cursor" and "the most recent seek was an exact match". */
+ /* seekResult does not distinguish between "no seeks have ever occurred
+ ** on this cursor" and "the most recent seek was an exact match".
+ ** For CURTYPE_PSEUDO, seekResult is the register holding the record */
/* When a new VdbeCursor is allocated, only the fields above are zeroed.
** The fields that follow are uninitialized, and must be individually
** initialized prior to first use. */
VdbeCursor *pAltCursor; /* Associated index cursor from which to read */
union {
- BtCursor *pCursor; /* CURTYPE_BTREE. Btree cursor */
- sqlite3_vtab_cursor *pVCur; /* CURTYPE_VTAB. Vtab cursor */
- int pseudoTableReg; /* CURTYPE_PSEUDO. Reg holding content. */
- VdbeSorter *pSorter; /* CURTYPE_SORTER. Sorter object */
+ BtCursor *pCursor; /* CURTYPE_BTREE or _PSEUDO. Btree cursor */
+ sqlite3_vtab_cursor *pVCur; /* CURTYPE_VTAB. Vtab cursor */
+ VdbeSorter *pSorter; /* CURTYPE_SORTER. Sorter object */
} uc;
KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
u32 iHdrOffset; /* Offset to next unparsed byte of the header */
@@ -18685,6 +18857,8 @@ struct sqlite3_value {
** If the MEM_Null flag is set, then the value is an SQL NULL value.
** For a pointer type created using sqlite3_bind_pointer() or
** sqlite3_result_pointer() the MEM_Term and MEM_Subtype flags are also set.
+** If both MEM_Null and MEM_Zero are set, that means that the value is
+** an unchanging column value from VColumn.
**
** If the MEM_Str flag is set then Mem.z points at a string representation.
** Usually this is encoded in the same unicode encoding as the main
@@ -19126,7 +19300,6 @@ SQLITE_PRIVATE void sqlite3StatusHighwater(int op, int X){
: sqlite3MallocMutex()) );
assert( op==SQLITE_STATUS_MALLOC_SIZE
|| op==SQLITE_STATUS_PAGECACHE_SIZE
- || op==SQLITE_STATUS_SCRATCH_SIZE
|| op==SQLITE_STATUS_PARSER_STACK );
if( newValue>wsdStat.mxValue[op] ){
wsdStat.mxValue[op] = newValue;
@@ -19176,6 +19349,28 @@ SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetF
}
/*
+** Return the number of LookasideSlot elements on the linked list
+*/
+static u32 countLookasideSlots(LookasideSlot *p){
+ u32 cnt = 0;
+ while( p ){
+ p = p->pNext;
+ cnt++;
+ }
+ return cnt;
+}
+
+/*
+** Count the number of slots of lookaside memory that are outstanding
+*/
+SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3 *db, int *pHighwater){
+ u32 nInit = countLookasideSlots(db->lookaside.pInit);
+ u32 nFree = countLookasideSlots(db->lookaside.pFree);
+ if( pHighwater ) *pHighwater = db->lookaside.nSlot - nInit;
+ return db->lookaside.nSlot - (nInit+nFree);
+}
+
+/*
** Query status information for a single database connection
*/
SQLITE_API int sqlite3_db_status(
@@ -19194,10 +19389,15 @@ SQLITE_API int sqlite3_db_status(
sqlite3_mutex_enter(db->mutex);
switch( op ){
case SQLITE_DBSTATUS_LOOKASIDE_USED: {
- *pCurrent = db->lookaside.nOut;
- *pHighwater = db->lookaside.mxOut;
+ *pCurrent = sqlite3LookasideUsed(db, pHighwater);
if( resetFlag ){
- db->lookaside.mxOut = db->lookaside.nOut;
+ LookasideSlot *p = db->lookaside.pFree;
+ if( p ){
+ while( p->pNext ) p = p->pNext;
+ p->pNext = db->lookaside.pInit;
+ db->lookaside.pInit = db->lookaside.pFree;
+ db->lookaside.pFree = 0;
+ }
}
break;
}
@@ -19397,7 +19597,7 @@ SQLITE_API int sqlite3_db_status(
**
** Jean Meeus
** Astronomical Algorithms, 2nd Edition, 1998
-** ISBM 0-943396-61-1
+** ISBN 0-943396-61-1
** Willmann-Bell, Inc
** Richmond, Virginia (USA)
*/
@@ -20708,7 +20908,7 @@ SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
}
SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
DO_OS_MALLOC_TEST(id);
- return id->pMethods->xSync(id, flags);
+ return flags ? id->pMethods->xSync(id, flags) : SQLITE_OK;
}
SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
DO_OS_MALLOC_TEST(id);
@@ -20763,6 +20963,7 @@ SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
return id->pMethods->xDeviceCharacteristics(id);
}
+#ifndef SQLITE_OMIT_WAL
SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){
return id->pMethods->xShmLock(id, offset, n, flags);
}
@@ -20782,6 +20983,7 @@ SQLITE_PRIVATE int sqlite3OsShmMap(
DO_OS_MALLOC_TEST(id);
return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp);
}
+#endif /* SQLITE_OMIT_WAL */
#if SQLITE_MAX_MMAP_SIZE>0
/* The real implementation of xFetch and xUnfetch */
@@ -23300,6 +23502,193 @@ static SQLITE_WSD int mutexIsInit = 0;
#ifndef SQLITE_MUTEX_OMIT
+
+#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS
+/*
+** This block (enclosed by SQLITE_ENABLE_MULTITHREADED_CHECKS) contains
+** the implementation of a wrapper around the system default mutex
+** implementation (sqlite3DefaultMutex()).
+**
+** Most calls are passed directly through to the underlying default
+** mutex implementation. Except, if a mutex is configured by calling
+** sqlite3MutexWarnOnContention() on it, then if contention is ever
+** encountered within xMutexEnter() a warning is emitted via sqlite3_log().
+**
+** This type of mutex is used as the database handle mutex when testing
+** apps that usually use SQLITE_CONFIG_MULTITHREAD mode.
+*/
+
+/*
+** Type for all mutexes used when SQLITE_ENABLE_MULTITHREADED_CHECKS
+** is defined. Variable CheckMutex.mutex is a pointer to the real mutex
+** allocated by the system mutex implementation. Variable iType is usually set
+** to the type of mutex requested - SQLITE_MUTEX_RECURSIVE, SQLITE_MUTEX_FAST
+** or one of the static mutex identifiers. Or, if this is a recursive mutex
+** that has been configured using sqlite3MutexWarnOnContention(), it is
+** set to SQLITE_MUTEX_WARNONCONTENTION.
+*/
+typedef struct CheckMutex CheckMutex;
+struct CheckMutex {
+ int iType;
+ sqlite3_mutex *mutex;
+};
+
+#define SQLITE_MUTEX_WARNONCONTENTION (-1)
+
+/*
+** Pointer to real mutex methods object used by the CheckMutex
+** implementation. Set by checkMutexInit().
+*/
+static SQLITE_WSD const sqlite3_mutex_methods *pGlobalMutexMethods;
+
+#ifdef SQLITE_DEBUG
+static int checkMutexHeld(sqlite3_mutex *p){
+ return pGlobalMutexMethods->xMutexHeld(((CheckMutex*)p)->mutex);
+}
+static int checkMutexNotheld(sqlite3_mutex *p){
+ return pGlobalMutexMethods->xMutexNotheld(((CheckMutex*)p)->mutex);
+}
+#endif
+
+/*
+** Initialize and deinitialize the mutex subsystem.
+*/
+static int checkMutexInit(void){
+ pGlobalMutexMethods = sqlite3DefaultMutex();
+ return SQLITE_OK;
+}
+static int checkMutexEnd(void){
+ pGlobalMutexMethods = 0;
+ return SQLITE_OK;
+}
+
+/*
+** Allocate a mutex.
+*/
+static sqlite3_mutex *checkMutexAlloc(int iType){
+ static CheckMutex staticMutexes[] = {
+ {2, 0}, {3, 0}, {4, 0}, {5, 0},
+ {6, 0}, {7, 0}, {8, 0}, {9, 0},
+ {10, 0}, {11, 0}, {12, 0}, {13, 0}
+ };
+ CheckMutex *p = 0;
+
+ assert( SQLITE_MUTEX_RECURSIVE==1 && SQLITE_MUTEX_FAST==0 );
+ if( iType<2 ){
+ p = sqlite3MallocZero(sizeof(CheckMutex));
+ if( p==0 ) return 0;
+ p->iType = iType;
+ }else{
+#ifdef SQLITE_ENABLE_API_ARMOR
+ if( iType-2>=ArraySize(staticMutexes) ){
+ (void)SQLITE_MISUSE_BKPT;
+ return 0;
+ }
+#endif
+ p = &staticMutexes[iType-2];
+ }
+
+ if( p->mutex==0 ){
+ p->mutex = pGlobalMutexMethods->xMutexAlloc(iType);
+ if( p->mutex==0 ){
+ if( iType<2 ){
+ sqlite3_free(p);
+ }
+ p = 0;
+ }
+ }
+
+ return (sqlite3_mutex*)p;
+}
+
+/*
+** Free a mutex.
+*/
+static void checkMutexFree(sqlite3_mutex *p){
+ assert( SQLITE_MUTEX_RECURSIVE<2 );
+ assert( SQLITE_MUTEX_FAST<2 );
+ assert( SQLITE_MUTEX_WARNONCONTENTION<2 );
+
+#if SQLITE_ENABLE_API_ARMOR
+ if( ((CheckMutex*)p)->iType<2 )
+#endif
+ {
+ CheckMutex *pCheck = (CheckMutex*)p;
+ pGlobalMutexMethods->xMutexFree(pCheck->mutex);
+ sqlite3_free(pCheck);
+ }
+#ifdef SQLITE_ENABLE_API_ARMOR
+ else{
+ (void)SQLITE_MISUSE_BKPT;
+ }
+#endif
+}
+
+/*
+** Enter the mutex.
+*/
+static void checkMutexEnter(sqlite3_mutex *p){
+ CheckMutex *pCheck = (CheckMutex*)p;
+ if( pCheck->iType==SQLITE_MUTEX_WARNONCONTENTION ){
+ if( SQLITE_OK==pGlobalMutexMethods->xMutexTry(pCheck->mutex) ){
+ return;
+ }
+ sqlite3_log(SQLITE_MISUSE,
+ "illegal multi-threaded access to database connection"
+ );
+ }
+ pGlobalMutexMethods->xMutexEnter(pCheck->mutex);
+}
+
+/*
+** Enter the mutex (do not block).
+*/
+static int checkMutexTry(sqlite3_mutex *p){
+ CheckMutex *pCheck = (CheckMutex*)p;
+ return pGlobalMutexMethods->xMutexTry(pCheck->mutex);
+}
+
+/*
+** Leave the mutex.
+*/
+static void checkMutexLeave(sqlite3_mutex *p){
+ CheckMutex *pCheck = (CheckMutex*)p;
+ pGlobalMutexMethods->xMutexLeave(pCheck->mutex);
+}
+
+sqlite3_mutex_methods const *multiThreadedCheckMutex(void){
+ static const sqlite3_mutex_methods sMutex = {
+ checkMutexInit,
+ checkMutexEnd,
+ checkMutexAlloc,
+ checkMutexFree,
+ checkMutexEnter,
+ checkMutexTry,
+ checkMutexLeave,
+#ifdef SQLITE_DEBUG
+ checkMutexHeld,
+ checkMutexNotheld
+#else
+ 0,
+ 0
+#endif
+ };
+ return &sMutex;
+}
+
+/*
+** Mark the SQLITE_MUTEX_RECURSIVE mutex passed as the only argument as
+** one on which there should be no contention.
+*/
+SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex *p){
+ if( sqlite3GlobalConfig.mutex.xMutexAlloc==checkMutexAlloc ){
+ CheckMutex *pCheck = (CheckMutex*)p;
+ assert( pCheck->iType==SQLITE_MUTEX_RECURSIVE );
+ pCheck->iType = SQLITE_MUTEX_WARNONCONTENTION;
+ }
+}
+#endif /* ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS */
+
/*
** Initialize the mutex system.
*/
@@ -23315,7 +23704,11 @@ SQLITE_PRIVATE int sqlite3MutexInit(void){
sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex;
if( sqlite3GlobalConfig.bCoreMutex ){
+#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS
+ pFrom = multiThreadedCheckMutex();
+#else
pFrom = sqlite3DefaultMutex();
+#endif
}else{
pFrom = sqlite3NoopMutex();
}
@@ -23442,6 +23835,7 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){
#endif /* !defined(SQLITE_MUTEX_OMIT) */
+
/************** End of mutex.c ***********************************************/
/************** Begin file mutex_noop.c **************************************/
/*
@@ -24779,14 +25173,6 @@ SQLITE_API int sqlite3_release_memory(int n){
}
/*
-** An instance of the following object records the location of
-** each unused scratch buffer.
-*/
-typedef struct ScratchFreeslot {
- struct ScratchFreeslot *pNext; /* Next unused scratch buffer */
-} ScratchFreeslot;
-
-/*
** State information local to the memory allocation subsystem.
*/
static SQLITE_WSD struct Mem0Global {
@@ -24794,21 +25180,11 @@ static SQLITE_WSD struct Mem0Global {
sqlite3_int64 alarmThreshold; /* The soft heap limit */
/*
- ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
- ** (so that a range test can be used to determine if an allocation
- ** being freed came from pScratch) and a pointer to the list of
- ** unused scratch allocations.
- */
- void *pScratchEnd;
- ScratchFreeslot *pScratchFree;
- u32 nScratchFree;
-
- /*
** True if heap is nearly "full" where "full" is defined by the
** sqlite3_soft_heap_limit() setting.
*/
int nearlyFull;
-} mem0 = { 0, 0, 0, 0, 0, 0 };
+} mem0 = { 0, 0, 0 };
#define mem0 GLOBAL(struct Mem0Global, mem0)
@@ -24878,28 +25254,6 @@ SQLITE_PRIVATE int sqlite3MallocInit(void){
}
memset(&mem0, 0, sizeof(mem0));
mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
- if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
- && sqlite3GlobalConfig.nScratch>0 ){
- int i, n, sz;
- ScratchFreeslot *pSlot;
- sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
- sqlite3GlobalConfig.szScratch = sz;
- pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
- n = sqlite3GlobalConfig.nScratch;
- mem0.pScratchFree = pSlot;
- mem0.nScratchFree = n;
- for(i=0; i<n-1; i++){
- pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
- pSlot = pSlot->pNext;
- }
- pSlot->pNext = 0;
- mem0.pScratchEnd = (void*)&pSlot[1];
- }else{
- mem0.pScratchEnd = 0;
- sqlite3GlobalConfig.pScratch = 0;
- sqlite3GlobalConfig.szScratch = 0;
- sqlite3GlobalConfig.nScratch = 0;
- }
if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
|| sqlite3GlobalConfig.nPage<=0 ){
sqlite3GlobalConfig.pPage = 0;
@@ -25051,105 +25405,6 @@ SQLITE_API void *sqlite3_malloc64(sqlite3_uint64 n){
}
/*
-** Each thread may only have a single outstanding allocation from
-** xScratchMalloc(). We verify this constraint in the single-threaded
-** case by setting scratchAllocOut to 1 when an allocation
-** is outstanding clearing it when the allocation is freed.
-*/
-#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
-static int scratchAllocOut = 0;
-#endif
-
-
-/*
-** Allocate memory that is to be used and released right away.
-** This routine is similar to alloca() in that it is not intended
-** for situations where the memory might be held long-term. This
-** routine is intended to get memory to old large transient data
-** structures that would not normally fit on the stack of an
-** embedded processor.
-*/
-SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
- void *p;
- assert( n>0 );
-
- sqlite3_mutex_enter(mem0.mutex);
- sqlite3StatusHighwater(SQLITE_STATUS_SCRATCH_SIZE, n);
- if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
- p = mem0.pScratchFree;
- mem0.pScratchFree = mem0.pScratchFree->pNext;
- mem0.nScratchFree--;
- sqlite3StatusUp(SQLITE_STATUS_SCRATCH_USED, 1);
- sqlite3_mutex_leave(mem0.mutex);
- }else{
- sqlite3_mutex_leave(mem0.mutex);
- p = sqlite3Malloc(n);
- if( sqlite3GlobalConfig.bMemstat && p ){
- sqlite3_mutex_enter(mem0.mutex);
- sqlite3StatusUp(SQLITE_STATUS_SCRATCH_OVERFLOW, sqlite3MallocSize(p));
- sqlite3_mutex_leave(mem0.mutex);
- }
- sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
- }
- assert( sqlite3_mutex_notheld(mem0.mutex) );
-
-
-#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
- /* EVIDENCE-OF: R-12970-05880 SQLite will not use more than one scratch
- ** buffers per thread.
- **
- ** This can only be checked in single-threaded mode.
- */
- assert( scratchAllocOut==0 );
- if( p ) scratchAllocOut++;
-#endif
-
- return p;
-}
-SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
- if( p ){
-
-#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
- /* Verify that no more than two scratch allocation per thread
- ** is outstanding at one time. (This is only checked in the
- ** single-threaded case since checking in the multi-threaded case
- ** would be much more complicated.) */
- assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
- scratchAllocOut--;
-#endif
-
- if( SQLITE_WITHIN(p, sqlite3GlobalConfig.pScratch, mem0.pScratchEnd) ){
- /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
- ScratchFreeslot *pSlot;
- pSlot = (ScratchFreeslot*)p;
- sqlite3_mutex_enter(mem0.mutex);
- pSlot->pNext = mem0.pScratchFree;
- mem0.pScratchFree = pSlot;
- mem0.nScratchFree++;
- assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
- sqlite3StatusDown(SQLITE_STATUS_SCRATCH_USED, 1);
- sqlite3_mutex_leave(mem0.mutex);
- }else{
- /* Release memory back to the heap */
- assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
- assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_SCRATCH) );
- sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
- if( sqlite3GlobalConfig.bMemstat ){
- int iSize = sqlite3MallocSize(p);
- sqlite3_mutex_enter(mem0.mutex);
- sqlite3StatusDown(SQLITE_STATUS_SCRATCH_OVERFLOW, iSize);
- sqlite3StatusDown(SQLITE_STATUS_MEMORY_USED, iSize);
- sqlite3StatusDown(SQLITE_STATUS_MALLOC_COUNT, 1);
- sqlite3GlobalConfig.m.xFree(p);
- sqlite3_mutex_leave(mem0.mutex);
- }else{
- sqlite3GlobalConfig.m.xFree(p);
- }
- }
- }
-}
-
-/*
** TRUE if p is a lookaside memory allocation from db
*/
#ifndef SQLITE_OMIT_LOOKASIDE
@@ -25239,7 +25494,6 @@ SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){
#endif
pBuf->pNext = db->lookaside.pFree;
db->lookaside.pFree = pBuf;
- db->lookaside.nOut--;
return;
}
}
@@ -25400,16 +25654,16 @@ SQLITE_PRIVATE void *sqlite3DbMallocRawNN(sqlite3 *db, u64 n){
assert( db->mallocFailed==0 );
if( n>db->lookaside.sz ){
db->lookaside.anStat[1]++;
- }else if( (pBuf = db->lookaside.pFree)==0 ){
- db->lookaside.anStat[2]++;
- }else{
+ }else if( (pBuf = db->lookaside.pFree)!=0 ){
db->lookaside.pFree = pBuf->pNext;
- db->lookaside.nOut++;
db->lookaside.anStat[0]++;
- if( db->lookaside.nOut>db->lookaside.mxOut ){
- db->lookaside.mxOut = db->lookaside.nOut;
- }
return (void*)pBuf;
+ }else if( (pBuf = db->lookaside.pInit)!=0 ){
+ db->lookaside.pInit = pBuf->pNext;
+ db->lookaside.anStat[0]++;
+ return (void*)pBuf;
+ }else{
+ db->lookaside.anStat[2]++;
}
}else if( db->mallocFailed ){
return 0;
@@ -25514,6 +25768,19 @@ SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
}
/*
+** The text between zStart and zEnd represents a phrase within a larger
+** SQL statement. Make a copy of this phrase in space obtained form
+** sqlite3DbMalloc(). Omit leading and trailing whitespace.
+*/
+SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){
+ int n;
+ while( sqlite3Isspace(zStart[0]) ) zStart++;
+ n = (int)(zEnd - zStart);
+ while( ALWAYS(n>0) && sqlite3Isspace(zStart[n-1]) ) n--;
+ return sqlite3DbStrNDup(db, zStart, n);
+}
+
+/*
** Free any prior content in *pz and replace it with a copy of zNew.
*/
SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char *zNew){
@@ -26247,7 +26514,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
if( precision>=0 ){
for(length=0; length<precision && bufpt[length]; length++){}
}else{
- length = sqlite3Strlen30(bufpt);
+ length = 0x7fffffff & (int)strlen(bufpt);
}
break;
case etSQLESCAPE: /* Escape ' characters */
@@ -26373,7 +26640,6 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
}else{
char *zOld = isMalloced(p) ? p->zText : 0;
i64 szNew = p->nChar;
- assert( (p->zText==0 || p->zText==p->zBase)==!isMalloced(p) );
szNew += N + 1;
if( szNew+p->nChar<=p->mxAlloc ){
/* Force exponential buffer size growth as long as it does not overflow,
@@ -26415,7 +26681,6 @@ SQLITE_PRIVATE void sqlite3AppendChar(StrAccum *p, int N, char c){
if( p->nChar+(i64)N >= p->nAlloc && (N = sqlite3StrAccumEnlarge(p, N))<=0 ){
return;
}
- assert( (p->zText==p->zBase)==!isMalloced(p) );
while( (N--)>0 ) p->zText[p->nChar++] = c;
}
@@ -26433,7 +26698,6 @@ static void SQLITE_NOINLINE enlargeAndAppend(StrAccum *p, const char *z, int N){
memcpy(&p->zText[p->nChar], z, N);
p->nChar += N;
}
- assert( (p->zText==0 || p->zText==p->zBase)==!isMalloced(p) );
}
/*
@@ -26468,19 +26732,20 @@ SQLITE_PRIVATE void sqlite3StrAccumAppendAll(StrAccum *p, const char *z){
** pointer if any kind of error was encountered.
*/
static SQLITE_NOINLINE char *strAccumFinishRealloc(StrAccum *p){
+ char *zText;
assert( p->mxAlloc>0 && !isMalloced(p) );
- p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
- if( p->zText ){
- memcpy(p->zText, p->zBase, p->nChar+1);
+ zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
+ if( zText ){
+ memcpy(zText, p->zText, p->nChar+1);
p->printfFlags |= SQLITE_PRINTF_MALLOCED;
}else{
setStrAccumError(p, STRACCUM_NOMEM);
}
- return p->zText;
+ p->zText = zText;
+ return zText;
}
SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
if( p->zText ){
- assert( (p->zText==p->zBase)==!isMalloced(p) );
p->zText[p->nChar] = 0;
if( p->mxAlloc>0 && !isMalloced(p) ){
return strAccumFinishRealloc(p);
@@ -26493,7 +26758,6 @@ SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
** Reset an StrAccum string. Reclaim all malloced memory.
*/
SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
- assert( (p->zText==0 || p->zText==p->zBase)==!isMalloced(p) );
if( isMalloced(p) ){
sqlite3DbFree(p->db, p->zText);
p->printfFlags &= ~SQLITE_PRINTF_MALLOCED;
@@ -26516,11 +26780,11 @@ SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
** allocations will ever occur.
*/
SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, sqlite3 *db, char *zBase, int n, int mx){
- p->zText = p->zBase = zBase;
+ p->zText = zBase;
p->db = db;
- p->nChar = 0;
p->nAlloc = n;
p->mxAlloc = mx;
+ p->nChar = 0;
p->accError = 0;
p->printfFlags = 0;
}
@@ -26686,8 +26950,15 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
sqlite3VXPrintf(&acc, zFormat, ap);
va_end(ap);
sqlite3StrAccumFinish(&acc);
+#ifdef SQLITE_OS_TRACE_PROC
+ {
+ extern void SQLITE_OS_TRACE_PROC(const char *zBuf, int nBuf);
+ SQLITE_OS_TRACE_PROC(zBuf, sizeof(zBuf));
+ }
+#else
fprintf(stdout,"%s", zBuf);
fflush(stdout);
+#endif
}
#endif
@@ -26860,7 +27131,6 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m
if( p->pHaving ) n++;
if( p->pOrderBy ) n++;
if( p->pLimit ) n++;
- if( p->pOffset ) n++;
}
sqlite3TreeViewExprList(pView, p->pEList, (n--)>0, "result-set");
if( p->pSrc && p->pSrc->nSrc ){
@@ -26917,12 +27187,12 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m
}
if( p->pLimit ){
sqlite3TreeViewItem(pView, "LIMIT", (n--)>0);
- sqlite3TreeViewExpr(pView, p->pLimit, 0);
- sqlite3TreeViewPop(pView);
- }
- if( p->pOffset ){
- sqlite3TreeViewItem(pView, "OFFSET", (n--)>0);
- sqlite3TreeViewExpr(pView, p->pOffset, 0);
+ sqlite3TreeViewExpr(pView, p->pLimit->pLeft, p->pLimit->pRight!=0);
+ if( p->pLimit->pRight ){
+ sqlite3TreeViewItem(pView, "OFFSET", (n--)>0);
+ sqlite3TreeViewExpr(pView, p->pLimit->pRight, 0);
+ sqlite3TreeViewPop(pView);
+ }
sqlite3TreeViewPop(pView);
}
if( p->pPrior ){
@@ -27215,12 +27485,20 @@ SQLITE_PRIVATE void sqlite3TreeViewBareExprList(
sqlite3TreeViewLine(pView, "%s", zLabel);
for(i=0; i<pList->nExpr; i++){
int j = pList->a[i].u.x.iOrderByCol;
- if( j ){
+ char *zName = pList->a[i].zName;
+ if( j || zName ){
sqlite3TreeViewPush(pView, 0);
+ }
+ if( zName ){
+ sqlite3TreeViewLine(pView, "AS %s", zName);
+ }
+ if( j ){
sqlite3TreeViewLine(pView, "iOrderByCol=%d", j);
}
sqlite3TreeViewExpr(pView, pList->a[i].pExpr, i<pList->nExpr-1);
- if( j ) sqlite3TreeViewPop(pView);
+ if( j || zName ){
+ sqlite3TreeViewPop(pView);
+ }
}
}
}
@@ -28511,6 +28789,45 @@ SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
}
/*
+** Compute 10 to the E-th power. Examples: E==1 results in 10.
+** E==2 results in 100. E==50 results in 1.0e50.
+**
+** This routine only works for values of E between 1 and 341.
+*/
+static LONGDOUBLE_TYPE sqlite3Pow10(int E){
+#if defined(_MSC_VER)
+ static const LONGDOUBLE_TYPE x[] = {
+ 1.0e+001,
+ 1.0e+002,
+ 1.0e+004,
+ 1.0e+008,
+ 1.0e+016,
+ 1.0e+032,
+ 1.0e+064,
+ 1.0e+128,
+ 1.0e+256
+ };
+ LONGDOUBLE_TYPE r = 1.0;
+ int i;
+ assert( E>=0 && E<=307 );
+ for(i=0; E!=0; i++, E >>=1){
+ if( E & 1 ) r *= x[i];
+ }
+ return r;
+#else
+ LONGDOUBLE_TYPE x = 10.0;
+ LONGDOUBLE_TYPE r = 1.0;
+ while(1){
+ if( E & 1 ) r *= x;
+ E >>= 1;
+ if( E==0 ) break;
+ x *= x;
+ }
+ return r;
+#endif
+}
+
+/*
** The string z[] is an text representation of a real number.
** Convert this string to a double and write it into *pResult.
**
@@ -28577,12 +28894,12 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
/* copy max significant digits to significand */
while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
s = s*10 + (*z - '0');
- z+=incr, nDigits++;
+ z+=incr; nDigits++;
}
/* skip non-significant significand digits
** (increase exponent by d to shift decimal left) */
- while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
+ while( z<zEnd && sqlite3Isdigit(*z) ){ z+=incr; nDigits++; d++; }
if( z>=zEnd ) goto do_atof_calc;
/* if decimal point is present */
@@ -28595,7 +28912,7 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en
s = s*10 + (*z - '0');
d--;
}
- z+=incr, nDigits++;
+ z+=incr; nDigits++;
}
}
if( z>=zEnd ) goto do_atof_calc;
@@ -28665,11 +28982,10 @@ do_atof_calc:
if( e==0 ){ /*OPTIMIZATION-IF-TRUE*/
result = (double)s;
}else{
- LONGDOUBLE_TYPE scale = 1.0;
/* attempt to handle extremely small/large numbers better */
if( e>307 ){ /*OPTIMIZATION-IF-TRUE*/
if( e<342 ){ /*OPTIMIZATION-IF-TRUE*/
- while( e%308 ) { scale *= 1.0e+1; e -= 1; }
+ LONGDOUBLE_TYPE scale = sqlite3Pow10(e-308);
if( esign<0 ){
result = s / scale;
result /= 1.0e+308;
@@ -28681,14 +28997,15 @@ do_atof_calc:
if( esign<0 ){
result = 0.0*s;
}else{
+#ifdef INFINITY
+ result = INFINITY*s;
+#else
result = 1e308*1e308*s; /* Infinity */
+#endif
}
}
}else{
- /* 1.0e+22 is the largest power of 10 than can be
- ** represented exactly. */
- while( e%22 ) { scale *= 1.0e+1; e -= 1; }
- while( e>0 ) { scale *= 1.0e+22; e -= 22; }
+ LONGDOUBLE_TYPE scale = sqlite3Pow10(e);
if( esign<0 ){
result = s / scale;
}else{
@@ -28743,16 +29060,12 @@ static int compare2pow63(const char *zNum, int incr){
** Convert zNum to a 64-bit signed integer. zNum must be decimal. This
** routine does *not* accept hexadecimal notation.
**
-** If the zNum value is representable as a 64-bit twos-complement
-** integer, then write that value into *pNum and return 0.
-**
-** If zNum is exactly 9223372036854775808, return 2. This special
-** case is broken out because while 9223372036854775808 cannot be a
-** signed 64-bit integer, its negative -9223372036854775808 can be.
+** Returns:
**
-** If zNum is too big for a 64-bit integer and is not
-** 9223372036854775808 or if zNum contains any non-numeric text,
-** then return 1.
+** 0 Successful transformation. Fits in a 64-bit signed integer.
+** 1 Excess text after the integer value
+** 2 Integer too large for a 64-bit signed integer or is malformed
+** 3 Special case of 9223372036854775808
**
** length is the number of bytes in the string (bytes, not characters).
** The string is not necessarily zero-terminated. The encoding is
@@ -28765,6 +29078,7 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
int i;
int c = 0;
int nonNum = 0; /* True if input contains UTF16 with high byte non-zero */
+ int rc; /* Baseline return code */
const char *zStart;
const char *zEnd = zNum + length;
assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
@@ -28804,31 +29118,35 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
testcase( i==20 );
if( &zNum[i]<zEnd /* Extra bytes at the end */
|| (i==0 && zStart==zNum) /* No digits */
- || i>19*incr /* Too many digits */
|| nonNum /* UTF16 with high-order bytes non-zero */
){
+ rc = 1;
+ }else{
+ rc = 0;
+ }
+ if( i>19*incr ){ /* Too many digits */
/* zNum is empty or contains non-numeric text or is longer
** than 19 digits (thus guaranteeing that it is too large) */
- return 1;
+ return 2;
}else if( i<19*incr ){
/* Less than 19 digits, so we know that it fits in 64 bits */
assert( u<=LARGEST_INT64 );
- return 0;
+ return rc;
}else{
/* zNum is a 19-digit numbers. Compare it against 9223372036854775808. */
c = compare2pow63(zNum, incr);
if( c<0 ){
/* zNum is less than 9223372036854775808 so it fits */
assert( u<=LARGEST_INT64 );
- return 0;
+ return rc;
}else if( c>0 ){
/* zNum is greater than 9223372036854775808 so it overflows */
- return 1;
+ return 2;
}else{
/* zNum is exactly 9223372036854775808. Fits if negative. The
** special case 2 overflow if positive */
assert( u-1==LARGEST_INT64 );
- return neg ? 0 : 2;
+ return neg ? rc : 3;
}
}
}
@@ -28841,8 +29159,9 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc
** Returns:
**
** 0 Successful transformation. Fits in a 64-bit signed integer.
-** 1 Integer too large for a 64-bit signed integer or is malformed
-** 2 Special case of 9223372036854775808
+** 1 Excess text after the integer value
+** 2 Integer too large for a 64-bit signed integer or is malformed
+** 3 Special case of 9223372036854775808
*/
SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
#ifndef SQLITE_OMIT_HEX_INTEGER
@@ -28856,7 +29175,7 @@ SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
u = u*16 + sqlite3HexToInt(z[k]);
}
memcpy(pOut, &u, 8);
- return (z[k]==0 && k-i<=16) ? 0 : 1;
+ return (z[k]==0 && k-i<=16) ? 0 : 2;
}else
#endif /* SQLITE_OMIT_HEX_INTEGER */
{
@@ -29466,7 +29785,7 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
** overflow, leave *pA unchanged and return 1.
*/
SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
-#if GCC_VERSION>=5004000
+#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
return __builtin_add_overflow(*pA, iB, pA);
#else
i64 iA = *pA;
@@ -29486,7 +29805,7 @@ SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
#endif
}
SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
-#if GCC_VERSION>=5004000
+#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
return __builtin_sub_overflow(*pA, iB, pA);
#else
testcase( iB==SMALLEST_INT64+1 );
@@ -29501,7 +29820,7 @@ SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
#endif
}
SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
-#if GCC_VERSION>=5004000
+#if GCC_VERSION>=5004000 && !defined(__INTEL_COMPILER)
return __builtin_mul_overflow(*pA, iB, pA);
#else
i64 iA = *pA;
@@ -29603,8 +29922,14 @@ SQLITE_PRIVATE LogEst sqlite3LogEst(u64 x){
if( x<2 ) return 0;
while( x<8 ){ y -= 10; x <<= 1; }
}else{
+#if GCC_VERSION>=5004000
+ int i = 60 - __builtin_clzll(x);
+ y += i*10;
+ x >>= i;
+#else
while( x>255 ){ y += 40; x >>= 4; } /*OPTIMIZATION-IF-TRUE*/
while( x>15 ){ y += 10; x >>= 1; }
+#endif
}
return a[x&7] + y - 10;
}
@@ -30085,47 +30410,47 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 40 */ "IdxLT" OpHelp("key=r[P3@P4]"),
/* 41 */ "IdxGE" OpHelp("key=r[P3@P4]"),
/* 42 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
- /* 43 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
- /* 44 */ "Program" OpHelp(""),
- /* 45 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
- /* 46 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
- /* 47 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
- /* 48 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
- /* 49 */ "IncrVacuum" OpHelp(""),
- /* 50 */ "VNext" OpHelp(""),
- /* 51 */ "Init" OpHelp("Start at P2"),
- /* 52 */ "Return" OpHelp(""),
- /* 53 */ "EndCoroutine" OpHelp(""),
- /* 54 */ "HaltIfNull" OpHelp("if r[P3]=null halt"),
- /* 55 */ "Halt" OpHelp(""),
- /* 56 */ "Integer" OpHelp("r[P2]=P1"),
- /* 57 */ "Int64" OpHelp("r[P2]=P4"),
- /* 58 */ "String" OpHelp("r[P2]='P4' (len=P1)"),
- /* 59 */ "Null" OpHelp("r[P2..P3]=NULL"),
- /* 60 */ "SoftNull" OpHelp("r[P1]=NULL"),
- /* 61 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"),
- /* 62 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"),
- /* 63 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"),
- /* 64 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
- /* 65 */ "SCopy" OpHelp("r[P2]=r[P1]"),
- /* 66 */ "IntCopy" OpHelp("r[P2]=r[P1]"),
- /* 67 */ "ResultRow" OpHelp("output=r[P1@P2]"),
- /* 68 */ "CollSeq" OpHelp(""),
- /* 69 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"),
- /* 70 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
- /* 71 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
- /* 72 */ "RealAffinity" OpHelp(""),
- /* 73 */ "Cast" OpHelp("affinity(r[P1])"),
- /* 74 */ "Permutation" OpHelp(""),
- /* 75 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
- /* 76 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
- /* 77 */ "Ne" OpHelp("IF r[P3]!=r[P1]"),
- /* 78 */ "Eq" OpHelp("IF r[P3]==r[P1]"),
- /* 79 */ "Gt" OpHelp("IF r[P3]>r[P1]"),
- /* 80 */ "Le" OpHelp("IF r[P3]<=r[P1]"),
- /* 81 */ "Lt" OpHelp("IF r[P3]<r[P1]"),
- /* 82 */ "Ge" OpHelp("IF r[P3]>=r[P1]"),
- /* 83 */ "ElseNotEq" OpHelp(""),
+ /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
+ /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
+ /* 45 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
+ /* 46 */ "Program" OpHelp(""),
+ /* 47 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
+ /* 48 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"),
+ /* 49 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"),
+ /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
+ /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
+ /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"),
+ /* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"),
+ /* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"),
+ /* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"),
+ /* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"),
+ /* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"),
+ /* 58 */ "ElseNotEq" OpHelp(""),
+ /* 59 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"),
+ /* 60 */ "IncrVacuum" OpHelp(""),
+ /* 61 */ "VNext" OpHelp(""),
+ /* 62 */ "Init" OpHelp("Start at P2"),
+ /* 63 */ "Return" OpHelp(""),
+ /* 64 */ "EndCoroutine" OpHelp(""),
+ /* 65 */ "HaltIfNull" OpHelp("if r[P3]=null halt"),
+ /* 66 */ "Halt" OpHelp(""),
+ /* 67 */ "Integer" OpHelp("r[P2]=P1"),
+ /* 68 */ "Int64" OpHelp("r[P2]=P4"),
+ /* 69 */ "String" OpHelp("r[P2]='P4' (len=P1)"),
+ /* 70 */ "Null" OpHelp("r[P2..P3]=NULL"),
+ /* 71 */ "SoftNull" OpHelp("r[P1]=NULL"),
+ /* 72 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"),
+ /* 73 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"),
+ /* 74 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"),
+ /* 75 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"),
+ /* 76 */ "SCopy" OpHelp("r[P2]=r[P1]"),
+ /* 77 */ "IntCopy" OpHelp("r[P2]=r[P1]"),
+ /* 78 */ "ResultRow" OpHelp("output=r[P1@P2]"),
+ /* 79 */ "CollSeq" OpHelp(""),
+ /* 80 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"),
+ /* 81 */ "RealAffinity" OpHelp(""),
+ /* 82 */ "Cast" OpHelp("affinity(r[P1])"),
+ /* 83 */ "Permutation" OpHelp(""),
/* 84 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
/* 85 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
/* 86 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
@@ -30138,78 +30463,80 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 93 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
/* 94 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"),
/* 95 */ "BitNot" OpHelp("r[P1]= ~r[P1]"),
- /* 96 */ "Column" OpHelp("r[P3]=PX"),
+ /* 96 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"),
/* 97 */ "String8" OpHelp("r[P2]='P4'"),
- /* 98 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
- /* 99 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
- /* 100 */ "Count" OpHelp("r[P2]=count()"),
- /* 101 */ "ReadCookie" OpHelp(""),
- /* 102 */ "SetCookie" OpHelp(""),
- /* 103 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
- /* 104 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
- /* 105 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
- /* 106 */ "OpenDup" OpHelp(""),
- /* 107 */ "OpenAutoindex" OpHelp("nColumn=P2"),
- /* 108 */ "OpenEphemeral" OpHelp("nColumn=P2"),
- /* 109 */ "SorterOpen" OpHelp(""),
- /* 110 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"),
- /* 111 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
- /* 112 */ "Close" OpHelp(""),
- /* 113 */ "ColumnsUsed" OpHelp(""),
- /* 114 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
- /* 115 */ "NewRowid" OpHelp("r[P2]=rowid"),
- /* 116 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
- /* 117 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
- /* 118 */ "Delete" OpHelp(""),
- /* 119 */ "ResetCount" OpHelp(""),
- /* 120 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
- /* 121 */ "SorterData" OpHelp("r[P2]=data"),
- /* 122 */ "RowData" OpHelp("r[P2]=data"),
- /* 123 */ "Rowid" OpHelp("r[P2]=rowid"),
- /* 124 */ "NullRow" OpHelp(""),
- /* 125 */ "SorterInsert" OpHelp("key=r[P2]"),
- /* 126 */ "IdxInsert" OpHelp("key=r[P2]"),
- /* 127 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
- /* 128 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"),
- /* 129 */ "IdxRowid" OpHelp("r[P2]=rowid"),
- /* 130 */ "Destroy" OpHelp(""),
- /* 131 */ "Clear" OpHelp(""),
+ /* 98 */ "Column" OpHelp("r[P3]=PX"),
+ /* 99 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
+ /* 100 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
+ /* 101 */ "Count" OpHelp("r[P2]=count()"),
+ /* 102 */ "ReadCookie" OpHelp(""),
+ /* 103 */ "SetCookie" OpHelp(""),
+ /* 104 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
+ /* 105 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
+ /* 106 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
+ /* 107 */ "OpenDup" OpHelp(""),
+ /* 108 */ "OpenAutoindex" OpHelp("nColumn=P2"),
+ /* 109 */ "OpenEphemeral" OpHelp("nColumn=P2"),
+ /* 110 */ "SorterOpen" OpHelp(""),
+ /* 111 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"),
+ /* 112 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
+ /* 113 */ "Close" OpHelp(""),
+ /* 114 */ "ColumnsUsed" OpHelp(""),
+ /* 115 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
+ /* 116 */ "NewRowid" OpHelp("r[P2]=rowid"),
+ /* 117 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
+ /* 118 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
+ /* 119 */ "Delete" OpHelp(""),
+ /* 120 */ "ResetCount" OpHelp(""),
+ /* 121 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
+ /* 122 */ "SorterData" OpHelp("r[P2]=data"),
+ /* 123 */ "RowData" OpHelp("r[P2]=data"),
+ /* 124 */ "Rowid" OpHelp("r[P2]=rowid"),
+ /* 125 */ "NullRow" OpHelp(""),
+ /* 126 */ "SeekEnd" OpHelp(""),
+ /* 127 */ "SorterInsert" OpHelp("key=r[P2]"),
+ /* 128 */ "IdxInsert" OpHelp("key=r[P2]"),
+ /* 129 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
+ /* 130 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"),
+ /* 131 */ "IdxRowid" OpHelp("r[P2]=rowid"),
/* 132 */ "Real" OpHelp("r[P2]=P4"),
- /* 133 */ "ResetSorter" OpHelp(""),
- /* 134 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
- /* 135 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
- /* 136 */ "SqlExec" OpHelp(""),
- /* 137 */ "ParseSchema" OpHelp(""),
- /* 138 */ "LoadAnalysis" OpHelp(""),
- /* 139 */ "DropTable" OpHelp(""),
- /* 140 */ "DropIndex" OpHelp(""),
- /* 141 */ "DropTrigger" OpHelp(""),
- /* 142 */ "IntegrityCk" OpHelp(""),
- /* 143 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
- /* 144 */ "Param" OpHelp(""),
- /* 145 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
- /* 146 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
- /* 147 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"),
- /* 148 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"),
- /* 149 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"),
- /* 150 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
- /* 151 */ "Expire" OpHelp(""),
- /* 152 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
- /* 153 */ "VBegin" OpHelp(""),
- /* 154 */ "VCreate" OpHelp(""),
- /* 155 */ "VDestroy" OpHelp(""),
- /* 156 */ "VOpen" OpHelp(""),
- /* 157 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
- /* 158 */ "VRename" OpHelp(""),
- /* 159 */ "Pagecount" OpHelp(""),
- /* 160 */ "MaxPgcnt" OpHelp(""),
- /* 161 */ "PureFunc0" OpHelp(""),
- /* 162 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"),
- /* 163 */ "PureFunc" OpHelp(""),
- /* 164 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"),
- /* 165 */ "CursorHint" OpHelp(""),
- /* 166 */ "Noop" OpHelp(""),
- /* 167 */ "Explain" OpHelp(""),
+ /* 133 */ "Destroy" OpHelp(""),
+ /* 134 */ "Clear" OpHelp(""),
+ /* 135 */ "ResetSorter" OpHelp(""),
+ /* 136 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"),
+ /* 137 */ "SqlExec" OpHelp(""),
+ /* 138 */ "ParseSchema" OpHelp(""),
+ /* 139 */ "LoadAnalysis" OpHelp(""),
+ /* 140 */ "DropTable" OpHelp(""),
+ /* 141 */ "DropIndex" OpHelp(""),
+ /* 142 */ "DropTrigger" OpHelp(""),
+ /* 143 */ "IntegrityCk" OpHelp(""),
+ /* 144 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
+ /* 145 */ "Param" OpHelp(""),
+ /* 146 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
+ /* 147 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
+ /* 148 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"),
+ /* 149 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"),
+ /* 150 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"),
+ /* 151 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
+ /* 152 */ "Expire" OpHelp(""),
+ /* 153 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
+ /* 154 */ "VBegin" OpHelp(""),
+ /* 155 */ "VCreate" OpHelp(""),
+ /* 156 */ "VDestroy" OpHelp(""),
+ /* 157 */ "VOpen" OpHelp(""),
+ /* 158 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
+ /* 159 */ "VRename" OpHelp(""),
+ /* 160 */ "Pagecount" OpHelp(""),
+ /* 161 */ "MaxPgcnt" OpHelp(""),
+ /* 162 */ "PureFunc0" OpHelp(""),
+ /* 163 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"),
+ /* 164 */ "PureFunc" OpHelp(""),
+ /* 165 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"),
+ /* 166 */ "Trace" OpHelp(""),
+ /* 167 */ "CursorHint" OpHelp(""),
+ /* 168 */ "Noop" OpHelp(""),
+ /* 169 */ "Explain" OpHelp(""),
};
return azName[i];
}
@@ -30309,6 +30636,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#include <sys/ioctl.h>
#include <unistd.h>
/* #include <time.h> */
#include <sys/time.h>
@@ -30318,7 +30646,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
#endif
#if SQLITE_ENABLE_LOCKING_STYLE
-# include <sys/ioctl.h>
+/* # include <sys/ioctl.h> */
# include <sys/file.h>
# include <sys/param.h>
#endif /* SQLITE_ENABLE_LOCKING_STYLE */
@@ -30428,7 +30756,7 @@ struct unixFile {
unsigned short int ctrlFlags; /* Behavioral bits. UNIXFILE_* flags */
int lastErrno; /* The unix errno from last I/O error */
void *lockingContext; /* Locking style specific state */
- UnixUnusedFd *pUnused; /* Pre-allocated UnixUnusedFd */
+ UnixUnusedFd *pPreallocatedUnused; /* Pre-allocated UnixUnusedFd */
const char *zPath; /* Name of the file */
unixShm *pShm; /* Shared memory segment information */
int szChunk; /* Configured by FCNTL_CHUNK_SIZE */
@@ -30439,10 +30767,8 @@ struct unixFile {
sqlite3_int64 mmapSizeMax; /* Configured FCNTL_MMAP_SIZE value */
void *pMapRegion; /* Memory mapped region */
#endif
-#ifdef __QNXNTO__
int sectorSize; /* Device sector size */
int deviceCharacteristics; /* Precomputed device characteristics */
-#endif
#if SQLITE_ENABLE_LOCKING_STYLE
int openFlags; /* The flags specified at open() */
#endif
@@ -30745,6 +31071,20 @@ SQLITE_API extern int sqlite3_open_file_count;
# define lseek lseek64
#endif
+#ifdef __linux__
+/*
+** Linux-specific IOCTL magic numbers used for controlling F2FS
+*/
+#define F2FS_IOCTL_MAGIC 0xf5
+#define F2FS_IOC_START_ATOMIC_WRITE _IO(F2FS_IOCTL_MAGIC, 1)
+#define F2FS_IOC_COMMIT_ATOMIC_WRITE _IO(F2FS_IOCTL_MAGIC, 2)
+#define F2FS_IOC_START_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 3)
+#define F2FS_IOC_ABORT_VOLATILE_WRITE _IO(F2FS_IOCTL_MAGIC, 5)
+#define F2FS_IOC_GET_FEATURES _IOR(F2FS_IOCTL_MAGIC, 12, u32)
+#define F2FS_FEATURE_ATOMIC_WRITE 0x0004
+#endif /* __linux__ */
+
+
/*
** Different Unix systems declare open() in different ways. Same use
** open(const char*,int,mode_t). Others use open(const char*,int,...).
@@ -30887,7 +31227,7 @@ static struct unix_syscall {
#else
{ "munmap", (sqlite3_syscall_ptr)0, 0 },
#endif
-#define osMunmap ((void*(*)(void*,size_t))aSyscall[23].pCurrent)
+#define osMunmap ((int(*)(void*,size_t))aSyscall[23].pCurrent)
#if HAVE_MREMAP && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0)
{ "mremap", (sqlite3_syscall_ptr)mremap, 0 },
@@ -30917,6 +31257,13 @@ static struct unix_syscall {
#endif
#define osLstat ((int(*)(const char*,struct stat*))aSyscall[27].pCurrent)
+#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+ { "ioctl", (sqlite3_syscall_ptr)ioctl, 0 },
+#else
+ { "ioctl", (sqlite3_syscall_ptr)0, 0 },
+#endif
+#define osIoctl ((int(*)(int,int,...))aSyscall[28].pCurrent)
+
}; /* End of the overrideable system calls */
@@ -31521,7 +31868,8 @@ struct unixInodeInfo {
/*
** A lists of all unixInodeInfo objects.
*/
-static unixInodeInfo *inodeList = 0;
+static unixInodeInfo *inodeList = 0; /* All unixInodeInfo objects */
+static unsigned int nUnusedFd = 0; /* Total unused file descriptors */
/*
**
@@ -31631,6 +31979,7 @@ static void closePendingFds(unixFile *pFile){
pNext = p->pNext;
robust_close(pFile, p->fd, __LINE__);
sqlite3_free(p);
+ nUnusedFd--;
}
pInode->pUnused = 0;
}
@@ -31663,6 +32012,7 @@ static void releaseInodeInfo(unixFile *pFile){
sqlite3_free(pInode);
}
}
+ assert( inodeList!=0 || nUnusedFd==0 );
}
/*
@@ -31732,6 +32082,7 @@ static int findInodeInfo(
#else
fileId.ino = (u64)statbuf.st_ino;
#endif
+ assert( inodeList!=0 || nUnusedFd==0 );
pInode = inodeList;
while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){
pInode = pInode->pNext;
@@ -32151,11 +32502,12 @@ end_lock:
*/
static void setPendingFd(unixFile *pFile){
unixInodeInfo *pInode = pFile->pInode;
- UnixUnusedFd *p = pFile->pUnused;
+ UnixUnusedFd *p = pFile->pPreallocatedUnused;
p->pNext = pInode->pUnused;
pInode->pUnused = p;
pFile->h = -1;
- pFile->pUnused = 0;
+ pFile->pPreallocatedUnused = 0;
+ nUnusedFd++;
}
/*
@@ -32380,7 +32732,7 @@ static int closeUnixFile(sqlite3_file *id){
#endif
OSTRACE(("CLOSE %-3d\n", pFile->h));
OpenCounter(-1);
- sqlite3_free(pFile->pUnused);
+ sqlite3_free(pFile->pPreallocatedUnused);
memset(pFile, 0, sizeof(unixFile));
return SQLITE_OK;
}
@@ -32717,7 +33069,7 @@ static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved));
#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
- if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
+ if( (rc & 0xff) == SQLITE_IOERR ){
rc = SQLITE_OK;
reserved=1;
}
@@ -32784,7 +33136,7 @@ static int flockLock(sqlite3_file *id, int eFileLock) {
OSTRACE(("LOCK %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock),
rc==SQLITE_OK ? "ok" : "failed"));
#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
- if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
+ if( (rc & 0xff) == SQLITE_IOERR ){
rc = SQLITE_BUSY;
}
#endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
@@ -33321,7 +33673,7 @@ static int afpLock(sqlite3_file *id, int eFileLock){
/* Can't reestablish the shared lock. Sqlite can't deal, this is
** a critical I/O error
*/
- rc = ((failed & SQLITE_IOERR) == SQLITE_IOERR) ? failed2 :
+ rc = ((failed & 0xff) == SQLITE_IOERR) ? failed2 :
SQLITE_IOERR_LOCK;
goto afp_end_lock;
}
@@ -33601,7 +33953,7 @@ static int unixRead(
/* If this is a database file (not a journal, master-journal or temp
** file), the bytes in the locking range should never be read or written. */
#if 0
- assert( pFile->pUnused==0
+ assert( pFile->pPreallocatedUnused==0
|| offset>=PENDING_BYTE+512
|| offset+amt<=PENDING_BYTE
);
@@ -33714,7 +34066,7 @@ static int unixWrite(
/* If this is a database file (not a journal, master-journal or temp
** file), the bytes in the locking range should never be read or written. */
#if 0
- assert( pFile->pUnused==0
+ assert( pFile->pPreallocatedUnused==0
|| offset>=PENDING_BYTE+512
|| offset+amt<=PENDING_BYTE
);
@@ -34194,6 +34546,21 @@ static int unixGetTempname(int nBuf, char *zBuf);
static int unixFileControl(sqlite3_file *id, int op, void *pArg){
unixFile *pFile = (unixFile*)id;
switch( op ){
+#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+ case SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: {
+ int rc = osIoctl(pFile->h, F2FS_IOC_START_ATOMIC_WRITE);
+ return rc ? SQLITE_IOERR_BEGIN_ATOMIC : SQLITE_OK;
+ }
+ case SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: {
+ int rc = osIoctl(pFile->h, F2FS_IOC_COMMIT_ATOMIC_WRITE);
+ return rc ? SQLITE_IOERR_COMMIT_ATOMIC : SQLITE_OK;
+ }
+ case SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: {
+ int rc = osIoctl(pFile->h, F2FS_IOC_ABORT_VOLATILE_WRITE);
+ return rc ? SQLITE_IOERR_ROLLBACK_ATOMIC : SQLITE_OK;
+ }
+#endif /* __linux__ && SQLITE_ENABLE_BATCH_ATOMIC_WRITE */
+
case SQLITE_FCNTL_LOCKSTATE: {
*(int*)pArg = pFile->eFileLock;
return SQLITE_OK;
@@ -34244,6 +34611,14 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){
if( newLimit>sqlite3GlobalConfig.mxMmap ){
newLimit = sqlite3GlobalConfig.mxMmap;
}
+
+ /* The value of newLimit may be eventually cast to (size_t) and passed
+ ** to mmap(). Restrict its value to 2GB if (size_t) is not at least a
+ ** 64-bit type. */
+ if( newLimit>0 && sizeof(size_t)<8 ){
+ newLimit = (newLimit & 0x7FFFFFFF);
+ }
+
*(i64*)pArg = pFile->mmapSizeMax;
if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){
pFile->mmapSizeMax = newLimit;
@@ -34277,30 +34652,41 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){
}
/*
-** Return the sector size in bytes of the underlying block device for
-** the specified file. This is almost always 512 bytes, but may be
-** larger for some devices.
+** If pFd->sectorSize is non-zero when this function is called, it is a
+** no-op. Otherwise, the values of pFd->sectorSize and
+** pFd->deviceCharacteristics are set according to the file-system
+** characteristics.
**
-** SQLite code assumes this function cannot fail. It also assumes that
-** if two files are created in the same file-system directory (i.e.
-** a database and its journal file) that the sector size will be the
-** same for both.
+** There are two versions of this function. One for QNX and one for all
+** other systems.
*/
-#ifndef __QNXNTO__
-static int unixSectorSize(sqlite3_file *NotUsed){
- UNUSED_PARAMETER(NotUsed);
- return SQLITE_DEFAULT_SECTOR_SIZE;
-}
-#endif
+#ifndef __QNXNTO__
+static void setDeviceCharacteristics(unixFile *pFd){
+ assert( pFd->deviceCharacteristics==0 || pFd->sectorSize!=0 );
+ if( pFd->sectorSize==0 ){
+#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+ int res;
+ u32 f = 0;
-/*
-** The following version of unixSectorSize() is optimized for QNX.
-*/
-#ifdef __QNXNTO__
+ /* Check for support for F2FS atomic batch writes. */
+ res = osIoctl(pFd->h, F2FS_IOC_GET_FEATURES, &f);
+ if( res==0 && (f & F2FS_FEATURE_ATOMIC_WRITE) ){
+ pFd->deviceCharacteristics = SQLITE_IOCAP_BATCH_ATOMIC;
+ }
+#endif /* __linux__ && SQLITE_ENABLE_BATCH_ATOMIC_WRITE */
+
+ /* Set the POWERSAFE_OVERWRITE flag if requested. */
+ if( pFd->ctrlFlags & UNIXFILE_PSOW ){
+ pFd->deviceCharacteristics |= SQLITE_IOCAP_POWERSAFE_OVERWRITE;
+ }
+
+ pFd->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE;
+ }
+}
+#else
#include <sys/dcmd_blk.h>
#include <sys/statvfs.h>
-static int unixSectorSize(sqlite3_file *id){
- unixFile *pFile = (unixFile*)id;
+static void setDeviceCharacteristics(unixFile *pFile){
if( pFile->sectorSize == 0 ){
struct statvfs fsInfo;
@@ -34308,7 +34694,7 @@ static int unixSectorSize(sqlite3_file *id){
pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE;
pFile->deviceCharacteristics = 0;
if( fstatvfs(pFile->h, &fsInfo) == -1 ) {
- return pFile->sectorSize;
+ return;
}
if( !strcmp(fsInfo.f_basetype, "tmp") ) {
@@ -34369,9 +34755,24 @@ static int unixSectorSize(sqlite3_file *id){
pFile->deviceCharacteristics = 0;
pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE;
}
- return pFile->sectorSize;
}
-#endif /* __QNXNTO__ */
+#endif
+
+/*
+** Return the sector size in bytes of the underlying block device for
+** the specified file. This is almost always 512 bytes, but may be
+** larger for some devices.
+**
+** SQLite code assumes this function cannot fail. It also assumes that
+** if two files are created in the same file-system directory (i.e.
+** a database and its journal file) that the sector size will be the
+** same for both.
+*/
+static int unixSectorSize(sqlite3_file *id){
+ unixFile *pFd = (unixFile*)id;
+ setDeviceCharacteristics(pFd);
+ return pFd->sectorSize;
+}
/*
** Return the device characteristics for the file.
@@ -34387,16 +34788,9 @@ static int unixSectorSize(sqlite3_file *id){
** available to turn it off and URI query parameter available to turn it off.
*/
static int unixDeviceCharacteristics(sqlite3_file *id){
- unixFile *p = (unixFile*)id;
- int rc = 0;
-#ifdef __QNXNTO__
- if( p->sectorSize==0 ) unixSectorSize(id);
- rc = p->deviceCharacteristics;
-#endif
- if( p->ctrlFlags & UNIXFILE_PSOW ){
- rc |= SQLITE_IOCAP_POWERSAFE_OVERWRITE;
- }
- return rc;
+ unixFile *pFd = (unixFile*)id;
+ setDeviceCharacteristics(pFd);
+ return pFd->deviceCharacteristics;
}
#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
@@ -34458,6 +34852,7 @@ struct unixShmNode {
int szRegion; /* Size of shared-memory regions */
u16 nRegion; /* Size of array apRegion */
u8 isReadonly; /* True if read-only */
+ u8 isUnlocked; /* True if no DMS lock held */
char **apRegion; /* Array of mapped shared-memory regions */
int nRef; /* Number of unixShm objects pointing to this */
unixShm *pFirst; /* All unixShm objects pointing to this */
@@ -34514,7 +34909,7 @@ static int unixShmSystemLock(
/* Access to the unixShmNode object is serialized by the caller */
pShmNode = pFile->pInode->pShmNode;
- assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 );
+ assert( pShmNode->nRef==0 || sqlite3_mutex_held(pShmNode->mutex) );
/* Shared locks never span more than one byte */
assert( n==1 || lockType!=F_RDLCK );
@@ -34621,6 +35016,64 @@ static void unixShmPurge(unixFile *pFd){
}
/*
+** The DMS lock has not yet been taken on shm file pShmNode. Attempt to
+** take it now. Return SQLITE_OK if successful, or an SQLite error
+** code otherwise.
+**
+** If the DMS cannot be locked because this is a readonly_shm=1
+** connection and no other process already holds a lock, return
+** SQLITE_READONLY_CANTINIT and set pShmNode->isUnlocked=1.
+*/
+static int unixLockSharedMemory(unixFile *pDbFd, unixShmNode *pShmNode){
+ struct flock lock;
+ int rc = SQLITE_OK;
+
+ /* Use F_GETLK to determine the locks other processes are holding
+ ** on the DMS byte. If it indicates that another process is holding
+ ** a SHARED lock, then this process may also take a SHARED lock
+ ** and proceed with opening the *-shm file.
+ **
+ ** Or, if no other process is holding any lock, then this process
+ ** is the first to open it. In this case take an EXCLUSIVE lock on the
+ ** DMS byte and truncate the *-shm file to zero bytes in size. Then
+ ** downgrade to a SHARED lock on the DMS byte.
+ **
+ ** If another process is holding an EXCLUSIVE lock on the DMS byte,
+ ** return SQLITE_BUSY to the caller (it will try again). An earlier
+ ** version of this code attempted the SHARED lock at this point. But
+ ** this introduced a subtle race condition: if the process holding
+ ** EXCLUSIVE failed just before truncating the *-shm file, then this
+ ** process might open and use the *-shm file without truncating it.
+ ** And if the *-shm file has been corrupted by a power failure or
+ ** system crash, the database itself may also become corrupt. */
+ lock.l_whence = SEEK_SET;
+ lock.l_start = UNIX_SHM_DMS;
+ lock.l_len = 1;
+ lock.l_type = F_WRLCK;
+ if( osFcntl(pShmNode->h, F_GETLK, &lock)!=0 ) {
+ rc = SQLITE_IOERR_LOCK;
+ }else if( lock.l_type==F_UNLCK ){
+ if( pShmNode->isReadonly ){
+ pShmNode->isUnlocked = 1;
+ rc = SQLITE_READONLY_CANTINIT;
+ }else{
+ rc = unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1);
+ if( rc==SQLITE_OK && robust_ftruncate(pShmNode->h, 0) ){
+ rc = unixLogError(SQLITE_IOERR_SHMOPEN,"ftruncate",pShmNode->zFilename);
+ }
+ }
+ }else if( lock.l_type==F_WRLCK ){
+ rc = SQLITE_BUSY;
+ }
+
+ if( rc==SQLITE_OK ){
+ assert( lock.l_type==F_UNLCK || lock.l_type==F_RDLCK );
+ rc = unixShmSystemLock(pDbFd, F_RDLCK, UNIX_SHM_DMS, 1);
+ }
+ return rc;
+}
+
+/*
** Open a shared-memory area associated with open database file pDbFd.
** This particular implementation uses mmapped files.
**
@@ -34658,9 +35111,9 @@ static void unixShmPurge(unixFile *pFd){
static int unixOpenSharedMemory(unixFile *pDbFd){
struct unixShm *p = 0; /* The connection to be opened */
struct unixShmNode *pShmNode; /* The underlying mmapped file */
- int rc; /* Result code */
+ int rc = SQLITE_OK; /* Result code */
unixInodeInfo *pInode; /* The inode of fd */
- char *zShmFilename; /* Name of the file used for SHM */
+ char *zShm; /* Name of the file used for SHM */
int nShmFilename; /* Size of the SHM filename in bytes */
/* Allocate space for the new unixShm object. */
@@ -34701,14 +35154,14 @@ static int unixOpenSharedMemory(unixFile *pDbFd){
goto shm_open_err;
}
memset(pShmNode, 0, sizeof(*pShmNode)+nShmFilename);
- zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1];
+ zShm = pShmNode->zFilename = (char*)&pShmNode[1];
#ifdef SQLITE_SHM_DIRECTORY
- sqlite3_snprintf(nShmFilename, zShmFilename,
+ sqlite3_snprintf(nShmFilename, zShm,
SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x",
(u32)sStat.st_ino, (u32)sStat.st_dev);
#else
- sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", zBasePath);
- sqlite3FileSuffix3(pDbFd->zPath, zShmFilename);
+ sqlite3_snprintf(nShmFilename, zShm, "%s-shm", zBasePath);
+ sqlite3FileSuffix3(pDbFd->zPath, zShm);
#endif
pShmNode->h = -1;
pDbFd->pInode->pShmNode = pShmNode;
@@ -34722,15 +35175,16 @@ static int unixOpenSharedMemory(unixFile *pDbFd){
}
if( pInode->bProcessLock==0 ){
- int openFlags = O_RDWR | O_CREAT;
- if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){
- openFlags = O_RDONLY;
- pShmNode->isReadonly = 1;
+ if( 0==sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){
+ pShmNode->h = robust_open(zShm, O_RDWR|O_CREAT, (sStat.st_mode&0777));
}
- pShmNode->h = robust_open(zShmFilename, openFlags, (sStat.st_mode&0777));
if( pShmNode->h<0 ){
- rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename);
- goto shm_open_err;
+ pShmNode->h = robust_open(zShm, O_RDONLY, (sStat.st_mode&0777));
+ if( pShmNode->h<0 ){
+ rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShm);
+ goto shm_open_err;
+ }
+ pShmNode->isReadonly = 1;
}
/* If this process is running as root, make sure that the SHM file
@@ -34738,20 +35192,9 @@ static int unixOpenSharedMemory(unixFile *pDbFd){
** the original owner will not be able to connect.
*/
robustFchown(pShmNode->h, sStat.st_uid, sStat.st_gid);
-
- /* Check to see if another process is holding the dead-man switch.
- ** If not, truncate the file to zero length.
- */
- rc = SQLITE_OK;
- if( unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
- if( robust_ftruncate(pShmNode->h, 0) ){
- rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename);
- }
- }
- if( rc==SQLITE_OK ){
- rc = unixShmSystemLock(pDbFd, F_RDLCK, UNIX_SHM_DMS, 1);
- }
- if( rc ) goto shm_open_err;
+
+ rc = unixLockSharedMemory(pDbFd, pShmNode);
+ if( rc!=SQLITE_OK && rc!=SQLITE_READONLY_CANTINIT ) goto shm_open_err;
}
}
@@ -34775,7 +35218,7 @@ static int unixOpenSharedMemory(unixFile *pDbFd){
p->pNext = pShmNode->pFirst;
pShmNode->pFirst = p;
sqlite3_mutex_leave(pShmNode->mutex);
- return SQLITE_OK;
+ return rc;
/* Jump here on any error */
shm_open_err:
@@ -34827,6 +35270,11 @@ static int unixShmMap(
p = pDbFd->pShm;
pShmNode = p->pShmNode;
sqlite3_mutex_enter(pShmNode->mutex);
+ if( pShmNode->isUnlocked ){
+ rc = unixLockSharedMemory(pDbFd, pShmNode);
+ if( rc!=SQLITE_OK ) goto shmpage_out;
+ pShmNode->isUnlocked = 0;
+ }
assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
assert( pShmNode->pInode==pDbFd->pInode );
assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
@@ -35654,17 +36102,6 @@ static int fillInUnixFile(
assert( pNew->pInode==NULL );
- /* Usually the path zFilename should not be a relative pathname. The
- ** exception is when opening the proxy "conch" file in builds that
- ** include the special Apple locking styles.
- */
-#if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
- assert( zFilename==0 || zFilename[0]=='/'
- || pVfs->pAppData==(void*)&autolockIoFinder );
-#else
- assert( zFilename==0 || zFilename[0]=='/' );
-#endif
-
/* No locking occurs in temporary files */
assert( zFilename!=0 || (ctrlFlags & UNIXFILE_NOLOCK)!=0 );
@@ -35923,6 +36360,8 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
#if !OS_VXWORKS
struct stat sStat; /* Results of stat() call */
+ unixEnterMutex();
+
/* A stat() call may fail for various reasons. If this happens, it is
** almost certain that an open() call on the same path will also fail.
** For this reason, if an error occurs in the stat() call here, it is
@@ -35931,10 +36370,9 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
**
** Even if a subsequent open() call does succeed, the consequences of
** not searching for a reusable file descriptor are not dire. */
- if( 0==osStat(zPath, &sStat) ){
+ if( nUnusedFd>0 && 0==osStat(zPath, &sStat) ){
unixInodeInfo *pInode;
- unixEnterMutex();
pInode = inodeList;
while( pInode && (pInode->fileId.dev!=sStat.st_dev
|| pInode->fileId.ino!=(u64)sStat.st_ino) ){
@@ -35945,11 +36383,12 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext));
pUnused = *pp;
if( pUnused ){
+ nUnusedFd--;
*pp = pUnused->pNext;
}
}
- unixLeaveMutex();
}
+ unixLeaveMutex();
#endif /* if !OS_VXWORKS */
return pUnused;
}
@@ -36025,16 +36464,11 @@ static int findCreateFileMode(
*/
nDb = sqlite3Strlen30(zPath) - 1;
while( zPath[nDb]!='-' ){
-#ifndef SQLITE_ENABLE_8_3_NAMES
- /* In the normal case (8+3 filenames disabled) the journal filename
- ** is guaranteed to contain a '-' character. */
- assert( nDb>0 );
- assert( sqlite3Isalnum(zPath[nDb]) );
-#else
- /* If 8+3 names are possible, then the journal file might not contain
- ** a '-' character. So check for that case and return early. */
+ /* In normal operation, the journal file name will always contain
+ ** a '-' character. However in 8+3 filename mode, or if a corrupt
+ ** rollback journal specifies a master journal with a goofy name, then
+ ** the '-' might be missing. */
if( nDb==0 || zPath[nDb]=='.' ) return SQLITE_OK;
-#endif
nDb--;
}
memcpy(zDb, zPath, nDb);
@@ -36109,7 +36543,7 @@ static int unixOpen(
** a file-descriptor on the directory too. The first time unixSync()
** is called the directory file descriptor will be fsync()ed and close()d.
*/
- int syncDir = (isCreate && (
+ int isNewJrnl = (isCreate && (
eType==SQLITE_OPEN_MASTER_JOURNAL
|| eType==SQLITE_OPEN_MAIN_JOURNAL
|| eType==SQLITE_OPEN_WAL
@@ -36170,7 +36604,7 @@ static int unixOpen(
return SQLITE_NOMEM_BKPT;
}
}
- p->pUnused = pUnused;
+ p->pPreallocatedUnused = pUnused;
/* Database filenames are double-zero terminated if they are not
** URIs with parameters. Hence, they can always be passed into
@@ -36179,7 +36613,7 @@ static int unixOpen(
}else if( !zName ){
/* If zName is NULL, the upper layer is requesting a temp file. */
- assert(isDelete && !syncDir);
+ assert(isDelete && !isNewJrnl);
rc = unixGetTempname(pVfs->mxPathname, zTmpname);
if( rc!=SQLITE_OK ){
return rc;
@@ -36207,24 +36641,31 @@ static int unixOpen(
gid_t gid; /* Groupid for the file */
rc = findCreateFileMode(zName, flags, &openMode, &uid, &gid);
if( rc!=SQLITE_OK ){
- assert( !p->pUnused );
+ assert( !p->pPreallocatedUnused );
assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL );
return rc;
}
fd = robust_open(zName, openFlags, openMode);
OSTRACE(("OPENX %-3d %s 0%o\n", fd, zName, openFlags));
assert( !isExclusive || (openFlags & O_CREAT)!=0 );
- if( fd<0 && errno!=EISDIR && isReadWrite ){
- /* Failed to open the file for read/write access. Try read-only. */
- flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
- openFlags &= ~(O_RDWR|O_CREAT);
- flags |= SQLITE_OPEN_READONLY;
- openFlags |= O_RDONLY;
- isReadonly = 1;
- fd = robust_open(zName, openFlags, openMode);
+ if( fd<0 ){
+ if( isNewJrnl && errno==EACCES && osAccess(zName, F_OK) ){
+ /* If unable to create a journal because the directory is not
+ ** writable, change the error code to indicate that. */
+ rc = SQLITE_READONLY_DIRECTORY;
+ }else if( errno!=EISDIR && isReadWrite ){
+ /* Failed to open the file for read/write access. Try read-only. */
+ flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
+ openFlags &= ~(O_RDWR|O_CREAT);
+ flags |= SQLITE_OPEN_READONLY;
+ openFlags |= O_RDONLY;
+ isReadonly = 1;
+ fd = robust_open(zName, openFlags, openMode);
+ }
}
if( fd<0 ){
- rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName);
+ int rc2 = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName);
+ if( rc==SQLITE_OK ) rc = rc2;
goto open_finished;
}
@@ -36241,9 +36682,9 @@ static int unixOpen(
*pOutFlags = flags;
}
- if( p->pUnused ){
- p->pUnused->fd = fd;
- p->pUnused->flags = flags;
+ if( p->pPreallocatedUnused ){
+ p->pPreallocatedUnused->fd = fd;
+ p->pPreallocatedUnused->flags = flags;
}
if( isDelete ){
@@ -36284,7 +36725,7 @@ static int unixOpen(
if( isReadonly ) ctrlFlags |= UNIXFILE_RDONLY;
noLock = eType!=SQLITE_OPEN_MAIN_DB;
if( noLock ) ctrlFlags |= UNIXFILE_NOLOCK;
- if( syncDir ) ctrlFlags |= UNIXFILE_DIRSYNC;
+ if( isNewJrnl ) ctrlFlags |= UNIXFILE_DIRSYNC;
if( flags & SQLITE_OPEN_URI ) ctrlFlags |= UNIXFILE_URI;
#if SQLITE_ENABLE_LOCKING_STYLE
@@ -36320,11 +36761,14 @@ static int unixOpen(
}
#endif
+ assert( zPath==0 || zPath[0]=='/'
+ || eType==SQLITE_OPEN_MASTER_JOURNAL || eType==SQLITE_OPEN_MAIN_JOURNAL
+ );
rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
open_finished:
if( rc!=SQLITE_OK ){
- sqlite3_free(p->pUnused);
+ sqlite3_free(p->pPreallocatedUnused);
}
return rc;
}
@@ -37065,7 +37509,7 @@ static int proxyCreateUnixFile(
dummyVfs.zName = "dummy";
pUnused->fd = fd;
pUnused->flags = openFlags;
- pNew->pUnused = pUnused;
+ pNew->pPreallocatedUnused = pUnused;
rc = fillInUnixFile(&dummyVfs, fd, (sqlite3_file*)pNew, path, 0);
if( rc==SQLITE_OK ){
@@ -38015,7 +38459,7 @@ SQLITE_API int sqlite3_os_init(void){
/* Double-check that the aSyscall[] array has been constructed
** correctly. See ticket [bb3a86e890c8e96ab] */
- assert( ArraySize(aSyscall)==28 );
+ assert( ArraySize(aSyscall)==29 );
/* Register all VFSes defined in the aVfs[] array */
for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
@@ -41798,6 +42242,14 @@ static int winFileControl(sqlite3_file *id, int op, void *pArg){
if( newLimit>sqlite3GlobalConfig.mxMmap ){
newLimit = sqlite3GlobalConfig.mxMmap;
}
+
+ /* The value of newLimit may be eventually cast to (SIZE_T) and passed
+ ** to MapViewOfFile(). Restrict its value to 2GB if (SIZE_T) is not at
+ ** least a 64-bit type. */
+ if( newLimit>0 && sizeof(SIZE_T)<8 ){
+ newLimit = (newLimit & 0x7FFFFFFF);
+ }
+
*(i64*)pArg = pFile->mmapSizeMax;
if( newLimit>=0 && newLimit!=pFile->mmapSizeMax && pFile->nFetchOut==0 ){
pFile->mmapSizeMax = newLimit;
@@ -41904,6 +42356,9 @@ struct winShmNode {
int szRegion; /* Size of shared-memory regions */
int nRegion; /* Size of array apRegion */
+ u8 isReadonly; /* True if read-only */
+ u8 isUnlocked; /* True if no DMS lock held */
+
struct ShmRegion {
HANDLE hMap; /* File handle from CreateFileMapping */
void *pMap;
@@ -41970,7 +42425,7 @@ static int winShmSystemLock(
int rc = 0; /* Result code form Lock/UnlockFileEx() */
/* Access to the winShmNode object is serialized by the caller */
- assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
+ assert( pFile->nRef==0 || sqlite3_mutex_held(pFile->mutex) );
OSTRACE(("SHM-LOCK file=%p, lock=%d, offset=%d, size=%d\n",
pFile->hFile.h, lockType, ofst, nByte));
@@ -42052,6 +42507,37 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
}
/*
+** The DMS lock has not yet been taken on shm file pShmNode. Attempt to
+** take it now. Return SQLITE_OK if successful, or an SQLite error
+** code otherwise.
+**
+** If the DMS cannot be locked because this is a readonly_shm=1
+** connection and no other process already holds a lock, return
+** SQLITE_READONLY_CANTINIT and set pShmNode->isUnlocked=1.
+*/
+static int winLockSharedMemory(winShmNode *pShmNode){
+ int rc = winShmSystemLock(pShmNode, WINSHM_WRLCK, WIN_SHM_DMS, 1);
+
+ if( rc==SQLITE_OK ){
+ if( pShmNode->isReadonly ){
+ pShmNode->isUnlocked = 1;
+ winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1);
+ return SQLITE_READONLY_CANTINIT;
+ }else if( winTruncate((sqlite3_file*)&pShmNode->hFile, 0) ){
+ winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1);
+ return winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(),
+ "winLockSharedMemory", pShmNode->zFilename);
+ }
+ }
+
+ if( rc==SQLITE_OK ){
+ winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1);
+ }
+
+ return winShmSystemLock(pShmNode, WINSHM_RDLCK, WIN_SHM_DMS, 1);
+}
+
+/*
** Open the shared-memory area associated with database file pDbFd.
**
** When opening a new shared-memory file, if no other instances of that
@@ -42060,9 +42546,9 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
*/
static int winOpenSharedMemory(winFile *pDbFd){
struct winShm *p; /* The connection to be opened */
- struct winShmNode *pShmNode = 0; /* The underlying mmapped file */
- int rc; /* Result code */
- struct winShmNode *pNew; /* Newly allocated winShmNode */
+ winShmNode *pShmNode = 0; /* The underlying mmapped file */
+ int rc = SQLITE_OK; /* Result code */
+ winShmNode *pNew; /* Newly allocated winShmNode */
int nName; /* Size of zName in bytes */
assert( pDbFd->pShm==0 ); /* Not previously opened */
@@ -42095,6 +42581,9 @@ static int winOpenSharedMemory(winFile *pDbFd){
if( pShmNode ){
sqlite3_free(pNew);
}else{
+ int inFlags = SQLITE_OPEN_WAL;
+ int outFlags = 0;
+
pShmNode = pNew;
pNew = 0;
((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE;
@@ -42109,30 +42598,23 @@ static int winOpenSharedMemory(winFile *pDbFd){
}
}
- rc = winOpen(pDbFd->pVfs,
- pShmNode->zFilename, /* Name of the file (UTF-8) */
- (sqlite3_file*)&pShmNode->hFile, /* File handle here */
- SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
- 0);
- if( SQLITE_OK!=rc ){
+ if( 0==sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){
+ inFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE;
+ }else{
+ inFlags |= SQLITE_OPEN_READONLY;
+ }
+ rc = winOpen(pDbFd->pVfs, pShmNode->zFilename,
+ (sqlite3_file*)&pShmNode->hFile,
+ inFlags, &outFlags);
+ if( rc!=SQLITE_OK ){
+ rc = winLogError(rc, osGetLastError(), "winOpenShm",
+ pShmNode->zFilename);
goto shm_open_err;
}
+ if( outFlags==SQLITE_OPEN_READONLY ) pShmNode->isReadonly = 1;
- /* Check to see if another process is holding the dead-man switch.
- ** If not, truncate the file to zero length.
- */
- if( winShmSystemLock(pShmNode, WINSHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){
- rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0);
- if( rc!=SQLITE_OK ){
- rc = winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(),
- "winOpenShm", pDbFd->zPath);
- }
- }
- if( rc==SQLITE_OK ){
- winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1);
- rc = winShmSystemLock(pShmNode, WINSHM_RDLCK, WIN_SHM_DMS, 1);
- }
- if( rc ) goto shm_open_err;
+ rc = winLockSharedMemory(pShmNode);
+ if( rc!=SQLITE_OK && rc!=SQLITE_READONLY_CANTINIT ) goto shm_open_err;
}
/* Make the new connection a child of the winShmNode */
@@ -42155,7 +42637,7 @@ static int winOpenSharedMemory(winFile *pDbFd){
p->pNext = pShmNode->pFirst;
pShmNode->pFirst = p;
sqlite3_mutex_leave(pShmNode->mutex);
- return SQLITE_OK;
+ return rc;
/* Jump here on any error */
shm_open_err:
@@ -42359,6 +42841,8 @@ static int winShmMap(
winFile *pDbFd = (winFile*)fd;
winShm *pShm = pDbFd->pShm;
winShmNode *pShmNode;
+ DWORD protect = PAGE_READWRITE;
+ DWORD flags = FILE_MAP_WRITE | FILE_MAP_READ;
int rc = SQLITE_OK;
if( !pShm ){
@@ -42369,6 +42853,11 @@ static int winShmMap(
pShmNode = pShm->pShmNode;
sqlite3_mutex_enter(pShmNode->mutex);
+ if( pShmNode->isUnlocked ){
+ rc = winLockSharedMemory(pShmNode);
+ if( rc!=SQLITE_OK ) goto shmpage_out;
+ pShmNode->isUnlocked = 0;
+ }
assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
if( pShmNode->nRegion<=iRegion ){
@@ -42415,21 +42904,26 @@ static int winShmMap(
}
pShmNode->aRegion = apNew;
+ if( pShmNode->isReadonly ){
+ protect = PAGE_READONLY;
+ flags = FILE_MAP_READ;
+ }
+
while( pShmNode->nRegion<=iRegion ){
HANDLE hMap = NULL; /* file-mapping handle */
void *pMap = 0; /* Mapped memory region */
#if SQLITE_OS_WINRT
hMap = osCreateFileMappingFromApp(pShmNode->hFile.h,
- NULL, PAGE_READWRITE, nByte, NULL
+ NULL, protect, nByte, NULL
);
#elif defined(SQLITE_WIN32_HAS_WIDE)
hMap = osCreateFileMappingW(pShmNode->hFile.h,
- NULL, PAGE_READWRITE, 0, nByte, NULL
+ NULL, protect, 0, nByte, NULL
);
#elif defined(SQLITE_WIN32_HAS_ANSI) && SQLITE_WIN32_CREATEFILEMAPPINGA
hMap = osCreateFileMappingA(pShmNode->hFile.h,
- NULL, PAGE_READWRITE, 0, nByte, NULL
+ NULL, protect, 0, nByte, NULL
);
#endif
OSTRACE(("SHM-MAP-CREATE pid=%lu, region=%d, size=%d, rc=%s\n",
@@ -42439,11 +42933,11 @@ static int winShmMap(
int iOffset = pShmNode->nRegion*szRegion;
int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
#if SQLITE_OS_WINRT
- pMap = osMapViewOfFileFromApp(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
+ pMap = osMapViewOfFileFromApp(hMap, flags,
iOffset - iOffsetShift, szRegion + iOffsetShift
);
#else
- pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
+ pMap = osMapViewOfFile(hMap, flags,
0, iOffset - iOffsetShift, szRegion + iOffsetShift
);
#endif
@@ -42474,6 +42968,7 @@ shmpage_out:
}else{
*pp = 0;
}
+ if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY;
sqlite3_mutex_leave(pShmNode->mutex);
return rc;
}
@@ -43110,6 +43605,14 @@ static int winIsDir(const void *zConverted){
return (attr!=INVALID_FILE_ATTRIBUTES) && (attr&FILE_ATTRIBUTE_DIRECTORY);
}
+/* forward reference */
+static int winAccess(
+ sqlite3_vfs *pVfs, /* Not used on win32 */
+ const char *zFilename, /* Name of file to check */
+ int flags, /* Type of test to make on this file */
+ int *pResOut /* OUT: Result */
+);
+
/*
** Open a file.
*/
@@ -43286,37 +43789,58 @@ static int winOpen(
extendedParameters.dwSecurityQosFlags = SECURITY_ANONYMOUS;
extendedParameters.lpSecurityAttributes = NULL;
extendedParameters.hTemplateFile = NULL;
- while( (h = osCreateFile2((LPCWSTR)zConverted,
- dwDesiredAccess,
- dwShareMode,
- dwCreationDisposition,
- &extendedParameters))==INVALID_HANDLE_VALUE &&
- winRetryIoerr(&cnt, &lastErrno) ){
- /* Noop */
- }
+ do{
+ h = osCreateFile2((LPCWSTR)zConverted,
+ dwDesiredAccess,
+ dwShareMode,
+ dwCreationDisposition,
+ &extendedParameters);
+ if( h!=INVALID_HANDLE_VALUE ) break;
+ if( isReadWrite ){
+ int rc2, isRO = 0;
+ sqlite3BeginBenignMalloc();
+ rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO);
+ sqlite3EndBenignMalloc();
+ if( rc2==SQLITE_OK && isRO ) break;
+ }
+ }while( winRetryIoerr(&cnt, &lastErrno) );
#else
- while( (h = osCreateFileW((LPCWSTR)zConverted,
- dwDesiredAccess,
- dwShareMode, NULL,
- dwCreationDisposition,
- dwFlagsAndAttributes,
- NULL))==INVALID_HANDLE_VALUE &&
- winRetryIoerr(&cnt, &lastErrno) ){
- /* Noop */
- }
+ do{
+ h = osCreateFileW((LPCWSTR)zConverted,
+ dwDesiredAccess,
+ dwShareMode, NULL,
+ dwCreationDisposition,
+ dwFlagsAndAttributes,
+ NULL);
+ if( h!=INVALID_HANDLE_VALUE ) break;
+ if( isReadWrite ){
+ int rc2, isRO = 0;
+ sqlite3BeginBenignMalloc();
+ rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO);
+ sqlite3EndBenignMalloc();
+ if( rc2==SQLITE_OK && isRO ) break;
+ }
+ }while( winRetryIoerr(&cnt, &lastErrno) );
#endif
}
#ifdef SQLITE_WIN32_HAS_ANSI
else{
- while( (h = osCreateFileA((LPCSTR)zConverted,
- dwDesiredAccess,
- dwShareMode, NULL,
- dwCreationDisposition,
- dwFlagsAndAttributes,
- NULL))==INVALID_HANDLE_VALUE &&
- winRetryIoerr(&cnt, &lastErrno) ){
- /* Noop */
- }
+ do{
+ h = osCreateFileA((LPCSTR)zConverted,
+ dwDesiredAccess,
+ dwShareMode, NULL,
+ dwCreationDisposition,
+ dwFlagsAndAttributes,
+ NULL);
+ if( h!=INVALID_HANDLE_VALUE ) break;
+ if( isReadWrite ){
+ int rc2, isRO = 0;
+ sqlite3BeginBenignMalloc();
+ rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO);
+ sqlite3EndBenignMalloc();
+ if( rc2==SQLITE_OK && isRO ) break;
+ }
+ }while( winRetryIoerr(&cnt, &lastErrno) );
}
#endif
winLogIoerr(cnt, __LINE__);
@@ -43325,8 +43849,6 @@ static int winOpen(
dwDesiredAccess, (h==INVALID_HANDLE_VALUE) ? "failed" : "ok"));
if( h==INVALID_HANDLE_VALUE ){
- pFile->lastErrno = lastErrno;
- winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
sqlite3_free(zConverted);
sqlite3_free(zTmpname);
if( isReadWrite && !isExclusive ){
@@ -43335,6 +43857,8 @@ static int winOpen(
~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
pOutFlags);
}else{
+ pFile->lastErrno = lastErrno;
+ winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
return SQLITE_CANTOPEN_BKPT;
}
}
@@ -43927,9 +44451,6 @@ static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
EntropyGatherer e;
UNUSED_PARAMETER(pVfs);
memset(zBuf, 0, nBuf);
-#if defined(_MSC_VER) && _MSC_VER>=1400 && !SQLITE_OS_WINCE
- rand_s((unsigned int*)zBuf); /* rand_s() is not available with MinGW */
-#endif /* defined(_MSC_VER) && _MSC_VER>=1400 */
e.a = (unsigned char*)zBuf;
e.na = nBuf;
e.nXor = 0;
@@ -44848,12 +45369,9 @@ static void pcacheManageDirtyList(PgHdr *pPage, u8 addRemove){
p->eCreate = 2;
}
}
- pPage->pDirtyNext = 0;
- pPage->pDirtyPrev = 0;
}
if( addRemove & PCACHE_DIRTYLIST_ADD ){
- assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
-
+ pPage->pDirtyPrev = 0;
pPage->pDirtyNext = p->pDirty;
if( pPage->pDirtyNext ){
assert( pPage->pDirtyNext->pDirtyPrev==0 );
@@ -45170,11 +45688,7 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){
if( (--p->nRef)==0 ){
if( p->flags&PGHDR_CLEAN ){
pcacheUnpin(p);
- }else if( p->pDirtyPrev!=0 ){ /*OPTIMIZATION-IF-FALSE*/
- /* Move the page to the head of the dirty list. If p->pDirtyPrev==0,
- ** then page p is already at the head of the dirty list and the
- ** following call would be a no-op. Hence the OPTIMIZATION-IF-FALSE
- ** tag above. */
+ }else{
pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
}
}
@@ -45230,16 +45744,15 @@ SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
*/
SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
assert( sqlite3PcachePageSanity(p) );
- if( ALWAYS((p->flags & PGHDR_DIRTY)!=0) ){
- assert( (p->flags & PGHDR_CLEAN)==0 );
- pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE);
- p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC|PGHDR_WRITEABLE);
- p->flags |= PGHDR_CLEAN;
- pcacheTrace(("%p.CLEAN %d\n",p->pCache,p->pgno));
- assert( sqlite3PcachePageSanity(p) );
- if( p->nRef==0 ){
- pcacheUnpin(p);
- }
+ assert( (p->flags & PGHDR_DIRTY)!=0 );
+ assert( (p->flags & PGHDR_CLEAN)==0 );
+ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE);
+ p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC|PGHDR_WRITEABLE);
+ p->flags |= PGHDR_CLEAN;
+ pcacheTrace(("%p.CLEAN %d\n",p->pCache,p->pgno));
+ assert( sqlite3PcachePageSanity(p) );
+ if( p->nRef==0 ){
+ pcacheUnpin(p);
}
}
@@ -45635,7 +46148,6 @@ typedef struct PGroup PGroup;
struct PgHdr1 {
sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */
unsigned int iKey; /* Key value (page number) */
- u8 isPinned; /* Page in use, not on the LRU list */
u8 isBulkLocal; /* This page from bulk local storage */
u8 isAnchor; /* This is the PGroup.lru element */
PgHdr1 *pNext; /* Next in hash table chain */
@@ -45644,6 +46156,12 @@ struct PgHdr1 {
PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */
};
+/*
+** A page is pinned if it is no on the LRU list
+*/
+#define PAGE_IS_PINNED(p) ((p)->pLruNext==0)
+#define PAGE_IS_UNPINNED(p) ((p)->pLruNext!=0)
+
/* Each page cache (or PCache) belongs to a PGroup. A PGroup is a set
** of one or more PCaches that are able to recycle each other's unpinned
** pages when they are under memory pressure. A PGroup is an instance of
@@ -45671,7 +46189,7 @@ struct PGroup {
unsigned int nMaxPage; /* Sum of nMax for purgeable caches */
unsigned int nMinPage; /* Sum of nMin for purgeable caches */
unsigned int mxPinned; /* nMaxpage + 10 - nMinPage */
- unsigned int nCurrentPage; /* Number of purgeable pages allocated */
+ unsigned int nPurgeable; /* Number of purgeable pages allocated */
PgHdr1 lru; /* The beginning and end of the LRU list */
};
@@ -45685,11 +46203,13 @@ struct PGroup {
*/
struct PCache1 {
/* Cache configuration parameters. Page size (szPage) and the purgeable
- ** flag (bPurgeable) are set when the cache is created. nMax may be
+ ** flag (bPurgeable) and the pnPurgeable pointer are all set when the
+ ** cache is created and are never changed thereafter. nMax may be
** modified at any time by a call to the pcache1Cachesize() method.
** The PGroup mutex must be held when accessing nMax.
*/
PGroup *pGroup; /* PGroup this cache belongs to */
+ unsigned int *pnPurgeable; /* Pointer to pGroup->nPurgeable */
int szPage; /* Size of database content section */
int szExtra; /* sizeof(MemPage)+sizeof(PgHdr) */
int szAlloc; /* Total size of one pcache line */
@@ -45784,6 +46304,7 @@ SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
if( pcache1.isInit ){
PgFreeslot *p;
if( pBuf==0 ) sz = n = 0;
+ if( n==0 ) sz = 0;
sz = ROUNDDOWN8(sz);
pcache1.szSlot = sz;
pcache1.nSlot = pcache1.nFreeSlot = n;
@@ -45976,9 +46497,7 @@ static PgHdr1 *pcache1AllocPage(PCache1 *pCache, int benignMalloc){
p->isBulkLocal = 0;
p->isAnchor = 0;
}
- if( pCache->bPurgeable ){
- pCache->pGroup->nCurrentPage++;
- }
+ (*pCache->pnPurgeable)++;
return p;
}
@@ -45999,9 +46518,7 @@ static void pcache1FreePage(PgHdr1 *p){
sqlite3_free(p);
#endif
}
- if( pCache->bPurgeable ){
- pCache->pGroup->nCurrentPage--;
- }
+ (*pCache->pnPurgeable)--;
}
/*
@@ -46096,22 +46613,18 @@ static void pcache1ResizeHash(PCache1 *p){
** The PGroup mutex must be held when this function is called.
*/
static PgHdr1 *pcache1PinPage(PgHdr1 *pPage){
- PCache1 *pCache;
-
assert( pPage!=0 );
- assert( pPage->isPinned==0 );
- pCache = pPage->pCache;
+ assert( PAGE_IS_UNPINNED(pPage) );
assert( pPage->pLruNext );
assert( pPage->pLruPrev );
- assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
+ assert( sqlite3_mutex_held(pPage->pCache->pGroup->mutex) );
pPage->pLruPrev->pLruNext = pPage->pLruNext;
pPage->pLruNext->pLruPrev = pPage->pLruPrev;
pPage->pLruNext = 0;
pPage->pLruPrev = 0;
- pPage->isPinned = 1;
assert( pPage->isAnchor==0 );
- assert( pCache->pGroup->lru.isAnchor==1 );
- pCache->nRecyclable--;
+ assert( pPage->pCache->pGroup->lru.isAnchor==1 );
+ pPage->pCache->nRecyclable--;
return pPage;
}
@@ -46145,11 +46658,11 @@ static void pcache1EnforceMaxPage(PCache1 *pCache){
PGroup *pGroup = pCache->pGroup;
PgHdr1 *p;
assert( sqlite3_mutex_held(pGroup->mutex) );
- while( pGroup->nCurrentPage>pGroup->nMaxPage
+ while( pGroup->nPurgeable>pGroup->nMaxPage
&& (p=pGroup->lru.pLruPrev)->isAnchor==0
){
assert( p->pCache->pGroup==pGroup );
- assert( p->isPinned==0 );
+ assert( PAGE_IS_UNPINNED(p) );
pcache1PinPage(p);
pcache1RemoveFromHash(p, 1);
}
@@ -46198,7 +46711,7 @@ static void pcache1TruncateUnsafe(
if( pPage->iKey>=iLimit ){
pCache->nPage--;
*pp = pPage->pNext;
- if( !pPage->isPinned ) pcache1PinPage(pPage);
+ if( PAGE_IS_UNPINNED(pPage) ) pcache1PinPage(pPage);
pcache1FreePage(pPage);
}else{
pp = &pPage->pNext;
@@ -46316,6 +46829,10 @@ static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
pCache->nMin = 10;
pGroup->nMinPage += pCache->nMin;
pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
+ pCache->pnPurgeable = &pGroup->nPurgeable;
+ }else{
+ static unsigned int dummyCurrentPage;
+ pCache->pnPurgeable = &dummyCurrentPage;
}
pcache1LeaveMutex(pGroup);
if( pCache->nHash==0 ){
@@ -46417,7 +46934,7 @@ static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
){
PCache1 *pOther;
pPage = pGroup->lru.pLruPrev;
- assert( pPage->isPinned==0 );
+ assert( PAGE_IS_UNPINNED(pPage) );
pcache1RemoveFromHash(pPage, 0);
pcache1PinPage(pPage);
pOther = pPage->pCache;
@@ -46425,7 +46942,7 @@ static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
pcache1FreePage(pPage);
pPage = 0;
}else{
- pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable);
+ pGroup->nPurgeable -= (pOther->bPurgeable - pCache->bPurgeable);
}
}
@@ -46444,7 +46961,6 @@ static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
pPage->pCache = pCache;
pPage->pLruPrev = 0;
pPage->pLruNext = 0;
- pPage->isPinned = 1;
*(void **)pPage->page.pExtra = 0;
pCache->apHash[h] = pPage;
if( iKey>pCache->iMaxKey ){
@@ -46530,7 +47046,7 @@ static PgHdr1 *pcache1FetchNoMutex(
** Otherwise (page not in hash and createFlag!=0) continue with
** subsequent steps to try to create the page. */
if( pPage ){
- if( !pPage->isPinned ){
+ if( PAGE_IS_UNPINNED(pPage) ){
return pcache1PinPage(pPage);
}else{
return pPage;
@@ -46605,9 +47121,9 @@ static void pcache1Unpin(
** part of the PGroup LRU list.
*/
assert( pPage->pLruPrev==0 && pPage->pLruNext==0 );
- assert( pPage->isPinned==1 );
+ assert( PAGE_IS_PINNED(pPage) );
- if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){
+ if( reuseUnlikely || pGroup->nPurgeable>pGroup->nMaxPage ){
pcache1RemoveFromHash(pPage, 1);
}else{
/* Add the page to the PGroup LRU list. */
@@ -46616,7 +47132,6 @@ static void pcache1Unpin(
(pPage->pLruNext = *ppFirst)->pLruPrev = pPage;
*ppFirst = pPage;
pCache->nRecyclable++;
- pPage->isPinned = 0;
}
pcache1LeaveMutex(pCache->pGroup);
@@ -46760,7 +47275,7 @@ SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
#ifdef SQLITE_PCACHE_SEPARATE_HEADER
nFree += sqlite3MemSize(p);
#endif
- assert( p->isPinned==0 );
+ assert( PAGE_IS_UNPINNED(p) );
pcache1PinPage(p);
pcache1RemoveFromHash(p, 1);
}
@@ -46784,10 +47299,10 @@ SQLITE_PRIVATE void sqlite3PcacheStats(
PgHdr1 *p;
int nRecyclable = 0;
for(p=pcache1.grp.lru.pLruNext; p && !p->isAnchor; p=p->pLruNext){
- assert( p->isPinned==0 );
+ assert( PAGE_IS_UNPINNED(p) );
nRecyclable++;
}
- *pnCurrent = pcache1.grp.nCurrentPage;
+ *pnCurrent = pcache1.grp.nPurgeable;
*pnMax = (int)pcache1.grp.nMaxPage;
*pnMin = (int)pcache1.grp.nMinPage;
*pnRecyclable = nRecyclable;
@@ -47342,11 +47857,11 @@ SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, int iBatch, sqlite3_int64
/* #include "sqliteInt.h" */
-/* Additional values that can be added to the sync_flags argument of
-** sqlite3WalFrames():
+/* Macros for extracting appropriate sync flags for either transaction
+** commits (WAL_SYNC_FLAGS(X)) or for checkpoint ops (CKPT_SYNC_FLAGS(X)):
*/
-#define WAL_SYNC_TRANSACTIONS 0x20 /* Sync at the end of each transaction */
-#define SQLITE_SYNC_MASK 0x13 /* Mask off the SQLITE_SYNC_* values */
+#define WAL_SYNC_FLAGS(X) ((X)&0x03)
+#define CKPT_SYNC_FLAGS(X) (((X)>>2)&0x03)
#ifdef SQLITE_OMIT_WAL
# define sqlite3WalOpen(x,y,z) 0
@@ -47579,8 +48094,8 @@ int sqlite3PagerTrace=1; /* True to enable tracing */
** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file
** struct as its argument.
*/
-#define PAGERID(p) ((int)(p->fd))
-#define FILEHANDLEID(fd) ((int)fd)
+#define PAGERID(p) (SQLITE_PTR_TO_INT(p->fd))
+#define FILEHANDLEID(fd) (SQLITE_PTR_TO_INT(fd))
/*
** The Pager.eState variable stores the current 'state' of a pager. A
@@ -48067,6 +48582,18 @@ struct PagerSavepoint {
** is set to zero in all other states. In PAGER_ERROR state, Pager.errCode
** is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX
** sub-codes.
+**
+** syncFlags, walSyncFlags
+**
+** syncFlags is either SQLITE_SYNC_NORMAL (0x02) or SQLITE_SYNC_FULL (0x03).
+** syncFlags is used for rollback mode. walSyncFlags is used for WAL mode
+** and contains the flags used to sync the checkpoint operations in the
+** lower two bits, and sync flags used for transaction commits in the WAL
+** file in bits 0x04 and 0x08. In other words, to get the correct sync flags
+** for checkpoint operations, use (walSyncFlags&0x03) and to get the correct
+** sync flags for transaction commit, use ((walSyncFlags>>2)&0x03). Note
+** that with synchronous=NORMAL in WAL mode, transaction commit is not synced
+** meaning that the 0x04 and 0x08 bits are both zero.
*/
struct Pager {
sqlite3_vfs *pVfs; /* OS functions to use for IO */
@@ -48076,9 +48603,8 @@ struct Pager {
u8 noSync; /* Do not sync the journal if true */
u8 fullSync; /* Do extra syncs of the journal for robustness */
u8 extraSync; /* sync directory after journal delete */
- u8 ckptSyncFlags; /* SYNC_NORMAL or SYNC_FULL for checkpoint */
- u8 walSyncFlags; /* SYNC_NORMAL or SYNC_FULL for wal writes */
u8 syncFlags; /* SYNC_NORMAL or SYNC_FULL otherwise */
+ u8 walSyncFlags; /* See description above */
u8 tempFile; /* zFilename is a temporary or immutable file */
u8 noLock; /* Do not lock (except in WAL mode) */
u8 readOnly; /* True for a read-only database */
@@ -48398,6 +48924,7 @@ static int assert_pager_state(Pager *p){
assert( isOpen(p->jfd)
|| p->journalMode==PAGER_JOURNALMODE_OFF
|| p->journalMode==PAGER_JOURNALMODE_WAL
+ || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC)
);
assert( pPager->dbOrigSize<=pPager->dbHintSize );
break;
@@ -48409,6 +48936,7 @@ static int assert_pager_state(Pager *p){
assert( isOpen(p->jfd)
|| p->journalMode==PAGER_JOURNALMODE_OFF
|| p->journalMode==PAGER_JOURNALMODE_WAL
+ || (sqlite3OsDeviceCharacteristics(p->fd)&SQLITE_IOCAP_BATCH_ATOMIC)
);
break;
@@ -48619,34 +49147,47 @@ static int pagerLockDb(Pager *pPager, int eLock){
}
/*
-** This function determines whether or not the atomic-write optimization
-** can be used with this pager. The optimization can be used if:
+** This function determines whether or not the atomic-write or
+** atomic-batch-write optimizations can be used with this pager. The
+** atomic-write optimization can be used if:
**
** (a) the value returned by OsDeviceCharacteristics() indicates that
** a database page may be written atomically, and
** (b) the value returned by OsSectorSize() is less than or equal
** to the page size.
**
-** The optimization is also always enabled for temporary files. It is
-** an error to call this function if pPager is opened on an in-memory
-** database.
+** If it can be used, then the value returned is the size of the journal
+** file when it contains rollback data for exactly one page.
**
-** If the optimization cannot be used, 0 is returned. If it can be used,
-** then the value returned is the size of the journal file when it
-** contains rollback data for exactly one page.
+** The atomic-batch-write optimization can be used if OsDeviceCharacteristics()
+** returns a value with the SQLITE_IOCAP_BATCH_ATOMIC bit set. -1 is
+** returned in this case.
+**
+** If neither optimization can be used, 0 is returned.
*/
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
static int jrnlBufferSize(Pager *pPager){
assert( !MEMDB );
- if( !pPager->tempFile ){
- int dc; /* Device characteristics */
- int nSector; /* Sector size */
- int szPage; /* Page size */
- assert( isOpen(pPager->fd) );
- dc = sqlite3OsDeviceCharacteristics(pPager->fd);
- nSector = pPager->sectorSize;
- szPage = pPager->pageSize;
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
+ int dc; /* Device characteristics */
+
+ assert( isOpen(pPager->fd) );
+ dc = sqlite3OsDeviceCharacteristics(pPager->fd);
+#else
+ UNUSED_PARAMETER(pPager);
+#endif
+
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+ if( dc&SQLITE_IOCAP_BATCH_ATOMIC ){
+ return -1;
+ }
+#endif
+
+#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+ {
+ int nSector = pPager->sectorSize;
+ int szPage = pPager->pageSize;
assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
@@ -48656,11 +49197,11 @@ static int jrnlBufferSize(Pager *pPager){
}
return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);
-}
-#else
-# define jrnlBufferSize(x) 0
#endif
+ return 0;
+}
+
/*
** If SQLITE_CHECK_PAGES is defined then we do some sanity checking
** on the cache using a hash function. This is used for testing
@@ -48742,6 +49283,7 @@ static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){
|| szJ<16
|| SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
|| len>=nMaster
+ || len>szJ-16
|| len==0
|| SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
|| SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
@@ -49463,7 +50005,9 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
}
releaseAllSavepoints(pPager);
- assert( isOpen(pPager->jfd) || pPager->pInJournal==0 );
+ assert( isOpen(pPager->jfd) || pPager->pInJournal==0
+ || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_BATCH_ATOMIC)
+ );
if( isOpen(pPager->jfd) ){
assert( !pagerUseWal(pPager) );
@@ -50231,6 +50775,7 @@ static int pager_playback(Pager *pPager, int isHot){
char *zMaster = 0; /* Name of master journal file if any */
int needPagerReset; /* True to reset page prior to first page rollback */
int nPlayback = 0; /* Total number of pages restored from journal */
+ u32 savedPageSize = pPager->pageSize;
/* Figure out how many records are in the journal. Abort early if
** the journal is empty.
@@ -50360,6 +50905,9 @@ static int pager_playback(Pager *pPager, int isHot){
assert( 0 );
end_playback:
+ if( rc==SQLITE_OK ){
+ rc = sqlite3PagerSetPagesize(pPager, &savedPageSize, -1);
+ }
/* Following a rollback, the database file should be back in its original
** state prior to the start of the transaction, so invoke the
** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the
@@ -50418,7 +50966,8 @@ end_playback:
/*
-** Read the content for page pPg out of the database file and into
+** Read the content for page pPg out of the database file (or out of
+** the WAL if that is where the most recent copy if found) into
** pPg->pData. A shared lock or greater must be held on the database
** file before this function is called.
**
@@ -50428,30 +50977,33 @@ end_playback:
** If an IO error occurs, then the IO error is returned to the caller.
** Otherwise, SQLITE_OK is returned.
*/
-static int readDbPage(PgHdr *pPg, u32 iFrame){
+static int readDbPage(PgHdr *pPg){
Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
- Pgno pgno = pPg->pgno; /* Page number to read */
int rc = SQLITE_OK; /* Return code */
- int pgsz = pPager->pageSize; /* Number of bytes to read */
+
+#ifndef SQLITE_OMIT_WAL
+ u32 iFrame = 0; /* Frame of WAL containing pgno */
assert( pPager->eState>=PAGER_READER && !MEMDB );
assert( isOpen(pPager->fd) );
-#ifndef SQLITE_OMIT_WAL
+ if( pagerUseWal(pPager) ){
+ rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame);
+ if( rc ) return rc;
+ }
if( iFrame ){
- /* Try to pull the page from the write-ahead log. */
- rc = sqlite3WalReadFrame(pPager->pWal, iFrame, pgsz, pPg->pData);
+ rc = sqlite3WalReadFrame(pPager->pWal, iFrame,pPager->pageSize,pPg->pData);
}else
#endif
{
- i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
- rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
+ i64 iOffset = (pPg->pgno-1)*(i64)pPager->pageSize;
+ rc = sqlite3OsRead(pPager->fd, pPg->pData, pPager->pageSize, iOffset);
if( rc==SQLITE_IOERR_SHORT_READ ){
rc = SQLITE_OK;
}
}
- if( pgno==1 ){
+ if( pPg->pgno==1 ){
if( rc ){
/* If the read is unsuccessful, set the dbFileVers[] to something
** that will never be a valid file version. dbFileVers[] is a copy
@@ -50471,13 +51023,13 @@ static int readDbPage(PgHdr *pPg, u32 iFrame){
memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
}
}
- CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM_BKPT);
+ CODEC1(pPager, pPg->pData, pPg->pgno, 3, rc = SQLITE_NOMEM_BKPT);
PAGER_INCR(sqlite3_pager_readdb_count);
PAGER_INCR(pPager->nRead);
- IOTRACE(("PGIN %p %d\n", pPager, pgno));
+ IOTRACE(("PGIN %p %d\n", pPager, pPg->pgno));
PAGERTRACE(("FETCH %d page %d hash(%08x)\n",
- PAGERID(pPager), pgno, pager_pagehash(pPg)));
+ PAGERID(pPager), pPg->pgno, pager_pagehash(pPg)));
return rc;
}
@@ -50528,11 +51080,7 @@ static int pagerUndoCallback(void *pCtx, Pgno iPg){
if( sqlite3PcachePageRefcount(pPg)==1 ){
sqlite3PcacheDrop(pPg);
}else{
- u32 iFrame = 0;
- rc = sqlite3WalFindFrame(pPager->pWal, pPg->pgno, &iFrame);
- if( rc==SQLITE_OK ){
- rc = readDbPage(pPg, iFrame);
- }
+ rc = readDbPage(pPg);
if( rc==SQLITE_OK ){
pPager->xReiniter(pPg);
}
@@ -51038,20 +51586,17 @@ SQLITE_PRIVATE void sqlite3PagerSetFlags(
}
if( pPager->noSync ){
pPager->syncFlags = 0;
- pPager->ckptSyncFlags = 0;
}else if( pgFlags & PAGER_FULLFSYNC ){
pPager->syncFlags = SQLITE_SYNC_FULL;
- pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
- }else if( pgFlags & PAGER_CKPT_FULLFSYNC ){
- pPager->syncFlags = SQLITE_SYNC_NORMAL;
- pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
}else{
pPager->syncFlags = SQLITE_SYNC_NORMAL;
- pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
}
- pPager->walSyncFlags = pPager->syncFlags;
+ pPager->walSyncFlags = (pPager->syncFlags<<2);
if( pPager->fullSync ){
- pPager->walSyncFlags |= WAL_SYNC_TRANSACTIONS;
+ pPager->walSyncFlags |= pPager->syncFlags;
+ }
+ if( (pgFlags & PAGER_CKPT_FULLFSYNC) && !pPager->noSync ){
+ pPager->walSyncFlags |= (SQLITE_SYNC_FULL<<2);
}
if( pgFlags & PAGER_CACHESPILL ){
pPager->doNotSpill &= ~SPILLFLAG_OFF;
@@ -51550,7 +52095,7 @@ SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager, sqlite3 *db){
pPager->exclusiveMode = 0;
#ifndef SQLITE_OMIT_WAL
assert( db || pPager->pWal==0 );
- sqlite3WalClose(pPager->pWal, db, pPager->ckptSyncFlags, pPager->pageSize,
+ sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, pPager->pageSize,
(db && (db->flags & SQLITE_NoCkptOnClose) ? 0 : pTmp)
);
pPager->pWal = 0;
@@ -52018,6 +52563,13 @@ static int pagerStress(void *p, PgHdr *pPg){
rc = pagerWalFrames(pPager, pPg, 0, 0);
}
}else{
+
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+ if( pPager->tempFile==0 ){
+ rc = sqlite3JournalCreate(pPager->jfd);
+ if( rc!=SQLITE_OK ) return pager_error(pPager, rc);
+ }
+#endif
/* Sync the journal file if required. */
if( pPg->flags&PGHDR_NEED_SYNC
@@ -52351,13 +52903,11 @@ act_like_temp_file:
assert( pPager->extraSync==0 );
assert( pPager->syncFlags==0 );
assert( pPager->walSyncFlags==0 );
- assert( pPager->ckptSyncFlags==0 );
}else{
pPager->fullSync = 1;
pPager->extraSync = 0;
pPager->syncFlags = SQLITE_SYNC_NORMAL;
- pPager->walSyncFlags = SQLITE_SYNC_NORMAL | WAL_SYNC_TRANSACTIONS;
- pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
+ pPager->walSyncFlags = SQLITE_SYNC_NORMAL | (SQLITE_SYNC_NORMAL<<2);
}
/* pPager->pFirst = 0; */
/* pPager->pFirstSynced = 0; */
@@ -52777,7 +53327,8 @@ SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
** nothing to rollback, so this routine is a no-op.
*/
static void pagerUnlockIfUnused(Pager *pPager){
- if( pPager->nMmapOut==0 && (sqlite3PcacheRefCount(pPager->pPCache)==0) ){
+ if( sqlite3PcacheRefCount(pPager->pPCache)==0 ){
+ assert( pPager->nMmapOut==0 ); /* because page1 is never memory mapped */
pagerUnlockAndRollback(pPager);
}
}
@@ -52918,14 +53469,9 @@ static int getPageNormal(
memset(pPg->pData, 0, pPager->pageSize);
IOTRACE(("ZERO %p %d\n", pPager, pgno));
}else{
- u32 iFrame = 0; /* Frame to read from WAL file */
- if( pagerUseWal(pPager) ){
- rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame);
- if( rc!=SQLITE_OK ) goto pager_acquire_err;
- }
assert( pPg->pPager==pPager );
pPager->aStat[PAGER_STAT_MISS]++;
- rc = readDbPage(pPg, iFrame);
+ rc = readDbPage(pPg);
if( rc!=SQLITE_OK ){
goto pager_acquire_err;
}
@@ -52999,7 +53545,7 @@ static int getPageMMap(
}
if( pPg==0 ){
rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg);
- }else{
+ }else{
sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1)*pPager->pageSize, pData);
}
if( pPg ){
@@ -53068,25 +53614,39 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
/*
** Release a page reference.
**
-** If the number of references to the page drop to zero, then the
-** page is added to the LRU list. When all references to all pages
-** are released, a rollback occurs and the lock on the database is
-** removed.
+** The sqlite3PagerUnref() and sqlite3PagerUnrefNotNull() may only be
+** used if we know that the page being released is not the last page.
+** The btree layer always holds page1 open until the end, so these first
+** to routines can be used to release any page other than BtShared.pPage1.
+**
+** Use sqlite3PagerUnrefPageOne() to release page1. This latter routine
+** checks the total number of outstanding pages and if the number of
+** pages reaches zero it drops the database lock.
*/
SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){
- Pager *pPager;
+ TESTONLY( Pager *pPager = pPg->pPager; )
assert( pPg!=0 );
- pPager = pPg->pPager;
if( pPg->flags & PGHDR_MMAP ){
+ assert( pPg->pgno!=1 ); /* Page1 is never memory mapped */
pagerReleaseMapPage(pPg);
}else{
sqlite3PcacheRelease(pPg);
}
- pagerUnlockIfUnused(pPager);
+ /* Do not use this routine to release the last reference to page1 */
+ assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );
}
SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
if( pPg ) sqlite3PagerUnrefNotNull(pPg);
}
+SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage *pPg){
+ Pager *pPager;
+ assert( pPg!=0 );
+ assert( pPg->pgno==1 );
+ assert( (pPg->flags & PGHDR_MMAP)==0 ); /* Page1 is never memory mapped */
+ pPager = pPg->pPager;
+ sqlite3PcacheRelease(pPg);
+ pagerUnlockIfUnused(pPager);
+}
/*
** This function is called at the start of every write transaction.
@@ -53798,6 +54358,21 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
sqlite3PcacheCleanAll(pPager->pPCache);
}
}else{
+ /* The bBatch boolean is true if the batch-atomic-write commit method
+ ** should be used. No rollback journal is created if batch-atomic-write
+ ** is enabled.
+ */
+ sqlite3_file *fd = pPager->fd;
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+ const int bBatch = zMaster==0 /* An SQLITE_IOCAP_BATCH_ATOMIC commit */
+ && (sqlite3OsDeviceCharacteristics(fd) & SQLITE_IOCAP_BATCH_ATOMIC)
+ && !pPager->noSync
+ && sqlite3JournalIsInMemory(pPager->jfd);
+#else
+# define bBatch 0
+#endif
+
+#ifdef SQLITE_ENABLE_ATOMIC_WRITE
/* The following block updates the change-counter. Exactly how it
** does this depends on whether or not the atomic-update optimization
** was enabled at compile time, and if this transaction meets the
@@ -53821,33 +54396,40 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
** in 'direct' mode. In this case the journal file will never be
** created for this transaction.
*/
- #ifdef SQLITE_ENABLE_ATOMIC_WRITE
- PgHdr *pPg;
- assert( isOpen(pPager->jfd)
- || pPager->journalMode==PAGER_JOURNALMODE_OFF
- || pPager->journalMode==PAGER_JOURNALMODE_WAL
- );
- if( !zMaster && isOpen(pPager->jfd)
- && pPager->journalOff==jrnlBufferSize(pPager)
- && pPager->dbSize>=pPager->dbOrigSize
- && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
- ){
- /* Update the db file change counter via the direct-write method. The
- ** following call will modify the in-memory representation of page 1
- ** to include the updated change counter and then write page 1
- ** directly to the database file. Because of the atomic-write
- ** property of the host file-system, this is safe.
- */
- rc = pager_incr_changecounter(pPager, 1);
- }else{
- rc = sqlite3JournalCreate(pPager->jfd);
- if( rc==SQLITE_OK ){
- rc = pager_incr_changecounter(pPager, 0);
+ if( bBatch==0 ){
+ PgHdr *pPg;
+ assert( isOpen(pPager->jfd)
+ || pPager->journalMode==PAGER_JOURNALMODE_OFF
+ || pPager->journalMode==PAGER_JOURNALMODE_WAL
+ );
+ if( !zMaster && isOpen(pPager->jfd)
+ && pPager->journalOff==jrnlBufferSize(pPager)
+ && pPager->dbSize>=pPager->dbOrigSize
+ && (!(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
+ ){
+ /* Update the db file change counter via the direct-write method. The
+ ** following call will modify the in-memory representation of page 1
+ ** to include the updated change counter and then write page 1
+ ** directly to the database file. Because of the atomic-write
+ ** property of the host file-system, this is safe.
+ */
+ rc = pager_incr_changecounter(pPager, 1);
+ }else{
+ rc = sqlite3JournalCreate(pPager->jfd);
+ if( rc==SQLITE_OK ){
+ rc = pager_incr_changecounter(pPager, 0);
+ }
}
}
- #else
+#else
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+ if( zMaster ){
+ rc = sqlite3JournalCreate(pPager->jfd);
+ if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
+ }
+#endif
rc = pager_incr_changecounter(pPager, 0);
- #endif
+#endif
if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
/* Write the master journal name into the journal file. If a master
@@ -53870,8 +54452,24 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
*/
rc = syncJournal(pPager, 0);
if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
-
+
+ if( bBatch ){
+ /* The pager is now in DBMOD state. But regardless of what happens
+ ** next, attempting to play the journal back into the database would
+ ** be unsafe. Close it now to make sure that does not happen. */
+ sqlite3OsClose(pPager->jfd);
+ rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, 0);
+ if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
+ }
rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache));
+ if( bBatch ){
+ if( rc==SQLITE_OK ){
+ rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0);
+ }else{
+ sqlite3OsFileControl(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0);
+ }
+ }
+
if( rc!=SQLITE_OK ){
assert( rc!=SQLITE_IOERR_BLOCKED );
goto commit_phase_one_exit;
@@ -54772,7 +55370,7 @@ SQLITE_PRIVATE int sqlite3PagerCheckpoint(
rc = sqlite3WalCheckpoint(pPager->pWal, db, eMode,
(eMode==SQLITE_CHECKPOINT_PASSIVE ? 0 : pPager->xBusyHandler),
pPager->pBusyHandlerArg,
- pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
+ pPager->walSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
pnLog, pnCkpt
);
}
@@ -54929,7 +55527,7 @@ SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager, sqlite3 *db){
if( rc==SQLITE_OK && pPager->pWal ){
rc = pagerExclusiveLock(pPager);
if( rc==SQLITE_OK ){
- rc = sqlite3WalClose(pPager->pWal, db, pPager->ckptSyncFlags,
+ rc = sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags,
pPager->pageSize, (u8*)pPager->pTmpSpace);
pPager->pWal = 0;
pagerFixMaplimit(pPager);
@@ -55135,6 +55733,10 @@ SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){
** on a network filesystem. All users of the database must be able to
** share memory.
**
+** In the default unix and windows implementation, the wal-index is a mmapped
+** file whose name is the database name with a "-shm" suffix added. For that
+** reason, the wal-index is sometimes called the "shm" file.
+**
** The wal-index is transient. After a crash, the wal-index can (and should
** be) reconstructed from the original WAL file. In fact, the VFS is required
** to either truncate or zero the header of the wal-index when the last
@@ -55274,9 +55876,18 @@ SQLITE_PRIVATE int sqlite3WalTrace = 0;
#define WALINDEX_MAX_VERSION 3007000
/*
-** Indices of various locking bytes. WAL_NREADER is the number
+** Index numbers for various locking bytes. WAL_NREADER is the number
** of available reader locks and should be at least 3. The default
** is SQLITE_SHM_NLOCK==8 and WAL_NREADER==5.
+**
+** Technically, the various VFSes are free to implement these locks however
+** they see fit. However, compatibility is encouraged so that VFSes can
+** interoperate. The standard implemention used on both unix and windows
+** is for the index number to indicate a byte offset into the
+** WalCkptInfo.aLock[] array in the wal-index header. In other words, all
+** locks are on the shm file. The WALINDEX_LOCK_OFFSET constant (which
+** should be 120) is the location in the shm file for the first locking
+** byte.
*/
#define WAL_WRITE_LOCK 0
#define WAL_ALL_BUT_WRITE 1
@@ -55400,7 +56011,6 @@ struct WalCkptInfo {
#define WAL_FRAME_HDRSIZE 24
/* Size of write ahead log header, including checksum. */
-/* #define WAL_HDRSIZE 24 */
#define WAL_HDRSIZE 32
/* WAL magic value. Either this value, or the same value with the least
@@ -55446,6 +56056,7 @@ struct Wal {
u8 truncateOnCommit; /* True to truncate WAL file on commit */
u8 syncHeader; /* Fsync the WAL header if true */
u8 padToSectorBoundary; /* Pad transactions out to the next sector */
+ u8 bShmUnreliable; /* SHM content is read-only and unreliable */
WalIndexHdr hdr; /* Wal-index header for current transaction */
u32 minFrame; /* Ignore wal frames before this one */
u32 iReCksum; /* On commit, recalculate checksums from here */
@@ -55535,6 +56146,11 @@ struct WalIterator {
** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
** numbered from zero.
**
+** If the wal-index is currently smaller the iPage pages then the size
+** of the wal-index might be increased, but only if it is safe to do
+** so. It is safe to enlarge the wal-index if pWal->writeLock is true
+** or pWal->exclusiveMode==WAL_HEAPMEMORY_MODE.
+**
** If this call is successful, *ppPage is set to point to the wal-index
** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
** then an SQLite error code is returned and *ppPage is set to 0.
@@ -55566,9 +56182,13 @@ static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ,
pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
);
- if( rc==SQLITE_READONLY ){
+ assert( pWal->apWiData[iPage]!=0 || rc!=SQLITE_OK || pWal->writeLock==0 );
+ testcase( pWal->apWiData[iPage]==0 && rc==SQLITE_OK );
+ if( (rc&0xff)==SQLITE_READONLY ){
pWal->readOnly |= WAL_SHM_RDONLY;
- rc = SQLITE_OK;
+ if( rc==SQLITE_READONLY ){
+ rc = SQLITE_OK;
+ }
}
}
}
@@ -56090,7 +56710,6 @@ static int walIndexRecover(Wal *pWal){
i64 nSize; /* Size of log file */
u32 aFrameCksum[2] = {0, 0};
int iLock; /* Lock offset to lock for checkpoint */
- int nLock; /* Number of locks to hold */
/* Obtain an exclusive lock on all byte in the locking range not already
** locked by the caller. The caller is guaranteed to have locked the
@@ -56103,11 +56722,17 @@ static int walIndexRecover(Wal *pWal){
assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE );
assert( pWal->writeLock );
iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock;
- nLock = SQLITE_SHM_NLOCK - iLock;
- rc = walLockExclusive(pWal, iLock, nLock);
+ rc = walLockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock);
+ if( rc==SQLITE_OK ){
+ rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
+ if( rc!=SQLITE_OK ){
+ walUnlockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock);
+ }
+ }
if( rc ){
return rc;
}
+
WALTRACE(("WAL%p: recovery begin...\n", pWal));
memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
@@ -56245,7 +56870,8 @@ finished:
recovery_error:
WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok"));
- walUnlockExclusive(pWal, iLock, nLock);
+ walUnlockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock);
+ walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
return rc;
}
@@ -56253,13 +56879,14 @@ recovery_error:
** Close an open wal-index.
*/
static void walIndexClose(Wal *pWal, int isDelete){
- if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
+ if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE || pWal->bShmUnreliable ){
int i;
for(i=0; i<pWal->nWiData; i++){
sqlite3_free((void *)pWal->apWiData[i]);
pWal->apWiData[i] = 0;
}
- }else{
+ }
+ if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){
sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
}
}
@@ -56801,9 +57428,7 @@ static int walCheckpoint(
pInfo->nBackfillAttempted = mxSafeFrame;
/* Sync the WAL to disk */
- if( sync_flags ){
- rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
- }
+ rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags));
/* If the database may grow as a result of this checkpoint, hint
** about the eventual size of the db file to the VFS layer.
@@ -56844,8 +57469,8 @@ static int walCheckpoint(
i64 szDb = pWal->hdr.nPage*(i64)szPage;
testcase( IS_BIG_INT(szDb) );
rc = sqlite3OsTruncate(pWal->pDbFd, szDb);
- if( rc==SQLITE_OK && sync_flags ){
- rc = sqlite3OsSync(pWal->pDbFd, sync_flags);
+ if( rc==SQLITE_OK ){
+ rc = sqlite3OsSync(pWal->pDbFd, CKPT_SYNC_FLAGS(sync_flags));
}
}
if( rc==SQLITE_OK ){
@@ -57055,6 +57680,12 @@ static int walIndexTryHdr(Wal *pWal, int *pChanged){
}
/*
+** This is the value that walTryBeginRead returns when it needs to
+** be retried.
+*/
+#define WAL_RETRY (-1)
+
+/*
** Read the wal-index header from the wal-index and into pWal->hdr.
** If the wal-header appears to be corrupt, try to reconstruct the
** wal-index from the WAL before returning.
@@ -57077,9 +57708,29 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
assert( pChanged );
rc = walIndexPage(pWal, 0, &page0);
if( rc!=SQLITE_OK ){
- return rc;
- };
- assert( page0 || pWal->writeLock==0 );
+ assert( rc!=SQLITE_READONLY ); /* READONLY changed to OK in walIndexPage */
+ if( rc==SQLITE_READONLY_CANTINIT ){
+ /* The SQLITE_READONLY_CANTINIT return means that the shared-memory
+ ** was openable but is not writable, and this thread is unable to
+ ** confirm that another write-capable connection has the shared-memory
+ ** open, and hence the content of the shared-memory is unreliable,
+ ** since the shared-memory might be inconsistent with the WAL file
+ ** and there is no writer on hand to fix it. */
+ assert( page0==0 );
+ assert( pWal->writeLock==0 );
+ assert( pWal->readOnly & WAL_SHM_RDONLY );
+ pWal->bShmUnreliable = 1;
+ pWal->exclusiveMode = WAL_HEAPMEMORY_MODE;
+ *pChanged = 1;
+ }else{
+ return rc; /* Any other non-OK return is just an error */
+ }
+ }else{
+ /* page0 can be NULL if the SHM is zero bytes in size and pWal->writeLock
+ ** is zero, which prevents the SHM from growing */
+ testcase( page0!=0 );
+ }
+ assert( page0!=0 || pWal->writeLock==0 );
/* If the first page of the wal-index has been mapped, try to read the
** wal-index header immediately, without holding any lock. This usually
@@ -57093,7 +57744,7 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
*/
assert( badHdr==0 || pWal->writeLock==0 );
if( badHdr ){
- if( pWal->readOnly & WAL_SHM_RDONLY ){
+ if( pWal->bShmUnreliable==0 && (pWal->readOnly & WAL_SHM_RDONLY) ){
if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){
walUnlockShared(pWal, WAL_WRITE_LOCK);
rc = SQLITE_READONLY_RECOVERY;
@@ -57123,15 +57774,193 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){
rc = SQLITE_CANTOPEN_BKPT;
}
+ if( pWal->bShmUnreliable ){
+ if( rc!=SQLITE_OK ){
+ walIndexClose(pWal, 0);
+ pWal->bShmUnreliable = 0;
+ assert( pWal->nWiData>0 && pWal->apWiData[0]==0 );
+ /* walIndexRecover() might have returned SHORT_READ if a concurrent
+ ** writer truncated the WAL out from under it. If that happens, it
+ ** indicates that a writer has fixed the SHM file for us, so retry */
+ if( rc==SQLITE_IOERR_SHORT_READ ) rc = WAL_RETRY;
+ }
+ pWal->exclusiveMode = WAL_NORMAL_MODE;
+ }
return rc;
}
/*
-** This is the value that walTryBeginRead returns when it needs to
-** be retried.
+** Open a transaction in a connection where the shared-memory is read-only
+** and where we cannot verify that there is a separate write-capable connection
+** on hand to keep the shared-memory up-to-date with the WAL file.
+**
+** This can happen, for example, when the shared-memory is implemented by
+** memory-mapping a *-shm file, where a prior writer has shut down and
+** left the *-shm file on disk, and now the present connection is trying
+** to use that database but lacks write permission on the *-shm file.
+** Other scenarios are also possible, depending on the VFS implementation.
+**
+** Precondition:
+**
+** The *-wal file has been read and an appropriate wal-index has been
+** constructed in pWal->apWiData[] using heap memory instead of shared
+** memory.
+**
+** If this function returns SQLITE_OK, then the read transaction has
+** been successfully opened. In this case output variable (*pChanged)
+** is set to true before returning if the caller should discard the
+** contents of the page cache before proceeding. Or, if it returns
+** WAL_RETRY, then the heap memory wal-index has been discarded and
+** the caller should retry opening the read transaction from the
+** beginning (including attempting to map the *-shm file).
+**
+** If an error occurs, an SQLite error code is returned.
*/
-#define WAL_RETRY (-1)
+static int walBeginShmUnreliable(Wal *pWal, int *pChanged){
+ i64 szWal; /* Size of wal file on disk in bytes */
+ i64 iOffset; /* Current offset when reading wal file */
+ u8 aBuf[WAL_HDRSIZE]; /* Buffer to load WAL header into */
+ u8 *aFrame = 0; /* Malloc'd buffer to load entire frame */
+ int szFrame; /* Number of bytes in buffer aFrame[] */
+ u8 *aData; /* Pointer to data part of aFrame buffer */
+ volatile void *pDummy; /* Dummy argument for xShmMap */
+ int rc; /* Return code */
+ u32 aSaveCksum[2]; /* Saved copy of pWal->hdr.aFrameCksum */
+
+ assert( pWal->bShmUnreliable );
+ assert( pWal->readOnly & WAL_SHM_RDONLY );
+ assert( pWal->nWiData>0 && pWal->apWiData[0] );
+
+ /* Take WAL_READ_LOCK(0). This has the effect of preventing any
+ ** writers from running a checkpoint, but does not stop them
+ ** from running recovery. */
+ rc = walLockShared(pWal, WAL_READ_LOCK(0));
+ if( rc!=SQLITE_OK ){
+ if( rc==SQLITE_BUSY ) rc = WAL_RETRY;
+ goto begin_unreliable_shm_out;
+ }
+ pWal->readLock = 0;
+
+ /* Check to see if a separate writer has attached to the shared-memory area,
+ ** thus making the shared-memory "reliable" again. Do this by invoking
+ ** the xShmMap() routine of the VFS and looking to see if the return
+ ** is SQLITE_READONLY instead of SQLITE_READONLY_CANTINIT.
+ **
+ ** If the shared-memory is now "reliable" return WAL_RETRY, which will
+ ** cause the heap-memory WAL-index to be discarded and the actual
+ ** shared memory to be used in its place.
+ **
+ ** This step is important because, even though this connection is holding
+ ** the WAL_READ_LOCK(0) which prevents a checkpoint, a writer might
+ ** have already checkpointed the WAL file and, while the current
+ ** is active, wrap the WAL and start overwriting frames that this
+ ** process wants to use.
+ **
+ ** Once sqlite3OsShmMap() has been called for an sqlite3_file and has
+ ** returned any SQLITE_READONLY value, it must return only SQLITE_READONLY
+ ** or SQLITE_READONLY_CANTINIT or some error for all subsequent invocations,
+ ** even if some external agent does a "chmod" to make the shared-memory
+ ** writable by us, until sqlite3OsShmUnmap() has been called.
+ ** This is a requirement on the VFS implementation.
+ */
+ rc = sqlite3OsShmMap(pWal->pDbFd, 0, WALINDEX_PGSZ, 0, &pDummy);
+ assert( rc!=SQLITE_OK ); /* SQLITE_OK not possible for read-only connection */
+ if( rc!=SQLITE_READONLY_CANTINIT ){
+ rc = (rc==SQLITE_READONLY ? WAL_RETRY : rc);
+ goto begin_unreliable_shm_out;
+ }
+
+ /* We reach this point only if the real shared-memory is still unreliable.
+ ** Assume the in-memory WAL-index substitute is correct and load it
+ ** into pWal->hdr.
+ */
+ memcpy(&pWal->hdr, (void*)walIndexHdr(pWal), sizeof(WalIndexHdr));
+
+ /* Make sure some writer hasn't come in and changed the WAL file out
+ ** from under us, then disconnected, while we were not looking.
+ */
+ rc = sqlite3OsFileSize(pWal->pWalFd, &szWal);
+ if( rc!=SQLITE_OK ){
+ goto begin_unreliable_shm_out;
+ }
+ if( szWal<WAL_HDRSIZE ){
+ /* If the wal file is too small to contain a wal-header and the
+ ** wal-index header has mxFrame==0, then it must be safe to proceed
+ ** reading the database file only. However, the page cache cannot
+ ** be trusted, as a read/write connection may have connected, written
+ ** the db, run a checkpoint, truncated the wal file and disconnected
+ ** since this client's last read transaction. */
+ *pChanged = 1;
+ rc = (pWal->hdr.mxFrame==0 ? SQLITE_OK : WAL_RETRY);
+ goto begin_unreliable_shm_out;
+ }
+
+ /* Check the salt keys at the start of the wal file still match. */
+ rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0);
+ if( rc!=SQLITE_OK ){
+ goto begin_unreliable_shm_out;
+ }
+ if( memcmp(&pWal->hdr.aSalt, &aBuf[16], 8) ){
+ /* Some writer has wrapped the WAL file while we were not looking.
+ ** Return WAL_RETRY which will cause the in-memory WAL-index to be
+ ** rebuilt. */
+ rc = WAL_RETRY;
+ goto begin_unreliable_shm_out;
+ }
+
+ /* Allocate a buffer to read frames into */
+ szFrame = pWal->hdr.szPage + WAL_FRAME_HDRSIZE;
+ aFrame = (u8 *)sqlite3_malloc64(szFrame);
+ if( aFrame==0 ){
+ rc = SQLITE_NOMEM_BKPT;
+ goto begin_unreliable_shm_out;
+ }
+ aData = &aFrame[WAL_FRAME_HDRSIZE];
+
+ /* Check to see if a complete transaction has been appended to the
+ ** wal file since the heap-memory wal-index was created. If so, the
+ ** heap-memory wal-index is discarded and WAL_RETRY returned to
+ ** the caller. */
+ aSaveCksum[0] = pWal->hdr.aFrameCksum[0];
+ aSaveCksum[1] = pWal->hdr.aFrameCksum[1];
+ for(iOffset=walFrameOffset(pWal->hdr.mxFrame+1, pWal->hdr.szPage);
+ iOffset+szFrame<=szWal;
+ iOffset+=szFrame
+ ){
+ u32 pgno; /* Database page number for frame */
+ u32 nTruncate; /* dbsize field from frame header */
+
+ /* Read and decode the next log frame. */
+ rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset);
+ if( rc!=SQLITE_OK ) break;
+ if( !walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame) ) break;
+
+ /* If nTruncate is non-zero, then a complete transaction has been
+ ** appended to this wal file. Set rc to WAL_RETRY and break out of
+ ** the loop. */
+ if( nTruncate ){
+ rc = WAL_RETRY;
+ break;
+ }
+ }
+ pWal->hdr.aFrameCksum[0] = aSaveCksum[0];
+ pWal->hdr.aFrameCksum[1] = aSaveCksum[1];
+
+ begin_unreliable_shm_out:
+ sqlite3_free(aFrame);
+ if( rc!=SQLITE_OK ){
+ int i;
+ for(i=0; i<pWal->nWiData; i++){
+ sqlite3_free((void*)pWal->apWiData[i]);
+ pWal->apWiData[i] = 0;
+ }
+ pWal->bShmUnreliable = 0;
+ sqlite3WalEndReadTransaction(pWal);
+ *pChanged = 1;
+ }
+ return rc;
+}
/*
** Attempt to start a read transaction. This might fail due to a race or
@@ -57147,7 +57976,7 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){
** checkpointed. If useWal==0 then this routine calls walIndexReadHdr()
** to make a copy of the wal-index header into pWal->hdr. If the
** wal-index header has changed, *pChanged is set to 1 (as an indication
-** to the caller that the local paget cache is obsolete and needs to be
+** to the caller that the local page cache is obsolete and needs to be
** flushed.) When useWal==1, the wal-index header is assumed to already
** be loaded and the pChanged parameter is unused.
**
@@ -57193,6 +58022,9 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
assert( pWal->readLock<0 ); /* Not currently locked */
+ /* useWal may only be set for read/write connections */
+ assert( (pWal->readOnly & WAL_SHM_RDONLY)==0 || useWal==0 );
+
/* Take steps to avoid spinning forever if there is a protocol error.
**
** Circumstances that cause a RETRY should only last for the briefest
@@ -57221,7 +58053,10 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
}
if( !useWal ){
- rc = walIndexReadHdr(pWal, pChanged);
+ assert( rc==SQLITE_OK );
+ if( pWal->bShmUnreliable==0 ){
+ rc = walIndexReadHdr(pWal, pChanged);
+ }
if( rc==SQLITE_BUSY ){
/* If there is not a recovery running in another thread or process
** then convert BUSY errors to WAL_RETRY. If recovery is known to
@@ -57250,13 +58085,17 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
if( rc!=SQLITE_OK ){
return rc;
}
+ else if( pWal->bShmUnreliable ){
+ return walBeginShmUnreliable(pWal, pChanged);
+ }
}
+ assert( pWal->nWiData>0 );
+ assert( pWal->apWiData[0]!=0 );
pInfo = walCkptInfo(pWal);
- if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame
+ if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame
#ifdef SQLITE_ENABLE_SNAPSHOT
- && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0
- || 0==memcmp(&pWal->hdr, pWal->pSnapshot, sizeof(WalIndexHdr)))
+ && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0)
#endif
){
/* The WAL has been completely backfilled (or it is empty).
@@ -57327,7 +58166,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
}
if( mxI==0 ){
assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 );
- return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTLOCK;
+ return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTINIT;
}
rc = walLockShared(pWal, WAL_READ_LOCK(mxI));
@@ -57599,7 +58438,7 @@ SQLITE_PRIVATE int sqlite3WalFindFrame(
** then the WAL is ignored by the reader so return early, as if the
** WAL were empty.
*/
- if( iLast==0 || pWal->readLock==0 ){
+ if( iLast==0 || (pWal->readLock==0 && pWal->bShmUnreliable==0) ){
*piRead = 0;
return SQLITE_OK;
}
@@ -57662,8 +58501,8 @@ SQLITE_PRIVATE int sqlite3WalFindFrame(
{
u32 iRead2 = 0;
u32 iTest;
- assert( pWal->minFrame>0 );
- for(iTest=iLast; iTest>=pWal->minFrame; iTest--){
+ assert( pWal->bShmUnreliable || pWal->minFrame>0 );
+ for(iTest=iLast; iTest>=pWal->minFrame && iTest>0; iTest--){
if( walFramePgno(pWal, iTest)==pgno ){
iRead2 = iTest;
break;
@@ -57951,8 +58790,8 @@ static int walWriteToLog(
iOffset += iFirstAmt;
iAmt -= iFirstAmt;
pContent = (void*)(iFirstAmt + (char*)pContent);
- assert( p->syncFlags & (SQLITE_SYNC_NORMAL|SQLITE_SYNC_FULL) );
- rc = sqlite3OsSync(p->pFd, p->syncFlags & SQLITE_SYNC_MASK);
+ assert( WAL_SYNC_FLAGS(p->syncFlags)!=0 );
+ rc = sqlite3OsSync(p->pFd, WAL_SYNC_FLAGS(p->syncFlags));
if( iAmt==0 || rc ) return rc;
}
rc = sqlite3OsWrite(p->pFd, pContent, iAmt, iOffset);
@@ -58122,10 +58961,10 @@ SQLITE_PRIVATE int sqlite3WalFrames(
** an out-of-order write following a WAL restart could result in
** database corruption. See the ticket:
**
- ** http://localhost:591/sqlite/info/ff5be73dee
+ ** https://sqlite.org/src/info/ff5be73dee
*/
- if( pWal->syncHeader && sync_flags ){
- rc = sqlite3OsSync(pWal->pWalFd, sync_flags & SQLITE_SYNC_MASK);
+ if( pWal->syncHeader ){
+ rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags));
if( rc ) return rc;
}
}
@@ -58200,7 +59039,7 @@ SQLITE_PRIVATE int sqlite3WalFrames(
** sector boundary is synced; the part of the last frame that extends
** past the sector boundary is written after the sync.
*/
- if( isCommit && (sync_flags & WAL_SYNC_TRANSACTIONS)!=0 ){
+ if( isCommit && WAL_SYNC_FLAGS(sync_flags)!=0 ){
int bSync = 1;
if( pWal->padToSectorBoundary ){
int sectorSize = sqlite3SectorSize(pWal->pWalFd);
@@ -58216,7 +59055,7 @@ SQLITE_PRIVATE int sqlite3WalFrames(
}
if( bSync ){
assert( rc==SQLITE_OK );
- rc = sqlite3OsSync(w.pFd, sync_flags & SQLITE_SYNC_MASK);
+ rc = sqlite3OsSync(w.pFd, WAL_SYNC_FLAGS(sync_flags));
}
}
@@ -58439,24 +59278,24 @@ SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
if( op==0 ){
- if( pWal->exclusiveMode ){
- pWal->exclusiveMode = 0;
+ if( pWal->exclusiveMode!=WAL_NORMAL_MODE ){
+ pWal->exclusiveMode = WAL_NORMAL_MODE;
if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
- pWal->exclusiveMode = 1;
+ pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
}
- rc = pWal->exclusiveMode==0;
+ rc = pWal->exclusiveMode==WAL_NORMAL_MODE;
}else{
/* Already in locking_mode=NORMAL */
rc = 0;
}
}else if( op>0 ){
- assert( pWal->exclusiveMode==0 );
+ assert( pWal->exclusiveMode==WAL_NORMAL_MODE );
assert( pWal->readLock>=0 );
walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
- pWal->exclusiveMode = 1;
+ pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
rc = 1;
}else{
- rc = pWal->exclusiveMode==0;
+ rc = pWal->exclusiveMode==WAL_NORMAL_MODE;
}
return rc;
}
@@ -59063,6 +59902,11 @@ struct CellInfo {
** eState==FAULT: Cursor fault with skipNext as error code.
*/
struct BtCursor {
+ u8 eState; /* One of the CURSOR_XXX constants (see below) */
+ u8 curFlags; /* zero or more BTCF_* flags defined below */
+ u8 curPagerFlags; /* Flags to send to sqlite3PagerGet() */
+ u8 hints; /* As configured by CursorSetHints() */
+ int nOvflAlloc; /* Allocated size of aOverflow[] array */
Btree *pBtree; /* The Btree to which this cursor belongs */
BtShared *pBt; /* The BtShared this cursor points to */
BtCursor *pNext; /* Forms a linked list of all cursors */
@@ -59071,13 +59915,8 @@ struct BtCursor {
i64 nKey; /* Size of pKey, or last integer key */
void *pKey; /* Saved key that was cursor last known position */
Pgno pgnoRoot; /* The root page of this tree */
- int nOvflAlloc; /* Allocated size of aOverflow[] array */
int skipNext; /* Prev() is noop if negative. Next() is noop if positive.
** Error code if eState==CURSOR_FAULT */
- u8 curFlags; /* zero or more BTCF_* flags defined below */
- u8 curPagerFlags; /* Flags to send to sqlite3PagerGet() */
- u8 eState; /* One of the CURSOR_XXX constants (see below) */
- u8 hints; /* As configured by CursorSetHints() */
/* All fields above are zeroed when the cursor is allocated. See
** sqlite3BtreeCursorZero(). Fields that follow must be manually
** initialized. */
@@ -59086,7 +59925,8 @@ struct BtCursor {
u16 ix; /* Current index for apPage[iPage] */
u16 aiIdx[BTCURSOR_MAX_DEPTH-1]; /* Current index in apPage[i] */
struct KeyInfo *pKeyInfo; /* Arg passed to comparison function */
- MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */
+ MemPage *pPage; /* Current page */
+ MemPage *apPage[BTCURSOR_MAX_DEPTH-1]; /* Stack of parents of current page */
};
/*
@@ -59675,6 +60515,34 @@ SQLITE_API int sqlite3_enable_shared_cache(int enable){
#define hasReadConflicts(a, b) 0
#endif
+/*
+** Implementation of the SQLITE_CORRUPT_PAGE() macro. Takes a single
+** (MemPage*) as an argument. The (MemPage*) must not be NULL.
+**
+** If SQLITE_DEBUG is not defined, then this macro is equivalent to
+** SQLITE_CORRUPT_BKPT. Or, if SQLITE_DEBUG is set, then the log message
+** normally produced as a side-effect of SQLITE_CORRUPT_BKPT is augmented
+** with the page number and filename associated with the (MemPage*).
+*/
+#ifdef SQLITE_DEBUG
+int corruptPageError(int lineno, MemPage *p){
+ char *zMsg;
+ sqlite3BeginBenignMalloc();
+ zMsg = sqlite3_mprintf("database corruption page %d of %s",
+ (int)p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0)
+ );
+ sqlite3EndBenignMalloc();
+ if( zMsg ){
+ sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg);
+ }
+ sqlite3_free(zMsg);
+ return SQLITE_CORRUPT_BKPT;
+}
+# define SQLITE_CORRUPT_PAGE(pMemPage) corruptPageError(__LINE__, pMemPage)
+#else
+# define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno)
+#endif
+
#ifndef SQLITE_OMIT_SHARED_CACHE
#ifdef SQLITE_DEBUG
@@ -60002,7 +60870,9 @@ static void downgradeAllSharedCacheTableLocks(Btree *p){
#endif /* SQLITE_OMIT_SHARED_CACHE */
-static void releasePage(MemPage *pPage); /* Forward reference */
+static void releasePage(MemPage *pPage); /* Forward reference */
+static void releasePageOne(MemPage *pPage); /* Forward reference */
+static void releasePageNotNull(MemPage *pPage); /* Forward reference */
/*
***** This routine is used inside of assert() only ****
@@ -60161,11 +61031,13 @@ static void btreeClearHasContent(BtShared *pBt){
*/
static void btreeReleaseAllCursorPages(BtCursor *pCur){
int i;
- for(i=0; i<=pCur->iPage; i++){
- releasePage(pCur->apPage[i]);
- pCur->apPage[i] = 0;
+ if( pCur->iPage>=0 ){
+ for(i=0; i<pCur->iPage; i++){
+ releasePageNotNull(pCur->apPage[i]);
+ }
+ releasePageNotNull(pCur->pPage);
+ pCur->iPage = -1;
}
- pCur->iPage = -1;
}
/*
@@ -60294,7 +61166,7 @@ static int SQLITE_NOINLINE saveCursorsOnList(
return rc;
}
}else{
- testcase( p->iPage>0 );
+ testcase( p->iPage>=0 );
btreeReleaseAllCursorPages(p);
}
}
@@ -60334,7 +61206,7 @@ static int btreeMoveto(
if( pIdxKey==0 ) return SQLITE_NOMEM_BKPT;
sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey);
if( pIdxKey->nField==0 ){
- rc = SQLITE_CORRUPT_PGNO(pCur->apPage[pCur->iPage]->pgno);
+ rc = SQLITE_CORRUPT_BKPT;
goto moveto_done;
}
}else{
@@ -60399,6 +61271,17 @@ SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur){
}
/*
+** Return a pointer to a fake BtCursor object that will always answer
+** false to the sqlite3BtreeCursorHasMoved() routine above. The fake
+** cursor returned must not be used with any other Btree interface.
+*/
+SQLITE_PRIVATE BtCursor *sqlite3BtreeFakeValidCursor(void){
+ static u8 fakeCursor = CURSOR_VALID;
+ assert( offsetof(BtCursor, eState)==0 );
+ return (BtCursor*)&fakeCursor;
+}
+
+/*
** This routine restores a cursor back to its original position after it
** has been moved by some outside activity (such as a btree rebalance or
** a row having been deleted out from under the cursor).
@@ -60947,8 +61830,11 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
int sz2 = 0;
int sz = get2byte(&data[iFree+2]);
int top = get2byte(&data[hdr+5]);
+ if( top>=iFree ){
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
if( iFree2 ){
- if( iFree+sz>iFree2 ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ assert( iFree+sz<=iFree2 ); /* Verified by pageFindSlot() */
sz2 = get2byte(&data[iFree2+2]);
assert( iFree+sz+sz2+iFree2-(iFree+sz) <= usableSize );
memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz));
@@ -60979,13 +61865,13 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
** if PRAGMA cell_size_check=ON.
*/
if( pc<iCellFirst || pc>iCellLast ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
assert( pc>=iCellFirst && pc<=iCellLast );
size = pPage->xCellSize(pPage, &src[pc]);
cbrk -= size;
if( cbrk<iCellFirst || pc+size>usableSize ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
testcase( cbrk+size==usableSize );
@@ -61005,7 +61891,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){
defragment_out:
if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
assert( cbrk>=iCellFirst );
put2byte(&data[hdr+5], cbrk);
@@ -61037,16 +61923,10 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
int pc = get2byte(&aData[iAddr]);
int x;
int usableSize = pPg->pBt->usableSize;
+ int size; /* Size of the free slot */
assert( pc>0 );
- do{
- int size; /* Size of the free slot */
- /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of
- ** increasing offset. */
- if( pc>usableSize-4 || pc<iAddr+4 ){
- *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno);
- return 0;
- }
+ while( pc<=usableSize-4 ){
/* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each
** freeblock form a big-endian integer which is the size of the freeblock
** in bytes, including the 4-byte header. */
@@ -61054,8 +61934,8 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
if( (x = size - nByte)>=0 ){
testcase( x==4 );
testcase( x==3 );
- if( pc < pPg->cellOffset+2*pPg->nCell || size+pc > usableSize ){
- *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno);
+ if( size+pc > usableSize ){
+ *pRc = SQLITE_CORRUPT_PAGE(pPg);
return 0;
}else if( x<4 ){
/* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total
@@ -61075,7 +61955,11 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
}
iAddr = pc;
pc = get2byte(&aData[pc]);
- }while( pc );
+ if( pc<iAddr+size ) break;
+ }
+ if( pc ){
+ *pRc = SQLITE_CORRUPT_PAGE(pPg);
+ }
return 0;
}
@@ -61122,7 +62006,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
if( top==0 && pPage->pBt->usableSize==65536 ){
top = 65536;
}else{
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
}
@@ -61189,7 +62073,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
u8 hdr; /* Page header size. 0 or 100 */
u8 nFrag = 0; /* Reduction in fragmentation */
u16 iOrigSize = iSize; /* Original value of iSize */
- u32 iLast = pPage->pBt->usableSize-4; /* Largest possible freeblock offset */
+ u16 x; /* Offset to cell content area */
u32 iEnd = iStart + iSize; /* First byte past the iStart buffer */
unsigned char *data = pPage->aData; /* Page content */
@@ -61199,13 +62083,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize );
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
assert( iSize>=4 ); /* Minimum cell size is 4 */
- assert( iStart<=iLast );
-
- /* Overwrite deleted information with zeros when the secure_delete
- ** option is enabled */
- if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){
- memset(&data[iStart], 0, iSize);
- }
+ assert( iStart<=pPage->pBt->usableSize-4 );
/* The list of freeblocks must be in ascending order. Find the
** spot on the list where iStart should be inserted.
@@ -61218,11 +62096,13 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){
if( iFreeBlk<iPtr+4 ){
if( iFreeBlk==0 ) break;
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
iPtr = iFreeBlk;
}
- if( iFreeBlk>iLast ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ if( iFreeBlk>pPage->pBt->usableSize-4 ){
+ return SQLITE_CORRUPT_PAGE(pPage);
+ }
assert( iFreeBlk>iPtr || iFreeBlk==0 );
/* At this point:
@@ -61233,10 +62113,10 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
*/
if( iFreeBlk && iEnd+3>=iFreeBlk ){
nFrag = iFreeBlk - iEnd;
- if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PAGE(pPage);
iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]);
if( iEnd > pPage->pBt->usableSize ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
iSize = iEnd - iStart;
iFreeBlk = get2byte(&data[iFreeBlk]);
@@ -61249,28 +62129,34 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
if( iPtr>hdr+1 ){
int iPtrEnd = iPtr + get2byte(&data[iPtr+2]);
if( iPtrEnd+3>=iStart ){
- if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PAGE(pPage);
nFrag += iStart - iPtrEnd;
iSize = iEnd - iPtr;
iStart = iPtr;
}
}
- if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PAGE(pPage);
data[hdr+7] -= nFrag;
}
- if( iStart==get2byte(&data[hdr+5]) ){
+ x = get2byte(&data[hdr+5]);
+ if( iStart<=x ){
/* The new freeblock is at the beginning of the cell content area,
** so just extend the cell content area rather than create another
** freelist entry */
- if( iPtr!=hdr+1 ) return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ if( iStart<x || iPtr!=hdr+1 ) return SQLITE_CORRUPT_PAGE(pPage);
put2byte(&data[hdr+1], iFreeBlk);
put2byte(&data[hdr+5], iEnd);
}else{
/* Insert the new freeblock into the freelist */
put2byte(&data[iPtr], iStart);
- put2byte(&data[iStart], iFreeBlk);
- put2byte(&data[iStart+2], iSize);
}
+ if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){
+ /* Overwrite deleted information with zeros when the secure_delete
+ ** option is enabled */
+ memset(&data[iStart], 0, iSize);
+ }
+ put2byte(&data[iStart], iFreeBlk);
+ put2byte(&data[iStart+2], iSize);
pPage->nFree += iOrigSize;
return SQLITE_OK;
}
@@ -61330,7 +62216,7 @@ static int decodeFlags(MemPage *pPage, int flagByte){
}else{
/* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is
** an error. */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
pPage->max1bytePayload = pBt->max1bytePayload;
return SQLITE_OK;
@@ -61371,7 +62257,7 @@ static int btreeInitPage(MemPage *pPage){
/* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating
** the b-tree page type. */
if( decodeFlags(pPage, data[hdr]) ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
pPage->maskPage = (u16)(pBt->pageSize - 1);
@@ -61390,7 +62276,7 @@ static int btreeInitPage(MemPage *pPage){
pPage->nCell = get2byte(&data[hdr+3]);
if( pPage->nCell>MX_CELL(pBt) ){
/* To many cells for a single page. The page must be corrupt */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
testcase( pPage->nCell==MX_CELL(pBt) );
/* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only
@@ -61418,12 +62304,12 @@ static int btreeInitPage(MemPage *pPage){
testcase( pc==iCellFirst );
testcase( pc==iCellLast );
if( pc<iCellFirst || pc>iCellLast ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
sz = pPage->xCellSize(pPage, &data[pc]);
testcase( pc+sz==usableSize );
if( pc+sz>usableSize ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
}
if( !pPage->leaf ) iCellLast++;
@@ -61441,12 +62327,12 @@ static int btreeInitPage(MemPage *pPage){
/* EVIDENCE-OF: R-55530-52930 In a well-formed b-tree page, there will
** always be at least one cell before the first freeblock.
*/
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
while( 1 ){
if( pc>iCellLast ){
/* Freeblock off the end of the page */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
next = get2byte(&data[pc]);
size = get2byte(&data[pc+2]);
@@ -61456,11 +62342,11 @@ static int btreeInitPage(MemPage *pPage){
}
if( next>0 ){
/* Freeblock not in ascending order */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( pc+size>(unsigned int)usableSize ){
/* Last freeblock extends past page end */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
}
@@ -61472,7 +62358,7 @@ static int btreeInitPage(MemPage *pPage){
** area, according to the page header, lies within the page.
*/
if( nFree>usableSize ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
pPage->nFree = (u16)(nFree - iCellFirst);
pPage->isInit = 1;
@@ -61585,7 +62471,7 @@ static Pgno btreePagecount(BtShared *pBt){
}
SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
assert( sqlite3BtreeHoldsMutex(p) );
- assert( ((p->pBt->nPage)&0x8000000)==0 );
+ assert( ((p->pBt->nPage)&0x80000000)==0 );
return btreePagecount(p->pBt);
}
@@ -61612,7 +62498,7 @@ static int getAndInitPage(
int rc;
DbPage *pDbPage;
assert( sqlite3_mutex_held(pBt->mutex) );
- assert( pCur==0 || ppPage==&pCur->apPage[pCur->iPage] );
+ assert( pCur==0 || ppPage==&pCur->pPage );
assert( pCur==0 || bReadOnly==pCur->curPagerFlags );
assert( pCur==0 || pCur->iPage>0 );
@@ -61646,7 +62532,10 @@ static int getAndInitPage(
return SQLITE_OK;
getAndInitPage_error:
- if( pCur ) pCur->iPage--;
+ if( pCur ){
+ pCur->iPage--;
+ pCur->pPage = pCur->apPage[pCur->iPage];
+ }
testcase( pgno==0 );
assert( pgno!=0 || rc==SQLITE_CORRUPT );
return rc;
@@ -61655,6 +62544,8 @@ getAndInitPage_error:
/*
** Release a MemPage. This should be called once for each prior
** call to btreeGetPage.
+**
+** Page1 is a special case and must be released using releasePageOne().
*/
static void releasePageNotNull(MemPage *pPage){
assert( pPage->aData );
@@ -61668,6 +62559,16 @@ static void releasePageNotNull(MemPage *pPage){
static void releasePage(MemPage *pPage){
if( pPage ) releasePageNotNull(pPage);
}
+static void releasePageOne(MemPage *pPage){
+ assert( pPage!=0 );
+ assert( pPage->aData );
+ assert( pPage->pBt );
+ assert( pPage->pDbPage!=0 );
+ assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
+ assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
+ assert( sqlite3_mutex_held(pPage->pBt->mutex) );
+ sqlite3PagerUnrefPageOne(pPage->pDbPage);
+}
/*
** Get an unused page.
@@ -62452,7 +63353,8 @@ SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
** set to the value passed to this function as the second parameter,
** set it so.
*/
-#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS
+#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS \
+ && !defined(SQLITE_OMIT_WAL)
static void setDefaultSyncFlag(BtShared *pBt, u8 safety_level){
sqlite3 *db;
Db *pDb;
@@ -62546,7 +63448,7 @@ static int lockBtree(BtShared *pBt){
}else{
setDefaultSyncFlag(pBt, SQLITE_DEFAULT_WAL_SYNCHRONOUS+1);
if( isOpen==0 ){
- releasePage(pPage1);
+ releasePageOne(pPage1);
return SQLITE_OK;
}
}
@@ -62593,7 +63495,7 @@ static int lockBtree(BtShared *pBt){
** zero and return SQLITE_OK. The caller will call this function
** again with the correct page-size.
*/
- releasePage(pPage1);
+ releasePageOne(pPage1);
pBt->usableSize = usableSize;
pBt->pageSize = pageSize;
freeTempSpace(pBt);
@@ -62647,7 +63549,7 @@ static int lockBtree(BtShared *pBt){
return SQLITE_OK;
page1_init_failed:
- releasePage(pPage1);
+ releasePageOne(pPage1);
pBt->pPage1 = 0;
return rc;
}
@@ -62692,7 +63594,7 @@ static void unlockBtreeIfUnused(BtShared *pBt){
assert( pPage1->aData );
assert( sqlite3PagerRefcount(pBt->pPager)==1 );
pBt->pPage1 = 0;
- releasePageNotNull(pPage1);
+ releasePageOne(pPage1);
}
}
@@ -62987,7 +63889,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
if( eType==PTRMAP_OVERFLOW2 ){
/* The pointer is always the first 4 bytes of the page in this case. */
if( get4byte(pPage->aData)!=iFrom ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
put4byte(pPage->aData, iTo);
}else{
@@ -63006,7 +63908,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
pPage->xParseCell(pPage, pCell, &info);
if( info.nLocal<info.nPayload ){
if( pCell+info.nSize > pPage->aData+pPage->pBt->usableSize ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
if( iFrom==get4byte(pCell+info.nSize-4) ){
put4byte(pCell+info.nSize-4, iTo);
@@ -63024,7 +63926,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
if( i==nCell ){
if( eType!=PTRMAP_BTREE ||
get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
put4byte(&pPage->aData[pPage->hdrOffset+8], iTo);
}
@@ -63544,7 +64446,6 @@ SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int wr
if( pBtree ){
sqlite3BtreeEnter(pBtree);
for(p=pBtree->pBt->pCursor; p; p=p->pNext){
- int i;
if( writeOnly && (p->curFlags & BTCF_WriteFlag)==0 ){
if( p->eState==CURSOR_VALID || p->eState==CURSOR_SKIPNEXT ){
rc = saveCursorPosition(p);
@@ -63558,10 +64459,7 @@ SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int wr
p->eState = CURSOR_FAULT;
p->skipNext = errCode;
}
- for(i=0; i<=p->iPage; i++){
- releasePage(p->apPage[i]);
- p->apPage[i] = 0;
- }
+ btreeReleaseAllCursorPages(p);
}
sqlite3BtreeLeave(pBtree);
}
@@ -63618,7 +64516,7 @@ SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){
if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
testcase( pBt->nPage!=nPage );
pBt->nPage = nPage;
- releasePage(pPage1);
+ releasePageOne(pPage1);
}
assert( countValidCursors(pBt, 1)==0 );
pBt->inTransaction = TRANS_READ;
@@ -63860,10 +64758,8 @@ SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
Btree *pBtree = pCur->pBtree;
if( pBtree ){
- int i;
BtShared *pBt = pCur->pBt;
sqlite3BtreeEnter(pBtree);
- sqlite3BtreeClearCursor(pCur);
assert( pBt->pCursor!=0 );
if( pBt->pCursor==pCur ){
pBt->pCursor = pCur->pNext;
@@ -63877,12 +64773,10 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
pPrev = pPrev->pNext;
}while( ALWAYS(pPrev) );
}
- for(i=0; i<=pCur->iPage; i++){
- releasePage(pCur->apPage[i]);
- }
+ btreeReleaseAllCursorPages(pCur);
unlockBtreeIfUnused(pBt);
sqlite3_free(pCur->aOverflow);
- /* sqlite3_free(pCur); */
+ sqlite3_free(pCur->pKey);
sqlite3BtreeLeave(pBtree);
}
return SQLITE_OK;
@@ -63899,9 +64793,8 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
#ifndef NDEBUG
static void assertCellInfo(BtCursor *pCur){
CellInfo info;
- int iPage = pCur->iPage;
memset(&info, 0, sizeof(info));
- btreeParseCell(pCur->apPage[iPage], pCur->ix, &info);
+ btreeParseCell(pCur->pPage, pCur->ix, &info);
assert( CORRUPT_DB || memcmp(&info, &pCur->info, sizeof(info))==0 );
}
#else
@@ -63909,9 +64802,8 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
#endif
static SQLITE_NOINLINE void getCellInfo(BtCursor *pCur){
if( pCur->info.nSize==0 ){
- int iPage = pCur->iPage;
pCur->curFlags |= BTCF_ValidNKey;
- btreeParseCell(pCur->apPage[iPage],pCur->ix,&pCur->info);
+ btreeParseCell(pCur->pPage,pCur->ix,&pCur->info);
}else{
assertCellInfo(pCur);
}
@@ -63946,6 +64838,20 @@ SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor *pCur){
return pCur->info.nKey;
}
+#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
+/*
+** Return the offset into the database file for the start of the
+** payload to which the cursor is pointing.
+*/
+SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor *pCur){
+ assert( cursorHoldsMutex(pCur) );
+ assert( pCur->eState==CURSOR_VALID );
+ getCellInfo(pCur);
+ return (i64)pCur->pBt->pageSize*((i64)pCur->pPage->pgno - 1) +
+ (i64)(pCur->info.pPayload - pCur->pPage->aData);
+}
+#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */
+
/*
** Return the number of bytes of payload for the entry that pCur is
** currently pointing to. For table btrees, this will be the amount
@@ -64109,7 +65015,7 @@ static int accessPayload(
unsigned char *aPayload;
int rc = SQLITE_OK;
int iIdx = 0;
- MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
+ MemPage *pPage = pCur->pPage; /* Btree page of current entry */
BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */
#ifdef SQLITE_DIRECT_OVERFLOW_READ
unsigned char * const pBufStart = pBuf; /* Start of original out buffer */
@@ -64132,7 +65038,7 @@ static int accessPayload(
** &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]
** but is recast into its current form to avoid integer overflow problems
*/
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
/* Check if data must be read/written to/from the btree page itself. */
@@ -64280,7 +65186,7 @@ static int accessPayload(
if( rc==SQLITE_OK && amt>0 ){
/* Overflow chain ends prematurely */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
return rc;
}
@@ -64305,8 +65211,8 @@ static int accessPayload(
SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
assert( cursorHoldsMutex(pCur) );
assert( pCur->eState==CURSOR_VALID );
- assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
- assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+ assert( pCur->iPage>=0 && pCur->pPage );
+ assert( pCur->ix<pCur->pPage->nCell );
return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
}
@@ -64363,18 +65269,23 @@ static const void *fetchPayload(
BtCursor *pCur, /* Cursor pointing to entry to read from */
u32 *pAmt /* Write the number of available bytes here */
){
- u32 amt;
- assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]);
+ int amt;
+ assert( pCur!=0 && pCur->iPage>=0 && pCur->pPage);
assert( pCur->eState==CURSOR_VALID );
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
assert( cursorOwnsBtShared(pCur) );
- assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+ assert( pCur->ix<pCur->pPage->nCell );
assert( pCur->info.nSize>0 );
- assert( pCur->info.pPayload>pCur->apPage[pCur->iPage]->aData || CORRUPT_DB );
- assert( pCur->info.pPayload<pCur->apPage[pCur->iPage]->aDataEnd ||CORRUPT_DB);
- amt = (int)(pCur->apPage[pCur->iPage]->aDataEnd - pCur->info.pPayload);
- if( pCur->info.nLocal<amt ) amt = pCur->info.nLocal;
- *pAmt = amt;
+ assert( pCur->info.pPayload>pCur->pPage->aData || CORRUPT_DB );
+ assert( pCur->info.pPayload<pCur->pPage->aDataEnd ||CORRUPT_DB);
+ amt = pCur->info.nLocal;
+ if( amt>(int)(pCur->pPage->aDataEnd - pCur->info.pPayload) ){
+ /* There is too little space on the page for the expected amount
+ ** of local content. Database must be corrupt. */
+ assert( CORRUPT_DB );
+ amt = MAX(0, (int)(pCur->pPage->aDataEnd - pCur->info.pPayload));
+ }
+ *pAmt = (u32)amt;
return (void*)pCur->info.pPayload;
}
@@ -64419,10 +65330,11 @@ static int moveToChild(BtCursor *pCur, u32 newPgno){
}
pCur->info.nSize = 0;
pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
- pCur->aiIdx[pCur->iPage++] = pCur->ix;
+ pCur->aiIdx[pCur->iPage] = pCur->ix;
+ pCur->apPage[pCur->iPage] = pCur->pPage;
pCur->ix = 0;
- return getAndInitPage(pBt, newPgno, &pCur->apPage[pCur->iPage],
- pCur, pCur->curPagerFlags);
+ pCur->iPage++;
+ return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags);
}
#ifdef SQLITE_DEBUG
@@ -64456,20 +65368,23 @@ static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
** the largest cell index.
*/
static void moveToParent(BtCursor *pCur){
+ MemPage *pLeaf;
assert( cursorOwnsBtShared(pCur) );
assert( pCur->eState==CURSOR_VALID );
assert( pCur->iPage>0 );
- assert( pCur->apPage[pCur->iPage] );
+ assert( pCur->pPage );
assertParentIndex(
pCur->apPage[pCur->iPage-1],
pCur->aiIdx[pCur->iPage-1],
- pCur->apPage[pCur->iPage]->pgno
+ pCur->pPage->pgno
);
testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell );
pCur->info.nSize = 0;
pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
pCur->ix = pCur->aiIdx[pCur->iPage-1];
- releasePageNotNull(pCur->apPage[pCur->iPage--]);
+ pLeaf = pCur->pPage;
+ pCur->pPage = pCur->apPage[--pCur->iPage];
+ releasePageNotNull(pLeaf);
}
/*
@@ -64481,9 +65396,9 @@ static void moveToParent(BtCursor *pCur){
** single child page. This can only happen with the table rooted at page 1.
**
** If the b-tree structure is empty, the cursor state is set to
-** CURSOR_INVALID. Otherwise, the cursor is set to point to the first
-** cell located on the root (or virtual root) page and the cursor state
-** is set to CURSOR_VALID.
+** CURSOR_INVALID and this routine returns SQLITE_EMPTY. Otherwise,
+** the cursor is set to point to the first cell located on the root
+** (or virtual root) page and the cursor state is set to CURSOR_VALID.
**
** If this function returns successfully, it may be assumed that the
** page-header flags indicate that the [virtual] root-page is the expected
@@ -64501,37 +65416,40 @@ static int moveToRoot(BtCursor *pCur){
assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );
assert( CURSOR_VALID < CURSOR_REQUIRESEEK );
assert( CURSOR_FAULT > CURSOR_REQUIRESEEK );
- if( pCur->eState>=CURSOR_REQUIRESEEK ){
- if( pCur->eState==CURSOR_FAULT ){
- assert( pCur->skipNext!=SQLITE_OK );
- return pCur->skipNext;
- }
- sqlite3BtreeClearCursor(pCur);
- }
+ assert( pCur->eState < CURSOR_REQUIRESEEK || pCur->iPage<0 );
+ assert( pCur->pgnoRoot>0 || pCur->iPage<0 );
if( pCur->iPage>=0 ){
if( pCur->iPage ){
- do{
- assert( pCur->apPage[pCur->iPage]!=0 );
- releasePageNotNull(pCur->apPage[pCur->iPage--]);
- }while( pCur->iPage);
+ releasePageNotNull(pCur->pPage);
+ while( --pCur->iPage ){
+ releasePageNotNull(pCur->apPage[pCur->iPage]);
+ }
+ pCur->pPage = pCur->apPage[0];
goto skip_init;
}
}else if( pCur->pgnoRoot==0 ){
pCur->eState = CURSOR_INVALID;
- return SQLITE_OK;
+ return SQLITE_EMPTY;
}else{
assert( pCur->iPage==(-1) );
- rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->apPage[0],
+ if( pCur->eState>=CURSOR_REQUIRESEEK ){
+ if( pCur->eState==CURSOR_FAULT ){
+ assert( pCur->skipNext!=SQLITE_OK );
+ return pCur->skipNext;
+ }
+ sqlite3BtreeClearCursor(pCur);
+ }
+ rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage,
0, pCur->curPagerFlags);
if( rc!=SQLITE_OK ){
pCur->eState = CURSOR_INVALID;
- return rc;
+ return rc;
}
pCur->iPage = 0;
- pCur->curIntKey = pCur->apPage[0]->intKey;
+ pCur->curIntKey = pCur->pPage->intKey;
}
- pRoot = pCur->apPage[0];
+ pRoot = pCur->pPage;
assert( pRoot->pgno==pCur->pgnoRoot );
/* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor
@@ -64546,7 +65464,7 @@ static int moveToRoot(BtCursor *pCur){
** (or the freelist). */
assert( pRoot->intKey==1 || pRoot->intKey==0 );
if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){
- return SQLITE_CORRUPT_PGNO(pCur->apPage[pCur->iPage]->pgno);
+ return SQLITE_CORRUPT_PAGE(pCur->pPage);
}
skip_init:
@@ -64554,7 +65472,7 @@ skip_init:
pCur->info.nSize = 0;
pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidNKey|BTCF_ValidOvfl);
- pRoot = pCur->apPage[0];
+ pRoot = pCur->pPage;
if( pRoot->nCell>0 ){
pCur->eState = CURSOR_VALID;
}else if( !pRoot->leaf ){
@@ -64565,6 +65483,7 @@ skip_init:
rc = moveToChild(pCur, subpage);
}else{
pCur->eState = CURSOR_INVALID;
+ rc = SQLITE_EMPTY;
}
return rc;
}
@@ -64583,7 +65502,7 @@ static int moveToLeftmost(BtCursor *pCur){
assert( cursorOwnsBtShared(pCur) );
assert( pCur->eState==CURSOR_VALID );
- while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
+ while( rc==SQLITE_OK && !(pPage = pCur->pPage)->leaf ){
assert( pCur->ix<pPage->nCell );
pgno = get4byte(findCell(pPage, pCur->ix));
rc = moveToChild(pCur, pgno);
@@ -64608,7 +65527,7 @@ static int moveToRightmost(BtCursor *pCur){
assert( cursorOwnsBtShared(pCur) );
assert( pCur->eState==CURSOR_VALID );
- while( !(pPage = pCur->apPage[pCur->iPage])->leaf ){
+ while( !(pPage = pCur->pPage)->leaf ){
pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
pCur->ix = pPage->nCell;
rc = moveToChild(pCur, pgno);
@@ -64631,14 +65550,13 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
rc = moveToRoot(pCur);
if( rc==SQLITE_OK ){
- if( pCur->eState==CURSOR_INVALID ){
- assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
- *pRes = 1;
- }else{
- assert( pCur->apPage[pCur->iPage]->nCell>0 );
- *pRes = 0;
- rc = moveToLeftmost(pCur);
- }
+ assert( pCur->pPage->nCell>0 );
+ *pRes = 0;
+ rc = moveToLeftmost(pCur);
+ }else if( rc==SQLITE_EMPTY ){
+ assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+ *pRes = 1;
+ rc = SQLITE_OK;
}
return rc;
}
@@ -64662,28 +65580,26 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
for(ii=0; ii<pCur->iPage; ii++){
assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
}
- assert( pCur->ix==pCur->apPage[pCur->iPage]->nCell-1 );
- assert( pCur->apPage[pCur->iPage]->leaf );
+ assert( pCur->ix==pCur->pPage->nCell-1 );
+ assert( pCur->pPage->leaf );
#endif
return SQLITE_OK;
}
rc = moveToRoot(pCur);
if( rc==SQLITE_OK ){
- if( CURSOR_INVALID==pCur->eState ){
- assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
- *pRes = 1;
+ assert( pCur->eState==CURSOR_VALID );
+ *pRes = 0;
+ rc = moveToRightmost(pCur);
+ if( rc==SQLITE_OK ){
+ pCur->curFlags |= BTCF_AtLast;
}else{
- assert( pCur->eState==CURSOR_VALID );
- *pRes = 0;
- rc = moveToRightmost(pCur);
- if( rc==SQLITE_OK ){
- pCur->curFlags |= BTCF_AtLast;
- }else{
- pCur->curFlags &= ~BTCF_AtLast;
- }
-
+ pCur->curFlags &= ~BTCF_AtLast;
}
+ }else if( rc==SQLITE_EMPTY ){
+ assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+ *pRes = 1;
+ rc = SQLITE_OK;
}
return rc;
}
@@ -64782,22 +65698,23 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
rc = moveToRoot(pCur);
if( rc ){
+ if( rc==SQLITE_EMPTY ){
+ assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
+ *pRes = -1;
+ return SQLITE_OK;
+ }
return rc;
}
- assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage] );
- assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->isInit );
- assert( pCur->eState==CURSOR_INVALID || pCur->apPage[pCur->iPage]->nCell>0 );
- if( pCur->eState==CURSOR_INVALID ){
- *pRes = -1;
- assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
- return SQLITE_OK;
- }
- assert( pCur->apPage[0]->intKey==pCur->curIntKey );
+ assert( pCur->pPage );
+ assert( pCur->pPage->isInit );
+ assert( pCur->eState==CURSOR_VALID );
+ assert( pCur->pPage->nCell > 0 );
+ assert( pCur->iPage==0 || pCur->apPage[0]->intKey==pCur->curIntKey );
assert( pCur->curIntKey || pIdxKey );
for(;;){
int lwr, upr, idx, c;
Pgno chldPg;
- MemPage *pPage = pCur->apPage[pCur->iPage];
+ MemPage *pPage = pCur->pPage;
u8 *pCell; /* Pointer to current cell in pPage */
/* pPage->nCell must be greater than zero. If this is the root-page
@@ -64820,7 +65737,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
if( pPage->intKeyLeaf ){
while( 0x80 <= *(pCell++) ){
if( pCell>=pPage->aDataEnd ){
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
}
}
@@ -64894,7 +65811,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
testcase( nCell==1 ); /* Invalid key size: 0x80 0x80 0x01 */
testcase( nCell==2 ); /* Minimum legal index key size */
if( nCell<2 ){
- rc = SQLITE_CORRUPT_PGNO(pPage->pgno);
+ rc = SQLITE_CORRUPT_PAGE(pPage);
goto moveto_finish;
}
pCellKey = sqlite3Malloc( nCell+18 );
@@ -64925,7 +65842,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
*pRes = 0;
rc = SQLITE_OK;
pCur->ix = (u16)idx;
- if( pIdxKey->errCode ) rc = SQLITE_CORRUPT;
+ if( pIdxKey->errCode ) rc = SQLITE_CORRUPT_BKPT;
goto moveto_finish;
}
if( lwr>upr ) break;
@@ -64936,7 +65853,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) );
assert( pPage->isInit );
if( pPage->leaf ){
- assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+ assert( pCur->ix<pCur->pPage->nCell );
pCur->ix = (u16)idx;
*pRes = c;
rc = SQLITE_OK;
@@ -64990,9 +65907,10 @@ SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){
** opcode, and it that case the cursor will always be valid and
** will always point to a leaf node. */
if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1;
- if( NEVER(pCur->apPage[pCur->iPage]->leaf==0) ) return -1;
+ if( NEVER(pCur->pPage->leaf==0) ) return -1;
- for(n=1, i=0; i<=pCur->iPage; i++){
+ n = pCur->pPage->nCell;
+ for(i=0; i<pCur->iPage; i++){
n *= pCur->apPage[i]->nCell;
}
return n;
@@ -65045,7 +65963,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){
}
}
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
idx = ++pCur->ix;
assert( pPage->isInit );
@@ -65068,7 +65986,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){
return SQLITE_DONE;
}
moveToParent(pCur);
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
}while( pCur->ix>=pPage->nCell );
if( pPage->intKey ){
return sqlite3BtreeNext(pCur, 0);
@@ -65091,7 +66009,7 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int flags){
pCur->info.nSize = 0;
pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur);
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
if( (++pCur->ix)>=pPage->nCell ){
pCur->ix--;
return btreeNext(pCur);
@@ -65150,7 +66068,7 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){
}
}
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
assert( pPage->isInit );
if( !pPage->leaf ){
int idx = pCur->ix;
@@ -65169,7 +66087,7 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){
assert( (pCur->curFlags & (BTCF_ValidOvfl))==0 );
pCur->ix--;
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
if( pPage->intKey && !pPage->leaf ){
rc = sqlite3BtreePrevious(pCur, 0);
}else{
@@ -65187,7 +66105,7 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int flags){
pCur->info.nSize = 0;
if( pCur->eState!=CURSOR_VALID
|| pCur->ix==0
- || pCur->apPage[pCur->iPage]->leaf==0
+ || pCur->pPage->leaf==0
){
return btreePrevious(pCur);
}
@@ -65683,7 +66601,7 @@ static int clearCell(
unsigned char *pCell, /* First byte of the Cell */
CellInfo *pInfo /* Size information about the cell */
){
- BtShared *pBt = pPage->pBt;
+ BtShared *pBt;
Pgno ovflPgno;
int rc;
int nOvfl;
@@ -65696,9 +66614,10 @@ static int clearCell(
}
if( pCell+pInfo->nSize-1 > pPage->aData+pPage->maskPage ){
/* Cell extends past end of page */
- return SQLITE_CORRUPT_PGNO(pPage->pgno);
+ return SQLITE_CORRUPT_PAGE(pPage);
}
ovflPgno = get4byte(pCell + pInfo->nSize - 4);
+ pBt = pPage->pBt;
assert( pBt->usableSize > 4 );
ovflPageSize = pBt->usableSize - 4;
nOvfl = (pInfo->nPayload - pInfo->nLocal + ovflPageSize - 1)/ovflPageSize;
@@ -65766,21 +66685,20 @@ static int fillInCell(
){
int nPayload;
const u8 *pSrc;
- int nSrc, n, rc;
+ int nSrc, n, rc, mn;
int spaceLeft;
- MemPage *pOvfl = 0;
- MemPage *pToRelease = 0;
+ MemPage *pToRelease;
unsigned char *pPrior;
unsigned char *pPayload;
- BtShared *pBt = pPage->pBt;
- Pgno pgnoOvfl = 0;
+ BtShared *pBt;
+ Pgno pgnoOvfl;
int nHeader;
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
/* pPage is not necessarily writeable since pCell might be auxiliary
** buffer space that is separate from the pPage buffer area */
- assert( pCell<pPage->aData || pCell>=&pPage->aData[pBt->pageSize]
+ assert( pCell<pPage->aData || pCell>=&pPage->aData[pPage->pBt->pageSize]
|| sqlite3PagerIswriteable(pPage->pDbPage) );
/* Fill in the header. */
@@ -65800,25 +66718,36 @@ static int fillInCell(
}
/* Fill in the payload */
+ pPayload = &pCell[nHeader];
if( nPayload<=pPage->maxLocal ){
+ /* This is the common case where everything fits on the btree page
+ ** and no overflow pages are required. */
n = nHeader + nPayload;
testcase( n==3 );
testcase( n==4 );
if( n<4 ) n = 4;
*pnSize = n;
- spaceLeft = nPayload;
- pPrior = pCell;
- }else{
- int mn = pPage->minLocal;
- n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4);
- testcase( n==pPage->maxLocal );
- testcase( n==pPage->maxLocal+1 );
- if( n > pPage->maxLocal ) n = mn;
- spaceLeft = n;
- *pnSize = n + nHeader + 4;
- pPrior = &pCell[nHeader+n];
+ assert( nSrc<=nPayload );
+ testcase( nSrc<nPayload );
+ memcpy(pPayload, pSrc, nSrc);
+ memset(pPayload+nSrc, 0, nPayload-nSrc);
+ return SQLITE_OK;
}
- pPayload = &pCell[nHeader];
+
+ /* If we reach this point, it means that some of the content will need
+ ** to spill onto overflow pages.
+ */
+ mn = pPage->minLocal;
+ n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4);
+ testcase( n==pPage->maxLocal );
+ testcase( n==pPage->maxLocal+1 );
+ if( n > pPage->maxLocal ) n = mn;
+ spaceLeft = n;
+ *pnSize = n + nHeader + 4;
+ pPrior = &pCell[nHeader+n];
+ pToRelease = 0;
+ pgnoOvfl = 0;
+ pBt = pPage->pBt;
/* At this point variables should be set as follows:
**
@@ -65844,8 +66773,35 @@ static int fillInCell(
#endif
/* Write the payload into the local Cell and any extra into overflow pages */
- while( nPayload>0 ){
+ while( 1 ){
+ n = nPayload;
+ if( n>spaceLeft ) n = spaceLeft;
+
+ /* If pToRelease is not zero than pPayload points into the data area
+ ** of pToRelease. Make sure pToRelease is still writeable. */
+ assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
+
+ /* If pPayload is part of the data area of pPage, then make sure pPage
+ ** is still writeable */
+ assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
+ || sqlite3PagerIswriteable(pPage->pDbPage) );
+
+ if( nSrc>=n ){
+ memcpy(pPayload, pSrc, n);
+ }else if( nSrc>0 ){
+ n = nSrc;
+ memcpy(pPayload, pSrc, n);
+ }else{
+ memset(pPayload, 0, n);
+ }
+ nPayload -= n;
+ if( nPayload<=0 ) break;
+ pPayload += n;
+ pSrc += n;
+ nSrc -= n;
+ spaceLeft -= n;
if( spaceLeft==0 ){
+ MemPage *pOvfl = 0;
#ifndef SQLITE_OMIT_AUTOVACUUM
Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */
if( pBt->autoVacuum ){
@@ -65898,30 +66854,6 @@ static int fillInCell(
pPayload = &pOvfl->aData[4];
spaceLeft = pBt->usableSize - 4;
}
- n = nPayload;
- if( n>spaceLeft ) n = spaceLeft;
-
- /* If pToRelease is not zero than pPayload points into the data area
- ** of pToRelease. Make sure pToRelease is still writeable. */
- assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
-
- /* If pPayload is part of the data area of pPage, then make sure pPage
- ** is still writeable */
- assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
- || sqlite3PagerIswriteable(pPage->pDbPage) );
-
- if( nSrc>0 ){
- if( n>nSrc ) n = nSrc;
- assert( pSrc );
- memcpy(pPayload, pSrc, n);
- }else{
- memset(pPayload, 0, n);
- }
- nPayload -= n;
- pPayload += n;
- pSrc += n;
- nSrc -= n;
- spaceLeft -= n;
}
releasePage(pToRelease);
return SQLITE_OK;
@@ -65953,7 +66885,7 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
hdr = pPage->hdrOffset;
testcase( pc==get2byte(&data[hdr+5]) );
testcase( pc+sz==pPage->pBt->usableSize );
- if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){
+ if( pc+sz > pPage->pBt->usableSize ){
*pRC = SQLITE_CORRUPT_BKPT;
return;
}
@@ -66820,10 +67752,8 @@ static int balance_nonroot(
+ nMaxCells*sizeof(u16) /* b.szCell */
+ pBt->pageSize; /* aSpace1 */
- /* EVIDENCE-OF: R-28375-38319 SQLite will never request a scratch buffer
- ** that is more than 6 times the database page size. */
assert( szScratch<=6*(int)pBt->pageSize );
- b.apCell = sqlite3ScratchMalloc( szScratch );
+ b.apCell = sqlite3StackAllocRaw(0, szScratch );
if( b.apCell==0 ){
rc = SQLITE_NOMEM_BKPT;
goto balance_cleanup;
@@ -67401,7 +68331,7 @@ static int balance_nonroot(
** Cleanup before returning.
*/
balance_cleanup:
- sqlite3ScratchFree(b.apCell);
+ sqlite3StackFree(0, b.apCell);
for(i=0; i<nOld; i++){
releasePage(apOld[i]);
}
@@ -67500,7 +68430,7 @@ static int balance(BtCursor *pCur){
do {
int iPage = pCur->iPage;
- MemPage *pPage = pCur->apPage[iPage];
+ MemPage *pPage = pCur->pPage;
if( iPage==0 ){
if( pPage->nOverflow ){
@@ -67516,7 +68446,9 @@ static int balance(BtCursor *pCur){
pCur->iPage = 1;
pCur->ix = 0;
pCur->aiIdx[0] = 0;
- assert( pCur->apPage[1]->nOverflow );
+ pCur->apPage[0] = pPage;
+ pCur->pPage = pCur->apPage[1];
+ assert( pCur->pPage->nOverflow );
}
}else{
break;
@@ -67596,6 +68528,7 @@ static int balance(BtCursor *pCur){
releasePage(pPage);
pCur->iPage--;
assert( pCur->iPage>=0 );
+ pCur->pPage = pCur->apPage[pCur->iPage];
}
}while( rc==SQLITE_OK );
@@ -67727,7 +68660,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
}
assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
assert( pPage->intKey || pX->nKey>=0 );
assert( pPage->leaf || !pPage->intKey );
@@ -67814,10 +68747,10 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
** fails. Internal data structure corruption will result otherwise.
** Also, set the cursor state to invalid. This stops saveCursorPosition()
** from trying to save the current position of the cursor. */
- pCur->apPage[pCur->iPage]->nOverflow = 0;
+ pCur->pPage->nOverflow = 0;
pCur->eState = CURSOR_INVALID;
if( (flags & BTREE_SAVEPOSITION) && rc==SQLITE_OK ){
- rc = moveToRoot(pCur);
+ btreeReleaseAllCursorPages(pCur);
if( pCur->pKeyInfo ){
assert( pCur->pKey==0 );
pCur->pKey = sqlite3Malloc( pX->nKey );
@@ -67831,7 +68764,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
pCur->nKey = pX->nKey;
}
}
- assert( pCur->apPage[pCur->iPage]->nOverflow==0 );
+ assert( pCur->iPage<0 || pCur->pPage->nOverflow==0 );
end_insert:
return rc;
@@ -67872,13 +68805,13 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
assert( pCur->curFlags & BTCF_WriteFlag );
assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
assert( !hasReadConflicts(p, pCur->pgnoRoot) );
- assert( pCur->ix<pCur->apPage[pCur->iPage]->nCell );
+ assert( pCur->ix<pCur->pPage->nCell );
assert( pCur->eState==CURSOR_VALID );
assert( (flags & ~(BTREE_SAVEPOSITION | BTREE_AUXDELETE))==0 );
iCellDepth = pCur->iPage;
iCellIdx = pCur->ix;
- pPage = pCur->apPage[iCellDepth];
+ pPage = pCur->pPage;
pCell = findCell(pPage, iCellIdx);
/* If the bPreserve flag is set to true, then the cursor position must
@@ -67944,11 +68877,16 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
** node. The cell from the leaf node needs to be moved to the internal
** node to replace the deleted cell. */
if( !pPage->leaf ){
- MemPage *pLeaf = pCur->apPage[pCur->iPage];
+ MemPage *pLeaf = pCur->pPage;
int nCell;
- Pgno n = pCur->apPage[iCellDepth+1]->pgno;
+ Pgno n;
unsigned char *pTmp;
+ if( iCellDepth<pCur->iPage-1 ){
+ n = pCur->apPage[iCellDepth+1]->pgno;
+ }else{
+ n = pCur->pPage->pgno;
+ }
pCell = findCell(pLeaf, pLeaf->nCell-1);
if( pCell<&pLeaf->aData[4] ) return SQLITE_CORRUPT_BKPT;
nCell = pLeaf->xCellSize(pLeaf, pCell);
@@ -67980,16 +68918,19 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
** well. */
rc = balance(pCur);
if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
+ releasePageNotNull(pCur->pPage);
+ pCur->iPage--;
while( pCur->iPage>iCellDepth ){
releasePage(pCur->apPage[pCur->iPage--]);
}
+ pCur->pPage = pCur->apPage[pCur->iPage];
rc = balance(pCur);
}
if( rc==SQLITE_OK ){
if( bSkipnext ){
assert( bPreserve && (pCur->iPage==iCellDepth || CORRUPT_DB) );
- assert( pPage==pCur->apPage[pCur->iPage] || CORRUPT_DB );
+ assert( pPage==pCur->pPage || CORRUPT_DB );
assert( (pPage->nCell>0 || CORRUPT_DB) && iCellIdx<=pPage->nCell );
pCur->eState = CURSOR_SKIPNEXT;
if( iCellIdx>=pPage->nCell ){
@@ -68001,8 +68942,10 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
}else{
rc = moveToRoot(pCur);
if( bPreserve ){
+ btreeReleaseAllCursorPages(pCur);
pCur->eState = CURSOR_REQUIRESEEK;
}
+ if( rc==SQLITE_EMPTY ) rc = SQLITE_OK;
}
}
return rc;
@@ -68467,11 +69410,11 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
i64 nEntry = 0; /* Value to return in *pnEntry */
int rc; /* Return code */
- if( pCur->pgnoRoot==0 ){
+ rc = moveToRoot(pCur);
+ if( rc==SQLITE_EMPTY ){
*pnEntry = 0;
return SQLITE_OK;
}
- rc = moveToRoot(pCur);
/* Unless an error occurs, the following loop runs one iteration for each
** page in the B-Tree structure (not including overflow pages).
@@ -68484,7 +69427,7 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
** this page contains countable entries. Increment the entry counter
** accordingly.
*/
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
if( pPage->leaf || !pPage->intKey ){
nEntry += pPage->nCell;
}
@@ -68507,10 +69450,10 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
return moveToRoot(pCur);
}
moveToParent(pCur);
- }while ( pCur->ix>=pCur->apPage[pCur->iPage]->nCell );
+ }while ( pCur->ix>=pCur->pPage->nCell );
pCur->ix++;
- pPage = pCur->apPage[pCur->iPage];
+ pPage = pCur->pPage;
}
/* Descend to the child node of the cell that the cursor currently
@@ -69351,7 +70294,7 @@ SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void
&& pCsr->pBt->inTransaction==TRANS_WRITE );
assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );
assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );
- assert( pCsr->apPage[pCsr->iPage]->intKey );
+ assert( pCsr->pPage->intKey );
return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
}
@@ -70290,7 +71233,7 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
if( p->flags & MEM_Null ){
/* Cannot be both MEM_Null and some other type */
assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob
- |MEM_RowSet|MEM_Frame|MEM_Agg|MEM_Zero))==0 );
+ |MEM_RowSet|MEM_Frame|MEM_Agg))==0 );
/* If MEM_Null is set, then either the value is a pure NULL (the usual
** case) or it is a pointer set using sqlite3_bind_pointer() or
@@ -70402,7 +71345,7 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre
assert( pMem->szMalloc==0
|| pMem->szMalloc==sqlite3DbMallocSize(pMem->db, pMem->zMalloc) );
if( n<32 ) n = 32;
- if( bPreserve && pMem->szMalloc>0 && pMem->z==pMem->zMalloc ){
+ if( pMem->szMalloc>0 && bPreserve && pMem->z==pMem->zMalloc ){
pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
bPreserve = 0;
}else{
@@ -70418,7 +71361,8 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre
pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
}
- if( bPreserve && pMem->z && ALWAYS(pMem->z!=pMem->zMalloc) ){
+ if( bPreserve && pMem->z ){
+ assert( pMem->z!=pMem->zMalloc );
memcpy(pMem->zMalloc, pMem->z, pMem->n);
}
if( (pMem->flags&MEM_Dyn)!=0 ){
@@ -70457,6 +71401,20 @@ SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){
}
/*
+** It is already known that pMem contains an unterminated string.
+** Add the zero terminator.
+*/
+static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
+ if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
+ return SQLITE_NOMEM_BKPT;
+ }
+ pMem->z[pMem->n] = 0;
+ pMem->z[pMem->n+1] = 0;
+ pMem->flags |= MEM_Term;
+ return SQLITE_OK;
+}
+
+/*
** Change pMem so that its MEM_Str or MEM_Blob value is stored in
** MEM.zMalloc, where it can be safely written.
**
@@ -70468,12 +71426,8 @@ SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
if( (pMem->flags & (MEM_Str|MEM_Blob))!=0 ){
if( ExpandBlob(pMem) ) return SQLITE_NOMEM;
if( pMem->szMalloc==0 || pMem->z!=pMem->zMalloc ){
- if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
- return SQLITE_NOMEM_BKPT;
- }
- pMem->z[pMem->n] = 0;
- pMem->z[pMem->n+1] = 0;
- pMem->flags |= MEM_Term;
+ int rc = vdbeMemAddTerminator(pMem);
+ if( rc ) return rc;
}
}
pMem->flags &= ~MEM_Ephem;
@@ -70513,20 +71467,6 @@ SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
#endif
/*
-** It is already known that pMem contains an unterminated string.
-** Add the zero terminator.
-*/
-static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
- if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
- return SQLITE_NOMEM_BKPT;
- }
- pMem->z[pMem->n] = 0;
- pMem->z[pMem->n+1] = 0;
- pMem->flags |= MEM_Term;
- return SQLITE_OK;
-}
-
-/*
** Make sure the given Mem is \u0000 terminated.
*/
SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
@@ -70600,26 +71540,24 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
** otherwise.
*/
SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
- int rc = SQLITE_OK;
- if( ALWAYS(pFunc && pFunc->xFinalize) ){
- sqlite3_context ctx;
- Mem t;
- assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
- assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
- memset(&ctx, 0, sizeof(ctx));
- memset(&t, 0, sizeof(t));
- t.flags = MEM_Null;
- t.db = pMem->db;
- ctx.pOut = &t;
- ctx.pMem = pMem;
- ctx.pFunc = pFunc;
- pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
- assert( (pMem->flags & MEM_Dyn)==0 );
- if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc);
- memcpy(pMem, &t, sizeof(t));
- rc = ctx.isError;
- }
- return rc;
+ sqlite3_context ctx;
+ Mem t;
+ assert( pFunc!=0 );
+ assert( pFunc->xFinalize!=0 );
+ assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
+ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
+ memset(&ctx, 0, sizeof(ctx));
+ memset(&t, 0, sizeof(t));
+ t.flags = MEM_Null;
+ t.db = pMem->db;
+ ctx.pOut = &t;
+ ctx.pMem = pMem;
+ ctx.pFunc = pFunc;
+ pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
+ assert( (pMem->flags & MEM_Dyn)==0 );
+ if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc);
+ memcpy(pMem, &t, sizeof(t));
+ return ctx.isError;
}
/*
@@ -70844,14 +71782,21 @@ SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
*/
SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
+ int rc;
assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
- if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
+ rc = sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc);
+ if( rc==0 ){
MemSetTypeFlag(pMem, MEM_Int);
}else{
- pMem->u.r = sqlite3VdbeRealValue(pMem);
- MemSetTypeFlag(pMem, MEM_Real);
- sqlite3VdbeIntegerAffinity(pMem);
+ i64 i = pMem->u.i;
+ sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc);
+ if( rc==1 && pMem->u.r==(double)i ){
+ pMem->u.i = i;
+ MemSetTypeFlag(pMem, MEM_Int);
+ }else{
+ MemSetTypeFlag(pMem, MEM_Real);
+ }
}
}
assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
@@ -71178,7 +72123,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
if( nByte<0 ){
assert( enc!=0 );
if( enc==SQLITE_UTF8 ){
- nByte = sqlite3Strlen30(z);
+ nByte = 0x7fffffff & (int)strlen(z);
if( nByte>iLimit ) nByte = iLimit+1;
}else{
for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
@@ -71256,12 +72201,11 @@ static SQLITE_NOINLINE int vdbeMemFromBtreeResize(
){
int rc;
pMem->flags = MEM_Null;
- if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+2)) ){
+ if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+1)) ){
rc = sqlite3BtreePayload(pCur, offset, amt, pMem->z);
if( rc==SQLITE_OK ){
- pMem->z[amt] = 0;
- pMem->z[amt+1] = 0;
- pMem->flags = MEM_Blob|MEM_Term;
+ pMem->z[amt] = 0; /* Overrun area used when reading malformed records */
+ pMem->flags = MEM_Blob;
pMem->n = (int)amt;
}else{
sqlite3VdbeMemRelease(pMem);
@@ -71410,7 +72354,7 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){
if( pRec ){
pRec->pKeyInfo = sqlite3KeyInfoOfIndex(p->pParse, pIdx);
if( pRec->pKeyInfo ){
- assert( pRec->pKeyInfo->nField+pRec->pKeyInfo->nXField==nCol );
+ assert( pRec->pKeyInfo->nAllField==nCol );
assert( pRec->pKeyInfo->enc==ENC(db) );
pRec->aMem = (Mem *)((u8*)pRec + ROUND8(sizeof(UnpackedRecord)));
for(i=0; i<nCol; i++){
@@ -71567,7 +72511,11 @@ static int valueFromExpr(
assert( pExpr!=0 );
while( (op = pExpr->op)==TK_UPLUS || op==TK_SPAN ) pExpr = pExpr->pLeft;
+#if defined(SQLITE_ENABLE_STAT3_OR_STAT4)
+ if( op==TK_REGISTER ) op = pExpr->op2;
+#else
if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
+#endif
/* Compressed expressions only appear when parsing the DEFAULT clause
** on a table column definition, and hence only when pCtx==0. This
@@ -71662,7 +72610,10 @@ static int valueFromExpr(
return rc;
no_mem:
- sqlite3OomFault(db);
+#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
+ if( pCtx==0 || pCtx->pParse->nErr==0 )
+#endif
+ sqlite3OomFault(db);
sqlite3DbFree(db, zVal);
assert( *ppVal==0 );
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
@@ -71946,7 +72897,7 @@ SQLITE_PRIVATE int sqlite3Stat4Column(
SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){
if( pRec ){
int i;
- int nCol = pRec->pKeyInfo->nField+pRec->pKeyInfo->nXField;
+ int nCol = pRec->pKeyInfo->nAllField;
Mem *aMem = pRec->aMem;
sqlite3 *db = aMem[0].db;
for(i=0; i<nCol; i++){
@@ -72042,10 +72993,12 @@ SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(Parse *pParse){
db->pVdbe = p;
p->magic = VDBE_MAGIC_INIT;
p->pParse = pParse;
+ pParse->pVdbe = p;
assert( pParse->aLabel==0 );
assert( pParse->nLabel==0 );
assert( pParse->nOpAlloc==0 );
assert( pParse->szOpAlloc==0 );
+ sqlite3VdbeAddOp2(p, OP_Init, 0, 1);
return p;
}
@@ -72499,7 +73452,8 @@ static Op *opIterNext(VdbeOpIter *p){
** * OP_VUpdate
** * OP_VRename
** * OP_FkCounter with P2==0 (immediate foreign key constraint)
-** * OP_CreateTable and OP_InitCoroutine (for CREATE TABLE AS SELECT ...)
+** * OP_CreateBtree/BTREE_INTKEY and OP_InitCoroutine
+** (for CREATE TABLE AS SELECT ...)
**
** Then check that the value of Parse.mayAbort is true if an
** ABORT may be thrown, or false otherwise. Return true if it does
@@ -72527,7 +73481,7 @@ SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
hasAbort = 1;
break;
}
- if( opcode==OP_CreateTable ) hasCreateTable = 1;
+ if( opcode==OP_CreateBtree && pOp->p3==BTREE_INTKEY ) hasCreateTable = 1;
if( opcode==OP_InitCoroutine ) hasInitCoroutine = 1;
#ifndef SQLITE_OMIT_FOREIGN_KEY
if( opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1 ){
@@ -72606,6 +73560,27 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
p->bIsReader = 1;
break;
}
+ case OP_Next:
+ case OP_NextIfOpen:
+ case OP_SorterNext: {
+ pOp->p4.xAdvance = sqlite3BtreeNext;
+ pOp->p4type = P4_ADVANCE;
+ /* The code generator never codes any of these opcodes as a jump
+ ** to a label. They are always coded as a jump backwards to a
+ ** known address */
+ assert( pOp->p2>=0 );
+ break;
+ }
+ case OP_Prev:
+ case OP_PrevIfOpen: {
+ pOp->p4.xAdvance = sqlite3BtreePrevious;
+ pOp->p4type = P4_ADVANCE;
+ /* The code generator never codes any of these opcodes as a jump
+ ** to a label. They are always coded as a jump backwards to a
+ ** known address */
+ assert( pOp->p2>=0 );
+ break;
+ }
#ifndef SQLITE_OMIT_VIRTUALTABLE
case OP_VUpdate: {
if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
@@ -72617,27 +73592,25 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
assert( pOp[-1].opcode==OP_Integer );
n = pOp[-1].p1;
if( n>nMaxArgs ) nMaxArgs = n;
- break;
+ /* Fall through into the default case */
}
#endif
- case OP_Next:
- case OP_NextIfOpen:
- case OP_SorterNext: {
- pOp->p4.xAdvance = sqlite3BtreeNext;
- pOp->p4type = P4_ADVANCE;
- break;
- }
- case OP_Prev:
- case OP_PrevIfOpen: {
- pOp->p4.xAdvance = sqlite3BtreePrevious;
- pOp->p4type = P4_ADVANCE;
+ default: {
+ if( pOp->p2<0 ){
+ /* The mkopcodeh.tcl script has so arranged things that the only
+ ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
+ ** have non-negative values for P2. */
+ assert( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 );
+ assert( ADDR(pOp->p2)<pParse->nLabel );
+ pOp->p2 = aLabel[ADDR(pOp->p2)];
+ }
break;
}
}
- if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 && pOp->p2<0 ){
- assert( ADDR(pOp->p2)<pParse->nLabel );
- pOp->p2 = aLabel[ADDR(pOp->p2)];
- }
+ /* The mkopcodeh.tcl script has so arranged things that the only
+ ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to
+ ** have non-negative values for P2. */
+ assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0);
}
if( pOp==p->aOp ) break;
pOp--;
@@ -72853,6 +73826,7 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){
case P4_REAL:
case P4_INT64:
case P4_DYNAMIC:
+ case P4_DYNBLOB:
case P4_INTARRAY: {
sqlite3DbFree(db, p4);
break;
@@ -73310,8 +74284,8 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
int j;
KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
assert( pKeyInfo->aSortOrder!=0 );
- sqlite3XPrintf(&x, "k(%d", pKeyInfo->nField);
- for(j=0; j<pKeyInfo->nField; j++){
+ sqlite3XPrintf(&x, "k(%d", pKeyInfo->nKeyField);
+ for(j=0; j<pKeyInfo->nKeyField; j++){
CollSeq *pColl = pKeyInfo->aColl[j];
const char *zColl = pColl ? pColl->zName : "";
if( strcmp(zColl, "BINARY")==0 ) zColl = "B";
@@ -73383,7 +74357,7 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
int *ai = pOp->p4.ai;
int n = ai[0]; /* The first element of an INTARRAY is always the
** count of the number of elements to follow */
- for(i=1; i<n; i++){
+ for(i=1; i<=n; i++){
sqlite3XPrintf(&x, ",%d", ai[i]);
}
zTemp[0] = '[';
@@ -73394,6 +74368,7 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
sqlite3XPrintf(&x, "program");
break;
}
+ case P4_DYNBLOB:
case P4_ADVANCE: {
zTemp[0] = 0;
break;
@@ -73626,6 +74601,8 @@ SQLITE_PRIVATE int sqlite3VdbeList(
int i; /* Loop counter */
int rc = SQLITE_OK; /* Return code */
Mem *pMem = &p->aMem[1]; /* First Mem of result set */
+ int bListSubprogs = (p->explain==1 || (db->flags & SQLITE_TriggerEQP)!=0);
+ Op *pOp = 0;
assert( p->explain );
assert( p->magic==VDBE_MAGIC_RUN );
@@ -73638,7 +74615,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
releaseMemArray(pMem, 8);
p->pResultSet = 0;
- if( p->rc==SQLITE_NOMEM_BKPT ){
+ if( p->rc==SQLITE_NOMEM ){
/* This happens if a malloc() inside a call to sqlite3_column_text() or
** sqlite3_column_text16() failed. */
sqlite3OomFault(db);
@@ -73653,7 +74630,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
** encountered, but p->pc will eventually catch up to nRow.
*/
nRow = p->nOp;
- if( p->explain==1 ){
+ if( bListSubprogs ){
/* The first 8 memory cells are used for the result set. So we will
** commandeer the 9th cell to use as storage for an array of pointers
** to trigger subprograms. The VDBE is guaranteed to have at least 9
@@ -73673,17 +74650,11 @@ SQLITE_PRIVATE int sqlite3VdbeList(
do{
i = p->pc++;
- }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
- if( i>=nRow ){
- p->rc = SQLITE_OK;
- rc = SQLITE_DONE;
- }else if( db->u1.isInterrupted ){
- p->rc = SQLITE_INTERRUPT;
- rc = SQLITE_ERROR;
- sqlite3VdbeError(p, sqlite3ErrStr(p->rc));
- }else{
- char *zP4;
- Op *pOp;
+ if( i>=nRow ){
+ p->rc = SQLITE_OK;
+ rc = SQLITE_DONE;
+ break;
+ }
if( i<p->nOp ){
/* The output line number is small enough that we are still in the
** main program. */
@@ -73698,94 +74669,110 @@ SQLITE_PRIVATE int sqlite3VdbeList(
}
pOp = &apSub[j]->aOp[i];
}
- if( p->explain==1 ){
- pMem->flags = MEM_Int;
- pMem->u.i = i; /* Program counter */
- pMem++;
-
- pMem->flags = MEM_Static|MEM_Str|MEM_Term;
- pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
- assert( pMem->z!=0 );
- pMem->n = sqlite3Strlen30(pMem->z);
- pMem->enc = SQLITE_UTF8;
- pMem++;
- /* When an OP_Program opcode is encounter (the only opcode that has
- ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
- ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
- ** has not already been seen.
- */
- if( pOp->p4type==P4_SUBPROGRAM ){
- int nByte = (nSub+1)*sizeof(SubProgram*);
- int j;
- for(j=0; j<nSub; j++){
- if( apSub[j]==pOp->p4.pProgram ) break;
- }
- if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, nSub!=0) ){
- apSub = (SubProgram **)pSub->z;
- apSub[nSub++] = pOp->p4.pProgram;
- pSub->flags |= MEM_Blob;
- pSub->n = nSub*sizeof(SubProgram*);
+ /* When an OP_Program opcode is encounter (the only opcode that has
+ ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
+ ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
+ ** has not already been seen.
+ */
+ if( bListSubprogs && pOp->p4type==P4_SUBPROGRAM ){
+ int nByte = (nSub+1)*sizeof(SubProgram*);
+ int j;
+ for(j=0; j<nSub; j++){
+ if( apSub[j]==pOp->p4.pProgram ) break;
+ }
+ if( j==nSub ){
+ p->rc = sqlite3VdbeMemGrow(pSub, nByte, nSub!=0);
+ if( p->rc!=SQLITE_OK ){
+ rc = SQLITE_ERROR;
+ break;
}
+ apSub = (SubProgram **)pSub->z;
+ apSub[nSub++] = pOp->p4.pProgram;
+ pSub->flags |= MEM_Blob;
+ pSub->n = nSub*sizeof(SubProgram*);
+ nRow += pOp->p4.pProgram->nOp;
}
}
+ }while( p->explain==2 && pOp->opcode!=OP_Explain );
- pMem->flags = MEM_Int;
- pMem->u.i = pOp->p1; /* P1 */
- pMem++;
+ if( rc==SQLITE_OK ){
+ if( db->u1.isInterrupted ){
+ p->rc = SQLITE_INTERRUPT;
+ rc = SQLITE_ERROR;
+ sqlite3VdbeError(p, sqlite3ErrStr(p->rc));
+ }else{
+ char *zP4;
+ if( p->explain==1 ){
+ pMem->flags = MEM_Int;
+ pMem->u.i = i; /* Program counter */
+ pMem++;
+
+ pMem->flags = MEM_Static|MEM_Str|MEM_Term;
+ pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
+ assert( pMem->z!=0 );
+ pMem->n = sqlite3Strlen30(pMem->z);
+ pMem->enc = SQLITE_UTF8;
+ pMem++;
+ }
- pMem->flags = MEM_Int;
- pMem->u.i = pOp->p2; /* P2 */
- pMem++;
+ pMem->flags = MEM_Int;
+ pMem->u.i = pOp->p1; /* P1 */
+ pMem++;
- pMem->flags = MEM_Int;
- pMem->u.i = pOp->p3; /* P3 */
- pMem++;
+ pMem->flags = MEM_Int;
+ pMem->u.i = pOp->p2; /* P2 */
+ pMem++;
- if( sqlite3VdbeMemClearAndResize(pMem, 100) ){ /* P4 */
- assert( p->db->mallocFailed );
- return SQLITE_ERROR;
- }
- pMem->flags = MEM_Str|MEM_Term;
- zP4 = displayP4(pOp, pMem->z, pMem->szMalloc);
- if( zP4!=pMem->z ){
- pMem->n = 0;
- sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0);
- }else{
- assert( pMem->z!=0 );
- pMem->n = sqlite3Strlen30(pMem->z);
- pMem->enc = SQLITE_UTF8;
- }
- pMem++;
+ pMem->flags = MEM_Int;
+ pMem->u.i = pOp->p3; /* P3 */
+ pMem++;
- if( p->explain==1 ){
- if( sqlite3VdbeMemClearAndResize(pMem, 4) ){
+ if( sqlite3VdbeMemClearAndResize(pMem, 100) ){ /* P4 */
assert( p->db->mallocFailed );
return SQLITE_ERROR;
}
pMem->flags = MEM_Str|MEM_Term;
- pMem->n = 2;
- sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */
- pMem->enc = SQLITE_UTF8;
+ zP4 = displayP4(pOp, pMem->z, pMem->szMalloc);
+ if( zP4!=pMem->z ){
+ pMem->n = 0;
+ sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0);
+ }else{
+ assert( pMem->z!=0 );
+ pMem->n = sqlite3Strlen30(pMem->z);
+ pMem->enc = SQLITE_UTF8;
+ }
pMem++;
-
+
+ if( p->explain==1 ){
+ if( sqlite3VdbeMemClearAndResize(pMem, 4) ){
+ assert( p->db->mallocFailed );
+ return SQLITE_ERROR;
+ }
+ pMem->flags = MEM_Str|MEM_Term;
+ pMem->n = 2;
+ sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */
+ pMem->enc = SQLITE_UTF8;
+ pMem++;
+
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
- if( sqlite3VdbeMemClearAndResize(pMem, 500) ){
- assert( p->db->mallocFailed );
- return SQLITE_ERROR;
- }
- pMem->flags = MEM_Str|MEM_Term;
- pMem->n = displayComment(pOp, zP4, pMem->z, 500);
- pMem->enc = SQLITE_UTF8;
+ if( sqlite3VdbeMemClearAndResize(pMem, 500) ){
+ assert( p->db->mallocFailed );
+ return SQLITE_ERROR;
+ }
+ pMem->flags = MEM_Str|MEM_Term;
+ pMem->n = displayComment(pOp, zP4, pMem->z, 500);
+ pMem->enc = SQLITE_UTF8;
#else
- pMem->flags = MEM_Null; /* Comment */
+ pMem->flags = MEM_Null; /* Comment */
#endif
- }
+ }
- p->nResColumn = 8 - 4*(p->explain-1);
- p->pResultSet = &p->aMem[1];
- p->rc = SQLITE_OK;
- rc = SQLITE_ROW;
+ p->nResColumn = 8 - 4*(p->explain-1);
+ p->pResultSet = &p->aMem[1];
+ p->rc = SQLITE_OK;
+ rc = SQLITE_ROW;
+ }
}
return rc;
}
@@ -74148,27 +75135,6 @@ static void closeAllCursors(Vdbe *p){
}
/*
-** Clean up the VM after a single run.
-*/
-static void Cleanup(Vdbe *p){
- sqlite3 *db = p->db;
-
-#ifdef SQLITE_DEBUG
- /* Execute assert() statements to ensure that the Vdbe.apCsr[] and
- ** Vdbe.aMem[] arrays have already been cleaned up. */
- int i;
- if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
- if( p->aMem ){
- for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined );
- }
-#endif
-
- sqlite3DbFree(db, p->zErrMsg);
- p->zErrMsg = 0;
- p->pResultSet = 0;
-}
-
-/*
** Set the number of result columns that will be returned by this SQL
** statement. This is now set at compile time, rather than during
** execution of the vdbe program so that sqlite3_column_count() can
@@ -74276,6 +75242,7 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){
pPager = sqlite3BtreePager(pBt);
if( db->aDb[i].safety_level!=PAGER_SYNCHRONOUS_OFF
&& aMJNeeded[sqlite3PagerGetJournalMode(pPager)]
+ && sqlite3PagerIsMemdb(pPager)==0
){
assert( i!=1 );
nTrans++;
@@ -74876,6 +75843,10 @@ static void vdbeInvokeSqllog(Vdbe *v){
** VDBE_MAGIC_INIT.
*/
SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
+#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
+ int i;
+#endif
+
sqlite3 *db;
db = p->db;
@@ -74893,8 +75864,6 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
if( p->pc>=0 ){
vdbeInvokeSqllog(p);
sqlite3VdbeTransferError(p);
- sqlite3DbFree(db, p->zErrMsg);
- p->zErrMsg = 0;
if( p->runOnlyOnce ) p->expired = 1;
}else if( p->rc && p->expired ){
/* The expired flag was set on the VDBE before the first call
@@ -74902,13 +75871,21 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
** called), set the database error in this case as well.
*/
sqlite3ErrorWithMsg(db, p->rc, p->zErrMsg ? "%s" : 0, p->zErrMsg);
- sqlite3DbFree(db, p->zErrMsg);
- p->zErrMsg = 0;
}
- /* Reclaim all memory used by the VDBE
+ /* Reset register contents and reclaim error message memory.
*/
- Cleanup(p);
+#ifdef SQLITE_DEBUG
+ /* Execute assert() statements to ensure that the Vdbe.apCsr[] and
+ ** Vdbe.aMem[] arrays have already been cleaned up. */
+ if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
+ if( p->aMem ){
+ for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined );
+ }
+#endif
+ sqlite3DbFree(db, p->zErrMsg);
+ p->zErrMsg = 0;
+ p->pResultSet = 0;
/* Save profiling information from this VDBE run.
*/
@@ -74916,7 +75893,6 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
{
FILE *out = fopen("vdbe_profile.out", "a");
if( out ){
- int i;
fprintf(out, "---- ");
for(i=0; i<p->nOp; i++){
fprintf(out, "%02x", p->aOp[i].opcode);
@@ -75042,7 +76018,7 @@ SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
sqlite3 *db;
- if( NEVER(p==0) ) return;
+ assert( p!=0 );
db = p->db;
assert( sqlite3_mutex_held(db->mutex) );
sqlite3VdbeClearObject(db, p);
@@ -75129,19 +76105,18 @@ SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor *p){
*/
SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor **pp, int *piCol){
VdbeCursor *p = *pp;
- if( p->eCurType==CURTYPE_BTREE ){
- if( p->deferredMoveto ){
- int iMap;
- if( p->aAltMap && (iMap = p->aAltMap[1+*piCol])>0 ){
- *pp = p->pAltCursor;
- *piCol = iMap - 1;
- return SQLITE_OK;
- }
- return handleDeferredMoveto(p);
- }
- if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
- return handleMovedCursor(p);
+ assert( p->eCurType==CURTYPE_BTREE || p->eCurType==CURTYPE_PSEUDO );
+ if( p->deferredMoveto ){
+ int iMap;
+ if( p->aAltMap && (iMap = p->aAltMap[1+*piCol])>0 ){
+ *pp = p->pAltCursor;
+ *piCol = iMap - 1;
+ return SQLITE_OK;
}
+ return handleDeferredMoveto(p);
+ }
+ if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
+ return handleMovedCursor(p);
}
return SQLITE_OK;
}
@@ -75439,7 +76414,13 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
Mem *pMem /* Memory cell to write value into */
){
switch( serial_type ){
- case 10: /* Reserved for future use */
+ case 10: { /* Internal use only: NULL with virtual table
+ ** UPDATE no-change flag set */
+ pMem->flags = MEM_Null|MEM_Zero;
+ pMem->n = 0;
+ pMem->u.nZero = 0;
+ break;
+ }
case 11: /* Reserved for future use */
case 0: { /* Null */
/* EVIDENCE-OF: R-24078-09375 Value is a NULL. */
@@ -75537,13 +76518,13 @@ SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(
){
UnpackedRecord *p; /* Unpacked record to return */
int nByte; /* Number of bytes required for *p */
- nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
+ nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nKeyField+1);
p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte);
if( !p ) return 0;
p->aMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
assert( pKeyInfo->aSortOrder!=0 );
p->pKeyInfo = pKeyInfo;
- p->nField = pKeyInfo->nField + 1;
+ p->nField = pKeyInfo->nKeyField + 1;
return p;
}
@@ -75583,7 +76564,7 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
pMem++;
if( (++u)>=p->nField ) break;
}
- assert( u<=pKeyInfo->nField + 1 );
+ assert( u<=pKeyInfo->nKeyField + 1 );
p->nField = u;
}
@@ -75632,9 +76613,9 @@ static int vdbeRecordCompareDebug(
idx1 = getVarint32(aKey1, szHdr1);
if( szHdr1>98307 ) return SQLITE_CORRUPT;
d1 = szHdr1;
- assert( pKeyInfo->nField+pKeyInfo->nXField>=pPKey2->nField || CORRUPT_DB );
+ assert( pKeyInfo->nAllField>=pPKey2->nField || CORRUPT_DB );
assert( pKeyInfo->aSortOrder!=0 );
- assert( pKeyInfo->nField>0 );
+ assert( pKeyInfo->nKeyField>0 );
assert( idx1<=szHdr1 || CORRUPT_DB );
do{
u32 serial_type1;
@@ -75696,12 +76677,12 @@ debugCompareEnd:
/*
** Count the number of fields (a.k.a. columns) in the record given by
** pKey,nKey. The verify that this count is less than or equal to the
-** limit given by pKeyInfo->nField + pKeyInfo->nXField.
+** limit given by pKeyInfo->nAllField.
**
** If this constraint is not satisfied, it means that the high-speed
** vdbeRecordCompareInt() and vdbeRecordCompareString() routines will
** not work correctly. If this assert() ever fires, it probably means
-** that the KeyInfo.nField or KeyInfo.nXField values were computed
+** that the KeyInfo.nKeyField or KeyInfo.nAllField values were computed
** incorrectly.
*/
static void vdbeAssertFieldCountWithinLimits(
@@ -75722,7 +76703,7 @@ static void vdbeAssertFieldCountWithinLimits(
idx += getVarint32(aKey+idx, notUsed);
nField++;
}
- assert( nField <= pKeyInfo->nField+pKeyInfo->nXField );
+ assert( nField <= pKeyInfo->nAllField );
}
#else
# define vdbeAssertFieldCountWithinLimits(A,B,C)
@@ -76027,10 +77008,10 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip(
}
VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */
- assert( pPKey2->pKeyInfo->nField+pPKey2->pKeyInfo->nXField>=pPKey2->nField
+ assert( pPKey2->pKeyInfo->nAllField>=pPKey2->nField
|| CORRUPT_DB );
assert( pPKey2->pKeyInfo->aSortOrder!=0 );
- assert( pPKey2->pKeyInfo->nField>0 );
+ assert( pPKey2->pKeyInfo->nKeyField>0 );
assert( idx1<=szHdr1 || CORRUPT_DB );
do{
u32 serial_type;
@@ -76363,7 +77344,7 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord *p){
** The easiest way to enforce this limit is to consider only records with
** 13 fields or less. If the first field is an integer, the maximum legal
** header size is (12*5 + 1 + 1) bytes. */
- if( (p->pKeyInfo->nField + p->pKeyInfo->nXField)<=13 ){
+ if( p->pKeyInfo->nAllField<=13 ){
int flags = p->aMem[0].flags;
if( p->pKeyInfo->aSortOrder[0] ){
p->r1 = 1;
@@ -76698,7 +77679,7 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook(
preupdate.iNewReg = iReg;
preupdate.keyinfo.db = db;
preupdate.keyinfo.enc = ENC(db);
- preupdate.keyinfo.nField = pTab->nCol;
+ preupdate.keyinfo.nKeyField = pTab->nCol;
preupdate.keyinfo.aSortOrder = (u8*)&fakeSortOrder;
preupdate.iKey1 = iKey1;
preupdate.iKey2 = iKey2;
@@ -76708,8 +77689,8 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook(
db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2);
db->pPreUpdate = 0;
sqlite3DbFree(db, preupdate.aRecord);
- vdbeFreeUnpacked(db, preupdate.keyinfo.nField+1, preupdate.pUnpacked);
- vdbeFreeUnpacked(db, preupdate.keyinfo.nField+1, preupdate.pNewUnpacked);
+ vdbeFreeUnpacked(db, preupdate.keyinfo.nKeyField+1, preupdate.pUnpacked);
+ vdbeFreeUnpacked(db, preupdate.keyinfo.nKeyField+1, preupdate.pNewUnpacked);
if( preupdate.aNew ){
int i;
for(i=0; i<pCsr->nField; i++){
@@ -76992,6 +77973,11 @@ SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
return aType[pVal->flags&MEM_AffMask];
}
+/* Return true if a parameter to xUpdate represents an unchanged column */
+SQLITE_API int sqlite3_value_nochange(sqlite3_value *pVal){
+ return (pVal->flags&(MEM_Null|MEM_Zero))==(MEM_Null|MEM_Zero);
+}
+
/* Make a copy of an sqlite3_value object
*/
SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){
@@ -77248,7 +78234,7 @@ static int doWalCallbacks(sqlite3 *db){
sqlite3BtreeEnter(pBt);
nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
sqlite3BtreeLeave(pBt);
- if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
+ if( nEntry>0 && db->xWalCallback && rc==SQLITE_OK ){
rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zDbSName, nEntry);
}
}
@@ -77358,7 +78344,7 @@ static int sqlite3Step(Vdbe *p){
if( rc!=SQLITE_ROW ) checkProfileCallback(db, p);
#endif
- if( rc==SQLITE_DONE ){
+ if( rc==SQLITE_DONE && db->autoCommit ){
assert( p->rc==SQLITE_OK );
p->rc = doWalCallbacks(db);
if( p->rc!=SQLITE_OK ){
@@ -77402,7 +78388,6 @@ end_of_step:
*/
SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
int rc = SQLITE_OK; /* Result from sqlite3Step() */
- int rc2 = SQLITE_OK; /* Result from sqlite3Reprepare() */
Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */
int cnt = 0; /* Counter to prevent infinite loop of reprepares */
sqlite3 *db; /* The database connection */
@@ -77416,32 +78401,31 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
&& cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
int savedPc = v->pc;
- rc2 = rc = sqlite3Reprepare(v);
- if( rc!=SQLITE_OK) break;
+ rc = sqlite3Reprepare(v);
+ if( rc!=SQLITE_OK ){
+ /* This case occurs after failing to recompile an sql statement.
+ ** The error message from the SQL compiler has already been loaded
+ ** into the database handle. This block copies the error message
+ ** from the database handle into the statement and sets the statement
+ ** program counter to 0 to ensure that when the statement is
+ ** finalized or reset the parser error message is available via
+ ** sqlite3_errmsg() and sqlite3_errcode().
+ */
+ const char *zErr = (const char *)sqlite3_value_text(db->pErr);
+ sqlite3DbFree(db, v->zErrMsg);
+ if( !db->mallocFailed ){
+ v->zErrMsg = sqlite3DbStrDup(db, zErr);
+ v->rc = rc = sqlite3ApiExit(db, rc);
+ } else {
+ v->zErrMsg = 0;
+ v->rc = rc = SQLITE_NOMEM_BKPT;
+ }
+ break;
+ }
sqlite3_reset(pStmt);
if( savedPc>=0 ) v->doingRerun = 1;
assert( v->expired==0 );
}
- if( rc2!=SQLITE_OK ){
- /* This case occurs after failing to recompile an sql statement.
- ** The error message from the SQL compiler has already been loaded
- ** into the database handle. This block copies the error message
- ** from the database handle into the statement and sets the statement
- ** program counter to 0 to ensure that when the statement is
- ** finalized or reset the parser error message is available via
- ** sqlite3_errmsg() and sqlite3_errcode().
- */
- const char *zErr = (const char *)sqlite3_value_text(db->pErr);
- sqlite3DbFree(db, v->zErrMsg);
- if( !db->mallocFailed ){
- v->zErrMsg = sqlite3DbStrDup(db, zErr);
- v->rc = rc2;
- } else {
- v->zErrMsg = 0;
- v->rc = rc = SQLITE_NOMEM_BKPT;
- }
- }
- rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(db->mutex);
return rc;
}
@@ -77472,6 +78456,25 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
}
/*
+** If this routine is invoked from within an xColumn method of a virtual
+** table, then it returns true if and only if the the call is during an
+** UPDATE operation and the value of the column will not be modified
+** by the UPDATE.
+**
+** If this routine is called from any context other than within the
+** xColumn method of a virtual table, then the return value is meaningless
+** and arbitrary.
+**
+** Virtual table implements might use this routine to optimize their
+** performance by substituting a NULL result, or some other light-weight
+** value, as a signal to the xUpdate routine that the column is unchanged.
+*/
+SQLITE_API int sqlite3_vtab_nochange(sqlite3_context *p){
+ assert( p );
+ return sqlite3_value_nochange(p->pOut);
+}
+
+/*
** Return the current time for a statement. If the current time
** is requested more than once within the same run of a single prepared
** statement, the exact same time is returned for each invocation regardless
@@ -78447,7 +79450,7 @@ static UnpackedRecord *vdbeUnpackRecord(
pRet = sqlite3VdbeAllocUnpackedRecord(pKeyInfo);
if( pRet ){
- memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nField+1));
+ memset(pRet->aMem, 0, sizeof(Mem)*(pKeyInfo->nKeyField+1));
sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, pRet);
}
return pRet;
@@ -78520,7 +79523,7 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa
*/
SQLITE_API int sqlite3_preupdate_count(sqlite3 *db){
PreUpdate *p = db->pPreUpdate;
- return (p ? p->keyinfo.nField : 0);
+ return (p ? p->keyinfo.nKeyField : 0);
}
#endif /* SQLITE_ENABLE_PREUPDATE_HOOK */
@@ -78773,7 +79776,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
Mem *pVar; /* Value of a host parameter */
StrAccum out; /* Accumulate the output here */
#ifndef SQLITE_OMIT_UTF16
- Mem utf8; /* Used to convert UTF16 parameters into UTF8 for display */
+ Mem utf8; /* Used to convert UTF16 into UTF8 for display */
#endif
char zBase[100]; /* Initial working space */
@@ -79242,7 +80245,7 @@ static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){
return 0;
}
- if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==SQLITE_OK ){
+ if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==0 ){
return MEM_Int;
}
return MEM_Real;
@@ -79352,7 +80355,7 @@ static void memTracePrint(Mem *p){
if( p->flags & MEM_Undefined ){
printf(" undefined");
}else if( p->flags & MEM_Null ){
- printf(" NULL");
+ printf(p->flags & MEM_Zero ? " NULL-nochng" : " NULL");
}else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
printf(" si:%lld", p->u.i);
}else if( p->flags & MEM_Int ){
@@ -80932,13 +81935,23 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
}
compare_op:
- switch( pOp->opcode ){
- case OP_Eq: res2 = res==0; break;
- case OP_Ne: res2 = res; break;
- case OP_Lt: res2 = res<0; break;
- case OP_Le: res2 = res<=0; break;
- case OP_Gt: res2 = res>0; break;
- default: res2 = res>=0; break;
+ /* At this point, res is negative, zero, or positive if reg[P1] is
+ ** less than, equal to, or greater than reg[P3], respectively. Compute
+ ** the answer to this operator in res2, depending on what the comparison
+ ** operator actually is. The next block of code depends on the fact
+ ** that the 6 comparison operators are consecutive integers in this
+ ** order: NE, EQ, GT, LE, LT, GE */
+ assert( OP_Eq==OP_Ne+1 ); assert( OP_Gt==OP_Ne+2 ); assert( OP_Le==OP_Ne+3 );
+ assert( OP_Lt==OP_Ne+4 ); assert( OP_Ge==OP_Ne+5 );
+ if( res<0 ){ /* ne, eq, gt, le, lt, ge */
+ static const unsigned char aLTb[] = { 1, 0, 0, 1, 1, 0 };
+ res2 = aLTb[pOp->opcode - OP_Ne];
+ }else if( res==0 ){
+ static const unsigned char aEQb[] = { 0, 1, 0, 1, 0, 1 };
+ res2 = aEQb[pOp->opcode - OP_Ne];
+ }else{
+ static const unsigned char aGTb[] = { 1, 0, 1, 0, 0, 1 };
+ res2 = aGTb[pOp->opcode - OP_Ne];
}
/* Undo any changes made by applyAffinity() to the input registers. */
@@ -80950,7 +81963,6 @@ compare_op:
if( pOp->p5 & SQLITE_STOREP2 ){
pOut = &aMem[pOp->p2];
iCompare = res;
- res2 = res2!=0; /* For this path res2 must be exactly 0 or 1 */
if( (pOp->p5 & SQLITE_KEEPNULL)!=0 ){
/* The KEEPNULL flag prevents OP_Eq from overwriting a NULL with 1
** and prevents OP_Ne from overwriting NULL with 0. This flag
@@ -81081,7 +82093,7 @@ case OP_Compare: {
assert( memIsValid(&aMem[p2+idx]) );
REGISTER_TRACE(p1+idx, &aMem[p1+idx]);
REGISTER_TRACE(p2+idx, &aMem[p2+idx]);
- assert( i<pKeyInfo->nField );
+ assert( i<pKeyInfo->nKeyField );
pColl = pKeyInfo->aColl[i];
bRev = pKeyInfo->aSortOrder[i];
iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl);
@@ -81317,6 +82329,36 @@ case OP_IfNullRow: { /* jump */
break;
}
+#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
+/* Opcode: Offset P1 P2 P3 * *
+** Synopsis: r[P3] = sqlite_offset(P1)
+**
+** Store in register r[P3] the byte offset into the database file that is the
+** start of the payload for the record at which that cursor P1 is currently
+** pointing.
+**
+** P2 is the column number for the argument to the sqlite_offset() function.
+** This opcode does not use P2 itself, but the P2 value is used by the
+** code generator. The P1, P2, and P3 operands to this opcode are the
+** as as for OP_Column.
+**
+** This opcode is only available if SQLite is compiled with the
+** -DSQLITE_ENABLE_OFFSET_SQL_FUNC option.
+*/
+case OP_Offset: { /* out3 */
+ VdbeCursor *pC; /* The VDBE cursor */
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
+ pOut = &p->aMem[pOp->p3];
+ if( NEVER(pC==0) || pC->eCurType!=CURTYPE_BTREE ){
+ sqlite3VdbeMemSetNull(pOut);
+ }else{
+ sqlite3VdbeMemSetInt64(pOut, sqlite3BtreeOffset(pC->uc.pCursor));
+ }
+ break;
+}
+#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */
+
/* Opcode: Column P1 P2 P3 P4 P5
** Synopsis: r[P3]=PX
**
@@ -81354,9 +82396,7 @@ case OP_Column: {
const u8 *zData; /* Part of the record being decoded */
const u8 *zHdr; /* Next unparsed byte of the header */
const u8 *zEndHdr; /* Pointer to first byte after the header */
- u32 offset; /* Offset into the data */
u64 offset64; /* 64-bit offset */
- u32 avail; /* Number of bytes of available data */
u32 t; /* A type code from the record header */
Mem *pReg; /* PseudoTable input register */
@@ -81383,11 +82423,13 @@ case OP_Column: {
if( pC->cacheStatus!=p->cacheCtr ){ /*OPTIMIZATION-IF-FALSE*/
if( pC->nullRow ){
if( pC->eCurType==CURTYPE_PSEUDO ){
- assert( pC->uc.pseudoTableReg>0 );
- pReg = &aMem[pC->uc.pseudoTableReg];
+ /* For the special case of as pseudo-cursor, the seekResult field
+ ** identifies the register that holds the record */
+ assert( pC->seekResult>0 );
+ pReg = &aMem[pC->seekResult];
assert( pReg->flags & MEM_Blob );
assert( memIsValid(pReg) );
- pC->payloadSize = pC->szRow = avail = pReg->n;
+ pC->payloadSize = pC->szRow = pReg->n;
pC->aRow = (u8*)pReg->z;
}else{
sqlite3VdbeMemSetNull(pDest);
@@ -81399,23 +82441,19 @@ case OP_Column: {
assert( pCrsr );
assert( sqlite3BtreeCursorIsValid(pCrsr) );
pC->payloadSize = sqlite3BtreePayloadSize(pCrsr);
- pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &avail);
- assert( avail<=65536 ); /* Maximum page size is 64KiB */
- if( pC->payloadSize <= (u32)avail ){
- pC->szRow = pC->payloadSize;
- }else if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
+ pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &pC->szRow);
+ assert( pC->szRow<=pC->payloadSize );
+ assert( pC->szRow<=65536 ); /* Maximum page size is 64KiB */
+ if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
goto too_big;
- }else{
- pC->szRow = avail;
}
}
pC->cacheStatus = p->cacheCtr;
- pC->iHdrOffset = getVarint32(pC->aRow, offset);
+ pC->iHdrOffset = getVarint32(pC->aRow, aOffset[0]);
pC->nHdrParsed = 0;
- aOffset[0] = offset;
- if( avail<offset ){ /*OPTIMIZATION-IF-FALSE*/
+ if( pC->szRow<aOffset[0] ){ /*OPTIMIZATION-IF-FALSE*/
/* pC->aRow does not have to hold the entire row, but it does at least
** need to cover the header of the record. If pC->aRow does not contain
** the complete header, then set it to zero, forcing the header to be
@@ -81432,17 +82470,26 @@ case OP_Column: {
** 3-byte type for each of the maximum of 32768 columns plus three
** extra bytes for the header length itself. 32768*3 + 3 = 98307.
*/
- if( offset > 98307 || offset > pC->payloadSize ){
- rc = SQLITE_CORRUPT_BKPT;
- goto abort_due_to_error;
+ if( aOffset[0] > 98307 || aOffset[0] > pC->payloadSize ){
+ goto op_column_corrupt;
}
- }else if( offset>0 ){ /*OPTIMIZATION-IF-TRUE*/
- /* The following goto is an optimization. It can be omitted and
- ** everything will still work. But OP_Column is measurably faster
- ** by skipping the subsequent conditional, which is always true.
+ }else{
+ /* This is an optimization. By skipping over the first few tests
+ ** (ex: pC->nHdrParsed<=p2) in the next section, we achieve a
+ ** measurable performance gain.
+ **
+ ** This branch is taken even if aOffset[0]==0. Such a record is never
+ ** generated by SQLite, and could be considered corruption, but we
+ ** accept it for historical reasons. When aOffset[0]==0, the code this
+ ** branch jumps to reads past the end of the record, but never more
+ ** than a few bytes. Even if the record occurs at the end of the page
+ ** content area, the "page header" comes after the page content and so
+ ** this overread is harmless. Similar overreads can occur for a corrupt
+ ** database file.
*/
zData = pC->aRow;
assert( pC->nHdrParsed<=p2 ); /* Conditional skipped */
+ testcase( aOffset[0]==0 );
goto op_column_read_header;
}
}
@@ -81471,6 +82518,7 @@ case OP_Column: {
offset64 = aOffset[i];
zHdr = zData + pC->iHdrOffset;
zEndHdr = zData + aOffset[0];
+ testcase( zHdr>=zEndHdr );
do{
if( (t = zHdr[0])<0x80 ){
zHdr++;
@@ -81491,9 +82539,13 @@ case OP_Column: {
if( (zHdr>=zEndHdr && (zHdr>zEndHdr || offset64!=pC->payloadSize))
|| (offset64 > pC->payloadSize)
){
- if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem);
- rc = SQLITE_CORRUPT_BKPT;
- goto abort_due_to_error;
+ if( aOffset[0]==0 ){
+ i = 0;
+ zHdr = zEndHdr;
+ }else{
+ if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem);
+ goto op_column_corrupt;
+ }
}
pC->nHdrParsed = i;
@@ -81587,6 +82639,15 @@ op_column_out:
UPDATE_MAX_BLOBSIZE(pDest);
REGISTER_TRACE(pOp->p3, pDest);
break;
+
+op_column_corrupt:
+ if( aOp[0].p3>0 ){
+ pOp = &aOp[aOp[0].p3-1];
+ break;
+ }else{
+ rc = SQLITE_CORRUPT_BKPT;
+ goto abort_due_to_error;
+ }
}
/* Opcode: Affinity P1 P2 * P4 *
@@ -81711,9 +82772,18 @@ case OP_MakeRecord: {
pRec = pLast;
do{
assert( memIsValid(pRec) );
- pRec->uTemp = serial_type = sqlite3VdbeSerialType(pRec, file_format, &len);
+ serial_type = sqlite3VdbeSerialType(pRec, file_format, &len);
if( pRec->flags & MEM_Zero ){
- if( nData ){
+ if( serial_type==0 ){
+ /* Values with MEM_Null and MEM_Zero are created by xColumn virtual
+ ** table methods that never invoke sqlite3_result_xxxxx() while
+ ** computing an unchanging column value in an UPDATE statement.
+ ** Give such values a special internal-use-only serial-type of 10
+ ** so that they can be passed through to xUpdate and have
+ ** a true sqlite3_value_nochange(). */
+ assert( pOp->p5==OPFLAG_NOCHNG_MAGIC || CORRUPT_DB );
+ serial_type = 10;
+ }else if( nData ){
if( sqlite3VdbeMemExpandBlob(pRec) ) goto no_mem;
}else{
nZero += pRec->u.nZero;
@@ -81724,6 +82794,7 @@ case OP_MakeRecord: {
testcase( serial_type==127 );
testcase( serial_type==128 );
nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type);
+ pRec->uTemp = serial_type;
if( pRec==pData0 ) break;
pRec--;
}while(1);
@@ -81927,7 +82998,7 @@ case OP_Savepoint: {
int isSchemaChange;
iSavepoint = db->nSavepoint - iSavepoint - 1;
if( p1==SAVEPOINT_ROLLBACK ){
- isSchemaChange = (db->flags & SQLITE_InternChanges)!=0;
+ isSchemaChange = (db->mDbFlags & DBFLAG_SchemaChange)!=0;
for(ii=0; ii<db->nDb; ii++){
rc = sqlite3BtreeTripAllCursors(db->aDb[ii].pBt,
SQLITE_ABORT_ROLLBACK,
@@ -81946,7 +83017,7 @@ case OP_Savepoint: {
if( isSchemaChange ){
sqlite3ExpirePreparedStatements(db);
sqlite3ResetAllSchemasOfConnection(db);
- db->flags = (db->flags | SQLITE_InternChanges);
+ db->mDbFlags |= DBFLAG_SchemaChange;
}
}
@@ -82226,7 +83297,7 @@ case OP_SetCookie: {
if( pOp->p2==BTREE_SCHEMA_VERSION ){
/* When the schema cookie changes, record the new cookie internally */
pDb->pSchema->schema_cookie = pOp->p3;
- db->flags |= SQLITE_InternChanges;
+ db->mDbFlags |= DBFLAG_SchemaChange;
}else if( pOp->p2==BTREE_FILE_FORMAT ){
/* Record changes in the file format */
pDb->pSchema->file_format = pOp->p3;
@@ -82365,7 +83436,7 @@ case OP_OpenWrite:
assert( (pIn2->flags & MEM_Int)!=0 );
sqlite3VdbeMemIntegerify(pIn2);
p2 = (int)pIn2->u.i;
- /* The p2 value always comes from a prior OP_CreateTable opcode and
+ /* The p2 value always comes from a prior OP_CreateBtree opcode and
** that opcode will always set the p2 value to 2 or more or else fail.
** If there were a failure, the prepared statement would have halted
** before reaching this instruction. */
@@ -82375,7 +83446,7 @@ case OP_OpenWrite:
pKeyInfo = pOp->p4.pKeyInfo;
assert( pKeyInfo->enc==ENC(db) );
assert( pKeyInfo->db==db );
- nField = pKeyInfo->nField+pKeyInfo->nXField;
+ nField = pKeyInfo->nAllField;
}else if( pOp->p4type==P4_INT32 ){
nField = pOp->p4.i;
}
@@ -82586,8 +83657,13 @@ case OP_OpenPseudo: {
pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, CURTYPE_PSEUDO);
if( pCx==0 ) goto no_mem;
pCx->nullRow = 1;
- pCx->uc.pseudoTableReg = pOp->p2;
+ pCx->seekResult = pOp->p2;
pCx->isTable = 1;
+ /* Give this pseudo-cursor a fake BtCursor pointer so that pCx
+ ** can be safely passed to sqlite3VdbeCursorMoveto(). This avoids a test
+ ** for pCx->eCurType==CURTYPE_BTREE inside of sqlite3VdbeCursorMoveto()
+ ** which is a performance optimization */
+ pCx->uc.pCursor = sqlite3BtreeFakeValidCursor();
assert( pOp->p5==0 );
break;
}
@@ -83329,10 +84405,8 @@ case OP_InsertInt: {
int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */
const char *zDb; /* database name - used by the update hook */
Table *pTab; /* Table structure - used by update and pre-update hooks */
- int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
BtreePayload x; /* Payload to be inserted */
- op = 0;
pData = &aMem[pOp->p2];
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
assert( memIsValid(pData) );
@@ -83360,33 +84434,30 @@ case OP_InsertInt: {
zDb = db->aDb[pC->iDb].zDbSName;
pTab = pOp->p4.pTab;
assert( (pOp->p5 & OPFLAG_ISNOOP) || HasRowid(pTab) );
- op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
}else{
- pTab = 0; /* Not needed. Silence a compiler warning. */
+ pTab = 0;
zDb = 0; /* Not needed. Silence a compiler warning. */
}
#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
/* Invoke the pre-update hook, if any */
- if( db->xPreUpdateCallback
- && pOp->p4type==P4_TABLE
- && !(pOp->p5 & OPFLAG_ISUPDATE)
- ){
- sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT, zDb, pTab, x.nKey, pOp->p2);
+ if( pTab ){
+ if( db->xPreUpdateCallback && !(pOp->p5 & OPFLAG_ISUPDATE) ){
+ sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT, zDb, pTab, x.nKey,pOp->p2);
+ }
+ if( db->xUpdateCallback==0 || pTab->aCol==0 ){
+ /* Prevent post-update hook from running in cases when it should not */
+ pTab = 0;
+ }
}
if( pOp->p5 & OPFLAG_ISNOOP ) break;
#endif
if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey;
- if( pData->flags & MEM_Null ){
- x.pData = 0;
- x.nData = 0;
- }else{
- assert( pData->flags & (MEM_Blob|MEM_Str) );
- x.pData = pData->z;
- x.nData = pData->n;
- }
+ assert( pData->flags & (MEM_Blob|MEM_Str) );
+ x.pData = pData->z;
+ x.nData = pData->n;
seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0);
if( pData->flags & MEM_Zero ){
x.nZero = pData->u.nZero;
@@ -83402,8 +84473,12 @@ case OP_InsertInt: {
/* Invoke the update-hook if required. */
if( rc ) goto abort_due_to_error;
- if( db->xUpdateCallback && op ){
- db->xUpdateCallback(db->pUpdateArg, op, zDb, pTab->zName, x.nKey);
+ if( pTab ){
+ assert( db->xUpdateCallback!=0 );
+ assert( pTab->aCol!=0 );
+ db->xUpdateCallback(db->pUpdateArg,
+ (pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT,
+ zDb, pTab->zName, x.nKey);
}
break;
}
@@ -83753,7 +84828,17 @@ case OP_NullRow: {
break;
}
-/* Opcode: Last P1 P2 P3 * *
+/* Opcode: SeekEnd P1 * * * *
+**
+** Position cursor P1 at the end of the btree for the purpose of
+** appending a new entry onto the btree.
+**
+** It is assumed that the cursor is used only for appending and so
+** if the cursor is valid, then the cursor must already be pointing
+** at the end of the btree and so no changes are made to
+** the cursor.
+*/
+/* Opcode: Last P1 P2 * * *
**
** The next use of the Rowid or Column or Prev instruction for P1
** will refer to the last entry in the database table or index.
@@ -83764,14 +84849,8 @@ case OP_NullRow: {
** This opcode leaves the cursor configured to move in reverse order,
** from the end toward the beginning. In other words, the cursor is
** configured to use Prev, not Next.
-**
-** If P3 is -1, then the cursor is positioned at the end of the btree
-** for the purpose of appending a new entry onto the btree. In that
-** case P2 must be 0. It is assumed that the cursor is used only for
-** appending and so if the cursor is valid, then the cursor must already
-** be pointing at the end of the btree and so no changes are made to
-** the cursor.
*/
+case OP_SeekEnd:
case OP_Last: { /* jump */
VdbeCursor *pC;
BtCursor *pCrsr;
@@ -83784,22 +84863,24 @@ case OP_Last: { /* jump */
pCrsr = pC->uc.pCursor;
res = 0;
assert( pCrsr!=0 );
- pC->seekResult = pOp->p3;
#ifdef SQLITE_DEBUG
- pC->seekOp = OP_Last;
+ pC->seekOp = pOp->opcode;
#endif
- if( pOp->p3==0 || !sqlite3BtreeCursorIsValidNN(pCrsr) ){
- rc = sqlite3BtreeLast(pCrsr, &res);
- pC->nullRow = (u8)res;
- pC->deferredMoveto = 0;
- pC->cacheStatus = CACHE_STALE;
- if( rc ) goto abort_due_to_error;
- if( pOp->p2>0 ){
- VdbeBranchTaken(res!=0,2);
- if( res ) goto jump_to_p2;
- }
- }else{
+ if( pOp->opcode==OP_SeekEnd ){
assert( pOp->p2==0 );
+ pC->seekResult = -1;
+ if( sqlite3BtreeCursorIsValidNN(pCrsr) ){
+ break;
+ }
+ }
+ rc = sqlite3BtreeLast(pCrsr, &res);
+ pC->nullRow = (u8)res;
+ pC->deferredMoveto = 0;
+ pC->cacheStatus = CACHE_STALE;
+ if( rc ) goto abort_due_to_error;
+ if( pOp->p2>0 ){
+ VdbeBranchTaken(res!=0,2);
+ if( res ) goto jump_to_p2;
}
break;
}
@@ -84428,50 +85509,28 @@ case OP_ResetSorter: {
break;
}
-/* Opcode: CreateTable P1 P2 * * *
-** Synopsis: r[P2]=root iDb=P1
-**
-** Allocate a new table in the main database file if P1==0 or in the
-** auxiliary database file if P1==1 or in an attached database if
-** P1>1. Write the root page number of the new table into
-** register P2
+/* Opcode: CreateBtree P1 P2 P3 * *
+** Synopsis: r[P2]=root iDb=P1 flags=P3
**
-** The difference between a table and an index is this: A table must
-** have a 4-byte integer key and can have arbitrary data. An index
-** has an arbitrary key but no data.
-**
-** See also: CreateIndex
+** Allocate a new b-tree in the main database file if P1==0 or in the
+** TEMP database file if P1==1 or in an attached database if
+** P1>1. The P3 argument must be 1 (BTREE_INTKEY) for a rowid table
+** it must be 2 (BTREE_BLOBKEY) for a index or WITHOUT ROWID table.
+** The root page number of the new b-tree is stored in register P2.
*/
-/* Opcode: CreateIndex P1 P2 * * *
-** Synopsis: r[P2]=root iDb=P1
-**
-** Allocate a new index in the main database file if P1==0 or in the
-** auxiliary database file if P1==1 or in an attached database if
-** P1>1. Write the root page number of the new table into
-** register P2.
-**
-** See documentation on OP_CreateTable for additional information.
-*/
-case OP_CreateIndex: /* out2 */
-case OP_CreateTable: { /* out2 */
+case OP_CreateBtree: { /* out2 */
int pgno;
- int flags;
Db *pDb;
pOut = out2Prerelease(p, pOp);
pgno = 0;
+ assert( pOp->p3==BTREE_INTKEY || pOp->p3==BTREE_BLOBKEY );
assert( pOp->p1>=0 && pOp->p1<db->nDb );
assert( DbMaskTest(p->btreeMask, pOp->p1) );
assert( p->readOnly==0 );
pDb = &db->aDb[pOp->p1];
assert( pDb->pBt!=0 );
- if( pOp->opcode==OP_CreateTable ){
- /* flags = BTREE_INTKEY; */
- flags = BTREE_INTKEY;
- }else{
- flags = BTREE_BLOBKEY;
- }
- rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, flags);
+ rc = sqlite3BtreeCreateTable(pDb->pBt, &pgno, pOp->p3);
if( rc ) goto abort_due_to_error;
pOut->u.i = pgno;
break;
@@ -84633,7 +85692,7 @@ case OP_IntegrityCk: {
nRoot = pOp->p2;
aRoot = pOp->p4.ai;
assert( nRoot>0 );
- assert( aRoot[nRoot]==0 );
+ assert( aRoot[0]==nRoot );
assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) );
pnErr = &aMem[pOp->p3];
assert( (pnErr->flags & MEM_Int)!=0 );
@@ -84641,7 +85700,7 @@ case OP_IntegrityCk: {
pIn1 = &aMem[pOp->p1];
assert( pOp->p5<db->nDb );
assert( DbMaskTest(p->btreeMask, pOp->p5) );
- z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
+ z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, &aRoot[1], nRoot,
(int)pnErr->u.i+1, &nErr);
sqlite3VdbeMemSetNull(pIn1);
if( nErr==0 ){
@@ -85628,12 +86687,18 @@ case OP_VFilter: { /* jump */
#endif /* SQLITE_OMIT_VIRTUALTABLE */
#ifndef SQLITE_OMIT_VIRTUALTABLE
-/* Opcode: VColumn P1 P2 P3 * *
+/* Opcode: VColumn P1 P2 P3 * P5
** Synopsis: r[P3]=vcolumn(P2)
**
-** Store the value of the P2-th column of
-** the row of the virtual-table that the
-** P1 cursor is pointing to into register P3.
+** Store in register P3 the value of the P2-th column of
+** the current row of the virtual-table of cursor P1.
+**
+** If the VColumn opcode is being used to fetch the value of
+** an unchanging column during an UPDATE operation, then the P5
+** value is 1. Otherwise, P5 is 0. The P5 value is returned
+** by sqlite3_vtab_nochange() routine can can be used
+** by virtual table implementations to return special "no-change"
+** marks which can be more efficient, depending on the virtual table.
*/
case OP_VColumn: {
sqlite3_vtab *pVtab;
@@ -85655,7 +86720,13 @@ case OP_VColumn: {
assert( pModule->xColumn );
memset(&sContext, 0, sizeof(sContext));
sContext.pOut = pDest;
- MemSetTypeFlag(pDest, MEM_Null);
+ if( pOp->p5 ){
+ sqlite3VdbeMemSetNull(pDest);
+ pDest->flags = MEM_Null|MEM_Zero;
+ pDest->u.nZero = 0;
+ }else{
+ MemSetTypeFlag(pDest, MEM_Null);
+ }
rc = pModule->xColumn(pCur->uc.pVCur, &sContext, pOp->p2);
sqlite3VtabImportErrmsg(p, pVtab);
if( sContext.isError ){
@@ -85981,8 +87052,14 @@ case OP_Function: {
break;
}
-
-/* Opcode: Init P1 P2 * P4 *
+/* Opcode: Trace P1 P2 * P4 *
+**
+** Write P4 on the statement trace output if statement tracing is
+** enabled.
+**
+** Operand P1 must be 0x7fffffff and P2 must positive.
+*/
+/* Opcode: Init P1 P2 P3 P4 *
** Synopsis: Start at P2
**
** Programs contain a single instance of this opcode as the very first
@@ -85996,7 +87073,11 @@ case OP_Function: {
**
** Increment the value of P1 so that OP_Once opcodes will jump the
** first time they are evaluated for this run.
+**
+** If P3 is not zero, then it is an address to jump to if an SQLITE_CORRUPT
+** error is encountered.
*/
+case OP_Trace:
case OP_Init: { /* jump */
char *zTrace;
int i;
@@ -86011,7 +87092,9 @@ case OP_Init: { /* jump */
** sqlite3_expanded_sql(P) otherwise.
*/
assert( pOp->p4.z==0 || strncmp(pOp->p4.z, "-" "- ", 3)==0 );
- assert( pOp==p->aOp ); /* Always instruction 0 */
+
+ /* OP_Init is always instruction 0 */
+ assert( pOp==p->aOp || pOp->opcode==OP_Trace );
#ifndef SQLITE_OMIT_TRACE
if( (db->mTrace & (SQLITE_TRACE_STMT|SQLITE_TRACE_LEGACY))!=0
@@ -86054,6 +87137,7 @@ case OP_Init: { /* jump */
#endif /* SQLITE_OMIT_TRACE */
assert( pOp->p2>0 );
if( pOp->p1>=sqlite3GlobalConfig.iOnceResetThreshold ){
+ if( pOp->opcode==OP_Trace ) break;
for(i=1; i<p->nOp; i++){
if( p->aOp[i].opcode==OP_Once ) p->aOp[i].p1 = 0;
}
@@ -86270,11 +87354,12 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
v->aMem[1].u.i = iRow;
/* If the statement has been run before (and is paused at the OP_ResultRow)
- ** then back it up to the point where it does the OP_SeekRowid. This could
+ ** then back it up to the point where it does the OP_NotExists. This could
** have been down with an extra OP_Goto, but simply setting the program
** counter is faster. */
- if( v->pc>3 ){
- v->pc = 3;
+ if( v->pc>4 ){
+ v->pc = 4;
+ assert( v->aOp[v->pc].opcode==OP_NotExists );
rc = sqlite3VdbeExec(v);
}else{
rc = sqlite3_step(p->pStmt);
@@ -86336,8 +87421,8 @@ SQLITE_API int sqlite3_blob_open(
int rc = SQLITE_OK;
char *zErr = 0;
Table *pTab;
- Parse *pParse = 0;
Incrblob *pBlob = 0;
+ Parse sParse;
#ifdef SQLITE_ENABLE_API_ARMOR
if( ppBlob==0 ){
@@ -86355,37 +87440,34 @@ SQLITE_API int sqlite3_blob_open(
sqlite3_mutex_enter(db->mutex);
pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
- if( !pBlob ) goto blob_open_out;
- pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
- if( !pParse ) goto blob_open_out;
-
do {
- memset(pParse, 0, sizeof(Parse));
- pParse->db = db;
+ memset(&sParse, 0, sizeof(Parse));
+ if( !pBlob ) goto blob_open_out;
+ sParse.db = db;
sqlite3DbFree(db, zErr);
zErr = 0;
sqlite3BtreeEnterAll(db);
- pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
+ pTab = sqlite3LocateTable(&sParse, 0, zTable, zDb);
if( pTab && IsVirtual(pTab) ){
pTab = 0;
- sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable);
+ sqlite3ErrorMsg(&sParse, "cannot open virtual table: %s", zTable);
}
if( pTab && !HasRowid(pTab) ){
pTab = 0;
- sqlite3ErrorMsg(pParse, "cannot open table without rowid: %s", zTable);
+ sqlite3ErrorMsg(&sParse, "cannot open table without rowid: %s", zTable);
}
#ifndef SQLITE_OMIT_VIEW
if( pTab && pTab->pSelect ){
pTab = 0;
- sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable);
+ sqlite3ErrorMsg(&sParse, "cannot open view: %s", zTable);
}
#endif
if( !pTab ){
- if( pParse->zErrMsg ){
+ if( sParse.zErrMsg ){
sqlite3DbFree(db, zErr);
- zErr = pParse->zErrMsg;
- pParse->zErrMsg = 0;
+ zErr = sParse.zErrMsg;
+ sParse.zErrMsg = 0;
}
rc = SQLITE_ERROR;
sqlite3BtreeLeaveAll(db);
@@ -86449,7 +87531,7 @@ SQLITE_API int sqlite3_blob_open(
}
}
- pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(pParse);
+ pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(&sParse);
assert( pBlob->pStmt || db->mallocFailed );
if( pBlob->pStmt ){
@@ -86485,7 +87567,8 @@ SQLITE_API int sqlite3_blob_open(
sqlite3VdbeAddOp4Int(v, OP_Transaction, iDb, wrFlag,
pTab->pSchema->schema_cookie,
pTab->pSchema->iGeneration);
- sqlite3VdbeChangeP5(v, 1);
+ sqlite3VdbeChangeP5(v, 1);
+ assert( sqlite3VdbeCurrentAddr(v)==2 || db->mallocFailed );
aOp = sqlite3VdbeAddOpList(v, ArraySize(openBlob), openBlob, iLn);
/* Make sure a mutex is held on the table to be accessed */
@@ -86500,7 +87583,7 @@ SQLITE_API int sqlite3_blob_open(
aOp[0].p1 = iDb;
aOp[0].p2 = pTab->tnum;
aOp[0].p3 = wrFlag;
- sqlite3VdbeChangeP4(v, 1, pTab->zName, P4_TRANSIENT);
+ sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT);
}
if( db->mallocFailed==0 ){
#endif
@@ -86522,10 +87605,10 @@ SQLITE_API int sqlite3_blob_open(
aOp[1].p4.i = pTab->nCol+1;
aOp[3].p2 = pTab->nCol;
- pParse->nVar = 0;
- pParse->nMem = 1;
- pParse->nTab = 1;
- sqlite3VdbeMakeReady(v, pParse);
+ sParse.nVar = 0;
+ sParse.nMem = 1;
+ sParse.nTab = 1;
+ sqlite3VdbeMakeReady(v, &sParse);
}
}
@@ -86547,8 +87630,7 @@ blob_open_out:
}
sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr);
sqlite3DbFree(db, zErr);
- sqlite3ParserReset(pParse);
- sqlite3StackFree(db, pParse);
+ sqlite3ParserReset(&sParse);
rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(db->mutex);
return rc;
@@ -87542,7 +88624,7 @@ static int vdbeSorterCompareText(
}
if( res==0 ){
- if( pTask->pSorter->pKeyInfo->nField>1 ){
+ if( pTask->pSorter->pKeyInfo->nKeyField>1 ){
res = vdbeSorterCompareTail(
pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2
);
@@ -87611,7 +88693,7 @@ static int vdbeSorterCompareInt(
}
if( res==0 ){
- if( pTask->pSorter->pKeyInfo->nField>1 ){
+ if( pTask->pSorter->pKeyInfo->nKeyField>1 ){
res = vdbeSorterCompareTail(
pTask, pbKey2Cached, pKey1, nKey1, pKey2, nKey2
);
@@ -87626,7 +88708,7 @@ static int vdbeSorterCompareInt(
/*
** Initialize the temporary index cursor just opened as a sorter cursor.
**
-** Usually, the sorter module uses the value of (pCsr->pKeyInfo->nField)
+** Usually, the sorter module uses the value of (pCsr->pKeyInfo->nKeyField)
** to determine the number of fields that should be compared from the
** records being sorted. However, if the value passed as argument nField
** is non-zero and the sorter is able to guarantee a stable sort, nField
@@ -87679,7 +88761,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
assert( pCsr->pKeyInfo && pCsr->pBtx==0 );
assert( pCsr->eCurType==CURTYPE_SORTER );
- szKeyInfo = sizeof(KeyInfo) + (pCsr->pKeyInfo->nField-1)*sizeof(CollSeq*);
+ szKeyInfo = sizeof(KeyInfo) + (pCsr->pKeyInfo->nKeyField-1)*sizeof(CollSeq*);
sz = sizeof(VdbeSorter) + nWorker * sizeof(SortSubtask);
pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo);
@@ -87691,8 +88773,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
memcpy(pKeyInfo, pCsr->pKeyInfo, szKeyInfo);
pKeyInfo->db = 0;
if( nField && nWorker==0 ){
- pKeyInfo->nXField += (pKeyInfo->nField - nField);
- pKeyInfo->nField = nField;
+ pKeyInfo->nKeyField = nField;
}
pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
pSorter->nTask = nWorker + 1;
@@ -87720,11 +88801,9 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
mxCache = MIN(mxCache, SQLITE_MAX_PMASZ);
pSorter->mxPmaSize = MAX(pSorter->mnPmaSize, (int)mxCache);
- /* EVIDENCE-OF: R-26747-61719 When the application provides any amount of
- ** scratch memory using SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary
- ** large heap allocations.
- */
- if( sqlite3GlobalConfig.pScratch==0 ){
+ /* Avoid large memory allocations if the application has requested
+ ** SQLITE_CONFIG_SMALL_MALLOC. */
+ if( sqlite3GlobalConfig.bSmallMalloc==0 ){
assert( pSorter->iMemory==0 );
pSorter->nMemory = pgsz;
pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
@@ -87732,7 +88811,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(
}
}
- if( (pKeyInfo->nField+pKeyInfo->nXField)<13
+ if( pKeyInfo->nAllField<13
&& (pKeyInfo->aColl[0]==0 || pKeyInfo->aColl[0]==db->pDfltColl)
){
pSorter->typeMask = SORTER_TYPE_INTEGER | SORTER_TYPE_TEXT;
@@ -88047,7 +89126,7 @@ static int vdbeSortAllocUnpacked(SortSubtask *pTask){
if( pTask->pUnpacked==0 ){
pTask->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pTask->pSorter->pKeyInfo);
if( pTask->pUnpacked==0 ) return SQLITE_NOMEM_BKPT;
- pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nField;
+ pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nKeyField;
pTask->pUnpacked->errCode = 0;
}
return SQLITE_OK;
@@ -89571,7 +90650,8 @@ static int memjrnlRead(
int iChunkOffset;
FileChunk *pChunk;
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
if( (iAmt+iOfst)>p->endpoint.iOffset ){
return SQLITE_IOERR_SHORT_READ;
}
@@ -89690,7 +90770,8 @@ static int memjrnlWrite(
** atomic-write optimization. In this case the first 28 bytes of the
** journal file may be written as part of committing the transaction. */
assert( iOfst==p->endpoint.iOffset || iOfst==0 );
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
if( iOfst==0 && p->pFirst ){
assert( p->nChunkSize>iAmt );
memcpy((u8*)p->pFirst->zChunk, zBuf, iAmt);
@@ -89859,17 +90940,31 @@ SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
sqlite3JournalOpen(0, 0, pJfd, 0, -1);
}
-#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+#if defined(SQLITE_ENABLE_ATOMIC_WRITE) \
+ || defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE)
/*
** If the argument p points to a MemJournal structure that is not an
** in-memory-only journal file (i.e. is one that was opened with a +ve
-** nSpill parameter), and the underlying file has not yet been created,
-** create it now.
+** nSpill parameter or as SQLITE_OPEN_MAIN_JOURNAL), and the underlying
+** file has not yet been created, create it now.
*/
-SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
+SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *pJfd){
int rc = SQLITE_OK;
- if( p->pMethods==&MemJournalMethods && ((MemJournal*)p)->nSpill>0 ){
- rc = memjrnlCreateFile((MemJournal*)p);
+ MemJournal *p = (MemJournal*)pJfd;
+ if( p->pMethod==&MemJournalMethods && (
+#ifdef SQLITE_ENABLE_ATOMIC_WRITE
+ p->nSpill>0
+#else
+ /* While this appears to not be possible without ATOMIC_WRITE, the
+ ** paths are complex, so it seems prudent to leave the test in as
+ ** a NEVER(), in case our analysis is subtly flawed. */
+ NEVER(p->nSpill>0)
+#endif
+#ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE
+ || (p->flags & SQLITE_OPEN_MAIN_JOURNAL)
+#endif
+ )){
+ rc = memjrnlCreateFile(p);
}
return rc;
}
@@ -89936,18 +91031,22 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){
int rc;
testcase( ExprHasProperty(pExpr, EP_TokenOnly) );
testcase( ExprHasProperty(pExpr, EP_Reduced) );
- rc = pWalker->xExprCallback(pWalker, pExpr);
- if( rc ) return rc & WRC_Abort;
- if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){
- if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
- assert( pExpr->x.pList==0 || pExpr->pRight==0 );
- if( pExpr->pRight ){
- if( walkExpr(pWalker, pExpr->pRight) ) return WRC_Abort;
- }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
- if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
- }else if( pExpr->x.pList ){
- if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
+ while(1){
+ rc = pWalker->xExprCallback(pWalker, pExpr);
+ if( rc ) return rc & WRC_Abort;
+ if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){
+ if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
+ assert( pExpr->x.pList==0 || pExpr->pRight==0 );
+ if( pExpr->pRight ){
+ pExpr = pExpr->pRight;
+ continue;
+ }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
+ if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
+ }else if( pExpr->x.pList ){
+ if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
+ }
}
+ break;
}
return WRC_Continue;
}
@@ -89983,7 +91082,6 @@ SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
- if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort;
return WRC_Continue;
}
@@ -90000,16 +91098,15 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
struct SrcList_item *pItem;
pSrc = p->pSrc;
- if( ALWAYS(pSrc) ){
- for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
- if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){
- return WRC_Abort;
- }
- if( pItem->fg.isTabFunc
- && sqlite3WalkExprList(pWalker, pItem->u1.pFuncArg)
- ){
- return WRC_Abort;
- }
+ assert( pSrc!=0 );
+ for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
+ if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){
+ return WRC_Abort;
+ }
+ if( pItem->fg.isTabFunc
+ && sqlite3WalkExprList(pWalker, pItem->u1.pFuncArg)
+ ){
+ return WRC_Abort;
}
}
return WRC_Continue;
@@ -90652,7 +91749,8 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
SrcList *pSrcList = pNC->pSrcList;
struct SrcList_item *pItem;
assert( pSrcList && pSrcList->nSrc==1 );
- pItem = pSrcList->a;
+ pItem = pSrcList->a;
+ assert( HasRowid(pItem->pTab) && pItem->pTab->pSelect==0 );
pExpr->op = TK_COLUMN;
pExpr->pTab = pItem->pTab;
pExpr->iTable = pItem->iCursor;
@@ -91015,12 +92113,10 @@ static int resolveCompoundOrderBy(
pOrderBy = pSelect->pOrderBy;
if( pOrderBy==0 ) return 0;
db = pParse->db;
-#if SQLITE_MAX_COLUMN
if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
return 1;
}
-#endif
for(i=0; i<pOrderBy->nExpr; i++){
pOrderBy->a[i].done = 0;
}
@@ -91112,12 +92208,10 @@ SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
struct ExprList_item *pItem;
if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
-#if SQLITE_MAX_COLUMN
if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
return 1;
}
-#endif
pEList = pSelect->pEList;
assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */
for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
@@ -91255,8 +92349,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
*/
memset(&sNC, 0, sizeof(sNC));
sNC.pParse = pParse;
- if( sqlite3ResolveExprNames(&sNC, p->pLimit) ||
- sqlite3ResolveExprNames(&sNC, p->pOffset) ){
+ if( sqlite3ResolveExprNames(&sNC, p->pLimit) ){
return WRC_Abort;
}
@@ -91718,6 +92811,11 @@ SQLITE_PRIVATE Expr *sqlite3ExprSkipCollate(Expr *pExpr){
** Return the collation sequence for the expression pExpr. If
** there is no defined collating sequence, return NULL.
**
+** See also: sqlite3ExprNNCollSeq()
+**
+** The sqlite3ExprNNCollSeq() works the same exact that it returns the
+** default collation if pExpr has no defined collation.
+**
** The collating sequence might be determined by a COLLATE operator
** or by the presence of a column with a defined collating sequence.
** COLLATE operators take first precedence. Left operands take
@@ -91783,6 +92881,32 @@ SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
}
/*
+** Return the collation sequence for the expression pExpr. If
+** there is no defined collating sequence, return a pointer to the
+** defautl collation sequence.
+**
+** See also: sqlite3ExprCollSeq()
+**
+** The sqlite3ExprCollSeq() routine works the same except that it
+** returns NULL if there is no defined collation.
+*/
+SQLITE_PRIVATE CollSeq *sqlite3ExprNNCollSeq(Parse *pParse, Expr *pExpr){
+ CollSeq *p = sqlite3ExprCollSeq(pParse, pExpr);
+ if( p==0 ) p = pParse->db->pDfltColl;
+ assert( p!=0 );
+ return p;
+}
+
+/*
+** Return TRUE if the two expressions have equivalent collating sequences.
+*/
+SQLITE_PRIVATE int sqlite3ExprCollSeqMatch(Parse *pParse, Expr *pE1, Expr *pE2){
+ CollSeq *pColl1 = sqlite3ExprNNCollSeq(pParse, pE1);
+ CollSeq *pColl2 = sqlite3ExprNNCollSeq(pParse, pE2);
+ return sqlite3StrICmp(pColl1->zName, pColl2->zName)==0;
+}
+
+/*
** pExpr is an operand of a comparison operator. aff2 is the
** type affinity of the other operand. This routine returns the
** type affinity that should be used for the comparison operator.
@@ -92221,16 +93345,15 @@ static void heightOfExprList(ExprList *p, int *pnHeight){
}
}
}
-static void heightOfSelect(Select *p, int *pnHeight){
- if( p ){
+static void heightOfSelect(Select *pSelect, int *pnHeight){
+ Select *p;
+ for(p=pSelect; p; p=p->pPrior){
heightOfExpr(p->pWhere, pnHeight);
heightOfExpr(p->pHaving, pnHeight);
heightOfExpr(p->pLimit, pnHeight);
- heightOfExpr(p->pOffset, pnHeight);
heightOfExprList(p->pEList, pnHeight);
heightOfExprList(p->pGroupBy, pnHeight);
heightOfExprList(p->pOrderBy, pnHeight);
- heightOfSelect(p->pPrior, pnHeight);
}
}
@@ -92369,7 +93492,7 @@ SQLITE_PRIVATE Expr *sqlite3Expr(
){
Token x;
x.z = zToken;
- x.n = zToken ? sqlite3Strlen30(zToken) : 0;
+ x.n = sqlite3Strlen30(zToken);
return sqlite3ExprAlloc(db, op, &x, 0);
}
@@ -92515,6 +93638,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *
return 0;
}
pNew->x.pList = pList;
+ ExprSetProperty(pNew, EP_HasFunc);
assert( !ExprHasProperty(pNew, EP_xIsSelect) );
sqlite3ExprSetHeightAndFlags(pParse, pNew);
return pNew;
@@ -92896,10 +94020,9 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags)
Expr *pPriorSelectCol = 0;
assert( db!=0 );
if( p==0 ) return 0;
- pNew = sqlite3DbMallocRawNN(db,
- sizeof(*pNew)+sizeof(pNew->a[0])*(p->nExpr-1) );
+ pNew = sqlite3DbMallocRawNN(db, sqlite3DbMallocSize(db, p));
if( pNew==0 ) return 0;
- pNew->nAlloc = pNew->nExpr = p->nExpr;
+ pNew->nExpr = p->nExpr;
pItem = pNew->a;
pOldItem = p->a;
for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
@@ -93025,7 +94148,6 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *pDup, int flags){
pNew->pNext = pNext;
pNew->pPrior = 0;
pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags);
- pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags);
pNew->iLimit = 0;
pNew->iOffset = 0;
pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
@@ -93053,6 +94175,13 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
** Add a new element to the end of an expression list. If pList is
** initially NULL, then create a new expression list.
**
+** The pList argument must be either NULL or a pointer to an ExprList
+** obtained from a prior call to sqlite3ExprListAppend(). This routine
+** may not be used with an ExprList obtained from sqlite3ExprListDup().
+** Reason: This routine assumes that the number of slots in pList->a[]
+** is a power of two. That is true for sqlite3ExprListAppend() returns
+** but is not necessarily true from the return value of sqlite3ExprListDup().
+**
** If a memory allocation error occurs, the entire list is freed and
** NULL is returned. If non-NULL is returned, then it is guaranteed
** that the new entry was successfully appended.
@@ -93071,16 +94200,14 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
goto no_mem;
}
pList->nExpr = 0;
- pList->nAlloc = 1;
- }else if( pList->nExpr==pList->nAlloc ){
+ }else if( (pList->nExpr & (pList->nExpr-1))==0 ){
ExprList *pNew;
pNew = sqlite3DbRealloc(db, pList,
- sizeof(*pList)+(2*pList->nAlloc - 1)*sizeof(pList->a[0]));
+ sizeof(*pList)+(2*pList->nExpr - 1)*sizeof(pList->a[0]));
if( pNew==0 ){
goto no_mem;
}
pList = pNew;
- pList->nAlloc *= 2;
}
pItem = &pList->a[pList->nExpr++];
assert( offsetof(struct ExprList_item,zName)==sizeof(pItem->pExpr) );
@@ -93214,17 +94341,16 @@ SQLITE_PRIVATE void sqlite3ExprListSetName(
SQLITE_PRIVATE void sqlite3ExprListSetSpan(
Parse *pParse, /* Parsing context */
ExprList *pList, /* List to which to add the span. */
- ExprSpan *pSpan /* The span to be added */
+ const char *zStart, /* Start of the span */
+ const char *zEnd /* End of the span */
){
sqlite3 *db = pParse->db;
assert( pList!=0 || db->mallocFailed!=0 );
if( pList ){
struct ExprList_item *pItem = &pList->a[pList->nExpr-1];
assert( pList->nExpr>0 );
- assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr );
sqlite3DbFree(db, pItem->zSpan);
- pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
- (int)(pSpan->zEnd - pSpan->zStart));
+ pItem->zSpan = sqlite3DbSpanDup(db, zStart, zEnd);
}
}
@@ -93271,17 +94397,29 @@ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList *pList){
int i;
u32 m = 0;
- if( pList ){
- for(i=0; i<pList->nExpr; i++){
- Expr *pExpr = pList->a[i].pExpr;
- assert( pExpr!=0 );
- m |= pExpr->flags;
- }
+ assert( pList!=0 );
+ for(i=0; i<pList->nExpr; i++){
+ Expr *pExpr = pList->a[i].pExpr;
+ assert( pExpr!=0 );
+ m |= pExpr->flags;
}
return m;
}
/*
+** This is a SELECT-node callback for the expression walker that
+** always "fails". By "fail" in this case, we mean set
+** pWalker->eCode to zero and abort.
+**
+** This callback is used by multiple expression walkers.
+*/
+SQLITE_PRIVATE int sqlite3SelectWalkFail(Walker *pWalker, Select *NotUsed){
+ UNUSED_PARAMETER(NotUsed);
+ pWalker->eCode = 0;
+ return WRC_Abort;
+}
+
+/*
** These routines are Walker callbacks used to check expressions to
** see if they are "constant" for some definition of constant. The
** Walker.eCode value determines the type of "constant" we are looking
@@ -93357,21 +94495,16 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
}
/* Fall through */
default:
- testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
- testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
+ testcase( pExpr->op==TK_SELECT ); /* sqlite3SelectWalkFail will disallow */
+ testcase( pExpr->op==TK_EXISTS ); /* sqlite3SelectWalkFail will disallow */
return WRC_Continue;
}
}
-static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
- UNUSED_PARAMETER(NotUsed);
- pWalker->eCode = 0;
- return WRC_Abort;
-}
static int exprIsConst(Expr *p, int initFlag, int iCur){
Walker w;
w.eCode = initFlag;
w.xExprCallback = exprNodeIsConstant;
- w.xSelectCallback = selectNodeIsConstant;
+ w.xSelectCallback = sqlite3SelectWalkFail;
#ifdef SQLITE_DEBUG
w.xSelectCallback2 = sqlite3SelectWalkAssert2;
#endif
@@ -93425,8 +94558,8 @@ static int exprNodeIsConstantOrGroupBy(Walker *pWalker, Expr *pExpr){
for(i=0; i<pGroupBy->nExpr; i++){
Expr *p = pGroupBy->a[i].pExpr;
if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){
- CollSeq *pColl = sqlite3ExprCollSeq(pWalker->pParse, p);
- if( pColl==0 || sqlite3_stricmp("BINARY", pColl->zName)==0 ){
+ CollSeq *pColl = sqlite3ExprNNCollSeq(pWalker->pParse, p);
+ if( sqlite3_stricmp("BINARY", pColl->zName)==0 ){
return WRC_Prune;
}
}
@@ -93494,7 +94627,7 @@ SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr *p){
Walker w;
w.eCode = 1;
w.xExprCallback = sqlite3ExprWalkNoop;
- w.xSelectCallback = selectNodeIsConstant;
+ w.xSelectCallback = sqlite3SelectWalkFail;
#ifdef SQLITE_DEBUG
w.xSelectCallback2 = sqlite3SelectWalkAssert2;
#endif
@@ -93567,8 +94700,8 @@ SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
case TK_BLOB:
return 0;
case TK_COLUMN:
- assert( p->pTab!=0 );
return ExprHasProperty(p, EP_CanBeNull) ||
+ p->pTab==0 || /* Reference to column of index on expression */
(p->iColumn>=0 && p->pTab->aCol[p->iColumn].notNull==0);
default:
return 1;
@@ -93650,7 +94783,6 @@ static Select *isCandidateForInOpt(Expr *pX){
}
assert( p->pGroupBy==0 ); /* Has no GROUP BY clause */
if( p->pLimit ) return 0; /* Has no LIMIT clause */
- assert( p->pOffset==0 ); /* No LIMIT means no OFFSET */
if( p->pWhere ) return 0; /* Has no WHERE clause */
pSrc = p->pSrc;
assert( pSrc!=0 );
@@ -93740,16 +94872,15 @@ static int sqlite3InRhsIsConstant(Expr *pIn){
** pX->iTable made to point to the ephemeral table instead of an
** existing table.
**
-** The inFlags parameter must contain exactly one of the bits
-** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP. If inFlags contains
-** IN_INDEX_MEMBERSHIP, then the generated table will be used for a
-** fast membership test. When the IN_INDEX_LOOP bit is set, the
-** IN index will be used to loop over all values of the RHS of the
-** IN operator.
+** The inFlags parameter must contain, at a minimum, one of the bits
+** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP but not both. If inFlags contains
+** IN_INDEX_MEMBERSHIP, then the generated table will be used for a fast
+** membership test. When the IN_INDEX_LOOP bit is set, the IN index will
+** be used to loop over all values of the RHS of the IN operator.
**
** When IN_INDEX_LOOP is used (and the b-tree will be used to iterate
** through the set members) then the b-tree must not contain duplicates.
-** An epheremal table must be used unless the selected columns are guaranteed
+** An epheremal table will be created unless the selected columns are guaranteed
** to be unique - either because it is an INTEGER PRIMARY KEY or due to
** a UNIQUE constraint or index.
**
@@ -94230,7 +95361,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
/* Loop through each expression in <exprlist>. */
r1 = sqlite3GetTempReg(pParse);
r2 = sqlite3GetTempReg(pParse);
- if( isRowid ) sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
+ if( isRowid ) sqlite3VdbeAddOp4(v, OP_Blob, 0, r2, 0, "", P4_STATIC);
for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
Expr *pE2 = pItem->pExpr;
int iValToIns;
@@ -94290,6 +95421,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
Select *pSel; /* SELECT statement to encode */
SelectDest dest; /* How to deal with SELECT result */
int nReg; /* Registers to allocate */
+ Expr *pLimit; /* New limit expression */
testcase( pExpr->op==TK_EXISTS );
testcase( pExpr->op==TK_SELECT );
@@ -94311,11 +95443,14 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iSDParm);
VdbeComment((v, "Init EXISTS result"));
}
- sqlite3ExprDelete(pParse->db, pSel->pLimit);
- pSel->pLimit = sqlite3ExprAlloc(pParse->db, TK_INTEGER,
- &sqlite3IntTokens[1], 0);
+ pLimit = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[1], 0);
+ if( pSel->pLimit ){
+ sqlite3ExprDelete(pParse->db, pSel->pLimit->pLeft);
+ pSel->pLimit->pLeft = pLimit;
+ }else{
+ pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0);
+ }
pSel->iLimit = 0;
- pSel->selFlags &= ~SF_MultiValue;
if( sqlite3Select(pParse, pSel, &dest) ){
return 0;
}
@@ -94658,7 +95793,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
const char *z = pExpr->u.zToken;
assert( z!=0 );
c = sqlite3DecOrHexToI64(z, &value);
- if( c==1 || (c==2 && !negFlag) || (negFlag && value==SMALLEST_INT64)){
+ if( (c==3 && !negFlag) || (c==2) || (negFlag && value==SMALLEST_INT64)){
#ifdef SQLITE_OMIT_FLOATING_POINT
sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
#else
@@ -94672,7 +95807,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
}
#endif
}else{
- if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
+ if( negFlag ){ value = c==3 ? SMALLEST_INT64 : -value; }
sqlite3VdbeAddOp4Dup8(v, OP_Int64, 0, iMem, 0, (u8*)&value, P4_INT64);
}
}
@@ -95421,9 +96556,21 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
if( !pColl ) pColl = db->pDfltColl;
sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
}
- sqlite3VdbeAddOp4(v, pParse->iSelfTab ? OP_PureFunc0 : OP_Function0,
- constMask, r1, target, (char*)pDef, P4_FUNCDEF);
- sqlite3VdbeChangeP5(v, (u8)nFarg);
+#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
+ if( pDef->funcFlags & SQLITE_FUNC_OFFSET ){
+ Expr *pArg = pFarg->a[0].pExpr;
+ if( pArg->op==TK_COLUMN ){
+ sqlite3VdbeAddOp3(v, OP_Offset, pArg->iTable, pArg->iColumn, target);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_Null, 0, target);
+ }
+ }else
+#endif
+ {
+ sqlite3VdbeAddOp4(v, pParse->iSelfTab ? OP_PureFunc0 : OP_Function0,
+ constMask, r1, target, (char*)pDef, P4_FUNCDEF);
+ sqlite3VdbeChangeP5(v, (u8)nFarg);
+ }
if( nFarg && constMask==0 ){
sqlite3ReleaseTempRange(pParse, r1, nFarg);
}
@@ -95827,7 +96974,9 @@ SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int targ
** Generate code that pushes the value of every element of the given
** expression list into a sequence of registers beginning at target.
**
-** Return the number of elements evaluated.
+** Return the number of elements evaluated. The number returned will
+** usually be pList->nExpr but might be reduced if SQLITE_ECEL_OMITREF
+** is defined.
**
** The SQLITE_ECEL_DUP flag prevents the arguments from being
** filled using OP_SCopy. OP_Copy must be used instead.
@@ -95838,6 +96987,8 @@ SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int targ
** The SQLITE_ECEL_REF flag means that expressions in the list with
** ExprList.a[].u.x.iOrderByCol>0 have already been evaluated and stored
** in registers at srcReg, and so the value can be copied from there.
+** If SQLITE_ECEL_OMITREF is also set, then the values with u.x.iOrderByCol>0
+** are simply omitted rather than being copied from srcReg.
*/
SQLITE_PRIVATE int sqlite3ExprCodeExprList(
Parse *pParse, /* Parsing context */
@@ -97271,9 +98422,9 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
char *zWhere = 0; /* Where clause to locate temp triggers */
#endif
VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */
- int savedDbFlags; /* Saved value of db->flags */
+ u32 savedDbFlags; /* Saved value of db->mDbFlags */
- savedDbFlags = db->flags;
+ savedDbFlags = db->mDbFlags;
if( NEVER(db->mallocFailed) ) goto exit_rename_table;
assert( pSrc->nSrc==1 );
assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
@@ -97282,7 +98433,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
if( !pTab ) goto exit_rename_table;
iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
zDb = db->aDb[iDb].zDbSName;
- db->flags |= SQLITE_PreferBuiltin;
+ db->mDbFlags |= DBFLAG_PreferBuiltin;
/* Get a NULL terminated version of the new table name. */
zName = sqlite3NameFromToken(db, pName);
@@ -97447,7 +98598,7 @@ SQLITE_PRIVATE void sqlite3AlterRenameTable(
exit_rename_table:
sqlite3SrcListDelete(db, pSrc);
sqlite3DbFree(db, zName);
- db->flags = savedDbFlags;
+ db->mDbFlags = savedDbFlags;
}
/*
@@ -97548,11 +98699,11 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n);
if( zCol ){
char *zEnd = &zCol[pColDef->n-1];
- int savedDbFlags = db->flags;
+ u32 savedDbFlags = db->mDbFlags;
while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){
*zEnd-- = '\0';
}
- db->flags |= SQLITE_PreferBuiltin;
+ db->mDbFlags |= DBFLAG_PreferBuiltin;
sqlite3NestedParse(pParse,
"UPDATE \"%w\".%s SET "
"sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
@@ -97561,7 +98712,7 @@ SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
zTab
);
sqlite3DbFree(db, zCol);
- db->flags = savedDbFlags;
+ db->mDbFlags = savedDbFlags;
}
/* Make sure the schema version is at least 3. But do not upgrade
@@ -97913,6 +99064,10 @@ static void openStatTable(
"DELETE FROM %Q.%s WHERE %s=%Q",
pDb->zDbSName, zTab, zWhereType, zWhere
);
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+ }else if( db->xPreUpdateCallback ){
+ sqlite3NestedParse(pParse, "DELETE FROM %Q.%s", pDb->zDbSName, zTab);
+#endif
}else{
/* The sqlite_stat[134] table already exists. Delete all rows. */
sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
@@ -98677,6 +99832,9 @@ static void analyzeOneTable(
int regIdxname = iMem++; /* Register containing index name */
int regStat1 = iMem++; /* Value for the stat column of sqlite_stat1 */
int regPrev = iMem; /* MUST BE LAST (see below) */
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+ Table *pStat1 = 0;
+#endif
pParse->nMem = MAX(pParse->nMem, iMem);
v = sqlite3GetVdbe(pParse);
@@ -98702,6 +99860,18 @@ static void analyzeOneTable(
}
#endif
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+ if( db->xPreUpdateCallback ){
+ pStat1 = (Table*)sqlite3DbMallocZero(db, sizeof(Table) + 13);
+ if( pStat1==0 ) return;
+ pStat1->zName = (char*)&pStat1[1];
+ memcpy(pStat1->zName, "sqlite_stat1", 13);
+ pStat1->nCol = 3;
+ pStat1->iPKey = -1;
+ sqlite3VdbeAddOp4(pParse->pVdbe, OP_Noop, 0, 0, 0,(char*)pStat1,P4_DYNBLOB);
+ }
+#endif
+
/* Establish a read-lock on the table at the shared-cache level.
** Open a read-only cursor on the table. Also allocate a cursor number
** to use for scanning indexes (iIdxCur). No index cursor is opened at
@@ -98903,6 +100073,9 @@ static void analyzeOneTable(
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid);
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+ sqlite3VdbeChangeP4(v, -1, (char*)pStat1, P4_TABLE);
+#endif
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
/* Add the entries to the stat3 or stat4 table. */
@@ -98966,6 +100139,9 @@ static void analyzeOneTable(
sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid);
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
+#ifdef SQLITE_ENABLE_PREUPDATE_HOOK
+ sqlite3VdbeChangeP4(v, -1, (char*)pStat1, P4_TABLE);
+#endif
sqlite3VdbeJumpHere(v, jZeroRows);
}
}
@@ -99686,10 +100862,6 @@ static void attachFunc(
);
goto attach_error;
}
- if( !db->autoCommit ){
- zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction");
- goto attach_error;
- }
for(i=0; i<db->nDb; i++){
char *z = db->aDb[i].zDbSName;
assert( z && zName );
@@ -99881,11 +101053,6 @@ static void detachFunc(
sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName);
goto detach_error;
}
- if( !db->autoCommit ){
- sqlite3_snprintf(sizeof(zErr), zErr,
- "cannot DETACH database within transaction");
- goto detach_error;
- }
if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){
sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName);
goto detach_error;
@@ -100106,9 +101273,6 @@ SQLITE_PRIVATE int sqlite3FixSelect(
if( sqlite3FixExpr(pFix, pSelect->pLimit) ){
return 1;
}
- if( sqlite3FixExpr(pFix, pSelect->pOffset) ){
- return 1;
- }
pSelect = pSelect->pPrior;
}
return 0;
@@ -100298,11 +101462,9 @@ SQLITE_PRIVATE int sqlite3AuthReadCol(
#endif
);
if( rc==SQLITE_DENY ){
- if( db->nDb>2 || iDb!=0 ){
- sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
- }else{
- sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol);
- }
+ char *z = sqlite3_mprintf("%s.%s", zTab, zCol);
+ if( db->nDb>2 || iDb!=0 ) z = sqlite3_mprintf("%s.%z", zDb, z);
+ sqlite3ErrorMsg(pParse, "access to %z is prohibited", z);
pParse->rc = SQLITE_AUTH;
}else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){
sqliteAuthBadReturnCode(pParse);
@@ -100935,7 +102097,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char
}
freeIndex(db, pIndex);
}
- db->flags |= SQLITE_InternChanges;
+ db->mDbFlags |= DBFLAG_SchemaChange;
}
/*
@@ -100970,28 +102132,26 @@ SQLITE_PRIVATE void sqlite3CollapseDatabaseArray(sqlite3 *db){
/*
** Reset the schema for the database at index iDb. Also reset the
-** TEMP schema.
+** TEMP schema. The reset is deferred if db->nSchemaLock is not zero.
+** Deferred resets may be run by calling with iDb<0.
*/
SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
- Db *pDb;
+ int i;
assert( iDb<db->nDb );
- /* Case 1: Reset the single schema identified by iDb */
- pDb = &db->aDb[iDb];
- assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
- assert( pDb->pSchema!=0 );
- sqlite3SchemaClear(pDb->pSchema);
+ if( iDb>=0 ){
+ assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
+ DbSetProperty(db, iDb, DB_ResetWanted);
+ DbSetProperty(db, 1, DB_ResetWanted);
+ }
- /* If any database other than TEMP is reset, then also reset TEMP
- ** since TEMP might be holding triggers that reference tables in the
- ** other database.
- */
- if( iDb!=1 ){
- pDb = &db->aDb[1];
- assert( pDb->pSchema!=0 );
- sqlite3SchemaClear(pDb->pSchema);
+ if( db->nSchemaLock==0 ){
+ for(i=0; i<db->nDb; i++){
+ if( DbHasProperty(db, i, DB_ResetWanted) ){
+ sqlite3SchemaClear(db->aDb[i].pSchema);
+ }
+ }
}
- return;
}
/*
@@ -101001,13 +102161,14 @@ SQLITE_PRIVATE void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
int i;
sqlite3BtreeEnterAll(db);
+ assert( db->nSchemaLock==0 );
for(i=0; i<db->nDb; i++){
Db *pDb = &db->aDb[i];
if( pDb->pSchema ){
sqlite3SchemaClear(pDb->pSchema);
}
}
- db->flags &= ~SQLITE_InternChanges;
+ db->mDbFlags &= ~DBFLAG_SchemaChange;
sqlite3VtabUnlockList(db);
sqlite3BtreeLeaveAll(db);
sqlite3CollapseDatabaseArray(db);
@@ -101017,7 +102178,7 @@ SQLITE_PRIVATE void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
** This routine is called when a commit occurs.
*/
SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
- db->flags &= ~SQLITE_InternChanges;
+ db->mDbFlags &= ~DBFLAG_SchemaChange;
}
/*
@@ -101055,13 +102216,16 @@ SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
*/
static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
Index *pIndex, *pNext;
- TESTONLY( int nLookaside; ) /* Used to verify lookaside not used for schema */
+#ifdef SQLITE_DEBUG
/* Record the number of outstanding lookaside allocations in schema Tables
** prior to doing any free() operations. Since schema Tables do not use
** lookaside, this number should not change. */
- TESTONLY( nLookaside = (db && (pTable->tabFlags & TF_Ephemeral)==0) ?
- db->lookaside.nOut : 0 );
+ int nLookaside = 0;
+ if( db && (pTable->tabFlags & TF_Ephemeral)==0 ){
+ nLookaside = sqlite3LookasideUsed(db, 0);
+ }
+#endif
/* Delete all indices associated with this table. */
for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
@@ -101095,7 +102259,7 @@ static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
sqlite3DbFree(db, pTable);
/* Verify that no lookaside memory was used by schema tables */
- assert( nLookaside==0 || nLookaside==db->lookaside.nOut );
+ assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) );
}
SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
/* Do not delete the table until the reference count reaches zero. */
@@ -101121,7 +102285,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char
pDb = &db->aDb[iDb];
p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, 0);
sqlite3DeleteTable(db, p);
- db->flags |= SQLITE_InternChanges;
+ db->mDbFlags |= DBFLAG_SchemaChange;
}
/*
@@ -101234,7 +102398,8 @@ SQLITE_PRIVATE int sqlite3TwoPartName(
return -1;
}
}else{
- assert( db->init.iDb==0 || db->init.busy || (db->flags & SQLITE_Vacuum)!=0);
+ assert( db->init.iDb==0 || db->init.busy
+ || (db->mDbFlags & DBFLAG_Vacuum)!=0);
iDb = db->init.iDb;
*pUnqual = pName1;
}
@@ -101466,7 +102631,8 @@ SQLITE_PRIVATE void sqlite3StartTable(
}else
#endif
{
- pParse->addrCrTab = sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
+ pParse->addrCrTab =
+ sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, reg2, BTREE_INTKEY);
}
sqlite3OpenMasterTable(pParse, iDb);
sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
@@ -101515,12 +102681,10 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
Column *pCol;
sqlite3 *db = pParse->db;
if( (p = pParse->pNewTable)==0 ) return;
-#if SQLITE_MAX_COLUMN
if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
return;
}
-#endif
z = sqlite3DbMallocRaw(db, pName->n + pType->n + 2);
if( z==0 ) return;
memcpy(z, pName->z, pName->n);
@@ -101675,34 +102839,37 @@ SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn, u8 *pszEst){
** This routine is called by the parser while in the middle of
** parsing a CREATE TABLE statement.
*/
-SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
+SQLITE_PRIVATE void sqlite3AddDefaultValue(
+ Parse *pParse, /* Parsing context */
+ Expr *pExpr, /* The parsed expression of the default value */
+ const char *zStart, /* Start of the default value text */
+ const char *zEnd /* First character past end of defaut value text */
+){
Table *p;
Column *pCol;
sqlite3 *db = pParse->db;
p = pParse->pNewTable;
if( p!=0 ){
pCol = &(p->aCol[p->nCol-1]);
- if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr, db->init.busy) ){
+ if( !sqlite3ExprIsConstantOrFunction(pExpr, db->init.busy) ){
sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
pCol->zName);
}else{
/* A copy of pExpr is used instead of the original, as pExpr contains
- ** tokens that point to volatile memory. The 'span' of the expression
- ** is required by pragma table_info.
+ ** tokens that point to volatile memory.
*/
Expr x;
sqlite3ExprDelete(db, pCol->pDflt);
memset(&x, 0, sizeof(x));
x.op = TK_SPAN;
- x.u.zToken = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
- (int)(pSpan->zEnd - pSpan->zStart));
- x.pLeft = pSpan->pExpr;
+ x.u.zToken = sqlite3DbSpanDup(db, zStart, zEnd);
+ x.pLeft = pExpr;
x.flags = EP_Skip;
pCol->pDflt = sqlite3ExprDup(db, &x, EXPRDUP_REDUCE);
sqlite3DbFree(db, x.u.zToken);
}
}
- sqlite3ExprDelete(db, pSpan->pExpr);
+ sqlite3ExprDelete(db, pExpr);
}
/*
@@ -102126,9 +103293,8 @@ static int hasColumn(const i16 *aiCol, int nCol, int x){
** Changes include:
**
** (1) Set all columns of the PRIMARY KEY schema object to be NOT NULL.
-** (2) Convert the OP_CreateTable into an OP_CreateIndex. There is
-** no rowid btree for a WITHOUT ROWID. Instead, the canonical
-** data storage is a covering index btree.
+** (2) Convert P3 parameter of the OP_CreateBtree from BTREE_INTKEY
+** into BTREE_BLOBKEY.
** (3) Bypass the creation of the sqlite_master table entry
** for the PRIMARY KEY as the primary key index is now
** identified by the sqlite_master table entry of the table itself.
@@ -102136,7 +103302,7 @@ static int hasColumn(const i16 *aiCol, int nCol, int x){
** schema to the rootpage from the main table.
** (5) Add all table columns to the PRIMARY KEY Index object
** so that the PRIMARY KEY is a covering index. The surplus
-** columns are part of KeyInfo.nXField and are not used for
+** columns are part of KeyInfo.nAllField and are not used for
** sorting or lookup or uniqueness checks.
** (6) Replace the rowid tail on all automatically generated UNIQUE
** indices with the PRIMARY KEY columns.
@@ -102165,13 +103331,12 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
** virtual tables */
if( IN_DECLARE_VTAB ) return;
- /* Convert the OP_CreateTable opcode that would normally create the
- ** root-page for the table into an OP_CreateIndex opcode. The index
- ** created will become the PRIMARY KEY index.
+ /* Convert the P3 operand of the OP_CreateBtree opcode from BTREE_INTKEY
+ ** into BTREE_BLOBKEY.
*/
if( pParse->addrCrTab ){
assert( v );
- sqlite3VdbeChangeOpcode(v, pParse->addrCrTab, OP_CreateIndex);
+ sqlite3VdbeChangeP3(v, pParse->addrCrTab, BTREE_BLOBKEY);
}
/* Locate the PRIMARY KEY index. Or, if this table was originally
@@ -102421,10 +103586,6 @@ SQLITE_PRIVATE void sqlite3EndTable(
pParse->nTab = 2;
addrTop = sqlite3VdbeCurrentAddr(v) + 1;
sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop);
- sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
- sqlite3Select(pParse, pSelect, &dest);
- sqlite3VdbeEndCoroutine(v, regYield);
- sqlite3VdbeJumpHere(v, addrTop - 1);
if( pParse->nErr ) return;
pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
if( pSelTab==0 ) return;
@@ -102434,6 +103595,11 @@ SQLITE_PRIVATE void sqlite3EndTable(
pSelTab->nCol = 0;
pSelTab->aCol = 0;
sqlite3DeleteTable(db, pSelTab);
+ sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield);
+ sqlite3Select(pParse, pSelect, &dest);
+ if( pParse->nErr ) return;
+ sqlite3VdbeEndCoroutine(v, regYield);
+ sqlite3VdbeJumpHere(v, addrTop - 1);
addrInsLoop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm);
VdbeCoverage(v);
sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec);
@@ -102511,7 +103677,7 @@ SQLITE_PRIVATE void sqlite3EndTable(
return;
}
pParse->pNewTable = 0;
- db->flags |= SQLITE_InternChanges;
+ db->mDbFlags |= DBFLAG_SchemaChange;
#ifndef SQLITE_OMIT_ALTERTABLE
if( !p->pSelect ){
@@ -102576,7 +103742,7 @@ SQLITE_PRIVATE void sqlite3CreateView(
** the end.
*/
sEnd = pParse->sLastToken;
- assert( sEnd.z[0]!=0 );
+ assert( sEnd.z[0]!=0 || sEnd.n==0 );
if( sEnd.z[0]!=';' ){
sEnd.z += sEnd.n;
}
@@ -102610,6 +103776,9 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
int nErr = 0; /* Number of errors encountered */
int n; /* Temporarily holds the number of cursors assigned */
sqlite3 *db = pParse->db; /* Database connection for malloc errors */
+#ifndef SQLITE_OMIT_VIRTUALTABLE
+ int rc;
+#endif
#ifndef SQLITE_OMIT_AUTHORIZATION
sqlite3_xauth xAuth; /* Saved xAuth pointer */
#endif
@@ -102617,8 +103786,11 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
assert( pTable );
#ifndef SQLITE_OMIT_VIRTUALTABLE
- if( sqlite3VtabCallConnect(pParse, pTable) ){
- return SQLITE_ERROR;
+ db->nSchemaLock++;
+ rc = sqlite3VtabCallConnect(pParse, pTable);
+ db->nSchemaLock--;
+ if( rc ){
+ return 1;
}
if( IsVirtual(pTable) ) return 0;
#endif
@@ -102814,14 +103986,6 @@ static void destroyRootPage(Parse *pParse, int iTable, int iDb){
** is also added (this can happen with an auto-vacuum database).
*/
static void destroyTable(Parse *pParse, Table *pTab){
-#ifdef SQLITE_OMIT_AUTOVACUUM
- Index *pIdx;
- int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
- destroyRootPage(pParse, pTab->tnum, iDb);
- for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- destroyRootPage(pParse, pIdx->tnum, iDb);
- }
-#else
/* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
** is not defined), then it is important to call OP_Destroy on the
** table and index root-pages in order, starting with the numerically
@@ -102864,7 +104028,6 @@ static void destroyTable(Parse *pParse, Table *pTab){
iDestroyed = iLargest;
}
}
-#endif
}
/*
@@ -103291,7 +104454,7 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
addr2 = sqlite3VdbeCurrentAddr(v);
}
sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx);
- sqlite3VdbeAddOp3(v, OP_Last, iIdx, 0, -1);
+ sqlite3VdbeAddOp1(v, OP_SeekEnd, iIdx);
sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord);
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
sqlite3ReleaseTempReg(pParse, regRecord);
@@ -103780,7 +104943,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
sqlite3OomFault(db);
goto exit_create_index;
}
- db->flags |= SQLITE_InternChanges;
+ db->mDbFlags |= DBFLAG_SchemaChange;
if( pTblName!=0 ){
pIndex->tnum = db->init.newTnum;
}
@@ -103816,7 +104979,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex(
** that case the convertToWithoutRowidTable() routine will replace
** the Noop with a Goto to jump over the VDBE code generated below. */
pIndex->tnum = sqlite3VdbeAddOp0(v, OP_Noop);
- sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
+ sqlite3VdbeAddOp3(v, OP_CreateBtree, iDb, iMem, BTREE_BLOBKEY);
/* Gather the complete text of the CREATE INDEX statement into
** the zStmt variable
@@ -104311,9 +105474,10 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
goto append_from_error;
}
p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
- if( p==0 || NEVER(p->nSrc==0) ){
+ if( p==0 ){
goto append_from_error;
}
+ assert( p->nSrc>0 );
pItem = &p->a[p->nSrc-1];
assert( pAlias!=0 );
if( pAlias->n ){
@@ -104338,8 +105502,10 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
*/
SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
assert( pIndexedBy!=0 );
- if( p && ALWAYS(p->nSrc>0) ){
- struct SrcList_item *pItem = &p->a[p->nSrc-1];
+ if( p && pIndexedBy->n>0 ){
+ struct SrcList_item *pItem;
+ assert( p->nSrc>0 );
+ pItem = &p->a[p->nSrc-1];
assert( pItem->fg.notIndexed==0 );
assert( pItem->fg.isIndexedBy==0 );
assert( pItem->fg.isTabFunc==0 );
@@ -104349,7 +105515,7 @@ SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pI
pItem->fg.notIndexed = 1;
}else{
pItem->u1.zIndexedBy = sqlite3NameFromToken(pParse->db, pIndexedBy);
- pItem->fg.isIndexedBy = (pItem->u1.zIndexedBy!=0);
+ pItem->fg.isIndexedBy = 1;
}
}
}
@@ -104820,6 +105986,18 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){
pKey->aSortOrder[i] = pIdx->aSortOrder[i];
}
if( pParse->nErr ){
+ assert( pParse->rc==SQLITE_ERROR_MISSING_COLLSEQ );
+ if( pIdx->bNoQuery==0 ){
+ /* Deactivate the index because it contains an unknown collating
+ ** sequence. The only way to reactive the index is to reload the
+ ** schema. Adding the missing collating sequence later does not
+ ** reactive the index. The application had the chance to register
+ ** the missing index using the collation-needed callback. For
+ ** simplicity, SQLite will not give the application a second chance.
+ */
+ pIdx->bNoQuery = 1;
+ pParse->rc = SQLITE_ERROR_RETRY;
+ }
sqlite3KeyInfoUnref(pKey);
pKey = 0;
}
@@ -105005,6 +106183,7 @@ SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(
assert( !p || p->xCmp );
if( p==0 ){
sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
+ pParse->rc = SQLITE_ERROR_MISSING_COLLSEQ;
}
return p;
}
@@ -105274,7 +106453,7 @@ SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
/* If no match is found, search the built-in functions.
**
- ** If the SQLITE_PreferBuiltin flag is set, then search the built-in
+ ** If the DBFLAG_PreferBuiltin flag is set, then search the built-in
** functions even if a prior app-defined function was found. And give
** priority to built-in functions.
**
@@ -105284,7 +106463,7 @@ SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
** new function. But the FuncDefs for built-in functions are read-only.
** So we must not search for built-ins when creating a new function.
*/
- if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
+ if( !createFlag && (pBest==0 || (db->mDbFlags & DBFLAG_PreferBuiltin)!=0) ){
bestScore = 0;
h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % SQLITE_FUNC_HASH_SZ;
p = functionSearch(h, zName);
@@ -105357,8 +106536,8 @@ SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
pSchema->pSeqTab = 0;
if( pSchema->schemaFlags & DB_SchemaLoaded ){
pSchema->iGeneration++;
- pSchema->schemaFlags &= ~DB_SchemaLoaded;
}
+ pSchema->schemaFlags &= ~(DB_SchemaLoaded|DB_ResetWanted);
}
/*
@@ -105478,6 +106657,8 @@ SQLITE_PRIVATE void sqlite3MaterializeView(
Parse *pParse, /* Parsing context */
Table *pView, /* View definition */
Expr *pWhere, /* Optional WHERE clause to be added */
+ ExprList *pOrderBy, /* Optional ORDER BY clause */
+ Expr *pLimit, /* Optional LIMIT clause */
int iCur /* Cursor number for ephemeral table */
){
SelectDest dest;
@@ -105494,8 +106675,8 @@ SQLITE_PRIVATE void sqlite3MaterializeView(
assert( pFrom->a[0].pOn==0 );
assert( pFrom->a[0].pUsing==0 );
}
- pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0,
- SF_IncludeHidden, 0, 0);
+ pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, pOrderBy,
+ SF_IncludeHidden, pLimit);
sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur);
sqlite3Select(pParse, pSel, &dest);
sqlite3SelectDelete(db, pSel);
@@ -105517,29 +106698,29 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere(
Expr *pWhere, /* The WHERE clause. May be null */
ExprList *pOrderBy, /* The ORDER BY clause. May be null */
Expr *pLimit, /* The LIMIT clause. May be null */
- Expr *pOffset, /* The OFFSET clause. May be null */
char *zStmtType /* Either DELETE or UPDATE. For err msgs. */
){
- Expr *pWhereRowid = NULL; /* WHERE rowid .. */
+ sqlite3 *db = pParse->db;
+ Expr *pLhs = NULL; /* LHS of IN(SELECT...) operator */
Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */
- Expr *pSelectRowid = NULL; /* SELECT rowid ... */
ExprList *pEList = NULL; /* Expression list contaning only pSelectRowid */
SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */
Select *pSelect = NULL; /* Complete SELECT tree */
+ Table *pTab;
/* Check that there isn't an ORDER BY without a LIMIT clause.
*/
- if( pOrderBy && (pLimit == 0) ) {
+ if( pOrderBy && pLimit==0 ) {
sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType);
- goto limit_where_cleanup;
+ sqlite3ExprDelete(pParse->db, pWhere);
+ sqlite3ExprListDelete(pParse->db, pOrderBy);
+ return 0;
}
/* We only need to generate a select expression if there
** is a limit/offset term to enforce.
*/
if( pLimit == 0 ) {
- /* if pLimit is null, pOffset will always be null as well. */
- assert( pOffset == 0 );
return pWhere;
}
@@ -105552,36 +106733,47 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere(
** );
*/
- pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0);
- if( pSelectRowid == 0 ) goto limit_where_cleanup;
- pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid);
- if( pEList == 0 ) goto limit_where_cleanup;
+ pTab = pSrc->a[0].pTab;
+ if( HasRowid(pTab) ){
+ pLhs = sqlite3PExpr(pParse, TK_ROW, 0, 0);
+ pEList = sqlite3ExprListAppend(
+ pParse, 0, sqlite3PExpr(pParse, TK_ROW, 0, 0)
+ );
+ }else{
+ Index *pPk = sqlite3PrimaryKeyIndex(pTab);
+ if( pPk->nKeyCol==1 ){
+ const char *zName = pTab->aCol[pPk->aiColumn[0]].zName;
+ pLhs = sqlite3Expr(db, TK_ID, zName);
+ pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, zName));
+ }else{
+ int i;
+ for(i=0; i<pPk->nKeyCol; i++){
+ Expr *p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zName);
+ pEList = sqlite3ExprListAppend(pParse, pEList, p);
+ }
+ pLhs = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+ if( pLhs ){
+ pLhs->x.pList = sqlite3ExprListDup(db, pEList, 0);
+ }
+ }
+ }
/* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
** and the SELECT subtree. */
+ pSrc->a[0].pTab = 0;
pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0);
- if( pSelectSrc == 0 ) {
- sqlite3ExprListDelete(pParse->db, pEList);
- goto limit_where_cleanup;
- }
+ pSrc->a[0].pTab = pTab;
+ pSrc->a[0].pIBIndex = 0;
/* generate the SELECT expression tree. */
- pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0,
- pOrderBy,0,pLimit,pOffset);
- if( pSelect == 0 ) return 0;
+ pSelect = sqlite3SelectNew(pParse, pEList, pSelectSrc, pWhere, 0 ,0,
+ pOrderBy,0,pLimit
+ );
/* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */
- pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0);
- pInClause = pWhereRowid ? sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0) : 0;
+ pInClause = sqlite3PExpr(pParse, TK_IN, pLhs, 0);
sqlite3PExprAddSelect(pParse, pInClause, pSelect);
return pInClause;
-
-limit_where_cleanup:
- sqlite3ExprDelete(pParse->db, pWhere);
- sqlite3ExprListDelete(pParse->db, pOrderBy);
- sqlite3ExprDelete(pParse->db, pLimit);
- sqlite3ExprDelete(pParse->db, pOffset);
- return 0;
}
#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) */
/* && !defined(SQLITE_OMIT_SUBQUERY) */
@@ -105596,7 +106788,9 @@ limit_where_cleanup:
SQLITE_PRIVATE void sqlite3DeleteFrom(
Parse *pParse, /* The parser context */
SrcList *pTabList, /* The table from which we should delete things */
- Expr *pWhere /* The WHERE clause. May be null */
+ Expr *pWhere, /* The WHERE clause. May be null */
+ ExprList *pOrderBy, /* ORDER BY clause. May be null */
+ Expr *pLimit /* LIMIT clause. May be null */
){
Vdbe *v; /* The virtual database engine */
Table *pTab; /* The table from which records will be deleted */
@@ -105641,6 +106835,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
}
assert( pTabList->nSrc==1 );
+
/* Locate the table which we want to delete. This table has to be
** put in an SrcList structure because some of the subroutines we
** will be calling are designed to work with multiple tables and expect
@@ -105655,16 +106850,26 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
#ifndef SQLITE_OMIT_TRIGGER
pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
isView = pTab->pSelect!=0;
- bComplex = pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0);
#else
# define pTrigger 0
# define isView 0
#endif
+ bComplex = pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0);
#ifdef SQLITE_OMIT_VIEW
# undef isView
# define isView 0
#endif
+#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
+ if( !isView ){
+ pWhere = sqlite3LimitWhere(
+ pParse, pTabList, pWhere, pOrderBy, pLimit, "DELETE"
+ );
+ pOrderBy = 0;
+ pLimit = 0;
+ }
+#endif
+
/* If pTab is really a view, make sure it has been initialized.
*/
if( sqlite3ViewGetColumnNames(pParse, pTab) ){
@@ -105712,8 +106917,12 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
*/
#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
if( isView ){
- sqlite3MaterializeView(pParse, pTab, pWhere, iTabCur);
+ sqlite3MaterializeView(pParse, pTab,
+ pWhere, pOrderBy, pLimit, iTabCur
+ );
iDataCur = iIdxCur = iTabCur;
+ pOrderBy = 0;
+ pLimit = 0;
}
#endif
@@ -105890,7 +107099,11 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
}
}else if( pPk ){
addrLoop = sqlite3VdbeAddOp1(v, OP_Rewind, iEphCur); VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_RowData, iEphCur, iKey);
+ if( IsVirtual(pTab) ){
+ sqlite3VdbeAddOp3(v, OP_Column, iEphCur, 0, iKey);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_RowData, iEphCur, iKey);
+ }
assert( nKey==0 ); /* OP_Found will use a composite key */
}else{
addrLoop = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, 0, iKey);
@@ -105953,6 +107166,10 @@ delete_from_cleanup:
sqlite3AuthContextPop(&sContext);
sqlite3SrcListDelete(db, pTabList);
sqlite3ExprDelete(db, pWhere);
+#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
+ sqlite3ExprListDelete(db, pOrderBy);
+ sqlite3ExprDelete(db, pLimit);
+#endif
sqlite3DbFree(db, aToOpen);
return;
}
@@ -106110,7 +107327,7 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete(
u8 p5 = 0;
sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,iIdxNoSeek);
sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0));
- if( pParse->nested==0 ){
+ if( pParse->nested==0 || 0==sqlite3_stricmp(pTab->zName, "sqlite_stat1") ){
sqlite3VdbeAppendP4(v, (char*)pTab, P4_TABLE);
}
if( eMode!=ONEPASS_OFF ){
@@ -106994,16 +108211,20 @@ static int patternCompare(
** c or cx.
*/
if( c<=0x80 ){
- u32 cx;
+ char zStop[3];
int bMatch;
if( noCase ){
- cx = sqlite3Toupper(c);
- c = sqlite3Tolower(c);
+ zStop[0] = sqlite3Toupper(c);
+ zStop[1] = sqlite3Tolower(c);
+ zStop[2] = 0;
}else{
- cx = c;
+ zStop[0] = c;
+ zStop[1] = 0;
}
- while( (c2 = *(zString++))!=0 ){
- if( c2!=c && c2!=cx ) continue;
+ while(1){
+ zString += strcspn((const char*)zString, zStop);
+ if( zString[0]==0 ) break;
+ zString++;
bMatch = patternCompare(zPattern,zString,pInfo,matchOther);
if( bMatch!=SQLITE_NOMATCH ) return bMatch;
}
@@ -107161,7 +108382,8 @@ static void likeFunc(
#ifdef SQLITE_TEST
sqlite3_like_count++;
#endif
- sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
+ sqlite3_result_int(context,
+ patternCompare(zB, zA, pInfo, escape)==SQLITE_MATCH);
}
}
@@ -108002,9 +109224,14 @@ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive)
/*
** pExpr points to an expression which implements a function. If
** it is appropriate to apply the LIKE optimization to that function
-** then set aWc[0] through aWc[2] to the wildcard characters and
-** return TRUE. If the function is not a LIKE-style function then
-** return FALSE.
+** then set aWc[0] through aWc[2] to the wildcard characters and the
+** escape character and then return TRUE. If the function is not a
+** LIKE-style function then return FALSE.
+**
+** The expression "a LIKE b ESCAPE c" is only considered a valid LIKE
+** operator if c is a string literal that is exactly one byte in length.
+** That one byte is stored in aWc[3]. aWc[3] is set to zero if there is
+** no ESCAPE clause.
**
** *pIsNocase is set to true if uppercase and lowercase are equivalent for
** the function (default for LIKE). If the function makes the distinction
@@ -108013,17 +109240,26 @@ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive)
*/
SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
FuncDef *pDef;
- if( pExpr->op!=TK_FUNCTION
- || !pExpr->x.pList
- || pExpr->x.pList->nExpr!=2
- ){
+ int nExpr;
+ if( pExpr->op!=TK_FUNCTION || !pExpr->x.pList ){
return 0;
}
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
- pDef = sqlite3FindFunction(db, pExpr->u.zToken, 2, SQLITE_UTF8, 0);
+ nExpr = pExpr->x.pList->nExpr;
+ pDef = sqlite3FindFunction(db, pExpr->u.zToken, nExpr, SQLITE_UTF8, 0);
if( NEVER(pDef==0) || (pDef->funcFlags & SQLITE_FUNC_LIKE)==0 ){
return 0;
}
+ if( nExpr<3 ){
+ aWc[3] = 0;
+ }else{
+ Expr *pEscape = pExpr->x.pList->a[2].pExpr;
+ char *zEscape;
+ if( pEscape->op!=TK_STRING ) return 0;
+ zEscape = pEscape->u.zToken;
+ if( zEscape[0]==0 || zEscape[1]!=0 ) return 0;
+ aWc[3] = zEscape[0];
+ }
/* The memcpy() statement assumes that the wildcard characters are
** the first three statements in the compareInfo structure. The
@@ -108076,6 +109312,10 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){
#ifdef SQLITE_DEBUG
FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY),
#endif
+#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
+ FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET|
+ SQLITE_FUNC_TYPEOF),
+#endif
FUNCTION(ltrim, 1, 1, 0, trimFunc ),
FUNCTION(ltrim, 2, 1, 0, trimFunc ),
FUNCTION(rtrim, 1, 2, 0, trimFunc ),
@@ -108898,7 +110138,7 @@ SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTa
}
pParse->disableTriggers = 1;
- sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0);
+ sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0, 0, 0);
pParse->disableTriggers = 0;
/* If the DELETE has generated immediate foreign key constraint
@@ -109456,7 +110696,7 @@ static Trigger *fkActionTrigger(
sqlite3ExprListAppend(pParse, 0, pRaise),
sqlite3SrcListAppend(db, 0, &tFrom, 0),
pWhere,
- 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0
);
pWhere = 0;
}
@@ -109823,7 +111063,7 @@ static int autoIncBegin(
){
int memId = 0; /* Register holding maximum rowid */
if( (pTab->tabFlags & TF_Autoincrement)!=0
- && (pParse->db->flags & SQLITE_Vacuum)==0
+ && (pParse->db->mDbFlags & DBFLAG_Vacuum)==0
){
Parse *pToplevel = sqlite3ParseToplevel(pParse);
AutoincInfo *pInfo;
@@ -110081,7 +111321,6 @@ SQLITE_PRIVATE void sqlite3Insert(
){
sqlite3 *db; /* The main database structure */
Table *pTab; /* The table to insert into. aka TABLE */
- char *zTab; /* Name of the table into which we are inserting */
int i, j; /* Loop counters */
Vdbe *v; /* Generate code into this virtual machine */
Index *pIdx; /* For looping over indices of the table */
@@ -110137,8 +111376,6 @@ SQLITE_PRIVATE void sqlite3Insert(
/* Locate the table into which we will be inserting new information.
*/
assert( pTabList->nSrc==1 );
- zTab = pTabList->a[0].zName;
- if( NEVER(zTab==0) ) goto insert_cleanup;
pTab = sqlite3SrcListLookup(pParse, pTabList);
if( pTab==0 ){
goto insert_cleanup;
@@ -110509,7 +111746,8 @@ SQLITE_PRIVATE void sqlite3Insert(
VdbeOp *pOp;
sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regRowid);
pOp = sqlite3VdbeGetOp(v, -1);
- if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){
+ assert( pOp!=0 );
+ if( pOp->opcode==OP_Null && !IsVirtual(pTab) ){
appendFlag = 1;
pOp->opcode = OP_NewRowid;
pOp->p1 = iDataCur;
@@ -111170,6 +112408,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
}
/* Check to see if the new index entry will be unique */
+ sqlite3ExprCachePush(pParse);
sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk,
regIdx, pIdx->nKeyCol); VdbeCoverage(v);
@@ -111258,6 +112497,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
}
}
sqlite3VdbeResolveLabel(v, addrUniqueOk);
+ sqlite3ExprCachePop(pParse);
if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField);
}
if( ipkTop ){
@@ -111606,7 +112846,6 @@ static int xferOptimization(
if( pSelect->pLimit ){
return 0; /* SELECT may not have a LIMIT clause */
}
- assert( pSelect->pOffset==0 ); /* Must be so if pLimit==0 */
if( pSelect->pPrior ){
return 0; /* SELECT may not be a compound query */
}
@@ -111656,7 +112895,7 @@ static int xferOptimization(
Column *pDestCol = &pDest->aCol[i];
Column *pSrcCol = &pSrc->aCol[i];
#ifdef SQLITE_ENABLE_HIDDEN_COLUMNS
- if( (db->flags & SQLITE_Vacuum)==0
+ if( (db->mDbFlags & DBFLAG_Vacuum)==0
&& (pDestCol->colFlags | pSrcCol->colFlags) & COLFLAG_HIDDEN
){
return 0; /* Neither table may have __hidden__ columns */
@@ -111732,15 +112971,15 @@ static int xferOptimization(
regRowid = sqlite3GetTempReg(pParse);
sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
assert( HasRowid(pDest) || destHasUniqueIdx );
- if( (db->flags & SQLITE_Vacuum)==0 && (
+ if( (db->mDbFlags & DBFLAG_Vacuum)==0 && (
(pDest->iPKey<0 && pDest->pIndex!=0) /* (1) */
|| destHasUniqueIdx /* (2) */
|| (onError!=OE_Abort && onError!=OE_Rollback) /* (3) */
)){
/* In some circumstances, we are able to run the xfer optimization
** only if the destination table is initially empty. Unless the
- ** SQLITE_Vacuum flag is set, this block generates code to make
- ** that determination. If SQLITE_Vacuum is set, then the destination
+ ** DBFLAG_Vacuum flag is set, this block generates code to make
+ ** that determination. If DBFLAG_Vacuum is set, then the destination
** table is always empty.
**
** Conditions under which the destination must be empty:
@@ -111776,8 +113015,8 @@ static int xferOptimization(
assert( (pDest->tabFlags & TF_Autoincrement)==0 );
}
sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
- if( db->flags & SQLITE_Vacuum ){
- sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1);
+ if( db->mDbFlags & DBFLAG_Vacuum ){
+ sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID|
OPFLAG_APPEND|OPFLAG_USESEEKRESULT;
}else{
@@ -111808,13 +113047,13 @@ static int xferOptimization(
VdbeComment((v, "%s", pDestIdx->zName));
addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v);
sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1);
- if( db->flags & SQLITE_Vacuum ){
+ if( db->mDbFlags & DBFLAG_Vacuum ){
/* This INSERT command is part of a VACUUM operation, which guarantees
** that the destination table is empty. If all indexed columns use
** collation sequence BINARY, then it can also be assumed that the
** index will be populated by inserting keys in strictly sorted
** order. In this case, instead of seeking within the b-tree as part
- ** of every OP_IdxInsert opcode, an OP_Last is added before the
+ ** of every OP_IdxInsert opcode, an OP_SeekEnd is added before the
** OP_IdxInsert to seek to the point within the b-tree where each key
** should be inserted. This is faster.
**
@@ -111829,7 +113068,7 @@ static int xferOptimization(
}
if( i==pSrcIdx->nColumn ){
idxInsFlags = OPFLAG_USESEEKRESULT;
- sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1);
+ sqlite3VdbeAddOp1(v, OP_SeekEnd, iDest);
}
}
if( !HasRowid(pSrc) && pDestIdx->idxType==2 ){
@@ -112160,7 +113399,7 @@ struct sqlite3_api_routines {
int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
const char*,const char*),void*);
void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
- char * (*snprintf)(int,char*,const char*,...);
+ char * (*xsnprintf)(int,char*,const char*,...);
int (*step)(sqlite3_stmt*);
int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
char const**,char const**,int*,int*,int*);
@@ -112272,7 +113511,7 @@ struct sqlite3_api_routines {
int (*uri_boolean)(const char*,const char*,int);
sqlite3_int64 (*uri_int64)(const char*,const char*,sqlite3_int64);
const char *(*uri_parameter)(const char*,const char*);
- char *(*vsnprintf)(int,char*,const char*,va_list);
+ char *(*xvsnprintf)(int,char*,const char*,va_list);
int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*);
/* Version 3.8.7 and later */
int (*auto_extension)(void(*)(void));
@@ -112318,6 +113557,9 @@ struct sqlite3_api_routines {
int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*));
void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*));
void *(*value_pointer)(sqlite3_value*,const char*);
+ int (*vtab_nochange)(sqlite3_context*);
+ int (*value_nochange)(sqlite3_value*);
+ const char *(*vtab_collation)(sqlite3_index_info*,int);
};
/*
@@ -112444,7 +113686,7 @@ typedef int (*sqlite3_loadext_entry)(
#define sqlite3_rollback_hook sqlite3_api->rollback_hook
#define sqlite3_set_authorizer sqlite3_api->set_authorizer
#define sqlite3_set_auxdata sqlite3_api->set_auxdata
-#define sqlite3_snprintf sqlite3_api->snprintf
+#define sqlite3_snprintf sqlite3_api->xsnprintf
#define sqlite3_step sqlite3_api->step
#define sqlite3_table_column_metadata sqlite3_api->table_column_metadata
#define sqlite3_thread_cleanup sqlite3_api->thread_cleanup
@@ -112468,7 +113710,7 @@ typedef int (*sqlite3_loadext_entry)(
#define sqlite3_value_text16le sqlite3_api->value_text16le
#define sqlite3_value_type sqlite3_api->value_type
#define sqlite3_vmprintf sqlite3_api->vmprintf
-#define sqlite3_vsnprintf sqlite3_api->vsnprintf
+#define sqlite3_vsnprintf sqlite3_api->xvsnprintf
#define sqlite3_overload_function sqlite3_api->overload_function
#define sqlite3_prepare_v2 sqlite3_api->prepare_v2
#define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
@@ -112544,7 +113786,7 @@ typedef int (*sqlite3_loadext_entry)(
#define sqlite3_uri_boolean sqlite3_api->uri_boolean
#define sqlite3_uri_int64 sqlite3_api->uri_int64
#define sqlite3_uri_parameter sqlite3_api->uri_parameter
-#define sqlite3_uri_vsnprintf sqlite3_api->vsnprintf
+#define sqlite3_uri_vsnprintf sqlite3_api->xvsnprintf
#define sqlite3_wal_checkpoint_v2 sqlite3_api->wal_checkpoint_v2
/* Version 3.8.7 and later */
#define sqlite3_auto_extension sqlite3_api->auto_extension
@@ -112584,6 +113826,10 @@ typedef int (*sqlite3_loadext_entry)(
#define sqlite3_bind_pointer sqlite3_api->bind_pointer
#define sqlite3_result_pointer sqlite3_api->result_pointer
#define sqlite3_value_pointer sqlite3_api->value_pointer
+/* Version 3.22.0 and later */
+#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange
+#define sqlite3_value_nochange sqltie3_api->value_nochange
+#define sqlite3_vtab_collation sqltie3_api->vtab_collation
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
@@ -113018,7 +114264,11 @@ static const sqlite3_api_routines sqlite3Apis = {
sqlite3_prepare16_v3,
sqlite3_bind_pointer,
sqlite3_result_pointer,
- sqlite3_value_pointer
+ sqlite3_value_pointer,
+ /* Version 3.22.0 and later */
+ sqlite3_vtab_nochange,
+ sqlite3_value_nochange,
+ sqlite3_vtab_collation
};
/*
@@ -113084,8 +114334,10 @@ static int sqlite3LoadExtension(
#if SQLITE_OS_UNIX || SQLITE_OS_WIN
for(ii=0; ii<ArraySize(azEndings) && handle==0; ii++){
char *zAltFile = sqlite3_mprintf("%s.%s", zFile, azEndings[ii]);
+ int bExists = 0;
if( zAltFile==0 ) return SQLITE_NOMEM_BKPT;
- handle = sqlite3OsDlOpen(pVfs, zAltFile);
+ sqlite3OsAccess(pVfs, zAltFile, SQLITE_ACCESS_EXISTS, &bExists);
+ if( bExists ) handle = sqlite3OsDlOpen(pVfs, zAltFile);
sqlite3_free(zAltFile);
}
#endif
@@ -114339,16 +115591,16 @@ static const PragmaName *pragmaLocate(const char *zName){
/*
** Helper subroutine for PRAGMA integrity_check:
**
-** Generate code to output a single-column result row with the result
-** held in register regResult. Decrement the result count and halt if
-** the maximum number of result rows have been issued.
+** Generate code to output a single-column result row with a value of the
+** string held in register 3. Decrement the result count in register 1
+** and halt if the maximum number of result rows have been issued.
*/
-static int integrityCheckResultRow(Vdbe *v, int regResult){
+static int integrityCheckResultRow(Vdbe *v){
int addr;
- sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 1);
+ sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
addr = sqlite3VdbeAddOp3(v, OP_IfPos, 1, sqlite3VdbeCurrentAddr(v)+2, 1);
VdbeCoverage(v);
- sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
+ sqlite3VdbeAddOp0(v, OP_Halt);
return addr;
}
@@ -115121,6 +116373,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
** type: Column declaration type.
** notnull: True if 'NOT NULL' is part of column declaration
** dflt_value: The default value for the column, if any.
+ ** pk: Non-zero for PK fields.
*/
case PragTyp_TABLE_INFO: if( zRight ){
Table *pTab;
@@ -115275,13 +116528,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
for(i=0; i<SQLITE_FUNC_HASH_SZ; i++){
for(p=sqlite3BuiltinFunctions.a[i]; p; p=p->u.pHash ){
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1);
- sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
}
}
for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){
p = (FuncDef*)sqliteHashData(j);
sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0);
- sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
}
}
break;
@@ -115293,7 +116544,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){
Module *pMod = (Module*)sqliteHashData(j);
sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName);
- sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
}
}
break;
@@ -115303,7 +116553,6 @@ SQLITE_PRIVATE void sqlite3Pragma(
int i;
for(i=0; i<ArraySize(aPragmaName); i++){
sqlite3VdbeMultiLoad(v, 1, "s", aPragmaName[i].zName);
- sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
}
}
break;
@@ -115529,12 +116778,11 @@ SQLITE_PRIVATE void sqlite3Pragma(
/* Do an integrity check on each database file */
for(i=0; i<db->nDb; i++){
- HashElem *x;
- Hash *pTbls;
- int *aRoot;
- int cnt = 0;
- int mxIdx = 0;
- int nIdx;
+ HashElem *x; /* For looping over tables in the schema */
+ Hash *pTbls; /* Set of all tables in the schema */
+ int *aRoot; /* Array of root page numbers of all btrees */
+ int cnt = 0; /* Number of entries in aRoot[] */
+ int mxIdx = 0; /* Maximum number of indexes for any table */
if( OMIT_TEMPDB && i==1 ) continue;
if( iDb>=0 && i!=iDb ) continue;
@@ -115549,8 +116797,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
assert( sqlite3SchemaMutexHeld(db, i, 0) );
pTbls = &db->aDb[i].pSchema->tblHash;
for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
- Table *pTab = sqliteHashData(x);
- Index *pIdx;
+ Table *pTab = sqliteHashData(x); /* Current table */
+ Index *pIdx; /* An index on pTab */
+ int nIdx; /* Number of indexes on pTab */
if( HasRowid(pTab) ) cnt++;
for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){ cnt++; }
if( nIdx>mxIdx ) mxIdx = nIdx;
@@ -115560,12 +116809,12 @@ SQLITE_PRIVATE void sqlite3Pragma(
for(cnt=0, x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
Table *pTab = sqliteHashData(x);
Index *pIdx;
- if( HasRowid(pTab) ) aRoot[cnt++] = pTab->tnum;
+ if( HasRowid(pTab) ) aRoot[++cnt] = pTab->tnum;
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
- aRoot[cnt++] = pIdx->tnum;
+ aRoot[++cnt] = pIdx->tnum;
}
}
- aRoot[cnt] = 0;
+ aRoot[0] = cnt;
/* Make sure sufficient number of registers have been allocated */
pParse->nMem = MAX( pParse->nMem, 8+mxIdx );
@@ -115578,9 +116827,8 @@ SQLITE_PRIVATE void sqlite3Pragma(
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zDbSName),
P4_DYNAMIC);
- sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
- sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
- integrityCheckResultRow(v, 2);
+ sqlite3VdbeAddOp3(v, OP_Concat, 2, 3, 3);
+ integrityCheckResultRow(v);
sqlite3VdbeJumpHere(v, addr);
/* Make sure all the indices are constructed correctly.
@@ -115594,16 +116842,13 @@ SQLITE_PRIVATE void sqlite3Pragma(
int r1 = -1;
if( pTab->tnum<1 ) continue; /* Skip VIEWs or VIRTUAL TABLEs */
- if( pTab->pCheck==0
- && (pTab->tabFlags & TF_HasNotNull)==0
- && (pTab->pIndex==0 || isQuick)
- ){
- continue; /* No additional checks needed for this table */
- }
pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab);
sqlite3ExprCacheClear(pParse);
sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0,
1, 0, &iDataCur, &iIdxCur);
+ /* reg[7] counts the number of entries in the table.
+ ** reg[8+i] counts the number of entries in the i-th index
+ */
sqlite3VdbeAddOp2(v, OP_Integer, 0, 7);
for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */
@@ -115624,7 +116869,7 @@ SQLITE_PRIVATE void sqlite3Pragma(
zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
pTab->aCol[j].zName);
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
- integrityCheckResultRow(v, 3);
+ integrityCheckResultRow(v);
sqlite3VdbeJumpHere(v, jmp2);
}
/* Verify CHECK constraints */
@@ -115647,57 +116892,62 @@ SQLITE_PRIVATE void sqlite3Pragma(
zErr = sqlite3MPrintf(db, "CHECK constraint failed in %s",
pTab->zName);
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
- integrityCheckResultRow(v, 3);
+ integrityCheckResultRow(v);
sqlite3VdbeResolveLabel(v, addrCkOk);
sqlite3ExprCachePop(pParse);
}
sqlite3ExprListDelete(db, pCheck);
}
- /* Validate index entries for the current row */
- for(j=0, pIdx=pTab->pIndex; pIdx && !isQuick; pIdx=pIdx->pNext, j++){
- int jmp2, jmp3, jmp4, jmp5;
- int ckUniq = sqlite3VdbeMakeLabel(v);
- if( pPk==pIdx ) continue;
- r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3,
- pPrior, r1);
- pPrior = pIdx;
- sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1); /* increment entry count */
- /* Verify that an index entry exists for the current table row */
- jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
- pIdx->nColumn); VdbeCoverage(v);
- sqlite3VdbeLoadString(v, 3, "row ");
- sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
- sqlite3VdbeLoadString(v, 4, " missing from index ");
- sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
- jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName);
- sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
- jmp4 = integrityCheckResultRow(v, 3);
- sqlite3VdbeJumpHere(v, jmp2);
- /* For UNIQUE indexes, verify that only one entry exists with the
- ** current key. The entry is unique if (1) any column is NULL
- ** or (2) the next entry has a different key */
- if( IsUniqueIndex(pIdx) ){
- int uniqOk = sqlite3VdbeMakeLabel(v);
- int jmp6;
- int kk;
- for(kk=0; kk<pIdx->nKeyCol; kk++){
- int iCol = pIdx->aiColumn[kk];
- assert( iCol!=XN_ROWID && iCol<pTab->nCol );
- if( iCol>=0 && pTab->aCol[iCol].notNull ) continue;
- sqlite3VdbeAddOp2(v, OP_IsNull, r1+kk, uniqOk);
- VdbeCoverage(v);
+ if( !isQuick ){ /* Omit the remaining tests for quick_check */
+ /* Sanity check on record header decoding */
+ sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nCol-1, 3);
+ sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
+ /* Validate index entries for the current row */
+ for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
+ int jmp2, jmp3, jmp4, jmp5;
+ int ckUniq = sqlite3VdbeMakeLabel(v);
+ if( pPk==pIdx ) continue;
+ r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3,
+ pPrior, r1);
+ pPrior = pIdx;
+ sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1);/* increment entry count */
+ /* Verify that an index entry exists for the current table row */
+ jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
+ pIdx->nColumn); VdbeCoverage(v);
+ sqlite3VdbeLoadString(v, 3, "row ");
+ sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
+ sqlite3VdbeLoadString(v, 4, " missing from index ");
+ sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
+ jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName);
+ sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
+ jmp4 = integrityCheckResultRow(v);
+ sqlite3VdbeJumpHere(v, jmp2);
+ /* For UNIQUE indexes, verify that only one entry exists with the
+ ** current key. The entry is unique if (1) any column is NULL
+ ** or (2) the next entry has a different key */
+ if( IsUniqueIndex(pIdx) ){
+ int uniqOk = sqlite3VdbeMakeLabel(v);
+ int jmp6;
+ int kk;
+ for(kk=0; kk<pIdx->nKeyCol; kk++){
+ int iCol = pIdx->aiColumn[kk];
+ assert( iCol!=XN_ROWID && iCol<pTab->nCol );
+ if( iCol>=0 && pTab->aCol[iCol].notNull ) continue;
+ sqlite3VdbeAddOp2(v, OP_IsNull, r1+kk, uniqOk);
+ VdbeCoverage(v);
+ }
+ jmp6 = sqlite3VdbeAddOp1(v, OP_Next, iIdxCur+j); VdbeCoverage(v);
+ sqlite3VdbeGoto(v, uniqOk);
+ sqlite3VdbeJumpHere(v, jmp6);
+ sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
+ pIdx->nKeyCol); VdbeCoverage(v);
+ sqlite3VdbeLoadString(v, 3, "non-unique entry in index ");
+ sqlite3VdbeGoto(v, jmp5);
+ sqlite3VdbeResolveLabel(v, uniqOk);
}
- jmp6 = sqlite3VdbeAddOp1(v, OP_Next, iIdxCur+j); VdbeCoverage(v);
- sqlite3VdbeGoto(v, uniqOk);
- sqlite3VdbeJumpHere(v, jmp6);
- sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
- pIdx->nKeyCol); VdbeCoverage(v);
- sqlite3VdbeLoadString(v, 3, "non-unique entry in index ");
- sqlite3VdbeGoto(v, jmp5);
- sqlite3VdbeResolveLabel(v, uniqOk);
+ sqlite3VdbeJumpHere(v, jmp4);
+ sqlite3ResolvePartIdxLabel(pParse, jmp3);
}
- sqlite3VdbeJumpHere(v, jmp4);
- sqlite3ResolvePartIdxLabel(pParse, jmp3);
}
sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v);
sqlite3VdbeJumpHere(v, loopTop-1);
@@ -115709,9 +116959,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3);
addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v);
sqlite3VdbeChangeP5(v, SQLITE_NOTNULL);
- sqlite3VdbeLoadString(v, 3, pIdx->zName);
- sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7);
- integrityCheckResultRow(v, 7);
+ sqlite3VdbeLoadString(v, 4, pIdx->zName);
+ sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3);
+ integrityCheckResultRow(v);
sqlite3VdbeJumpHere(v, addr);
}
}
@@ -115725,6 +116975,9 @@ SQLITE_PRIVATE void sqlite3Pragma(
{ OP_IfNotZero, 1, 4, 0}, /* 1 */
{ OP_String8, 0, 3, 0}, /* 2 */
{ OP_ResultRow, 3, 1, 0}, /* 3 */
+ { OP_Halt, 0, 0, 0}, /* 4 */
+ { OP_String8, 0, 3, 0}, /* 5 */
+ { OP_Goto, 0, 3, 0}, /* 6 */
};
VdbeOp *aOp;
@@ -115733,7 +116986,10 @@ SQLITE_PRIVATE void sqlite3Pragma(
aOp[0].p2 = 1-mxErr;
aOp[2].p4type = P4_STATIC;
aOp[2].p4.z = "ok";
+ aOp[5].p4type = P4_STATIC;
+ aOp[5].p4.z = (char*)sqlite3ErrStr(SQLITE_CORRUPT);
}
+ sqlite3VdbeChangeP3(v, 0, sqlite3VdbeCurrentAddr(v)-2);
}
}
break;
@@ -116613,7 +117869,7 @@ SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char
rc = db->errCode;
assert( (rc&0xFF)==(rcp&0xFF) );
db->init.iDb = saved_iDb;
- assert( saved_iDb==0 || (db->flags & SQLITE_Vacuum)!=0 );
+ assert( saved_iDb==0 || (db->mDbFlags & DBFLAG_Vacuum)!=0 );
if( SQLITE_OK!=rc ){
if( db->init.orphanTrigger ){
assert( iDb==1 );
@@ -116678,6 +117934,8 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
assert( sqlite3_mutex_held(db->mutex) );
assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
+ db->init.busy = 1;
+
/* Construct the in-memory representation schema tables (sqlite_master or
** sqlite_temp_master) by invoking the parser directly. The appropriate
** table name will be inserted automatically by the parser so we can just
@@ -116686,7 +117944,7 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
azArg[0] = zMasterName = SCHEMA_TABLE(iDb);
azArg[1] = "1";
azArg[2] = "CREATE TABLE x(type text,name text,tbl_name text,"
- "rootpage integer,sql text)";
+ "rootpage int,sql text)";
azArg[3] = 0;
initData.db = db;
initData.iDb = iDb;
@@ -116702,10 +117960,10 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
*/
pDb = &db->aDb[iDb];
if( pDb->pBt==0 ){
- if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){
- DbSetProperty(db, 1, DB_SchemaLoaded);
- }
- return SQLITE_OK;
+ assert( iDb==1 );
+ DbSetProperty(db, 1, DB_SchemaLoaded);
+ rc = SQLITE_OK;
+ goto error_out;
}
/* If there is not already a read-only (or read-write) transaction opened
@@ -116864,9 +118122,13 @@ initone_error_out:
sqlite3BtreeLeave(pDb->pBt);
error_out:
- if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
- sqlite3OomFault(db);
+ if( rc ){
+ if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
+ sqlite3OomFault(db);
+ }
+ sqlite3ResetOneSchema(db, iDb);
}
+ db->init.busy = 0;
return rc;
}
@@ -116882,42 +118144,29 @@ error_out:
*/
SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
int i, rc;
- int commit_internal = !(db->flags&SQLITE_InternChanges);
+ int commit_internal = !(db->mDbFlags&DBFLAG_SchemaChange);
assert( sqlite3_mutex_held(db->mutex) );
assert( sqlite3BtreeHoldsMutex(db->aDb[0].pBt) );
assert( db->init.busy==0 );
- rc = SQLITE_OK;
- db->init.busy = 1;
ENC(db) = SCHEMA_ENC(db);
- for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
- if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
- rc = sqlite3InitOne(db, i, pzErrMsg);
- if( rc ){
- sqlite3ResetOneSchema(db, i);
- }
+ assert( db->nDb>0 );
+ /* Do the main schema first */
+ if( !DbHasProperty(db, 0, DB_SchemaLoaded) ){
+ rc = sqlite3InitOne(db, 0, pzErrMsg);
+ if( rc ) return rc;
}
-
- /* Once all the other databases have been initialized, load the schema
- ** for the TEMP database. This is loaded last, as the TEMP database
- ** schema may contain references to objects in other databases.
- */
-#ifndef SQLITE_OMIT_TEMPDB
- assert( db->nDb>1 );
- if( rc==SQLITE_OK && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
- rc = sqlite3InitOne(db, 1, pzErrMsg);
- if( rc ){
- sqlite3ResetOneSchema(db, 1);
+ /* All other schemas after the main schema. The "temp" schema must be last */
+ for(i=db->nDb-1; i>0; i--){
+ if( !DbHasProperty(db, i, DB_SchemaLoaded) ){
+ rc = sqlite3InitOne(db, i, pzErrMsg);
+ if( rc ) return rc;
}
}
-#endif
-
- db->init.busy = 0;
- if( rc==SQLITE_OK && commit_internal ){
+ if( commit_internal ){
sqlite3CommitInternalChanges(db);
}
-
- return rc;
+ return SQLITE_OK;
}
/*
@@ -117008,7 +118257,8 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
*/
assert( sqlite3_mutex_held(db->mutex) );
if( pSchema ){
- for(i=0; ALWAYS(i<db->nDb); i++){
+ for(i=0; 1; i++){
+ assert( i<db->nDb );
if( db->aDb[i].pSchema==pSchema ){
break;
}
@@ -117022,16 +118272,14 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
** Free all memory allocations in the pParse object
*/
SQLITE_PRIVATE void sqlite3ParserReset(Parse *pParse){
- if( pParse ){
- sqlite3 *db = pParse->db;
- sqlite3DbFree(db, pParse->aLabel);
- sqlite3ExprListDelete(db, pParse->pConstExpr);
- if( db ){
- assert( db->lookaside.bDisable >= pParse->disableLookaside );
- db->lookaside.bDisable -= pParse->disableLookaside;
- }
- pParse->disableLookaside = 0;
+ sqlite3 *db = pParse->db;
+ sqlite3DbFree(db, pParse->aLabel);
+ sqlite3ExprListDelete(db, pParse->pConstExpr);
+ if( db ){
+ assert( db->lookaside.bDisable >= pParse->disableLookaside );
+ db->lookaside.bDisable -= pParse->disableLookaside;
}
+ pParse->disableLookaside = 0;
}
/*
@@ -117191,8 +118439,6 @@ static int sqlite3Prepare(
end_prepare:
sqlite3ParserReset(&sParse);
- rc = sqlite3ApiExit(db, rc);
- assert( (rc&db->errMask)==rc );
return rc;
}
static int sqlite3LockAndPrepare(
@@ -117205,6 +118451,7 @@ static int sqlite3LockAndPrepare(
const char **pzTail /* OUT: End of parsed string */
){
int rc;
+ int cnt = 0;
#ifdef SQLITE_ENABLE_API_ARMOR
if( ppStmt==0 ) return SQLITE_MISUSE_BKPT;
@@ -117215,14 +118462,18 @@ static int sqlite3LockAndPrepare(
}
sqlite3_mutex_enter(db->mutex);
sqlite3BtreeEnterAll(db);
- rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
- if( rc==SQLITE_SCHEMA ){
- sqlite3_finalize(*ppStmt);
+ do{
+ /* Make multiple attempts to compile the SQL, until it either succeeds
+ ** or encounters a permanent error. A schema problem after one schema
+ ** reset is considered a permanent error. */
rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail);
- }
+ assert( rc==SQLITE_OK || *ppStmt==0 );
+ }while( rc==SQLITE_ERROR_RETRY
+ || (rc==SQLITE_SCHEMA && (sqlite3ResetOneSchema(db,-1), cnt++)==0) );
sqlite3BtreeLeaveAll(db);
+ rc = sqlite3ApiExit(db, rc);
+ assert( (rc&db->errMask)==rc );
sqlite3_mutex_leave(db->mutex);
- assert( rc==SQLITE_OK || *ppStmt==0 );
return rc;
}
@@ -117509,8 +118760,7 @@ static void clearSelect(sqlite3 *db, Select *p, int bFree){
sqlite3ExprDelete(db, p->pHaving);
sqlite3ExprListDelete(db, p->pOrderBy);
sqlite3ExprDelete(db, p->pLimit);
- sqlite3ExprDelete(db, p->pOffset);
- if( p->pWith ) sqlite3WithDelete(db, p->pWith);
+ if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith);
if( bFree ) sqlite3DbFreeNN(db, p);
p = pPrior;
bFree = 1;
@@ -117542,8 +118792,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(
Expr *pHaving, /* the HAVING clause */
ExprList *pOrderBy, /* the ORDER BY clause */
u32 selFlags, /* Flag parameters, such as SF_Distinct */
- Expr *pLimit, /* LIMIT value. NULL means not used */
- Expr *pOffset /* OFFSET value. NULL means no offset */
+ Expr *pLimit /* LIMIT value. NULL means not used */
){
Select *pNew;
Select standin;
@@ -117553,7 +118802,8 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(
pNew = &standin;
}
if( pEList==0 ){
- pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(pParse->db,TK_ASTERISK,0));
+ pEList = sqlite3ExprListAppend(pParse, 0,
+ sqlite3Expr(pParse->db,TK_ASTERISK,0));
}
pNew->pEList = pEList;
pNew->op = TK_SELECT;
@@ -117575,9 +118825,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(
pNew->pPrior = 0;
pNew->pNext = 0;
pNew->pLimit = pLimit;
- pNew->pOffset = pOffset;
pNew->pWith = 0;
- assert( pOffset==0 || pLimit!=0 || pParse->nErr>0 || pParse->db->mallocFailed!=0 );
if( pParse->db->mallocFailed ) {
clearSelect(pParse->db, pNew, pNew!=&standin);
pNew = 0;
@@ -117604,7 +118852,7 @@ SQLITE_PRIVATE void sqlite3SelectSetName(Select *p, const char *zName){
** Delete the given Select structure and all of its substructures.
*/
SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){
- if( p ) clearSelect(db, p, 1);
+ if( OK_IF_ALWAYS_TRUE(p) ) clearSelect(db, p, 1);
}
/*
@@ -117845,11 +119093,10 @@ static int sqliteProcessJoin(Parse *pParse, Select *p){
pLeft = &pSrc->a[0];
pRight = &pLeft[1];
for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
- Table *pLeftTab = pLeft->pTab;
Table *pRightTab = pRight->pTab;
int isOuter;
- if( NEVER(pLeftTab==0 || pRightTab==0) ) continue;
+ if( NEVER(pLeft->pTab==0 || pRightTab==0) ) continue;
isOuter = (pRight->fg.jointype & JT_OUTER)!=0;
/* When the NATURAL keyword is present, add WHERE clause terms for
@@ -117997,11 +119244,11 @@ static void pushOntoSorter(
if( pParse->db->mallocFailed ) return;
pOp->p2 = nKey + nData;
pKI = pOp->p4.pKeyInfo;
- memset(pKI->aSortOrder, 0, pKI->nField); /* Makes OP_Jump below testable */
+ memset(pKI->aSortOrder, 0, pKI->nKeyField); /* Makes OP_Jump testable */
sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO);
- testcase( pKI->nXField>2 );
+ testcase( pKI->nAllField > pKI->nKeyField+2 );
pOp->p4.pKeyInfo = keyInfoFromExprList(pParse, pSort->pOrderBy, nOBSat,
- pKI->nXField-1);
+ pKI->nAllField-pKI->nKeyField-1);
addrJmp = sqlite3VdbeCurrentAddr(v);
sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v);
pSort->labelBkOut = sqlite3VdbeMakeLabel(v);
@@ -118099,16 +119346,15 @@ static void codeDistinct(
** This routine generates the code for the inside of the inner loop
** of a SELECT.
**
-** If srcTab is negative, then the pEList expressions
+** If srcTab is negative, then the p->pEList expressions
** are evaluated in order to get the data for this row. If srcTab is
-** zero or more, then data is pulled from srcTab and pEList is used only
+** zero or more, then data is pulled from srcTab and p->pEList is used only
** to get the number of columns and the collation sequence for each column.
*/
static void selectInnerLoop(
Parse *pParse, /* The parser context */
Select *p, /* The complete select statement being coded */
- ExprList *pEList, /* List of values being extracted */
- int srcTab, /* Pull data from this table */
+ int srcTab, /* Pull data from this table if non-negative */
SortCtx *pSort, /* If not NULL, info on how to process ORDER BY */
DistinctCtx *pDistinct, /* If not NULL, info on how to process DISTINCT */
SelectDest *pDest, /* How to dispose of the results */
@@ -118132,7 +119378,7 @@ static void selectInnerLoop(
int regOrig; /* Start of memory holding full result (or 0) */
assert( v );
- assert( pEList!=0 );
+ assert( p->pEList!=0 );
hasDistinct = pDistinct ? pDistinct->eTnctType : WHERE_DISTINCT_NOOP;
if( pSort && pSort->pOrderBy==0 ) pSort = 0;
if( pSort==0 && !hasDistinct ){
@@ -118142,7 +119388,7 @@ static void selectInnerLoop(
/* Pull the requested columns.
*/
- nResultCol = pEList->nExpr;
+ nResultCol = p->pEList->nExpr;
if( pDest->iSdst==0 ){
if( pSort ){
@@ -118165,7 +119411,7 @@ static void selectInnerLoop(
if( srcTab>=0 ){
for(i=0; i<nResultCol; i++){
sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
- VdbeComment((v, "%s", pEList->a[i].zName));
+ VdbeComment((v, "%s", p->pEList->a[i].zName));
}
}else if( eDest!=SRT_Exists ){
/* If the destination is an EXISTS(...) expression, the actual
@@ -118178,24 +119424,25 @@ static void selectInnerLoop(
ecelFlags = 0;
}
if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){
- /* For each expression in pEList that is a copy of an expression in
+ /* For each expression in p->pEList that is a copy of an expression in
** the ORDER BY clause (pSort->pOrderBy), set the associated
** iOrderByCol value to one more than the index of the ORDER BY
** expression within the sort-key that pushOntoSorter() will generate.
- ** This allows the pEList field to be omitted from the sorted record,
+ ** This allows the p->pEList field to be omitted from the sorted record,
** saving space and CPU cycles. */
ecelFlags |= (SQLITE_ECEL_OMITREF|SQLITE_ECEL_REF);
for(i=pSort->nOBSat; i<pSort->pOrderBy->nExpr; i++){
int j;
if( (j = pSort->pOrderBy->a[i].u.x.iOrderByCol)>0 ){
- pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat;
+ p->pEList->a[j-1].u.x.iOrderByCol = i+1-pSort->nOBSat;
}
}
regOrig = 0;
assert( eDest==SRT_Set || eDest==SRT_Mem
|| eDest==SRT_Coroutine || eDest==SRT_Output );
}
- nResultCol = sqlite3ExprCodeExprList(pParse,pEList,regResult,0,ecelFlags);
+ nResultCol = sqlite3ExprCodeExprList(pParse,p->pEList,regResult,
+ 0,ecelFlags);
}
/* If the DISTINCT keyword was present on the SELECT statement
@@ -118227,7 +119474,7 @@ static void selectInnerLoop(
iJump = sqlite3VdbeCurrentAddr(v) + nResultCol;
for(i=0; i<nResultCol; i++){
- CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[i].pExpr);
+ CollSeq *pColl = sqlite3ExprCollSeq(pParse, p->pEList->a[i].pExpr);
if( i<nResultCol-1 ){
sqlite3VdbeAddOp3(v, OP_Ne, regResult+i, iJump, regPrev+i);
VdbeCoverage(v);
@@ -118470,8 +119717,8 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){
KeyInfo *p = sqlite3DbMallocRawNN(db, sizeof(KeyInfo) + nExtra);
if( p ){
p->aSortOrder = (u8*)&p->aColl[N+X];
- p->nField = (u16)N;
- p->nXField = (u16)X;
+ p->nKeyField = (u16)N;
+ p->nAllField = (u16)(N+X);
p->enc = ENC(db);
p->db = db;
p->nRef = 1;
@@ -118545,10 +119792,7 @@ static KeyInfo *keyInfoFromExprList(
if( pInfo ){
assert( sqlite3KeyInfoIsWriteable(pInfo) );
for(i=iStart, pItem=pList->a+iStart; i<nExpr; i++, pItem++){
- CollSeq *pColl;
- pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
- if( !pColl ) pColl = db->pDfltColl;
- pInfo->aColl[i-iStart] = pColl;
+ pInfo->aColl[i-iStart] = sqlite3ExprNNCollSeq(pParse, pItem->pExpr);
pInfo->aSortOrder[i-iStart] = pItem->sortOrder;
}
}
@@ -118798,23 +120042,23 @@ static void generateSortTail(
** the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used.
*/
#ifdef SQLITE_ENABLE_COLUMN_METADATA
-# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,C,D,E,F)
+# define columnType(A,B,C,D,E) columnTypeImpl(A,B,C,D,E)
#else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */
-# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,F)
+# define columnType(A,B,C,D,E) columnTypeImpl(A,B)
#endif
static const char *columnTypeImpl(
NameContext *pNC,
+#ifndef SQLITE_ENABLE_COLUMN_METADATA
+ Expr *pExpr
+#else
Expr *pExpr,
-#ifdef SQLITE_ENABLE_COLUMN_METADATA
const char **pzOrigDb,
const char **pzOrigTab,
- const char **pzOrigCol,
+ const char **pzOrigCol
#endif
- u8 *pEstWidth
){
char const *zType = 0;
int j;
- u8 estWidth = 1;
#ifdef SQLITE_ENABLE_COLUMN_METADATA
char const *zOrigDb = 0;
char const *zOrigTab = 0;
@@ -118823,8 +120067,9 @@ static const char *columnTypeImpl(
assert( pExpr!=0 );
assert( pNC->pSrcList!=0 );
+ assert( pExpr->op!=TK_AGG_COLUMN ); /* This routine runes before aggregates
+ ** are processed */
switch( pExpr->op ){
- case TK_AGG_COLUMN:
case TK_COLUMN: {
/* The expression is a column. Locate the table the column is being
** extracted from in NameContext.pSrcList. This table may be real
@@ -118833,8 +120078,6 @@ static const char *columnTypeImpl(
Table *pTab = 0; /* Table structure column is extracted from */
Select *pS = 0; /* Select the column is extracted from */
int iCol = pExpr->iColumn; /* Index of column in pTab */
- testcase( pExpr->op==TK_AGG_COLUMN );
- testcase( pExpr->op==TK_COLUMN );
while( pNC && !pTab ){
SrcList *pTabList = pNC->pSrcList;
for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
@@ -118883,33 +120126,32 @@ static const char *columnTypeImpl(
sNC.pSrcList = pS->pSrc;
sNC.pNext = pNC;
sNC.pParse = pNC->pParse;
- zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol, &estWidth);
+ zType = columnType(&sNC, p,&zOrigDb,&zOrigTab,&zOrigCol);
}
- }else if( pTab->pSchema ){
- /* A real table */
+ }else{
+ /* A real table or a CTE table */
assert( !pS );
- if( iCol<0 ) iCol = pTab->iPKey;
- assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
#ifdef SQLITE_ENABLE_COLUMN_METADATA
+ if( iCol<0 ) iCol = pTab->iPKey;
+ assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) );
if( iCol<0 ){
zType = "INTEGER";
zOrigCol = "rowid";
}else{
zOrigCol = pTab->aCol[iCol].zName;
zType = sqlite3ColumnType(&pTab->aCol[iCol],0);
- estWidth = pTab->aCol[iCol].szEst;
}
zOrigTab = pTab->zName;
- if( pNC->pParse ){
+ if( pNC->pParse && pTab->pSchema ){
int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
zOrigDb = pNC->pParse->db->aDb[iDb].zDbSName;
}
#else
+ assert( iCol==XN_ROWID || (iCol>=0 && iCol<pTab->nCol) );
if( iCol<0 ){
zType = "INTEGER";
}else{
zType = sqlite3ColumnType(&pTab->aCol[iCol],0);
- estWidth = pTab->aCol[iCol].szEst;
}
#endif
}
@@ -118928,7 +120170,7 @@ static const char *columnTypeImpl(
sNC.pSrcList = pS->pSrc;
sNC.pNext = pNC;
sNC.pParse = pNC->pParse;
- zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol, &estWidth);
+ zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
break;
}
#endif
@@ -118942,7 +120184,6 @@ static const char *columnTypeImpl(
*pzOrigCol = zOrigCol;
}
#endif
- if( pEstWidth ) *pEstWidth = estWidth;
return zType;
}
@@ -118969,7 +120210,7 @@ static void generateColumnTypes(
const char *zOrigDb = 0;
const char *zOrigTab = 0;
const char *zOrigCol = 0;
- zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol, 0);
+ zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
/* The vdbe must make its own copy of the column-type and other
** column specific strings, in case the schema is reset before this
@@ -118979,7 +120220,7 @@ static void generateColumnTypes(
sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
#else
- zType = columnType(&sNC, p, 0, 0, 0, 0);
+ zType = columnType(&sNC, p, 0, 0, 0);
#endif
sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
}
@@ -119009,9 +120250,9 @@ static void generateColumnTypes(
** other words, the zSpan of the result expression.
**
** short=ON, full=OFF: (This is the default setting). If the result
-** refers directly to a table column, then the result
-** column name is just the table column name: COLUMN.
-** Otherwise use zSpan.
+** refers directly to a table column, then the
+** result column name is just the table column
+** name: COLUMN. Otherwise use zSpan.
**
** full=ON, short=ANY: If the result refers directly to a table column,
** then the result column name with the table name
@@ -119040,6 +120281,7 @@ static void generateColumnNames(
if( pParse->colNamesSet || db->mallocFailed ) return;
/* Column names are determined by the left-most term of a compound select */
while( pSelect->pPrior ) pSelect = pSelect->pPrior;
+ SELECTTRACE(1,pParse,pSelect,("generating column names\n"));
pTabList = pSelect->pSrc;
pEList = pSelect->pEList;
assert( v!=0 );
@@ -119052,6 +120294,8 @@ static void generateColumnNames(
Expr *p = pEList->a[i].pExpr;
assert( p!=0 );
+ assert( p->op!=TK_AGG_COLUMN ); /* Agg processing has not run yet */
+ assert( p->op!=TK_COLUMN || p->pTab!=0 ); /* Covering idx not yet coded */
if( pEList->a[i].zName ){
/* An AS clause always takes first priority */
char *zName = pEList->a[i].zName;
@@ -119126,6 +120370,7 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
nCol = pEList->nExpr;
aCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
testcase( aCol==0 );
+ if( nCol>32767 ) nCol = 32767;
}else{
nCol = 0;
aCol = 0;
@@ -119145,10 +120390,12 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList(
pColExpr = pColExpr->pRight;
assert( pColExpr!=0 );
}
- if( pColExpr->op==TK_COLUMN && pColExpr->pTab!=0 ){
+ assert( pColExpr->op!=TK_AGG_COLUMN );
+ if( pColExpr->op==TK_COLUMN ){
/* For columns use the column name name */
int iCol = pColExpr->iColumn;
Table *pTab = pColExpr->pTab;
+ assert( pTab!=0 );
if( iCol<0 ) iCol = pTab->iPKey;
zName = iCol>=0 ? pTab->aCol[iCol].zName : "rowid";
}else if( pColExpr->op==TK_ID ){
@@ -119220,7 +120467,6 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
int i;
Expr *p;
struct ExprList_item *a;
- u64 szAll = 0;
assert( pSelect!=0 );
assert( (pSelect->selFlags & SF_Resolved)!=0 );
@@ -119233,10 +120479,11 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
const char *zType;
int n, m;
p = a[i].pExpr;
- zType = columnType(&sNC, p, 0, 0, 0, &pCol->szEst);
- szAll += pCol->szEst;
+ zType = columnType(&sNC, p, 0, 0, 0);
+ /* pCol->szEst = ... // Column size est for SELECT tables never used */
pCol->affinity = sqlite3ExprAffinity(p);
- if( zType && (m = sqlite3Strlen30(zType))>0 ){
+ if( zType ){
+ m = sqlite3Strlen30(zType);
n = sqlite3Strlen30(pCol->zName);
pCol->zName = sqlite3DbReallocOrFree(db, pCol->zName, n+m+2);
if( pCol->zName ){
@@ -119250,7 +120497,7 @@ SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
}
}
- pTab->szTabRow = sqlite3LogEst(szAll*4);
+ pTab->szTabRow = 1; /* Any non-zero value works */
}
/*
@@ -119293,25 +120540,22 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
** Get a VDBE for the given parser context. Create a new one if necessary.
** If an error occurs, return NULL and leave a message in pParse.
*/
-static SQLITE_NOINLINE Vdbe *allocVdbe(Parse *pParse){
- Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(pParse);
- if( v ) sqlite3VdbeAddOp2(v, OP_Init, 0, 1);
+SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
+ if( pParse->pVdbe ){
+ return pParse->pVdbe;
+ }
if( pParse->pToplevel==0
&& OptimizationEnabled(pParse->db,SQLITE_FactorOutConst)
){
pParse->okConstFactor = 1;
}
- return v;
-}
-SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
- Vdbe *v = pParse->pVdbe;
- return v ? v : allocVdbe(pParse);
+ return sqlite3VdbeCreate(pParse);
}
/*
** Compute the iLimit and iOffset fields of the SELECT based on the
-** pLimit and pOffset expressions. pLimit and pOffset hold the expressions
+** pLimit expressions. pLimit->pLeft and pLimit->pRight hold the expressions
** that appear in the original SQL statement after the LIMIT and OFFSET
** keywords. Or NULL if those keywords are omitted. iLimit and iOffset
** are the integer memory register numbers for counters used to compute
@@ -119319,15 +120563,15 @@ SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
** iLimit and iOffset are negative.
**
** This routine changes the values of iLimit and iOffset only if
-** a limit or offset is defined by pLimit and pOffset. iLimit and
-** iOffset should have been preset to appropriate default values (zero)
+** a limit or offset is defined by pLimit->pLeft and pLimit->pRight. iLimit
+** and iOffset should have been preset to appropriate default values (zero)
** prior to calling this routine.
**
** The iOffset register (if it exists) is initialized to the value
** of the OFFSET. The iLimit register is initialized to LIMIT. Register
** iOffset+1 is initialized to LIMIT+OFFSET.
**
-** Only if pLimit!=0 or pOffset!=0 do the limit registers get
+** Only if pLimit->pLeft!=0 do the limit registers get
** redefined. The UNION ALL operator uses this property to force
** the reuse of the same limit and offset registers across multiple
** SELECT statements.
@@ -119337,6 +120581,8 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
int iLimit = 0;
int iOffset;
int n;
+ Expr *pLimit = p->pLimit;
+
if( p->iLimit ) return;
/*
@@ -119346,12 +120592,13 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
** no rows.
*/
sqlite3ExprCacheClear(pParse);
- assert( p->pOffset==0 || p->pLimit!=0 );
- if( p->pLimit ){
+ if( pLimit ){
+ assert( pLimit->op==TK_LIMIT );
+ assert( pLimit->pLeft!=0 );
p->iLimit = iLimit = ++pParse->nMem;
v = sqlite3GetVdbe(pParse);
assert( v!=0 );
- if( sqlite3ExprIsInteger(p->pLimit, &n) ){
+ if( sqlite3ExprIsInteger(pLimit->pLeft, &n) ){
sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
VdbeComment((v, "LIMIT counter"));
if( n==0 ){
@@ -119361,15 +120608,15 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
p->selFlags |= SF_FixedLimit;
}
}else{
- sqlite3ExprCode(pParse, p->pLimit, iLimit);
+ sqlite3ExprCode(pParse, pLimit->pLeft, iLimit);
sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); VdbeCoverage(v);
VdbeComment((v, "LIMIT counter"));
sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, iBreak); VdbeCoverage(v);
}
- if( p->pOffset ){
+ if( pLimit->pRight ){
p->iOffset = iOffset = ++pParse->nMem;
pParse->nMem++; /* Allocate an extra register for limit+offset */
- sqlite3ExprCode(pParse, p->pOffset, iOffset);
+ sqlite3ExprCode(pParse, pLimit->pRight, iOffset);
sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); VdbeCoverage(v);
VdbeComment((v, "OFFSET counter"));
sqlite3VdbeAddOp3(v, OP_OffsetLimit, iLimit, iOffset+1, iOffset);
@@ -119499,7 +120746,7 @@ static void generateWithRecursiveQuery(
int i; /* Loop counter */
int rc; /* Result code */
ExprList *pOrderBy; /* The ORDER BY clause */
- Expr *pLimit, *pOffset; /* Saved LIMIT and OFFSET */
+ Expr *pLimit; /* Saved LIMIT and OFFSET */
int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */
/* Obtain authorization to do a recursive query */
@@ -119510,10 +120757,9 @@ static void generateWithRecursiveQuery(
p->nSelectRow = 320; /* 4 billion rows */
computeLimitRegisters(pParse, p, addrBreak);
pLimit = p->pLimit;
- pOffset = p->pOffset;
regLimit = p->iLimit;
regOffset = p->iOffset;
- p->pLimit = p->pOffset = 0;
+ p->pLimit = 0;
p->iLimit = p->iOffset = 0;
pOrderBy = p->pOrderBy;
@@ -119578,7 +120824,7 @@ static void generateWithRecursiveQuery(
/* Output the single row in Current */
addrCont = sqlite3VdbeMakeLabel(v);
codeOffset(v, regOffset, addrCont);
- selectInnerLoop(pParse, p, p->pEList, iCurrent,
+ selectInnerLoop(pParse, p, iCurrent,
0, 0, pDest, addrCont, addrBreak);
if( regLimit ){
sqlite3VdbeAddOp2(v, OP_DecrJumpZero, regLimit, addrBreak);
@@ -119606,7 +120852,6 @@ end_of_recursive_query:
sqlite3ExprListDelete(pParse->db, p->pOrderBy);
p->pOrderBy = pOrderBy;
p->pLimit = pLimit;
- p->pOffset = pOffset;
return;
}
#endif /* SQLITE_OMIT_CTE */
@@ -119625,9 +120870,14 @@ static int multiSelectOrderBy(
** on a VALUES clause.
**
** Because the Select object originates from a VALUES clause:
-** (1) It has no LIMIT or OFFSET
+** (1) There is no LIMIT or OFFSET or else there is a LIMIT of exactly 1
** (2) All terms are UNION ALL
** (3) There is no ORDER BY clause
+**
+** The "LIMIT of exactly 1" case of condition (1) comes about when a VALUES
+** clause occurs within scalar expression (ex: "SELECT (VALUES(1),(2),(3))").
+** The sqlite3CodeSubselect will have added the LIMIT 1 clause in tht case.
+** Since the limit is exactly 1, we only need to evalutes the left-most VALUES.
*/
static int multiSelectValues(
Parse *pParse, /* Parsing context */
@@ -119635,14 +120885,13 @@ static int multiSelectValues(
SelectDest *pDest /* What to do with query results */
){
Select *pPrior;
+ Select *pRightmost = p;
int nRow = 1;
int rc = 0;
assert( p->selFlags & SF_MultiValue );
do{
assert( p->selFlags & SF_Values );
assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) );
- assert( p->pLimit==0 );
- assert( p->pOffset==0 );
assert( p->pNext==0 || p->pEList->nExpr==p->pNext->pEList->nExpr );
if( p->pPrior==0 ) break;
assert( p->pPrior->pNext==p );
@@ -119654,7 +120903,7 @@ static int multiSelectValues(
p->pPrior = 0;
rc = sqlite3Select(pParse, p, pDest);
p->pPrior = pPrior;
- if( rc ) break;
+ if( rc || pRightmost->pLimit ) break;
p->nSelectRow = nRow;
p = p->pNext;
}
@@ -119716,15 +120965,9 @@ static int multiSelect(
db = pParse->db;
pPrior = p->pPrior;
dest = *pDest;
- if( pPrior->pOrderBy ){
- sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
- selectOpName(p->op));
- rc = 1;
- goto multi_select_end;
- }
- if( pPrior->pLimit ){
- sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
- selectOpName(p->op));
+ if( pPrior->pOrderBy || pPrior->pLimit ){
+ sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
+ pPrior->pOrderBy!=0 ? "ORDER BY" : "LIMIT", selectOpName(p->op));
rc = 1;
goto multi_select_end;
}
@@ -119775,11 +121018,9 @@ static int multiSelect(
pPrior->iLimit = p->iLimit;
pPrior->iOffset = p->iOffset;
pPrior->pLimit = p->pLimit;
- pPrior->pOffset = p->pOffset;
explainSetInteger(iSub1, pParse->iNextSelectId);
rc = sqlite3Select(pParse, pPrior, &dest);
p->pLimit = 0;
- p->pOffset = 0;
if( rc ){
goto multi_select_end;
}
@@ -119801,7 +121042,7 @@ static int multiSelect(
p->pPrior = pPrior;
p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
if( pPrior->pLimit
- && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
+ && sqlite3ExprIsInteger(pPrior->pLimit->pLeft, &nLimit)
&& nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit)
){
p->nSelectRow = sqlite3LogEst((u64)nLimit);
@@ -119816,7 +121057,7 @@ static int multiSelect(
int unionTab; /* Cursor number of the temporary table holding result */
u8 op = 0; /* One of the SRT_ operations to apply to self */
int priorOp; /* The SRT_ operation to apply to prior selects */
- Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
+ Expr *pLimit; /* Saved values of p->nLimit */
int addr;
SelectDest uniondest;
@@ -119828,7 +121069,6 @@ static int multiSelect(
** right.
*/
assert( p->pLimit==0 ); /* Not allowed on leftward elements */
- assert( p->pOffset==0 ); /* Not allowed on leftward elements */
unionTab = dest.iSDParm;
}else{
/* We will need to create our own temporary table to hold the
@@ -119864,8 +121104,6 @@ static int multiSelect(
p->pPrior = 0;
pLimit = p->pLimit;
p->pLimit = 0;
- pOffset = p->pOffset;
- p->pOffset = 0;
uniondest.eDest = op;
explainSetInteger(iSub2, pParse->iNextSelectId);
rc = sqlite3Select(pParse, p, &uniondest);
@@ -119881,7 +121119,6 @@ static int multiSelect(
}
sqlite3ExprDelete(db, p->pLimit);
p->pLimit = pLimit;
- p->pOffset = pOffset;
p->iLimit = 0;
p->iOffset = 0;
@@ -119897,7 +121134,7 @@ static int multiSelect(
computeLimitRegisters(pParse, p, iBreak);
sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v);
iStart = sqlite3VdbeCurrentAddr(v);
- selectInnerLoop(pParse, p, p->pEList, unionTab,
+ selectInnerLoop(pParse, p, unionTab,
0, 0, &dest, iCont, iBreak);
sqlite3VdbeResolveLabel(v, iCont);
sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v);
@@ -119909,7 +121146,7 @@ static int multiSelect(
default: assert( p->op==TK_INTERSECT ); {
int tab1, tab2;
int iCont, iBreak, iStart;
- Expr *pLimit, *pOffset;
+ Expr *pLimit;
int addr;
SelectDest intersectdest;
int r1;
@@ -119945,8 +121182,6 @@ static int multiSelect(
p->pPrior = 0;
pLimit = p->pLimit;
p->pLimit = 0;
- pOffset = p->pOffset;
- p->pOffset = 0;
intersectdest.iSDParm = tab2;
explainSetInteger(iSub2, pParse->iNextSelectId);
rc = sqlite3Select(pParse, p, &intersectdest);
@@ -119956,7 +121191,6 @@ static int multiSelect(
if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
sqlite3ExprDelete(db, p->pLimit);
p->pLimit = pLimit;
- p->pOffset = pOffset;
/* Generate code to take the intersection of the two temporary
** tables.
@@ -119970,7 +121204,7 @@ static int multiSelect(
iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1);
sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0); VdbeCoverage(v);
sqlite3ReleaseTempReg(pParse, r1);
- selectInnerLoop(pParse, p, p->pEList, tab1,
+ selectInnerLoop(pParse, p, tab1,
0, 0, &dest, iCont, iBreak);
sqlite3VdbeResolveLabel(v, iCont);
sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v);
@@ -120435,8 +121669,6 @@ static int multiSelectOrderBy(
}
sqlite3ExprDelete(db, p->pLimit);
p->pLimit = 0;
- sqlite3ExprDelete(db, p->pOffset);
- p->pOffset = 0;
regAddrA = ++pParse->nMem;
regAddrB = ++pParse->nMem;
@@ -120622,7 +121854,9 @@ static Expr *substExpr(
Expr *pExpr /* Expr in which substitution occurs */
){
if( pExpr==0 ) return 0;
- if( ExprHasProperty(pExpr, EP_FromJoin) && pExpr->iRightJoinTable==pSubst->iTable ){
+ if( ExprHasProperty(pExpr, EP_FromJoin)
+ && pExpr->iRightJoinTable==pSubst->iTable
+ ){
pExpr->iRightJoinTable = pSubst->iNewTable;
}
if( pExpr->op==TK_COLUMN && pExpr->iTable==pSubst->iTable ){
@@ -120735,68 +121969,74 @@ static void substSelect(
** exist on the table t1, a complete scan of the data might be
** avoided.
**
-** Flattening is only attempted if all of the following are true:
+** Flattening is subject to the following constraints:
**
-** (1) The subquery and the outer query do not both use aggregates.
+** (**) We no longer attempt to flatten aggregate subqueries. Was:
+** The subquery and the outer query cannot both be aggregates.
**
-** (2) The subquery is not an aggregate or (2a) the outer query is not a join
-** and (2b) the outer query does not use subqueries other than the one
-** FROM-clause subquery that is a candidate for flattening. (2b is
-** due to ticket [2f7170d73bf9abf80] from 2015-02-09.)
+** (**) We no longer attempt to flatten aggregate subqueries. Was:
+** (2) If the subquery is an aggregate then
+** (2a) the outer query must not be a join and
+** (2b) the outer query must not use subqueries
+** other than the one FROM-clause subquery that is a candidate
+** for flattening. (This is due to ticket [2f7170d73bf9abf80]
+** from 2015-02-09.)
**
-** (3) The subquery is not the right operand of a LEFT JOIN
-** or (a) the subquery is not itself a join and (b) the FROM clause
-** of the subquery does not contain a virtual table and (c) the
-** outer query is not an aggregate.
+** (3) If the subquery is the right operand of a LEFT JOIN then
+** (3a) the subquery may not be a join and
+** (3b) the FROM clause of the subquery may not contain a virtual
+** table and
+** (3c) the outer query may not be an aggregate.
**
-** (4) The subquery is not DISTINCT.
+** (4) The subquery can not be DISTINCT.
**
** (**) At one point restrictions (4) and (5) defined a subset of DISTINCT
** sub-queries that were excluded from this optimization. Restriction
** (4) has since been expanded to exclude all DISTINCT subqueries.
**
-** (6) The subquery does not use aggregates or the outer query is not
-** DISTINCT.
+** (**) We no longer attempt to flatten aggregate subqueries. Was:
+** If the subquery is aggregate, the outer query may not be DISTINCT.
**
-** (7) The subquery has a FROM clause. TODO: For subqueries without
+** (7) The subquery must have a FROM clause. TODO: For subqueries without
** A FROM clause, consider adding a FROM clause with the special
** table sqlite_once that consists of a single row containing a
** single NULL.
**
-** (8) The subquery does not use LIMIT or the outer query is not a join.
+** (8) If the subquery uses LIMIT then the outer query may not be a join.
**
-** (9) The subquery does not use LIMIT or the outer query does not use
-** aggregates.
+** (9) If the subquery uses LIMIT then the outer query may not be aggregate.
**
** (**) Restriction (10) was removed from the code on 2005-02-05 but we
** accidently carried the comment forward until 2014-09-15. Original
-** text: "The subquery does not use aggregates or the outer query
-** does not use LIMIT."
+** constraint: "If the subquery is aggregate then the outer query
+** may not use LIMIT."
**
-** (11) The subquery and the outer query do not both have ORDER BY clauses.
+** (11) The subquery and the outer query may not both have ORDER BY clauses.
**
** (**) Not implemented. Subsumed into restriction (3). Was previously
** a separate restriction deriving from ticket #350.
**
-** (13) The subquery and outer query do not both use LIMIT.
+** (13) The subquery and outer query may not both use LIMIT.
**
-** (14) The subquery does not use OFFSET.
+** (14) The subquery may not use OFFSET.
**
-** (15) The outer query is not part of a compound select or the
-** subquery does not have a LIMIT clause.
+** (15) If the outer query is part of a compound select, then the
+** subquery may not use LIMIT.
** (See ticket #2339 and ticket [02a8e81d44]).
**
-** (16) The outer query is not an aggregate or the subquery does
-** not contain ORDER BY. (Ticket #2942) This used to not matter
+** (16) If the outer query is aggregate, then the subquery may not
+** use ORDER BY. (Ticket #2942) This used to not matter
** until we introduced the group_concat() function.
**
-** (17) The sub-query is not a compound select, or it is a UNION ALL
-** compound clause made up entirely of non-aggregate queries, and
-** the parent query:
-**
-** * is not itself part of a compound select,
-** * is not an aggregate or DISTINCT query, and
-** * is not a join
+** (17) If the subquery is a compound select, then
+** (17a) all compound operators must be a UNION ALL, and
+** (17b) no terms within the subquery compound may be aggregate
+** or DISTINCT, and
+** (17c) every term within the subquery compound must have a FROM clause
+** (17d) the outer query may not be
+** (17d1) aggregate, or
+** (17d2) DISTINCT, or
+** (17d3) a join.
**
** The parent and sub-query may contain WHERE clauses. Subject to
** rules (11), (13) and (14), they may also contain ORDER BY,
@@ -120812,10 +122052,10 @@ static void substSelect(
** syntax error and return a detailed message.
**
** (18) If the sub-query is a compound select, then all terms of the
-** ORDER by clause of the parent must be simple references to
+** ORDER BY clause of the parent must be simple references to
** columns of the sub-query.
**
-** (19) The subquery does not use LIMIT or the outer query does not
+** (19) If the subquery uses LIMIT then the outer query may not
** have a WHERE clause.
**
** (20) If the sub-query is a compound select, then it must not use
@@ -120824,17 +122064,19 @@ static void substSelect(
** appear as unmodified result columns in the outer query. But we
** have other optimizations in mind to deal with that case.
**
-** (21) The subquery does not use LIMIT or the outer query is not
+** (21) If the subquery uses LIMIT then the outer query may not be
** DISTINCT. (See ticket [752e1646fc]).
**
-** (22) The subquery is not a recursive CTE.
+** (22) The subquery may not be a recursive CTE.
**
-** (23) The parent is not a recursive CTE, or the sub-query is not a
-** compound query. This restriction is because transforming the
+** (**) Subsumed into restriction (17d3). Was: If the outer query is
+** a recursive CTE, then the sub-query may not be a compound query.
+** This restriction is because transforming the
** parent to a compound query confuses the code that handles
** recursive queries in multiSelect().
**
-** (24) The subquery is not an aggregate that uses the built-in min() or
+** (**) We no longer attempt to flatten aggregate subqueries. Was:
+** The subquery may not be an aggregate that uses the built-in min() or
** or max() functions. (Without this restriction, a query like:
** "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily
** return the value X for which Y was maximal.)
@@ -120842,7 +122084,7 @@ static void substSelect(
**
** In this routine, the "p" parameter is a pointer to the outer query.
** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query
-** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
+** uses aggregates.
**
** If flattening is not attempted, this routine is a no-op and returns 0.
** If flattening is attempted this routine returns 1.
@@ -120854,8 +122096,7 @@ static int flattenSubquery(
Parse *pParse, /* Parsing context */
Select *p, /* The parent or outer SELECT statement */
int iFrom, /* Index in p->pSrc->a[] of the inner subquery */
- int isAgg, /* True if outer SELECT uses aggregate functions */
- int subqueryIsAgg /* True if the subquery uses aggregate functions */
+ int isAgg /* True if outer SELECT uses aggregate functions */
){
const char *zSavedAuthContext = pParse->zAuthContext;
Select *pParent; /* Current UNION ALL term of the other query */
@@ -120874,7 +122115,7 @@ static int flattenSubquery(
/* Check to see if flattening is permitted. Return 0 if not.
*/
assert( p!=0 );
- assert( p->pPrior==0 ); /* Unable to flatten compound queries */
+ assert( p->pPrior==0 );
if( OptimizationDisabled(db, SQLITE_QueryFlattener) ) return 0;
pSrc = p->pSrc;
assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
@@ -120882,16 +122123,6 @@ static int flattenSubquery(
iParent = pSubitem->iCursor;
pSub = pSubitem->pSelect;
assert( pSub!=0 );
- if( subqueryIsAgg ){
- if( isAgg ) return 0; /* Restriction (1) */
- if( pSrc->nSrc>1 ) return 0; /* Restriction (2a) */
- if( (p->pWhere && ExprHasProperty(p->pWhere,EP_Subquery))
- || (sqlite3ExprListFlags(p->pEList) & EP_Subquery)!=0
- || (sqlite3ExprListFlags(p->pOrderBy) & EP_Subquery)!=0
- ){
- return 0; /* Restriction (2b) */
- }
- }
pSubSrc = pSub->pSrc;
assert( pSubSrc );
@@ -120901,18 +122132,15 @@ static int flattenSubquery(
** became arbitrary expressions, we were forced to add restrictions (13)
** and (14). */
if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */
- if( pSub->pOffset ) return 0; /* Restriction (14) */
+ if( pSub->pLimit && pSub->pLimit->pRight ) return 0; /* Restriction (14) */
if( (p->selFlags & SF_Compound)!=0 && pSub->pLimit ){
return 0; /* Restriction (15) */
}
if( pSubSrc->nSrc==0 ) return 0; /* Restriction (7) */
- if( pSub->selFlags & SF_Distinct ) return 0; /* Restriction (5) */
+ if( pSub->selFlags & SF_Distinct ) return 0; /* Restriction (4) */
if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
return 0; /* Restrictions (8)(9) */
}
- if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){
- return 0; /* Restriction (6) */
- }
if( p->pOrderBy && pSub->pOrderBy ){
return 0; /* Restriction (11) */
}
@@ -120921,18 +122149,14 @@ static int flattenSubquery(
if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
return 0; /* Restriction (21) */
}
- testcase( pSub->selFlags & SF_Recursive );
- testcase( pSub->selFlags & SF_MinMaxAgg );
- if( pSub->selFlags & (SF_Recursive|SF_MinMaxAgg) ){
- return 0; /* Restrictions (22) and (24) */
- }
- if( (p->selFlags & SF_Recursive) && pSub->pPrior ){
- return 0; /* Restriction (23) */
+ if( pSub->selFlags & (SF_Recursive) ){
+ return 0; /* Restrictions (22) */
}
/*
** If the subquery is the right operand of a LEFT JOIN, then the
- ** subquery may not be a join itself. Example of why this is not allowed:
+ ** subquery may not be a join itself (3a). Example of why this is not
+ ** allowed:
**
** t1 LEFT OUTER JOIN (t2 JOIN t3)
**
@@ -120943,54 +122167,56 @@ static int flattenSubquery(
** which is not at all the same thing.
**
** If the subquery is the right operand of a LEFT JOIN, then the outer
- ** query cannot be an aggregate. This is an artifact of the way aggregates
- ** are processed - there is no mechanism to determine if the LEFT JOIN
- ** table should be all-NULL.
+ ** query cannot be an aggregate. (3c) This is an artifact of the way
+ ** aggregates are processed - there is no mechanism to determine if
+ ** the LEFT JOIN table should be all-NULL.
**
** See also tickets #306, #350, and #3300.
*/
if( (pSubitem->fg.jointype & JT_OUTER)!=0 ){
isLeftJoin = 1;
if( pSubSrc->nSrc>1 || isAgg || IsVirtual(pSubSrc->a[0].pTab) ){
- return 0; /* Restriction (3) */
+ /* (3a) (3c) (3b) */
+ return 0;
}
}
#ifdef SQLITE_EXTRA_IFNULLROW
else if( iFrom>0 && !isAgg ){
/* Setting isLeftJoin to -1 causes OP_IfNullRow opcodes to be generated for
- ** every reference to any result column from subquery in a join, even though
- ** they are not necessary. This will stress-test the OP_IfNullRow opcode. */
+ ** every reference to any result column from subquery in a join, even
+ ** though they are not necessary. This will stress-test the OP_IfNullRow
+ ** opcode. */
isLeftJoin = -1;
}
#endif
- /* Restriction 17: If the sub-query is a compound SELECT, then it must
+ /* Restriction (17): If the sub-query is a compound SELECT, then it must
** use only the UNION ALL operator. And none of the simple select queries
** that make up the compound SELECT are allowed to be aggregate or distinct
** queries.
*/
if( pSub->pPrior ){
if( pSub->pOrderBy ){
- return 0; /* Restriction 20 */
+ return 0; /* Restriction (20) */
}
if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
- return 0;
+ return 0; /* (17d1), (17d2), or (17d3) */
}
for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
assert( pSub->pSrc!=0 );
assert( pSub->pEList->nExpr==pSub1->pEList->nExpr );
- if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0
- || (pSub1->pPrior && pSub1->op!=TK_ALL)
- || pSub1->pSrc->nSrc<1
+ if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0 /* (17b) */
+ || (pSub1->pPrior && pSub1->op!=TK_ALL) /* (17a) */
+ || pSub1->pSrc->nSrc<1 /* (17c) */
){
return 0;
}
testcase( pSub1->pSrc->nSrc>1 );
}
- /* Restriction 18. */
+ /* Restriction (18). */
if( p->pOrderBy ){
int ii;
for(ii=0; ii<p->pOrderBy->nExpr; ii++){
@@ -120999,6 +122225,14 @@ static int flattenSubquery(
}
}
+ /* Ex-restriction (23):
+ ** The only way that the recursive part of a CTE can contain a compound
+ ** subquery is for the subquery to be one term of a join. But if the
+ ** subquery is a join, then the flattening has already been stopped by
+ ** restriction (17d3)
+ */
+ assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 );
+
/***** If we reach this point, flattening is permitted. *****/
SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n",
pSub->zSelName, pSub, iFrom));
@@ -121046,16 +122280,13 @@ static int flattenSubquery(
Select *pNew;
ExprList *pOrderBy = p->pOrderBy;
Expr *pLimit = p->pLimit;
- Expr *pOffset = p->pOffset;
Select *pPrior = p->pPrior;
p->pOrderBy = 0;
p->pSrc = 0;
p->pPrior = 0;
p->pLimit = 0;
- p->pOffset = 0;
pNew = sqlite3SelectDup(db, p, 0);
sqlite3SelectSetName(pNew, pSub->zSelName);
- p->pOffset = pOffset;
p->pLimit = pLimit;
p->pOrderBy = pOrderBy;
p->pSrc = pSrc;
@@ -121211,18 +122442,7 @@ static int flattenSubquery(
if( isLeftJoin>0 ){
setJoinExpr(pWhere, iNewParent);
}
- if( subqueryIsAgg ){
- assert( pParent->pHaving==0 );
- pParent->pHaving = pParent->pWhere;
- pParent->pWhere = pWhere;
- pParent->pHaving = sqlite3ExprAnd(db,
- sqlite3ExprDup(db, pSub->pHaving, 0), pParent->pHaving
- );
- assert( pParent->pGroupBy==0 );
- pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0);
- }else{
- pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere);
- }
+ pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere);
if( db->mallocFailed==0 ){
SubstContext x;
x.pParse = pParse;
@@ -121285,9 +122505,13 @@ static int flattenSubquery(
**
** Do not attempt this optimization if:
**
-** (1) The inner query is an aggregate. (In that case, we'd really want
-** to copy the outer WHERE-clause terms onto the HAVING clause of the
-** inner query. But they probably won't help there so do not bother.)
+** (1) (** This restriction was removed on 2017-09-29. We used to
+** disallow this optimization for aggregate subqueries, but now
+** it is allowed by putting the extra terms on the HAVING clause.
+** The added HAVING clause is pointless if the subquery lacks
+** a GROUP BY clause. But such a HAVING clause is also harmless
+** so there does not appear to be any reason to add extra logic
+** to suppress it. **)
**
** (2) The inner query is the recursive part of a common table expression.
**
@@ -121312,16 +122536,22 @@ static int pushDownWhereTerms(
){
Expr *pNew;
int nChng = 0;
- Select *pX; /* For looping over compound SELECTs in pSubq */
if( pWhere==0 ) return 0;
- for(pX=pSubq; pX; pX=pX->pPrior){
- if( (pX->selFlags & (SF_Aggregate|SF_Recursive))!=0 ){
- testcase( pX->selFlags & SF_Aggregate );
- testcase( pX->selFlags & SF_Recursive );
- testcase( pX!=pSubq );
- return 0; /* restrictions (1) and (2) */
+ if( pSubq->selFlags & SF_Recursive ) return 0; /* restriction (2) */
+
+#ifdef SQLITE_DEBUG
+ /* Only the first term of a compound can have a WITH clause. But make
+ ** sure no other terms are marked SF_Recursive in case something changes
+ ** in the future.
+ */
+ {
+ Select *pX;
+ for(pX=pSubq; pX; pX=pX->pPrior){
+ assert( (pX->selFlags & (SF_Recursive))==0 );
}
}
+#endif
+
if( pSubq->pLimit!=0 ){
return 0; /* restriction (3) */
}
@@ -121329,7 +122559,7 @@ static int pushDownWhereTerms(
nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, iCursor);
pWhere = pWhere->pLeft;
}
- if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction 5 */
+ if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction (5) */
if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){
nChng++;
while( pSubq ){
@@ -121341,7 +122571,11 @@ static int pushDownWhereTerms(
x.isLeftJoin = 0;
x.pEList = pSubq->pEList;
pNew = substExpr(&x, pNew);
- pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew);
+ if( pSubq->selFlags & SF_Aggregate ){
+ pSubq->pHaving = sqlite3ExprAnd(pParse->db, pSubq->pHaving, pNew);
+ }else{
+ pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew);
+ }
pSubq = pSubq->pPrior;
}
}
@@ -121350,42 +122584,44 @@ static int pushDownWhereTerms(
#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
/*
-** Based on the contents of the AggInfo structure indicated by the first
-** argument, this function checks if the following are true:
+** The pFunc is the only aggregate function in the query. Check to see
+** if the query is a candidate for the min/max optimization.
**
-** * the query contains just a single aggregate function,
-** * the aggregate function is either min() or max(), and
-** * the argument to the aggregate function is a column value.
+** If the query is a candidate for the min/max optimization, then set
+** *ppMinMax to be an ORDER BY clause to be used for the optimization
+** and return either WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX depending on
+** whether pFunc is a min() or max() function.
**
-** If all of the above are true, then WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX
-** is returned as appropriate. Also, *ppMinMax is set to point to the
-** list of arguments passed to the aggregate before returning.
+** If the query is not a candidate for the min/max optimization, return
+** WHERE_ORDERBY_NORMAL (which must be zero).
**
-** Or, if the conditions above are not met, *ppMinMax is set to 0 and
-** WHERE_ORDERBY_NORMAL is returned.
+** This routine must be called after aggregate functions have been
+** located but before their arguments have been subjected to aggregate
+** analysis.
*/
-static u8 minMaxQuery(AggInfo *pAggInfo, ExprList **ppMinMax){
- int eRet = WHERE_ORDERBY_NORMAL; /* Return value */
-
- *ppMinMax = 0;
- if( pAggInfo->nFunc==1 ){
- Expr *pExpr = pAggInfo->aFunc[0].pExpr; /* Aggregate function */
- ExprList *pEList = pExpr->x.pList; /* Arguments to agg function */
-
- assert( pExpr->op==TK_AGG_FUNCTION );
- if( pEList && pEList->nExpr==1 && pEList->a[0].pExpr->op==TK_AGG_COLUMN ){
- const char *zFunc = pExpr->u.zToken;
- if( sqlite3StrICmp(zFunc, "min")==0 ){
- eRet = WHERE_ORDERBY_MIN;
- *ppMinMax = pEList;
- }else if( sqlite3StrICmp(zFunc, "max")==0 ){
- eRet = WHERE_ORDERBY_MAX;
- *ppMinMax = pEList;
- }
- }
- }
-
- assert( *ppMinMax==0 || (*ppMinMax)->nExpr==1 );
+static u8 minMaxQuery(sqlite3 *db, Expr *pFunc, ExprList **ppMinMax){
+ int eRet = WHERE_ORDERBY_NORMAL; /* Return value */
+ ExprList *pEList = pFunc->x.pList; /* Arguments to agg function */
+ const char *zFunc; /* Name of aggregate function pFunc */
+ ExprList *pOrderBy;
+ u8 sortOrder;
+
+ assert( *ppMinMax==0 );
+ assert( pFunc->op==TK_AGG_FUNCTION );
+ if( pEList==0 || pEList->nExpr!=1 ) return eRet;
+ zFunc = pFunc->u.zToken;
+ if( sqlite3StrICmp(zFunc, "min")==0 ){
+ eRet = WHERE_ORDERBY_MIN;
+ sortOrder = SQLITE_SO_ASC;
+ }else if( sqlite3StrICmp(zFunc, "max")==0 ){
+ eRet = WHERE_ORDERBY_MAX;
+ sortOrder = SQLITE_SO_DESC;
+ }else{
+ return eRet;
+ }
+ *ppMinMax = pOrderBy = sqlite3ExprListDup(db, pEList, 0);
+ assert( pOrderBy!=0 || db->mallocFailed );
+ if( pOrderBy ) pOrderBy->a[0].sortOrder = sortOrder;
return eRet;
}
@@ -121516,7 +122752,6 @@ static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){
assert( pNew->pPrior!=0 );
pNew->pPrior->pNext = pNew;
pNew->pLimit = 0;
- pNew->pOffset = 0;
return WRC_Continue;
}
@@ -121669,7 +122904,8 @@ static int withExpand(
);
return SQLITE_ERROR;
}
- assert( pTab->nTabRef==1 || ((pSel->selFlags&SF_Recursive) && pTab->nTabRef==2 ));
+ assert( pTab->nTabRef==1 ||
+ ((pSel->selFlags&SF_Recursive) && pTab->nTabRef==2 ));
pCte->zCteErr = "circular reference: %s";
pSavedWith = pParse->pWith;
@@ -121726,7 +122962,7 @@ static int withExpand(
*/
static void selectPopWith(Walker *pWalker, Select *p){
Parse *pParse = pWalker->pParse;
- if( pParse->pWith && p->pPrior==0 ){
+ if( OK_IF_ALWAYS_TRUE(pParse->pWith) && p->pPrior==0 ){
With *pWith = findRightmost(p)->pWith;
if( pWith!=0 ){
assert( pParse->pWith==pWith );
@@ -121771,17 +123007,19 @@ static int selectExpander(Walker *pWalker, Select *p){
sqlite3 *db = pParse->db;
Expr *pE, *pRight, *pExpr;
u16 selFlags = p->selFlags;
+ u32 elistFlags = 0;
p->selFlags |= SF_Expanded;
if( db->mallocFailed ){
return WRC_Abort;
}
- if( NEVER(p->pSrc==0) || (selFlags & SF_Expanded)!=0 ){
+ assert( p->pSrc!=0 );
+ if( (selFlags & SF_Expanded)!=0 ){
return WRC_Prune;
}
pTabList = p->pSrc;
pEList = p->pEList;
- if( p->pWith ){
+ if( OK_IF_ALWAYS_TRUE(p->pWith) ){
sqlite3WithPush(pParse, p->pWith, 0);
}
@@ -121813,7 +123051,11 @@ static int selectExpander(Walker *pWalker, Select *p){
pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
if( pTab==0 ) return WRC_Abort;
pTab->nTabRef = 1;
- pTab->zName = sqlite3MPrintf(db, "sqlite_sq_%p", (void*)pTab);
+ if( pFrom->zAlias ){
+ pTab->zName = sqlite3DbStrDup(db, pFrom->zAlias);
+ }else{
+ pTab->zName = sqlite3MPrintf(db, "subquery_%p", (void*)pTab);
+ }
while( pSel->pPrior ){ pSel = pSel->pPrior; }
sqlite3ColumnsFromExprList(pParse, pSel->pEList,&pTab->nCol,&pTab->aCol);
pTab->iPKey = -1;
@@ -121879,6 +123121,7 @@ static int selectExpander(Walker *pWalker, Select *p){
assert( pE->op!=TK_DOT || pE->pRight!=0 );
assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break;
+ elistFlags |= pE->flags;
}
if( k<pEList->nExpr ){
/*
@@ -121894,6 +123137,7 @@ static int selectExpander(Walker *pWalker, Select *p){
for(k=0; k<pEList->nExpr; k++){
pE = a[k].pExpr;
+ elistFlags |= pE->flags;
pRight = pE->pRight;
assert( pE->op!=TK_DOT || pRight!=0 );
if( pE->op!=TK_ASTERISK
@@ -122023,12 +123267,15 @@ static int selectExpander(Walker *pWalker, Select *p){
sqlite3ExprListDelete(db, pEList);
p->pEList = pNew;
}
-#if SQLITE_MAX_COLUMN
- if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
- sqlite3ErrorMsg(pParse, "too many columns in result set");
- return WRC_Abort;
+ if( p->pEList ){
+ if( p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
+ sqlite3ErrorMsg(pParse, "too many columns in result set");
+ return WRC_Abort;
+ }
+ if( (elistFlags & (EP_HasFunc|EP_Subquery))!=0 ){
+ p->selFlags |= SF_ComplexResult;
+ }
}
-#endif
return WRC_Continue;
}
@@ -122082,7 +123329,7 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
Walker w;
w.xExprCallback = sqlite3ExprWalkNoop;
w.pParse = pParse;
- if( pParse->hasCompound ){
+ if( OK_IF_ALWAYS_TRUE(pParse->hasCompound) ){
w.xSelectCallback = convertCompoundSelectToSubquery;
w.xSelectCallback2 = 0;
sqlite3WalkSelect(&w, pSelect);
@@ -122170,15 +123417,13 @@ SQLITE_PRIVATE void sqlite3SelectPrep(
Select *p, /* The SELECT statement being coded. */
NameContext *pOuterNC /* Name context for container */
){
- sqlite3 *db;
- if( NEVER(p==0) ) return;
- db = pParse->db;
- if( db->mallocFailed ) return;
+ assert( p!=0 || pParse->db->mallocFailed );
+ if( pParse->db->mallocFailed ) return;
if( p->selFlags & SF_HasTypeInfo ) return;
sqlite3SelectExpand(pParse, p);
- if( pParse->nErr || db->mallocFailed ) return;
+ if( pParse->nErr || pParse->db->mallocFailed ) return;
sqlite3ResolveSelectNames(pParse, p, pOuterNC);
- if( pParse->nErr || db->mallocFailed ) return;
+ if( pParse->nErr || pParse->db->mallocFailed ) return;
sqlite3SelectAddTypeInfo(pParse, p);
}
@@ -122473,24 +123718,24 @@ static int countOfViewOptimization(Parse *pParse, Select *p){
Expr *pExpr;
Expr *pCount;
sqlite3 *db;
- if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate query */
+ if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate */
if( p->pEList->nExpr!=1 ) return 0; /* Single result column */
pExpr = p->pEList->a[0].pExpr;
if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */
- if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Must be count() */
+ if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Is count() */
if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */
- if( p->pSrc->nSrc!=1 ) return 0; /* One table in the FROM clause */
+ if( p->pSrc->nSrc!=1 ) return 0; /* One table in FROM */
pSub = p->pSrc->a[0].pSelect;
if( pSub==0 ) return 0; /* The FROM is a subquery */
- if( pSub->pPrior==0 ) return 0; /* Must be a compound subquery */
+ if( pSub->pPrior==0 ) return 0; /* Must be a compound ry */
do{
if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */
if( pSub->pWhere ) return 0; /* No WHERE clause */
if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */
- pSub = pSub->pPrior; /* Repeat over compound terms */
+ pSub = pSub->pPrior; /* Repeat over compound */
}while( pSub );
- /* If we reach this point, that means it is OK to perform the transformation */
+ /* If we reach this point then it is OK to perform the transformation */
db = pParse->db;
pCount = pExpr;
@@ -122565,6 +123810,8 @@ SQLITE_PRIVATE int sqlite3Select(
AggInfo sAggInfo; /* Information used by aggregate queries */
int iEnd; /* Address of the end of the query */
sqlite3 *db; /* The database connection */
+ ExprList *pMinMaxOrderBy = 0; /* Added ORDER BY for min/max queries */
+ u8 minMaxFlag; /* Flag for min/max queries */
#ifndef SQLITE_OMIT_EXPLAIN
int iRestoreSelectId = pParse->iSelectId;
@@ -122630,7 +123877,6 @@ SQLITE_PRIVATE int sqlite3Select(
for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
struct SrcList_item *pItem = &pTabList->a[i];
Select *pSub = pItem->pSelect;
- int isAggSub;
Table *pTab = pItem->pTab;
if( pSub==0 ) continue;
@@ -122642,13 +123888,45 @@ SQLITE_PRIVATE int sqlite3Select(
goto select_end;
}
- isAggSub = (pSub->selFlags & SF_Aggregate)!=0;
- if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
+ /* Do not try to flatten an aggregate subquery.
+ **
+ ** Flattening an aggregate subquery is only possible if the outer query
+ ** is not a join. But if the outer query is not a join, then the subquery
+ ** will be implemented as a co-routine and there is no advantage to
+ ** flattening in that case.
+ */
+ if( (pSub->selFlags & SF_Aggregate)!=0 ) continue;
+ assert( pSub->pGroupBy==0 );
+
+ /* If the outer query contains a "complex" result set (that is,
+ ** if the result set of the outer query uses functions or subqueries)
+ ** and if the subquery contains an ORDER BY clause and if
+ ** it will be implemented as a co-routine, then do not flatten. This
+ ** restriction allows SQL constructs like this:
+ **
+ ** SELECT expensive_function(x)
+ ** FROM (SELECT x FROM tab ORDER BY y LIMIT 10);
+ **
+ ** The expensive_function() is only computed on the 10 rows that
+ ** are output, rather than every row of the table.
+ **
+ ** The requirement that the outer query have a complex result set
+ ** means that flattening does occur on simpler SQL constraints without
+ ** the expensive_function() like:
+ **
+ ** SELECT x FROM (SELECT x FROM tab ORDER BY y LIMIT 10);
+ */
+ if( pSub->pOrderBy!=0
+ && i==0
+ && (p->selFlags & SF_ComplexResult)!=0
+ && (pTabList->nSrc==1
+ || (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0)
+ ){
+ continue;
+ }
+
+ if( flattenSubquery(pParse, p, i, isAgg) ){
/* This subquery can be absorbed into its parent. */
- if( isAggSub ){
- isAgg = 1;
- p->selFlags |= SF_Aggregate;
- }
i = -1;
}
pTabList = p->pSrc;
@@ -122682,10 +123960,14 @@ SQLITE_PRIVATE int sqlite3Select(
struct SrcList_item *pItem = &pTabList->a[i];
SelectDest dest;
Select *pSub;
+#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
+ const char *zSavedAuthContext;
+#endif
- /* Issue SQLITE_READ authorizations with a fake column name for any tables that
- ** are referenced but from which no values are extracted. Examples of where these
- ** kinds of null SQLITE_READ authorizations would occur:
+ /* Issue SQLITE_READ authorizations with a fake column name for any
+ ** tables that are referenced but from which no values are extracted.
+ ** Examples of where these kinds of null SQLITE_READ authorizations
+ ** would occur:
**
** SELECT count(*) FROM t1; -- SQLITE_READ t1.""
** SELECT t1.* FROM t1, t2; -- SQLITE_READ t2.""
@@ -122693,10 +123975,10 @@ SQLITE_PRIVATE int sqlite3Select(
** The fake column name is an empty string. It is possible for a table to
** have a column named by the empty string, in which case there is no way to
** distinguish between an unreferenced table and an actual reference to the
- ** "" column. The original design was for the fake column name to be a NULL,
+ ** "" column. The original design was for the fake column name to be a NULL,
** which would be unambiguous. But legacy authorization callbacks might
- ** assume the column name is non-NULL and segfault. The use of an empty string
- ** for the fake column name seems safer.
+ ** assume the column name is non-NULL and segfault. The use of an empty
+ ** string for the fake column name seems safer.
*/
if( pItem->colUsed==0 ){
sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase);
@@ -122748,16 +124030,14 @@ SQLITE_PRIVATE int sqlite3Select(
#endif
}
+ zSavedAuthContext = pParse->zAuthContext;
+ pParse->zAuthContext = pItem->zName;
+
/* Generate code to implement the subquery
**
- ** The subquery is implemented as a co-routine if all of these are true:
- ** (1) The subquery is guaranteed to be the outer loop (so that it
- ** does not need to be computed more than once)
- ** (2) The ALL keyword after SELECT is omitted. (Applications are
- ** allowed to say "SELECT ALL" instead of just "SELECT" to disable
- ** the use of co-routines.)
- ** (3) Co-routines are not disabled using sqlite3_test_control()
- ** with SQLITE_TESTCTRL_OPTIMIZATIONS.
+ ** The subquery is implemented as a co-routine if the subquery is
+ ** guaranteed to be the outer loop (so that it does not need to be
+ ** computed more than once)
**
** TODO: Are there other reasons beside (1) to use a co-routine
** implementation?
@@ -122765,13 +124045,12 @@ SQLITE_PRIVATE int sqlite3Select(
if( i==0
&& (pTabList->nSrc==1
|| (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0) /* (1) */
- && (p->selFlags & SF_All)==0 /* (2) */
- && OptimizationEnabled(db, SQLITE_SubqCoroutine) /* (3) */
){
/* Implement a co-routine that will return a single row of the result
** set on each invocation.
*/
int addrTop = sqlite3VdbeCurrentAddr(v)+1;
+
pItem->regReturn = ++pParse->nMem;
sqlite3VdbeAddOp3(v, OP_InitCoroutine, pItem->regReturn, 0, addrTop);
VdbeComment((v, "%s", pItem->pTab->zName));
@@ -122829,6 +124108,7 @@ SQLITE_PRIVATE int sqlite3Select(
}
if( db->mallocFailed ) goto select_end;
pParse->nHeight -= sqlite3SelectExprHeight(p);
+ pParse->zAuthContext = zSavedAuthContext;
#endif
}
@@ -122976,7 +124256,8 @@ SQLITE_PRIVATE int sqlite3Select(
}
/* Use the standard inner loop. */
- selectInnerLoop(pParse, p, pEList, -1, &sSort, &sDistinct, pDest,
+ assert( p->pEList==pEList );
+ selectInnerLoop(pParse, p, -1, &sSort, &sDistinct, pDest,
sqlite3WhereContinueLabel(pWInfo),
sqlite3WhereBreakLabel(pWInfo));
@@ -123056,6 +124337,11 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
}
sAggInfo.nAccumulator = sAggInfo.nColumn;
+ if( p->pGroupBy==0 && p->pHaving==0 && sAggInfo.nFunc==1 ){
+ minMaxFlag = minMaxQuery(db, sAggInfo.aFunc[0].pExpr, &pMinMaxOrderBy);
+ }else{
+ minMaxFlag = WHERE_ORDERBY_NORMAL;
+ }
for(i=0; i<sAggInfo.nFunc; i++){
assert( !ExprHasProperty(sAggInfo.aFunc[i].pExpr, EP_xIsSelect) );
sNC.ncFlags |= NC_InAggFunc;
@@ -123064,6 +124350,24 @@ SQLITE_PRIVATE int sqlite3Select(
}
sAggInfo.mxReg = pParse->nMem;
if( db->mallocFailed ) goto select_end;
+#if SELECTTRACE_ENABLED
+ if( sqlite3SelectTrace & 0x400 ){
+ int ii;
+ SELECTTRACE(0x400,pParse,p,("After aggregate analysis:\n"));
+ sqlite3TreeViewSelect(0, p, 0);
+ for(ii=0; ii<sAggInfo.nColumn; ii++){
+ sqlite3DebugPrintf("agg-column[%d] iMem=%d\n",
+ ii, sAggInfo.aCol[ii].iMem);
+ sqlite3TreeViewExpr(0, sAggInfo.aCol[ii].pExpr, 0);
+ }
+ for(ii=0; ii<sAggInfo.nFunc; ii++){
+ sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
+ ii, sAggInfo.aFunc[ii].iMem);
+ sqlite3TreeViewExpr(0, sAggInfo.aFunc[ii].pExpr, 0);
+ }
+ }
+#endif
+
/* Processing for aggregates with GROUP BY is very different and
** much more complex than aggregates without a GROUP BY.
@@ -123279,7 +124583,7 @@ SQLITE_PRIVATE int sqlite3Select(
sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
finalizeAggFunctions(pParse, &sAggInfo);
sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
- selectInnerLoop(pParse, p, p->pEList, -1, &sSort,
+ selectInnerLoop(pParse, p, -1, &sSort,
&sDistinct, pDest,
addrOutputRow+1, addrSetAbort);
sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
@@ -123293,7 +124597,6 @@ SQLITE_PRIVATE int sqlite3Select(
} /* endif pGroupBy. Begin aggregate queries without GROUP BY: */
else {
- ExprList *pDel = 0;
#ifndef SQLITE_OMIT_BTREECOUNT
Table *pTab;
if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){
@@ -123355,67 +124658,31 @@ SQLITE_PRIVATE int sqlite3Select(
}else
#endif /* SQLITE_OMIT_BTREECOUNT */
{
- /* Check if the query is of one of the following forms:
- **
- ** SELECT min(x) FROM ...
- ** SELECT max(x) FROM ...
- **
- ** If it is, then ask the code in where.c to attempt to sort results
- ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause.
- ** If where.c is able to produce results sorted in this order, then
- ** add vdbe code to break out of the processing loop after the
- ** first iteration (since the first iteration of the loop is
- ** guaranteed to operate on the row with the minimum or maximum
- ** value of x, the only row required).
- **
- ** A special flag must be passed to sqlite3WhereBegin() to slightly
- ** modify behavior as follows:
- **
- ** + If the query is a "SELECT min(x)", then the loop coded by
- ** where.c should not iterate over any values with a NULL value
- ** for x.
- **
- ** + The optimizer code in where.c (the thing that decides which
- ** index or indices to use) should place a different priority on
- ** satisfying the 'ORDER BY' clause than it does in other cases.
- ** Refer to code and comments in where.c for details.
- */
- ExprList *pMinMax = 0;
- u8 flag = WHERE_ORDERBY_NORMAL;
-
- assert( p->pGroupBy==0 );
- assert( flag==0 );
- if( p->pHaving==0 ){
- flag = minMaxQuery(&sAggInfo, &pMinMax);
- }
- assert( flag==0 || (pMinMax!=0 && pMinMax->nExpr==1) );
-
- if( flag ){
- pMinMax = sqlite3ExprListDup(db, pMinMax, 0);
- pDel = pMinMax;
- assert( db->mallocFailed || pMinMax!=0 );
- if( !db->mallocFailed ){
- pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0;
- pMinMax->a[0].pExpr->op = TK_COLUMN;
- }
- }
-
/* This case runs if the aggregate has no GROUP BY clause. The
** processing is much simpler since there is only a single row
** of output.
*/
+ assert( p->pGroupBy==0 );
resetAccumulator(pParse, &sAggInfo);
- pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMax, 0,flag,0);
+
+ /* If this query is a candidate for the min/max optimization, then
+ ** minMaxFlag will have been previously set to either
+ ** WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX and pMinMaxOrderBy will
+ ** be an appropriate ORDER BY expression for the optimization.
+ */
+ assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 );
+ assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 );
+
+ pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy,
+ 0, minMaxFlag, 0);
if( pWInfo==0 ){
- sqlite3ExprListDelete(db, pDel);
goto select_end;
}
updateAccumulator(pParse, &sAggInfo);
- assert( pMinMax==0 || pMinMax->nExpr==1 );
if( sqlite3WhereIsOrdered(pWInfo)>0 ){
sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo));
VdbeComment((v, "%s() by index",
- (flag==WHERE_ORDERBY_MIN?"min":"max")));
+ (minMaxFlag==WHERE_ORDERBY_MIN?"min":"max")));
}
sqlite3WhereEnd(pWInfo);
finalizeAggFunctions(pParse, &sAggInfo);
@@ -123423,9 +124690,8 @@ SQLITE_PRIVATE int sqlite3Select(
sSort.pOrderBy = 0;
sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
- selectInnerLoop(pParse, p, p->pEList, -1, 0, 0,
+ selectInnerLoop(pParse, p, -1, 0, 0,
pDest, addrEnd, addrEnd);
- sqlite3ExprListDelete(db, pDel);
}
sqlite3VdbeResolveLabel(v, addrEnd);
@@ -123457,7 +124723,7 @@ SQLITE_PRIVATE int sqlite3Select(
*/
select_end:
explainSetInteger(pParse->iSelectId, iRestoreSelectId);
-
+ sqlite3ExprListDelete(db, pMinMaxOrderBy);
sqlite3DbFree(db, sAggInfo.aCol);
sqlite3DbFree(db, sAggInfo.aFunc);
#if SELECTTRACE_ENABLED
@@ -123697,6 +124963,7 @@ SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerS
sqlite3ExprListDelete(db, pTmp->pExprList);
sqlite3SelectDelete(db, pTmp->pSelect);
sqlite3IdListDelete(db, pTmp->pIdList);
+ sqlite3DbFree(db, pTmp->zSpan);
sqlite3DbFree(db, pTmp);
}
@@ -124012,13 +125279,29 @@ triggerfinish_cleanup:
}
/*
+** Duplicate a range of text from an SQL statement, then convert all
+** whitespace characters into ordinary space characters.
+*/
+static char *triggerSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){
+ char *z = sqlite3DbSpanDup(db, zStart, zEnd);
+ int i;
+ if( z ) for(i=0; z[i]; i++) if( sqlite3Isspace(z[i]) ) z[i] = ' ';
+ return z;
+}
+
+/*
** Turn a SELECT statement (that the pSelect parameter points to) into
** a trigger step. Return a pointer to a TriggerStep structure.
**
** The parser calls this routine when it finds a SELECT statement in
** body of a TRIGGER.
*/
-SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){
+SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(
+ sqlite3 *db, /* Database connection */
+ Select *pSelect, /* The SELECT statement */
+ const char *zStart, /* Start of SQL text */
+ const char *zEnd /* End of SQL text */
+){
TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep));
if( pTriggerStep==0 ) {
sqlite3SelectDelete(db, pSelect);
@@ -124027,6 +125310,7 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelec
pTriggerStep->op = TK_SELECT;
pTriggerStep->pSelect = pSelect;
pTriggerStep->orconf = OE_Default;
+ pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd);
return pTriggerStep;
}
@@ -124039,7 +125323,9 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelec
static TriggerStep *triggerStepAllocate(
sqlite3 *db, /* Database connection */
u8 op, /* Trigger opcode */
- Token *pName /* The target name */
+ Token *pName, /* The target name */
+ const char *zStart, /* Start of SQL text */
+ const char *zEnd /* End of SQL text */
){
TriggerStep *pTriggerStep;
@@ -124050,6 +125336,7 @@ static TriggerStep *triggerStepAllocate(
sqlite3Dequote(z);
pTriggerStep->zTarget = z;
pTriggerStep->op = op;
+ pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd);
}
return pTriggerStep;
}
@@ -124066,13 +125353,15 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(
Token *pTableName, /* Name of the table into which we insert */
IdList *pColumn, /* List of columns in pTableName to insert into */
Select *pSelect, /* A SELECT statement that supplies values */
- u8 orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
+ u8 orconf, /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
+ const char *zStart, /* Start of SQL text */
+ const char *zEnd /* End of SQL text */
){
TriggerStep *pTriggerStep;
assert(pSelect != 0 || db->mallocFailed);
- pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName);
+ pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName, zStart, zEnd);
if( pTriggerStep ){
pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
pTriggerStep->pIdList = pColumn;
@@ -124095,11 +125384,13 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(
Token *pTableName, /* Name of the table to be updated */
ExprList *pEList, /* The SET clause: list of column and new values */
Expr *pWhere, /* The WHERE clause */
- u8 orconf /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
+ u8 orconf, /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
+ const char *zStart, /* Start of SQL text */
+ const char *zEnd /* End of SQL text */
){
TriggerStep *pTriggerStep;
- pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName);
+ pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName, zStart, zEnd);
if( pTriggerStep ){
pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
@@ -124118,11 +125409,13 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(
SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(
sqlite3 *db, /* Database connection */
Token *pTableName, /* The table from which rows are deleted */
- Expr *pWhere /* The WHERE clause */
+ Expr *pWhere, /* The WHERE clause */
+ const char *zStart, /* Start of SQL text */
+ const char *zEnd /* End of SQL text */
){
TriggerStep *pTriggerStep;
- pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName);
+ pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName, zStart, zEnd);
if( pTriggerStep ){
pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
pTriggerStep->orconf = OE_Default;
@@ -124257,7 +125550,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const ch
*pp = (*pp)->pNext;
}
sqlite3DeleteTrigger(db, pTrigger);
- db->flags |= SQLITE_InternChanges;
+ db->mDbFlags |= DBFLAG_SchemaChange;
}
}
@@ -124377,13 +125670,21 @@ static int codeTriggerProgram(
pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf;
assert( pParse->okConstFactor==0 );
+#ifndef SQLITE_OMIT_TRACE
+ if( pStep->zSpan ){
+ sqlite3VdbeAddOp4(v, OP_Trace, 0x7fffffff, 1, 0,
+ sqlite3MPrintf(db, "-- %s", pStep->zSpan),
+ P4_DYNAMIC);
+ }
+#endif
+
switch( pStep->op ){
case TK_UPDATE: {
sqlite3Update(pParse,
targetSrcList(pParse, pStep),
sqlite3ExprListDup(db, pStep->pExprList, 0),
sqlite3ExprDup(db, pStep->pWhere, 0),
- pParse->eOrconf
+ pParse->eOrconf, 0, 0
);
break;
}
@@ -124399,7 +125700,7 @@ static int codeTriggerProgram(
case TK_DELETE: {
sqlite3DeleteFrom(pParse,
targetSrcList(pParse, pStep),
- sqlite3ExprDup(db, pStep->pWhere, 0)
+ sqlite3ExprDup(db, pStep->pWhere, 0), 0, 0
);
break;
}
@@ -124517,9 +125818,11 @@ static TriggerPrg *codeRowTrigger(
pTab->zName
));
#ifndef SQLITE_OMIT_TRACE
- sqlite3VdbeChangeP4(v, -1,
- sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC
- );
+ if( pTrigger->zName ){
+ sqlite3VdbeChangeP4(v, -1,
+ sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC
+ );
+ }
#endif
/* If one was specified, code the WHEN clause. If it evaluates to false
@@ -124547,7 +125850,7 @@ static TriggerPrg *codeRowTrigger(
VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf)));
transferParseError(pParse, pSubParse);
- if( db->mallocFailed==0 ){
+ if( db->mallocFailed==0 && pParse->nErr==0 ){
pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg);
}
pProgram->nMem = pSubParse->nMem;
@@ -124866,7 +126169,9 @@ SQLITE_PRIVATE void sqlite3Update(
SrcList *pTabList, /* The table in which we should change things */
ExprList *pChanges, /* Things to be changed */
Expr *pWhere, /* The WHERE clause. May be null */
- int onError /* How to handle constraint errors */
+ int onError, /* How to handle constraint errors */
+ ExprList *pOrderBy, /* ORDER BY clause. May be null */
+ Expr *pLimit /* LIMIT clause. May be null */
){
int i, j; /* Loop counters */
Table *pTab; /* The table to be updated */
@@ -124951,6 +126256,16 @@ SQLITE_PRIVATE void sqlite3Update(
# define isView 0
#endif
+#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
+ if( !isView ){
+ pWhere = sqlite3LimitWhere(
+ pParse, pTabList, pWhere, pOrderBy, pLimit, "UPDATE"
+ );
+ pOrderBy = 0;
+ pLimit = 0;
+ }
+#endif
+
if( sqlite3ViewGetColumnNames(pParse, pTab) ){
goto update_cleanup;
}
@@ -125119,7 +126434,11 @@ SQLITE_PRIVATE void sqlite3Update(
*/
#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
if( isView ){
- sqlite3MaterializeView(pParse, pTab, pWhere, iDataCur);
+ sqlite3MaterializeView(pParse, pTab,
+ pWhere, pOrderBy, pLimit, iDataCur
+ );
+ pOrderBy = 0;
+ pLimit = 0;
}
#endif
@@ -125503,6 +126822,10 @@ update_cleanup:
sqlite3SrcListDelete(db, pTabList);
sqlite3ExprListDelete(db, pChanges);
sqlite3ExprDelete(db, pWhere);
+#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
+ sqlite3ExprListDelete(db, pOrderBy);
+ sqlite3ExprDelete(db, pLimit);
+#endif
return;
}
/* Make sure "isView" and other macros defined above are undefined. Otherwise
@@ -125562,7 +126885,7 @@ static void updateVirtualTable(
int bOnePass; /* True to use onepass strategy */
int addr; /* Address of OP_OpenEphemeral */
- /* Allocate nArg registers to martial the arguments to VUpdate. Then
+ /* Allocate nArg registers in which to gather the arguments for VUpdate. Then
** create and open the ephemeral table in which the records created from
** these arguments will be temporarily stored. */
assert( v );
@@ -125578,19 +126901,31 @@ static void updateVirtualTable(
if( pWInfo==0 ) return;
/* Populate the argument registers. */
- sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg);
- if( pRowid ){
- sqlite3ExprCode(pParse, pRowid, regArg+1);
- }else{
- sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg+1);
- }
for(i=0; i<pTab->nCol; i++){
if( aXRef[i]>=0 ){
sqlite3ExprCode(pParse, pChanges->a[aXRef[i]].pExpr, regArg+2+i);
}else{
sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, i, regArg+2+i);
+ sqlite3VdbeChangeP5(v, 1); /* Enable sqlite3_vtab_nochange() */
}
}
+ if( HasRowid(pTab) ){
+ sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg);
+ if( pRowid ){
+ sqlite3ExprCode(pParse, pRowid, regArg+1);
+ }else{
+ sqlite3VdbeAddOp2(v, OP_Rowid, iCsr, regArg+1);
+ }
+ }else{
+ Index *pPk; /* PRIMARY KEY index */
+ i16 iPk; /* PRIMARY KEY column */
+ pPk = sqlite3PrimaryKeyIndex(pTab);
+ assert( pPk!=0 );
+ assert( pPk->nKeyCol==1 );
+ iPk = pPk->aiColumn[0];
+ sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, iPk, regArg);
+ sqlite3VdbeAddOp2(v, OP_SCopy, regArg+2+iPk, regArg+1);
+ }
bOnePass = sqlite3WhereOkOnePass(pWInfo, aDummy);
@@ -125606,6 +126941,11 @@ static void updateVirtualTable(
/* Create a record from the argument register contents and insert it into
** the ephemeral table. */
sqlite3VdbeAddOp3(v, OP_MakeRecord, regArg, nArg, regRec);
+#ifdef SQLITE_DEBUG
+ /* Signal an assert() within OP_MakeRecord that it is allowed to
+ ** accept no-change records with serial_type 10 */
+ sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG_MAGIC);
+#endif
sqlite3VdbeAddOp2(v, OP_NewRowid, ephemTab, regRowid);
sqlite3VdbeAddOp3(v, OP_Insert, ephemTab, regRec, regRowid);
}
@@ -125775,7 +127115,8 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
int rc = SQLITE_OK; /* Return code from service routines */
Btree *pMain; /* The database being vacuumed */
Btree *pTemp; /* The temporary database we vacuum into */
- int saved_flags; /* Saved value of the db->flags */
+ u16 saved_mDbFlags; /* Saved value of db->mDbFlags */
+ u32 saved_flags; /* Saved value of db->flags */
int saved_nChange; /* Saved value of db->nChange */
int saved_nTotalChange; /* Saved value of db->nTotalChange */
u8 saved_mTrace; /* Saved trace settings */
@@ -125798,11 +127139,12 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
** restored before returning. Then set the writable-schema flag, and
** disable CHECK and foreign key constraints. */
saved_flags = db->flags;
+ saved_mDbFlags = db->mDbFlags;
saved_nChange = db->nChange;
saved_nTotalChange = db->nTotalChange;
saved_mTrace = db->mTrace;
- db->flags |= (SQLITE_WriteSchema | SQLITE_IgnoreChecks
- | SQLITE_PreferBuiltin | SQLITE_Vacuum);
+ db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks;
+ db->mDbFlags |= DBFLAG_PreferBuiltin | DBFLAG_Vacuum;
db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder | SQLITE_CountRows);
db->mTrace = 0;
@@ -125913,8 +127255,8 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
"WHERE type='table'AND coalesce(rootpage,1)>0",
zDbMain
);
- assert( (db->flags & SQLITE_Vacuum)!=0 );
- db->flags &= ~SQLITE_Vacuum;
+ assert( (db->mDbFlags & DBFLAG_Vacuum)!=0 );
+ db->mDbFlags &= ~DBFLAG_Vacuum;
if( rc!=SQLITE_OK ) goto end_of_vacuum;
/* Copy the triggers, views, and virtual tables from the main database
@@ -125982,6 +127324,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){
end_of_vacuum:
/* Restore the original value of db->flags */
db->init.iDb = 0;
+ db->mDbFlags = saved_mDbFlags;
db->flags = saved_flags;
db->nChange = saved_nChange;
db->nTotalChange = saved_nTotalChange;
@@ -126058,8 +127401,10 @@ SQLITE_PRIVATE Module *sqlite3VtabCreateModule(
){
Module *pMod;
int nName = sqlite3Strlen30(zName);
- pMod = (Module *)sqlite3DbMallocRawNN(db, sizeof(Module) + nName + 1);
- if( pMod ){
+ pMod = (Module *)sqlite3Malloc(sizeof(Module) + nName + 1);
+ if( pMod==0 ){
+ sqlite3OomFault(db);
+ }else{
Module *pDel;
char *zCopy = (char *)(&pMod[1]);
memcpy(zCopy, zName, nName+1);
@@ -126534,13 +127879,14 @@ static int vtabCallConstructor(
}
}
- zModuleName = sqlite3MPrintf(db, "%s", pTab->zName);
+ zModuleName = sqlite3DbStrDup(db, pTab->zName);
if( !zModuleName ){
return SQLITE_NOMEM_BKPT;
}
- pVTable = sqlite3DbMallocZero(db, sizeof(VTable));
+ pVTable = sqlite3MallocZero(sizeof(VTable));
if( !pVTable ){
+ sqlite3OomFault(db);
sqlite3DbFree(db, zModuleName);
return SQLITE_NOMEM_BKPT;
}
@@ -126660,6 +128006,7 @@ SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr);
if( rc!=SQLITE_OK ){
sqlite3ErrorMsg(pParse, "%s", zErr);
+ pParse->rc = rc;
}
sqlite3DbFree(db, zErr);
}
@@ -126749,10 +128096,10 @@ SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab,
*/
SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
VtabCtx *pCtx;
- Parse *pParse;
int rc = SQLITE_OK;
Table *pTab;
char *zErr = 0;
+ Parse sParse;
#ifdef SQLITE_ENABLE_API_ARMOR
if( !sqlite3SafetyCheckOk(db) || zCreateTable==0 ){
@@ -126769,55 +128116,55 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
pTab = pCtx->pTab;
assert( IsVirtual(pTab) );
- pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
- if( pParse==0 ){
- rc = SQLITE_NOMEM_BKPT;
- }else{
- pParse->declareVtab = 1;
- pParse->db = db;
- pParse->nQueryLoop = 1;
-
- if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr)
- && pParse->pNewTable
- && !db->mallocFailed
- && !pParse->pNewTable->pSelect
- && !IsVirtual(pParse->pNewTable)
- ){
- if( !pTab->aCol ){
- Table *pNew = pParse->pNewTable;
- Index *pIdx;
- pTab->aCol = pNew->aCol;
- pTab->nCol = pNew->nCol;
- pTab->tabFlags |= pNew->tabFlags & (TF_WithoutRowid|TF_NoVisibleRowid);
- pNew->nCol = 0;
- pNew->aCol = 0;
- assert( pTab->pIndex==0 );
- if( !HasRowid(pNew) && pCtx->pVTable->pMod->pModule->xUpdate!=0 ){
- rc = SQLITE_ERROR;
- }
- pIdx = pNew->pIndex;
- if( pIdx ){
- assert( pIdx->pNext==0 );
- pTab->pIndex = pIdx;
- pNew->pIndex = 0;
- pIdx->pTable = pTab;
- }
+ memset(&sParse, 0, sizeof(sParse));
+ sParse.declareVtab = 1;
+ sParse.db = db;
+ sParse.nQueryLoop = 1;
+ if( SQLITE_OK==sqlite3RunParser(&sParse, zCreateTable, &zErr)
+ && sParse.pNewTable
+ && !db->mallocFailed
+ && !sParse.pNewTable->pSelect
+ && !IsVirtual(sParse.pNewTable)
+ ){
+ if( !pTab->aCol ){
+ Table *pNew = sParse.pNewTable;
+ Index *pIdx;
+ pTab->aCol = pNew->aCol;
+ pTab->nCol = pNew->nCol;
+ pTab->tabFlags |= pNew->tabFlags & (TF_WithoutRowid|TF_NoVisibleRowid);
+ pNew->nCol = 0;
+ pNew->aCol = 0;
+ assert( pTab->pIndex==0 );
+ assert( HasRowid(pNew) || sqlite3PrimaryKeyIndex(pNew)!=0 );
+ if( !HasRowid(pNew)
+ && pCtx->pVTable->pMod->pModule->xUpdate!=0
+ && sqlite3PrimaryKeyIndex(pNew)->nKeyCol!=1
+ ){
+ /* WITHOUT ROWID virtual tables must either be read-only (xUpdate==0)
+ ** or else must have a single-column PRIMARY KEY */
+ rc = SQLITE_ERROR;
+ }
+ pIdx = pNew->pIndex;
+ if( pIdx ){
+ assert( pIdx->pNext==0 );
+ pTab->pIndex = pIdx;
+ pNew->pIndex = 0;
+ pIdx->pTable = pTab;
}
- pCtx->bDeclared = 1;
- }else{
- sqlite3ErrorWithMsg(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
- sqlite3DbFree(db, zErr);
- rc = SQLITE_ERROR;
- }
- pParse->declareVtab = 0;
-
- if( pParse->pVdbe ){
- sqlite3VdbeFinalize(pParse->pVdbe);
}
- sqlite3DeleteTable(db, pParse->pNewTable);
- sqlite3ParserReset(pParse);
- sqlite3StackFree(db, pParse);
+ pCtx->bDeclared = 1;
+ }else{
+ sqlite3ErrorWithMsg(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
+ sqlite3DbFree(db, zErr);
+ rc = SQLITE_ERROR;
}
+ sParse.declareVtab = 0;
+
+ if( sParse.pVdbe ){
+ sqlite3VdbeFinalize(sParse.pVdbe);
+ }
+ sqlite3DeleteTable(db, sParse.pNewTable);
+ sqlite3ParserReset(&sParse);
assert( (rc&0xff)==rc );
rc = sqlite3ApiExit(db, rc);
@@ -127795,7 +129142,6 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereC
** WO_LE == SQLITE_INDEX_CONSTRAINT_LE
** WO_GT == SQLITE_INDEX_CONSTRAINT_GT
** WO_GE == SQLITE_INDEX_CONSTRAINT_GE
-** WO_MATCH == SQLITE_INDEX_CONSTRAINT_MATCH
*/
#define WO_IN 0x0001
#define WO_EQ 0x0002
@@ -127803,7 +129149,7 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, struct SrcList_item*, WhereC
#define WO_LE (WO_EQ<<(TK_LE-TK_EQ))
#define WO_GT (WO_EQ<<(TK_GT-TK_EQ))
#define WO_GE (WO_EQ<<(TK_GE-TK_EQ))
-#define WO_MATCH 0x0040
+#define WO_AUX 0x0040 /* Op useful to virtual tables only */
#define WO_IS 0x0080
#define WO_ISNULL 0x0100
#define WO_OR 0x0200 /* Two or more OR-connected terms */
@@ -127950,7 +129296,7 @@ SQLITE_PRIVATE int sqlite3WhereExplainOneScan(
){
int ret = 0;
#if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS)
- if( pParse->explain==2 )
+ if( sqlite3ParseToplevel(pParse)->explain==2 )
#endif
{
struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
@@ -128116,8 +129462,8 @@ SQLITE_PRIVATE void sqlite3WhereAddScanStatus(
*/
static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
int nLoop = 0;
- while( ALWAYS(pTerm!=0)
- && (pTerm->wtFlags & TERM_CODED)==0
+ assert( pTerm!=0 );
+ while( (pTerm->wtFlags & TERM_CODED)==0
&& (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
&& (pLevel->notReady & pTerm->prereqAll)==0
){
@@ -128128,6 +129474,7 @@ static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
}
if( pTerm->iParent<0 ) break;
pTerm = &pTerm->pWC->a[pTerm->iParent];
+ assert( pTerm!=0 );
pTerm->nChild--;
if( pTerm->nChild!=0 ) break;
nLoop++;
@@ -128198,6 +129545,102 @@ static void updateRangeAffinityStr(
}
}
+
+/*
+** pX is an expression of the form: (vector) IN (SELECT ...)
+** In other words, it is a vector IN operator with a SELECT clause on the
+** LHS. But not all terms in the vector are indexable and the terms might
+** not be in the correct order for indexing.
+**
+** This routine makes a copy of the input pX expression and then adjusts
+** the vector on the LHS with corresponding changes to the SELECT so that
+** the vector contains only index terms and those terms are in the correct
+** order. The modified IN expression is returned. The caller is responsible
+** for deleting the returned expression.
+**
+** Example:
+**
+** CREATE TABLE t1(a,b,c,d,e,f);
+** CREATE INDEX t1x1 ON t1(e,c);
+** SELECT * FROM t1 WHERE (a,b,c,d,e) IN (SELECT v,w,x,y,z FROM t2)
+** \_______________________________________/
+** The pX expression
+**
+** Since only columns e and c can be used with the index, in that order,
+** the modified IN expression that is returned will be:
+**
+** (e,c) IN (SELECT z,x FROM t2)
+**
+** The reduced pX is different from the original (obviously) and thus is
+** only used for indexing, to improve performance. The original unaltered
+** IN expression must also be run on each output row for correctness.
+*/
+static Expr *removeUnindexableInClauseTerms(
+ Parse *pParse, /* The parsing context */
+ int iEq, /* Look at loop terms starting here */
+ WhereLoop *pLoop, /* The current loop */
+ Expr *pX /* The IN expression to be reduced */
+){
+ sqlite3 *db = pParse->db;
+ Expr *pNew = sqlite3ExprDup(db, pX, 0);
+ if( db->mallocFailed==0 ){
+ ExprList *pOrigRhs = pNew->x.pSelect->pEList; /* Original unmodified RHS */
+ ExprList *pOrigLhs = pNew->pLeft->x.pList; /* Original unmodified LHS */
+ ExprList *pRhs = 0; /* New RHS after modifications */
+ ExprList *pLhs = 0; /* New LHS after mods */
+ int i; /* Loop counter */
+ Select *pSelect; /* Pointer to the SELECT on the RHS */
+
+ for(i=iEq; i<pLoop->nLTerm; i++){
+ if( pLoop->aLTerm[i]->pExpr==pX ){
+ int iField = pLoop->aLTerm[i]->iField - 1;
+ assert( pOrigRhs->a[iField].pExpr!=0 );
+ pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr);
+ pOrigRhs->a[iField].pExpr = 0;
+ assert( pOrigLhs->a[iField].pExpr!=0 );
+ pLhs = sqlite3ExprListAppend(pParse, pLhs, pOrigLhs->a[iField].pExpr);
+ pOrigLhs->a[iField].pExpr = 0;
+ }
+ }
+ sqlite3ExprListDelete(db, pOrigRhs);
+ sqlite3ExprListDelete(db, pOrigLhs);
+ pNew->pLeft->x.pList = pLhs;
+ pNew->x.pSelect->pEList = pRhs;
+ if( pLhs && pLhs->nExpr==1 ){
+ /* Take care here not to generate a TK_VECTOR containing only a
+ ** single value. Since the parser never creates such a vector, some
+ ** of the subroutines do not handle this case. */
+ Expr *p = pLhs->a[0].pExpr;
+ pLhs->a[0].pExpr = 0;
+ sqlite3ExprDelete(db, pNew->pLeft);
+ pNew->pLeft = p;
+ }
+ pSelect = pNew->x.pSelect;
+ if( pSelect->pOrderBy ){
+ /* If the SELECT statement has an ORDER BY clause, zero the
+ ** iOrderByCol variables. These are set to non-zero when an
+ ** ORDER BY term exactly matches one of the terms of the
+ ** result-set. Since the result-set of the SELECT statement may
+ ** have been modified or reordered, these variables are no longer
+ ** set correctly. Since setting them is just an optimization,
+ ** it's easiest just to zero them here. */
+ ExprList *pOrderBy = pSelect->pOrderBy;
+ for(i=0; i<pOrderBy->nExpr; i++){
+ pOrderBy->a[i].u.x.iOrderByCol = 0;
+ }
+ }
+
+#if 0
+ printf("For indexing, change the IN expr:\n");
+ sqlite3TreeViewExpr(0, pX, 0);
+ printf("Into:\n");
+ sqlite3TreeViewExpr(0, pNew, 0);
+#endif
+ }
+ return pNew;
+}
+
+
/*
** Generate code for a single equality term of the WHERE clause. An equality
** term can be either X=expr or X IN (...). pTerm is the term to be
@@ -128260,68 +129703,23 @@ static int codeEqualityTerm(
}
}
for(i=iEq;i<pLoop->nLTerm; i++){
- if( ALWAYS(pLoop->aLTerm[i]) && pLoop->aLTerm[i]->pExpr==pX ) nEq++;
+ assert( pLoop->aLTerm[i]!=0 );
+ if( pLoop->aLTerm[i]->pExpr==pX ) nEq++;
}
if( (pX->flags & EP_xIsSelect)==0 || pX->x.pSelect->pEList->nExpr==1 ){
eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, 0);
}else{
- Select *pSelect = pX->x.pSelect;
sqlite3 *db = pParse->db;
- u16 savedDbOptFlags = db->dbOptFlags;
- ExprList *pOrigRhs = pSelect->pEList;
- ExprList *pOrigLhs = pX->pLeft->x.pList;
- ExprList *pRhs = 0; /* New Select.pEList for RHS */
- ExprList *pLhs = 0; /* New pX->pLeft vector */
+ pX = removeUnindexableInClauseTerms(pParse, iEq, pLoop, pX);
- for(i=iEq;i<pLoop->nLTerm; i++){
- if( pLoop->aLTerm[i]->pExpr==pX ){
- int iField = pLoop->aLTerm[i]->iField - 1;
- Expr *pNewRhs = sqlite3ExprDup(db, pOrigRhs->a[iField].pExpr, 0);
- Expr *pNewLhs = sqlite3ExprDup(db, pOrigLhs->a[iField].pExpr, 0);
-
- pRhs = sqlite3ExprListAppend(pParse, pRhs, pNewRhs);
- pLhs = sqlite3ExprListAppend(pParse, pLhs, pNewLhs);
- }
- }
if( !db->mallocFailed ){
- Expr *pLeft = pX->pLeft;
-
- if( pSelect->pOrderBy ){
- /* If the SELECT statement has an ORDER BY clause, zero the
- ** iOrderByCol variables. These are set to non-zero when an
- ** ORDER BY term exactly matches one of the terms of the
- ** result-set. Since the result-set of the SELECT statement may
- ** have been modified or reordered, these variables are no longer
- ** set correctly. Since setting them is just an optimization,
- ** it's easiest just to zero them here. */
- ExprList *pOrderBy = pSelect->pOrderBy;
- for(i=0; i<pOrderBy->nExpr; i++){
- pOrderBy->a[i].u.x.iOrderByCol = 0;
- }
- }
-
- /* Take care here not to generate a TK_VECTOR containing only a
- ** single value. Since the parser never creates such a vector, some
- ** of the subroutines do not handle this case. */
- if( pLhs->nExpr==1 ){
- pX->pLeft = pLhs->a[0].pExpr;
- }else{
- pLeft->x.pList = pLhs;
- aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int) * nEq);
- testcase( aiMap==0 );
- }
- pSelect->pEList = pRhs;
- db->dbOptFlags |= SQLITE_QueryFlattener;
+ aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq);
eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap);
- db->dbOptFlags = savedDbOptFlags;
- testcase( aiMap!=0 && aiMap[0]!=0 );
- pSelect->pEList = pOrigRhs;
- pLeft->x.pList = pOrigLhs;
- pX->pLeft = pLeft;
+ pTerm->pExpr->iTable = pX->iTable;
}
- sqlite3ExprListDelete(pParse->db, pLhs);
- sqlite3ExprListDelete(pParse->db, pRhs);
+ sqlite3ExprDelete(db, pX);
+ pX = pTerm->pExpr;
}
if( eType==IN_INDEX_INDEX_DESC ){
@@ -128616,7 +130014,7 @@ static int codeCursorHintIsOrFunction(Walker *pWalker, Expr *pExpr){
pWalker->eCode = 1;
}else if( pExpr->op==TK_FUNCTION ){
int d1;
- char d2[3];
+ char d2[4];
if( 0==sqlite3IsLikeFunction(pWalker->pParse->db, pExpr, &d1, d2) ){
pWalker->eCode = 1;
}
@@ -128839,7 +130237,7 @@ static void codeDeferredSeek(
*/
static void codeExprOrVector(Parse *pParse, Expr *p, int iReg, int nReg){
assert( nReg>0 );
- if( sqlite3ExprIsVector(p) ){
+ if( p && sqlite3ExprIsVector(p) ){
#ifndef SQLITE_OMIT_SUBQUERY
if( (p->flags & EP_xIsSelect) ){
Vdbe *v = pParse->pVdbe;
@@ -128892,9 +130290,9 @@ static int whereIndexExprTransNode(Walker *p, Expr *pExpr){
}
/*
-** For an indexes on expression X, locate every instance of expression X in pExpr
-** and change that subexpression into a reference to the appropriate column of
-** the index.
+** For an indexes on expression X, locate every instance of expression X
+** in pExpr and change that subexpression into a reference to the appropriate
+** column of the index.
*/
static void whereIndexExprTrans(
Index *pIdx, /* The Index */
@@ -129460,6 +130858,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart(
}
}else if( bStopAtNull ){
sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
+ sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
endEq = 0;
nConstraint++;
}
@@ -130171,12 +131570,12 @@ static int isLikeOrGlob(
int *pisComplete, /* True if the only wildcard is % in the last character */
int *pnoCase /* True if uppercase is equivalent to lowercase */
){
- const char *z = 0; /* String on RHS of LIKE operator */
+ const u8 *z = 0; /* String on RHS of LIKE operator */
Expr *pRight, *pLeft; /* Right and left size of LIKE operator */
ExprList *pList; /* List of operands to the LIKE operator */
int c; /* One character in z[] */
int cnt; /* Number of non-wildcard prefix characters */
- char wc[3]; /* Wildcard characters */
+ char wc[4]; /* Wildcard characters */
sqlite3 *db = pParse->db; /* Database connection */
sqlite3_value *pVal = 0;
int op; /* Opcode of pRight */
@@ -130198,12 +131597,12 @@ static int isLikeOrGlob(
int iCol = pRight->iColumn;
pVal = sqlite3VdbeGetBoundValue(pReprepare, iCol, SQLITE_AFF_BLOB);
if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
- z = (char *)sqlite3_value_text(pVal);
+ z = sqlite3_value_text(pVal);
}
sqlite3VdbeSetVarmask(pParse->pVdbe, iCol);
assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
}else if( op==TK_STRING ){
- z = pRight->u.zToken;
+ z = (u8*)pRight->u.zToken;
}
if( z ){
@@ -130223,16 +131622,42 @@ static int isLikeOrGlob(
return 0;
}
}
+
+ /* Count the number of prefix characters prior to the first wildcard */
cnt = 0;
while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
cnt++;
+ if( c==wc[3] && z[cnt]!=0 ) cnt++;
}
+
+ /* The optimization is possible only if (1) the pattern does not begin
+ ** with a wildcard and if (2) the non-wildcard prefix does not end with
+ ** an (illegal 0xff) character. The second condition is necessary so
+ ** that we can increment the prefix key to find an upper bound for the
+ ** range search.
+ */
if( cnt!=0 && 255!=(u8)z[cnt-1] ){
Expr *pPrefix;
+
+ /* A "complete" match if the pattern ends with "*" or "%" */
*pisComplete = c==wc[0] && z[cnt+1]==0;
- pPrefix = sqlite3Expr(db, TK_STRING, z);
- if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
+
+ /* Get the pattern prefix. Remove all escapes from the prefix. */
+ pPrefix = sqlite3Expr(db, TK_STRING, (char*)z);
+ if( pPrefix ){
+ int iFrom, iTo;
+ char *zNew = pPrefix->u.zToken;
+ zNew[cnt] = 0;
+ for(iFrom=iTo=0; iFrom<cnt; iFrom++){
+ if( zNew[iFrom]==wc[3] ) iFrom++;
+ zNew[iTo++] = zNew[iFrom];
+ }
+ zNew[iTo] = 0;
+ }
*ppPrefix = pPrefix;
+
+ /* If the RHS pattern is a bound parameter, make arrangements to
+ ** reprepare the statement when that parameter is rebound */
if( op==TK_VARIABLE ){
Vdbe *v = pParse->pVdbe;
sqlite3VdbeSetVarmask(v, pRight->iColumn);
@@ -130263,48 +131688,84 @@ static int isLikeOrGlob(
#ifndef SQLITE_OMIT_VIRTUALTABLE
/*
-** Check to see if the given expression is of the form
-**
-** column OP expr
-**
-** where OP is one of MATCH, GLOB, LIKE or REGEXP and "column" is a
-** column of a virtual table.
-**
-** If it is then return TRUE. If not, return FALSE.
-*/
-static int isMatchOfColumn(
+** Check to see if the pExpr expression is a form that needs to be passed
+** to the xBestIndex method of virtual tables. Forms of interest include:
+**
+** Expression Virtual Table Operator
+** ----------------------- ---------------------------------
+** 1. column MATCH expr SQLITE_INDEX_CONSTRAINT_MATCH
+** 2. column GLOB expr SQLITE_INDEX_CONSTRAINT_GLOB
+** 3. column LIKE expr SQLITE_INDEX_CONSTRAINT_LIKE
+** 4. column REGEXP expr SQLITE_INDEX_CONSTRAINT_REGEXP
+** 5. column != expr SQLITE_INDEX_CONSTRAINT_NE
+** 6. expr != column SQLITE_INDEX_CONSTRAINT_NE
+** 7. column IS NOT expr SQLITE_INDEX_CONSTRAINT_ISNOT
+** 8. expr IS NOT column SQLITE_INDEX_CONSTRAINT_ISNOT
+** 9. column IS NOT NULL SQLITE_INDEX_CONSTRAINT_ISNOTNULL
+**
+** In every case, "column" must be a column of a virtual table. If there
+** is a match, set *ppLeft to the "column" expression, set *ppRight to the
+** "expr" expression (even though in forms (6) and (8) the column is on the
+** right and the expression is on the left). Also set *peOp2 to the
+** appropriate virtual table operator. The return value is 1 or 2 if there
+** is a match. The usual return is 1, but if the RHS is also a column
+** of virtual table in forms (5) or (7) then return 2.
+**
+** If the expression matches none of the patterns above, return 0.
+*/
+static int isAuxiliaryVtabOperator(
Expr *pExpr, /* Test this expression */
- unsigned char *peOp2 /* OUT: 0 for MATCH, or else an op2 value */
-){
- static const struct Op2 {
- const char *zOp;
- unsigned char eOp2;
- } aOp[] = {
- { "match", SQLITE_INDEX_CONSTRAINT_MATCH },
- { "glob", SQLITE_INDEX_CONSTRAINT_GLOB },
- { "like", SQLITE_INDEX_CONSTRAINT_LIKE },
- { "regexp", SQLITE_INDEX_CONSTRAINT_REGEXP }
- };
- ExprList *pList;
- Expr *pCol; /* Column reference */
- int i;
+ unsigned char *peOp2, /* OUT: 0 for MATCH, or else an op2 value */
+ Expr **ppLeft, /* Column expression to left of MATCH/op2 */
+ Expr **ppRight /* Expression to left of MATCH/op2 */
+){
+ if( pExpr->op==TK_FUNCTION ){
+ static const struct Op2 {
+ const char *zOp;
+ unsigned char eOp2;
+ } aOp[] = {
+ { "match", SQLITE_INDEX_CONSTRAINT_MATCH },
+ { "glob", SQLITE_INDEX_CONSTRAINT_GLOB },
+ { "like", SQLITE_INDEX_CONSTRAINT_LIKE },
+ { "regexp", SQLITE_INDEX_CONSTRAINT_REGEXP }
+ };
+ ExprList *pList;
+ Expr *pCol; /* Column reference */
+ int i;
- if( pExpr->op!=TK_FUNCTION ){
- return 0;
- }
- pList = pExpr->x.pList;
- if( pList==0 || pList->nExpr!=2 ){
- return 0;
- }
- pCol = pList->a[1].pExpr;
- if( pCol->op!=TK_COLUMN || !IsVirtual(pCol->pTab) ){
- return 0;
- }
- for(i=0; i<ArraySize(aOp); i++){
- if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
- *peOp2 = aOp[i].eOp2;
- return 1;
+ pList = pExpr->x.pList;
+ if( pList==0 || pList->nExpr!=2 ){
+ return 0;
+ }
+ pCol = pList->a[1].pExpr;
+ if( pCol->op!=TK_COLUMN || !IsVirtual(pCol->pTab) ){
+ return 0;
}
+ for(i=0; i<ArraySize(aOp); i++){
+ if( sqlite3StrICmp(pExpr->u.zToken, aOp[i].zOp)==0 ){
+ *peOp2 = aOp[i].eOp2;
+ *ppRight = pList->a[0].pExpr;
+ *ppLeft = pCol;
+ return 1;
+ }
+ }
+ }else if( pExpr->op==TK_NE || pExpr->op==TK_ISNOT || pExpr->op==TK_NOTNULL ){
+ int res = 0;
+ Expr *pLeft = pExpr->pLeft;
+ Expr *pRight = pExpr->pRight;
+ if( pLeft->op==TK_COLUMN && IsVirtual(pLeft->pTab) ){
+ res++;
+ }
+ if( pRight && pRight->op==TK_COLUMN && IsVirtual(pRight->pTab) ){
+ res++;
+ SWAP(Expr*, pLeft, pRight);
+ }
+ *ppLeft = pLeft;
+ *ppRight = pRight;
+ if( pExpr->op==TK_NE ) *peOp2 = SQLITE_INDEX_CONSTRAINT_NE;
+ if( pExpr->op==TK_ISNOT ) *peOp2 = SQLITE_INDEX_CONSTRAINT_ISNOT;
+ if( pExpr->op==TK_NOTNULL ) *peOp2 = SQLITE_INDEX_CONSTRAINT_ISNOTNULL;
+ return res;
}
return 0;
}
@@ -130555,7 +132016,7 @@ static void exprAnalyzeOrTerm(
for(j=0, pAndTerm=pAndWC->a; j<pAndWC->nTerm; j++, pAndTerm++){
assert( pAndTerm->pExpr );
if( allowedOp(pAndTerm->pExpr->op)
- || pAndTerm->eOperator==WO_MATCH
+ || pAndTerm->eOperator==WO_AUX
){
b |= sqlite3WhereGetMask(&pWInfo->sMaskSet, pAndTerm->leftCursor);
}
@@ -130757,7 +132218,6 @@ static void exprAnalyzeOrTerm(
static int termIsEquivalence(Parse *pParse, Expr *pExpr){
char aff1, aff2;
CollSeq *pColl;
- const char *zColl1, *zColl2;
if( !OptimizationEnabled(pParse->db, SQLITE_Transitive) ) return 0;
if( pExpr->op!=TK_EQ && pExpr->op!=TK_IS ) return 0;
if( ExprHasProperty(pExpr, EP_FromJoin) ) return 0;
@@ -130770,11 +132230,7 @@ static int termIsEquivalence(Parse *pParse, Expr *pExpr){
}
pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight);
if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1;
- pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
- zColl1 = pColl ? pColl->zName : 0;
- pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
- zColl2 = pColl ? pColl->zName : 0;
- return sqlite3_stricmp(zColl1, zColl2)==0;
+ return sqlite3ExprCollSeqMatch(pParse, pExpr->pLeft, pExpr->pRight);
}
/*
@@ -130903,7 +132359,7 @@ static void exprAnalyze(
int op; /* Top-level operator. pExpr->op */
Parse *pParse = pWInfo->pParse; /* Parsing context */
sqlite3 *db = pParse->db; /* Database connection */
- unsigned char eOp2; /* op2 value for LIKE/REGEXP/GLOB */
+ unsigned char eOp2 = 0; /* op2 value for LIKE/REGEXP/GLOB */
int nLeft; /* Number of elements on left side vector */
if( db->mallocFailed ){
@@ -131137,41 +132593,46 @@ static void exprAnalyze(
#endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
#ifndef SQLITE_OMIT_VIRTUALTABLE
- /* Add a WO_MATCH auxiliary term to the constraint set if the
- ** current expression is of the form: column MATCH expr.
+ /* Add a WO_AUX auxiliary term to the constraint set if the
+ ** current expression is of the form "column OP expr" where OP
+ ** is an operator that gets passed into virtual tables but which is
+ ** not normally optimized for ordinary tables. In other words, OP
+ ** is one of MATCH, LIKE, GLOB, REGEXP, !=, IS, IS NOT, or NOT NULL.
** This information is used by the xBestIndex methods of
** virtual tables. The native query optimizer does not attempt
** to do anything with MATCH functions.
*/
- if( pWC->op==TK_AND && isMatchOfColumn(pExpr, &eOp2) ){
- int idxNew;
- Expr *pRight, *pLeft;
- WhereTerm *pNewTerm;
- Bitmask prereqColumn, prereqExpr;
-
- pRight = pExpr->x.pList->a[0].pExpr;
- pLeft = pExpr->x.pList->a[1].pExpr;
- prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight);
- prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft);
- if( (prereqExpr & prereqColumn)==0 ){
- Expr *pNewExpr;
- pNewExpr = sqlite3PExpr(pParse, TK_MATCH,
- 0, sqlite3ExprDup(db, pRight, 0));
- if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){
- ExprSetProperty(pNewExpr, EP_FromJoin);
+ if( pWC->op==TK_AND ){
+ Expr *pRight = 0, *pLeft = 0;
+ int res = isAuxiliaryVtabOperator(pExpr, &eOp2, &pLeft, &pRight);
+ while( res-- > 0 ){
+ int idxNew;
+ WhereTerm *pNewTerm;
+ Bitmask prereqColumn, prereqExpr;
+
+ prereqExpr = sqlite3WhereExprUsage(pMaskSet, pRight);
+ prereqColumn = sqlite3WhereExprUsage(pMaskSet, pLeft);
+ if( (prereqExpr & prereqColumn)==0 ){
+ Expr *pNewExpr;
+ pNewExpr = sqlite3PExpr(pParse, TK_MATCH,
+ 0, sqlite3ExprDup(db, pRight, 0));
+ if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){
+ ExprSetProperty(pNewExpr, EP_FromJoin);
+ }
+ idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
+ testcase( idxNew==0 );
+ pNewTerm = &pWC->a[idxNew];
+ pNewTerm->prereqRight = prereqExpr;
+ pNewTerm->leftCursor = pLeft->iTable;
+ pNewTerm->u.leftColumn = pLeft->iColumn;
+ pNewTerm->eOperator = WO_AUX;
+ pNewTerm->eMatchOp = eOp2;
+ markTermAsChild(pWC, idxNew, idxTerm);
+ pTerm = &pWC->a[idxTerm];
+ pTerm->wtFlags |= TERM_COPIED;
+ pNewTerm->prereqAll = pTerm->prereqAll;
}
- idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
- testcase( idxNew==0 );
- pNewTerm = &pWC->a[idxNew];
- pNewTerm->prereqRight = prereqExpr;
- pNewTerm->leftCursor = pLeft->iTable;
- pNewTerm->u.leftColumn = pLeft->iColumn;
- pNewTerm->eOperator = WO_MATCH;
- pNewTerm->eMatchOp = eOp2;
- markTermAsChild(pWC, idxNew, idxTerm);
- pTerm = &pWC->a[idxTerm];
- pTerm->wtFlags |= TERM_COPIED;
- pNewTerm->prereqAll = pTerm->prereqAll;
+ SWAP(Expr*, pLeft, pRight);
}
}
#endif /* SQLITE_OMIT_VIRTUALTABLE */
@@ -131466,6 +132927,21 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(
/* #include "sqliteInt.h" */
/* #include "whereInt.h" */
+/*
+** Extra information appended to the end of sqlite3_index_info but not
+** visible to the xBestIndex function, at least not directly. The
+** sqlite3_vtab_collation() interface knows how to reach it, however.
+**
+** This object is not an API and can be changed from one release to the
+** next. As long as allocateIndexInfo() and sqlite3_vtab_collation()
+** agree on the structure, all will be well.
+*/
+typedef struct HiddenIndexInfo HiddenIndexInfo;
+struct HiddenIndexInfo {
+ WhereClause *pWC; /* The Where clause being analyzed */
+ Parse *pParse; /* The parsing context */
+};
+
/* Forward declaration of methods */
static int whereLoopResize(sqlite3*, WhereLoop*, int);
@@ -131850,8 +133326,8 @@ static int findIndexCol(
&& p->iColumn==pIdx->aiColumn[iCol]
&& p->iTable==iBase
){
- CollSeq *pColl = sqlite3ExprCollSeq(pParse, pList->a[i].pExpr);
- if( pColl && 0==sqlite3StrICmp(pColl->zName, zColl) ){
+ CollSeq *pColl = sqlite3ExprNNCollSeq(pParse, pList->a[i].pExpr);
+ if( 0==sqlite3StrICmp(pColl->zName, zColl) ){
return i;
}
}
@@ -132288,11 +133764,11 @@ end_auto_index_create:
** by passing the pointer returned by this function to sqlite3_free().
*/
static sqlite3_index_info *allocateIndexInfo(
- Parse *pParse,
- WhereClause *pWC,
+ Parse *pParse, /* The parsing context */
+ WhereClause *pWC, /* The WHERE clause being analyzed */
Bitmask mUnusable, /* Ignore terms with these prereqs */
- struct SrcList_item *pSrc,
- ExprList *pOrderBy,
+ struct SrcList_item *pSrc, /* The FROM clause term that is the vtab */
+ ExprList *pOrderBy, /* The ORDER BY clause */
u16 *pmNoOmit /* Mask of terms not to omit */
){
int i, j;
@@ -132300,6 +133776,7 @@ static sqlite3_index_info *allocateIndexInfo(
struct sqlite3_index_constraint *pIdxCons;
struct sqlite3_index_orderby *pIdxOrderBy;
struct sqlite3_index_constraint_usage *pUsage;
+ struct HiddenIndexInfo *pHidden;
WhereTerm *pTerm;
int nOrderBy;
sqlite3_index_info *pIdxInfo;
@@ -132315,7 +133792,7 @@ static sqlite3_index_info *allocateIndexInfo(
testcase( pTerm->eOperator & WO_ISNULL );
testcase( pTerm->eOperator & WO_IS );
testcase( pTerm->eOperator & WO_ALL );
- if( (pTerm->eOperator & ~(WO_ISNULL|WO_EQUIV|WO_IS))==0 ) continue;
+ if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue;
if( pTerm->wtFlags & TERM_VNULL ) continue;
assert( pTerm->u.leftColumn>=(-1) );
nTerm++;
@@ -132341,7 +133818,7 @@ static sqlite3_index_info *allocateIndexInfo(
*/
pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo)
+ (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm
- + sizeof(*pIdxOrderBy)*nOrderBy );
+ + sizeof(*pIdxOrderBy)*nOrderBy + sizeof(*pHidden) );
if( pIdxInfo==0 ){
sqlite3ErrorMsg(pParse, "out of memory");
return 0;
@@ -132352,7 +133829,8 @@ static sqlite3_index_info *allocateIndexInfo(
** changing them. We have to do some funky casting in order to
** initialize those fields.
*/
- pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1];
+ pHidden = (struct HiddenIndexInfo*)&pIdxInfo[1];
+ pIdxCons = (struct sqlite3_index_constraint*)&pHidden[1];
pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm];
pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy];
*(int*)&pIdxInfo->nConstraint = nTerm;
@@ -132362,8 +133840,10 @@ static sqlite3_index_info *allocateIndexInfo(
*(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage =
pUsage;
+ pHidden->pWC = pWC;
+ pHidden->pParse = pParse;
for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
- u8 op;
+ u16 op;
if( pTerm->leftCursor != pSrc->iCursor ) continue;
if( pTerm->prereqRight & mUnusable ) continue;
assert( IsPowerOfTwo(pTerm->eOperator & ~WO_EQUIV) );
@@ -132371,34 +133851,40 @@ static sqlite3_index_info *allocateIndexInfo(
testcase( pTerm->eOperator & WO_IS );
testcase( pTerm->eOperator & WO_ISNULL );
testcase( pTerm->eOperator & WO_ALL );
- if( (pTerm->eOperator & ~(WO_ISNULL|WO_EQUIV|WO_IS))==0 ) continue;
+ if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue;
if( pTerm->wtFlags & TERM_VNULL ) continue;
assert( pTerm->u.leftColumn>=(-1) );
pIdxCons[j].iColumn = pTerm->u.leftColumn;
pIdxCons[j].iTermOffset = i;
- op = (u8)pTerm->eOperator & WO_ALL;
+ op = pTerm->eOperator & WO_ALL;
if( op==WO_IN ) op = WO_EQ;
- if( op==WO_MATCH ){
- op = pTerm->eMatchOp;
- }
- pIdxCons[j].op = op;
- /* The direct assignment in the previous line is possible only because
- ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The
- ** following asserts verify this fact. */
- assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
- assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
- assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
- assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
- assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
- assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
- assert( pTerm->eOperator & (WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
-
- if( op & (WO_LT|WO_LE|WO_GT|WO_GE)
- && sqlite3ExprIsVector(pTerm->pExpr->pRight)
- ){
- if( i<16 ) mNoOmit |= (1 << i);
- if( op==WO_LT ) pIdxCons[j].op = WO_LE;
- if( op==WO_GT ) pIdxCons[j].op = WO_GE;
+ if( op==WO_AUX ){
+ pIdxCons[j].op = pTerm->eMatchOp;
+ }else if( op & (WO_ISNULL|WO_IS) ){
+ if( op==WO_ISNULL ){
+ pIdxCons[j].op = SQLITE_INDEX_CONSTRAINT_ISNULL;
+ }else{
+ pIdxCons[j].op = SQLITE_INDEX_CONSTRAINT_IS;
+ }
+ }else{
+ pIdxCons[j].op = (u8)op;
+ /* The direct assignment in the previous line is possible only because
+ ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The
+ ** following asserts verify this fact. */
+ assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
+ assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
+ assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
+ assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
+ assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
+ assert( pTerm->eOperator&(WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_AUX) );
+
+ if( op & (WO_LT|WO_LE|WO_GT|WO_GE)
+ && sqlite3ExprIsVector(pTerm->pExpr->pRight)
+ ){
+ if( i<16 ) mNoOmit |= (1 << i);
+ if( op==WO_LT ) pIdxCons[j].op = WO_LE;
+ if( op==WO_GT ) pIdxCons[j].op = WO_GE;
+ }
}
j++;
@@ -133304,40 +134790,40 @@ static void whereLoopDelete(sqlite3 *db, WhereLoop *p){
** Free a WhereInfo structure
*/
static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
- if( ALWAYS(pWInfo) ){
- int i;
- for(i=0; i<pWInfo->nLevel; i++){
- WhereLevel *pLevel = &pWInfo->a[i];
- if( pLevel->pWLoop && (pLevel->pWLoop->wsFlags & WHERE_IN_ABLE) ){
- sqlite3DbFree(db, pLevel->u.in.aInLoop);
- }
- }
- sqlite3WhereClauseClear(&pWInfo->sWC);
- while( pWInfo->pLoops ){
- WhereLoop *p = pWInfo->pLoops;
- pWInfo->pLoops = p->pNextLoop;
- whereLoopDelete(db, p);
+ int i;
+ assert( pWInfo!=0 );
+ for(i=0; i<pWInfo->nLevel; i++){
+ WhereLevel *pLevel = &pWInfo->a[i];
+ if( pLevel->pWLoop && (pLevel->pWLoop->wsFlags & WHERE_IN_ABLE) ){
+ sqlite3DbFree(db, pLevel->u.in.aInLoop);
}
- sqlite3DbFreeNN(db, pWInfo);
}
+ sqlite3WhereClauseClear(&pWInfo->sWC);
+ while( pWInfo->pLoops ){
+ WhereLoop *p = pWInfo->pLoops;
+ pWInfo->pLoops = p->pNextLoop;
+ whereLoopDelete(db, p);
+ }
+ sqlite3DbFreeNN(db, pWInfo);
}
/*
** Return TRUE if all of the following are true:
**
** (1) X has the same or lower cost that Y
-** (2) X is a proper subset of Y
-** (3) X skips at least as many columns as Y
-**
-** By "proper subset" we mean that X uses fewer WHERE clause terms
-** than Y and that every WHERE clause term used by X is also used
-** by Y.
+** (2) X uses fewer WHERE clause terms than Y
+** (3) Every WHERE clause term used by X is also used by Y
+** (4) X skips at least as many columns as Y
+** (5) If X is a covering index, than Y is too
**
+** Conditions (2) and (3) mean that X is a "proper subset" of Y.
** If X is a proper subset of Y then Y is a better choice and ought
** to have a lower cost. This routine returns TRUE when that cost
-** relationship is inverted and needs to be adjusted. The third rule
+** relationship is inverted and needs to be adjusted. Constraint (4)
** was added because if X uses skip-scan less than Y it still might
-** deserve a lower cost even if it is a proper subset of Y.
+** deserve a lower cost even if it is a proper subset of Y. Constraint (5)
+** was added because a covering index probably deserves to have a lower cost
+** than a non-covering index even if it is a proper subset.
*/
static int whereLoopCheaperProperSubset(
const WhereLoop *pX, /* First WhereLoop to compare */
@@ -133359,6 +134845,10 @@ static int whereLoopCheaperProperSubset(
}
if( j<0 ) return 0; /* X not a subset of Y since term X[i] not used by Y */
}
+ if( (pX->wsFlags&WHERE_IDX_ONLY)!=0
+ && (pY->wsFlags&WHERE_IDX_ONLY)==0 ){
+ return 0; /* Constraint (5) */
+ }
return 1; /* All conditions meet */
}
@@ -133897,7 +135387,7 @@ static int whereLoopAddBtreeIndex(
pNew->wsFlags |= WHERE_COLUMN_EQ;
assert( saved_nEq==pNew->u.btree.nEq );
if( iCol==XN_ROWID
- || (iCol>0 && nInMul==0 && saved_nEq==pProbe->nKeyCol-1)
+ || (iCol>=0 && nInMul==0 && saved_nEq==pProbe->nKeyCol-1)
){
if( iCol>=0 && pProbe->uniqNotNull==0 ){
pNew->wsFlags |= WHERE_UNQ_WANTED;
@@ -134110,7 +135600,7 @@ static int indexMightHelpWithOrderBy(
}else if( (aColExpr = pIndex->aColExpr)!=0 ){
for(jj=0; jj<pIndex->nKeyCol; jj++){
if( pIndex->aiColumn[jj]!=XN_EXPR ) continue;
- if( sqlite3ExprCompare(0, pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){
+ if( sqlite3ExprCompareSkip(pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){
return 1;
}
}
@@ -134306,14 +135796,17 @@ static int whereLoopAddBtree(
}
#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
- /* Loop over all indices
- */
- for(; rc==SQLITE_OK && pProbe; pProbe=pProbe->pNext, iSortIdx++){
+ /* Loop over all indices. If there was an INDEXED BY clause, then only
+ ** consider index pProbe. */
+ for(; rc==SQLITE_OK && pProbe;
+ pProbe=(pSrc->pIBIndex ? 0 : pProbe->pNext), iSortIdx++
+ ){
if( pProbe->pPartIdxWhere!=0
&& !whereUsablePartialIndex(pSrc->iCursor, pWC, pProbe->pPartIdxWhere) ){
testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */
continue; /* Partial index inappropriate for this query */
}
+ if( pProbe->bNoQuery ) continue;
rSize = pProbe->aiRowLogEst[0];
pNew->u.btree.nEq = 0;
pNew->u.btree.nBtm = 0;
@@ -134418,10 +135911,6 @@ static int whereLoopAddBtree(
pBuilder->nRecValid = 0;
pBuilder->pRec = 0;
#endif
-
- /* If there was an INDEXED BY clause, then only that one index is
- ** considered. */
- if( pSrc->pIBIndex ) break;
}
return rc;
}
@@ -134576,6 +136065,27 @@ static int whereLoopAddVirtualOne(
return rc;
}
+/*
+** If this function is invoked from within an xBestIndex() callback, it
+** returns a pointer to a buffer containing the name of the collation
+** sequence associated with element iCons of the sqlite3_index_info.aConstraint
+** array. Or, if iCons is out of range or there is no active xBestIndex
+** call, return NULL.
+*/
+SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info *pIdxInfo, int iCons){
+ HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1];
+ const char *zRet = 0;
+ if( iCons>=0 && iCons<pIdxInfo->nConstraint ){
+ CollSeq *pC = 0;
+ int iTerm = pIdxInfo->aConstraint[iCons].iTermOffset;
+ Expr *pX = pHidden->pWC->a[iTerm].pExpr;
+ if( pX->pLeft ){
+ pC = sqlite3BinaryCompareCollSeq(pHidden->pParse, pX->pLeft, pX->pRight);
+ }
+ zRet = (pC ? pC->zName : "BINARY");
+ }
+ return zRet;
+}
/*
** Add all WhereLoop objects for a table of the join identified by
@@ -135020,14 +136530,10 @@ static i8 wherePathSatisfiesOrderBy(
if( j>=pLoop->nLTerm ) continue;
}
if( (pTerm->eOperator&(WO_EQ|WO_IS))!=0 && pOBExpr->iColumn>=0 ){
- const char *z1, *z2;
- pColl = sqlite3ExprCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
- if( !pColl ) pColl = db->pDfltColl;
- z1 = pColl->zName;
- pColl = sqlite3ExprCollSeq(pWInfo->pParse, pTerm->pExpr);
- if( !pColl ) pColl = db->pDfltColl;
- z2 = pColl->zName;
- if( sqlite3StrICmp(z1, z2)!=0 ) continue;
+ if( sqlite3ExprCollSeqMatch(pWInfo->pParse,
+ pOrderBy->a[i].pExpr, pTerm->pExpr)==0 ){
+ continue;
+ }
testcase( pTerm->pExpr->op==TK_IS );
}
obSat |= MASKBIT(i);
@@ -135099,7 +136605,7 @@ static i8 wherePathSatisfiesOrderBy(
if( pIndex ){
iColumn = pIndex->aiColumn[j];
revIdx = pIndex->aSortOrder[j];
- if( iColumn==pIndex->pTable->iPKey ) iColumn = -1;
+ if( iColumn==pIndex->pTable->iPKey ) iColumn = XN_ROWID;
}else{
iColumn = XN_ROWID;
revIdx = 0;
@@ -135126,19 +136632,18 @@ static i8 wherePathSatisfiesOrderBy(
testcase( wctrlFlags & WHERE_GROUPBY );
testcase( wctrlFlags & WHERE_DISTINCTBY );
if( (wctrlFlags & (WHERE_GROUPBY|WHERE_DISTINCTBY))==0 ) bOnce = 0;
- if( iColumn>=(-1) ){
+ if( iColumn>=XN_ROWID ){
if( pOBExpr->op!=TK_COLUMN ) continue;
if( pOBExpr->iTable!=iCur ) continue;
if( pOBExpr->iColumn!=iColumn ) continue;
}else{
- if( sqlite3ExprCompare(0,
- pOBExpr,pIndex->aColExpr->a[j].pExpr,iCur) ){
+ Expr *pIdxExpr = pIndex->aColExpr->a[j].pExpr;
+ if( sqlite3ExprCompareSkip(pOBExpr, pIdxExpr, iCur) ){
continue;
}
}
- if( iColumn>=0 ){
- pColl = sqlite3ExprCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
- if( !pColl ) pColl = db->pDfltColl;
+ if( iColumn!=XN_ROWID ){
+ pColl = sqlite3ExprNNCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
if( sqlite3StrICmp(pColl->zName, pIndex->azColl[j])!=0 ) continue;
}
pLoop->u.btree.nIdxCol = j+1;
@@ -135775,6 +137280,7 @@ static int exprIsDeterministic(Expr *p){
memset(&w, 0, sizeof(w));
w.eCode = 1;
w.xExprCallback = exprNodeIsDeterministic;
+ w.xSelectCallback = sqlite3SelectWalkFail;
sqlite3WalkExpr(&w, p);
return w.eCode;
}
@@ -135984,37 +137490,38 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
if( wctrlFlags & WHERE_WANT_DISTINCT ){
pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
}
- }
-
- /* Assign a bit from the bitmask to every term in the FROM clause.
- **
- ** The N-th term of the FROM clause is assigned a bitmask of 1<<N.
- **
- ** The rule of the previous sentence ensures thta if X is the bitmask for
- ** a table T, then X-1 is the bitmask for all other tables to the left of T.
- ** Knowing the bitmask for all tables to the left of a left join is
- ** important. Ticket #3015.
- **
- ** Note that bitmasks are created for all pTabList->nSrc tables in
- ** pTabList, not just the first nTabList tables. nTabList is normally
- ** equal to pTabList->nSrc but might be shortened to 1 if the
- ** WHERE_OR_SUBCLAUSE flag is set.
- */
- for(ii=0; ii<pTabList->nSrc; ii++){
- createMask(pMaskSet, pTabList->a[ii].iCursor);
- sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC);
- }
-#ifdef SQLITE_DEBUG
- {
- Bitmask mx = 0;
- for(ii=0; ii<pTabList->nSrc; ii++){
- Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor);
- assert( m>=mx );
- mx = m;
+ }else{
+ /* Assign a bit from the bitmask to every term in the FROM clause.
+ **
+ ** The N-th term of the FROM clause is assigned a bitmask of 1<<N.
+ **
+ ** The rule of the previous sentence ensures thta if X is the bitmask for
+ ** a table T, then X-1 is the bitmask for all other tables to the left of T.
+ ** Knowing the bitmask for all tables to the left of a left join is
+ ** important. Ticket #3015.
+ **
+ ** Note that bitmasks are created for all pTabList->nSrc tables in
+ ** pTabList, not just the first nTabList tables. nTabList is normally
+ ** equal to pTabList->nSrc but might be shortened to 1 if the
+ ** WHERE_OR_SUBCLAUSE flag is set.
+ */
+ ii = 0;
+ do{
+ createMask(pMaskSet, pTabList->a[ii].iCursor);
+ sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC);
+ }while( (++ii)<pTabList->nSrc );
+ #ifdef SQLITE_DEBUG
+ {
+ Bitmask mx = 0;
+ for(ii=0; ii<pTabList->nSrc; ii++){
+ Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor);
+ assert( m>=mx );
+ mx = m;
+ }
}
+ #endif
}
-#endif
-
+
/* Analyze all of the subexpressions. */
sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC);
if( db->mallocFailed ) goto whereBeginError;
@@ -136119,35 +137626,80 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
}
}
#endif
- /* Attempt to omit tables from the join that do not effect the result */
+
+ /* Attempt to omit tables from the join that do not affect the result.
+ ** For a table to not affect the result, the following must be true:
+ **
+ ** 1) The query must not be an aggregate.
+ ** 2) The table must be the RHS of a LEFT JOIN.
+ ** 3) Either the query must be DISTINCT, or else the ON or USING clause
+ ** must contain a constraint that limits the scan of the table to
+ ** at most a single row.
+ ** 4) The table must not be referenced by any part of the query apart
+ ** from its own USING or ON clause.
+ **
+ ** For example, given:
+ **
+ ** CREATE TABLE t1(ipk INTEGER PRIMARY KEY, v1);
+ ** CREATE TABLE t2(ipk INTEGER PRIMARY KEY, v2);
+ ** CREATE TABLE t3(ipk INTEGER PRIMARY KEY, v3);
+ **
+ ** then table t2 can be omitted from the following:
+ **
+ ** SELECT v1, v3 FROM t1
+ ** LEFT JOIN t2 USING (t1.ipk=t2.ipk)
+ ** LEFT JOIN t3 USING (t1.ipk=t3.ipk)
+ **
+ ** or from:
+ **
+ ** SELECT DISTINCT v1, v3 FROM t1
+ ** LEFT JOIN t2
+ ** LEFT JOIN t3 USING (t1.ipk=t3.ipk)
+ */
+ notReady = ~(Bitmask)0;
if( pWInfo->nLevel>=2
- && pResultSet!=0
+ && pResultSet!=0 /* guarantees condition (1) above */
&& OptimizationEnabled(db, SQLITE_OmitNoopJoin)
){
+ int i;
Bitmask tabUsed = sqlite3WhereExprListUsage(pMaskSet, pResultSet);
if( sWLB.pOrderBy ){
tabUsed |= sqlite3WhereExprListUsage(pMaskSet, sWLB.pOrderBy);
}
- while( pWInfo->nLevel>=2 ){
+ for(i=pWInfo->nLevel-1; i>=1; i--){
WhereTerm *pTerm, *pEnd;
- pLoop = pWInfo->a[pWInfo->nLevel-1].pWLoop;
- if( (pWInfo->pTabList->a[pLoop->iTab].fg.jointype & JT_LEFT)==0 ) break;
+ struct SrcList_item *pItem;
+ pLoop = pWInfo->a[i].pWLoop;
+ pItem = &pWInfo->pTabList->a[pLoop->iTab];
+ if( (pItem->fg.jointype & JT_LEFT)==0 ) continue;
if( (wctrlFlags & WHERE_WANT_DISTINCT)==0
&& (pLoop->wsFlags & WHERE_ONEROW)==0
){
- break;
+ continue;
}
- if( (tabUsed & pLoop->maskSelf)!=0 ) break;
+ if( (tabUsed & pLoop->maskSelf)!=0 ) continue;
pEnd = sWLB.pWC->a + sWLB.pWC->nTerm;
for(pTerm=sWLB.pWC->a; pTerm<pEnd; pTerm++){
- if( (pTerm->prereqAll & pLoop->maskSelf)!=0
- && !ExprHasProperty(pTerm->pExpr, EP_FromJoin)
- ){
- break;
+ if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
+ if( !ExprHasProperty(pTerm->pExpr, EP_FromJoin)
+ || pTerm->pExpr->iRightJoinTable!=pItem->iCursor
+ ){
+ break;
+ }
}
}
- if( pTerm<pEnd ) break;
+ if( pTerm<pEnd ) continue;
WHERETRACE(0xffff, ("-> drop loop %c not used\n", pLoop->cId));
+ notReady &= ~pLoop->maskSelf;
+ for(pTerm=sWLB.pWC->a; pTerm<pEnd; pTerm++){
+ if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
+ pTerm->wtFlags |= TERM_CODED;
+ }
+ }
+ if( i!=pWInfo->nLevel-1 ){
+ int nByte = (pWInfo->nLevel-1-i) * sizeof(WhereLevel);
+ memmove(&pWInfo->a[i], &pWInfo->a[i+1], nByte);
+ }
pWInfo->nLevel--;
nTabList--;
}
@@ -136157,15 +137709,32 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
/* If the caller is an UPDATE or DELETE statement that is requesting
** to use a one-pass algorithm, determine if this is appropriate.
+ **
+ ** A one-pass approach can be used if the caller has requested one
+ ** and either (a) the scan visits at most one row or (b) each
+ ** of the following are true:
+ **
+ ** * the caller has indicated that a one-pass approach can be used
+ ** with multiple rows (by setting WHERE_ONEPASS_MULTIROW), and
+ ** * the table is not a virtual table, and
+ ** * either the scan does not use the OR optimization or the caller
+ ** is a DELETE operation (WHERE_DUPLICATES_OK is only specified
+ ** for DELETE).
+ **
+ ** The last qualification is because an UPDATE statement uses
+ ** WhereInfo.aiCurOnePass[1] to determine whether or not it really can
+ ** use a one-pass approach, and this is not set accurately for scans
+ ** that use the OR optimization.
*/
assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){
int wsFlags = pWInfo->a[0].pWLoop->wsFlags;
int bOnerow = (wsFlags & WHERE_ONEROW)!=0;
- if( bOnerow
- || ((wctrlFlags & WHERE_ONEPASS_MULTIROW)!=0
- && 0==(wsFlags & WHERE_VIRTUALTABLE))
- ){
+ if( bOnerow || (
+ 0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW)
+ && 0==(wsFlags & WHERE_VIRTUALTABLE)
+ && (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK))
+ )){
pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI;
if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){
if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){
@@ -136237,7 +137806,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
Index *pIx = pLoop->u.btree.pIndex;
int iIndexCur;
int op = OP_OpenRead;
- /* iAuxArg is always set if to a positive value if ONEPASS is possible */
+ /* iAuxArg is always set to a positive value if ONEPASS is possible */
assert( iAuxArg!=0 || (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 );
if( !HasRowid(pTab) && IsPrimaryKeyIndex(pIx)
&& (wctrlFlags & WHERE_OR_SUBCLAUSE)!=0
@@ -136302,7 +137871,6 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
** loop below generates code for a single nested loop of the VM
** program.
*/
- notReady = ~(Bitmask)0;
for(ii=0; ii<nTabList; ii++){
int addrExplain;
int wsFlags;
@@ -136366,6 +137934,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
Index *pIdx;
int n;
if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED
+ && i==pWInfo->nLevel-1 /* Ticket [ef9318757b152e3] 2017-10-21 */
&& (pLoop->wsFlags & WHERE_INDEXED)!=0
&& (pIdx = pLoop->u.btree.pIndex)->hasStat1
&& (n = pLoop->u.btree.nIdxCol)>0
@@ -136432,7 +138001,8 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v);
assert( (ws & WHERE_IDX_ONLY)==0 || (ws & WHERE_INDEXED)!=0 );
if( (ws & WHERE_IDX_ONLY)==0 ){
- sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor);
+ assert( pLevel->iTabCur==pTabList->a[pLevel->iFrom].iCursor );
+ sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur);
}
if( (ws & WHERE_INDEXED)
|| ((ws & WHERE_MULTI_OR) && pLevel->u.pCovidx)
@@ -136501,7 +138071,11 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
pOp = sqlite3VdbeGetOp(v, k);
for(; k<last; k++, pOp++){
if( pOp->p1!=pLevel->iTabCur ) continue;
- if( pOp->opcode==OP_Column ){
+ if( pOp->opcode==OP_Column
+#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC
+ || pOp->opcode==OP_Offset
+#endif
+ ){
int x = pOp->p2;
assert( pIdx->pTable==pTab );
if( !HasRowid(pTab) ){
@@ -136601,15 +138175,6 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
#define YYMALLOCARGTYPE u64
/*
-** An instance of this structure holds information about the
-** LIMIT clause of a SELECT statement.
-*/
-struct LimitVal {
- Expr *pLimit; /* The LIMIT expression. NULL if there is no limit */
- Expr *pOffset; /* The OFFSET expression. NULL if there is none */
-};
-
-/*
** An instance of the following structure describes the event of a
** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
** TK_DELETE, or TK_INSTEAD. If the event is of the form
@@ -136652,20 +138217,12 @@ static void disableLookaside(Parse *pParse){
}
}
- /* This is a utility routine used to set the ExprSpan.zStart and
- ** ExprSpan.zEnd values of pOut so that the span covers the complete
- ** range of text beginning with pStart and going to the end of pEnd.
- */
- static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
- pOut->zStart = pStart->z;
- pOut->zEnd = &pEnd->z[pEnd->n];
- }
/* Construct a new Expr object from a single identifier. Use the
** new Expr to populate pOut. Set the span of pOut to be the identifier
** that created the expression.
*/
- static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token t){
+ static Expr *tokenExpr(Parse *pParse, int op, Token t){
Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
if( p ){
memset(p, 0, sizeof(Expr));
@@ -136683,45 +138240,9 @@ static void disableLookaside(Parse *pParse){
p->nHeight = 1;
#endif
}
- pOut->pExpr = p;
- pOut->zStart = t.z;
- pOut->zEnd = &t.z[t.n];
- }
-
- /* This routine constructs a binary expression node out of two ExprSpan
- ** objects and uses the result to populate a new ExprSpan object.
- */
- static void spanBinaryExpr(
- Parse *pParse, /* The parsing context. Errors accumulate here */
- int op, /* The binary operation */
- ExprSpan *pLeft, /* The left operand, and output */
- ExprSpan *pRight /* The right operand */
- ){
- pLeft->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr);
- pLeft->zEnd = pRight->zEnd;
- }
-
- /* If doNot is true, then add a TK_NOT Expr-node wrapper around the
- ** outside of *ppExpr.
- */
- static void exprNot(Parse *pParse, int doNot, ExprSpan *pSpan){
- if( doNot ){
- pSpan->pExpr = sqlite3PExpr(pParse, TK_NOT, pSpan->pExpr, 0);
- }
+ return p;
}
- /* Construct an expression node for a unary postfix operator
- */
- static void spanUnaryPostfix(
- Parse *pParse, /* Parsing context to record errors */
- int op, /* The operator */
- ExprSpan *pOperand, /* The operand, and output */
- Token *pPostOp /* The operand token for setting the span */
- ){
- pOperand->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
- pOperand->zEnd = &pPostOp->z[pPostOp->n];
- }
-
/* A routine to convert a binary TK_IS or TK_ISNOT expression into a
** unary TK_ISNULL or TK_NOTNULL expression. */
static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
@@ -136733,20 +138254,6 @@ static void disableLookaside(Parse *pParse){
}
}
- /* Construct an expression node for a unary prefix operator
- */
- static void spanUnaryPrefix(
- ExprSpan *pOut, /* Write the new expression node here */
- Parse *pParse, /* Parsing context to record errors */
- int op, /* The operator */
- ExprSpan *pOperand, /* The operand */
- Token *pPreOp /* The operand token for setting the span */
- ){
- pOut->zStart = pPreOp->z;
- pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
- pOut->zEnd = pOperand->zEnd;
- }
-
/* Add a single new term to an ExprList that is used to store a
** list of identifiers. Report an error if the ID list contains
** a COLLATE clause or an ASC or DESC keyword, except ignore the
@@ -136815,38 +138322,39 @@ static void disableLookaside(Parse *pParse){
** defined, then do no error processing.
** YYNSTATE the combined number of states.
** YYNRULE the number of rules in the grammar
+** YYNTOKEN Number of terminal symbols
** YY_MAX_SHIFT Maximum value for shift actions
** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions
** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions
-** YY_MIN_REDUCE Maximum value for reduce actions
** YY_ERROR_ACTION The yy_action[] code for syntax error
** YY_ACCEPT_ACTION The yy_action[] code for accept
** YY_NO_ACTION The yy_action[] code for no-op
+** YY_MIN_REDUCE Minimum value for reduce actions
+** YY_MAX_REDUCE Maximum value for reduce actions
*/
#ifndef INTERFACE
# define INTERFACE 1
#endif
/************* Begin control #defines *****************************************/
#define YYCODETYPE unsigned char
-#define YYNOCODE 252
+#define YYNOCODE 253
#define YYACTIONTYPE unsigned short int
-#define YYWILDCARD 69
+#define YYWILDCARD 83
#define sqlite3ParserTOKENTYPE Token
typedef union {
int yyinit;
sqlite3ParserTOKENTYPE yy0;
- Expr* yy72;
- TriggerStep* yy145;
- ExprList* yy148;
- SrcList* yy185;
- ExprSpan yy190;
- int yy194;
- Select* yy243;
- IdList* yy254;
- With* yy285;
- struct TrigEvent yy332;
- struct LimitVal yy354;
- struct {int value; int mask;} yy497;
+ int yy4;
+ struct TrigEvent yy90;
+ TriggerStep* yy203;
+ struct {int value; int mask;} yy215;
+ SrcList* yy259;
+ Expr* yy314;
+ ExprList* yy322;
+ const char* yy336;
+ IdList* yy384;
+ Select* yy387;
+ With* yy451;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -136856,16 +138364,17 @@ typedef union {
#define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
#define sqlite3ParserARG_STORE yypParser->pParse = pParse
#define YYFALLBACK 1
-#define YYNSTATE 455
-#define YYNRULE 329
-#define YY_MAX_SHIFT 454
-#define YY_MIN_SHIFTREDUCE 664
-#define YY_MAX_SHIFTREDUCE 992
-#define YY_MIN_REDUCE 993
-#define YY_MAX_REDUCE 1321
-#define YY_ERROR_ACTION 1322
-#define YY_ACCEPT_ACTION 1323
-#define YY_NO_ACTION 1324
+#define YYNSTATE 466
+#define YYNRULE 330
+#define YYNTOKEN 143
+#define YY_MAX_SHIFT 465
+#define YY_MIN_SHIFTREDUCE 675
+#define YY_MAX_SHIFTREDUCE 1004
+#define YY_ERROR_ACTION 1005
+#define YY_ACCEPT_ACTION 1006
+#define YY_NO_ACTION 1007
+#define YY_MIN_REDUCE 1008
+#define YY_MAX_REDUCE 1337
/************* End control #defines *******************************************/
/* Define the yytestcase() macro to be a no-op if is not already defined
@@ -136895,9 +138404,6 @@ typedef union {
** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then
** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE.
**
-** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE
-** and YY_MAX_REDUCE
-**
** N == YY_ERROR_ACTION A syntax error has occurred.
**
** N == YY_ACCEPT_ACTION The parser accepts its input.
@@ -136905,25 +138411,22 @@ typedef union {
** N == YY_NO_ACTION No such action. Denotes unused
** slots in the yy_action[] table.
**
+** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE
+** and YY_MAX_REDUCE
+**
** The action table is constructed as a single large table named yy_action[].
** Given state S and lookahead X, the action is computed as either:
**
** (A) N = yy_action[ yy_shift_ofst[S] + X ]
** (B) N = yy_default[S]
**
-** The (A) formula is preferred. The B formula is used instead if:
-** (1) The yy_shift_ofst[S]+X value is out of range, or
-** (2) yy_lookahead[yy_shift_ofst[S]+X] is not equal to X, or
-** (3) yy_shift_ofst[S] equal YY_SHIFT_USE_DFLT.
-** (Implementation note: YY_SHIFT_USE_DFLT is chosen so that
-** YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X.
-** Hence only tests (1) and (2) need to be evaluated.)
+** The (A) formula is preferred. The B formula is used instead if
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X.
**
** The formulas above are for computing the action when the lookahead is
** a terminal symbol. If the lookahead is a non-terminal (as occurs after
** a reduce action) then the yy_reduce_ofst[] array is used in place of
-** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
-** YY_SHIFT_USE_DFLT.
+** the yy_shift_ofst[] array.
**
** The following are the tables generated in this section:
**
@@ -136937,463 +138440,474 @@ typedef union {
** yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (1565)
+#define YY_ACTTAB_COUNT (1541)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 324, 410, 342, 747, 747, 203, 939, 353, 969, 98,
- /* 10 */ 98, 98, 98, 91, 96, 96, 96, 96, 95, 95,
- /* 20 */ 94, 94, 94, 93, 350, 1323, 155, 155, 2, 808,
- /* 30 */ 971, 971, 98, 98, 98, 98, 20, 96, 96, 96,
- /* 40 */ 96, 95, 95, 94, 94, 94, 93, 350, 92, 89,
- /* 50 */ 178, 99, 100, 90, 847, 850, 839, 839, 97, 97,
- /* 60 */ 98, 98, 98, 98, 350, 96, 96, 96, 96, 95,
- /* 70 */ 95, 94, 94, 94, 93, 350, 324, 339, 969, 262,
- /* 80 */ 364, 251, 212, 169, 287, 404, 282, 403, 199, 786,
- /* 90 */ 242, 411, 21, 950, 378, 280, 93, 350, 787, 95,
- /* 100 */ 95, 94, 94, 94, 93, 350, 971, 971, 96, 96,
- /* 110 */ 96, 96, 95, 95, 94, 94, 94, 93, 350, 808,
- /* 120 */ 328, 242, 411, 1235, 826, 1235, 132, 99, 100, 90,
- /* 130 */ 847, 850, 839, 839, 97, 97, 98, 98, 98, 98,
- /* 140 */ 449, 96, 96, 96, 96, 95, 95, 94, 94, 94,
- /* 150 */ 93, 350, 324, 819, 348, 347, 120, 818, 120, 75,
- /* 160 */ 52, 52, 950, 951, 952, 1084, 977, 146, 360, 262,
- /* 170 */ 369, 261, 950, 975, 954, 976, 92, 89, 178, 370,
- /* 180 */ 230, 370, 971, 971, 1141, 360, 359, 101, 818, 818,
- /* 190 */ 820, 383, 24, 1286, 380, 427, 412, 368, 978, 379,
- /* 200 */ 978, 1032, 324, 99, 100, 90, 847, 850, 839, 839,
- /* 210 */ 97, 97, 98, 98, 98, 98, 372, 96, 96, 96,
- /* 220 */ 96, 95, 95, 94, 94, 94, 93, 350, 950, 132,
- /* 230 */ 890, 449, 971, 971, 890, 60, 94, 94, 94, 93,
- /* 240 */ 350, 950, 951, 952, 954, 103, 360, 950, 384, 333,
- /* 250 */ 697, 52, 52, 99, 100, 90, 847, 850, 839, 839,
- /* 260 */ 97, 97, 98, 98, 98, 98, 1022, 96, 96, 96,
- /* 270 */ 96, 95, 95, 94, 94, 94, 93, 350, 324, 454,
- /* 280 */ 995, 449, 227, 61, 157, 243, 343, 114, 1025, 1211,
- /* 290 */ 147, 826, 950, 372, 1071, 950, 319, 950, 951, 952,
- /* 300 */ 194, 10, 10, 401, 398, 397, 1211, 1213, 971, 971,
- /* 310 */ 757, 171, 170, 157, 396, 336, 950, 951, 952, 697,
- /* 320 */ 819, 310, 153, 950, 818, 320, 82, 23, 80, 99,
- /* 330 */ 100, 90, 847, 850, 839, 839, 97, 97, 98, 98,
- /* 340 */ 98, 98, 888, 96, 96, 96, 96, 95, 95, 94,
- /* 350 */ 94, 94, 93, 350, 324, 818, 818, 820, 277, 231,
- /* 360 */ 300, 950, 951, 952, 950, 951, 952, 1211, 194, 25,
- /* 370 */ 449, 401, 398, 397, 950, 354, 300, 449, 950, 74,
- /* 380 */ 449, 1, 396, 132, 971, 971, 950, 224, 224, 808,
- /* 390 */ 10, 10, 950, 951, 952, 1290, 132, 52, 52, 414,
- /* 400 */ 52, 52, 1063, 1063, 338, 99, 100, 90, 847, 850,
- /* 410 */ 839, 839, 97, 97, 98, 98, 98, 98, 1114, 96,
- /* 420 */ 96, 96, 96, 95, 95, 94, 94, 94, 93, 350,
- /* 430 */ 324, 1113, 427, 417, 701, 427, 426, 1260, 1260, 262,
- /* 440 */ 369, 261, 950, 950, 951, 952, 752, 950, 951, 952,
- /* 450 */ 449, 751, 449, 1058, 1037, 950, 951, 952, 442, 706,
- /* 460 */ 971, 971, 1058, 393, 92, 89, 178, 446, 446, 446,
- /* 470 */ 51, 51, 52, 52, 438, 773, 1024, 92, 89, 178,
- /* 480 */ 172, 99, 100, 90, 847, 850, 839, 839, 97, 97,
- /* 490 */ 98, 98, 98, 98, 198, 96, 96, 96, 96, 95,
- /* 500 */ 95, 94, 94, 94, 93, 350, 324, 427, 407, 909,
- /* 510 */ 694, 950, 951, 952, 92, 89, 178, 224, 224, 157,
- /* 520 */ 241, 221, 418, 299, 771, 910, 415, 374, 449, 414,
- /* 530 */ 58, 323, 1061, 1061, 1242, 378, 971, 971, 378, 772,
- /* 540 */ 448, 911, 362, 735, 296, 681, 9, 9, 52, 52,
- /* 550 */ 234, 329, 234, 256, 416, 736, 280, 99, 100, 90,
- /* 560 */ 847, 850, 839, 839, 97, 97, 98, 98, 98, 98,
- /* 570 */ 449, 96, 96, 96, 96, 95, 95, 94, 94, 94,
- /* 580 */ 93, 350, 324, 422, 72, 449, 827, 120, 367, 449,
- /* 590 */ 10, 10, 5, 301, 203, 449, 177, 969, 253, 419,
- /* 600 */ 255, 771, 200, 175, 233, 10, 10, 836, 836, 36,
- /* 610 */ 36, 1289, 971, 971, 724, 37, 37, 348, 347, 424,
- /* 620 */ 203, 260, 771, 969, 232, 930, 1316, 870, 337, 1316,
- /* 630 */ 421, 848, 851, 99, 100, 90, 847, 850, 839, 839,
- /* 640 */ 97, 97, 98, 98, 98, 98, 268, 96, 96, 96,
- /* 650 */ 96, 95, 95, 94, 94, 94, 93, 350, 324, 840,
- /* 660 */ 449, 978, 813, 978, 1200, 449, 909, 969, 715, 349,
- /* 670 */ 349, 349, 928, 177, 449, 930, 1317, 254, 198, 1317,
- /* 680 */ 12, 12, 910, 402, 449, 27, 27, 250, 971, 971,
- /* 690 */ 118, 716, 162, 969, 38, 38, 268, 176, 911, 771,
- /* 700 */ 432, 1265, 939, 353, 39, 39, 316, 991, 324, 99,
- /* 710 */ 100, 90, 847, 850, 839, 839, 97, 97, 98, 98,
- /* 720 */ 98, 98, 928, 96, 96, 96, 96, 95, 95, 94,
- /* 730 */ 94, 94, 93, 350, 449, 329, 449, 357, 971, 971,
- /* 740 */ 1041, 316, 929, 340, 893, 893, 386, 669, 670, 671,
- /* 750 */ 275, 1318, 317, 992, 40, 40, 41, 41, 268, 99,
- /* 760 */ 100, 90, 847, 850, 839, 839, 97, 97, 98, 98,
- /* 770 */ 98, 98, 449, 96, 96, 96, 96, 95, 95, 94,
- /* 780 */ 94, 94, 93, 350, 324, 449, 355, 449, 992, 449,
- /* 790 */ 1016, 330, 42, 42, 786, 270, 449, 273, 449, 228,
- /* 800 */ 449, 298, 449, 787, 449, 28, 28, 29, 29, 31,
- /* 810 */ 31, 449, 1141, 449, 971, 971, 43, 43, 44, 44,
- /* 820 */ 45, 45, 11, 11, 46, 46, 887, 78, 887, 268,
- /* 830 */ 268, 105, 105, 47, 47, 99, 100, 90, 847, 850,
- /* 840 */ 839, 839, 97, 97, 98, 98, 98, 98, 449, 96,
- /* 850 */ 96, 96, 96, 95, 95, 94, 94, 94, 93, 350,
- /* 860 */ 324, 449, 117, 449, 1073, 158, 449, 691, 48, 48,
- /* 870 */ 229, 1241, 449, 1250, 449, 414, 449, 334, 449, 245,
- /* 880 */ 449, 33, 33, 49, 49, 449, 50, 50, 246, 1141,
- /* 890 */ 971, 971, 34, 34, 122, 122, 123, 123, 124, 124,
- /* 900 */ 56, 56, 268, 81, 249, 35, 35, 197, 196, 195,
- /* 910 */ 324, 99, 100, 90, 847, 850, 839, 839, 97, 97,
- /* 920 */ 98, 98, 98, 98, 449, 96, 96, 96, 96, 95,
- /* 930 */ 95, 94, 94, 94, 93, 350, 449, 691, 449, 1141,
- /* 940 */ 971, 971, 968, 1207, 106, 106, 268, 1209, 268, 1266,
- /* 950 */ 2, 886, 268, 886, 335, 1040, 53, 53, 107, 107,
- /* 960 */ 324, 99, 100, 90, 847, 850, 839, 839, 97, 97,
- /* 970 */ 98, 98, 98, 98, 449, 96, 96, 96, 96, 95,
- /* 980 */ 95, 94, 94, 94, 93, 350, 449, 1070, 449, 1066,
- /* 990 */ 971, 971, 1039, 267, 108, 108, 445, 330, 331, 133,
- /* 1000 */ 223, 175, 301, 225, 385, 1255, 104, 104, 121, 121,
- /* 1010 */ 324, 99, 88, 90, 847, 850, 839, 839, 97, 97,
- /* 1020 */ 98, 98, 98, 98, 1141, 96, 96, 96, 96, 95,
- /* 1030 */ 95, 94, 94, 94, 93, 350, 449, 346, 449, 167,
- /* 1040 */ 971, 971, 925, 810, 371, 318, 202, 202, 373, 263,
- /* 1050 */ 394, 202, 74, 208, 721, 722, 119, 119, 112, 112,
- /* 1060 */ 324, 406, 100, 90, 847, 850, 839, 839, 97, 97,
- /* 1070 */ 98, 98, 98, 98, 449, 96, 96, 96, 96, 95,
- /* 1080 */ 95, 94, 94, 94, 93, 350, 449, 752, 449, 344,
- /* 1090 */ 971, 971, 751, 278, 111, 111, 74, 714, 713, 704,
- /* 1100 */ 286, 877, 749, 1279, 257, 77, 109, 109, 110, 110,
- /* 1110 */ 1230, 285, 1134, 90, 847, 850, 839, 839, 97, 97,
- /* 1120 */ 98, 98, 98, 98, 1233, 96, 96, 96, 96, 95,
- /* 1130 */ 95, 94, 94, 94, 93, 350, 86, 444, 449, 3,
- /* 1140 */ 1193, 449, 1069, 132, 351, 120, 1013, 86, 444, 780,
- /* 1150 */ 3, 1091, 202, 376, 447, 351, 1229, 120, 55, 55,
- /* 1160 */ 449, 57, 57, 822, 873, 447, 449, 208, 449, 704,
- /* 1170 */ 449, 877, 237, 433, 435, 120, 439, 428, 361, 120,
- /* 1180 */ 54, 54, 132, 449, 433, 826, 52, 52, 26, 26,
- /* 1190 */ 30, 30, 381, 132, 408, 443, 826, 689, 264, 389,
- /* 1200 */ 116, 269, 272, 32, 32, 83, 84, 120, 274, 120,
- /* 1210 */ 120, 276, 85, 351, 451, 450, 83, 84, 818, 1054,
- /* 1220 */ 1038, 427, 429, 85, 351, 451, 450, 120, 120, 818,
- /* 1230 */ 377, 218, 281, 822, 1107, 1140, 86, 444, 409, 3,
- /* 1240 */ 1087, 1098, 430, 431, 351, 302, 303, 1146, 1021, 818,
- /* 1250 */ 818, 820, 821, 19, 447, 1015, 1004, 1003, 1005, 1273,
- /* 1260 */ 818, 818, 820, 821, 19, 289, 159, 291, 293, 7,
- /* 1270 */ 315, 173, 259, 433, 1129, 363, 252, 1232, 375, 1037,
- /* 1280 */ 295, 434, 168, 986, 399, 826, 284, 1204, 1203, 205,
- /* 1290 */ 1276, 308, 1249, 86, 444, 983, 3, 1247, 332, 144,
- /* 1300 */ 130, 351, 72, 135, 59, 83, 84, 756, 137, 365,
- /* 1310 */ 1126, 447, 85, 351, 451, 450, 139, 226, 818, 140,
- /* 1320 */ 156, 62, 314, 314, 313, 215, 311, 366, 392, 678,
- /* 1330 */ 433, 185, 141, 1234, 142, 160, 148, 1136, 1198, 382,
- /* 1340 */ 189, 67, 826, 180, 388, 248, 1218, 1099, 219, 818,
- /* 1350 */ 818, 820, 821, 19, 247, 190, 266, 154, 390, 271,
- /* 1360 */ 191, 192, 83, 84, 1006, 405, 1057, 182, 321, 85,
- /* 1370 */ 351, 451, 450, 1056, 183, 818, 341, 132, 181, 706,
- /* 1380 */ 1055, 420, 76, 444, 1029, 3, 322, 1028, 283, 1048,
- /* 1390 */ 351, 1095, 1027, 1288, 1047, 71, 204, 6, 288, 290,
- /* 1400 */ 447, 1096, 1094, 1093, 79, 292, 818, 818, 820, 821,
- /* 1410 */ 19, 294, 297, 437, 345, 441, 102, 1184, 1077, 433,
- /* 1420 */ 238, 425, 73, 305, 239, 304, 325, 240, 423, 306,
- /* 1430 */ 307, 826, 213, 1012, 22, 945, 452, 214, 216, 217,
- /* 1440 */ 453, 1001, 115, 996, 125, 126, 235, 127, 665, 352,
- /* 1450 */ 326, 83, 84, 358, 166, 244, 179, 327, 85, 351,
- /* 1460 */ 451, 450, 134, 356, 818, 113, 885, 806, 883, 136,
- /* 1470 */ 128, 138, 738, 258, 184, 899, 143, 145, 63, 64,
- /* 1480 */ 65, 66, 129, 902, 187, 186, 898, 8, 13, 188,
- /* 1490 */ 265, 891, 149, 202, 980, 818, 818, 820, 821, 19,
- /* 1500 */ 150, 387, 161, 680, 285, 391, 151, 395, 400, 193,
- /* 1510 */ 68, 14, 236, 279, 15, 69, 717, 825, 131, 824,
- /* 1520 */ 853, 70, 746, 16, 413, 750, 4, 174, 220, 222,
- /* 1530 */ 152, 779, 857, 774, 201, 77, 74, 868, 17, 854,
- /* 1540 */ 852, 908, 18, 907, 207, 206, 934, 163, 436, 210,
- /* 1550 */ 935, 164, 209, 165, 440, 856, 823, 690, 87, 211,
- /* 1560 */ 309, 312, 1281, 940, 1280,
+ /* 0 */ 1006, 156, 156, 2, 1302, 90, 87, 179, 90, 87,
+ /* 10 */ 179, 460, 1048, 460, 465, 1010, 460, 333, 1130, 335,
+ /* 20 */ 246, 330, 112, 303, 439, 1258, 304, 419, 1129, 1087,
+ /* 30 */ 72, 798, 50, 50, 50, 50, 331, 30, 30, 799,
+ /* 40 */ 951, 364, 371, 97, 98, 88, 983, 983, 859, 862,
+ /* 50 */ 851, 851, 95, 95, 96, 96, 96, 96, 120, 371,
+ /* 60 */ 370, 120, 348, 22, 90, 87, 179, 438, 423, 438,
+ /* 70 */ 440, 335, 420, 385, 90, 87, 179, 116, 73, 163,
+ /* 80 */ 848, 848, 860, 863, 94, 94, 94, 94, 93, 93,
+ /* 90 */ 92, 92, 92, 91, 361, 97, 98, 88, 983, 983,
+ /* 100 */ 859, 862, 851, 851, 95, 95, 96, 96, 96, 96,
+ /* 110 */ 718, 365, 339, 93, 93, 92, 92, 92, 91, 361,
+ /* 120 */ 99, 371, 453, 335, 94, 94, 94, 94, 93, 93,
+ /* 130 */ 92, 92, 92, 91, 361, 852, 94, 94, 94, 94,
+ /* 140 */ 93, 93, 92, 92, 92, 91, 361, 97, 98, 88,
+ /* 150 */ 983, 983, 859, 862, 851, 851, 95, 95, 96, 96,
+ /* 160 */ 96, 96, 92, 92, 92, 91, 361, 838, 132, 195,
+ /* 170 */ 58, 244, 412, 409, 408, 335, 457, 457, 457, 304,
+ /* 180 */ 59, 332, 831, 407, 394, 962, 830, 391, 94, 94,
+ /* 190 */ 94, 94, 93, 93, 92, 92, 92, 91, 361, 97,
+ /* 200 */ 98, 88, 983, 983, 859, 862, 851, 851, 95, 95,
+ /* 210 */ 96, 96, 96, 96, 426, 357, 460, 830, 830, 832,
+ /* 220 */ 91, 361, 962, 963, 964, 195, 459, 335, 412, 409,
+ /* 230 */ 408, 280, 361, 820, 132, 11, 11, 50, 50, 407,
+ /* 240 */ 94, 94, 94, 94, 93, 93, 92, 92, 92, 91,
+ /* 250 */ 361, 97, 98, 88, 983, 983, 859, 862, 851, 851,
+ /* 260 */ 95, 95, 96, 96, 96, 96, 460, 221, 460, 264,
+ /* 270 */ 375, 254, 438, 428, 1276, 1276, 383, 1074, 1053, 335,
+ /* 280 */ 245, 422, 299, 713, 271, 271, 1074, 50, 50, 50,
+ /* 290 */ 50, 962, 94, 94, 94, 94, 93, 93, 92, 92,
+ /* 300 */ 92, 91, 361, 97, 98, 88, 983, 983, 859, 862,
+ /* 310 */ 851, 851, 95, 95, 96, 96, 96, 96, 90, 87,
+ /* 320 */ 179, 1306, 438, 437, 438, 418, 368, 253, 962, 963,
+ /* 330 */ 964, 335, 360, 360, 360, 706, 359, 358, 324, 962,
+ /* 340 */ 1281, 951, 364, 230, 94, 94, 94, 94, 93, 93,
+ /* 350 */ 92, 92, 92, 91, 361, 97, 98, 88, 983, 983,
+ /* 360 */ 859, 862, 851, 851, 95, 95, 96, 96, 96, 96,
+ /* 370 */ 769, 460, 120, 226, 226, 366, 962, 963, 964, 1089,
+ /* 380 */ 990, 900, 990, 335, 1057, 425, 421, 839, 759, 759,
+ /* 390 */ 425, 427, 50, 50, 432, 381, 94, 94, 94, 94,
+ /* 400 */ 93, 93, 92, 92, 92, 91, 361, 97, 98, 88,
+ /* 410 */ 983, 983, 859, 862, 851, 851, 95, 95, 96, 96,
+ /* 420 */ 96, 96, 460, 259, 460, 120, 117, 354, 942, 1332,
+ /* 430 */ 942, 1333, 1332, 278, 1333, 335, 680, 681, 682, 825,
+ /* 440 */ 201, 176, 303, 50, 50, 49, 49, 404, 94, 94,
+ /* 450 */ 94, 94, 93, 93, 92, 92, 92, 91, 361, 97,
+ /* 460 */ 98, 88, 983, 983, 859, 862, 851, 851, 95, 95,
+ /* 470 */ 96, 96, 96, 96, 199, 460, 380, 265, 433, 380,
+ /* 480 */ 265, 383, 256, 158, 258, 319, 1003, 335, 155, 940,
+ /* 490 */ 177, 940, 273, 379, 276, 322, 34, 34, 302, 962,
+ /* 500 */ 94, 94, 94, 94, 93, 93, 92, 92, 92, 91,
+ /* 510 */ 361, 97, 98, 88, 983, 983, 859, 862, 851, 851,
+ /* 520 */ 95, 95, 96, 96, 96, 96, 905, 905, 397, 460,
+ /* 530 */ 301, 158, 101, 319, 941, 340, 962, 963, 964, 313,
+ /* 540 */ 283, 449, 335, 327, 146, 1266, 1004, 257, 234, 248,
+ /* 550 */ 35, 35, 94, 94, 94, 94, 93, 93, 92, 92,
+ /* 560 */ 92, 91, 361, 709, 785, 1227, 97, 98, 88, 983,
+ /* 570 */ 983, 859, 862, 851, 851, 95, 95, 96, 96, 96,
+ /* 580 */ 96, 962, 1227, 1229, 245, 422, 838, 198, 197, 196,
+ /* 590 */ 1079, 1079, 1077, 1077, 1004, 1334, 320, 335, 172, 171,
+ /* 600 */ 709, 831, 159, 271, 271, 830, 76, 94, 94, 94,
+ /* 610 */ 94, 93, 93, 92, 92, 92, 91, 361, 962, 963,
+ /* 620 */ 964, 97, 98, 88, 983, 983, 859, 862, 851, 851,
+ /* 630 */ 95, 95, 96, 96, 96, 96, 830, 830, 832, 1157,
+ /* 640 */ 1157, 199, 1157, 173, 1227, 231, 232, 1282, 2, 335,
+ /* 650 */ 271, 764, 271, 820, 271, 271, 763, 389, 389, 389,
+ /* 660 */ 132, 79, 94, 94, 94, 94, 93, 93, 92, 92,
+ /* 670 */ 92, 91, 361, 97, 98, 88, 983, 983, 859, 862,
+ /* 680 */ 851, 851, 95, 95, 96, 96, 96, 96, 460, 264,
+ /* 690 */ 223, 460, 1257, 783, 1223, 1157, 1086, 1082, 80, 271,
+ /* 700 */ 78, 335, 340, 1031, 341, 344, 345, 902, 346, 10,
+ /* 710 */ 10, 902, 25, 25, 94, 94, 94, 94, 93, 93,
+ /* 720 */ 92, 92, 92, 91, 361, 97, 86, 88, 983, 983,
+ /* 730 */ 859, 862, 851, 851, 95, 95, 96, 96, 96, 96,
+ /* 740 */ 1157, 270, 395, 117, 233, 263, 235, 70, 456, 341,
+ /* 750 */ 225, 176, 335, 1305, 342, 133, 736, 966, 980, 249,
+ /* 760 */ 1150, 396, 325, 1085, 1028, 178, 94, 94, 94, 94,
+ /* 770 */ 93, 93, 92, 92, 92, 91, 361, 98, 88, 983,
+ /* 780 */ 983, 859, 862, 851, 851, 95, 95, 96, 96, 96,
+ /* 790 */ 96, 783, 783, 132, 120, 966, 120, 120, 120, 798,
+ /* 800 */ 252, 937, 335, 353, 321, 429, 355, 799, 822, 692,
+ /* 810 */ 390, 203, 446, 450, 372, 716, 454, 94, 94, 94,
+ /* 820 */ 94, 93, 93, 92, 92, 92, 91, 361, 88, 983,
+ /* 830 */ 983, 859, 862, 851, 851, 95, 95, 96, 96, 96,
+ /* 840 */ 96, 84, 455, 1225, 3, 1209, 120, 120, 382, 387,
+ /* 850 */ 120, 203, 1271, 716, 384, 168, 266, 203, 458, 72,
+ /* 860 */ 260, 1246, 84, 455, 178, 3, 378, 94, 94, 94,
+ /* 870 */ 94, 93, 93, 92, 92, 92, 91, 361, 350, 458,
+ /* 880 */ 1245, 362, 430, 213, 228, 290, 415, 285, 414, 200,
+ /* 890 */ 783, 882, 444, 726, 725, 405, 283, 921, 209, 921,
+ /* 900 */ 281, 132, 362, 72, 838, 289, 147, 733, 734, 392,
+ /* 910 */ 81, 82, 922, 444, 922, 267, 288, 83, 362, 462,
+ /* 920 */ 461, 272, 132, 830, 23, 838, 388, 923, 1216, 923,
+ /* 930 */ 1056, 81, 82, 84, 455, 899, 3, 899, 83, 362,
+ /* 940 */ 462, 461, 761, 962, 830, 75, 1, 443, 275, 747,
+ /* 950 */ 458, 5, 962, 204, 830, 830, 832, 833, 18, 748,
+ /* 960 */ 229, 962, 277, 19, 153, 317, 317, 316, 216, 314,
+ /* 970 */ 279, 460, 689, 362, 1055, 830, 830, 832, 833, 18,
+ /* 980 */ 962, 963, 964, 962, 444, 181, 460, 251, 981, 962,
+ /* 990 */ 963, 964, 8, 8, 20, 250, 838, 1070, 962, 963,
+ /* 1000 */ 964, 417, 81, 82, 768, 204, 347, 36, 36, 83,
+ /* 1010 */ 362, 462, 461, 1054, 284, 830, 84, 455, 1123, 3,
+ /* 1020 */ 962, 963, 964, 460, 183, 962, 981, 764, 889, 1107,
+ /* 1030 */ 460, 184, 763, 458, 132, 182, 74, 455, 460, 3,
+ /* 1040 */ 981, 898, 834, 898, 8, 8, 830, 830, 832, 833,
+ /* 1050 */ 18, 8, 8, 458, 219, 1156, 362, 1103, 349, 8,
+ /* 1060 */ 8, 240, 962, 963, 964, 236, 889, 444, 792, 336,
+ /* 1070 */ 158, 203, 885, 435, 700, 209, 362, 114, 981, 838,
+ /* 1080 */ 834, 227, 334, 1114, 441, 81, 82, 444, 442, 305,
+ /* 1090 */ 784, 306, 83, 362, 462, 461, 369, 1162, 830, 838,
+ /* 1100 */ 460, 1037, 237, 1030, 237, 81, 82, 7, 96, 96,
+ /* 1110 */ 96, 96, 83, 362, 462, 461, 1019, 1018, 830, 1020,
+ /* 1120 */ 1289, 37, 37, 400, 96, 96, 96, 96, 89, 830,
+ /* 1130 */ 830, 832, 833, 18, 1100, 318, 962, 292, 94, 94,
+ /* 1140 */ 94, 94, 93, 93, 92, 92, 92, 91, 361, 830,
+ /* 1150 */ 830, 832, 833, 18, 94, 94, 94, 94, 93, 93,
+ /* 1160 */ 92, 92, 92, 91, 361, 359, 358, 226, 226, 727,
+ /* 1170 */ 294, 296, 460, 962, 963, 964, 460, 989, 160, 425,
+ /* 1180 */ 170, 1295, 262, 460, 987, 374, 988, 386, 1145, 255,
+ /* 1190 */ 326, 460, 373, 38, 38, 410, 174, 39, 39, 413,
+ /* 1200 */ 460, 287, 460, 1053, 40, 40, 298, 728, 1220, 990,
+ /* 1210 */ 445, 990, 26, 26, 1219, 460, 311, 460, 169, 1292,
+ /* 1220 */ 460, 27, 27, 29, 29, 998, 460, 206, 135, 995,
+ /* 1230 */ 1265, 1263, 460, 57, 60, 460, 41, 41, 42, 42,
+ /* 1240 */ 460, 43, 43, 460, 343, 351, 460, 9, 9, 460,
+ /* 1250 */ 144, 460, 130, 44, 44, 460, 103, 103, 460, 137,
+ /* 1260 */ 70, 45, 45, 460, 46, 46, 460, 31, 31, 1142,
+ /* 1270 */ 47, 47, 48, 48, 460, 376, 32, 32, 460, 122,
+ /* 1280 */ 122, 460, 157, 460, 123, 123, 139, 124, 124, 460,
+ /* 1290 */ 186, 460, 377, 460, 115, 54, 54, 460, 403, 33,
+ /* 1300 */ 33, 460, 104, 104, 51, 51, 460, 161, 460, 140,
+ /* 1310 */ 105, 105, 106, 106, 102, 102, 460, 141, 121, 121,
+ /* 1320 */ 460, 142, 119, 119, 190, 460, 1152, 110, 110, 109,
+ /* 1330 */ 109, 702, 460, 148, 393, 65, 460, 107, 107, 460,
+ /* 1340 */ 323, 108, 108, 399, 460, 1234, 53, 53, 1214, 269,
+ /* 1350 */ 154, 416, 1115, 55, 55, 220, 401, 52, 52, 191,
+ /* 1360 */ 24, 24, 274, 192, 193, 28, 28, 1021, 328, 702,
+ /* 1370 */ 1073, 352, 1072, 718, 1071, 431, 1111, 1064, 329, 1045,
+ /* 1380 */ 69, 205, 6, 291, 1044, 286, 1112, 1043, 1304, 1110,
+ /* 1390 */ 293, 300, 295, 297, 1063, 1200, 1109, 77, 241, 448,
+ /* 1400 */ 356, 452, 436, 100, 214, 71, 434, 1027, 1093, 21,
+ /* 1410 */ 463, 242, 243, 957, 215, 217, 218, 464, 309, 307,
+ /* 1420 */ 308, 310, 1016, 125, 1250, 1251, 1011, 1249, 126, 127,
+ /* 1430 */ 1248, 113, 676, 337, 238, 338, 134, 363, 167, 1041,
+ /* 1440 */ 1040, 56, 247, 367, 180, 897, 111, 895, 136, 1038,
+ /* 1450 */ 818, 128, 138, 750, 261, 911, 185, 143, 145, 61,
+ /* 1460 */ 62, 63, 64, 129, 914, 187, 188, 910, 118, 12,
+ /* 1470 */ 189, 903, 268, 992, 203, 162, 398, 150, 149, 691,
+ /* 1480 */ 402, 288, 194, 406, 151, 411, 66, 13, 729, 239,
+ /* 1490 */ 282, 14, 67, 131, 837, 836, 865, 758, 15, 4,
+ /* 1500 */ 68, 762, 175, 222, 224, 424, 152, 869, 791, 202,
+ /* 1510 */ 786, 75, 72, 880, 866, 864, 16, 17, 920, 207,
+ /* 1520 */ 919, 208, 447, 946, 164, 211, 947, 210, 165, 451,
+ /* 1530 */ 868, 166, 315, 835, 701, 85, 212, 1297, 312, 952,
+ /* 1540 */ 1296,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 19, 115, 19, 117, 118, 24, 1, 2, 27, 79,
- /* 10 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- /* 20 */ 90, 91, 92, 93, 94, 144, 145, 146, 147, 58,
- /* 30 */ 49, 50, 79, 80, 81, 82, 22, 84, 85, 86,
- /* 40 */ 87, 88, 89, 90, 91, 92, 93, 94, 221, 222,
- /* 50 */ 223, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 60 */ 79, 80, 81, 82, 94, 84, 85, 86, 87, 88,
- /* 70 */ 89, 90, 91, 92, 93, 94, 19, 94, 97, 108,
- /* 80 */ 109, 110, 99, 100, 101, 102, 103, 104, 105, 32,
- /* 90 */ 119, 120, 78, 27, 152, 112, 93, 94, 41, 88,
- /* 100 */ 89, 90, 91, 92, 93, 94, 49, 50, 84, 85,
- /* 110 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 58,
- /* 120 */ 157, 119, 120, 163, 68, 163, 65, 70, 71, 72,
- /* 130 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- /* 140 */ 152, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- /* 150 */ 93, 94, 19, 97, 88, 89, 196, 101, 196, 26,
- /* 160 */ 172, 173, 96, 97, 98, 210, 100, 22, 152, 108,
- /* 170 */ 109, 110, 27, 107, 27, 109, 221, 222, 223, 219,
- /* 180 */ 238, 219, 49, 50, 152, 169, 170, 54, 132, 133,
- /* 190 */ 134, 228, 232, 171, 231, 207, 208, 237, 132, 237,
- /* 200 */ 134, 179, 19, 70, 71, 72, 73, 74, 75, 76,
- /* 210 */ 77, 78, 79, 80, 81, 82, 152, 84, 85, 86,
- /* 220 */ 87, 88, 89, 90, 91, 92, 93, 94, 27, 65,
- /* 230 */ 30, 152, 49, 50, 34, 52, 90, 91, 92, 93,
- /* 240 */ 94, 96, 97, 98, 97, 22, 230, 27, 48, 217,
- /* 250 */ 27, 172, 173, 70, 71, 72, 73, 74, 75, 76,
- /* 260 */ 77, 78, 79, 80, 81, 82, 172, 84, 85, 86,
- /* 270 */ 87, 88, 89, 90, 91, 92, 93, 94, 19, 148,
- /* 280 */ 149, 152, 218, 24, 152, 154, 207, 156, 172, 152,
- /* 290 */ 22, 68, 27, 152, 163, 27, 164, 96, 97, 98,
- /* 300 */ 99, 172, 173, 102, 103, 104, 169, 170, 49, 50,
- /* 310 */ 90, 88, 89, 152, 113, 186, 96, 97, 98, 96,
- /* 320 */ 97, 160, 57, 27, 101, 164, 137, 196, 139, 70,
- /* 330 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- /* 340 */ 81, 82, 11, 84, 85, 86, 87, 88, 89, 90,
- /* 350 */ 91, 92, 93, 94, 19, 132, 133, 134, 23, 218,
- /* 360 */ 152, 96, 97, 98, 96, 97, 98, 230, 99, 22,
- /* 370 */ 152, 102, 103, 104, 27, 244, 152, 152, 27, 26,
- /* 380 */ 152, 22, 113, 65, 49, 50, 27, 194, 195, 58,
- /* 390 */ 172, 173, 96, 97, 98, 185, 65, 172, 173, 206,
- /* 400 */ 172, 173, 190, 191, 186, 70, 71, 72, 73, 74,
- /* 410 */ 75, 76, 77, 78, 79, 80, 81, 82, 175, 84,
- /* 420 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- /* 430 */ 19, 175, 207, 208, 23, 207, 208, 119, 120, 108,
- /* 440 */ 109, 110, 27, 96, 97, 98, 116, 96, 97, 98,
- /* 450 */ 152, 121, 152, 179, 180, 96, 97, 98, 250, 106,
- /* 460 */ 49, 50, 188, 19, 221, 222, 223, 168, 169, 170,
- /* 470 */ 172, 173, 172, 173, 250, 124, 172, 221, 222, 223,
- /* 480 */ 26, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 490 */ 79, 80, 81, 82, 50, 84, 85, 86, 87, 88,
- /* 500 */ 89, 90, 91, 92, 93, 94, 19, 207, 208, 12,
- /* 510 */ 23, 96, 97, 98, 221, 222, 223, 194, 195, 152,
- /* 520 */ 199, 23, 19, 225, 26, 28, 152, 152, 152, 206,
- /* 530 */ 209, 164, 190, 191, 241, 152, 49, 50, 152, 124,
- /* 540 */ 152, 44, 219, 46, 152, 21, 172, 173, 172, 173,
- /* 550 */ 183, 107, 185, 16, 163, 58, 112, 70, 71, 72,
- /* 560 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- /* 570 */ 152, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- /* 580 */ 93, 94, 19, 207, 130, 152, 23, 196, 64, 152,
- /* 590 */ 172, 173, 22, 152, 24, 152, 98, 27, 61, 96,
- /* 600 */ 63, 26, 211, 212, 186, 172, 173, 49, 50, 172,
- /* 610 */ 173, 23, 49, 50, 26, 172, 173, 88, 89, 186,
- /* 620 */ 24, 238, 124, 27, 238, 22, 23, 103, 187, 26,
- /* 630 */ 152, 73, 74, 70, 71, 72, 73, 74, 75, 76,
- /* 640 */ 77, 78, 79, 80, 81, 82, 152, 84, 85, 86,
- /* 650 */ 87, 88, 89, 90, 91, 92, 93, 94, 19, 101,
- /* 660 */ 152, 132, 23, 134, 140, 152, 12, 97, 36, 168,
- /* 670 */ 169, 170, 69, 98, 152, 22, 23, 140, 50, 26,
- /* 680 */ 172, 173, 28, 51, 152, 172, 173, 193, 49, 50,
- /* 690 */ 22, 59, 24, 97, 172, 173, 152, 152, 44, 124,
- /* 700 */ 46, 0, 1, 2, 172, 173, 22, 23, 19, 70,
- /* 710 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- /* 720 */ 81, 82, 69, 84, 85, 86, 87, 88, 89, 90,
- /* 730 */ 91, 92, 93, 94, 152, 107, 152, 193, 49, 50,
- /* 740 */ 181, 22, 23, 111, 108, 109, 110, 7, 8, 9,
- /* 750 */ 16, 247, 248, 69, 172, 173, 172, 173, 152, 70,
- /* 760 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- /* 770 */ 81, 82, 152, 84, 85, 86, 87, 88, 89, 90,
- /* 780 */ 91, 92, 93, 94, 19, 152, 242, 152, 69, 152,
- /* 790 */ 166, 167, 172, 173, 32, 61, 152, 63, 152, 193,
- /* 800 */ 152, 152, 152, 41, 152, 172, 173, 172, 173, 172,
- /* 810 */ 173, 152, 152, 152, 49, 50, 172, 173, 172, 173,
- /* 820 */ 172, 173, 172, 173, 172, 173, 132, 138, 134, 152,
- /* 830 */ 152, 172, 173, 172, 173, 70, 71, 72, 73, 74,
- /* 840 */ 75, 76, 77, 78, 79, 80, 81, 82, 152, 84,
- /* 850 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- /* 860 */ 19, 152, 22, 152, 195, 24, 152, 27, 172, 173,
- /* 870 */ 193, 193, 152, 152, 152, 206, 152, 217, 152, 152,
- /* 880 */ 152, 172, 173, 172, 173, 152, 172, 173, 152, 152,
- /* 890 */ 49, 50, 172, 173, 172, 173, 172, 173, 172, 173,
- /* 900 */ 172, 173, 152, 138, 152, 172, 173, 108, 109, 110,
- /* 910 */ 19, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 920 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88,
- /* 930 */ 89, 90, 91, 92, 93, 94, 152, 97, 152, 152,
- /* 940 */ 49, 50, 26, 193, 172, 173, 152, 152, 152, 146,
- /* 950 */ 147, 132, 152, 134, 217, 181, 172, 173, 172, 173,
- /* 960 */ 19, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 970 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88,
- /* 980 */ 89, 90, 91, 92, 93, 94, 152, 193, 152, 193,
- /* 990 */ 49, 50, 181, 193, 172, 173, 166, 167, 245, 246,
- /* 1000 */ 211, 212, 152, 22, 217, 152, 172, 173, 172, 173,
- /* 1010 */ 19, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 1020 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88,
- /* 1030 */ 89, 90, 91, 92, 93, 94, 152, 187, 152, 123,
- /* 1040 */ 49, 50, 23, 23, 23, 26, 26, 26, 23, 23,
- /* 1050 */ 23, 26, 26, 26, 7, 8, 172, 173, 172, 173,
- /* 1060 */ 19, 90, 71, 72, 73, 74, 75, 76, 77, 78,
- /* 1070 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88,
- /* 1080 */ 89, 90, 91, 92, 93, 94, 152, 116, 152, 217,
- /* 1090 */ 49, 50, 121, 23, 172, 173, 26, 100, 101, 27,
- /* 1100 */ 101, 27, 23, 122, 152, 26, 172, 173, 172, 173,
- /* 1110 */ 152, 112, 163, 72, 73, 74, 75, 76, 77, 78,
- /* 1120 */ 79, 80, 81, 82, 163, 84, 85, 86, 87, 88,
- /* 1130 */ 89, 90, 91, 92, 93, 94, 19, 20, 152, 22,
- /* 1140 */ 23, 152, 163, 65, 27, 196, 163, 19, 20, 23,
- /* 1150 */ 22, 213, 26, 19, 37, 27, 152, 196, 172, 173,
- /* 1160 */ 152, 172, 173, 27, 23, 37, 152, 26, 152, 97,
- /* 1170 */ 152, 97, 210, 56, 163, 196, 163, 163, 100, 196,
- /* 1180 */ 172, 173, 65, 152, 56, 68, 172, 173, 172, 173,
- /* 1190 */ 172, 173, 152, 65, 163, 163, 68, 23, 152, 234,
- /* 1200 */ 26, 152, 152, 172, 173, 88, 89, 196, 152, 196,
- /* 1210 */ 196, 152, 95, 96, 97, 98, 88, 89, 101, 152,
- /* 1220 */ 152, 207, 208, 95, 96, 97, 98, 196, 196, 101,
- /* 1230 */ 96, 233, 152, 97, 152, 152, 19, 20, 207, 22,
- /* 1240 */ 152, 152, 152, 191, 27, 152, 152, 152, 152, 132,
- /* 1250 */ 133, 134, 135, 136, 37, 152, 152, 152, 152, 152,
- /* 1260 */ 132, 133, 134, 135, 136, 210, 197, 210, 210, 198,
- /* 1270 */ 150, 184, 239, 56, 201, 214, 214, 201, 239, 180,
- /* 1280 */ 214, 227, 198, 38, 176, 68, 175, 175, 175, 122,
- /* 1290 */ 155, 200, 159, 19, 20, 40, 22, 159, 159, 22,
- /* 1300 */ 70, 27, 130, 243, 240, 88, 89, 90, 189, 18,
- /* 1310 */ 201, 37, 95, 96, 97, 98, 192, 5, 101, 192,
- /* 1320 */ 220, 240, 10, 11, 12, 13, 14, 159, 18, 17,
- /* 1330 */ 56, 158, 192, 201, 192, 220, 189, 189, 201, 159,
- /* 1340 */ 158, 137, 68, 31, 45, 33, 236, 159, 159, 132,
- /* 1350 */ 133, 134, 135, 136, 42, 158, 235, 22, 177, 159,
- /* 1360 */ 158, 158, 88, 89, 159, 107, 174, 55, 177, 95,
- /* 1370 */ 96, 97, 98, 174, 62, 101, 47, 65, 66, 106,
- /* 1380 */ 174, 125, 19, 20, 174, 22, 177, 176, 174, 182,
- /* 1390 */ 27, 216, 174, 174, 182, 107, 159, 22, 215, 215,
- /* 1400 */ 37, 216, 216, 216, 137, 215, 132, 133, 134, 135,
- /* 1410 */ 136, 215, 159, 177, 94, 177, 129, 224, 205, 56,
- /* 1420 */ 226, 126, 128, 203, 229, 204, 114, 229, 127, 202,
- /* 1430 */ 201, 68, 25, 162, 26, 13, 161, 153, 153, 6,
- /* 1440 */ 151, 151, 178, 151, 165, 165, 178, 165, 4, 3,
- /* 1450 */ 249, 88, 89, 141, 22, 142, 15, 249, 95, 96,
- /* 1460 */ 97, 98, 246, 67, 101, 16, 23, 120, 23, 131,
- /* 1470 */ 111, 123, 20, 16, 125, 1, 123, 131, 78, 78,
- /* 1480 */ 78, 78, 111, 96, 122, 35, 1, 5, 22, 107,
- /* 1490 */ 140, 53, 53, 26, 60, 132, 133, 134, 135, 136,
- /* 1500 */ 107, 43, 24, 20, 112, 19, 22, 52, 52, 105,
- /* 1510 */ 22, 22, 52, 23, 22, 22, 29, 23, 39, 23,
- /* 1520 */ 23, 26, 116, 22, 26, 23, 22, 122, 23, 23,
- /* 1530 */ 22, 96, 11, 124, 35, 26, 26, 23, 35, 23,
- /* 1540 */ 23, 23, 35, 23, 22, 26, 23, 22, 24, 122,
- /* 1550 */ 23, 22, 26, 22, 24, 23, 23, 23, 22, 122,
- /* 1560 */ 23, 15, 122, 1, 122,
+ /* 0 */ 144, 145, 146, 147, 172, 222, 223, 224, 222, 223,
+ /* 10 */ 224, 152, 180, 152, 148, 149, 152, 173, 176, 19,
+ /* 20 */ 154, 173, 156, 152, 163, 242, 152, 163, 176, 163,
+ /* 30 */ 26, 31, 173, 174, 173, 174, 173, 173, 174, 39,
+ /* 40 */ 1, 2, 152, 43, 44, 45, 46, 47, 48, 49,
+ /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 197, 169,
+ /* 60 */ 170, 197, 188, 197, 222, 223, 224, 208, 209, 208,
+ /* 70 */ 209, 19, 208, 152, 222, 223, 224, 22, 26, 24,
+ /* 80 */ 46, 47, 48, 49, 84, 85, 86, 87, 88, 89,
+ /* 90 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47,
+ /* 100 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ /* 110 */ 106, 245, 157, 88, 89, 90, 91, 92, 93, 94,
+ /* 120 */ 68, 231, 251, 19, 84, 85, 86, 87, 88, 89,
+ /* 130 */ 90, 91, 92, 93, 94, 101, 84, 85, 86, 87,
+ /* 140 */ 88, 89, 90, 91, 92, 93, 94, 43, 44, 45,
+ /* 150 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ /* 160 */ 56, 57, 90, 91, 92, 93, 94, 82, 79, 99,
+ /* 170 */ 66, 200, 102, 103, 104, 19, 168, 169, 170, 152,
+ /* 180 */ 24, 210, 97, 113, 229, 59, 101, 232, 84, 85,
+ /* 190 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 43,
+ /* 200 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 210 */ 54, 55, 56, 57, 152, 188, 152, 132, 133, 134,
+ /* 220 */ 93, 94, 96, 97, 98, 99, 152, 19, 102, 103,
+ /* 230 */ 104, 23, 94, 72, 79, 173, 174, 173, 174, 113,
+ /* 240 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ /* 250 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 260 */ 52, 53, 54, 55, 56, 57, 152, 171, 152, 108,
+ /* 270 */ 109, 110, 208, 209, 119, 120, 152, 180, 181, 19,
+ /* 280 */ 119, 120, 152, 23, 152, 152, 189, 173, 174, 173,
+ /* 290 */ 174, 59, 84, 85, 86, 87, 88, 89, 90, 91,
+ /* 300 */ 92, 93, 94, 43, 44, 45, 46, 47, 48, 49,
+ /* 310 */ 50, 51, 52, 53, 54, 55, 56, 57, 222, 223,
+ /* 320 */ 224, 186, 208, 209, 208, 209, 194, 194, 96, 97,
+ /* 330 */ 98, 19, 168, 169, 170, 23, 88, 89, 163, 59,
+ /* 340 */ 0, 1, 2, 219, 84, 85, 86, 87, 88, 89,
+ /* 350 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47,
+ /* 360 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ /* 370 */ 90, 152, 197, 195, 196, 243, 96, 97, 98, 196,
+ /* 380 */ 132, 11, 134, 19, 182, 207, 115, 23, 117, 118,
+ /* 390 */ 207, 163, 173, 174, 152, 220, 84, 85, 86, 87,
+ /* 400 */ 88, 89, 90, 91, 92, 93, 94, 43, 44, 45,
+ /* 410 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ /* 420 */ 56, 57, 152, 16, 152, 197, 171, 208, 22, 23,
+ /* 430 */ 22, 23, 26, 16, 26, 19, 7, 8, 9, 23,
+ /* 440 */ 212, 213, 152, 173, 174, 173, 174, 19, 84, 85,
+ /* 450 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 43,
+ /* 460 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ /* 470 */ 54, 55, 56, 57, 46, 152, 109, 110, 208, 109,
+ /* 480 */ 110, 152, 75, 152, 77, 22, 23, 19, 233, 83,
+ /* 490 */ 152, 83, 75, 238, 77, 164, 173, 174, 226, 59,
+ /* 500 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ /* 510 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 520 */ 52, 53, 54, 55, 56, 57, 108, 109, 110, 152,
+ /* 530 */ 152, 152, 22, 22, 23, 107, 96, 97, 98, 160,
+ /* 540 */ 112, 251, 19, 164, 22, 152, 83, 140, 219, 152,
+ /* 550 */ 173, 174, 84, 85, 86, 87, 88, 89, 90, 91,
+ /* 560 */ 92, 93, 94, 59, 124, 152, 43, 44, 45, 46,
+ /* 570 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ /* 580 */ 57, 59, 169, 170, 119, 120, 82, 108, 109, 110,
+ /* 590 */ 191, 192, 191, 192, 83, 248, 249, 19, 88, 89,
+ /* 600 */ 96, 97, 24, 152, 152, 101, 138, 84, 85, 86,
+ /* 610 */ 87, 88, 89, 90, 91, 92, 93, 94, 96, 97,
+ /* 620 */ 98, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ /* 630 */ 52, 53, 54, 55, 56, 57, 132, 133, 134, 152,
+ /* 640 */ 152, 46, 152, 26, 231, 194, 194, 146, 147, 19,
+ /* 650 */ 152, 116, 152, 72, 152, 152, 121, 152, 152, 152,
+ /* 660 */ 79, 138, 84, 85, 86, 87, 88, 89, 90, 91,
+ /* 670 */ 92, 93, 94, 43, 44, 45, 46, 47, 48, 49,
+ /* 680 */ 50, 51, 52, 53, 54, 55, 56, 57, 152, 108,
+ /* 690 */ 23, 152, 194, 26, 194, 152, 194, 194, 137, 152,
+ /* 700 */ 139, 19, 107, 166, 167, 218, 218, 29, 218, 173,
+ /* 710 */ 174, 33, 173, 174, 84, 85, 86, 87, 88, 89,
+ /* 720 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47,
+ /* 730 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ /* 740 */ 152, 194, 64, 171, 239, 239, 239, 130, 166, 167,
+ /* 750 */ 212, 213, 19, 23, 246, 247, 26, 59, 26, 152,
+ /* 760 */ 163, 218, 163, 163, 163, 98, 84, 85, 86, 87,
+ /* 770 */ 88, 89, 90, 91, 92, 93, 94, 44, 45, 46,
+ /* 780 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ /* 790 */ 57, 124, 26, 79, 197, 97, 197, 197, 197, 31,
+ /* 800 */ 152, 23, 19, 19, 26, 19, 218, 39, 23, 21,
+ /* 810 */ 238, 26, 163, 163, 100, 59, 163, 84, 85, 86,
+ /* 820 */ 87, 88, 89, 90, 91, 92, 93, 94, 45, 46,
+ /* 830 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ /* 840 */ 57, 19, 20, 152, 22, 23, 197, 197, 23, 19,
+ /* 850 */ 197, 26, 152, 97, 23, 123, 23, 26, 36, 26,
+ /* 860 */ 152, 152, 19, 20, 98, 22, 78, 84, 85, 86,
+ /* 870 */ 87, 88, 89, 90, 91, 92, 93, 94, 94, 36,
+ /* 880 */ 152, 59, 96, 99, 100, 101, 102, 103, 104, 105,
+ /* 890 */ 124, 103, 70, 100, 101, 23, 112, 12, 26, 12,
+ /* 900 */ 23, 79, 59, 26, 82, 101, 22, 7, 8, 152,
+ /* 910 */ 88, 89, 27, 70, 27, 152, 112, 95, 96, 97,
+ /* 920 */ 98, 152, 79, 101, 22, 82, 96, 42, 140, 42,
+ /* 930 */ 182, 88, 89, 19, 20, 132, 22, 134, 95, 96,
+ /* 940 */ 97, 98, 23, 59, 101, 26, 22, 62, 152, 62,
+ /* 950 */ 36, 22, 59, 24, 132, 133, 134, 135, 136, 72,
+ /* 960 */ 5, 59, 152, 22, 71, 10, 11, 12, 13, 14,
+ /* 970 */ 152, 152, 17, 59, 182, 132, 133, 134, 135, 136,
+ /* 980 */ 96, 97, 98, 59, 70, 30, 152, 32, 59, 96,
+ /* 990 */ 97, 98, 173, 174, 53, 40, 82, 152, 96, 97,
+ /* 1000 */ 98, 90, 88, 89, 90, 24, 187, 173, 174, 95,
+ /* 1010 */ 96, 97, 98, 152, 152, 101, 19, 20, 152, 22,
+ /* 1020 */ 96, 97, 98, 152, 69, 59, 97, 116, 59, 214,
+ /* 1030 */ 152, 76, 121, 36, 79, 80, 19, 20, 152, 22,
+ /* 1040 */ 59, 132, 59, 134, 173, 174, 132, 133, 134, 135,
+ /* 1050 */ 136, 173, 174, 36, 234, 152, 59, 152, 187, 173,
+ /* 1060 */ 174, 211, 96, 97, 98, 187, 97, 70, 23, 114,
+ /* 1070 */ 152, 26, 23, 187, 23, 26, 59, 26, 97, 82,
+ /* 1080 */ 97, 22, 164, 152, 152, 88, 89, 70, 192, 152,
+ /* 1090 */ 124, 152, 95, 96, 97, 98, 141, 152, 101, 82,
+ /* 1100 */ 152, 152, 184, 152, 186, 88, 89, 199, 54, 55,
+ /* 1110 */ 56, 57, 95, 96, 97, 98, 152, 152, 101, 152,
+ /* 1120 */ 152, 173, 174, 235, 54, 55, 56, 57, 58, 132,
+ /* 1130 */ 133, 134, 135, 136, 211, 150, 59, 211, 84, 85,
+ /* 1140 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 132,
+ /* 1150 */ 133, 134, 135, 136, 84, 85, 86, 87, 88, 89,
+ /* 1160 */ 90, 91, 92, 93, 94, 88, 89, 195, 196, 35,
+ /* 1170 */ 211, 211, 152, 96, 97, 98, 152, 100, 198, 207,
+ /* 1180 */ 171, 122, 240, 152, 107, 215, 109, 240, 202, 215,
+ /* 1190 */ 202, 152, 220, 173, 174, 177, 185, 173, 174, 65,
+ /* 1200 */ 152, 176, 152, 181, 173, 174, 215, 73, 176, 132,
+ /* 1210 */ 228, 134, 173, 174, 176, 152, 201, 152, 199, 155,
+ /* 1220 */ 152, 173, 174, 173, 174, 60, 152, 122, 244, 38,
+ /* 1230 */ 159, 159, 152, 241, 241, 152, 173, 174, 173, 174,
+ /* 1240 */ 152, 173, 174, 152, 159, 111, 152, 173, 174, 152,
+ /* 1250 */ 22, 152, 43, 173, 174, 152, 173, 174, 152, 190,
+ /* 1260 */ 130, 173, 174, 152, 173, 174, 152, 173, 174, 202,
+ /* 1270 */ 173, 174, 173, 174, 152, 18, 173, 174, 152, 173,
+ /* 1280 */ 174, 152, 221, 152, 173, 174, 193, 173, 174, 152,
+ /* 1290 */ 158, 152, 159, 152, 22, 173, 174, 152, 18, 173,
+ /* 1300 */ 174, 152, 173, 174, 173, 174, 152, 221, 152, 193,
+ /* 1310 */ 173, 174, 173, 174, 173, 174, 152, 193, 173, 174,
+ /* 1320 */ 152, 193, 173, 174, 158, 152, 190, 173, 174, 173,
+ /* 1330 */ 174, 59, 152, 190, 159, 137, 152, 173, 174, 152,
+ /* 1340 */ 202, 173, 174, 61, 152, 237, 173, 174, 202, 236,
+ /* 1350 */ 22, 107, 159, 173, 174, 159, 178, 173, 174, 158,
+ /* 1360 */ 173, 174, 159, 158, 158, 173, 174, 159, 178, 97,
+ /* 1370 */ 175, 63, 175, 106, 175, 125, 217, 183, 178, 175,
+ /* 1380 */ 107, 159, 22, 216, 177, 175, 217, 175, 175, 217,
+ /* 1390 */ 216, 159, 216, 216, 183, 225, 217, 137, 227, 178,
+ /* 1400 */ 94, 178, 126, 129, 25, 128, 127, 162, 206, 26,
+ /* 1410 */ 161, 230, 230, 13, 153, 153, 6, 151, 203, 205,
+ /* 1420 */ 204, 202, 151, 165, 171, 171, 151, 171, 165, 165,
+ /* 1430 */ 171, 179, 4, 250, 179, 250, 247, 3, 22, 171,
+ /* 1440 */ 171, 171, 142, 81, 15, 23, 16, 23, 131, 171,
+ /* 1450 */ 120, 111, 123, 20, 16, 1, 125, 123, 131, 53,
+ /* 1460 */ 53, 53, 53, 111, 96, 34, 122, 1, 5, 22,
+ /* 1470 */ 107, 67, 140, 74, 26, 24, 41, 107, 67, 20,
+ /* 1480 */ 19, 112, 105, 66, 22, 66, 22, 22, 28, 66,
+ /* 1490 */ 23, 22, 22, 37, 23, 23, 23, 116, 22, 22,
+ /* 1500 */ 26, 23, 122, 23, 23, 26, 22, 11, 96, 34,
+ /* 1510 */ 124, 26, 26, 23, 23, 23, 34, 34, 23, 26,
+ /* 1520 */ 23, 22, 24, 23, 22, 122, 23, 26, 22, 24,
+ /* 1530 */ 23, 22, 15, 23, 23, 22, 122, 122, 23, 1,
+ /* 1540 */ 122, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1550 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1560 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1570 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1580 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1590 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1600 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1610 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1620 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1630 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1640 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1650 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1660 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1670 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
+ /* 1680 */ 252, 252, 252, 252,
};
-#define YY_SHIFT_USE_DFLT (1565)
-#define YY_SHIFT_COUNT (454)
-#define YY_SHIFT_MIN (-114)
-#define YY_SHIFT_MAX (1562)
-static const short yy_shift_ofst[] = {
- /* 0 */ 5, 1117, 1312, 1128, 1274, 1274, 1274, 1274, 61, -19,
- /* 10 */ 57, 57, 183, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 20 */ 66, 66, 201, -29, 331, 318, 133, 259, 335, 411,
- /* 30 */ 487, 563, 639, 689, 765, 841, 891, 891, 891, 891,
- /* 40 */ 891, 891, 891, 891, 891, 891, 891, 891, 891, 891,
- /* 50 */ 891, 891, 891, 941, 891, 991, 1041, 1041, 1217, 1274,
- /* 60 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 70 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 80 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 90 */ 1363, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274,
- /* 100 */ 1274, 1274, 1274, 1274, -70, -47, -47, -47, -47, -47,
- /* 110 */ 24, 11, 146, 296, 524, 444, 529, 529, 296, 3,
- /* 120 */ 2, -30, 1565, 1565, 1565, -17, -17, -17, 145, 145,
- /* 130 */ 497, 497, 265, 603, 653, 296, 296, 296, 296, 296,
- /* 140 */ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
- /* 150 */ 296, 296, 296, 296, 296, 701, 1078, 147, 147, 2,
- /* 160 */ 164, 164, 164, 164, 164, 164, 1565, 1565, 1565, 223,
- /* 170 */ 56, 56, 268, 269, 220, 347, 351, 415, 359, 296,
- /* 180 */ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296,
- /* 190 */ 296, 296, 296, 296, 296, 632, 632, 632, 296, 296,
- /* 200 */ 498, 296, 296, 296, 570, 296, 296, 654, 296, 296,
- /* 210 */ 296, 296, 296, 296, 296, 296, 296, 296, 636, 200,
- /* 220 */ 596, 596, 596, 575, -114, 971, 740, 454, 503, 503,
- /* 230 */ 1134, 454, 1134, 353, 588, 628, 762, 503, 189, 762,
- /* 240 */ 762, 916, 330, 668, 1245, 1167, 1167, 1255, 1255, 1167,
- /* 250 */ 1277, 1230, 1172, 1291, 1291, 1291, 1291, 1167, 1310, 1172,
- /* 260 */ 1277, 1230, 1230, 1172, 1167, 1310, 1204, 1299, 1167, 1167,
- /* 270 */ 1310, 1335, 1167, 1310, 1167, 1310, 1335, 1258, 1258, 1258,
- /* 280 */ 1329, 1335, 1258, 1273, 1258, 1329, 1258, 1258, 1256, 1288,
- /* 290 */ 1256, 1288, 1256, 1288, 1256, 1288, 1167, 1375, 1167, 1267,
- /* 300 */ 1335, 1320, 1320, 1335, 1287, 1295, 1294, 1301, 1172, 1407,
- /* 310 */ 1408, 1422, 1422, 1433, 1433, 1433, 1565, 1565, 1565, 1565,
- /* 320 */ 1565, 1565, 1565, 1565, 558, 537, 684, 719, 734, 799,
- /* 330 */ 840, 1019, 14, 1020, 1021, 1025, 1026, 1027, 1070, 1072,
- /* 340 */ 997, 1047, 999, 1079, 1126, 1074, 1141, 694, 819, 1174,
- /* 350 */ 1136, 981, 1444, 1446, 1432, 1313, 1441, 1396, 1449, 1443,
- /* 360 */ 1445, 1347, 1338, 1359, 1348, 1452, 1349, 1457, 1474, 1353,
- /* 370 */ 1346, 1400, 1401, 1402, 1403, 1371, 1387, 1450, 1362, 1485,
- /* 380 */ 1482, 1466, 1382, 1350, 1438, 1467, 1439, 1434, 1458, 1393,
- /* 390 */ 1478, 1483, 1486, 1392, 1404, 1484, 1455, 1488, 1489, 1490,
- /* 400 */ 1492, 1456, 1487, 1493, 1460, 1479, 1494, 1496, 1497, 1495,
- /* 410 */ 1406, 1501, 1502, 1504, 1498, 1405, 1505, 1506, 1435, 1499,
- /* 420 */ 1508, 1409, 1509, 1503, 1510, 1507, 1514, 1509, 1516, 1517,
- /* 430 */ 1518, 1519, 1520, 1522, 1521, 1523, 1525, 1524, 1526, 1527,
- /* 440 */ 1529, 1530, 1526, 1532, 1531, 1533, 1534, 1536, 1427, 1437,
- /* 450 */ 1440, 1442, 1537, 1546, 1562,
+#define YY_SHIFT_COUNT (465)
+#define YY_SHIFT_MIN (0)
+#define YY_SHIFT_MAX (1538)
+static const unsigned short int yy_shift_ofst[] = {
+ /* 0 */ 39, 822, 955, 843, 997, 997, 997, 997, 0, 0,
+ /* 10 */ 104, 630, 997, 997, 997, 997, 997, 997, 997, 1077,
+ /* 20 */ 1077, 126, 161, 155, 52, 156, 208, 260, 312, 364,
+ /* 30 */ 416, 468, 523, 578, 630, 630, 630, 630, 630, 630,
+ /* 40 */ 630, 630, 630, 630, 630, 630, 630, 630, 630, 630,
+ /* 50 */ 630, 682, 630, 733, 783, 783, 914, 997, 997, 997,
+ /* 60 */ 997, 997, 997, 997, 997, 997, 997, 997, 997, 997,
+ /* 70 */ 997, 997, 997, 997, 997, 997, 997, 997, 997, 997,
+ /* 80 */ 997, 997, 997, 997, 997, 997, 997, 997, 1017, 997,
+ /* 90 */ 997, 997, 997, 997, 997, 997, 997, 997, 997, 997,
+ /* 100 */ 997, 997, 1070, 1054, 1054, 1054, 1054, 1054, 40, 25,
+ /* 110 */ 72, 232, 788, 428, 248, 248, 232, 581, 367, 127,
+ /* 120 */ 465, 138, 1541, 1541, 1541, 784, 784, 784, 522, 522,
+ /* 130 */ 887, 887, 893, 406, 408, 232, 232, 232, 232, 232,
+ /* 140 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ /* 150 */ 232, 232, 232, 232, 232, 370, 340, 714, 698, 698,
+ /* 160 */ 465, 89, 89, 89, 89, 89, 89, 1541, 1541, 1541,
+ /* 170 */ 504, 85, 85, 884, 70, 280, 902, 440, 966, 924,
+ /* 180 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 232,
+ /* 190 */ 232, 232, 232, 232, 232, 232, 1134, 1134, 1134, 232,
+ /* 200 */ 232, 667, 232, 232, 232, 929, 232, 232, 885, 232,
+ /* 210 */ 232, 232, 232, 232, 232, 232, 232, 232, 232, 418,
+ /* 220 */ 678, 981, 981, 981, 981, 766, 271, 911, 510, 429,
+ /* 230 */ 617, 786, 786, 830, 617, 830, 4, 730, 595, 768,
+ /* 240 */ 786, 561, 768, 768, 732, 535, 55, 1165, 1105, 1105,
+ /* 250 */ 1191, 1191, 1105, 1228, 1209, 1130, 1257, 1257, 1257, 1257,
+ /* 260 */ 1105, 1280, 1130, 1228, 1209, 1209, 1130, 1105, 1280, 1198,
+ /* 270 */ 1282, 1105, 1105, 1280, 1328, 1105, 1280, 1105, 1280, 1328,
+ /* 280 */ 1244, 1244, 1244, 1308, 1328, 1244, 1267, 1244, 1308, 1244,
+ /* 290 */ 1244, 1250, 1273, 1250, 1273, 1250, 1273, 1250, 1273, 1105,
+ /* 300 */ 1360, 1105, 1260, 1328, 1306, 1306, 1328, 1274, 1276, 1277,
+ /* 310 */ 1279, 1130, 1379, 1383, 1400, 1400, 1410, 1410, 1410, 1541,
+ /* 320 */ 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541,
+ /* 330 */ 1541, 1541, 1541, 1541, 1541, 34, 407, 463, 511, 417,
+ /* 340 */ 479, 1272, 778, 941, 785, 825, 831, 833, 872, 877,
+ /* 350 */ 756, 793, 900, 804, 919, 1045, 969, 1049, 803, 909,
+ /* 360 */ 1051, 983, 1059, 1428, 1434, 1416, 1300, 1429, 1362, 1430,
+ /* 370 */ 1422, 1424, 1330, 1317, 1340, 1329, 1433, 1331, 1438, 1454,
+ /* 380 */ 1334, 1327, 1406, 1407, 1408, 1409, 1352, 1368, 1431, 1344,
+ /* 390 */ 1466, 1463, 1447, 1363, 1332, 1404, 1448, 1411, 1399, 1435,
+ /* 400 */ 1370, 1451, 1459, 1461, 1369, 1377, 1462, 1417, 1464, 1465,
+ /* 410 */ 1467, 1469, 1419, 1460, 1470, 1423, 1456, 1471, 1472, 1473,
+ /* 420 */ 1474, 1381, 1476, 1478, 1477, 1479, 1380, 1480, 1481, 1412,
+ /* 430 */ 1475, 1484, 1386, 1485, 1482, 1486, 1483, 1490, 1485, 1491,
+ /* 440 */ 1492, 1495, 1493, 1497, 1499, 1496, 1500, 1502, 1498, 1501,
+ /* 450 */ 1503, 1506, 1505, 1501, 1507, 1509, 1510, 1511, 1513, 1403,
+ /* 460 */ 1414, 1415, 1418, 1515, 1517, 1538,
};
-#define YY_REDUCE_USE_DFLT (-174)
-#define YY_REDUCE_COUNT (323)
-#define YY_REDUCE_MIN (-173)
-#define YY_REDUCE_MAX (1292)
+#define YY_REDUCE_COUNT (334)
+#define YY_REDUCE_MIN (-217)
+#define YY_REDUCE_MAX (1278)
static const short yy_reduce_ofst[] = {
- /* 0 */ -119, 1014, 131, 1031, -12, 225, 228, 300, -40, -45,
- /* 10 */ 243, 256, 293, 129, 218, 418, 79, 376, 433, 298,
- /* 20 */ 16, 137, 367, 323, -38, 391, -173, -173, -173, -173,
- /* 30 */ -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
- /* 40 */ -173, -173, -173, -173, -173, -173, -173, -173, -173, -173,
- /* 50 */ -173, -173, -173, -173, -173, -173, -173, -173, 374, 437,
- /* 60 */ 443, 508, 513, 522, 532, 582, 584, 620, 633, 635,
- /* 70 */ 637, 644, 646, 648, 650, 652, 659, 661, 696, 709,
- /* 80 */ 711, 714, 720, 722, 724, 726, 728, 733, 772, 784,
- /* 90 */ 786, 822, 834, 836, 884, 886, 922, 934, 936, 986,
- /* 100 */ 989, 1008, 1016, 1018, -173, -173, -173, -173, -173, -173,
- /* 110 */ -173, -173, -173, 544, -37, 274, 299, 501, 161, -173,
- /* 120 */ 193, -173, -173, -173, -173, 22, 22, 22, 64, 141,
- /* 130 */ 212, 342, 208, 504, 504, 132, 494, 606, 677, 678,
- /* 140 */ 750, 794, 796, -58, 32, 383, 660, 737, 386, 787,
- /* 150 */ 800, 441, 872, 224, 850, 803, 949, 624, 830, 669,
- /* 160 */ 961, 979, 983, 1011, 1013, 1032, 753, 789, 321, 94,
- /* 170 */ 116, 304, 375, 210, 388, 392, 478, 545, 649, 721,
- /* 180 */ 727, 736, 752, 795, 853, 952, 958, 1004, 1040, 1046,
- /* 190 */ 1049, 1050, 1056, 1059, 1067, 559, 774, 811, 1068, 1080,
- /* 200 */ 938, 1082, 1083, 1088, 962, 1089, 1090, 1052, 1093, 1094,
- /* 210 */ 1095, 388, 1096, 1103, 1104, 1105, 1106, 1107, 965, 998,
- /* 220 */ 1055, 1057, 1058, 938, 1069, 1071, 1120, 1073, 1061, 1062,
- /* 230 */ 1033, 1076, 1039, 1108, 1087, 1099, 1111, 1066, 1054, 1112,
- /* 240 */ 1113, 1091, 1084, 1135, 1060, 1133, 1138, 1064, 1081, 1139,
- /* 250 */ 1100, 1119, 1109, 1124, 1127, 1140, 1142, 1168, 1173, 1132,
- /* 260 */ 1115, 1147, 1148, 1137, 1180, 1182, 1110, 1121, 1188, 1189,
- /* 270 */ 1197, 1181, 1200, 1202, 1205, 1203, 1191, 1192, 1199, 1206,
- /* 280 */ 1207, 1209, 1210, 1211, 1214, 1212, 1218, 1219, 1175, 1183,
- /* 290 */ 1185, 1184, 1186, 1190, 1187, 1196, 1237, 1193, 1253, 1194,
- /* 300 */ 1236, 1195, 1198, 1238, 1213, 1221, 1220, 1227, 1229, 1271,
- /* 310 */ 1275, 1284, 1285, 1289, 1290, 1292, 1201, 1208, 1216, 1279,
- /* 320 */ 1280, 1264, 1268, 1282,
+ /* 0 */ -144, -139, -134, -136, -141, 64, 114, 116, -158, -148,
+ /* 10 */ -217, 96, 819, 871, 878, 219, 270, 886, 272, -110,
+ /* 20 */ 413, 918, 972, 228, -214, -214, -214, -214, -214, -214,
+ /* 30 */ -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
+ /* 40 */ -214, -214, -214, -214, -214, -214, -214, -214, -214, -214,
+ /* 50 */ -214, -214, -214, -214, -214, -214, 62, 323, 377, 536,
+ /* 60 */ 539, 834, 948, 1020, 1024, 1031, 1039, 1048, 1050, 1063,
+ /* 70 */ 1065, 1068, 1074, 1080, 1083, 1088, 1091, 1094, 1097, 1099,
+ /* 80 */ 1103, 1106, 1111, 1114, 1122, 1126, 1129, 1131, 1137, 1139,
+ /* 90 */ 1141, 1145, 1149, 1154, 1156, 1164, 1168, 1173, 1180, 1184,
+ /* 100 */ 1187, 1192, -214, -214, -214, -214, -214, -214, -214, -214,
+ /* 110 */ -214, 132, -45, 97, 8, 164, 379, 175, 255, -214,
+ /* 120 */ 178, -214, -214, -214, -214, -168, -168, -168, 124, 329,
+ /* 130 */ 399, 401, -129, 347, 347, 331, 133, 451, 452, 498,
+ /* 140 */ 500, 502, 503, 505, 487, 506, 488, 490, 507, 543,
+ /* 150 */ 547, -126, 588, 290, 27, 572, 501, 597, 537, 582,
+ /* 160 */ 183, 599, 600, 601, 649, 650, 653, 508, 538, -29,
+ /* 170 */ -156, -152, -137, -79, 135, 74, 130, 242, 338, 378,
+ /* 180 */ 393, 397, 607, 648, 691, 700, 708, 709, 728, 757,
+ /* 190 */ 763, 769, 796, 810, 818, 845, 202, 748, 792, 861,
+ /* 200 */ 862, 815, 866, 903, 905, 850, 931, 932, 896, 937,
+ /* 210 */ 939, 945, 74, 949, 951, 964, 965, 967, 968, 888,
+ /* 220 */ 820, 923, 926, 959, 960, 815, 980, 908, 1009, 985,
+ /* 230 */ 986, 970, 974, 942, 988, 947, 1018, 1011, 1022, 1025,
+ /* 240 */ 991, 982, 1032, 1038, 1015, 1019, 1064, 984, 1071, 1072,
+ /* 250 */ 992, 993, 1085, 1061, 1069, 1067, 1093, 1116, 1124, 1128,
+ /* 260 */ 1133, 1132, 1138, 1086, 1136, 1143, 1146, 1175, 1166, 1108,
+ /* 270 */ 1113, 1193, 1196, 1201, 1178, 1203, 1205, 1208, 1206, 1190,
+ /* 280 */ 1195, 1197, 1199, 1194, 1200, 1204, 1207, 1210, 1211, 1212,
+ /* 290 */ 1213, 1159, 1167, 1169, 1174, 1172, 1176, 1179, 1177, 1222,
+ /* 300 */ 1170, 1232, 1171, 1221, 1181, 1182, 1223, 1202, 1214, 1216,
+ /* 310 */ 1215, 1219, 1245, 1249, 1261, 1262, 1266, 1271, 1275, 1183,
+ /* 320 */ 1185, 1189, 1258, 1253, 1254, 1256, 1259, 1263, 1252, 1255,
+ /* 330 */ 1268, 1269, 1270, 1278, 1264,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 1270, 1260, 1260, 1260, 1193, 1193, 1193, 1193, 1260, 1088,
- /* 10 */ 1117, 1117, 1244, 1322, 1322, 1322, 1322, 1322, 1322, 1192,
- /* 20 */ 1322, 1322, 1322, 1322, 1260, 1092, 1123, 1322, 1322, 1322,
- /* 30 */ 1322, 1194, 1195, 1322, 1322, 1322, 1243, 1245, 1133, 1132,
- /* 40 */ 1131, 1130, 1226, 1104, 1128, 1121, 1125, 1194, 1188, 1189,
- /* 50 */ 1187, 1191, 1195, 1322, 1124, 1158, 1172, 1157, 1322, 1322,
- /* 60 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 70 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 80 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 90 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 100 */ 1322, 1322, 1322, 1322, 1166, 1171, 1178, 1170, 1167, 1160,
- /* 110 */ 1159, 1161, 1162, 1322, 1011, 1059, 1322, 1322, 1322, 1163,
- /* 120 */ 1322, 1164, 1175, 1174, 1173, 1251, 1278, 1277, 1322, 1322,
- /* 130 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 140 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 150 */ 1322, 1322, 1322, 1322, 1322, 1270, 1260, 1017, 1017, 1322,
- /* 160 */ 1260, 1260, 1260, 1260, 1260, 1260, 1256, 1092, 1083, 1322,
- /* 170 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 180 */ 1248, 1246, 1322, 1208, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 190 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 200 */ 1322, 1322, 1322, 1322, 1088, 1322, 1322, 1322, 1322, 1322,
- /* 210 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1272, 1322, 1221,
- /* 220 */ 1088, 1088, 1088, 1090, 1072, 1082, 997, 1127, 1106, 1106,
- /* 230 */ 1311, 1127, 1311, 1034, 1292, 1031, 1117, 1106, 1190, 1117,
- /* 240 */ 1117, 1089, 1082, 1322, 1314, 1097, 1097, 1313, 1313, 1097,
- /* 250 */ 1138, 1062, 1127, 1068, 1068, 1068, 1068, 1097, 1008, 1127,
- /* 260 */ 1138, 1062, 1062, 1127, 1097, 1008, 1225, 1308, 1097, 1097,
- /* 270 */ 1008, 1201, 1097, 1008, 1097, 1008, 1201, 1060, 1060, 1060,
- /* 280 */ 1049, 1201, 1060, 1034, 1060, 1049, 1060, 1060, 1110, 1105,
- /* 290 */ 1110, 1105, 1110, 1105, 1110, 1105, 1097, 1196, 1097, 1322,
- /* 300 */ 1201, 1205, 1205, 1201, 1122, 1111, 1120, 1118, 1127, 1014,
- /* 310 */ 1052, 1275, 1275, 1271, 1271, 1271, 1319, 1319, 1256, 1287,
- /* 320 */ 1287, 1036, 1036, 1287, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 330 */ 1282, 1322, 1210, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 340 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 350 */ 1322, 1143, 1322, 993, 1253, 1322, 1322, 1252, 1322, 1322,
- /* 360 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 370 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1310, 1322,
- /* 380 */ 1322, 1322, 1322, 1322, 1322, 1224, 1223, 1322, 1322, 1322,
- /* 390 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 400 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322,
- /* 410 */ 1074, 1322, 1322, 1322, 1296, 1322, 1322, 1322, 1322, 1322,
- /* 420 */ 1322, 1322, 1119, 1322, 1112, 1322, 1322, 1301, 1322, 1322,
- /* 430 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1262, 1322,
- /* 440 */ 1322, 1322, 1261, 1322, 1322, 1322, 1322, 1322, 1145, 1322,
- /* 450 */ 1144, 1148, 1322, 1002, 1322,
+ /* 0 */ 1286, 1276, 1276, 1276, 1209, 1209, 1209, 1209, 1133, 1133,
+ /* 10 */ 1260, 1036, 1005, 1005, 1005, 1005, 1005, 1005, 1208, 1005,
+ /* 20 */ 1005, 1005, 1005, 1108, 1139, 1005, 1005, 1005, 1005, 1210,
+ /* 30 */ 1211, 1005, 1005, 1005, 1259, 1261, 1149, 1148, 1147, 1146,
+ /* 40 */ 1242, 1120, 1144, 1137, 1141, 1210, 1204, 1205, 1203, 1207,
+ /* 50 */ 1211, 1005, 1140, 1174, 1188, 1173, 1005, 1005, 1005, 1005,
+ /* 60 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 70 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 80 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 90 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 100 */ 1005, 1005, 1182, 1187, 1194, 1186, 1183, 1176, 1175, 1177,
+ /* 110 */ 1178, 1005, 1026, 1075, 1005, 1005, 1005, 1276, 1036, 1179,
+ /* 120 */ 1005, 1180, 1191, 1190, 1189, 1267, 1294, 1293, 1005, 1005,
+ /* 130 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 140 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 150 */ 1005, 1005, 1005, 1005, 1005, 1036, 1286, 1276, 1032, 1032,
+ /* 160 */ 1005, 1276, 1276, 1276, 1276, 1276, 1276, 1272, 1108, 1099,
+ /* 170 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 180 */ 1005, 1264, 1262, 1005, 1224, 1005, 1005, 1005, 1005, 1005,
+ /* 190 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 200 */ 1005, 1005, 1005, 1005, 1005, 1104, 1005, 1005, 1005, 1005,
+ /* 210 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1288, 1005,
+ /* 220 */ 1237, 1104, 1104, 1104, 1104, 1106, 1088, 1098, 1036, 1012,
+ /* 230 */ 1143, 1122, 1122, 1327, 1143, 1327, 1050, 1308, 1047, 1133,
+ /* 240 */ 1122, 1206, 1133, 1133, 1105, 1098, 1005, 1330, 1113, 1113,
+ /* 250 */ 1329, 1329, 1113, 1154, 1078, 1143, 1084, 1084, 1084, 1084,
+ /* 260 */ 1113, 1023, 1143, 1154, 1078, 1078, 1143, 1113, 1023, 1241,
+ /* 270 */ 1324, 1113, 1113, 1023, 1217, 1113, 1023, 1113, 1023, 1217,
+ /* 280 */ 1076, 1076, 1076, 1065, 1217, 1076, 1050, 1076, 1065, 1076,
+ /* 290 */ 1076, 1126, 1121, 1126, 1121, 1126, 1121, 1126, 1121, 1113,
+ /* 300 */ 1212, 1113, 1005, 1217, 1221, 1221, 1217, 1138, 1127, 1136,
+ /* 310 */ 1134, 1143, 1029, 1068, 1291, 1291, 1287, 1287, 1287, 1335,
+ /* 320 */ 1335, 1272, 1303, 1036, 1036, 1036, 1036, 1303, 1052, 1052,
+ /* 330 */ 1036, 1036, 1036, 1036, 1303, 1005, 1005, 1005, 1005, 1005,
+ /* 340 */ 1005, 1298, 1005, 1226, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 350 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 360 */ 1005, 1005, 1159, 1005, 1008, 1269, 1005, 1005, 1268, 1005,
+ /* 370 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 380 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1326,
+ /* 390 */ 1005, 1005, 1005, 1005, 1005, 1005, 1240, 1239, 1005, 1005,
+ /* 400 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 410 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+ /* 420 */ 1005, 1090, 1005, 1005, 1005, 1312, 1005, 1005, 1005, 1005,
+ /* 430 */ 1005, 1005, 1005, 1135, 1005, 1128, 1005, 1005, 1317, 1005,
+ /* 440 */ 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1278,
+ /* 450 */ 1005, 1005, 1005, 1277, 1005, 1005, 1005, 1005, 1005, 1161,
+ /* 460 */ 1005, 1160, 1164, 1005, 1017, 1005,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -137415,73 +138929,87 @@ static const YYACTIONTYPE yy_default[] = {
static const YYCODETYPE yyFallback[] = {
0, /* $ => nothing */
0, /* SEMI => nothing */
- 27, /* EXPLAIN => ID */
- 27, /* QUERY => ID */
- 27, /* PLAN => ID */
- 27, /* BEGIN => ID */
+ 59, /* EXPLAIN => ID */
+ 59, /* QUERY => ID */
+ 59, /* PLAN => ID */
+ 59, /* BEGIN => ID */
0, /* TRANSACTION => nothing */
- 27, /* DEFERRED => ID */
- 27, /* IMMEDIATE => ID */
- 27, /* EXCLUSIVE => ID */
+ 59, /* DEFERRED => ID */
+ 59, /* IMMEDIATE => ID */
+ 59, /* EXCLUSIVE => ID */
0, /* COMMIT => nothing */
- 27, /* END => ID */
- 27, /* ROLLBACK => ID */
- 27, /* SAVEPOINT => ID */
- 27, /* RELEASE => ID */
+ 59, /* END => ID */
+ 59, /* ROLLBACK => ID */
+ 59, /* SAVEPOINT => ID */
+ 59, /* RELEASE => ID */
0, /* TO => nothing */
0, /* TABLE => nothing */
0, /* CREATE => nothing */
- 27, /* IF => ID */
+ 59, /* IF => ID */
0, /* NOT => nothing */
0, /* EXISTS => nothing */
- 27, /* TEMP => ID */
+ 59, /* TEMP => ID */
0, /* LP => nothing */
0, /* RP => nothing */
0, /* AS => nothing */
- 27, /* WITHOUT => ID */
+ 59, /* WITHOUT => ID */
0, /* COMMA => nothing */
+ 59, /* ABORT => ID */
+ 59, /* ACTION => ID */
+ 59, /* AFTER => ID */
+ 59, /* ANALYZE => ID */
+ 59, /* ASC => ID */
+ 59, /* ATTACH => ID */
+ 59, /* BEFORE => ID */
+ 59, /* BY => ID */
+ 59, /* CASCADE => ID */
+ 59, /* CAST => ID */
+ 59, /* CONFLICT => ID */
+ 59, /* DATABASE => ID */
+ 59, /* DESC => ID */
+ 59, /* DETACH => ID */
+ 59, /* EACH => ID */
+ 59, /* FAIL => ID */
+ 0, /* OR => nothing */
+ 0, /* AND => nothing */
+ 0, /* IS => nothing */
+ 59, /* MATCH => ID */
+ 59, /* LIKE_KW => ID */
+ 0, /* BETWEEN => nothing */
+ 0, /* IN => nothing */
+ 0, /* ISNULL => nothing */
+ 0, /* NOTNULL => nothing */
+ 0, /* NE => nothing */
+ 0, /* EQ => nothing */
+ 0, /* GT => nothing */
+ 0, /* LE => nothing */
+ 0, /* LT => nothing */
+ 0, /* GE => nothing */
+ 0, /* ESCAPE => nothing */
0, /* ID => nothing */
- 27, /* ABORT => ID */
- 27, /* ACTION => ID */
- 27, /* AFTER => ID */
- 27, /* ANALYZE => ID */
- 27, /* ASC => ID */
- 27, /* ATTACH => ID */
- 27, /* BEFORE => ID */
- 27, /* BY => ID */
- 27, /* CASCADE => ID */
- 27, /* CAST => ID */
- 27, /* COLUMNKW => ID */
- 27, /* CONFLICT => ID */
- 27, /* DATABASE => ID */
- 27, /* DESC => ID */
- 27, /* DETACH => ID */
- 27, /* EACH => ID */
- 27, /* FAIL => ID */
- 27, /* FOR => ID */
- 27, /* IGNORE => ID */
- 27, /* INITIALLY => ID */
- 27, /* INSTEAD => ID */
- 27, /* LIKE_KW => ID */
- 27, /* MATCH => ID */
- 27, /* NO => ID */
- 27, /* KEY => ID */
- 27, /* OF => ID */
- 27, /* OFFSET => ID */
- 27, /* PRAGMA => ID */
- 27, /* RAISE => ID */
- 27, /* RECURSIVE => ID */
- 27, /* REPLACE => ID */
- 27, /* RESTRICT => ID */
- 27, /* ROW => ID */
- 27, /* TRIGGER => ID */
- 27, /* VACUUM => ID */
- 27, /* VIEW => ID */
- 27, /* VIRTUAL => ID */
- 27, /* WITH => ID */
- 27, /* REINDEX => ID */
- 27, /* RENAME => ID */
- 27, /* CTIME_KW => ID */
+ 59, /* COLUMNKW => ID */
+ 59, /* FOR => ID */
+ 59, /* IGNORE => ID */
+ 59, /* INITIALLY => ID */
+ 59, /* INSTEAD => ID */
+ 59, /* NO => ID */
+ 59, /* KEY => ID */
+ 59, /* OF => ID */
+ 59, /* OFFSET => ID */
+ 59, /* PRAGMA => ID */
+ 59, /* RAISE => ID */
+ 59, /* RECURSIVE => ID */
+ 59, /* REPLACE => ID */
+ 59, /* RESTRICT => ID */
+ 59, /* ROW => ID */
+ 59, /* TRIGGER => ID */
+ 59, /* VACUUM => ID */
+ 59, /* VIEW => ID */
+ 59, /* VIRTUAL => ID */
+ 59, /* WITH => ID */
+ 59, /* REINDEX => ID */
+ 59, /* RENAME => ID */
+ 59, /* CTIME_KW => ID */
};
#endif /* YYFALLBACK */
@@ -137564,75 +139092,264 @@ SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){
}
#endif /* NDEBUG */
-#ifndef NDEBUG
+#if defined(YYCOVERAGE) || !defined(NDEBUG)
/* For tracing shifts, the names of all terminals and nonterminals
** are required. The following table supplies these names */
static const char *const yyTokenName[] = {
- "$", "SEMI", "EXPLAIN", "QUERY",
- "PLAN", "BEGIN", "TRANSACTION", "DEFERRED",
- "IMMEDIATE", "EXCLUSIVE", "COMMIT", "END",
- "ROLLBACK", "SAVEPOINT", "RELEASE", "TO",
- "TABLE", "CREATE", "IF", "NOT",
- "EXISTS", "TEMP", "LP", "RP",
- "AS", "WITHOUT", "COMMA", "ID",
- "ABORT", "ACTION", "AFTER", "ANALYZE",
- "ASC", "ATTACH", "BEFORE", "BY",
- "CASCADE", "CAST", "COLUMNKW", "CONFLICT",
- "DATABASE", "DESC", "DETACH", "EACH",
- "FAIL", "FOR", "IGNORE", "INITIALLY",
- "INSTEAD", "LIKE_KW", "MATCH", "NO",
- "KEY", "OF", "OFFSET", "PRAGMA",
- "RAISE", "RECURSIVE", "REPLACE", "RESTRICT",
- "ROW", "TRIGGER", "VACUUM", "VIEW",
- "VIRTUAL", "WITH", "REINDEX", "RENAME",
- "CTIME_KW", "ANY", "OR", "AND",
- "IS", "BETWEEN", "IN", "ISNULL",
- "NOTNULL", "NE", "EQ", "GT",
- "LE", "LT", "GE", "ESCAPE",
- "BITAND", "BITOR", "LSHIFT", "RSHIFT",
- "PLUS", "MINUS", "STAR", "SLASH",
- "REM", "CONCAT", "COLLATE", "BITNOT",
- "INDEXED", "STRING", "JOIN_KW", "CONSTRAINT",
- "DEFAULT", "NULL", "PRIMARY", "UNIQUE",
- "CHECK", "REFERENCES", "AUTOINCR", "ON",
- "INSERT", "DELETE", "UPDATE", "SET",
- "DEFERRABLE", "FOREIGN", "DROP", "UNION",
- "ALL", "EXCEPT", "INTERSECT", "SELECT",
- "VALUES", "DISTINCT", "DOT", "FROM",
- "JOIN", "USING", "ORDER", "GROUP",
- "HAVING", "LIMIT", "WHERE", "INTO",
- "FLOAT", "BLOB", "INTEGER", "VARIABLE",
- "CASE", "WHEN", "THEN", "ELSE",
- "INDEX", "ALTER", "ADD", "error",
- "input", "cmdlist", "ecmd", "explain",
- "cmdx", "cmd", "transtype", "trans_opt",
- "nm", "savepoint_opt", "create_table", "create_table_args",
- "createkw", "temp", "ifnotexists", "dbnm",
- "columnlist", "conslist_opt", "table_options", "select",
- "columnname", "carglist", "typetoken", "typename",
- "signed", "plus_num", "minus_num", "ccons",
- "term", "expr", "onconf", "sortorder",
- "autoinc", "eidlist_opt", "refargs", "defer_subclause",
- "refarg", "refact", "init_deferred_pred_opt", "conslist",
- "tconscomma", "tcons", "sortlist", "eidlist",
- "defer_subclause_opt", "orconf", "resolvetype", "raisetype",
- "ifexists", "fullname", "selectnowith", "oneselect",
- "with", "multiselect_op", "distinct", "selcollist",
- "from", "where_opt", "groupby_opt", "having_opt",
- "orderby_opt", "limit_opt", "values", "nexprlist",
- "exprlist", "sclp", "as", "seltablist",
- "stl_prefix", "joinop", "indexed_opt", "on_opt",
- "using_opt", "idlist", "setlist", "insert_cmd",
- "idlist_opt", "likeop", "between_op", "in_op",
- "paren_exprlist", "case_operand", "case_exprlist", "case_else",
- "uniqueflag", "collate", "nmnum", "trigger_decl",
- "trigger_cmd_list", "trigger_time", "trigger_event", "foreach_clause",
- "when_clause", "trigger_cmd", "trnm", "tridxby",
- "database_kw_opt", "key_opt", "add_column_fullname", "kwcolumn_opt",
- "create_vtab", "vtabarglist", "vtabarg", "vtabargtoken",
- "lp", "anylist", "wqlist",
+ /* 0 */ "$",
+ /* 1 */ "SEMI",
+ /* 2 */ "EXPLAIN",
+ /* 3 */ "QUERY",
+ /* 4 */ "PLAN",
+ /* 5 */ "BEGIN",
+ /* 6 */ "TRANSACTION",
+ /* 7 */ "DEFERRED",
+ /* 8 */ "IMMEDIATE",
+ /* 9 */ "EXCLUSIVE",
+ /* 10 */ "COMMIT",
+ /* 11 */ "END",
+ /* 12 */ "ROLLBACK",
+ /* 13 */ "SAVEPOINT",
+ /* 14 */ "RELEASE",
+ /* 15 */ "TO",
+ /* 16 */ "TABLE",
+ /* 17 */ "CREATE",
+ /* 18 */ "IF",
+ /* 19 */ "NOT",
+ /* 20 */ "EXISTS",
+ /* 21 */ "TEMP",
+ /* 22 */ "LP",
+ /* 23 */ "RP",
+ /* 24 */ "AS",
+ /* 25 */ "WITHOUT",
+ /* 26 */ "COMMA",
+ /* 27 */ "ABORT",
+ /* 28 */ "ACTION",
+ /* 29 */ "AFTER",
+ /* 30 */ "ANALYZE",
+ /* 31 */ "ASC",
+ /* 32 */ "ATTACH",
+ /* 33 */ "BEFORE",
+ /* 34 */ "BY",
+ /* 35 */ "CASCADE",
+ /* 36 */ "CAST",
+ /* 37 */ "CONFLICT",
+ /* 38 */ "DATABASE",
+ /* 39 */ "DESC",
+ /* 40 */ "DETACH",
+ /* 41 */ "EACH",
+ /* 42 */ "FAIL",
+ /* 43 */ "OR",
+ /* 44 */ "AND",
+ /* 45 */ "IS",
+ /* 46 */ "MATCH",
+ /* 47 */ "LIKE_KW",
+ /* 48 */ "BETWEEN",
+ /* 49 */ "IN",
+ /* 50 */ "ISNULL",
+ /* 51 */ "NOTNULL",
+ /* 52 */ "NE",
+ /* 53 */ "EQ",
+ /* 54 */ "GT",
+ /* 55 */ "LE",
+ /* 56 */ "LT",
+ /* 57 */ "GE",
+ /* 58 */ "ESCAPE",
+ /* 59 */ "ID",
+ /* 60 */ "COLUMNKW",
+ /* 61 */ "FOR",
+ /* 62 */ "IGNORE",
+ /* 63 */ "INITIALLY",
+ /* 64 */ "INSTEAD",
+ /* 65 */ "NO",
+ /* 66 */ "KEY",
+ /* 67 */ "OF",
+ /* 68 */ "OFFSET",
+ /* 69 */ "PRAGMA",
+ /* 70 */ "RAISE",
+ /* 71 */ "RECURSIVE",
+ /* 72 */ "REPLACE",
+ /* 73 */ "RESTRICT",
+ /* 74 */ "ROW",
+ /* 75 */ "TRIGGER",
+ /* 76 */ "VACUUM",
+ /* 77 */ "VIEW",
+ /* 78 */ "VIRTUAL",
+ /* 79 */ "WITH",
+ /* 80 */ "REINDEX",
+ /* 81 */ "RENAME",
+ /* 82 */ "CTIME_KW",
+ /* 83 */ "ANY",
+ /* 84 */ "BITAND",
+ /* 85 */ "BITOR",
+ /* 86 */ "LSHIFT",
+ /* 87 */ "RSHIFT",
+ /* 88 */ "PLUS",
+ /* 89 */ "MINUS",
+ /* 90 */ "STAR",
+ /* 91 */ "SLASH",
+ /* 92 */ "REM",
+ /* 93 */ "CONCAT",
+ /* 94 */ "COLLATE",
+ /* 95 */ "BITNOT",
+ /* 96 */ "INDEXED",
+ /* 97 */ "STRING",
+ /* 98 */ "JOIN_KW",
+ /* 99 */ "CONSTRAINT",
+ /* 100 */ "DEFAULT",
+ /* 101 */ "NULL",
+ /* 102 */ "PRIMARY",
+ /* 103 */ "UNIQUE",
+ /* 104 */ "CHECK",
+ /* 105 */ "REFERENCES",
+ /* 106 */ "AUTOINCR",
+ /* 107 */ "ON",
+ /* 108 */ "INSERT",
+ /* 109 */ "DELETE",
+ /* 110 */ "UPDATE",
+ /* 111 */ "SET",
+ /* 112 */ "DEFERRABLE",
+ /* 113 */ "FOREIGN",
+ /* 114 */ "DROP",
+ /* 115 */ "UNION",
+ /* 116 */ "ALL",
+ /* 117 */ "EXCEPT",
+ /* 118 */ "INTERSECT",
+ /* 119 */ "SELECT",
+ /* 120 */ "VALUES",
+ /* 121 */ "DISTINCT",
+ /* 122 */ "DOT",
+ /* 123 */ "FROM",
+ /* 124 */ "JOIN",
+ /* 125 */ "USING",
+ /* 126 */ "ORDER",
+ /* 127 */ "GROUP",
+ /* 128 */ "HAVING",
+ /* 129 */ "LIMIT",
+ /* 130 */ "WHERE",
+ /* 131 */ "INTO",
+ /* 132 */ "FLOAT",
+ /* 133 */ "BLOB",
+ /* 134 */ "INTEGER",
+ /* 135 */ "VARIABLE",
+ /* 136 */ "CASE",
+ /* 137 */ "WHEN",
+ /* 138 */ "THEN",
+ /* 139 */ "ELSE",
+ /* 140 */ "INDEX",
+ /* 141 */ "ALTER",
+ /* 142 */ "ADD",
+ /* 143 */ "error",
+ /* 144 */ "input",
+ /* 145 */ "cmdlist",
+ /* 146 */ "ecmd",
+ /* 147 */ "explain",
+ /* 148 */ "cmdx",
+ /* 149 */ "cmd",
+ /* 150 */ "transtype",
+ /* 151 */ "trans_opt",
+ /* 152 */ "nm",
+ /* 153 */ "savepoint_opt",
+ /* 154 */ "create_table",
+ /* 155 */ "create_table_args",
+ /* 156 */ "createkw",
+ /* 157 */ "temp",
+ /* 158 */ "ifnotexists",
+ /* 159 */ "dbnm",
+ /* 160 */ "columnlist",
+ /* 161 */ "conslist_opt",
+ /* 162 */ "table_options",
+ /* 163 */ "select",
+ /* 164 */ "columnname",
+ /* 165 */ "carglist",
+ /* 166 */ "typetoken",
+ /* 167 */ "typename",
+ /* 168 */ "signed",
+ /* 169 */ "plus_num",
+ /* 170 */ "minus_num",
+ /* 171 */ "scanpt",
+ /* 172 */ "ccons",
+ /* 173 */ "term",
+ /* 174 */ "expr",
+ /* 175 */ "onconf",
+ /* 176 */ "sortorder",
+ /* 177 */ "autoinc",
+ /* 178 */ "eidlist_opt",
+ /* 179 */ "refargs",
+ /* 180 */ "defer_subclause",
+ /* 181 */ "refarg",
+ /* 182 */ "refact",
+ /* 183 */ "init_deferred_pred_opt",
+ /* 184 */ "conslist",
+ /* 185 */ "tconscomma",
+ /* 186 */ "tcons",
+ /* 187 */ "sortlist",
+ /* 188 */ "eidlist",
+ /* 189 */ "defer_subclause_opt",
+ /* 190 */ "orconf",
+ /* 191 */ "resolvetype",
+ /* 192 */ "raisetype",
+ /* 193 */ "ifexists",
+ /* 194 */ "fullname",
+ /* 195 */ "selectnowith",
+ /* 196 */ "oneselect",
+ /* 197 */ "with",
+ /* 198 */ "multiselect_op",
+ /* 199 */ "distinct",
+ /* 200 */ "selcollist",
+ /* 201 */ "from",
+ /* 202 */ "where_opt",
+ /* 203 */ "groupby_opt",
+ /* 204 */ "having_opt",
+ /* 205 */ "orderby_opt",
+ /* 206 */ "limit_opt",
+ /* 207 */ "values",
+ /* 208 */ "nexprlist",
+ /* 209 */ "exprlist",
+ /* 210 */ "sclp",
+ /* 211 */ "as",
+ /* 212 */ "seltablist",
+ /* 213 */ "stl_prefix",
+ /* 214 */ "joinop",
+ /* 215 */ "indexed_opt",
+ /* 216 */ "on_opt",
+ /* 217 */ "using_opt",
+ /* 218 */ "idlist",
+ /* 219 */ "setlist",
+ /* 220 */ "insert_cmd",
+ /* 221 */ "idlist_opt",
+ /* 222 */ "likeop",
+ /* 223 */ "between_op",
+ /* 224 */ "in_op",
+ /* 225 */ "paren_exprlist",
+ /* 226 */ "case_operand",
+ /* 227 */ "case_exprlist",
+ /* 228 */ "case_else",
+ /* 229 */ "uniqueflag",
+ /* 230 */ "collate",
+ /* 231 */ "nmnum",
+ /* 232 */ "trigger_decl",
+ /* 233 */ "trigger_cmd_list",
+ /* 234 */ "trigger_time",
+ /* 235 */ "trigger_event",
+ /* 236 */ "foreach_clause",
+ /* 237 */ "when_clause",
+ /* 238 */ "trigger_cmd",
+ /* 239 */ "trnm",
+ /* 240 */ "tridxby",
+ /* 241 */ "database_kw_opt",
+ /* 242 */ "key_opt",
+ /* 243 */ "add_column_fullname",
+ /* 244 */ "kwcolumn_opt",
+ /* 245 */ "create_vtab",
+ /* 246 */ "vtabarglist",
+ /* 247 */ "vtabarg",
+ /* 248 */ "vtabargtoken",
+ /* 249 */ "lp",
+ /* 250 */ "anylist",
+ /* 251 */ "wqlist",
};
-#endif /* NDEBUG */
+#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
#ifndef NDEBUG
/* For tracing reduce actions, the names of all rules are required.
@@ -137666,307 +139383,308 @@ static const char *const yyRuleName[] = {
/* 25 */ "typetoken ::= typename LP signed RP",
/* 26 */ "typetoken ::= typename LP signed COMMA signed RP",
/* 27 */ "typename ::= typename ID|STRING",
- /* 28 */ "ccons ::= CONSTRAINT nm",
- /* 29 */ "ccons ::= DEFAULT term",
- /* 30 */ "ccons ::= DEFAULT LP expr RP",
- /* 31 */ "ccons ::= DEFAULT PLUS term",
- /* 32 */ "ccons ::= DEFAULT MINUS term",
- /* 33 */ "ccons ::= DEFAULT ID|INDEXED",
- /* 34 */ "ccons ::= NOT NULL onconf",
- /* 35 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
- /* 36 */ "ccons ::= UNIQUE onconf",
- /* 37 */ "ccons ::= CHECK LP expr RP",
- /* 38 */ "ccons ::= REFERENCES nm eidlist_opt refargs",
- /* 39 */ "ccons ::= defer_subclause",
- /* 40 */ "ccons ::= COLLATE ID|STRING",
- /* 41 */ "autoinc ::=",
- /* 42 */ "autoinc ::= AUTOINCR",
- /* 43 */ "refargs ::=",
- /* 44 */ "refargs ::= refargs refarg",
- /* 45 */ "refarg ::= MATCH nm",
- /* 46 */ "refarg ::= ON INSERT refact",
- /* 47 */ "refarg ::= ON DELETE refact",
- /* 48 */ "refarg ::= ON UPDATE refact",
- /* 49 */ "refact ::= SET NULL",
- /* 50 */ "refact ::= SET DEFAULT",
- /* 51 */ "refact ::= CASCADE",
- /* 52 */ "refact ::= RESTRICT",
- /* 53 */ "refact ::= NO ACTION",
- /* 54 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
- /* 55 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
- /* 56 */ "init_deferred_pred_opt ::=",
- /* 57 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
- /* 58 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
- /* 59 */ "conslist_opt ::=",
- /* 60 */ "tconscomma ::= COMMA",
- /* 61 */ "tcons ::= CONSTRAINT nm",
- /* 62 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf",
- /* 63 */ "tcons ::= UNIQUE LP sortlist RP onconf",
- /* 64 */ "tcons ::= CHECK LP expr RP onconf",
- /* 65 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt",
- /* 66 */ "defer_subclause_opt ::=",
- /* 67 */ "onconf ::=",
- /* 68 */ "onconf ::= ON CONFLICT resolvetype",
- /* 69 */ "orconf ::=",
- /* 70 */ "orconf ::= OR resolvetype",
- /* 71 */ "resolvetype ::= IGNORE",
- /* 72 */ "resolvetype ::= REPLACE",
- /* 73 */ "cmd ::= DROP TABLE ifexists fullname",
- /* 74 */ "ifexists ::= IF EXISTS",
- /* 75 */ "ifexists ::=",
- /* 76 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select",
- /* 77 */ "cmd ::= DROP VIEW ifexists fullname",
- /* 78 */ "cmd ::= select",
- /* 79 */ "select ::= with selectnowith",
- /* 80 */ "selectnowith ::= selectnowith multiselect_op oneselect",
- /* 81 */ "multiselect_op ::= UNION",
- /* 82 */ "multiselect_op ::= UNION ALL",
- /* 83 */ "multiselect_op ::= EXCEPT|INTERSECT",
- /* 84 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
- /* 85 */ "values ::= VALUES LP nexprlist RP",
- /* 86 */ "values ::= values COMMA LP exprlist RP",
- /* 87 */ "distinct ::= DISTINCT",
- /* 88 */ "distinct ::= ALL",
- /* 89 */ "distinct ::=",
- /* 90 */ "sclp ::=",
- /* 91 */ "selcollist ::= sclp expr as",
- /* 92 */ "selcollist ::= sclp STAR",
- /* 93 */ "selcollist ::= sclp nm DOT STAR",
- /* 94 */ "as ::= AS nm",
- /* 95 */ "as ::=",
- /* 96 */ "from ::=",
- /* 97 */ "from ::= FROM seltablist",
- /* 98 */ "stl_prefix ::= seltablist joinop",
- /* 99 */ "stl_prefix ::=",
- /* 100 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
- /* 101 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt",
- /* 102 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
- /* 103 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
- /* 104 */ "dbnm ::=",
- /* 105 */ "dbnm ::= DOT nm",
- /* 106 */ "fullname ::= nm dbnm",
- /* 107 */ "joinop ::= COMMA|JOIN",
- /* 108 */ "joinop ::= JOIN_KW JOIN",
- /* 109 */ "joinop ::= JOIN_KW nm JOIN",
- /* 110 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 111 */ "on_opt ::= ON expr",
- /* 112 */ "on_opt ::=",
- /* 113 */ "indexed_opt ::=",
- /* 114 */ "indexed_opt ::= INDEXED BY nm",
- /* 115 */ "indexed_opt ::= NOT INDEXED",
- /* 116 */ "using_opt ::= USING LP idlist RP",
- /* 117 */ "using_opt ::=",
- /* 118 */ "orderby_opt ::=",
- /* 119 */ "orderby_opt ::= ORDER BY sortlist",
- /* 120 */ "sortlist ::= sortlist COMMA expr sortorder",
- /* 121 */ "sortlist ::= expr sortorder",
- /* 122 */ "sortorder ::= ASC",
- /* 123 */ "sortorder ::= DESC",
- /* 124 */ "sortorder ::=",
- /* 125 */ "groupby_opt ::=",
- /* 126 */ "groupby_opt ::= GROUP BY nexprlist",
- /* 127 */ "having_opt ::=",
- /* 128 */ "having_opt ::= HAVING expr",
- /* 129 */ "limit_opt ::=",
- /* 130 */ "limit_opt ::= LIMIT expr",
- /* 131 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 132 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 133 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt",
- /* 134 */ "where_opt ::=",
- /* 135 */ "where_opt ::= WHERE expr",
- /* 136 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt",
- /* 137 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 138 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
- /* 139 */ "setlist ::= nm EQ expr",
- /* 140 */ "setlist ::= LP idlist RP EQ expr",
- /* 141 */ "cmd ::= with insert_cmd INTO fullname idlist_opt select",
- /* 142 */ "cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES",
- /* 143 */ "insert_cmd ::= INSERT orconf",
- /* 144 */ "insert_cmd ::= REPLACE",
- /* 145 */ "idlist_opt ::=",
- /* 146 */ "idlist_opt ::= LP idlist RP",
- /* 147 */ "idlist ::= idlist COMMA nm",
- /* 148 */ "idlist ::= nm",
- /* 149 */ "expr ::= LP expr RP",
- /* 150 */ "expr ::= ID|INDEXED",
- /* 151 */ "expr ::= JOIN_KW",
- /* 152 */ "expr ::= nm DOT nm",
- /* 153 */ "expr ::= nm DOT nm DOT nm",
- /* 154 */ "term ::= NULL|FLOAT|BLOB",
- /* 155 */ "term ::= STRING",
- /* 156 */ "term ::= INTEGER",
- /* 157 */ "expr ::= VARIABLE",
- /* 158 */ "expr ::= expr COLLATE ID|STRING",
- /* 159 */ "expr ::= CAST LP expr AS typetoken RP",
- /* 160 */ "expr ::= ID|INDEXED LP distinct exprlist RP",
- /* 161 */ "expr ::= ID|INDEXED LP STAR RP",
- /* 162 */ "term ::= CTIME_KW",
- /* 163 */ "expr ::= LP nexprlist COMMA expr RP",
- /* 164 */ "expr ::= expr AND expr",
- /* 165 */ "expr ::= expr OR expr",
- /* 166 */ "expr ::= expr LT|GT|GE|LE expr",
- /* 167 */ "expr ::= expr EQ|NE expr",
- /* 168 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 169 */ "expr ::= expr PLUS|MINUS expr",
- /* 170 */ "expr ::= expr STAR|SLASH|REM expr",
- /* 171 */ "expr ::= expr CONCAT expr",
- /* 172 */ "likeop ::= NOT LIKE_KW|MATCH",
- /* 173 */ "expr ::= expr likeop expr",
- /* 174 */ "expr ::= expr likeop expr ESCAPE expr",
- /* 175 */ "expr ::= expr ISNULL|NOTNULL",
- /* 176 */ "expr ::= expr NOT NULL",
- /* 177 */ "expr ::= expr IS expr",
- /* 178 */ "expr ::= expr IS NOT expr",
- /* 179 */ "expr ::= NOT expr",
- /* 180 */ "expr ::= BITNOT expr",
- /* 181 */ "expr ::= MINUS expr",
- /* 182 */ "expr ::= PLUS expr",
- /* 183 */ "between_op ::= BETWEEN",
- /* 184 */ "between_op ::= NOT BETWEEN",
- /* 185 */ "expr ::= expr between_op expr AND expr",
- /* 186 */ "in_op ::= IN",
- /* 187 */ "in_op ::= NOT IN",
- /* 188 */ "expr ::= expr in_op LP exprlist RP",
- /* 189 */ "expr ::= LP select RP",
- /* 190 */ "expr ::= expr in_op LP select RP",
- /* 191 */ "expr ::= expr in_op nm dbnm paren_exprlist",
- /* 192 */ "expr ::= EXISTS LP select RP",
- /* 193 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 194 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 195 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 196 */ "case_else ::= ELSE expr",
- /* 197 */ "case_else ::=",
- /* 198 */ "case_operand ::= expr",
- /* 199 */ "case_operand ::=",
- /* 200 */ "exprlist ::=",
- /* 201 */ "nexprlist ::= nexprlist COMMA expr",
- /* 202 */ "nexprlist ::= expr",
- /* 203 */ "paren_exprlist ::=",
- /* 204 */ "paren_exprlist ::= LP exprlist RP",
- /* 205 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
- /* 206 */ "uniqueflag ::= UNIQUE",
- /* 207 */ "uniqueflag ::=",
- /* 208 */ "eidlist_opt ::=",
- /* 209 */ "eidlist_opt ::= LP eidlist RP",
- /* 210 */ "eidlist ::= eidlist COMMA nm collate sortorder",
- /* 211 */ "eidlist ::= nm collate sortorder",
- /* 212 */ "collate ::=",
- /* 213 */ "collate ::= COLLATE ID|STRING",
- /* 214 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 215 */ "cmd ::= VACUUM",
- /* 216 */ "cmd ::= VACUUM nm",
- /* 217 */ "cmd ::= PRAGMA nm dbnm",
- /* 218 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 219 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 220 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 221 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 222 */ "plus_num ::= PLUS INTEGER|FLOAT",
- /* 223 */ "minus_num ::= MINUS INTEGER|FLOAT",
- /* 224 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
- /* 225 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 226 */ "trigger_time ::= BEFORE|AFTER",
- /* 227 */ "trigger_time ::= INSTEAD OF",
- /* 228 */ "trigger_time ::=",
- /* 229 */ "trigger_event ::= DELETE|INSERT",
- /* 230 */ "trigger_event ::= UPDATE",
- /* 231 */ "trigger_event ::= UPDATE OF idlist",
- /* 232 */ "when_clause ::=",
- /* 233 */ "when_clause ::= WHEN expr",
- /* 234 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 235 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 236 */ "trnm ::= nm DOT nm",
- /* 237 */ "tridxby ::= INDEXED BY nm",
- /* 238 */ "tridxby ::= NOT INDEXED",
- /* 239 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",
- /* 240 */ "trigger_cmd ::= insert_cmd INTO trnm idlist_opt select",
- /* 241 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",
- /* 242 */ "trigger_cmd ::= select",
- /* 243 */ "expr ::= RAISE LP IGNORE RP",
- /* 244 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 245 */ "raisetype ::= ROLLBACK",
- /* 246 */ "raisetype ::= ABORT",
- /* 247 */ "raisetype ::= FAIL",
- /* 248 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 249 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 250 */ "cmd ::= DETACH database_kw_opt expr",
- /* 251 */ "key_opt ::=",
- /* 252 */ "key_opt ::= KEY expr",
- /* 253 */ "cmd ::= REINDEX",
- /* 254 */ "cmd ::= REINDEX nm dbnm",
- /* 255 */ "cmd ::= ANALYZE",
- /* 256 */ "cmd ::= ANALYZE nm dbnm",
- /* 257 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 258 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
- /* 259 */ "add_column_fullname ::= fullname",
- /* 260 */ "cmd ::= create_vtab",
- /* 261 */ "cmd ::= create_vtab LP vtabarglist RP",
- /* 262 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 263 */ "vtabarg ::=",
- /* 264 */ "vtabargtoken ::= ANY",
- /* 265 */ "vtabargtoken ::= lp anylist RP",
- /* 266 */ "lp ::= LP",
- /* 267 */ "with ::=",
- /* 268 */ "with ::= WITH wqlist",
- /* 269 */ "with ::= WITH RECURSIVE wqlist",
- /* 270 */ "wqlist ::= nm eidlist_opt AS LP select RP",
- /* 271 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
- /* 272 */ "input ::= cmdlist",
- /* 273 */ "cmdlist ::= cmdlist ecmd",
- /* 274 */ "cmdlist ::= ecmd",
- /* 275 */ "ecmd ::= SEMI",
- /* 276 */ "ecmd ::= explain cmdx SEMI",
- /* 277 */ "explain ::=",
- /* 278 */ "trans_opt ::=",
- /* 279 */ "trans_opt ::= TRANSACTION",
- /* 280 */ "trans_opt ::= TRANSACTION nm",
- /* 281 */ "savepoint_opt ::= SAVEPOINT",
- /* 282 */ "savepoint_opt ::=",
- /* 283 */ "cmd ::= create_table create_table_args",
- /* 284 */ "columnlist ::= columnlist COMMA columnname carglist",
- /* 285 */ "columnlist ::= columnname carglist",
- /* 286 */ "nm ::= ID|INDEXED",
- /* 287 */ "nm ::= STRING",
- /* 288 */ "nm ::= JOIN_KW",
- /* 289 */ "typetoken ::= typename",
- /* 290 */ "typename ::= ID|STRING",
- /* 291 */ "signed ::= plus_num",
- /* 292 */ "signed ::= minus_num",
- /* 293 */ "carglist ::= carglist ccons",
- /* 294 */ "carglist ::=",
- /* 295 */ "ccons ::= NULL onconf",
- /* 296 */ "conslist_opt ::= COMMA conslist",
- /* 297 */ "conslist ::= conslist tconscomma tcons",
- /* 298 */ "conslist ::= tcons",
- /* 299 */ "tconscomma ::=",
- /* 300 */ "defer_subclause_opt ::= defer_subclause",
- /* 301 */ "resolvetype ::= raisetype",
- /* 302 */ "selectnowith ::= oneselect",
- /* 303 */ "oneselect ::= values",
- /* 304 */ "sclp ::= selcollist COMMA",
- /* 305 */ "as ::= ID|STRING",
- /* 306 */ "expr ::= term",
- /* 307 */ "likeop ::= LIKE_KW|MATCH",
- /* 308 */ "exprlist ::= nexprlist",
- /* 309 */ "nmnum ::= plus_num",
- /* 310 */ "nmnum ::= nm",
- /* 311 */ "nmnum ::= ON",
- /* 312 */ "nmnum ::= DELETE",
- /* 313 */ "nmnum ::= DEFAULT",
- /* 314 */ "plus_num ::= INTEGER|FLOAT",
- /* 315 */ "foreach_clause ::=",
- /* 316 */ "foreach_clause ::= FOR EACH ROW",
- /* 317 */ "trnm ::= nm",
- /* 318 */ "tridxby ::=",
- /* 319 */ "database_kw_opt ::= DATABASE",
- /* 320 */ "database_kw_opt ::=",
- /* 321 */ "kwcolumn_opt ::=",
- /* 322 */ "kwcolumn_opt ::= COLUMNKW",
- /* 323 */ "vtabarglist ::= vtabarg",
- /* 324 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 325 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 326 */ "anylist ::=",
- /* 327 */ "anylist ::= anylist LP anylist RP",
- /* 328 */ "anylist ::= anylist ANY",
+ /* 28 */ "scanpt ::=",
+ /* 29 */ "ccons ::= CONSTRAINT nm",
+ /* 30 */ "ccons ::= DEFAULT scanpt term scanpt",
+ /* 31 */ "ccons ::= DEFAULT LP expr RP",
+ /* 32 */ "ccons ::= DEFAULT PLUS term scanpt",
+ /* 33 */ "ccons ::= DEFAULT MINUS term scanpt",
+ /* 34 */ "ccons ::= DEFAULT scanpt ID|INDEXED",
+ /* 35 */ "ccons ::= NOT NULL onconf",
+ /* 36 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
+ /* 37 */ "ccons ::= UNIQUE onconf",
+ /* 38 */ "ccons ::= CHECK LP expr RP",
+ /* 39 */ "ccons ::= REFERENCES nm eidlist_opt refargs",
+ /* 40 */ "ccons ::= defer_subclause",
+ /* 41 */ "ccons ::= COLLATE ID|STRING",
+ /* 42 */ "autoinc ::=",
+ /* 43 */ "autoinc ::= AUTOINCR",
+ /* 44 */ "refargs ::=",
+ /* 45 */ "refargs ::= refargs refarg",
+ /* 46 */ "refarg ::= MATCH nm",
+ /* 47 */ "refarg ::= ON INSERT refact",
+ /* 48 */ "refarg ::= ON DELETE refact",
+ /* 49 */ "refarg ::= ON UPDATE refact",
+ /* 50 */ "refact ::= SET NULL",
+ /* 51 */ "refact ::= SET DEFAULT",
+ /* 52 */ "refact ::= CASCADE",
+ /* 53 */ "refact ::= RESTRICT",
+ /* 54 */ "refact ::= NO ACTION",
+ /* 55 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
+ /* 56 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
+ /* 57 */ "init_deferred_pred_opt ::=",
+ /* 58 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
+ /* 59 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
+ /* 60 */ "conslist_opt ::=",
+ /* 61 */ "tconscomma ::= COMMA",
+ /* 62 */ "tcons ::= CONSTRAINT nm",
+ /* 63 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf",
+ /* 64 */ "tcons ::= UNIQUE LP sortlist RP onconf",
+ /* 65 */ "tcons ::= CHECK LP expr RP onconf",
+ /* 66 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt",
+ /* 67 */ "defer_subclause_opt ::=",
+ /* 68 */ "onconf ::=",
+ /* 69 */ "onconf ::= ON CONFLICT resolvetype",
+ /* 70 */ "orconf ::=",
+ /* 71 */ "orconf ::= OR resolvetype",
+ /* 72 */ "resolvetype ::= IGNORE",
+ /* 73 */ "resolvetype ::= REPLACE",
+ /* 74 */ "cmd ::= DROP TABLE ifexists fullname",
+ /* 75 */ "ifexists ::= IF EXISTS",
+ /* 76 */ "ifexists ::=",
+ /* 77 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select",
+ /* 78 */ "cmd ::= DROP VIEW ifexists fullname",
+ /* 79 */ "cmd ::= select",
+ /* 80 */ "select ::= with selectnowith",
+ /* 81 */ "selectnowith ::= selectnowith multiselect_op oneselect",
+ /* 82 */ "multiselect_op ::= UNION",
+ /* 83 */ "multiselect_op ::= UNION ALL",
+ /* 84 */ "multiselect_op ::= EXCEPT|INTERSECT",
+ /* 85 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
+ /* 86 */ "values ::= VALUES LP nexprlist RP",
+ /* 87 */ "values ::= values COMMA LP exprlist RP",
+ /* 88 */ "distinct ::= DISTINCT",
+ /* 89 */ "distinct ::= ALL",
+ /* 90 */ "distinct ::=",
+ /* 91 */ "sclp ::=",
+ /* 92 */ "selcollist ::= sclp scanpt expr scanpt as",
+ /* 93 */ "selcollist ::= sclp scanpt STAR",
+ /* 94 */ "selcollist ::= sclp scanpt nm DOT STAR",
+ /* 95 */ "as ::= AS nm",
+ /* 96 */ "as ::=",
+ /* 97 */ "from ::=",
+ /* 98 */ "from ::= FROM seltablist",
+ /* 99 */ "stl_prefix ::= seltablist joinop",
+ /* 100 */ "stl_prefix ::=",
+ /* 101 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
+ /* 102 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt",
+ /* 103 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
+ /* 104 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
+ /* 105 */ "dbnm ::=",
+ /* 106 */ "dbnm ::= DOT nm",
+ /* 107 */ "fullname ::= nm dbnm",
+ /* 108 */ "joinop ::= COMMA|JOIN",
+ /* 109 */ "joinop ::= JOIN_KW JOIN",
+ /* 110 */ "joinop ::= JOIN_KW nm JOIN",
+ /* 111 */ "joinop ::= JOIN_KW nm nm JOIN",
+ /* 112 */ "on_opt ::= ON expr",
+ /* 113 */ "on_opt ::=",
+ /* 114 */ "indexed_opt ::=",
+ /* 115 */ "indexed_opt ::= INDEXED BY nm",
+ /* 116 */ "indexed_opt ::= NOT INDEXED",
+ /* 117 */ "using_opt ::= USING LP idlist RP",
+ /* 118 */ "using_opt ::=",
+ /* 119 */ "orderby_opt ::=",
+ /* 120 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 121 */ "sortlist ::= sortlist COMMA expr sortorder",
+ /* 122 */ "sortlist ::= expr sortorder",
+ /* 123 */ "sortorder ::= ASC",
+ /* 124 */ "sortorder ::= DESC",
+ /* 125 */ "sortorder ::=",
+ /* 126 */ "groupby_opt ::=",
+ /* 127 */ "groupby_opt ::= GROUP BY nexprlist",
+ /* 128 */ "having_opt ::=",
+ /* 129 */ "having_opt ::= HAVING expr",
+ /* 130 */ "limit_opt ::=",
+ /* 131 */ "limit_opt ::= LIMIT expr",
+ /* 132 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 133 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 134 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt",
+ /* 135 */ "where_opt ::=",
+ /* 136 */ "where_opt ::= WHERE expr",
+ /* 137 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt",
+ /* 138 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 139 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
+ /* 140 */ "setlist ::= nm EQ expr",
+ /* 141 */ "setlist ::= LP idlist RP EQ expr",
+ /* 142 */ "cmd ::= with insert_cmd INTO fullname idlist_opt select",
+ /* 143 */ "cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES",
+ /* 144 */ "insert_cmd ::= INSERT orconf",
+ /* 145 */ "insert_cmd ::= REPLACE",
+ /* 146 */ "idlist_opt ::=",
+ /* 147 */ "idlist_opt ::= LP idlist RP",
+ /* 148 */ "idlist ::= idlist COMMA nm",
+ /* 149 */ "idlist ::= nm",
+ /* 150 */ "expr ::= LP expr RP",
+ /* 151 */ "expr ::= ID|INDEXED",
+ /* 152 */ "expr ::= JOIN_KW",
+ /* 153 */ "expr ::= nm DOT nm",
+ /* 154 */ "expr ::= nm DOT nm DOT nm",
+ /* 155 */ "term ::= NULL|FLOAT|BLOB",
+ /* 156 */ "term ::= STRING",
+ /* 157 */ "term ::= INTEGER",
+ /* 158 */ "expr ::= VARIABLE",
+ /* 159 */ "expr ::= expr COLLATE ID|STRING",
+ /* 160 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 161 */ "expr ::= ID|INDEXED LP distinct exprlist RP",
+ /* 162 */ "expr ::= ID|INDEXED LP STAR RP",
+ /* 163 */ "term ::= CTIME_KW",
+ /* 164 */ "expr ::= LP nexprlist COMMA expr RP",
+ /* 165 */ "expr ::= expr AND expr",
+ /* 166 */ "expr ::= expr OR expr",
+ /* 167 */ "expr ::= expr LT|GT|GE|LE expr",
+ /* 168 */ "expr ::= expr EQ|NE expr",
+ /* 169 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 170 */ "expr ::= expr PLUS|MINUS expr",
+ /* 171 */ "expr ::= expr STAR|SLASH|REM expr",
+ /* 172 */ "expr ::= expr CONCAT expr",
+ /* 173 */ "likeop ::= NOT LIKE_KW|MATCH",
+ /* 174 */ "expr ::= expr likeop expr",
+ /* 175 */ "expr ::= expr likeop expr ESCAPE expr",
+ /* 176 */ "expr ::= expr ISNULL|NOTNULL",
+ /* 177 */ "expr ::= expr NOT NULL",
+ /* 178 */ "expr ::= expr IS expr",
+ /* 179 */ "expr ::= expr IS NOT expr",
+ /* 180 */ "expr ::= NOT expr",
+ /* 181 */ "expr ::= BITNOT expr",
+ /* 182 */ "expr ::= MINUS expr",
+ /* 183 */ "expr ::= PLUS expr",
+ /* 184 */ "between_op ::= BETWEEN",
+ /* 185 */ "between_op ::= NOT BETWEEN",
+ /* 186 */ "expr ::= expr between_op expr AND expr",
+ /* 187 */ "in_op ::= IN",
+ /* 188 */ "in_op ::= NOT IN",
+ /* 189 */ "expr ::= expr in_op LP exprlist RP",
+ /* 190 */ "expr ::= LP select RP",
+ /* 191 */ "expr ::= expr in_op LP select RP",
+ /* 192 */ "expr ::= expr in_op nm dbnm paren_exprlist",
+ /* 193 */ "expr ::= EXISTS LP select RP",
+ /* 194 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 195 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 196 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 197 */ "case_else ::= ELSE expr",
+ /* 198 */ "case_else ::=",
+ /* 199 */ "case_operand ::= expr",
+ /* 200 */ "case_operand ::=",
+ /* 201 */ "exprlist ::=",
+ /* 202 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 203 */ "nexprlist ::= expr",
+ /* 204 */ "paren_exprlist ::=",
+ /* 205 */ "paren_exprlist ::= LP exprlist RP",
+ /* 206 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
+ /* 207 */ "uniqueflag ::= UNIQUE",
+ /* 208 */ "uniqueflag ::=",
+ /* 209 */ "eidlist_opt ::=",
+ /* 210 */ "eidlist_opt ::= LP eidlist RP",
+ /* 211 */ "eidlist ::= eidlist COMMA nm collate sortorder",
+ /* 212 */ "eidlist ::= nm collate sortorder",
+ /* 213 */ "collate ::=",
+ /* 214 */ "collate ::= COLLATE ID|STRING",
+ /* 215 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 216 */ "cmd ::= VACUUM",
+ /* 217 */ "cmd ::= VACUUM nm",
+ /* 218 */ "cmd ::= PRAGMA nm dbnm",
+ /* 219 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 220 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 221 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 222 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 223 */ "plus_num ::= PLUS INTEGER|FLOAT",
+ /* 224 */ "minus_num ::= MINUS INTEGER|FLOAT",
+ /* 225 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
+ /* 226 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 227 */ "trigger_time ::= BEFORE|AFTER",
+ /* 228 */ "trigger_time ::= INSTEAD OF",
+ /* 229 */ "trigger_time ::=",
+ /* 230 */ "trigger_event ::= DELETE|INSERT",
+ /* 231 */ "trigger_event ::= UPDATE",
+ /* 232 */ "trigger_event ::= UPDATE OF idlist",
+ /* 233 */ "when_clause ::=",
+ /* 234 */ "when_clause ::= WHEN expr",
+ /* 235 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 236 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 237 */ "trnm ::= nm DOT nm",
+ /* 238 */ "tridxby ::= INDEXED BY nm",
+ /* 239 */ "tridxby ::= NOT INDEXED",
+ /* 240 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt",
+ /* 241 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select scanpt",
+ /* 242 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt",
+ /* 243 */ "trigger_cmd ::= scanpt select scanpt",
+ /* 244 */ "expr ::= RAISE LP IGNORE RP",
+ /* 245 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 246 */ "raisetype ::= ROLLBACK",
+ /* 247 */ "raisetype ::= ABORT",
+ /* 248 */ "raisetype ::= FAIL",
+ /* 249 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 250 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 251 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 252 */ "key_opt ::=",
+ /* 253 */ "key_opt ::= KEY expr",
+ /* 254 */ "cmd ::= REINDEX",
+ /* 255 */ "cmd ::= REINDEX nm dbnm",
+ /* 256 */ "cmd ::= ANALYZE",
+ /* 257 */ "cmd ::= ANALYZE nm dbnm",
+ /* 258 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 259 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist",
+ /* 260 */ "add_column_fullname ::= fullname",
+ /* 261 */ "cmd ::= create_vtab",
+ /* 262 */ "cmd ::= create_vtab LP vtabarglist RP",
+ /* 263 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 264 */ "vtabarg ::=",
+ /* 265 */ "vtabargtoken ::= ANY",
+ /* 266 */ "vtabargtoken ::= lp anylist RP",
+ /* 267 */ "lp ::= LP",
+ /* 268 */ "with ::=",
+ /* 269 */ "with ::= WITH wqlist",
+ /* 270 */ "with ::= WITH RECURSIVE wqlist",
+ /* 271 */ "wqlist ::= nm eidlist_opt AS LP select RP",
+ /* 272 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP",
+ /* 273 */ "input ::= cmdlist",
+ /* 274 */ "cmdlist ::= cmdlist ecmd",
+ /* 275 */ "cmdlist ::= ecmd",
+ /* 276 */ "ecmd ::= SEMI",
+ /* 277 */ "ecmd ::= explain cmdx SEMI",
+ /* 278 */ "explain ::=",
+ /* 279 */ "trans_opt ::=",
+ /* 280 */ "trans_opt ::= TRANSACTION",
+ /* 281 */ "trans_opt ::= TRANSACTION nm",
+ /* 282 */ "savepoint_opt ::= SAVEPOINT",
+ /* 283 */ "savepoint_opt ::=",
+ /* 284 */ "cmd ::= create_table create_table_args",
+ /* 285 */ "columnlist ::= columnlist COMMA columnname carglist",
+ /* 286 */ "columnlist ::= columnname carglist",
+ /* 287 */ "nm ::= ID|INDEXED",
+ /* 288 */ "nm ::= STRING",
+ /* 289 */ "nm ::= JOIN_KW",
+ /* 290 */ "typetoken ::= typename",
+ /* 291 */ "typename ::= ID|STRING",
+ /* 292 */ "signed ::= plus_num",
+ /* 293 */ "signed ::= minus_num",
+ /* 294 */ "carglist ::= carglist ccons",
+ /* 295 */ "carglist ::=",
+ /* 296 */ "ccons ::= NULL onconf",
+ /* 297 */ "conslist_opt ::= COMMA conslist",
+ /* 298 */ "conslist ::= conslist tconscomma tcons",
+ /* 299 */ "conslist ::= tcons",
+ /* 300 */ "tconscomma ::=",
+ /* 301 */ "defer_subclause_opt ::= defer_subclause",
+ /* 302 */ "resolvetype ::= raisetype",
+ /* 303 */ "selectnowith ::= oneselect",
+ /* 304 */ "oneselect ::= values",
+ /* 305 */ "sclp ::= selcollist COMMA",
+ /* 306 */ "as ::= ID|STRING",
+ /* 307 */ "expr ::= term",
+ /* 308 */ "likeop ::= LIKE_KW|MATCH",
+ /* 309 */ "exprlist ::= nexprlist",
+ /* 310 */ "nmnum ::= plus_num",
+ /* 311 */ "nmnum ::= nm",
+ /* 312 */ "nmnum ::= ON",
+ /* 313 */ "nmnum ::= DELETE",
+ /* 314 */ "nmnum ::= DEFAULT",
+ /* 315 */ "plus_num ::= INTEGER|FLOAT",
+ /* 316 */ "foreach_clause ::=",
+ /* 317 */ "foreach_clause ::= FOR EACH ROW",
+ /* 318 */ "trnm ::= nm",
+ /* 319 */ "tridxby ::=",
+ /* 320 */ "database_kw_opt ::= DATABASE",
+ /* 321 */ "database_kw_opt ::=",
+ /* 322 */ "kwcolumn_opt ::=",
+ /* 323 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 324 */ "vtabarglist ::= vtabarg",
+ /* 325 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 326 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 327 */ "anylist ::=",
+ /* 328 */ "anylist ::= anylist LP anylist RP",
+ /* 329 */ "anylist ::= anylist ANY",
};
#endif /* NDEBUG */
@@ -138088,76 +139806,72 @@ static void yy_destructor(
*/
/********* Begin destructor definitions ***************************************/
case 163: /* select */
- case 194: /* selectnowith */
- case 195: /* oneselect */
- case 206: /* values */
+ case 195: /* selectnowith */
+ case 196: /* oneselect */
+ case 207: /* values */
{
-sqlite3SelectDelete(pParse->db, (yypminor->yy243));
+sqlite3SelectDelete(pParse->db, (yypminor->yy387));
}
break;
- case 172: /* term */
- case 173: /* expr */
+ case 173: /* term */
+ case 174: /* expr */
+ case 202: /* where_opt */
+ case 204: /* having_opt */
+ case 216: /* on_opt */
+ case 226: /* case_operand */
+ case 228: /* case_else */
+ case 237: /* when_clause */
+ case 242: /* key_opt */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy190).pExpr);
+sqlite3ExprDelete(pParse->db, (yypminor->yy314));
}
break;
- case 177: /* eidlist_opt */
- case 186: /* sortlist */
- case 187: /* eidlist */
- case 199: /* selcollist */
- case 202: /* groupby_opt */
- case 204: /* orderby_opt */
- case 207: /* nexprlist */
- case 208: /* exprlist */
- case 209: /* sclp */
- case 218: /* setlist */
- case 224: /* paren_exprlist */
- case 226: /* case_exprlist */
+ case 178: /* eidlist_opt */
+ case 187: /* sortlist */
+ case 188: /* eidlist */
+ case 200: /* selcollist */
+ case 203: /* groupby_opt */
+ case 205: /* orderby_opt */
+ case 208: /* nexprlist */
+ case 209: /* exprlist */
+ case 210: /* sclp */
+ case 219: /* setlist */
+ case 225: /* paren_exprlist */
+ case 227: /* case_exprlist */
{
-sqlite3ExprListDelete(pParse->db, (yypminor->yy148));
+sqlite3ExprListDelete(pParse->db, (yypminor->yy322));
}
break;
- case 193: /* fullname */
- case 200: /* from */
- case 211: /* seltablist */
- case 212: /* stl_prefix */
+ case 194: /* fullname */
+ case 201: /* from */
+ case 212: /* seltablist */
+ case 213: /* stl_prefix */
{
-sqlite3SrcListDelete(pParse->db, (yypminor->yy185));
+sqlite3SrcListDelete(pParse->db, (yypminor->yy259));
}
break;
- case 196: /* with */
- case 250: /* wqlist */
+ case 197: /* with */
+ case 251: /* wqlist */
{
-sqlite3WithDelete(pParse->db, (yypminor->yy285));
+sqlite3WithDelete(pParse->db, (yypminor->yy451));
}
break;
- case 201: /* where_opt */
- case 203: /* having_opt */
- case 215: /* on_opt */
- case 225: /* case_operand */
- case 227: /* case_else */
- case 236: /* when_clause */
- case 241: /* key_opt */
+ case 217: /* using_opt */
+ case 218: /* idlist */
+ case 221: /* idlist_opt */
{
-sqlite3ExprDelete(pParse->db, (yypminor->yy72));
+sqlite3IdListDelete(pParse->db, (yypminor->yy384));
}
break;
- case 216: /* using_opt */
- case 217: /* idlist */
- case 220: /* idlist_opt */
+ case 233: /* trigger_cmd_list */
+ case 238: /* trigger_cmd */
{
-sqlite3IdListDelete(pParse->db, (yypminor->yy254));
+sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy203));
}
break;
- case 232: /* trigger_cmd_list */
- case 237: /* trigger_cmd */
+ case 235: /* trigger_event */
{
-sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy145));
-}
- break;
- case 234: /* trigger_event */
-{
-sqlite3IdListDelete(pParse->db, (yypminor->yy332).b);
+sqlite3IdListDelete(pParse->db, (yypminor->yy90).b);
}
break;
/********* End destructor definitions *****************************************/
@@ -138228,6 +139942,43 @@ SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){
}
#endif
+/* This array of booleans keeps track of the parser statement
+** coverage. The element yycoverage[X][Y] is set when the parser
+** is in state X and has a lookahead token Y. In a well-tested
+** systems, every element of this matrix should end up being set.
+*/
+#if defined(YYCOVERAGE)
+static unsigned char yycoverage[YYNSTATE][YYNTOKEN];
+#endif
+
+/*
+** Write into out a description of every state/lookahead combination that
+**
+** (1) has not been used by the parser, and
+** (2) is not a syntax error.
+**
+** Return the number of missed state/lookahead combinations.
+*/
+#if defined(YYCOVERAGE)
+SQLITE_PRIVATE int sqlite3ParserCoverage(FILE *out){
+ int stateno, iLookAhead, i;
+ int nMissed = 0;
+ for(stateno=0; stateno<YYNSTATE; stateno++){
+ i = yy_shift_ofst[stateno];
+ for(iLookAhead=0; iLookAhead<YYNTOKEN; iLookAhead++){
+ if( yy_lookahead[i+iLookAhead]!=iLookAhead ) continue;
+ if( yycoverage[stateno][iLookAhead]==0 ) nMissed++;
+ if( out ){
+ fprintf(out,"State %d lookahead %s %s\n", stateno,
+ yyTokenName[iLookAhead],
+ yycoverage[stateno][iLookAhead] ? "ok" : "missed");
+ }
+ }
+ }
+ return nMissed;
+}
+#endif
+
/*
** Find the appropriate action for a parser given the terminal
** look-ahead token iLookAhead.
@@ -138239,13 +139990,18 @@ static unsigned int yy_find_shift_action(
int i;
int stateno = pParser->yytos->stateno;
- if( stateno>=YY_MIN_REDUCE ) return stateno;
+ if( stateno>YY_MAX_SHIFT ) return stateno;
assert( stateno <= YY_SHIFT_COUNT );
+#if defined(YYCOVERAGE)
+ yycoverage[stateno][iLookAhead] = 1;
+#endif
do{
i = yy_shift_ofst[stateno];
+ assert( i>=0 && i+YYNTOKEN<=sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) );
assert( iLookAhead!=YYNOCODE );
+ assert( iLookAhead < YYNTOKEN );
i += iLookAhead;
- if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
+ if( yy_lookahead[i]!=iLookAhead ){
#ifdef YYFALLBACK
YYCODETYPE iFallback; /* Fallback token */
if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
@@ -138308,7 +140064,6 @@ static int yy_find_reduce_action(
assert( stateno<=YY_REDUCE_COUNT );
#endif
i = yy_reduce_ofst[stateno];
- assert( i!=YY_REDUCE_USE_DFLT );
assert( iLookAhead!=YYNOCODE );
i += iLookAhead;
#ifdef YYERRORSYMBOL
@@ -138346,20 +140101,21 @@ static void yyStackOverflow(yyParser *yypParser){
** Print tracing information for a SHIFT action
*/
#ifndef NDEBUG
-static void yyTraceShift(yyParser *yypParser, int yyNewState){
+static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){
if( yyTraceFILE ){
if( yyNewState<YYNSTATE ){
- fprintf(yyTraceFILE,"%sShift '%s', go to state %d\n",
- yyTracePrompt,yyTokenName[yypParser->yytos->major],
+ fprintf(yyTraceFILE,"%s%s '%s', go to state %d\n",
+ yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major],
yyNewState);
}else{
- fprintf(yyTraceFILE,"%sShift '%s'\n",
- yyTracePrompt,yyTokenName[yypParser->yytos->major]);
+ fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n",
+ yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major],
+ yyNewState - YY_MIN_REDUCE);
}
}
}
#else
-# define yyTraceShift(X,Y)
+# define yyTraceShift(X,Y,Z)
#endif
/*
@@ -138401,7 +140157,7 @@ static void yy_shift(
yytos->stateno = (YYACTIONTYPE)yyNewState;
yytos->major = (YYCODETYPE)yyMajor;
yytos->minor.yy0 = yyMinor;
- yyTraceShift(yypParser, yyNewState);
+ yyTraceShift(yypParser, yyNewState, "Shift");
}
/* The following table contains information about every rule that
@@ -138411,335 +140167,336 @@ static const struct {
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
signed char nrhs; /* Negative of the number of RHS symbols in the rule */
} yyRuleInfo[] = {
- { 147, -1 },
- { 147, -3 },
- { 148, -1 },
- { 149, -3 },
- { 150, 0 },
- { 150, -1 },
- { 150, -1 },
- { 150, -1 },
- { 149, -2 },
- { 149, -2 },
- { 149, -2 },
- { 149, -3 },
- { 149, -5 },
- { 154, -6 },
- { 156, -1 },
- { 158, 0 },
- { 158, -3 },
- { 157, -1 },
- { 157, 0 },
- { 155, -5 },
- { 155, -2 },
- { 162, 0 },
- { 162, -2 },
- { 164, -2 },
- { 166, 0 },
- { 166, -4 },
- { 166, -6 },
- { 167, -2 },
- { 171, -2 },
- { 171, -2 },
- { 171, -4 },
- { 171, -3 },
- { 171, -3 },
- { 171, -2 },
- { 171, -3 },
- { 171, -5 },
- { 171, -2 },
- { 171, -4 },
- { 171, -4 },
- { 171, -1 },
- { 171, -2 },
- { 176, 0 },
- { 176, -1 },
- { 178, 0 },
- { 178, -2 },
- { 180, -2 },
- { 180, -3 },
- { 180, -3 },
- { 180, -3 },
- { 181, -2 },
- { 181, -2 },
- { 181, -1 },
- { 181, -1 },
- { 181, -2 },
- { 179, -3 },
- { 179, -2 },
- { 182, 0 },
- { 182, -2 },
- { 182, -2 },
- { 161, 0 },
- { 184, -1 },
- { 185, -2 },
- { 185, -7 },
- { 185, -5 },
- { 185, -5 },
- { 185, -10 },
- { 188, 0 },
- { 174, 0 },
- { 174, -3 },
- { 189, 0 },
- { 189, -2 },
- { 190, -1 },
- { 190, -1 },
- { 149, -4 },
- { 192, -2 },
- { 192, 0 },
- { 149, -9 },
- { 149, -4 },
- { 149, -1 },
- { 163, -2 },
- { 194, -3 },
- { 197, -1 },
- { 197, -2 },
- { 197, -1 },
- { 195, -9 },
- { 206, -4 },
- { 206, -5 },
- { 198, -1 },
- { 198, -1 },
- { 198, 0 },
- { 209, 0 },
- { 199, -3 },
- { 199, -2 },
- { 199, -4 },
- { 210, -2 },
- { 210, 0 },
- { 200, 0 },
- { 200, -2 },
- { 212, -2 },
- { 212, 0 },
- { 211, -7 },
- { 211, -9 },
- { 211, -7 },
- { 211, -7 },
- { 159, 0 },
- { 159, -2 },
- { 193, -2 },
- { 213, -1 },
- { 213, -2 },
- { 213, -3 },
- { 213, -4 },
- { 215, -2 },
- { 215, 0 },
- { 214, 0 },
- { 214, -3 },
- { 214, -2 },
- { 216, -4 },
- { 216, 0 },
- { 204, 0 },
- { 204, -3 },
- { 186, -4 },
- { 186, -2 },
- { 175, -1 },
- { 175, -1 },
- { 175, 0 },
- { 202, 0 },
- { 202, -3 },
- { 203, 0 },
- { 203, -2 },
- { 205, 0 },
- { 205, -2 },
- { 205, -4 },
- { 205, -4 },
- { 149, -6 },
- { 201, 0 },
- { 201, -2 },
- { 149, -8 },
- { 218, -5 },
- { 218, -7 },
- { 218, -3 },
- { 218, -5 },
- { 149, -6 },
- { 149, -7 },
- { 219, -2 },
- { 219, -1 },
- { 220, 0 },
- { 220, -3 },
- { 217, -3 },
- { 217, -1 },
- { 173, -3 },
- { 173, -1 },
- { 173, -1 },
- { 173, -3 },
- { 173, -5 },
- { 172, -1 },
- { 172, -1 },
- { 172, -1 },
- { 173, -1 },
- { 173, -3 },
- { 173, -6 },
- { 173, -5 },
- { 173, -4 },
- { 172, -1 },
- { 173, -5 },
- { 173, -3 },
- { 173, -3 },
- { 173, -3 },
- { 173, -3 },
- { 173, -3 },
- { 173, -3 },
- { 173, -3 },
- { 173, -3 },
- { 221, -2 },
- { 173, -3 },
- { 173, -5 },
- { 173, -2 },
- { 173, -3 },
- { 173, -3 },
- { 173, -4 },
- { 173, -2 },
- { 173, -2 },
- { 173, -2 },
- { 173, -2 },
- { 222, -1 },
- { 222, -2 },
- { 173, -5 },
- { 223, -1 },
- { 223, -2 },
- { 173, -5 },
- { 173, -3 },
- { 173, -5 },
- { 173, -5 },
- { 173, -4 },
- { 173, -5 },
- { 226, -5 },
- { 226, -4 },
- { 227, -2 },
- { 227, 0 },
- { 225, -1 },
- { 225, 0 },
- { 208, 0 },
- { 207, -3 },
- { 207, -1 },
- { 224, 0 },
- { 224, -3 },
- { 149, -12 },
- { 228, -1 },
- { 228, 0 },
- { 177, 0 },
- { 177, -3 },
- { 187, -5 },
- { 187, -3 },
- { 229, 0 },
- { 229, -2 },
- { 149, -4 },
- { 149, -1 },
- { 149, -2 },
- { 149, -3 },
- { 149, -5 },
- { 149, -6 },
- { 149, -5 },
- { 149, -6 },
- { 169, -2 },
- { 170, -2 },
- { 149, -5 },
- { 231, -11 },
- { 233, -1 },
- { 233, -2 },
- { 233, 0 },
- { 234, -1 },
- { 234, -1 },
- { 234, -3 },
- { 236, 0 },
- { 236, -2 },
- { 232, -3 },
- { 232, -2 },
- { 238, -3 },
- { 239, -3 },
- { 239, -2 },
- { 237, -7 },
- { 237, -5 },
- { 237, -5 },
- { 237, -1 },
- { 173, -4 },
- { 173, -6 },
- { 191, -1 },
- { 191, -1 },
- { 191, -1 },
- { 149, -4 },
- { 149, -6 },
- { 149, -3 },
- { 241, 0 },
- { 241, -2 },
- { 149, -1 },
- { 149, -3 },
- { 149, -1 },
- { 149, -3 },
- { 149, -6 },
- { 149, -7 },
- { 242, -1 },
- { 149, -1 },
- { 149, -4 },
- { 244, -8 },
- { 246, 0 },
- { 247, -1 },
- { 247, -3 },
- { 248, -1 },
- { 196, 0 },
- { 196, -2 },
- { 196, -3 },
- { 250, -6 },
- { 250, -8 },
- { 144, -1 },
- { 145, -2 },
- { 145, -1 },
- { 146, -1 },
- { 146, -3 },
- { 147, 0 },
- { 151, 0 },
- { 151, -1 },
- { 151, -2 },
- { 153, -1 },
- { 153, 0 },
- { 149, -2 },
- { 160, -4 },
- { 160, -2 },
- { 152, -1 },
- { 152, -1 },
- { 152, -1 },
- { 166, -1 },
- { 167, -1 },
- { 168, -1 },
- { 168, -1 },
- { 165, -2 },
- { 165, 0 },
- { 171, -2 },
- { 161, -2 },
- { 183, -3 },
- { 183, -1 },
- { 184, 0 },
- { 188, -1 },
- { 190, -1 },
- { 194, -1 },
- { 195, -1 },
- { 209, -2 },
- { 210, -1 },
- { 173, -1 },
- { 221, -1 },
- { 208, -1 },
- { 230, -1 },
- { 230, -1 },
- { 230, -1 },
- { 230, -1 },
- { 230, -1 },
- { 169, -1 },
- { 235, 0 },
- { 235, -3 },
- { 238, -1 },
- { 239, 0 },
- { 240, -1 },
- { 240, 0 },
- { 243, 0 },
- { 243, -1 },
- { 245, -1 },
- { 245, -3 },
- { 246, -2 },
- { 249, 0 },
- { 249, -4 },
- { 249, -2 },
+ { 147, -1 }, /* (0) explain ::= EXPLAIN */
+ { 147, -3 }, /* (1) explain ::= EXPLAIN QUERY PLAN */
+ { 148, -1 }, /* (2) cmdx ::= cmd */
+ { 149, -3 }, /* (3) cmd ::= BEGIN transtype trans_opt */
+ { 150, 0 }, /* (4) transtype ::= */
+ { 150, -1 }, /* (5) transtype ::= DEFERRED */
+ { 150, -1 }, /* (6) transtype ::= IMMEDIATE */
+ { 150, -1 }, /* (7) transtype ::= EXCLUSIVE */
+ { 149, -2 }, /* (8) cmd ::= COMMIT|END trans_opt */
+ { 149, -2 }, /* (9) cmd ::= ROLLBACK trans_opt */
+ { 149, -2 }, /* (10) cmd ::= SAVEPOINT nm */
+ { 149, -3 }, /* (11) cmd ::= RELEASE savepoint_opt nm */
+ { 149, -5 }, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
+ { 154, -6 }, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */
+ { 156, -1 }, /* (14) createkw ::= CREATE */
+ { 158, 0 }, /* (15) ifnotexists ::= */
+ { 158, -3 }, /* (16) ifnotexists ::= IF NOT EXISTS */
+ { 157, -1 }, /* (17) temp ::= TEMP */
+ { 157, 0 }, /* (18) temp ::= */
+ { 155, -5 }, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */
+ { 155, -2 }, /* (20) create_table_args ::= AS select */
+ { 162, 0 }, /* (21) table_options ::= */
+ { 162, -2 }, /* (22) table_options ::= WITHOUT nm */
+ { 164, -2 }, /* (23) columnname ::= nm typetoken */
+ { 166, 0 }, /* (24) typetoken ::= */
+ { 166, -4 }, /* (25) typetoken ::= typename LP signed RP */
+ { 166, -6 }, /* (26) typetoken ::= typename LP signed COMMA signed RP */
+ { 167, -2 }, /* (27) typename ::= typename ID|STRING */
+ { 171, 0 }, /* (28) scanpt ::= */
+ { 172, -2 }, /* (29) ccons ::= CONSTRAINT nm */
+ { 172, -4 }, /* (30) ccons ::= DEFAULT scanpt term scanpt */
+ { 172, -4 }, /* (31) ccons ::= DEFAULT LP expr RP */
+ { 172, -4 }, /* (32) ccons ::= DEFAULT PLUS term scanpt */
+ { 172, -4 }, /* (33) ccons ::= DEFAULT MINUS term scanpt */
+ { 172, -3 }, /* (34) ccons ::= DEFAULT scanpt ID|INDEXED */
+ { 172, -3 }, /* (35) ccons ::= NOT NULL onconf */
+ { 172, -5 }, /* (36) ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ { 172, -2 }, /* (37) ccons ::= UNIQUE onconf */
+ { 172, -4 }, /* (38) ccons ::= CHECK LP expr RP */
+ { 172, -4 }, /* (39) ccons ::= REFERENCES nm eidlist_opt refargs */
+ { 172, -1 }, /* (40) ccons ::= defer_subclause */
+ { 172, -2 }, /* (41) ccons ::= COLLATE ID|STRING */
+ { 177, 0 }, /* (42) autoinc ::= */
+ { 177, -1 }, /* (43) autoinc ::= AUTOINCR */
+ { 179, 0 }, /* (44) refargs ::= */
+ { 179, -2 }, /* (45) refargs ::= refargs refarg */
+ { 181, -2 }, /* (46) refarg ::= MATCH nm */
+ { 181, -3 }, /* (47) refarg ::= ON INSERT refact */
+ { 181, -3 }, /* (48) refarg ::= ON DELETE refact */
+ { 181, -3 }, /* (49) refarg ::= ON UPDATE refact */
+ { 182, -2 }, /* (50) refact ::= SET NULL */
+ { 182, -2 }, /* (51) refact ::= SET DEFAULT */
+ { 182, -1 }, /* (52) refact ::= CASCADE */
+ { 182, -1 }, /* (53) refact ::= RESTRICT */
+ { 182, -2 }, /* (54) refact ::= NO ACTION */
+ { 180, -3 }, /* (55) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ { 180, -2 }, /* (56) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ { 183, 0 }, /* (57) init_deferred_pred_opt ::= */
+ { 183, -2 }, /* (58) init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ { 183, -2 }, /* (59) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+ { 161, 0 }, /* (60) conslist_opt ::= */
+ { 185, -1 }, /* (61) tconscomma ::= COMMA */
+ { 186, -2 }, /* (62) tcons ::= CONSTRAINT nm */
+ { 186, -7 }, /* (63) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+ { 186, -5 }, /* (64) tcons ::= UNIQUE LP sortlist RP onconf */
+ { 186, -5 }, /* (65) tcons ::= CHECK LP expr RP onconf */
+ { 186, -10 }, /* (66) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ { 189, 0 }, /* (67) defer_subclause_opt ::= */
+ { 175, 0 }, /* (68) onconf ::= */
+ { 175, -3 }, /* (69) onconf ::= ON CONFLICT resolvetype */
+ { 190, 0 }, /* (70) orconf ::= */
+ { 190, -2 }, /* (71) orconf ::= OR resolvetype */
+ { 191, -1 }, /* (72) resolvetype ::= IGNORE */
+ { 191, -1 }, /* (73) resolvetype ::= REPLACE */
+ { 149, -4 }, /* (74) cmd ::= DROP TABLE ifexists fullname */
+ { 193, -2 }, /* (75) ifexists ::= IF EXISTS */
+ { 193, 0 }, /* (76) ifexists ::= */
+ { 149, -9 }, /* (77) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ { 149, -4 }, /* (78) cmd ::= DROP VIEW ifexists fullname */
+ { 149, -1 }, /* (79) cmd ::= select */
+ { 163, -2 }, /* (80) select ::= with selectnowith */
+ { 195, -3 }, /* (81) selectnowith ::= selectnowith multiselect_op oneselect */
+ { 198, -1 }, /* (82) multiselect_op ::= UNION */
+ { 198, -2 }, /* (83) multiselect_op ::= UNION ALL */
+ { 198, -1 }, /* (84) multiselect_op ::= EXCEPT|INTERSECT */
+ { 196, -9 }, /* (85) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ { 207, -4 }, /* (86) values ::= VALUES LP nexprlist RP */
+ { 207, -5 }, /* (87) values ::= values COMMA LP exprlist RP */
+ { 199, -1 }, /* (88) distinct ::= DISTINCT */
+ { 199, -1 }, /* (89) distinct ::= ALL */
+ { 199, 0 }, /* (90) distinct ::= */
+ { 210, 0 }, /* (91) sclp ::= */
+ { 200, -5 }, /* (92) selcollist ::= sclp scanpt expr scanpt as */
+ { 200, -3 }, /* (93) selcollist ::= sclp scanpt STAR */
+ { 200, -5 }, /* (94) selcollist ::= sclp scanpt nm DOT STAR */
+ { 211, -2 }, /* (95) as ::= AS nm */
+ { 211, 0 }, /* (96) as ::= */
+ { 201, 0 }, /* (97) from ::= */
+ { 201, -2 }, /* (98) from ::= FROM seltablist */
+ { 213, -2 }, /* (99) stl_prefix ::= seltablist joinop */
+ { 213, 0 }, /* (100) stl_prefix ::= */
+ { 212, -7 }, /* (101) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
+ { 212, -9 }, /* (102) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
+ { 212, -7 }, /* (103) seltablist ::= stl_prefix LP select RP as on_opt using_opt */
+ { 212, -7 }, /* (104) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
+ { 159, 0 }, /* (105) dbnm ::= */
+ { 159, -2 }, /* (106) dbnm ::= DOT nm */
+ { 194, -2 }, /* (107) fullname ::= nm dbnm */
+ { 214, -1 }, /* (108) joinop ::= COMMA|JOIN */
+ { 214, -2 }, /* (109) joinop ::= JOIN_KW JOIN */
+ { 214, -3 }, /* (110) joinop ::= JOIN_KW nm JOIN */
+ { 214, -4 }, /* (111) joinop ::= JOIN_KW nm nm JOIN */
+ { 216, -2 }, /* (112) on_opt ::= ON expr */
+ { 216, 0 }, /* (113) on_opt ::= */
+ { 215, 0 }, /* (114) indexed_opt ::= */
+ { 215, -3 }, /* (115) indexed_opt ::= INDEXED BY nm */
+ { 215, -2 }, /* (116) indexed_opt ::= NOT INDEXED */
+ { 217, -4 }, /* (117) using_opt ::= USING LP idlist RP */
+ { 217, 0 }, /* (118) using_opt ::= */
+ { 205, 0 }, /* (119) orderby_opt ::= */
+ { 205, -3 }, /* (120) orderby_opt ::= ORDER BY sortlist */
+ { 187, -4 }, /* (121) sortlist ::= sortlist COMMA expr sortorder */
+ { 187, -2 }, /* (122) sortlist ::= expr sortorder */
+ { 176, -1 }, /* (123) sortorder ::= ASC */
+ { 176, -1 }, /* (124) sortorder ::= DESC */
+ { 176, 0 }, /* (125) sortorder ::= */
+ { 203, 0 }, /* (126) groupby_opt ::= */
+ { 203, -3 }, /* (127) groupby_opt ::= GROUP BY nexprlist */
+ { 204, 0 }, /* (128) having_opt ::= */
+ { 204, -2 }, /* (129) having_opt ::= HAVING expr */
+ { 206, 0 }, /* (130) limit_opt ::= */
+ { 206, -2 }, /* (131) limit_opt ::= LIMIT expr */
+ { 206, -4 }, /* (132) limit_opt ::= LIMIT expr OFFSET expr */
+ { 206, -4 }, /* (133) limit_opt ::= LIMIT expr COMMA expr */
+ { 149, -6 }, /* (134) cmd ::= with DELETE FROM fullname indexed_opt where_opt */
+ { 202, 0 }, /* (135) where_opt ::= */
+ { 202, -2 }, /* (136) where_opt ::= WHERE expr */
+ { 149, -8 }, /* (137) cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */
+ { 219, -5 }, /* (138) setlist ::= setlist COMMA nm EQ expr */
+ { 219, -7 }, /* (139) setlist ::= setlist COMMA LP idlist RP EQ expr */
+ { 219, -3 }, /* (140) setlist ::= nm EQ expr */
+ { 219, -5 }, /* (141) setlist ::= LP idlist RP EQ expr */
+ { 149, -6 }, /* (142) cmd ::= with insert_cmd INTO fullname idlist_opt select */
+ { 149, -7 }, /* (143) cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
+ { 220, -2 }, /* (144) insert_cmd ::= INSERT orconf */
+ { 220, -1 }, /* (145) insert_cmd ::= REPLACE */
+ { 221, 0 }, /* (146) idlist_opt ::= */
+ { 221, -3 }, /* (147) idlist_opt ::= LP idlist RP */
+ { 218, -3 }, /* (148) idlist ::= idlist COMMA nm */
+ { 218, -1 }, /* (149) idlist ::= nm */
+ { 174, -3 }, /* (150) expr ::= LP expr RP */
+ { 174, -1 }, /* (151) expr ::= ID|INDEXED */
+ { 174, -1 }, /* (152) expr ::= JOIN_KW */
+ { 174, -3 }, /* (153) expr ::= nm DOT nm */
+ { 174, -5 }, /* (154) expr ::= nm DOT nm DOT nm */
+ { 173, -1 }, /* (155) term ::= NULL|FLOAT|BLOB */
+ { 173, -1 }, /* (156) term ::= STRING */
+ { 173, -1 }, /* (157) term ::= INTEGER */
+ { 174, -1 }, /* (158) expr ::= VARIABLE */
+ { 174, -3 }, /* (159) expr ::= expr COLLATE ID|STRING */
+ { 174, -6 }, /* (160) expr ::= CAST LP expr AS typetoken RP */
+ { 174, -5 }, /* (161) expr ::= ID|INDEXED LP distinct exprlist RP */
+ { 174, -4 }, /* (162) expr ::= ID|INDEXED LP STAR RP */
+ { 173, -1 }, /* (163) term ::= CTIME_KW */
+ { 174, -5 }, /* (164) expr ::= LP nexprlist COMMA expr RP */
+ { 174, -3 }, /* (165) expr ::= expr AND expr */
+ { 174, -3 }, /* (166) expr ::= expr OR expr */
+ { 174, -3 }, /* (167) expr ::= expr LT|GT|GE|LE expr */
+ { 174, -3 }, /* (168) expr ::= expr EQ|NE expr */
+ { 174, -3 }, /* (169) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */
+ { 174, -3 }, /* (170) expr ::= expr PLUS|MINUS expr */
+ { 174, -3 }, /* (171) expr ::= expr STAR|SLASH|REM expr */
+ { 174, -3 }, /* (172) expr ::= expr CONCAT expr */
+ { 222, -2 }, /* (173) likeop ::= NOT LIKE_KW|MATCH */
+ { 174, -3 }, /* (174) expr ::= expr likeop expr */
+ { 174, -5 }, /* (175) expr ::= expr likeop expr ESCAPE expr */
+ { 174, -2 }, /* (176) expr ::= expr ISNULL|NOTNULL */
+ { 174, -3 }, /* (177) expr ::= expr NOT NULL */
+ { 174, -3 }, /* (178) expr ::= expr IS expr */
+ { 174, -4 }, /* (179) expr ::= expr IS NOT expr */
+ { 174, -2 }, /* (180) expr ::= NOT expr */
+ { 174, -2 }, /* (181) expr ::= BITNOT expr */
+ { 174, -2 }, /* (182) expr ::= MINUS expr */
+ { 174, -2 }, /* (183) expr ::= PLUS expr */
+ { 223, -1 }, /* (184) between_op ::= BETWEEN */
+ { 223, -2 }, /* (185) between_op ::= NOT BETWEEN */
+ { 174, -5 }, /* (186) expr ::= expr between_op expr AND expr */
+ { 224, -1 }, /* (187) in_op ::= IN */
+ { 224, -2 }, /* (188) in_op ::= NOT IN */
+ { 174, -5 }, /* (189) expr ::= expr in_op LP exprlist RP */
+ { 174, -3 }, /* (190) expr ::= LP select RP */
+ { 174, -5 }, /* (191) expr ::= expr in_op LP select RP */
+ { 174, -5 }, /* (192) expr ::= expr in_op nm dbnm paren_exprlist */
+ { 174, -4 }, /* (193) expr ::= EXISTS LP select RP */
+ { 174, -5 }, /* (194) expr ::= CASE case_operand case_exprlist case_else END */
+ { 227, -5 }, /* (195) case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ { 227, -4 }, /* (196) case_exprlist ::= WHEN expr THEN expr */
+ { 228, -2 }, /* (197) case_else ::= ELSE expr */
+ { 228, 0 }, /* (198) case_else ::= */
+ { 226, -1 }, /* (199) case_operand ::= expr */
+ { 226, 0 }, /* (200) case_operand ::= */
+ { 209, 0 }, /* (201) exprlist ::= */
+ { 208, -3 }, /* (202) nexprlist ::= nexprlist COMMA expr */
+ { 208, -1 }, /* (203) nexprlist ::= expr */
+ { 225, 0 }, /* (204) paren_exprlist ::= */
+ { 225, -3 }, /* (205) paren_exprlist ::= LP exprlist RP */
+ { 149, -12 }, /* (206) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ { 229, -1 }, /* (207) uniqueflag ::= UNIQUE */
+ { 229, 0 }, /* (208) uniqueflag ::= */
+ { 178, 0 }, /* (209) eidlist_opt ::= */
+ { 178, -3 }, /* (210) eidlist_opt ::= LP eidlist RP */
+ { 188, -5 }, /* (211) eidlist ::= eidlist COMMA nm collate sortorder */
+ { 188, -3 }, /* (212) eidlist ::= nm collate sortorder */
+ { 230, 0 }, /* (213) collate ::= */
+ { 230, -2 }, /* (214) collate ::= COLLATE ID|STRING */
+ { 149, -4 }, /* (215) cmd ::= DROP INDEX ifexists fullname */
+ { 149, -1 }, /* (216) cmd ::= VACUUM */
+ { 149, -2 }, /* (217) cmd ::= VACUUM nm */
+ { 149, -3 }, /* (218) cmd ::= PRAGMA nm dbnm */
+ { 149, -5 }, /* (219) cmd ::= PRAGMA nm dbnm EQ nmnum */
+ { 149, -6 }, /* (220) cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ { 149, -5 }, /* (221) cmd ::= PRAGMA nm dbnm EQ minus_num */
+ { 149, -6 }, /* (222) cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ { 169, -2 }, /* (223) plus_num ::= PLUS INTEGER|FLOAT */
+ { 170, -2 }, /* (224) minus_num ::= MINUS INTEGER|FLOAT */
+ { 149, -5 }, /* (225) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ { 232, -11 }, /* (226) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ { 234, -1 }, /* (227) trigger_time ::= BEFORE|AFTER */
+ { 234, -2 }, /* (228) trigger_time ::= INSTEAD OF */
+ { 234, 0 }, /* (229) trigger_time ::= */
+ { 235, -1 }, /* (230) trigger_event ::= DELETE|INSERT */
+ { 235, -1 }, /* (231) trigger_event ::= UPDATE */
+ { 235, -3 }, /* (232) trigger_event ::= UPDATE OF idlist */
+ { 237, 0 }, /* (233) when_clause ::= */
+ { 237, -2 }, /* (234) when_clause ::= WHEN expr */
+ { 233, -3 }, /* (235) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ { 233, -2 }, /* (236) trigger_cmd_list ::= trigger_cmd SEMI */
+ { 239, -3 }, /* (237) trnm ::= nm DOT nm */
+ { 240, -3 }, /* (238) tridxby ::= INDEXED BY nm */
+ { 240, -2 }, /* (239) tridxby ::= NOT INDEXED */
+ { 238, -8 }, /* (240) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
+ { 238, -7 }, /* (241) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select scanpt */
+ { 238, -6 }, /* (242) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+ { 238, -3 }, /* (243) trigger_cmd ::= scanpt select scanpt */
+ { 174, -4 }, /* (244) expr ::= RAISE LP IGNORE RP */
+ { 174, -6 }, /* (245) expr ::= RAISE LP raisetype COMMA nm RP */
+ { 192, -1 }, /* (246) raisetype ::= ROLLBACK */
+ { 192, -1 }, /* (247) raisetype ::= ABORT */
+ { 192, -1 }, /* (248) raisetype ::= FAIL */
+ { 149, -4 }, /* (249) cmd ::= DROP TRIGGER ifexists fullname */
+ { 149, -6 }, /* (250) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ { 149, -3 }, /* (251) cmd ::= DETACH database_kw_opt expr */
+ { 242, 0 }, /* (252) key_opt ::= */
+ { 242, -2 }, /* (253) key_opt ::= KEY expr */
+ { 149, -1 }, /* (254) cmd ::= REINDEX */
+ { 149, -3 }, /* (255) cmd ::= REINDEX nm dbnm */
+ { 149, -1 }, /* (256) cmd ::= ANALYZE */
+ { 149, -3 }, /* (257) cmd ::= ANALYZE nm dbnm */
+ { 149, -6 }, /* (258) cmd ::= ALTER TABLE fullname RENAME TO nm */
+ { 149, -7 }, /* (259) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ { 243, -1 }, /* (260) add_column_fullname ::= fullname */
+ { 149, -1 }, /* (261) cmd ::= create_vtab */
+ { 149, -4 }, /* (262) cmd ::= create_vtab LP vtabarglist RP */
+ { 245, -8 }, /* (263) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ { 247, 0 }, /* (264) vtabarg ::= */
+ { 248, -1 }, /* (265) vtabargtoken ::= ANY */
+ { 248, -3 }, /* (266) vtabargtoken ::= lp anylist RP */
+ { 249, -1 }, /* (267) lp ::= LP */
+ { 197, 0 }, /* (268) with ::= */
+ { 197, -2 }, /* (269) with ::= WITH wqlist */
+ { 197, -3 }, /* (270) with ::= WITH RECURSIVE wqlist */
+ { 251, -6 }, /* (271) wqlist ::= nm eidlist_opt AS LP select RP */
+ { 251, -8 }, /* (272) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+ { 144, -1 }, /* (273) input ::= cmdlist */
+ { 145, -2 }, /* (274) cmdlist ::= cmdlist ecmd */
+ { 145, -1 }, /* (275) cmdlist ::= ecmd */
+ { 146, -1 }, /* (276) ecmd ::= SEMI */
+ { 146, -3 }, /* (277) ecmd ::= explain cmdx SEMI */
+ { 147, 0 }, /* (278) explain ::= */
+ { 151, 0 }, /* (279) trans_opt ::= */
+ { 151, -1 }, /* (280) trans_opt ::= TRANSACTION */
+ { 151, -2 }, /* (281) trans_opt ::= TRANSACTION nm */
+ { 153, -1 }, /* (282) savepoint_opt ::= SAVEPOINT */
+ { 153, 0 }, /* (283) savepoint_opt ::= */
+ { 149, -2 }, /* (284) cmd ::= create_table create_table_args */
+ { 160, -4 }, /* (285) columnlist ::= columnlist COMMA columnname carglist */
+ { 160, -2 }, /* (286) columnlist ::= columnname carglist */
+ { 152, -1 }, /* (287) nm ::= ID|INDEXED */
+ { 152, -1 }, /* (288) nm ::= STRING */
+ { 152, -1 }, /* (289) nm ::= JOIN_KW */
+ { 166, -1 }, /* (290) typetoken ::= typename */
+ { 167, -1 }, /* (291) typename ::= ID|STRING */
+ { 168, -1 }, /* (292) signed ::= plus_num */
+ { 168, -1 }, /* (293) signed ::= minus_num */
+ { 165, -2 }, /* (294) carglist ::= carglist ccons */
+ { 165, 0 }, /* (295) carglist ::= */
+ { 172, -2 }, /* (296) ccons ::= NULL onconf */
+ { 161, -2 }, /* (297) conslist_opt ::= COMMA conslist */
+ { 184, -3 }, /* (298) conslist ::= conslist tconscomma tcons */
+ { 184, -1 }, /* (299) conslist ::= tcons */
+ { 185, 0 }, /* (300) tconscomma ::= */
+ { 189, -1 }, /* (301) defer_subclause_opt ::= defer_subclause */
+ { 191, -1 }, /* (302) resolvetype ::= raisetype */
+ { 195, -1 }, /* (303) selectnowith ::= oneselect */
+ { 196, -1 }, /* (304) oneselect ::= values */
+ { 210, -2 }, /* (305) sclp ::= selcollist COMMA */
+ { 211, -1 }, /* (306) as ::= ID|STRING */
+ { 174, -1 }, /* (307) expr ::= term */
+ { 222, -1 }, /* (308) likeop ::= LIKE_KW|MATCH */
+ { 209, -1 }, /* (309) exprlist ::= nexprlist */
+ { 231, -1 }, /* (310) nmnum ::= plus_num */
+ { 231, -1 }, /* (311) nmnum ::= nm */
+ { 231, -1 }, /* (312) nmnum ::= ON */
+ { 231, -1 }, /* (313) nmnum ::= DELETE */
+ { 231, -1 }, /* (314) nmnum ::= DEFAULT */
+ { 169, -1 }, /* (315) plus_num ::= INTEGER|FLOAT */
+ { 236, 0 }, /* (316) foreach_clause ::= */
+ { 236, -3 }, /* (317) foreach_clause ::= FOR EACH ROW */
+ { 239, -1 }, /* (318) trnm ::= nm */
+ { 240, 0 }, /* (319) tridxby ::= */
+ { 241, -1 }, /* (320) database_kw_opt ::= DATABASE */
+ { 241, 0 }, /* (321) database_kw_opt ::= */
+ { 244, 0 }, /* (322) kwcolumn_opt ::= */
+ { 244, -1 }, /* (323) kwcolumn_opt ::= COLUMNKW */
+ { 246, -1 }, /* (324) vtabarglist ::= vtabarg */
+ { 246, -3 }, /* (325) vtabarglist ::= vtabarglist COMMA vtabarg */
+ { 247, -2 }, /* (326) vtabarg ::= vtabarg vtabargtoken */
+ { 250, 0 }, /* (327) anylist ::= */
+ { 250, -4 }, /* (328) anylist ::= anylist LP anylist RP */
+ { 250, -2 }, /* (329) anylist ::= anylist ANY */
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -138747,22 +140504,38 @@ static void yy_accept(yyParser*); /* Forward Declaration */
/*
** Perform a reduce action and the shift that must immediately
** follow the reduce.
+**
+** The yyLookahead and yyLookaheadToken parameters provide reduce actions
+** access to the lookahead token (if any). The yyLookahead will be YYNOCODE
+** if the lookahead token has already been consumed. As this procedure is
+** only called from one place, optimizing compilers will in-line it, which
+** means that the extra parameters have no performance impact.
*/
static void yy_reduce(
yyParser *yypParser, /* The parser */
- unsigned int yyruleno /* Number of the rule by which to reduce */
+ unsigned int yyruleno, /* Number of the rule by which to reduce */
+ int yyLookahead, /* Lookahead token, or YYNOCODE if none */
+ sqlite3ParserTOKENTYPE yyLookaheadToken /* Value of the lookahead token */
){
int yygoto; /* The next state */
int yyact; /* The next action */
yyStackEntry *yymsp; /* The top of the parser's stack */
int yysize; /* Amount to pop the stack */
sqlite3ParserARG_FETCH;
+ (void)yyLookahead;
+ (void)yyLookaheadToken;
yymsp = yypParser->yytos;
#ifndef NDEBUG
if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
yysize = yyRuleInfo[yyruleno].nrhs;
- fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt,
- yyRuleName[yyruleno], yymsp[yysize].stateno);
+ if( yysize ){
+ fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n",
+ yyTracePrompt,
+ yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno);
+ }else{
+ fprintf(yyTraceFILE, "%sReduce %d [%s].\n",
+ yyTracePrompt, yyruleno, yyRuleName[yyruleno]);
+ }
}
#endif /* NDEBUG */
@@ -138813,15 +140586,15 @@ static void yy_reduce(
{ sqlite3FinishCoding(pParse); }
break;
case 3: /* cmd ::= BEGIN transtype trans_opt */
-{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy194);}
+{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy4);}
break;
case 4: /* transtype ::= */
-{yymsp[1].minor.yy194 = TK_DEFERRED;}
+{yymsp[1].minor.yy4 = TK_DEFERRED;}
break;
case 5: /* transtype ::= DEFERRED */
case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6);
case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7);
-{yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-X*/}
+{yymsp[0].minor.yy4 = yymsp[0].major; /*A-overwrites-X*/}
break;
case 8: /* cmd ::= COMMIT|END trans_opt */
case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9);
@@ -138844,7 +140617,7 @@ static void yy_reduce(
break;
case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
{
- sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy194,0,0,yymsp[-2].minor.yy194);
+ sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy4,0,0,yymsp[-2].minor.yy4);
}
break;
case 14: /* createkw ::= CREATE */
@@ -138853,38 +140626,38 @@ static void yy_reduce(
case 15: /* ifnotexists ::= */
case 18: /* temp ::= */ yytestcase(yyruleno==18);
case 21: /* table_options ::= */ yytestcase(yyruleno==21);
- case 41: /* autoinc ::= */ yytestcase(yyruleno==41);
- case 56: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==56);
- case 66: /* defer_subclause_opt ::= */ yytestcase(yyruleno==66);
- case 75: /* ifexists ::= */ yytestcase(yyruleno==75);
- case 89: /* distinct ::= */ yytestcase(yyruleno==89);
- case 212: /* collate ::= */ yytestcase(yyruleno==212);
-{yymsp[1].minor.yy194 = 0;}
+ case 42: /* autoinc ::= */ yytestcase(yyruleno==42);
+ case 57: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==57);
+ case 67: /* defer_subclause_opt ::= */ yytestcase(yyruleno==67);
+ case 76: /* ifexists ::= */ yytestcase(yyruleno==76);
+ case 90: /* distinct ::= */ yytestcase(yyruleno==90);
+ case 213: /* collate ::= */ yytestcase(yyruleno==213);
+{yymsp[1].minor.yy4 = 0;}
break;
case 16: /* ifnotexists ::= IF NOT EXISTS */
-{yymsp[-2].minor.yy194 = 1;}
+{yymsp[-2].minor.yy4 = 1;}
break;
case 17: /* temp ::= TEMP */
- case 42: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==42);
-{yymsp[0].minor.yy194 = 1;}
+ case 43: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==43);
+{yymsp[0].minor.yy4 = 1;}
break;
case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */
{
- sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy194,0);
+ sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy4,0);
}
break;
case 20: /* create_table_args ::= AS select */
{
- sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy243);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243);
+ sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy387);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
}
break;
case 22: /* table_options ::= WITHOUT nm */
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
- yymsp[-1].minor.yy194 = TF_WithoutRowid | TF_NoVisibleRowid;
+ yymsp[-1].minor.yy4 = TF_WithoutRowid | TF_NoVisibleRowid;
}else{
- yymsp[-1].minor.yy194 = 0;
+ yymsp[-1].minor.yy4 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
@@ -138893,8 +140666,8 @@ static void yy_reduce(
{sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
break;
case 24: /* typetoken ::= */
- case 59: /* conslist_opt ::= */ yytestcase(yyruleno==59);
- case 95: /* as ::= */ yytestcase(yyruleno==95);
+ case 60: /* conslist_opt ::= */ yytestcase(yyruleno==60);
+ case 96: /* as ::= */ yytestcase(yyruleno==96);
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
break;
case 25: /* typetoken ::= typename LP signed RP */
@@ -138910,210 +140683,214 @@ static void yy_reduce(
case 27: /* typename ::= typename ID|STRING */
{yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}
break;
- case 28: /* ccons ::= CONSTRAINT nm */
- case 61: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==61);
+ case 28: /* scanpt ::= */
+{
+ assert( yyLookahead!=YYNOCODE );
+ yymsp[1].minor.yy336 = yyLookaheadToken.z;
+}
+ break;
+ case 29: /* ccons ::= CONSTRAINT nm */
+ case 62: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==62);
{pParse->constraintName = yymsp[0].minor.yy0;}
break;
- case 29: /* ccons ::= DEFAULT term */
- case 31: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==31);
-{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy190);}
+ case 30: /* ccons ::= DEFAULT scanpt term scanpt */
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy314,yymsp[-2].minor.yy336,yymsp[0].minor.yy336);}
+ break;
+ case 31: /* ccons ::= DEFAULT LP expr RP */
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy314,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
break;
- case 30: /* ccons ::= DEFAULT LP expr RP */
-{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy190);}
+ case 32: /* ccons ::= DEFAULT PLUS term scanpt */
+{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy314,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy336);}
break;
- case 32: /* ccons ::= DEFAULT MINUS term */
+ case 33: /* ccons ::= DEFAULT MINUS term scanpt */
{
- ExprSpan v;
- v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy190.pExpr, 0);
- v.zStart = yymsp[-1].minor.yy0.z;
- v.zEnd = yymsp[0].minor.yy190.zEnd;
- sqlite3AddDefaultValue(pParse,&v);
+ Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[-1].minor.yy314, 0);
+ sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy336);
}
break;
- case 33: /* ccons ::= DEFAULT ID|INDEXED */
+ case 34: /* ccons ::= DEFAULT scanpt ID|INDEXED */
{
- ExprSpan v;
- spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0);
- sqlite3AddDefaultValue(pParse,&v);
+ Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0);
+ sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n);
}
break;
- case 34: /* ccons ::= NOT NULL onconf */
-{sqlite3AddNotNull(pParse, yymsp[0].minor.yy194);}
+ case 35: /* ccons ::= NOT NULL onconf */
+{sqlite3AddNotNull(pParse, yymsp[0].minor.yy4);}
break;
- case 35: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
-{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy194,yymsp[0].minor.yy194,yymsp[-2].minor.yy194);}
+ case 36: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
+{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy4,yymsp[0].minor.yy4,yymsp[-2].minor.yy4);}
break;
- case 36: /* ccons ::= UNIQUE onconf */
-{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy194,0,0,0,0,
+ case 37: /* ccons ::= UNIQUE onconf */
+{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy4,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
- case 37: /* ccons ::= CHECK LP expr RP */
-{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy190.pExpr);}
+ case 38: /* ccons ::= CHECK LP expr RP */
+{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy314);}
break;
- case 38: /* ccons ::= REFERENCES nm eidlist_opt refargs */
-{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy148,yymsp[0].minor.yy194);}
+ case 39: /* ccons ::= REFERENCES nm eidlist_opt refargs */
+{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy4);}
break;
- case 39: /* ccons ::= defer_subclause */
-{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy194);}
+ case 40: /* ccons ::= defer_subclause */
+{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy4);}
break;
- case 40: /* ccons ::= COLLATE ID|STRING */
+ case 41: /* ccons ::= COLLATE ID|STRING */
{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
break;
- case 43: /* refargs ::= */
-{ yymsp[1].minor.yy194 = OE_None*0x0101; /* EV: R-19803-45884 */}
+ case 44: /* refargs ::= */
+{ yymsp[1].minor.yy4 = OE_None*0x0101; /* EV: R-19803-45884 */}
break;
- case 44: /* refargs ::= refargs refarg */
-{ yymsp[-1].minor.yy194 = (yymsp[-1].minor.yy194 & ~yymsp[0].minor.yy497.mask) | yymsp[0].minor.yy497.value; }
+ case 45: /* refargs ::= refargs refarg */
+{ yymsp[-1].minor.yy4 = (yymsp[-1].minor.yy4 & ~yymsp[0].minor.yy215.mask) | yymsp[0].minor.yy215.value; }
break;
- case 45: /* refarg ::= MATCH nm */
-{ yymsp[-1].minor.yy497.value = 0; yymsp[-1].minor.yy497.mask = 0x000000; }
+ case 46: /* refarg ::= MATCH nm */
+{ yymsp[-1].minor.yy215.value = 0; yymsp[-1].minor.yy215.mask = 0x000000; }
break;
- case 46: /* refarg ::= ON INSERT refact */
-{ yymsp[-2].minor.yy497.value = 0; yymsp[-2].minor.yy497.mask = 0x000000; }
+ case 47: /* refarg ::= ON INSERT refact */
+{ yymsp[-2].minor.yy215.value = 0; yymsp[-2].minor.yy215.mask = 0x000000; }
break;
- case 47: /* refarg ::= ON DELETE refact */
-{ yymsp[-2].minor.yy497.value = yymsp[0].minor.yy194; yymsp[-2].minor.yy497.mask = 0x0000ff; }
+ case 48: /* refarg ::= ON DELETE refact */
+{ yymsp[-2].minor.yy215.value = yymsp[0].minor.yy4; yymsp[-2].minor.yy215.mask = 0x0000ff; }
break;
- case 48: /* refarg ::= ON UPDATE refact */
-{ yymsp[-2].minor.yy497.value = yymsp[0].minor.yy194<<8; yymsp[-2].minor.yy497.mask = 0x00ff00; }
+ case 49: /* refarg ::= ON UPDATE refact */
+{ yymsp[-2].minor.yy215.value = yymsp[0].minor.yy4<<8; yymsp[-2].minor.yy215.mask = 0x00ff00; }
break;
- case 49: /* refact ::= SET NULL */
-{ yymsp[-1].minor.yy194 = OE_SetNull; /* EV: R-33326-45252 */}
+ case 50: /* refact ::= SET NULL */
+{ yymsp[-1].minor.yy4 = OE_SetNull; /* EV: R-33326-45252 */}
break;
- case 50: /* refact ::= SET DEFAULT */
-{ yymsp[-1].minor.yy194 = OE_SetDflt; /* EV: R-33326-45252 */}
+ case 51: /* refact ::= SET DEFAULT */
+{ yymsp[-1].minor.yy4 = OE_SetDflt; /* EV: R-33326-45252 */}
break;
- case 51: /* refact ::= CASCADE */
-{ yymsp[0].minor.yy194 = OE_Cascade; /* EV: R-33326-45252 */}
+ case 52: /* refact ::= CASCADE */
+{ yymsp[0].minor.yy4 = OE_Cascade; /* EV: R-33326-45252 */}
break;
- case 52: /* refact ::= RESTRICT */
-{ yymsp[0].minor.yy194 = OE_Restrict; /* EV: R-33326-45252 */}
+ case 53: /* refact ::= RESTRICT */
+{ yymsp[0].minor.yy4 = OE_Restrict; /* EV: R-33326-45252 */}
break;
- case 53: /* refact ::= NO ACTION */
-{ yymsp[-1].minor.yy194 = OE_None; /* EV: R-33326-45252 */}
+ case 54: /* refact ::= NO ACTION */
+{ yymsp[-1].minor.yy4 = OE_None; /* EV: R-33326-45252 */}
break;
- case 54: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
-{yymsp[-2].minor.yy194 = 0;}
+ case 55: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+{yymsp[-2].minor.yy4 = 0;}
break;
- case 55: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
- case 70: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==70);
- case 143: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==143);
-{yymsp[-1].minor.yy194 = yymsp[0].minor.yy194;}
+ case 56: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ case 71: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==71);
+ case 144: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==144);
+{yymsp[-1].minor.yy4 = yymsp[0].minor.yy4;}
break;
- case 57: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
- case 74: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==74);
- case 184: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==184);
- case 187: /* in_op ::= NOT IN */ yytestcase(yyruleno==187);
- case 213: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==213);
-{yymsp[-1].minor.yy194 = 1;}
+ case 58: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
+ case 75: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==75);
+ case 185: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==185);
+ case 188: /* in_op ::= NOT IN */ yytestcase(yyruleno==188);
+ case 214: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==214);
+{yymsp[-1].minor.yy4 = 1;}
break;
- case 58: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-{yymsp[-1].minor.yy194 = 0;}
+ case 59: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+{yymsp[-1].minor.yy4 = 0;}
break;
- case 60: /* tconscomma ::= COMMA */
+ case 61: /* tconscomma ::= COMMA */
{pParse->constraintName.n = 0;}
break;
- case 62: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
-{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy148,yymsp[0].minor.yy194,yymsp[-2].minor.yy194,0);}
+ case 63: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
+{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy4,yymsp[-2].minor.yy4,0);}
break;
- case 63: /* tcons ::= UNIQUE LP sortlist RP onconf */
-{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy148,yymsp[0].minor.yy194,0,0,0,0,
+ case 64: /* tcons ::= UNIQUE LP sortlist RP onconf */
+{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy4,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
break;
- case 64: /* tcons ::= CHECK LP expr RP onconf */
-{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy190.pExpr);}
+ case 65: /* tcons ::= CHECK LP expr RP onconf */
+{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy314);}
break;
- case 65: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
+ case 66: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
{
- sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy148, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[-1].minor.yy194);
- sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy194);
+ sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy4);
+ sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy4);
}
break;
- case 67: /* onconf ::= */
- case 69: /* orconf ::= */ yytestcase(yyruleno==69);
-{yymsp[1].minor.yy194 = OE_Default;}
+ case 68: /* onconf ::= */
+ case 70: /* orconf ::= */ yytestcase(yyruleno==70);
+{yymsp[1].minor.yy4 = OE_Default;}
break;
- case 68: /* onconf ::= ON CONFLICT resolvetype */
-{yymsp[-2].minor.yy194 = yymsp[0].minor.yy194;}
+ case 69: /* onconf ::= ON CONFLICT resolvetype */
+{yymsp[-2].minor.yy4 = yymsp[0].minor.yy4;}
break;
- case 71: /* resolvetype ::= IGNORE */
-{yymsp[0].minor.yy194 = OE_Ignore;}
+ case 72: /* resolvetype ::= IGNORE */
+{yymsp[0].minor.yy4 = OE_Ignore;}
break;
- case 72: /* resolvetype ::= REPLACE */
- case 144: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==144);
-{yymsp[0].minor.yy194 = OE_Replace;}
+ case 73: /* resolvetype ::= REPLACE */
+ case 145: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==145);
+{yymsp[0].minor.yy4 = OE_Replace;}
break;
- case 73: /* cmd ::= DROP TABLE ifexists fullname */
+ case 74: /* cmd ::= DROP TABLE ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy185, 0, yymsp[-1].minor.yy194);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy259, 0, yymsp[-1].minor.yy4);
}
break;
- case 76: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
+ case 77: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
{
- sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[0].minor.yy243, yymsp[-7].minor.yy194, yymsp[-5].minor.yy194);
+ sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[0].minor.yy387, yymsp[-7].minor.yy4, yymsp[-5].minor.yy4);
}
break;
- case 77: /* cmd ::= DROP VIEW ifexists fullname */
+ case 78: /* cmd ::= DROP VIEW ifexists fullname */
{
- sqlite3DropTable(pParse, yymsp[0].minor.yy185, 1, yymsp[-1].minor.yy194);
+ sqlite3DropTable(pParse, yymsp[0].minor.yy259, 1, yymsp[-1].minor.yy4);
}
break;
- case 78: /* cmd ::= select */
+ case 79: /* cmd ::= select */
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
- sqlite3Select(pParse, yymsp[0].minor.yy243, &dest);
- sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243);
+ sqlite3Select(pParse, yymsp[0].minor.yy387, &dest);
+ sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
}
break;
- case 79: /* select ::= with selectnowith */
+ case 80: /* select ::= with selectnowith */
{
- Select *p = yymsp[0].minor.yy243;
+ Select *p = yymsp[0].minor.yy387;
if( p ){
- p->pWith = yymsp[-1].minor.yy285;
+ p->pWith = yymsp[-1].minor.yy451;
parserDoubleLinkSelect(pParse, p);
}else{
- sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy285);
+ sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy451);
}
- yymsp[-1].minor.yy243 = p; /*A-overwrites-W*/
+ yymsp[-1].minor.yy387 = p; /*A-overwrites-W*/
}
break;
- case 80: /* selectnowith ::= selectnowith multiselect_op oneselect */
+ case 81: /* selectnowith ::= selectnowith multiselect_op oneselect */
{
- Select *pRhs = yymsp[0].minor.yy243;
- Select *pLhs = yymsp[-2].minor.yy243;
+ Select *pRhs = yymsp[0].minor.yy387;
+ Select *pLhs = yymsp[-2].minor.yy387;
if( pRhs && pRhs->pPrior ){
SrcList *pFrom;
Token x;
x.n = 0;
parserDoubleLinkSelect(pParse, pRhs);
pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
- pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0);
+ pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
}
if( pRhs ){
- pRhs->op = (u8)yymsp[-1].minor.yy194;
+ pRhs->op = (u8)yymsp[-1].minor.yy4;
pRhs->pPrior = pLhs;
if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
pRhs->selFlags &= ~SF_MultiValue;
- if( yymsp[-1].minor.yy194!=TK_ALL ) pParse->hasCompound = 1;
+ if( yymsp[-1].minor.yy4!=TK_ALL ) pParse->hasCompound = 1;
}else{
sqlite3SelectDelete(pParse->db, pLhs);
}
- yymsp[-2].minor.yy243 = pRhs;
+ yymsp[-2].minor.yy387 = pRhs;
}
break;
- case 81: /* multiselect_op ::= UNION */
- case 83: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==83);
-{yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-OP*/}
+ case 82: /* multiselect_op ::= UNION */
+ case 84: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==84);
+{yymsp[0].minor.yy4 = yymsp[0].major; /*A-overwrites-OP*/}
break;
- case 82: /* multiselect_op ::= UNION ALL */
-{yymsp[-1].minor.yy194 = TK_ALL;}
+ case 83: /* multiselect_op ::= UNION ALL */
+{yymsp[-1].minor.yy4 = TK_ALL;}
break;
- case 84: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ case 85: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
#if SELECTTRACE_ENABLED
Token s = yymsp[-8].minor.yy0; /*A-overwrites-S*/
#endif
- yymsp[-8].minor.yy243 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy148,yymsp[-5].minor.yy185,yymsp[-4].minor.yy72,yymsp[-3].minor.yy148,yymsp[-2].minor.yy72,yymsp[-1].minor.yy148,yymsp[-7].minor.yy194,yymsp[0].minor.yy354.pLimit,yymsp[0].minor.yy354.pOffset);
+ yymsp[-8].minor.yy387 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy259,yymsp[-4].minor.yy314,yymsp[-3].minor.yy322,yymsp[-2].minor.yy314,yymsp[-1].minor.yy322,yymsp[-7].minor.yy4,yymsp[0].minor.yy314);
#if SELECTTRACE_ENABLED
/* Populate the Select.zSelName[] string that is used to help with
** query planner debugging, to differentiate between multiple Select
@@ -139124,483 +140901,468 @@ static void yy_reduce(
** comment to be the zSelName value. Otherwise, the label is #N where
** is an integer that is incremented with each SELECT statement seen.
*/
- if( yymsp[-8].minor.yy243!=0 ){
+ if( yymsp[-8].minor.yy387!=0 ){
const char *z = s.z+6;
int i;
- sqlite3_snprintf(sizeof(yymsp[-8].minor.yy243->zSelName), yymsp[-8].minor.yy243->zSelName, "#%d",
+ sqlite3_snprintf(sizeof(yymsp[-8].minor.yy387->zSelName), yymsp[-8].minor.yy387->zSelName, "#%d",
++pParse->nSelect);
while( z[0]==' ' ) z++;
if( z[0]=='/' && z[1]=='*' ){
z += 2;
while( z[0]==' ' ) z++;
for(i=0; sqlite3Isalnum(z[i]); i++){}
- sqlite3_snprintf(sizeof(yymsp[-8].minor.yy243->zSelName), yymsp[-8].minor.yy243->zSelName, "%.*s", i, z);
+ sqlite3_snprintf(sizeof(yymsp[-8].minor.yy387->zSelName), yymsp[-8].minor.yy387->zSelName, "%.*s", i, z);
}
}
#endif /* SELECTRACE_ENABLED */
}
break;
- case 85: /* values ::= VALUES LP nexprlist RP */
+ case 86: /* values ::= VALUES LP nexprlist RP */
{
- yymsp[-3].minor.yy243 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy148,0,0,0,0,0,SF_Values,0,0);
+ yymsp[-3].minor.yy387 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values,0);
}
break;
- case 86: /* values ::= values COMMA LP exprlist RP */
+ case 87: /* values ::= values COMMA LP exprlist RP */
{
- Select *pRight, *pLeft = yymsp[-4].minor.yy243;
- pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy148,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
+ Select *pRight, *pLeft = yymsp[-4].minor.yy387;
+ pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values|SF_MultiValue,0);
if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
if( pRight ){
pRight->op = TK_ALL;
pRight->pPrior = pLeft;
- yymsp[-4].minor.yy243 = pRight;
+ yymsp[-4].minor.yy387 = pRight;
}else{
- yymsp[-4].minor.yy243 = pLeft;
+ yymsp[-4].minor.yy387 = pLeft;
}
}
break;
- case 87: /* distinct ::= DISTINCT */
-{yymsp[0].minor.yy194 = SF_Distinct;}
+ case 88: /* distinct ::= DISTINCT */
+{yymsp[0].minor.yy4 = SF_Distinct;}
break;
- case 88: /* distinct ::= ALL */
-{yymsp[0].minor.yy194 = SF_All;}
+ case 89: /* distinct ::= ALL */
+{yymsp[0].minor.yy4 = SF_All;}
break;
- case 90: /* sclp ::= */
- case 118: /* orderby_opt ::= */ yytestcase(yyruleno==118);
- case 125: /* groupby_opt ::= */ yytestcase(yyruleno==125);
- case 200: /* exprlist ::= */ yytestcase(yyruleno==200);
- case 203: /* paren_exprlist ::= */ yytestcase(yyruleno==203);
- case 208: /* eidlist_opt ::= */ yytestcase(yyruleno==208);
-{yymsp[1].minor.yy148 = 0;}
+ case 91: /* sclp ::= */
+ case 119: /* orderby_opt ::= */ yytestcase(yyruleno==119);
+ case 126: /* groupby_opt ::= */ yytestcase(yyruleno==126);
+ case 201: /* exprlist ::= */ yytestcase(yyruleno==201);
+ case 204: /* paren_exprlist ::= */ yytestcase(yyruleno==204);
+ case 209: /* eidlist_opt ::= */ yytestcase(yyruleno==209);
+{yymsp[1].minor.yy322 = 0;}
break;
- case 91: /* selcollist ::= sclp expr as */
+ case 92: /* selcollist ::= sclp scanpt expr scanpt as */
{
- yymsp[-2].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy148, yymsp[-1].minor.yy190.pExpr);
- if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy148, &yymsp[0].minor.yy0, 1);
- sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy148,&yymsp[-1].minor.yy190);
+ yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[-2].minor.yy314);
+ if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[0].minor.yy0, 1);
+ sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy322,yymsp[-3].minor.yy336,yymsp[-1].minor.yy336);
}
break;
- case 92: /* selcollist ::= sclp STAR */
+ case 93: /* selcollist ::= sclp scanpt STAR */
{
Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
- yymsp[-1].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy148, p);
+ yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, p);
}
break;
- case 93: /* selcollist ::= sclp nm DOT STAR */
+ case 94: /* selcollist ::= sclp scanpt nm DOT STAR */
{
Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
- yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, pDot);
+ yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, pDot);
}
break;
- case 94: /* as ::= AS nm */
- case 105: /* dbnm ::= DOT nm */ yytestcase(yyruleno==105);
- case 222: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==222);
- case 223: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==223);
+ case 95: /* as ::= AS nm */
+ case 106: /* dbnm ::= DOT nm */ yytestcase(yyruleno==106);
+ case 223: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==223);
+ case 224: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==224);
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 96: /* from ::= */
-{yymsp[1].minor.yy185 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy185));}
+ case 97: /* from ::= */
+{yymsp[1].minor.yy259 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy259));}
break;
- case 97: /* from ::= FROM seltablist */
+ case 98: /* from ::= FROM seltablist */
{
- yymsp[-1].minor.yy185 = yymsp[0].minor.yy185;
- sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy185);
+ yymsp[-1].minor.yy259 = yymsp[0].minor.yy259;
+ sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy259);
}
break;
- case 98: /* stl_prefix ::= seltablist joinop */
+ case 99: /* stl_prefix ::= seltablist joinop */
{
- if( ALWAYS(yymsp[-1].minor.yy185 && yymsp[-1].minor.yy185->nSrc>0) ) yymsp[-1].minor.yy185->a[yymsp[-1].minor.yy185->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy194;
+ if( ALWAYS(yymsp[-1].minor.yy259 && yymsp[-1].minor.yy259->nSrc>0) ) yymsp[-1].minor.yy259->a[yymsp[-1].minor.yy259->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy4;
}
break;
- case 99: /* stl_prefix ::= */
-{yymsp[1].minor.yy185 = 0;}
+ case 100: /* stl_prefix ::= */
+{yymsp[1].minor.yy259 = 0;}
break;
- case 100: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
+ case 101: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
{
- yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254);
- sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy185, &yymsp[-2].minor.yy0);
+ yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy259, &yymsp[-2].minor.yy0);
}
break;
- case 101: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
+ case 102: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
{
- yymsp[-8].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy185,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254);
- sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy185, yymsp[-4].minor.yy148);
+ yymsp[-8].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy259,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
+ sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy259, yymsp[-4].minor.yy322);
}
break;
- case 102: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
+ case 103: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
{
- yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy243,yymsp[-1].minor.yy72,yymsp[0].minor.yy254);
+ yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy387,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
}
break;
- case 103: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
+ case 104: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
{
- if( yymsp[-6].minor.yy185==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy72==0 && yymsp[0].minor.yy254==0 ){
- yymsp[-6].minor.yy185 = yymsp[-4].minor.yy185;
- }else if( yymsp[-4].minor.yy185->nSrc==1 ){
- yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254);
- if( yymsp[-6].minor.yy185 ){
- struct SrcList_item *pNew = &yymsp[-6].minor.yy185->a[yymsp[-6].minor.yy185->nSrc-1];
- struct SrcList_item *pOld = yymsp[-4].minor.yy185->a;
+ if( yymsp[-6].minor.yy259==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy314==0 && yymsp[0].minor.yy384==0 ){
+ yymsp[-6].minor.yy259 = yymsp[-4].minor.yy259;
+ }else if( yymsp[-4].minor.yy259->nSrc==1 ){
+ yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
+ if( yymsp[-6].minor.yy259 ){
+ struct SrcList_item *pNew = &yymsp[-6].minor.yy259->a[yymsp[-6].minor.yy259->nSrc-1];
+ struct SrcList_item *pOld = yymsp[-4].minor.yy259->a;
pNew->zName = pOld->zName;
pNew->zDatabase = pOld->zDatabase;
pNew->pSelect = pOld->pSelect;
pOld->zName = pOld->zDatabase = 0;
pOld->pSelect = 0;
}
- sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy185);
+ sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy259);
}else{
Select *pSubquery;
- sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy185);
- pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy185,0,0,0,0,SF_NestedFrom,0,0);
- yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy72,yymsp[0].minor.yy254);
+ sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy259);
+ pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy259,0,0,0,0,SF_NestedFrom,0);
+ yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
}
}
break;
- case 104: /* dbnm ::= */
- case 113: /* indexed_opt ::= */ yytestcase(yyruleno==113);
+ case 105: /* dbnm ::= */
+ case 114: /* indexed_opt ::= */ yytestcase(yyruleno==114);
{yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
break;
- case 106: /* fullname ::= nm dbnm */
-{yymsp[-1].minor.yy185 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 107: /* fullname ::= nm dbnm */
+{yymsp[-1].minor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 107: /* joinop ::= COMMA|JOIN */
-{ yymsp[0].minor.yy194 = JT_INNER; }
+ case 108: /* joinop ::= COMMA|JOIN */
+{ yymsp[0].minor.yy4 = JT_INNER; }
break;
- case 108: /* joinop ::= JOIN_KW JOIN */
-{yymsp[-1].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
+ case 109: /* joinop ::= JOIN_KW JOIN */
+{yymsp[-1].minor.yy4 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
break;
- case 109: /* joinop ::= JOIN_KW nm JOIN */
-{yymsp[-2].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
+ case 110: /* joinop ::= JOIN_KW nm JOIN */
+{yymsp[-2].minor.yy4 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
break;
- case 110: /* joinop ::= JOIN_KW nm nm JOIN */
-{yymsp[-3].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
+ case 111: /* joinop ::= JOIN_KW nm nm JOIN */
+{yymsp[-3].minor.yy4 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
break;
- case 111: /* on_opt ::= ON expr */
- case 128: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==128);
- case 135: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==135);
- case 196: /* case_else ::= ELSE expr */ yytestcase(yyruleno==196);
-{yymsp[-1].minor.yy72 = yymsp[0].minor.yy190.pExpr;}
+ case 112: /* on_opt ::= ON expr */
+ case 129: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==129);
+ case 136: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==136);
+ case 197: /* case_else ::= ELSE expr */ yytestcase(yyruleno==197);
+{yymsp[-1].minor.yy314 = yymsp[0].minor.yy314;}
break;
- case 112: /* on_opt ::= */
- case 127: /* having_opt ::= */ yytestcase(yyruleno==127);
- case 134: /* where_opt ::= */ yytestcase(yyruleno==134);
- case 197: /* case_else ::= */ yytestcase(yyruleno==197);
- case 199: /* case_operand ::= */ yytestcase(yyruleno==199);
-{yymsp[1].minor.yy72 = 0;}
+ case 113: /* on_opt ::= */
+ case 128: /* having_opt ::= */ yytestcase(yyruleno==128);
+ case 130: /* limit_opt ::= */ yytestcase(yyruleno==130);
+ case 135: /* where_opt ::= */ yytestcase(yyruleno==135);
+ case 198: /* case_else ::= */ yytestcase(yyruleno==198);
+ case 200: /* case_operand ::= */ yytestcase(yyruleno==200);
+{yymsp[1].minor.yy314 = 0;}
break;
- case 114: /* indexed_opt ::= INDEXED BY nm */
+ case 115: /* indexed_opt ::= INDEXED BY nm */
{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
break;
- case 115: /* indexed_opt ::= NOT INDEXED */
+ case 116: /* indexed_opt ::= NOT INDEXED */
{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
break;
- case 116: /* using_opt ::= USING LP idlist RP */
-{yymsp[-3].minor.yy254 = yymsp[-1].minor.yy254;}
+ case 117: /* using_opt ::= USING LP idlist RP */
+{yymsp[-3].minor.yy384 = yymsp[-1].minor.yy384;}
break;
- case 117: /* using_opt ::= */
- case 145: /* idlist_opt ::= */ yytestcase(yyruleno==145);
-{yymsp[1].minor.yy254 = 0;}
+ case 118: /* using_opt ::= */
+ case 146: /* idlist_opt ::= */ yytestcase(yyruleno==146);
+{yymsp[1].minor.yy384 = 0;}
break;
- case 119: /* orderby_opt ::= ORDER BY sortlist */
- case 126: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==126);
-{yymsp[-2].minor.yy148 = yymsp[0].minor.yy148;}
+ case 120: /* orderby_opt ::= ORDER BY sortlist */
+ case 127: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==127);
+{yymsp[-2].minor.yy322 = yymsp[0].minor.yy322;}
break;
- case 120: /* sortlist ::= sortlist COMMA expr sortorder */
+ case 121: /* sortlist ::= sortlist COMMA expr sortorder */
{
- yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148,yymsp[-1].minor.yy190.pExpr);
- sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy148,yymsp[0].minor.yy194);
+ yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322,yymsp[-1].minor.yy314);
+ sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy322,yymsp[0].minor.yy4);
}
break;
- case 121: /* sortlist ::= expr sortorder */
+ case 122: /* sortlist ::= expr sortorder */
{
- yymsp[-1].minor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy190.pExpr); /*A-overwrites-Y*/
- sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy148,yymsp[0].minor.yy194);
+ yymsp[-1].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy314); /*A-overwrites-Y*/
+ sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy322,yymsp[0].minor.yy4);
}
break;
- case 122: /* sortorder ::= ASC */
-{yymsp[0].minor.yy194 = SQLITE_SO_ASC;}
+ case 123: /* sortorder ::= ASC */
+{yymsp[0].minor.yy4 = SQLITE_SO_ASC;}
break;
- case 123: /* sortorder ::= DESC */
-{yymsp[0].minor.yy194 = SQLITE_SO_DESC;}
+ case 124: /* sortorder ::= DESC */
+{yymsp[0].minor.yy4 = SQLITE_SO_DESC;}
break;
- case 124: /* sortorder ::= */
-{yymsp[1].minor.yy194 = SQLITE_SO_UNDEFINED;}
+ case 125: /* sortorder ::= */
+{yymsp[1].minor.yy4 = SQLITE_SO_UNDEFINED;}
break;
- case 129: /* limit_opt ::= */
-{yymsp[1].minor.yy354.pLimit = 0; yymsp[1].minor.yy354.pOffset = 0;}
+ case 131: /* limit_opt ::= LIMIT expr */
+{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy314,0);}
break;
- case 130: /* limit_opt ::= LIMIT expr */
-{yymsp[-1].minor.yy354.pLimit = yymsp[0].minor.yy190.pExpr; yymsp[-1].minor.yy354.pOffset = 0;}
+ case 132: /* limit_opt ::= LIMIT expr OFFSET expr */
+{yymsp[-3].minor.yy314 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy314,yymsp[0].minor.yy314);}
break;
- case 131: /* limit_opt ::= LIMIT expr OFFSET expr */
-{yymsp[-3].minor.yy354.pLimit = yymsp[-2].minor.yy190.pExpr; yymsp[-3].minor.yy354.pOffset = yymsp[0].minor.yy190.pExpr;}
+ case 133: /* limit_opt ::= LIMIT expr COMMA expr */
+{yymsp[-3].minor.yy314 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy314,yymsp[-2].minor.yy314);}
break;
- case 132: /* limit_opt ::= LIMIT expr COMMA expr */
-{yymsp[-3].minor.yy354.pOffset = yymsp[-2].minor.yy190.pExpr; yymsp[-3].minor.yy354.pLimit = yymsp[0].minor.yy190.pExpr;}
- break;
- case 133: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */
+ case 134: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */
{
- sqlite3WithPush(pParse, yymsp[-5].minor.yy285, 1);
- sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy185, &yymsp[-1].minor.yy0);
- sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy185,yymsp[0].minor.yy72);
+ sqlite3WithPush(pParse, yymsp[-5].minor.yy451, 1);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy259, &yymsp[-1].minor.yy0);
+ sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy259,yymsp[0].minor.yy314,0,0);
}
break;
- case 136: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */
+ case 137: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */
{
- sqlite3WithPush(pParse, yymsp[-7].minor.yy285, 1);
- sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy185, &yymsp[-3].minor.yy0);
- sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy148,"set list");
- sqlite3Update(pParse,yymsp[-4].minor.yy185,yymsp[-1].minor.yy148,yymsp[0].minor.yy72,yymsp[-5].minor.yy194);
+ sqlite3WithPush(pParse, yymsp[-7].minor.yy451, 1);
+ sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy259, &yymsp[-3].minor.yy0);
+ sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy322,"set list");
+ sqlite3Update(pParse,yymsp[-4].minor.yy259,yymsp[-1].minor.yy322,yymsp[0].minor.yy314,yymsp[-5].minor.yy4,0,0);
}
break;
- case 137: /* setlist ::= setlist COMMA nm EQ expr */
+ case 138: /* setlist ::= setlist COMMA nm EQ expr */
{
- yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr);
- sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, 1);
+ yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy314);
+ sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, 1);
}
break;
- case 138: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
+ case 139: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
{
- yymsp[-6].minor.yy148 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy148, yymsp[-3].minor.yy254, yymsp[0].minor.yy190.pExpr);
+ yymsp[-6].minor.yy322 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy322, yymsp[-3].minor.yy384, yymsp[0].minor.yy314);
}
break;
- case 139: /* setlist ::= nm EQ expr */
+ case 140: /* setlist ::= nm EQ expr */
{
- yylhsminor.yy148 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy190.pExpr);
- sqlite3ExprListSetName(pParse, yylhsminor.yy148, &yymsp[-2].minor.yy0, 1);
+ yylhsminor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy314);
+ sqlite3ExprListSetName(pParse, yylhsminor.yy322, &yymsp[-2].minor.yy0, 1);
}
- yymsp[-2].minor.yy148 = yylhsminor.yy148;
+ yymsp[-2].minor.yy322 = yylhsminor.yy322;
break;
- case 140: /* setlist ::= LP idlist RP EQ expr */
+ case 141: /* setlist ::= LP idlist RP EQ expr */
{
- yymsp[-4].minor.yy148 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy254, yymsp[0].minor.yy190.pExpr);
+ yymsp[-4].minor.yy322 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy384, yymsp[0].minor.yy314);
}
break;
- case 141: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */
+ case 142: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */
{
- sqlite3WithPush(pParse, yymsp[-5].minor.yy285, 1);
- sqlite3Insert(pParse, yymsp[-2].minor.yy185, yymsp[0].minor.yy243, yymsp[-1].minor.yy254, yymsp[-4].minor.yy194);
+ sqlite3WithPush(pParse, yymsp[-5].minor.yy451, 1);
+ sqlite3Insert(pParse, yymsp[-2].minor.yy259, yymsp[0].minor.yy387, yymsp[-1].minor.yy384, yymsp[-4].minor.yy4);
}
break;
- case 142: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
+ case 143: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
{
- sqlite3WithPush(pParse, yymsp[-6].minor.yy285, 1);
- sqlite3Insert(pParse, yymsp[-3].minor.yy185, 0, yymsp[-2].minor.yy254, yymsp[-5].minor.yy194);
+ sqlite3WithPush(pParse, yymsp[-6].minor.yy451, 1);
+ sqlite3Insert(pParse, yymsp[-3].minor.yy259, 0, yymsp[-2].minor.yy384, yymsp[-5].minor.yy4);
}
break;
- case 146: /* idlist_opt ::= LP idlist RP */
-{yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;}
+ case 147: /* idlist_opt ::= LP idlist RP */
+{yymsp[-2].minor.yy384 = yymsp[-1].minor.yy384;}
break;
- case 147: /* idlist ::= idlist COMMA nm */
-{yymsp[-2].minor.yy254 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);}
+ case 148: /* idlist ::= idlist COMMA nm */
+{yymsp[-2].minor.yy384 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy384,&yymsp[0].minor.yy0);}
break;
- case 148: /* idlist ::= nm */
-{yymsp[0].minor.yy254 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
+ case 149: /* idlist ::= nm */
+{yymsp[0].minor.yy384 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
break;
- case 149: /* expr ::= LP expr RP */
-{spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ yymsp[-2].minor.yy190.pExpr = yymsp[-1].minor.yy190.pExpr;}
+ case 150: /* expr ::= LP expr RP */
+{yymsp[-2].minor.yy314 = yymsp[-1].minor.yy314;}
break;
- case 150: /* expr ::= ID|INDEXED */
- case 151: /* expr ::= JOIN_KW */ yytestcase(yyruleno==151);
-{spanExpr(&yymsp[0].minor.yy190,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 151: /* expr ::= ID|INDEXED */
+ case 152: /* expr ::= JOIN_KW */ yytestcase(yyruleno==152);
+{yymsp[0].minor.yy314=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 152: /* expr ::= nm DOT nm */
+ case 153: /* expr ::= nm DOT nm */
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
- spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
- yymsp[-2].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
+ yylhsminor.yy314 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
}
+ yymsp[-2].minor.yy314 = yylhsminor.yy314;
break;
- case 153: /* expr ::= nm DOT nm DOT nm */
+ case 154: /* expr ::= nm DOT nm DOT nm */
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
- spanSet(&yymsp[-4].minor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
+ yylhsminor.yy314 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
}
+ yymsp[-4].minor.yy314 = yylhsminor.yy314;
break;
- case 154: /* term ::= NULL|FLOAT|BLOB */
- case 155: /* term ::= STRING */ yytestcase(yyruleno==155);
-{spanExpr(&yymsp[0].minor.yy190,pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
+ case 155: /* term ::= NULL|FLOAT|BLOB */
+ case 156: /* term ::= STRING */ yytestcase(yyruleno==156);
+{yymsp[0].minor.yy314=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
break;
- case 156: /* term ::= INTEGER */
+ case 157: /* term ::= INTEGER */
{
- yylhsminor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
- yylhsminor.yy190.zStart = yymsp[0].minor.yy0.z;
- yylhsminor.yy190.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n;
+ yylhsminor.yy314 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
}
- yymsp[0].minor.yy190 = yylhsminor.yy190;
+ yymsp[0].minor.yy314 = yylhsminor.yy314;
break;
- case 157: /* expr ::= VARIABLE */
+ case 158: /* expr ::= VARIABLE */
{
if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
u32 n = yymsp[0].minor.yy0.n;
- spanExpr(&yymsp[0].minor.yy190, pParse, TK_VARIABLE, yymsp[0].minor.yy0);
- sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy190.pExpr, n);
+ yymsp[0].minor.yy314 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
+ sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy314, n);
}else{
/* When doing a nested parse, one can include terms in an expression
** that look like this: #1 #2 ... These terms refer to registers
** in the virtual machine. #N is the N-th register. */
Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/
assert( t.n>=2 );
- spanSet(&yymsp[0].minor.yy190, &t, &t);
if( pParse->nested==0 ){
sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
- yymsp[0].minor.yy190.pExpr = 0;
+ yymsp[0].minor.yy314 = 0;
}else{
- yymsp[0].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
- if( yymsp[0].minor.yy190.pExpr ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy190.pExpr->iTable);
+ yymsp[0].minor.yy314 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
+ if( yymsp[0].minor.yy314 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy314->iTable);
}
}
}
break;
- case 158: /* expr ::= expr COLLATE ID|STRING */
+ case 159: /* expr ::= expr COLLATE ID|STRING */
{
- yymsp[-2].minor.yy190.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy190.pExpr, &yymsp[0].minor.yy0, 1);
- yymsp[-2].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
+ yymsp[-2].minor.yy314 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy314, &yymsp[0].minor.yy0, 1);
}
break;
- case 159: /* expr ::= CAST LP expr AS typetoken RP */
+ case 160: /* expr ::= CAST LP expr AS typetoken RP */
{
- spanSet(&yymsp[-5].minor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
- yymsp[-5].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
- sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy190.pExpr, yymsp[-3].minor.yy190.pExpr, 0);
+ yymsp[-5].minor.yy314 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
+ sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy314, yymsp[-3].minor.yy314, 0);
}
break;
- case 160: /* expr ::= ID|INDEXED LP distinct exprlist RP */
+ case 161: /* expr ::= ID|INDEXED LP distinct exprlist RP */
{
- if( yymsp[-1].minor.yy148 && yymsp[-1].minor.yy148->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
+ if( yymsp[-1].minor.yy322 && yymsp[-1].minor.yy322->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
}
- yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy148, &yymsp[-4].minor.yy0);
- spanSet(&yylhsminor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
- if( yymsp[-2].minor.yy194==SF_Distinct && yylhsminor.yy190.pExpr ){
- yylhsminor.yy190.pExpr->flags |= EP_Distinct;
+ yylhsminor.yy314 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0);
+ if( yymsp[-2].minor.yy4==SF_Distinct && yylhsminor.yy314 ){
+ yylhsminor.yy314->flags |= EP_Distinct;
}
}
- yymsp[-4].minor.yy190 = yylhsminor.yy190;
+ yymsp[-4].minor.yy314 = yylhsminor.yy314;
break;
- case 161: /* expr ::= ID|INDEXED LP STAR RP */
+ case 162: /* expr ::= ID|INDEXED LP STAR RP */
{
- yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
- spanSet(&yylhsminor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
+ yylhsminor.yy314 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
}
- yymsp[-3].minor.yy190 = yylhsminor.yy190;
+ yymsp[-3].minor.yy314 = yylhsminor.yy314;
break;
- case 162: /* term ::= CTIME_KW */
+ case 163: /* term ::= CTIME_KW */
{
- yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0);
- spanSet(&yylhsminor.yy190, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
+ yylhsminor.yy314 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0);
}
- yymsp[0].minor.yy190 = yylhsminor.yy190;
+ yymsp[0].minor.yy314 = yylhsminor.yy314;
break;
- case 163: /* expr ::= LP nexprlist COMMA expr RP */
+ case 164: /* expr ::= LP nexprlist COMMA expr RP */
{
- ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy148, yymsp[-1].minor.yy190.pExpr);
- yylhsminor.yy190.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
- if( yylhsminor.yy190.pExpr ){
- yylhsminor.yy190.pExpr->x.pList = pList;
- spanSet(&yylhsminor.yy190, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
+ ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy322, yymsp[-1].minor.yy314);
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
+ if( yymsp[-4].minor.yy314 ){
+ yymsp[-4].minor.yy314->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
}
- yymsp[-4].minor.yy190 = yylhsminor.yy190;
break;
- case 164: /* expr ::= expr AND expr */
- case 165: /* expr ::= expr OR expr */ yytestcase(yyruleno==165);
- case 166: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==166);
- case 167: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==167);
- case 168: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==168);
- case 169: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==169);
- case 170: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==170);
- case 171: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==171);
-{spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190);}
+ case 165: /* expr ::= expr AND expr */
+ case 166: /* expr ::= expr OR expr */ yytestcase(yyruleno==166);
+ case 167: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==167);
+ case 168: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==168);
+ case 169: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==169);
+ case 170: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==170);
+ case 171: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==171);
+ case 172: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==172);
+{yymsp[-2].minor.yy314=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy314,yymsp[0].minor.yy314);}
break;
- case 172: /* likeop ::= NOT LIKE_KW|MATCH */
+ case 173: /* likeop ::= NOT LIKE_KW|MATCH */
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
break;
- case 173: /* expr ::= expr likeop expr */
+ case 174: /* expr ::= expr likeop expr */
{
ExprList *pList;
int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
yymsp[-1].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy190.pExpr);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy190.pExpr);
- yymsp[-2].minor.yy190.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0);
- exprNot(pParse, bNot, &yymsp[-2].minor.yy190);
- yymsp[-2].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd;
- if( yymsp[-2].minor.yy190.pExpr ) yymsp[-2].minor.yy190.pExpr->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy314);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy314);
+ yymsp[-2].minor.yy314 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0);
+ if( bNot ) yymsp[-2].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy314, 0);
+ if( yymsp[-2].minor.yy314 ) yymsp[-2].minor.yy314->flags |= EP_InfixFunc;
}
break;
- case 174: /* expr ::= expr likeop expr ESCAPE expr */
+ case 175: /* expr ::= expr likeop expr ESCAPE expr */
{
ExprList *pList;
int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
yymsp[-3].minor.yy0.n &= 0x7fffffff;
- pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy190.pExpr);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr);
- yymsp[-4].minor.yy190.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0);
- exprNot(pParse, bNot, &yymsp[-4].minor.yy190);
- yymsp[-4].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd;
- if( yymsp[-4].minor.yy190.pExpr ) yymsp[-4].minor.yy190.pExpr->flags |= EP_InfixFunc;
+ pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy314);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy314);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy314);
+ yymsp[-4].minor.yy314 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0);
+ if( bNot ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0);
+ if( yymsp[-4].minor.yy314 ) yymsp[-4].minor.yy314->flags |= EP_InfixFunc;
}
break;
- case 175: /* expr ::= expr ISNULL|NOTNULL */
-{spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy190,&yymsp[0].minor.yy0);}
+ case 176: /* expr ::= expr ISNULL|NOTNULL */
+{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy314,0);}
break;
- case 176: /* expr ::= expr NOT NULL */
-{spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy0);}
+ case 177: /* expr ::= expr NOT NULL */
+{yymsp[-2].minor.yy314 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy314,0);}
break;
- case 177: /* expr ::= expr IS expr */
+ case 178: /* expr ::= expr IS expr */
{
- spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy190.pExpr, yymsp[-2].minor.yy190.pExpr, TK_ISNULL);
+ yymsp[-2].minor.yy314 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy314,yymsp[0].minor.yy314);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy314, yymsp[-2].minor.yy314, TK_ISNULL);
}
break;
- case 178: /* expr ::= expr IS NOT expr */
+ case 179: /* expr ::= expr IS NOT expr */
{
- spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy190,&yymsp[0].minor.yy190);
- binaryToUnaryIfNull(pParse, yymsp[0].minor.yy190.pExpr, yymsp[-3].minor.yy190.pExpr, TK_NOTNULL);
+ yymsp[-3].minor.yy314 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy314,yymsp[0].minor.yy314);
+ binaryToUnaryIfNull(pParse, yymsp[0].minor.yy314, yymsp[-3].minor.yy314, TK_NOTNULL);
}
break;
- case 179: /* expr ::= NOT expr */
- case 180: /* expr ::= BITNOT expr */ yytestcase(yyruleno==180);
-{spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,yymsp[-1].major,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
+ case 180: /* expr ::= NOT expr */
+ case 181: /* expr ::= BITNOT expr */ yytestcase(yyruleno==181);
+{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy314, 0);/*A-overwrites-B*/}
break;
- case 181: /* expr ::= MINUS expr */
-{spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,TK_UMINUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
+ case 182: /* expr ::= MINUS expr */
+{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy314, 0);}
break;
- case 182: /* expr ::= PLUS expr */
-{spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,TK_UPLUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/}
+ case 183: /* expr ::= PLUS expr */
+{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse, TK_UPLUS, yymsp[0].minor.yy314, 0);}
break;
- case 183: /* between_op ::= BETWEEN */
- case 186: /* in_op ::= IN */ yytestcase(yyruleno==186);
-{yymsp[0].minor.yy194 = 0;}
+ case 184: /* between_op ::= BETWEEN */
+ case 187: /* in_op ::= IN */ yytestcase(yyruleno==187);
+{yymsp[0].minor.yy4 = 0;}
break;
- case 185: /* expr ::= expr between_op expr AND expr */
+ case 186: /* expr ::= expr between_op expr AND expr */
{
- ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr);
- pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr);
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy190.pExpr, 0);
- if( yymsp[-4].minor.yy190.pExpr ){
- yymsp[-4].minor.yy190.pExpr->x.pList = pList;
+ ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy314);
+ pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy314);
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy314, 0);
+ if( yymsp[-4].minor.yy314 ){
+ yymsp[-4].minor.yy314->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
- exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190);
- yymsp[-4].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd;
+ if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0);
}
break;
- case 188: /* expr ::= expr in_op LP exprlist RP */
+ case 189: /* expr ::= expr in_op LP exprlist RP */
{
- if( yymsp[-1].minor.yy148==0 ){
+ if( yymsp[-1].minor.yy322==0 ){
/* Expressions of the form
**
** expr1 IN ()
@@ -139609,9 +141371,9 @@ static void yy_reduce(
** simplify to constants 0 (false) and 1 (true), respectively,
** regardless of the value of expr1.
*/
- sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy190.pExpr);
- yymsp[-4].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy194],1);
- }else if( yymsp[-1].minor.yy148->nExpr==1 ){
+ sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy314);
+ yymsp[-4].minor.yy314 = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy4],1);
+ }else if( yymsp[-1].minor.yy322->nExpr==1 ){
/* Expressions of the form:
**
** expr1 IN (?1)
@@ -139628,201 +141390,195 @@ static void yy_reduce(
** affinity or the collating sequence to use for comparison. Otherwise,
** the semantics would be subtly different from IN or NOT IN.
*/
- Expr *pRHS = yymsp[-1].minor.yy148->a[0].pExpr;
- yymsp[-1].minor.yy148->a[0].pExpr = 0;
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy148);
+ Expr *pRHS = yymsp[-1].minor.yy322->a[0].pExpr;
+ yymsp[-1].minor.yy322->a[0].pExpr = 0;
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
/* pRHS cannot be NULL because a malloc error would have been detected
** before now and control would have never reached this point */
if( ALWAYS(pRHS) ){
pRHS->flags &= ~EP_Collate;
pRHS->flags |= EP_Generic;
}
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, yymsp[-3].minor.yy194 ? TK_NE : TK_EQ, yymsp[-4].minor.yy190.pExpr, pRHS);
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, yymsp[-3].minor.yy4 ? TK_NE : TK_EQ, yymsp[-4].minor.yy314, pRHS);
}else{
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0);
- if( yymsp[-4].minor.yy190.pExpr ){
- yymsp[-4].minor.yy190.pExpr->x.pList = yymsp[-1].minor.yy148;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy190.pExpr);
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy314, 0);
+ if( yymsp[-4].minor.yy314 ){
+ yymsp[-4].minor.yy314->x.pList = yymsp[-1].minor.yy322;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy314);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy148);
+ sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
}
- exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190);
+ if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0);
}
- yymsp[-4].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
}
break;
- case 189: /* expr ::= LP select RP */
+ case 190: /* expr ::= LP select RP */
{
- spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
- yymsp[-2].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy190.pExpr, yymsp[-1].minor.yy243);
+ yymsp[-2].minor.yy314 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy314, yymsp[-1].minor.yy387);
}
break;
- case 190: /* expr ::= expr in_op LP select RP */
+ case 191: /* expr ::= expr in_op LP select RP */
{
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy190.pExpr, yymsp[-1].minor.yy243);
- exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190);
- yymsp[-4].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy314, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy314, yymsp[-1].minor.yy387);
+ if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0);
}
break;
- case 191: /* expr ::= expr in_op nm dbnm paren_exprlist */
+ case 192: /* expr ::= expr in_op nm dbnm paren_exprlist */
{
SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);
- Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
- if( yymsp[0].minor.yy148 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy148);
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0);
- sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy190.pExpr, pSelect);
- exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190);
- yymsp[-4].minor.yy190.zEnd = yymsp[-1].minor.yy0.z ? &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n] : &yymsp[-2].minor.yy0.z[yymsp[-2].minor.yy0.n];
+ Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
+ if( yymsp[0].minor.yy322 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy322);
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy314, 0);
+ sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy314, pSelect);
+ if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0);
}
break;
- case 192: /* expr ::= EXISTS LP select RP */
+ case 193: /* expr ::= EXISTS LP select RP */
{
Expr *p;
- spanSet(&yymsp[-3].minor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/
- p = yymsp[-3].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
- sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy243);
+ p = yymsp[-3].minor.yy314 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
+ sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy387);
}
break;
- case 193: /* expr ::= CASE case_operand case_exprlist case_else END */
+ case 194: /* expr ::= CASE case_operand case_exprlist case_else END */
{
- spanSet(&yymsp[-4].minor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-C*/
- yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy72, 0);
- if( yymsp[-4].minor.yy190.pExpr ){
- yymsp[-4].minor.yy190.pExpr->x.pList = yymsp[-1].minor.yy72 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy148,yymsp[-1].minor.yy72) : yymsp[-2].minor.yy148;
- sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy190.pExpr);
+ yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy314, 0);
+ if( yymsp[-4].minor.yy314 ){
+ yymsp[-4].minor.yy314->x.pList = yymsp[-1].minor.yy314 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[-1].minor.yy314) : yymsp[-2].minor.yy322;
+ sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy314);
}else{
- sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy148);
- sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy72);
+ sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322);
+ sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy314);
}
}
break;
- case 194: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 195: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
- yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, yymsp[-2].minor.yy190.pExpr);
- yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr);
+ yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy314);
+ yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[0].minor.yy314);
}
break;
- case 195: /* case_exprlist ::= WHEN expr THEN expr */
+ case 196: /* case_exprlist ::= WHEN expr THEN expr */
{
- yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr);
- yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, yymsp[0].minor.yy190.pExpr);
+ yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy314);
+ yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, yymsp[0].minor.yy314);
}
break;
- case 198: /* case_operand ::= expr */
-{yymsp[0].minor.yy72 = yymsp[0].minor.yy190.pExpr; /*A-overwrites-X*/}
+ case 199: /* case_operand ::= expr */
+{yymsp[0].minor.yy314 = yymsp[0].minor.yy314; /*A-overwrites-X*/}
break;
- case 201: /* nexprlist ::= nexprlist COMMA expr */
-{yymsp[-2].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy148,yymsp[0].minor.yy190.pExpr);}
+ case 202: /* nexprlist ::= nexprlist COMMA expr */
+{yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy314);}
break;
- case 202: /* nexprlist ::= expr */
-{yymsp[0].minor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy190.pExpr); /*A-overwrites-Y*/}
+ case 203: /* nexprlist ::= expr */
+{yymsp[0].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy314); /*A-overwrites-Y*/}
break;
- case 204: /* paren_exprlist ::= LP exprlist RP */
- case 209: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==209);
-{yymsp[-2].minor.yy148 = yymsp[-1].minor.yy148;}
+ case 205: /* paren_exprlist ::= LP exprlist RP */
+ case 210: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==210);
+{yymsp[-2].minor.yy322 = yymsp[-1].minor.yy322;}
break;
- case 205: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ case 206: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
{
sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0,
- sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy148, yymsp[-10].minor.yy194,
- &yymsp[-11].minor.yy0, yymsp[0].minor.yy72, SQLITE_SO_ASC, yymsp[-8].minor.yy194, SQLITE_IDXTYPE_APPDEF);
+ sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy322, yymsp[-10].minor.yy4,
+ &yymsp[-11].minor.yy0, yymsp[0].minor.yy314, SQLITE_SO_ASC, yymsp[-8].minor.yy4, SQLITE_IDXTYPE_APPDEF);
}
break;
- case 206: /* uniqueflag ::= UNIQUE */
- case 246: /* raisetype ::= ABORT */ yytestcase(yyruleno==246);
-{yymsp[0].minor.yy194 = OE_Abort;}
+ case 207: /* uniqueflag ::= UNIQUE */
+ case 247: /* raisetype ::= ABORT */ yytestcase(yyruleno==247);
+{yymsp[0].minor.yy4 = OE_Abort;}
break;
- case 207: /* uniqueflag ::= */
-{yymsp[1].minor.yy194 = OE_None;}
+ case 208: /* uniqueflag ::= */
+{yymsp[1].minor.yy4 = OE_None;}
break;
- case 210: /* eidlist ::= eidlist COMMA nm collate sortorder */
+ case 211: /* eidlist ::= eidlist COMMA nm collate sortorder */
{
- yymsp[-4].minor.yy148 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy194, yymsp[0].minor.yy194);
+ yymsp[-4].minor.yy322 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy4, yymsp[0].minor.yy4);
}
break;
- case 211: /* eidlist ::= nm collate sortorder */
+ case 212: /* eidlist ::= nm collate sortorder */
{
- yymsp[-2].minor.yy148 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy194, yymsp[0].minor.yy194); /*A-overwrites-Y*/
+ yymsp[-2].minor.yy322 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy4, yymsp[0].minor.yy4); /*A-overwrites-Y*/
}
break;
- case 214: /* cmd ::= DROP INDEX ifexists fullname */
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy185, yymsp[-1].minor.yy194);}
+ case 215: /* cmd ::= DROP INDEX ifexists fullname */
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy259, yymsp[-1].minor.yy4);}
break;
- case 215: /* cmd ::= VACUUM */
+ case 216: /* cmd ::= VACUUM */
{sqlite3Vacuum(pParse,0);}
break;
- case 216: /* cmd ::= VACUUM nm */
+ case 217: /* cmd ::= VACUUM nm */
{sqlite3Vacuum(pParse,&yymsp[0].minor.yy0);}
break;
- case 217: /* cmd ::= PRAGMA nm dbnm */
+ case 218: /* cmd ::= PRAGMA nm dbnm */
{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
break;
- case 218: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 219: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
break;
- case 219: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 220: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
break;
- case 220: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
+ case 221: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
break;
- case 221: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
+ case 222: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
break;
- case 224: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
+ case 225: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
{
Token all;
all.z = yymsp[-3].minor.yy0.z;
all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
- sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy145, &all);
+ sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all);
}
break;
- case 225: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
+ case 226: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
{
- sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy194, yymsp[-4].minor.yy332.a, yymsp[-4].minor.yy332.b, yymsp[-2].minor.yy185, yymsp[0].minor.yy72, yymsp[-10].minor.yy194, yymsp[-8].minor.yy194);
+ sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy4, yymsp[-4].minor.yy90.a, yymsp[-4].minor.yy90.b, yymsp[-2].minor.yy259, yymsp[0].minor.yy314, yymsp[-10].minor.yy4, yymsp[-8].minor.yy4);
yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/
}
break;
- case 226: /* trigger_time ::= BEFORE|AFTER */
-{ yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-X*/ }
+ case 227: /* trigger_time ::= BEFORE|AFTER */
+{ yymsp[0].minor.yy4 = yymsp[0].major; /*A-overwrites-X*/ }
break;
- case 227: /* trigger_time ::= INSTEAD OF */
-{ yymsp[-1].minor.yy194 = TK_INSTEAD;}
+ case 228: /* trigger_time ::= INSTEAD OF */
+{ yymsp[-1].minor.yy4 = TK_INSTEAD;}
break;
- case 228: /* trigger_time ::= */
-{ yymsp[1].minor.yy194 = TK_BEFORE; }
+ case 229: /* trigger_time ::= */
+{ yymsp[1].minor.yy4 = TK_BEFORE; }
break;
- case 229: /* trigger_event ::= DELETE|INSERT */
- case 230: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==230);
-{yymsp[0].minor.yy332.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy332.b = 0;}
+ case 230: /* trigger_event ::= DELETE|INSERT */
+ case 231: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==231);
+{yymsp[0].minor.yy90.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy90.b = 0;}
break;
- case 231: /* trigger_event ::= UPDATE OF idlist */
-{yymsp[-2].minor.yy332.a = TK_UPDATE; yymsp[-2].minor.yy332.b = yymsp[0].minor.yy254;}
+ case 232: /* trigger_event ::= UPDATE OF idlist */
+{yymsp[-2].minor.yy90.a = TK_UPDATE; yymsp[-2].minor.yy90.b = yymsp[0].minor.yy384;}
break;
- case 232: /* when_clause ::= */
- case 251: /* key_opt ::= */ yytestcase(yyruleno==251);
-{ yymsp[1].minor.yy72 = 0; }
+ case 233: /* when_clause ::= */
+ case 252: /* key_opt ::= */ yytestcase(yyruleno==252);
+{ yymsp[1].minor.yy314 = 0; }
break;
- case 233: /* when_clause ::= WHEN expr */
- case 252: /* key_opt ::= KEY expr */ yytestcase(yyruleno==252);
-{ yymsp[-1].minor.yy72 = yymsp[0].minor.yy190.pExpr; }
+ case 234: /* when_clause ::= WHEN expr */
+ case 253: /* key_opt ::= KEY expr */ yytestcase(yyruleno==253);
+{ yymsp[-1].minor.yy314 = yymsp[0].minor.yy314; }
break;
- case 234: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 235: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
- assert( yymsp[-2].minor.yy145!=0 );
- yymsp[-2].minor.yy145->pLast->pNext = yymsp[-1].minor.yy145;
- yymsp[-2].minor.yy145->pLast = yymsp[-1].minor.yy145;
+ assert( yymsp[-2].minor.yy203!=0 );
+ yymsp[-2].minor.yy203->pLast->pNext = yymsp[-1].minor.yy203;
+ yymsp[-2].minor.yy203->pLast = yymsp[-1].minor.yy203;
}
break;
- case 235: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 236: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
- assert( yymsp[-1].minor.yy145!=0 );
- yymsp[-1].minor.yy145->pLast = yymsp[-1].minor.yy145;
+ assert( yymsp[-1].minor.yy203!=0 );
+ yymsp[-1].minor.yy203->pLast = yymsp[-1].minor.yy203;
}
break;
- case 236: /* trnm ::= nm DOT nm */
+ case 237: /* trnm ::= nm DOT nm */
{
yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
sqlite3ErrorMsg(pParse,
@@ -139830,196 +141586,198 @@ static void yy_reduce(
"statements within triggers");
}
break;
- case 237: /* tridxby ::= INDEXED BY nm */
+ case 238: /* tridxby ::= INDEXED BY nm */
{
sqlite3ErrorMsg(pParse,
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 238: /* tridxby ::= NOT INDEXED */
+ case 239: /* tridxby ::= NOT INDEXED */
{
sqlite3ErrorMsg(pParse,
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
break;
- case 239: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
-{yymsp[-6].minor.yy145 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy148, yymsp[0].minor.yy72, yymsp[-5].minor.yy194);}
+ case 240: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */
+{yylhsminor.yy203 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy314, yymsp[-6].minor.yy4, yymsp[-7].minor.yy0.z, yymsp[0].minor.yy336);}
+ yymsp[-7].minor.yy203 = yylhsminor.yy203;
break;
- case 240: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */
-{yymsp[-4].minor.yy145 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy254, yymsp[0].minor.yy243, yymsp[-4].minor.yy194);/*A-overwrites-R*/}
+ case 241: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select scanpt */
+{yylhsminor.yy203 = sqlite3TriggerInsertStep(pParse->db,&yymsp[-3].minor.yy0,yymsp[-2].minor.yy384,yymsp[-1].minor.yy387,yymsp[-5].minor.yy4,yymsp[-6].minor.yy336,yymsp[0].minor.yy336);/*yylhsminor.yy203-overwrites-yymsp[-5].minor.yy4*/}
+ yymsp[-6].minor.yy203 = yylhsminor.yy203;
break;
- case 241: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
-{yymsp[-4].minor.yy145 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy72);}
+ case 242: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
+{yylhsminor.yy203 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy314, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy336);}
+ yymsp[-5].minor.yy203 = yylhsminor.yy203;
break;
- case 242: /* trigger_cmd ::= select */
-{yymsp[0].minor.yy145 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy243); /*A-overwrites-X*/}
+ case 243: /* trigger_cmd ::= scanpt select scanpt */
+{yylhsminor.yy203 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy387, yymsp[-2].minor.yy336, yymsp[0].minor.yy336); /*yylhsminor.yy203-overwrites-yymsp[-1].minor.yy387*/}
+ yymsp[-2].minor.yy203 = yylhsminor.yy203;
break;
- case 243: /* expr ::= RAISE LP IGNORE RP */
+ case 244: /* expr ::= RAISE LP IGNORE RP */
{
- spanSet(&yymsp[-3].minor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
- yymsp[-3].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
- if( yymsp[-3].minor.yy190.pExpr ){
- yymsp[-3].minor.yy190.pExpr->affinity = OE_Ignore;
+ yymsp[-3].minor.yy314 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
+ if( yymsp[-3].minor.yy314 ){
+ yymsp[-3].minor.yy314->affinity = OE_Ignore;
}
}
break;
- case 244: /* expr ::= RAISE LP raisetype COMMA nm RP */
+ case 245: /* expr ::= RAISE LP raisetype COMMA nm RP */
{
- spanSet(&yymsp[-5].minor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/
- yymsp[-5].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
- if( yymsp[-5].minor.yy190.pExpr ) {
- yymsp[-5].minor.yy190.pExpr->affinity = (char)yymsp[-3].minor.yy194;
+ yymsp[-5].minor.yy314 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
+ if( yymsp[-5].minor.yy314 ) {
+ yymsp[-5].minor.yy314->affinity = (char)yymsp[-3].minor.yy4;
}
}
break;
- case 245: /* raisetype ::= ROLLBACK */
-{yymsp[0].minor.yy194 = OE_Rollback;}
+ case 246: /* raisetype ::= ROLLBACK */
+{yymsp[0].minor.yy4 = OE_Rollback;}
break;
- case 247: /* raisetype ::= FAIL */
-{yymsp[0].minor.yy194 = OE_Fail;}
+ case 248: /* raisetype ::= FAIL */
+{yymsp[0].minor.yy4 = OE_Fail;}
break;
- case 248: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 249: /* cmd ::= DROP TRIGGER ifexists fullname */
{
- sqlite3DropTrigger(pParse,yymsp[0].minor.yy185,yymsp[-1].minor.yy194);
+ sqlite3DropTrigger(pParse,yymsp[0].minor.yy259,yymsp[-1].minor.yy4);
}
break;
- case 249: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 250: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
- sqlite3Attach(pParse, yymsp[-3].minor.yy190.pExpr, yymsp[-1].minor.yy190.pExpr, yymsp[0].minor.yy72);
+ sqlite3Attach(pParse, yymsp[-3].minor.yy314, yymsp[-1].minor.yy314, yymsp[0].minor.yy314);
}
break;
- case 250: /* cmd ::= DETACH database_kw_opt expr */
+ case 251: /* cmd ::= DETACH database_kw_opt expr */
{
- sqlite3Detach(pParse, yymsp[0].minor.yy190.pExpr);
+ sqlite3Detach(pParse, yymsp[0].minor.yy314);
}
break;
- case 253: /* cmd ::= REINDEX */
+ case 254: /* cmd ::= REINDEX */
{sqlite3Reindex(pParse, 0, 0);}
break;
- case 254: /* cmd ::= REINDEX nm dbnm */
+ case 255: /* cmd ::= REINDEX nm dbnm */
{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 255: /* cmd ::= ANALYZE */
+ case 256: /* cmd ::= ANALYZE */
{sqlite3Analyze(pParse, 0, 0);}
break;
- case 256: /* cmd ::= ANALYZE nm dbnm */
+ case 257: /* cmd ::= ANALYZE nm dbnm */
{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
break;
- case 257: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 258: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
- sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy185,&yymsp[0].minor.yy0);
+ sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy259,&yymsp[0].minor.yy0);
}
break;
- case 258: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
+ case 259: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
{
yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0);
}
break;
- case 259: /* add_column_fullname ::= fullname */
+ case 260: /* add_column_fullname ::= fullname */
{
disableLookaside(pParse);
- sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy185);
+ sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy259);
}
break;
- case 260: /* cmd ::= create_vtab */
+ case 261: /* cmd ::= create_vtab */
{sqlite3VtabFinishParse(pParse,0);}
break;
- case 261: /* cmd ::= create_vtab LP vtabarglist RP */
+ case 262: /* cmd ::= create_vtab LP vtabarglist RP */
{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
break;
- case 262: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 263: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
- sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy194);
+ sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy4);
}
break;
- case 263: /* vtabarg ::= */
+ case 264: /* vtabarg ::= */
{sqlite3VtabArgInit(pParse);}
break;
- case 264: /* vtabargtoken ::= ANY */
- case 265: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==265);
- case 266: /* lp ::= LP */ yytestcase(yyruleno==266);
+ case 265: /* vtabargtoken ::= ANY */
+ case 266: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==266);
+ case 267: /* lp ::= LP */ yytestcase(yyruleno==267);
{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
break;
- case 267: /* with ::= */
-{yymsp[1].minor.yy285 = 0;}
+ case 268: /* with ::= */
+{yymsp[1].minor.yy451 = 0;}
break;
- case 268: /* with ::= WITH wqlist */
-{ yymsp[-1].minor.yy285 = yymsp[0].minor.yy285; }
+ case 269: /* with ::= WITH wqlist */
+{ yymsp[-1].minor.yy451 = yymsp[0].minor.yy451; }
break;
- case 269: /* with ::= WITH RECURSIVE wqlist */
-{ yymsp[-2].minor.yy285 = yymsp[0].minor.yy285; }
+ case 270: /* with ::= WITH RECURSIVE wqlist */
+{ yymsp[-2].minor.yy451 = yymsp[0].minor.yy451; }
break;
- case 270: /* wqlist ::= nm eidlist_opt AS LP select RP */
+ case 271: /* wqlist ::= nm eidlist_opt AS LP select RP */
{
- yymsp[-5].minor.yy285 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy148, yymsp[-1].minor.yy243); /*A-overwrites-X*/
+ yymsp[-5].minor.yy451 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy387); /*A-overwrites-X*/
}
break;
- case 271: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
+ case 272: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
{
- yymsp[-7].minor.yy285 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy285, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy148, yymsp[-1].minor.yy243);
+ yymsp[-7].minor.yy451 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy451, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy387);
}
break;
default:
- /* (272) input ::= cmdlist */ yytestcase(yyruleno==272);
- /* (273) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==273);
- /* (274) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=274);
- /* (275) ecmd ::= SEMI */ yytestcase(yyruleno==275);
- /* (276) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==276);
- /* (277) explain ::= */ yytestcase(yyruleno==277);
- /* (278) trans_opt ::= */ yytestcase(yyruleno==278);
- /* (279) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==279);
- /* (280) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==280);
- /* (281) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==281);
- /* (282) savepoint_opt ::= */ yytestcase(yyruleno==282);
- /* (283) cmd ::= create_table create_table_args */ yytestcase(yyruleno==283);
- /* (284) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==284);
- /* (285) columnlist ::= columnname carglist */ yytestcase(yyruleno==285);
- /* (286) nm ::= ID|INDEXED */ yytestcase(yyruleno==286);
- /* (287) nm ::= STRING */ yytestcase(yyruleno==287);
- /* (288) nm ::= JOIN_KW */ yytestcase(yyruleno==288);
- /* (289) typetoken ::= typename */ yytestcase(yyruleno==289);
- /* (290) typename ::= ID|STRING */ yytestcase(yyruleno==290);
- /* (291) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=291);
- /* (292) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=292);
- /* (293) carglist ::= carglist ccons */ yytestcase(yyruleno==293);
- /* (294) carglist ::= */ yytestcase(yyruleno==294);
- /* (295) ccons ::= NULL onconf */ yytestcase(yyruleno==295);
- /* (296) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==296);
- /* (297) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==297);
- /* (298) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=298);
- /* (299) tconscomma ::= */ yytestcase(yyruleno==299);
- /* (300) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=300);
- /* (301) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=301);
- /* (302) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=302);
- /* (303) oneselect ::= values */ yytestcase(yyruleno==303);
- /* (304) sclp ::= selcollist COMMA */ yytestcase(yyruleno==304);
- /* (305) as ::= ID|STRING */ yytestcase(yyruleno==305);
- /* (306) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=306);
- /* (307) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==307);
- /* (308) exprlist ::= nexprlist */ yytestcase(yyruleno==308);
- /* (309) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=309);
- /* (310) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=310);
- /* (311) nmnum ::= ON */ yytestcase(yyruleno==311);
- /* (312) nmnum ::= DELETE */ yytestcase(yyruleno==312);
- /* (313) nmnum ::= DEFAULT */ yytestcase(yyruleno==313);
- /* (314) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==314);
- /* (315) foreach_clause ::= */ yytestcase(yyruleno==315);
- /* (316) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==316);
- /* (317) trnm ::= nm */ yytestcase(yyruleno==317);
- /* (318) tridxby ::= */ yytestcase(yyruleno==318);
- /* (319) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==319);
- /* (320) database_kw_opt ::= */ yytestcase(yyruleno==320);
- /* (321) kwcolumn_opt ::= */ yytestcase(yyruleno==321);
- /* (322) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==322);
- /* (323) vtabarglist ::= vtabarg */ yytestcase(yyruleno==323);
- /* (324) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==324);
- /* (325) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==325);
- /* (326) anylist ::= */ yytestcase(yyruleno==326);
- /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327);
- /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328);
+ /* (273) input ::= cmdlist */ yytestcase(yyruleno==273);
+ /* (274) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==274);
+ /* (275) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=275);
+ /* (276) ecmd ::= SEMI */ yytestcase(yyruleno==276);
+ /* (277) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==277);
+ /* (278) explain ::= */ yytestcase(yyruleno==278);
+ /* (279) trans_opt ::= */ yytestcase(yyruleno==279);
+ /* (280) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==280);
+ /* (281) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==281);
+ /* (282) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==282);
+ /* (283) savepoint_opt ::= */ yytestcase(yyruleno==283);
+ /* (284) cmd ::= create_table create_table_args */ yytestcase(yyruleno==284);
+ /* (285) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==285);
+ /* (286) columnlist ::= columnname carglist */ yytestcase(yyruleno==286);
+ /* (287) nm ::= ID|INDEXED */ yytestcase(yyruleno==287);
+ /* (288) nm ::= STRING */ yytestcase(yyruleno==288);
+ /* (289) nm ::= JOIN_KW */ yytestcase(yyruleno==289);
+ /* (290) typetoken ::= typename */ yytestcase(yyruleno==290);
+ /* (291) typename ::= ID|STRING */ yytestcase(yyruleno==291);
+ /* (292) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=292);
+ /* (293) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=293);
+ /* (294) carglist ::= carglist ccons */ yytestcase(yyruleno==294);
+ /* (295) carglist ::= */ yytestcase(yyruleno==295);
+ /* (296) ccons ::= NULL onconf */ yytestcase(yyruleno==296);
+ /* (297) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==297);
+ /* (298) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==298);
+ /* (299) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=299);
+ /* (300) tconscomma ::= */ yytestcase(yyruleno==300);
+ /* (301) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=301);
+ /* (302) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=302);
+ /* (303) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=303);
+ /* (304) oneselect ::= values */ yytestcase(yyruleno==304);
+ /* (305) sclp ::= selcollist COMMA */ yytestcase(yyruleno==305);
+ /* (306) as ::= ID|STRING */ yytestcase(yyruleno==306);
+ /* (307) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=307);
+ /* (308) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==308);
+ /* (309) exprlist ::= nexprlist */ yytestcase(yyruleno==309);
+ /* (310) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=310);
+ /* (311) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=311);
+ /* (312) nmnum ::= ON */ yytestcase(yyruleno==312);
+ /* (313) nmnum ::= DELETE */ yytestcase(yyruleno==313);
+ /* (314) nmnum ::= DEFAULT */ yytestcase(yyruleno==314);
+ /* (315) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==315);
+ /* (316) foreach_clause ::= */ yytestcase(yyruleno==316);
+ /* (317) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==317);
+ /* (318) trnm ::= nm */ yytestcase(yyruleno==318);
+ /* (319) tridxby ::= */ yytestcase(yyruleno==319);
+ /* (320) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==320);
+ /* (321) database_kw_opt ::= */ yytestcase(yyruleno==321);
+ /* (322) kwcolumn_opt ::= */ yytestcase(yyruleno==322);
+ /* (323) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==323);
+ /* (324) vtabarglist ::= vtabarg */ yytestcase(yyruleno==324);
+ /* (325) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==325);
+ /* (326) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==326);
+ /* (327) anylist ::= */ yytestcase(yyruleno==327);
+ /* (328) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==328);
+ /* (329) anylist ::= anylist ANY */ yytestcase(yyruleno==329);
break;
/********** End reduce actions ************************************************/
};
@@ -140035,16 +141793,11 @@ static void yy_reduce(
/* It is not possible for a REDUCE to be followed by an error */
assert( yyact!=YY_ERROR_ACTION );
- if( yyact==YY_ACCEPT_ACTION ){
- yypParser->yytos += yysize;
- yy_accept(yypParser);
- }else{
- yymsp += yysize+1;
- yypParser->yytos = yymsp;
- yymsp->stateno = (YYACTIONTYPE)yyact;
- yymsp->major = (YYCODETYPE)yygoto;
- yyTraceShift(yypParser, yyact);
- }
+ yymsp += yysize+1;
+ yypParser->yytos = yymsp;
+ yymsp->stateno = (YYACTIONTYPE)yyact;
+ yymsp->major = (YYCODETYPE)yygoto;
+ yyTraceShift(yypParser, yyact, "... then shift");
}
/*
@@ -140082,8 +141835,11 @@ static void yy_syntax_error(
/************ Begin %syntax_error code ****************************************/
UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */
- assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */
- sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
+ if( TOKEN.z[0] ){
+ sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
+ }else{
+ sqlite3ErrorMsg(pParse, "incomplete input");
+ }
/************ End %syntax_error code ******************************************/
sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
}
@@ -140155,20 +141911,31 @@ SQLITE_PRIVATE void sqlite3Parser(
#ifndef NDEBUG
if( yyTraceFILE ){
- fprintf(yyTraceFILE,"%sInput '%s'\n",yyTracePrompt,yyTokenName[yymajor]);
+ int stateno = yypParser->yytos->stateno;
+ if( stateno < YY_MIN_REDUCE ){
+ fprintf(yyTraceFILE,"%sInput '%s' in state %d\n",
+ yyTracePrompt,yyTokenName[yymajor],stateno);
+ }else{
+ fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n",
+ yyTracePrompt,yyTokenName[yymajor],stateno-YY_MIN_REDUCE);
+ }
}
#endif
do{
yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
- if( yyact <= YY_MAX_SHIFTREDUCE ){
+ if( yyact >= YY_MIN_REDUCE ){
+ yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor,yyminor);
+ }else if( yyact <= YY_MAX_SHIFTREDUCE ){
yy_shift(yypParser,yyact,yymajor,yyminor);
#ifndef YYNOERRORRECOVERY
yypParser->yyerrcnt--;
#endif
yymajor = YYNOCODE;
- }else if( yyact <= YY_MAX_REDUCE ){
- yy_reduce(yypParser,yyact-YY_MIN_REDUCE);
+ }else if( yyact==YY_ACCEPT_ACTION ){
+ yypParser->yytos--;
+ yy_accept(yypParser);
+ return;
}else{
assert( yyact == YY_ERROR_ACTION );
yyminorunion.yy0 = yyminor;
@@ -141117,7 +142884,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
}else{
tokenType = TK_SEMI;
}
- zSql -= n;
+ n = 0;
}
if( tokenType>=TK_SPACE ){
assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL );
@@ -141572,6 +143339,10 @@ SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db);
*/
/* #include "sqlite3.h" */
+#ifdef SQLITE_OMIT_VIRTUALTABLE
+# undef SQLITE_ENABLE_RTREE
+#endif
+
#if 0
extern "C" {
#endif /* __cplusplus */
@@ -141585,7 +143356,7 @@ SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db);
/************** End of rtree.h ***********************************************/
/************** Continuing where we left off in main.c ***********************/
#endif
-#ifdef SQLITE_ENABLE_ICU
+#if defined(SQLITE_ENABLE_ICU) || defined(SQLITE_ENABLE_ICU_COLLATIONS)
/************** Include sqliteicu.h in the middle of main.c ******************/
/************** Begin file sqliteicu.h ***************************************/
/*
@@ -141641,11 +143412,13 @@ SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
*/
SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
-/* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
+/* IMPLEMENTATION-OF: R-25063-23286 The sqlite3_sourceid() function returns a
** pointer to a string constant whose value is the same as the
-** SQLITE_SOURCE_ID C preprocessor macro.
+** SQLITE_SOURCE_ID C preprocessor macro. Except if SQLite is built using
+** an edited copy of the amalgamation, then the last four characters of
+** the hash might be different from SQLITE_SOURCE_ID.
*/
-SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
+/* SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } */
/* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
** returns an integer equal to SQLITE_VERSION_NUMBER.
@@ -142030,14 +143803,8 @@ SQLITE_API int sqlite3_config(int op, ...){
sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
break;
}
- case SQLITE_CONFIG_SCRATCH: {
- /* EVIDENCE-OF: R-08404-60887 There are three arguments to
- ** SQLITE_CONFIG_SCRATCH: A pointer an 8-byte aligned memory buffer from
- ** which the scratch allocations will be drawn, the size of each scratch
- ** allocation (sz), and the maximum number of scratch allocations (N). */
- sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
- sqlite3GlobalConfig.szScratch = va_arg(ap, int);
- sqlite3GlobalConfig.nScratch = va_arg(ap, int);
+ case SQLITE_CONFIG_SMALL_MALLOC: {
+ sqlite3GlobalConfig.bSmallMalloc = va_arg(ap, int);
break;
}
case SQLITE_CONFIG_PAGECACHE: {
@@ -142258,7 +144025,8 @@ SQLITE_API int sqlite3_config(int op, ...){
static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
#ifndef SQLITE_OMIT_LOOKASIDE
void *pStart;
- if( db->lookaside.nOut ){
+
+ if( sqlite3LookasideUsed(db,0)>0 ){
return SQLITE_BUSY;
}
/* Free any existing lookaside buffer for this handle before
@@ -142286,16 +144054,18 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
pStart = pBuf;
}
db->lookaside.pStart = pStart;
+ db->lookaside.pInit = 0;
db->lookaside.pFree = 0;
db->lookaside.sz = (u16)sz;
if( pStart ){
int i;
LookasideSlot *p;
assert( sz > (int)sizeof(LookasideSlot*) );
+ db->lookaside.nSlot = cnt;
p = (LookasideSlot*)pStart;
for(i=cnt-1; i>=0; i--){
- p->pNext = db->lookaside.pFree;
- db->lookaside.pFree = p;
+ p->pNext = db->lookaside.pInit;
+ db->lookaside.pInit = p;
p = (LookasideSlot*)&((u8*)p)[sz];
}
db->lookaside.pEnd = p;
@@ -142306,6 +144076,7 @@ static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
db->lookaside.pEnd = db;
db->lookaside.bDisable = 1;
db->lookaside.bMalloced = 0;
+ db->lookaside.nSlot = 0;
}
#endif /* SQLITE_OMIT_LOOKASIDE */
return SQLITE_OK;
@@ -142411,6 +144182,7 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
{ SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, SQLITE_LoadExtension },
{ SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE, SQLITE_NoCkptOnClose },
{ SQLITE_DBCONFIG_ENABLE_QPSG, SQLITE_EnableQPSG },
+ { SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP },
};
unsigned int i;
rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
@@ -142418,7 +144190,7 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
if( aFlagOp[i].op==op ){
int onoff = va_arg(ap, int);
int *pRes = va_arg(ap, int*);
- int oldFlags = db->flags;
+ u32 oldFlags = db->flags;
if( onoff>0 ){
db->flags |= aFlagOp[i].mask;
}else if( onoff==0 ){
@@ -142825,7 +144597,7 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
sqlite3_mutex_leave(db->mutex);
db->magic = SQLITE_MAGIC_CLOSED;
sqlite3_mutex_free(db->mutex);
- assert( db->lookaside.nOut==0 ); /* Fails on a lookaside memory leak */
+ assert( sqlite3LookasideUsed(db,0)==0 );
if( db->lookaside.bMalloced ){
sqlite3_free(db->lookaside.pStart);
}
@@ -142853,7 +144625,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
** the database rollback and schema reset, which can cause false
** corruption reports in some cases. */
sqlite3BtreeEnterAll(db);
- schemaChange = (db->flags & SQLITE_InternChanges)!=0 && db->init.busy==0;
+ schemaChange = (db->mDbFlags & DBFLAG_SchemaChange)!=0 && db->init.busy==0;
for(i=0; i<db->nDb; i++){
Btree *p = db->aDb[i].pBt;
@@ -142867,7 +144639,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
sqlite3VtabRollback(db);
sqlite3EndBenignMalloc();
- if( (db->flags&SQLITE_InternChanges)!=0 && db->init.busy==0 ){
+ if( (db->mDbFlags&DBFLAG_SchemaChange)!=0 && db->init.busy==0 ){
sqlite3ExpirePreparedStatements(db);
sqlite3ResetAllSchemasOfConnection(db);
}
@@ -142908,9 +144680,10 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){
case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break;
case SQLITE_READONLY: zName = "SQLITE_READONLY"; break;
case SQLITE_READONLY_RECOVERY: zName = "SQLITE_READONLY_RECOVERY"; break;
- case SQLITE_READONLY_CANTLOCK: zName = "SQLITE_READONLY_CANTLOCK"; break;
+ case SQLITE_READONLY_CANTINIT: zName = "SQLITE_READONLY_CANTINIT"; break;
case SQLITE_READONLY_ROLLBACK: zName = "SQLITE_READONLY_ROLLBACK"; break;
case SQLITE_READONLY_DBMOVED: zName = "SQLITE_READONLY_DBMOVED"; break;
+ case SQLITE_READONLY_DIRECTORY: zName = "SQLITE_READONLY_DIRECTORY";break;
case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break;
case SQLITE_IOERR: zName = "SQLITE_IOERR"; break;
case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break;
@@ -143769,7 +145542,8 @@ SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
** checkpointed. If an error is encountered it is returned immediately -
** no attempt is made to checkpoint any remaining databases.
**
-** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
+** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL, RESTART
+** or TRUNCATE.
*/
SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
int rc = SQLITE_OK; /* Return code */
@@ -144415,6 +146189,7 @@ static int openDatabase(
}else{
isThreadsafe = sqlite3GlobalConfig.bFullMutex;
}
+
if( flags & SQLITE_OPEN_PRIVATECACHE ){
flags &= ~SQLITE_OPEN_SHAREDCACHE;
}else if( sqlite3GlobalConfig.sharedCacheEnabled ){
@@ -144447,13 +146222,20 @@ static int openDatabase(
/* Allocate the sqlite data structure */
db = sqlite3MallocZero( sizeof(sqlite3) );
if( db==0 ) goto opendb_out;
- if( isThreadsafe ){
+ if( isThreadsafe
+#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS
+ || sqlite3GlobalConfig.bCoreMutex
+#endif
+ ){
db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
if( db->mutex==0 ){
sqlite3_free(db);
db = 0;
goto opendb_out;
}
+ if( isThreadsafe==0 ){
+ sqlite3MutexWarnOnContention(db->mutex);
+ }
}
sqlite3_mutex_enter(db->mutex);
db->errMask = 0xff;
@@ -144635,7 +146417,7 @@ static int openDatabase(
}
#endif
-#ifdef SQLITE_ENABLE_ICU
+#if defined(SQLITE_ENABLE_ICU) || defined(SQLITE_ENABLE_ICU_COLLATIONS)
if( !db->mallocFailed && rc==SQLITE_OK ){
rc = sqlite3IcuInit(db);
}
@@ -144647,6 +146429,12 @@ static int openDatabase(
}
#endif
+#ifdef SQLITE_ENABLE_DBPAGE_VTAB
+ if( !db->mallocFailed && rc==SQLITE_OK){
+ rc = sqlite3DbpageRegister(db);
+ }
+#endif
+
#ifdef SQLITE_ENABLE_DBSTAT_VTAB
if( !db->mallocFailed && rc==SQLITE_OK){
rc = sqlite3DbstatRegister(db);
@@ -144931,37 +146719,37 @@ SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
** 2. Invoke sqlite3_log() to provide the source code location where
** a low-level error is first detected.
*/
-static int reportError(int iErr, int lineno, const char *zType){
+SQLITE_PRIVATE int sqlite3ReportError(int iErr, int lineno, const char *zType){
sqlite3_log(iErr, "%s at line %d of [%.10s]",
zType, lineno, 20+sqlite3_sourceid());
return iErr;
}
SQLITE_PRIVATE int sqlite3CorruptError(int lineno){
testcase( sqlite3GlobalConfig.xLog!=0 );
- return reportError(SQLITE_CORRUPT, lineno, "database corruption");
+ return sqlite3ReportError(SQLITE_CORRUPT, lineno, "database corruption");
}
SQLITE_PRIVATE int sqlite3MisuseError(int lineno){
testcase( sqlite3GlobalConfig.xLog!=0 );
- return reportError(SQLITE_MISUSE, lineno, "misuse");
+ return sqlite3ReportError(SQLITE_MISUSE, lineno, "misuse");
}
SQLITE_PRIVATE int sqlite3CantopenError(int lineno){
testcase( sqlite3GlobalConfig.xLog!=0 );
- return reportError(SQLITE_CANTOPEN, lineno, "cannot open file");
+ return sqlite3ReportError(SQLITE_CANTOPEN, lineno, "cannot open file");
}
#ifdef SQLITE_DEBUG
SQLITE_PRIVATE int sqlite3CorruptPgnoError(int lineno, Pgno pgno){
char zMsg[100];
sqlite3_snprintf(sizeof(zMsg), zMsg, "database corruption page %d", pgno);
testcase( sqlite3GlobalConfig.xLog!=0 );
- return reportError(SQLITE_CORRUPT, lineno, zMsg);
+ return sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg);
}
SQLITE_PRIVATE int sqlite3NomemError(int lineno){
testcase( sqlite3GlobalConfig.xLog!=0 );
- return reportError(SQLITE_NOMEM, lineno, "OOM");
+ return sqlite3ReportError(SQLITE_NOMEM, lineno, "OOM");
}
SQLITE_PRIVATE int sqlite3IoerrnomemError(int lineno){
testcase( sqlite3GlobalConfig.xLog!=0 );
- return reportError(SQLITE_IOERR_NOMEM, lineno, "I/O OOM error");
+ return sqlite3ReportError(SQLITE_IOERR_NOMEM, lineno, "I/O OOM error");
}
#endif
@@ -145306,7 +147094,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){
** This action provides a run-time test to see how the ALWAYS and
** NEVER macros were defined at compile-time.
**
- ** The return value is ALWAYS(X).
+ ** The return value is ALWAYS(X) if X is true, or 0 if X is false.
**
** The recommended test is X==2. If the return value is 2, that means
** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
@@ -145329,7 +147117,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){
*/
case SQLITE_TESTCTRL_ALWAYS: {
int x = va_arg(ap,int);
- rc = ALWAYS(x);
+ rc = x ? ALWAYS(x) : 0;
break;
}
@@ -145396,22 +147184,6 @@ SQLITE_API int sqlite3_test_control(int op, ...){
}
#endif
- /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
- **
- ** Pass pFree into sqlite3ScratchFree().
- ** If sz>0 then allocate a scratch buffer into pNew.
- */
- case SQLITE_TESTCTRL_SCRATCHMALLOC: {
- void *pFree, **ppNew;
- int sz;
- sz = va_arg(ap, int);
- ppNew = va_arg(ap, void**);
- pFree = va_arg(ap, void*);
- if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
- sqlite3ScratchFree(pFree);
- break;
- }
-
/* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
**
** If parameter onoff is non-zero, configure the wrappers so that all
@@ -145505,6 +147277,22 @@ SQLITE_API int sqlite3_test_control(int op, ...){
sqlite3_mutex_leave(db->mutex);
break;
}
+
+#if defined(YYCOVERAGE)
+ /* sqlite3_test_control(SQLITE_TESTCTRL_PARSER_COVERAGE, FILE *out)
+ **
+ ** This test control (only available when SQLite is compiled with
+ ** -DYYCOVERAGE) writes a report onto "out" that shows all
+ ** state/lookahead combinations in the parser state machine
+ ** which are never exercised. If any state is missed, make the
+ ** return code SQLITE_ERROR.
+ */
+ case SQLITE_TESTCTRL_PARSER_COVERAGE: {
+ FILE *out = va_arg(ap, FILE*);
+ if( sqlite3ParserCoverage(out) ) rc = SQLITE_ERROR;
+ break;
+ }
+#endif /* defined(YYCOVERAGE) */
}
va_end(ap);
#endif /* SQLITE_UNTESTABLE */
@@ -145553,7 +147341,7 @@ SQLITE_API sqlite3_int64 sqlite3_uri_int64(
){
const char *z = sqlite3_uri_parameter(zFilename, zParam);
sqlite3_int64 v;
- if( z && sqlite3DecOrHexToI64(z, &v)==SQLITE_OK ){
+ if( z && sqlite3DecOrHexToI64(z, &v)==0 ){
bDflt = v;
}
return bDflt;
@@ -165309,7 +167097,8 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){
** child page.
*/
-#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE)
+#if !defined(SQLITE_CORE) \
+ || (defined(SQLITE_ENABLE_RTREE) && !defined(SQLITE_OMIT_VIRTUALTABLE))
#ifndef SQLITE_CORE
/* #include "sqlite3ext.h" */
@@ -165466,7 +167255,7 @@ struct RtreeSearchPoint {
** The smallest possible node-size is (512-64)==448 bytes. And the largest
** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates).
** Therefore all non-root nodes must contain at least 3 entries. Since
-** 2^40 is greater than 2^64, an r-tree structure always has a depth of
+** 3^40 is greater than 2^64, an r-tree structure always has a depth of
** 40 or less.
*/
#define RTREE_MAX_DEPTH 40
@@ -167278,7 +169067,7 @@ static int ChooseLeaf(
){
int rc;
int ii;
- RtreeNode *pNode;
+ RtreeNode *pNode = 0;
rc = nodeAcquire(pRtree, 1, 0, &pNode);
for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
@@ -168110,7 +169899,7 @@ static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
int rc; /* Return code */
RtreeNode *pLeaf = 0; /* Leaf node containing record iDelete */
int iCell; /* Index of iDelete cell in pLeaf */
- RtreeNode *pRoot; /* Root node of rtree structure */
+ RtreeNode *pRoot = 0; /* Root node of rtree structure */
/* Obtain a reference to the root node to initialize Rtree.iDepth */
@@ -168153,7 +169942,7 @@ static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
*/
if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){
int rc2;
- RtreeNode *pChild;
+ RtreeNode *pChild = 0;
i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
if( rc==SQLITE_OK ){
@@ -168671,7 +170460,7 @@ static int getNodeSize(
if( rc!=SQLITE_OK ){
*pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
}else if( pRtree->iNodeSize<(512-64) ){
- rc = SQLITE_CORRUPT;
+ rc = SQLITE_CORRUPT_VTAB;
*pzErr = sqlite3_mprintf("undersize RTree blobs in \"%q_node\"",
pRtree->zName);
}
@@ -168866,6 +170655,463 @@ static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
}
/*
+** Context object passed between the various routines that make up the
+** implementation of integrity-check function rtreecheck().
+*/
+typedef struct RtreeCheck RtreeCheck;
+struct RtreeCheck {
+ sqlite3 *db; /* Database handle */
+ const char *zDb; /* Database containing rtree table */
+ const char *zTab; /* Name of rtree table */
+ int bInt; /* True for rtree_i32 table */
+ int nDim; /* Number of dimensions for this rtree tbl */
+ sqlite3_stmt *pGetNode; /* Statement used to retrieve nodes */
+ sqlite3_stmt *aCheckMapping[2]; /* Statements to query %_parent/%_rowid */
+ int nLeaf; /* Number of leaf cells in table */
+ int nNonLeaf; /* Number of non-leaf cells in table */
+ int rc; /* Return code */
+ char *zReport; /* Message to report */
+ int nErr; /* Number of lines in zReport */
+};
+
+#define RTREE_CHECK_MAX_ERROR 100
+
+/*
+** Reset SQL statement pStmt. If the sqlite3_reset() call returns an error,
+** and RtreeCheck.rc==SQLITE_OK, set RtreeCheck.rc to the error code.
+*/
+static void rtreeCheckReset(RtreeCheck *pCheck, sqlite3_stmt *pStmt){
+ int rc = sqlite3_reset(pStmt);
+ if( pCheck->rc==SQLITE_OK ) pCheck->rc = rc;
+}
+
+/*
+** The second and subsequent arguments to this function are a format string
+** and printf style arguments. This function formats the string and attempts
+** to compile it as an SQL statement.
+**
+** If successful, a pointer to the new SQL statement is returned. Otherwise,
+** NULL is returned and an error code left in RtreeCheck.rc.
+*/
+static sqlite3_stmt *rtreeCheckPrepare(
+ RtreeCheck *pCheck, /* RtreeCheck object */
+ const char *zFmt, ... /* Format string and trailing args */
+){
+ va_list ap;
+ char *z;
+ sqlite3_stmt *pRet = 0;
+
+ va_start(ap, zFmt);
+ z = sqlite3_vmprintf(zFmt, ap);
+
+ if( pCheck->rc==SQLITE_OK ){
+ if( z==0 ){
+ pCheck->rc = SQLITE_NOMEM;
+ }else{
+ pCheck->rc = sqlite3_prepare_v2(pCheck->db, z, -1, &pRet, 0);
+ }
+ }
+
+ sqlite3_free(z);
+ va_end(ap);
+ return pRet;
+}
+
+/*
+** The second and subsequent arguments to this function are a printf()
+** style format string and arguments. This function formats the string and
+** appends it to the report being accumuated in pCheck.
+*/
+static void rtreeCheckAppendMsg(RtreeCheck *pCheck, const char *zFmt, ...){
+ va_list ap;
+ va_start(ap, zFmt);
+ if( pCheck->rc==SQLITE_OK && pCheck->nErr<RTREE_CHECK_MAX_ERROR ){
+ char *z = sqlite3_vmprintf(zFmt, ap);
+ if( z==0 ){
+ pCheck->rc = SQLITE_NOMEM;
+ }else{
+ pCheck->zReport = sqlite3_mprintf("%z%s%z",
+ pCheck->zReport, (pCheck->zReport ? "\n" : ""), z
+ );
+ if( pCheck->zReport==0 ){
+ pCheck->rc = SQLITE_NOMEM;
+ }
+ }
+ pCheck->nErr++;
+ }
+ va_end(ap);
+}
+
+/*
+** This function is a no-op if there is already an error code stored
+** in the RtreeCheck object indicated by the first argument. NULL is
+** returned in this case.
+**
+** Otherwise, the contents of rtree table node iNode are loaded from
+** the database and copied into a buffer obtained from sqlite3_malloc().
+** If no error occurs, a pointer to the buffer is returned and (*pnNode)
+** is set to the size of the buffer in bytes.
+**
+** Or, if an error does occur, NULL is returned and an error code left
+** in the RtreeCheck object. The final value of *pnNode is undefined in
+** this case.
+*/
+static u8 *rtreeCheckGetNode(RtreeCheck *pCheck, i64 iNode, int *pnNode){
+ u8 *pRet = 0; /* Return value */
+
+ assert( pCheck->rc==SQLITE_OK );
+ if( pCheck->pGetNode==0 ){
+ pCheck->pGetNode = rtreeCheckPrepare(pCheck,
+ "SELECT data FROM %Q.'%q_node' WHERE nodeno=?",
+ pCheck->zDb, pCheck->zTab
+ );
+ }
+
+ if( pCheck->rc==SQLITE_OK ){
+ sqlite3_bind_int64(pCheck->pGetNode, 1, iNode);
+ if( sqlite3_step(pCheck->pGetNode)==SQLITE_ROW ){
+ int nNode = sqlite3_column_bytes(pCheck->pGetNode, 0);
+ const u8 *pNode = (const u8*)sqlite3_column_blob(pCheck->pGetNode, 0);
+ pRet = sqlite3_malloc(nNode);
+ if( pRet==0 ){
+ pCheck->rc = SQLITE_NOMEM;
+ }else{
+ memcpy(pRet, pNode, nNode);
+ *pnNode = nNode;
+ }
+ }
+ rtreeCheckReset(pCheck, pCheck->pGetNode);
+ if( pCheck->rc==SQLITE_OK && pRet==0 ){
+ rtreeCheckAppendMsg(pCheck, "Node %lld missing from database", iNode);
+ }
+ }
+
+ return pRet;
+}
+
+/*
+** This function is used to check that the %_parent (if bLeaf==0) or %_rowid
+** (if bLeaf==1) table contains a specified entry. The schemas of the
+** two tables are:
+**
+** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
+** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
+**
+** In both cases, this function checks that there exists an entry with
+** IPK value iKey and the second column set to iVal.
+**
+*/
+static void rtreeCheckMapping(
+ RtreeCheck *pCheck, /* RtreeCheck object */
+ int bLeaf, /* True for a leaf cell, false for interior */
+ i64 iKey, /* Key for mapping */
+ i64 iVal /* Expected value for mapping */
+){
+ int rc;
+ sqlite3_stmt *pStmt;
+ const char *azSql[2] = {
+ "SELECT parentnode FROM %Q.'%q_parent' WHERE nodeno=?",
+ "SELECT nodeno FROM %Q.'%q_rowid' WHERE rowid=?"
+ };
+
+ assert( bLeaf==0 || bLeaf==1 );
+ if( pCheck->aCheckMapping[bLeaf]==0 ){
+ pCheck->aCheckMapping[bLeaf] = rtreeCheckPrepare(pCheck,
+ azSql[bLeaf], pCheck->zDb, pCheck->zTab
+ );
+ }
+ if( pCheck->rc!=SQLITE_OK ) return;
+
+ pStmt = pCheck->aCheckMapping[bLeaf];
+ sqlite3_bind_int64(pStmt, 1, iKey);
+ rc = sqlite3_step(pStmt);
+ if( rc==SQLITE_DONE ){
+ rtreeCheckAppendMsg(pCheck, "Mapping (%lld -> %lld) missing from %s table",
+ iKey, iVal, (bLeaf ? "%_rowid" : "%_parent")
+ );
+ }else if( rc==SQLITE_ROW ){
+ i64 ii = sqlite3_column_int64(pStmt, 0);
+ if( ii!=iVal ){
+ rtreeCheckAppendMsg(pCheck,
+ "Found (%lld -> %lld) in %s table, expected (%lld -> %lld)",
+ iKey, ii, (bLeaf ? "%_rowid" : "%_parent"), iKey, iVal
+ );
+ }
+ }
+ rtreeCheckReset(pCheck, pStmt);
+}
+
+/*
+** Argument pCell points to an array of coordinates stored on an rtree page.
+** This function checks that the coordinates are internally consistent (no
+** x1>x2 conditions) and adds an error message to the RtreeCheck object
+** if they are not.
+**
+** Additionally, if pParent is not NULL, then it is assumed to point to
+** the array of coordinates on the parent page that bound the page
+** containing pCell. In this case it is also verified that the two
+** sets of coordinates are mutually consistent and an error message added
+** to the RtreeCheck object if they are not.
+*/
+static void rtreeCheckCellCoord(
+ RtreeCheck *pCheck,
+ i64 iNode, /* Node id to use in error messages */
+ int iCell, /* Cell number to use in error messages */
+ u8 *pCell, /* Pointer to cell coordinates */
+ u8 *pParent /* Pointer to parent coordinates */
+){
+ RtreeCoord c1, c2;
+ RtreeCoord p1, p2;
+ int i;
+
+ for(i=0; i<pCheck->nDim; i++){
+ readCoord(&pCell[4*2*i], &c1);
+ readCoord(&pCell[4*(2*i + 1)], &c2);
+
+ /* printf("%e, %e\n", c1.u.f, c2.u.f); */
+ if( pCheck->bInt ? c1.i>c2.i : c1.f>c2.f ){
+ rtreeCheckAppendMsg(pCheck,
+ "Dimension %d of cell %d on node %lld is corrupt", i, iCell, iNode
+ );
+ }
+
+ if( pParent ){
+ readCoord(&pParent[4*2*i], &p1);
+ readCoord(&pParent[4*(2*i + 1)], &p2);
+
+ if( (pCheck->bInt ? c1.i<p1.i : c1.f<p1.f)
+ || (pCheck->bInt ? c2.i>p2.i : c2.f>p2.f)
+ ){
+ rtreeCheckAppendMsg(pCheck,
+ "Dimension %d of cell %d on node %lld is corrupt relative to parent"
+ , i, iCell, iNode
+ );
+ }
+ }
+ }
+}
+
+/*
+** Run rtreecheck() checks on node iNode, which is at depth iDepth within
+** the r-tree structure. Argument aParent points to the array of coordinates
+** that bound node iNode on the parent node.
+**
+** If any problems are discovered, an error message is appended to the
+** report accumulated in the RtreeCheck object.
+*/
+static void rtreeCheckNode(
+ RtreeCheck *pCheck,
+ int iDepth, /* Depth of iNode (0==leaf) */
+ u8 *aParent, /* Buffer containing parent coords */
+ i64 iNode /* Node to check */
+){
+ u8 *aNode = 0;
+ int nNode = 0;
+
+ assert( iNode==1 || aParent!=0 );
+ assert( pCheck->nDim>0 );
+
+ aNode = rtreeCheckGetNode(pCheck, iNode, &nNode);
+ if( aNode ){
+ if( nNode<4 ){
+ rtreeCheckAppendMsg(pCheck,
+ "Node %lld is too small (%d bytes)", iNode, nNode
+ );
+ }else{
+ int nCell; /* Number of cells on page */
+ int i; /* Used to iterate through cells */
+ if( aParent==0 ){
+ iDepth = readInt16(aNode);
+ if( iDepth>RTREE_MAX_DEPTH ){
+ rtreeCheckAppendMsg(pCheck, "Rtree depth out of range (%d)", iDepth);
+ sqlite3_free(aNode);
+ return;
+ }
+ }
+ nCell = readInt16(&aNode[2]);
+ if( (4 + nCell*(8 + pCheck->nDim*2*4))>nNode ){
+ rtreeCheckAppendMsg(pCheck,
+ "Node %lld is too small for cell count of %d (%d bytes)",
+ iNode, nCell, nNode
+ );
+ }else{
+ for(i=0; i<nCell; i++){
+ u8 *pCell = &aNode[4 + i*(8 + pCheck->nDim*2*4)];
+ i64 iVal = readInt64(pCell);
+ rtreeCheckCellCoord(pCheck, iNode, i, &pCell[8], aParent);
+
+ if( iDepth>0 ){
+ rtreeCheckMapping(pCheck, 0, iVal, iNode);
+ rtreeCheckNode(pCheck, iDepth-1, &pCell[8], iVal);
+ pCheck->nNonLeaf++;
+ }else{
+ rtreeCheckMapping(pCheck, 1, iVal, iNode);
+ pCheck->nLeaf++;
+ }
+ }
+ }
+ }
+ sqlite3_free(aNode);
+ }
+}
+
+/*
+** The second argument to this function must be either "_rowid" or
+** "_parent". This function checks that the number of entries in the
+** %_rowid or %_parent table is exactly nExpect. If not, it adds
+** an error message to the report in the RtreeCheck object indicated
+** by the first argument.
+*/
+static void rtreeCheckCount(RtreeCheck *pCheck, const char *zTbl, i64 nExpect){
+ if( pCheck->rc==SQLITE_OK ){
+ sqlite3_stmt *pCount;
+ pCount = rtreeCheckPrepare(pCheck, "SELECT count(*) FROM %Q.'%q%s'",
+ pCheck->zDb, pCheck->zTab, zTbl
+ );
+ if( pCount ){
+ if( sqlite3_step(pCount)==SQLITE_ROW ){
+ i64 nActual = sqlite3_column_int64(pCount, 0);
+ if( nActual!=nExpect ){
+ rtreeCheckAppendMsg(pCheck, "Wrong number of entries in %%%s table"
+ " - expected %lld, actual %lld" , zTbl, nExpect, nActual
+ );
+ }
+ }
+ pCheck->rc = sqlite3_finalize(pCount);
+ }
+ }
+}
+
+/*
+** This function does the bulk of the work for the rtree integrity-check.
+** It is called by rtreecheck(), which is the SQL function implementation.
+*/
+static int rtreeCheckTable(
+ sqlite3 *db, /* Database handle to access db through */
+ const char *zDb, /* Name of db ("main", "temp" etc.) */
+ const char *zTab, /* Name of rtree table to check */
+ char **pzReport /* OUT: sqlite3_malloc'd report text */
+){
+ RtreeCheck check; /* Common context for various routines */
+ sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */
+ int bEnd = 0; /* True if transaction should be closed */
+
+ /* Initialize the context object */
+ memset(&check, 0, sizeof(check));
+ check.db = db;
+ check.zDb = zDb;
+ check.zTab = zTab;
+
+ /* If there is not already an open transaction, open one now. This is
+ ** to ensure that the queries run as part of this integrity-check operate
+ ** on a consistent snapshot. */
+ if( sqlite3_get_autocommit(db) ){
+ check.rc = sqlite3_exec(db, "BEGIN", 0, 0, 0);
+ bEnd = 1;
+ }
+
+ /* Find number of dimensions in the rtree table. */
+ pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.%Q", zDb, zTab);
+ if( pStmt ){
+ int rc;
+ check.nDim = (sqlite3_column_count(pStmt) - 1) / 2;
+ if( check.nDim<1 ){
+ rtreeCheckAppendMsg(&check, "Schema corrupt or not an rtree");
+ }else if( SQLITE_ROW==sqlite3_step(pStmt) ){
+ check.bInt = (sqlite3_column_type(pStmt, 1)==SQLITE_INTEGER);
+ }
+ rc = sqlite3_finalize(pStmt);
+ if( rc!=SQLITE_CORRUPT ) check.rc = rc;
+ }
+
+ /* Do the actual integrity-check */
+ if( check.nDim>=1 ){
+ if( check.rc==SQLITE_OK ){
+ rtreeCheckNode(&check, 0, 0, 1);
+ }
+ rtreeCheckCount(&check, "_rowid", check.nLeaf);
+ rtreeCheckCount(&check, "_parent", check.nNonLeaf);
+ }
+
+ /* Finalize SQL statements used by the integrity-check */
+ sqlite3_finalize(check.pGetNode);
+ sqlite3_finalize(check.aCheckMapping[0]);
+ sqlite3_finalize(check.aCheckMapping[1]);
+
+ /* If one was opened, close the transaction */
+ if( bEnd ){
+ int rc = sqlite3_exec(db, "END", 0, 0, 0);
+ if( check.rc==SQLITE_OK ) check.rc = rc;
+ }
+ *pzReport = check.zReport;
+ return check.rc;
+}
+
+/*
+** Usage:
+**
+** rtreecheck(<rtree-table>);
+** rtreecheck(<database>, <rtree-table>);
+**
+** Invoking this SQL function runs an integrity-check on the named rtree
+** table. The integrity-check verifies the following:
+**
+** 1. For each cell in the r-tree structure (%_node table), that:
+**
+** a) for each dimension, (coord1 <= coord2).
+**
+** b) unless the cell is on the root node, that the cell is bounded
+** by the parent cell on the parent node.
+**
+** c) for leaf nodes, that there is an entry in the %_rowid
+** table corresponding to the cell's rowid value that
+** points to the correct node.
+**
+** d) for cells on non-leaf nodes, that there is an entry in the
+** %_parent table mapping from the cell's child node to the
+** node that it resides on.
+**
+** 2. That there are the same number of entries in the %_rowid table
+** as there are leaf cells in the r-tree structure, and that there
+** is a leaf cell that corresponds to each entry in the %_rowid table.
+**
+** 3. That there are the same number of entries in the %_parent table
+** as there are non-leaf cells in the r-tree structure, and that
+** there is a non-leaf cell that corresponds to each entry in the
+** %_parent table.
+*/
+static void rtreecheck(
+ sqlite3_context *ctx,
+ int nArg,
+ sqlite3_value **apArg
+){
+ if( nArg!=1 && nArg!=2 ){
+ sqlite3_result_error(ctx,
+ "wrong number of arguments to function rtreecheck()", -1
+ );
+ }else{
+ int rc;
+ char *zReport = 0;
+ const char *zDb = (const char*)sqlite3_value_text(apArg[0]);
+ const char *zTab;
+ if( nArg==1 ){
+ zTab = zDb;
+ zDb = "main";
+ }else{
+ zTab = (const char*)sqlite3_value_text(apArg[1]);
+ }
+ rc = rtreeCheckTable(sqlite3_context_db_handle(ctx), zDb, zTab, &zReport);
+ if( rc==SQLITE_OK ){
+ sqlite3_result_text(ctx, zReport ? zReport : "ok", -1, SQLITE_TRANSIENT);
+ }else{
+ sqlite3_result_error_code(ctx, rc);
+ }
+ sqlite3_free(zReport);
+ }
+}
+
+
+/*
** Register the r-tree module with database handle db. This creates the
** virtual table module "rtree" and the debugging/analysis scalar
** function "rtreenode".
@@ -168879,6 +171125,9 @@ SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
}
if( rc==SQLITE_OK ){
+ rc = sqlite3_create_function(db, "rtreecheck", -1, utf8, 0,rtreecheck, 0,0);
+ }
+ if( rc==SQLITE_OK ){
#ifdef SQLITE_RTREE_INT_ONLY
void *c = (void *)RTREE_COORD_INT32;
#else
@@ -169064,7 +171313,9 @@ SQLITE_API int sqlite3_rtree_init(
** provide case-independent matching.
*/
-#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
+#if !defined(SQLITE_CORE) \
+ || defined(SQLITE_ENABLE_ICU) \
+ || defined(SQLITE_ENABLE_ICU_COLLATIONS)
/* Include ICU headers */
#include <unicode/utypes.h>
@@ -169082,6 +171333,26 @@ SQLITE_API int sqlite3_rtree_init(
#endif
/*
+** This function is called when an ICU function called from within
+** the implementation of an SQL scalar function returns an error.
+**
+** The scalar function context passed as the first argument is
+** loaded with an error message based on the following two args.
+*/
+static void icuFunctionError(
+ sqlite3_context *pCtx, /* SQLite scalar function context */
+ const char *zName, /* Name of ICU function that failed */
+ UErrorCode e /* Error code returned by ICU function */
+){
+ char zBuf[128];
+ sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e));
+ zBuf[127] = '\0';
+ sqlite3_result_error(pCtx, zBuf, -1);
+}
+
+#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
+
+/*
** Maximum length (in bytes) of the pattern in a LIKE or GLOB
** operator.
*/
@@ -169138,15 +171409,15 @@ static int icuLikeCompare(
const uint8_t *zString, /* The UTF-8 string to compare against */
const UChar32 uEsc /* The escape character */
){
- static const int MATCH_ONE = (UChar32)'_';
- static const int MATCH_ALL = (UChar32)'%';
+ static const uint32_t MATCH_ONE = (uint32_t)'_';
+ static const uint32_t MATCH_ALL = (uint32_t)'%';
int prevEscape = 0; /* True if the previous character was uEsc */
while( 1 ){
/* Read (and consume) the next character from the input pattern. */
- UChar32 uPattern;
+ uint32_t uPattern;
SQLITE_ICU_READ_UTF8(zPattern, uPattern);
if( uPattern==0 ) break;
@@ -169188,16 +171459,16 @@ static int icuLikeCompare(
if( *zString==0 ) return 0;
SQLITE_ICU_SKIP_UTF8(zString);
- }else if( !prevEscape && uPattern==uEsc){
+ }else if( !prevEscape && uPattern==(uint32_t)uEsc){
/* Case 3. */
prevEscape = 1;
}else{
/* Case 4. */
- UChar32 uString;
+ uint32_t uString;
SQLITE_ICU_READ_UTF8(zString, uString);
- uString = u_foldCase(uString, U_FOLD_CASE_DEFAULT);
- uPattern = u_foldCase(uPattern, U_FOLD_CASE_DEFAULT);
+ uString = (uint32_t)u_foldCase((UChar32)uString, U_FOLD_CASE_DEFAULT);
+ uPattern = (uint32_t)u_foldCase((UChar32)uPattern, U_FOLD_CASE_DEFAULT);
if( uString!=uPattern ){
return 0;
}
@@ -169261,24 +171532,6 @@ static void icuLikeFunc(
}
/*
-** This function is called when an ICU function called from within
-** the implementation of an SQL scalar function returns an error.
-**
-** The scalar function context passed as the first argument is
-** loaded with an error message based on the following two args.
-*/
-static void icuFunctionError(
- sqlite3_context *pCtx, /* SQLite scalar function context */
- const char *zName, /* Name of ICU function that failed */
- UErrorCode e /* Error code returned by ICU function */
-){
- char zBuf[128];
- sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e));
- zBuf[127] = '\0';
- sqlite3_result_error(pCtx, zBuf, -1);
-}
-
-/*
** Function to delete compiled regexp objects. Registered as
** a destructor function with sqlite3_set_auxdata().
*/
@@ -169443,6 +171696,8 @@ static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){
assert( 0 ); /* Unreachable */
}
+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */
+
/*
** Collation sequence destructor function. The pCtx argument points to
** a UCollator structure previously allocated using ucol_open().
@@ -169537,6 +171792,7 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
} scalars[] = {
{"icu_load_collation", 2, SQLITE_UTF8, 1, icuLoadCollation},
+#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
{"regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, 0, icuRegexpFunc},
{"lower", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16},
{"lower", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16},
@@ -169548,10 +171804,10 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
{"upper", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16},
{"like", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc},
{"like", 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc},
+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */
};
int rc = SQLITE_OK;
int i;
-
for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){
const struct IcuScalar *p = &scalars[i];
@@ -170294,6 +172550,28 @@ SQLITE_API sqlite3rbu *sqlite3rbu_vacuum(
);
/*
+** Configure a limit for the amount of temp space that may be used by
+** the RBU handle passed as the first argument. The new limit is specified
+** in bytes by the second parameter. If it is positive, the limit is updated.
+** If the second parameter to this function is passed zero, then the limit
+** is removed entirely. If the second parameter is negative, the limit is
+** not modified (this is useful for querying the current limit).
+**
+** In all cases the returned value is the current limit in bytes (zero
+** indicates unlimited).
+**
+** If the temp space limit is exceeded during operation, an SQLITE_FULL
+** error is returned.
+*/
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu*, sqlite3_int64);
+
+/*
+** Return the current amount of temp file space, in bytes, currently used by
+** the RBU handle passed as the only argument.
+*/
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu*);
+
+/*
** Internally, each RBU connection uses a separate SQLite database
** connection to access the target and rbu update databases. This
** API allows the application direct access to these database handles.
@@ -170419,7 +172697,7 @@ SQLITE_API sqlite3_int64 sqlite3rbu_progress(sqlite3rbu *pRbu);
** table exists but is not correctly populated, the value of the *pnOne
** output variable during stage 1 is undefined.
*/
-SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int *pnTwo);
+SQLITE_API void sqlite3rbu_bp_progress(sqlite3rbu *pRbu, int *pnOne, int*pnTwo);
/*
** Obtain an indication as to the current stage of an RBU update or vacuum.
@@ -170529,6 +172807,13 @@ SQLITE_API void sqlite3rbu_destroy_vfs(const char *zName);
/* Maximum number of prepared UPDATE statements held by this module */
#define SQLITE_RBU_UPDATE_CACHESIZE 16
+/* Delta checksums disabled by default. Compile with -DRBU_ENABLE_DELTA_CKSUM
+** to enable checksum verification.
+*/
+#ifndef RBU_ENABLE_DELTA_CKSUM
+# define RBU_ENABLE_DELTA_CKSUM 0
+#endif
+
/*
** Swap two objects of type TYPE.
*/
@@ -170804,6 +173089,8 @@ struct sqlite3rbu {
int pgsz;
u8 *aBuf;
i64 iWalCksum;
+ i64 szTemp; /* Current size of all temp files in use */
+ i64 szTempLimit; /* Total size limit for temp files */
/* Used in RBU vacuum mode only */
int nRbu; /* Number of RBU VFS in the stack */
@@ -170812,23 +173099,33 @@ struct sqlite3rbu {
/*
** An rbu VFS is implemented using an instance of this structure.
+**
+** Variable pRbu is only non-NULL for automatically created RBU VFS objects.
+** It is NULL for RBU VFS objects created explicitly using
+** sqlite3rbu_create_vfs(). It is used to track the total amount of temp
+** space used by the RBU handle.
*/
struct rbu_vfs {
sqlite3_vfs base; /* rbu VFS shim methods */
sqlite3_vfs *pRealVfs; /* Underlying VFS */
sqlite3_mutex *mutex; /* Mutex to protect pMain */
+ sqlite3rbu *pRbu; /* Owner RBU object */
rbu_file *pMain; /* Linked list of main db files */
};
/*
** Each file opened by an rbu VFS is represented by an instance of
** the following structure.
+**
+** If this is a temporary file (pRbu!=0 && flags&DELETE_ON_CLOSE), variable
+** "sz" is set to the current size of the database file.
*/
struct rbu_file {
sqlite3_file base; /* sqlite3_file methods */
sqlite3_file *pReal; /* Underlying file handle */
rbu_vfs *pRbuVfs; /* Pointer to the rbu_vfs object */
sqlite3rbu *pRbu; /* Pointer to rbu object (rbu target only) */
+ i64 sz; /* Size of file in bytes (temp only) */
int openFlags; /* Flags this file was opened with */
u32 iCookie; /* Cookie value for main db files */
@@ -170891,6 +173188,7 @@ static unsigned int rbuDeltaGetInt(const char **pz, int *pLen){
return v;
}
+#if RBU_ENABLE_DELTA_CKSUM
/*
** Compute a 32-bit checksum on the N-byte buffer. Return the result.
*/
@@ -170925,6 +173223,7 @@ static unsigned int rbuDeltaChecksum(const char *zIn, size_t N){
}
return sum3;
}
+#endif
/*
** Apply a delta.
@@ -170955,7 +173254,7 @@ static int rbuDeltaApply(
){
unsigned int limit;
unsigned int total = 0;
-#ifndef FOSSIL_OMIT_DELTA_CKSUM_TEST
+#if RBU_ENABLE_DELTA_CKSUM
char *zOrigOut = zOut;
#endif
@@ -171010,7 +173309,7 @@ static int rbuDeltaApply(
case ';': {
zDelta++; lenDelta--;
zOut[0] = 0;
-#ifndef FOSSIL_OMIT_DELTA_CKSUM_TEST
+#if RBU_ENABLE_DELTA_CKSUM
if( cnt!=rbuDeltaChecksum(zOrigOut, total) ){
/* ERROR: bad checksum */
return -1;
@@ -173842,6 +176141,7 @@ static void rbuCreateVfs(sqlite3rbu *p){
sqlite3_vfs *pVfs = sqlite3_vfs_find(zRnd);
assert( pVfs );
p->zVfsName = pVfs->zName;
+ ((rbu_vfs*)pVfs)->pRbu = p;
}
}
@@ -174214,6 +176514,7 @@ SQLITE_API int sqlite3rbu_close(sqlite3rbu *p, char **pzErrmsg){
/* Close the open database handle and VFS object. */
sqlite3_close(p->dbRbu);
sqlite3_close(p->dbMain);
+ assert( p->szTemp==0 );
rbuDeleteVfs(p);
sqlite3_free(p->aBuf);
sqlite3_free(p->aFrame);
@@ -174401,6 +176702,7 @@ SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *p){
*/
static void rbuUnlockShm(rbu_file *p){
+ assert( p->openFlags & SQLITE_OPEN_MAIN_DB );
if( p->pRbu ){
int (*xShmLock)(sqlite3_file*,int,int,int) = p->pReal->pMethods->xShmLock;
int i;
@@ -174414,6 +176716,18 @@ static void rbuUnlockShm(rbu_file *p){
}
/*
+*/
+static int rbuUpdateTempSize(rbu_file *pFd, sqlite3_int64 nNew){
+ sqlite3rbu *pRbu = pFd->pRbu;
+ i64 nDiff = nNew - pFd->sz;
+ pRbu->szTemp += nDiff;
+ pFd->sz = nNew;
+ assert( pRbu->szTemp>=0 );
+ if( pRbu->szTempLimit && pRbu->szTemp>pRbu->szTempLimit ) return SQLITE_FULL;
+ return SQLITE_OK;
+}
+
+/*
** Close an rbu file.
*/
static int rbuVfsClose(sqlite3_file *pFile){
@@ -174438,6 +176752,9 @@ static int rbuVfsClose(sqlite3_file *pFile){
rbuUnlockShm(p);
p->pReal->pMethods->xShmUnmap(p->pReal, 0);
}
+ else if( (p->openFlags & SQLITE_OPEN_DELETEONCLOSE) && p->pRbu ){
+ rbuUpdateTempSize(p, 0);
+ }
/* Close the underlying file handle */
rc = p->pReal->pMethods->xClose(p->pReal);
@@ -174555,11 +176872,19 @@ static int rbuVfsWrite(
assert( p->openFlags & SQLITE_OPEN_MAIN_DB );
rc = rbuCaptureDbWrite(p->pRbu, iOfst);
}else{
- if( pRbu && pRbu->eStage==RBU_STAGE_OAL
- && (p->openFlags & SQLITE_OPEN_WAL)
- && iOfst>=pRbu->iOalSz
- ){
- pRbu->iOalSz = iAmt + iOfst;
+ if( pRbu ){
+ if( pRbu->eStage==RBU_STAGE_OAL
+ && (p->openFlags & SQLITE_OPEN_WAL)
+ && iOfst>=pRbu->iOalSz
+ ){
+ pRbu->iOalSz = iAmt + iOfst;
+ }else if( p->openFlags & SQLITE_OPEN_DELETEONCLOSE ){
+ i64 szNew = iAmt+iOfst;
+ if( szNew>p->sz ){
+ rc = rbuUpdateTempSize(p, szNew);
+ if( rc!=SQLITE_OK ) return rc;
+ }
+ }
}
rc = p->pReal->pMethods->xWrite(p->pReal, zBuf, iAmt, iOfst);
if( rc==SQLITE_OK && iOfst==0 && (p->openFlags & SQLITE_OPEN_MAIN_DB) ){
@@ -174578,6 +176903,10 @@ static int rbuVfsWrite(
*/
static int rbuVfsTruncate(sqlite3_file *pFile, sqlite_int64 size){
rbu_file *p = (rbu_file*)pFile;
+ if( (p->openFlags & SQLITE_OPEN_DELETEONCLOSE) && p->pRbu ){
+ int rc = rbuUpdateTempSize(p, size);
+ if( rc!=SQLITE_OK ) return rc;
+ }
return p->pReal->pMethods->xTruncate(p->pReal, size);
}
@@ -174967,6 +177296,8 @@ static int rbuVfsOpen(
pDb->pWalFd = pFd;
}
}
+ }else{
+ pFd->pRbu = pRbuVfs->pRbu;
}
if( oflags & SQLITE_OPEN_MAIN_DB
@@ -175043,7 +177374,9 @@ static int rbuVfsAccess(
if( *pResOut ){
rc = SQLITE_CANTOPEN;
}else{
- *pResOut = 1;
+ sqlite3_int64 sz = 0;
+ rc = rbuVfsFileSize(&pDb->base, &sz);
+ *pResOut = (sz>0);
}
}
}
@@ -175232,6 +177565,20 @@ SQLITE_API int sqlite3rbu_create_vfs(const char *zName, const char *zParent){
return rc;
}
+/*
+** Configure the aggregate temp file size limit for this RBU handle.
+*/
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size_limit(sqlite3rbu *pRbu, sqlite3_int64 n){
+ if( n>=0 ){
+ pRbu->szTempLimit = n;
+ }
+ return pRbu->szTempLimit;
+}
+
+SQLITE_API sqlite3_int64 sqlite3rbu_temp_size(sqlite3rbu *pRbu){
+ return pRbu->szTemp;
+}
+
/**************************************************************************/
@@ -175946,6 +178293,420 @@ SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3 *db){ return SQLITE_OK; }
#endif /* SQLITE_ENABLE_DBSTAT_VTAB */
/************** End of dbstat.c **********************************************/
+/************** Begin file dbpage.c ******************************************/
+/*
+** 2017-10-11
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+******************************************************************************
+**
+** This file contains an implementation of the "sqlite_dbpage" virtual table.
+**
+** The sqlite_dbpage virtual table is used to read or write whole raw
+** pages of the database file. The pager interface is used so that
+** uncommitted changes and changes recorded in the WAL file are correctly
+** retrieved.
+**
+** Usage example:
+**
+** SELECT data FROM sqlite_dbpage('aux1') WHERE pgno=123;
+**
+** This is an eponymous virtual table so it does not need to be created before
+** use. The optional argument to the sqlite_dbpage() table name is the
+** schema for the database file that is to be read. The default schema is
+** "main".
+**
+** The data field of sqlite_dbpage table can be updated. The new
+** value must be a BLOB which is the correct page size, otherwise the
+** update fails. Rows may not be deleted or inserted.
+*/
+
+/* #include "sqliteInt.h" ** Requires access to internal data structures ** */
+#if (defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)) \
+ && !defined(SQLITE_OMIT_VIRTUALTABLE)
+
+typedef struct DbpageTable DbpageTable;
+typedef struct DbpageCursor DbpageCursor;
+
+struct DbpageCursor {
+ sqlite3_vtab_cursor base; /* Base class. Must be first */
+ int pgno; /* Current page number */
+ int mxPgno; /* Last page to visit on this scan */
+ Pager *pPager; /* Pager being read/written */
+ DbPage *pPage1; /* Page 1 of the database */
+ int iDb; /* Index of database to analyze */
+ int szPage; /* Size of each page in bytes */
+};
+
+struct DbpageTable {
+ sqlite3_vtab base; /* Base class. Must be first */
+ sqlite3 *db; /* The database */
+};
+
+/* Columns */
+#define DBPAGE_COLUMN_PGNO 0
+#define DBPAGE_COLUMN_DATA 1
+#define DBPAGE_COLUMN_SCHEMA 2
+
+
+
+/*
+** Connect to or create a dbpagevfs virtual table.
+*/
+static int dbpageConnect(
+ sqlite3 *db,
+ void *pAux,
+ int argc, const char *const*argv,
+ sqlite3_vtab **ppVtab,
+ char **pzErr
+){
+ DbpageTable *pTab = 0;
+ int rc = SQLITE_OK;
+
+ rc = sqlite3_declare_vtab(db,
+ "CREATE TABLE x(pgno INTEGER PRIMARY KEY, data BLOB, schema HIDDEN)");
+ if( rc==SQLITE_OK ){
+ pTab = (DbpageTable *)sqlite3_malloc64(sizeof(DbpageTable));
+ if( pTab==0 ) rc = SQLITE_NOMEM_BKPT;
+ }
+
+ assert( rc==SQLITE_OK || pTab==0 );
+ if( rc==SQLITE_OK ){
+ memset(pTab, 0, sizeof(DbpageTable));
+ pTab->db = db;
+ }
+
+ *ppVtab = (sqlite3_vtab*)pTab;
+ return rc;
+}
+
+/*
+** Disconnect from or destroy a dbpagevfs virtual table.
+*/
+static int dbpageDisconnect(sqlite3_vtab *pVtab){
+ sqlite3_free(pVtab);
+ return SQLITE_OK;
+}
+
+/*
+** idxNum:
+**
+** 0 schema=main, full table scan
+** 1 schema=main, pgno=?1
+** 2 schema=?1, full table scan
+** 3 schema=?1, pgno=?2
+*/
+static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
+ int i;
+ int iPlan = 0;
+
+ /* If there is a schema= constraint, it must be honored. Report a
+ ** ridiculously large estimated cost if the schema= constraint is
+ ** unavailable
+ */
+ for(i=0; i<pIdxInfo->nConstraint; i++){
+ struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[i];
+ if( p->iColumn!=DBPAGE_COLUMN_SCHEMA ) continue;
+ if( p->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue;
+ if( !p->usable ){
+ /* No solution. Use the default SQLITE_BIG_DBL cost */
+ pIdxInfo->estimatedRows = 0x7fffffff;
+ return SQLITE_OK;
+ }
+ iPlan = 2;
+ pIdxInfo->aConstraintUsage[i].argvIndex = 1;
+ pIdxInfo->aConstraintUsage[i].omit = 1;
+ break;
+ }
+
+ /* If we reach this point, it means that either there is no schema=
+ ** constraint (in which case we use the "main" schema) or else the
+ ** schema constraint was accepted. Lower the estimated cost accordingly
+ */
+ pIdxInfo->estimatedCost = 1.0e6;
+
+ /* Check for constraints against pgno */
+ for(i=0; i<pIdxInfo->nConstraint; i++){
+ struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[i];
+ if( p->usable && p->iColumn<=0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){
+ pIdxInfo->estimatedRows = 1;
+ pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE;
+ pIdxInfo->estimatedCost = 1.0;
+ pIdxInfo->aConstraintUsage[i].argvIndex = iPlan ? 2 : 1;
+ pIdxInfo->aConstraintUsage[i].omit = 1;
+ iPlan |= 1;
+ break;
+ }
+ }
+ pIdxInfo->idxNum = iPlan;
+
+ if( pIdxInfo->nOrderBy>=1
+ && pIdxInfo->aOrderBy[0].iColumn<=0
+ && pIdxInfo->aOrderBy[0].desc==0
+ ){
+ pIdxInfo->orderByConsumed = 1;
+ }
+ return SQLITE_OK;
+}
+
+/*
+** Open a new dbpagevfs cursor.
+*/
+static int dbpageOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
+ DbpageCursor *pCsr;
+
+ pCsr = (DbpageCursor *)sqlite3_malloc64(sizeof(DbpageCursor));
+ if( pCsr==0 ){
+ return SQLITE_NOMEM_BKPT;
+ }else{
+ memset(pCsr, 0, sizeof(DbpageCursor));
+ pCsr->base.pVtab = pVTab;
+ pCsr->pgno = -1;
+ }
+
+ *ppCursor = (sqlite3_vtab_cursor *)pCsr;
+ return SQLITE_OK;
+}
+
+/*
+** Close a dbpagevfs cursor.
+*/
+static int dbpageClose(sqlite3_vtab_cursor *pCursor){
+ DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+ if( pCsr->pPage1 ) sqlite3PagerUnrefPageOne(pCsr->pPage1);
+ sqlite3_free(pCsr);
+ return SQLITE_OK;
+}
+
+/*
+** Move a dbpagevfs cursor to the next entry in the file.
+*/
+static int dbpageNext(sqlite3_vtab_cursor *pCursor){
+ int rc = SQLITE_OK;
+ DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+ pCsr->pgno++;
+ return rc;
+}
+
+static int dbpageEof(sqlite3_vtab_cursor *pCursor){
+ DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+ return pCsr->pgno > pCsr->mxPgno;
+}
+
+/*
+** idxNum:
+**
+** 0 schema=main, full table scan
+** 1 schema=main, pgno=?1
+** 2 schema=?1, full table scan
+** 3 schema=?1, pgno=?2
+**
+** idxStr is not used
+*/
+static int dbpageFilter(
+ sqlite3_vtab_cursor *pCursor,
+ int idxNum, const char *idxStr,
+ int argc, sqlite3_value **argv
+){
+ DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+ DbpageTable *pTab = (DbpageTable *)pCursor->pVtab;
+ int rc;
+ sqlite3 *db = pTab->db;
+ Btree *pBt;
+
+ /* Default setting is no rows of result */
+ pCsr->pgno = 1;
+ pCsr->mxPgno = 0;
+
+ if( idxNum & 2 ){
+ const char *zSchema;
+ assert( argc>=1 );
+ zSchema = (const char*)sqlite3_value_text(argv[0]);
+ pCsr->iDb = sqlite3FindDbName(db, zSchema);
+ if( pCsr->iDb<0 ) return SQLITE_OK;
+ }else{
+ pCsr->iDb = 0;
+ }
+ pBt = db->aDb[pCsr->iDb].pBt;
+ if( pBt==0 ) return SQLITE_OK;
+ pCsr->pPager = sqlite3BtreePager(pBt);
+ pCsr->szPage = sqlite3BtreeGetPageSize(pBt);
+ pCsr->mxPgno = sqlite3BtreeLastPage(pBt);
+ if( idxNum & 1 ){
+ assert( argc>(idxNum>>1) );
+ pCsr->pgno = sqlite3_value_int(argv[idxNum>>1]);
+ if( pCsr->pgno<1 || pCsr->pgno>pCsr->mxPgno ){
+ pCsr->pgno = 1;
+ pCsr->mxPgno = 0;
+ }else{
+ pCsr->mxPgno = pCsr->pgno;
+ }
+ }else{
+ assert( pCsr->pgno==1 );
+ }
+ if( pCsr->pPage1 ) sqlite3PagerUnrefPageOne(pCsr->pPage1);
+ rc = sqlite3PagerGet(pCsr->pPager, 1, &pCsr->pPage1, 0);
+ return rc;
+}
+
+static int dbpageColumn(
+ sqlite3_vtab_cursor *pCursor,
+ sqlite3_context *ctx,
+ int i
+){
+ DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+ int rc = SQLITE_OK;
+ switch( i ){
+ case 0: { /* pgno */
+ sqlite3_result_int(ctx, pCsr->pgno);
+ break;
+ }
+ case 1: { /* data */
+ DbPage *pDbPage = 0;
+ rc = sqlite3PagerGet(pCsr->pPager, pCsr->pgno, (DbPage**)&pDbPage, 0);
+ if( rc==SQLITE_OK ){
+ sqlite3_result_blob(ctx, sqlite3PagerGetData(pDbPage), pCsr->szPage,
+ SQLITE_TRANSIENT);
+ }
+ sqlite3PagerUnref(pDbPage);
+ break;
+ }
+ default: { /* schema */
+ sqlite3 *db = sqlite3_context_db_handle(ctx);
+ sqlite3_result_text(ctx, db->aDb[pCsr->iDb].zDbSName, -1, SQLITE_STATIC);
+ break;
+ }
+ }
+ return SQLITE_OK;
+}
+
+static int dbpageRowid(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
+ DbpageCursor *pCsr = (DbpageCursor *)pCursor;
+ *pRowid = pCsr->pgno;
+ return SQLITE_OK;
+}
+
+static int dbpageUpdate(
+ sqlite3_vtab *pVtab,
+ int argc,
+ sqlite3_value **argv,
+ sqlite_int64 *pRowid
+){
+ DbpageTable *pTab = (DbpageTable *)pVtab;
+ Pgno pgno;
+ DbPage *pDbPage = 0;
+ int rc = SQLITE_OK;
+ char *zErr = 0;
+ const char *zSchema;
+ int iDb;
+ Btree *pBt;
+ Pager *pPager;
+ int szPage;
+
+ if( argc==1 ){
+ zErr = "cannot delete";
+ goto update_fail;
+ }
+ pgno = sqlite3_value_int(argv[0]);
+ if( (Pgno)sqlite3_value_int(argv[1])!=pgno ){
+ zErr = "cannot insert";
+ goto update_fail;
+ }
+ zSchema = (const char*)sqlite3_value_text(argv[4]);
+ iDb = zSchema ? sqlite3FindDbName(pTab->db, zSchema) : -1;
+ if( iDb<0 ){
+ zErr = "no such schema";
+ goto update_fail;
+ }
+ pBt = pTab->db->aDb[iDb].pBt;
+ if( pgno<1 || pBt==0 || pgno>(int)sqlite3BtreeLastPage(pBt) ){
+ zErr = "bad page number";
+ goto update_fail;
+ }
+ szPage = sqlite3BtreeGetPageSize(pBt);
+ if( sqlite3_value_type(argv[3])!=SQLITE_BLOB
+ || sqlite3_value_bytes(argv[3])!=szPage
+ ){
+ zErr = "bad page value";
+ goto update_fail;
+ }
+ pPager = sqlite3BtreePager(pBt);
+ rc = sqlite3PagerGet(pPager, pgno, (DbPage**)&pDbPage, 0);
+ if( rc==SQLITE_OK ){
+ rc = sqlite3PagerWrite(pDbPage);
+ if( rc==SQLITE_OK ){
+ memcpy(sqlite3PagerGetData(pDbPage),
+ sqlite3_value_blob(argv[3]),
+ szPage);
+ }
+ }
+ sqlite3PagerUnref(pDbPage);
+ return rc;
+
+update_fail:
+ sqlite3_free(pVtab->zErrMsg);
+ pVtab->zErrMsg = sqlite3_mprintf("%s", zErr);
+ return SQLITE_ERROR;
+}
+
+/* Since we do not know in advance which database files will be
+** written by the sqlite_dbpage virtual table, start a write transaction
+** on them all.
+*/
+static int dbpageBegin(sqlite3_vtab *pVtab){
+ DbpageTable *pTab = (DbpageTable *)pVtab;
+ sqlite3 *db = pTab->db;
+ int i;
+ for(i=0; i<db->nDb; i++){
+ Btree *pBt = db->aDb[i].pBt;
+ if( pBt ) sqlite3BtreeBeginTrans(pBt, 1);
+ }
+ return SQLITE_OK;
+}
+
+
+/*
+** Invoke this routine to register the "dbpage" virtual table module
+*/
+SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){
+ static sqlite3_module dbpage_module = {
+ 0, /* iVersion */
+ dbpageConnect, /* xCreate */
+ dbpageConnect, /* xConnect */
+ dbpageBestIndex, /* xBestIndex */
+ dbpageDisconnect, /* xDisconnect */
+ dbpageDisconnect, /* xDestroy */
+ dbpageOpen, /* xOpen - open a cursor */
+ dbpageClose, /* xClose - close a cursor */
+ dbpageFilter, /* xFilter - configure scan constraints */
+ dbpageNext, /* xNext - advance a cursor */
+ dbpageEof, /* xEof - check for end of scan */
+ dbpageColumn, /* xColumn - read data */
+ dbpageRowid, /* xRowid - read data */
+ dbpageUpdate, /* xUpdate */
+ dbpageBegin, /* xBegin */
+ 0, /* xSync */
+ 0, /* xCommit */
+ 0, /* xRollback */
+ 0, /* xFindMethod */
+ 0, /* xRename */
+ 0, /* xSavepoint */
+ 0, /* xRelease */
+ 0, /* xRollbackTo */
+ };
+ return sqlite3_create_module(db, "sqlite_dbpage", &dbpage_module, 0);
+}
+#elif defined(SQLITE_ENABLE_DBPAGE_VTAB)
+SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){ return SQLITE_OK; }
+#endif /* SQLITE_ENABLE_DBSTAT_VTAB */
+
+/************** End of dbpage.c **********************************************/
/************** Begin file sqlite3session.c **********************************/
#if defined(SQLITE_ENABLE_SESSION) && defined(SQLITE_ENABLE_PREUPDATE_HOOK)
@@ -175995,6 +178756,7 @@ struct sqlite3_session {
int rc; /* Non-zero if an error has occurred */
void *pFilterCtx; /* First argument to pass to xTableFilter */
int (*xTableFilter)(void *pCtx, const char *zTab);
+ sqlite3_value *pZeroBlob; /* Value containing X'' */
sqlite3_session *pNext; /* Next session object on same db. */
SessionTable *pTable; /* List of attached tables */
SessionHook hook; /* APIs to grab new and old data with */
@@ -176062,6 +178824,7 @@ struct SessionTable {
SessionTable *pNext;
char *zName; /* Local name of table */
int nCol; /* Number of columns in table zName */
+ int bStat1; /* True if this is sqlite_stat1 */
const char **azCol; /* Column names */
u8 *abPK; /* Array of primary key flags */
int nEntry; /* Total number of entries in hash table */
@@ -176445,6 +179208,7 @@ static int sessionPreupdateHash(
h = sessionHashAppendBlob(h, n, z);
}else{
assert( eType==SQLITE_NULL );
+ assert( pTab->bStat1==0 || i!=1 );
*pbNullPK = 1;
}
}
@@ -176787,7 +179551,6 @@ static int sessionPreupdateEqual(
}
if( memcmp(a, z, n) ) return 0;
a += n;
- break;
}
}
}
@@ -176843,9 +179606,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){
/*
** This function queries the database for the names of the columns of table
-** zThis, in schema zDb. It is expected that the table has nCol columns. If
-** not, SQLITE_SCHEMA is returned and none of the output variables are
-** populated.
+** zThis, in schema zDb.
**
** Otherwise, if they are not NULL, variable *pnCol is set to the number
** of columns in the database table and variable *pzTab is set to point to a
@@ -176866,9 +179627,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){
** *pabPK = {1, 0, 0, 1}
**
** All returned buffers are part of the same single allocation, which must
-** be freed using sqlite3_free() by the caller. If pazCol was not NULL, then
-** pointer *pazCol should be freed to release all memory. Otherwise, pointer
-** *pabPK. It is illegal for both pazCol and pabPK to be NULL.
+** be freed using sqlite3_free() by the caller
*/
static int sessionTableInfo(
sqlite3 *db, /* Database connection */
@@ -176893,7 +179652,23 @@ static int sessionTableInfo(
assert( pazCol && pabPK );
nThis = sqlite3Strlen30(zThis);
- zPragma = sqlite3_mprintf("PRAGMA '%q'.table_info('%q')", zDb, zThis);
+ if( nThis==12 && 0==sqlite3_stricmp("sqlite_stat1", zThis) ){
+ rc = sqlite3_table_column_metadata(db, zDb, zThis, 0, 0, 0, 0, 0, 0);
+ if( rc==SQLITE_OK ){
+ /* For sqlite_stat1, pretend that (tbl,idx) is the PRIMARY KEY. */
+ zPragma = sqlite3_mprintf(
+ "SELECT 0, 'tbl', '', 0, '', 1 UNION ALL "
+ "SELECT 1, 'idx', '', 0, '', 2 UNION ALL "
+ "SELECT 2, 'stat', '', 0, '', 0"
+ );
+ }else if( rc==SQLITE_ERROR ){
+ zPragma = sqlite3_mprintf("");
+ }else{
+ return rc;
+ }
+ }else{
+ zPragma = sqlite3_mprintf("PRAGMA '%q'.table_info('%q')", zDb, zThis);
+ }
if( !zPragma ) return SQLITE_NOMEM;
rc = sqlite3_prepare_v2(db, zPragma, -1, &pStmt, 0);
@@ -176985,12 +179760,56 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){
break;
}
}
+ if( 0==sqlite3_stricmp("sqlite_stat1", pTab->zName) ){
+ pTab->bStat1 = 1;
+ }
}
}
return (pSession->rc || pTab->abPK==0);
}
/*
+** Versions of the four methods in object SessionHook for use with the
+** sqlite_stat1 table. The purpose of this is to substitute a zero-length
+** blob each time a NULL value is read from the "idx" column of the
+** sqlite_stat1 table.
+*/
+typedef struct SessionStat1Ctx SessionStat1Ctx;
+struct SessionStat1Ctx {
+ SessionHook hook;
+ sqlite3_session *pSession;
+};
+static int sessionStat1Old(void *pCtx, int iCol, sqlite3_value **ppVal){
+ SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx;
+ sqlite3_value *pVal = 0;
+ int rc = p->hook.xOld(p->hook.pCtx, iCol, &pVal);
+ if( rc==SQLITE_OK && iCol==1 && sqlite3_value_type(pVal)==SQLITE_NULL ){
+ pVal = p->pSession->pZeroBlob;
+ }
+ *ppVal = pVal;
+ return rc;
+}
+static int sessionStat1New(void *pCtx, int iCol, sqlite3_value **ppVal){
+ SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx;
+ sqlite3_value *pVal = 0;
+ int rc = p->hook.xNew(p->hook.pCtx, iCol, &pVal);
+ if( rc==SQLITE_OK && iCol==1 && sqlite3_value_type(pVal)==SQLITE_NULL ){
+ pVal = p->pSession->pZeroBlob;
+ }
+ *ppVal = pVal;
+ return rc;
+}
+static int sessionStat1Count(void *pCtx){
+ SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx;
+ return p->hook.xCount(p->hook.pCtx);
+}
+static int sessionStat1Depth(void *pCtx){
+ SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx;
+ return p->hook.xDepth(p->hook.pCtx);
+}
+
+
+/*
** This function is only called from with a pre-update-hook reporting a
** change on table pTab (attached to session pSession). The type of change
** (UPDATE, INSERT, DELETE) is specified by the first argument.
@@ -177006,6 +179825,7 @@ static void sessionPreupdateOneChange(
int iHash;
int bNull = 0;
int rc = SQLITE_OK;
+ SessionStat1Ctx stat1;
if( pSession->rc ) return;
@@ -177025,6 +179845,25 @@ static void sessionPreupdateOneChange(
return;
}
+ if( pTab->bStat1 ){
+ stat1.hook = pSession->hook;
+ stat1.pSession = pSession;
+ pSession->hook.pCtx = (void*)&stat1;
+ pSession->hook.xNew = sessionStat1New;
+ pSession->hook.xOld = sessionStat1Old;
+ pSession->hook.xCount = sessionStat1Count;
+ pSession->hook.xDepth = sessionStat1Depth;
+ if( pSession->pZeroBlob==0 ){
+ sqlite3_value *p = sqlite3ValueNew(0);
+ if( p==0 ){
+ rc = SQLITE_NOMEM;
+ goto error_out;
+ }
+ sqlite3ValueSetStr(p, 0, "", 0, SQLITE_STATIC);
+ pSession->pZeroBlob = p;
+ }
+ }
+
/* Calculate the hash-key for this change. If the primary key of the row
** includes a NULL value, exit early. Such changes are ignored by the
** session module. */
@@ -177114,6 +179953,9 @@ static void sessionPreupdateOneChange(
/* If an error has occurred, mark the session object as failed. */
error_out:
+ if( pTab->bStat1 ){
+ pSession->hook = stat1.hook;
+ }
if( rc!=SQLITE_OK ){
pSession->rc = rc;
}
@@ -177450,7 +180292,6 @@ SQLITE_API int sqlite3session_diff(
if( abPK[i] ) bHasPk = 1;
}
}
-
}
sqlite3_free((char*)azCol);
if( bMismatch ){
@@ -177576,6 +180417,7 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession){
}
}
sqlite3_mutex_leave(sqlite3_db_mutex(db));
+ sqlite3ValueFree(pSession->pZeroBlob);
/* Delete all attached table objects. And the contents of their
** associated hash-tables. */
@@ -178043,28 +180885,41 @@ static int sessionSelectStmt(
sqlite3_stmt **ppStmt /* OUT: Prepared SELECT statement */
){
int rc = SQLITE_OK;
- int i;
- const char *zSep = "";
- SessionBuffer buf = {0, 0, 0};
+ char *zSql = 0;
+ int nSql = -1;
- sessionAppendStr(&buf, "SELECT * FROM ", &rc);
- sessionAppendIdent(&buf, zDb, &rc);
- sessionAppendStr(&buf, ".", &rc);
- sessionAppendIdent(&buf, zTab, &rc);
- sessionAppendStr(&buf, " WHERE ", &rc);
- for(i=0; i<nCol; i++){
- if( abPK[i] ){
- sessionAppendStr(&buf, zSep, &rc);
- sessionAppendIdent(&buf, azCol[i], &rc);
- sessionAppendStr(&buf, " = ?", &rc);
- sessionAppendInteger(&buf, i+1, &rc);
- zSep = " AND ";
+ if( 0==sqlite3_stricmp("sqlite_stat1", zTab) ){
+ zSql = sqlite3_mprintf(
+ "SELECT tbl, ?2, stat FROM %Q.sqlite_stat1 WHERE tbl IS ?1 AND "
+ "idx IS (CASE WHEN ?2=X'' THEN NULL ELSE ?2 END)", zDb
+ );
+ }else{
+ int i;
+ const char *zSep = "";
+ SessionBuffer buf = {0, 0, 0};
+
+ sessionAppendStr(&buf, "SELECT * FROM ", &rc);
+ sessionAppendIdent(&buf, zDb, &rc);
+ sessionAppendStr(&buf, ".", &rc);
+ sessionAppendIdent(&buf, zTab, &rc);
+ sessionAppendStr(&buf, " WHERE ", &rc);
+ for(i=0; i<nCol; i++){
+ if( abPK[i] ){
+ sessionAppendStr(&buf, zSep, &rc);
+ sessionAppendIdent(&buf, azCol[i], &rc);
+ sessionAppendStr(&buf, " IS ?", &rc);
+ sessionAppendInteger(&buf, i+1, &rc);
+ zSep = " AND ";
+ }
}
+ zSql = (char*)buf.aBuf;
+ nSql = buf.nBuf;
}
+
if( rc==SQLITE_OK ){
- rc = sqlite3_prepare_v2(db, (char *)buf.aBuf, buf.nBuf, ppStmt, 0);
+ rc = sqlite3_prepare_v2(db, zSql, nSql, ppStmt, 0);
}
- sqlite3_free(buf.aBuf);
+ sqlite3_free(zSql);
return rc;
}
@@ -179233,7 +182088,7 @@ struct SessionApplyCtx {
int nCol; /* Size of azCol[] and abPK[] arrays */
const char **azCol; /* Array of column names */
u8 *abPK; /* Boolean array - true if column is in PK */
-
+ int bStat1; /* True if table is sqlite_stat1 */
int bDeferConstraints; /* True to defer constraints */
SessionBuffer constraints; /* Deferred constraints are stored here */
};
@@ -179403,6 +182258,7 @@ static int sessionUpdateRow(
return rc;
}
+
/*
** Formulate and prepare an SQL statement to query table zTab by primary
** key. Assuming the following table structure:
@@ -179464,6 +182320,47 @@ static int sessionInsertRow(
return rc;
}
+static int sessionPrepare(sqlite3 *db, sqlite3_stmt **pp, const char *zSql){
+ return sqlite3_prepare_v2(db, zSql, -1, pp, 0);
+}
+
+/*
+** Prepare statements for applying changes to the sqlite_stat1 table.
+** These are similar to those created by sessionSelectRow(),
+** sessionInsertRow(), sessionUpdateRow() and sessionDeleteRow() for
+** other tables.
+*/
+static int sessionStat1Sql(sqlite3 *db, SessionApplyCtx *p){
+ int rc = sessionSelectRow(db, "sqlite_stat1", p);
+ if( rc==SQLITE_OK ){
+ rc = sessionPrepare(db, &p->pInsert,
+ "INSERT INTO main.sqlite_stat1 VALUES(?1, "
+ "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END, "
+ "?3)"
+ );
+ }
+ if( rc==SQLITE_OK ){
+ rc = sessionPrepare(db, &p->pUpdate,
+ "UPDATE main.sqlite_stat1 SET "
+ "tbl = CASE WHEN ?2 THEN ?3 ELSE tbl END, "
+ "idx = CASE WHEN ?5 THEN ?6 ELSE idx END, "
+ "stat = CASE WHEN ?8 THEN ?9 ELSE stat END "
+ "WHERE tbl=?1 AND idx IS "
+ "CASE WHEN length(?4)=0 AND typeof(?4)='blob' THEN NULL ELSE ?4 END "
+ "AND (?10 OR ?8=0 OR stat IS ?7)"
+ );
+ }
+ if( rc==SQLITE_OK ){
+ rc = sessionPrepare(db, &p->pDelete,
+ "DELETE FROM main.sqlite_stat1 WHERE tbl=?1 AND idx IS "
+ "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END "
+ "AND (?4 OR stat IS ?3)"
+ );
+ }
+ assert( rc==SQLITE_OK );
+ return rc;
+}
+
/*
** A wrapper around sqlite3_bind_value() that detects an extra problem.
** See comments in the body of this function for details.
@@ -179794,11 +182691,25 @@ static int sessionApplyOneOp(
}else{
assert( op==SQLITE_INSERT );
- rc = sessionBindRow(pIter, sqlite3changeset_new, nCol, 0, p->pInsert);
- if( rc!=SQLITE_OK ) return rc;
+ if( p->bStat1 ){
+ /* Check if there is a conflicting row. For sqlite_stat1, this needs
+ ** to be done using a SELECT, as there is no PRIMARY KEY in the
+ ** database schema to throw an exception if a duplicate is inserted. */
+ rc = sessionSeekToRow(p->db, pIter, p->abPK, p->pSelect);
+ if( rc==SQLITE_ROW ){
+ rc = SQLITE_CONSTRAINT;
+ sqlite3_reset(p->pSelect);
+ }
+ }
+
+ if( rc==SQLITE_OK ){
+ rc = sessionBindRow(pIter, sqlite3changeset_new, nCol, 0, p->pInsert);
+ if( rc!=SQLITE_OK ) return rc;
+
+ sqlite3_step(p->pInsert);
+ rc = sqlite3_reset(p->pInsert);
+ }
- sqlite3_step(p->pInsert);
- rc = sqlite3_reset(p->pInsert);
if( (rc&0xff)==SQLITE_CONSTRAINT ){
rc = sessionConflictHandler(
SQLITE_CHANGESET_CONFLICT, p, pIter, xConflict, pCtx, pbReplace
@@ -180031,12 +182942,20 @@ static int sessionChangesetApply(
}
else{
sApply.nCol = nCol;
- if((rc = sessionSelectRow(db, zTab, &sApply))
- || (rc = sessionUpdateRow(db, zTab, &sApply))
- || (rc = sessionDeleteRow(db, zTab, &sApply))
- || (rc = sessionInsertRow(db, zTab, &sApply))
- ){
- break;
+ if( 0==sqlite3_stricmp(zTab, "sqlite_stat1") ){
+ if( (rc = sessionStat1Sql(db, &sApply) ) ){
+ break;
+ }
+ sApply.bStat1 = 1;
+ }else{
+ if((rc = sessionSelectRow(db, zTab, &sApply))
+ || (rc = sessionUpdateRow(db, zTab, &sApply))
+ || (rc = sessionDeleteRow(db, zTab, &sApply))
+ || (rc = sessionInsertRow(db, zTab, &sApply))
+ ){
+ break;
+ }
+ sApply.bStat1 = 0;
}
}
nTab = sqlite3Strlen30(zTab);
@@ -184350,6 +187269,8 @@ static Fts5ExprPhrase *sqlite3Fts5ParseTerm(
int bPrefix
);
+static void sqlite3Fts5ParseSetCaret(Fts5ExprPhrase*);
+
static Fts5ExprNearset *sqlite3Fts5ParseNearset(
Fts5Parse*,
Fts5ExprNearset*,
@@ -184430,9 +187351,10 @@ static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic);
#define FTS5_STRING 9
#define FTS5_LP 10
#define FTS5_RP 11
-#define FTS5_COMMA 12
-#define FTS5_PLUS 13
-#define FTS5_STAR 14
+#define FTS5_CARET 12
+#define FTS5_COMMA 13
+#define FTS5_PLUS 14
+#define FTS5_STAR 15
/*
** 2000-05-29
@@ -184533,30 +187455,32 @@ static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic);
** defined, then do no error processing.
** fts5YYNSTATE the combined number of states.
** fts5YYNRULE the number of rules in the grammar
+** fts5YYNFTS5TOKEN Number of terminal symbols
** fts5YY_MAX_SHIFT Maximum value for shift actions
** fts5YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions
** fts5YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions
-** fts5YY_MIN_REDUCE Maximum value for reduce actions
** fts5YY_ERROR_ACTION The fts5yy_action[] code for syntax error
** fts5YY_ACCEPT_ACTION The fts5yy_action[] code for accept
** fts5YY_NO_ACTION The fts5yy_action[] code for no-op
+** fts5YY_MIN_REDUCE Minimum value for reduce actions
+** fts5YY_MAX_REDUCE Maximum value for reduce actions
*/
#ifndef INTERFACE
# define INTERFACE 1
#endif
/************* Begin control #defines *****************************************/
#define fts5YYCODETYPE unsigned char
-#define fts5YYNOCODE 28
+#define fts5YYNOCODE 29
#define fts5YYACTIONTYPE unsigned char
#define sqlite3Fts5ParserFTS5TOKENTYPE Fts5Token
typedef union {
int fts5yyinit;
sqlite3Fts5ParserFTS5TOKENTYPE fts5yy0;
int fts5yy4;
- Fts5Colset* fts5yy11;
- Fts5ExprNode* fts5yy24;
- Fts5ExprNearset* fts5yy46;
- Fts5ExprPhrase* fts5yy53;
+ Fts5ExprPhrase* fts5yy11;
+ Fts5ExprNearset* fts5yy14;
+ Fts5Colset* fts5yy43;
+ Fts5ExprNode* fts5yy54;
} fts5YYMINORTYPE;
#ifndef fts5YYSTACKDEPTH
#define fts5YYSTACKDEPTH 100
@@ -184565,16 +187489,17 @@ typedef union {
#define sqlite3Fts5ParserARG_PDECL ,Fts5Parse *pParse
#define sqlite3Fts5ParserARG_FETCH Fts5Parse *pParse = fts5yypParser->pParse
#define sqlite3Fts5ParserARG_STORE fts5yypParser->pParse = pParse
-#define fts5YYNSTATE 33
-#define fts5YYNRULE 27
-#define fts5YY_MAX_SHIFT 32
-#define fts5YY_MIN_SHIFTREDUCE 50
-#define fts5YY_MAX_SHIFTREDUCE 76
-#define fts5YY_MIN_REDUCE 77
-#define fts5YY_MAX_REDUCE 103
-#define fts5YY_ERROR_ACTION 104
-#define fts5YY_ACCEPT_ACTION 105
-#define fts5YY_NO_ACTION 106
+#define fts5YYNSTATE 35
+#define fts5YYNRULE 28
+#define fts5YYNFTS5TOKEN 16
+#define fts5YY_MAX_SHIFT 34
+#define fts5YY_MIN_SHIFTREDUCE 52
+#define fts5YY_MAX_SHIFTREDUCE 79
+#define fts5YY_ERROR_ACTION 80
+#define fts5YY_ACCEPT_ACTION 81
+#define fts5YY_NO_ACTION 82
+#define fts5YY_MIN_REDUCE 83
+#define fts5YY_MAX_REDUCE 110
/************* End control #defines *******************************************/
/* Define the fts5yytestcase() macro to be a no-op if is not already defined
@@ -184604,9 +187529,6 @@ typedef union {
** N between fts5YY_MIN_SHIFTREDUCE Shift to an arbitrary state then
** and fts5YY_MAX_SHIFTREDUCE reduce by rule N-fts5YY_MIN_SHIFTREDUCE.
**
-** N between fts5YY_MIN_REDUCE Reduce by rule N-fts5YY_MIN_REDUCE
-** and fts5YY_MAX_REDUCE
-**
** N == fts5YY_ERROR_ACTION A syntax error has occurred.
**
** N == fts5YY_ACCEPT_ACTION The parser accepts its input.
@@ -184614,25 +187536,22 @@ typedef union {
** N == fts5YY_NO_ACTION No such action. Denotes unused
** slots in the fts5yy_action[] table.
**
+** N between fts5YY_MIN_REDUCE Reduce by rule N-fts5YY_MIN_REDUCE
+** and fts5YY_MAX_REDUCE
+**
** The action table is constructed as a single large table named fts5yy_action[].
** Given state S and lookahead X, the action is computed as either:
**
** (A) N = fts5yy_action[ fts5yy_shift_ofst[S] + X ]
** (B) N = fts5yy_default[S]
**
-** The (A) formula is preferred. The B formula is used instead if:
-** (1) The fts5yy_shift_ofst[S]+X value is out of range, or
-** (2) fts5yy_lookahead[fts5yy_shift_ofst[S]+X] is not equal to X, or
-** (3) fts5yy_shift_ofst[S] equal fts5YY_SHIFT_USE_DFLT.
-** (Implementation note: fts5YY_SHIFT_USE_DFLT is chosen so that
-** fts5YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X.
-** Hence only tests (1) and (2) need to be evaluated.)
+** The (A) formula is preferred. The B formula is used instead if
+** fts5yy_lookahead[fts5yy_shift_ofst[S]+X] is not equal to X.
**
** The formulas above are for computing the action when the lookahead is
** a terminal symbol. If the lookahead is a non-terminal (as occurs after
** a reduce action) then the fts5yy_reduce_ofst[] array is used in place of
-** the fts5yy_shift_ofst[] array and fts5YY_REDUCE_USE_DFLT is used in place of
-** fts5YY_SHIFT_USE_DFLT.
+** the fts5yy_shift_ofst[] array.
**
** The following are the tables generated in this section:
**
@@ -184646,54 +187565,56 @@ typedef union {
** fts5yy_default[] Default action for each state.
**
*********** Begin parsing tables **********************************************/
-#define fts5YY_ACTTAB_COUNT (98)
+#define fts5YY_ACTTAB_COUNT (105)
static const fts5YYACTIONTYPE fts5yy_action[] = {
- /* 0 */ 105, 19, 90, 6, 26, 93, 92, 24, 24, 17,
- /* 10 */ 90, 6, 26, 16, 92, 54, 24, 18, 90, 6,
- /* 20 */ 26, 10, 92, 12, 24, 75, 86, 90, 6, 26,
- /* 30 */ 13, 92, 75, 24, 20, 90, 6, 26, 101, 92,
- /* 40 */ 56, 24, 27, 90, 6, 26, 100, 92, 21, 24,
- /* 50 */ 23, 15, 30, 11, 1, 91, 22, 25, 9, 92,
- /* 60 */ 7, 24, 3, 4, 5, 3, 4, 5, 3, 77,
- /* 70 */ 4, 5, 3, 61, 23, 15, 60, 11, 80, 12,
- /* 80 */ 2, 13, 68, 10, 29, 52, 55, 75, 31, 32,
- /* 90 */ 8, 28, 5, 3, 51, 55, 72, 14,
+ /* 0 */ 81, 20, 96, 6, 28, 99, 98, 26, 26, 18,
+ /* 10 */ 96, 6, 28, 17, 98, 56, 26, 19, 96, 6,
+ /* 20 */ 28, 14, 98, 108, 26, 92, 96, 6, 28, 25,
+ /* 30 */ 98, 78, 26, 21, 96, 6, 28, 107, 98, 58,
+ /* 40 */ 26, 29, 96, 6, 28, 32, 98, 22, 26, 24,
+ /* 50 */ 16, 23, 11, 1, 14, 13, 24, 16, 31, 11,
+ /* 60 */ 3, 97, 13, 27, 8, 98, 82, 26, 7, 4,
+ /* 70 */ 5, 3, 4, 5, 3, 83, 4, 5, 3, 63,
+ /* 80 */ 33, 34, 62, 12, 2, 86, 13, 10, 12, 71,
+ /* 90 */ 10, 13, 78, 5, 3, 78, 9, 30, 75, 82,
+ /* 100 */ 54, 57, 53, 57, 15,
};
static const fts5YYCODETYPE fts5yy_lookahead[] = {
- /* 0 */ 16, 17, 18, 19, 20, 22, 22, 24, 24, 17,
- /* 10 */ 18, 19, 20, 7, 22, 9, 24, 17, 18, 19,
- /* 20 */ 20, 10, 22, 9, 24, 14, 17, 18, 19, 20,
- /* 30 */ 9, 22, 14, 24, 17, 18, 19, 20, 26, 22,
- /* 40 */ 9, 24, 17, 18, 19, 20, 26, 22, 21, 24,
- /* 50 */ 6, 7, 13, 9, 10, 18, 21, 20, 5, 22,
- /* 60 */ 5, 24, 3, 1, 2, 3, 1, 2, 3, 0,
- /* 70 */ 1, 2, 3, 11, 6, 7, 11, 9, 5, 9,
- /* 80 */ 10, 9, 11, 10, 12, 8, 9, 14, 24, 25,
- /* 90 */ 23, 24, 2, 3, 8, 9, 9, 9,
+ /* 0 */ 17, 18, 19, 20, 21, 23, 23, 25, 25, 18,
+ /* 10 */ 19, 20, 21, 7, 23, 9, 25, 18, 19, 20,
+ /* 20 */ 21, 9, 23, 27, 25, 18, 19, 20, 21, 25,
+ /* 30 */ 23, 15, 25, 18, 19, 20, 21, 27, 23, 9,
+ /* 40 */ 25, 18, 19, 20, 21, 14, 23, 22, 25, 6,
+ /* 50 */ 7, 22, 9, 10, 9, 12, 6, 7, 13, 9,
+ /* 60 */ 3, 19, 12, 21, 5, 23, 28, 25, 5, 1,
+ /* 70 */ 2, 3, 1, 2, 3, 0, 1, 2, 3, 11,
+ /* 80 */ 25, 26, 11, 9, 10, 5, 12, 10, 9, 11,
+ /* 90 */ 10, 12, 15, 2, 3, 15, 24, 25, 9, 28,
+ /* 100 */ 8, 9, 8, 9, 9, 28, 28, 28, 28, 28,
+ /* 110 */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
+ /* 120 */ 28,
};
-#define fts5YY_SHIFT_USE_DFLT (98)
-#define fts5YY_SHIFT_COUNT (32)
+#define fts5YY_SHIFT_COUNT (34)
#define fts5YY_SHIFT_MIN (0)
-#define fts5YY_SHIFT_MAX (90)
+#define fts5YY_SHIFT_MAX (95)
static const unsigned char fts5yy_shift_ofst[] = {
- /* 0 */ 44, 44, 44, 44, 44, 44, 68, 70, 72, 14,
- /* 10 */ 21, 73, 11, 18, 18, 31, 31, 62, 65, 69,
- /* 20 */ 90, 77, 86, 6, 39, 53, 55, 59, 39, 87,
- /* 30 */ 88, 39, 71,
+ /* 0 */ 43, 43, 43, 43, 43, 43, 50, 74, 79, 45,
+ /* 10 */ 12, 80, 77, 12, 16, 16, 30, 30, 68, 71,
+ /* 20 */ 75, 91, 92, 94, 6, 31, 31, 59, 63, 57,
+ /* 30 */ 31, 89, 95, 31, 78,
};
-#define fts5YY_REDUCE_USE_DFLT (-18)
-#define fts5YY_REDUCE_COUNT (16)
-#define fts5YY_REDUCE_MIN (-17)
-#define fts5YY_REDUCE_MAX (67)
+#define fts5YY_REDUCE_COUNT (17)
+#define fts5YY_REDUCE_MIN (-18)
+#define fts5YY_REDUCE_MAX (72)
static const signed char fts5yy_reduce_ofst[] = {
- /* 0 */ -16, -8, 0, 9, 17, 25, 37, -17, 64, -17,
- /* 10 */ 67, 12, 12, 12, 20, 27, 35,
+ /* 0 */ -17, -9, -1, 7, 15, 23, 42, -18, -18, 55,
+ /* 10 */ 72, -4, -4, 4, -4, 10, 25, 29,
};
static const fts5YYACTIONTYPE fts5yy_default[] = {
- /* 0 */ 104, 104, 104, 104, 104, 104, 89, 104, 98, 104,
- /* 10 */ 104, 103, 103, 103, 103, 104, 104, 104, 104, 104,
- /* 20 */ 85, 104, 104, 104, 94, 104, 104, 84, 96, 104,
- /* 30 */ 104, 97, 104,
+ /* 0 */ 80, 80, 80, 80, 80, 80, 95, 80, 80, 105,
+ /* 10 */ 80, 110, 110, 80, 110, 110, 80, 80, 80, 80,
+ /* 20 */ 80, 91, 80, 80, 80, 101, 100, 80, 80, 90,
+ /* 30 */ 103, 80, 80, 104, 80,
};
/********** End of lemon-generated parsing tables *****************************/
@@ -184795,19 +187716,40 @@ static void sqlite3Fts5ParserTrace(FILE *TraceFILE, char *zTracePrompt){
}
#endif /* NDEBUG */
-#ifndef NDEBUG
+#if defined(fts5YYCOVERAGE) || !defined(NDEBUG)
/* For tracing shifts, the names of all terminals and nonterminals
** are required. The following table supplies these names */
static const char *const fts5yyTokenName[] = {
- "$", "OR", "AND", "NOT",
- "TERM", "COLON", "MINUS", "LCP",
- "RCP", "STRING", "LP", "RP",
- "COMMA", "PLUS", "STAR", "error",
- "input", "expr", "cnearset", "exprlist",
- "colset", "colsetlist", "nearset", "nearphrases",
- "phrase", "neardist_opt", "star_opt",
+ /* 0 */ "$",
+ /* 1 */ "OR",
+ /* 2 */ "AND",
+ /* 3 */ "NOT",
+ /* 4 */ "TERM",
+ /* 5 */ "COLON",
+ /* 6 */ "MINUS",
+ /* 7 */ "LCP",
+ /* 8 */ "RCP",
+ /* 9 */ "STRING",
+ /* 10 */ "LP",
+ /* 11 */ "RP",
+ /* 12 */ "CARET",
+ /* 13 */ "COMMA",
+ /* 14 */ "PLUS",
+ /* 15 */ "STAR",
+ /* 16 */ "error",
+ /* 17 */ "input",
+ /* 18 */ "expr",
+ /* 19 */ "cnearset",
+ /* 20 */ "exprlist",
+ /* 21 */ "colset",
+ /* 22 */ "colsetlist",
+ /* 23 */ "nearset",
+ /* 24 */ "nearphrases",
+ /* 25 */ "phrase",
+ /* 26 */ "neardist_opt",
+ /* 27 */ "star_opt",
};
-#endif /* NDEBUG */
+#endif /* defined(fts5YYCOVERAGE) || !defined(NDEBUG) */
#ifndef NDEBUG
/* For tracing reduce actions, the names of all rules are required.
@@ -184831,15 +187773,16 @@ static const char *const fts5yyRuleName[] = {
/* 15 */ "cnearset ::= nearset",
/* 16 */ "cnearset ::= colset COLON nearset",
/* 17 */ "nearset ::= phrase",
- /* 18 */ "nearset ::= STRING LP nearphrases neardist_opt RP",
- /* 19 */ "nearphrases ::= phrase",
- /* 20 */ "nearphrases ::= nearphrases phrase",
- /* 21 */ "neardist_opt ::=",
- /* 22 */ "neardist_opt ::= COMMA STRING",
- /* 23 */ "phrase ::= phrase PLUS STRING star_opt",
- /* 24 */ "phrase ::= STRING star_opt",
- /* 25 */ "star_opt ::= STAR",
- /* 26 */ "star_opt ::=",
+ /* 18 */ "nearset ::= CARET phrase",
+ /* 19 */ "nearset ::= STRING LP nearphrases neardist_opt RP",
+ /* 20 */ "nearphrases ::= phrase",
+ /* 21 */ "nearphrases ::= nearphrases phrase",
+ /* 22 */ "neardist_opt ::=",
+ /* 23 */ "neardist_opt ::= COMMA STRING",
+ /* 24 */ "phrase ::= phrase PLUS STRING star_opt",
+ /* 25 */ "phrase ::= STRING star_opt",
+ /* 26 */ "star_opt ::= STAR",
+ /* 27 */ "star_opt ::=",
};
#endif /* NDEBUG */
@@ -184960,33 +187903,33 @@ static void fts5yy_destructor(
** inside the C code.
*/
/********* Begin destructor definitions ***************************************/
- case 16: /* input */
+ case 17: /* input */
{
(void)pParse;
}
break;
- case 17: /* expr */
- case 18: /* cnearset */
- case 19: /* exprlist */
+ case 18: /* expr */
+ case 19: /* cnearset */
+ case 20: /* exprlist */
{
- sqlite3Fts5ParseNodeFree((fts5yypminor->fts5yy24));
+ sqlite3Fts5ParseNodeFree((fts5yypminor->fts5yy54));
}
break;
- case 20: /* colset */
- case 21: /* colsetlist */
+ case 21: /* colset */
+ case 22: /* colsetlist */
{
- sqlite3_free((fts5yypminor->fts5yy11));
+ sqlite3_free((fts5yypminor->fts5yy43));
}
break;
- case 22: /* nearset */
- case 23: /* nearphrases */
+ case 23: /* nearset */
+ case 24: /* nearphrases */
{
- sqlite3Fts5ParseNearsetFree((fts5yypminor->fts5yy46));
+ sqlite3Fts5ParseNearsetFree((fts5yypminor->fts5yy14));
}
break;
- case 24: /* phrase */
+ case 25: /* phrase */
{
- sqlite3Fts5ParsePhraseFree((fts5yypminor->fts5yy53));
+ sqlite3Fts5ParsePhraseFree((fts5yypminor->fts5yy11));
}
break;
/********* End destructor definitions *****************************************/
@@ -185057,6 +188000,43 @@ static int sqlite3Fts5ParserStackPeak(void *p){
}
#endif
+/* This array of booleans keeps track of the parser statement
+** coverage. The element fts5yycoverage[X][Y] is set when the parser
+** is in state X and has a lookahead token Y. In a well-tested
+** systems, every element of this matrix should end up being set.
+*/
+#if defined(fts5YYCOVERAGE)
+static unsigned char fts5yycoverage[fts5YYNSTATE][fts5YYNFTS5TOKEN];
+#endif
+
+/*
+** Write into out a description of every state/lookahead combination that
+**
+** (1) has not been used by the parser, and
+** (2) is not a syntax error.
+**
+** Return the number of missed state/lookahead combinations.
+*/
+#if defined(fts5YYCOVERAGE)
+static int sqlite3Fts5ParserCoverage(FILE *out){
+ int stateno, iLookAhead, i;
+ int nMissed = 0;
+ for(stateno=0; stateno<fts5YYNSTATE; stateno++){
+ i = fts5yy_shift_ofst[stateno];
+ for(iLookAhead=0; iLookAhead<fts5YYNFTS5TOKEN; iLookAhead++){
+ if( fts5yy_lookahead[i+iLookAhead]!=iLookAhead ) continue;
+ if( fts5yycoverage[stateno][iLookAhead]==0 ) nMissed++;
+ if( out ){
+ fprintf(out,"State %d lookahead %s %s\n", stateno,
+ fts5yyTokenName[iLookAhead],
+ fts5yycoverage[stateno][iLookAhead] ? "ok" : "missed");
+ }
+ }
+ }
+ return nMissed;
+}
+#endif
+
/*
** Find the appropriate action for a parser given the terminal
** look-ahead token iLookAhead.
@@ -185068,13 +188048,18 @@ static unsigned int fts5yy_find_shift_action(
int i;
int stateno = pParser->fts5yytos->stateno;
- if( stateno>=fts5YY_MIN_REDUCE ) return stateno;
+ if( stateno>fts5YY_MAX_SHIFT ) return stateno;
assert( stateno <= fts5YY_SHIFT_COUNT );
+#if defined(fts5YYCOVERAGE)
+ fts5yycoverage[stateno][iLookAhead] = 1;
+#endif
do{
i = fts5yy_shift_ofst[stateno];
+ assert( i>=0 && i+fts5YYNFTS5TOKEN<=sizeof(fts5yy_lookahead)/sizeof(fts5yy_lookahead[0]) );
assert( iLookAhead!=fts5YYNOCODE );
+ assert( iLookAhead < fts5YYNFTS5TOKEN );
i += iLookAhead;
- if( i<0 || i>=fts5YY_ACTTAB_COUNT || fts5yy_lookahead[i]!=iLookAhead ){
+ if( fts5yy_lookahead[i]!=iLookAhead ){
#ifdef fts5YYFALLBACK
fts5YYCODETYPE iFallback; /* Fallback token */
if( iLookAhead<sizeof(fts5yyFallback)/sizeof(fts5yyFallback[0])
@@ -185137,7 +188122,6 @@ static int fts5yy_find_reduce_action(
assert( stateno<=fts5YY_REDUCE_COUNT );
#endif
i = fts5yy_reduce_ofst[stateno];
- assert( i!=fts5YY_REDUCE_USE_DFLT );
assert( iLookAhead!=fts5YYNOCODE );
i += iLookAhead;
#ifdef fts5YYERRORSYMBOL
@@ -185175,20 +188159,21 @@ static void fts5yyStackOverflow(fts5yyParser *fts5yypParser){
** Print tracing information for a SHIFT action
*/
#ifndef NDEBUG
-static void fts5yyTraceShift(fts5yyParser *fts5yypParser, int fts5yyNewState){
+static void fts5yyTraceShift(fts5yyParser *fts5yypParser, int fts5yyNewState, const char *zTag){
if( fts5yyTraceFILE ){
if( fts5yyNewState<fts5YYNSTATE ){
- fprintf(fts5yyTraceFILE,"%sShift '%s', go to state %d\n",
- fts5yyTracePrompt,fts5yyTokenName[fts5yypParser->fts5yytos->major],
+ fprintf(fts5yyTraceFILE,"%s%s '%s', go to state %d\n",
+ fts5yyTracePrompt, zTag, fts5yyTokenName[fts5yypParser->fts5yytos->major],
fts5yyNewState);
}else{
- fprintf(fts5yyTraceFILE,"%sShift '%s'\n",
- fts5yyTracePrompt,fts5yyTokenName[fts5yypParser->fts5yytos->major]);
+ fprintf(fts5yyTraceFILE,"%s%s '%s', pending reduce %d\n",
+ fts5yyTracePrompt, zTag, fts5yyTokenName[fts5yypParser->fts5yytos->major],
+ fts5yyNewState - fts5YY_MIN_REDUCE);
}
}
}
#else
-# define fts5yyTraceShift(X,Y)
+# define fts5yyTraceShift(X,Y,Z)
#endif
/*
@@ -185230,7 +188215,7 @@ static void fts5yy_shift(
fts5yytos->stateno = (fts5YYACTIONTYPE)fts5yyNewState;
fts5yytos->major = (fts5YYCODETYPE)fts5yyMajor;
fts5yytos->minor.fts5yy0 = fts5yyMinor;
- fts5yyTraceShift(fts5yypParser, fts5yyNewState);
+ fts5yyTraceShift(fts5yypParser, fts5yyNewState, "Shift");
}
/* The following table contains information about every rule that
@@ -185240,33 +188225,34 @@ static const struct {
fts5YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
signed char nrhs; /* Negative of the number of RHS symbols in the rule */
} fts5yyRuleInfo[] = {
- { 16, -1 },
- { 20, -4 },
- { 20, -3 },
- { 20, -1 },
- { 20, -2 },
- { 21, -2 },
- { 21, -1 },
- { 17, -3 },
- { 17, -3 },
- { 17, -3 },
- { 17, -5 },
- { 17, -3 },
- { 17, -1 },
- { 19, -1 },
- { 19, -2 },
- { 18, -1 },
- { 18, -3 },
- { 22, -1 },
- { 22, -5 },
- { 23, -1 },
- { 23, -2 },
- { 25, 0 },
- { 25, -2 },
- { 24, -4 },
- { 24, -2 },
- { 26, -1 },
- { 26, 0 },
+ { 17, -1 }, /* (0) input ::= expr */
+ { 21, -4 }, /* (1) colset ::= MINUS LCP colsetlist RCP */
+ { 21, -3 }, /* (2) colset ::= LCP colsetlist RCP */
+ { 21, -1 }, /* (3) colset ::= STRING */
+ { 21, -2 }, /* (4) colset ::= MINUS STRING */
+ { 22, -2 }, /* (5) colsetlist ::= colsetlist STRING */
+ { 22, -1 }, /* (6) colsetlist ::= STRING */
+ { 18, -3 }, /* (7) expr ::= expr AND expr */
+ { 18, -3 }, /* (8) expr ::= expr OR expr */
+ { 18, -3 }, /* (9) expr ::= expr NOT expr */
+ { 18, -5 }, /* (10) expr ::= colset COLON LP expr RP */
+ { 18, -3 }, /* (11) expr ::= LP expr RP */
+ { 18, -1 }, /* (12) expr ::= exprlist */
+ { 20, -1 }, /* (13) exprlist ::= cnearset */
+ { 20, -2 }, /* (14) exprlist ::= exprlist cnearset */
+ { 19, -1 }, /* (15) cnearset ::= nearset */
+ { 19, -3 }, /* (16) cnearset ::= colset COLON nearset */
+ { 23, -1 }, /* (17) nearset ::= phrase */
+ { 23, -2 }, /* (18) nearset ::= CARET phrase */
+ { 23, -5 }, /* (19) nearset ::= STRING LP nearphrases neardist_opt RP */
+ { 24, -1 }, /* (20) nearphrases ::= phrase */
+ { 24, -2 }, /* (21) nearphrases ::= nearphrases phrase */
+ { 26, 0 }, /* (22) neardist_opt ::= */
+ { 26, -2 }, /* (23) neardist_opt ::= COMMA STRING */
+ { 25, -4 }, /* (24) phrase ::= phrase PLUS STRING star_opt */
+ { 25, -2 }, /* (25) phrase ::= STRING star_opt */
+ { 27, -1 }, /* (26) star_opt ::= STAR */
+ { 27, 0 }, /* (27) star_opt ::= */
};
static void fts5yy_accept(fts5yyParser*); /* Forward Declaration */
@@ -185274,22 +188260,38 @@ static void fts5yy_accept(fts5yyParser*); /* Forward Declaration */
/*
** Perform a reduce action and the shift that must immediately
** follow the reduce.
+**
+** The fts5yyLookahead and fts5yyLookaheadToken parameters provide reduce actions
+** access to the lookahead token (if any). The fts5yyLookahead will be fts5YYNOCODE
+** if the lookahead token has already been consumed. As this procedure is
+** only called from one place, optimizing compilers will in-line it, which
+** means that the extra parameters have no performance impact.
*/
static void fts5yy_reduce(
fts5yyParser *fts5yypParser, /* The parser */
- unsigned int fts5yyruleno /* Number of the rule by which to reduce */
+ unsigned int fts5yyruleno, /* Number of the rule by which to reduce */
+ int fts5yyLookahead, /* Lookahead token, or fts5YYNOCODE if none */
+ sqlite3Fts5ParserFTS5TOKENTYPE fts5yyLookaheadToken /* Value of the lookahead token */
){
int fts5yygoto; /* The next state */
int fts5yyact; /* The next action */
fts5yyStackEntry *fts5yymsp; /* The top of the parser's stack */
int fts5yysize; /* Amount to pop the stack */
sqlite3Fts5ParserARG_FETCH;
+ (void)fts5yyLookahead;
+ (void)fts5yyLookaheadToken;
fts5yymsp = fts5yypParser->fts5yytos;
#ifndef NDEBUG
if( fts5yyTraceFILE && fts5yyruleno<(int)(sizeof(fts5yyRuleName)/sizeof(fts5yyRuleName[0])) ){
fts5yysize = fts5yyRuleInfo[fts5yyruleno].nrhs;
- fprintf(fts5yyTraceFILE, "%sReduce [%s], go to state %d.\n", fts5yyTracePrompt,
- fts5yyRuleName[fts5yyruleno], fts5yymsp[fts5yysize].stateno);
+ if( fts5yysize ){
+ fprintf(fts5yyTraceFILE, "%sReduce %d [%s], go to state %d.\n",
+ fts5yyTracePrompt,
+ fts5yyruleno, fts5yyRuleName[fts5yyruleno], fts5yymsp[fts5yysize].stateno);
+ }else{
+ fprintf(fts5yyTraceFILE, "%sReduce %d [%s].\n",
+ fts5yyTracePrompt, fts5yyruleno, fts5yyRuleName[fts5yyruleno]);
+ }
}
#endif /* NDEBUG */
@@ -185331,137 +188333,143 @@ static void fts5yy_reduce(
/********** Begin reduce actions **********************************************/
fts5YYMINORTYPE fts5yylhsminor;
case 0: /* input ::= expr */
-{ sqlite3Fts5ParseFinished(pParse, fts5yymsp[0].minor.fts5yy24); }
+{ sqlite3Fts5ParseFinished(pParse, fts5yymsp[0].minor.fts5yy54); }
break;
case 1: /* colset ::= MINUS LCP colsetlist RCP */
{
- fts5yymsp[-3].minor.fts5yy11 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy11);
+ fts5yymsp[-3].minor.fts5yy43 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy43);
}
break;
case 2: /* colset ::= LCP colsetlist RCP */
-{ fts5yymsp[-2].minor.fts5yy11 = fts5yymsp[-1].minor.fts5yy11; }
+{ fts5yymsp[-2].minor.fts5yy43 = fts5yymsp[-1].minor.fts5yy43; }
break;
case 3: /* colset ::= STRING */
{
- fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0);
+ fts5yylhsminor.fts5yy43 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0);
}
- fts5yymsp[0].minor.fts5yy11 = fts5yylhsminor.fts5yy11;
+ fts5yymsp[0].minor.fts5yy43 = fts5yylhsminor.fts5yy43;
break;
case 4: /* colset ::= MINUS STRING */
{
- fts5yymsp[-1].minor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0);
- fts5yymsp[-1].minor.fts5yy11 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy11);
+ fts5yymsp[-1].minor.fts5yy43 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0);
+ fts5yymsp[-1].minor.fts5yy43 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy43);
}
break;
case 5: /* colsetlist ::= colsetlist STRING */
{
- fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, fts5yymsp[-1].minor.fts5yy11, &fts5yymsp[0].minor.fts5yy0); }
- fts5yymsp[-1].minor.fts5yy11 = fts5yylhsminor.fts5yy11;
+ fts5yylhsminor.fts5yy43 = sqlite3Fts5ParseColset(pParse, fts5yymsp[-1].minor.fts5yy43, &fts5yymsp[0].minor.fts5yy0); }
+ fts5yymsp[-1].minor.fts5yy43 = fts5yylhsminor.fts5yy43;
break;
case 6: /* colsetlist ::= STRING */
{
- fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0);
+ fts5yylhsminor.fts5yy43 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0);
}
- fts5yymsp[0].minor.fts5yy11 = fts5yylhsminor.fts5yy11;
+ fts5yymsp[0].minor.fts5yy43 = fts5yylhsminor.fts5yy43;
break;
case 7: /* expr ::= expr AND expr */
{
- fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_AND, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0);
+ fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_AND, fts5yymsp[-2].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54, 0);
}
- fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 8: /* expr ::= expr OR expr */
{
- fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_OR, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0);
+ fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_OR, fts5yymsp[-2].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54, 0);
}
- fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 9: /* expr ::= expr NOT expr */
{
- fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_NOT, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0);
+ fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_NOT, fts5yymsp[-2].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54, 0);
}
- fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 10: /* expr ::= colset COLON LP expr RP */
{
- sqlite3Fts5ParseSetColset(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[-4].minor.fts5yy11);
- fts5yylhsminor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24;
+ sqlite3Fts5ParseSetColset(pParse, fts5yymsp[-1].minor.fts5yy54, fts5yymsp[-4].minor.fts5yy43);
+ fts5yylhsminor.fts5yy54 = fts5yymsp[-1].minor.fts5yy54;
}
- fts5yymsp[-4].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[-4].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 11: /* expr ::= LP expr RP */
-{fts5yymsp[-2].minor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24;}
+{fts5yymsp[-2].minor.fts5yy54 = fts5yymsp[-1].minor.fts5yy54;}
break;
case 12: /* expr ::= exprlist */
case 13: /* exprlist ::= cnearset */ fts5yytestcase(fts5yyruleno==13);
-{fts5yylhsminor.fts5yy24 = fts5yymsp[0].minor.fts5yy24;}
- fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+{fts5yylhsminor.fts5yy54 = fts5yymsp[0].minor.fts5yy54;}
+ fts5yymsp[0].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 14: /* exprlist ::= exprlist cnearset */
{
- fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseImplicitAnd(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24);
+ fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseImplicitAnd(pParse, fts5yymsp[-1].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54);
}
- fts5yymsp[-1].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[-1].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 15: /* cnearset ::= nearset */
{
- fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46);
+ fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy14);
}
- fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[0].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 16: /* cnearset ::= colset COLON nearset */
{
- fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46);
- sqlite3Fts5ParseSetColset(pParse, fts5yylhsminor.fts5yy24, fts5yymsp[-2].minor.fts5yy11);
+ fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy14);
+ sqlite3Fts5ParseSetColset(pParse, fts5yylhsminor.fts5yy54, fts5yymsp[-2].minor.fts5yy43);
}
- fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24;
+ fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54;
break;
case 17: /* nearset ::= phrase */
-{ fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy53); }
- fts5yymsp[0].minor.fts5yy46 = fts5yylhsminor.fts5yy46;
+{ fts5yylhsminor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy11); }
+ fts5yymsp[0].minor.fts5yy14 = fts5yylhsminor.fts5yy14;
+ break;
+ case 18: /* nearset ::= CARET phrase */
+{
+ sqlite3Fts5ParseSetCaret(fts5yymsp[0].minor.fts5yy11);
+ fts5yymsp[-1].minor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy11);
+}
break;
- case 18: /* nearset ::= STRING LP nearphrases neardist_opt RP */
+ case 19: /* nearset ::= STRING LP nearphrases neardist_opt RP */
{
sqlite3Fts5ParseNear(pParse, &fts5yymsp[-4].minor.fts5yy0);
- sqlite3Fts5ParseSetDistance(pParse, fts5yymsp[-2].minor.fts5yy46, &fts5yymsp[-1].minor.fts5yy0);
- fts5yylhsminor.fts5yy46 = fts5yymsp[-2].minor.fts5yy46;
+ sqlite3Fts5ParseSetDistance(pParse, fts5yymsp[-2].minor.fts5yy14, &fts5yymsp[-1].minor.fts5yy0);
+ fts5yylhsminor.fts5yy14 = fts5yymsp[-2].minor.fts5yy14;
}
- fts5yymsp[-4].minor.fts5yy46 = fts5yylhsminor.fts5yy46;
+ fts5yymsp[-4].minor.fts5yy14 = fts5yylhsminor.fts5yy14;
break;
- case 19: /* nearphrases ::= phrase */
+ case 20: /* nearphrases ::= phrase */
{
- fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy53);
+ fts5yylhsminor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy11);
}
- fts5yymsp[0].minor.fts5yy46 = fts5yylhsminor.fts5yy46;
+ fts5yymsp[0].minor.fts5yy14 = fts5yylhsminor.fts5yy14;
break;
- case 20: /* nearphrases ::= nearphrases phrase */
+ case 21: /* nearphrases ::= nearphrases phrase */
{
- fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, fts5yymsp[-1].minor.fts5yy46, fts5yymsp[0].minor.fts5yy53);
+ fts5yylhsminor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, fts5yymsp[-1].minor.fts5yy14, fts5yymsp[0].minor.fts5yy11);
}
- fts5yymsp[-1].minor.fts5yy46 = fts5yylhsminor.fts5yy46;
+ fts5yymsp[-1].minor.fts5yy14 = fts5yylhsminor.fts5yy14;
break;
- case 21: /* neardist_opt ::= */
+ case 22: /* neardist_opt ::= */
{ fts5yymsp[1].minor.fts5yy0.p = 0; fts5yymsp[1].minor.fts5yy0.n = 0; }
break;
- case 22: /* neardist_opt ::= COMMA STRING */
+ case 23: /* neardist_opt ::= COMMA STRING */
{ fts5yymsp[-1].minor.fts5yy0 = fts5yymsp[0].minor.fts5yy0; }
break;
- case 23: /* phrase ::= phrase PLUS STRING star_opt */
+ case 24: /* phrase ::= phrase PLUS STRING star_opt */
{
- fts5yylhsminor.fts5yy53 = sqlite3Fts5ParseTerm(pParse, fts5yymsp[-3].minor.fts5yy53, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4);
+ fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseTerm(pParse, fts5yymsp[-3].minor.fts5yy11, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4);
}
- fts5yymsp[-3].minor.fts5yy53 = fts5yylhsminor.fts5yy53;
+ fts5yymsp[-3].minor.fts5yy11 = fts5yylhsminor.fts5yy11;
break;
- case 24: /* phrase ::= STRING star_opt */
+ case 25: /* phrase ::= STRING star_opt */
{
- fts5yylhsminor.fts5yy53 = sqlite3Fts5ParseTerm(pParse, 0, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4);
+ fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseTerm(pParse, 0, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4);
}
- fts5yymsp[-1].minor.fts5yy53 = fts5yylhsminor.fts5yy53;
+ fts5yymsp[-1].minor.fts5yy11 = fts5yylhsminor.fts5yy11;
break;
- case 25: /* star_opt ::= STAR */
+ case 26: /* star_opt ::= STAR */
{ fts5yymsp[0].minor.fts5yy4 = 1; }
break;
- case 26: /* star_opt ::= */
+ case 27: /* star_opt ::= */
{ fts5yymsp[1].minor.fts5yy4 = 0; }
break;
default:
@@ -185480,16 +188488,11 @@ static void fts5yy_reduce(
/* It is not possible for a REDUCE to be followed by an error */
assert( fts5yyact!=fts5YY_ERROR_ACTION );
- if( fts5yyact==fts5YY_ACCEPT_ACTION ){
- fts5yypParser->fts5yytos += fts5yysize;
- fts5yy_accept(fts5yypParser);
- }else{
- fts5yymsp += fts5yysize+1;
- fts5yypParser->fts5yytos = fts5yymsp;
- fts5yymsp->stateno = (fts5YYACTIONTYPE)fts5yyact;
- fts5yymsp->major = (fts5YYCODETYPE)fts5yygoto;
- fts5yyTraceShift(fts5yypParser, fts5yyact);
- }
+ fts5yymsp += fts5yysize+1;
+ fts5yypParser->fts5yytos = fts5yymsp;
+ fts5yymsp->stateno = (fts5YYACTIONTYPE)fts5yyact;
+ fts5yymsp->major = (fts5YYCODETYPE)fts5yygoto;
+ fts5yyTraceShift(fts5yypParser, fts5yyact, "... then shift");
}
/*
@@ -185601,20 +188604,31 @@ static void sqlite3Fts5Parser(
#ifndef NDEBUG
if( fts5yyTraceFILE ){
- fprintf(fts5yyTraceFILE,"%sInput '%s'\n",fts5yyTracePrompt,fts5yyTokenName[fts5yymajor]);
+ int stateno = fts5yypParser->fts5yytos->stateno;
+ if( stateno < fts5YY_MIN_REDUCE ){
+ fprintf(fts5yyTraceFILE,"%sInput '%s' in state %d\n",
+ fts5yyTracePrompt,fts5yyTokenName[fts5yymajor],stateno);
+ }else{
+ fprintf(fts5yyTraceFILE,"%sInput '%s' with pending reduce %d\n",
+ fts5yyTracePrompt,fts5yyTokenName[fts5yymajor],stateno-fts5YY_MIN_REDUCE);
+ }
}
#endif
do{
fts5yyact = fts5yy_find_shift_action(fts5yypParser,(fts5YYCODETYPE)fts5yymajor);
- if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){
+ if( fts5yyact >= fts5YY_MIN_REDUCE ){
+ fts5yy_reduce(fts5yypParser,fts5yyact-fts5YY_MIN_REDUCE,fts5yymajor,fts5yyminor);
+ }else if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){
fts5yy_shift(fts5yypParser,fts5yyact,fts5yymajor,fts5yyminor);
#ifndef fts5YYNOERRORRECOVERY
fts5yypParser->fts5yyerrcnt--;
#endif
fts5yymajor = fts5YYNOCODE;
- }else if( fts5yyact <= fts5YY_MAX_REDUCE ){
- fts5yy_reduce(fts5yypParser,fts5yyact-fts5YY_MIN_REDUCE);
+ }else if( fts5yyact==fts5YY_ACCEPT_ACTION ){
+ fts5yypParser->fts5yytos--;
+ fts5yy_accept(fts5yypParser);
+ return;
}else{
assert( fts5yyact == fts5YY_ERROR_ACTION );
fts5yyminorunion.fts5yy0 = fts5yyminor;
@@ -186094,6 +189108,16 @@ static int fts5SnippetScore(
}
/*
+** Return the value in pVal interpreted as utf-8 text. Except, if pVal
+** contains a NULL value, return a pointer to a static string zero
+** bytes in length instead of a NULL pointer.
+*/
+static const char *fts5ValueToText(sqlite3_value *pVal){
+ const char *zRet = (const char*)sqlite3_value_text(pVal);
+ return zRet ? zRet : "";
+}
+
+/*
** Implementation of snippet() function.
*/
static void fts5SnippetFunction(
@@ -186128,9 +189152,9 @@ static void fts5SnippetFunction(
nCol = pApi->xColumnCount(pFts);
memset(&ctx, 0, sizeof(HighlightContext));
iCol = sqlite3_value_int(apVal[0]);
- ctx.zOpen = (const char*)sqlite3_value_text(apVal[1]);
- ctx.zClose = (const char*)sqlite3_value_text(apVal[2]);
- zEllips = (const char*)sqlite3_value_text(apVal[3]);
+ ctx.zOpen = fts5ValueToText(apVal[1]);
+ ctx.zClose = fts5ValueToText(apVal[2]);
+ zEllips = fts5ValueToText(apVal[3]);
nToken = sqlite3_value_int(apVal[4]);
iBestCol = (iCol>=0 ? iCol : 0);
@@ -187884,7 +190908,8 @@ struct Fts5ExprNode {
** or term prefix.
*/
struct Fts5ExprTerm {
- int bPrefix; /* True for a prefix term */
+ u8 bPrefix; /* True for a prefix term */
+ u8 bFirst; /* True if token must be first in column */
char *zTerm; /* nul-terminated term */
Fts5IndexIter *pIter; /* Iterator for this term */
Fts5ExprTerm *pSynonym; /* Pointer to first in list of synonyms */
@@ -187965,6 +190990,7 @@ static int fts5ExprGetToken(
case '+': tok = FTS5_PLUS; break;
case '*': tok = FTS5_STAR; break;
case '-': tok = FTS5_MINUS; break;
+ case '^': tok = FTS5_CARET; break;
case '\0': tok = FTS5_EOF; break;
case '"': {
@@ -188224,6 +191250,7 @@ static int fts5ExprPhraseIsMatch(
Fts5PoslistReader *aIter = aStatic;
int i;
int rc = SQLITE_OK;
+ int bFirst = pPhrase->aTerm[0].bFirst;
fts5BufferZero(&pPhrase->poslist);
@@ -188278,8 +191305,10 @@ static int fts5ExprPhraseIsMatch(
}while( bMatch==0 );
/* Append position iPos to the output */
- rc = sqlite3Fts5PoslistWriterAppend(&pPhrase->poslist, &writer, iPos);
- if( rc!=SQLITE_OK ) goto ismatch_out;
+ if( bFirst==0 || FTS5_POS2OFFSET(iPos)==0 ){
+ rc = sqlite3Fts5PoslistWriterAppend(&pPhrase->poslist, &writer, iPos);
+ if( rc!=SQLITE_OK ) goto ismatch_out;
+ }
for(i=0; i<pPhrase->nTerm; i++){
if( sqlite3Fts5PoslistReaderNext(&aIter[i]) ) goto ismatch_out;
@@ -188533,7 +191562,9 @@ static int fts5ExprNearTest(
** phrase is not a match, break out of the loop early. */
for(i=0; rc==SQLITE_OK && i<pNear->nPhrase; i++){
Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
- if( pPhrase->nTerm>1 || pPhrase->aTerm[0].pSynonym || pNear->pColset ){
+ if( pPhrase->nTerm>1 || pPhrase->aTerm[0].pSynonym
+ || pNear->pColset || pPhrase->aTerm[0].bFirst
+ ){
int bMatch = 0;
rc = fts5ExprPhraseIsMatch(pNode, pPhrase, &bMatch);
if( bMatch==0 ) break;
@@ -188714,6 +191745,7 @@ static int fts5ExprNodeTest_STRING(
assert( pNear->nPhrase>1
|| pNear->apPhrase[0]->nTerm>1
|| pNear->apPhrase[0]->aTerm[0].pSynonym
+ || pNear->apPhrase[0]->aTerm[0].bFirst
);
/* Initialize iLast, the "lastest" rowid any iterator points to. If the
@@ -189239,6 +192271,16 @@ static void fts5ExprPhraseFree(Fts5ExprPhrase *pPhrase){
}
/*
+** Set the "bFirst" flag on the first token of the phrase passed as the
+** only argument.
+*/
+static void sqlite3Fts5ParseSetCaret(Fts5ExprPhrase *pPhrase){
+ if( pPhrase && pPhrase->nTerm ){
+ pPhrase->aTerm[0].bFirst = 1;
+ }
+}
+
+/*
** If argument pNear is NULL, then a new Fts5ExprNearset object is allocated
** and populated with pPhrase. Or, if pNear is not NULL, phrase pPhrase is
** appended to it and the results returned.
@@ -189516,6 +192558,7 @@ static int sqlite3Fts5ExprClonePhrase(
}
if( rc==SQLITE_OK ){
sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix;
+ sCtx.pPhrase->aTerm[i].bFirst = pOrig->aTerm[i].bFirst;
}
}
}else{
@@ -189534,7 +192577,10 @@ static int sqlite3Fts5ExprClonePhrase(
pNew->pRoot->pNear->nPhrase = 1;
sCtx.pPhrase->pNode = pNew->pRoot;
- if( pOrig->nTerm==1 && pOrig->aTerm[0].pSynonym==0 ){
+ if( pOrig->nTerm==1
+ && pOrig->aTerm[0].pSynonym==0
+ && pOrig->aTerm[0].bFirst==0
+ ){
pNew->pRoot->eType = FTS5_TERM;
pNew->pRoot->xNext = fts5ExprNodeNext_TERM;
}else{
@@ -189808,6 +192854,7 @@ static void fts5ExprAssignXNext(Fts5ExprNode *pNode){
Fts5ExprNearset *pNear = pNode->pNear;
if( pNear->nPhrase==1 && pNear->apPhrase[0]->nTerm==1
&& pNear->apPhrase[0]->aTerm[0].pSynonym==0
+ && pNear->apPhrase[0]->aTerm[0].bFirst==0
){
pNode->eType = FTS5_TERM;
pNode->xNext = fts5ExprNodeNext_TERM;
@@ -189894,20 +192941,23 @@ static Fts5ExprNode *sqlite3Fts5ParseNode(
}
}
- if( pParse->pConfig->eDetail!=FTS5_DETAIL_FULL
- && (pNear->nPhrase!=1 || pNear->apPhrase[0]->nTerm>1)
- ){
- assert( pParse->rc==SQLITE_OK );
- pParse->rc = SQLITE_ERROR;
- assert( pParse->zErr==0 );
- pParse->zErr = sqlite3_mprintf(
- "fts5: %s queries are not supported (detail!=full)",
- pNear->nPhrase==1 ? "phrase": "NEAR"
- );
- sqlite3_free(pRet);
- pRet = 0;
+ if( pParse->pConfig->eDetail!=FTS5_DETAIL_FULL ){
+ Fts5ExprPhrase *pPhrase = pNear->apPhrase[0];
+ if( pNear->nPhrase!=1
+ || pPhrase->nTerm>1
+ || (pPhrase->nTerm>0 && pPhrase->aTerm[0].bFirst)
+ ){
+ assert( pParse->rc==SQLITE_OK );
+ pParse->rc = SQLITE_ERROR;
+ assert( pParse->zErr==0 );
+ pParse->zErr = sqlite3_mprintf(
+ "fts5: %s queries are not supported (detail!=full)",
+ pNear->nPhrase==1 ? "phrase": "NEAR"
+ );
+ sqlite3_free(pRet);
+ pRet = 0;
+ }
}
-
}else{
fts5ExprAddChildren(pRet, pLeft);
fts5ExprAddChildren(pRet, pRight);
@@ -196061,7 +199111,13 @@ static void fts5MergePrefixLists(
Fts5Buffer out = {0, 0, 0};
Fts5Buffer tmp = {0, 0, 0};
- if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n) ) return;
+ /* The maximum size of the output is equal to the sum of the two
+ ** input sizes + 1 varint (9 bytes). The extra varint is because if the
+ ** first rowid in one input is a large negative number, and the first in
+ ** the other a non-negative number, the delta for the non-negative
+ ** number will be larger on disk than the literal integer value
+ ** was. */
+ if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n + 9) ) return;
fts5DoclistIterInit(p1, &i1);
fts5DoclistIterInit(p2, &i2);
@@ -196155,6 +199211,7 @@ static void fts5MergePrefixLists(
fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid);
fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.aEof - i2.aPoslist);
}
+ assert( out.n<=(p1->n+p2->n+9) );
fts5BufferSet(&p->rc, p1, out.n, out.p);
fts5BufferFree(&tmp);
@@ -200276,7 +203333,7 @@ static void fts5SourceIdFunc(
){
assert( nArg==0 );
UNUSED_PARAM2(nArg, apUnused);
- sqlite3_result_text(pCtx, "fts5: 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34", -1, SQLITE_TRANSIENT);
+ sqlite3_result_text(pCtx, "fts5: 2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d", -1, SQLITE_TRANSIENT);
}
static int fts5Init(sqlite3 *db){
@@ -203504,6 +206561,11 @@ static int sqlite3Fts5GetVarintLen(u32 iVal){
** the number of fts5 rows that contain at least one instance of term
** $term. Field $cnt is set to the total number of instances of term
** $term in the database.
+**
+** instance:
+** CREATE TABLE vocab(term, doc, col, offset, PRIMARY KEY(<all-fields>));
+**
+** One row for each term instance in the database.
*/
@@ -203519,7 +206581,7 @@ struct Fts5VocabTable {
char *zFts5Db; /* Db containing fts5 table */
sqlite3 *db; /* Database handle */
Fts5Global *pGlobal; /* FTS5 global object for this database */
- int eType; /* FTS5_VOCAB_COL or ROW */
+ int eType; /* FTS5_VOCAB_COL, ROW or INSTANCE */
};
struct Fts5VocabCursor {
@@ -203539,16 +206601,22 @@ struct Fts5VocabCursor {
i64 *aCnt;
i64 *aDoc;
- /* Output values used by 'row' and 'col' tables */
+ /* Output values used by all tables. */
i64 rowid; /* This table's current rowid value */
Fts5Buffer term; /* Current value of 'term' column */
+
+ /* Output values Used by 'instance' tables only */
+ i64 iInstPos;
+ int iInstOff;
};
-#define FTS5_VOCAB_COL 0
-#define FTS5_VOCAB_ROW 1
+#define FTS5_VOCAB_COL 0
+#define FTS5_VOCAB_ROW 1
+#define FTS5_VOCAB_INSTANCE 2
#define FTS5_VOCAB_COL_SCHEMA "term, col, doc, cnt"
#define FTS5_VOCAB_ROW_SCHEMA "term, doc, cnt"
+#define FTS5_VOCAB_INST_SCHEMA "term, doc, col, offset"
/*
** Bits for the mask used as the idxNum value by xBestIndex/xFilter.
@@ -203576,6 +206644,9 @@ static int fts5VocabTableType(const char *zType, char **pzErr, int *peType){
if( sqlite3_stricmp(zCopy, "row")==0 ){
*peType = FTS5_VOCAB_ROW;
}else
+ if( sqlite3_stricmp(zCopy, "instance")==0 ){
+ *peType = FTS5_VOCAB_INSTANCE;
+ }else
{
*pzErr = sqlite3_mprintf("fts5vocab: unknown table type: %Q", zCopy);
rc = SQLITE_ERROR;
@@ -203636,7 +206707,8 @@ static int fts5VocabInitVtab(
){
const char *azSchema[] = {
"CREATE TABlE vocab(" FTS5_VOCAB_COL_SCHEMA ")",
- "CREATE TABlE vocab(" FTS5_VOCAB_ROW_SCHEMA ")"
+ "CREATE TABlE vocab(" FTS5_VOCAB_ROW_SCHEMA ")",
+ "CREATE TABlE vocab(" FTS5_VOCAB_INST_SCHEMA ")"
};
Fts5VocabTable *pRet = 0;
@@ -203710,6 +206782,15 @@ static int fts5VocabCreateMethod(
/*
** Implementation of the xBestIndex method.
+**
+** Only constraints of the form:
+**
+** term <= ?
+** term == ?
+** term >= ?
+**
+** are interpreted. Less-than and less-than-or-equal are treated
+** identically, as are greater-than and greater-than-or-equal.
*/
static int fts5VocabBestIndexMethod(
sqlite3_vtab *pUnused,
@@ -203853,6 +206934,54 @@ static int fts5VocabCloseMethod(sqlite3_vtab_cursor *pCursor){
return SQLITE_OK;
}
+static int fts5VocabInstanceNewTerm(Fts5VocabCursor *pCsr){
+ int rc = SQLITE_OK;
+
+ if( sqlite3Fts5IterEof(pCsr->pIter) ){
+ pCsr->bEof = 1;
+ }else{
+ const char *zTerm;
+ int nTerm;
+ zTerm = sqlite3Fts5IterTerm(pCsr->pIter, &nTerm);
+ if( pCsr->nLeTerm>=0 ){
+ int nCmp = MIN(nTerm, pCsr->nLeTerm);
+ int bCmp = memcmp(pCsr->zLeTerm, zTerm, nCmp);
+ if( bCmp<0 || (bCmp==0 && pCsr->nLeTerm<nTerm) ){
+ pCsr->bEof = 1;
+ }
+ }
+
+ sqlite3Fts5BufferSet(&rc, &pCsr->term, nTerm, (const u8*)zTerm);
+ }
+ return rc;
+}
+
+static int fts5VocabInstanceNext(Fts5VocabCursor *pCsr){
+ int eDetail = pCsr->pConfig->eDetail;
+ int rc = SQLITE_OK;
+ Fts5IndexIter *pIter = pCsr->pIter;
+ i64 *pp = &pCsr->iInstPos;
+ int *po = &pCsr->iInstOff;
+
+ while( eDetail==FTS5_DETAIL_NONE
+ || sqlite3Fts5PoslistNext64(pIter->pData, pIter->nData, po, pp)
+ ){
+ pCsr->iInstPos = 0;
+ pCsr->iInstOff = 0;
+
+ rc = sqlite3Fts5IterNextScan(pCsr->pIter);
+ if( rc==SQLITE_OK ){
+ rc = fts5VocabInstanceNewTerm(pCsr);
+ if( eDetail==FTS5_DETAIL_NONE ) break;
+ }
+ if( rc ){
+ pCsr->bEof = 1;
+ break;
+ }
+ }
+
+ return rc;
+}
/*
** Advance the cursor to the next row in the table.
@@ -203865,13 +206994,17 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
pCsr->rowid++;
+ if( pTab->eType==FTS5_VOCAB_INSTANCE ){
+ return fts5VocabInstanceNext(pCsr);
+ }
+
if( pTab->eType==FTS5_VOCAB_COL ){
for(pCsr->iCol++; pCsr->iCol<nCol; pCsr->iCol++){
if( pCsr->aDoc[pCsr->iCol] ) break;
}
}
- if( pTab->eType==FTS5_VOCAB_ROW || pCsr->iCol>=nCol ){
+ if( pTab->eType!=FTS5_VOCAB_COL || pCsr->iCol>=nCol ){
if( sqlite3Fts5IterEof(pCsr->pIter) ){
pCsr->bEof = 1;
}else{
@@ -203895,22 +207028,26 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
assert( pTab->eType==FTS5_VOCAB_COL || pTab->eType==FTS5_VOCAB_ROW );
while( rc==SQLITE_OK ){
+ int eDetail = pCsr->pConfig->eDetail;
const u8 *pPos; int nPos; /* Position list */
i64 iPos = 0; /* 64-bit position read from poslist */
int iOff = 0; /* Current offset within position list */
pPos = pCsr->pIter->pData;
nPos = pCsr->pIter->nData;
- switch( pCsr->pConfig->eDetail ){
- case FTS5_DETAIL_FULL:
- pPos = pCsr->pIter->pData;
- nPos = pCsr->pIter->nData;
- if( pTab->eType==FTS5_VOCAB_ROW ){
+
+ switch( pTab->eType ){
+ case FTS5_VOCAB_ROW:
+ if( eDetail==FTS5_DETAIL_FULL ){
while( 0==sqlite3Fts5PoslistNext64(pPos, nPos, &iOff, &iPos) ){
pCsr->aCnt[0]++;
}
- pCsr->aDoc[0]++;
- }else{
+ }
+ pCsr->aDoc[0]++;
+ break;
+
+ case FTS5_VOCAB_COL:
+ if( eDetail==FTS5_DETAIL_FULL ){
int iCol = -1;
while( 0==sqlite3Fts5PoslistNext64(pPos, nPos, &iOff, &iPos) ){
int ii = FTS5_POS2COLUMN(iPos);
@@ -203924,13 +207061,7 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
iCol = ii;
}
}
- }
- break;
-
- case FTS5_DETAIL_COLUMNS:
- if( pTab->eType==FTS5_VOCAB_ROW ){
- pCsr->aDoc[0]++;
- }else{
+ }else if( eDetail==FTS5_DETAIL_COLUMNS ){
while( 0==sqlite3Fts5PoslistNext64(pPos, nPos, &iOff,&iPos) ){
assert_nc( iPos>=0 && iPos<nCol );
if( iPos>=nCol ){
@@ -203939,18 +207070,21 @@ static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
}
pCsr->aDoc[iPos]++;
}
+ }else{
+ assert( eDetail==FTS5_DETAIL_NONE );
+ pCsr->aDoc[0]++;
}
break;
- default:
- assert( pCsr->pConfig->eDetail==FTS5_DETAIL_NONE );
- pCsr->aDoc[0]++;
+ default:
+ assert( pTab->eType==FTS5_VOCAB_INSTANCE );
break;
}
if( rc==SQLITE_OK ){
rc = sqlite3Fts5IterNextScan(pCsr->pIter);
}
+ if( pTab->eType==FTS5_VOCAB_INSTANCE ) break;
if( rc==SQLITE_OK ){
zTerm = sqlite3Fts5IterTerm(pCsr->pIter, &nTerm);
@@ -203980,7 +207114,9 @@ static int fts5VocabFilterMethod(
int nUnused, /* Number of elements in apVal */
sqlite3_value **apVal /* Arguments for the indexing scheme */
){
+ Fts5VocabTable *pTab = (Fts5VocabTable*)pCursor->pVtab;
Fts5VocabCursor *pCsr = (Fts5VocabCursor*)pCursor;
+ int eType = pTab->eType;
int rc = SQLITE_OK;
int iVal = 0;
@@ -204020,11 +207156,16 @@ static int fts5VocabFilterMethod(
}
}
-
if( rc==SQLITE_OK ){
rc = sqlite3Fts5IndexQuery(pCsr->pIndex, zTerm, nTerm, f, 0, &pCsr->pIter);
}
- if( rc==SQLITE_OK ){
+ if( rc==SQLITE_OK && eType==FTS5_VOCAB_INSTANCE ){
+ rc = fts5VocabInstanceNewTerm(pCsr);
+ }
+ if( rc==SQLITE_OK
+ && !pCsr->bEof
+ && (eType!=FTS5_VOCAB_INSTANCE || pCsr->pConfig->eDetail!=FTS5_DETAIL_NONE)
+ ){
rc = fts5VocabNextMethod(pCursor);
}
@@ -204066,13 +207207,41 @@ static int fts5VocabColumnMethod(
}else{
iVal = pCsr->aCnt[pCsr->iCol];
}
- }else{
+ }else if( eType==FTS5_VOCAB_ROW ){
assert( iCol==1 || iCol==2 );
if( iCol==1 ){
iVal = pCsr->aDoc[0];
}else{
iVal = pCsr->aCnt[0];
}
+ }else{
+ assert( eType==FTS5_VOCAB_INSTANCE );
+ switch( iCol ){
+ case 1:
+ sqlite3_result_int64(pCtx, pCsr->pIter->iRowid);
+ break;
+ case 2: {
+ int ii = -1;
+ if( eDetail==FTS5_DETAIL_FULL ){
+ ii = FTS5_POS2COLUMN(pCsr->iInstPos);
+ }else if( eDetail==FTS5_DETAIL_COLUMNS ){
+ ii = (int)pCsr->iInstPos;
+ }
+ if( ii>=0 && ii<pCsr->pConfig->nCol ){
+ const char *z = pCsr->pConfig->azCol[ii];
+ sqlite3_result_text(pCtx, z, -1, SQLITE_STATIC);
+ }
+ break;
+ }
+ default: {
+ assert( iCol==3 );
+ if( eDetail==FTS5_DETAIL_FULL ){
+ int ii = FTS5_POS2OFFSET(pCsr->iInstPos);
+ sqlite3_result_int(pCtx, ii);
+ }
+ break;
+ }
+ }
}
if( iVal>0 ) sqlite3_result_int64(pCtx, iVal);
@@ -204432,3 +207601,10 @@ SQLITE_API int sqlite3_stmt_init(
#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */
/************** End of stmt.c ************************************************/
+#if __LINE__!=207604
+#undef SQLITE_SOURCE_ID
+#define SQLITE_SOURCE_ID "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2alt2"
+#endif
+/* Return the source-id for this library */
+SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
+/************************** End of sqlite3.c ******************************/
diff --git a/src/3rdparty/sqlite/sqlite3.h b/src/3rdparty/sqlite/sqlite3.h
index 41ccc21983..d8138b709a 100644
--- a/src/3rdparty/sqlite/sqlite3.h
+++ b/src/3rdparty/sqlite/sqlite3.h
@@ -115,15 +115,17 @@ extern "C" {
** a string which identifies a particular check-in of SQLite
** within its configuration management system. ^The SQLITE_SOURCE_ID
** string contains the date and time of the check-in (UTC) and a SHA1
-** or SHA3-256 hash of the entire source tree.
+** or SHA3-256 hash of the entire source tree. If the source code has
+** been edited in any way since it was last checked in, then the last
+** four hexadecimal digits of the hash may be modified.
**
** See also: [sqlite3_libversion()],
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.20.1"
-#define SQLITE_VERSION_NUMBER 3020001
-#define SQLITE_SOURCE_ID "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34"
+#define SQLITE_VERSION "3.22.0"
+#define SQLITE_VERSION_NUMBER 3022000
+#define SQLITE_SOURCE_ID "2018-01-22 18:45:57 0c55d179733b46d8d0ba4d88e01a25e10677046ee3da1d5b1581e86726f2171d"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -139,7 +141,7 @@ extern "C" {
**
** <blockquote><pre>
** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
-** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
+** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
** </pre></blockquote>)^
**
@@ -149,9 +151,11 @@ extern "C" {
** function is provided for use in DLLs since DLL users usually do not have
** direct access to string constants within the DLL. ^The
** sqlite3_libversion_number() function returns an integer equal to
-** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns
+** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns
** a pointer to a string constant whose value is the same as the
-** [SQLITE_SOURCE_ID] C preprocessor macro.
+** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built
+** using an edited copy of [the amalgamation], then the last four characters
+** of the hash might be different from [SQLITE_SOURCE_ID].)^
**
** See also: [sqlite_version()] and [sqlite_source_id()].
*/
@@ -432,7 +436,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_FULL 13 /* Insertion failed because database is full */
#define SQLITE_CANTOPEN 14 /* Unable to open the database file */
#define SQLITE_PROTOCOL 15 /* Database lock protocol error */
-#define SQLITE_EMPTY 16 /* Not used */
+#define SQLITE_EMPTY 16 /* Internal use only */
#define SQLITE_SCHEMA 17 /* The database schema changed */
#define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */
#define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */
@@ -466,6 +470,8 @@ SQLITE_API int sqlite3_exec(
** the most recent error can be obtained using
** [sqlite3_extended_errcode()].
*/
+#define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8))
+#define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8))
#define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8))
#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8))
#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8))
@@ -494,6 +500,9 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_IOERR_CONVPATH (SQLITE_IOERR | (26<<8))
#define SQLITE_IOERR_VNODE (SQLITE_IOERR | (27<<8))
#define SQLITE_IOERR_AUTH (SQLITE_IOERR | (28<<8))
+#define SQLITE_IOERR_BEGIN_ATOMIC (SQLITE_IOERR | (29<<8))
+#define SQLITE_IOERR_COMMIT_ATOMIC (SQLITE_IOERR | (30<<8))
+#define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8))
#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
#define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
#define SQLITE_BUSY_SNAPSHOT (SQLITE_BUSY | (2<<8))
@@ -506,6 +515,8 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
#define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8))
#define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4<<8))
+#define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5<<8))
+#define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6<<8))
#define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8))
#define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8))
#define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8))
@@ -580,6 +591,11 @@ SQLITE_API int sqlite3_exec(
** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
** read-only media and cannot be changed even by processes with
** elevated privileges.
+**
+** The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+** filesystem supports doing multiple write operations atomically when those
+** write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
+** [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
*/
#define SQLITE_IOCAP_ATOMIC 0x00000001
#define SQLITE_IOCAP_ATOMIC512 0x00000002
@@ -595,6 +611,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
#define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
#define SQLITE_IOCAP_IMMUTABLE 0x00002000
+#define SQLITE_IOCAP_BATCH_ATOMIC 0x00004000
/*
** CAPI3REF: File Locking Levels
@@ -729,6 +746,7 @@ struct sqlite3_file {
** <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN]
** <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE]
** <li> [SQLITE_IOCAP_IMMUTABLE]
+** <li> [SQLITE_IOCAP_BATCH_ATOMIC]
** </ul>
**
** The SQLITE_IOCAP_ATOMIC property means that all writes of
@@ -1012,6 +1030,40 @@ struct sqlite3_io_methods {
** The [SQLITE_FCNTL_RBU] opcode is implemented by the special VFS used by
** the RBU extension only. All other VFS should return SQLITE_NOTFOUND for
** this opcode.
+**
+** <li>[[SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]]
+** If the [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] opcode returns SQLITE_OK, then
+** the file descriptor is placed in "batch write mode", which
+** means all subsequent write operations will be deferred and done
+** atomically at the next [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]. Systems
+** that do not support batch atomic writes will return SQLITE_NOTFOUND.
+** ^Following a successful SQLITE_FCNTL_BEGIN_ATOMIC_WRITE and prior to
+** the closing [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] or
+** [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE], SQLite will make
+** no VFS interface calls on the same [sqlite3_file] file descriptor
+** except for calls to the xWrite method and the xFileControl method
+** with [SQLITE_FCNTL_SIZE_HINT].
+**
+** <li>[[SQLITE_FCNTL_COMMIT_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be performed atomically.
+** This file control returns [SQLITE_OK] if and only if the writes were
+** all performed successfully and have been committed to persistent storage.
+** ^Regardless of whether or not it is successful, this file control takes
+** the file descriptor out of batch write mode so that all subsequent
+** write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_COMMIT_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
+**
+** <li>[[SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE]]
+** The [SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE] opcode causes all write
+** operations since the previous successful call to
+** [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] to be rolled back.
+** ^This file control takes the file descriptor out of batch write mode
+** so that all subsequent write operations are independent.
+** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without
+** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE].
** </ul>
*/
#define SQLITE_FCNTL_LOCKSTATE 1
@@ -1043,6 +1095,9 @@ struct sqlite3_io_methods {
#define SQLITE_FCNTL_JOURNAL_POINTER 28
#define SQLITE_FCNTL_WIN32_GET_HANDLE 29
#define SQLITE_FCNTL_PDB 30
+#define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31
+#define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32
+#define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33
/* deprecated names */
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
@@ -1080,12 +1135,18 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
** in the name of the object stands for "virtual file system". See
** the [VFS | VFS documentation] for further information.
**
-** The value of the iVersion field is initially 1 but may be larger in
-** future versions of SQLite. Additional fields may be appended to this
-** object when the iVersion value is increased. Note that the structure
-** of the sqlite3_vfs object changes in the transaction between
-** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not
-** modified.
+** The VFS interface is sometimes extended by adding new methods onto
+** the end. Each time such an extension occurs, the iVersion field
+** is incremented. The iVersion value started out as 1 in
+** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2
+** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased
+** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields
+** may be appended to the sqlite3_vfs object and the iVersion value
+** may increase again in future versions of SQLite.
+** Note that the structure
+** of the sqlite3_vfs object changes in the transition from
+** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0]
+** and yet the iVersion field was not modified.
**
** The szOsFile field is the size of the subclassed [sqlite3_file]
** structure used by this VFS. mxPathname is the maximum length of
@@ -1613,6 +1674,16 @@ struct sqlite3_mem_methods {
** routines with a wrapper that simulations memory allocation failure or
** tracks memory usage, for example. </dd>
**
+** [[SQLITE_CONFIG_SMALL_MALLOC]] <dt>SQLITE_CONFIG_SMALL_MALLOC</dt>
+** <dd> ^The SQLITE_CONFIG_SMALL_MALLOC option takes single argument of
+** type int, interpreted as a boolean, which if true provides a hint to
+** SQLite that it should avoid large memory allocations if possible.
+** SQLite will run faster if it is free to make large memory allocations,
+** but some application might prefer to run slower in exchange for
+** guarantees about memory fragmentation that are possible if large
+** allocations are avoided. This hint is normally off.
+** </dd>
+**
** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
** <dd> ^The SQLITE_CONFIG_MEMSTATUS option takes single argument of type int,
** interpreted as a boolean, which enables or disables the collection of
@@ -1630,25 +1701,7 @@ struct sqlite3_mem_methods {
** </dd>
**
** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
-** <dd> ^The SQLITE_CONFIG_SCRATCH option specifies a static memory buffer
-** that SQLite can use for scratch memory. ^(There are three arguments
-** to SQLITE_CONFIG_SCRATCH: A pointer an 8-byte
-** aligned memory buffer from which the scratch allocations will be
-** drawn, the size of each scratch allocation (sz),
-** and the maximum number of scratch allocations (N).)^
-** The first argument must be a pointer to an 8-byte aligned buffer
-** of at least sz*N bytes of memory.
-** ^SQLite will not use more than one scratch buffers per thread.
-** ^SQLite will never request a scratch buffer that is more than 6
-** times the database page size.
-** ^If SQLite needs needs additional
-** scratch memory beyond what is provided by this configuration option, then
-** [sqlite3_malloc()] will be used to obtain the memory needed.<p>
-** ^When the application provides any amount of scratch memory using
-** SQLITE_CONFIG_SCRATCH, SQLite avoids unnecessary large
-** [sqlite3_malloc|heap allocations].
-** This can help [Robson proof|prevent memory allocation failures] due to heap
-** fragmentation in low-memory embedded systems.
+** <dd> The SQLITE_CONFIG_SCRATCH option is no longer used.
** </dd>
**
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
@@ -1684,8 +1737,7 @@ struct sqlite3_mem_methods {
** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
** <dd> ^The SQLITE_CONFIG_HEAP option specifies a static memory buffer
** that SQLite will use for all of its dynamic memory allocation needs
-** beyond those provided for by [SQLITE_CONFIG_SCRATCH] and
-** [SQLITE_CONFIG_PAGECACHE].
+** beyond those provided for by [SQLITE_CONFIG_PAGECACHE].
** ^The SQLITE_CONFIG_HEAP option is only available if SQLite is compiled
** with either [SQLITE_ENABLE_MEMSYS3] or [SQLITE_ENABLE_MEMSYS5] and returns
** [SQLITE_ERROR] if invoked otherwise.
@@ -1878,7 +1930,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_SERIALIZED 3 /* nil */
#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
-#define SQLITE_CONFIG_SCRATCH 6 /* void*, int sz, int N */
+#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */
#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
@@ -1899,6 +1951,7 @@ struct sqlite3_mem_methods {
#define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */
#define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */
#define SQLITE_CONFIG_STMTJRNL_SPILL 26 /* int nByte */
+#define SQLITE_CONFIG_SMALL_MALLOC 27 /* boolean */
/*
** CAPI3REF: Database Connection Configuration Options
@@ -2006,7 +2059,6 @@ struct sqlite3_mem_methods {
** into which is written 0 or 1 to indicate whether checkpoints-on-close
** have been disabled - 0 if they are not disabled, 1 if they are.
** </dd>
-**
** <dt>SQLITE_DBCONFIG_ENABLE_QPSG</dt>
** <dd>^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates
** the [query planner stability guarantee] (QPSG). When the QPSG is active,
@@ -2017,7 +2069,16 @@ struct sqlite3_mem_methods {
** the QPSG active, SQLite will always use the same query plan in the field as
** was used during testing in the lab.
** </dd>
-**
+** <dt>SQLITE_DBCONFIG_TRIGGER_EQP</dt>
+** <dd> By default, the output of EXPLAIN QUERY PLAN commands does not
+** include output for any operations performed by trigger programs. This
+** option is used to set or clear (the default) a flag that governs this
+** behavior. The first parameter passed to this operation is an integer -
+** non-zero to enable output for trigger programs, or zero to disable it.
+** The second parameter is a pointer to an integer into which is written
+** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if
+** it is not disabled, 1 if it is.
+** </dd>
** </dl>
*/
#define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */
@@ -2028,7 +2089,8 @@ struct sqlite3_mem_methods {
#define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */
#define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */
#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */
-
+#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */
+#define SQLITE_DBCONFIG_MAX 1008 /* Largest DBCONFIG */
/*
** CAPI3REF: Enable Or Disable Extended Result Codes
@@ -2889,8 +2951,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*,
** KEYWORDS: SQLITE_TRACE
**
** These constants identify classes of events that can be monitored
-** using the [sqlite3_trace_v2()] tracing logic. The third argument
-** to [sqlite3_trace_v2()] is an OR-ed combination of one or more of
+** using the [sqlite3_trace_v2()] tracing logic. The M argument
+** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of
** the following constants. ^The first argument to the trace callback
** is one of the following constants.
**
@@ -3099,10 +3161,10 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** ^If [URI filename] interpretation is enabled, and the filename argument
** begins with "file:", then the filename is interpreted as a URI. ^URI
** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
-** set in the fourth argument to sqlite3_open_v2(), or if it has
+** set in the third argument to sqlite3_open_v2(), or if it has
** been enabled globally using the [SQLITE_CONFIG_URI] option with the
** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
-** As of SQLite version 3.7.7, URI filename interpretation is turned off
+** URI filename interpretation is turned off
** by default, but future releases of SQLite might enable URI filename
** interpretation by default. See "[URI filenames]" for additional
** information.
@@ -3776,8 +3838,9 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
** implementation of [application-defined SQL functions] are protected.
** ^The sqlite3_value object returned by
** [sqlite3_column_value()] is unprotected.
-** Unprotected sqlite3_value objects may only be used with
-** [sqlite3_result_value()] and [sqlite3_bind_value()].
+** Unprotected sqlite3_value objects may only be used as arguments
+** to [sqlite3_result_value()], [sqlite3_bind_value()], and
+** [sqlite3_value_dup()].
** The [sqlite3_value_blob | sqlite3_value_type()] family of
** interfaces require protected sqlite3_value objects.
*/
@@ -4199,7 +4262,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
** other than [SQLITE_ROW] before any subsequent invocation of
** sqlite3_step(). Failure to reset the prepared statement using
** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
-** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1]),
+** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1],
** sqlite3_step() began
** calling [sqlite3_reset()] automatically in this circumstance rather
** than returning [SQLITE_MISUSE]. This is not considered a compatibility
@@ -4735,6 +4798,9 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** datatype of the value
** <tr><td><b>sqlite3_value_numeric_type&nbsp;&nbsp;</b>
** <td>&rarr;&nbsp;&nbsp;<td>Best numeric datatype of the value
+** <tr><td><b>sqlite3_value_nochange&nbsp;&nbsp;</b>
+** <td>&rarr;&nbsp;&nbsp;<td>True if the column is unchanged in an UPDATE
+** against a virtual table.
** </table></blockquote>
**
** <b>Details:</b>
@@ -4783,6 +4849,19 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** then the conversion is performed. Otherwise no conversion occurs.
** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
**
+** ^Within the [xUpdate] method of a [virtual table], the
+** sqlite3_value_nochange(X) interface returns true if and only if
+** the column corresponding to X is unchanged by the UPDATE operation
+** that the xUpdate method call was invoked to implement and if
+** and the prior [xColumn] method call that was invoked to extracted
+** the value for that column returned without setting a result (probably
+** because it queried [sqlite3_vtab_nochange()] and found that the column
+** was unchanging). ^Within an [xUpdate] method, any value for which
+** sqlite3_value_nochange(X) is true will in all other respects appear
+** to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other
+** than within an [xUpdate] method call for an UPDATE statement, then
+** the return value is arbitrary and meaningless.
+**
** Please pay particular attention to the fact that the pointer returned
** from [sqlite3_value_blob()], [sqlite3_value_text()], or
** [sqlite3_value_text16()] can be invalidated by a subsequent call to
@@ -4805,6 +4884,7 @@ SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
SQLITE_API int sqlite3_value_type(sqlite3_value*);
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
+SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
/*
** CAPI3REF: Finding The Subtype Of SQL Values
@@ -6203,15 +6283,20 @@ struct sqlite3_index_info {
** an operator that is part of a constraint term in the wHERE clause of
** a query that uses a [virtual table].
*/
-#define SQLITE_INDEX_CONSTRAINT_EQ 2
-#define SQLITE_INDEX_CONSTRAINT_GT 4
-#define SQLITE_INDEX_CONSTRAINT_LE 8
-#define SQLITE_INDEX_CONSTRAINT_LT 16
-#define SQLITE_INDEX_CONSTRAINT_GE 32
-#define SQLITE_INDEX_CONSTRAINT_MATCH 64
-#define SQLITE_INDEX_CONSTRAINT_LIKE 65
-#define SQLITE_INDEX_CONSTRAINT_GLOB 66
-#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_EQ 2
+#define SQLITE_INDEX_CONSTRAINT_GT 4
+#define SQLITE_INDEX_CONSTRAINT_LE 8
+#define SQLITE_INDEX_CONSTRAINT_LT 16
+#define SQLITE_INDEX_CONSTRAINT_GE 32
+#define SQLITE_INDEX_CONSTRAINT_MATCH 64
+#define SQLITE_INDEX_CONSTRAINT_LIKE 65
+#define SQLITE_INDEX_CONSTRAINT_GLOB 66
+#define SQLITE_INDEX_CONSTRAINT_REGEXP 67
+#define SQLITE_INDEX_CONSTRAINT_NE 68
+#define SQLITE_INDEX_CONSTRAINT_ISNOT 69
+#define SQLITE_INDEX_CONSTRAINT_ISNOTNULL 70
+#define SQLITE_INDEX_CONSTRAINT_ISNULL 71
+#define SQLITE_INDEX_CONSTRAINT_IS 72
/*
** CAPI3REF: Register A Virtual Table Implementation
@@ -6902,9 +6987,9 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
** the xFileControl method. ^The return value of the xFileControl
** method becomes the return value of this routine.
**
-** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
+** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes
** a pointer to the underlying [sqlite3_file] object to be written into
-** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER
+** the space pointed to by the 4th parameter. ^The [SQLITE_FCNTL_FILE_POINTER]
** case is a short-circuit path which does not actually invoke the
** underlying sqlite3_io_methods.xFileControl method.
**
@@ -6916,7 +7001,7 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
** an incorrect zDbName and an SQLITE_ERROR return from the underlying
** xFileControl method.
**
-** See also: [SQLITE_FCNTL_LOCKSTATE]
+** See also: [file control opcodes]
*/
SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
@@ -6963,7 +7048,7 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_RESERVE 14
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
#define SQLITE_TESTCTRL_ISKEYWORD 16
-#define SQLITE_TESTCTRL_SCRATCHMALLOC 17
+#define SQLITE_TESTCTRL_SCRATCHMALLOC 17 /* NOT USED */
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
#define SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD 19
@@ -6973,7 +7058,8 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_ISINIT 23
#define SQLITE_TESTCTRL_SORTER_MMAP 24
#define SQLITE_TESTCTRL_IMPOSTER 25
-#define SQLITE_TESTCTRL_LAST 25
+#define SQLITE_TESTCTRL_PARSER_COVERAGE 26
+#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */
/*
** CAPI3REF: SQLite Runtime Status
@@ -7022,8 +7108,7 @@ SQLITE_API int sqlite3_status64(
** <dd>This parameter is the current amount of memory checked out
** using [sqlite3_malloc()], either directly or indirectly. The
** figure includes calls made to [sqlite3_malloc()] by the application
-** and internal memory usage by the SQLite library. Scratch memory
-** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
+** and internal memory usage by the SQLite library. Auxiliary page-cache
** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
** this parameter. The amount returned is the sum of the allocation
** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
@@ -7061,29 +7146,14 @@ SQLITE_API int sqlite3_status64(
** *pHighwater parameter to [sqlite3_status()] is of interest.
** The value written into the *pCurrent parameter is undefined.</dd>)^
**
-** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
-** <dd>This parameter returns the number of allocations used out of the
-** [scratch memory allocator] configured using
-** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not
-** in bytes. Since a single thread may only have one scratch allocation
-** outstanding at time, this parameter also reports the number of threads
-** using scratch memory at the same time.</dd>)^
+** [[SQLITE_STATUS_SCRATCH_USED]] <dt>SQLITE_STATUS_SCRATCH_USED</dt>
+** <dd>No longer used.</dd>
**
** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
-** <dd>This parameter returns the number of bytes of scratch memory
-** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
-** buffer and where forced to overflow to [sqlite3_malloc()]. The values
-** returned include overflows because the requested allocation was too
-** larger (that is, because the requested allocation was larger than the
-** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
-** slots were available.
-** </dd>)^
-**
-** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
-** <dd>This parameter records the largest memory allocation request
-** handed to [scratch memory allocator]. Only the value returned in the
-** *pHighwater parameter to [sqlite3_status()] is of interest.
-** The value written into the *pCurrent parameter is undefined.</dd>)^
+** <dd>No longer used.</dd>
+**
+** [[SQLITE_STATUS_SCRATCH_SIZE]] <dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
+** <dd>No longer used.</dd>
**
** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
** <dd>The *pHighwater parameter records the deepest parser stack.
@@ -7096,12 +7166,12 @@ SQLITE_API int sqlite3_status64(
#define SQLITE_STATUS_MEMORY_USED 0
#define SQLITE_STATUS_PAGECACHE_USED 1
#define SQLITE_STATUS_PAGECACHE_OVERFLOW 2
-#define SQLITE_STATUS_SCRATCH_USED 3
-#define SQLITE_STATUS_SCRATCH_OVERFLOW 4
+#define SQLITE_STATUS_SCRATCH_USED 3 /* NOT USED */
+#define SQLITE_STATUS_SCRATCH_OVERFLOW 4 /* NOT USED */
#define SQLITE_STATUS_MALLOC_SIZE 5
#define SQLITE_STATUS_PARSER_STACK 6
#define SQLITE_STATUS_PAGECACHE_SIZE 7
-#define SQLITE_STATUS_SCRATCH_SIZE 8
+#define SQLITE_STATUS_SCRATCH_SIZE 8 /* NOT USED */
#define SQLITE_STATUS_MALLOC_COUNT 9
/*
@@ -8244,6 +8314,40 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
/*
+** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE
+**
+** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn]
+** method of a [virtual table], then it returns true if and only if the
+** column is being fetched as part of an UPDATE operation during which the
+** column value will not change. Applications might use this to substitute
+** a lighter-weight value to return that the corresponding [xUpdate] method
+** understands as a "no-change" value.
+**
+** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that
+** the column is not changed by the UPDATE statement, they the xColumn
+** method can optionally return without setting a result, without calling
+** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces].
+** In that case, [sqlite3_value_nochange(X)] will return true for the
+** same column in the [xUpdate] method.
+*/
+SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*);
+
+/*
+** CAPI3REF: Determine The Collation For a Virtual Table Constraint
+**
+** This function may only be called from within a call to the [xBestIndex]
+** method of a [virtual table].
+**
+** The first argument must be the sqlite3_index_info object that is the
+** first parameter to the xBestIndex() method. The second argument must be
+** an index into the aConstraint[] array belonging to the sqlite3_index_info
+** structure passed to xBestIndex. This function returns a pointer to a buffer
+** containing the name of the collation sequence for the corresponding
+** constraint.
+*/
+SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
+
+/*
** CAPI3REF: Conflict resolution modes
** KEYWORDS: {conflict resolution mode}
**
@@ -8970,6 +9074,35 @@ SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect)
**
** SQLITE_OK is returned if the call completes without error. Or, if an error
** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned.
+**
+** <h3>Special sqlite_stat1 Handling</h3>
+**
+** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to
+** some of the rules above. In SQLite, the schema of sqlite_stat1 is:
+** <pre>
+** &nbsp; CREATE TABLE sqlite_stat1(tbl,idx,stat)
+** </pre>
+**
+** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are
+** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes
+** are recorded for rows for which (idx IS NULL) is true. However, for such
+** rows a zero-length blob (SQL value X'') is stored in the changeset or
+** patchset instead of a NULL value. This allows such changesets to be
+** manipulated by legacy implementations of sqlite3changeset_invert(),
+** concat() and similar.
+**
+** The sqlite3changeset_apply() function automatically converts the
+** zero-length blob back to a NULL value when updating the sqlite_stat1
+** table. However, if the application calls sqlite3changeset_new(),
+** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset
+** iterator directly (including on a changeset iterator passed to a
+** conflict-handler callback) then the X'' value is returned. The application
+** must translate X'' to NULL itself if required.
+**
+** Legacy (older than 3.22.0) versions of the sessions module cannot capture
+** changes made to the sqlite_stat1 table. Legacy versions of the
+** sqlite3changeset_apply() function silently ignore any modifications to the
+** sqlite_stat1 table that are part of a changeset or patchset.
*/
SQLITE_API int sqlite3session_attach(
sqlite3_session *pSession, /* Session object */
@@ -9198,8 +9331,8 @@ SQLITE_API int sqlite3session_diff(
*/
SQLITE_API int sqlite3session_patchset(
sqlite3_session *pSession, /* Session object */
- int *pnPatchset, /* OUT: Size of buffer at *ppChangeset */
- void **ppPatchset /* OUT: Buffer containing changeset */
+ int *pnPatchset, /* OUT: Size of buffer at *ppPatchset */
+ void **ppPatchset /* OUT: Buffer containing patchset */
);
/*
@@ -9966,12 +10099,12 @@ SQLITE_API int sqlite3changeset_apply(
**
** <table border=1 style="margin-left:8ex;margin-right:8ex">
** <tr><th>Streaming function<th>Non-streaming equivalent</th>
-** <tr><td>sqlite3changeset_apply_str<td>[sqlite3changeset_apply]
-** <tr><td>sqlite3changeset_concat_str<td>[sqlite3changeset_concat]
-** <tr><td>sqlite3changeset_invert_str<td>[sqlite3changeset_invert]
-** <tr><td>sqlite3changeset_start_str<td>[sqlite3changeset_start]
-** <tr><td>sqlite3session_changeset_str<td>[sqlite3session_changeset]
-** <tr><td>sqlite3session_patchset_str<td>[sqlite3session_patchset]
+** <tr><td>sqlite3changeset_apply_strm<td>[sqlite3changeset_apply]
+** <tr><td>sqlite3changeset_concat_strm<td>[sqlite3changeset_concat]
+** <tr><td>sqlite3changeset_invert_strm<td>[sqlite3changeset_invert]
+** <tr><td>sqlite3changeset_start_strm<td>[sqlite3changeset_start]
+** <tr><td>sqlite3session_changeset_strm<td>[sqlite3session_changeset]
+** <tr><td>sqlite3session_patchset_strm<td>[sqlite3session_patchset]
** </table>
**
** Non-streaming functions that accept changesets (or patchsets) as input
diff --git a/src/android/jar/bundledjar.pro b/src/android/jar/bundledjar.pro
deleted file mode 100644
index e82c01c51b..0000000000
--- a/src/android/jar/bundledjar.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-TARGET = QtAndroid-bundled
-CONFIG += bundled_jar_file
-include(jar.pri)
diff --git a/src/android/jar/distributedjar.pro b/src/android/jar/distributedjar.pro
deleted file mode 100644
index 15f362f629..0000000000
--- a/src/android/jar/distributedjar.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TARGET = QtAndroid
-include(jar.pri)
diff --git a/src/android/jar/jar.pri b/src/android/jar/jar.pri
deleted file mode 100644
index 4535880536..0000000000
--- a/src/android/jar/jar.pri
+++ /dev/null
@@ -1,26 +0,0 @@
-CONFIG += java
-DESTDIR = $$[QT_INSTALL_PREFIX/get]/jar
-API_VERSION = android-16
-
-PATHPREFIX = $$PWD/src/org/qtproject/qt5/android/
-
-JAVACLASSPATH += $$PWD/src/
-JAVASOURCES += \
- $$PATHPREFIX/accessibility/QtAccessibilityDelegate.java \
- $$PATHPREFIX/accessibility/QtNativeAccessibility.java \
- $$PATHPREFIX/QtActivityDelegate.java \
- $$PATHPREFIX/QtEditText.java \
- $$PATHPREFIX/QtInputConnection.java \
- $$PATHPREFIX/QtLayout.java \
- $$PATHPREFIX/QtMessageDialogHelper.java \
- $$PATHPREFIX/QtNative.java \
- $$PATHPREFIX/QtNativeLibrariesDir.java \
- $$PATHPREFIX/QtSurface.java \
- $$PATHPREFIX/ExtractStyle.java \
- $$PATHPREFIX/EditMenu.java \
- $$PATHPREFIX/EditPopupMenu.java \
- $$PATHPREFIX/CursorHandle.java
-
-# install
-target.path = $$[QT_INSTALL_PREFIX]/jar
-INSTALLS += target
diff --git a/src/android/jar/jar.pro b/src/android/jar/jar.pro
index 8d19c1b7d6..683866a345 100644
--- a/src/android/jar/jar.pro
+++ b/src/android/jar/jar.pro
@@ -1,2 +1,29 @@
-TEMPLATE = subdirs
-SUBDIRS += bundledjar.pro distributedjar.pro
+TARGET = QtAndroid
+
+CONFIG += java
+DESTDIR = $$[QT_INSTALL_PREFIX/get]/jar
+API_VERSION = android-16
+
+PATHPREFIX = $$PWD/src/org/qtproject/qt5/android/
+
+JAVACLASSPATH += $$PWD/src/
+JAVASOURCES += \
+ $$PATHPREFIX/accessibility/QtAccessibilityDelegate.java \
+ $$PATHPREFIX/accessibility/QtNativeAccessibility.java \
+ $$PATHPREFIX/QtActivityDelegate.java \
+ $$PATHPREFIX/QtEditText.java \
+ $$PATHPREFIX/QtInputConnection.java \
+ $$PATHPREFIX/QtLayout.java \
+ $$PATHPREFIX/QtMessageDialogHelper.java \
+ $$PATHPREFIX/QtNative.java \
+ $$PATHPREFIX/QtNativeLibrariesDir.java \
+ $$PATHPREFIX/QtSurface.java \
+ $$PATHPREFIX/ExtractStyle.java \
+ $$PATHPREFIX/EditMenu.java \
+ $$PATHPREFIX/EditPopupMenu.java \
+ $$PATHPREFIX/CursorHandle.java \
+ $$PATHPREFIX/QtThread.java
+
+# install
+target.path = $$[QT_INSTALL_PREFIX]/jar
+INSTALLS += target
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index 0e28b964e8..6b8577116e 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -921,6 +921,7 @@ public class QtActivityDelegate
public void onTerminate()
{
QtNative.terminateQt();
+ QtNative.m_qtThread.exit();
}
public void onCreate(Bundle savedInstanceState)
@@ -1076,7 +1077,8 @@ public class QtActivityDelegate
QtNative.setActivity(null, null);
if (m_debuggerProcess != null)
m_debuggerProcess.destroy();
- System.exit(0);// FIXME remove it or find a better way
+ QtNative.m_qtThread.exit();
+ System.exit(0);
}
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 1cf3bca5f7..3db3453263 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -98,6 +98,7 @@ public class QtNative
private static ClipboardManager m_clipboardManager = null;
private static Method m_checkSelfPermissionMethod = null;
private static Boolean m_tabletEventSupported = null;
+ public static QtThread m_qtThread = new QtThread();
private static final Runnable runPendingCppRunnablesRunnable = new Runnable() {
@Override
public void run() {
@@ -164,55 +165,64 @@ public class QtNative
}
// this method loads full path libs
- public static void loadQtLibraries(ArrayList<String> libraries)
+ public static void loadQtLibraries(final ArrayList<String> libraries)
{
- if (libraries == null)
- return;
-
- for (String libName : libraries) {
- try {
- File f = new File(libName);
- if (f.exists())
- System.load(libName);
- } catch (SecurityException e) {
- Log.i(QtTAG, "Can't load '" + libName + "'", e);
- } catch (Exception e) {
- Log.i(QtTAG, "Can't load '" + libName + "'", e);
+ m_qtThread.run(new Runnable() {
+ @Override
+ public void run() {
+ if (libraries == null)
+ return;
+ for (String libName : libraries) {
+ try {
+ File f = new File(libName);
+ if (f.exists())
+ System.load(libName);
+ } catch (SecurityException e) {
+ Log.i(QtTAG, "Can't load '" + libName + "'", e);
+ } catch (Exception e) {
+ Log.i(QtTAG, "Can't load '" + libName + "'", e);
+ }
+ }
}
- }
+ });
}
// this method loads bundled libs by name.
- public static void loadBundledLibraries(ArrayList<String> libraries, String nativeLibraryDir)
+ public static void loadBundledLibraries(final ArrayList<String> libraries, final String nativeLibraryDir)
{
- if (libraries == null)
- return;
+ m_qtThread.run(new Runnable() {
+ @Override
+ public void run() {
+ if (libraries == null)
+ return;
- for (String libName : libraries) {
- try {
- String libNameTemplate = "lib" + libName + ".so";
- File f = new File(nativeLibraryDir + libNameTemplate);
- if (!f.exists()) {
- Log.i(QtTAG, "Can't find '" + f.getAbsolutePath());
+ for (String libName : libraries) {
try {
- ActivityInfo info = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(),
- PackageManager.GET_META_DATA);
- String systemLibraryDir = QtNativeLibrariesDir.systemLibrariesDir;
- if (info.metaData.containsKey("android.app.system_libs_prefix"))
- systemLibraryDir = info.metaData.getString("android.app.system_libs_prefix");
- f = new File(systemLibraryDir + libNameTemplate);
- } catch (Exception e) {
+ String libNameTemplate = "lib" + libName + ".so";
+ File f = new File(nativeLibraryDir + libNameTemplate);
+ if (!f.exists()) {
+ Log.i(QtTAG, "Can't find '" + f.getAbsolutePath());
+ try {
+ ActivityInfo info = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(),
+ PackageManager.GET_META_DATA);
+ String systemLibraryDir = QtNativeLibrariesDir.systemLibrariesDir;
+ if (info.metaData.containsKey("android.app.system_libs_prefix"))
+ systemLibraryDir = info.metaData.getString("android.app.system_libs_prefix");
+ f = new File(systemLibraryDir + libNameTemplate);
+ } catch (Exception e) {
+ }
+ }
+ if (f.exists())
+ System.load(f.getAbsolutePath());
+ else
+ Log.i(QtTAG, "Can't find '" + f.getAbsolutePath());
+ } catch (Exception e) {
+ Log.i(QtTAG, "Can't load '" + libName + "'", e);
}
}
- if (f.exists())
- System.load(f.getAbsolutePath());
- else
- Log.i(QtTAG, "Can't find '" + f.getAbsolutePath());
- } catch (Exception e) {
- Log.i(QtTAG, "Can't load '" + libName + "'", e);
}
- }
+ });
}
public static void setActivity(Activity qtMainActivity, QtActivityDelegate qtActivityDelegate)
@@ -293,7 +303,7 @@ public class QtNative
}
public static boolean startApplication(String params,
- String environment,
+ final String environment,
String mainLibrary,
String nativeLibraryDir) throws Exception
{
@@ -317,23 +327,42 @@ public class QtNative
if (params == null)
params = "-platform\tandroid";
- boolean res = false;
+ final String mainLibraryPath = f.getAbsolutePath();
+ final boolean[] res = new boolean[1];
+ res[0] = false;
synchronized (m_mainActivityMutex) {
- res = startQtAndroidPlugin();
- setDisplayMetrics(m_displayMetricsScreenWidthPixels,
- m_displayMetricsScreenHeightPixels,
- m_displayMetricsDesktopWidthPixels,
- m_displayMetricsDesktopHeightPixels,
- m_displayMetricsXDpi,
- m_displayMetricsYDpi,
- m_displayMetricsScaledDensity,
- m_displayMetricsDensity);
if (params.length() > 0 && !params.startsWith("\t"))
params = "\t" + params;
- startQtApplication(f.getAbsolutePath() + params, environment);
+ final String qtParams = f.getAbsolutePath() + params;
+ m_qtThread.run(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ System.load(mainLibraryPath);
+ } catch (Exception e) {
+ Log.i(QtTAG, "Can't load '" + mainLibraryPath + "'", e);
+ }
+ res[0] = startQtAndroidPlugin(qtParams, environment);
+ setDisplayMetrics(m_displayMetricsScreenWidthPixels,
+ m_displayMetricsScreenHeightPixels,
+ m_displayMetricsDesktopWidthPixels,
+ m_displayMetricsDesktopHeightPixels,
+ m_displayMetricsXDpi,
+ m_displayMetricsYDpi,
+ m_displayMetricsScaledDensity,
+ m_displayMetricsDensity);
+ }
+ });
+ m_qtThread.post(new Runnable() {
+ @Override
+ public void run() {
+ startQtApplication();
+ }
+ });
+ waitForServiceSetup();
m_started = true;
}
- return res;
+ return res[0];
}
public static void setApplicationDisplayMetrics(int screenWidthPixels,
@@ -377,8 +406,9 @@ public class QtNative
// application methods
- public static native void startQtApplication(String params, String env);
- public static native boolean startQtAndroidPlugin();
+ public static native boolean startQtAndroidPlugin(String params, String env);
+ public static native void startQtApplication();
+ public static native void waitForServiceSetup();
public static native void quitQtCoreApplication();
public static native void quitQtAndroidPlugin();
public static native void terminateQt();
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java
index 195ec376c9..ae06fa6268 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtServiceDelegate.java
@@ -187,6 +187,10 @@ public class QtServiceDelegate
public void onDestroy()
{
QtNative.quitQtCoreApplication();
+ QtNative.terminateQt();
+ QtNative.setService(null, null);
+ QtNative.m_qtThread.exit();
+ System.exit(0);
}
public IBinder onBind(Intent intent)
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtThread.java b/src/android/jar/src/org/qtproject/qt5/android/QtThread.java
new file mode 100644
index 0000000000..975e787345
--- /dev/null
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtThread.java
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 BogDan Vatra <bogdan@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Android port of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+package org.qtproject.qt5.android;
+
+import java.util.ArrayList;
+import java.util.concurrent.Semaphore;
+
+public class QtThread {
+ private ArrayList<Runnable> m_pendingRunnables = new ArrayList<Runnable>();
+ private boolean m_exit = false;
+ private Thread m_qtThread = new Thread(new Runnable() {
+ @Override
+ public void run() {
+ while (!m_exit) {
+ try {
+ ArrayList<Runnable> pendingRunnables;
+ synchronized (m_qtThread) {
+ if (m_pendingRunnables.size() == 0)
+ m_qtThread.wait();
+ pendingRunnables = new ArrayList<Runnable>(m_pendingRunnables);
+ m_pendingRunnables.clear();
+ }
+ for (Runnable runnable : pendingRunnables)
+ runnable.run();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ });
+
+ QtThread() {
+ m_qtThread.setName("qtMainLoopThread");
+ m_qtThread.start();
+ }
+
+ public void post(final Runnable runnable) {
+ synchronized (m_qtThread) {
+ m_pendingRunnables.add(runnable);
+ m_qtThread.notify();
+ }
+ }
+
+ public void run(final Runnable runnable) {
+ final Semaphore sem = new Semaphore(0);
+ synchronized (m_qtThread) {
+ m_pendingRunnables.add(new Runnable() {
+ @Override
+ public void run() {
+ runnable.run();
+ sem.release();
+ }
+ });
+ m_qtThread.notify();
+ }
+ try {
+ sem.acquire();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void exit()
+ {
+ m_exit = true;
+ synchronized (m_qtThread) {
+ m_qtThread.notify();
+ }
+ try {
+ m_qtThread.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
index 6e92e64028..fb6f61e31e 100644
--- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
+++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java
@@ -243,10 +243,6 @@ public abstract class QtLoader {
QtApplication.setQtContextDelegate(m_delegateClass, qtLoader);
- // now load the application library so it's accessible from this class loader
- if (libName != null)
- System.loadLibrary(libName);
-
Method startAppMethod=qtLoader.getClass().getMethod("startApplication");
if (!(Boolean)startAppMethod.invoke(qtLoader))
throw new Exception("");
diff --git a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp
index 9b15eeaa99..3cc1fe836c 100644
--- a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp
+++ b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp
@@ -169,5 +169,17 @@ struct StartsWith
};
QList<QString> strings = ...;
-QFuture<QString> fooString = QtConcurrent::filtered(images, StartsWith(QLatin1String("Foo")));
+QFuture<QString> fooString = QtConcurrent::filtered(strings, StartsWith(QLatin1String("Foo")));
//! [13]
+
+//! [14]
+struct StringTransform
+{
+ void operator()(QString &result, const QString &value);
+};
+
+QFuture<QString> fooString =
+ QtConcurrent::filteredReduced<QString>(strings,
+ StartsWith(QLatin1String("Foo")),
+ StringTransform());
+//! [14]
diff --git a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp
index 183b82bb9a..9cf82c786a 100644
--- a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp
+++ b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp
@@ -157,6 +157,18 @@ QFuture<QSet<int> > totalColorDistribution = QtConcurrent::mappedReduced(images,
QImage QImage::scaledToWidth(int width, Qt::TransformationMode) const;
//! [10]
+//! [11]
+struct ImageTransform
+{
+ void operator()(QImage &result, const QImage &value);
+};
+
+QFuture<QImage> thumbNails =
+ QtConcurrent::mappedReduced<QImage>(images,
+ Scaled(100),
+ ImageTransform(),
+ QtConcurrent::SequentialReduce);
+//! [11]
//! [13]
QList<QImage> images = ...;
diff --git a/src/concurrent/qtconcurrentexception.h b/src/concurrent/qtconcurrentexception.h
index 03dd7ec498..9da53fd9e2 100644
--- a/src/concurrent/qtconcurrentexception.h
+++ b/src/concurrent/qtconcurrentexception.h
@@ -41,18 +41,17 @@
#define QTCONCURRENT_EXCEPTION_H
#include <QtConcurrent/qtconcurrent_global.h>
-
-#ifndef QT_NO_QFUTURE
-
#include <QtCore/qexception.h>
+QT_REQUIRE_CONFIG(concurrent);
+
QT_BEGIN_NAMESPACE
namespace QtConcurrent
{
-#ifndef QT_NO_EXCEPTIONS
+#if !defined(QT_NO_EXCEPTIONS) || defined(Q_CLANG_QDOC)
typedef Q_DECL_DEPRECATED QException Exception;
typedef Q_DECL_DEPRECATED QUnhandledException UnhandledException;
@@ -63,6 +62,4 @@ typedef Q_DECL_DEPRECATED QUnhandledException UnhandledException;
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
-
#endif
diff --git a/src/concurrent/qtconcurrentfilter.cpp b/src/concurrent/qtconcurrentfilter.cpp
index 3e3ed7cf68..c0cbbd3f3d 100644
--- a/src/concurrent/qtconcurrentfilter.cpp
+++ b/src/concurrent/qtconcurrentfilter.cpp
@@ -142,12 +142,19 @@
\section2 Using Function Objects
QtConcurrent::filter(), QtConcurrent::filtered(), and
- QtConcurrent::filteredReduced() accept function objects, which can be used to
+ QtConcurrent::filteredReduced() accept function objects
+ for the filter function. These function objects can be used to
add state to a function call. The result_type typedef must define the
result type of the function call operator:
\snippet code/src_concurrent_qtconcurrentfilter.cpp 13
+ For the reduce function, function objects are not directly
+ supported. Function objects can, however, be used
+ when the type of the reduction result is explicitly specified:
+
+ \snippet code/src_concurrent_qtconcurrentfilter.cpp 14
+
\section2 Wrapping Functions that Take Multiple Arguments
If you want to use a filter function takes more than one argument, you can
@@ -168,7 +175,49 @@
*/
/*!
- \fn QFuture<void> QtConcurrent::filter(Sequence &sequence, FilterFunction filterFunction)
+ \class QtConcurrent::qValueType
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::qValueType<const T*>
+ \inmodule QtConcurrent
+ \internal
+*/
+
+
+/*!
+ \class QtConcurrent::qValueType<T*>
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::FilterKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::FilteredReducedKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::FilteredEachKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \fn [QtConcurrent-1] template <typename Sequence, typename KeepFunctor, typename ReduceFunctor> ThreadEngineStarter<void> QtConcurrent::filterInternal(Sequence &sequence, KeepFunctor keep, ReduceFunctor reduce)
+ \internal
+*/
+
+/*!
+ \fn template <typename Sequence, typename KeepFunctor> QFuture<void> QtConcurrent::filter(Sequence &sequence, KeepFunctor filterFunction)
Calls \a filterFunction once for each item in \a sequence. If
\a filterFunction returns \c true, the item is kept in \a sequence;
@@ -178,7 +227,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::filtered(const Sequence &sequence, FilterFunction filterFunction)
+ \fn template <typename Sequence, typename KeepFunctor> QFuture<Sequence::value_type> QtConcurrent::filtered(const Sequence &sequence, KeepFunctor filterFunction)
Calls \a filterFunction once for each item in \a sequence and returns a
new Sequence of kept items. If \a filterFunction returns \c true, a copy of
@@ -189,7 +238,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::filtered(ConstIterator begin, ConstIterator end, FilterFunction filterFunction)
+ \fn template <typename Iterator, typename KeepFunctor> QFuture<typename QtConcurrent::qValueType<Iterator>::value_type> QtConcurrent::filtered(Iterator begin, Iterator end, KeepFunctor filterFunction)
Calls \a filterFunction once for each item from \a begin to \a end and
returns a new Sequence of kept items. If \a filterFunction returns \c true, a
@@ -200,7 +249,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::filteredReduced(const Sequence &sequence, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Sequence, typename KeepFunctor, typename ReduceFunctor> QFuture<ResultType> QtConcurrent::filteredReduced(const Sequence &sequence, KeepFunctor filterFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a filterFunction once for each item in \a sequence. If
\a filterFunction returns \c true for an item, that item is then passed to
@@ -218,7 +267,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::filteredReduced(ConstIterator begin, ConstIterator end, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Iterator, typename KeepFunctor, typename ReduceFunctor> QFuture<ResultType> QtConcurrent::filteredReduced(Iterator begin, Iterator end, KeepFunctor filterFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a filterFunction once for each item from \a begin to \a end. If
\a filterFunction returns \c true for an item, that item is then passed to
@@ -236,7 +285,7 @@
*/
/*!
- \fn void QtConcurrent::blockingFilter(Sequence &sequence, FilterFunction filterFunction)
+ \fn template <typename Sequence, typename KeepFunctor> void QtConcurrent::blockingFilter(Sequence &sequence, KeepFunctor filterFunction)
Calls \a filterFunction once for each item in \a sequence. If
\a filterFunction returns \c true, the item is kept in \a sequence;
@@ -248,7 +297,7 @@
*/
/*!
- \fn Sequence QtConcurrent::blockingFiltered(const Sequence &sequence, FilterFunction filterFunction)
+ \fn template <typename Sequence, typename KeepFunctor> Sequence QtConcurrent::blockingFiltered(const Sequence &sequence, KeepFunctor filterFunction)
Calls \a filterFunction once for each item in \a sequence and returns a
new Sequence of kept items. If \a filterFunction returns \c true, a copy of
@@ -261,7 +310,7 @@
*/
/*!
- \fn Sequence QtConcurrent::blockingFiltered(ConstIterator begin, ConstIterator end, FilterFunction filterFunction)
+ \fn template <typename OutputSequence, typename Iterator, typename KeepFunctor> OutputSequence QtConcurrent::blockingFiltered(Iterator begin, Iterator end, KeepFunctor filterFunction)
Calls \a filterFunction once for each item from \a begin to \a end and
returns a new Sequence of kept items. If \a filterFunction returns \c true, a
@@ -275,7 +324,7 @@
*/
/*!
- \fn T QtConcurrent::blockingFilteredReduced(const Sequence &sequence, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Sequence, typename KeepFunctor, typename ReduceFunctor> ResultType QtConcurrent::blockingFilteredReduced(const Sequence &sequence, KeepFunctor filterFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a filterFunction once for each item in \a sequence. If
\a filterFunction returns \c true for an item, that item is then passed to
@@ -295,7 +344,7 @@
*/
/*!
- \fn T QtConcurrent::blockingFilteredReduced(ConstIterator begin, ConstIterator end, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Iterator, typename KeepFunctor, typename ReduceFunctor> ResultType QtConcurrent::blockingFilteredReduced(Iterator begin, Iterator end, KeepFunctor filterFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a filterFunction once for each item from \a begin to \a end. If
\a filterFunction returns \c true for an item, that item is then passed to
@@ -314,3 +363,24 @@
\sa filteredReduced(), {Concurrent Filter and Filter-Reduce}
*/
+
+/*!
+ \fn [QtConcurrent-2] ThreadEngineStarter<typename qValueType<Iterator>::value_type> QtConcurrent::startFiltered(Iterator begin, Iterator end, KeepFunctor functor)
+ \internal
+*/
+
+/*!
+ \fn [QtConcurrent-3] ThreadEngineStarter<typename Sequence::value_type> QtConcurrent::startFiltered(const Sequence &sequence, KeepFunctor functor)
+ \internal
+*/
+
+/*!
+ \fn [QtConcurrent-4] ThreadEngineStarter<ResultType> QtConcurrent::startFilteredReduced(const Sequence & sequence, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
+ \internal
+*/
+
+/*!
+ \fn [QtConcurrent-5] ThreadEngineStarter<ResultType> QtConcurrent::startFilteredReduced(Iterator begin, Iterator end, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
+ \internal
+*/
+
diff --git a/src/concurrent/qtconcurrentfilter.h b/src/concurrent/qtconcurrentfilter.h
index e09f3b4abc..acc794fad8 100644
--- a/src/concurrent/qtconcurrentfilter.h
+++ b/src/concurrent/qtconcurrentfilter.h
@@ -42,62 +42,16 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
#include <QtConcurrent/qtconcurrentfilterkernel.h>
#include <QtConcurrent/qtconcurrentfunctionwrappers.h>
QT_BEGIN_NAMESPACE
-
-#ifdef Q_QDOC
-
-namespace QtConcurrent {
-
- QFuture<void> filter(Sequence &sequence, FilterFunction filterFunction);
-
- template <typename T>
- QFuture<T> filtered(const Sequence &sequence, FilterFunction filterFunction);
- template <typename T>
- QFuture<T> filtered(ConstIterator begin, ConstIterator end, FilterFunction filterFunction);
-
- template <typename T>
- QFuture<T> filteredReduced(const Sequence &sequence,
- FilterFunction filterFunction,
- ReduceFunction reduceFunction,
- QtConcurrent::ReduceOptions reduceOptions = UnorderedReduce | SequentialReduce);
- template <typename T>
- QFuture<T> filteredReduced(ConstIterator begin,
- ConstIterator end,
- FilterFunction filterFunction,
- ReduceFunction reduceFunction,
- QtConcurrent::ReduceOptions reduceOptions = UnorderedReduce | SequentialReduce);
-
- void blockingFilter(Sequence &sequence, FilterFunction filterFunction);
-
- template <typename Sequence>
- Sequence blockingFiltered(const Sequence &sequence, FilterFunction filterFunction);
- template <typename Sequence>
- Sequence blockingFiltered(ConstIterator begin, ConstIterator end, FilterFunction filterFunction);
-
- template <typename T>
- T blockingFilteredReduced(const Sequence &sequence,
- FilterFunction filterFunction,
- ReduceFunction reduceFunction,
- QtConcurrent::ReduceOptions reduceOptions = UnorderedReduce | SequentialReduce);
- template <typename T>
- T blockingFilteredReduced(ConstIterator begin,
- ConstIterator end,
- FilterFunction filterFunction,
- ReduceFunction reduceFunction,
- QtConcurrent::ReduceOptions reduceOptions = UnorderedReduce | SequentialReduce);
-
-} // namespace QtConcurrent
-
-#else
-
namespace QtConcurrent {
+//! [QtConcurrent-1]
template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
ThreadEngineStarter<void> filterInternal(Sequence &sequence, KeepFunctor keep, ReduceFunctor reduce)
{
@@ -122,6 +76,7 @@ QFuture<ResultType> filteredReduced(const Sequence &sequence,
return startFilteredReduced<ResultType>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options);
}
+#ifndef Q_CLANG_QDOC
template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> filteredReduced(const Sequence &sequence,
KeepFunctor keep,
@@ -134,6 +89,7 @@ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> filtere
QtPrivate::createFunctionWrapper(reduce),
options);
}
+#endif
// filteredReduced() on iterators
template <typename ResultType, typename Iterator, typename KeepFunctor, typename ReduceFunctor>
@@ -146,6 +102,7 @@ QFuture<ResultType> filteredReduced(Iterator begin,
return startFilteredReduced<ResultType>(begin, end, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options);
}
+#ifndef Q_CLANG_QDOC
template <typename Iterator, typename KeepFunctor, typename ReduceFunctor>
QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> filteredReduced(Iterator begin,
Iterator end,
@@ -159,6 +116,7 @@ QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> filtere
QtPrivate::createFunctionWrapper(reduce),
options);
}
+#endif
// filtered() on sequences
template <typename Sequence, typename KeepFunctor>
@@ -192,6 +150,7 @@ ResultType blockingFilteredReduced(const Sequence &sequence,
.startBlocking();
}
+#ifndef Q_CLANG_QDOC
template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFilteredReduced(const Sequence &sequence,
KeepFunctor keep,
@@ -204,6 +163,7 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFiltered
QtPrivate::createFunctionWrapper(reduce),
options);
}
+#endif
// blocking filteredReduced() on iterators
template <typename ResultType, typename Iterator, typename KeepFunctor, typename ReduceFunctor>
@@ -221,6 +181,7 @@ ResultType blockingFilteredReduced(Iterator begin,
.startBlocking();
}
+#ifndef Q_CLANG_QDOC
template <typename Iterator, typename KeepFunctor, typename ReduceFunctor>
typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFilteredReduced(Iterator begin,
Iterator end,
@@ -235,6 +196,7 @@ typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFiltered
options)
.startBlocking();
}
+#endif
// blocking filtered() on sequences
template <typename Sequence, typename KeepFunctor>
@@ -255,8 +217,6 @@ OutputSequence blockingFiltered(Iterator begin, Iterator end, KeepFunctor keep)
} // namespace QtConcurrent
-#endif // Q_QDOC
-
QT_END_NAMESPACE
#endif // QT_NO_CONCURRENT
diff --git a/src/concurrent/qtconcurrentfilterkernel.h b/src/concurrent/qtconcurrentfilterkernel.h
index bd474fc0c9..4ef5ac0cee 100644
--- a/src/concurrent/qtconcurrentfilterkernel.h
+++ b/src/concurrent/qtconcurrentfilterkernel.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined (Q_CLANG_QDOC)
#include <QtConcurrent/qtconcurrentiteratekernel.h>
#include <QtConcurrent/qtconcurrentmapkernel.h>
@@ -51,7 +51,6 @@
QT_BEGIN_NAMESPACE
-#ifndef Q_QDOC
namespace QtConcurrent {
@@ -292,6 +291,7 @@ public:
}
};
+//! [QtConcurrent-2]
template <typename Iterator, typename KeepFunctor>
inline
ThreadEngineStarter<typename qValueType<Iterator>::value_type>
@@ -300,6 +300,7 @@ startFiltered(Iterator begin, Iterator end, KeepFunctor functor)
return startThreadEngine(new FilteredEachKernel<Iterator, KeepFunctor>(begin, end, functor));
}
+//! [QtConcurrent-3]
template <typename Sequence, typename KeepFunctor>
inline ThreadEngineStarter<typename Sequence::value_type>
startFiltered(const Sequence &sequence, KeepFunctor functor)
@@ -311,6 +312,7 @@ startFiltered(const Sequence &sequence, KeepFunctor functor)
return startThreadEngine(new SequenceHolderType(sequence, functor));
}
+//! [QtConcurrent-4]
template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
inline ThreadEngineStarter<ResultType> startFilteredReduced(const Sequence & sequence,
MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
@@ -324,6 +326,7 @@ inline ThreadEngineStarter<ResultType> startFilteredReduced(const Sequence & seq
}
+//! [QtConcurrent-5]
template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
inline ThreadEngineStarter<ResultType> startFilteredReduced(Iterator begin, Iterator end,
MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
@@ -337,7 +340,6 @@ inline ThreadEngineStarter<ResultType> startFilteredReduced(Iterator begin, Iter
} // namespace QtConcurrent
-#endif // Q_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentfunctionwrappers.h b/src/concurrent/qtconcurrentfunctionwrappers.h
index 111933410b..0f9eb46999 100644
--- a/src/concurrent/qtconcurrentfunctionwrappers.h
+++ b/src/concurrent/qtconcurrentfunctionwrappers.h
@@ -43,13 +43,10 @@
#include <QtConcurrent/qtconcurrentcompilertest.h>
#include <QtCore/QStringList>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
QT_BEGIN_NAMESPACE
-
-#ifndef Q_QDOC
-
namespace QtConcurrent {
template <typename T>
@@ -375,7 +372,6 @@ struct MapResultType<QStringList, U(C::*)() const noexcept>
} // namespace QtPrivate.
-#endif //Q_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentiteratekernel.cpp b/src/concurrent/qtconcurrentiteratekernel.cpp
index 52218f794b..11bdb7e8cd 100644
--- a/src/concurrent/qtconcurrentiteratekernel.cpp
+++ b/src/concurrent/qtconcurrentiteratekernel.cpp
@@ -43,7 +43,7 @@
#include "private/qfunctions_p.h"
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
QT_BEGIN_NAMESPACE
@@ -64,6 +64,54 @@ static double elapsed(qint64 after, qint64 before)
namespace QtConcurrent {
+/*!
+ \class QtConcurrent::Median
+ \inmodule QtConcurrent
+ \internal
+ */
+
+/*!
+ \class QtConcurrent::MedianDouble
+ \inmodule QtConcurrent
+ \internal
+ */
+
+/*!
+ \class QtConcurrent::BlockSizeManager
+ \inmodule QtConcurrent
+ \internal
+ */
+
+/*!
+ \class QtConcurrent::BlockSizeManagerV2
+ \inmodule QtConcurrent
+ \internal
+ */
+
+/*!
+ \class QtConcurrent::ResultReporter
+ \inmodule QtConcurrent
+ \internal
+ */
+
+/*! \fn bool QtConcurrent::selectIteration(std::bidirectional_iterator_tag)
+ \internal
+ */
+
+/*! \fn bool QtConcurrent::selectIteration(std::forward_iterator_tag)
+ \internal
+ */
+
+/*! \fn bool QtConcurrent::selectIteration(std::random_access_iterator_tag)
+ \internal
+ */
+
+/*!
+ \class QtConcurrent::IterateKernel
+ \inmodule QtConcurrent
+ \internal
+ */
+
/*! \internal
*/
diff --git a/src/concurrent/qtconcurrentiteratekernel.h b/src/concurrent/qtconcurrentiteratekernel.h
index dbd000e8ba..b543833776 100644
--- a/src/concurrent/qtconcurrentiteratekernel.h
+++ b/src/concurrent/qtconcurrentiteratekernel.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
#include <QtCore/qatomic.h>
#include <QtConcurrent/qtconcurrentmedian.h>
@@ -53,7 +53,6 @@
QT_BEGIN_NAMESPACE
-#ifndef Q_QDOC
namespace QtConcurrent {
@@ -159,7 +158,7 @@ public:
inline ResultReporter(ThreadEngine<void> *) { }
inline void reserveSpace(int) { }
inline void reportResults(int) { }
- inline void * getPointer() { return Q_NULLPTR; }
+ inline void * getPointer() { return nullptr; }
};
inline bool selectIteration(std::bidirectional_iterator_tag)
@@ -323,7 +322,6 @@ public:
} // namespace QtConcurrent
-#endif //Q_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentmap.cpp b/src/concurrent/qtconcurrentmap.cpp
index 884bf4b4f9..a8f1d6496e 100644
--- a/src/concurrent/qtconcurrentmap.cpp
+++ b/src/concurrent/qtconcurrentmap.cpp
@@ -53,6 +53,72 @@
*/
/*!
+ \enum QtConcurrent::ReduceQueueLimits
+ \internal
+ */
+
+/*!
+ \class QtConcurrent::ReduceKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::SequenceHolder2
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::MapKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::MappedReducedKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::MappedEachKernel
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::SequenceHolder1
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \fn [qtconcurrentmapkernel-1] ThreadEngineStarter<void> QtConcurrent::startMap(Iterator begin, Iterator end, Functor functor)
+ \internal
+*/
+
+/*!
+ \fn [qtconcurrentmapkernel-2] ThreadEngineStarter<T> QtConcurrent::startMapped(Iterator begin, Iterator end, Functor functor)
+ \internal
+*/
+
+/*!
+ \fn [qtconcurrentmapkernel-3] ThreadEngineStarter<T> QtConcurrent::startMapped(const Sequence &sequence, Functor functor)
+ \internal
+*/
+
+/*!
+ \fn [qtconcurrentmapkernel-4] ThreadEngineStarter<ResultType> QtConcurrent::startMappedReduced(const Sequence & sequence, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
+ \internal
+*/
+
+/*!
+ \fn [qtconcurrentmapkernel-5] ThreadEngineStarter<ResultType> QtConcurrent::startMappedReduced(Iterator begin, Iterator end, MapFunctor mapFunctor, ReduceFunctor reduceFunctor, ReduceOptions options)
+ \internal
+*/
+
+/*!
\enum QtConcurrent::ReduceOption
This enum specifies the order of which results from the map or filter
function are passed to the reduce function.
@@ -192,12 +258,19 @@
\section2 Using Function Objects
QtConcurrent::map(), QtConcurrent::mapped(), and
- QtConcurrent::mappedReduced() accept function objects, which can be used to
+ QtConcurrent::mappedReduced() accept function objects
+ for the map function. These function objects can be used to
add state to a function call. The result_type typedef must define the
result type of the function call operator:
\snippet code/src_concurrent_qtconcurrentmap.cpp 14
+ For the reduce function, function objects are not directly
+ supported. Function objects can, however, be used
+ when the type of the reduction result is explicitly specified:
+
+ \snippet code/src_concurrent_qtconcurrentmap.cpp 11
+
\section2 Wrapping Functions that Take Multiple Arguments
If you want to use a map function that takes more than one argument you can
@@ -218,7 +291,7 @@
*/
/*!
- \fn QFuture<void> QtConcurrent::map(Sequence &sequence, MapFunction function)
+ \fn template <typename Sequence, typename MapFunctor> QFuture<void> QtConcurrent::map(Sequence &sequence, MapFunctor function)
Calls \a function once for each item in \a sequence. The \a function is
passed a reference to the item, so that any modifications done to the item
@@ -228,7 +301,7 @@
*/
/*!
- \fn QFuture<void> QtConcurrent::map(Iterator begin, Iterator end, MapFunction function)
+ \fn template <typename Iterator, typename MapFunctor> QFuture<void> QtConcurrent::map(Iterator begin, Iterator end, MapFunctor function)
Calls \a function once for each item from \a begin to \a end. The
\a function is passed a reference to the item, so that any modifications
@@ -238,7 +311,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::mapped(const Sequence &sequence, MapFunction function)
+ \fn template <typename Sequence, typename MapFunctor> QFuture<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType> QtConcurrent::mapped(const Sequence &sequence, MapFunctor function)
Calls \a function once for each item in \a sequence and returns a future
with each mapped item as a result. You can use QFuture::const_iterator or
@@ -248,7 +321,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::mapped(ConstIterator begin, ConstIterator end, MapFunction function)
+ \fn template <typename Iterator, typename MapFunctor> QFuture<typename QtPrivate::MapResultType<void, MapFunctor>::ResultType> QtConcurrent::mapped(Iterator begin, Iterator end, MapFunctor function)
Calls \a function once for each item from \a begin to \a end and returns a
future with each mapped item as a result. You can use
@@ -258,9 +331,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::mappedReduced(const Sequence &sequence,
- MapFunction mapFunction, ReduceFunction reduceFunction,
- QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor> QFuture<ResultType> QtConcurrent::mappedReduced(const Sequence &sequence, MapFunctor mapFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a mapFunction once for each item in \a sequence. The return value of
each \a mapFunction is passed to \a reduceFunction.
@@ -273,9 +344,7 @@
*/
/*!
- \fn QFuture<T> QtConcurrent::mappedReduced(ConstIterator begin,
- ConstIterator end, MapFunction mapFunction, ReduceFunction reduceFunction,
- QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor> QFuture<ResultType> QtConcurrent::mappedReduced(Iterator begin, Iterator end, MapFunctor mapFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a mapFunction once for each item from \a begin to \a end. The return
value of each \a mapFunction is passed to \a reduceFunction.
@@ -290,7 +359,7 @@
*/
/*!
- \fn void QtConcurrent::blockingMap(Sequence &sequence, MapFunction function)
+ \fn template <typename Sequence, typename MapFunctor> void QtConcurrent::blockingMap(Sequence &sequence, MapFunctor function)
Calls \a function once for each item in \a sequence. The \a function is
passed a reference to the item, so that any modifications done to the item
@@ -302,7 +371,7 @@
*/
/*!
- \fn void QtConcurrent::blockingMap(Iterator begin, Iterator end, MapFunction function)
+ \fn template <typename Iterator, typename MapFunctor> void QtConcurrent::blockingMap(Iterator begin, Iterator end, MapFunctor function)
Calls \a function once for each item from \a begin to \a end. The
\a function is passed a reference to the item, so that any modifications
@@ -315,10 +384,10 @@
*/
/*!
- \fn T QtConcurrent::blockingMapped(const Sequence &sequence, MapFunction function)
+ \fn template <typename OutputSequence, typename InputSequence, typename MapFunctor> OutputSequence QtConcurrent::blockingMapped(const InputSequence &sequence, MapFunctor function)
- Calls \a function once for each item in \a sequence and returns a Sequence containing
- the results. The type of the results will match the type returned my the MapFunction.
+ Calls \a function once for each item in \a sequence and returns an OutputSequence containing
+ the results. The type of the results will match the type returned my the MapFunctor.
\note This function will block until all items in the sequence have been processed.
@@ -326,7 +395,7 @@
*/
/*!
- \fn T QtConcurrent::blockingMapped(ConstIterator begin, ConstIterator end, MapFunction function)
+ \fn template <typename Sequence, typename Iterator, typename MapFunctor> Sequence QtConcurrent::blockingMapped(Iterator begin, Iterator end, MapFunctor function)
Calls \a function once for each item from \a begin to \a end and returns a
container with the results. Specify the type of container as the a template
@@ -343,7 +412,7 @@
*/
/*!
- \fn T QtConcurrent::blockingMappedReduced(const Sequence &sequence, MapFunction mapFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor> ResultType QtConcurrent::blockingMappedReduced(const Sequence &sequence, MapFunctor mapFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a mapFunction once for each item in \a sequence. The return value of
each \a mapFunction is passed to \a reduceFunction.
@@ -358,7 +427,7 @@
*/
/*!
- \fn T QtConcurrent::blockingMappedReduced(ConstIterator begin, ConstIterator end, MapFunction mapFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
+ \fn template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor> ResultType QtConcurrent::blockingMappedReduced(Iterator begin, Iterator end, MapFunctor mapFunction, ReduceFunctor reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
Calls \a mapFunction once for each item from \a begin to \a end. The return
value of each \a mapFunction is passed to \a reduceFunction.
@@ -372,3 +441,39 @@
\sa blockingMappedReduced(), {Concurrent Map and Map-Reduce}
*/
+
+/*!
+ \class QtConcurrent::FunctionWrapper0
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::FunctionWrapper1
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::FunctionWrapper2
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::MemberFunctionWrapper
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::MemberFunctionWrapper1
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::ConstMemberFunctionWrapper
+ \inmodule QtConcurrent
+ \internal
+*/
diff --git a/src/concurrent/qtconcurrentmap.h b/src/concurrent/qtconcurrentmap.h
index f8acf31f1d..ed1f7cedd1 100644
--- a/src/concurrent/qtconcurrentmap.h
+++ b/src/concurrent/qtconcurrentmap.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
#include <QtConcurrent/qtconcurrentmapkernel.h>
#include <QtConcurrent/qtconcurrentreducekernel.h>
@@ -52,53 +52,6 @@
QT_BEGIN_NAMESPACE
-#ifdef Q_QDOC
-
-namespace QtConcurrent {
-
- QFuture<void> map(Sequence &sequence, MapFunction function);
- QFuture<void> map(Iterator begin, Iterator end, MapFunction function);
-
- template <typename T>
- QFuture<T> mapped(const Sequence &sequence, MapFunction function);
- template <typename T>
- QFuture<T> mapped(ConstIterator begin, ConstIterator end, MapFunction function);
-
- template <typename T>
- QFuture<T> mappedReduced(const Sequence &sequence,
- MapFunction function,
- ReduceFunction function,
- QtConcurrent::ReduceOptions options = UnorderedReduce | SequentialReduce);
- template <typename T>
- QFuture<T> mappedReduced(ConstIterator begin,
- ConstIterator end,
- MapFunction function,
- ReduceFunction function,
- QtConcurrent::ReduceOptions options = UnorderedReduce | SequentialReduce);
-
- void blockingMap(Sequence &sequence, MapFunction function);
- void blockingMap(Iterator begin, Iterator end, MapFunction function);
-
- template <typename T>
- T blockingMapped(const Sequence &sequence, MapFunction function);
- template <typename T>
- T blockingMapped(ConstIterator begin, ConstIterator end, MapFunction function);
-
- template <typename T>
- T blockingMappedReduced(const Sequence &sequence,
- MapFunction function,
- ReduceFunction function,
- QtConcurrent::ReduceOptions options = UnorderedReduce | SequentialReduce);
- template <typename T>
- T blockingMappedReduced(ConstIterator begin,
- ConstIterator end,
- MapFunction function,
- ReduceFunction function,
- QtConcurrent::ReduceOptions options = UnorderedReduce | SequentialReduce);
-
-} // namespace QtConcurrent
-
-#else
namespace QtConcurrent {
@@ -306,7 +259,6 @@ typename QtPrivate::MapResultType<Iterator, MapFunctor>::ResultType blockingMapp
} // namespace QtConcurrent
-#endif // Q_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentmapkernel.h b/src/concurrent/qtconcurrentmapkernel.h
index fa162f7c34..e8df668791 100644
--- a/src/concurrent/qtconcurrentmapkernel.h
+++ b/src/concurrent/qtconcurrentmapkernel.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined (Q_CLANG_QDOC)
#include <QtConcurrent/qtconcurrentiteratekernel.h>
#include <QtConcurrent/qtconcurrentreducekernel.h>
@@ -50,7 +50,6 @@
QT_BEGIN_NAMESPACE
-#ifndef Q_QDOC
namespace QtConcurrent {
// map kernel, works with both parallel-for and parallel-while
@@ -191,12 +190,14 @@ public:
}
};
+//! [qtconcurrentmapkernel-1]
template <typename Iterator, typename Functor>
inline ThreadEngineStarter<void> startMap(Iterator begin, Iterator end, Functor functor)
{
return startThreadEngine(new MapKernel<Iterator, Functor>(begin, end, functor));
}
+//! [qtconcurrentmapkernel-2]
template <typename T, typename Iterator, typename Functor>
inline ThreadEngineStarter<T> startMapped(Iterator begin, Iterator end, Functor functor)
{
@@ -225,6 +226,7 @@ struct SequenceHolder1 : public Base
}
};
+//! [qtconcurrentmapkernel-3]
template <typename T, typename Sequence, typename Functor>
inline ThreadEngineStarter<T> startMapped(const Sequence &sequence, Functor functor)
{
@@ -235,6 +237,7 @@ inline ThreadEngineStarter<T> startMapped(const Sequence &sequence, Functor func
return startThreadEngine(new SequenceHolderType(sequence, functor));
}
+//! [qtconcurrentmapkernel-4]
template <typename IntermediateType, typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
inline ThreadEngineStarter<ResultType> startMappedReduced(const Sequence & sequence,
MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
@@ -247,6 +250,7 @@ inline ThreadEngineStarter<ResultType> startMappedReduced(const Sequence & seque
return startThreadEngine(new SequenceHolderType(sequence, mapFunctor, reduceFunctor, options));
}
+//! [qtconcurrentmapkernel-5]
template <typename IntermediateType, typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
inline ThreadEngineStarter<ResultType> startMappedReduced(Iterator begin, Iterator end,
MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
@@ -259,7 +263,6 @@ inline ThreadEngineStarter<ResultType> startMappedReduced(Iterator begin, Iterat
} // namespace QtConcurrent
-#endif //Q_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentmedian.h b/src/concurrent/qtconcurrentmedian.h
index d0f832812c..87e6b2935d 100644
--- a/src/concurrent/qtconcurrentmedian.h
+++ b/src/concurrent/qtconcurrentmedian.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) ||defined(Q_CLANG_QDOC)
#include <QtCore/qvector.h>
@@ -51,7 +51,6 @@
QT_BEGIN_NAMESPACE
-#ifndef Q_QDOC
namespace QtConcurrent {
@@ -195,7 +194,6 @@ private:
} // namespace QtConcurrent
-#endif //Q_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentreducekernel.h b/src/concurrent/qtconcurrentreducekernel.h
index c5003a2a0e..d1a283eb53 100644
--- a/src/concurrent/qtconcurrentreducekernel.h
+++ b/src/concurrent/qtconcurrentreducekernel.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
#include <QtCore/qatomic.h>
#include <QtCore/qlist.h>
@@ -57,8 +57,6 @@ QT_BEGIN_NAMESPACE
namespace QtConcurrent {
-#ifndef Q_QDOC
-
/*
The ReduceQueueStartLimit and ReduceQueueThrottleLimit constants
limit the reduce queue size for MapReduce. When the number of
@@ -66,10 +64,17 @@ namespace QtConcurrent {
MapReduce won't start any new threads, and when it exceeds
ReduceQueueThrottleLimit running threads will be stopped.
*/
+#ifdef Q_CLANG_QDOC
+enum ReduceQueueLimits {
+ ReduceQueueStartLimit = 20,
+ ReduceQueueThrottleLimit = 30
+};
+#else
enum {
ReduceQueueStartLimit = 20,
ReduceQueueThrottleLimit = 30
};
+#endif
// IntermediateResults holds a block of intermediate results from a
// map or filter functor. The begin/end offsets indicates the origin
@@ -82,8 +87,6 @@ public:
QVector<T> vector;
};
-#endif // Q_QDOC
-
enum ReduceOption {
UnorderedReduce = 0x1,
OrderedReduce = 0x2,
@@ -91,10 +94,9 @@ enum ReduceOption {
// ParallelReduce = 0x8
};
Q_DECLARE_FLAGS(ReduceOptions, ReduceOption)
+#ifndef Q_CLANG_QDOC
Q_DECLARE_OPERATORS_FOR_FLAGS(ReduceOptions)
-
-#ifndef Q_QDOC
-
+#endif
// supports both ordered and out-of-order reduction
template <typename ReduceFunctor, typename ReduceResultType, typename T>
class ReduceKernel
@@ -239,8 +241,6 @@ struct SequenceHolder2 : public Base
}
};
-#endif //Q_QDOC
-
} // namespace QtConcurrent
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentrun.cpp b/src/concurrent/qtconcurrentrun.cpp
index 1d8f7afe85..e2e3b3f3af 100644
--- a/src/concurrent/qtconcurrentrun.cpp
+++ b/src/concurrent/qtconcurrentrun.cpp
@@ -115,6 +115,15 @@
*/
/*!
+ \typedef Function
+ \internal
+
+ This typedef is a dummy required to make the \c Function
+ type name known so that clang doesn't reject functions
+ that use it.
+*/
+
+/*!
\fn QFuture<T> QtConcurrent::run(Function function, ...);
Equivalent to
diff --git a/src/concurrent/qtconcurrentrun.h b/src/concurrent/qtconcurrentrun.h
index c0c0e66913..7963294ebf 100644
--- a/src/concurrent/qtconcurrentrun.h
+++ b/src/concurrent/qtconcurrentrun.h
@@ -43,15 +43,16 @@
#include <QtConcurrent/qtconcurrentcompilertest.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
#include <QtConcurrent/qtconcurrentrunbase.h>
#include <QtConcurrent/qtconcurrentstoredfunctioncall.h>
QT_BEGIN_NAMESPACE
+#ifdef Q_CLANG_QDOC
-#ifdef Q_QDOC
+typedef int Function;
namespace QtConcurrent {
@@ -919,7 +920,7 @@ QFuture<T> run(QThreadPool *pool, const Class *object, T (Class::*fn)(Param1, Pa
} //namespace QtConcurrent
-#endif // Q_QDOC
+#endif // Q_CLANG_QDOC
QT_END_NAMESPACE
diff --git a/src/concurrent/qtconcurrentthreadengine.cpp b/src/concurrent/qtconcurrentthreadengine.cpp
index c7791f8571..8d6bd0efb2 100644
--- a/src/concurrent/qtconcurrentthreadengine.cpp
+++ b/src/concurrent/qtconcurrentthreadengine.cpp
@@ -39,12 +39,52 @@
#include "qtconcurrentthreadengine.h"
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) || defined(Q_CLANG_QDOC)
QT_BEGIN_NAMESPACE
namespace QtConcurrent {
+/*!
+ \class QtConcurrent::ThreadEngineBarrier
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \enum QtConcurrent::ThreadFunctionResult
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::ThreadEngineBase
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::ThreadEngine
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::ThreadEngineStarterBase
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \class QtConcurrent::ThreadEngineStarter
+ \inmodule QtConcurrent
+ \internal
+*/
+
+/*!
+ \fn [qtconcurrentthreadengine-1] template <typename ThreadEngine> ThreadEngineStarter<typename ThreadEngine::ResultType> QtConcurrent::startThreadEngine(ThreadEngine *threadEngine)
+ \internal
+*/
+
ThreadEngineBarrier::ThreadEngineBarrier()
:count(0) { }
diff --git a/src/concurrent/qtconcurrentthreadengine.h b/src/concurrent/qtconcurrentthreadengine.h
index f915e9adfd..69e42018e6 100644
--- a/src/concurrent/qtconcurrentthreadengine.h
+++ b/src/concurrent/qtconcurrentthreadengine.h
@@ -42,7 +42,7 @@
#include <QtConcurrent/qtconcurrent_global.h>
-#ifndef QT_NO_CONCURRENT
+#if !defined(QT_NO_CONCURRENT) ||defined(Q_CLANG_QDOC)
#include <QtCore/qthreadpool.h>
#include <QtCore/qfuture.h>
@@ -55,8 +55,6 @@
QT_BEGIN_NAMESPACE
-#ifndef Q_QDOC
-
namespace QtConcurrent {
// The ThreadEngineBarrier counts worker threads, and allows one
@@ -113,7 +111,7 @@ private:
void startThreads();
void threadExit();
bool threadThrottleExit();
- void run() Q_DECL_OVERRIDE;
+ void run() override;
virtual void asynchronousFinish() = 0;
#ifndef QT_NO_EXCEPTIONS
void handleException(const QException &exception);
@@ -132,7 +130,7 @@ class ThreadEngine : public virtual ThreadEngineBase
public:
typedef T ResultType;
- virtual T *result() { return Q_NULLPTR; }
+ virtual T *result() { return nullptr; }
QFutureInterface<T> *futureInterfaceTyped()
{
@@ -173,7 +171,7 @@ public:
return future;
}
- void asynchronousFinish() Q_DECL_OVERRIDE
+ void asynchronousFinish() override
{
finish();
futureInterfaceTyped()->reportFinished(result());
@@ -259,6 +257,7 @@ public:
}
};
+//! [qtconcurrentthreadengine-1]
template <typename ThreadEngine>
inline ThreadEngineStarter<typename ThreadEngine::ResultType> startThreadEngine(ThreadEngine *threadEngine)
{
@@ -267,7 +266,6 @@ inline ThreadEngineStarter<typename ThreadEngine::ResultType> startThreadEngine(
} // namespace QtConcurrent
-#endif //Q_QDOC
QT_END_NAMESPACE
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index e445037efb..b3db200ed1 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -103,7 +103,7 @@
*/
/*!
- \fn QAbstractAnimation::finished()
+ \fn void QAbstractAnimation::finished()
QAbstractAnimation emits this signal after the animation has stopped and
has reached the end.
@@ -114,7 +114,7 @@
*/
/*!
- \fn QAbstractAnimation::stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
+ \fn void QAbstractAnimation::stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
QAbstractAnimation emits this signal whenever the state of the animation has
changed from \a oldState to \a newState. This signal is emitted after the virtual
@@ -124,7 +124,7 @@
*/
/*!
- \fn QAbstractAnimation::currentLoopChanged(int currentLoop)
+ \fn void QAbstractAnimation::currentLoopChanged(int currentLoop)
QAbstractAnimation emits this signal whenever the current loop
changes. \a currentLoop is the current loop.
@@ -133,7 +133,7 @@
*/
/*!
- \fn QAbstractAnimation::directionChanged(QAbstractAnimation::Direction newDirection);
+ \fn void QAbstractAnimation::directionChanged(QAbstractAnimation::Direction newDirection);
QAbstractAnimation emits this signal whenever the direction has been
changed. \a newDirection is the new direction.
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index 727b4e7777..0ff6bc5176 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -82,7 +82,7 @@ public:
DeleteWhenStopped
};
- QAbstractAnimation(QObject *parent = Q_NULLPTR);
+ QAbstractAnimation(QObject *parent = nullptr);
virtual ~QAbstractAnimation();
State state() const;
@@ -117,8 +117,8 @@ public Q_SLOTS:
void setCurrentTime(int msecs);
protected:
- QAbstractAnimation(QAbstractAnimationPrivate &dd, QObject *parent = Q_NULLPTR);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ QAbstractAnimation(QAbstractAnimationPrivate &dd, QObject *parent = nullptr);
+ bool event(QEvent *event) override;
virtual void updateCurrentTime(int currentTime) = 0;
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
@@ -136,7 +136,7 @@ class Q_CORE_EXPORT QAnimationDriver : public QObject
Q_DECLARE_PRIVATE(QAnimationDriver)
public:
- QAnimationDriver(QObject *parent = Q_NULLPTR);
+ QAnimationDriver(QObject *parent = nullptr);
~QAnimationDriver();
virtual void advance();
@@ -162,7 +162,7 @@ protected:
virtual void start();
virtual void stop();
- QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent = Q_NULLPTR);
+ QAnimationDriver(QAnimationDriverPrivate &dd, QObject *parent = nullptr);
private:
friend class QUnifiedTimer;
diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h
index 3b901c4426..5593046e48 100644
--- a/src/corelib/animation/qabstractanimation_p.h
+++ b/src/corelib/animation/qabstractanimation_p.h
@@ -116,7 +116,7 @@ class QDefaultAnimationDriver : public QAnimationDriver
Q_OBJECT
public:
QDefaultAnimationDriver(QUnifiedTimer *timer);
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) override;
private Q_SLOTS:
void startTimer();
@@ -196,7 +196,7 @@ public:
qint64 elapsed() const;
protected:
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
private Q_SLOTS:
void startTimers();
@@ -265,11 +265,11 @@ public:
*/
static void updateAnimationTimer();
- void restartAnimationTimer() Q_DECL_OVERRIDE;
- void updateAnimationsTime(qint64 delta) Q_DECL_OVERRIDE;
+ void restartAnimationTimer() override;
+ void updateAnimationsTime(qint64 delta) override;
//useful for profiling/debugging
- int runningAnimationCount() Q_DECL_OVERRIDE { return animations.count(); }
+ int runningAnimationCount() override { return animations.count(); }
private Q_SLOTS:
void startAnimations();
diff --git a/src/corelib/animation/qanimationgroup.h b/src/corelib/animation/qanimationgroup.h
index 20be0c0dd4..136ad3ca9f 100644
--- a/src/corelib/animation/qanimationgroup.h
+++ b/src/corelib/animation/qanimationgroup.h
@@ -53,7 +53,7 @@ class Q_CORE_EXPORT QAnimationGroup : public QAbstractAnimation
Q_OBJECT
public:
- QAnimationGroup(QObject *parent = Q_NULLPTR);
+ QAnimationGroup(QObject *parent = nullptr);
~QAnimationGroup();
QAbstractAnimation *animationAt(int index) const;
@@ -67,7 +67,7 @@ public:
protected:
QAnimationGroup(QAnimationGroupPrivate &dd, QObject *parent);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
private:
Q_DISABLE_COPY(QAnimationGroup)
diff --git a/src/corelib/animation/qparallelanimationgroup.h b/src/corelib/animation/qparallelanimationgroup.h
index 3a00e9fd12..09a439ef24 100644
--- a/src/corelib/animation/qparallelanimationgroup.h
+++ b/src/corelib/animation/qparallelanimationgroup.h
@@ -53,18 +53,18 @@ class Q_CORE_EXPORT QParallelAnimationGroup : public QAnimationGroup
Q_OBJECT
public:
- QParallelAnimationGroup(QObject *parent = Q_NULLPTR);
+ QParallelAnimationGroup(QObject *parent = nullptr);
~QParallelAnimationGroup();
- int duration() const Q_DECL_OVERRIDE;
+ int duration() const override;
protected:
QParallelAnimationGroup(QParallelAnimationGroupPrivate &dd, QObject *parent);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
- void updateCurrentTime(int currentTime) Q_DECL_OVERRIDE;
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
- void updateDirection(QAbstractAnimation::Direction direction) Q_DECL_OVERRIDE;
+ void updateCurrentTime(int currentTime) override;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override;
+ void updateDirection(QAbstractAnimation::Direction direction) override;
private:
Q_DISABLE_COPY(QParallelAnimationGroup)
diff --git a/src/corelib/animation/qparallelanimationgroup_p.h b/src/corelib/animation/qparallelanimationgroup_p.h
index 069ba8e51a..1c9c3072f7 100644
--- a/src/corelib/animation/qparallelanimationgroup_p.h
+++ b/src/corelib/animation/qparallelanimationgroup_p.h
@@ -78,7 +78,7 @@ public:
void connectUncontrolledAnimations();
void disconnectUncontrolledAnimations();
- void animationRemoved(int index, QAbstractAnimation *) Q_DECL_OVERRIDE;
+ void animationRemoved(int index, QAbstractAnimation *) override;
// private slot
void _q_uncontrolledAnimationFinished();
diff --git a/src/corelib/animation/qpauseanimation.h b/src/corelib/animation/qpauseanimation.h
index c077164beb..e2095a39d6 100644
--- a/src/corelib/animation/qpauseanimation.h
+++ b/src/corelib/animation/qpauseanimation.h
@@ -54,16 +54,16 @@ class Q_CORE_EXPORT QPauseAnimation : public QAbstractAnimation
Q_OBJECT
Q_PROPERTY(int duration READ duration WRITE setDuration)
public:
- QPauseAnimation(QObject *parent = Q_NULLPTR);
- QPauseAnimation(int msecs, QObject *parent = Q_NULLPTR);
+ QPauseAnimation(QObject *parent = nullptr);
+ QPauseAnimation(int msecs, QObject *parent = nullptr);
~QPauseAnimation();
- int duration() const Q_DECL_OVERRIDE;
+ int duration() const override;
void setDuration(int msecs);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void updateCurrentTime(int) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void updateCurrentTime(int) override;
private:
Q_DISABLE_COPY(QPauseAnimation)
diff --git a/src/corelib/animation/qpropertyanimation.h b/src/corelib/animation/qpropertyanimation.h
index ecc7524884..3270591d1d 100644
--- a/src/corelib/animation/qpropertyanimation.h
+++ b/src/corelib/animation/qpropertyanimation.h
@@ -55,8 +55,8 @@ class Q_CORE_EXPORT QPropertyAnimation : public QVariantAnimation
Q_PROPERTY(QObject* targetObject READ targetObject WRITE setTargetObject)
public:
- QPropertyAnimation(QObject *parent = Q_NULLPTR);
- QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = Q_NULLPTR);
+ QPropertyAnimation(QObject *parent = nullptr);
+ QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = nullptr);
~QPropertyAnimation();
QObject *targetObject() const;
@@ -66,9 +66,9 @@ public:
void setPropertyName(const QByteArray &propertyName);
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void updateCurrentValue(const QVariant &value) Q_DECL_OVERRIDE;
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ void updateCurrentValue(const QVariant &value) override;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override;
private:
Q_DISABLE_COPY(QPropertyAnimation)
diff --git a/src/corelib/animation/qsequentialanimationgroup.h b/src/corelib/animation/qsequentialanimationgroup.h
index 3caf93b054..1c8e67d256 100644
--- a/src/corelib/animation/qsequentialanimationgroup.h
+++ b/src/corelib/animation/qsequentialanimationgroup.h
@@ -56,25 +56,25 @@ class Q_CORE_EXPORT QSequentialAnimationGroup : public QAnimationGroup
Q_PROPERTY(QAbstractAnimation* currentAnimation READ currentAnimation NOTIFY currentAnimationChanged)
public:
- QSequentialAnimationGroup(QObject *parent = Q_NULLPTR);
+ QSequentialAnimationGroup(QObject *parent = nullptr);
~QSequentialAnimationGroup();
QPauseAnimation *addPause(int msecs);
QPauseAnimation *insertPause(int index, int msecs);
QAbstractAnimation *currentAnimation() const;
- int duration() const Q_DECL_OVERRIDE;
+ int duration() const override;
Q_SIGNALS:
void currentAnimationChanged(QAbstractAnimation *current);
protected:
QSequentialAnimationGroup(QSequentialAnimationGroupPrivate &dd, QObject *parent);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
- void updateCurrentTime(int) Q_DECL_OVERRIDE;
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
- void updateDirection(QAbstractAnimation::Direction direction) Q_DECL_OVERRIDE;
+ void updateCurrentTime(int) override;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override;
+ void updateDirection(QAbstractAnimation::Direction direction) override;
private:
Q_DISABLE_COPY(QSequentialAnimationGroup)
diff --git a/src/corelib/animation/qsequentialanimationgroup_p.h b/src/corelib/animation/qsequentialanimationgroup_p.h
index 1b07e1330a..e4f3d9c96a 100644
--- a/src/corelib/animation/qsequentialanimationgroup_p.h
+++ b/src/corelib/animation/qsequentialanimationgroup_p.h
@@ -82,8 +82,8 @@ public:
void setCurrentAnimation(int index, bool intermediate = false);
void activateCurrentAnimation(bool intermediate = false);
- void animationInsertedAt(int index) Q_DECL_OVERRIDE;
- void animationRemoved(int index, QAbstractAnimation *anim) Q_DECL_OVERRIDE;
+ void animationInsertedAt(int index) override;
+ void animationRemoved(int index, QAbstractAnimation *anim) override;
bool atEnd() const;
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index 75b8a3fbbf..3c90d71c7d 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -403,7 +403,7 @@ Q_GLOBAL_STATIC(QInterpolatorVector, registeredInterpolators)
static QBasicMutex registeredInterpolatorsMutex;
/*!
- \fn void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to, qreal progress))
+ \fn template <typename T> void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to, qreal progress))
\relates QVariantAnimation
\threadsafe
diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h
index 0d007487b9..d6346e1706 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
@@ -65,7 +65,7 @@ public:
typedef QPair<qreal, QVariant> KeyValue;
typedef QVector<KeyValue> KeyValues;
- QVariantAnimation(QObject *parent = Q_NULLPTR);
+ QVariantAnimation(QObject *parent = nullptr);
~QVariantAnimation();
QVariant startValue() const;
@@ -82,7 +82,7 @@ public:
QVariant currentValue() const;
- int duration() const Q_DECL_OVERRIDE;
+ int duration() const override;
void setDuration(int msecs);
QEasingCurve easingCurve() const;
@@ -94,11 +94,11 @@ Q_SIGNALS:
void valueChanged(const QVariant &value);
protected:
- QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent = Q_NULLPTR);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent = nullptr);
+ bool event(QEvent *event) override;
- void updateCurrentTime(int) Q_DECL_OVERRIDE;
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
+ void updateCurrentTime(int) override;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override;
virtual void updateCurrentValue(const QVariant &value);
virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const;
diff --git a/src/corelib/arch/qatomic_cxx11.h b/src/corelib/arch/qatomic_cxx11.h
index 1404849382..2fc0bf5419 100644
--- a/src/corelib/arch/qatomic_cxx11.h
+++ b/src/corelib/arch/qatomic_cxx11.h
@@ -276,7 +276,7 @@ template <typename X> struct QAtomicOps
static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; }
template <typename T>
- static bool testAndSetRelaxed(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = Q_NULLPTR) Q_DECL_NOTHROW
+ static bool testAndSetRelaxed(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = nullptr) Q_DECL_NOTHROW
{
bool tmp = _q_value.compare_exchange_strong(expectedValue, newValue, std::memory_order_relaxed, std::memory_order_relaxed);
if (currentValue)
@@ -285,7 +285,7 @@ template <typename X> struct QAtomicOps
}
template <typename T>
- static bool testAndSetAcquire(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = Q_NULLPTR) Q_DECL_NOTHROW
+ static bool testAndSetAcquire(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = nullptr) Q_DECL_NOTHROW
{
bool tmp = _q_value.compare_exchange_strong(expectedValue, newValue, std::memory_order_acquire, std::memory_order_acquire);
if (currentValue)
@@ -294,7 +294,7 @@ template <typename X> struct QAtomicOps
}
template <typename T>
- static bool testAndSetRelease(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = Q_NULLPTR) Q_DECL_NOTHROW
+ static bool testAndSetRelease(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = nullptr) Q_DECL_NOTHROW
{
bool tmp = _q_value.compare_exchange_strong(expectedValue, newValue, std::memory_order_release, std::memory_order_relaxed);
if (currentValue)
@@ -303,7 +303,7 @@ template <typename X> struct QAtomicOps
}
template <typename T>
- static bool testAndSetOrdered(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = Q_NULLPTR) Q_DECL_NOTHROW
+ static bool testAndSetOrdered(std::atomic<T> &_q_value, T expectedValue, T newValue, T *currentValue = nullptr) Q_DECL_NOTHROW
{
bool tmp = _q_value.compare_exchange_strong(expectedValue, newValue, std::memory_order_acq_rel, std::memory_order_acquire);
if (currentValue)
diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp
index d6362b6fbc..330eb7c038 100644
--- a/src/corelib/codecs/qiconvcodec.cpp
+++ b/src/corelib/codecs/qiconvcodec.cpp
@@ -53,7 +53,7 @@ QT_REQUIRE_CONFIG(iconv);
// unistd.h is needed for the _XOPEN_UNIX macro
#include <unistd.h>
-#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF)
+#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX)
# include <langinfo.h>
#endif
@@ -447,7 +447,7 @@ iconv_t QIconvCodec::createIconv_t(const char *to, const char *from) const
char *codeset = 0;
#endif
-#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF)
+#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX)
if (cd == (iconv_t) -1) {
codeset = nl_langinfo(CODESET);
if (codeset)
diff --git a/src/corelib/codecs/qicucodec_p.h b/src/corelib/codecs/qicucodec_p.h
index 3a373ce5b3..0c2dbe17d6 100644
--- a/src/corelib/codecs/qicucodec_p.h
+++ b/src/corelib/codecs/qicucodec_p.h
@@ -74,12 +74,12 @@ public:
static QTextCodec *codecForNameUnlocked(const char *name);
static QTextCodec *codecForMibUnlocked(int mib);
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
private:
QIcuCodec(const char *name);
diff --git a/src/corelib/codecs/qisciicodec_p.h b/src/corelib/codecs/qisciicodec_p.h
index f92c0091ce..f818e7d83e 100644
--- a/src/corelib/codecs/qisciicodec_p.h
+++ b/src/corelib/codecs/qisciicodec_p.h
@@ -65,11 +65,11 @@ public:
static QTextCodec *create(const char *name);
- QByteArray name() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ int mibEnum() const override;
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
private:
int idx;
diff --git a/src/corelib/codecs/qlatincodec_p.h b/src/corelib/codecs/qlatincodec_p.h
index 1042c3b80d..3e258e5ae1 100644
--- a/src/corelib/codecs/qlatincodec_p.h
+++ b/src/corelib/codecs/qlatincodec_p.h
@@ -63,12 +63,12 @@ class QLatin1Codec : public QTextCodec
public:
~QLatin1Codec();
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
};
@@ -78,12 +78,12 @@ class QLatin15Codec: public QTextCodec
public:
~QLatin15Codec();
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
};
#endif // QT_NO_TEXTCODEC
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index 4f0cd914ca..1541c498e6 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -88,7 +88,7 @@
#include <stdlib.h>
#include <ctype.h>
#include <locale.h>
-#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) && !defined(Q_OS_ANDROID)
+#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_ANDROID)
# include <langinfo.h>
#endif
@@ -180,7 +180,7 @@ static QTextCodec *setupLocaleMapper()
// This is because the builtin utf8 codec is around 5 times faster
// then the using QIconvCodec
-#if defined (_XOPEN_UNIX) && !defined(Q_OS_OSF)
+#if defined (_XOPEN_UNIX)
char *charset = nl_langinfo(CODESET);
if (charset)
locale = QTextCodec::codecForName(charset);
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index 5163d37238..8153bebac8 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -100,7 +100,7 @@ public:
struct Q_CORE_EXPORT ConverterState {
ConverterState(ConversionFlags f = DefaultConversion)
- : flags(f), remainingChars(0), invalidChars(0), d(Q_NULLPTR) { state_data[0] = state_data[1] = state_data[2] = 0; }
+ : flags(f), remainingChars(0), invalidChars(0), d(nullptr) { state_data[0] = state_data[1] = state_data[2] = 0; }
~ConverterState();
ConversionFlags flags;
int remainingChars;
@@ -111,9 +111,9 @@ public:
Q_DISABLE_COPY(ConverterState)
};
- QString toUnicode(const char *in, int length, ConverterState *state = Q_NULLPTR) const
+ QString toUnicode(const char *in, int length, ConverterState *state = nullptr) const
{ return convertToUnicode(in, length, state); }
- QByteArray fromUnicode(const QChar *in, int length, ConverterState *state = Q_NULLPTR) const
+ QByteArray fromUnicode(const QChar *in, int length, ConverterState *state = nullptr) const
{ return convertFromUnicode(in, length, state); }
QTextDecoder* makeDecoder(ConversionFlags flags = DefaultConversion) const;
diff --git a/src/corelib/codecs/qtsciicodec_p.h b/src/corelib/codecs/qtsciicodec_p.h
index 68ab01f7b5..78f9350a19 100644
--- a/src/corelib/codecs/qtsciicodec_p.h
+++ b/src/corelib/codecs/qtsciicodec_p.h
@@ -91,11 +91,11 @@ class QTsciiCodec : public QTextCodec {
public:
~QTsciiCodec();
- QByteArray name() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ int mibEnum() const override;
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
};
#endif // QT_NO_CODECS
diff --git a/src/corelib/codecs/qutfcodec.cpp b/src/corelib/codecs/qutfcodec.cpp
index 74a716db4a..ce1b092a54 100644
--- a/src/corelib/codecs/qutfcodec.cpp
+++ b/src/corelib/codecs/qutfcodec.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2018 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -152,6 +152,44 @@ static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const
}
return src == end;
}
+
+static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end, const uchar *&nextAscii)
+{
+ // do sixteen characters at a time
+ for ( ; end - src >= 16; src += 16) {
+ __m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i*>(src));
+
+ // check if everything is ASCII
+ // movemask extracts the high bit of every byte, so n is non-zero if something isn't ASCII
+ uint n = _mm_movemask_epi8(data);
+ if (!n)
+ continue;
+
+ // find the next probable ASCII character
+ // we don't want to load 16 bytes again in this loop if we know there are non-ASCII
+ // characters still coming
+ nextAscii = src + qBitScanReverse(n) + 1;
+
+ // return the non-ASCII character
+ return src + qCountTrailingZeroBits(n);
+ }
+
+ // do four characters at a time
+ for ( ; end - src >= 4; src += 4) {
+ quint32 data = qFromUnaligned<quint32>(src);
+ data &= 0x80808080U;
+ if (!data)
+ continue;
+
+ // We don't try to guess which of the three bytes is ASCII and which
+ // one isn't. The chance that at least two of them are non-ASCII is
+ // better than 75%.
+ nextAscii = src;
+ return src;
+ }
+ nextAscii = end;
+ return src;
+}
#elif defined(__ARM_NEON__) && defined(Q_PROCESSOR_ARM_64) // vaddv is only available on Aarch64
static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const ushort *&src, const ushort *end)
{
@@ -220,6 +258,34 @@ static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const
}
return src == end;
}
+
+static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end, const uchar *&nextAscii)
+{
+ // The SIMD code below is untested, so just force an early return until
+ // we've had the time to verify it works.
+ nextAscii = end;
+ return src;
+
+ // do eight characters at a time
+ uint8x8_t msb_mask = vdup_n_u8(0x80);
+ uint8x8_t add_mask = { 1, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 };
+ for ( ; end - src >= 8; src += 8) {
+ uint8x8_t c = vld1_u8(src);
+ uint8_t n = vaddv_u8(vand_u8(vcge_u8(c, msb_mask), add_mask));
+ if (!n)
+ continue;
+
+ // find the next probable ASCII character
+ // we don't want to load 16 bytes again in this loop if we know there are non-ASCII
+ // characters still coming
+ nextAscii = src + qBitScanReverse(n) + 1;
+
+ // return the non-ASCII character
+ return src + qCountTrailingZeroBits(n);
+ }
+ nextAscii = end;
+ return src;
+}
#else
static inline bool simdEncodeAscii(uchar *, const ushort *, const ushort *, const ushort *)
{
@@ -230,6 +296,12 @@ static inline bool simdDecodeAscii(ushort *, const uchar *, const uchar *, const
{
return false;
}
+
+static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end, const uchar *&nextAscii)
+{
+ nextAscii = end;
+ return src;
+}
#endif
QByteArray QUtf8::convertFromUnicode(const QChar *uc, int len)
@@ -518,6 +590,95 @@ QString QUtf8::convertToUnicode(const char *chars, int len, QTextCodec::Converte
return result;
}
+struct QUtf8NoOutputTraits : public QUtf8BaseTraitsNoAscii
+{
+ struct NoOutput {};
+ static void appendUtf16(const NoOutput &, ushort) {}
+ static void appendUcs4(const NoOutput &, uint) {}
+};
+
+QUtf8::ValidUtf8Result QUtf8::isValidUtf8(const char *chars, qsizetype len)
+{
+ const uchar *src = reinterpret_cast<const uchar *>(chars);
+ const uchar *end = src + len;
+ const uchar *nextAscii = src;
+ bool isValidAscii = true;
+
+ while (src < end) {
+ if (src >= nextAscii)
+ src = simdFindNonAscii(src, end, nextAscii);
+ if (src == end)
+ break;
+
+ do {
+ uchar b = *src++;
+ if ((b & 0x80) == 0)
+ continue;
+
+ isValidAscii = false;
+ QUtf8NoOutputTraits::NoOutput output;
+ int res = QUtf8Functions::fromUtf8<QUtf8NoOutputTraits>(b, output, src, end);
+ if (res < 0) {
+ // decoding error
+ return { false, false };
+ }
+ } while (src < nextAscii);
+ }
+
+ return { true, isValidAscii };
+}
+
+int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, const QChar *utf16, int u16len)
+{
+ uint uc1, uc2;
+ auto src1 = reinterpret_cast<const uchar *>(utf8);
+ auto end1 = src1 + u8len;
+ QStringIterator src2(utf16, utf16 + u16len);
+
+ while (src1 < end1 && src2.hasNext()) {
+ uchar b = *src1++;
+ uint *output = &uc1;
+ int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
+ if (res < 0) {
+ // decoding error
+ uc1 = QChar::ReplacementCharacter;
+ }
+
+ uc2 = src2.next();
+ if (uc1 != uc2)
+ return int(uc1) - int(uc2);
+ }
+
+ // the shorter string sorts first
+ return (end1 > src1) - int(src2.hasNext());
+}
+
+int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, QLatin1String s)
+{
+ uint uc1;
+ auto src1 = reinterpret_cast<const uchar *>(utf8);
+ auto end1 = src1 + u8len;
+ auto src2 = reinterpret_cast<const uchar *>(s.latin1());
+ auto end2 = src2 + s.size();
+
+ while (src1 < end1 && src2 < end2) {
+ uchar b = *src1++;
+ uint *output = &uc1;
+ int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1);
+ if (res < 0) {
+ // decoding error
+ uc1 = QChar::ReplacementCharacter;
+ }
+
+ uint uc2 = *src2++;
+ if (uc1 != uc2)
+ return int(uc1) - int(uc2);
+ }
+
+ // the shorter string sorts first
+ return (end1 > src1) - (end2 > src2);
+}
+
QByteArray QUtf16::convertFromUnicode(const QChar *uc, int len, QTextCodec::ConverterState *state, DataEndianness e)
{
DataEndianness endian = e;
diff --git a/src/corelib/codecs/qutfcodec_p.h b/src/corelib/codecs/qutfcodec_p.h
index 152fe174c4..659a229dae 100644
--- a/src/corelib/codecs/qutfcodec_p.h
+++ b/src/corelib/codecs/qutfcodec_p.h
@@ -290,6 +290,13 @@ struct QUtf8
static QString convertToUnicode(const char *, int, QTextCodec::ConverterState *);
static QByteArray convertFromUnicode(const QChar *, int);
static QByteArray convertFromUnicode(const QChar *, int, QTextCodec::ConverterState *);
+ struct ValidUtf8Result {
+ bool isValidUtf8;
+ bool isValidAscii;
+ };
+ static ValidUtf8Result isValidUtf8(const char *, qsizetype);
+ static int compareUtf8(const char *, qsizetype, const QChar *, int);
+ static int compareUtf8(const char *, qsizetype, QLatin1String s);
};
struct QUtf16
@@ -310,11 +317,11 @@ class QUtf8Codec : public QTextCodec {
public:
~QUtf8Codec();
- QByteArray name() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ int mibEnum() const override;
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
void convertToUnicode(QString *target, const char *, int, ConverterState *) const;
};
@@ -324,12 +331,12 @@ public:
QUtf16Codec() { e = DetectEndianness; }
~QUtf16Codec();
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
protected:
DataEndianness e;
@@ -338,17 +345,17 @@ protected:
class QUtf16BECodec : public QUtf16Codec {
public:
QUtf16BECodec() : QUtf16Codec() { e = BigEndianness; }
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
};
class QUtf16LECodec : public QUtf16Codec {
public:
QUtf16LECodec() : QUtf16Codec() { e = LittleEndianness; }
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
};
class QUtf32Codec : public QTextCodec {
@@ -356,12 +363,12 @@ public:
QUtf32Codec() { e = DetectEndianness; }
~QUtf32Codec();
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
- QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QString convertToUnicode(const char *, int, ConverterState *) const override;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override;
protected:
DataEndianness e;
@@ -370,17 +377,17 @@ protected:
class QUtf32BECodec : public QUtf32Codec {
public:
QUtf32BECodec() : QUtf32Codec() { e = BigEndianness; }
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
};
class QUtf32LECodec : public QUtf32Codec {
public:
QUtf32LECodec() : QUtf32Codec() { e = LittleEndianness; }
- QByteArray name() const Q_DECL_OVERRIDE;
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
- int mibEnum() const Q_DECL_OVERRIDE;
+ QByteArray name() const override;
+ QList<QByteArray> aliases() const override;
+ int mibEnum() const override;
};
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index 8cd73d6ce4..9f9512942a 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -15,7 +15,8 @@
"posix-ipc": { "type": "boolean", "name": "ipc_posix" },
"pps": { "type": "boolean", "name": "qqnx_pps" },
"slog2": "boolean",
- "syslog": "boolean"
+ "syslog": "boolean",
+ "trace": { "type": "optionalString", "values": [ "etw", "lttng", "no", "yes" ] }
}
},
@@ -147,6 +148,18 @@
"-lrt"
]
},
+ "lttng-ust": {
+ "label": "lttng-ust",
+ "test": {
+ "include": "lttng/ust-events.h",
+ "main": "lttng_session_destroy(nullptr);"
+ },
+ "sources": [
+ { "type": "pkgConfig", "args": "lttng-ust" },
+ "-llttng-ust"
+ ],
+ "use": "libdl"
+ },
"pcre2": {
"label": "PCRE2",
"test": {
@@ -858,6 +871,22 @@
"section": "Utilities",
"output": [ "publicFeature" ]
},
+ "lttng": {
+ "label": "LTTNG",
+ "autoDetect": false,
+ "enable": "input.trace == 'lttng' || (input.trace =='yes' && config.linux)",
+ "disable": "input.trace == 'etw' || input.trace =='no'",
+ "condition": "config.linux && libs.lttng-ust",
+ "output": [ "privateFeature" ]
+ },
+ "etw": {
+ "label": "ETW",
+ "autoDetect": false,
+ "enable": "input.trace == 'etw' || (input.trace == 'yes' && config.win32)",
+ "disable": "input.trace == 'lttng' || input.trace == 'no'",
+ "condition": "config.win32",
+ "output": [ "privateFeature" ]
+ },
"topleveldomain": {
"label": "QUrl::topLevelDomain()",
"purpose": "Provides support for extracting the top level domain from URLs.
@@ -908,6 +937,11 @@ Please apply the patch corresponding to your Standard Library vendor, found in
"iconv",
"icu",
{
+ "message": "Tracing backend",
+ "type": "firstAvailableFeature",
+ "args": "etw lttng"
+ },
+ {
"section": "Logging backends",
"entries": [
"journald", "syslog", "slog2"
diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro
index ce3d4280ab..3db2e2ceb8 100644
--- a/src/corelib/corelib.pro
+++ b/src/corelib/corelib.pro
@@ -6,22 +6,22 @@ MODULE = core # not corelib, as per project file
MODULE_CONFIG = moc resources
!isEmpty(QT_NAMESPACE): MODULE_DEFINES = QT_NAMESPACE=$$QT_NAMESPACE
+TRACEPOINT_PROVIDER = $$PWD/qtcore.tracepoints
+CONFIG += qt_tracepoints
+
CONFIG += $$MODULE_CONFIG
DEFINES += $$MODULE_DEFINES
DEFINES += QT_NO_USING_NAMESPACE QT_NO_FOREACH
msvc:equals(QT_ARCH, i386): QMAKE_LFLAGS += /BASE:0x67000000
-irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
-CONFIG += optimize_full
+CONFIG += simd optimize_full
QMAKE_DOCS = $$PWD/doc/qtcore.qdocconf
-ANDROID_JAR_DEPENDENCIES = \
- jar/QtAndroid.jar
ANDROID_LIB_DEPENDENCIES = \
plugins/platforms/android/libqtforandroid.so
ANDROID_BUNDLED_JAR_DEPENDENCIES = \
- jar/QtAndroid-bundled.jar
+ jar/QtAndroid.jar
ANDROID_PERMISSIONS = \
android.permission.INTERNET \
android.permission.WRITE_EXTERNAL_STORAGE
@@ -38,19 +38,14 @@ include(thread/thread.pri)
include(tools/tools.pri)
include(io/io.pri)
include(itemmodels/itemmodels.pri)
-include(json/json.pri)
include(plugin/plugin.pri)
include(kernel/kernel.pri)
include(codecs/codecs.pri)
+include(serialization/serialization.pri)
include(statemachine/statemachine.pri)
include(mimetypes/mimetypes.pri)
-include(xml/xml.pri)
win32 {
- mingw {
- # otherwise mingw headers do not declare common functions like putenv
- CONFIG -= strict_c++
- }
LIBS_PRIVATE += -lws2_32
!winrt {
LIBS_PRIVATE += -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lwinmm
diff --git a/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp b/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp
index 8d4bd36beb..ceb3f8adf3 100644
--- a/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp
@@ -294,7 +294,7 @@ void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QS
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
- abort();
+ break;
}
}
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp
index 7d4d5f2a8d..aae2456bf1 100644
--- a/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qcoreapplication.cpp
@@ -56,7 +56,7 @@ QApplication::sendEvent(mainWindow, &event);
//! [1]
QPushButton *quitButton = new QPushButton("Quit");
-connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()));
+connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()), Qt::QueuedConnection);
//! [1]
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 0f8935d4b5..2b4fd6d661 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -39,6 +39,27 @@ SOURCES += \
global/qrandom.cpp \
global/qhooks.cpp
+# Only add global/qfloat16_f16c.c if qfloat16.cpp can't #include it.
+# Any compiler: if it is already generating F16C code, let qfloat16.cpp do it
+# Clang: ICE if not generating F16C code, so use qfloat16_f16c.c
+# ICC: miscompiles if not generating F16C code, so use qfloat16_f16c.c
+# GCC: if it can use F16C intrinsics, let qfloat16.cpp do it
+# MSVC: if it is already generating AVX code, let qfloat16.cpp do it
+# MSVC: otherwise, it generates poorly-performing code, so use qfloat16_f16c.c
+contains(QT_CPU_FEATURES.$$QT_ARCH, f16c): \
+ f16c_cxx = true
+else: clang|intel_icl|intel_icc: \
+ f16c_cxx = false
+else: gcc:f16c:x86SimdAlways: \
+ f16c_cxx = true
+else: msvc:contains(QT_CPU_FEATURES.$$QT_ARCH, avx): \
+ f16c_cxx = true
+else: \
+ f16c_cxx = false
+$$f16c_cxx: DEFINES += QFLOAT16_INCLUDE_FAST
+else: F16C_SOURCES += global/qfloat16_f16c.c
+unset(f16c_cxx)
+
VERSIONTAGGING_SOURCES = global/qversiontagging.cpp
darwin: SOURCES += global/qoperatingsystemversion_darwin.mm
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index 231ac2c9b0..f3f3139d1a 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -89,9 +89,6 @@
# define Q_CC_MSVC (_MSC_VER)
# define Q_CC_MSVC_NET
# define Q_OUTOFLINE_TEMPLATE inline
-# if _MSC_VER < 1600
-# define Q_NO_TEMPLATE_FRIENDS
-# endif
# define Q_COMPILER_MANGLES_RETURN_TYPE
# define Q_FUNC_INFO __FUNCSIG__
# define Q_ALIGNOF(type) __alignof(type)
@@ -105,12 +102,8 @@
# endif
# define Q_DECL_EXPORT __declspec(dllexport)
# define Q_DECL_IMPORT __declspec(dllimport)
-# if _MSC_VER >= 1800
-# define QT_MAKE_UNCHECKED_ARRAY_ITERATOR(x) stdext::make_unchecked_array_iterator(x)
-# endif
-# if _MSC_VER >= 1500
-# define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) stdext::make_checked_array_iterator(x, size_t(N))
-# endif
+# define QT_MAKE_UNCHECKED_ARRAY_ITERATOR(x) stdext::make_unchecked_array_iterator(x) // Since _MSC_VER >= 1800
+# define QT_MAKE_CHECKED_ARRAY_ITERATOR(x, N) stdext::make_checked_array_iterator(x, size_t(N)) // Since _MSC_VER >= 1500
/* Intel C++ disguising as Visual C++: the `using' keyword avoids warnings */
# if defined(__INTEL_COMPILER)
# define Q_DECL_VARIABLE_DEPRECATED
@@ -243,6 +236,7 @@
# define Q_REQUIRED_RESULT __attribute__ ((__warn_unused_result__))
# define Q_DECL_PURE_FUNCTION __attribute__((pure))
# define Q_DECL_CONST_FUNCTION __attribute__((const))
+# define Q_DECL_COLD_FUNCTION __attribute__((cold))
# if !defined(QT_MOC_CPP)
# define Q_PACKED __attribute__ ((__packed__))
# ifndef __ARM_EABI__
@@ -563,7 +557,7 @@
*/
#ifdef __cplusplus
-# if __cplusplus < 201103L && !(defined(Q_CC_MSVC) && Q_CC_MSVC >= 1800)
+# if __cplusplus < 201103L && !defined(Q_CC_MSVC)
# error Qt requires a C++11 compiler and yours does not seem to be that.
# endif
#endif
@@ -635,21 +629,11 @@
# define Q_COMPILER_THREAD_LOCAL
# define Q_COMPILER_UDL
# endif
-# ifdef _MSC_VER
-# if _MSC_VER == 1700
-// <initializer_list> is missing with MSVC 2012 (it's present in 2010, 2013 and up)
-# undef Q_COMPILER_INITIALIZER_LISTS
-# endif
-# if _MSC_VER < 1900
-// ICC disables unicode string support when compatibility mode with MSVC 2013 or lower is active
-# undef Q_COMPILER_UNICODE_STRINGS
-// Even though ICC knows about ref-qualified members, MSVC 2013 or lower doesn't, so
-// certain member functions (like QString::toUpper) may be missing from the DLLs.
-# undef Q_COMPILER_REF_QUALIFIERS
-// Disable constexpr unless the MS headers have constexpr in all the right places too
-// (like std::numeric_limits<T>::max())
-# undef Q_COMPILER_CONSTEXPR
-# endif
+# elif defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L s
+// C11 features supported. Only tested with ICC 17 and up.
+# define Q_COMPILER_STATIC_ASSERT
+# if __has_include(<threads.h>)
+# define Q_COMPILER_THREAD_LOCAL
# endif
# endif
#endif
@@ -803,6 +787,17 @@
# endif
# endif
+# if defined(__STDC_VERSION__)
+# if __has_feature(c_static_assert)
+# define Q_COMPILER_STATIC_ASSERT
+# endif
+# if __has_feature(c_thread_local) && __has_include(<threads.h>)
+# if !defined(__FreeBSD__) /* FreeBSD clang fails on __cxa_thread_atexit */
+# define Q_COMPILER_THREAD_LOCAL
+# endif
+# endif
+# endif
+
# if defined(__has_warning)
# if __has_warning("-Wunused-private-field")
# define Q_DECL_UNUSED_MEMBER Q_DECL_UNUSED
@@ -898,15 +893,25 @@
# define Q_COMPILER_RETURN_TYPE_DEDUCTION
# endif
# endif
+# if defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L
+# if Q_CC_GNU >= 407
+ /* C11 features supported in GCC 4.7: */
+# define Q_COMPILER_STATIC_ASSERT
+# endif
+# if Q_CC_GNU >= 409
+ /* C11 features supported in GCC 4.9: */
+# if __has_include(<threads.h>)
+# define Q_COMPILER_THREAD_LOCAL
+# endif
+# endif
+# endif
#endif
#if defined(Q_CC_MSVC)
# if defined(__cplusplus)
-# if _MSC_VER >= 1400
/* C++11 features supported in VC8 = VC2005: */
# define Q_COMPILER_VARIADIC_MACROS
-# ifndef __cplusplus_cli
/* 2005 supports the override and final contextual keywords, in
the same positions as the C++11 variants, but 'final' is
called 'sealed' instead:
@@ -915,12 +920,7 @@
"virtual" keyword to be present too, so don't define for that.
So don't define Q_COMPILER_EXPLICIT_OVERRIDES (since it's not
the same as the C++11 version), but define the Q_DECL_* flags
- accordingly: */
-# define Q_DECL_OVERRIDE override
-# define Q_DECL_FINAL sealed
-# endif
-# endif
-# if _MSC_VER >= 1600
+ accordingly. */
/* C++11 features supported in VC10 = VC2010: */
# define Q_COMPILER_AUTO_FUNCTION
# define Q_COMPILER_AUTO_TYPE
@@ -930,57 +930,31 @@
# define Q_COMPILER_NULLPTR
# define Q_COMPILER_RVALUE_REFS
# define Q_COMPILER_STATIC_ASSERT
-// MSVC's library has std::initializer_list, but the compiler does not support the braces initialization
-//# define Q_COMPILER_INITIALIZER_LISTS
-//# define Q_COMPILER_UNIFORM_INIT
-# endif
-# if _MSC_VER >= 1700
/* C++11 features supported in VC11 = VC2012: */
-# undef Q_DECL_OVERRIDE /* undo 2005/2008 settings... */
-# undef Q_DECL_FINAL /* undo 2005/2008 settings... */
# define Q_COMPILER_EXPLICIT_OVERRIDES /* ...and use std C++11 now */
# define Q_COMPILER_CLASS_ENUM
# define Q_COMPILER_ATOMICS
-# endif /* VC 11 */
-# if _MSC_VER >= 1800
/* C++11 features in VC12 = VC2013 */
-/* Implemented, but can't be used on move special members */
-/* # define Q_COMPILER_DEFAULT_MEMBERS */
# define Q_COMPILER_DELETE_MEMBERS
# define Q_COMPILER_DELEGATING_CONSTRUCTORS
# define Q_COMPILER_EXPLICIT_CONVERSIONS
# define Q_COMPILER_NONSTATIC_MEMBER_INIT
-// implemented, but nested initialization fails (eg tst_qvector): http://connect.microsoft.com/VisualStudio/feedback/details/800364/initializer-list-calls-object-destructor-twice
-// #define Q_COMPILER_INITIALIZER_LISTS
-// implemented in principle, but has a bug that makes it unusable: http://connect.microsoft.com/VisualStudio/feedback/details/802058/c-11-unified-initialization-fails-with-c-style-arrays
-// #define Q_COMPILER_UNIFORM_INIT
# define Q_COMPILER_RAW_STRINGS
# define Q_COMPILER_TEMPLATE_ALIAS
# define Q_COMPILER_VARIADIC_TEMPLATES
-# endif /* VC 12 */
-# if _MSC_FULL_VER >= 180030324 // VC 12 SP 2 RC
-# define Q_COMPILER_INITIALIZER_LISTS
-# endif /* VC 12 SP 2 RC */
-# if _MSC_VER >= 1900
+# define Q_COMPILER_INITIALIZER_LISTS // VC 12 SP 2 RC
/* C++11 features in VC14 = VC2015 */
# define Q_COMPILER_DEFAULT_MEMBERS
# define Q_COMPILER_ALIGNAS
# define Q_COMPILER_ALIGNOF
-// Partial support, insufficient for Qt
-//# define Q_COMPILER_CONSTEXPR
# define Q_COMPILER_INHERITING_CONSTRUCTORS
# define Q_COMPILER_NOEXCEPT
# define Q_COMPILER_RANGE_FOR
# define Q_COMPILER_REF_QUALIFIERS
# define Q_COMPILER_THREAD_LOCAL
-// Broken, see QTBUG-47224 and https://connect.microsoft.com/VisualStudio/feedback/details/1549785
-//# define Q_COMPILER_THREADSAFE_STATICS
# define Q_COMPILER_UDL
# define Q_COMPILER_UNICODE_STRINGS
-// Uniform initialization is not working yet -- build errors with QUuid
-//# define Q_COMPILER_UNIFORM_INIT
# define Q_COMPILER_UNRESTRICTED_UNIONS
-# endif
# if _MSC_FULL_VER >= 190023419
# define Q_COMPILER_ATTRIBUTES
// Almost working, see https://connect.microsoft.com/VisualStudio/feedback/details/2011648
@@ -1246,6 +1220,9 @@
#ifndef Q_DECL_CONST_FUNCTION
# define Q_DECL_CONST_FUNCTION Q_DECL_PURE_FUNCTION
#endif
+#ifndef Q_DECL_COLD_FUNCTION
+# define Q_DECL_COLD_FUNCTION
+#endif
#ifndef QT_MAKE_UNCHECKED_ARRAY_ITERATOR
# define QT_MAKE_UNCHECKED_ARRAY_ITERATOR(x) (x)
#endif
@@ -1282,7 +1259,7 @@
# define QT_WARNING_DISABLE_CLANG(text)
# define QT_WARNING_DISABLE_GCC(text)
# define QT_WARNING_DISABLE_DEPRECATED QT_WARNING_DISABLE_INTEL(1478 1786)
-#elif defined(Q_CC_MSVC) && _MSC_VER >= 1500 && !defined(Q_CC_CLANG)
+#elif defined(Q_CC_MSVC) && !defined(Q_CC_CLANG)
# undef QT_DO_PRAGMA /* not needed */
# define QT_WARNING_PUSH __pragma(warning(push))
# define QT_WARNING_POP __pragma(warning(pop))
diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h
index dabb715607..86ef1a2613 100644
--- a/src/corelib/global/qconfig-bootstrapped.h
+++ b/src/corelib/global/qconfig-bootstrapped.h
@@ -78,6 +78,7 @@
#define QT_FEATURE_cxx11_random (QT_HAS_INCLUDE(<random>) ? 1 : -1)
#define QT_NO_DATASTREAM
#define QT_FEATURE_datetimeparser -1
+#define QT_FEATURE_etw -1
#define QT_FEATURE_getauxval (QT_HAS_INCLUDE(<sys/auxv.h>) ? 1 : -1)
#define QT_FEATURE_getentropy -1
#define QT_NO_GEOM_VARIANT
@@ -92,8 +93,10 @@
#else
# define QT_FEATURE_linkat -1
#endif
+#define QT_FEATURE_lttng -1
#define QT_NO_QOBJECT
#define QT_FEATURE_process -1
+#define QT_FEATURE_regularexpression -1
#define QT_FEATURE_renameat2 -1
#define QT_FEATURE_sharedmemory -1
#define QT_FEATURE_slog2 -1
diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h
index 3337829de0..a14fce23f8 100644
--- a/src/corelib/global/qendian.h
+++ b/src/corelib/global/qendian.h
@@ -272,7 +272,8 @@ public:
static Q_DECL_CONSTEXPR T fromSpecial(T source) { return qFromBigEndian(source); }
};
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
+template<typename T>
class QLEInteger {
public:
explicit Q_DECL_CONSTEXPR QLEInteger(T i);
@@ -292,6 +293,7 @@ public:
QLEInteger &operator ^=(T i);
};
+template<typename T>
class QBEInteger {
public:
explicit Q_DECL_CONSTEXPR QBEInteger(T i);
diff --git a/src/corelib/global/qendian.qdoc b/src/corelib/global/qendian.qdoc
index 2ccdea5979..65df25a205 100644
--- a/src/corelib/global/qendian.qdoc
+++ b/src/corelib/global/qendian.qdoc
@@ -34,8 +34,8 @@
*/
/*!
+ \fn template <typename T> T qFromUnaligned(const void *ptr)
\internal
- \fn T qFromUnaligned(const void *ptr)
\since 5.5
Loads a \c{T} from address \a ptr, which may be misaligned.
@@ -45,8 +45,8 @@
*/
/*!
+ \fn template <typename T> void qToUnaligned(const T t, void *ptr)
\internal
- \fn void qToUnaligned(T t, void *ptr)
\since 4.5
Stores \a t to address \a ptr, which may be misaligned.
@@ -57,7 +57,7 @@
/*!
- \fn T qFromBigEndian(const void *src)
+ \fn template <typename T> T qFromBigEndian(const void *src)
\since 4.3
\relates <QtEndian>
@@ -78,7 +78,7 @@
\sa qToLittleEndian()
*/
/*!
- \fn T qFromBigEndian(T src)
+ \fn template <typename T> T qFromBigEndian(T src)
\since 4.3
\relates <QtEndian>
\overload
@@ -90,7 +90,7 @@
unmodified.
*/
/*!
- \fn T qFromLittleEndian(const void *src)
+ \fn template <typename T> T qFromLittleEndian(const void *src)
\since 4.3
\relates <QtEndian>
@@ -111,7 +111,7 @@
\sa qToLittleEndian()
*/
/*!
- \fn T qFromLittleEndian(T src)
+ \fn template <typename T> T qFromLittleEndian(T src)
\since 4.3
\relates <QtEndian>
\overload
@@ -123,7 +123,7 @@
unmodified.
*/
/*!
- \fn void qToBigEndian(T src, void *dest)
+ \fn template <typename T> void qToBigEndian(T src, void *dest)
\since 4.3
\relates <QtEndian>
@@ -141,7 +141,7 @@
\sa qToLittleEndian()
*/
/*!
- \fn T qToBigEndian(T src)
+ \fn template <typename T> T qToBigEndian(T src)
\since 4.3
\relates <QtEndian>
\overload
@@ -153,7 +153,7 @@
unmodified.
*/
/*!
- \fn void qToLittleEndian(T src, void *dest)
+ \fn template <typename T> void qToLittleEndian(T src, void *dest)
\since 4.3
\relates <QtEndian>
@@ -171,7 +171,7 @@
\sa qToBigEndian()
*/
/*!
- \fn T qToLittleEndian(T src)
+ \fn template <typename T> T qToLittleEndian(T src)
\since 4.3
\relates <QtEndian>
\overload
@@ -203,100 +203,100 @@
an exact endian is needed.
*/
-/*! \fn QLEInteger::QLEInteger(T value)
+/*! \fn template <typename T> QLEInteger<T>::QLEInteger(T value)
Constructs a QLEInteger with the given \a value.
*/
-/*! \fn QLEInteger &QLEInteger::operator=(T value)
+/*! \fn template <typename T> QLEInteger &QLEInteger<T>::operator=(T i)
- Assigns \a value to this QLEInteger and returns a reference to
+ Assigns \a i to this QLEInteger and returns a reference to
this QLEInteger.
*/
/*!
- \fn QLEInteger::operator T() const
+ \fn template <typename T> QLEInteger<T>::operator T() const
Returns the value of this QLEInteger as a native integer.
*/
/*!
- \fn bool QLEInteger::operator==(QLEInteger other) const
+ \fn template <typename T> bool QLEInteger<T>::operator==(QLEInteger other) const
Returns \c true if the value of this QLEInteger is equal to the value of \a other.
*/
/*!
- \fn bool QLEInteger::operator!=(QLEInteger other) const
+ \fn template <typename T> bool QLEInteger<T>::operator!=(QLEInteger other) const
Returns \c true if the value of this QLEInteger is not equal to the value of \a other.
*/
/*!
- \fn QLEInteger &QLEInteger::operator+=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator+=(T i)
Adds \a i to this QLEInteger and returns a reference to
this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator-=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator-=(T i)
Subtracts \a i from this QLEInteger and returns a reference to
this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator*=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator*=(T i)
Multiplies \a i with this QLEInteger and returns a reference to
this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator/=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator/=(T i)
Divides this QLEInteger with \a i and returns a reference to
this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator%=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator%=(T i)
Sets this QLEInteger to the remainder of a division by \a i and
returns a reference to this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator>>=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator>>=(T i)
Performs a left-shift by \a i on this QLEInteger and returns a
reference to this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator<<=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator<<=(T i)
Performs a right-shift by \a i on this QLEInteger and returns a
reference to this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator|=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator|=(T i)
Performs a bitwise OR with \a i onto this QLEInteger and returns a reference to
this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator&=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator&=(T i)
Performs a bitwise AND with \a i onto this QLEInteger and returns a reference to
this object.
*/
/*!
- \fn QLEInteger &QLEInteger::operator^=(T i)
+ \fn template <typename T> QLEInteger &QLEInteger<T>::operator^=(T i)
Performs a bitwise XOR with \a i onto this QLEInteger and returns a reference to
this object.
@@ -322,100 +322,100 @@
an exact endian is needed.
*/
-/*! \fn QBEInteger::QBEInteger(T value)
+/*! \fn template <typename T> QBEInteger<T>::QBEInteger(T value)
Constructs a QBEInteger with the given \a value.
*/
-/*! \fn QBEInteger &QBEInteger::operator=(T value)
+/*! \fn template <typename T> QBEInteger &QBEInteger<T>::operator=(T i)
- Assigns \a value to this QBEInteger and returns a reference to
+ Assigns \a i to this QBEInteger and returns a reference to
this QBEInteger.
*/
/*!
- \fn QBEInteger::operator T() const
+ \fn template <typename T> QBEInteger<T>::operator T() const
Returns the value of this QBEInteger as a native integer.
*/
/*!
- \fn bool QBEInteger::operator==(QBEInteger other) const
+ \fn template <typename T> bool QBEInteger<T>::operator==(QBEInteger other) const
Returns \c true if the value of this QBEInteger is equal to the value of \a other.
*/
/*!
- \fn bool QBEInteger::operator!=(QBEInteger other) const
+ \fn template <typename T> bool QBEInteger<T>::operator!=(QBEInteger other) const
Returns \c true if the value of this QBEInteger is not equal to the value of \a other.
*/
/*!
- \fn QBEInteger &QBEInteger::operator+=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator+=(T i)
Adds \a i to this QBEInteger and returns a reference to
this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator-=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator-=(T i)
Subtracts \a i from this QBEInteger and returns a reference to
this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator*=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator*=(T i)
Multiplies \a i with this QBEInteger and returns a reference to
this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator/=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator/=(T i)
Divides this QBEInteger with \a i and returns a reference to
this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator%=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator%=(T i)
Sets this QBEInteger to the remainder of a division by \a i and
returns a reference to this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator>>=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator>>=(T i)
Performs a left-shift by \a i on this QBEInteger and returns a
reference to this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator<<=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator<<=(T i)
Performs a right-shift by \a i on this QBEInteger and returns a
reference to this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator|=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator|=(T i)
Performs a bitwise OR with \a i onto this QBEInteger and returns a reference to
this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator&=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator&=(T i)
Performs a bitwise AND with \a i onto this QBEInteger and returns a reference to
this object.
*/
/*!
- \fn QBEInteger &QBEInteger::operator^=(T i)
+ \fn template <typename T> QBEInteger &QBEInteger<T>::operator^=(T i)
Performs a bitwise XOR with \a i onto this QBEInteger and returns a reference to
this object.
diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h
index 72b0a689ff..e9fee5f23e 100644
--- a/src/corelib/global/qflags.h
+++ b/src/corelib/global/qflags.h
@@ -54,20 +54,20 @@ class QFlag
{
int i;
public:
- Q_DECL_CONSTEXPR inline QFlag(int ai) Q_DECL_NOTHROW : i(ai) {}
+ Q_DECL_CONSTEXPR inline QFlag(int value) Q_DECL_NOTHROW : i(value) {}
Q_DECL_CONSTEXPR inline operator int() const Q_DECL_NOTHROW { return i; }
#if !defined(Q_CC_MSVC)
// Microsoft Visual Studio has buggy behavior when it comes to
// unsigned enums: even if the enum is unsigned, the enum tags are
// always signed
-# if !defined(__LP64__) && !defined(Q_QDOC)
- Q_DECL_CONSTEXPR inline QFlag(long ai) Q_DECL_NOTHROW : i(int(ai)) {}
- Q_DECL_CONSTEXPR inline QFlag(ulong ai) Q_DECL_NOTHROW : i(int(long(ai))) {}
+# if !defined(__LP64__) && !defined(Q_CLANG_QDOC)
+ Q_DECL_CONSTEXPR inline QFlag(long value) Q_DECL_NOTHROW : i(int(value)) {}
+ Q_DECL_CONSTEXPR inline QFlag(ulong value) Q_DECL_NOTHROW : i(int(long(value))) {}
# endif
- Q_DECL_CONSTEXPR inline QFlag(uint ai) Q_DECL_NOTHROW : i(int(ai)) {}
- Q_DECL_CONSTEXPR inline QFlag(short ai) Q_DECL_NOTHROW : i(int(ai)) {}
- Q_DECL_CONSTEXPR inline QFlag(ushort ai) Q_DECL_NOTHROW : i(int(uint(ai))) {}
+ Q_DECL_CONSTEXPR inline QFlag(uint value) Q_DECL_NOTHROW : i(int(value)) {}
+ Q_DECL_CONSTEXPR inline QFlag(short value) Q_DECL_NOTHROW : i(int(value)) {}
+ Q_DECL_CONSTEXPR inline QFlag(ushort value) Q_DECL_NOTHROW : i(int(uint(value))) {}
Q_DECL_CONSTEXPR inline operator uint() const Q_DECL_NOTHROW { return uint(i); }
#endif
};
@@ -82,7 +82,7 @@ public:
};
Q_DECLARE_TYPEINFO(QIncompatibleFlag, Q_PRIMITIVE_TYPE);
-Q_DECL_CONSTEXPR inline QIncompatibleFlag::QIncompatibleFlag(int ai) Q_DECL_NOTHROW : i(ai) {}
+Q_DECL_CONSTEXPR inline QIncompatibleFlag::QIncompatibleFlag(int value) Q_DECL_NOTHROW : i(value) {}
#ifndef Q_NO_TYPESAFE_FLAGS
@@ -100,7 +100,7 @@ class QFlags
template <typename E> friend QDataStream &operator>>(QDataStream &, QFlags<E> &);
template <typename E> friend QDataStream &operator<<(QDataStream &, QFlags<E>);
public:
-#if defined(Q_CC_MSVC) || defined(Q_QDOC)
+#if defined(Q_CC_MSVC) || defined(Q_CLANG_QDOC)
// see above for MSVC
// the definition below is too complex for qdoc
typedef int Int;
@@ -113,13 +113,13 @@ public:
#endif
typedef Enum enum_type;
// compiler-generated copy/move ctor/assignment operators are fine!
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
Q_DECL_CONSTEXPR inline QFlags(const QFlags &other);
Q_DECL_CONSTEXPR inline QFlags &operator=(const QFlags &other);
#endif
- Q_DECL_CONSTEXPR inline QFlags(Enum f) Q_DECL_NOTHROW : i(Int(f)) {}
+ Q_DECL_CONSTEXPR inline QFlags(Enum flags) Q_DECL_NOTHROW : i(Int(flags)) {}
Q_DECL_CONSTEXPR inline QFlags(Zero = Q_NULLPTR) Q_DECL_NOTHROW : i(0) {}
- Q_DECL_CONSTEXPR inline QFlags(QFlag f) Q_DECL_NOTHROW : i(f) {}
+ Q_DECL_CONSTEXPR inline QFlags(QFlag flag) Q_DECL_NOTHROW : i(flag) {}
#ifdef Q_COMPILER_INITIALIZER_LISTS
Q_DECL_CONSTEXPR inline QFlags(std::initializer_list<Enum> flags) Q_DECL_NOTHROW
@@ -129,28 +129,28 @@ public:
Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator&=(int mask) Q_DECL_NOTHROW { i &= mask; return *this; }
Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator&=(uint mask) Q_DECL_NOTHROW { i &= mask; return *this; }
Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator&=(Enum mask) Q_DECL_NOTHROW { i &= Int(mask); return *this; }
- Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator|=(QFlags f) Q_DECL_NOTHROW { i |= f.i; return *this; }
- Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator|=(Enum f) Q_DECL_NOTHROW { i |= Int(f); return *this; }
- Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator^=(QFlags f) Q_DECL_NOTHROW { i ^= f.i; return *this; }
- Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator^=(Enum f) Q_DECL_NOTHROW { i ^= Int(f); return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator|=(QFlags other) Q_DECL_NOTHROW { i |= other.i; return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator|=(Enum other) Q_DECL_NOTHROW { i |= Int(other); return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator^=(QFlags other) Q_DECL_NOTHROW { i ^= other.i; return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator^=(Enum other) Q_DECL_NOTHROW { i ^= Int(other); return *this; }
Q_DECL_CONSTEXPR inline operator Int() const Q_DECL_NOTHROW { return i; }
- Q_DECL_CONSTEXPR inline QFlags operator|(QFlags f) const Q_DECL_NOTHROW { return QFlags(QFlag(i | f.i)); }
- Q_DECL_CONSTEXPR inline QFlags operator|(Enum f) const Q_DECL_NOTHROW { return QFlags(QFlag(i | Int(f))); }
- Q_DECL_CONSTEXPR inline QFlags operator^(QFlags f) const Q_DECL_NOTHROW { return QFlags(QFlag(i ^ f.i)); }
- Q_DECL_CONSTEXPR inline QFlags operator^(Enum f) const Q_DECL_NOTHROW { return QFlags(QFlag(i ^ Int(f))); }
+ Q_DECL_CONSTEXPR inline QFlags operator|(QFlags other) const Q_DECL_NOTHROW { return QFlags(QFlag(i | other.i)); }
+ Q_DECL_CONSTEXPR inline QFlags operator|(Enum other) const Q_DECL_NOTHROW { return QFlags(QFlag(i | Int(other))); }
+ Q_DECL_CONSTEXPR inline QFlags operator^(QFlags other) const Q_DECL_NOTHROW { return QFlags(QFlag(i ^ other.i)); }
+ Q_DECL_CONSTEXPR inline QFlags operator^(Enum other) const Q_DECL_NOTHROW { return QFlags(QFlag(i ^ Int(other))); }
Q_DECL_CONSTEXPR inline QFlags operator&(int mask) const Q_DECL_NOTHROW { return QFlags(QFlag(i & mask)); }
Q_DECL_CONSTEXPR inline QFlags operator&(uint mask) const Q_DECL_NOTHROW { return QFlags(QFlag(i & mask)); }
- Q_DECL_CONSTEXPR inline QFlags operator&(Enum f) const Q_DECL_NOTHROW { return QFlags(QFlag(i & Int(f))); }
+ Q_DECL_CONSTEXPR inline QFlags operator&(Enum other) const Q_DECL_NOTHROW { return QFlags(QFlag(i & Int(other))); }
Q_DECL_CONSTEXPR inline QFlags operator~() const Q_DECL_NOTHROW { return QFlags(QFlag(~i)); }
Q_DECL_CONSTEXPR inline bool operator!() const Q_DECL_NOTHROW { return !i; }
- Q_DECL_CONSTEXPR inline bool testFlag(Enum f) const Q_DECL_NOTHROW { return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f) ); }
- Q_DECL_RELAXED_CONSTEXPR inline QFlags &setFlag(Enum f, bool on = true) Q_DECL_NOTHROW
+ Q_DECL_CONSTEXPR inline bool testFlag(Enum flag) const Q_DECL_NOTHROW { return (i & Int(flag)) == Int(flag) && (Int(flag) != 0 || i == Int(flag) ); }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &setFlag(Enum flag, bool on = true) Q_DECL_NOTHROW
{
- return on ? (*this |= f) : (*this &= ~Int(f));
+ return on ? (*this |= flag) : (*this &= ~Int(flag));
}
private:
diff --git a/src/corelib/global/qfloat16.cpp b/src/corelib/global/qfloat16.cpp
index 89edfc8787..fd608efe55 100644
--- a/src/corelib/global/qfloat16.cpp
+++ b/src/corelib/global/qfloat16.cpp
@@ -38,6 +38,7 @@
****************************************************************************/
#include "qfloat16_p.h"
+#include "private/qsimd_p.h"
QT_BEGIN_NAMESPACE
@@ -113,4 +114,102 @@ Q_REQUIRED_RESULT bool qIsFinite(qfloat16 f) Q_DECL_NOTHROW { return qt_is_finit
exactness is stronger the smaller the numbers are.
*/
+#if QT_COMPILER_SUPPORTS(F16C)
+static inline bool hasFastF16()
+{
+ // All processors with F16C also support AVX, but YMM registers
+ // might not be supported by the OS, or they might be disabled.
+ return qCpuHasFeature(F16C) && qCpuHasFeature(AVX);
+}
+
+extern "C" {
+#ifdef QFLOAT16_INCLUDE_FAST
+# define f16cextern static
+#else
+# define f16cextern extern
+#endif
+
+f16cextern void qFloatToFloat16_fast(quint16 *out, const float *in, qsizetype len) Q_DECL_NOTHROW;
+f16cextern void qFloatFromFloat16_fast(float *out, const quint16 *in, qsizetype len) Q_DECL_NOTHROW;
+
+#undef f16cextern
+}
+
+#elif defined(__ARM_FP16_FORMAT_IEEE) && defined(__ARM_NEON__)
+static inline bool hasFastF16()
+{
+ return true;
+}
+
+static void qFloatToFloat16_fast(quint16 *out, const float *in, qsizetype len) Q_DECL_NOTHROW
+{
+ __fp16 *out_f16 = reinterpret_cast<__fp16 *>(out);
+ qsizetype i = 0;
+ for (; i < len - 3; i += 4)
+ vst1_f16(out_f16 + i, vcvt_f16_f32(vld1q_f32(in + i)));
+ SIMD_EPILOGUE(i, len, 3)
+ out_f16[i] = __fp16(in[i]);
+}
+
+static void qFloatFromFloat16_fast(float *out, const quint16 *in, qsizetype len) Q_DECL_NOTHROW
+{
+ const __fp16 *in_f16 = reinterpret_cast<const __fp16 *>(in);
+ qsizetype i = 0;
+ for (; i < len - 3; i += 4)
+ vst1q_f32(out + i, vcvt_f32_f16(vld1_f16(in_f16 + i)));
+ SIMD_EPILOGUE(i, len, 3)
+ out[i] = float(in_f16[i]);
+}
+#else
+static inline bool hasFastF16()
+{
+ return false;
+}
+
+static void qFloatToFloat16_fast(quint16 *, const float *, qsizetype) Q_DECL_NOTHROW
+{
+ Q_UNREACHABLE();
+}
+
+static void qFloatFromFloat16_fast(float *, const quint16 *, qsizetype) Q_DECL_NOTHROW
+{
+ Q_UNREACHABLE();
+}
+#endif
+/*!
+ \since 5.11
+ \relates <QFloat16>
+
+ Converts \a len floats from \a in to qfloat16 and stores them in \a out.
+ Both \a in and \a out must have \a len allocated entries.
+*/
+Q_CORE_EXPORT void qFloatToFloat16(qfloat16 *out, const float *in, qsizetype len) Q_DECL_NOTHROW
+{
+ if (hasFastF16())
+ return qFloatToFloat16_fast(reinterpret_cast<quint16 *>(out), in, len);
+
+ for (qsizetype i = 0; i < len; ++i)
+ out[i] = qfloat16(in[i]);
+}
+
+/*!
+ \since 5.11
+ \relates <QFloat16>
+
+ Converts \a len qfloat16 from \a in to floats and stores them in \a out.
+ Both \a in and \a out must have \a len allocated entries.
+*/
+Q_CORE_EXPORT void qFloatFromFloat16(float *out, const qfloat16 *in, qsizetype len) Q_DECL_NOTHROW
+{
+ if (hasFastF16())
+ return qFloatFromFloat16_fast(out, reinterpret_cast<const quint16 *>(in), len);
+
+ for (qsizetype i = 0; i < len; ++i)
+ out[i] = float(in[i]);
+}
+
QT_END_NAMESPACE
+
+#ifdef QFLOAT16_INCLUDE_FAST
+# include "qfloat16_f16c.c"
+#endif
diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h
index 72e28edf63..a8befd7adb 100644
--- a/src/corelib/global/qfloat16.h
+++ b/src/corelib/global/qfloat16.h
@@ -88,6 +88,9 @@ private:
Q_DECLARE_TYPEINFO(qfloat16, Q_PRIMITIVE_TYPE);
+Q_CORE_EXPORT void qFloatToFloat16(qfloat16 *, const float *, qsizetype length) Q_DECL_NOTHROW;
+Q_CORE_EXPORT void qFloatFromFloat16(float *, const qfloat16 *, qsizetype length) Q_DECL_NOTHROW;
+
Q_REQUIRED_RESULT Q_CORE_EXPORT bool qIsInf(qfloat16 f) Q_DECL_NOTHROW; // complements qnumeric.h
Q_REQUIRED_RESULT Q_CORE_EXPORT bool qIsNaN(qfloat16 f) Q_DECL_NOTHROW; // complements qnumeric.h
Q_REQUIRED_RESULT Q_CORE_EXPORT bool qIsFinite(qfloat16 f) Q_DECL_NOTHROW; // complements qnumeric.h
diff --git a/src/corelib/global/qfloat16_f16c.c b/src/corelib/global/qfloat16_f16c.c
new file mode 100644
index 0000000000..a7eadc71b7
--- /dev/null
+++ b/src/corelib/global/qfloat16_f16c.c
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qsimd_p.h"
+
+// The x86 F16C instructions operate on AVX registers, so AVX support is
+// required. We don't need to check for __F16C__ because we this file wouldn't
+// have been compiled if the support was missing in the first place, and not
+// all compilers define it. Technically, we didn't need to check for __AVX__
+// either.
+#if !QT_COMPILER_SUPPORTS_HERE(AVX)
+# error "AVX support required"
+#endif
+
+#ifdef __cplusplus
+QT_BEGIN_NAMESPACE
+extern "C" {
+#endif
+
+QT_FUNCTION_TARGET(F16C)
+void qFloatToFloat16_fast(quint16 *out, const float *in, qsizetype len) Q_DECL_NOTHROW
+{
+ qsizetype i = 0;
+ int epilog_i;
+ for (; i < len - 7; i += 8)
+ _mm_storeu_si128((__m128i *)(out + i), _mm256_cvtps_ph(_mm256_loadu_ps(in + i), 0));
+ if (i < len - 3) {
+ _mm_storel_epi64((__m128i *)(out + i), _mm_cvtps_ph(_mm_loadu_ps(in + i), 0));
+ i += 4;
+ }
+ // Inlining "qfloat16::qfloat16(float f)":
+ for (epilog_i = 0; i < len && epilog_i < 3; ++i, ++epilog_i)
+ out[i] = _mm_extract_epi16(_mm_cvtps_ph(_mm_set_ss(in[i]), 0), 0);
+}
+
+QT_FUNCTION_TARGET(F16C)
+void qFloatFromFloat16_fast(float *out, const quint16 *in, qsizetype len) Q_DECL_NOTHROW
+{
+ qsizetype i = 0;
+ int epilog_i;
+ for (; i < len - 7; i += 8)
+ _mm256_storeu_ps(out + i, _mm256_cvtph_ps(_mm_loadu_si128((const __m128i *)(in + i))));
+ if (i < len - 3) {
+ _mm_storeu_ps(out + i, _mm_cvtph_ps(_mm_loadl_epi64((const __m128i *)(in + i))));
+ i += 4;
+ }
+ // Inlining "qfloat16::operator float()":
+ for (epilog_i = 0; i < len && epilog_i < 3; ++i, ++epilog_i)
+ out[i] = _mm_cvtss_f32(_mm_cvtph_ps(_mm_cvtsi32_si128(in[i])));
+}
+
+#ifdef __cplusplus
+} // extern "C"
+QT_END_NAMESPACE
+#endif
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 87b79531ed..2d8b860c5b 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2017 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -76,6 +76,10 @@
#include <Ws2tcpip.h>
#endif // Q_OS_WINRT
+#ifdef Q_OS_WIN
+# include <qt_windows.h>
+#endif
+
#if defined(Q_OS_VXWORKS) && defined(_WRS_KERNEL)
# include <envLib.h>
#endif
@@ -181,28 +185,28 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
/*!
\fn QFlag::QFlag(int value)
- Constructs a QFlag object that stores the given \a value.
+ Constructs a QFlag object that stores the \a value.
*/
/*!
\fn QFlag::QFlag(uint value)
\since 5.3
- Constructs a QFlag object that stores the given \a value.
+ Constructs a QFlag object that stores the \a value.
*/
/*!
\fn QFlag::QFlag(short value)
\since 5.3
- Constructs a QFlag object that stores the given \a value.
+ Constructs a QFlag object that stores the \a value.
*/
/*!
\fn QFlag::QFlag(ushort value)
\since 5.3
- Constructs a QFlag object that stores the given \a value.
+ Constructs a QFlag object that stores the \a value.
*/
/*!
@@ -297,29 +301,28 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags::QFlags(const QFlags &other)
+ \fn template<typename Enum> QFlags<Enum>::QFlags(const QFlags &other)
Constructs a copy of \a other.
*/
/*!
- \fn QFlags::QFlags(Enum flag)
+ \fn template <typename Enum> QFlags<Enum>::QFlags(Enum flags)
- Constructs a QFlags object storing the given \a flag.
+ Constructs a QFlags object storing the \a flags.
*/
/*!
- \fn QFlags::QFlags(Zero zero)
+ \fn template <typename Enum> QFlags<Enum>::QFlags(Zero)
- Constructs a QFlags object with no flags set. \a zero must be a
+ Constructs a QFlags object with no flags set. The parameter must be a
literal 0 value.
*/
/*!
- \fn QFlags::QFlags(QFlag value)
+ \fn template <typename Enum> QFlags<Enum>::QFlags(QFlag flag)
- Constructs a QFlags object initialized with the given integer \a
- value.
+ Constructs a QFlags object initialized with the integer \a flag.
The QFlag type is a helper type. By using it here instead of \c
int, we effectively ensure that arbitrary enum values cannot be
@@ -328,7 +331,7 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags::QFlags(std::initializer_list<Enum> flags)
+ \fn template <typename Enum> QFlags<Enum>::QFlags(std::initializer_list<Enum> flags)
\since 5.4
Constructs a QFlags object initialized with all \a flags
@@ -338,14 +341,14 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags &QFlags::operator=(const QFlags &other)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator=(const QFlags &other)
Assigns \a other to this object and returns a reference to this
object.
*/
/*!
- \fn QFlags &QFlags::operator&=(int mask)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(int mask)
Performs a bitwise AND operation with \a mask and stores the
result in this QFlags object. Returns a reference to this object.
@@ -354,19 +357,19 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags &QFlags::operator&=(uint mask)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(uint mask)
\overload
*/
/*!
- \fn QFlags &QFlags::operator&=(Enum mask)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(Enum mask)
\overload
*/
/*!
- \fn QFlags &QFlags::operator|=(QFlags other)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator|=(QFlags other)
Performs a bitwise OR operation with \a other and stores the
result in this QFlags object. Returns a reference to this object.
@@ -375,13 +378,13 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags &QFlags::operator|=(Enum other)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator|=(Enum other)
\overload
*/
/*!
- \fn QFlags &QFlags::operator^=(QFlags other)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator^=(QFlags other)
Performs a bitwise XOR operation with \a other and stores the
result in this QFlags object. Returns a reference to this object.
@@ -390,13 +393,13 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags &QFlags::operator^=(Enum other)
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator^=(Enum other)
\overload
*/
/*!
- \fn QFlags::operator Int() const
+ \fn template <typename Enum> QFlags<Enum>::operator Int() const
Returns the value stored in the QFlags object as an integer.
@@ -404,7 +407,7 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags QFlags::operator|(QFlags other) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator|(QFlags other) const
Returns a QFlags object containing the result of the bitwise OR
operation on this object and \a other.
@@ -413,13 +416,13 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags QFlags::operator|(Enum other) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator|(Enum other) const
\overload
*/
/*!
- \fn QFlags QFlags::operator^(QFlags other) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator^(QFlags other) const
Returns a QFlags object containing the result of the bitwise XOR
operation on this object and \a other.
@@ -428,13 +431,13 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags QFlags::operator^(Enum other) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator^(Enum other) const
\overload
*/
/*!
- \fn QFlags QFlags::operator&(int mask) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(int mask) const
Returns a QFlags object containing the result of the bitwise AND
operation on this object and \a mask.
@@ -443,19 +446,19 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn QFlags QFlags::operator&(uint mask) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(uint mask) const
\overload
*/
/*!
- \fn QFlags QFlags::operator&(Enum mask) const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(Enum mask) const
\overload
*/
/*!
- \fn QFlags QFlags::operator~() const
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator~() const
Returns a QFlags object that contains the bitwise negation of
this object.
@@ -464,24 +467,24 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
*/
/*!
- \fn bool QFlags::operator!() const
+ \fn template <typename Enum> bool QFlags<Enum>::operator!() const
Returns \c true if no flag is set (i.e., if the value stored by the
QFlags object is 0); otherwise returns \c false.
*/
/*!
- \fn bool QFlags::testFlag(Enum flag) const
+ \fn template <typename Enum> bool QFlags<Enum>::testFlag(Enum flag) const
\since 4.2
- Returns \c true if the \a flag is set, otherwise \c false.
+ Returns \c true if the flag \a flag is set, otherwise \c false.
*/
/*!
- \fn QFlags QFlags::setFlag(Enum flag, bool on)
+ \fn template <typename Enum> QFlags QFlags<Enum>::setFlag(Enum flag, bool on)
\since 5.7
- Sets the indicated \a flag if \a on is \c true or unsets it if
+ Sets the flag \a flag if \a on is \c true or unsets it if
\a on is \c false. Returns a reference to this object.
*/
@@ -919,11 +922,11 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\sa quint64, qlonglong
*/
-/*! \fn T qAbs(const T &value)
+/*! \fn template <typename T> T qAbs(const T &t)
\relates <QtGlobal>
- Compares \a value to the 0 of type T and returns the absolute
- value. Thus if T is \e {double}, then \a value is compared to
+ Compares \a t to the 0 of type T and returns the absolute
+ value. Thus if T is \e {double}, then \a t is compared to
\e{(double) 0}.
Example:
@@ -931,50 +934,50 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\snippet code/src_corelib_global_qglobal.cpp 10
*/
-/*! \fn int qRound(double value)
+/*! \fn int qRound(double d)
\relates <QtGlobal>
- Rounds \a value to the nearest integer.
+ Rounds \a d to the nearest integer.
Example:
\snippet code/src_corelib_global_qglobal.cpp 11A
*/
-/*! \fn int qRound(float value)
+/*! \fn int qRound(float d)
\relates <QtGlobal>
- Rounds \a value to the nearest integer.
+ Rounds \a d to the nearest integer.
Example:
\snippet code/src_corelib_global_qglobal.cpp 11B
*/
-/*! \fn qint64 qRound64(double value)
+/*! \fn qint64 qRound64(double d)
\relates <QtGlobal>
- Rounds \a value to the nearest 64-bit integer.
+ Rounds \a d to the nearest 64-bit integer.
Example:
\snippet code/src_corelib_global_qglobal.cpp 12A
*/
-/*! \fn qint64 qRound64(float value)
+/*! \fn qint64 qRound64(float d)
\relates <QtGlobal>
- Rounds \a value to the nearest 64-bit integer.
+ Rounds \a d to the nearest 64-bit integer.
Example:
\snippet code/src_corelib_global_qglobal.cpp 12B
*/
-/*! \fn const T &qMin(const T &value1, const T &value2)
+/*! \fn template <typename T> const T &qMin(const T &a, const T &b)
\relates <QtGlobal>
- Returns the minimum of \a value1 and \a value2.
+ Returns the minimum of \a a and \a b.
Example:
@@ -983,10 +986,10 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\sa qMax(), qBound()
*/
-/*! \fn const T &qMax(const T &value1, const T &value2)
+/*! \fn template <typename T> const T &qMax(const T &a, const T &b)
\relates <QtGlobal>
- Returns the maximum of \a value1 and \a value2.
+ Returns the maximum of \a a and \a b.
Example:
@@ -995,11 +998,11 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\sa qMin(), qBound()
*/
-/*! \fn const T &qBound(const T &min, const T &value, const T &max)
+/*! \fn template <typename T> const T &qBound(const T &min, const T &val, const T &max)
\relates <QtGlobal>
- Returns \a value bounded by \a min and \a max. This is equivalent
- to qMax(\a min, qMin(\a value, \a max)).
+ Returns \a val bounded by \a min and \a max. This is equivalent
+ to qMax(\a min, qMin(\a val, \a max)).
Example:
@@ -1008,7 +1011,7 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\sa qMin(), qMax()
*/
-/*! \fn auto qOverload(T functionPointer)
+/*! \fn template <typename T> auto qOverload(T functionPointer)
\relates <QtGlobal>
\since 5.7
@@ -1030,7 +1033,7 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
and Functor-Based Connections}
*/
-/*! \fn auto qConstOverload(T memberFunctionPointer)
+/*! \fn template <typename T> auto qConstOverload(T memberFunctionPointer)
\relates <QtGlobal>
\since 5.7
@@ -1042,7 +1045,7 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
and Functor-Based Connections}
*/
-/*! \fn auto qNonConstOverload(T memberFunctionPointer)
+/*! \fn template <typename T> auto qNonConstOverload(T memberFunctionPointer)
\relates <QtGlobal>
\since 5.7
@@ -1431,13 +1434,6 @@ bool qSharedBuild() Q_DECL_NOTHROW
*/
/*!
- \macro Q_OS_ULTRIX
- \relates <QtGlobal>
-
- Defined on DEC Ultrix.
-*/
-
-/*!
\macro Q_OS_LINUX
\relates <QtGlobal>
@@ -1473,41 +1469,6 @@ bool qSharedBuild() Q_DECL_NOTHROW
*/
/*!
- \macro Q_OS_BSDI
- \relates <QtGlobal>
-
- Defined on BSD/OS.
-*/
-
-/*!
- \macro Q_OS_IRIX
- \relates <QtGlobal>
-
- Defined on SGI Irix.
-*/
-
-/*!
- \macro Q_OS_OSF
- \relates <QtGlobal>
-
- Defined on HP Tru64 UNIX.
-*/
-
-/*!
- \macro Q_OS_SCO
- \relates <QtGlobal>
-
- Defined on SCO OpenServer 5.
-*/
-
-/*!
- \macro Q_OS_UNIXWARE
- \relates <QtGlobal>
-
- Defined on UnixWare 7, Open UNIX 8.
-*/
-
-/*!
\macro Q_OS_AIX
\relates <QtGlobal>
@@ -1522,27 +1483,6 @@ bool qSharedBuild() Q_DECL_NOTHROW
*/
/*!
- \macro Q_OS_DGUX
- \relates <QtGlobal>
-
- Defined on DG/UX.
-*/
-
-/*!
- \macro Q_OS_RELIANT
- \relates <QtGlobal>
-
- Defined on Reliant UNIX.
-*/
-
-/*!
- \macro Q_OS_DYNIX
- \relates <QtGlobal>
-
- Defined on DYNIX/ptx.
-*/
-
-/*!
\macro Q_OS_QNX
\relates <QtGlobal>
@@ -2884,10 +2824,11 @@ QString QSysInfo::prettyProductName()
This function returns the same as QHostInfo::localHostName().
- \sa QHostInfo::localDomainName
+ \sa QHostInfo::localDomainName, machineUniqueId()
*/
QString QSysInfo::machineHostName()
{
+ // the hostname can change, so we can't cache it
#if defined(Q_OS_LINUX)
// gethostname(3) on Linux just calls uname(2), so do it ourselves
// and avoid a memcpy
@@ -2910,6 +2851,119 @@ QString QSysInfo::machineHostName()
}
#endif // QT_BOOTSTRAPPED
+enum {
+ UuidStringLen = sizeof("00000000-0000-0000-0000-000000000000") - 1
+};
+
+/*!
+ \since 5.10
+
+ Returns a unique ID for this machine, if one can be determined. If no
+ unique ID could be determined, this function returns an empty byte array.
+ Unlike machineHostName(), the value returned by this function is likely
+ globally unique.
+
+ A unique ID is useful in network operations to identify this machine for an
+ extended period of time, when the IP address could change or if this
+ machine could have more than one IP address. For example, the ID could be
+ used when communicating with a server or when storing device-specific data
+ in shared network storage.
+
+ Note that on some systems, this value will persist across reboots and on
+ some it will not. Applications should not blindly depend on this fact
+ without verifying the OS capabilities. In particular, on Linux systems,
+ this ID is usually permanent and it matches the D-Bus machine ID, except
+ for nodes without their own storage (replicated nodes).
+
+ \sa machineHostName(), bootUniqueId()
+*/
+QByteArray QSysInfo::machineUniqueId()
+{
+#ifdef Q_OS_BSD4
+ char uuid[UuidStringLen];
+ size_t uuidlen = sizeof(uuid);
+# ifdef KERN_HOSTUUID
+ int name[] = { CTL_KERN, KERN_HOSTUUID };
+ if (sysctl(name, sizeof name / sizeof name[0], &uuid, &uuidlen, nullptr, 0) == 0
+ && uuidlen == sizeof(uuid))
+ return QByteArray(uuid, uuidlen);
+
+# else
+ // Darwin: no fixed value, we need to search by name
+ if (sysctlbyname("kern.uuid", uuid, &uuidlen, nullptr, 0) == 0 && uuidlen == sizeof(uuid))
+ return QByteArray(uuid, uuidlen);
+# endif
+#elif defined(Q_OS_UNIX)
+ // The modern name on Linux is /etc/machine-id, but that path is
+ // unlikely to exist on non-Linux (non-systemd) systems. The old
+ // path is more than enough.
+ static const char fullfilename[] = "/usr/local/var/lib/dbus/machine-id";
+ const char *firstfilename = fullfilename + sizeof("/usr/local") - 1;
+ int fd = qt_safe_open(firstfilename, O_RDONLY);
+ if (fd == -1 && errno == ENOENT)
+ fd = qt_safe_open(fullfilename, O_RDONLY);
+
+ if (fd != -1) {
+ char buffer[32]; // 128 bits, hex-encoded
+ qint64 len = qt_safe_read(fd, buffer, sizeof(buffer));
+ qt_safe_close(fd);
+
+ if (len != -1)
+ return QByteArray(buffer, len);
+ }
+#elif defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
+ // Let's poke at the registry
+ HKEY key = NULL;
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Cryptography", 0, KEY_READ, &key)
+ == ERROR_SUCCESS) {
+ wchar_t buffer[UuidStringLen + 1];
+ DWORD size = sizeof(buffer);
+ bool ok = (RegQueryValueEx(key, L"MachineGuid", NULL, NULL, (LPBYTE)buffer, &size) ==
+ ERROR_SUCCESS);
+ RegCloseKey(key);
+ if (ok)
+ return QStringView(buffer, (size - 1) / 2).toLatin1();
+ }
+#endif
+ return QByteArray();
+}
+
+/*!
+ \since 5.10
+
+ Returns a unique ID for this machine's boot, if one can be determined. If
+ no unique ID could be determined, this function returns an empty byte
+ array. This value is expected to change after every boot and can be
+ considered globally unique.
+
+ This function is currently only implemented for Linux and Apple operating
+ systems.
+
+ \sa machineUniqueId()
+*/
+QByteArray QSysInfo::bootUniqueId()
+{
+#ifdef Q_OS_LINUX
+ // use low-level API here for simplicity
+ int fd = qt_safe_open("/proc/sys/kernel/random/boot_id", O_RDONLY);
+ if (fd != -1) {
+ char uuid[UuidStringLen];
+ qint64 len = qt_safe_read(fd, uuid, sizeof(uuid));
+ qt_safe_close(fd);
+ if (len == UuidStringLen)
+ return QByteArray(uuid, UuidStringLen);
+ }
+#elif defined(Q_OS_DARWIN)
+ // "kern.bootsessionuuid" is only available by name
+ char uuid[UuidStringLen];
+ size_t uuidlen = sizeof(uuid);
+ if (sysctlbyname("kern.bootsessionuuid", uuid, &uuidlen, nullptr, 0) == 0
+ && uuidlen == sizeof(uuid))
+ return QByteArray(uuid, uuidlen);
+#endif
+ return QByteArray();
+};
+
/*!
\macro void Q_ASSERT(bool test)
\relates <QtGlobal>
@@ -3053,10 +3107,10 @@ QString QSysInfo::machineHostName()
*/
/*!
- \fn T *q_check_ptr(T *pointer)
+ \fn template <typename T> T *q_check_ptr(T *p)
\relates <QtGlobal>
- Uses Q_CHECK_PTR on \a pointer, then returns \a pointer.
+ Uses Q_CHECK_PTR on \a p, then returns \a p.
This can be used as an inline version of Q_CHECK_PTR.
*/
@@ -3195,7 +3249,7 @@ static QBasicMutex environmentMutex;
QByteArray qgetenv(const char *varName)
{
QMutexLocker locker(&environmentMutex);
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
size_t requiredSize = 0;
QByteArray buffer;
getenv_s(&requiredSize, 0, 0, varName);
@@ -3214,6 +3268,8 @@ QByteArray qgetenv(const char *varName)
/*!
+ QString qEnvironmentVariable(const char *varName, const QString &defaultValue);
+
\relates <QtGlobal>
\since 5.10
@@ -3288,6 +3344,9 @@ QString qEnvironmentVariable(const char *varName, const QString &defaultValue)
#endif
}
+/*!
+ \internal
+*/
QString qEnvironmentVariable(const char *varName)
{
return qEnvironmentVariable(varName, QString());
@@ -3310,7 +3369,7 @@ QString qEnvironmentVariable(const char *varName)
bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT
{
QMutexLocker locker(&environmentMutex);
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
// we provide a buffer that can only hold the empty string, so
// when the env.var isn't empty, we'll get an ERANGE error (buffer
// too small):
@@ -3351,7 +3410,7 @@ int qEnvironmentVariableIntValue(const char *varName, bool *ok) Q_DECL_NOEXCEPT
(std::numeric_limits<uint>::digits + NumBinaryDigitsPerOctalDigit - 1) / NumBinaryDigitsPerOctalDigit;
QMutexLocker locker(&environmentMutex);
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
// we provide a buffer that can hold any int value:
char buffer[MaxDigitsForOctalInt + 2]; // +1 for NUL +1 for optional '-'
size_t dummy;
@@ -3398,7 +3457,7 @@ int qEnvironmentVariableIntValue(const char *varName, bool *ok) Q_DECL_NOEXCEPT
bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT
{
QMutexLocker locker(&environmentMutex);
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
size_t requiredSize = 0;
(void)getenv_s(&requiredSize, 0, 0, varName);
return requiredSize != 0;
@@ -3428,7 +3487,7 @@ bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT
bool qputenv(const char *varName, const QByteArray& value)
{
QMutexLocker locker(&environmentMutex);
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#if defined(Q_CC_MSVC)
return _putenv_s(varName, value.constData()) == 0;
#elif (defined(_POSIX_VERSION) && (_POSIX_VERSION-0) >= 200112L) || defined(Q_OS_HAIKU)
// POSIX.1-2001 has setenv
@@ -3459,7 +3518,7 @@ bool qputenv(const char *varName, const QByteArray& value)
bool qunsetenv(const char *varName)
{
QMutexLocker locker(&environmentMutex);
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#if defined(Q_CC_MSVC)
return _putenv_s(varName, "") == 0;
#elif (defined(_POSIX_VERSION) && (_POSIX_VERSION-0) >= 200112L) || defined(Q_OS_BSD4) || defined(Q_OS_HAIKU)
// POSIX.1-2001, BSD and Haiku have unsetenv
@@ -3551,7 +3610,7 @@ bool qunsetenv(const char *varName)
*/
/*!
- \fn qAsConst(T &t)
+ \fn template <typename T> typename std::add_const<T>::type &qAsConst(T &t)
\relates <QtGlobal>
\since 5.7
@@ -3603,7 +3662,7 @@ bool qunsetenv(const char *varName)
*/
/*!
- \fn qAsConst(const T &&t)
+ \fn template <typename T> void qAsConst(const T &&t)
\relates <QtGlobal>
\since 5.7
\overload
@@ -4015,43 +4074,6 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
*/
/*!
- \macro Q_GLOBAL_STATIC(type, name)
- \internal
-
- Declares a global static variable with the given \a type and \a name.
-
- Use this macro to instantiate an object in a thread-safe way, creating
- a global pointer that can be used to refer to it.
-
- \warning This macro is subject to a race condition that can cause the object
- to be constructed twice. However, if this occurs, the second instance will
- be immediately deleted.
-
- See also
- \l{http://www.aristeia.com/publications.html}{"C++ and the perils of Double-Checked Locking"}
- by Scott Meyers and Andrei Alexandrescu.
-*/
-
-/*!
- \macro Q_GLOBAL_STATIC_WITH_ARGS(type, name, arguments)
- \internal
-
- Declares a global static variable with the specified \a type and \a name.
-
- Use this macro to instantiate an object using the \a arguments specified
- in a thread-safe way, creating a global pointer that can be used to refer
- to it.
-
- \warning This macro is subject to a race condition that can cause the object
- to be constructed twice. However, if this occurs, the second instance will
- be immediately deleted.
-
- See also
- \l{http://www.aristeia.com/publications.html}{"C++ and the perils of Double-Checked Locking"}
- by Scott Meyers and Andrei Alexandrescu.
-*/
-
-/*!
\macro QT_NAMESPACE
\internal
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index b85b008f70..aa9446221b 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -47,6 +47,7 @@
# include <utility>
#endif
#ifndef __ASSEMBLER__
+# include <assert.h>
# include <stddef.h>
#endif
@@ -87,6 +88,11 @@
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
# define QT_NO_UNSHARABLE_CONTAINERS
+# define QT6_VIRTUAL virtual
+# define QT6_NOT_VIRTUAL
+#else
+# define QT6_VIRTUAL
+# define QT6_NOT_VIRTUAL virtual
#endif
/* These two macros makes it possible to turn the builtin line expander into a
@@ -105,6 +111,32 @@
# define Q_OF_MACH_O
#endif
+/*
+ Avoid "unused parameter" warnings
+*/
+#define Q_UNUSED(x) (void)x;
+
+#if defined(__cplusplus) && defined(Q_COMPILER_STATIC_ASSERT)
+# define Q_STATIC_ASSERT(Condition) static_assert(bool(Condition), #Condition)
+# define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
+#elif defined(Q_COMPILER_STATIC_ASSERT)
+// C11 mode - using the _S version in case <assert.h> doesn't do the right thing
+# define Q_STATIC_ASSERT(Condition) _Static_assert(!!(Condition), #Condition)
+# define Q_STATIC_ASSERT_X(Condition, Message) _Static_assert(!!(Condition), Message)
+#else
+// C89 & C99 version
+# define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B)
+# define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B
+# ifdef __COUNTER__
+# define Q_STATIC_ASSERT(Condition) \
+ typedef char Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __COUNTER__) [(Condition) ? 1 : -1];
+# else
+# define Q_STATIC_ASSERT(Condition) \
+ typedef char Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) [(Condition) ? 1 : -1];
+# endif /* __COUNTER__ */
+# define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition)
+#endif
+
#ifdef __cplusplus
#include <algorithm>
@@ -219,6 +251,15 @@ typedef unsigned long long quint64; /* 64 bit unsigned */
typedef qint64 qlonglong;
typedef quint64 qulonglong;
+#ifndef __cplusplus
+// In C++ mode, we define below using QIntegerForSize template
+Q_STATIC_ASSERT_X(sizeof(ptrdiff_t) == sizeof(size_t), "Weird ptrdiff_t and size_t definitions");
+typedef ptrdiff_t qptrdiff;
+typedef ptrdiff_t qsizetype;
+typedef ptrdiff_t qintptr;
+typedef size_t quintptr;
+#endif
+
/*
Useful type definitions for Qt
*/
@@ -676,7 +717,7 @@ inline void qt_noop(void) {}
# define QT_CATCH(A) catch (A)
# define QT_THROW(A) throw A
# define QT_RETHROW throw
-Q_NORETURN Q_CORE_EXPORT void qTerminate() Q_DECL_NOTHROW;
+Q_NORETURN Q_DECL_COLD_FUNCTION Q_CORE_EXPORT void qTerminate() Q_DECL_NOTHROW;
# ifdef Q_COMPILER_NOEXCEPT
# define QT_TERMINATE_ON_EXCEPTION(expr) do { expr; } while (false)
# else
@@ -694,11 +735,6 @@ Q_CORE_EXPORT Q_DECL_CONST_FUNCTION bool qSharedBuild() Q_DECL_NOTHROW;
#endif
/*
- Avoid "unused parameter" warnings
-*/
-#define Q_UNUSED(x) (void)x;
-
-/*
Debugging and error handling
*/
@@ -724,11 +760,13 @@ Q_CORE_EXPORT Q_DECL_CONST_FUNCTION bool qSharedBuild() Q_DECL_NOTHROW;
#endif
class QString;
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT QString qt_error_string(int errorCode = -1);
#ifndef Q_CC_MSVC
Q_NORETURN
#endif
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line) Q_DECL_NOTHROW;
#if !defined(Q_ASSERT)
@@ -746,6 +784,7 @@ Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line)
#ifndef Q_CC_MSVC
Q_NORETURN
#endif
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT void qt_assert_x(const char *where, const char *what, const char *file, int line) Q_DECL_NOTHROW;
#if !defined(Q_ASSERT_X)
@@ -756,28 +795,8 @@ Q_CORE_EXPORT void qt_assert_x(const char *where, const char *what, const char *
# endif
#endif
-
-#ifdef Q_COMPILER_STATIC_ASSERT
-#define Q_STATIC_ASSERT(Condition) static_assert(bool(Condition), #Condition)
-#define Q_STATIC_ASSERT_X(Condition, Message) static_assert(bool(Condition), Message)
-#else
-// Intentionally undefined
-template <bool Test> class QStaticAssertFailure;
-template <> class QStaticAssertFailure<true> {};
-
-#define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B)
-#define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B
-#ifdef __COUNTER__
-#define Q_STATIC_ASSERT(Condition) \
- enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __COUNTER__) = sizeof(QStaticAssertFailure<!!(Condition)>)}
-#else
-#define Q_STATIC_ASSERT(Condition) \
- enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) = sizeof(QStaticAssertFailure<!!(Condition)>)}
-#endif /* __COUNTER__ */
-#define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition)
-#endif
-
Q_NORETURN Q_CORE_EXPORT void qt_check_pointer(const char *, int) Q_DECL_NOTHROW;
+Q_DECL_COLD_FUNCTION
Q_CORE_EXPORT void qBadAlloc();
#ifdef QT_NO_EXCEPTIONS
@@ -919,13 +938,7 @@ QT_WARNING_DISABLE_MSVC(4514) /* unreferenced inline function has been removed *
QT_WARNING_DISABLE_MSVC(4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */
QT_WARNING_DISABLE_MSVC(4097) /* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
QT_WARNING_DISABLE_MSVC(4706) /* assignment within conditional expression */
-# if _MSC_VER <= 1310 // MSVC 2003
-QT_WARNING_DISABLE_MSVC(4786) /* 'identifier' : identifier was truncated to 'number' characters in the debug information */
-# endif
QT_WARNING_DISABLE_MSVC(4355) /* 'this' : used in base member initializer list */
-# if _MSC_VER < 1800 // MSVC 2013
-QT_WARNING_DISABLE_MSVC(4231) /* nonstandard extension used : 'identifier' before template explicit instantiation */
-# endif
QT_WARNING_DISABLE_MSVC(4710) /* function not inlined */
QT_WARNING_DISABLE_MSVC(4530) /* C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc */
# elif defined(Q_CC_BOR)
@@ -1132,19 +1145,15 @@ template <typename... Args> Q_CONSTEXPR Q_DECL_UNUSED QNonConstOverload<Args...>
class QByteArray;
Q_CORE_EXPORT QByteArray qgetenv(const char *varName);
-#ifdef Q_QDOC
-Q_CORE_EXPORT QString qEnvironmentVariable(const char *varName,
- const QString &defaultValue = QString());
-#else // need it as two functions because QString is only forward-declared here
+// need it as two functions because QString is only forward-declared here
Q_CORE_EXPORT QString qEnvironmentVariable(const char *varName);
Q_CORE_EXPORT QString qEnvironmentVariable(const char *varName, const QString &defaultValue);
-#endif
Q_CORE_EXPORT bool qputenv(const char *varName, const QByteArray& value);
Q_CORE_EXPORT bool qunsetenv(const char *varName);
Q_CORE_EXPORT bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT;
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT;
-Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=Q_NULLPTR) Q_DECL_NOEXCEPT;
+Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nullptr) Q_DECL_NOEXCEPT;
inline int qIntCast(double f) { return int(f); }
inline int qIntCast(float f) { return int(f); }
diff --git a/src/corelib/global/qglobalstatic.qdoc b/src/corelib/global/qglobalstatic.qdoc
index 8c34739d38..63cc968d1c 100644
--- a/src/corelib/global/qglobalstatic.qdoc
+++ b/src/corelib/global/qglobalstatic.qdoc
@@ -368,7 +368,7 @@
*/
/*!
- \fn bool QGlobalStatic::isDestroyed() const
+ \fn template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> bool QGlobalStatic<T, innerFunction, guard>::isDestroyed() const
This function returns \c true if the global static object has already
completed destruction (that is, if the destructor for the type has already
@@ -398,7 +398,7 @@
*/
/*!
- \fn bool QGlobalStatic::exists() const
+ \fn template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> bool QGlobalStatic<T, innerFunction, guard>::exists() const
This function returns \c true if the global static object has already
completed initialization (that is, if the constructor for the type has
@@ -447,7 +447,7 @@
*/
/*!
- \fn QGlobalStatic::operator Type*()
+ \fn template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> QGlobalStatic<T, innerFunction, guard>::operator Type*()
This function returns the address of the contents of this global static. If
the contents have not yet been created, they will be created thread-safely
@@ -480,7 +480,7 @@
*/
/*!
- \fn Type *QGlobalStatic::operator()()
+ \fn template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> Type *QGlobalStatic<T, innerFunction, guard>::operator()()
\deprecated
This function returns the address of the contents of this global static. If
@@ -495,7 +495,7 @@
*/
/*!
- \fn Type *QGlobalStatic::operator->()
+ \fn template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> Type *QGlobalStatic<T, innerFunction, guard>::operator->()
This function returns the address of the contents of this global static. If
the contents have not yet been created, they will be created thread-safely
@@ -508,7 +508,7 @@
*/
/*!
- \fn Type &QGlobalStatic::operator*()
+ \fn template <typename T, T *(&innerFunction)(), QBasicAtomicInt &guard> Type &QGlobalStatic<T, innerFunction, guard>::operator*()
This function returns a reference to the contents of this global static. If
the contents have not yet been created, they will be created thread-safely
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index b4ba0b5b2e..422d08f32c 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -318,15 +318,7 @@ QLibraryInfo::buildDate()
#elif defined(Q_CC_GNU)
# define COMPILER_STRING "GCC " __VERSION__
#elif defined(Q_CC_MSVC)
-# if _MSC_VER < 1600
-# define COMPILER_STRING "MSVC 2008"
-# elif _MSC_VER < 1700
-# define COMPILER_STRING "MSVC 2010"
-# elif _MSC_VER < 1800
-# define COMPILER_STRING "MSVC 2012"
-# elif _MSC_VER < 1900
-# define COMPILER_STRING "MSVC 2013"
-# elif _MSC_VER < 1910
+# if _MSC_VER < 1910
# define COMPILER_STRING "MSVC 2015"
# elif _MSC_VER < 2000
# define COMPILER_STRING "MSVC 2017"
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index 3206a43599..9f1fe7cabb 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -71,6 +71,10 @@
#include <android/log.h>
#endif
+#ifdef Q_OS_DARWIN
+#include <QtCore/private/qcore_mac_p.h>
+#endif
+
#if QT_CONFIG(journald)
# define SD_JOURNAL_SUPPRESS_LOCATION
# include <systemd/sd-journal.h>
@@ -155,6 +159,7 @@ Q_NORETURN
#endif
static void qt_message_fatal(QtMsgType, const QMessageLogContext &context, const QString &message);
static void qt_message_print(QtMsgType, const QMessageLogContext &context, const QString &message);
+static void qt_message_print(const QString &message);
static int checked_var_value(const char *varname)
{
@@ -194,13 +199,16 @@ static bool isFatal(QtMsgType msgType)
return false;
}
+static bool isDefaultCategory(const char *category)
+{
+ return !category || strcmp(category, "default") == 0;
+}
+
static bool willLogToConsole()
{
#if defined(Q_OS_WINRT)
// these systems have no stderr, so always log to the system log
return false;
-#elif defined(QT_BOOTSTRAPPED)
- return true;
#else
// rules to determine if we'll log preferably to the console:
// 1) if QT_LOGGING_TO_CONSOLE is set, it determines behavior:
@@ -1209,20 +1217,10 @@ void QMessagePattern::setPattern(const QString &pattern)
error += QLatin1String("QT_MESSAGE_PATTERN: %{if-*} cannot be nested\n");
else if (inIf)
error += QLatin1String("QT_MESSAGE_PATTERN: missing %{endif}\n");
- if (!error.isEmpty()) {
-#if defined(Q_OS_WINRT)
- OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16()));
- if (0)
-#elif defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
- if (!qt_logging_to_console()) {
- OutputDebugString(reinterpret_cast<const wchar_t*>(error.utf16()));
- } else
-#endif
- {
- fprintf(stderr, "%s", error.toLocal8Bit().constData());
- fflush(stderr);
- }
- }
+
+ if (!error.isEmpty())
+ qt_message_print(error);
+
literals = new const char*[literalsVar.size() + 1];
literals[literalsVar.size()] = 0;
memcpy(literals, literalsVar.constData(), literalsVar.size() * sizeof(const char*));
@@ -1250,7 +1248,7 @@ static QStringList backtraceFramesForLogMessage(int frameCount)
static QRegularExpression rx(QStringLiteral("^(?:[^(]*/)?([^(/]+)\\(([^+]*)(?:[\\+[a-f0-9x]*)?\\) \\[[a-f0-9x]*\\]$"),
QRegularExpression::OptimizeOnFirstUsageOption);
- QVarLengthArray<void*, 32> buffer(7 + frameCount);
+ QVarLengthArray<void*, 32> buffer(8 + frameCount);
int n = backtrace(buffer.data(), buffer.size());
if (n > 0) {
int numberPrinted = 0;
@@ -1312,57 +1310,6 @@ static QString formatBacktraceForLogMessage(const QMessagePattern::BacktracePara
}
#endif // QLOGGING_HAVE_BACKTRACE && !QT_BOOTSTRAPPED
-#if QT_CONFIG(slog2)
-#ifndef QT_LOG_CODE
-#define QT_LOG_CODE 9000
-#endif
-
-static void slog2_default_handler(QtMsgType msgType, const char *message)
-{
- if (slog2_set_default_buffer((slog2_buffer_t)-1) == 0) {
- slog2_buffer_set_config_t buffer_config;
- slog2_buffer_t buffer_handle;
-
- buffer_config.buffer_set_name = __progname;
- buffer_config.num_buffers = 1;
- buffer_config.verbosity_level = SLOG2_DEBUG1;
- buffer_config.buffer_config[0].buffer_name = "default";
- buffer_config.buffer_config[0].num_pages = 8;
-
- if (slog2_register(&buffer_config, &buffer_handle, 0) == -1) {
- fprintf(stderr, "Error registering slogger2 buffer!\n");
- fprintf(stderr, "%s", message);
- fflush(stderr);
- return;
- }
-
- // Set as the default buffer
- slog2_set_default_buffer(buffer_handle);
- }
- int severity;
- //Determines the severity level
- switch (msgType) {
- case QtDebugMsg:
- severity = SLOG2_DEBUG1;
- break;
- case QtInfoMsg:
- severity = SLOG2_INFO;
- break;
- case QtWarningMsg:
- severity = SLOG2_NOTICE;
- break;
- case QtCriticalMsg:
- severity = SLOG2_WARNING;
- break;
- case QtFatalMsg:
- severity = SLOG2_ERROR;
- break;
- }
- //writes to the slog2 buffer
- slog2c(NULL, QT_LOG_CODE, severity, message);
-}
-#endif // slog2
-
Q_GLOBAL_STATIC(QMessagePattern, qMessagePattern)
/*!
@@ -1480,7 +1427,7 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
}
#endif // !QT_BOOTSTRAPPED
} else if (token == ifCategoryTokenC) {
- if (!context.category || (strcmp(context.category, "default") == 0))
+ if (isDefaultCategory(context.category))
skip = true;
#define HANDLE_IF_TOKEN(LEVEL) \
} else if (token == if##LEVEL##TokenC) { \
@@ -1512,11 +1459,80 @@ static QBasicAtomicPointer<void (QtMsgType, const char*)> msgHandler = Q_BASIC_A
// pointer to QtMessageHandler debug handler (with context)
static QBasicAtomicPointer<void (QtMsgType, const QMessageLogContext &, const QString &)> messageHandler = Q_BASIC_ATOMIC_INITIALIZER(qDefaultMessageHandler);
+// ------------------------ Alternate logging sinks -------------------------
+
+#if defined(QT_BOOTSTRAPPED)
+ // Boostrapped tools always print to stderr, so no need for alternate sinks
+#else
+
+#if QT_CONFIG(slog2)
+#ifndef QT_LOG_CODE
+#define QT_LOG_CODE 9000
+#endif
+
+static bool slog2_default_handler(QtMsgType type, const QMessageLogContext &context, const QString &message)
+{
+ if (qt_logging_to_console())
+ return false;
+
+ QString formattedMessage = qFormatLogMessage(type, context, message);
+ formattedMessage.append(QLatin1Char('\n'));
+ if (slog2_set_default_buffer((slog2_buffer_t)-1) == 0) {
+ slog2_buffer_set_config_t buffer_config;
+ slog2_buffer_t buffer_handle;
+
+ buffer_config.buffer_set_name = __progname;
+ buffer_config.num_buffers = 1;
+ buffer_config.verbosity_level = SLOG2_DEBUG1;
+ buffer_config.buffer_config[0].buffer_name = "default";
+ buffer_config.buffer_config[0].num_pages = 8;
+
+ if (slog2_register(&buffer_config, &buffer_handle, 0) == -1) {
+ fprintf(stderr, "Error registering slogger2 buffer!\n");
+ fprintf(stderr, "%s", formattedMessage.toLocal8Bit().constData());
+ fflush(stderr);
+ return false;
+ }
+
+ // Set as the default buffer
+ slog2_set_default_buffer(buffer_handle);
+ }
+ int severity;
+ //Determines the severity level
+ switch (type) {
+ case QtDebugMsg:
+ severity = SLOG2_DEBUG1;
+ break;
+ case QtInfoMsg:
+ severity = SLOG2_INFO;
+ break;
+ case QtWarningMsg:
+ severity = SLOG2_NOTICE;
+ break;
+ case QtCriticalMsg:
+ severity = SLOG2_WARNING;
+ break;
+ case QtFatalMsg:
+ severity = SLOG2_ERROR;
+ break;
+ }
+ //writes to the slog2 buffer
+ slog2c(NULL, QT_LOG_CODE, severity, formattedMessage.toLocal8Bit().constData());
+
+ return true; // Prevent further output to stderr
+}
+#endif // slog2
+
#if QT_CONFIG(journald)
-static void systemd_default_message_handler(QtMsgType type,
+static bool systemd_default_message_handler(QtMsgType type,
const QMessageLogContext &context,
const QString &message)
{
+ if (qt_logging_to_console())
+ return false;
+
+ QString formattedMessage = qFormatLogMessage(type, context, message);
+
int priority = LOG_INFO; // Informational
switch (type) {
case QtDebugMsg:
@@ -1536,19 +1552,26 @@ static void systemd_default_message_handler(QtMsgType type,
break;
}
- sd_journal_send("MESSAGE=%s", message.toUtf8().constData(),
+ sd_journal_send("MESSAGE=%s", formattedMessage.toUtf8().constData(),
"PRIORITY=%i", priority,
"CODE_FUNC=%s", context.function ? context.function : "unknown",
"CODE_LINE=%d", context.line,
"CODE_FILE=%s", context.file ? context.file : "unknown",
"QT_CATEGORY=%s", context.category ? context.category : "unknown",
NULL);
+
+ return true; // Prevent further output to stderr
}
#endif
#if QT_CONFIG(syslog)
-static void syslog_default_message_handler(QtMsgType type, const char *message)
+static bool syslog_default_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &message)
{
+ if (qt_logging_to_console())
+ return false;
+
+ QString formattedMessage = qFormatLogMessage(type, context, message);
+
int priority = LOG_INFO; // Informational
switch (type) {
case QtDebugMsg:
@@ -1568,15 +1591,22 @@ static void syslog_default_message_handler(QtMsgType type, const char *message)
break;
}
- syslog(priority, "%s", message);
+ syslog(priority, "%s", formattedMessage.toUtf8().constData());
+
+ return true; // Prevent further output to stderr
}
#endif
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
-static void android_default_message_handler(QtMsgType type,
+static bool android_default_message_handler(QtMsgType type,
const QMessageLogContext &context,
const QString &message)
{
+ if (qt_logging_to_console())
+ return false;
+
+ QString formattedMessage = qFormatLogMessage(type, context, message);
+
android_LogPriority priority = ANDROID_LOG_DEBUG;
switch (type) {
case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break;
@@ -1588,50 +1618,81 @@ static void android_default_message_handler(QtMsgType type,
__android_log_print(priority, qPrintable(QCoreApplication::applicationName()),
"%s:%d (%s): %s\n", context.file, context.line,
- context.function, qPrintable(message));
+ context.function, qPrintable(formattedMessage));
+
+ return true; // Prevent further output to stderr
}
#endif //Q_OS_ANDROID
-/*!
- \internal
-*/
-static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context,
- const QString &buf)
+#ifdef Q_OS_WIN
+static bool win_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &message)
{
- QString logMessage = qFormatLogMessage(type, context, buf);
+ if (qt_logging_to_console())
+ return false;
+
+ QString formattedMessage = qFormatLogMessage(type, context, message);
+ formattedMessage.append(QLatin1Char('\n'));
+ OutputDebugString(reinterpret_cast<const wchar_t *>(formattedMessage.utf16()));
+
+ return true; // Prevent further output to stderr
+}
+#endif
+
+#endif // Bootstrap check
+
+// --------------------------------------------------------------------------
+
+static void stderr_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &message)
+{
+ QString formattedMessage = qFormatLogMessage(type, context, message);
// print nothing if message pattern didn't apply / was empty.
// (still print empty lines, e.g. because message itself was empty)
- if (logMessage.isNull())
+ if (formattedMessage.isNull())
return;
- if (!qt_logging_to_console()) {
-#if defined(Q_OS_WIN)
- logMessage.append(QLatin1Char('\n'));
- OutputDebugString(reinterpret_cast<const wchar_t *>(logMessage.utf16()));
- return;
-#elif QT_CONFIG(slog2)
- logMessage.append(QLatin1Char('\n'));
- slog2_default_handler(type, logMessage.toLocal8Bit().constData());
- return;
-#elif QT_CONFIG(journald)
- systemd_default_message_handler(type, context, logMessage);
- return;
-#elif QT_CONFIG(syslog)
- syslog_default_message_handler(type, logMessage.toUtf8().constData());
- return;
-#elif defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
- android_default_message_handler(type, context, logMessage);
- return;
-#endif
- }
- fprintf(stderr, "%s\n", logMessage.toLocal8Bit().constData());
+ fprintf(stderr, "%s\n", formattedMessage.toLocal8Bit().constData());
fflush(stderr);
}
/*!
\internal
*/
+static void qDefaultMessageHandler(QtMsgType type, const QMessageLogContext &context,
+ const QString &message)
+{
+ bool handledStderr = false;
+
+ // A message sink logs the message to a structured or unstructured destination,
+ // optionally formatting the message if the latter, and returns true if the sink
+ // handled stderr output as well, which will shortcut our default stderr output.
+ // In the future, if we allow multiple/dynamic sinks, this will be iterating
+ // a list of sinks.
+
+#if !defined(QT_BOOTSTRAPPED)
+# if defined(Q_OS_WIN)
+ handledStderr |= win_message_handler(type, context, message);
+# elif QT_CONFIG(slog2)
+ handledStderr |= slog2_default_handler(type, context, message);
+# elif QT_CONFIG(journald)
+ handledStderr |= systemd_default_message_handler(type, context, message);
+# elif QT_CONFIG(syslog)
+ handledStderr |= syslog_default_message_handler(type, context, message);
+# elif defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
+ handledStderr |= android_default_message_handler(type, context, message);
+# elif defined(QT_USE_APPLE_UNIFIED_LOGGING)
+ if (__builtin_available(macOS 10.12, iOS 10, tvOS 10, watchOS 3, *))
+ handledStderr |= AppleUnifiedLogger::messageHandler(type, context, message);
+# endif
+#endif
+
+ if (!handledStderr)
+ stderr_message_handler(type, context, message);
+}
+
+/*!
+ \internal
+*/
static void qDefaultMsgHandler(QtMsgType type, const char *buf)
{
QMessageLogContext emptyContext;
@@ -1665,7 +1726,7 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
{
#ifndef QT_BOOTSTRAPPED
// qDebug, qWarning, ... macros do not check whether category is enabled
- if (!context.category || (strcmp(context.category, "default") == 0)) {
+ if (isDefaultCategory(context.category)) {
if (QLoggingCategory *defaultCategory = QLoggingCategory::defaultCategory()) {
if (!defaultCategory->isEnabled(msgType))
return;
@@ -1689,6 +1750,21 @@ static void qt_message_print(QtMsgType msgType, const QMessageLogContext &contex
}
}
+static void qt_message_print(const QString &message)
+{
+#if defined(Q_OS_WINRT)
+ OutputDebugString(reinterpret_cast<const wchar_t*>(message.utf16()));
+ return;
+#elif defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED)
+ if (!qt_logging_to_console()) {
+ OutputDebugString(reinterpret_cast<const wchar_t*>(message.utf16()));
+ return;
+ }
+#endif
+ fprintf(stderr, "%s", message.toLocal8Bit().constData());
+ fflush(stderr);
+}
+
static void qt_message_fatal(QtMsgType, const QMessageLogContext &context, const QString &message)
{
#if defined(Q_CC_MSVC) && defined(QT_DEBUG) && defined(_DEBUG) && defined(_CRT_ERROR)
@@ -1886,6 +1962,10 @@ void qErrnoWarning(int code, const char *msg, ...)
environment variable; if both \l qSetMessagePattern() is called and QT_MESSAGE_PATTERN is
set, the environment variable takes precedence.
+ \note The message pattern only applies to unstructured logging, such as the default
+ \c stderr output. Structured logging such as systemd will record the message as is,
+ along with as much structured information as can be captured.
+
Custom message handlers can use qFormatLogMessage() to take \a pattern into account.
\sa qInstallMessageHandler(), {Debugging Techniques}, {QLoggingCategory}
diff --git a/src/corelib/global/qlogging.h b/src/corelib/global/qlogging.h
index ec21198784..16e01183bd 100644
--- a/src/corelib/global/qlogging.h
+++ b/src/corelib/global/qlogging.h
@@ -64,7 +64,7 @@ class QMessageLogContext
Q_DISABLE_COPY(QMessageLogContext)
public:
Q_DECL_CONSTEXPR QMessageLogContext()
- : version(2), line(0), file(Q_NULLPTR), function(Q_NULLPTR), category(Q_NULLPTR) {}
+ : version(2), line(0), file(nullptr), function(nullptr), category(nullptr) {}
Q_DECL_CONSTEXPR QMessageLogContext(const char *fileName, int lineNumber, const char *functionName, const char *categoryName)
: version(2), line(lineNumber), file(fileName), function(functionName), category(categoryName) {}
@@ -97,7 +97,9 @@ public:
void noDebug(const char *, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3)
{}
void info(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
+ Q_DECL_COLD_FUNCTION
void warning(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
+ Q_DECL_COLD_FUNCTION
void critical(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
typedef const QLoggingCategory &(*CategoryFunction)();
@@ -106,14 +108,19 @@ public:
void debug(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
void info(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
void info(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+ Q_DECL_COLD_FUNCTION
void warning(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+ Q_DECL_COLD_FUNCTION
void warning(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+ Q_DECL_COLD_FUNCTION
void critical(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+ Q_DECL_COLD_FUNCTION
void critical(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
#ifndef Q_CC_MSVC
Q_NORETURN
#endif
+ Q_DECL_COLD_FUNCTION
void fatal(const char *msg, ...) const Q_DECL_NOTHROW Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
#ifndef QT_NO_DEBUG_STREAM
@@ -150,9 +157,9 @@ private:
#define QT_MESSAGELOG_LINE __LINE__
#define QT_MESSAGELOG_FUNC Q_FUNC_INFO
#else
- #define QT_MESSAGELOG_FILE Q_NULLPTR
+ #define QT_MESSAGELOG_FILE nullptr
#define QT_MESSAGELOG_LINE 0
- #define QT_MESSAGELOG_FUNC Q_NULLPTR
+ #define QT_MESSAGELOG_FUNC nullptr
#endif
#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
@@ -179,8 +186,8 @@ private:
Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &context,
const QString &message);
-Q_CORE_EXPORT void qErrnoWarning(int code, const char *msg, ...);
-Q_CORE_EXPORT void qErrnoWarning(const char *msg, ...);
+Q_CORE_EXPORT Q_DECL_COLD_FUNCTION void qErrnoWarning(int code, const char *msg, ...);
+Q_CORE_EXPORT Q_DECL_COLD_FUNCTION void qErrnoWarning(const char *msg, ...);
#if QT_DEPRECATED_SINCE(5, 0)// deprecated. Use qInstallMessageHandler instead!
typedef void (*QtMsgHandler)(QtMsgType, const char *);
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index 2a8345195d..31b1823690 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -243,7 +243,7 @@ public:
// size of a multi-variant string.
TextLongestVariant = 0x80000
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#if QT_DEPRECATED_SINCE(5, 11) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
, TextBypassShaping = 0x100000
#endif
};
@@ -848,6 +848,36 @@ public:
Key_Dead_Belowdot = 0x01001260,
Key_Dead_Hook = 0x01001261,
Key_Dead_Horn = 0x01001262,
+ Key_Dead_Stroke = 0x01001263,
+ Key_Dead_Abovecomma = 0x01001264,
+ Key_Dead_Abovereversedcomma = 0x01001265,
+ Key_Dead_Doublegrave = 0x01001266,
+ Key_Dead_Belowring = 0x01001267,
+ Key_Dead_Belowmacron = 0x01001268,
+ Key_Dead_Belowcircumflex = 0x01001269,
+ Key_Dead_Belowtilde = 0x0100126a,
+ Key_Dead_Belowbreve = 0x0100126b,
+ Key_Dead_Belowdiaeresis = 0x0100126c,
+ Key_Dead_Invertedbreve = 0x0100126d,
+ Key_Dead_Belowcomma = 0x0100126e,
+ Key_Dead_Currency = 0x0100126f,
+ Key_Dead_a = 0x01001280,
+ Key_Dead_A = 0x01001281,
+ Key_Dead_e = 0x01001282,
+ Key_Dead_E = 0x01001283,
+ Key_Dead_i = 0x01001284,
+ Key_Dead_I = 0x01001285,
+ Key_Dead_o = 0x01001286,
+ Key_Dead_O = 0x01001287,
+ Key_Dead_u = 0x01001288,
+ Key_Dead_U = 0x01001289,
+ Key_Dead_Small_Schwa = 0x0100128a,
+ Key_Dead_Capital_Schwa = 0x0100128b,
+ Key_Dead_Greek = 0x0100128c,
+ Key_Dead_Lowline = 0x01001290,
+ Key_Dead_Aboveverticalline = 0x01001291,
+ Key_Dead_Belowverticalline = 0x01001292,
+ Key_Dead_Longsolidusoverlay = 0x01001293,
// multimedia/internet keys - ignored by default - see QKeyEvent c'tor
Key_Back = 0x01000061,
@@ -1376,6 +1406,9 @@ public:
ImhMultiLine = 0x400,
+ ImhNoEditMenu = 0x800,
+ ImhNoTextHandles = 0x1000,
+
ImhDigitsOnly = 0x10000,
ImhFormattedNumbersOnly = 0x20000,
ImhUppercaseOnly = 0x40000,
@@ -1831,6 +1864,16 @@ public:
static bool activateCallbacks(Callback, void **);
};
+#if defined(Q_CLANG_QDOC)
+// Declared here for qdoc; actual declarations in qtextdocument.h
+namespace Qt
+{
+ bool mightBeRichText(const QString&);
+ QString convertFromPlainText(const QString &plain, WhiteSpaceMode mode = WhiteSpacePre);
+ QTextCodec *codecForHtml(const QByteArray &ba);
+}
+#endif // Q_CLANG_QDOC
+
QT_END_NAMESPACE
#endif // QNAMESPACE_H
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index e64fb221d3..11c431d015 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -993,12 +993,7 @@
\value WA_LayoutUsesWidgetRect Ignore the layout item rect from the style
when laying out this widget with QLayout.
- \value WA_MacNoClickThrough When a widget that has this attribute set
- is clicked, and its window is inactive, the click will make the window
- active but won't be seen by the widget. Typical use of this attribute
- is on widgets with "destructive" actions, such as a "Delete" button.
- WA_MacNoClickThrough also applies to all child widgets of the widget
- that has it set.
+ \value WA_MacNoClickThrough This value is obsolete and has no effect.
\value WA_MacOpaqueSizeGrip Indicates that the native Carbon size grip
should be opaque instead of transparent (the default). This attribute
@@ -1027,9 +1022,7 @@
alternative sizes for widgets to avoid clipping.
This attribute is only applicable to \macos.
- \value WA_MacBrushedMetal Indicates the widget should be drawn in
- the brushed metal style as supported by the windowing system. This
- attribute is only applicable to \macos.
+ \value WA_MacBrushedMetal This value is obsolete and has no effect.
\omitvalue WA_MacMetalStyle
@@ -1284,9 +1277,7 @@
has no effect on non-X11 platforms. \b Note: Qt automatically sets this
attribute on the feedback widget used during a drag.
- \value WA_MacFrameworkScaled Enables resolution independence aware mode
- on Mac when using Carbon. This attribute has no effect on Cocoa.
- The attribute is off by default and can be enabled on a per-window basis.
+ \value WA_MacFrameworkScaled This value is obsolete and has no effect.
\value WA_AcceptTouchEvents Allows touch events (see QTouchEvent)
to be sent to the widget. Must be set on all widgets that can
@@ -1338,6 +1329,7 @@
\omitvalue WA_WState_WindowOpacitySet
\omitvalue WA_WState_AcceptedTouchBeginEvent
\omitvalue WA_MacNoShadow
+ \omitvalue WA_ContentsMarginsRespectsSafeArea
*/
/*! \typedef Qt::HANDLE
@@ -1613,6 +1605,36 @@
\value Key_Dead_Belowdot
\value Key_Dead_Hook
\value Key_Dead_Horn
+ \value Key_Dead_Stroke
+ \value Key_Dead_Abovecomma
+ \value Key_Dead_Abovereversedcomma
+ \value Key_Dead_Doublegrave
+ \value Key_Dead_Belowring
+ \value Key_Dead_Belowmacron
+ \value Key_Dead_Belowcircumflex
+ \value Key_Dead_Belowtilde
+ \value Key_Dead_Belowbreve
+ \value Key_Dead_Belowdiaeresis
+ \value Key_Dead_Invertedbreve
+ \value Key_Dead_Belowcomma
+ \value Key_Dead_Currency
+ \value Key_Dead_a
+ \value Key_Dead_A
+ \value Key_Dead_e
+ \value Key_Dead_E
+ \value Key_Dead_i
+ \value Key_Dead_I
+ \value Key_Dead_o
+ \value Key_Dead_O
+ \value Key_Dead_u
+ \value Key_Dead_U
+ \value Key_Dead_Small_Schwa
+ \value Key_Dead_Capital_Schwa
+ \value Key_Dead_Greek
+ \value Key_Dead_Lowline
+ \value Key_Dead_Aboveverticalline
+ \value Key_Dead_Belowverticalline
+ \value Key_Dead_Longsolidusoverlay
\value Key_Back
\value Key_Forward
\value Key_Stop
@@ -2129,7 +2151,7 @@
with a somewhat lighter frame. It can also be
combined with Qt::FramelessWindowHint.
On \macos, tool windows correspond to the
- \l{http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_concept/chapter_2_section_2.html}{Floating}
+ \l{https://developer.apple.com/documentation/appkit/nspanel}{NSPanel}
class of windows. This means that the window lives on a
level above normal windows making it impossible to put a normal
window on top of it. By default, tool windows will disappear
@@ -2564,6 +2586,9 @@
\value ImhMultiLine Multiple lines can be entered into the text field.
+ \value ImhNoEditMenu Do not use built-in edit menu. This flag was introduced in Qt 5.11.
+ \value ImhNoTextHandles Do not use built-in text cursor and selection handles. This flag was introduced in Qt 5.11.
+
Flags that restrict input (exclusive flags):
\value ImhDigitsOnly Only digits are allowed.
@@ -3077,9 +3102,8 @@
it is displayed regardless of device type.
The keypad is used to implement a virtual cursor, unless
the device has an analog mouse type of input device (e.g. touchpad)
-
- \note In 4.6, cursor navigation is only implemented for Symbian OS.
- On other platforms, it behaves as NavigationModeNone.
+ \note Cursor navigation is not currently implemented on any platform
+ and behaves as NavigationModeNone.
\sa QApplication::setNavigationMode()
\sa QApplication::navigationMode()
*/
@@ -3192,3 +3216,37 @@
\value ChecksumItuV41 Checksum calculation based on ITU-V.41.
*/
+
+/*!
+ \fn bool Qt::mightBeRichText(const QString& text)
+
+ Returns \c true if the string \a text is likely to be rich text;
+ otherwise returns \c false.
+
+ This function uses a fast and therefore simple heuristic. It
+ mainly checks whether there is something that looks like a tag
+ before the first line break. Although the result may be correct
+ for common cases, there is no guarantee.
+
+ This function is defined in the \c <QTextDocument> header file.
+*/
+
+/*!
+ \fn QString Qt::convertFromPlainText(const QString &plain, Qt::WhiteSpaceMode mode)
+
+ Converts the plain text string \a plain to an HTML-formatted
+ paragraph while preserving most of its look.
+
+ \a mode defines how whitespace is handled.
+
+ This function is defined in the \c <QTextDocument> header file.
+
+ \sa escape(), mightBeRichText()
+*/
+
+/*!
+ \fn QTextCodec *Qt::codecForHtml(const QByteArray &ba)
+ \internal
+
+ This function is defined in the \c <QTextDocument> header file.
+*/
diff --git a/src/corelib/global/qnumeric_p.h b/src/corelib/global/qnumeric_p.h
index 37eddfa9b5..9b86a16516 100644
--- a/src/corelib/global/qnumeric_p.h
+++ b/src/corelib/global/qnumeric_p.h
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2018 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -58,8 +58,6 @@
#if defined(Q_CC_MSVC)
# include <intrin.h>
-#elif defined(Q_CC_INTEL)
-# include <immintrin.h> // for _addcarry_u<nn>
#endif
#if defined(Q_CC_MSVC)
@@ -163,10 +161,34 @@ Q_DECL_CONST_FUNCTION static inline bool qt_is_finite(float f)
return qnumeric_std_wrapper::isfinite(f);
}
-//
-// Unsigned overflow math
-//
+#ifndef Q_CLANG_QDOC
namespace {
+// Overflow math.
+// This provides efficient implementations for int, unsigned, qsizetype and
+// size_t. Implementations for 8- and 16-bit types will work but may not be as
+// efficient. Implementations for 64-bit may be missing on 32-bit platforms.
+
+#if (defined(Q_CC_GNU) && (Q_CC_GNU >= 500) || defined(Q_CC_INTEL)) || QT_HAS_BUILTIN(__builtin_add_overflowx)
+// GCC 5, ICC 18, and Clang 3.8 have builtins to detect overflows
+
+template <typename T> inline
+typename std::enable_if<std::is_unsigned<T>::value || std::is_signed<T>::value, bool>::type
+add_overflow(T v1, T v2, T *r)
+{ return __builtin_add_overflow(v1, v2, r); }
+
+template <typename T> inline
+typename std::enable_if<std::is_unsigned<T>::value || std::is_signed<T>::value, bool>::type
+sub_overflow(T v1, T v2, T *r)
+{ return __builtin_sub_overflow(v1, v2, r); }
+
+template <typename T> inline
+typename std::enable_if<std::is_unsigned<T>::value || std::is_signed<T>::value, bool>::type
+mul_overflow(T v1, T v2, T *r)
+{ return __builtin_mul_overflow(v1, v2, r); }
+
+#else
+// Generic implementations
+
template <typename T> inline typename std::enable_if<std::is_unsigned<T>::value, bool>::type
add_overflow(T v1, T v2, T *r)
{
@@ -175,69 +197,92 @@ add_overflow(T v1, T v2, T *r)
return v1 > T(v1 + v2);
}
+template <typename T> inline typename std::enable_if<std::is_signed<T>::value, bool>::type
+add_overflow(T v1, T v2, T *r)
+{
+ // Here's how we calculate the overflow:
+ // 1) unsigned addition is well-defined, so we can always execute it
+ // 2) conversion from unsigned back to signed is implementation-
+ // defined and in the implementations we use, it's a no-op.
+ // 3) signed integer overflow happens if the sign of the two input operands
+ // is the same but the sign of the result is different. In other words,
+ // the sign of the result must be the same as the sign of either
+ // operand.
+
+ using U = typename std::make_unsigned<T>::type;
+ *r = T(U(v1) + U(v2));
+
+ // If int is two's complement, assume all integer types are too.
+ if (std::is_same<int32_t, int>::value) {
+ // Two's complement equivalent (generates slightly shorter code):
+ // x ^ y is negative if x and y have different signs
+ // x & y is negative if x and y are negative
+ // (x ^ z) & (y ^ z) is negative if x and z have different signs
+ // AND y and z have different signs
+ return ((v1 ^ *r) & (v2 ^ *r)) < 0;
+ }
+
+ bool s1 = (v1 < 0);
+ bool s2 = (v2 < 0);
+ bool sr = (*r < 0);
+ return s1 != sr && s2 != sr;
+ // also: return s1 == s2 && s1 != sr;
+}
+
template <typename T> inline typename std::enable_if<std::is_unsigned<T>::value, bool>::type
+sub_overflow(T v1, T v2, T *r)
+{
+ // unsigned subtractions are well-defined
+ *r = v1 - v2;
+ return v1 < v2;
+}
+
+template <typename T> inline typename std::enable_if<std::is_signed<T>::value, bool>::type
+sub_overflow(T v1, T v2, T *r)
+{
+ // See above for explanation. This is the same with some signs reversed.
+ // We can't use add_overflow(v1, -v2, r) because it would be UB if
+ // v2 == std::numeric_limits<T>::min().
+
+ using U = typename std::make_unsigned<T>::type;
+ *r = T(U(v1) - U(v2));
+
+ if (std::is_same<int32_t, int>::value)
+ return ((v1 ^ *r) & (~v2 ^ *r)) < 0;
+
+ bool s1 = (v1 < 0);
+ bool s2 = !(v2 < 0);
+ bool sr = (*r < 0);
+ return s1 != sr && s2 != sr;
+ // also: return s1 == s2 && s1 != sr;
+}
+
+template <typename T> inline
+typename std::enable_if<std::is_unsigned<T>::value || std::is_signed<T>::value, bool>::type
mul_overflow(T v1, T v2, T *r)
{
// use the next biggest type
// Note: for 64-bit systems where __int128 isn't supported, this will cause an error.
- // A fallback is present below.
- typedef typename QIntegerForSize<sizeof(T) * 2>::Unsigned Larger;
+ using LargerInt = QIntegerForSize<sizeof(T) * 2>;
+ using Larger = typename std::conditional<std::is_signed<T>::value,
+ typename LargerInt::Signed, typename LargerInt::Unsigned>::type;
Larger lr = Larger(v1) * Larger(v2);
*r = T(lr);
- return lr > std::numeric_limits<T>::max();
+ return lr > std::numeric_limits<T>::max() || lr < std::numeric_limits<T>::min();
}
-#if defined(__SIZEOF_INT128__)
-# define HAVE_MUL64_OVERFLOW
-#endif
-
-// GCC 5 and Clang have builtins to detect overflows
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_uadd_overflow)
+# if defined(Q_CC_MSVC) && defined(Q_PROCESSOR_X86)
+// We can use intrinsics for the unsigned operations with MSVC
template <> inline bool add_overflow(unsigned v1, unsigned v2, unsigned *r)
-{ return __builtin_uadd_overflow(v1, v2, r); }
-#endif
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_uaddl_overflow)
-template <> inline bool add_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
-{ return __builtin_uaddl_overflow(v1, v2, r); }
-#endif
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_uaddll_overflow)
-template <> inline bool add_overflow(unsigned long long v1, unsigned long long v2, unsigned long long *r)
-{ return __builtin_uaddll_overflow(v1, v2, r); }
-#endif
+{ return _addcarry_u32(0, v1, v2, r); }
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_umul_overflow)
-template <> inline bool mul_overflow(unsigned v1, unsigned v2, unsigned *r)
-{ return __builtin_umul_overflow(v1, v2, r); }
-#endif
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_umull_overflow)
-template <> inline bool mul_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
-{ return __builtin_umull_overflow(v1, v2, r); }
-#endif
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_umulll_overflow)
-template <> inline bool mul_overflow(unsigned long long v1, unsigned long long v2, unsigned long long *r)
-{ return __builtin_umulll_overflow(v1, v2, r); }
-# define HAVE_MUL64_OVERFLOW
-#endif
+// 32-bit mul_overflow is fine with the generic code above
-#if ((defined(Q_CC_MSVC) && _MSC_VER >= 1800) || defined(Q_CC_INTEL)) && defined(Q_PROCESSOR_X86) && !QT_HAS_BUILTIN(__builtin_uadd_overflow)
-template <> inline bool add_overflow(unsigned v1, unsigned v2, unsigned *r)
-{ return _addcarry_u32(0, v1, v2, r); }
-# ifdef Q_CC_MSVC // longs are 32-bit
-template <> inline bool add_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
-{ return _addcarry_u32(0, v1, v2, reinterpret_cast<unsigned *>(r)); }
-# endif
-#endif
-#if ((defined(Q_CC_MSVC) && _MSC_VER >= 1800) || defined(Q_CC_INTEL)) && defined(Q_PROCESSOR_X86_64) && !QT_HAS_BUILTIN(__builtin_uadd_overflow)
+# if defined(Q_PROCESSOR_X86_64)
template <> inline bool add_overflow(quint64 v1, quint64 v2, quint64 *r)
{ return _addcarry_u64(0, v1, v2, reinterpret_cast<unsigned __int64 *>(r)); }
-# ifndef Q_CC_MSVC // longs are 64-bit
-template <> inline bool add_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
-{ return _addcarry_u64(0, v1, v2, reinterpret_cast<unsigned __int64 *>(r)); }
-# endif
-#endif
-#if defined(Q_CC_MSVC) && (defined(Q_PROCESSOR_X86_64) || defined(Q_PROCESSOR_IA64)) && !QT_HAS_BUILTIN(__builtin_uadd_overflow)
-#pragma intrinsic(_umul128)
+# pragma intrinsic(_umul128)
template <> inline bool mul_overflow(quint64 v1, quint64 v2, quint64 *r)
{
// use 128-bit multiplication with the _umul128 intrinsic
@@ -246,117 +291,30 @@ template <> inline bool mul_overflow(quint64 v1, quint64 v2, quint64 *r)
*r = _umul128(v1, v2, &high);
return high;
}
-# define HAVE_MUL64_OVERFLOW
-#endif
-
-#if !defined(HAVE_MUL64_OVERFLOW) && defined(__LP64__)
-// no 128-bit multiplication, we need to figure out with a slow division
-template <> inline bool mul_overflow(quint64 v1, quint64 v2, quint64 *r)
-{
- if (v2 && v1 > std::numeric_limits<quint64>::max() / v2)
- return true;
- *r = v1 * v2;
- return false;
-}
-template <> inline bool mul_overflow(unsigned long v1, unsigned long v2, unsigned long *r)
-{
- return mul_overflow<quint64>(v1, v2, reinterpret_cast<quint64 *>(r));
-}
-#else
-# undef HAVE_MUL64_OVERFLOW
-#endif
-
-//
-// Signed overflow math
-//
-// In C++, signed overflow math is Undefined Behavior. However, many CPUs do implement some way to
-// check for overflow. Some compilers expose intrinsics to use this functionality. If the no
-// intrinsic is exposed, overflow checking can be done by widening the result type and "manually"
-// checking for overflow. Or, alternatively, by using inline assembly to use the CPU features.
-//
-// Only int overflow checking is implemented, because it's the only one used.
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_sadd_overflow)
-inline bool add_overflow(int v1, int v2, int *r)
-{ return __builtin_sadd_overflow(v1, v2, r); }
-#elif defined(Q_CC_GNU) && defined(Q_PROCESSOR_X86)
-inline bool add_overflow(int v1, int v2, int *r)
-{
- quint8 overflow = 0;
- int res = v1;
-
- asm ("addl %2, %1\n"
- "seto %0"
- : "=q" (overflow), "=r" (res)
- : "r" (v2), "1" (res)
- : "cc"
- );
- *r = res;
- return overflow;
-}
-#else
-inline bool add_overflow(int v1, int v2, int *r)
-{
- qint64 t = qint64(v1) + v2;
- *r = static_cast<int>(t);
- return t > std::numeric_limits<int>::max() || t < std::numeric_limits<int>::min();
-}
-#endif
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_ssub_overflow)
-inline bool sub_overflow(int v1, int v2, int *r)
-{ return __builtin_ssub_overflow(v1, v2, r); }
-#elif defined(Q_CC_GNU) && defined(Q_PROCESSOR_X86)
-inline bool sub_overflow(int v1, int v2, int *r)
+# pragma intrinsic(_mul128)
+template <> inline bool mul_overflow(qint64 v1, qint64 v2, qint64 *r)
{
- quint8 overflow = 0;
- int res = v1;
-
- asm ("subl %2, %1\n"
- "seto %0"
- : "=q" (overflow), "=r" (res)
- : "r" (v2), "1" (res)
- : "cc"
- );
- *r = res;
- return overflow;
+ // Use 128-bit multiplication with the _mul128 intrinsic
+ // https://msdn.microsoft.com/en-us/library/82cxdw50.aspx
+
+ // This is slightly more complex than the unsigned case above: the sign bit
+ // of 'low' must be replicated as the entire 'high', so the only valid
+ // values for 'high' are 0 and -1.
+
+ qint64 high;
+ *r = _mul128(v1, v2, &high);
+ if (high == 0)
+ return *r < 0;
+ if (high == -1)
+ return *r >= 0;
+ return true;
}
-#else
-inline bool sub_overflow(int v1, int v2, int *r)
-{
- qint64 t = qint64(v1) - v2;
- *r = static_cast<int>(t);
- return t > std::numeric_limits<int>::max() || t < std::numeric_limits<int>::min();
-}
-#endif
-
-#if (defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 500) || QT_HAS_BUILTIN(__builtin_smul_overflow)
-inline bool mul_overflow(int v1, int v2, int *r)
-{ return __builtin_smul_overflow(v1, v2, r); }
-#elif defined(Q_CC_GNU) && defined(Q_PROCESSOR_X86)
-inline bool mul_overflow(int v1, int v2, int *r)
-{
- quint8 overflow = 0;
- int res = v1;
-
- asm ("imul %2, %1\n"
- "seto %0"
- : "=q" (overflow), "=r" (res)
- : "r" (v2), "1" (res)
- : "cc"
- );
- *r = res;
- return overflow;
-}
-#else
-inline bool mul_overflow(int v1, int v2, int *r)
-{
- qint64 t = qint64(v1) * v2;
- *r = static_cast<int>(t);
- return t > std::numeric_limits<int>::max() || t < std::numeric_limits<int>::min();
-}
-#endif
-
+# endif // x86-64
+# endif // MSVC x86
+#endif // !GCC
}
+#endif // Q_CLANG_QDOC
QT_END_NAMESPACE
diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp
index 72ba299280..9143e04d45 100644
--- a/src/corelib/global/qrandom.cpp
+++ b/src/corelib/global/qrandom.cpp
@@ -671,7 +671,7 @@ inline QRandomGenerator::SystemGenerator &QRandomGenerator::SystemGenerator::sel
*/
/*!
- \fn QRandomGenerator::QRandomGenerator(const quint32 (&seedBuffer)[N])
+ \fn template <qsizetype N> QRandomGenerator::QRandomGenerator(const quint32 (&seedBuffer)[N])
\overload
Initializes this QRandomGenerator object with the values found in the
@@ -765,9 +765,9 @@ inline QRandomGenerator::SystemGenerator &QRandomGenerator::SystemGenerator::sel
/*!
\typedef QRandomGenerator::result_type
- A typedef to the type that operator()() returns. That is, quint32.
+ A typedef to the type that operator() returns. That is, quint32.
- \sa {QRandomGenerator::operator()}{operator()()}
+ \sa operator()
*/
/*!
@@ -837,7 +837,7 @@ inline QRandomGenerator::SystemGenerator &QRandomGenerator::SystemGenerator::sel
*/
/*!
- \fn void QRandomGenerator::generate(ForwardIterator begin, ForwardIterator end)
+ \fn template <typename ForwardIterator> void QRandomGenerator::generate(ForwardIterator begin, ForwardIterator end)
Generates 32-bit quantities and stores them in the range between \a begin
and \a end. This function is equivalent to (and is implemented as):
@@ -874,7 +874,7 @@ inline QRandomGenerator::SystemGenerator &QRandomGenerator::SystemGenerator::sel
*/
/*!
- \fn void QRandomGenerator::fillRange(UInt *buffer, qsizetype count)
+ \fn template <typename UInt> void QRandomGenerator::fillRange(UInt *buffer, qsizetype count)
Generates \a count 32- or 64-bit quantities (depending on the type \c UInt)
and stores them in the buffer pointed by \a buffer. This is the most
@@ -894,7 +894,7 @@ inline QRandomGenerator::SystemGenerator &QRandomGenerator::SystemGenerator::sel
*/
/*!
- \fn void QRandomGenerator::fillRange(UInt (&buffer)[N})
+ \fn template <typename UInt, size_t N> void QRandomGenerator::fillRange(UInt (&buffer)[N])
Generates \c N 32- or 64-bit quantities (depending on the type \c UInt) and
stores them in the \a buffer array. This is the most efficient way to
@@ -1108,18 +1108,11 @@ inline QRandomGenerator::SystemGenerator &QRandomGenerator::SystemGenerator::sel
*/
/*!
- \fn QRandomGenerator64::QRandomGenerator64(const QRandomGenerator &other)
- \internal
-
- Creates a copy.
-*/
-
-/*!
\typedef QRandomGenerator64::result_type
- A typedef to the type that operator()() returns. That is, quint64.
+ A typedef to the type that operator() returns. That is, quint64.
- \sa {QRandomGenerator64::operator()}{operator()()}
+ \sa operator()
*/
/*!
@@ -1285,20 +1278,56 @@ void QRandomGenerator::_fillRange(void *buffer, void *bufferEnd)
std::generate(begin, end, [this]() { return storage.engine()(); });
}
-#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) && (__ANDROID_API__ < 21)
-typedef QThreadStorage<QJNIObjectPrivate> AndroidRandomStorage;
-Q_GLOBAL_STATIC(AndroidRandomStorage, randomTLS)
+namespace {
+struct QRandEngine
+{
+ std::minstd_rand engine;
+ QRandEngine() : engine(1) {}
-#elif defined(Q_OS_UNIX) && !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && (_POSIX_THREAD_SAFE_FUNCTIONS - 0 > 0)
-using SeedStorageType = QtPrivate::FunctionPointer<decltype(&srand)>::Arguments::Car;
+ int generate()
+ {
+ std::minstd_rand::result_type v = engine();
+ if (std::numeric_limits<int>::max() != RAND_MAX)
+ v %= uint(RAND_MAX) + 1;
+
+ return int(v);
+ }
+
+ void seed(std::minstd_rand::result_type q)
+ {
+ engine.seed(q);
+ }
+};
+}
-typedef QThreadStorage<SeedStorageType *> SeedStorage;
-Q_GLOBAL_STATIC(SeedStorage, randTLS) // Thread Local Storage for seed value
+#if defined(QT_NO_THREAD) || defined(Q_OS_WIN)
+// On Windows srand() and rand() already use Thread-Local-Storage
+// to store the seed between calls
+static inline QRandEngine *randTLS()
+{
+ return nullptr;
+}
+#elif defined(Q_COMPILER_THREAD_LOCAL)
+static inline QRandEngine *randTLS()
+{
+ thread_local QRandEngine r;
+ return &r;
+}
+#else
+Q_GLOBAL_STATIC(QThreadStorage<QRandEngine>, g_randTLS)
+static inline QRandEngine *randTLS()
+{
+ auto tls = g_randTLS();
+ if (!tls)
+ return nullptr;
+ return &tls->localData();
+}
#endif
/*!
\relates <QtGlobal>
+ \deprecated
\since 4.2
Thread-safe version of the standard C++ \c srand() function.
@@ -1310,49 +1339,23 @@ Q_GLOBAL_STATIC(SeedStorage, randTLS) // Thread Local Storage for seed value
if two threads call qsrand(1) and subsequently call qrand(), the threads will get
the same random number sequence.
+ \note This function is deprecated. In new applications, use
+ QRandomGenerator instead.
+
\sa qrand(), QRandomGenerator
*/
void qsrand(uint seed)
{
-#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) && (__ANDROID_API__ < 21)
- if (randomTLS->hasLocalData()) {
- randomTLS->localData().callMethod<void>("setSeed", "(J)V", jlong(seed));
- return;
- }
-
- QJNIObjectPrivate random("java/util/Random",
- "(J)V",
- jlong(seed));
- if (!random.isValid()) {
- srand(seed);
- return;
- }
-
- randomTLS->setLocalData(random);
-#elif defined(Q_OS_UNIX) && !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && (_POSIX_THREAD_SAFE_FUNCTIONS - 0 > 0)
- SeedStorage *seedStorage = randTLS();
- if (seedStorage) {
- SeedStorageType *pseed = seedStorage->localData();
- if (!pseed)
- seedStorage->setLocalData(pseed = new SeedStorageType);
- *pseed = seed;
- } else {
- //global static seed storage should always exist,
- //except after being deleted by QGlobalStaticDeleter.
- //But since it still can be called from destructor of another
- //global static object, fallback to srand(seed)
+ auto prng = randTLS();
+ if (prng)
+ prng->seed(seed);
+ else
srand(seed);
- }
-#else
- // On Windows srand() and rand() already use Thread-Local-Storage
- // to store the seed between calls
- // this is also valid for QT_NO_THREAD
- srand(seed);
-#endif
}
/*!
\relates <QtGlobal>
+ \deprecated
\since 4.2
Thread-safe version of the standard C++ \c rand() function.
@@ -1366,52 +1369,18 @@ void qsrand(uint seed)
step is skipped, then the sequence will be pre-seeded with a constant
value.
- \sa qsrand(), QRandomGenerator
+ \note This function is deprecated. In new applications, use
+ QRandomGenerator instead.
+
+ \sa qrand(), QRandomGenerator
*/
int qrand()
{
-#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED) && (__ANDROID_API__ < 21)
- AndroidRandomStorage *randomStorage = randomTLS();
- if (!randomStorage)
+ auto prng = randTLS();
+ if (prng)
+ return prng->generate();
+ else
return rand();
-
- if (randomStorage->hasLocalData()) {
- return randomStorage->localData().callMethod<jint>("nextInt",
- "(I)I",
- RAND_MAX);
- }
-
- QJNIObjectPrivate random("java/util/Random",
- "(J)V",
- jlong(1));
-
- if (!random.isValid())
- return rand();
-
- randomStorage->setLocalData(random);
- return random.callMethod<jint>("nextInt", "(I)I", RAND_MAX);
-#elif defined(Q_OS_UNIX) && !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && (_POSIX_THREAD_SAFE_FUNCTIONS - 0 > 0)
- SeedStorage *seedStorage = randTLS();
- if (seedStorage) {
- SeedStorageType *pseed = seedStorage->localData();
- if (!pseed) {
- seedStorage->setLocalData(pseed = new SeedStorageType);
- *pseed = 1;
- }
- return rand_r(pseed);
- } else {
- //global static seed storage should always exist,
- //except after being deleted by QGlobalStaticDeleter.
- //But since it still can be called from destructor of another
- //global static object, fallback to rand()
- return rand();
- }
-#else
- // On Windows srand() and rand() already use Thread-Local-Storage
- // to store the seed between calls
- // this is also valid for QT_NO_THREAD
- return rand();
-#endif
}
QT_END_NAMESPACE
diff --git a/src/corelib/global/qsysinfo.h b/src/corelib/global/qsysinfo.h
index 6b73a17dc5..a3fa0fcb27 100644
--- a/src/corelib/global/qsysinfo.h
+++ b/src/corelib/global/qsysinfo.h
@@ -240,6 +240,8 @@ QT_WARNING_POP
static QString prettyProductName();
static QString machineHostName();
+ static QByteArray machineUniqueId();
+ static QByteArray bootUniqueId();
};
#undef QT_SYSINFO_DEPRECATED_X
diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h
index 4a2c3f79bb..ff0e03108b 100644
--- a/src/corelib/global/qsystemdetection.h
+++ b/src/corelib/global/qsystemdetection.h
@@ -52,30 +52,18 @@
IOS - iOS
WATCHOS - watchOS
TVOS - tvOS
- MSDOS - MS-DOS and Windows
- OS2 - OS/2
- OS2EMX - XFree86 on OS/2 (not PM)
WIN32 - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
- WINRT - WinRT (Windows 8 Runtime)
+ WINRT - WinRT (Windows Runtime)
CYGWIN - Cygwin
SOLARIS - Sun Solaris
HPUX - HP-UX
- ULTRIX - DEC Ultrix
LINUX - Linux [has variants]
FREEBSD - FreeBSD [has variants]
NETBSD - NetBSD
OPENBSD - OpenBSD
- BSDI - BSD/OS
INTERIX - Interix
- IRIX - SGI Irix
- OSF - HP Tru64 UNIX
- SCO - SCO OpenServer 5
- UNIXWARE - UnixWare 7, Open UNIX 8
AIX - AIX
HURD - GNU Hurd
- DGUX - DG/UX
- RELIANT - Reliant UNIX
- DYNIX - DYNIX/ptx
QNX - QNX [has variants]
QNX6 - QNX RTP 6.1
LYNX - LynxOS
@@ -147,10 +135,6 @@
# define Q_OS_SOLARIS
#elif defined(hpux) || defined(__hpux)
# define Q_OS_HPUX
-#elif defined(__ultrix) || defined(ultrix)
-# define Q_OS_ULTRIX
-#elif defined(sinix)
-# define Q_OS_RELIANT
#elif defined(__native_client__)
# define Q_OS_NACL
#elif defined(__linux__) || defined(__linux)
@@ -167,34 +151,17 @@
#elif defined(__OpenBSD__)
# define Q_OS_OPENBSD
# define Q_OS_BSD4
-#elif defined(__bsdi__)
-# define Q_OS_BSDI
-# define Q_OS_BSD4
#elif defined(__INTERIX)
# define Q_OS_INTERIX
# define Q_OS_BSD4
-#elif defined(__sgi)
-# define Q_OS_IRIX
-#elif defined(__osf__)
-# define Q_OS_OSF
#elif defined(_AIX)
# define Q_OS_AIX
#elif defined(__Lynx__)
# define Q_OS_LYNX
#elif defined(__GNU__)
# define Q_OS_HURD
-#elif defined(__DGUX__)
-# define Q_OS_DGUX
#elif defined(__QNXNTO__)
# define Q_OS_QNX
-#elif defined(_SEQUENT_)
-# define Q_OS_DYNIX
-#elif defined(_SCO_DS) /* SCO OpenServer 5 + GCC */
-# define Q_OS_SCO
-#elif defined(__USLC__) /* all SCO platforms + UDK or OUDK */
-# define Q_OS_UNIXWARE
-#elif defined(__svr4__) && defined(i386) /* Open UNIX 8 + GCC */
-# define Q_OS_UNIXWARE
#elif defined(__INTEGRITY)
# define Q_OS_INTEGRITY
#elif defined(VXWORKS) /* there is no "real" VxWorks define - this has to be set in the mkspec! */
diff --git a/src/corelib/global/qtrace_p.h b/src/corelib/global/qtrace_p.h
new file mode 100644
index 0000000000..ab8fc14af5
--- /dev/null
+++ b/src/corelib/global/qtrace_p.h
@@ -0,0 +1,126 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTRACE_P_H
+#define QTRACE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+/*
+ * The Qt tracepoints API consists of only three macros:
+ *
+ * - Q_TRACE(tracepoint, args...)
+ * Fires 'tracepoint' if it is enabled.
+ *
+ * - Q_UNCONDITIONAL_TRACE(tracepoint, args...)
+ * Fires 'tracepoint' unconditionally: no check is performed to query
+ * whether 'tracepoint' is enabled.
+ *
+ * - Q_TRACE_ENABLED(tracepoint)
+ * Returns 'true' if 'tracepoint' is enabled; false otherwise.
+ *
+ * When using LTTNG, Q_TRACE, Q_UNCONDITIONAL_TRACE and Q_TRACE_ENABLED map
+ * ultimately to tracepoint(), do_tracepoint() and tracepoint_enabled(),
+ * respectively, described on the lttng-ust manpage (man 3 lttng-ust).
+ *
+ * On ETW, Q_TRACE() and Q_UNCONDITIONAL_TRACE() are equivalent, ultimately
+ * amounting to a call to TraceLoggingWrite(), whereas Q_TRACE_ENABLED()
+ * wraps around TraceLoggingProviderEnabled().
+ *
+ * A tracepoint provider is defined in a separate file, that follows the
+ * following format:
+ *
+ * tracepoint_name(arg_type arg_name, ...)
+ *
+ * For instance:
+ *
+ * qcoreapplication_ctor(int argc, const char * const argv)
+ * qcoreapplication_foo(int argc, const char[10] argv)
+ * qcoreapplication_baz(const char[len] some_string, unsigned int len)
+ * qcoreapplication_qstring(const QString &foo)
+ * qcoreapplication_qrect(const QRect &rect)
+ *
+ * The provider file is then parsed by src/tools/tracegen, which can be
+ * switched to output either ETW or LTTNG tracepoint definitions. The provider
+ * name is deduced to be basename(provider_file).
+ *
+ * To use the above (inside qtcore), you need to include
+ * <providername_tracepoints_p.h>. After that, the following call becomes
+ * possible:
+ *
+ * Q_TRACE(qcoreapplication_qrect, myRect);
+ *
+ * Currently, all C++ primitive non-pointer types are supported for
+ * arguments. Additionally, char * is supported, and is assumed to
+ * be a NULL-terminated string. Finally, the following subset of Qt types also
+ * currently supported:
+ *
+ * - QString
+ * - QByteArray
+ * - QUrl
+ * - QRect
+ *
+ * Dynamic arrays are supported using the syntax illustrated by
+ * qcoreapplication_baz above.
+ */
+
+QT_BEGIN_NAMESPACE
+
+#if defined(Q_TRACEPOINT) && !defined(QT_BOOTSTRAPPED)
+# define Q_TRACE(x, ...) QtPrivate::trace_ ## x(__VA_ARGS__)
+# define Q_UNCONDITIONAL_TRACE(x, ...) QtPrivate::do_trace_ ## x(__VA_ARGS__)
+# define Q_TRACE_ENABLED(x) QtPrivate::trace_ ## x ## _enabled()
+#else
+# define Q_TRACE(x, ...)
+# define Q_UNCONDITIONAL_TRACE(x, ...)
+# define Q_TRACE_ENABLED(x) false
+#endif // defined(Q_TRACEPOINT) && !defined(QT_BOOTSTRAPPED)
+
+QT_END_NAMESPACE
+
+#endif // QTRACE_P_H
diff --git a/src/corelib/global/qversiontagging.cpp b/src/corelib/global/qversiontagging.cpp
index e3d4037a16..cbfd93f135 100644
--- a/src/corelib/global/qversiontagging.cpp
+++ b/src/corelib/global/qversiontagging.cpp
@@ -84,6 +84,16 @@ make_versioned_symbol(SYM, QT_VERSION_MAJOR, 8, "@");
make_versioned_symbol(SYM, QT_VERSION_MAJOR, 9, "@");
#endif
#if QT_VERSION_MINOR > 10
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 10, "@");
+#endif
+#if QT_VERSION_MINOR > 11
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 11, "@");
+#endif
+#if QT_VERSION_MINOR > 12
+make_versioned_symbol(SYM, QT_VERSION_MAJOR, 12, "@");
+#endif
+#if QT_VERSION_MINOR > 13
+// We don't expect there will be a Qt 5.13
# error "Please update this file with more Qt versions."
#endif
diff --git a/src/corelib/io/QTEMPORARYFILE_LICENSE.txt b/src/corelib/io/QTEMPORARYFILE_LICENSE.txt
deleted file mode 100644
index f5f1a2e05e..0000000000
--- a/src/corelib/io/QTEMPORARYFILE_LICENSE.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 1987, 1993
- The Regents of the University of California. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. Neither the name of the University nor the names of its contributors
- may be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri
index 24f27f6b24..d138ab2f00 100644
--- a/src/corelib/io/io.pri
+++ b/src/corelib/io/io.pri
@@ -3,8 +3,6 @@
HEADERS += \
io/qabstractfileengine_p.h \
io/qbuffer.h \
- io/qdatastream.h \
- io/qdatastream_p.h \
io/qdataurl_p.h \
io/qdebug.h \
io/qdebug_p.h \
@@ -22,8 +20,6 @@ HEADERS += \
io/qlockfile.h \
io/qlockfile_p.h \
io/qnoncontiguousbytedevice_p.h \
- io/qtextstream.h \
- io/qtextstream_p.h \
io/qtemporarydir.h \
io/qtemporaryfile.h \
io/qtemporaryfile_p.h \
@@ -57,7 +53,6 @@ HEADERS += \
SOURCES += \
io/qabstractfileengine.cpp \
io/qbuffer.cpp \
- io/qdatastream.cpp \
io/qdataurl.cpp \
io/qtldurl.cpp \
io/qdebug.cpp \
@@ -71,7 +66,6 @@ SOURCES += \
io/qlockfile.cpp \
io/qnoncontiguousbytedevice.cpp \
io/qstorageinfo.cpp \
- io/qtextstream.cpp \
io/qtemporarydir.cpp \
io/qtemporaryfile.cpp \
io/qresource.cpp \
diff --git a/src/corelib/io/qbuffer.cpp b/src/corelib/io/qbuffer.cpp
index 86dd737809..e0b9c41323 100644
--- a/src/corelib/io/qbuffer.cpp
+++ b/src/corelib/io/qbuffer.cpp
@@ -60,8 +60,8 @@ public:
QByteArray *buf;
QByteArray defaultBuf;
- virtual qint64 peek(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
- virtual QByteArray peek(qint64 maxSize) Q_DECL_OVERRIDE;
+ virtual qint64 peek(char *data, qint64 maxSize) override;
+ virtual QByteArray peek(qint64 maxSize) override;
#ifndef QT_NO_QOBJECT
// private slots
diff --git a/src/corelib/io/qbuffer.h b/src/corelib/io/qbuffer.h
index fd05dff311..39e1e7b39d 100644
--- a/src/corelib/io/qbuffer.h
+++ b/src/corelib/io/qbuffer.h
@@ -57,8 +57,8 @@ class Q_CORE_EXPORT QBuffer : public QIODevice
public:
#ifndef QT_NO_QOBJECT
- explicit QBuffer(QObject *parent = Q_NULLPTR);
- QBuffer(QByteArray *buf, QObject *parent = Q_NULLPTR);
+ explicit QBuffer(QObject *parent = nullptr);
+ QBuffer(QByteArray *buf, QObject *parent = nullptr);
#else
QBuffer();
explicit QBuffer(QByteArray *buf);
@@ -73,22 +73,22 @@ public:
inline void setData(const char *data, int len);
const QByteArray &data() const;
- bool open(OpenMode openMode) Q_DECL_OVERRIDE;
+ bool open(OpenMode openMode) override;
- void close() Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 pos() const Q_DECL_OVERRIDE;
- bool seek(qint64 off) Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
- bool canReadLine() const Q_DECL_OVERRIDE;
+ void close() override;
+ qint64 size() const override;
+ qint64 pos() const override;
+ bool seek(qint64 off) override;
+ bool atEnd() const override;
+ bool canReadLine() const override;
protected:
#ifndef QT_NO_QOBJECT
- void connectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
- void disconnectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
+ void connectNotify(const QMetaMethod &) override;
+ void disconnectNotify(const QMetaMethod &) override;
#endif
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 readData(char *data, qint64 maxlen) override;
+ qint64 writeData(const char *data, qint64 len) override;
private:
Q_DECLARE_PRIVATE(QBuffer)
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
deleted file mode 100644
index 1486d3630c..0000000000
--- a/src/corelib/io/qdatastream.cpp
+++ /dev/null
@@ -1,1399 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdatastream.h"
-#include "qdatastream_p.h"
-
-#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
-#include "qbuffer.h"
-#include "qfloat16.h"
-#include "qstring.h"
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include "qendian.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \class QDataStream
- \inmodule QtCore
- \reentrant
- \brief The QDataStream class provides serialization of binary data
- to a QIODevice.
-
- \ingroup io
-
-
- A data stream is a binary stream of encoded information which is
- 100% independent of the host computer's operating system, CPU or
- byte order. For example, a data stream that is written by a PC
- under Windows can be read by a Sun SPARC running Solaris.
-
- You can also use a data stream to read/write \l{raw}{raw
- unencoded binary data}. If you want a "parsing" input stream, see
- QTextStream.
-
- The QDataStream class implements the serialization of C++'s basic
- data types, like \c char, \c short, \c int, \c{char *}, etc.
- Serialization of more complex data is accomplished by breaking up
- the data into primitive units.
-
- A data stream cooperates closely with a QIODevice. A QIODevice
- represents an input/output medium one can read data from and write
- data to. The QFile class is an example of an I/O device.
-
- Example (write binary data to a stream):
-
- \snippet code/src_corelib_io_qdatastream.cpp 0
-
- Example (read binary data from a stream):
-
- \snippet code/src_corelib_io_qdatastream.cpp 1
-
- Each item written to the stream is written in a predefined binary
- format that varies depending on the item's type. Supported Qt
- types include QBrush, QColor, QDateTime, QFont, QPixmap, QString,
- QVariant and many others. For the complete list of all Qt types
- supporting data streaming see \l{Serializing Qt Data Types}.
-
- For integers it is best to always cast to a Qt integer type for
- writing, and to read back into the same Qt integer type. This
- ensures that you get integers of the size you want and insulates
- you from compiler and platform differences.
-
- To take one example, a \c{char *} string is written as a 32-bit
- integer equal to the length of the string including the '\\0' byte,
- followed by all the characters of the string including the
- '\\0' byte. When reading a \c{char *} string, 4 bytes are read to
- create the 32-bit length value, then that many characters for the
- \c {char *} string including the '\\0' terminator are read.
-
- The initial I/O device is usually set in the constructor, but can be
- changed with setDevice(). If you've reached the end of the data
- (or if there is no I/O device set) atEnd() will return true.
-
- \section1 Versioning
-
- QDataStream's binary format has evolved since Qt 1.0, and is
- likely to continue evolving to reflect changes done in Qt. When
- inputting or outputting complex types, it's very important to
- make sure that the same version of the stream (version()) is used
- for reading and writing. If you need both forward and backward
- compatibility, you can hardcode the version number in the
- application:
-
- \snippet code/src_corelib_io_qdatastream.cpp 2
-
- If you are producing a new binary data format, such as a file
- format for documents created by your application, you could use a
- QDataStream to write the data in a portable format. Typically, you
- would write a brief header containing a magic string and a version
- number to give yourself room for future expansion. For example:
-
- \snippet code/src_corelib_io_qdatastream.cpp 3
-
- Then read it in with:
-
- \snippet code/src_corelib_io_qdatastream.cpp 4
-
- You can select which byte order to use when serializing data. The
- default setting is big endian (MSB first). Changing it to little
- endian breaks the portability (unless the reader also changes to
- little endian). We recommend keeping this setting unless you have
- special requirements.
-
- \target raw
- \section1 Reading and Writing Raw Binary Data
-
- You may wish to read/write your own raw binary data to/from the
- data stream directly. Data may be read from the stream into a
- preallocated \c{char *} using readRawData(). Similarly data can be
- written to the stream using writeRawData(). Note that any
- encoding/decoding of the data must be done by you.
-
- A similar pair of functions is readBytes() and writeBytes(). These
- differ from their \e raw counterparts as follows: readBytes()
- reads a quint32 which is taken to be the length of the data to be
- read, then that number of bytes is read into the preallocated
- \c{char *}; writeBytes() writes a quint32 containing the length of the
- data, followed by the data. Note that any encoding/decoding of
- the data (apart from the length quint32) must be done by you.
-
- \section1 Reading and Writing Qt Collection Classes
-
- The Qt container classes can also be serialized to a QDataStream.
- These include QList, QLinkedList, QVector, QSet, QHash, and QMap.
- The stream operators are declared as non-members of the classes.
-
- \target Serializing Qt Classes
- \section1 Reading and Writing Other Qt Classes
-
- In addition to the overloaded stream operators documented here,
- any Qt classes that you might want to serialize to a QDataStream
- will have appropriate stream operators declared as non-member of
- the class:
-
- \code
- QDataStream &operator<<(QDataStream &, const QXxx &);
- QDataStream &operator>>(QDataStream &, QXxx &);
- \endcode
-
- For example, here are the stream operators declared as non-members
- of the QImage class:
-
- \code
- QDataStream & operator<< (QDataStream& stream, const QImage& image);
- QDataStream & operator>> (QDataStream& stream, QImage& image);
- \endcode
-
- To see if your favorite Qt class has similar stream operators
- defined, check the \b {Related Non-Members} section of the
- class's documentation page.
-
- \section1 Using Read Transactions
-
- When a data stream operates on an asynchronous device, the chunks of data
- can arrive at arbitrary points in time. The QDataStream class implements
- a transaction mechanism that provides the ability to read the data
- atomically with a series of stream operators. As an example, you can
- handle incomplete reads from a socket by using a transaction in a slot
- connected to the readyRead() signal:
-
- \snippet code/src_corelib_io_qdatastream.cpp 6
-
- If no full packet is received, this code restores the stream to the
- initial position, after which you need to wait for more data to arrive.
-
- \sa QTextStream, QVariant
-*/
-
-/*!
- \enum QDataStream::ByteOrder
-
- The byte order used for reading/writing the data.
-
- \value BigEndian Most significant byte first (the default)
- \value LittleEndian Least significant byte first
-*/
-
-/*!
- \enum QDataStream::FloatingPointPrecision
-
- The precision of floating point numbers used for reading/writing the data. This will only have
- an effect if the version of the data stream is Qt_4_6 or higher.
-
- \warning The floating point precision must be set to the same value on the object that writes
- and the object that reads the data stream.
-
- \value SinglePrecision All floating point numbers in the data stream have 32-bit precision.
- \value DoublePrecision All floating point numbers in the data stream have 64-bit precision.
-
- \sa setFloatingPointPrecision(), floatingPointPrecision()
-*/
-
-/*!
- \enum QDataStream::Status
-
- This enum describes the current status of the data stream.
-
- \value Ok The data stream is operating normally.
- \value ReadPastEnd The data stream has read past the end of the
- data in the underlying device.
- \value ReadCorruptData The data stream has read corrupt data.
- \value WriteFailed The data stream cannot write to the underlying device.
-*/
-
-/*****************************************************************************
- QDataStream member functions
- *****************************************************************************/
-
-#define Q_VOID
-
-#undef CHECK_STREAM_PRECOND
-#ifndef QT_NO_DEBUG
-#define CHECK_STREAM_PRECOND(retVal) \
- if (!dev) { \
- qWarning("QDataStream: No device"); \
- return retVal; \
- }
-#else
-#define CHECK_STREAM_PRECOND(retVal) \
- if (!dev) { \
- return retVal; \
- }
-#endif
-
-#define CHECK_STREAM_WRITE_PRECOND(retVal) \
- CHECK_STREAM_PRECOND(retVal) \
- if (q_status != Ok) \
- return retVal;
-
-#define CHECK_STREAM_TRANSACTION_PRECOND(retVal) \
- if (!d || d->transactionDepth == 0) { \
- qWarning("QDataStream: No transaction in progress"); \
- return retVal; \
- }
-
-/*!
- Constructs a data stream that has no I/O device.
-
- \sa setDevice()
-*/
-
-QDataStream::QDataStream()
-{
- dev = 0;
- owndev = false;
- byteorder = BigEndian;
- ver = Qt_DefaultCompiledVersion;
- noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
- q_status = Ok;
-}
-
-/*!
- Constructs a data stream that uses the I/O device \a d.
-
- \sa setDevice(), device()
-*/
-
-QDataStream::QDataStream(QIODevice *d)
-{
- dev = d; // set device
- owndev = false;
- byteorder = BigEndian; // default byte order
- ver = Qt_DefaultCompiledVersion;
- noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
- q_status = Ok;
-}
-
-/*!
- \fn QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)
-
- Constructs a data stream that operates on a byte array, \a a. The
- \a mode describes how the device is to be used.
-
- Alternatively, you can use QDataStream(const QByteArray &) if you
- just want to read from a byte array.
-
- Since QByteArray is not a QIODevice subclass, internally a QBuffer
- is created to wrap the byte array.
-*/
-
-QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode flags)
-{
- QBuffer *buf = new QBuffer(a);
-#ifndef QT_NO_QOBJECT
- buf->blockSignals(true);
-#endif
- buf->open(flags);
- dev = buf;
- owndev = true;
- byteorder = BigEndian;
- ver = Qt_DefaultCompiledVersion;
- noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
- q_status = Ok;
-}
-
-/*!
- Constructs a read-only data stream that operates on byte array \a a.
- Use QDataStream(QByteArray*, int) if you want to write to a byte
- array.
-
- Since QByteArray is not a QIODevice subclass, internally a QBuffer
- is created to wrap the byte array.
-*/
-QDataStream::QDataStream(const QByteArray &a)
-{
- QBuffer *buf = new QBuffer;
-#ifndef QT_NO_QOBJECT
- buf->blockSignals(true);
-#endif
- buf->setData(a);
- buf->open(QIODevice::ReadOnly);
- dev = buf;
- owndev = true;
- byteorder = BigEndian;
- ver = Qt_DefaultCompiledVersion;
- noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
- q_status = Ok;
-}
-
-/*!
- Destroys the data stream.
-
- The destructor will not affect the current I/O device, unless it is
- an internal I/O device (e.g. a QBuffer) processing a QByteArray
- passed in the \e constructor, in which case the internal I/O device
- is destroyed.
-*/
-
-QDataStream::~QDataStream()
-{
- if (owndev)
- delete dev;
-}
-
-
-/*!
- \fn QIODevice *QDataStream::device() const
-
- Returns the I/O device currently set, or 0 if no
- device is currently set.
-
- \sa setDevice()
-*/
-
-/*!
- void QDataStream::setDevice(QIODevice *d)
-
- Sets the I/O device to \a d, which can be 0
- to unset to current I/O device.
-
- \sa device()
-*/
-
-void QDataStream::setDevice(QIODevice *d)
-{
- if (owndev) {
- delete dev;
- owndev = false;
- }
- dev = d;
-}
-
-/*!
- \obsolete
- Unsets the I/O device.
- Use setDevice(0) instead.
-*/
-
-void QDataStream::unsetDevice()
-{
- setDevice(0);
-}
-
-
-/*!
- \fn bool QDataStream::atEnd() const
-
- Returns \c true if the I/O device has reached the end position (end of
- the stream or file) or if there is no I/O device set; otherwise
- returns \c false.
-
- \sa QIODevice::atEnd()
-*/
-
-bool QDataStream::atEnd() const
-{
- return dev ? dev->atEnd() : true;
-}
-
-/*!
- Returns the floating point precision of the data stream.
-
- \since 4.6
-
- \sa FloatingPointPrecision, setFloatingPointPrecision()
-*/
-QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const
-{
- return d == 0 ? QDataStream::DoublePrecision : d->floatingPointPrecision;
-}
-
-/*!
- Sets the floating point precision of the data stream to \a precision. If the floating point precision is
- DoublePrecision and the version of the data stream is Qt_4_6 or higher, all floating point
- numbers will be written and read with 64-bit precision. If the floating point precision is
- SinglePrecision and the version is Qt_4_6 or higher, all floating point numbers will be written
- and read with 32-bit precision.
-
- For versions prior to Qt_4_6, the precision of floating point numbers in the data stream depends
- on the stream operator called.
-
- The default is DoublePrecision.
-
- Note that this property does not affect the serialization or deserialization of \c qfloat16
- instances.
-
- \warning This property must be set to the same value on the object that writes and the object
- that reads the data stream.
-
- \since 4.6
-*/
-void QDataStream::setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision)
-{
- if (d == 0)
- d.reset(new QDataStreamPrivate());
- d->floatingPointPrecision = precision;
-}
-
-/*!
- Returns the status of the data stream.
-
- \sa Status, setStatus(), resetStatus()
-*/
-
-QDataStream::Status QDataStream::status() const
-{
- return q_status;
-}
-
-/*!
- Resets the status of the data stream.
-
- \sa Status, status(), setStatus()
-*/
-void QDataStream::resetStatus()
-{
- q_status = Ok;
-}
-
-/*!
- Sets the status of the data stream to the \a status given.
-
- Subsequent calls to setStatus() are ignored until resetStatus()
- is called.
-
- \sa Status, status(), resetStatus()
-*/
-void QDataStream::setStatus(Status status)
-{
- if (q_status == Ok)
- q_status = status;
-}
-
-/*!
- \fn int QDataStream::byteOrder() const
-
- Returns the current byte order setting -- either BigEndian or
- LittleEndian.
-
- \sa setByteOrder()
-*/
-
-/*!
- Sets the serialization byte order to \a bo.
-
- The \a bo parameter can be QDataStream::BigEndian or
- QDataStream::LittleEndian.
-
- The default setting is big endian. We recommend leaving this
- setting unless you have special requirements.
-
- \sa byteOrder()
-*/
-
-void QDataStream::setByteOrder(ByteOrder bo)
-{
- byteorder = bo;
- if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
- noswap = (byteorder == BigEndian);
- else
- noswap = (byteorder == LittleEndian);
-}
-
-
-/*!
- \enum QDataStream::Version
-
- This enum provides symbolic synonyms for the data serialization
- format version numbers.
-
- \value Qt_1_0 Version 1 (Qt 1.x)
- \value Qt_2_0 Version 2 (Qt 2.0)
- \value Qt_2_1 Version 3 (Qt 2.1, 2.2, 2.3)
- \value Qt_3_0 Version 4 (Qt 3.0)
- \value Qt_3_1 Version 5 (Qt 3.1, 3.2)
- \value Qt_3_3 Version 6 (Qt 3.3)
- \value Qt_4_0 Version 7 (Qt 4.0, Qt 4.1)
- \value Qt_4_1 Version 7 (Qt 4.0, Qt 4.1)
- \value Qt_4_2 Version 8 (Qt 4.2)
- \value Qt_4_3 Version 9 (Qt 4.3)
- \value Qt_4_4 Version 10 (Qt 4.4)
- \value Qt_4_5 Version 11 (Qt 4.5)
- \value Qt_4_6 Version 12 (Qt 4.6, Qt 4.7, Qt 4.8)
- \value Qt_4_7 Same as Qt_4_6.
- \value Qt_4_8 Same as Qt_4_6.
- \value Qt_4_9 Same as Qt_4_6.
- \value Qt_5_0 Version 13 (Qt 5.0)
- \value Qt_5_1 Version 14 (Qt 5.1)
- \value Qt_5_2 Version 15 (Qt 5.2)
- \value Qt_5_3 Same as Qt_5_2
- \value Qt_5_4 Version 16 (Qt 5.4)
- \value Qt_5_5 Same as Qt_5_4
- \value Qt_5_6 Version 17 (Qt 5.6)
- \value Qt_5_7 Same as Qt_5_6
- \value Qt_5_8 Same as Qt_5_6
- \value Qt_5_9 Same as Qt_5_6
- \value Qt_5_10 Same as Qt_5_6
- \omitvalue Qt_DefaultCompiledVersion
-
- \sa setVersion(), version()
-*/
-
-/*!
- \fn int QDataStream::version() const
-
- Returns the version number of the data serialization format.
-
- \sa setVersion(), Version
-*/
-
-/*!
- \fn void QDataStream::setVersion(int v)
-
- Sets the version number of the data serialization format to \a v,
- a value of the \l Version enum.
-
- You don't \e have to set a version if you are using the current
- version of Qt, but for your own custom binary formats we
- recommend that you do; see \l{Versioning} in the Detailed
- Description.
-
- To accommodate new functionality, the datastream serialization
- format of some Qt classes has changed in some versions of Qt. If
- you want to read data that was created by an earlier version of
- Qt, or write data that can be read by a program that was compiled
- with an earlier version of Qt, use this function to modify the
- serialization format used by QDataStream.
-
- The \l Version enum provides symbolic constants for the different
- versions of Qt. For example:
-
- \snippet code/src_corelib_io_qdatastream.cpp 5
-
- \sa version(), Version
-*/
-
-/*!
- \since 5.7
-
- Starts a new read transaction on the stream.
-
- Defines a restorable point within the sequence of read operations. For
- sequential devices, read data will be duplicated internally to allow
- recovery in case of incomplete reads. For random-access devices,
- this function saves the current position of the stream. Call
- commitTransaction(), rollbackTransaction(), or abortTransaction() to
- finish the current transaction.
-
- Once a transaction is started, subsequent calls to this function will make
- the transaction recursive. Inner transactions act as agents of the
- outermost transaction (i.e., report the status of read operations to the
- outermost transaction, which can restore the position of the stream).
-
- \note Restoring to the point of the nested startTransaction() call is not
- supported.
-
- When an error occurs during a transaction (including an inner transaction
- failing), reading from the data stream is suspended (all subsequent read
- operations return empty/zero values) and subsequent inner transactions are
- forced to fail. Starting a new outermost transaction recovers from this
- state. This behavior makes it unnecessary to error-check every read
- operation separately.
-
- \sa commitTransaction(), rollbackTransaction(), abortTransaction()
-*/
-
-void QDataStream::startTransaction()
-{
- CHECK_STREAM_PRECOND(Q_VOID)
-
- if (d == 0)
- d.reset(new QDataStreamPrivate());
-
- if (++d->transactionDepth == 1) {
- dev->startTransaction();
- resetStatus();
- }
-}
-
-/*!
- \since 5.7
-
- Completes a read transaction. Returns \c true if no read errors have
- occurred during the transaction; otherwise returns \c false.
-
- If called on an inner transaction, committing will be postponed until
- the outermost commitTransaction(), rollbackTransaction(), or
- abortTransaction() call occurs.
-
- Otherwise, if the stream status indicates reading past the end of the
- data, this function restores the stream data to the point of the
- startTransaction() call. When this situation occurs, you need to wait for
- more data to arrive, after which you start a new transaction. If the data
- stream has read corrupt data or any of the inner transactions was aborted,
- this function aborts the transaction.
-
- \sa startTransaction(), rollbackTransaction(), abortTransaction()
-*/
-
-bool QDataStream::commitTransaction()
-{
- CHECK_STREAM_TRANSACTION_PRECOND(false)
- if (--d->transactionDepth == 0) {
- CHECK_STREAM_PRECOND(false)
-
- if (q_status == ReadPastEnd) {
- dev->rollbackTransaction();
- return false;
- }
- dev->commitTransaction();
- }
- return q_status == Ok;
-}
-
-/*!
- \since 5.7
-
- Reverts a read transaction.
-
- This function is commonly used to rollback the transaction when an
- incomplete read was detected prior to committing the transaction.
-
- If called on an inner transaction, reverting is delegated to the outermost
- transaction, and subsequently started inner transactions are forced to
- fail.
-
- For the outermost transaction, restores the stream data to the point of
- the startTransaction() call. If the data stream has read corrupt data or
- any of the inner transactions was aborted, this function aborts the
- transaction.
-
- If the preceding stream operations were successful, sets the status of the
- data stream to \value ReadPastEnd.
-
- \sa startTransaction(), commitTransaction(), abortTransaction()
-*/
-
-void QDataStream::rollbackTransaction()
-{
- setStatus(ReadPastEnd);
-
- CHECK_STREAM_TRANSACTION_PRECOND(Q_VOID)
- if (--d->transactionDepth != 0)
- return;
-
- CHECK_STREAM_PRECOND(Q_VOID)
- if (q_status == ReadPastEnd)
- dev->rollbackTransaction();
- else
- dev->commitTransaction();
-}
-
-/*!
- \since 5.7
-
- Aborts a read transaction.
-
- This function is commonly used to discard the transaction after
- higher-level protocol errors or loss of stream synchronization.
-
- If called on an inner transaction, aborting is delegated to the outermost
- transaction, and subsequently started inner transactions are forced to
- fail.
-
- For the outermost transaction, discards the restoration point and any
- internally duplicated data of the stream. Will not affect the current
- read position of the stream.
-
- Sets the status of the data stream to \value ReadCorruptData.
-
- \sa startTransaction(), commitTransaction(), rollbackTransaction()
-*/
-
-void QDataStream::abortTransaction()
-{
- q_status = ReadCorruptData;
-
- CHECK_STREAM_TRANSACTION_PRECOND(Q_VOID)
- if (--d->transactionDepth != 0)
- return;
-
- CHECK_STREAM_PRECOND(Q_VOID)
- dev->commitTransaction();
-}
-
-/*****************************************************************************
- QDataStream read functions
- *****************************************************************************/
-
-/*!
- \internal
-*/
-
-int QDataStream::readBlock(char *data, int len)
-{
- // Disable reads on failure in transacted stream
- if (q_status != Ok && dev->isTransactionStarted())
- return -1;
-
- const int readResult = dev->read(data, len);
- if (readResult != len)
- setStatus(ReadPastEnd);
- return readResult;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator>>(std::nullptr &ptr)
- \since 5.9
- \overload
-
- Simulates reading a \c{std::nullptr_t} from the stream into \a ptr and
- returns a reference to the stream. This function does not actually read
- anything from the stream, as \c{std::nullptr_t} values are stored as 0
- bytes.
-*/
-
-/*!
- \fn QDataStream &QDataStream::operator>>(quint8 &i)
- \overload
-
- Reads an unsigned byte from the stream into \a i, and returns a
- reference to the stream.
-*/
-
-/*!
- Reads a signed byte from the stream into \a i, and returns a
- reference to the stream.
-*/
-
-QDataStream &QDataStream::operator>>(qint8 &i)
-{
- i = 0;
- CHECK_STREAM_PRECOND(*this)
- char c;
- if (readBlock(&c, 1) == 1)
- i = qint8(c);
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator>>(quint16 &i)
- \overload
-
- Reads an unsigned 16-bit integer from the stream into \a i, and
- returns a reference to the stream.
-*/
-
-/*!
- \overload
-
- Reads a signed 16-bit integer from the stream into \a i, and
- returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator>>(qint16 &i)
-{
- i = 0;
- CHECK_STREAM_PRECOND(*this)
- if (readBlock(reinterpret_cast<char *>(&i), 2) != 2) {
- i = 0;
- } else {
- if (!noswap) {
- i = qbswap(i);
- }
- }
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator>>(quint32 &i)
- \overload
-
- Reads an unsigned 32-bit integer from the stream into \a i, and
- returns a reference to the stream.
-*/
-
-/*!
- \overload
-
- Reads a signed 32-bit integer from the stream into \a i, and
- returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator>>(qint32 &i)
-{
- i = 0;
- CHECK_STREAM_PRECOND(*this)
- if (readBlock(reinterpret_cast<char *>(&i), 4) != 4) {
- i = 0;
- } else {
- if (!noswap) {
- i = qbswap(i);
- }
- }
- return *this;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator>>(quint64 &i)
- \overload
-
- Reads an unsigned 64-bit integer from the stream, into \a i, and
- returns a reference to the stream.
-*/
-
-/*!
- \overload
-
- Reads a signed 64-bit integer from the stream into \a i, and
- returns a reference to the stream.
-*/
-
-QDataStream &QDataStream::operator>>(qint64 &i)
-{
- i = qint64(0);
- CHECK_STREAM_PRECOND(*this)
- if (version() < 6) {
- quint32 i1, i2;
- *this >> i2 >> i1;
- i = ((quint64)i1 << 32) + i2;
- } else {
- if (readBlock(reinterpret_cast<char *>(&i), 8) != 8) {
- i = qint64(0);
- } else {
- if (!noswap) {
- i = qbswap(i);
- }
- }
- }
- return *this;
-}
-
-/*!
- Reads a boolean value from the stream into \a i. Returns a
- reference to the stream.
-*/
-QDataStream &QDataStream::operator>>(bool &i)
-{
- qint8 v;
- *this >> v;
- i = !!v;
- return *this;
-}
-
-/*!
- \overload
-
- Reads a floating point number from the stream into \a f,
- using the standard IEEE 754 format. Returns a reference to the
- stream.
-
- \sa setFloatingPointPrecision()
-*/
-
-QDataStream &QDataStream::operator>>(float &f)
-{
- if (version() >= QDataStream::Qt_4_6
- && floatingPointPrecision() == QDataStream::DoublePrecision) {
- double d;
- *this >> d;
- f = d;
- return *this;
- }
-
- f = 0.0f;
- CHECK_STREAM_PRECOND(*this)
- if (readBlock(reinterpret_cast<char *>(&f), 4) != 4) {
- f = 0.0f;
- } else {
- if (!noswap) {
- union {
- float val1;
- quint32 val2;
- } x;
- x.val2 = qbswap(*reinterpret_cast<quint32 *>(&f));
- f = x.val1;
- }
- }
- return *this;
-}
-
-/*!
- \overload
-
- Reads a floating point number from the stream into \a f,
- using the standard IEEE 754 format. Returns a reference to the
- stream.
-
- \sa setFloatingPointPrecision()
-*/
-
-QDataStream &QDataStream::operator>>(double &f)
-{
- if (version() >= QDataStream::Qt_4_6
- && floatingPointPrecision() == QDataStream::SinglePrecision) {
- float d;
- *this >> d;
- f = d;
- return *this;
- }
-
- f = 0.0;
- CHECK_STREAM_PRECOND(*this)
- if (readBlock(reinterpret_cast<char *>(&f), 8) != 8) {
- f = 0.0;
- } else {
- if (!noswap) {
- union {
- double val1;
- quint64 val2;
- } x;
- x.val2 = qbswap(*reinterpret_cast<quint64 *>(&f));
- f = x.val1;
- }
- }
- return *this;
-}
-
-
-/*!
- \overload
- \since 5.9
-
- Reads a floating point number from the stream into \a f,
- using the standard IEEE 754 format. Returns a reference to the
- stream.
-*/
-QDataStream &QDataStream::operator>>(qfloat16 &f)
-{
- return *this >> reinterpret_cast<qint16&>(f);
-}
-
-
-/*!
- \overload
-
- Reads the '\\0'-terminated string \a s from the stream and returns
- a reference to the stream.
-
- The string is deserialized using \c{readBytes()}.
-
- Space for the string is allocated using \c{new []} -- the caller must
- destroy it with \c{delete []}.
-
- \sa readBytes(), readRawData()
-*/
-
-QDataStream &QDataStream::operator>>(char *&s)
-{
- uint len = 0;
- return readBytes(s, len);
-}
-
-
-/*!
- Reads the buffer \a s from the stream and returns a reference to
- the stream.
-
- The buffer \a s is allocated using \c{new []}. Destroy it with the
- \c{delete []} operator.
-
- The \a l parameter is set to the length of the buffer. If the
- string read is empty, \a l is set to 0 and \a s is set to
- a null pointer.
-
- The serialization format is a quint32 length specifier first,
- then \a l bytes of data.
-
- \sa readRawData(), writeBytes()
-*/
-
-QDataStream &QDataStream::readBytes(char *&s, uint &l)
-{
- s = 0;
- l = 0;
- CHECK_STREAM_PRECOND(*this)
-
- quint32 len;
- *this >> len;
- if (len == 0)
- return *this;
-
- const quint32 Step = 1024 * 1024;
- quint32 allocated = 0;
- char *prevBuf = 0;
- char *curBuf = 0;
-
- do {
- int blockSize = qMin(Step, len - allocated);
- prevBuf = curBuf;
- curBuf = new char[allocated + blockSize + 1];
- if (prevBuf) {
- memcpy(curBuf, prevBuf, allocated);
- delete [] prevBuf;
- }
- if (readBlock(curBuf + allocated, blockSize) != blockSize) {
- delete [] curBuf;
- return *this;
- }
- allocated += blockSize;
- } while (allocated < len);
-
- s = curBuf;
- s[len] = '\0';
- l = (uint)len;
- return *this;
-}
-
-/*!
- Reads at most \a len bytes from the stream into \a s and returns the number of
- bytes read. If an error occurs, this function returns -1.
-
- The buffer \a s must be preallocated. The data is \e not encoded.
-
- \sa readBytes(), QIODevice::read(), writeRawData()
-*/
-
-int QDataStream::readRawData(char *s, int len)
-{
- CHECK_STREAM_PRECOND(-1)
- return readBlock(s, len);
-}
-
-
-/*****************************************************************************
- QDataStream write functions
- *****************************************************************************/
-
-/*!
- \fn QDataStream &QDataStream::operator<<(std::nullptr ptr)
- \since 5.9
- \overload
-
- Simulates writing a \c{std::nullptr_t}, \a ptr, to the stream and returns a
- reference to the stream. This function does not actually write anything to
- the stream, as \c{std::nullptr_t} values are stored as 0 bytes.
-*/
-
-/*!
- \fn QDataStream &QDataStream::operator<<(quint8 i)
- \overload
-
- Writes an unsigned byte, \a i, to the stream and returns a
- reference to the stream.
-*/
-
-/*!
- Writes a signed byte, \a i, to the stream and returns a reference
- to the stream.
-*/
-
-QDataStream &QDataStream::operator<<(qint8 i)
-{
- CHECK_STREAM_WRITE_PRECOND(*this)
- if (!dev->putChar(i))
- q_status = WriteFailed;
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator<<(quint16 i)
- \overload
-
- Writes an unsigned 16-bit integer, \a i, to the stream and returns
- a reference to the stream.
-*/
-
-/*!
- \overload
-
- Writes a signed 16-bit integer, \a i, to the stream and returns a
- reference to the stream.
-*/
-
-QDataStream &QDataStream::operator<<(qint16 i)
-{
- CHECK_STREAM_WRITE_PRECOND(*this)
- if (!noswap) {
- i = qbswap(i);
- }
- if (dev->write((char *)&i, sizeof(qint16)) != sizeof(qint16))
- q_status = WriteFailed;
- return *this;
-}
-
-/*!
- \overload
-
- Writes a signed 32-bit integer, \a i, to the stream and returns a
- reference to the stream.
-*/
-
-QDataStream &QDataStream::operator<<(qint32 i)
-{
- CHECK_STREAM_WRITE_PRECOND(*this)
- if (!noswap) {
- i = qbswap(i);
- }
- if (dev->write((char *)&i, sizeof(qint32)) != sizeof(qint32))
- q_status = WriteFailed;
- return *this;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator<<(quint64 i)
- \overload
-
- Writes an unsigned 64-bit integer, \a i, to the stream and returns a
- reference to the stream.
-*/
-
-/*!
- \overload
-
- Writes a signed 64-bit integer, \a i, to the stream and returns a
- reference to the stream.
-*/
-
-QDataStream &QDataStream::operator<<(qint64 i)
-{
- CHECK_STREAM_WRITE_PRECOND(*this)
- if (version() < 6) {
- quint32 i1 = i & 0xffffffff;
- quint32 i2 = i >> 32;
- *this << i2 << i1;
- } else {
- if (!noswap) {
- i = qbswap(i);
- }
- if (dev->write((char *)&i, sizeof(qint64)) != sizeof(qint64))
- q_status = WriteFailed;
- }
- return *this;
-}
-
-/*!
- \fn QDataStream &QDataStream::operator<<(quint32 i)
- \overload
-
- Writes an unsigned integer, \a i, to the stream as a 32-bit
- unsigned integer (quint32). Returns a reference to the stream.
-*/
-
-/*!
- Writes a boolean value, \a i, to the stream. Returns a reference
- to the stream.
-*/
-
-QDataStream &QDataStream::operator<<(bool i)
-{
- CHECK_STREAM_WRITE_PRECOND(*this)
- if (!dev->putChar(qint8(i)))
- q_status = WriteFailed;
- return *this;
-}
-
-/*!
- \overload
-
- Writes a floating point number, \a f, to the stream using
- the standard IEEE 754 format. Returns a reference to the stream.
-
- \sa setFloatingPointPrecision()
-*/
-
-QDataStream &QDataStream::operator<<(float f)
-{
- if (version() >= QDataStream::Qt_4_6
- && floatingPointPrecision() == QDataStream::DoublePrecision) {
- *this << double(f);
- return *this;
- }
-
- CHECK_STREAM_WRITE_PRECOND(*this)
- float g = f; // fixes float-on-stack problem
- if (!noswap) {
- union {
- float val1;
- quint32 val2;
- } x;
- x.val1 = g;
- x.val2 = qbswap(x.val2);
-
- if (dev->write((char *)&x.val2, sizeof(float)) != sizeof(float))
- q_status = WriteFailed;
- return *this;
- }
-
- if (dev->write((char *)&g, sizeof(float)) != sizeof(float))
- q_status = WriteFailed;
- return *this;
-}
-
-
-/*!
- \overload
-
- Writes a floating point number, \a f, to the stream using
- the standard IEEE 754 format. Returns a reference to the stream.
-
- \sa setFloatingPointPrecision()
-*/
-
-QDataStream &QDataStream::operator<<(double f)
-{
- if (version() >= QDataStream::Qt_4_6
- && floatingPointPrecision() == QDataStream::SinglePrecision) {
- *this << float(f);
- return *this;
- }
-
- CHECK_STREAM_WRITE_PRECOND(*this)
- if (noswap) {
- if (dev->write((char *)&f, sizeof(double)) != sizeof(double))
- q_status = WriteFailed;
- } else {
- union {
- double val1;
- quint64 val2;
- } x;
- x.val1 = f;
- x.val2 = qbswap(x.val2);
- if (dev->write((char *)&x.val2, sizeof(double)) != sizeof(double))
- q_status = WriteFailed;
- }
- return *this;
-}
-
-
-/*!
- \fn QDataStream &QDataStream::operator<<(qfloat16 f)
- \overload
- \since 5.9
-
- Writes a floating point number, \a f, to the stream using
- the standard IEEE 754 format. Returns a reference to the stream.
-*/
-QDataStream &QDataStream::operator<<(qfloat16 f)
-{
- return *this << reinterpret_cast<qint16&>(f);
-}
-
-/*!
- \overload
-
- Writes the '\\0'-terminated string \a s to the stream and returns a
- reference to the stream.
-
- The string is serialized using \c{writeBytes()}.
-
- \sa writeBytes(), writeRawData()
-*/
-
-QDataStream &QDataStream::operator<<(const char *s)
-{
- if (!s) {
- *this << (quint32)0;
- return *this;
- }
- uint len = qstrlen(s) + 1; // also write null terminator
- *this << (quint32)len; // write length specifier
- writeRawData(s, len);
- return *this;
-}
-
-/*!
- Writes the length specifier \a len and the buffer \a s to the
- stream and returns a reference to the stream.
-
- The \a len is serialized as a quint32, followed by \a len bytes
- from \a s. Note that the data is \e not encoded.
-
- \sa writeRawData(), readBytes()
-*/
-
-QDataStream &QDataStream::writeBytes(const char *s, uint len)
-{
- CHECK_STREAM_WRITE_PRECOND(*this)
- *this << (quint32)len; // write length specifier
- if (len)
- writeRawData(s, len);
- return *this;
-}
-
-
-/*!
- Writes \a len bytes from \a s to the stream. Returns the
- number of bytes actually written, or -1 on error.
- The data is \e not encoded.
-
- \sa writeBytes(), QIODevice::write(), readRawData()
-*/
-
-int QDataStream::writeRawData(const char *s, int len)
-{
- CHECK_STREAM_WRITE_PRECOND(-1)
- int ret = dev->write(s, len);
- if (ret != len)
- q_status = WriteFailed;
- return ret;
-}
-
-/*!
- \since 4.1
-
- Skips \a len bytes from the device. Returns the number of bytes
- actually skipped, or -1 on error.
-
- This is equivalent to calling readRawData() on a buffer of length
- \a len and ignoring the buffer.
-
- \sa QIODevice::seek()
-*/
-int QDataStream::skipRawData(int len)
-{
- CHECK_STREAM_PRECOND(-1)
- if (q_status != Ok && dev->isTransactionStarted())
- return -1;
-
- const int skipResult = dev->skip(len);
- if (skipResult != len)
- setStatus(ReadPastEnd);
- return skipResult;
-}
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_DATASTREAM
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h
deleted file mode 100644
index 0a429d091a..0000000000
--- a/src/corelib/io/qdatastream.h
+++ /dev/null
@@ -1,465 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QDATASTREAM_H
-#define QDATASTREAM_H
-
-#include <QtCore/qscopedpointer.h>
-#include <QtCore/qiodevice.h>
-#include <QtCore/qpair.h>
-
-#ifdef Status
-#error qdatastream.h must be included before any header file that defines Status
-#endif
-
-QT_BEGIN_NAMESPACE
-
-class qfloat16;
-class QByteArray;
-class QIODevice;
-
-template <typename T> class QList;
-template <typename T> class QLinkedList;
-template <typename T> class QVector;
-template <typename T> class QSet;
-template <class Key, class T> class QHash;
-template <class Key, class T> class QMap;
-
-#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
-class QDataStreamPrivate;
-namespace QtPrivate {
-class StreamStateSaver;
-}
-class Q_CORE_EXPORT QDataStream
-{
-public:
- enum Version {
- Qt_1_0 = 1,
- Qt_2_0 = 2,
- Qt_2_1 = 3,
- Qt_3_0 = 4,
- Qt_3_1 = 5,
- Qt_3_3 = 6,
- Qt_4_0 = 7,
- Qt_4_1 = Qt_4_0,
- Qt_4_2 = 8,
- Qt_4_3 = 9,
- Qt_4_4 = 10,
- Qt_4_5 = 11,
- Qt_4_6 = 12,
- Qt_4_7 = Qt_4_6,
- Qt_4_8 = Qt_4_7,
- Qt_4_9 = Qt_4_8,
- Qt_5_0 = 13,
- Qt_5_1 = 14,
- Qt_5_2 = 15,
- Qt_5_3 = Qt_5_2,
- Qt_5_4 = 16,
- Qt_5_5 = Qt_5_4,
- Qt_5_6 = 17,
- Qt_5_7 = Qt_5_6,
- Qt_5_8 = Qt_5_7,
- Qt_5_9 = Qt_5_8,
- Qt_5_10 = Qt_5_9,
-#if QT_VERSION >= 0x050b00
-#error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion
-#endif
- Qt_DefaultCompiledVersion = Qt_5_10
- };
-
- enum ByteOrder {
- BigEndian = QSysInfo::BigEndian,
- LittleEndian = QSysInfo::LittleEndian
- };
-
- enum Status {
- Ok,
- ReadPastEnd,
- ReadCorruptData,
- WriteFailed
- };
-
- enum FloatingPointPrecision {
- SinglePrecision,
- DoublePrecision
- };
-
- QDataStream();
- explicit QDataStream(QIODevice *);
- QDataStream(QByteArray *, QIODevice::OpenMode flags);
- QDataStream(const QByteArray &);
- ~QDataStream();
-
- QIODevice *device() const;
- void setDevice(QIODevice *);
- void unsetDevice();
-
- bool atEnd() const;
-
- Status status() const;
- void setStatus(Status status);
- void resetStatus();
-
- FloatingPointPrecision floatingPointPrecision() const;
- void setFloatingPointPrecision(FloatingPointPrecision precision);
-
- ByteOrder byteOrder() const;
- void setByteOrder(ByteOrder);
-
- int version() const;
- void setVersion(int);
-
- QDataStream &operator>>(qint8 &i);
- QDataStream &operator>>(quint8 &i);
- QDataStream &operator>>(qint16 &i);
- QDataStream &operator>>(quint16 &i);
- QDataStream &operator>>(qint32 &i);
- QDataStream &operator>>(quint32 &i);
- QDataStream &operator>>(qint64 &i);
- QDataStream &operator>>(quint64 &i);
- QDataStream &operator>>(std::nullptr_t &ptr) { ptr = nullptr; return *this; }
-
- QDataStream &operator>>(bool &i);
- QDataStream &operator>>(qfloat16 &f);
- QDataStream &operator>>(float &f);
- QDataStream &operator>>(double &f);
- QDataStream &operator>>(char *&str);
-
- QDataStream &operator<<(qint8 i);
- QDataStream &operator<<(quint8 i);
- QDataStream &operator<<(qint16 i);
- QDataStream &operator<<(quint16 i);
- QDataStream &operator<<(qint32 i);
- QDataStream &operator<<(quint32 i);
- QDataStream &operator<<(qint64 i);
- QDataStream &operator<<(quint64 i);
- QDataStream &operator<<(std::nullptr_t) { return *this; }
- QDataStream &operator<<(bool i);
- QDataStream &operator<<(qfloat16 f);
- QDataStream &operator<<(float f);
- QDataStream &operator<<(double f);
- QDataStream &operator<<(const char *str);
-
- QDataStream &readBytes(char *&, uint &len);
- int readRawData(char *, int len);
-
- QDataStream &writeBytes(const char *, uint len);
- int writeRawData(const char *, int len);
-
- int skipRawData(int len);
-
- void startTransaction();
- bool commitTransaction();
- void rollbackTransaction();
- void abortTransaction();
-
-private:
- Q_DISABLE_COPY(QDataStream)
-
- QScopedPointer<QDataStreamPrivate> d;
-
- QIODevice *dev;
- bool owndev;
- bool noswap;
- ByteOrder byteorder;
- int ver;
- Status q_status;
-
- int readBlock(char *data, int len);
- friend class QtPrivate::StreamStateSaver;
-};
-
-namespace QtPrivate {
-
-class StreamStateSaver
-{
-public:
- inline StreamStateSaver(QDataStream *s) : stream(s), oldStatus(s->status())
- {
- if (!stream->dev || !stream->dev->isTransactionStarted())
- stream->resetStatus();
- }
- inline ~StreamStateSaver()
- {
- if (oldStatus != QDataStream::Ok) {
- stream->resetStatus();
- stream->setStatus(oldStatus);
- }
- }
-
-private:
- QDataStream *stream;
- QDataStream::Status oldStatus;
-};
-
-template <typename Container>
-QDataStream &readArrayBasedContainer(QDataStream &s, Container &c)
-{
- StreamStateSaver stateSaver(&s);
-
- c.clear();
- quint32 n;
- s >> n;
- c.reserve(n);
- for (quint32 i = 0; i < n; ++i) {
- typename Container::value_type t;
- s >> t;
- if (s.status() != QDataStream::Ok) {
- c.clear();
- break;
- }
- c.append(t);
- }
-
- return s;
-}
-
-template <typename Container>
-QDataStream &readListBasedContainer(QDataStream &s, Container &c)
-{
- StreamStateSaver stateSaver(&s);
-
- c.clear();
- quint32 n;
- s >> n;
- for (quint32 i = 0; i < n; ++i) {
- typename Container::value_type t;
- s >> t;
- if (s.status() != QDataStream::Ok) {
- c.clear();
- break;
- }
- c << t;
- }
-
- return s;
-}
-
-template <typename Container>
-QDataStream &readAssociativeContainer(QDataStream &s, Container &c)
-{
- StreamStateSaver stateSaver(&s);
-
- c.clear();
- quint32 n;
- s >> n;
- for (quint32 i = 0; i < n; ++i) {
- typename Container::key_type k;
- typename Container::mapped_type t;
- s >> k >> t;
- if (s.status() != QDataStream::Ok) {
- c.clear();
- break;
- }
- c.insertMulti(k, t);
- }
-
- return s;
-}
-
-template <typename Container>
-QDataStream &writeSequentialContainer(QDataStream &s, const Container &c)
-{
- s << quint32(c.size());
- for (const typename Container::value_type &t : c)
- s << t;
-
- return s;
-}
-
-template <typename Container>
-QDataStream &writeAssociativeContainer(QDataStream &s, const Container &c)
-{
- s << quint32(c.size());
- // Deserialization should occur in the reverse order.
- // Otherwise, value() will return the least recently inserted
- // value instead of the most recently inserted one.
- auto it = c.constEnd();
- auto begin = c.constBegin();
- while (it != begin) {
- --it;
- s << it.key() << it.value();
- }
-
- return s;
-}
-
-} // QtPrivate namespace
-
-/*****************************************************************************
- QDataStream inline functions
- *****************************************************************************/
-
-inline QIODevice *QDataStream::device() const
-{ return dev; }
-
-inline QDataStream::ByteOrder QDataStream::byteOrder() const
-{ return byteorder; }
-
-inline int QDataStream::version() const
-{ return ver; }
-
-inline void QDataStream::setVersion(int v)
-{ ver = v; }
-
-inline QDataStream &QDataStream::operator>>(quint8 &i)
-{ return *this >> reinterpret_cast<qint8&>(i); }
-
-inline QDataStream &QDataStream::operator>>(quint16 &i)
-{ return *this >> reinterpret_cast<qint16&>(i); }
-
-inline QDataStream &QDataStream::operator>>(quint32 &i)
-{ return *this >> reinterpret_cast<qint32&>(i); }
-
-inline QDataStream &QDataStream::operator>>(quint64 &i)
-{ return *this >> reinterpret_cast<qint64&>(i); }
-
-inline QDataStream &QDataStream::operator<<(quint8 i)
-{ return *this << qint8(i); }
-
-inline QDataStream &QDataStream::operator<<(quint16 i)
-{ return *this << qint16(i); }
-
-inline QDataStream &QDataStream::operator<<(quint32 i)
-{ return *this << qint32(i); }
-
-inline QDataStream &QDataStream::operator<<(quint64 i)
-{ return *this << qint64(i); }
-
-template <typename Enum>
-inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
-{ return s << e.i; }
-
-template <typename Enum>
-inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
-{ return s >> e.i; }
-
-template <typename T>
-inline QDataStream &operator>>(QDataStream &s, QList<T> &l)
-{
- return QtPrivate::readArrayBasedContainer(s, l);
-}
-
-template <typename T>
-inline QDataStream &operator<<(QDataStream &s, const QList<T> &l)
-{
- return QtPrivate::writeSequentialContainer(s, l);
-}
-
-template <typename T>
-inline QDataStream &operator>>(QDataStream &s, QLinkedList<T> &l)
-{
- return QtPrivate::readListBasedContainer(s, l);
-}
-
-template <typename T>
-inline QDataStream &operator<<(QDataStream &s, const QLinkedList<T> &l)
-{
- return QtPrivate::writeSequentialContainer(s, l);
-}
-
-template<typename T>
-inline QDataStream &operator>>(QDataStream &s, QVector<T> &v)
-{
- return QtPrivate::readArrayBasedContainer(s, v);
-}
-
-template<typename T>
-inline QDataStream &operator<<(QDataStream &s, const QVector<T> &v)
-{
- return QtPrivate::writeSequentialContainer(s, v);
-}
-
-template <typename T>
-inline QDataStream &operator>>(QDataStream &s, QSet<T> &set)
-{
- return QtPrivate::readListBasedContainer(s, set);
-}
-
-template <typename T>
-inline QDataStream &operator<<(QDataStream &s, const QSet<T> &set)
-{
- return QtPrivate::writeSequentialContainer(s, set);
-}
-
-template <class Key, class T>
-inline QDataStream &operator>>(QDataStream &s, QHash<Key, T> &hash)
-{
- return QtPrivate::readAssociativeContainer(s, hash);
-}
-
-template <class Key, class T>
-inline QDataStream &operator<<(QDataStream &s, const QHash<Key, T> &hash)
-{
- return QtPrivate::writeAssociativeContainer(s, hash);
-}
-
-template <class Key, class T>
-inline QDataStream &operator>>(QDataStream &s, QMap<Key, T> &map)
-{
- return QtPrivate::readAssociativeContainer(s, map);
-}
-
-template <class Key, class T>
-inline QDataStream &operator<<(QDataStream &s, const QMap<Key, T> &map)
-{
- return QtPrivate::writeAssociativeContainer(s, map);
-}
-
-#ifndef QT_NO_DATASTREAM
-template <class T1, class T2>
-inline QDataStream& operator>>(QDataStream& s, QPair<T1, T2>& p)
-{
- s >> p.first >> p.second;
- return s;
-}
-
-template <class T1, class T2>
-inline QDataStream& operator<<(QDataStream& s, const QPair<T1, T2>& p)
-{
- s << p.first << p.second;
- return s;
-}
-#endif
-
-#endif // QT_NO_DATASTREAM
-
-QT_END_NAMESPACE
-
-#endif // QDATASTREAM_H
diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp
index 341400fd93..0d9a6c8749 100644
--- a/src/corelib/io/qdebug.cpp
+++ b/src/corelib/io/qdebug.cpp
@@ -121,15 +121,15 @@ using QtMiscUtils::fromHex;
*/
/*!
- \fn QDebug::QDebug(QtMsgType type)
+ \fn QDebug::QDebug(QtMsgType t)
- Constructs a debug stream that writes to the handler for the message type specified by \a type.
+ Constructs a debug stream that writes to the handler for the message type \a t.
*/
/*!
- \fn QDebug::QDebug(const QDebug &other)
+ \fn QDebug::QDebug(const QDebug &o)
- Constructs a copy of the \a other debug stream.
+ Constructs a copy of the other debug stream \a o.
*/
/*!
@@ -501,79 +501,79 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug &QDebug::operator<<(signed short i)
+ \fn QDebug &QDebug::operator<<(signed short t)
- Writes the signed short integer, \a i, to the stream and returns a reference
+ Writes the signed short integer, \a t, to the stream and returns a reference
to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(unsigned short i)
+ \fn QDebug &QDebug::operator<<(unsigned short t)
- Writes then unsigned short integer, \a i, to the stream and returns a
+ Writes then unsigned short integer, \a t, to the stream and returns a
reference to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(signed int i)
+ \fn QDebug &QDebug::operator<<(signed int t)
- Writes the signed integer, \a i, to the stream and returns a reference
+ Writes the signed integer, \a t, to the stream and returns a reference
to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(unsigned int i)
+ \fn QDebug &QDebug::operator<<(unsigned int t)
- Writes then unsigned integer, \a i, to the stream and returns a reference to
+ Writes then unsigned integer, \a t, to the stream and returns a reference to
the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(signed long l)
+ \fn QDebug &QDebug::operator<<(signed long t)
- Writes the signed long integer, \a l, to the stream and returns a reference
+ Writes the signed long integer, \a t, to the stream and returns a reference
to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(unsigned long l)
+ \fn QDebug &QDebug::operator<<(unsigned long t)
- Writes then unsigned long integer, \a l, to the stream and returns a reference
+ Writes then unsigned long integer, \a t, to the stream and returns a reference
to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(qint64 i)
+ \fn QDebug &QDebug::operator<<(qint64 t)
- Writes the signed 64-bit integer, \a i, to the stream and returns a reference
+ Writes the signed 64-bit integer, \a t, to the stream and returns a reference
to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(quint64 i)
+ \fn QDebug &QDebug::operator<<(quint64 t)
- Writes then unsigned 64-bit integer, \a i, to the stream and returns a
+ Writes then unsigned 64-bit integer, \a t, to the stream and returns a
reference to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(float f)
+ \fn QDebug &QDebug::operator<<(float t)
- Writes the 32-bit floating point number, \a f, to the stream and returns a
+ Writes the 32-bit floating point number, \a t, to the stream and returns a
reference to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(double f)
+ \fn QDebug &QDebug::operator<<(double t)
- Writes the 64-bit floating point number, \a f, to the stream and returns a
+ Writes the 64-bit floating point number, \a t, to the stream and returns a
reference to the stream.
*/
/*!
- \fn QDebug &QDebug::operator<<(const char *s)
+ \fn QDebug &QDebug::operator<<(const char *t)
- Writes the '\\0'-terminated string, \a s, to the stream and returns a
+ Writes the '\\0'-terminated string, \a t, to the stream and returns a
reference to the stream. The string is never quoted nor transformed to the
output, but note that some QDebug backends might not be 8-bit clean.
*/
@@ -595,9 +595,9 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug &QDebug::operator<<(const QString &s)
+ \fn QDebug &QDebug::operator<<(const QString &t)
- Writes the string, \a s, to the stream and returns a reference to the
+ Writes the string, \a t, to the stream and returns a reference to the
stream. Normally, QDebug prints the string inside quotes and transforms
non-printable characters to their Unicode values (\\u1234).
@@ -634,9 +634,9 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug &QDebug::operator<<(const QStringRef &s)
+ \fn QDebug &QDebug::operator<<(const QStringRef &t)
- Writes the string, \a s, to the stream and returns a reference to the
+ Writes the string, \a t, to the stream and returns a reference to the
stream. Normally, QDebug prints the string inside quotes and transforms
non-printable characters to their Unicode values (\\u1234).
@@ -663,9 +663,9 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug &QDebug::operator<<(QLatin1String s)
+ \fn QDebug &QDebug::operator<<(QLatin1String t)
- Writes the string, \a s, to the stream and returns a reference to the
+ Writes the string, \a t, to the stream and returns a reference to the
stream. Normally, QDebug prints the string inside quotes and transforms
non-printable characters to their Unicode values (\\u1234).
@@ -677,9 +677,9 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug &QDebug::operator<<(const QByteArray &b)
+ \fn QDebug &QDebug::operator<<(const QByteArray &t)
- Writes the byte array, \a b, to the stream and returns a reference to the
+ Writes the byte array, \a t, to the stream and returns a reference to the
stream. Normally, QDebug prints the array inside quotes and transforms
control or non-US-ASCII characters to their C escape sequences (\\xAB). This
way, the output is always 7-bit clean and the string can be copied from the
@@ -716,9 +716,9 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug &QDebug::operator<<(const void *p)
+ \fn QDebug &QDebug::operator<<(const void *t)
- Writes a pointer, \a p, to the stream and returns a reference to the stream.
+ Writes a pointer, \a t, to the stream and returns a reference to the stream.
*/
/*!
@@ -732,99 +732,99 @@ QDebug &QDebug::resetFormat()
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QList<T> &list)
+ \fn template <class T> QDebug operator<<(QDebug debug, const QList<T> &list)
\relates QDebug
- Writes the contents of \a list to \a stream. \c T needs to
+ Writes the contents of \a list to \a debug. \c T needs to
support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const std::list<T, Alloc> &list)
+ \fn template <typename T, typename Alloc> QDebug operator<<(QDebug debug, const std::list<T, Alloc> &vec)
\relates QDebug
\since 5.7
- Writes the contents of \a list to \a stream. \c T needs to
+ Writes the contents of list \a vec to \a debug. \c T needs to
support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QVector<T> &vector)
+ \fn template <typename T> QDebug operator<<(QDebug debug, const QVector<T> &vec)
\relates QDebug
- Writes the contents of \a vector to \a stream. \c T needs to
+ Writes the contents of vector \a vec to \a debug. \c T needs to
support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const std::vector<T, Alloc> &vector)
+ \fn template <typename T, typename Alloc> QDebug operator<<(QDebug debug, const std::vector<T, Alloc> &vec)
\relates QDebug
\since 5.7
- Writes the contents of \a vector to \a stream. \c T needs to
+ Writes the contents of vector \a vec to \a debug. \c T needs to
support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QSet<T> &set)
+ \fn template <typename T> QDebug operator<<(QDebug debug, const QSet<T> &set)
\relates QDebug
- Writes the contents of \a set to \a stream. \c T needs to
+ Writes the contents of \a set to \a debug. \c T needs to
support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QMap<Key, T> &map)
+ \fn template <class Key, class T> QDebug operator<<(QDebug debug, const QMap<Key, T> &map)
\relates QDebug
- Writes the contents of \a map to \a stream. Both \c Key and
+ Writes the contents of \a map to \a debug. Both \c Key and
\c T need to support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const std::map<Key, T, Compare, Alloc> &map)
+ \fn template <typename Key, typename T, typename Compare, typename Alloc> QDebug operator<<(QDebug debug, const std::map<Key, T, Compare, Alloc> &map)
\relates QDebug
\since 5.7
- Writes the contents of \a map to \a stream. Both \c Key and
+ Writes the contents of \a map to \a debug. Both \c Key and
\c T need to support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const std::multimap<Key, T, Compare, Alloc> &map)
+ \fn template <typename Key, typename T, typename Compare, typename Alloc> QDebug operator<<(QDebug debug, const std::multimap<Key, T, Compare, Alloc> &map)
\relates QDebug
\since 5.7
- Writes the contents of \a map to \a stream. Both \c Key and
+ Writes the contents of \a map to \a debug. Both \c Key and
\c T need to support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QHash<Key, T> &hash)
+ \fn template <class Key, class T> QDebug operator<<(QDebug debug, const QHash<Key, T> &hash)
\relates QDebug
- Writes the contents of \a hash to \a stream. Both \c Key and
+ Writes the contents of \a hash to \a debug. Both \c Key and
\c T need to support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QPair<T1, T2> &pair)
+ \fn template <class T1, class T2> QDebug operator<<(QDebug debug, const QPair<T1, T2> &pair)
\relates QDebug
- Writes the contents of \a pair to \a stream. Both \c T1 and
+ Writes the contents of \a pair to \a debug. Both \c T1 and
\c T2 need to support streaming into QDebug.
*/
/*!
- \fn QDebug operator<<(QDebug stream, const QFlags<T> &flag)
+ \fn template<typename T> QDebug operator<<(QDebug debug, const QFlags<T> &flags)
\relates QDebug
\since 4.7
- Writes \a flag to \a stream.
+ Writes \a flags to \a debug.
*/
/*!
- \fn QDebug operator<<(QDebug debug, const QSharedPointer<T> &ptr)
+ \fn template<typename T> QDebug operator<<(QDebug debug, const QSharedPointer<T> &ptr)
\relates QSharedPointer
\since 5.7
@@ -835,6 +835,11 @@ QDebug &QDebug::resetFormat()
*/
/*!
+ \fn QDebug &QDebug::operator<<(std::nullptr_t)
+ \internal
+ */
+
+/*!
\class QDebugStateSaver
\inmodule QtCore
\brief Convenience class for custom QDebug operators
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index 6d144cb65d..520f98b18f 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -2087,6 +2087,7 @@ bool QDir::match(const QString &filter, const QString &fileName)
#endif // QT_NO_REGEXP
/*!
+ \internal
Returns \a path with redundant directory separators removed,
and "."s and ".."s resolved (as far as possible).
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index e4888e9523..33b0b2eb66 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -893,9 +893,9 @@ bool QFile::open(OpenMode mode)
qWarning("QFile::open: File (%s) already open", qPrintable(fileName()));
return false;
}
- if (mode & Append)
+ // Either Append or NewOnly implies WriteOnly
+ if (mode & (Append | NewOnly))
mode |= WriteOnly;
-
unsetError();
if ((mode & (ReadOnly | WriteOnly)) == 0) {
qWarning("QIODevice::open: File access not specified");
@@ -965,7 +965,8 @@ bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags)
qWarning("QFile::open: File (%s) already open", qPrintable(fileName()));
return false;
}
- if (mode & Append)
+ // Either Append or NewOnly implies WriteOnly
+ if (mode & (Append | NewOnly))
mode |= WriteOnly;
unsetError();
if ((mode & (ReadOnly | WriteOnly)) == 0) {
@@ -1023,7 +1024,8 @@ bool QFile::open(int fd, OpenMode mode, FileHandleFlags handleFlags)
qWarning("QFile::open: File (%s) already open", qPrintable(fileName()));
return false;
}
- if (mode & Append)
+ // Either Append or NewOnly implies WriteOnly
+ if (mode & (Append | NewOnly))
mode |= WriteOnly;
unsetError();
if ((mode & (ReadOnly | WriteOnly)) == 0) {
diff --git a/src/corelib/io/qfile.h b/src/corelib/io/qfile.h
index c5819e8076..e6f3d942fe 100644
--- a/src/corelib/io/qfile.h
+++ b/src/corelib/io/qfile.h
@@ -70,7 +70,7 @@ public:
#endif
~QFile();
- QString fileName() const Q_DECL_OVERRIDE;
+ QString fileName() const override;
void setFileName(const QString &name);
#if defined(Q_OS_DARWIN)
@@ -124,25 +124,25 @@ public:
bool copy(const QString &newName);
static bool copy(const QString &fileName, const QString &newName);
- bool open(OpenMode flags) Q_DECL_OVERRIDE;
+ bool open(OpenMode flags) override;
bool open(FILE *f, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
bool open(int fd, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
- qint64 size() const Q_DECL_OVERRIDE;
+ qint64 size() const override;
- bool resize(qint64 sz) Q_DECL_OVERRIDE;
+ bool resize(qint64 sz) override;
static bool resize(const QString &filename, qint64 sz);
- Permissions permissions() const Q_DECL_OVERRIDE;
+ Permissions permissions() const override;
static Permissions permissions(const QString &filename);
- bool setPermissions(Permissions permissionSpec) Q_DECL_OVERRIDE;
+ bool setPermissions(Permissions permissionSpec) override;
static bool setPermissions(const QString &filename, Permissions permissionSpec);
protected:
#ifdef QT_NO_QOBJECT
QFile(QFilePrivate &dd);
#else
- QFile(QFilePrivate &dd, QObject *parent = Q_NULLPTR);
+ QFile(QFilePrivate &dd, QObject *parent = nullptr);
#endif
private:
diff --git a/src/corelib/io/qfiledevice.h b/src/corelib/io/qfiledevice.h
index e941781c25..af41bec2f6 100644
--- a/src/corelib/io/qfiledevice.h
+++ b/src/corelib/io/qfiledevice.h
@@ -100,19 +100,19 @@ public:
FileError error() const;
void unsetError();
- virtual void close() Q_DECL_OVERRIDE;
+ virtual void close() override;
- bool isSequential() const Q_DECL_OVERRIDE;
+ bool isSequential() const override;
int handle() const;
virtual QString fileName() const;
- qint64 pos() const Q_DECL_OVERRIDE;
- bool seek(qint64 offset) Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
+ qint64 pos() const override;
+ bool seek(qint64 offset) override;
+ bool atEnd() const override;
bool flush();
- qint64 size() const Q_DECL_OVERRIDE;
+ qint64 size() const override;
virtual bool resize(qint64 sz);
virtual Permissions permissions() const;
@@ -136,12 +136,12 @@ protected:
QFileDevice(QFileDevicePrivate &dd);
#else
explicit QFileDevice(QObject *parent);
- QFileDevice(QFileDevicePrivate &dd, QObject *parent = Q_NULLPTR);
+ QFileDevice(QFileDevicePrivate &dd, QObject *parent = nullptr);
#endif
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
- qint64 readLineData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 readData(char *data, qint64 maxlen) override;
+ qint64 writeData(const char *data, qint64 len) override;
+ qint64 readLineData(char *data, qint64 maxlen) override;
private:
Q_DISABLE_COPY(QFileDevice)
diff --git a/src/corelib/io/qfiledevice_p.h b/src/corelib/io/qfiledevice_p.h
index 60c51afb7e..47053d01b7 100644
--- a/src/corelib/io/qfiledevice_p.h
+++ b/src/corelib/io/qfiledevice_p.h
@@ -69,7 +69,7 @@ protected:
inline bool ensureFlushed() const;
- bool putCharHelper(char c) Q_DECL_OVERRIDE;
+ bool putCharHelper(char c) override;
void setError(QFileDevice::FileError err);
void setError(QFileDevice::FileError err, const QString &errorString);
diff --git a/src/corelib/io/qfileselector.h b/src/corelib/io/qfileselector.h
index fafb7f7609..c9c2f564f6 100644
--- a/src/corelib/io/qfileselector.h
+++ b/src/corelib/io/qfileselector.h
@@ -50,7 +50,7 @@ class Q_CORE_EXPORT QFileSelector : public QObject
{
Q_OBJECT
public:
- explicit QFileSelector(QObject *parent = Q_NULLPTR);
+ explicit QFileSelector(QObject *parent = nullptr);
~QFileSelector();
QString select(const QString &filePath) const;
diff --git a/src/corelib/io/qfilesystemiterator_unix.cpp b/src/corelib/io/qfilesystemiterator_unix.cpp
index 0d1438f137..a9acf542d4 100644
--- a/src/corelib/io/qfilesystemiterator_unix.cpp
+++ b/src/corelib/io/qfilesystemiterator_unix.cpp
@@ -77,12 +77,19 @@ bool QFileSystemIterator::advance(QFileSystemEntry &fileEntry, QFileSystemMetaDa
if (!dir)
return false;
- dirEntry = QT_READDIR(dir);
+ for (;;) {
+ dirEntry = QT_READDIR(dir);
- if (dirEntry) {
- fileEntry = QFileSystemEntry(nativePath + QByteArray(dirEntry->d_name), QFileSystemEntry::FromNativePath());
- metaData.fillFromDirEnt(*dirEntry);
- return true;
+ if (dirEntry) {
+ // process entries with correct UTF-8 names only
+ if (QFile::encodeName(QFile::decodeName(dirEntry->d_name)) == dirEntry->d_name) {
+ fileEntry = QFileSystemEntry(nativePath + QByteArray(dirEntry->d_name), QFileSystemEntry::FromNativePath());
+ metaData.fillFromDirEnt(*dirEntry);
+ return true;
+ }
+ } else {
+ break;
+ }
}
lastError = errno;
diff --git a/src/corelib/io/qfilesystemwatcher.h b/src/corelib/io/qfilesystemwatcher.h
index 09d4e8e65e..057a20672c 100644
--- a/src/corelib/io/qfilesystemwatcher.h
+++ b/src/corelib/io/qfilesystemwatcher.h
@@ -55,8 +55,8 @@ class Q_CORE_EXPORT QFileSystemWatcher : public QObject
Q_DECLARE_PRIVATE(QFileSystemWatcher)
public:
- QFileSystemWatcher(QObject *parent = Q_NULLPTR);
- QFileSystemWatcher(const QStringList &paths, QObject *parent = Q_NULLPTR);
+ QFileSystemWatcher(QObject *parent = nullptr);
+ QFileSystemWatcher(const QStringList &paths, QObject *parent = nullptr);
~QFileSystemWatcher();
bool addPath(const QString &file);
diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.mm b/src/corelib/io/qfilesystemwatcher_fsevents.mm
index b4517cbac7..792ea387ac 100644
--- a/src/corelib/io/qfilesystemwatcher_fsevents.mm
+++ b/src/corelib/io/qfilesystemwatcher_fsevents.mm
@@ -336,7 +336,7 @@ QStringList QFseventsFileSystemWatcherEngine::addPaths(const QStringList &paths,
QMutexLocker locker(&lock);
- bool wasRunning = stream != Q_NULLPTR;
+ bool wasRunning = stream != nullptr;
bool needsRestart = false;
WatchingState oldState = watchingState;
diff --git a/src/corelib/io/qfilesystemwatcher_inotify_p.h b/src/corelib/io/qfilesystemwatcher_inotify_p.h
index 777d62dc8a..0c873466c8 100644
--- a/src/corelib/io/qfilesystemwatcher_inotify_p.h
+++ b/src/corelib/io/qfilesystemwatcher_inotify_p.h
@@ -70,8 +70,8 @@ public:
static QInotifyFileSystemWatcherEngine *create(QObject *parent);
- QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
- QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
+ QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories) override;
+ QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories) override;
private Q_SLOTS:
void readFromInotify();
diff --git a/src/corelib/io/qfilesystemwatcher_polling_p.h b/src/corelib/io/qfilesystemwatcher_polling_p.h
index 6dff08ac05..4c46633fdf 100644
--- a/src/corelib/io/qfilesystemwatcher_polling_p.h
+++ b/src/corelib/io/qfilesystemwatcher_polling_p.h
@@ -110,8 +110,8 @@ class QPollingFileSystemWatcherEngine : public QFileSystemWatcherEngine
public:
QPollingFileSystemWatcherEngine(QObject *parent);
- QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
- QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
+ QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories) override;
+ QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories) override;
private Q_SLOTS:
void timeout();
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index b7a5440224..387990ed79 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -165,6 +165,35 @@ QFSFileEngine::QFSFileEngine(QFSFileEnginePrivate &dd)
}
/*!
+ \internal
+*/
+bool QFSFileEngine::processOpenModeFlags(QIODevice::OpenMode *mode)
+{
+ QIODevice::OpenMode &openMode = *mode;
+ if ((openMode & QFile::NewOnly) && (openMode & QFile::ExistingOnly)) {
+ qWarning("NewOnly and ExistingOnly are mutually exclusive");
+ setError(QFile::OpenError, QLatin1String("NewOnly and ExistingOnly are mutually exclusive"));
+ return false;
+ }
+
+ if ((openMode & QFile::ExistingOnly) && !(openMode & (QFile::ReadOnly | QFile::WriteOnly))) {
+ qWarning("ExistingOnly must be specified alongside ReadOnly, WriteOnly, or ReadWrite");
+ setError(QFile::OpenError, QLatin1String("ExistingOnly must be specified alongside ReadOnly, WriteOnly, or ReadWrite"));
+ return false;
+ }
+
+ // Either Append or NewOnly implies WriteOnly
+ if (openMode & (QFile::Append | QFile::NewOnly))
+ openMode |= QFile::WriteOnly;
+
+ // WriteOnly implies Truncate when ReadOnly, Append, and NewOnly are not set.
+ if ((openMode & QFile::WriteOnly) && !(openMode & (QFile::ReadOnly | QFile::Append | QFile::NewOnly)))
+ openMode |= QFile::Truncate;
+
+ return true;
+}
+
+/*!
Destructs the QFSFileEngine.
*/
QFSFileEngine::~QFSFileEngine()
@@ -205,13 +234,8 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode)
return false;
}
- // Append implies WriteOnly.
- if (openMode & QFile::Append)
- openMode |= QFile::WriteOnly;
-
- // WriteOnly implies Truncate if neither ReadOnly nor Append are sent.
- if ((openMode & QFile::WriteOnly) && !(openMode & (QFile::ReadOnly | QFile::Append)))
- openMode |= QFile::Truncate;
+ if (!processOpenModeFlags(&openMode))
+ return false;
d->openMode = openMode;
d->lastFlushFailed = false;
@@ -238,13 +262,8 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, FILE *fh, QFile::FileHand
Q_D(QFSFileEngine);
- // Append implies WriteOnly.
- if (openMode & QFile::Append)
- openMode |= QFile::WriteOnly;
-
- // WriteOnly implies Truncate if neither ReadOnly nor Append are sent.
- if ((openMode & QFile::WriteOnly) && !(openMode & (QFile::ReadOnly | QFile::Append)))
- openMode |= QFile::Truncate;
+ if (!processOpenModeFlags(&openMode))
+ return false;
d->openMode = openMode;
d->lastFlushFailed = false;
@@ -302,13 +321,8 @@ bool QFSFileEngine::open(QIODevice::OpenMode openMode, int fd, QFile::FileHandle
{
Q_D(QFSFileEngine);
- // Append implies WriteOnly.
- if (openMode & QFile::Append)
- openMode |= QFile::WriteOnly;
-
- // WriteOnly implies Truncate if neither ReadOnly nor Append are sent.
- if ((openMode & QFile::WriteOnly) && !(openMode & (QFile::ReadOnly | QFile::Append)))
- openMode |= QFile::Truncate;
+ if (!processOpenModeFlags(&openMode))
+ return false;
d->openMode = openMode;
d->lastFlushFailed = false;
@@ -915,11 +929,11 @@ bool QFSFileEngine::supportsExtension(Extension extension) const
For Unix, the list contains just the root path "/".
*/
-/*! \fn QString QFSFileEngine::fileName(FileName file) const
+/*! \fn QString QFSFileEngine::fileName(QAbstractFileEngine::FileName file) const
\reimp
*/
-/*! \fn bool QFSFileEngine::setFileTime(const QDateTime &newDate, FileTime time)
+/*! \fn bool QFSFileEngine::setFileTime(const QDateTime &newDate, QAbstractFileEngine::FileTime time)
\reimp
*/
@@ -945,7 +959,7 @@ bool QFSFileEngine::supportsExtension(Extension extension) const
\reimp
*/
-/*! \fn uint QFSFileEngine::ownerId(FileOwner own) const
+/*! \fn uint QFSFileEngine::ownerId(QAbstractFileEngine::FileOwner own) const
In Unix, if stat() is successful, the \c uid is returned if
\a own is the owner. Otherwise the \c gid is returned. If stat()
is unsuccessful, -2 is reuturned.
@@ -953,7 +967,7 @@ bool QFSFileEngine::supportsExtension(Extension extension) const
For Windows, -2 is always returned.
*/
-/*! \fn QString QFSFileEngine::owner(FileOwner own) const
+/*! \fn QString QFSFileEngine::owner(QAbstractFileEngine::FileOwner own) const
\reimp
*/
diff --git a/src/corelib/io/qfsfileengine_iterator_p.h b/src/corelib/io/qfsfileengine_iterator_p.h
index 7f094ba9d7..bde00bf578 100644
--- a/src/corelib/io/qfsfileengine_iterator_p.h
+++ b/src/corelib/io/qfsfileengine_iterator_p.h
@@ -68,11 +68,11 @@ public:
QFSFileEngineIterator(QDir::Filters filters, const QStringList &filterNames);
~QFSFileEngineIterator();
- QString next() Q_DECL_OVERRIDE;
- bool hasNext() const Q_DECL_OVERRIDE;
+ QString next() override;
+ bool hasNext() const override;
- QString currentFileName() const Q_DECL_OVERRIDE;
- QFileInfo currentFileInfo() const Q_DECL_OVERRIDE;
+ QString currentFileName() const override;
+ QFileInfo currentFileInfo() const override;
private:
void advance() const;
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index faef84cbe2..6b091a8eef 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -71,52 +71,52 @@ public:
explicit QFSFileEngine(const QString &file);
~QFSFileEngine();
- bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE;
+ bool open(QIODevice::OpenMode openMode) override;
bool open(QIODevice::OpenMode flags, FILE *fh);
- bool close() Q_DECL_OVERRIDE;
- bool flush() Q_DECL_OVERRIDE;
- bool syncToDisk() Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 pos() const Q_DECL_OVERRIDE;
- bool seek(qint64) Q_DECL_OVERRIDE;
- bool isSequential() const Q_DECL_OVERRIDE;
- bool remove() Q_DECL_OVERRIDE;
- bool copy(const QString &newName) Q_DECL_OVERRIDE;
- bool rename(const QString &newName) Q_DECL_OVERRIDE;
- bool renameOverwrite(const QString &newName) Q_DECL_OVERRIDE;
- bool link(const QString &newName) Q_DECL_OVERRIDE;
- bool mkdir(const QString &dirName, bool createParentDirectories) const Q_DECL_OVERRIDE;
- bool rmdir(const QString &dirName, bool recurseParentDirectories) const Q_DECL_OVERRIDE;
- bool setSize(qint64 size) Q_DECL_OVERRIDE;
- bool caseSensitive() const Q_DECL_OVERRIDE;
- bool isRelativePath() const Q_DECL_OVERRIDE;
- QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
- FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
- bool setPermissions(uint perms) Q_DECL_OVERRIDE;
+ bool close() override;
+ bool flush() override;
+ bool syncToDisk() override;
+ qint64 size() const override;
+ qint64 pos() const override;
+ bool seek(qint64) override;
+ bool isSequential() const override;
+ bool remove() override;
+ bool copy(const QString &newName) override;
+ bool rename(const QString &newName) override;
+ bool renameOverwrite(const QString &newName) override;
+ bool link(const QString &newName) override;
+ bool mkdir(const QString &dirName, bool createParentDirectories) const override;
+ bool rmdir(const QString &dirName, bool recurseParentDirectories) const override;
+ bool setSize(qint64 size) override;
+ bool caseSensitive() const override;
+ bool isRelativePath() const override;
+ QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const override;
+ FileFlags fileFlags(FileFlags type) const override;
+ bool setPermissions(uint perms) override;
QByteArray id() const override;
- QString fileName(FileName file) const Q_DECL_OVERRIDE;
- uint ownerId(FileOwner) const Q_DECL_OVERRIDE;
- QString owner(FileOwner) const Q_DECL_OVERRIDE;
- bool setFileTime(const QDateTime &newDate, FileTime time) Q_DECL_OVERRIDE;
- QDateTime fileTime(FileTime time) const Q_DECL_OVERRIDE;
- void setFileName(const QString &file) Q_DECL_OVERRIDE;
- int handle() const Q_DECL_OVERRIDE;
+ QString fileName(FileName file) const override;
+ uint ownerId(FileOwner) const override;
+ QString owner(FileOwner) const override;
+ bool setFileTime(const QDateTime &newDate, FileTime time) override;
+ QDateTime fileTime(FileTime time) const override;
+ void setFileName(const QString &file) override;
+ int handle() const override;
#ifndef QT_NO_FILESYSTEMITERATOR
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE;
- Iterator *endEntryList() Q_DECL_OVERRIDE;
+ Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ Iterator *endEntryList() override;
#endif
- qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 readLine(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 read(char *data, qint64 maxlen) override;
+ qint64 readLine(char *data, qint64 maxlen) override;
+ qint64 write(const char *data, qint64 len) override;
bool cloneTo(QAbstractFileEngine *target) override;
virtual bool isUnnamedFile() const
{ return false; }
- bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) Q_DECL_OVERRIDE;
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) override;
+ bool supportsExtension(Extension extension) const override;
//FS only!!
bool open(QIODevice::OpenMode flags, int fd);
@@ -131,6 +131,9 @@ public:
protected:
QFSFileEngine(QFSFileEnginePrivate &dd);
+
+private:
+ inline bool processOpenModeFlags(QIODevice::OpenMode *mode);
};
class Q_AUTOTEST_EXPORT QFSFileEnginePrivate : public QAbstractFileEnginePrivate
@@ -219,6 +222,12 @@ public:
int sysOpen(const QString &, int flags);
#endif
+ static bool openModeCanCreate(QIODevice::OpenMode openMode)
+ {
+ // WriteOnly can create, but only when ExistingOnly isn't specified.
+ // ReadOnly by itself never creates.
+ return (openMode & QFile::WriteOnly) && !(openMode & QFile::ExistingOnly);
+ }
protected:
QFSFileEnginePrivate();
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index e406fb4447..bc39ea73ee 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -74,11 +74,13 @@ static inline int openModeToOpenFlags(QIODevice::OpenMode mode)
oflags |= QT_OPEN_LARGEFILE;
#endif
- if ((mode & QFile::ReadWrite) == QFile::ReadWrite) {
- oflags = QT_OPEN_RDWR | QT_OPEN_CREAT;
- } else if (mode & QFile::WriteOnly) {
- oflags = QT_OPEN_WRONLY | QT_OPEN_CREAT;
- }
+ if ((mode & QFile::ReadWrite) == QFile::ReadWrite)
+ oflags = QT_OPEN_RDWR;
+ else if (mode & QFile::WriteOnly)
+ oflags = QT_OPEN_WRONLY;
+
+ if (QFSFileEnginePrivate::openModeCanCreate(mode))
+ oflags |= QT_OPEN_CREAT;
if (mode & QFile::Append) {
oflags |= QT_OPEN_APPEND;
@@ -87,6 +89,9 @@ static inline int openModeToOpenFlags(QIODevice::OpenMode mode)
oflags |= QT_OPEN_TRUNC;
}
+ if (mode & QFile::NewOnly)
+ oflags |= QT_OPEN_EXCL;
+
return oflags;
}
diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp
index 759effe632..8199f6a846 100644
--- a/src/corelib/io/qfsfileengine_win.cpp
+++ b/src/corelib/io/qfsfileengine_win.cpp
@@ -117,9 +117,12 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
if (openMode & QIODevice::WriteOnly)
accessRights |= GENERIC_WRITE;
-
// WriteOnly can create files, ReadOnly cannot.
- DWORD creationDisp = (openMode & QIODevice::WriteOnly) ? OPEN_ALWAYS : OPEN_EXISTING;
+ DWORD creationDisp = (openMode & QIODevice::NewOnly)
+ ? CREATE_NEW
+ : openModeCanCreate(openMode)
+ ? OPEN_ALWAYS
+ : OPEN_EXISTING;
// Create the file handle.
#ifndef Q_OS_WINRT
SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE };
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index 7d46898911..95a5fb27cf 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -324,6 +324,23 @@ QIODevicePrivate::~QIODevicePrivate()
terminators are translated to the local encoding, for
example '\\r\\n' for Win32.
\value Unbuffered Any buffer in the device is bypassed.
+ \value NewOnly Fail if the file to be opened already exists. Create and
+ open the file only if it does not exist. There is a
+ guarantee from the operating system that you are the only
+ one creating and opening the file. Note that this mode
+ implies WriteOnly, and combining it with ReadWrite is
+ allowed. This flag currently only affects QFile. Other
+ classes might use this flag in the future, but until then
+ using this flag with any classes other than QFile may
+ result in undefined behavior.
+ \value ExistingOnly Fail if the file to be opened does not exist. This flag
+ must be specified alongside ReadOnly, WriteOnly, or
+ ReadWrite. Note that using this flag with ReadOnly alone
+ is redundant, as ReadOnly already fails when the file does
+ not exist. This flag currently only affects QFile. Other
+ classes might use this flag in the future, but until then
+ using this flag with any classes other than QFile may
+ result in undefined behavior.
Certain flags, such as \c Unbuffered and \c Truncate, are
meaningless when used with some subclasses. Some of these
diff --git a/src/corelib/io/qiodevice.h b/src/corelib/io/qiodevice.h
index e64a4d0bb1..2e4debe339 100644
--- a/src/corelib/io/qiodevice.h
+++ b/src/corelib/io/qiodevice.h
@@ -76,7 +76,9 @@ public:
Append = 0x0004,
Truncate = 0x0008,
Text = 0x0010,
- Unbuffered = 0x0020
+ Unbuffered = 0x0020,
+ NewOnly = 0x0040,
+ ExistingOnly = 0x0080
};
Q_DECLARE_FLAGS(OpenMode, OpenModeFlag)
@@ -161,7 +163,7 @@ protected:
#ifdef QT_NO_QOBJECT
QIODevice(QIODevicePrivate &dd);
#else
- QIODevice(QIODevicePrivate &dd, QObject *parent = Q_NULLPTR);
+ QIODevice(QIODevicePrivate &dd, QObject *parent = nullptr);
#endif
virtual qint64 readData(char *data, qint64 maxlen) = 0;
virtual qint64 readLineData(char *data, qint64 maxlen);
diff --git a/src/corelib/io/qiodevice_p.h b/src/corelib/io/qiodevice_p.h
index de2aa1597e..15a53a67dc 100644
--- a/src/corelib/io/qiodevice_p.h
+++ b/src/corelib/io/qiodevice_p.h
@@ -88,14 +88,14 @@ public:
class QRingBufferRef {
QRingBuffer *m_buf;
- inline QRingBufferRef() : m_buf(Q_NULLPTR) { }
+ inline QRingBufferRef() : m_buf(nullptr) { }
friend class QIODevicePrivate;
public:
// wrap functions from QRingBuffer
inline void setChunkSize(int size) { Q_ASSERT(m_buf); m_buf->setChunkSize(size); }
inline int chunkSize() const { Q_ASSERT(m_buf); return m_buf->chunkSize(); }
inline qint64 nextDataBlockSize() const { return (m_buf ? m_buf->nextDataBlockSize() : Q_INT64_C(0)); }
- inline const char *readPointer() const { return (m_buf ? m_buf->readPointer() : Q_NULLPTR); }
+ inline const char *readPointer() const { return (m_buf ? m_buf->readPointer() : nullptr); }
inline const char *readPointerAtPosition(qint64 pos, qint64 &length) const { Q_ASSERT(m_buf); return m_buf->readPointerAtPosition(pos, length); }
inline void free(qint64 bytes) { Q_ASSERT(m_buf); m_buf->free(bytes); }
inline char *reserve(qint64 bytes) { Q_ASSERT(m_buf); return m_buf->reserve(bytes); }
diff --git a/src/corelib/io/qlockfile.cpp b/src/corelib/io/qlockfile.cpp
index 129cf01b63..aa84ce6bc1 100644
--- a/src/corelib/io/qlockfile.cpp
+++ b/src/corelib/io/qlockfile.cpp
@@ -56,6 +56,8 @@ struct LockFileInfo
qint64 pid;
QString appname;
QString hostname;
+ QByteArray hostid;
+ QByteArray bootid;
};
}
@@ -331,13 +333,15 @@ QByteArray QLockFilePrivate::lockFileContents() const
// Use operator% from the fast builder to avoid multiple memory allocations.
return QByteArray::number(QCoreApplication::applicationPid()) % '\n'
% processNameByPid(QCoreApplication::applicationPid()).toUtf8() % '\n'
- % machineName().toUtf8() % '\n';
+ % machineName().toUtf8() % '\n'
+ % QSysInfo::machineUniqueId() % '\n'
+ % QSysInfo::bootUniqueId() % '\n';
}
static bool getLockInfo_helper(const QString &fileName, LockFileInfo *info)
{
QFile reader(fileName);
- if (!reader.open(QIODevice::ReadOnly))
+ if (!reader.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
QByteArray pidLine = reader.readLine();
@@ -349,9 +353,17 @@ static bool getLockInfo_helper(const QString &fileName, LockFileInfo *info)
QByteArray hostNameLine = reader.readLine();
hostNameLine.chop(1);
+ // prior to Qt 5.10, only the lines above were recorded
+ QByteArray hostId = reader.readLine();
+ hostId.chop(1);
+ QByteArray bootId = reader.readLine();
+ bootId.chop(1);
+
bool ok;
info->appname = QString::fromUtf8(appNameLine);
info->hostname = QString::fromUtf8(hostNameLine);
+ info->hostid = hostId;
+ info->bootid = bootId;
info->pid = pidLine.toLongLong(&ok);
return ok && info->pid > 0;
}
@@ -360,7 +372,20 @@ bool QLockFilePrivate::isApparentlyStale() const
{
LockFileInfo info;
if (getLockInfo_helper(fileName, &info)) {
- if (info.hostname.isEmpty() || info.hostname == machineName()) {
+ bool sameHost = info.hostname.isEmpty() || info.hostname == machineName();
+ if (!info.hostid.isEmpty()) {
+ // Override with the host ID, if we know it.
+ QByteArray ourHostId = QSysInfo::machineUniqueId();
+ if (!ourHostId.isEmpty())
+ sameHost = (ourHostId == info.hostid);
+ }
+
+ if (sameHost) {
+ if (!info.bootid.isEmpty()) {
+ // If we've rebooted, then the lock is definitely stale.
+ if (info.bootid != QSysInfo::bootUniqueId())
+ return true;
+ }
if (!isProcessRunning(info.pid, info.appname))
return true;
}
diff --git a/src/corelib/io/qlockfile_p.h b/src/corelib/io/qlockfile_p.h
index b41dfb38ad..5b69347206 100644
--- a/src/corelib/io/qlockfile_p.h
+++ b/src/corelib/io/qlockfile_p.h
@@ -55,7 +55,10 @@
#include <QtCore/qlockfile.h>
#include <QtCore/qfile.h>
+#include <qplatformdefs.h>
+
#ifdef Q_OS_WIN
+#include <io.h>
#include <qt_windows.h>
#endif
@@ -96,6 +99,19 @@ public:
int staleLockTime; // "int milliseconds" is big enough for 24 days
QLockFile::LockError lockError;
bool isLocked;
+
+ static int getLockFileHandle(QLockFile *f)
+ {
+ int fd;
+#ifdef Q_OS_WIN
+ // Use of this function on Windows WILL leak a file descriptor.
+ fd = _open_osfhandle(intptr_t(f->d_func()->fileHandle), 0);
+#else
+ fd = f->d_func()->fileHandle;
+#endif
+ QT_LSEEK(fd, 0, SEEK_SET);
+ return fd;
+ }
};
QT_END_NAMESPACE
diff --git a/src/corelib/io/qlockfile_unix.cpp b/src/corelib/io/qlockfile_unix.cpp
index fc01f83e80..418b7d22ba 100644
--- a/src/corelib/io/qlockfile_unix.cpp
+++ b/src/corelib/io/qlockfile_unix.cpp
@@ -147,7 +147,7 @@ static bool setNativeLocks(int fd)
QLockFile::LockError QLockFilePrivate::tryLock_sys()
{
const QByteArray lockFileName = QFile::encodeName(fileName);
- const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY | O_CREAT | O_EXCL, 0666);
+ const int fd = qt_safe_open(lockFileName.constData(), O_RDWR | O_CREAT | O_EXCL, 0666);
if (fd < 0) {
switch (errno) {
case EEXIST:
diff --git a/src/corelib/io/qlockfile_win.cpp b/src/corelib/io/qlockfile_win.cpp
index de64ec0432..6b8028460c 100644
--- a/src/corelib/io/qlockfile_win.cpp
+++ b/src/corelib/io/qlockfile_win.cpp
@@ -68,7 +68,7 @@ QLockFile::LockError QLockFilePrivate::tryLock_sys()
#ifndef Q_OS_WINRT
SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE };
HANDLE fh = CreateFile((const wchar_t*)fileEntry.nativeFilePath().utf16(),
- GENERIC_WRITE,
+ GENERIC_READ | GENERIC_WRITE,
dwShareMode,
&securityAtts,
CREATE_NEW, // error if already exists
@@ -76,7 +76,7 @@ QLockFile::LockError QLockFilePrivate::tryLock_sys()
NULL);
#else // !Q_OS_WINRT
HANDLE fh = CreateFile2((const wchar_t*)fileEntry.nativeFilePath().utf16(),
- GENERIC_WRITE,
+ GENERIC_READ | GENERIC_WRITE,
dwShareMode,
CREATE_NEW, // error if already exists
NULL);
diff --git a/src/corelib/io/qnoncontiguousbytedevice_p.h b/src/corelib/io/qnoncontiguousbytedevice_p.h
index bb0b533831..ebed1120db 100644
--- a/src/corelib/io/qnoncontiguousbytedevice_p.h
+++ b/src/corelib/io/qnoncontiguousbytedevice_p.h
@@ -105,12 +105,12 @@ class QNonContiguousByteDeviceByteArrayImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceByteArrayImpl(QByteArray *ba);
~QNonContiguousByteDeviceByteArrayImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
- bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
- bool reset() Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 pos() const Q_DECL_OVERRIDE;
+ const char* readPointer(qint64 maximumLength, qint64 &len) override;
+ bool advanceReadPointer(qint64 amount) override;
+ bool atEnd() const override;
+ bool reset() override;
+ qint64 size() const override;
+ qint64 pos() const override;
protected:
QByteArray* byteArray;
qint64 currentPosition;
@@ -121,12 +121,12 @@ class QNonContiguousByteDeviceRingBufferImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceRingBufferImpl(QSharedPointer<QRingBuffer> rb);
~QNonContiguousByteDeviceRingBufferImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
- bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
- bool reset() Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 pos() const Q_DECL_OVERRIDE;
+ const char* readPointer(qint64 maximumLength, qint64 &len) override;
+ bool advanceReadPointer(qint64 amount) override;
+ bool atEnd() const override;
+ bool reset() override;
+ qint64 size() const override;
+ qint64 pos() const override;
protected:
QSharedPointer<QRingBuffer> ringBuffer;
qint64 currentPosition;
@@ -139,12 +139,12 @@ class QNonContiguousByteDeviceIoDeviceImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceIoDeviceImpl(QIODevice *d);
~QNonContiguousByteDeviceIoDeviceImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
- bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
- bool reset() Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 pos() const Q_DECL_OVERRIDE;
+ const char* readPointer(qint64 maximumLength, qint64 &len) override;
+ bool advanceReadPointer(qint64 amount) override;
+ bool atEnd() const override;
+ bool reset() override;
+ qint64 size() const override;
+ qint64 pos() const override;
protected:
QIODevice* device;
QByteArray* currentReadBuffer;
@@ -162,11 +162,11 @@ class QNonContiguousByteDeviceBufferImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceBufferImpl(QBuffer *b);
~QNonContiguousByteDeviceBufferImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
- bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
- bool reset() Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
+ const char* readPointer(qint64 maximumLength, qint64 &len) override;
+ bool advanceReadPointer(qint64 amount) override;
+ bool atEnd() const override;
+ bool reset() override;
+ qint64 size() const override;
protected:
QBuffer* buffer;
QByteArray byteArray;
@@ -179,13 +179,13 @@ class QByteDeviceWrappingIoDevice : public QIODevice
public:
QByteDeviceWrappingIoDevice (QNonContiguousByteDevice *bd);
~QByteDeviceWrappingIoDevice ();
- virtual bool isSequential () const Q_DECL_OVERRIDE;
- virtual bool atEnd () const Q_DECL_OVERRIDE;
- virtual bool reset () Q_DECL_OVERRIDE;
- virtual qint64 size () const Q_DECL_OVERRIDE;
+ virtual bool isSequential () const override;
+ virtual bool atEnd () const override;
+ virtual bool reset () override;
+ virtual qint64 size () const override;
protected:
- virtual qint64 readData ( char * data, qint64 maxSize ) Q_DECL_OVERRIDE;
- virtual qint64 writeData ( const char * data, qint64 maxSize ) Q_DECL_OVERRIDE;
+ virtual qint64 readData ( char * data, qint64 maxSize ) override;
+ virtual qint64 writeData ( const char * data, qint64 maxSize ) override;
QNonContiguousByteDevice *byteDevice;
};
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index 64a59bc2c3..2ee680a7c6 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -1094,10 +1094,9 @@ bool QProcessPrivate::_q_canReadStandardError()
*/
bool QProcessPrivate::_q_canWrite()
{
- if (stdinChannel.notifier)
- stdinChannel.notifier->setEnabled(false);
-
if (writeBuffer.isEmpty()) {
+ if (stdinChannel.notifier)
+ stdinChannel.notifier->setEnabled(false);
#if defined QPROCESS_DEBUG
qDebug("QProcessPrivate::canWrite(), not writing anything (empty write buffer).");
#endif
@@ -1106,10 +1105,10 @@ bool QProcessPrivate::_q_canWrite()
const bool writeSucceeded = writeToStdin();
- if (stdinChannel.notifier && !writeBuffer.isEmpty())
- stdinChannel.notifier->setEnabled(true);
if (writeBuffer.isEmpty() && stdinChannel.closed)
closeWriteChannel();
+ else if (stdinChannel.notifier)
+ stdinChannel.notifier->setEnabled(!writeBuffer.isEmpty());
return writeSucceeded;
}
diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h
index c8aef2f0b1..474fc87de8 100644
--- a/src/corelib/io/qprocess.h
+++ b/src/corelib/io/qprocess.h
@@ -155,7 +155,7 @@ public:
};
Q_ENUM(ExitStatus)
- explicit QProcess(QObject *parent = Q_NULLPTR);
+ explicit QProcess(QObject *parent = nullptr);
virtual ~QProcess();
void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite);
@@ -164,7 +164,7 @@ public:
#endif
void start(OpenMode mode = ReadWrite);
bool startDetached(qint64 *pid = nullptr);
- bool open(OpenMode mode = ReadWrite) Q_DECL_OVERRIDE;
+ bool open(OpenMode mode = ReadWrite) override;
QString program() const;
void setProgram(const QString &program);
@@ -227,8 +227,8 @@ public:
qint64 processId() const;
bool waitForStarted(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
- bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForReadyRead(int msecs = 30000) override;
+ bool waitForBytesWritten(int msecs = 30000) override;
bool waitForFinished(int msecs = 30000);
QByteArray readAllStandardOutput();
@@ -238,12 +238,12 @@ public:
QProcess::ExitStatus exitStatus() const;
// QIODevice
- qint64 bytesAvailable() const Q_DECL_OVERRIDE; // ### Qt6: remove trivial override
- qint64 bytesToWrite() const Q_DECL_OVERRIDE;
- bool isSequential() const Q_DECL_OVERRIDE;
- bool canReadLine() const Q_DECL_OVERRIDE; // ### Qt6: remove trivial override
- void close() Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE; // ### Qt6: remove trivial override
+ qint64 bytesAvailable() const override; // ### Qt6: remove trivial override
+ qint64 bytesToWrite() const override;
+ bool isSequential() const override;
+ bool canReadLine() const override; // ### Qt6: remove trivial override
+ void close() override;
+ bool atEnd() const override; // ### Qt6: remove trivial override
static int execute(const QString &program, const QStringList &arguments);
static int execute(const QString &command);
@@ -253,7 +253,7 @@ public:
#if defined(Q_QDOC)
= QString()
#endif
- , qint64 *pid = Q_NULLPTR);
+ , qint64 *pid = nullptr);
#if !defined(Q_QDOC)
static bool startDetached(const QString &program, const QStringList &arguments); // ### Qt6: merge overloads
#endif
@@ -286,8 +286,8 @@ protected:
virtual void setupChildProcess();
// QIODevice
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 readData(char *data, qint64 maxlen) override;
+ qint64 writeData(const char *data, qint64 len) override;
private:
Q_DECLARE_PRIVATE(QProcess)
diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h
index deb29dca0a..aa7ecbe91d 100644
--- a/src/corelib/io/qprocess_p.h
+++ b/src/corelib/io/qprocess_p.h
@@ -352,7 +352,7 @@ public:
#if defined(Q_OS_UNIX)
void execChild(const char *workingDirectory, char **argv, char **envp);
#endif
- bool processStarted(QString *errorMessage = Q_NULLPTR);
+ bool processStarted(QString *errorMessage = nullptr);
void terminateProcess();
void killProcess();
void findExitCode();
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 15752f84b2..68b7a8bf9b 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -885,7 +885,7 @@ bool QProcessPrivate::waitForDeadChild()
// read the process information from our fd
forkfd_info info;
int ret;
- EINTR_LOOP(ret, forkfd_wait(forkfd, &info, Q_NULLPTR));
+ EINTR_LOOP(ret, forkfd_wait(forkfd, &info, nullptr));
exitCode = info.status;
crashed = info.code != CLD_EXITED;
diff --git a/src/corelib/io/qprocess_win.cpp b/src/corelib/io/qprocess_win.cpp
index e19d45841f..3a62a67e3b 100644
--- a/src/corelib/io/qprocess_win.cpp
+++ b/src/corelib/io/qprocess_win.cpp
@@ -115,9 +115,7 @@ static void qt_create_pipe(Q_PIPE *pipe, bool isInputPipe)
dwOpenMode |= PIPE_ACCESS_INBOUND;
dwInputBufferSize = dwPipeBufferSize;
}
- DWORD dwPipeFlags = PIPE_TYPE_BYTE | PIPE_WAIT;
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
- dwPipeFlags |= PIPE_REJECT_REMOTE_CLIENTS;
+ DWORD dwPipeFlags = PIPE_TYPE_BYTE | PIPE_WAIT | PIPE_REJECT_REMOTE_CLIENTS;
hServer = CreateNamedPipe(pipeName,
dwOpenMode,
dwPipeFlags,
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index 31f02e977d..35a0de4fb7 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -911,8 +911,8 @@ public:
inline QDynamicBufferResourceRoot(const QString &_root) : root(_root), buffer(0) { }
inline ~QDynamicBufferResourceRoot() { }
inline const uchar *mappingBuffer() const { return buffer; }
- virtual QString mappingRoot() const Q_DECL_OVERRIDE { return root; }
- virtual ResourceRootType type() const Q_DECL_OVERRIDE { return Resource_Buffer; }
+ virtual QString mappingRoot() const override { return root; }
+ virtual ResourceRootType type() const override { return Resource_Buffer; }
// size == -1 means "unknown"
bool registerSelf(const uchar *b, int size)
@@ -994,7 +994,7 @@ public:
}
}
QString mappingFile() const { return fileName; }
- virtual ResourceRootType type() const Q_DECL_OVERRIDE { return Resource_File; }
+ virtual ResourceRootType type() const override { return Resource_File; }
bool registerSelf(const QString &f) {
bool fromMM = false;
diff --git a/src/corelib/io/qresource_iterator_p.h b/src/corelib/io/qresource_iterator_p.h
index 6a4e215864..207a88b0ba 100644
--- a/src/corelib/io/qresource_iterator_p.h
+++ b/src/corelib/io/qresource_iterator_p.h
@@ -63,10 +63,10 @@ public:
QResourceFileEngineIterator(QDir::Filters filters, const QStringList &filterNames);
~QResourceFileEngineIterator();
- QString next() Q_DECL_OVERRIDE;
- bool hasNext() const Q_DECL_OVERRIDE;
+ QString next() override;
+ bool hasNext() const override;
- QString currentFileName() const Q_DECL_OVERRIDE;
+ QString currentFileName() const override;
private:
mutable QStringList entries;
diff --git a/src/corelib/io/qresource_p.h b/src/corelib/io/qresource_p.h
index e08ba64d2b..dcfe46704c 100644
--- a/src/corelib/io/qresource_p.h
+++ b/src/corelib/io/qresource_p.h
@@ -64,52 +64,52 @@ public:
explicit QResourceFileEngine(const QString &path);
~QResourceFileEngine();
- virtual void setFileName(const QString &file) Q_DECL_OVERRIDE;
+ virtual void setFileName(const QString &file) override;
- virtual bool open(QIODevice::OpenMode flags) Q_DECL_OVERRIDE ;
- virtual bool close() Q_DECL_OVERRIDE;
- virtual bool flush() Q_DECL_OVERRIDE;
- virtual qint64 size() const Q_DECL_OVERRIDE;
- virtual qint64 pos() const Q_DECL_OVERRIDE;
+ virtual bool open(QIODevice::OpenMode flags) override ;
+ virtual bool close() override;
+ virtual bool flush() override;
+ virtual qint64 size() const override;
+ virtual qint64 pos() const override;
virtual bool atEnd() const;
- virtual bool seek(qint64) Q_DECL_OVERRIDE;
- virtual qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- virtual qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ virtual bool seek(qint64) override;
+ virtual qint64 read(char *data, qint64 maxlen) override;
+ virtual qint64 write(const char *data, qint64 len) override;
- virtual bool remove() Q_DECL_OVERRIDE;
- virtual bool copy(const QString &newName) Q_DECL_OVERRIDE;
- virtual bool rename(const QString &newName) Q_DECL_OVERRIDE;
- virtual bool link(const QString &newName) Q_DECL_OVERRIDE;
+ virtual bool remove() override;
+ virtual bool copy(const QString &newName) override;
+ virtual bool rename(const QString &newName) override;
+ virtual bool link(const QString &newName) override;
- virtual bool isSequential() const Q_DECL_OVERRIDE;
+ virtual bool isSequential() const override;
- virtual bool isRelativePath() const Q_DECL_OVERRIDE;
+ virtual bool isRelativePath() const override;
- virtual bool mkdir(const QString &dirName, bool createParentDirectories) const Q_DECL_OVERRIDE;
- virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const Q_DECL_OVERRIDE;
+ virtual bool mkdir(const QString &dirName, bool createParentDirectories) const override;
+ virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const override;
- virtual bool setSize(qint64 size) Q_DECL_OVERRIDE;
+ virtual bool setSize(qint64 size) override;
- virtual QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
+ virtual QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const override;
- virtual bool caseSensitive() const Q_DECL_OVERRIDE;
+ virtual bool caseSensitive() const override;
- virtual FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
+ virtual FileFlags fileFlags(FileFlags type) const override;
- virtual bool setPermissions(uint perms) Q_DECL_OVERRIDE;
+ virtual bool setPermissions(uint perms) override;
- virtual QString fileName(QAbstractFileEngine::FileName file) const Q_DECL_OVERRIDE;
+ virtual QString fileName(QAbstractFileEngine::FileName file) const override;
- virtual uint ownerId(FileOwner) const Q_DECL_OVERRIDE;
- virtual QString owner(FileOwner) const Q_DECL_OVERRIDE;
+ virtual uint ownerId(FileOwner) const override;
+ virtual QString owner(FileOwner) const override;
- virtual QDateTime fileTime(FileTime time) const Q_DECL_OVERRIDE;
+ virtual QDateTime fileTime(FileTime time) const override;
- virtual Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE;
- virtual Iterator *endEntryList() Q_DECL_OVERRIDE;
+ virtual Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override;
+ virtual Iterator *endEntryList() override;
- bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) Q_DECL_OVERRIDE;
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) override;
+ bool supportsExtension(Extension extension) const override;
};
QT_END_NAMESPACE
diff --git a/src/corelib/io/qsavefile.cpp b/src/corelib/io/qsavefile.cpp
index 63f2284ef5..0cbc8c2234 100644
--- a/src/corelib/io/qsavefile.cpp
+++ b/src/corelib/io/qsavefile.cpp
@@ -184,7 +184,8 @@ void QSaveFile::setFileName(const QString &name)
Important: the \a mode must include QIODevice::WriteOnly.
It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered.
- QIODevice::ReadWrite and QIODevice::Append are not supported at the moment.
+ QIODevice::ReadWrite, QIODevice::Append, QIODevice::NewOnly and
+ QIODevice::ExistingOnly are not supported at the moment.
\sa QIODevice::OpenMode, setFileName()
*/
@@ -201,7 +202,8 @@ bool QSaveFile::open(OpenMode mode)
return false;
}
// In the future we could implement ReadWrite by copying from the existing file to the temp file...
- if ((mode & ReadOnly) || (mode & Append)) {
+ // The implications of NewOnly and ExistingOnly when used with QSaveFile need to be considered carefully...
+ if (mode & (ReadOnly | Append | NewOnly | ExistingOnly)) {
qWarning("QSaveFile::open: Unsupported open mode 0x%x", int(mode));
return false;
}
@@ -262,7 +264,7 @@ bool QSaveFile::open(OpenMode mode)
}
#endif
- d->fileEngine = new QTemporaryFileEngine(&d->finalFileName);
+ d->fileEngine = new QTemporaryFileEngine(&d->finalFileName, QTemporaryFileEngine::Win32NonShared);
// if the target file exists, we'll copy its permissions below,
// but until then, let's ensure the temporary file is not accessible
// to a third party
diff --git a/src/corelib/io/qsavefile.h b/src/corelib/io/qsavefile.h
index 09d6e29272..200068d30d 100644
--- a/src/corelib/io/qsavefile.h
+++ b/src/corelib/io/qsavefile.h
@@ -67,15 +67,15 @@ public:
explicit QSaveFile(const QString &name);
#ifndef QT_NO_QOBJECT
- explicit QSaveFile(QObject *parent = Q_NULLPTR);
+ explicit QSaveFile(QObject *parent = nullptr);
explicit QSaveFile(const QString &name, QObject *parent);
#endif
~QSaveFile();
- QString fileName() const Q_DECL_OVERRIDE;
+ QString fileName() const override;
void setFileName(const QString &name);
- bool open(OpenMode flags) Q_DECL_OVERRIDE;
+ bool open(OpenMode flags) override;
bool commit();
void cancelWriting();
@@ -84,10 +84,10 @@ public:
bool directWriteFallback() const;
protected:
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 writeData(const char *data, qint64 len) override;
private:
- void close() Q_DECL_OVERRIDE;
+ void close() override;
#if !QT_CONFIG(translation)
static QString tr(const char *string) { return QString::fromLatin1(string); }
#endif
diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h
index da5502e5ca..d78edd23a2 100644
--- a/src/corelib/io/qsettings.h
+++ b/src/corelib/io/qsettings.h
@@ -88,7 +88,7 @@ public:
NativeFormat,
IniFormat,
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
Registry32Format,
Registry64Format,
#endif
@@ -125,13 +125,13 @@ public:
#ifndef QT_NO_QOBJECT
explicit QSettings(const QString &organization,
- const QString &application = QString(), QObject *parent = Q_NULLPTR);
+ const QString &application = QString(), QObject *parent = nullptr);
QSettings(Scope scope, const QString &organization,
- const QString &application = QString(), QObject *parent = Q_NULLPTR);
+ const QString &application = QString(), QObject *parent = nullptr);
QSettings(Format format, Scope scope, const QString &organization,
- const QString &application = QString(), QObject *parent = Q_NULLPTR);
- QSettings(const QString &fileName, Format format, QObject *parent = Q_NULLPTR);
- explicit QSettings(QObject *parent = Q_NULLPTR);
+ const QString &application = QString(), QObject *parent = nullptr);
+ QSettings(const QString &fileName, Format format, QObject *parent = nullptr);
+ explicit QSettings(QObject *parent = nullptr);
#else
explicit QSettings(const QString &organization,
const QString &application = QString());
@@ -199,7 +199,7 @@ public:
protected:
#ifndef QT_NO_QOBJECT
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
#endif
private:
diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp
index 2a08ee2e64..aa14d8435a 100644
--- a/src/corelib/io/qsettings_mac.cpp
+++ b/src/corelib/io/qsettings_mac.cpp
@@ -616,7 +616,7 @@ bool QConfFileSettingsPrivate::readPlistFile(const QByteArray &data, ParsedSetti
{
QCFType<CFDataRef> cfData = data.toRawCFData();
QCFType<CFPropertyListRef> propertyList =
- CFPropertyListCreateWithData(kCFAllocatorDefault, cfData, kCFPropertyListImmutable, Q_NULLPTR, Q_NULLPTR);
+ CFPropertyListCreateWithData(kCFAllocatorDefault, cfData, kCFPropertyListImmutable, nullptr, nullptr);
if (!propertyList)
return true;
diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h
index 7923c24770..d18c96a06c 100644
--- a/src/corelib/io/qsettings_p.h
+++ b/src/corelib/io/qsettings_p.h
@@ -261,17 +261,17 @@ public:
QConfFileSettingsPrivate(const QString &fileName, QSettings::Format format);
~QConfFileSettingsPrivate();
- void remove(const QString &key) Q_DECL_OVERRIDE;
- void set(const QString &key, const QVariant &value) Q_DECL_OVERRIDE;
- bool get(const QString &key, QVariant *value) const Q_DECL_OVERRIDE;
+ void remove(const QString &key) override;
+ void set(const QString &key, const QVariant &value) override;
+ bool get(const QString &key, QVariant *value) const override;
- QStringList children(const QString &prefix, ChildSpec spec) const Q_DECL_OVERRIDE;
+ QStringList children(const QString &prefix, ChildSpec spec) const override;
- void clear() Q_DECL_OVERRIDE;
- void sync() Q_DECL_OVERRIDE;
- void flush() Q_DECL_OVERRIDE;
- bool isWritable() const Q_DECL_OVERRIDE;
- QString fileName() const Q_DECL_OVERRIDE;
+ void clear() override;
+ void sync() override;
+ void flush() override;
+ bool isWritable() const override;
+ QString fileName() const override;
bool readIniFile(const QByteArray &data, UnparsedSettingsMap *unparsedIniSections);
static bool readIniSection(const QSettingsKey &section, const QByteArray &data,
diff --git a/src/corelib/io/qstandardpaths_mac.mm b/src/corelib/io/qstandardpaths_mac.mm
index ab73edb008..11b5cc8c37 100644
--- a/src/corelib/io/qstandardpaths_mac.mm
+++ b/src/corelib/io/qstandardpaths_mac.mm
@@ -203,28 +203,17 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
if (type == AppDataLocation || type == AppLocalDataLocation) {
CFBundleRef mainBundle = CFBundleGetMainBundle();
if (mainBundle) {
- CFURLRef bundleUrl = CFBundleCopyBundleURL(mainBundle);
- CFStringRef cfBundlePath = CFURLCopyFileSystemPath(bundleUrl, kCFURLPOSIXPathStyle);
- QString bundlePath = QString::fromCFString(cfBundlePath);
- CFRelease(cfBundlePath);
- CFRelease(bundleUrl);
-
- CFURLRef resourcesUrl = CFBundleCopyResourcesDirectoryURL(mainBundle);
- CFStringRef cfResourcesPath = CFURLCopyFileSystemPath(resourcesUrl,
- kCFURLPOSIXPathStyle);
- QString resourcesPath = QString::fromCFString(cfResourcesPath);
- CFRelease(cfResourcesPath);
- CFRelease(resourcesUrl);
-
- // Handle bundled vs unbundled executables. CFBundleGetMainBundle() returns
- // a valid bundle in both cases. CFBundleCopyResourcesDirectoryURL() returns
- // an absolute path for unbundled executables.
- if (resourcesPath.startsWith(QLatin1Char('/')))
- dirs.append(resourcesPath);
- else
- dirs.append(bundlePath + resourcesPath);
+ if (QCFType<CFURLRef> resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle)) {
+ if (QCFType<CFURLRef> absoluteResouresURL = CFURLCopyAbsoluteURL(resourcesURL)) {
+ if (QCFType<CFStringRef> path = CFURLCopyFileSystemPath(absoluteResouresURL,
+ kCFURLPOSIXPathStyle)) {
+ dirs.append(QString::fromCFString(path));
+ }
+ }
+ }
}
}
+
const QString localDir = writableLocation(type);
if (!localDir.isEmpty())
dirs.prepend(localDir);
diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp
index d06778e2a1..e49edd9a40 100644
--- a/src/corelib/io/qstandardpaths_unix.cpp
+++ b/src/corelib/io/qstandardpaths_unix.cpp
@@ -170,7 +170,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
break;
}
-#ifndef QT_BOOTSTRAPPED
+#if QT_CONFIG(regularexpression)
// http://www.freedesktop.org/wiki/Software/xdg-user-dirs
QString xdgConfigHome = QFile::decodeName(qgetenv("XDG_CONFIG_HOME"));
if (xdgConfigHome.isEmpty())
@@ -232,7 +232,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
}
}
}
-#endif
+#endif // QT_CONFIG(regularexpression)
QString path;
switch (type) {
diff --git a/src/corelib/io/qstorageinfo_mac.cpp b/src/corelib/io/qstorageinfo_mac.cpp
index 0f271f2bc6..8b06543d71 100644
--- a/src/corelib/io/qstorageinfo_mac.cpp
+++ b/src/corelib/io/qstorageinfo_mac.cpp
@@ -112,7 +112,7 @@ void QStorageInfoPrivate::retrieveUrlProperties(bool initRootPath)
QCFType<CFArrayRef> keys = CFArrayCreate(kCFAllocatorDefault,
initRootPath ? rootPathKeys : propertyKeys,
size,
- Q_NULLPTR);
+ nullptr);
if (!keys)
return;
@@ -178,9 +178,9 @@ QList<QStorageInfo> QStorageInfoPrivate::mountedVolumes()
QList<QStorageInfo> volumes;
QCFType<CFURLEnumeratorRef> enumerator;
- enumerator = CFURLEnumeratorCreateForMountedVolumes(Q_NULLPTR,
+ enumerator = CFURLEnumeratorCreateForMountedVolumes(nullptr,
kCFURLEnumeratorSkipInvisibles,
- Q_NULLPTR);
+ nullptr);
CFURLEnumeratorResult result = kCFURLEnumeratorSuccess;
do {
diff --git a/src/corelib/io/qstorageinfo_unix.cpp b/src/corelib/io/qstorageinfo_unix.cpp
index c2d31e7677..7664b77d81 100644
--- a/src/corelib/io/qstorageinfo_unix.cpp
+++ b/src/corelib/io/qstorageinfo_unix.cpp
@@ -45,6 +45,7 @@
#include <QtCore/qtextstream.h>
#include <QtCore/private/qcore_unix_p.h>
+#include <QtCore/private/qlocale_tools_p.h>
#include <errno.h>
#include <sys/stat.h>
@@ -128,6 +129,7 @@ public:
inline QByteArray fileSystemType() const;
inline QByteArray device() const;
inline QByteArray options() const;
+ inline QByteArray subvolume() const;
private:
#if defined(Q_OS_BSD4)
QT_STATFSBUF *stat_buf;
@@ -143,9 +145,36 @@ private:
QByteArray m_device;
QByteArray m_options;
#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
+ struct mountinfoent : public mntent {
+ // Details from proc(5) section from /proc/<pid>/mountinfo:
+ //(1) mount ID: a unique ID for the mount (may be reused after umount(2)).
+ int mount_id;
+ //(2) parent ID: the ID of the parent mount (or of self for the top of the mount tree).
+// int parent_id;
+ //(3) major:minor: the value of st_dev for files on this filesystem (see stat(2)).
+// dev_t rdev;
+ //(4) root: the pathname of the directory in the filesystem which forms the root of this mount.
+ char *subvolume;
+ //(5) mount point: the pathname of the mount point relative to the process's root directory.
+// char *mnt_dir; // in mntent
+ //(6) mount options: per-mount options.
+// char *mnt_opts; // in mntent
+ //(7) optional fields: zero or more fields of the form "tag[:value]"; see below.
+// int flags;
+ //(8) separator: the end of the optional fields is marked by a single hyphen.
+
+ //(9) filesystem type: the filesystem type in the form "type[.subtype]".
+// char *mnt_type; // in mntent
+ //(10) mount source: filesystem-specific information or "none".
+// char *mnt_fsname; // in mntent
+ //(11) super options: per-superblock options.
+ char *superopts;
+ };
+
FILE *fp;
- mntent mnt;
QByteArray buffer;
+ mountinfoent mnt;
+ bool usingMountinfo;
#elif defined(Q_OS_HAIKU)
BVolumeRoster m_volumeRoster;
@@ -246,6 +275,10 @@ inline QByteArray QStorageIterator::options() const
return QByteArray();
}
+inline QByteArray QStorageIterator::subvolume() const
+{
+ return QByteArray();
+}
#elif defined(Q_OS_SOLARIS)
inline QStorageIterator::QStorageIterator()
@@ -262,7 +295,7 @@ inline QStorageIterator::~QStorageIterator()
inline bool QStorageIterator::isValid() const
{
- return fp != Q_NULLPTR;
+ return fp != nullptr;
}
inline bool QStorageIterator::next()
@@ -285,6 +318,10 @@ inline QByteArray QStorageIterator::device() const
return QByteArray(mnt.mnt_mntopts);
}
+inline QByteArray QStorageIterator::subvolume() const
+{
+ return QByteArray();
+}
#elif defined(Q_OS_ANDROID)
inline QStorageIterator::QStorageIterator()
@@ -340,6 +377,10 @@ inline QByteArray QStorageIterator::options() const
return m_options;
}
+inline QByteArray QStorageIterator::subvolume() const
+{
+ return QByteArray();
+}
#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
static const int bufferSize = 1024; // 2 paths (mount point+device) and metainfo;
@@ -348,23 +389,158 @@ static const int bufferSize = 1024; // 2 paths (mount point+device) and metainfo
inline QStorageIterator::QStorageIterator() :
buffer(QByteArray(bufferSize, 0))
{
- fp = ::setmntent(_PATH_MOUNTED, "r");
+ fp = nullptr;
+
+#ifdef Q_OS_LINUX
+ // first, try to open /proc/self/mountinfo, which has more details
+ fp = ::fopen("/proc/self/mountinfo", "re");
+#endif
+ if (fp) {
+ usingMountinfo = true;
+ } else {
+ usingMountinfo = false;
+ fp = ::setmntent(_PATH_MOUNTED, "r");
+ }
}
inline QStorageIterator::~QStorageIterator()
{
- if (fp)
- ::endmntent(fp);
+ if (fp) {
+ if (usingMountinfo)
+ ::fclose(fp);
+ else
+ ::endmntent(fp);
+ }
}
inline bool QStorageIterator::isValid() const
{
- return fp != Q_NULLPTR;
+ return fp != nullptr;
}
inline bool QStorageIterator::next()
{
- return ::getmntent_r(fp, &mnt, buffer.data(), buffer.size()) != Q_NULLPTR;
+ mnt.subvolume = nullptr;
+ mnt.superopts = nullptr;
+ if (!usingMountinfo)
+ return ::getmntent_r(fp, &mnt, buffer.data(), buffer.size()) != nullptr;
+
+ // Helper function to parse paths that the kernel inserts escape sequences
+ // for. The unescaped string is left at \a src and is properly
+ // NUL-terminated. Returns a pointer to the delimiter that terminated the
+ // path, or nullptr if it failed.
+ auto parseMangledPath = [](char *src) {
+ // The kernel escapes with octal the following characters:
+ // space ' ', tab '\t', backslask '\\', and newline '\n'
+ char *dst = src;
+ while (*src) {
+ switch (*src) {
+ case ' ':
+ // Unescaped space: end of the field.
+ *dst = '\0';
+ return src;
+
+ default:
+ *dst++ = *src++;
+ break;
+
+ case '\\':
+ // It always uses exactly three octal characters.
+ ++src;
+ char c = (*src++ - '0') << 6;
+ c |= (*src++ - '0') << 3;
+ c |= (*src++ - '0');
+ *dst++ = c;
+ break;
+ }
+ }
+
+ // Found a NUL before the end of the field.
+ src = nullptr;
+ return src;
+ };
+
+ char *ptr = buffer.data();
+ if (fgets(ptr, buffer.size(), fp) == nullptr)
+ return false;
+
+ size_t len = strlen(buffer.data());
+ if (len == 0)
+ return false;
+ if (ptr[len - 1] == '\n')
+ ptr[len - 1] = '\0';
+
+ // parse the line
+ bool ok;
+ mnt.mnt_freq = 0;
+ mnt.mnt_passno = 0;
+
+ mnt.mount_id = qstrtoll(ptr, const_cast<const char **>(&ptr), 10, &ok);
+ if (!ptr || !ok)
+ return false;
+
+ int parent_id = qstrtoll(ptr, const_cast<const char **>(&ptr), 10, &ok);
+ Q_UNUSED(parent_id);
+ if (!ptr || !ok)
+ return false;
+
+ int rdevmajor = qstrtoll(ptr, const_cast<const char **>(&ptr), 10, &ok);
+ if (!ptr || !ok)
+ return false;
+ if (*ptr != ':')
+ return false;
+ int rdevminor = qstrtoll(ptr + 1, const_cast<const char **>(&ptr), 10, &ok);
+ if (!ptr || !ok)
+ return false;
+ Q_UNUSED(rdevmajor);
+ Q_UNUSED(rdevminor);
+
+ if (*ptr != ' ')
+ return false;
+
+ mnt.subvolume = ++ptr;
+ ptr = parseMangledPath(ptr);
+ if (!ptr)
+ return false;
+
+ // unset a subvolume of "/" -- it's not a *sub* volume
+ if (mnt.subvolume + 1 == ptr)
+ *mnt.subvolume = '\0';
+
+ mnt.mnt_dir = ++ptr;
+ ptr = parseMangledPath(ptr);
+ if (!ptr)
+ return false;
+
+ mnt.mnt_opts = ++ptr;
+ ptr = strchr(ptr, ' ');
+ if (!ptr)
+ return false;
+
+ // we don't parse the flags, so just find the separator
+ if (char *const dashed = strstr(ptr, " - ")) {
+ *ptr = '\0';
+ ptr = dashed + strlen(" - ") - 1;
+ } else {
+ return false;
+ }
+
+ mnt.mnt_type = ++ptr;
+ ptr = strchr(ptr, ' ');
+ if (!ptr)
+ return false;
+ *ptr = '\0';
+
+ mnt.mnt_fsname = ++ptr;
+ ptr = parseMangledPath(ptr);
+ if (!ptr)
+ return false;
+
+ mnt.superopts = ++ptr;
+ ptr += strcspn(ptr, " \n");
+ *ptr = '\0';
+
+ return true;
}
inline QString QStorageIterator::rootPath() const
@@ -384,9 +560,28 @@ inline QByteArray QStorageIterator::device() const
inline QByteArray QStorageIterator::options() const
{
+ // Merge the two options, starting with the superblock options and letting
+ // the per-mount options override.
+ const char *superopts = mnt.superopts;
+
+ // Both mnt_opts and superopts start with "ro" or "rw", so we can skip the
+ // superblock's field (see show_mountinfo() in fs/proc_namespace.c).
+ if (superopts && superopts[0] == 'r') {
+ if (superopts[2] == '\0') // no other superopts besides "ro" / "rw"?
+ superopts = nullptr;
+ else if (superopts[2] == ',')
+ superopts += 3;
+ }
+
+ if (superopts)
+ return QByteArray(superopts) + ',' + mnt.mnt_opts;
return QByteArray(mnt.mnt_opts);
}
+inline QByteArray QStorageIterator::subvolume() const
+{
+ return QByteArray(mnt.subvolume);
+}
#elif defined(Q_OS_HAIKU)
inline QStorageIterator::QStorageIterator()
{
@@ -449,6 +644,10 @@ inline QByteArray QStorageIterator::options() const
return QByteArray();
}
+inline QByteArray QStorageIterator::subvolume() const
+{
+ return QByteArray();
+}
#else
inline QStorageIterator::QStorageIterator()
@@ -489,31 +688,11 @@ inline QByteArray QStorageIterator::options() const
return QByteArray();
}
-#endif
-
-static QByteArray extractSubvolume(const QStorageIterator &it)
+inline QByteArray QStorageIterator::subvolume() const
{
-#ifdef Q_OS_LINUX
- if (it.fileSystemType() == "btrfs") {
- const QByteArrayList opts = it.options().split(',');
- QByteArray id;
- for (const QByteArray &opt : opts) {
- static const char subvol[] = "subvol=";
- static const char subvolid[] = "subvolid=";
- if (opt.startsWith(subvol))
- return std::move(opt).mid(strlen(subvol));
- if (opt.startsWith(subvolid))
- id = std::move(opt).mid(strlen(subvolid));
- }
-
- // if we didn't find the subvolume name, return the subvolume ID
- return id;
- }
-#else
- Q_UNUSED(it);
-#endif
return QByteArray();
}
+#endif
void QStorageInfoPrivate::initRootPath()
{
@@ -541,7 +720,7 @@ void QStorageInfoPrivate::initRootPath()
rootPath = mountDir;
device = it.device();
fileSystemType = fsName;
- subvolume = extractSubvolume(it);
+ subvolume = it.subvolume();
}
}
}
diff --git a/src/corelib/io/qstorageinfo_win.cpp b/src/corelib/io/qstorageinfo_win.cpp
index 3830c5480c..8a3db90f87 100644
--- a/src/corelib/io/qstorageinfo_win.cpp
+++ b/src/corelib/io/qstorageinfo_win.cpp
@@ -147,8 +147,8 @@ void QStorageInfoPrivate::retrieveVolumeInfo()
const bool result = ::GetVolumeInformation(reinterpret_cast<const wchar_t *>(path.utf16()),
nameBuffer,
defaultBufferSize,
- Q_NULLPTR,
- Q_NULLPTR,
+ nullptr,
+ nullptr,
&fileSystemFlags,
fileSystemTypeBuffer,
defaultBufferSize);
diff --git a/src/corelib/io/qt_attribution.json b/src/corelib/io/qt_attribution.json
index 0fa4502db4..e9eb9c85e4 100644
--- a/src/corelib/io/qt_attribution.json
+++ b/src/corelib/io/qt_attribution.json
@@ -1,17 +1,3 @@
-[
-{
- "Id": "qtemporaryfile",
- "Name": "Parts of QTemporaryFile",
- "QDocModule": "qtcore",
- "QtUsage": "Used in Qt Core. Disable the qtemporaryfile feature to avoid.",
- "Path": "qtemporaryfile.cpp",
-
- "Description": "Generates a unique file path and returns a native handle to the open file.",
- "License": "BSD 3-clause \"New\" or \"Revised\" License",
- "LicenseId": "BSD-3-Clause",
- "LicenseFile": "QTEMPORARYFILE_LICENSE.txt",
- "Copyright": "Copyright (c) 1987, 1993 The Regents of the University of California."
-},
{
"Id": "psl",
"Name": "The Public Suffix List",
@@ -39,4 +25,3 @@ supported by Qt (by the QNetworkCookieJar class).",
"Copyright": "The list was originally provided by Jo Hermans <jo.hermans@gmail.com>.
It is now maintained on github (https://github.com/publicsuffix/list)."
}
-]
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index 2779246c5b..ed52472ab3 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -42,12 +42,12 @@
#ifndef QT_NO_TEMPORARYFILE
+#include "qdebug.h"
#include "qdiriterator.h"
+#include "qpair.h"
#include "qplatformdefs.h"
+#include "qrandom.h"
#include "private/qtemporaryfile_p.h"
-#include <QDebug>
-#include <QPair>
-#include <QRandomGenerator>
#if defined(QT_BUILD_CORE_LIB)
#include "qcoreapplication.h"
diff --git a/src/corelib/io/qtemporarydir.h b/src/corelib/io/qtemporarydir.h
index 3f6b70a2eb..5864ce5cfc 100644
--- a/src/corelib/io/qtemporarydir.h
+++ b/src/corelib/io/qtemporarydir.h
@@ -41,7 +41,7 @@
#define QTEMPORARYDIR_H
#include <QtCore/qdir.h>
-#include <QtCore/QScopedPointer>
+#include <QtCore/qscopedpointer.h>
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp
index 35699d52df..1983a22c65 100644
--- a/src/corelib/io/qtemporaryfile.cpp
+++ b/src/corelib/io/qtemporaryfile.cpp
@@ -207,7 +207,7 @@ QFileSystemEntry::NativePath QTemporaryFileName::generateNext()
changed and contain the generated path name.
*/
static bool createFileFromTemplate(NativeFileHandle &file, QTemporaryFileName &templ,
- quint32 mode, QSystemError &error)
+ quint32 mode, int flags, QSystemError &error)
{
const int maxAttempts = 16;
for (int attempt = 0; attempt < maxAttempts; ++attempt) {
@@ -216,16 +216,18 @@ static bool createFileFromTemplate(NativeFileHandle &file, QTemporaryFileName &t
#if defined(Q_OS_WIN)
Q_UNUSED(mode);
+ const DWORD shareMode = (flags & QTemporaryFileEngine::Win32NonShared)
+ ? 0u : (FILE_SHARE_READ | FILE_SHARE_WRITE);
# ifndef Q_OS_WINRT
file = CreateFile((const wchar_t *)path.constData(),
GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_NEW,
+ shareMode, NULL, CREATE_NEW,
FILE_ATTRIBUTE_NORMAL, NULL);
# else // !Q_OS_WINRT
file = CreateFile2((const wchar_t *)path.constData(),
GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE, CREATE_NEW,
+ shareMode, CREATE_NEW,
NULL);
# endif // Q_OS_WINRT
@@ -247,8 +249,9 @@ static bool createFileFromTemplate(NativeFileHandle &file, QTemporaryFileName &t
return false;
}
#else // POSIX
+ Q_UNUSED(flags)
file = QT_OPEN(path.constData(),
- QT_OPEN_CREAT | O_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE,
+ QT_OPEN_CREAT | QT_OPEN_EXCL | QT_OPEN_RDWR | QT_OPEN_LARGEFILE,
static_cast<mode_t>(mode));
if (file != -1)
@@ -366,7 +369,7 @@ bool QTemporaryFileEngine::open(QIODevice::OpenMode openMode)
unnamedFile = true;
d->fileEntry.clear();
} else if (st == CreateUnnamedFileStatus::NotSupported &&
- createFileFromTemplate(file, tfn, fileMode, error)) {
+ createFileFromTemplate(file, tfn, fileMode, flags, error)) {
filePathIsTemplate = false;
unnamedFile = false;
d->fileEntry = QFileSystemEntry(tfn.path, QFileSystemEntry::FromNativePath());
diff --git a/src/corelib/io/qtemporaryfile.h b/src/corelib/io/qtemporaryfile.h
index 7fc5a299fc..90a6a613e6 100644
--- a/src/corelib/io/qtemporaryfile.h
+++ b/src/corelib/io/qtemporaryfile.h
@@ -77,7 +77,7 @@ public:
// ### Hides open(flags)
bool open() { return open(QIODevice::ReadWrite); }
- QString fileName() const Q_DECL_OVERRIDE;
+ QString fileName() const override;
QString fileTemplate() const;
void setFileTemplate(const QString &name);
@@ -95,7 +95,7 @@ public:
static QTemporaryFile *createNativeFile(QFile &file);
protected:
- bool open(OpenMode flags) Q_DECL_OVERRIDE;
+ bool open(OpenMode flags) override;
private:
friend class QFile;
diff --git a/src/corelib/io/qtemporaryfile_p.h b/src/corelib/io/qtemporaryfile_p.h
index fb8887af53..0fec88d3cd 100644
--- a/src/corelib/io/qtemporaryfile_p.h
+++ b/src/corelib/io/qtemporaryfile_p.h
@@ -108,8 +108,10 @@ class QTemporaryFileEngine : public QFSFileEngine
{
Q_DECLARE_PRIVATE(QFSFileEngine)
public:
- QTemporaryFileEngine(const QString *templateName)
- : templateName(*templateName)
+ enum Flags { Win32NonShared = 0x1 };
+
+ explicit QTemporaryFileEngine(const QString *_templateName, int _flags = 0)
+ : templateName(*_templateName), flags(_flags)
{}
void initialize(const QString &file, quint32 mode, bool nameIsTemplate = true)
@@ -144,6 +146,7 @@ public:
const QString &templateName;
quint32 fileMode;
+ int flags = 0;
bool filePathIsTemplate;
bool filePathWasTemplate;
bool unnamedFile = false;
diff --git a/src/corelib/io/qtextstream.h b/src/corelib/io/qtextstream.h
deleted file mode 100644
index e72b7942fd..0000000000
--- a/src/corelib/io/qtextstream.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTEXTSTREAM_H
-#define QTEXTSTREAM_H
-
-#include <QtCore/qiodevice.h>
-#include <QtCore/qstring.h>
-#include <QtCore/qchar.h>
-#include <QtCore/qlocale.h>
-#include <QtCore/qscopedpointer.h>
-
-#include <stdio.h>
-
-#ifdef Status
-#error qtextstream.h must be included before any header file that defines Status
-#endif
-
-QT_BEGIN_NAMESPACE
-
-
-class QTextCodec;
-class QTextDecoder;
-
-class QTextStreamPrivate;
-class Q_CORE_EXPORT QTextStream // text stream class
-{
- Q_DECLARE_PRIVATE(QTextStream)
-
-public:
- enum RealNumberNotation {
- SmartNotation,
- FixedNotation,
- ScientificNotation
- };
- enum FieldAlignment {
- AlignLeft,
- AlignRight,
- AlignCenter,
- AlignAccountingStyle
- };
- enum Status {
- Ok,
- ReadPastEnd,
- ReadCorruptData,
- WriteFailed
- };
- enum NumberFlag {
- ShowBase = 0x1,
- ForcePoint = 0x2,
- ForceSign = 0x4,
- UppercaseBase = 0x8,
- UppercaseDigits = 0x10
- };
- Q_DECLARE_FLAGS(NumberFlags, NumberFlag)
-
- QTextStream();
- explicit QTextStream(QIODevice *device);
- explicit QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
- explicit QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
- explicit QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
- explicit QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
- virtual ~QTextStream();
-
-#ifndef QT_NO_TEXTCODEC
- void setCodec(QTextCodec *codec);
- void setCodec(const char *codecName);
- QTextCodec *codec() const;
- void setAutoDetectUnicode(bool enabled);
- bool autoDetectUnicode() const;
- void setGenerateByteOrderMark(bool generate);
- bool generateByteOrderMark() const;
-#endif
-
- void setLocale(const QLocale &locale);
- QLocale locale() const;
-
- void setDevice(QIODevice *device);
- QIODevice *device() const;
-
- void setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
- QString *string() const;
-
- Status status() const;
- void setStatus(Status status);
- void resetStatus();
-
- bool atEnd() const;
- void reset();
- void flush();
- bool seek(qint64 pos);
- qint64 pos() const;
-
- void skipWhiteSpace();
-
- QString readLine(qint64 maxlen = 0);
- bool readLineInto(QString *line, qint64 maxlen = 0);
- QString readAll();
- QString read(qint64 maxlen);
-
- void setFieldAlignment(FieldAlignment alignment);
- FieldAlignment fieldAlignment() const;
-
- void setPadChar(QChar ch);
- QChar padChar() const;
-
- void setFieldWidth(int width);
- int fieldWidth() const;
-
- void setNumberFlags(NumberFlags flags);
- NumberFlags numberFlags() const;
-
- void setIntegerBase(int base);
- int integerBase() const;
-
- void setRealNumberNotation(RealNumberNotation notation);
- RealNumberNotation realNumberNotation() const;
-
- void setRealNumberPrecision(int precision);
- int realNumberPrecision() const;
-
- QTextStream &operator>>(QChar &ch);
- QTextStream &operator>>(char &ch);
- QTextStream &operator>>(signed short &i);
- QTextStream &operator>>(unsigned short &i);
- QTextStream &operator>>(signed int &i);
- QTextStream &operator>>(unsigned int &i);
- QTextStream &operator>>(signed long &i);
- QTextStream &operator>>(unsigned long &i);
- QTextStream &operator>>(qlonglong &i);
- QTextStream &operator>>(qulonglong &i);
- QTextStream &operator>>(float &f);
- QTextStream &operator>>(double &f);
- QTextStream &operator>>(QString &s);
- QTextStream &operator>>(QByteArray &array);
- QTextStream &operator>>(char *c);
-
- QTextStream &operator<<(QChar ch);
- QTextStream &operator<<(char ch);
- QTextStream &operator<<(signed short i);
- QTextStream &operator<<(unsigned short i);
- QTextStream &operator<<(signed int i);
- QTextStream &operator<<(unsigned int i);
- QTextStream &operator<<(signed long i);
- QTextStream &operator<<(unsigned long i);
- QTextStream &operator<<(qlonglong i);
- QTextStream &operator<<(qulonglong i);
- QTextStream &operator<<(float f);
- QTextStream &operator<<(double f);
- QTextStream &operator<<(const QString &s);
- QTextStream &operator<<(QLatin1String s);
- QTextStream &operator<<(const QStringRef &s);
- QTextStream &operator<<(const QByteArray &array);
- QTextStream &operator<<(const char *c);
- QTextStream &operator<<(const void *ptr);
-
-private:
- Q_DISABLE_COPY(QTextStream)
- friend class QDebugStateSaverPrivate;
- friend class QDebug;
-
- QScopedPointer<QTextStreamPrivate> d_ptr;
-};
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(QTextStream::NumberFlags)
-
-/*****************************************************************************
- QTextStream manipulators
- *****************************************************************************/
-
-typedef QTextStream & (*QTextStreamFunction)(QTextStream &);// manipulator function
-typedef void (QTextStream::*QTSMFI)(int); // manipulator w/int argument
-typedef void (QTextStream::*QTSMFC)(QChar); // manipulator w/QChar argument
-
-
-class Q_CORE_EXPORT QTextStreamManipulator
-{
-public:
- Q_DECL_CONSTEXPR QTextStreamManipulator(QTSMFI m, int a) Q_DECL_NOTHROW : mf(m), mc(Q_NULLPTR), arg(a), ch() {}
- Q_DECL_CONSTEXPR QTextStreamManipulator(QTSMFC m, QChar c) Q_DECL_NOTHROW : mf(Q_NULLPTR), mc(m), arg(-1), ch(c) {}
- void exec(QTextStream &s) { if (mf) { (s.*mf)(arg); } else { (s.*mc)(ch); } }
-
-private:
- QTSMFI mf; // QTextStream member function
- QTSMFC mc; // QTextStream member function
- int arg; // member function argument
- QChar ch;
-};
-
-inline QTextStream &operator>>(QTextStream &s, QTextStreamFunction f)
-{ return (*f)(s); }
-
-inline QTextStream &operator<<(QTextStream &s, QTextStreamFunction f)
-{ return (*f)(s); }
-
-inline QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m)
-{ m.exec(s); return s; }
-
-Q_CORE_EXPORT QTextStream &bin(QTextStream &s);
-Q_CORE_EXPORT QTextStream &oct(QTextStream &s);
-Q_CORE_EXPORT QTextStream &dec(QTextStream &s);
-Q_CORE_EXPORT QTextStream &hex(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &showbase(QTextStream &s);
-Q_CORE_EXPORT QTextStream &forcesign(QTextStream &s);
-Q_CORE_EXPORT QTextStream &forcepoint(QTextStream &s);
-Q_CORE_EXPORT QTextStream &noshowbase(QTextStream &s);
-Q_CORE_EXPORT QTextStream &noforcesign(QTextStream &s);
-Q_CORE_EXPORT QTextStream &noforcepoint(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &uppercasebase(QTextStream &s);
-Q_CORE_EXPORT QTextStream &uppercasedigits(QTextStream &s);
-Q_CORE_EXPORT QTextStream &lowercasebase(QTextStream &s);
-Q_CORE_EXPORT QTextStream &lowercasedigits(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &fixed(QTextStream &s);
-Q_CORE_EXPORT QTextStream &scientific(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &left(QTextStream &s);
-Q_CORE_EXPORT QTextStream &right(QTextStream &s);
-Q_CORE_EXPORT QTextStream &center(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &endl(QTextStream &s);
-Q_CORE_EXPORT QTextStream &flush(QTextStream &s);
-Q_CORE_EXPORT QTextStream &reset(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &bom(QTextStream &s);
-
-Q_CORE_EXPORT QTextStream &ws(QTextStream &s);
-
-inline QTextStreamManipulator qSetFieldWidth(int width)
-{
- QTSMFI func = &QTextStream::setFieldWidth;
- return QTextStreamManipulator(func,width);
-}
-
-inline QTextStreamManipulator qSetPadChar(QChar ch)
-{
- QTSMFC func = &QTextStream::setPadChar;
- return QTextStreamManipulator(func, ch);
-}
-
-inline QTextStreamManipulator qSetRealNumberPrecision(int precision)
-{
- QTSMFI func = &QTextStream::setRealNumberPrecision;
- return QTextStreamManipulator(func, precision);
-}
-
-QT_END_NAMESPACE
-
-#endif // QTEXTSTREAM_H
diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h
index 0bb8707ff9..5062ef7905 100644
--- a/src/corelib/io/qurl.h
+++ b/src/corelib/io/qurl.h
@@ -184,7 +184,7 @@ public:
#endif
#ifdef Q_COMPILER_RVALUE_REFS
QUrl(QUrl &&other) Q_DECL_NOTHROW : d(other.d)
- { other.d = Q_NULLPTR; }
+ { other.d = nullptr; }
inline QUrl &operator=(QUrl &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
diff --git a/src/corelib/io/qurlidna.cpp b/src/corelib/io/qurlidna.cpp
index 226bc8ba28..2f8bd91f6e 100644
--- a/src/corelib/io/qurlidna.cpp
+++ b/src/corelib/io/qurlidna.cpp
@@ -60,11 +60,6 @@ struct NameprepCaseFoldingEntry {
ushort mapping[4];
};
-#if defined(Q_CC_MSVC) && _MSC_VER < 1600
-inline bool operator<(const NameprepCaseFoldingEntry &one, const NameprepCaseFoldingEntry &other)
-{ return one.uc < other.uc; }
-#endif
-
inline bool operator<(uint one, const NameprepCaseFoldingEntry &other)
{ return one < other.uc; }
diff --git a/src/corelib/io/qurlrecode.cpp b/src/corelib/io/qurlrecode.cpp
index ce90ab49d3..a9b23babc0 100644
--- a/src/corelib/io/qurlrecode.cpp
+++ b/src/corelib/io/qurlrecode.cpp
@@ -511,7 +511,7 @@ static int decode(QString &appendTo, const ushort *begin, const ushort *end)
if (Q_UNLIKELY(end - input < 3 || !isHex(input[1]) || !isHex(input[2]))) {
// badly-encoded data
appendTo.resize(origSize + (end - begin));
- memcpy(appendTo.begin() + origSize, begin, (end - begin) * sizeof(ushort));
+ memcpy(static_cast<void *>(appendTo.begin() + origSize), static_cast<const void *>(begin), (end - begin) * sizeof(ushort));
return end - begin;
}
@@ -519,7 +519,7 @@ static int decode(QString &appendTo, const ushort *begin, const ushort *end)
// detach
appendTo.resize(origSize + (end - begin));
output = reinterpret_cast<ushort *>(appendTo.begin()) + origSize;
- memcpy(output, begin, (input - begin) * sizeof(ushort));
+ memcpy(static_cast<void *>(output), static_cast<const void *>(begin), (input - begin) * sizeof(ushort));
output += input - begin;
}
diff --git a/src/corelib/io/qwindowspipereader.cpp b/src/corelib/io/qwindowspipereader.cpp
index ef5ff2d827..3055fb392e 100644
--- a/src/corelib/io/qwindowspipereader.cpp
+++ b/src/corelib/io/qwindowspipereader.cpp
@@ -175,7 +175,7 @@ void QWindowsPipeReader::notified(DWORD errorCode, DWORD numberOfBytesRead)
case ERROR_OPERATION_ABORTED:
if (stopped)
break;
- // fall through
+ Q_FALLTHROUGH();
default:
emit winError(errorCode, QLatin1String("QWindowsPipeReader::notified"));
pipeBroken = true;
diff --git a/src/corelib/io/qwindowspipewriter.cpp b/src/corelib/io/qwindowspipewriter.cpp
index 75cb8a7ede..92e8b6db52 100644
--- a/src/corelib/io/qwindowspipewriter.cpp
+++ b/src/corelib/io/qwindowspipewriter.cpp
@@ -145,7 +145,7 @@ void QWindowsPipeWriter::notified(DWORD errorCode, DWORD numberOfBytesWritten)
case ERROR_OPERATION_ABORTED:
if (stopped)
break;
- // fall through
+ Q_FALLTHROUGH();
default:
qErrnoWarning(errorCode, "QWindowsPipeWriter: asynchronous write failed.");
break;
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp
index f893cf06e3..d826110ec7 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.cpp
+++ b/src/corelib/itemmodels/qabstractitemmodel.cpp
@@ -48,11 +48,14 @@
#include <qstack.h>
#include <qbitarray.h>
#include <qdatetime.h>
+#include <qloggingcategory.h>
#include <limits.h>
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(lcCheckIndex, "qt.core.qabstractitemmodel.checkindex")
+
QPersistentModelIndexData *QPersistentModelIndexData::create(const QModelIndex &index)
{
Q_ASSERT(index.isValid()); // we will _never_ insert an invalid index in the list
@@ -482,12 +485,12 @@ class QEmptyItemModel : public QAbstractItemModel
{
public:
explicit QEmptyItemModel(QObject *parent = 0) : QAbstractItemModel(parent) {}
- QModelIndex index(int, int, const QModelIndex &) const Q_DECL_OVERRIDE { return QModelIndex(); }
- QModelIndex parent(const QModelIndex &) const Q_DECL_OVERRIDE { return QModelIndex(); }
- int rowCount(const QModelIndex &) const Q_DECL_OVERRIDE { return 0; }
- int columnCount(const QModelIndex &) const Q_DECL_OVERRIDE { return 0; }
- bool hasChildren(const QModelIndex &) const Q_DECL_OVERRIDE { return false; }
- QVariant data(const QModelIndex &, int) const Q_DECL_OVERRIDE { return QVariant(); }
+ QModelIndex index(int, int, const QModelIndex &) const override { return QModelIndex(); }
+ QModelIndex parent(const QModelIndex &) const override { return QModelIndex(); }
+ int rowCount(const QModelIndex &) const override { return 0; }
+ int columnCount(const QModelIndex &) const override { return 0; }
+ bool hasChildren(const QModelIndex &) const override { return false; }
+ QVariant data(const QModelIndex &, int) const override { return QVariant(); }
};
Q_GLOBAL_STATIC(QEmptyItemModel, qEmptyModel)
@@ -1105,7 +1108,27 @@ void QAbstractItemModel::resetInternalData()
Returns the sibling at \a row and \a column. If there is no sibling at this
position, an invalid QModelIndex is returned.
- \sa parent()
+ \sa parent(), siblingAtColumn(), siblingAtRow()
+*/
+
+/*!
+ \fn QModelIndex QModelIndex::siblingAtColumn(int column) const
+
+ Returns the sibling at \a column for the current row. If there is no sibling
+ at this position, an invalid QModelIndex is returned.
+
+ \sa sibling(), siblingAtRow()
+ \since 5.11
+*/
+
+/*!
+ \fn QModelIndex QModelIndex::siblingAtRow(int row) const
+
+ Returns the sibling at \a row for the current column. If there is no sibling
+ at this position, an invalid QModelIndex is returned.
+
+ \sa sibling(), siblingAtColumn()
+ \since 5.11
*/
/*!
@@ -2686,6 +2709,7 @@ bool QAbstractItemModel::decodeData(int row, int column, const QModelIndex &pare
void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last)
{
Q_ASSERT(first >= 0);
+ Q_ASSERT(first <= rowCount(parent)); // == is allowed, to insert at the end
Q_ASSERT(last >= first);
Q_D(QAbstractItemModel);
d->changes.push(QAbstractItemModelPrivate::Change(parent, first, last));
@@ -2741,6 +2765,7 @@ void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, i
{
Q_ASSERT(first >= 0);
Q_ASSERT(last >= first);
+ Q_ASSERT(last < rowCount(parent));
Q_D(QAbstractItemModel);
d->changes.push(QAbstractItemModelPrivate::Change(parent, first, last));
emit rowsAboutToBeRemoved(parent, first, last, QPrivateSignal());
@@ -2987,6 +3012,7 @@ void QAbstractItemModel::endMoveRows()
void QAbstractItemModel::beginInsertColumns(const QModelIndex &parent, int first, int last)
{
Q_ASSERT(first >= 0);
+ Q_ASSERT(first <= columnCount(parent)); // == is allowed, to insert at the end
Q_ASSERT(last >= first);
Q_D(QAbstractItemModel);
d->changes.push(QAbstractItemModelPrivate::Change(parent, first, last));
@@ -3043,6 +3069,7 @@ void QAbstractItemModel::beginRemoveColumns(const QModelIndex &parent, int first
{
Q_ASSERT(first >= 0);
Q_ASSERT(last >= first);
+ Q_ASSERT(last < columnCount(parent));
Q_D(QAbstractItemModel);
d->changes.push(QAbstractItemModelPrivate::Change(parent, first, last));
emit columnsAboutToBeRemoved(parent, first, last, QPrivateSignal());
@@ -3316,6 +3343,140 @@ QModelIndexList QAbstractItemModel::persistentIndexList() const
return result;
}
+/*!
+ \enum QAbstractItemModel::CheckIndexOption
+ \since 5.11
+
+ This enum can be used to control the checks performed by
+ QAbstractItemModel::checkIndex().
+
+ \value NoOption No check options are specified.
+
+ \value IndexIsValid The model index passed to
+ QAbstractItemModel::checkIndex() is checked to be a valid model index.
+
+ \value DoNotUseParent Does not perform any check
+ involving the usage of the parent of the index passed to
+ QAbstractItemModel::checkIndex().
+
+ \value ParentIsInvalid The parent of the model index
+ passed to QAbstractItemModel::checkIndex() is checked to be an invalid
+ model index. If both this option and DoNotUseParent
+ are specified, then this option is ignored.
+*/
+
+/*!
+ \since 5.11
+
+ This function checks whether \a index is a legal model index for
+ this model. A legal model index is either an invalid model index, or a
+ valid model index for which all the following holds:
+
+ \list
+
+ \li the index' model is \c{this};
+ \li the index' row is greater or equal than zero;
+ \li the index' row is less than the row count for the index' parent;
+ \li the index' column is greater or equal than zero;
+ \li the index' column is less than the column count for the index' parent.
+
+ \endlist
+
+ The \a options argument may change some of these checks. If \a options
+ contains \c{IndexIsValid}, then \a index must be a valid
+ index; this is useful when reimplementing functions such as \l{data()} or
+ \l{setData()}, which expect valid indexes.
+
+ If \a options contains \c{DoNotUseParent}, then the
+ checks that would call \l{parent()} are omitted; this allows calling this
+ function from a \l{parent()} reimplementation (otherwise, this would result
+ in endless recursion and a crash).
+
+ If \a options does not contain \c{DoNotUseParent}, and it
+ contains \c{ParentIsInvalid}, then an additional check is
+ performed: the parent index is checked for not being valid. This is useful
+ when implementing flat models such as lists or tables, where no model index
+ should have a valid parent index.
+
+ This function returns true if all the checks succeeded, and false otherwise.
+ This allows to use the function in \l{Q_ASSERT} and similar other debugging
+ mechanisms. If some check failed, a warning message will be printed in the
+ \c{qt.core.qabstractitemmodel.checkindex} logging category, containing
+ some information that may be useful for debugging the failure.
+
+ \note This function is a debugging helper for implementing your own item
+ models. When developing complex models, as well as when building
+ complicated model hierarchies (e.g. using proxy models), it is useful to
+ call this function in order to catch bugs relative to illegal model indices
+ (as defined above) accidentally passed to some QAbstractItemModel API.
+
+ \warning Note that it's undefined behavior to pass illegal indices to item
+ models, so applications must refrain from doing so, and not rely on any
+ "defensive" programming that item models could employ to handle illegal
+ indexes gracefully.
+
+ \sa QModelIndex
+*/
+bool QAbstractItemModel::checkIndex(const QModelIndex &index, CheckIndexOptions options) const
+{
+ if (!index.isValid()) {
+ if (options & CheckIndexOption::IndexIsValid) {
+ qCWarning(lcCheckIndex) << "Index" << index << "is not valid (expected valid)";
+ return false;
+ }
+ return true;
+ }
+
+ if (index.model() != this) {
+ qCWarning(lcCheckIndex) << "Index" << index
+ << "is for model" << index.model()
+ << "which is different from this model" << this;
+ return false;
+ }
+
+ if (index.row() < 0) {
+ qCWarning(lcCheckIndex) << "Index" << index
+ << "has negative row" << index.row();
+ return false;
+ }
+
+ if (index.column() < 0) {
+ qCWarning(lcCheckIndex) << "Index" << index
+ << "has negative column" << index.column();
+ return false;
+ }
+
+ if (!(options & CheckIndexOption::DoNotUseParent)) {
+ const QModelIndex parentIndex = index.parent();
+ if (options & CheckIndexOption::ParentIsInvalid) {
+ if (parentIndex.isValid()) {
+ qCWarning(lcCheckIndex) << "Index" << index
+ << "has valid parent" << parentIndex
+ << "(expected an invalid parent)";
+ return false;
+ }
+ }
+
+ const int rc = rowCount(parentIndex);
+ if (index.row() >= rc) {
+ qCWarning(lcCheckIndex) << "Index" << index
+ << "has out of range row" << index.row()
+ << "rowCount() is" << rc;
+ return false;
+ }
+
+ const int cc = columnCount(parentIndex);
+ if (index.column() >= cc) {
+ qCWarning(lcCheckIndex) << "Index" << index
+ << "has out of range column" << index.column()
+ << "columnCount() is" << cc;
+ return false;
+
+ }
+ }
+
+ return true;
+}
/*!
\class QAbstractTableModel
diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h
index a211d8e8ca..fca21b9bbc 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.h
+++ b/src/corelib/itemmodels/qabstractitemmodel.h
@@ -55,7 +55,7 @@ class Q_CORE_EXPORT QModelIndex
{
friend class QAbstractItemModel;
public:
- Q_DECL_CONSTEXPR inline QModelIndex() Q_DECL_NOTHROW : r(-1), c(-1), i(0), m(Q_NULLPTR) {}
+ Q_DECL_CONSTEXPR inline QModelIndex() Q_DECL_NOTHROW : r(-1), c(-1), i(0), m(nullptr) {}
// compiler-generated copy/move ctors/assignment operators are fine!
Q_DECL_CONSTEXPR inline int row() const Q_DECL_NOTHROW { return r; }
Q_DECL_CONSTEXPR inline int column() const Q_DECL_NOTHROW { return c; }
@@ -63,13 +63,15 @@ public:
inline void *internalPointer() const Q_DECL_NOTHROW { return reinterpret_cast<void*>(i); }
inline QModelIndex parent() const;
inline QModelIndex sibling(int row, int column) const;
+ inline QModelIndex siblingAtColumn(int column) const;
+ inline QModelIndex siblingAtRow(int row) const;
#if QT_DEPRECATED_SINCE(5, 8)
QT_DEPRECATED_X("Use QAbstractItemModel::index") inline QModelIndex child(int row, int column) const;
#endif
inline QVariant data(int role = Qt::DisplayRole) const;
inline Qt::ItemFlags flags() const;
Q_DECL_CONSTEXPR inline const QAbstractItemModel *model() const Q_DECL_NOTHROW { return m; }
- Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW { return (r >= 0) && (c >= 0) && (m != Q_NULLPTR); }
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW { return (r >= 0) && (c >= 0) && (m != nullptr); }
Q_DECL_CONSTEXPR inline bool operator==(const QModelIndex &other) const Q_DECL_NOTHROW
{ return (other.r == r) && (other.i == i) && (other.c == c) && (other.m == m); }
Q_DECL_CONSTEXPR inline bool operator!=(const QModelIndex &other) const Q_DECL_NOTHROW
@@ -115,7 +117,7 @@ public:
QPersistentModelIndex &operator=(const QPersistentModelIndex &other);
#ifdef Q_COMPILER_RVALUE_REFS
inline QPersistentModelIndex(QPersistentModelIndex &&other) Q_DECL_NOTHROW
- : d(other.d) { other.d = Q_NULLPTR; }
+ : d(other.d) { other.d = nullptr; }
inline QPersistentModelIndex &operator=(QPersistentModelIndex &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
@@ -171,7 +173,7 @@ class Q_CORE_EXPORT QAbstractItemModel : public QObject
friend class QIdentityProxyModel;
public:
- explicit QAbstractItemModel(QObject *parent = Q_NULLPTR);
+ explicit QAbstractItemModel(QObject *parent = nullptr);
virtual ~QAbstractItemModel();
Q_INVOKABLE bool hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const;
@@ -250,6 +252,17 @@ public:
};
Q_ENUM(LayoutChangeHint)
+ enum class CheckIndexOption {
+ NoOption = 0x0000,
+ IndexIsValid = 0x0001,
+ DoNotUseParent = 0x0002,
+ ParentIsInvalid = 0x0004,
+ };
+ Q_ENUM(CheckIndexOption)
+ Q_DECLARE_FLAGS(CheckIndexOptions, CheckIndexOption)
+
+ Q_REQUIRED_RESULT bool checkIndex(const QModelIndex &index, CheckIndexOptions options = CheckIndexOption::NoOption) const;
+
Q_SIGNALS:
void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>());
void headerDataChanged(Qt::Orientation orientation, int first, int last);
@@ -286,9 +299,9 @@ protected Q_SLOTS:
void resetInternalData();
protected:
- QAbstractItemModel(QAbstractItemModelPrivate &dd, QObject *parent = Q_NULLPTR);
+ QAbstractItemModel(QAbstractItemModelPrivate &dd, QObject *parent = nullptr);
- inline QModelIndex createIndex(int row, int column, void *data = Q_NULLPTR) const;
+ inline QModelIndex createIndex(int row, int column, void *data = nullptr) const;
inline QModelIndex createIndex(int row, int column, quintptr id) const;
void encodeData(const QModelIndexList &indexes, QDataStream &stream) const;
@@ -343,6 +356,8 @@ private:
Q_DISABLE_COPY(QAbstractItemModel)
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractItemModel::CheckIndexOptions)
+
inline bool QAbstractItemModel::insertRow(int arow, const QModelIndex &aparent)
{ return insertRows(arow, 1, aparent); }
inline bool QAbstractItemModel::insertColumn(int acolumn, const QModelIndex &aparent)
@@ -367,15 +382,15 @@ class Q_CORE_EXPORT QAbstractTableModel : public QAbstractItemModel
Q_OBJECT
public:
- explicit QAbstractTableModel(QObject *parent = Q_NULLPTR);
+ explicit QAbstractTableModel(QObject *parent = nullptr);
~QAbstractTableModel();
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
using QObject::parent;
@@ -384,8 +399,8 @@ protected:
private:
Q_DISABLE_COPY(QAbstractTableModel)
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const override;
+ bool hasChildren(const QModelIndex &parent) const override;
};
class Q_CORE_EXPORT QAbstractListModel : public QAbstractItemModel
@@ -393,15 +408,15 @@ class Q_CORE_EXPORT QAbstractListModel : public QAbstractItemModel
Q_OBJECT
public:
- explicit QAbstractListModel(QObject *parent = Q_NULLPTR);
+ explicit QAbstractListModel(QObject *parent = nullptr);
~QAbstractListModel();
- QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
using QObject::parent;
@@ -410,9 +425,9 @@ protected:
private:
Q_DISABLE_COPY(QAbstractListModel)
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const override;
+ int columnCount(const QModelIndex &parent) const override;
+ bool hasChildren(const QModelIndex &parent) const override;
};
// inline implementations
@@ -423,6 +438,12 @@ inline QModelIndex QModelIndex::parent() const
inline QModelIndex QModelIndex::sibling(int arow, int acolumn) const
{ return m ? (r == arow && c == acolumn) ? *this : m->sibling(arow, acolumn, *this) : QModelIndex(); }
+inline QModelIndex QModelIndex::siblingAtColumn(int acolumn) const
+{ return m ? (c == acolumn) ? *this : m->sibling(r, acolumn, *this) : QModelIndex(); }
+
+inline QModelIndex QModelIndex::siblingAtRow(int arow) const
+{ return m ? (r == arow) ? *this : m->sibling(arow, c, *this) : QModelIndex(); }
+
#if QT_DEPRECATED_SINCE(5, 8)
inline QModelIndex QModelIndex::child(int arow, int acolumn) const
{ return m ? m->index(arow, acolumn, *this) : QModelIndex(); }
diff --git a/src/corelib/itemmodels/qabstractproxymodel.h b/src/corelib/itemmodels/qabstractproxymodel.h
index c9eafa09ee..6aa82b21ee 100644
--- a/src/corelib/itemmodels/qabstractproxymodel.h
+++ b/src/corelib/itemmodels/qabstractproxymodel.h
@@ -56,7 +56,7 @@ class Q_CORE_EXPORT QAbstractProxyModel : public QAbstractItemModel
Q_PROPERTY(QAbstractItemModel* sourceModel READ sourceModel WRITE setSourceModel NOTIFY sourceModelChanged)
public:
- explicit QAbstractProxyModel(QObject *parent = Q_NULLPTR);
+ explicit QAbstractProxyModel(QObject *parent = nullptr);
~QAbstractProxyModel();
virtual void setSourceModel(QAbstractItemModel *sourceModel);
@@ -68,34 +68,34 @@ public:
Q_INVOKABLE virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const;
Q_INVOKABLE virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const;
- bool submit() Q_DECL_OVERRIDE;
- void revert() Q_DECL_OVERRIDE;
+ bool submit() override;
+ void revert() override;
- QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+ QMap<int, QVariant> itemData(const QModelIndex &index) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- bool setItemData(const QModelIndex& index, const QMap<int, QVariant> &roles) Q_DECL_OVERRIDE;
- bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
+ bool setItemData(const QModelIndex& index, const QMap<int, QVariant> &roles) override;
+ bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override;
- QModelIndex buddy(const QModelIndex &index) const Q_DECL_OVERRIDE;
- bool canFetchMore(const QModelIndex &parent) const Q_DECL_OVERRIDE;
- void fetchMore(const QModelIndex &parent) Q_DECL_OVERRIDE;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
- QSize span(const QModelIndex &index) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+ QModelIndex buddy(const QModelIndex &index) const override;
+ bool canFetchMore(const QModelIndex &parent) const override;
+ void fetchMore(const QModelIndex &parent) override;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
+ QSize span(const QModelIndex &index) const override;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
- QMimeData* mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ QMimeData* mimeData(const QModelIndexList &indexes) const override;
bool canDropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- Qt::DropActions supportedDragActions() const Q_DECL_OVERRIDE;
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
+ QStringList mimeTypes() const override;
+ Qt::DropActions supportedDragActions() const override;
+ Qt::DropActions supportedDropActions() const override;
Q_SIGNALS:
void sourceModelChanged(QPrivateSignal);
diff --git a/src/corelib/itemmodels/qidentityproxymodel.h b/src/corelib/itemmodels/qidentityproxymodel.h
index e93740c1a2..d2b1ed9498 100644
--- a/src/corelib/itemmodels/qidentityproxymodel.h
+++ b/src/corelib/itemmodels/qidentityproxymodel.h
@@ -54,29 +54,29 @@ class Q_CORE_EXPORT QIdentityProxyModel : public QAbstractProxyModel
{
Q_OBJECT
public:
- explicit QIdentityProxyModel(QObject* parent = Q_NULLPTR);
+ explicit QIdentityProxyModel(QObject* parent = nullptr);
~QIdentityProxyModel();
- int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex mapFromSource(const QModelIndex& sourceIndex) const Q_DECL_OVERRIDE;
- QModelIndex mapToSource(const QModelIndex& proxyIndex) const Q_DECL_OVERRIDE;
- QModelIndex parent(const QModelIndex& child) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex& parent = QModelIndex()) const override;
+ QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const override;
+ QModelIndex mapFromSource(const QModelIndex& sourceIndex) const override;
+ QModelIndex mapToSource(const QModelIndex& proxyIndex) const override;
+ QModelIndex parent(const QModelIndex& child) const override;
using QObject::parent;
- int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) Q_DECL_OVERRIDE;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
-
- QItemSelection mapSelectionFromSource(const QItemSelection& selection) const Q_DECL_OVERRIDE;
- QItemSelection mapSelectionToSource(const QItemSelection& selection) const Q_DECL_OVERRIDE;
- QModelIndexList match(const QModelIndex& start, int role, const QVariant& value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const Q_DECL_OVERRIDE;
- void setSourceModel(QAbstractItemModel* sourceModel) Q_DECL_OVERRIDE;
-
- bool insertColumns(int column, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeColumns(int column, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex& parent = QModelIndex()) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+ bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
+
+ QItemSelection mapSelectionFromSource(const QItemSelection& selection) const override;
+ QItemSelection mapSelectionToSource(const QItemSelection& selection) const override;
+ QModelIndexList match(const QModelIndex& start, int role, const QVariant& value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const override;
+ void setSourceModel(QAbstractItemModel* sourceModel) override;
+
+ bool insertColumns(int column, int count, const QModelIndex& parent = QModelIndex()) override;
+ bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;
+ bool removeColumns(int column, int count, const QModelIndex& parent = QModelIndex()) override;
+ bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()) override;
protected:
QIdentityProxyModel(QIdentityProxyModelPrivate &dd, QObject* parent);
diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp
index 59a10e9057..9af4fd9133 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.cpp
+++ b/src/corelib/itemmodels/qitemselectionmodel.cpp
@@ -218,13 +218,15 @@ QT_BEGIN_NAMESPACE
*/
bool QItemSelectionRange::intersects(const QItemSelectionRange &other) const
{
- return (isValid() && other.isValid()
- && parent() == other.parent()
- && model() == other.model()
+ // isValid() and parent() last since they are more expensive
+ return (model() == other.model()
&& ((top() <= other.top() && bottom() >= other.top())
|| (top() >= other.top() && top() <= other.bottom()))
&& ((left() <= other.left() && right() >= other.left())
- || (left() >= other.left() && left() <= other.right())));
+ || (left() >= other.left() && left() <= other.right()))
+ && parent() == other.parent()
+ && isValid() && other.isValid()
+ );
}
/*!
diff --git a/src/corelib/itemmodels/qitemselectionmodel.h b/src/corelib/itemmodels/qitemselectionmodel.h
index 9d33303ddc..091c5a21a5 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.h
+++ b/src/corelib/itemmodels/qitemselectionmodel.h
@@ -164,7 +164,7 @@ public:
Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag)
Q_FLAG(SelectionFlags)
- explicit QItemSelectionModel(QAbstractItemModel *model = Q_NULLPTR);
+ explicit QItemSelectionModel(QAbstractItemModel *model = nullptr);
explicit QItemSelectionModel(QAbstractItemModel *model, QObject *parent);
virtual ~QItemSelectionModel();
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 7dad892606..220c6be79e 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -300,7 +300,7 @@ public:
void updateChildrenMapping(const QModelIndex &source_parent, Mapping *parent_mapping,
Qt::Orientation orient, int start, int end, int delta_item_count, bool remove);
- virtual void _q_sourceModelDestroyed() Q_DECL_OVERRIDE;
+ virtual void _q_sourceModelDestroyed() override;
bool needsReorder(const QVector<int> &source_rows, const QModelIndex &source_parent) const;
@@ -1857,6 +1857,9 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
{
Q_D(QSortFilterProxyModel);
+ if (sourceModel == d->model)
+ return;
+
beginResetModel();
disconnect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
@@ -1910,6 +1913,7 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
disconnect(d->model, SIGNAL(modelAboutToBeReset()), this, SLOT(_q_sourceAboutToBeReset()));
disconnect(d->model, SIGNAL(modelReset()), this, SLOT(_q_sourceReset()));
+ d->_q_sourceModelDestroyed();
QAbstractProxyModel::setSourceModel(sourceModel);
connect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
@@ -1963,7 +1967,6 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
connect(d->model, SIGNAL(modelAboutToBeReset()), this, SLOT(_q_sourceAboutToBeReset()));
connect(d->model, SIGNAL(modelReset()), this, SLOT(_q_sourceReset()));
- d->_q_clearMapping();
endResetModel();
if (d->update_source_sort_column() && d->dynamic_sortfilter)
d->sort();
@@ -2682,6 +2685,7 @@ void QSortFilterProxyModel::setRecursiveFilteringEnabled(bool recursive)
d->filter_changed();
}
+#if QT_DEPRECATED_SINCE(5, 11)
/*!
\obsolete
@@ -2689,12 +2693,9 @@ void QSortFilterProxyModel::setRecursiveFilteringEnabled(bool recursive)
*/
void QSortFilterProxyModel::clear()
{
- Q_D(QSortFilterProxyModel);
- emit layoutAboutToBeChanged();
- d->_q_clearMapping();
- emit layoutChanged();
+ invalidate();
}
-
+#endif
/*!
\since 4.3
@@ -2710,6 +2711,7 @@ void QSortFilterProxyModel::invalidate()
emit layoutChanged();
}
+#if QT_DEPRECATED_SINCE(5, 11)
/*!
\obsolete
@@ -2717,9 +2719,9 @@ void QSortFilterProxyModel::invalidate()
*/
void QSortFilterProxyModel::filterChanged()
{
- Q_D(QSortFilterProxyModel);
- d->filter_changed();
+ invalidateFilter();
}
+#endif
/*!
\since 4.3
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.h b/src/corelib/itemmodels/qsortfilterproxymodel.h
index 9f9b59733d..196dab2770 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.h
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.h
@@ -70,16 +70,16 @@ class Q_CORE_EXPORT QSortFilterProxyModel : public QAbstractProxyModel
Q_PROPERTY(bool recursiveFilteringEnabled READ isRecursiveFilteringEnabled WRITE setRecursiveFilteringEnabled)
public:
- explicit QSortFilterProxyModel(QObject *parent = Q_NULLPTR);
+ explicit QSortFilterProxyModel(QObject *parent = nullptr);
~QSortFilterProxyModel();
- void setSourceModel(QAbstractItemModel *sourceModel) Q_DECL_OVERRIDE;
+ void setSourceModel(QAbstractItemModel *sourceModel) override;
- QModelIndex mapToSource(const QModelIndex &proxyIndex) const Q_DECL_OVERRIDE;
- QModelIndex mapFromSource(const QModelIndex &sourceIndex) const Q_DECL_OVERRIDE;
+ QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
+ QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
- QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const Q_DECL_OVERRIDE;
- QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const Q_DECL_OVERRIDE;
+ QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const override;
+ QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const override;
QRegExp filterRegExp() const;
void setFilterRegExp(const QRegExp &regExp);
@@ -115,7 +115,9 @@ public Q_SLOTS:
void setFilterRegExp(const QString &pattern);
void setFilterWildcard(const QString &pattern);
void setFilterFixedString(const QString &pattern);
- void clear();
+#if QT_DEPRECATED_SINCE(5, 11)
+ QT_DEPRECATED_X("Use QSortFilterProxyModel::invalidate") void clear();
+#endif
void invalidate();
protected:
@@ -123,50 +125,52 @@ protected:
virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const;
virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
- void filterChanged();
+#if QT_DEPRECATED_SINCE(5, 11)
+ QT_DEPRECATED_X("Use QSortFilterProxyModel::invalidateFilter") void filterChanged();
+#endif
void invalidateFilter();
public:
using QObject::parent;
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
- int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation,
- const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ const QVariant &value, int role = Qt::EditRole) override;
- QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
- void fetchMore(const QModelIndex &parent) Q_DECL_OVERRIDE;
- bool canFetchMore(const QModelIndex &parent) const Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void fetchMore(const QModelIndex &parent) override;
+ bool canFetchMore(const QModelIndex &parent) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- QModelIndex buddy(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QModelIndex buddy(const QModelIndex &index) const override;
QModelIndexList match(const QModelIndex &start, int role,
const QVariant &value, int hits = 1,
Qt::MatchFlags flags =
- Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const Q_DECL_OVERRIDE;
- QSize span(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
+ Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const override;
+ QSize span(const QModelIndex &index) const override;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ QStringList mimeTypes() const override;
+ Qt::DropActions supportedDropActions() const override;
private:
Q_DECLARE_PRIVATE(QSortFilterProxyModel)
Q_DISABLE_COPY(QSortFilterProxyModel)
diff --git a/src/corelib/itemmodels/qstringlistmodel.h b/src/corelib/itemmodels/qstringlistmodel.h
index 3bda848f48..38da1022ea 100644
--- a/src/corelib/itemmodels/qstringlistmodel.h
+++ b/src/corelib/itemmodels/qstringlistmodel.h
@@ -52,26 +52,26 @@ class Q_CORE_EXPORT QStringListModel : public QAbstractListModel
{
Q_OBJECT
public:
- explicit QStringListModel(QObject *parent = Q_NULLPTR);
- explicit QStringListModel(const QStringList &strings, QObject *parent = Q_NULLPTR);
+ explicit QStringListModel(QObject *parent = nullptr);
+ explicit QStringListModel(const QStringList &strings, QObject *parent = nullptr);
- int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
QStringList stringList() const;
void setStringList(const QStringList &strings);
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const override;
private:
Q_DISABLE_COPY(QStringListModel)
diff --git a/src/corelib/json/json.pri b/src/corelib/json/json.pri
deleted file mode 100644
index 1a4e2a72bf..0000000000
--- a/src/corelib/json/json.pri
+++ /dev/null
@@ -1,17 +0,0 @@
-HEADERS += \
- json/qjson_p.h \
- json/qjsondocument.h \
- json/qjsonobject.h \
- json/qjsonvalue.h \
- json/qjsonarray.h \
- json/qjsonwriter_p.h \
- json/qjsonparser_p.h
-
-SOURCES += \
- json/qjson.cpp \
- json/qjsondocument.cpp \
- json/qjsonobject.cpp \
- json/qjsonarray.cpp \
- json/qjsonvalue.cpp \
- json/qjsonwriter.cpp \
- json/qjsonparser.cpp
diff --git a/src/corelib/json/qjson_p.h b/src/corelib/json/qjson_p.h
deleted file mode 100644
index 131528376b..0000000000
--- a/src/corelib/json/qjson_p.h
+++ /dev/null
@@ -1,781 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSON_P_H
-#define QJSON_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qjsonobject.h>
-#include <qjsonvalue.h>
-#include <qjsondocument.h>
-#include <qjsonarray.h>
-#include <qatomic.h>
-#include <qstring.h>
-#include <qendian.h>
-#include <qnumeric.h>
-
-#include "private/qendian_p.h"
-#include "private/qsimd_p.h"
-
-#include <limits.h>
-#include <limits>
-
-QT_BEGIN_NAMESPACE
-
-/*
- This defines a binary data structure for Json data. The data structure is optimised for fast reading
- and minimum allocations. The whole data structure can be mmap'ed and used directly.
-
- In most cases the binary structure is not as space efficient as a utf8 encoded text representation, but
- much faster to access.
-
- The size requirements are:
-
- String:
- Latin1 data: 2 bytes header + string.length()
- Full Unicode: 4 bytes header + 2*(string.length())
-
- Values: 4 bytes + size of data (size can be 0 for some data)
- bool: 0 bytes
- double: 8 bytes (0 if integer with less than 27bits)
- string: see above
- array: size of array
- object: size of object
- Array: 12 bytes + 4*length + size of Value data
- Object: 12 bytes + 8*length + size of Key Strings + size of Value data
-
- For an example such as
-
- { // object: 12 + 5*8 = 52
- "firstName": "John", // key 12, value 8 = 20
- "lastName" : "Smith", // key 12, value 8 = 20
- "age" : 25, // key 8, value 0 = 8
- "address" : // key 12, object below = 140
- { // object: 12 + 4*8
- "streetAddress": "21 2nd Street", // key 16, value 16
- "city" : "New York", // key 8, value 12
- "state" : "NY", // key 8, value 4
- "postalCode" : "10021" // key 12, value 8
- }, // object total: 128
- "phoneNumber": // key: 16, value array below = 172
- [ // array: 12 + 2*4 + values below: 156
- { // object 12 + 2*8
- "type" : "home", // key 8, value 8
- "number": "212 555-1234" // key 8, value 16
- }, // object total: 68
- { // object 12 + 2*8
- "type" : "fax", // key 8, value 8
- "number": "646 555-4567" // key 8, value 16
- } // object total: 68
- ] // array total: 156
- } // great total: 412 bytes
-
- The uncompressed text file used roughly 500 bytes, so in this case we end up using about
- the same space as the text representation.
-
- Other measurements have shown a slightly bigger binary size than a compact text
- representation where all possible whitespace was stripped out.
-*/
-#define Q_DECLARE_JSONPRIVATE_TYPEINFO(Class, Flags) } Q_DECLARE_TYPEINFO(QJsonPrivate::Class, Flags); namespace QJsonPrivate {
-namespace QJsonPrivate {
-
-class Array;
-class Object;
-class Value;
-class Entry;
-
-template<typename T>
-using q_littleendian = QLEInteger<T>;
-
-typedef q_littleendian<short> qle_short;
-typedef q_littleendian<unsigned short> qle_ushort;
-typedef q_littleendian<int> qle_int;
-typedef q_littleendian<unsigned int> qle_uint;
-
-template<int pos, int width>
-using qle_bitfield = QLEIntegerBitfield<uint, pos, width>;
-
-template<int pos, int width>
-using qle_signedbitfield = QLEIntegerBitfield<int, pos, width>;
-
-typedef qle_uint offset;
-
-// round the size up to the next 4 byte boundary
-inline int alignedSize(int size) { return (size + 3) & ~3; }
-
-static inline bool useCompressed(const QString &s)
-{
- if (s.length() >= 0x8000)
- return false;
- const ushort *uc = (const ushort *)s.constData();
- const ushort *e = uc + s.length();
- while (uc < e) {
- if (*uc > 0xff)
- return false;
- ++uc;
- }
- return true;
-}
-
-static inline int qStringSize(const QString &string, bool compress)
-{
- int l = 2 + string.length();
- if (!compress)
- l *= 2;
- return alignedSize(l);
-}
-
-// returns INT_MAX if it can't compress it into 28 bits
-static inline int compressedNumber(double d)
-{
- // this relies on details of how ieee floats are represented
- const int exponent_off = 52;
- const quint64 fraction_mask = 0x000fffffffffffffull;
- const quint64 exponent_mask = 0x7ff0000000000000ull;
-
- quint64 val;
- memcpy (&val, &d, sizeof(double));
- int exp = (int)((val & exponent_mask) >> exponent_off) - 1023;
- if (exp < 0 || exp > 25)
- return INT_MAX;
-
- quint64 non_int = val & (fraction_mask >> exp);
- if (non_int)
- return INT_MAX;
-
- bool neg = (val >> 63) != 0;
- val &= fraction_mask;
- val |= ((quint64)1 << 52);
- int res = (int)(val >> (52 - exp));
- return neg ? -res : res;
-}
-
-class Latin1String;
-
-class String
-{
-public:
- explicit String(const char *data) { d = (Data *)data; }
-
- struct Data {
- qle_uint length;
- qle_ushort utf16[1];
- };
-
- Data *d;
-
- int byteSize() const { return sizeof(uint) + sizeof(ushort) * d->length; }
- bool isValid(int maxSize) const {
- // Check byteSize() <= maxSize, avoiding integer overflow
- maxSize -= sizeof(uint);
- return maxSize >= 0 && uint(d->length) <= maxSize / sizeof(ushort);
- }
-
- inline String &operator=(const QString &str)
- {
- d->length = str.length();
-#if Q_BYTE_ORDER == Q_BIG_ENDIAN
- const ushort *uc = (const ushort *)str.unicode();
- for (int i = 0; i < str.length(); ++i)
- d->utf16[i] = uc[i];
-#else
- memcpy(d->utf16, str.unicode(), str.length()*sizeof(ushort));
-#endif
- if (str.length() & 1)
- d->utf16[str.length()] = 0;
- return *this;
- }
-
- inline bool operator ==(const QString &str) const {
- int slen = str.length();
- int l = d->length;
- if (slen != l)
- return false;
- const ushort *s = (const ushort *)str.constData();
- const qle_ushort *a = d->utf16;
- const ushort *b = s;
- while (l-- && *a == *b)
- a++,b++;
- return (l == -1);
- }
- inline bool operator !=(const QString &str) const {
- return !operator ==(str);
- }
- inline bool operator >=(const QString &str) const {
- // ###
- return toString() >= str;
- }
-
- inline bool operator<(const Latin1String &str) const;
- inline bool operator>=(const Latin1String &str) const { return !operator <(str); }
- inline bool operator ==(const Latin1String &str) const;
-
- inline bool operator ==(const String &str) const {
- if (d->length != str.d->length)
- return false;
- return !memcmp(d->utf16, str.d->utf16, d->length*sizeof(ushort));
- }
- inline bool operator<(const String &other) const;
- inline bool operator >=(const String &other) const { return !(*this < other); }
-
- inline QString toString() const {
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
- return QString((QChar *)d->utf16, d->length);
-#else
- int l = d->length;
- QString str(l, Qt::Uninitialized);
- QChar *ch = str.data();
- for (int i = 0; i < l; ++i)
- ch[i] = QChar(d->utf16[i]);
- return str;
-#endif
- }
-
-};
-
-class Latin1String
-{
-public:
- explicit Latin1String(const char *data) { d = (Data *)data; }
-
- struct Data {
- qle_ushort length;
- char latin1[1];
- };
- Data *d;
-
- int byteSize() const { return sizeof(ushort) + sizeof(char)*(d->length); }
- bool isValid(int maxSize) const {
- return byteSize() <= maxSize;
- }
-
- inline Latin1String &operator=(const QString &str)
- {
- int len = d->length = str.length();
- uchar *l = (uchar *)d->latin1;
- const ushort *uc = (const ushort *)str.unicode();
- int i = 0;
-#ifdef __SSE2__
- for ( ; i + 16 <= len; i += 16) {
- __m128i chunk1 = _mm_loadu_si128((__m128i*)&uc[i]); // load
- __m128i chunk2 = _mm_loadu_si128((__m128i*)&uc[i + 8]); // load
- // pack the two vector to 16 x 8bits elements
- const __m128i result = _mm_packus_epi16(chunk1, chunk2);
- _mm_storeu_si128((__m128i*)&l[i], result); // store
- }
-# ifdef Q_PROCESSOR_X86_64
- // we can do one more round, of 8 characters
- if (i + 8 <= len) {
- __m128i chunk = _mm_loadu_si128((__m128i*)&uc[i]); // load
- // pack with itself, we'll discard the high part anyway
- chunk = _mm_packus_epi16(chunk, chunk);
- // unaligned 64-bit store
- qToUnaligned(_mm_cvtsi128_si64(chunk), l + i);
- i += 8;
- }
-# endif
-#endif
- for ( ; i < len; ++i)
- l[i] = uc[i];
- for ( ; (quintptr)(l+i) & 0x3; ++i)
- l[i] = 0;
- return *this;
- }
-
- QLatin1String toQLatin1String() const Q_DECL_NOTHROW {
- return QLatin1String(d->latin1, d->length);
- }
-
- inline bool operator<(const String &str) const
- {
- const qle_ushort *uc = (qle_ushort *) str.d->utf16;
- if (!uc || *uc == 0)
- return false;
-
- const uchar *c = (uchar *)d->latin1;
- const uchar *e = c + qMin((int)d->length, (int)str.d->length);
-
- while (c < e) {
- if (*c != *uc)
- break;
- ++c;
- ++uc;
- }
- return (c == e ? (int)d->length < (int)str.d->length : *c < *uc);
-
- }
- inline bool operator ==(const String &str) const {
- return (str == *this);
- }
- inline bool operator >=(const String &str) const {
- return !(*this < str);
- }
-
- inline QString toString() const {
- return QString::fromLatin1(d->latin1, d->length);
- }
-};
-
-#define DEF_OP(op) \
- inline bool operator op(Latin1String lhs, Latin1String rhs) Q_DECL_NOTHROW \
- { \
- return lhs.toQLatin1String() op rhs.toQLatin1String(); \
- } \
- inline bool operator op(QLatin1String lhs, Latin1String rhs) Q_DECL_NOTHROW \
- { \
- return lhs op rhs.toQLatin1String(); \
- } \
- inline bool operator op(Latin1String lhs, QLatin1String rhs) Q_DECL_NOTHROW \
- { \
- return lhs.toQLatin1String() op rhs; \
- } \
- inline bool operator op(const QString &lhs, Latin1String rhs) Q_DECL_NOTHROW \
- { \
- return lhs op rhs.toQLatin1String(); \
- } \
- inline bool operator op(Latin1String lhs, const QString &rhs) Q_DECL_NOTHROW \
- { \
- return lhs.toQLatin1String() op rhs; \
- } \
- /*end*/
-DEF_OP(==)
-DEF_OP(!=)
-DEF_OP(< )
-DEF_OP(> )
-DEF_OP(<=)
-DEF_OP(>=)
-#undef DEF_OP
-
-inline bool String::operator ==(const Latin1String &str) const
-{
- if ((int)d->length != (int)str.d->length)
- return false;
- const qle_ushort *uc = d->utf16;
- const qle_ushort *e = uc + d->length;
- const uchar *c = (uchar *)str.d->latin1;
-
- while (uc < e) {
- if (*uc != *c)
- return false;
- ++uc;
- ++c;
- }
- return true;
-}
-
-inline bool String::operator <(const String &other) const
-{
- int alen = d->length;
- int blen = other.d->length;
- int l = qMin(alen, blen);
- qle_ushort *a = d->utf16;
- qle_ushort *b = other.d->utf16;
-
- while (l-- && *a == *b)
- a++,b++;
- if (l==-1)
- return (alen < blen);
- return (ushort)*a < (ushort)*b;
-}
-
-inline bool String::operator<(const Latin1String &str) const
-{
- const uchar *c = (uchar *) str.d->latin1;
- if (!c || *c == 0)
- return false;
-
- const qle_ushort *uc = d->utf16;
- const qle_ushort *e = uc + qMin((int)d->length, (int)str.d->length);
-
- while (uc < e) {
- if (*uc != *c)
- break;
- ++uc;
- ++c;
- }
- return (uc == e ? (int)d->length < (int)str.d->length : (ushort)*uc < *c);
-
-}
-
-static inline void copyString(char *dest, const QString &str, bool compress)
-{
- if (compress) {
- Latin1String string(dest);
- string = str;
- } else {
- String string(dest);
- string = str;
- }
-}
-
-
-/*
- Base is the base class for both Object and Array. Both classe work more or less the same way.
- The class starts with a header (defined by the struct below), then followed by data (the data for
- values in the Array case and Entry's (see below) for objects.
-
- After the data a table follows (tableOffset points to it) containing Value objects for Arrays, and
- offsets from the beginning of the object to Entry's in the case of Object.
-
- Entry's in the Object's table are lexicographically sorted by key in the table(). This allows the usage
- of a binary search over the keys in an Object.
- */
-class Base
-{
-public:
- qle_uint size;
- union {
- uint _dummy;
- qle_bitfield<0, 1> is_object;
- qle_bitfield<1, 31> length;
- };
- offset tableOffset;
- // content follows here
-
- inline bool isObject() const { return !!is_object; }
- inline bool isArray() const { return !isObject(); }
-
- inline offset *table() const { return (offset *) (((char *) this) + tableOffset); }
-
- int reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace);
- void removeItems(int pos, int numItems);
-};
-
-class Object : public Base
-{
-public:
- Entry *entryAt(int i) const {
- return reinterpret_cast<Entry *>(((char *)this) + table()[i]);
- }
- int indexOf(const QString &key, bool *exists) const;
- int indexOf(QLatin1String key, bool *exists) const;
-
- bool isValid(int maxSize) const;
-};
-
-
-class Array : public Base
-{
-public:
- inline Value at(int i) const;
- inline Value &operator [](int i);
-
- bool isValid(int maxSize) const;
-};
-
-
-class Value
-{
-public:
- enum {
- MaxSize = (1<<27) - 1
- };
- union {
- uint _dummy;
- qle_bitfield<0, 3> type;
- qle_bitfield<3, 1> latinOrIntValue;
- qle_bitfield<4, 1> latinKey;
- qle_bitfield<5, 27> value;
- qle_signedbitfield<5, 27> int_value;
- };
-
- inline char *data(const Base *b) const { return ((char *)b) + value; }
- int usedStorage(const Base *b) const;
-
- bool toBoolean() const;
- double toDouble(const Base *b) const;
- QString toString(const Base *b) const;
- String asString(const Base *b) const;
- Latin1String asLatin1String(const Base *b) const;
- Base *base(const Base *b) const;
-
- bool isValid(const Base *b) const;
-
- static int requiredStorage(QJsonValue &v, bool *compressed);
- static uint valueToStore(const QJsonValue &v, uint offset);
- static void copyData(const QJsonValue &v, char *dest, bool compressed);
-};
-Q_DECLARE_JSONPRIVATE_TYPEINFO(Value, Q_PRIMITIVE_TYPE)
-
-inline Value Array::at(int i) const
-{
- return *(Value *) (table() + i);
-}
-
-inline Value &Array::operator [](int i)
-{
- return *(Value *) (table() + i);
-}
-
-
-
-class Entry {
-public:
- Value value;
- // key
- // value data follows key
-
- uint size() const {
- int s = sizeof(Entry);
- if (value.latinKey)
- s += shallowLatin1Key().byteSize();
- else
- s += shallowKey().byteSize();
- return alignedSize(s);
- }
-
- int usedStorage(Base *b) const {
- return size() + value.usedStorage(b);
- }
-
- String shallowKey() const
- {
- Q_ASSERT(!value.latinKey);
- return String((const char *)this + sizeof(Entry));
- }
- Latin1String shallowLatin1Key() const
- {
- Q_ASSERT(value.latinKey);
- return Latin1String((const char *)this + sizeof(Entry));
- }
- QString key() const
- {
- if (value.latinKey) {
- return shallowLatin1Key().toString();
- }
- return shallowKey().toString();
- }
-
- bool isValid(int maxSize) const {
- if (maxSize < (int)sizeof(Entry))
- return false;
- maxSize -= sizeof(Entry);
- if (value.latinKey)
- return shallowLatin1Key().isValid(maxSize);
- return shallowKey().isValid(maxSize);
- }
-
- bool operator ==(const QString &key) const;
- inline bool operator !=(const QString &key) const { return !operator ==(key); }
- inline bool operator >=(const QString &key) const;
-
- bool operator==(QLatin1String key) const;
- inline bool operator!=(QLatin1String key) const { return !operator ==(key); }
- inline bool operator>=(QLatin1String key) const;
-
- bool operator ==(const Entry &other) const;
- bool operator >=(const Entry &other) const;
-};
-
-inline bool Entry::operator >=(const QString &key) const
-{
- if (value.latinKey)
- return (shallowLatin1Key() >= key);
- else
- return (shallowKey() >= key);
-}
-
-inline bool Entry::operator >=(QLatin1String key) const
-{
- if (value.latinKey)
- return shallowLatin1Key() >= key;
- else
- return shallowKey() >= key;
-}
-
-inline bool operator <(const QString &key, const Entry &e)
-{ return e >= key; }
-
-inline bool operator<(QLatin1String key, const Entry &e)
-{ return e >= key; }
-
-
-class Header {
-public:
- qle_uint tag; // 'qbjs'
- qle_uint version; // 1
- Base *root() { return (Base *)(this + 1); }
-};
-
-
-inline bool Value::toBoolean() const
-{
- Q_ASSERT(type == QJsonValue::Bool);
- return value != 0;
-}
-
-inline double Value::toDouble(const Base *b) const
-{
- Q_ASSERT(type == QJsonValue::Double);
- if (latinOrIntValue)
- return int_value;
-
- quint64 i = qFromLittleEndian<quint64>((const uchar *)b + value);
- double d;
- memcpy(&d, &i, sizeof(double));
- return d;
-}
-
-inline String Value::asString(const Base *b) const
-{
- Q_ASSERT(type == QJsonValue::String && !latinOrIntValue);
- return String(data(b));
-}
-
-inline Latin1String Value::asLatin1String(const Base *b) const
-{
- Q_ASSERT(type == QJsonValue::String && latinOrIntValue);
- return Latin1String(data(b));
-}
-
-inline QString Value::toString(const Base *b) const
-{
- if (latinOrIntValue)
- return asLatin1String(b).toString();
- else
- return asString(b).toString();
-}
-
-inline Base *Value::base(const Base *b) const
-{
- Q_ASSERT(type == QJsonValue::Array || type == QJsonValue::Object);
- return reinterpret_cast<Base *>(data(b));
-}
-
-class Data {
-public:
- enum Validation {
- Unchecked,
- Validated,
- Invalid
- };
-
- QAtomicInt ref;
- int alloc;
- union {
- char *rawData;
- Header *header;
- };
- uint compactionCounter : 31;
- uint ownsData : 1;
-
- inline Data(char *raw, int a)
- : alloc(a), rawData(raw), compactionCounter(0), ownsData(true)
- {
- }
- inline Data(int reserved, QJsonValue::Type valueType)
- : rawData(0), compactionCounter(0), ownsData(true)
- {
- Q_ASSERT(valueType == QJsonValue::Array || valueType == QJsonValue::Object);
-
- alloc = sizeof(Header) + sizeof(Base) + reserved + sizeof(offset);
- header = (Header *)malloc(alloc);
- Q_CHECK_PTR(header);
- header->tag = QJsonDocument::BinaryFormatTag;
- header->version = 1;
- Base *b = header->root();
- b->size = sizeof(Base);
- b->is_object = (valueType == QJsonValue::Object);
- b->tableOffset = sizeof(Base);
- b->length = 0;
- }
- inline ~Data()
- { if (ownsData) free(rawData); }
-
- uint offsetOf(const void *ptr) const { return (uint)(((char *)ptr - rawData)); }
-
- QJsonObject toObject(Object *o) const
- {
- return QJsonObject(const_cast<Data *>(this), o);
- }
-
- QJsonArray toArray(Array *a) const
- {
- return QJsonArray(const_cast<Data *>(this), a);
- }
-
- Data *clone(Base *b, int reserve = 0)
- {
- int size = sizeof(Header) + b->size;
- if (b == header->root() && ref.load() == 1 && alloc >= size + reserve)
- return this;
-
- if (reserve) {
- if (reserve < 128)
- reserve = 128;
- size = qMax(size + reserve, qMin(size *2, (int)Value::MaxSize));
- if (size > Value::MaxSize) {
- qWarning("QJson: Document too large to store in data structure");
- return 0;
- }
- }
- char *raw = (char *)malloc(size);
- Q_CHECK_PTR(raw);
- memcpy(raw + sizeof(Header), b, b->size);
- Header *h = (Header *)raw;
- h->tag = QJsonDocument::BinaryFormatTag;
- h->version = 1;
- Data *d = new Data(raw, size);
- d->compactionCounter = (b == header->root()) ? compactionCounter : 0;
- return d;
- }
-
- void compact();
- bool valid() const;
-
-private:
- Q_DISABLE_COPY(Data)
-};
-
-}
-
-QT_END_NAMESPACE
-
-#endif // QJSON_P_H
diff --git a/src/corelib/json/qjsonarray.cpp b/src/corelib/json/qjsonarray.cpp
index 8ee9ce0de7..255dc2ee4e 100644
--- a/src/corelib/json/qjsonarray.cpp
+++ b/src/corelib/json/qjsonarray.cpp
@@ -212,27 +212,6 @@ QJsonArray &QJsonArray::operator =(const QJsonArray &other)
return *this;
}
-/*!
- \fn QJsonArray::QJsonArray(QJsonArray &&other)
- \since 5.10
-
- Move-constructs a QJsonArray from \a other.
-*/
-
-/*!
- \fn QJsonArray &QJsonArray::operator =(QJsonArray &&other)
- \since 5.10
-
- Move-assigns \a other to this array.
-*/
-
-/*!
- \fn void QJsonArray::swap(QJsonArray &other)
- \since 5.10
-
- Swaps the array \a other with this. This operation is very fast and never fails.
-*/
-
/*! \fn QJsonArray &QJsonArray::operator+=(const QJsonValue &value)
Appends \a value to the array, and returns a reference to the array itself.
diff --git a/src/corelib/json/qjsonarray.h b/src/corelib/json/qjsonarray.h
deleted file mode 100644
index ddba2ca78e..0000000000
--- a/src/corelib/json/qjsonarray.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONARRAY_H
-#define QJSONARRAY_H
-
-#include <QtCore/qjsonvalue.h>
-#include <QtCore/qiterator.h>
-#if defined(Q_COMPILER_INITIALIZER_LISTS)
-#include <initializer_list>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-class QDebug;
-class QStringList;
-template <typename T> class QList;
-typedef QList<QVariant> QVariantList;
-
-class Q_CORE_EXPORT QJsonArray
-{
-public:
- QJsonArray();
-
-#if defined(Q_COMPILER_INITIALIZER_LISTS) || defined(Q_QDOC)
- QJsonArray(std::initializer_list<QJsonValue> args)
- {
- initialize();
- for (std::initializer_list<QJsonValue>::const_iterator i = args.begin(); i != args.end(); ++i)
- append(*i);
- }
-#endif
-
- ~QJsonArray();
-
- QJsonArray(const QJsonArray &other);
- QJsonArray &operator =(const QJsonArray &other);
-
- QJsonArray(QJsonArray &&other) Q_DECL_NOTHROW
- : d(other.d),
- a(other.a)
- {
- other.d = nullptr;
- other.a = nullptr;
- }
-
- QJsonArray &operator =(QJsonArray &&other) Q_DECL_NOTHROW
- {
- swap(other);
- return *this;
- }
-
- static QJsonArray fromStringList(const QStringList &list);
- static QJsonArray fromVariantList(const QVariantList &list);
- QVariantList toVariantList() const;
-
- int size() const;
- inline int count() const { return size(); }
-
- bool isEmpty() const;
- QJsonValue at(int i) const;
- QJsonValue first() const;
- QJsonValue last() const;
-
- void prepend(const QJsonValue &value);
- void append(const QJsonValue &value);
- void removeAt(int i);
- QJsonValue takeAt(int i);
- inline void removeFirst() { removeAt(0); }
- inline void removeLast() { removeAt(size() - 1); }
-
- void insert(int i, const QJsonValue &value);
- void replace(int i, const QJsonValue &value);
-
- bool contains(const QJsonValue &element) const;
- QJsonValueRef operator[](int i);
- QJsonValue operator[](int i) const;
-
- bool operator==(const QJsonArray &other) const;
- bool operator!=(const QJsonArray &other) const;
-
- void swap(QJsonArray &other) Q_DECL_NOTHROW
- {
- qSwap(d, other.d);
- qSwap(a, other.a);
- }
-
- class const_iterator;
-
- class iterator {
- public:
- QJsonArray *a;
- int i;
- typedef std::random_access_iterator_tag iterator_category;
- typedef int difference_type;
- typedef QJsonValue value_type;
- typedef QJsonValueRef reference;
- typedef QJsonValueRefPtr pointer;
-
- inline iterator() : a(Q_NULLPTR), i(0) { }
- explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { }
-
- inline QJsonValueRef operator*() const { return QJsonValueRef(a, i); }
-#ifdef Q_QDOC
- inline QJsonValueRef* operator->() const;
-#else
- inline QJsonValueRefPtr operator->() const { return QJsonValueRefPtr(a, i); }
-#endif
- inline QJsonValueRef operator[](int j) const { return QJsonValueRef(a, i + j); }
-
- inline bool operator==(const iterator &o) const { return i == o.i; }
- inline bool operator!=(const iterator &o) const { return i != o.i; }
- inline bool operator<(const iterator& other) const { return i < other.i; }
- inline bool operator<=(const iterator& other) const { return i <= other.i; }
- inline bool operator>(const iterator& other) const { return i > other.i; }
- inline bool operator>=(const iterator& other) const { return i >= other.i; }
- inline bool operator==(const const_iterator &o) const { return i == o.i; }
- inline bool operator!=(const const_iterator &o) const { return i != o.i; }
- inline bool operator<(const const_iterator& other) const { return i < other.i; }
- inline bool operator<=(const const_iterator& other) const { return i <= other.i; }
- inline bool operator>(const const_iterator& other) const { return i > other.i; }
- inline bool operator>=(const const_iterator& other) const { return i >= other.i; }
- inline iterator &operator++() { ++i; return *this; }
- inline iterator operator++(int) { iterator n = *this; ++i; return n; }
- inline iterator &operator--() { i--; return *this; }
- inline iterator operator--(int) { iterator n = *this; i--; return n; }
- inline iterator &operator+=(int j) { i+=j; return *this; }
- inline iterator &operator-=(int j) { i-=j; return *this; }
- inline iterator operator+(int j) const { return iterator(a, i+j); }
- inline iterator operator-(int j) const { return iterator(a, i-j); }
- inline int operator-(iterator j) const { return i - j.i; }
- };
- friend class iterator;
-
- class const_iterator {
- public:
- const QJsonArray *a;
- int i;
- typedef std::random_access_iterator_tag iterator_category;
- typedef qptrdiff difference_type;
- typedef QJsonValue value_type;
- typedef QJsonValue reference;
- typedef QJsonValuePtr pointer;
-
- inline const_iterator() : a(Q_NULLPTR), i(0) { }
- explicit inline const_iterator(const QJsonArray *array, int index) : a(array), i(index) { }
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {} // ### Qt 6: Removed so class can be trivially-copyable
-#endif
- inline const_iterator(const iterator &o) : a(o.a), i(o.i) {}
-
- inline QJsonValue operator*() const { return a->at(i); }
-#ifdef Q_QDOC
- inline QJsonValue* operator->() const;
-#else
- inline QJsonValuePtr operator->() const { return QJsonValuePtr(a->at(i)); }
-#endif
- inline QJsonValue operator[](int j) const { return a->at(i+j); }
- inline bool operator==(const const_iterator &o) const { return i == o.i; }
- inline bool operator!=(const const_iterator &o) const { return i != o.i; }
- inline bool operator<(const const_iterator& other) const { return i < other.i; }
- inline bool operator<=(const const_iterator& other) const { return i <= other.i; }
- inline bool operator>(const const_iterator& other) const { return i > other.i; }
- inline bool operator>=(const const_iterator& other) const { return i >= other.i; }
- inline const_iterator &operator++() { ++i; return *this; }
- inline const_iterator operator++(int) { const_iterator n = *this; ++i; return n; }
- inline const_iterator &operator--() { i--; return *this; }
- inline const_iterator operator--(int) { const_iterator n = *this; i--; return n; }
- inline const_iterator &operator+=(int j) { i+=j; return *this; }
- inline const_iterator &operator-=(int j) { i-=j; return *this; }
- inline const_iterator operator+(int j) const { return const_iterator(a, i+j); }
- inline const_iterator operator-(int j) const { return const_iterator(a, i-j); }
- inline int operator-(const_iterator j) const { return i - j.i; }
- };
- friend class const_iterator;
-
- // stl style
- inline iterator begin() { detach2(); return iterator(this, 0); }
- inline const_iterator begin() const { return const_iterator(this, 0); }
- inline const_iterator constBegin() const { return const_iterator(this, 0); }
- inline iterator end() { detach2(); return iterator(this, size()); }
- inline const_iterator end() const { return const_iterator(this, size()); }
- inline const_iterator constEnd() const { return const_iterator(this, size()); }
- iterator insert(iterator before, const QJsonValue &value) { insert(before.i, value); return before; }
- iterator erase(iterator it) { removeAt(it.i); return it; }
-
- // more Qt
- typedef iterator Iterator;
- typedef const_iterator ConstIterator;
-
- // convenience
- inline QJsonArray operator+(const QJsonValue &v) const
- { QJsonArray n = *this; n += v; return n; }
- inline QJsonArray &operator+=(const QJsonValue &v)
- { append(v); return *this; }
- inline QJsonArray &operator<< (const QJsonValue &v)
- { append(v); return *this; }
-
- // stl compatibility
- inline void push_back(const QJsonValue &t) { append(t); }
- inline void push_front(const QJsonValue &t) { prepend(t); }
- inline void pop_front() { removeFirst(); }
- inline void pop_back() { removeLast(); }
- inline bool empty() const { return isEmpty(); }
- typedef int size_type;
- typedef QJsonValue value_type;
- typedef value_type *pointer;
- typedef const value_type *const_pointer;
- typedef QJsonValueRef reference;
- typedef QJsonValue const_reference;
- typedef int difference_type;
-
-private:
- friend class QJsonPrivate::Data;
- friend class QJsonValue;
- friend class QJsonDocument;
- friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
-
- QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array);
- void initialize();
- void compact();
- // ### Qt 6: remove me and merge with detach2
- void detach(uint reserve = 0);
- bool detach2(uint reserve = 0);
-
- QJsonPrivate::Data *d;
- QJsonPrivate::Array *a;
-};
-
-Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonArray)
-
-#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
-#endif
-
-QT_END_NAMESPACE
-
-#endif // QJSONARRAY_H
diff --git a/src/corelib/json/qjsondocument.cpp b/src/corelib/json/qjsondocument.cpp
deleted file mode 100644
index 6469412054..0000000000
--- a/src/corelib/json/qjsondocument.cpp
+++ /dev/null
@@ -1,667 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <qjsondocument.h>
-#include <qjsonobject.h>
-#include <qjsonvalue.h>
-#include <qjsonarray.h>
-#include <qstringlist.h>
-#include <qvariant.h>
-#include <qdebug.h>
-#include "qjsonwriter_p.h"
-#include "qjsonparser_p.h"
-#include "qjson_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*! \class QJsonDocument
- \inmodule QtCore
- \ingroup json
- \ingroup shared
- \reentrant
- \since 5.0
-
- \brief The QJsonDocument class provides a way to read and write JSON documents.
-
- QJsonDocument is a class that wraps a complete JSON document and can read and
- write this document both from a UTF-8 encoded text based representation as well
- as Qt's own binary format.
-
- A JSON document can be converted from its text-based representation to a QJsonDocument
- using QJsonDocument::fromJson(). toJson() converts it back to text. The parser is very
- fast and efficient and converts the JSON to the binary representation used by Qt.
-
- Validity of the parsed document can be queried with !isNull()
-
- A document can be queried as to whether it contains an array or an object using isArray()
- and isObject(). The array or object contained in the document can be retrieved using
- array() or object() and then read or manipulated.
-
- A document can also be created from a stored binary representation using fromBinaryData() or
- fromRawData().
-
- \sa {JSON Support in Qt}, {JSON Save Game Example}
-*/
-
-/*!
- * Constructs an empty and invalid document.
- */
-QJsonDocument::QJsonDocument()
- : d(0)
-{
-}
-
-/*!
- * Creates a QJsonDocument from \a object.
- */
-QJsonDocument::QJsonDocument(const QJsonObject &object)
- : d(0)
-{
- setObject(object);
-}
-
-/*!
- * Constructs a QJsonDocument from \a array.
- */
-QJsonDocument::QJsonDocument(const QJsonArray &array)
- : d(0)
-{
- setArray(array);
-}
-
-/*!
- \internal
- */
-QJsonDocument::QJsonDocument(QJsonPrivate::Data *data)
- : d(data)
-{
- Q_ASSERT(d);
- d->ref.ref();
-}
-
-/*!
- Deletes the document.
-
- Binary data set with fromRawData is not freed.
- */
-QJsonDocument::~QJsonDocument()
-{
- if (d && !d->ref.deref())
- delete d;
-}
-
-/*!
- * Creates a copy of the \a other document.
- */
-QJsonDocument::QJsonDocument(const QJsonDocument &other)
-{
- d = other.d;
- if (d)
- d->ref.ref();
-}
-
-/*!
- * Assigns the \a other document to this QJsonDocument.
- * Returns a reference to this object.
- */
-QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other)
-{
- if (d != other.d) {
- if (d && !d->ref.deref())
- delete d;
- d = other.d;
- if (d)
- d->ref.ref();
- }
-
- return *this;
-}
-
-/*!
- \fn QJsonDocument::QJsonDocument(QJsonDocument &&other)
- \since 5.10
-
- Move-constructs a QJsonDocument from \a other.
-*/
-
-/*!
- \fn QJsonDocument &QJsonDocument::operator =(QJsonDocument &&other)
- \since 5.10
-
- Move-assigns \a other to this document.
-*/
-
-/*!
- \fn void QJsonDocument::swap(QJsonDocument &other)
- \since 5.10
-
- Swaps the document \a other with this. This operation is very fast and never fails.
-*/
-
-
-/*! \enum QJsonDocument::DataValidation
-
- This value is used to tell QJsonDocument whether to validate the binary data
- when converting to a QJsonDocument using fromBinaryData() or fromRawData().
-
- \value Validate Validate the data before using it. This is the default.
- \value BypassValidation Bypasses data validation. Only use if you received the
- data from a trusted place and know it's valid, as using of invalid data can crash
- the application.
- */
-
-/*!
- Creates a QJsonDocument that uses the first \a size bytes from
- \a data. It assumes \a data contains a binary encoded JSON document.
- The created document does not take ownership of \a data and the caller
- has to guarantee that \a data will not be deleted or modified as long as
- any QJsonDocument, QJsonObject or QJsonArray still references the data.
-
- \a data has to be aligned to a 4 byte boundary.
-
- \a validation decides whether the data is checked for validity before being used.
- By default the data is validated. If the \a data is not valid, the method returns
- a null document.
-
- Returns a QJsonDocument representing the data.
-
- \sa rawData(), fromBinaryData(), isNull(), DataValidation
- */
-QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation)
-{
- if (quintptr(data) & 3) {
- qWarning("QJsonDocument::fromRawData: data has to have 4 byte alignment");
- return QJsonDocument();
- }
-
- QJsonPrivate::Data *d = new QJsonPrivate::Data((char *)data, size);
- d->ownsData = false;
-
- if (validation != BypassValidation && !d->valid()) {
- delete d;
- return QJsonDocument();
- }
-
- return QJsonDocument(d);
-}
-
-/*!
- Returns the raw binary representation of the data
- \a size will contain the size of the returned data.
-
- This method is useful to e.g. stream the JSON document
- in it's binary form to a file.
- */
-const char *QJsonDocument::rawData(int *size) const
-{
- if (!d) {
- *size = 0;
- return 0;
- }
- *size = d->alloc;
- return d->rawData;
-}
-
-/*!
- Creates a QJsonDocument from \a data.
-
- \a validation decides whether the data is checked for validity before being used.
- By default the data is validated. If the \a data is not valid, the method returns
- a null document.
-
- \sa toBinaryData(), fromRawData(), isNull(), DataValidation
- */
-QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation)
-{
- if (data.size() < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base)))
- return QJsonDocument();
-
- QJsonPrivate::Header h;
- memcpy(&h, data.constData(), sizeof(QJsonPrivate::Header));
- QJsonPrivate::Base root;
- memcpy(&root, data.constData() + sizeof(QJsonPrivate::Header), sizeof(QJsonPrivate::Base));
-
- // do basic checks here, so we don't try to allocate more memory than we can.
- if (h.tag != QJsonDocument::BinaryFormatTag || h.version != 1u ||
- sizeof(QJsonPrivate::Header) + root.size > (uint)data.size())
- return QJsonDocument();
-
- const uint size = sizeof(QJsonPrivate::Header) + root.size;
- char *raw = (char *)malloc(size);
- if (!raw)
- return QJsonDocument();
-
- memcpy(raw, data.constData(), size);
- QJsonPrivate::Data *d = new QJsonPrivate::Data(raw, size);
-
- if (validation != BypassValidation && !d->valid()) {
- delete d;
- return QJsonDocument();
- }
-
- return QJsonDocument(d);
-}
-
-/*!
- Creates a QJsonDocument from the QVariant \a variant.
-
- If the \a variant contains any other type than a QVariantMap,
- QVariantHash, QVariantList or QStringList, the returned document is invalid.
-
- \sa toVariant()
- */
-QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
-{
- QJsonDocument doc;
- switch (variant.type()) {
- case QVariant::Map:
- doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
- break;
- case QVariant::Hash:
- doc.setObject(QJsonObject::fromVariantHash(variant.toHash()));
- break;
- case QVariant::List:
- doc.setArray(QJsonArray::fromVariantList(variant.toList()));
- break;
- case QVariant::StringList:
- doc.setArray(QJsonArray::fromStringList(variant.toStringList()));
- break;
- default:
- break;
- }
- return doc;
-}
-
-/*!
- Returns a QVariant representing the Json document.
-
- The returned variant will be a QVariantList if the document is
- a QJsonArray and a QVariantMap if the document is a QJsonObject.
-
- \sa fromVariant(), QJsonValue::toVariant()
- */
-QVariant QJsonDocument::toVariant() const
-{
- if (!d)
- return QVariant();
-
- if (d->header->root()->isArray())
- return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root())).toVariantList();
- else
- return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root())).toVariantMap();
-}
-
-/*!
- Converts the QJsonDocument to a UTF-8 encoded JSON document.
-
- \sa fromJson()
- */
-#ifndef QT_JSON_READONLY
-QByteArray QJsonDocument::toJson() const
-{
- return toJson(Indented);
-}
-#endif
-
-/*!
- \enum QJsonDocument::JsonFormat
-
- This value defines the format of the JSON byte array produced
- when converting to a QJsonDocument using toJson().
-
- \value Indented Defines human readable output as follows:
- \code
- {
- "Array": [
- true,
- 999,
- "string"
- ],
- "Key": "Value",
- "null": null
- }
- \endcode
-
- \value Compact Defines a compact output as follows:
- \code
- {"Array":[true,999,"string"],"Key":"Value","null":null}
- \endcode
- */
-
-/*!
- Converts the QJsonDocument to a UTF-8 encoded JSON document in the provided \a format.
-
- \sa fromJson(), JsonFormat
- */
-#ifndef QT_JSON_READONLY
-QByteArray QJsonDocument::toJson(JsonFormat format) const
-{
- QByteArray json;
- if (!d)
- return json;
-
- if (d->header->root()->isArray())
- QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact));
- else
- QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(d->header->root()), json, 0, (format == Compact));
-
- return json;
-}
-#endif
-
-/*!
- Parses \a json as a UTF-8 encoded JSON document, and creates a QJsonDocument
- from it.
-
- Returns a valid (non-null) QJsonDocument if the parsing succeeds. If it fails,
- the returned document will be null, and the optional \a error variable will contain
- further details about the error.
-
- \sa toJson(), QJsonParseError, isNull()
- */
-QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error)
-{
- QJsonPrivate::Parser parser(json.constData(), json.length());
- return parser.parse(error);
-}
-
-/*!
- Returns \c true if the document doesn't contain any data.
- */
-bool QJsonDocument::isEmpty() const
-{
- if (!d)
- return true;
-
- return false;
-}
-
-/*!
- Returns a binary representation of the document.
-
- The binary representation is also the native format used internally in Qt,
- and is very efficient and fast to convert to and from.
-
- The binary format can be stored on disk and interchanged with other applications
- or computers. fromBinaryData() can be used to convert it back into a
- JSON document.
-
- \sa fromBinaryData()
- */
-QByteArray QJsonDocument::toBinaryData() const
-{
- if (!d || !d->rawData)
- return QByteArray();
-
- return QByteArray(d->rawData, d->header->root()->size + sizeof(QJsonPrivate::Header));
-}
-
-/*!
- Returns \c true if the document contains an array.
-
- \sa array(), isObject()
- */
-bool QJsonDocument::isArray() const
-{
- if (!d)
- return false;
-
- QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;
- return h->root()->isArray();
-}
-
-/*!
- Returns \c true if the document contains an object.
-
- \sa object(), isArray()
- */
-bool QJsonDocument::isObject() const
-{
- if (!d)
- return false;
-
- QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;
- return h->root()->isObject();
-}
-
-/*!
- Returns the QJsonObject contained in the document.
-
- Returns an empty object if the document contains an
- array.
-
- \sa isObject(), array(), setObject()
- */
-QJsonObject QJsonDocument::object() const
-{
- if (d) {
- QJsonPrivate::Base *b = d->header->root();
- if (b->isObject())
- return QJsonObject(d, static_cast<QJsonPrivate::Object *>(b));
- }
- return QJsonObject();
-}
-
-/*!
- Returns the QJsonArray contained in the document.
-
- Returns an empty array if the document contains an
- object.
-
- \sa isArray(), object(), setArray()
- */
-QJsonArray QJsonDocument::array() const
-{
- if (d) {
- QJsonPrivate::Base *b = d->header->root();
- if (b->isArray())
- return QJsonArray(d, static_cast<QJsonPrivate::Array *>(b));
- }
- return QJsonArray();
-}
-
-/*!
- Sets \a object as the main object of this document.
-
- \sa setArray(), object()
- */
-void QJsonDocument::setObject(const QJsonObject &object)
-{
- if (d && !d->ref.deref())
- delete d;
-
- d = object.d;
-
- if (!d) {
- d = new QJsonPrivate::Data(0, QJsonValue::Object);
- } else if (d->compactionCounter || object.o != d->header->root()) {
- QJsonObject o(object);
- if (d->compactionCounter)
- o.compact();
- else
- o.detach2();
- d = o.d;
- d->ref.ref();
- return;
- }
- d->ref.ref();
-}
-
-/*!
- Sets \a array as the main object of this document.
-
- \sa setObject(), array()
- */
-void QJsonDocument::setArray(const QJsonArray &array)
-{
- if (d && !d->ref.deref())
- delete d;
-
- d = array.d;
-
- if (!d) {
- d = new QJsonPrivate::Data(0, QJsonValue::Array);
- } else if (d->compactionCounter || array.a != d->header->root()) {
- QJsonArray a(array);
- if (d->compactionCounter)
- a.compact();
- else
- a.detach2();
- d = a.d;
- d->ref.ref();
- return;
- }
- d->ref.ref();
-}
-
-/*!
- Returns a QJsonValue representing the value for the key \a key.
-
- Equivalent to calling object().value(key).
-
- The returned QJsonValue is QJsonValue::Undefined if the key does not exist,
- or if isObject() is false.
-
- \since 5.10
-
- \sa QJsonValue, QJsonValue::isUndefined(), QJsonObject
- */
-const QJsonValue QJsonDocument::operator[](const QString &key) const
-{
- if (!isObject())
- return QJsonValue(QJsonValue::Undefined);
-
- return object().value(key);
-}
-
-/*!
- \overload
- \since 5.10
-*/
-const QJsonValue QJsonDocument::operator[](QLatin1String key) const
-{
- if (!isObject())
- return QJsonValue(QJsonValue::Undefined);
-
- return object().value(key);
-}
-
-/*!
- Returns a QJsonValue representing the value for index \a i.
-
- Equivalent to calling array().at(i).
-
- The returned QJsonValue is QJsonValue::Undefined, if \a i is out of bounds,
- or if isArray() is false.
-
- \since 5.10
-
- \sa QJsonValue, QJsonValue::isUndefined(), QJsonArray
- */
-const QJsonValue QJsonDocument::operator[](int i) const
-{
- if (!isArray())
- return QJsonValue(QJsonValue::Undefined);
-
- return array().at(i);
-}
-
-/*!
- Returns \c true if the \a other document is equal to this document.
- */
-bool QJsonDocument::operator==(const QJsonDocument &other) const
-{
- if (d == other.d)
- return true;
-
- if (!d || !other.d)
- return false;
-
- if (d->header->root()->isArray() != other.d->header->root()->isArray())
- return false;
-
- if (d->header->root()->isObject())
- return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root()))
- == QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.d->header->root()));
- else
- return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root()))
- == QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.d->header->root()));
-}
-
-/*!
- \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const
-
- returns \c true if \a other is not equal to this document
- */
-
-/*!
- returns \c true if this document is null.
-
- Null documents are documents created through the default constructor.
-
- Documents created from UTF-8 encoded text or the binary format are
- validated during parsing. If validation fails, the returned document
- will also be null.
- */
-bool QJsonDocument::isNull() const
-{
- return (d == 0);
-}
-
-#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
-QDebug operator<<(QDebug dbg, const QJsonDocument &o)
-{
- QDebugStateSaver saver(dbg);
- if (!o.d) {
- dbg << "QJsonDocument()";
- return dbg;
- }
- QByteArray json;
- if (o.d->header->root()->isArray())
- QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(o.d->header->root()), json, 0, true);
- else
- QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(o.d->header->root()), json, 0, true);
- dbg.nospace() << "QJsonDocument("
- << json.constData() // print as utf-8 string without extra quotation marks
- << ')';
- return dbg;
-}
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/corelib/json/qjsondocument.h b/src/corelib/json/qjsondocument.h
deleted file mode 100644
index 4e76af21e2..0000000000
--- a/src/corelib/json/qjsondocument.h
+++ /dev/null
@@ -1,179 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONDOCUMENT_H
-#define QJSONDOCUMENT_H
-
-#include <QtCore/qjsonvalue.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDebug;
-
-namespace QJsonPrivate {
- class Parser;
-}
-
-struct Q_CORE_EXPORT QJsonParseError
-{
- enum ParseError {
- NoError = 0,
- UnterminatedObject,
- MissingNameSeparator,
- UnterminatedArray,
- MissingValueSeparator,
- IllegalValue,
- TerminationByNumber,
- IllegalNumber,
- IllegalEscapeSequence,
- IllegalUTF8String,
- UnterminatedString,
- MissingObject,
- DeepNesting,
- DocumentTooLarge,
- GarbageAtEnd
- };
-
- QString errorString() const;
-
- int offset;
- ParseError error;
-};
-
-class Q_CORE_EXPORT QJsonDocument
-{
-public:
-#ifdef Q_LITTLE_ENDIAN
- static const uint BinaryFormatTag = ('q') | ('b' << 8) | ('j' << 16) | ('s' << 24);
-#else
- static const uint BinaryFormatTag = ('q' << 24) | ('b' << 16) | ('j' << 8) | ('s');
-#endif
-
- QJsonDocument();
- explicit QJsonDocument(const QJsonObject &object);
- explicit QJsonDocument(const QJsonArray &array);
- ~QJsonDocument();
-
- QJsonDocument(const QJsonDocument &other);
- QJsonDocument &operator =(const QJsonDocument &other);
-
- QJsonDocument(QJsonDocument &&other) Q_DECL_NOTHROW
- : d(other.d)
- {
- other.d = nullptr;
- }
-
- QJsonDocument &operator =(QJsonDocument &&other) Q_DECL_NOTHROW
- {
- swap(other);
- return *this;
- }
-
- void swap(QJsonDocument &other) Q_DECL_NOTHROW
- {
- qSwap(d, other.d);
- }
-
- enum DataValidation {
- Validate,
- BypassValidation
- };
-
- static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate);
- const char *rawData(int *size) const;
-
- static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate);
- QByteArray toBinaryData() const;
-
- static QJsonDocument fromVariant(const QVariant &variant);
- QVariant toVariant() const;
-
- enum JsonFormat {
- Indented,
- Compact
- };
-
- static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR);
-
-#ifdef Q_QDOC
- QByteArray toJson(JsonFormat format = Indented) const;
-#elif !defined(QT_JSON_READONLY)
- QByteArray toJson() const; //### Merge in Qt6
- QByteArray toJson(JsonFormat format) const;
-#endif
-
- bool isEmpty() const;
- bool isArray() const;
- bool isObject() const;
-
- QJsonObject object() const;
- QJsonArray array() const;
-
- void setObject(const QJsonObject &object);
- void setArray(const QJsonArray &array);
-
- const QJsonValue operator[](const QString &key) const;
- const QJsonValue operator[](QLatin1String key) const;
- const QJsonValue operator[](int i) const;
-
- bool operator==(const QJsonDocument &other) const;
- bool operator!=(const QJsonDocument &other) const { return !(*this == other); }
-
- bool isNull() const;
-
-private:
- friend class QJsonValue;
- friend class QJsonPrivate::Data;
- friend class QJsonPrivate::Parser;
- friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
-
- QJsonDocument(QJsonPrivate::Data *data);
-
- QJsonPrivate::Data *d;
-};
-
-Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonDocument)
-
-#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
-#endif
-
-QT_END_NAMESPACE
-
-#endif // QJSONDOCUMENT_H
diff --git a/src/corelib/json/qjsonobject.h b/src/corelib/json/qjsonobject.h
deleted file mode 100644
index c77e2164a8..0000000000
--- a/src/corelib/json/qjsonobject.h
+++ /dev/null
@@ -1,271 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONOBJECT_H
-#define QJSONOBJECT_H
-
-#include <QtCore/qjsonvalue.h>
-#include <QtCore/qiterator.h>
-#ifdef Q_COMPILER_INITIALIZER_LISTS
-#include <QtCore/qpair.h>
-#include <initializer_list>
-#endif
-
-QT_BEGIN_NAMESPACE
-
-class QDebug;
-template <class Key, class T> class QMap;
-typedef QMap<QString, QVariant> QVariantMap;
-template <class Key, class T> class QHash;
-typedef QHash<QString, QVariant> QVariantHash;
-
-class Q_CORE_EXPORT QJsonObject
-{
-public:
- QJsonObject();
-
-#if defined(Q_COMPILER_INITIALIZER_LISTS) || defined(Q_QDOC)
- QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)
- {
- initialize();
- for (std::initializer_list<QPair<QString, QJsonValue> >::const_iterator i = args.begin(); i != args.end(); ++i)
- insert(i->first, i->second);
- }
-#endif
-
- ~QJsonObject();
-
- QJsonObject(const QJsonObject &other);
- QJsonObject &operator =(const QJsonObject &other);
-
- QJsonObject(QJsonObject &&other) Q_DECL_NOTHROW
- : d(other.d), o(other.o)
- {
- other.d = nullptr;
- other.o = nullptr;
- }
-
- QJsonObject &operator =(QJsonObject &&other) Q_DECL_NOTHROW
- {
- swap(other);
- return *this;
- }
-
- void swap(QJsonObject &other) Q_DECL_NOTHROW
- {
- qSwap(d, other.d);
- qSwap(o, other.o);
- }
-
- static QJsonObject fromVariantMap(const QVariantMap &map);
- QVariantMap toVariantMap() const;
- static QJsonObject fromVariantHash(const QVariantHash &map);
- QVariantHash toVariantHash() const;
-
- QStringList keys() const;
- int size() const;
- inline int count() const { return size(); }
- inline int length() const { return size(); }
- bool isEmpty() const;
-
- QJsonValue value(const QString &key) const;
- QJsonValue value(QLatin1String key) const;
- QJsonValue operator[] (const QString &key) const;
- QJsonValue operator[] (QLatin1String key) const { return value(key); }
- QJsonValueRef operator[] (const QString &key);
- QJsonValueRef operator[] (QLatin1String key);
-
- void remove(const QString &key);
- QJsonValue take(const QString &key);
- bool contains(const QString &key) const;
- bool contains(QLatin1String key) const;
-
- bool operator==(const QJsonObject &other) const;
- bool operator!=(const QJsonObject &other) const;
-
- class const_iterator;
-
- class iterator
- {
- friend class const_iterator;
- friend class QJsonObject;
- QJsonObject *o;
- int i;
-
- public:
- typedef std::random_access_iterator_tag iterator_category;
- typedef int difference_type;
- typedef QJsonValue value_type;
- typedef QJsonValueRef reference;
- typedef QJsonValuePtr pointer;
-
- Q_DECL_CONSTEXPR inline iterator() : o(Q_NULLPTR), i(0) {}
- Q_DECL_CONSTEXPR inline iterator(QJsonObject *obj, int index) : o(obj), i(index) {}
-
- inline QString key() const { return o->keyAt(i); }
- inline QJsonValueRef value() const { return QJsonValueRef(o, i); }
- inline QJsonValueRef operator*() const { return QJsonValueRef(o, i); }
-#ifdef Q_QDOC
- inline QJsonValueRef* operator->() const;
-#else
- inline QJsonValueRefPtr operator->() const { return QJsonValueRefPtr(o, i); }
-#endif
- inline bool operator==(const iterator &other) const { return i == other.i; }
- inline bool operator!=(const iterator &other) const { return i != other.i; }
-
- inline iterator &operator++() { ++i; return *this; }
- inline iterator operator++(int) { iterator r = *this; ++i; return r; }
- inline iterator &operator--() { --i; return *this; }
- inline iterator operator--(int) { iterator r = *this; --i; return r; }
- inline iterator operator+(int j) const
- { iterator r = *this; r.i += j; return r; }
- inline iterator operator-(int j) const { return operator+(-j); }
- inline iterator &operator+=(int j) { i += j; return *this; }
- inline iterator &operator-=(int j) { i -= j; return *this; }
-
- public:
- inline bool operator==(const const_iterator &other) const { return i == other.i; }
- inline bool operator!=(const const_iterator &other) const { return i != other.i; }
- };
- friend class iterator;
-
- class const_iterator
- {
- friend class iterator;
- const QJsonObject *o;
- int i;
-
- public:
- typedef std::random_access_iterator_tag iterator_category;
- typedef int difference_type;
- typedef QJsonValue value_type;
- typedef QJsonValue reference;
- typedef QJsonValuePtr pointer;
-
- Q_DECL_CONSTEXPR inline const_iterator() : o(Q_NULLPTR), i(0) {}
- Q_DECL_CONSTEXPR inline const_iterator(const QJsonObject *obj, int index)
- : o(obj), i(index) {}
- inline const_iterator(const iterator &other)
- : o(other.o), i(other.i) {}
-
- inline QString key() const { return o->keyAt(i); }
- inline QJsonValue value() const { return o->valueAt(i); }
- inline QJsonValue operator*() const { return o->valueAt(i); }
-#ifdef Q_QDOC
- inline QJsonValue* operator->() const;
-#else
- inline QJsonValuePtr operator->() const { return QJsonValuePtr(o->valueAt(i)); }
-#endif
- inline bool operator==(const const_iterator &other) const { return i == other.i; }
- inline bool operator!=(const const_iterator &other) const { return i != other.i; }
-
- inline const_iterator &operator++() { ++i; return *this; }
- inline const_iterator operator++(int) { const_iterator r = *this; ++i; return r; }
- inline const_iterator &operator--() { --i; return *this; }
- inline const_iterator operator--(int) { const_iterator r = *this; --i; return r; }
- inline const_iterator operator+(int j) const
- { const_iterator r = *this; r.i += j; return r; }
- inline const_iterator operator-(int j) const { return operator+(-j); }
- inline const_iterator &operator+=(int j) { i += j; return *this; }
- inline const_iterator &operator-=(int j) { i -= j; return *this; }
-
- inline bool operator==(const iterator &other) const { return i == other.i; }
- inline bool operator!=(const iterator &other) const { return i != other.i; }
- };
- friend class const_iterator;
-
- // STL style
- inline iterator begin() { detach2(); return iterator(this, 0); }
- inline const_iterator begin() const { return const_iterator(this, 0); }
- inline const_iterator constBegin() const { return const_iterator(this, 0); }
- inline iterator end() { detach2(); return iterator(this, size()); }
- inline const_iterator end() const { return const_iterator(this, size()); }
- inline const_iterator constEnd() const { return const_iterator(this, size()); }
- iterator erase(iterator it);
-
- // more Qt
- typedef iterator Iterator;
- typedef const_iterator ConstIterator;
- iterator find(const QString &key);
- iterator find(QLatin1String key);
- const_iterator find(const QString &key) const { return constFind(key); }
- const_iterator find(QLatin1String key) const { return constFind(key); }
- const_iterator constFind(const QString &key) const;
- const_iterator constFind(QLatin1String key) const;
- iterator insert(const QString &key, const QJsonValue &value);
-
- // STL compatibility
- typedef QJsonValue mapped_type;
- typedef QString key_type;
- typedef int size_type;
-
- inline bool empty() const { return isEmpty(); }
-
-private:
- friend class QJsonPrivate::Data;
- friend class QJsonValue;
- friend class QJsonDocument;
- friend class QJsonValueRef;
-
- friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &);
-
- QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object);
- void initialize();
- // ### Qt 6: remove me and merge with detach2
- void detach(uint reserve = 0);
- bool detach2(uint reserve = 0);
- void compact();
-
- QString keyAt(int i) const;
- QJsonValue valueAt(int i) const;
- void setValueAt(int i, const QJsonValue &val);
-
- QJsonPrivate::Data *d;
- QJsonPrivate::Object *o;
-};
-
-Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonObject)
-
-#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &);
-#endif
-
-QT_END_NAMESPACE
-
-#endif // QJSONOBJECT_H
diff --git a/src/corelib/json/qjsonvalue.h b/src/corelib/json/qjsonvalue.h
deleted file mode 100644
index 5d5ec72605..0000000000
--- a/src/corelib/json/qjsonvalue.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QJSONVALUE_H
-#define QJSONVALUE_H
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDebug;
-class QVariant;
-class QJsonArray;
-class QJsonObject;
-
-namespace QJsonPrivate {
- class Data;
- class Base;
- class Object;
- class Header;
- class Array;
- class Value;
- class Entry;
-}
-
-class Q_CORE_EXPORT QJsonValue
-{
-public:
- enum Type {
- Null = 0x0,
- Bool = 0x1,
- Double = 0x2,
- String = 0x3,
- Array = 0x4,
- Object = 0x5,
- Undefined = 0x80
- };
-
- QJsonValue(Type = Null);
- QJsonValue(bool b);
- QJsonValue(double n);
- QJsonValue(int n);
- QJsonValue(qint64 n);
- QJsonValue(const QString &s);
- QJsonValue(QLatin1String s);
-#ifndef QT_NO_CAST_FROM_ASCII
- inline QT_ASCII_CAST_WARN QJsonValue(const char *s)
- : d(Q_NULLPTR), t(String) { stringDataFromQStringHelper(QString::fromUtf8(s)); }
-#endif
- QJsonValue(const QJsonArray &a);
- QJsonValue(const QJsonObject &o);
-
- ~QJsonValue();
-
- QJsonValue(const QJsonValue &other);
- QJsonValue &operator =(const QJsonValue &other);
-
- QJsonValue(QJsonValue &&other) Q_DECL_NOTHROW
- : ui(other.ui),
- d(other.d),
- t(other.t)
- {
- other.ui = 0;
- other.d = nullptr;
- other.t = Null;
- }
-
- QJsonValue &operator =(QJsonValue &&other) Q_DECL_NOTHROW
- {
- swap(other);
- return *this;
- }
-
- void swap(QJsonValue &other) Q_DECL_NOTHROW
- {
- qSwap(ui, other.ui);
- qSwap(d, other.d);
- qSwap(t, other.t);
- }
-
- static QJsonValue fromVariant(const QVariant &variant);
- QVariant toVariant() const;
-
- Type type() const;
- inline bool isNull() const { return type() == Null; }
- inline bool isBool() const { return type() == Bool; }
- inline bool isDouble() const { return type() == Double; }
- inline bool isString() const { return type() == String; }
- inline bool isArray() const { return type() == Array; }
- inline bool isObject() const { return type() == Object; }
- inline bool isUndefined() const { return type() == Undefined; }
-
- bool toBool(bool defaultValue = false) const;
- int toInt(int defaultValue = 0) const;
- double toDouble(double defaultValue = 0) const;
- QString toString() const;
- QString toString(const QString &defaultValue) const;
- QJsonArray toArray() const;
- QJsonArray toArray(const QJsonArray &defaultValue) const;
- QJsonObject toObject() const;
- QJsonObject toObject(const QJsonObject &defaultValue) const;
-
- const QJsonValue operator[](const QString &key) const;
- const QJsonValue operator[](QLatin1String key) const;
- const QJsonValue operator[](int i) const;
-
- bool operator==(const QJsonValue &other) const;
- bool operator!=(const QJsonValue &other) const;
-
-private:
- // avoid implicit conversions from char * to bool
- inline QJsonValue(const void *) {}
- friend class QJsonPrivate::Value;
- friend class QJsonArray;
- friend class QJsonObject;
- friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &);
-
- QJsonValue(QJsonPrivate::Data *d, QJsonPrivate::Base *b, const QJsonPrivate::Value& v);
- void stringDataFromQStringHelper(const QString &string);
-
- void detach();
-
- union {
- quint64 ui;
- bool b;
- double dbl;
- QStringData *stringData;
- QJsonPrivate::Base *base;
- };
- QJsonPrivate::Data *d; // needed for Objects and Arrays
- Type t;
-};
-
-class Q_CORE_EXPORT QJsonValueRef
-{
-public:
- QJsonValueRef(QJsonArray *array, int idx)
- : a(array), is_object(false), index(idx) {}
- QJsonValueRef(QJsonObject *object, int idx)
- : o(object), is_object(true), index(idx) {}
-
- inline operator QJsonValue() const { return toValue(); }
- QJsonValueRef &operator = (const QJsonValue &val);
- QJsonValueRef &operator = (const QJsonValueRef &val);
-
- QVariant toVariant() const;
- inline QJsonValue::Type type() const { return toValue().type(); }
- inline bool isNull() const { return type() == QJsonValue::Null; }
- inline bool isBool() const { return type() == QJsonValue::Bool; }
- inline bool isDouble() const { return type() == QJsonValue::Double; }
- inline bool isString() const { return type() == QJsonValue::String; }
- inline bool isArray() const { return type() == QJsonValue::Array; }
- inline bool isObject() const { return type() == QJsonValue::Object; }
- inline bool isUndefined() const { return type() == QJsonValue::Undefined; }
-
- inline bool toBool() const { return toValue().toBool(); }
- inline int toInt() const { return toValue().toInt(); }
- inline double toDouble() const { return toValue().toDouble(); }
- inline QString toString() const { return toValue().toString(); }
- QJsonArray toArray() const;
- QJsonObject toObject() const;
-
- // ### Qt 6: Add default values
- inline bool toBool(bool defaultValue) const { return toValue().toBool(defaultValue); }
- inline int toInt(int defaultValue) const { return toValue().toInt(defaultValue); }
- inline double toDouble(double defaultValue) const { return toValue().toDouble(defaultValue); }
- inline QString toString(const QString &defaultValue) const { return toValue().toString(defaultValue); }
-
- inline bool operator==(const QJsonValue &other) const { return toValue() == other; }
- inline bool operator!=(const QJsonValue &other) const { return toValue() != other; }
-
-private:
- QJsonValue toValue() const;
-
- union {
- QJsonArray *a;
- QJsonObject *o;
- };
- uint is_object : 1;
- uint index : 31;
-};
-
-#ifndef Q_QDOC
-// ### Qt 6: Get rid of these fake pointer classes
-class QJsonValuePtr
-{
- QJsonValue value;
-public:
- explicit QJsonValuePtr(const QJsonValue& val)
- : value(val) {}
-
- QJsonValue& operator*() { return value; }
- QJsonValue* operator->() { return &value; }
-};
-
-class QJsonValueRefPtr
-{
- QJsonValueRef valueRef;
-public:
- QJsonValueRefPtr(QJsonArray *array, int idx)
- : valueRef(array, idx) {}
- QJsonValueRefPtr(QJsonObject *object, int idx)
- : valueRef(object, idx) {}
-
- QJsonValueRef& operator*() { return valueRef; }
- QJsonValueRef* operator->() { return &valueRef; }
-};
-#endif
-
-Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonValue)
-
-#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
-Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &);
-#endif
-
-QT_END_NAMESPACE
-
-#endif // QJSONVALUE_H
diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp
index d1e436c371..304a7bda08 100644
--- a/src/corelib/kernel/qabstracteventdispatcher.cpp
+++ b/src/corelib/kernel/qabstracteventdispatcher.cpp
@@ -479,12 +479,12 @@ bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, vo
the processing of the event should continue.
*/
-/*! \fn bool QAbstractEventDispatcher::registerEventNotifier(QWinEventNotifier *notifier);
+/*! \fn bool QAbstractEventDispatcher::registerEventNotifier(QWinEventNotifier *notifier)
This pure virtual method exists on windows only and has to be reimplemented by a Windows specific
event dispatcher implementation. \a notifier is the QWinEventNotifier instance to be registered.
- The method should return true if the registration of \a notifier was sucessful, otherwise false.
+ The method should return true if the registration of \a notifier was successful, otherwise false.
QWinEventNotifier calls this method in it's constructor and there should never be a need to call this
method directly.
@@ -492,7 +492,7 @@ bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, vo
\sa QWinEventNotifier, unregisterEventNotifier()
*/
-/*! \fn bool QAbstractEventDispatcher::unregisterEventNotifier(QWinEventNotifier *notifier);
+/*! \fn bool QAbstractEventDispatcher::unregisterEventNotifier(QWinEventNotifier *notifier)
This pure virtual method exists on windows only and has to be reimplemented by a Windows specific
event dispatcher implementation. \a notifier is the QWinEventNotifier instance to be unregistered.
diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h
index 3a530cf1de..4775d3d47a 100644
--- a/src/corelib/kernel/qabstracteventdispatcher.h
+++ b/src/corelib/kernel/qabstracteventdispatcher.h
@@ -49,7 +49,7 @@ class QAbstractNativeEventFilter;
class QAbstractEventDispatcherPrivate;
class QSocketNotifier;
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
class QWinEventNotifier;
#endif
@@ -70,10 +70,10 @@ public:
{ }
};
- explicit QAbstractEventDispatcher(QObject *parent = Q_NULLPTR);
+ explicit QAbstractEventDispatcher(QObject *parent = nullptr);
~QAbstractEventDispatcher();
- static QAbstractEventDispatcher *instance(QThread *thread = Q_NULLPTR);
+ static QAbstractEventDispatcher *instance(QThread *thread = nullptr);
virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0;
virtual bool hasPendingEvents() = 0; // ### Qt6: remove, mark final or make protected
@@ -95,7 +95,7 @@ public:
virtual int remainingTime(int timerId) = 0;
-#if defined(Q_OS_WIN) || defined(Q_QDOC)
+#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
virtual bool registerEventNotifier(QWinEventNotifier *notifier) = 0;
virtual void unregisterEventNotifier(QWinEventNotifier *notifier) = 0;
#endif
@@ -112,7 +112,7 @@ public:
bool filterNativeEvent(const QByteArray &eventType, void *message, long *result);
#if QT_DEPRECATED_SINCE(5, 0)
QT_DEPRECATED bool filterEvent(void *message)
- { return filterNativeEvent("", message, Q_NULLPTR); }
+ { return filterNativeEvent("", message, nullptr); }
#endif
Q_SIGNALS:
diff --git a/src/corelib/kernel/qcore_mac.cpp b/src/corelib/kernel/qcore_mac.cpp
index bfb3b2ff07..b5df0db232 100644
--- a/src/corelib/kernel/qcore_mac.cpp
+++ b/src/corelib/kernel/qcore_mac.cpp
@@ -39,6 +39,9 @@
#include <private/qcore_mac_p.h>
#include <new>
+
+#include "qhash.h"
+#include "qpair.h"
#include "qvarlengtharray.h"
QT_BEGIN_NAMESPACE
@@ -57,4 +60,96 @@ QCFString::operator CFStringRef() const
return value;
}
+// --------------------------------------------------------------------------
+
+#if defined(QT_USE_APPLE_UNIFIED_LOGGING)
+
+bool AppleUnifiedLogger::messageHandler(QtMsgType msgType, const QMessageLogContext &context,
+ const QString &message, const QString &optionalSubsystem)
+{
+ QString subsystem = optionalSubsystem;
+ if (subsystem.isNull()) {
+ static QString bundleIdentifier = []() {
+ if (CFBundleRef bundle = CFBundleGetMainBundle()) {
+ if (CFStringRef identifier = CFBundleGetIdentifier(bundle))
+ return QString::fromCFString(identifier);
+ }
+ return QString();
+ }();
+ subsystem = bundleIdentifier;
+ }
+
+ const bool isDefault = !context.category || !strcmp(context.category, "default");
+ os_log_t log = isDefault ? OS_LOG_DEFAULT :
+ cachedLog(subsystem, QString::fromLatin1(context.category));
+ os_log_type_t logType = logTypeForMessageType(msgType);
+
+ if (!os_log_type_enabled(log, logType))
+ return false;
+
+ // Logging best practices says we should not include symbolication
+ // information or source file line numbers in messages, as the system
+ // will automatically captures this information. In our case, what
+ // the system captures is the call to os_log_with_type below, which
+ // isn't really useful, but we still don't want to include the context's
+ // info, as that would clutter the logging output. See rdar://35958308.
+
+ // The format must be a string constant, so we can't pass on the
+ // message. This means we won't be able to take advantage of the
+ // unified logging's custom format specifiers such as %{BOOL}d.
+ // We use the 'public' format specifier to prevent the logging
+ // system from redacting our log message.
+ os_log_with_type(log, logType, "%{public}s", qPrintable(message));
+
+ // When running under Xcode or LLDB, one or more of these variables will
+ // be set, which triggers libsystem_trace.dyld to log messages to stderr
+ // as well, via_os_log_impl_mirror_to_stderr. Un-setting these variables
+ // is not an option, as that would silence normal NSLog or os_log calls,
+ // so instead we skip our own stderr output. See rdar://36919139.
+ static bool mirroredToStderr = qEnvironmentVariableIsSet("OS_ACTIVITY_DT_MODE")
+ || qEnvironmentVariableIsSet("ACTIVITY_LOG_STDERR")
+ || qEnvironmentVariableIsSet("CFLOG_FORCE_STDERR");
+ return mirroredToStderr;
+}
+
+os_log_type_t AppleUnifiedLogger::logTypeForMessageType(QtMsgType msgType)
+{
+ switch (msgType) {
+ case QtDebugMsg: return OS_LOG_TYPE_DEBUG;
+ case QtInfoMsg: return OS_LOG_TYPE_INFO;
+ case QtWarningMsg: return OS_LOG_TYPE_DEFAULT;
+ case QtCriticalMsg: return OS_LOG_TYPE_ERROR;
+ case QtFatalMsg: return OS_LOG_TYPE_FAULT;
+ }
+
+ return OS_LOG_TYPE_DEFAULT;
+}
+
+os_log_t AppleUnifiedLogger::cachedLog(const QString &subsystem, const QString &category)
+{
+ static QBasicMutex mutex;
+ QMutexLocker locker(&mutex);
+
+ static QHash<QPair<QString, QString>, os_log_t> logs;
+ const auto cacheKey = qMakePair(subsystem, category);
+ os_log_t log = logs.value(cacheKey);
+
+ if (!log) {
+ log = os_log_create(subsystem.toLatin1().constData(),
+ category.toLatin1().constData());
+ logs.insert(cacheKey, log);
+
+ // Technically we should release the os_log_t resource when done
+ // with it, but since we don't know when a category is disabled
+ // we keep all cached os_log_t instances until shutdown, where
+ // the OS will clean them up for us.
+ }
+
+ return log;
+}
+
+#endif // QT_USE_APPLE_UNIFIED_LOGGING
+
+// --------------------------------------------------------------------------
+
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
index 13143a08bb..9c6cef68b2 100644
--- a/src/corelib/kernel/qcore_mac_p.h
+++ b/src/corelib/kernel/qcore_mac_p.h
@@ -159,6 +159,37 @@ QDebug operator<<(QDebug debug, const QMacAutoReleasePool *pool);
Q_CORE_EXPORT void qt_apple_check_os_version();
+// --------------------------------------------------------------------------
+
+#if !defined(QT_BOOTSTRAPPED) && (QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_12) || !defined(Q_OS_MACOS))
+#define QT_USE_APPLE_UNIFIED_LOGGING
+
+QT_END_NAMESPACE
+#include <os/log.h>
+
+// The compiler isn't smart enough to realize that we're calling these functions
+// guarded by __builtin_available, so we need to also tag each function with the
+// runtime requirements.
+#include <os/availability.h>
+#define OS_LOG_AVAILABILITY API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0), watchos(3.0))
+QT_BEGIN_NAMESPACE
+
+class Q_CORE_EXPORT AppleUnifiedLogger
+{
+public:
+ static bool messageHandler(QtMsgType msgType, const QMessageLogContext &context, const QString &message,
+ const QString &subsystem = QString()) OS_LOG_AVAILABILITY;
+private:
+ static os_log_type_t logTypeForMessageType(QtMsgType msgType) OS_LOG_AVAILABILITY;
+ static os_log_t cachedLog(const QString &subsystem, const QString &category) OS_LOG_AVAILABILITY;
+};
+
+#undef OS_LOG_AVAILABILITY
+
+#endif
+
+// --------------------------------------------------------------------------
+
QT_END_NAMESPACE
#endif // QCORE_MAC_P_H
diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp
index 3b0da136ca..eb98cbef8f 100644
--- a/src/corelib/kernel/qcore_unix.cpp
+++ b/src/corelib/kernel/qcore_unix.cpp
@@ -130,7 +130,7 @@ int qt_safe_poll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout
if (!timeout_ts) {
// no timeout -> block forever
int ret;
- EINTR_LOOP(ret, qt_ppoll(fds, nfds, Q_NULLPTR));
+ EINTR_LOOP(ret, qt_ppoll(fds, nfds, nullptr));
return ret;
}
diff --git a/src/corelib/kernel/qcore_unix_p.h b/src/corelib/kernel/qcore_unix_p.h
index f78d2b9f24..e538a7e22b 100644
--- a/src/corelib/kernel/qcore_unix_p.h
+++ b/src/corelib/kernel/qcore_unix_p.h
@@ -362,7 +362,7 @@ Q_CORE_EXPORT int qt_safe_poll(struct pollfd *fds, nfds_t nfds, const struct tim
static inline int qt_poll_msecs(struct pollfd *fds, nfds_t nfds, int timeout)
{
- timespec ts, *pts = Q_NULLPTR;
+ timespec ts, *pts = nullptr;
if (timeout >= 0) {
ts.tv_sec = timeout / 1000;
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 3814894630..ef431baca6 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -116,6 +116,12 @@
# include <taskLib.h>
#endif
+#ifdef QT_BOOTSTRAPPED
+#include <private/qtrace_p.h>
+#else
+#include <qtcore_tracepoints_p.h>
+#endif
+
#include <algorithm>
QT_BEGIN_NAMESPACE
@@ -449,7 +455,7 @@ QCoreApplicationPrivate::QCoreApplicationPrivate(int &aargc, char **aargv, uint
, argv(aargv)
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
, origArgc(0)
- , origArgv(Q_NULLPTR)
+ , origArgv(nullptr)
#endif
, application_type(QCoreApplicationPrivate::Tty)
#ifndef QT_NO_QOBJECT
@@ -781,9 +787,17 @@ QCoreApplication::QCoreApplication(int &argc, char **argv
#endif
}
+/*!
+ \enum QCoreApplication::anonymous
+ \internal
+
+ \value ApplicationFlags QT_VERSION
+*/
void QCoreApplicationPrivate::init()
{
+ Q_TRACE(qcoreapplicationprivate_init_entry);
+
#if defined(Q_OS_MACOS)
QMacAutoReleasePool pool;
#endif
@@ -842,8 +856,9 @@ void QCoreApplicationPrivate::init()
#ifndef QT_NO_QOBJECT
// use the event dispatcher created by the app programmer (if any)
- if (!eventDispatcher)
- eventDispatcher = threadData->eventDispatcher.load();
+ Q_ASSERT(!eventDispatcher);
+ eventDispatcher = threadData->eventDispatcher.load();
+
// otherwise we create one
if (!eventDispatcher)
createEventDispatcher();
@@ -875,6 +890,8 @@ void QCoreApplicationPrivate::init()
#ifndef QT_NO_QOBJECT
is_app_running = true; // No longer starting up.
#endif
+
+ Q_TRACE(qcoreapplicationprivate_init_exit);
}
/*!
@@ -1372,6 +1389,13 @@ void QCoreApplicationPrivate::execCleanup()
By convention, a \a returnCode of 0 means success, and any non-zero
value indicates an error.
+ It's good practice to always connect signals to this slot using a
+ \l{Qt::}{QueuedConnection}. If a signal connected (non-queued) to this slot
+ is emitted before control enters the main event loop (such as before
+ "int main" calls \l{QCoreApplication::}{exec()}), the slot has no effect
+ and the application never exits. Using a queued connection ensures that the
+ slot will not be invoked until after control enters the main event loop.
+
Note that unlike the C library function of the same name, this
function \e does return to the caller -- it is event processing that
stops.
@@ -1915,6 +1939,13 @@ void QCoreApplicationPrivate::maybeQuit()
to quit(), and you also often connect e.g. QAbstractButton::clicked() or
signals in QAction, QMenu, or QMenuBar to it.
+ It's good practice to always connect signals to this slot using a
+ \l{Qt::}{QueuedConnection}. If a signal connected (non-queued) to this slot
+ is emitted before control enters the main event loop (such as before
+ "int main" calls \l{QCoreApplication::}{exec()}), the slot has no effect
+ and the application never exits. Using a queued connection ensures that the
+ slot will not be invoked until after control enters the main event loop.
+
Example:
\snippet code/src_corelib_kernel_qcoreapplication.cpp 1
diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h
index 6555733c4e..a886c9d1d2 100644
--- a/src/corelib/kernel/qcoreapplication.h
+++ b/src/corelib/kernel/qcoreapplication.h
@@ -123,7 +123,7 @@ public:
static bool sendEvent(QObject *receiver, QEvent *event);
static void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority);
- static void sendPostedEvents(QObject *receiver = Q_NULLPTR, int event_type = 0);
+ static void sendPostedEvents(QObject *receiver = nullptr, int event_type = 0);
static void removePostedEvents(QObject *receiver, int eventType = 0);
#if QT_DEPRECATED_SINCE(5, 3)
QT_DEPRECATED static bool hasPendingEvents();
@@ -155,7 +155,7 @@ public:
static QString translate(const char * context,
const char * key,
- const char * disambiguation = Q_NULLPTR,
+ const char * disambiguation = nullptr,
int n = -1);
#if QT_DEPRECATED_SINCE(5, 0)
enum Encoding { UnicodeUTF8, Latin1, DefaultCodec = UnicodeUTF8, CodecForTr = UnicodeUTF8 };
@@ -187,7 +187,7 @@ Q_SIGNALS:
void applicationVersionChanged();
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
virtual bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
#endif // QT_NO_QOBJECT
@@ -241,13 +241,13 @@ inline bool QCoreApplication::sendSpontaneousEvent(QObject *receiver, QEvent *ev
# define QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context)
#else
# define QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) \
- QT_DEPRECATED static inline QString trUtf8(const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) \
+ QT_DEPRECATED static inline QString trUtf8(const char *sourceText, const char *disambiguation = nullptr, int n = -1) \
{ return QCoreApplication::translate(#context, sourceText, disambiguation, n); }
#endif
#define Q_DECLARE_TR_FUNCTIONS(context) \
public: \
- static inline QString tr(const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1) \
+ static inline QString tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1) \
{ return QCoreApplication::translate(#context, sourceText, disambiguation, n); } \
QT_DECLARE_DEPRECATED_TR_FUNCTIONS(context) \
private:
diff --git a/src/corelib/kernel/qdeadlinetimer.cpp b/src/corelib/kernel/qdeadlinetimer.cpp
index ae4ffdcefc..d8a670310b 100644
--- a/src/corelib/kernel/qdeadlinetimer.cpp
+++ b/src/corelib/kernel/qdeadlinetimer.cpp
@@ -181,9 +181,9 @@ Q_DECL_CONST_FUNCTION static inline QPair<qint64, qint64> toSecsAndNSecs(qint64
*/
/*!
- \fn QDeadlineTimer::QDeadlineTimer(ForeverConstant forever, Qt::TimerType timerType)
+ \fn QDeadlineTimer::QDeadlineTimer(ForeverConstant, Qt::TimerType timerType)
- QDeadlineTimer objects created with parameter \a forever never expire.
+ QDeadlineTimer objects created with ForeverConstant never expire.
For such objects, remainingTime() will return -1, deadline() will return the
maximum value, and isForever() will return true.
@@ -220,7 +220,7 @@ QDeadlineTimer::QDeadlineTimer(qint64 msecs, Qt::TimerType type) Q_DECL_NOTHROW
}
/*!
- \fn QDeadlineTimer::QDeadlineTimer(std::chrono::time_point<Clock, Duration> deadline, Qt::TimerType type)
+ \fn template <class Clock, class Duration> QDeadlineTimer::QDeadlineTimer(std::chrono::time_point<Clock, Duration> deadline, Qt::TimerType type)
Constructs a QDeadlineTimer object with a deadline at \a deadline time
point, converting from the clock source \c{Clock} to Qt's internal clock
@@ -236,7 +236,7 @@ QDeadlineTimer::QDeadlineTimer(qint64 msecs, Qt::TimerType type) Q_DECL_NOTHROW
*/
/*!
- \fn QDeadlineTimer::QDeadlineTimer(std::chrono::duration<Rep, Period> remaining, Qt::TimerType type)
+ \fn template <class Rep, class Period> QDeadlineTimer::QDeadlineTimer(std::chrono::duration<Rep, Period> remaining, Qt::TimerType type)
Constructs a QDeadlineTimer object with a remaining time of \a remaining.
If \a remaining is zero or negative, this QDeadlineTimer object will be
@@ -263,7 +263,7 @@ QDeadlineTimer::QDeadlineTimer(qint64 msecs, Qt::TimerType type) Q_DECL_NOTHROW
*/
/*!
- \fn void QDeadlineTimer::setDeadline(std::chrono::time_point<Clock, Duration> deadline, Qt::TimerType type)
+ \fn template <class Clock, class Duration> void QDeadlineTimer::setDeadline(std::chrono::time_point<Clock, Duration> deadline, Qt::TimerType type)
Sets this QDeadlineTimer to the deadline marked by \a deadline time
point, converting from the clock source \c{Clock} to Qt's internal clock
@@ -329,7 +329,7 @@ void QDeadlineTimer::setPreciseRemainingTime(qint64 secs, qint64 nsecs, Qt::Time
/*!
\overload
- \fn void QDeadlineTimer::setRemainingTime(std::chrono::duration<Rep, Period> remaining, Qt::TimerType type)
+ \fn template <class Rep, class Period> void QDeadlineTimer::setRemainingTime(std::chrono::duration<Rep, Period> remaining, Qt::TimerType type)
Sets the remaining time for this QDeadlineTimer object to \a remaining. If
\a remaining is zero or negative, this QDeadlineTimer object will be mark
@@ -756,13 +756,13 @@ QDeadlineTimer QDeadlineTimer::addNSecs(QDeadlineTimer dt, qint64 nsecs) Q_DECL_
*/
/*!
- \fn QDeadlineTimer & QDeadlineTimer::operator=(std::chrono::time_point<Clock, Duration> deadline_)
+ \fn template <class Clock, class Duration> QDeadlineTimer & QDeadlineTimer::operator=(std::chrono::time_point<Clock, Duration> deadline_)
Assigns \a deadline_ to this deadline timer.
*/
/*!
- \fn QDeadlineTimer & QDeadlineTimer::operator=(std::chrono::duration<Rep, Period> remaining)
+ \fn template <class Rep, class Period> QDeadlineTimer & QDeadlineTimer::operator=(std::chrono::duration<Rep, Period> remaining)
Sets this deadline timer to the \a remaining time.
*/
diff --git a/src/corelib/kernel/qdeadlinetimer.h b/src/corelib/kernel/qdeadlinetimer.h
index ddab0191ad..6c10e1025e 100644
--- a/src/corelib/kernel/qdeadlinetimer.h
+++ b/src/corelib/kernel/qdeadlinetimer.h
@@ -120,7 +120,7 @@ public:
QDeadlineTimer &operator-=(qint64 msecs)
{ *this = *this + (-msecs); return *this; }
-#if QT_HAS_INCLUDE(<chrono>) || defined(Q_QDOC)
+#if QT_HAS_INCLUDE(<chrono>) || defined(Q_CLANG_QDOC)
template <class Clock, class Duration>
QDeadlineTimer(std::chrono::time_point<Clock, Duration> deadline_,
Qt::TimerType type_ = Qt::CoarseTimer) : t2(0)
diff --git a/src/corelib/kernel/qeventdispatcher_cf.mm b/src/corelib/kernel/qeventdispatcher_cf.mm
index 608dea5426..8499b3fd57 100644
--- a/src/corelib/kernel/qeventdispatcher_cf.mm
+++ b/src/corelib/kernel/qeventdispatcher_cf.mm
@@ -112,14 +112,15 @@ static CFStringRef runLoopMode(NSDictionary *dictionary)
if (CFStringRef mode = runLoopMode(notification.userInfo))
m_runLoopModes.push(mode);
else
- qWarning("Encountered run loop push notification without run loop mode!");
+ qCWarning(lcEventDispatcher) << "Encountered run loop push notification without run loop mode!";
} else if (CFStringHasSuffix((CFStringRef)notification.name, CFSTR("RunLoopModePopNotification"))) {
CFStringRef mode = runLoopMode(notification.userInfo);
if (CFStringCompare(mode, [self currentMode], 0) == kCFCompareEqualTo)
m_runLoopModes.pop();
else
- qWarning("Tried to pop run loop mode '%s' that was never pushed!", qPrintable(QString::fromCFString(mode)));
+ qCWarning(lcEventDispatcher) << "Tried to pop run loop mode"
+ << qPrintable(QString::fromCFString(mode)) << "that was never pushed!";
Q_ASSERT(m_runLoopModes.size() >= 1);
}
@@ -134,6 +135,9 @@ static CFStringRef runLoopMode(NSDictionary *dictionary)
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher");
+Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers");
+
class RunLoopDebugger : public QObject
{
Q_OBJECT
@@ -177,10 +181,6 @@ QDebug operator<<(QDebug s, timespec tv)
return s;
}
-#if DEBUG_EVENT_DISPATCHER
-uint g_eventDispatcherIndentationLevel = 0;
-#endif
-
static const CFTimeInterval kCFTimeIntervalMinimum = 0;
static const CFTimeInterval kCFTimeIntervalDistantFuture = std::numeric_limits<CFTimeInterval>::max();
@@ -190,13 +190,7 @@ QEventDispatcherCoreFoundation::QEventDispatcherCoreFoundation(QObject *parent)
: QAbstractEventDispatcher(parent)
, m_processEvents(QEventLoop::EventLoopExec)
, m_postedEventsRunLoopSource(this, &QEventDispatcherCoreFoundation::processPostedEvents)
- , m_runLoopActivityObserver(this, &QEventDispatcherCoreFoundation::handleRunLoopActivity,
-#if DEBUG_EVENT_DISPATCHER
- kCFRunLoopAllActivities
-#else
- kCFRunLoopBeforeWaiting | kCFRunLoopAfterWaiting
-#endif
- )
+ , m_runLoopActivityObserver(this, &QEventDispatcherCoreFoundation::handleRunLoopActivity, kCFRunLoopAllActivities)
, m_runLoopModeTracker([[RunLoopModeTracker alloc] init])
, m_runLoopTimer(0)
, m_blockedRunLoopTimer(0)
@@ -247,14 +241,14 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
bool eventsProcessed = false;
if (flags & (QEventLoop::ExcludeUserInputEvents | QEventLoop::ExcludeSocketNotifiers))
- qWarning() << "processEvents() flags" << flags << "not supported on iOS";
+ qCWarning(lcEventDispatcher) << "processEvents() flags" << flags << "not supported on iOS";
- qEventDispatcherDebug() << "Entering with " << flags; qIndent();
+ qCDebug(lcEventDispatcher) << "Processing events with flags" << flags;
if (m_blockedRunLoopTimer) {
Q_ASSERT(m_blockedRunLoopTimer == m_runLoopTimer);
- qEventDispatcherDebug() << "Recursing from blocked timer " << m_blockedRunLoopTimer;
+ qCDebug(lcEventDispatcher) << "Recursing from blocked timer" << m_blockedRunLoopTimer;
m_runLoopTimer = 0; // Unset current timer to force creation of new timer
updateTimers();
}
@@ -266,7 +260,7 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
m_postedEventsRunLoopSource.signal();
m_processEvents.deferredWakeUp = false;
- qEventDispatcherDebug() << "Processed deferred wake-up";
+ qCDebug(lcEventDispatcher) << "Processed deferred wake-up";
}
// The documentation states that this signal is emitted after the event
@@ -287,12 +281,12 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
CFTimeInterval duration = (m_processEvents.flags & QEventLoop::WaitForMoreEvents) ?
kCFTimeIntervalDistantFuture : kCFTimeIntervalMinimum;
- qEventDispatcherDebug() << "Calling CFRunLoopRunInMode = " << qPrintable(QString::fromCFString(mode))
- << " for " << duration << " ms, processing single source = " << returnAfterSingleSourceHandled; qIndent();
+ qCDebug(lcEventDispatcher) << "Calling CFRunLoopRunInMode =" << qPrintable(QString::fromCFString(mode))
+ << "for" << duration << "ms, processing single source =" << returnAfterSingleSourceHandled;
SInt32 result = CFRunLoopRunInMode(mode, duration, returnAfterSingleSourceHandled);
- qUnIndent(); qEventDispatcherDebug() << "result = " << qPrintableResult(result);
+ qCDebug(lcEventDispatcher) << "result =" << qPrintableResult(result);
eventsProcessed |= (result == kCFRunLoopRunHandledSource
|| m_processEvents.processedPostedEvents
@@ -316,15 +310,15 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
// immediately, since it has already been exited.
if (!currentEventLoop()->isRunning()) {
- qEventDispatcherDebug() << "Top level event loop was exited";
+ qCDebug(lcEventDispatcher) << "Top level event loop was exited";
break;
} else {
- qEventDispatcherDebug() << "Top level event loop still running, making another pass";
+ qCDebug(lcEventDispatcher) << "Top level event loop still running, making another pass";
}
} else {
// We were called manually, through processEvents(), and should stop processing
// events, even if we didn't finish processing all the queued events.
- qEventDispatcherDebug() << "Top level processEvents was interrupted";
+ qCDebug(lcEventDispatcher) << "Top level processEvents was interrupted";
break;
}
}
@@ -353,7 +347,7 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
// date in the past (overdue) will fire on the next run loop pass. The Qt
// APIs on the other hand document eg. zero-interval timers to always be
// handled after processing all available window-system events.
- qEventDispatcherDebug() << "Manually processing timers due to overdue timer";
+ qCDebug(lcEventDispatcher) << "Manually processing timers due to overdue timer";
processTimers(0);
eventsProcessed = true;
}
@@ -372,7 +366,7 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
if (m_processEvents.deferredWakeUp) {
m_postedEventsRunLoopSource.signal();
- qEventDispatcherDebug() << "Processed deferred wake-up";
+ qCDebug(lcEventDispatcher) << "Processed deferred wake-up";
}
bool wasInterrupted = m_processEvents.wasInterrupted;
@@ -385,11 +379,11 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
// others below it (eg, in the case of nested event loops). We need to trigger
// another interrupt so that the parent processEvents call has a chance to check
// if it should continue.
- qEventDispatcherDebug() << "Forwarding interrupt in case of nested processEvents";
+ qCDebug(lcEventDispatcher) << "Forwarding interrupt in case of nested processEvents";
interrupt();
}
- qEventDispatcherDebug() << "Returning with eventsProcessed = " << eventsProcessed; qUnIndent();
+ qCDebug(lcEventDispatcher) << "Returning with eventsProcessed =" << eventsProcessed;
return eventsProcessed;
}
@@ -397,15 +391,14 @@ bool QEventDispatcherCoreFoundation::processEvents(QEventLoop::ProcessEventsFlag
bool QEventDispatcherCoreFoundation::processPostedEvents()
{
if (m_processEvents.processedPostedEvents && !(m_processEvents.flags & QEventLoop::EventLoopExec)) {
- qEventDispatcherDebug() << "Already processed events this pass";
+ qCDebug(lcEventDispatcher) << "Already processed events this pass";
return false;
}
m_processEvents.processedPostedEvents = true;
- qEventDispatcherDebug() << "Sending posted events for " << m_processEvents.flags; qIndent();
+ qCDebug(lcEventDispatcher) << "Sending posted events for" << m_processEvents.flags;
QCoreApplication::sendPostedEvents();
- qUnIndent();
return true;
}
@@ -413,12 +406,12 @@ bool QEventDispatcherCoreFoundation::processPostedEvents()
void QEventDispatcherCoreFoundation::processTimers(CFRunLoopTimerRef timer)
{
if (m_processEvents.processedTimers && !(m_processEvents.flags & QEventLoop::EventLoopExec)) {
- qEventDispatcherDebug() << "Already processed timers this pass";
+ qCDebug(lcEventDispatcher) << "Already processed timers this pass";
m_processEvents.deferredUpdateTimers = true;
return;
}
- qEventDispatcherDebug() << "CFRunLoopTimer " << timer << " fired, activating Qt timers"; qIndent();
+ qCDebug(lcEventDispatcher) << "CFRunLoopTimer" << timer << "fired, activating Qt timers";
// Activating Qt timers might recurse into processEvents() if a timer-callback
// brings up a new event-loop or tries to processes events manually. Although
@@ -436,15 +429,15 @@ void QEventDispatcherCoreFoundation::processTimers(CFRunLoopTimerRef timer)
m_blockedRunLoopTimer = previouslyBlockedRunLoopTimer;
m_processEvents.processedTimers = true;
- qUnIndent();
-
// Now that the timer source is unblocked we may need to schedule it again
updateTimers();
}
+Q_LOGGING_CATEGORY(lcEventDispatcherActivity, "qt.eventdispatcher.activity")
+
void QEventDispatcherCoreFoundation::handleRunLoopActivity(CFRunLoopActivity activity)
{
- qEventDispatcherDebug() << qPrintableActivity(activity);
+ qCDebug(lcEventDispatcherActivity) << "Runloop entered activity" << qPrintableActivity(activity);
switch (activity) {
case kCFRunLoopBeforeWaiting:
@@ -463,13 +456,11 @@ void QEventDispatcherCoreFoundation::handleRunLoopActivity(CFRunLoopActivity act
case kCFRunLoopAfterWaiting:
emit awake();
break;
-#if DEBUG_EVENT_DISPATCHER
case kCFRunLoopEntry:
case kCFRunLoopBeforeTimers:
case kCFRunLoopBeforeSources:
case kCFRunLoopExit:
break;
-#endif
default:
Q_UNREACHABLE();
}
@@ -502,19 +493,19 @@ void QEventDispatcherCoreFoundation::wakeUp()
// posted event gets processed on the next processEvents() call, so we flag the
// need to do a deferred wake-up.
m_processEvents.deferredWakeUp = true;
- qEventDispatcherDebug() << "Already processed posted events, deferring wakeUp";
+ qCDebug(lcEventDispatcher) << "Already processed posted events, deferring wakeUp";
return;
}
m_postedEventsRunLoopSource.signal();
CFRunLoopWakeUp(CFRunLoopGetMain());
- qEventDispatcherDebug() << "Signaled posted event run-loop source";
+ qCDebug(lcEventDispatcher) << "Signaled posted event run-loop source";
}
void QEventDispatcherCoreFoundation::interrupt()
{
- qEventDispatcherDebug() << "Marking current processEvent as interrupted";
+ qCDebug(lcEventDispatcher) << "Marking current processEvent as interrupted";
m_processEvents.wasInterrupted = true;
CFRunLoopStop(CFRunLoopGetMain());
}
@@ -540,8 +531,8 @@ void QEventDispatcherCoreFoundation::unregisterSocketNotifier(QSocketNotifier *n
void QEventDispatcherCoreFoundation::registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object)
{
- qEventDispatcherDebug() << "id = " << timerId << ", interval = " << interval
- << ", type = " << timerType << ", object = " << object;
+ qCDebug(lcEventDispatcherTimers) << "Registering timer with id =" << timerId << "interval =" << interval
+ << "type =" << timerType << "object =" << object;
Q_ASSERT(timerId > 0 && interval >= 0 && object);
Q_ASSERT(object->thread() == thread() && thread() == QThread::currentThread());
@@ -557,7 +548,7 @@ bool QEventDispatcherCoreFoundation::unregisterTimer(int timerId)
bool returnValue = m_timerInfoList.unregisterTimer(timerId);
- qEventDispatcherDebug() << "id = " << timerId << ", timers left: " << m_timerInfoList.size();
+ qCDebug(lcEventDispatcherTimers) << "Unegistered timer with id =" << timerId << "Timers left:" << m_timerInfoList.size();
updateTimers();
return returnValue;
@@ -569,7 +560,7 @@ bool QEventDispatcherCoreFoundation::unregisterTimers(QObject *object)
bool returnValue = m_timerInfoList.unregisterTimers(object);
- qEventDispatcherDebug() << "object = " << object << ", timers left: " << m_timerInfoList.size();
+ qCDebug(lcEventDispatcherTimers) << "Unegistered timers for object =" << object << "Timers left:" << m_timerInfoList.size();
updateTimers();
return returnValue;
@@ -612,16 +603,16 @@ void QEventDispatcherCoreFoundation::updateTimers()
});
CFRunLoopAddTimer(CFRunLoopGetMain(), m_runLoopTimer, kCFRunLoopCommonModes);
- qEventDispatcherDebug() << "Created new CFRunLoopTimer " << m_runLoopTimer;
+ qCDebug(lcEventDispatcherTimers) << "Created new CFRunLoopTimer" << m_runLoopTimer;
} else {
CFRunLoopTimerSetNextFireDate(m_runLoopTimer, timeToFire);
- qEventDispatcherDebug() << "Re-scheduled CFRunLoopTimer " << m_runLoopTimer;
+ qCDebug(lcEventDispatcherTimers) << "Re-scheduled CFRunLoopTimer" << m_runLoopTimer;
}
m_overdueTimerScheduled = !timespecToSeconds(tv);
- qEventDispatcherDebug() << "Next timeout in " << tv << " seconds";
+ qCDebug(lcEventDispatcherTimers) << "Next timeout in" << tv << "seconds";
} else {
// No Qt timers are registered, so make sure we're not running any CF timers
@@ -637,7 +628,7 @@ void QEventDispatcherCoreFoundation::invalidateTimer()
return;
CFRunLoopTimerInvalidate(m_runLoopTimer);
- qEventDispatcherDebug() << "Invalidated CFRunLoopTimer " << m_runLoopTimer;
+ qCDebug(lcEventDispatcherTimers) << "Invalidated CFRunLoopTimer" << m_runLoopTimer;
CFRelease(m_runLoopTimer);
m_runLoopTimer = 0;
diff --git a/src/corelib/kernel/qeventdispatcher_cf_p.h b/src/corelib/kernel/qeventdispatcher_cf_p.h
index 8a234ebc40..a607ab7a15 100644
--- a/src/corelib/kernel/qeventdispatcher_cf_p.h
+++ b/src/corelib/kernel/qeventdispatcher_cf_p.h
@@ -85,19 +85,22 @@
// We mean it.
//
-#define DEBUG_EVENT_DISPATCHER 0
-
#include <QtCore/qabstracteventdispatcher.h>
#include <QtCore/private/qtimerinfo_unix_p.h>
#include <QtCore/private/qcfsocketnotifier_p.h>
#include <QtCore/private/qcore_mac_p.h>
#include <QtCore/qdebug.h>
+#include <QtCore/qloggingcategory.h>
+
#include <CoreFoundation/CoreFoundation.h>
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(RunLoopModeTracker));
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(lcEventDispatcher);
+Q_DECLARE_LOGGING_CATEGORY(lcEventDispatcherTimers)
+
class QEventDispatcherCoreFoundation;
template <class T = QEventDispatcherCoreFoundation>
@@ -269,17 +272,4 @@ private:
QT_END_NAMESPACE
-#if DEBUG_EVENT_DISPATCHER
-extern uint g_eventDispatcherIndentationLevel;
-#define qEventDispatcherDebug() qDebug().nospace() \
- << qPrintable(QString(QLatin1String("| ")).repeated(g_eventDispatcherIndentationLevel)) \
- << __FUNCTION__ << "(): "
-#define qIndent() ++g_eventDispatcherIndentationLevel
-#define qUnIndent() --g_eventDispatcherIndentationLevel
-#else
-#define qEventDispatcherDebug() QT_NO_QDEBUG_MACRO()
-#define qIndent()
-#define qUnIndent()
-#endif
-
#endif // QEVENTDISPATCHER_CF_P_H
diff --git a/src/corelib/kernel/qeventdispatcher_glib_p.h b/src/corelib/kernel/qeventdispatcher_glib_p.h
index 8e9925d7a5..799f23b14a 100644
--- a/src/corelib/kernel/qeventdispatcher_glib_p.h
+++ b/src/corelib/kernel/qeventdispatcher_glib_p.h
@@ -70,22 +70,22 @@ public:
explicit QEventDispatcherGlib(GMainContext *context, QObject *parent = 0);
~QEventDispatcherGlib();
- bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
- bool hasPendingEvents() Q_DECL_OVERRIDE;
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) override;
+ bool hasPendingEvents() override;
- void registerSocketNotifier(QSocketNotifier *socketNotifier) Q_DECL_FINAL;
- void unregisterSocketNotifier(QSocketNotifier *socketNotifier) Q_DECL_FINAL;
+ void registerSocketNotifier(QSocketNotifier *socketNotifier) final;
+ void unregisterSocketNotifier(QSocketNotifier *socketNotifier) final;
- void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) Q_DECL_FINAL;
- bool unregisterTimer(int timerId) Q_DECL_FINAL;
- bool unregisterTimers(QObject *object) Q_DECL_FINAL;
- QList<TimerInfo> registeredTimers(QObject *object) const Q_DECL_FINAL;
+ void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) final;
+ bool unregisterTimer(int timerId) final;
+ bool unregisterTimers(QObject *object) final;
+ QList<TimerInfo> registeredTimers(QObject *object) const final;
- int remainingTime(int timerId) Q_DECL_FINAL;
+ int remainingTime(int timerId) final;
- void wakeUp() Q_DECL_FINAL;
- void interrupt() Q_DECL_FINAL;
- void flush() Q_DECL_FINAL;
+ void wakeUp() final;
+ void interrupt() final;
+ void flush() final;
static bool versionSupported();
diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h
index bcf5b10baa..0fd068b074 100644
--- a/src/corelib/kernel/qeventdispatcher_unix_p.h
+++ b/src/corelib/kernel/qeventdispatcher_unix_p.h
@@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE
class QEventDispatcherUNIXPrivate;
-struct Q_CORE_EXPORT QSocketNotifierSetUNIX Q_DECL_FINAL
+struct Q_CORE_EXPORT QSocketNotifierSetUNIX final
{
inline QSocketNotifierSetUNIX() Q_DECL_NOTHROW;
@@ -105,22 +105,22 @@ public:
explicit QEventDispatcherUNIX(QObject *parent = 0);
~QEventDispatcherUNIX();
- bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
- bool hasPendingEvents() Q_DECL_OVERRIDE;
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) override;
+ bool hasPendingEvents() override;
- void registerSocketNotifier(QSocketNotifier *notifier) Q_DECL_FINAL;
- void unregisterSocketNotifier(QSocketNotifier *notifier) Q_DECL_FINAL;
+ void registerSocketNotifier(QSocketNotifier *notifier) final;
+ void unregisterSocketNotifier(QSocketNotifier *notifier) final;
- void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) Q_DECL_FINAL;
- bool unregisterTimer(int timerId) Q_DECL_FINAL;
- bool unregisterTimers(QObject *object) Q_DECL_FINAL;
- QList<TimerInfo> registeredTimers(QObject *object) const Q_DECL_FINAL;
+ void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) final;
+ bool unregisterTimer(int timerId) final;
+ bool unregisterTimers(QObject *object) final;
+ QList<TimerInfo> registeredTimers(QObject *object) const final;
- int remainingTime(int timerId) Q_DECL_FINAL;
+ int remainingTime(int timerId) final;
- void wakeUp() Q_DECL_FINAL;
- void interrupt() Q_DECL_FINAL;
- void flush() Q_DECL_OVERRIDE;
+ void wakeUp() final;
+ void interrupt() final;
+ void flush() override;
protected:
QEventDispatcherUNIX(QEventDispatcherUNIXPrivate &dd, QObject *parent = 0);
diff --git a/src/corelib/kernel/qeventloop.cpp b/src/corelib/kernel/qeventloop.cpp
index 8974ff7709..6034698349 100644
--- a/src/corelib/kernel/qeventloop.cpp
+++ b/src/corelib/kernel/qeventloop.cpp
@@ -101,8 +101,10 @@ QEventLoop::QEventLoop(QObject *parent)
Q_D(QEventLoop);
if (!QCoreApplication::instance() && QCoreApplicationPrivate::threadRequiresCoreApplication()) {
qWarning("QEventLoop: Cannot be used without QApplication");
- } else if (!d->threadData->eventDispatcher.load()) {
- QThreadPrivate::createEventDispatcher(d->threadData);
+ } else if (!d->threadData->hasEventDispatcher()) {
+ QAbstractEventDispatcher *eventDispatcher = QThreadPrivate::createEventDispatcher(d->threadData);
+ d->threadData->eventDispatcher.storeRelease(eventDispatcher);
+ eventDispatcher->startingUp();
}
}
@@ -129,7 +131,7 @@ QEventLoop::~QEventLoop()
bool QEventLoop::processEvents(ProcessEventsFlags flags)
{
Q_D(QEventLoop);
- if (!d->threadData->eventDispatcher.load())
+ if (!d->threadData->hasEventDispatcher())
return false;
return d->threadData->eventDispatcher.load()->processEvents(flags);
}
@@ -234,7 +236,7 @@ int QEventLoop::exec(ProcessEventsFlags flags)
void QEventLoop::processEvents(ProcessEventsFlags flags, int maxTime)
{
Q_D(QEventLoop);
- if (!d->threadData->eventDispatcher.load())
+ if (!d->threadData->hasEventDispatcher())
return;
QElapsedTimer start;
@@ -263,7 +265,7 @@ void QEventLoop::processEvents(ProcessEventsFlags flags, int maxTime)
void QEventLoop::exit(int returnCode)
{
Q_D(QEventLoop);
- if (!d->threadData->eventDispatcher.load())
+ if (!d->threadData->hasEventDispatcher())
return;
d->returnCode.store(returnCode);
@@ -292,7 +294,7 @@ bool QEventLoop::isRunning() const
void QEventLoop::wakeUp()
{
Q_D(QEventLoop);
- if (!d->threadData->eventDispatcher.load())
+ if (!d->threadData->hasEventDispatcher())
return;
d->threadData->eventDispatcher.load()->wakeUp();
}
diff --git a/src/corelib/kernel/qeventloop.h b/src/corelib/kernel/qeventloop.h
index e62b1d8419..eb1348220b 100644
--- a/src/corelib/kernel/qeventloop.h
+++ b/src/corelib/kernel/qeventloop.h
@@ -53,7 +53,7 @@ class Q_CORE_EXPORT QEventLoop : public QObject
Q_DECLARE_PRIVATE(QEventLoop)
public:
- explicit QEventLoop(QObject *parent = Q_NULLPTR);
+ explicit QEventLoop(QObject *parent = nullptr);
~QEventLoop();
enum ProcessEventsFlag {
@@ -76,7 +76,7 @@ public:
void wakeUp();
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
public Q_SLOTS:
void quit();
diff --git a/src/corelib/kernel/qfunctions_vxworks.h b/src/corelib/kernel/qfunctions_vxworks.h
index 34630a735b..86f243959f 100644
--- a/src/corelib/kernel/qfunctions_vxworks.h
+++ b/src/corelib/kernel/qfunctions_vxworks.h
@@ -62,9 +62,6 @@
#include <sys/stat.h>
#include <sys/wait.h>
#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
// VxWorks has public header mbuf.h which defines following variables for DKM.
// Let's undef those to because they overlap with Qt variable names-
diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp
index 60154328c2..75a2436d9d 100644
--- a/src/corelib/kernel/qjni.cpp
+++ b/src/corelib/kernel/qjni.cpp
@@ -260,7 +260,7 @@ QJNIEnvironmentPrivate::QJNIEnvironmentPrivate()
return;
if (ret == JNI_EDETACHED) { // We need to (re-)attach
- JavaVMAttachArgs args = { JNI_VERSION_1_6, qJniThreadName, Q_NULLPTR };
+ JavaVMAttachArgs args = { JNI_VERSION_1_6, qJniThreadName, nullptr };
if (vm->AttachCurrentThread(&jniEnv, &args) != JNI_OK)
return;
diff --git a/src/corelib/kernel/qjnihelpers.cpp b/src/corelib/kernel/qjnihelpers.cpp
index 0d7c143999..04c9a9bcba 100644
--- a/src/corelib/kernel/qjnihelpers.cpp
+++ b/src/corelib/kernel/qjnihelpers.cpp
@@ -64,14 +64,14 @@ namespace QtAndroidPrivate {
KeyEventListener::~KeyEventListener() {}
}
-static JavaVM *g_javaVM = Q_NULLPTR;
-static jobject g_jActivity = Q_NULLPTR;
-static jobject g_jService = Q_NULLPTR;
-static jobject g_jClassLoader = Q_NULLPTR;
+static JavaVM *g_javaVM = nullptr;
+static jobject g_jActivity = nullptr;
+static jobject g_jService = nullptr;
+static jobject g_jClassLoader = nullptr;
static jint g_androidSdkVersion = 0;
-static jclass g_jNativeClass = Q_NULLPTR;
-static jmethodID g_runPendingCppRunnablesMethodID = Q_NULLPTR;
-static jmethodID g_hideSplashScreenMethodID = Q_NULLPTR;
+static jclass g_jNativeClass = nullptr;
+static jmethodID g_runPendingCppRunnablesMethodID = nullptr;
+static jmethodID g_hideSplashScreenMethodID = nullptr;
Q_GLOBAL_STATIC(std::deque<QtAndroidPrivate::Runnable>, g_pendingRunnables);
static QBasicMutex g_pendingRunnablesMutex;
diff --git a/src/corelib/kernel/qjnionload.cpp b/src/corelib/kernel/qjnionload.cpp
index 8f60800dba..0550b86553 100644
--- a/src/corelib/kernel/qjnionload.cpp
+++ b/src/corelib/kernel/qjnionload.cpp
@@ -61,7 +61,7 @@ Q_CORE_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
__android_log_print(ANDROID_LOG_INFO, logTag, "Start");
_JNIEnv uenv;
- uenv.venv = Q_NULLPTR;
+ uenv.venv = nullptr;
if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_6) != JNI_OK)
{
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index 5c97bc6851..27138dd075 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -1341,7 +1341,7 @@ QByteArray QMetaObject::normalizedSignature(const char *method)
enum { MaximumParamCount = 11 }; // up to 10 arguments + 1 return value
-/*!
+/*
Returns the signatures of all methods whose name matches \a nonExistentMember,
or an empty QByteArray if there are no matches.
*/
@@ -1595,53 +1595,29 @@ bool QMetaObject::invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *
*/
/*!
- \fn bool QMetaObject::invokeMethod(QObject *receiver, PointerToMemberFunction function, Qt::ConnectionType type = Qt::AutoConnection, MemberFunctionReturnType *ret = Q_NULLPTR)
-
- \since 5.10
-
- \overload
-*/
-
-/*!
- \fn bool QMetaObject::invokeMethod(QObject *receiver, PointerToMemberFunction function, MemberFunctionReturnType *ret)
-
- \since 5.10
-
- \overload
-
- This overload invokes the member function using the connection type Qt::AutoConnection.
-*/
-
-/*!
- \fn bool QMetaObject::invokeMethod(QObject *context, Functor function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = Q_NULLPTR)
+ \fn template<typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor function, Qt::ConnectionType type, FunctorReturnType *ret)
\since 5.10
\overload
- Call the functor in the event loop of \a context.
+ Invokes the \a function in the event loop of \a context. \a function can be a functor
+ or a pointer to a member function. Returns \c true if the function could be invoked.
+ Returns \c false if there is no such function or the parameters did not match.
+ The return value of the function call is placed in \a ret.
*/
/*!
- \fn bool QMetaObject::invokeMethod(QObject *context, Functor function, FunctorReturnType *ret = Q_NULLPTR)
+ \fn template<typename Functor, typename FunctorReturnType> bool QMetaObject::invokeMethod(QObject *context, Functor function, FunctorReturnType *ret)
\since 5.10
\overload
- Call the functor in the event loop of \a context using the connection type Qt::AutoConnection.
-*/
-
-/*!
- \fn QMetaObject::Connection::Connection(const Connection &other)
-
- Constructs a copy of \a other.
-*/
-
-/*!
- \fn QMetaObject::Connection::Connection &operator=(const Connection &other)
-
- Assigns \a other to this connection and returns a reference to this connection.
+ Invokes the \a function in the event loop of \a context using the connection type Qt::AutoConnection.
+ \a function can be a functor or a pointer to a member function. Returns \c true if the function could
+ be invoked. Returns \c false if there is no such member or the parameters did not match.
+ The return value of the function call is placed in \a ret.
*/
/*!
@@ -2113,7 +2089,7 @@ QMetaMethod::MethodType QMetaMethod::methodType() const
}
/*!
- \fn QMetaMethod QMetaMethod::fromSignal(PointerToMemberFunction signal)
+ \fn template <typename PointerToMemberFunction> QMetaMethod QMetaMethod::fromSignal(PointerToMemberFunction signal)
\since 5.0
Returns the meta-method that corresponds to the given \a signal, or an
diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h
index 40b2aa6402..51df8faad3 100644
--- a/src/corelib/kernel/qmetaobject.h
+++ b/src/corelib/kernel/qmetaobject.h
@@ -54,7 +54,7 @@ template <typename T> class QList;
class Q_CORE_EXPORT QMetaMethod
{
public:
- Q_DECL_CONSTEXPR inline QMetaMethod() : mobj(Q_NULLPTR), handle(0) {}
+ Q_DECL_CONSTEXPR inline QMetaMethod() : mobj(nullptr), handle(0) {}
QByteArray methodSignature() const;
QByteArray name() const;
@@ -80,7 +80,7 @@ public:
bool invoke(QObject *object,
Qt::ConnectionType connectionType,
QGenericReturnArgument returnValue,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -92,7 +92,7 @@ public:
QGenericArgument val9 = QGenericArgument()) const;
inline bool invoke(QObject *object,
QGenericReturnArgument returnValue,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -108,7 +108,7 @@ public:
}
inline bool invoke(QObject *object,
Qt::ConnectionType connectionType,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -123,7 +123,7 @@ public:
val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
inline bool invoke(QObject *object,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -140,7 +140,7 @@ public:
bool invokeOnGadget(void *gadget,
QGenericReturnArgument returnValue,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -151,7 +151,7 @@ public:
QGenericArgument val8 = QGenericArgument(),
QGenericArgument val9 = QGenericArgument()) const;
inline bool invokeOnGadget(void *gadget,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -166,7 +166,7 @@ public:
val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
- inline bool isValid() const { return mobj != Q_NULLPTR; }
+ inline bool isValid() const { return mobj != nullptr; }
template <typename PointerToMemberFunction>
static inline QMetaMethod fromSignal(PointerToMemberFunction signal)
@@ -183,7 +183,7 @@ private:
// signature() has been renamed to methodSignature() in Qt 5.
// Warning, that function returns a QByteArray; check the life time if
// you convert to char*.
- char *signature(struct renamedInQt5_warning_checkTheLifeTime * = Q_NULLPTR) Q_DECL_EQ_DELETE;
+ char *signature(struct renamedInQt5_warning_checkTheLifeTime * = nullptr) Q_DECL_EQ_DELETE;
#endif
static QMetaMethod fromSignalImpl(const QMetaObject *, void **);
@@ -206,7 +206,7 @@ inline bool operator!=(const QMetaMethod &m1, const QMetaMethod &m2)
class Q_CORE_EXPORT QMetaEnum
{
public:
- Q_DECL_CONSTEXPR inline QMetaEnum() : mobj(Q_NULLPTR), handle(0) {}
+ Q_DECL_CONSTEXPR inline QMetaEnum() : mobj(nullptr), handle(0) {}
const char *name() const;
bool isFlag() const;
@@ -218,14 +218,14 @@ public:
const char *scope() const;
- int keyToValue(const char *key, bool *ok = Q_NULLPTR) const;
+ int keyToValue(const char *key, bool *ok = nullptr) const;
const char* valueToKey(int value) const;
- int keysToValue(const char * keys, bool *ok = Q_NULLPTR) const;
+ int keysToValue(const char * keys, bool *ok = nullptr) const;
QByteArray valueToKeys(int value) const;
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
- inline bool isValid() const { return name() != Q_NULLPTR; }
+ inline bool isValid() const { return name() != nullptr; }
template<typename T> static QMetaEnum fromType() {
Q_STATIC_ASSERT_X(QtPrivate::IsQEnumHelper<T>::Value,
@@ -256,11 +256,11 @@ public:
bool isReadable() const;
bool isWritable() const;
bool isResettable() const;
- bool isDesignable(const QObject *obj = Q_NULLPTR) const;
- bool isScriptable(const QObject *obj = Q_NULLPTR) const;
- bool isStored(const QObject *obj = Q_NULLPTR) const;
- bool isEditable(const QObject *obj = Q_NULLPTR) const;
- bool isUser(const QObject *obj = Q_NULLPTR) const;
+ bool isDesignable(const QObject *obj = nullptr) const;
+ bool isScriptable(const QObject *obj = nullptr) const;
+ bool isStored(const QObject *obj = nullptr) const;
+ bool isEditable(const QObject *obj = nullptr) const;
+ bool isUser(const QObject *obj = nullptr) const;
bool isConstant() const;
bool isFinal() const;
@@ -300,7 +300,7 @@ private:
class Q_CORE_EXPORT QMetaClassInfo
{
public:
- Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(Q_NULLPTR), handle(0) {}
+ Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(nullptr), handle(0) {}
const char *name() const;
const char *value() const;
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index e48807ea49..5abc2ebd70 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -216,6 +216,7 @@ struct DefinedTypesFilter {
\value QChar QChar
\value QString QString
\value QByteArray QByteArray
+ \value Nullptr \c{std::nullptr_t}
\value VoidStar \c{void *}
\value Long \c{long}
@@ -287,6 +288,8 @@ struct DefinedTypesFilter {
\value User Base value for user types
\value UnknownType This is an invalid type id. It is returned from QMetaType for types that are not registered
+ \omitvalue LastCoreType
+ \omitvalue LastGuiType
Additional types can be registered using Q_DECLARE_METATYPE().
@@ -586,7 +589,7 @@ Q_GLOBAL_STATIC(QMetaTypeDebugStreamRegistry, customTypesDebugStreamRegistry)
*/
/*!
- \fn bool QMetaType::registerConverter(MemberFunction function)
+ \fn template<typename MemberFunction, int> bool QMetaType::registerConverter(MemberFunction function)
\since 5.2
\overload
Registers a method \a function like To From::function() const as converter from type From
@@ -594,7 +597,7 @@ Q_GLOBAL_STATIC(QMetaTypeDebugStreamRegistry, customTypesDebugStreamRegistry)
*/
/*!
- \fn bool QMetaType::registerConverter(MemberFunctionOk function)
+ \fn template<typename MemberFunctionOk, char> bool QMetaType::registerConverter(MemberFunctionOk function)
\since 5.2
\overload
Registers a method \a function like To From::function(bool *ok) const as converter from type From
@@ -602,7 +605,7 @@ Q_GLOBAL_STATIC(QMetaTypeDebugStreamRegistry, customTypesDebugStreamRegistry)
*/
/*!
- \fn bool QMetaType::registerConverter(UnaryFunction function)
+ \fn template<typename UnaryFunction> bool QMetaType::registerConverter(UnaryFunction function)
\since 5.2
\overload
Registers a unary function object \a function as converter from type From
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index f704c5b21a..455d0350e0 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -234,7 +234,7 @@ struct AbstractDebugStreamFunction
{
typedef void (*Stream)(const AbstractDebugStreamFunction *, QDebug&, const void *);
typedef void (*Destroy)(AbstractDebugStreamFunction *);
- explicit AbstractDebugStreamFunction(Stream s = Q_NULLPTR, Destroy d = Q_NULLPTR)
+ explicit AbstractDebugStreamFunction(Stream s = nullptr, Destroy d = nullptr)
: stream(s), destroy(d) {}
Q_DISABLE_COPY(AbstractDebugStreamFunction)
Stream stream;
@@ -264,7 +264,7 @@ struct AbstractComparatorFunction
typedef bool (*LessThan)(const AbstractComparatorFunction *, const void *, const void *);
typedef bool (*Equals)(const AbstractComparatorFunction *, const void *, const void *);
typedef void (*Destroy)(AbstractComparatorFunction *);
- explicit AbstractComparatorFunction(LessThan lt = Q_NULLPTR, Equals e = Q_NULLPTR, Destroy d = Q_NULLPTR)
+ explicit AbstractComparatorFunction(LessThan lt = nullptr, Equals e = nullptr, Destroy d = nullptr)
: lessThan(lt), equals(e), destroy(d) {}
Q_DISABLE_COPY(AbstractComparatorFunction)
LessThan lessThan;
@@ -301,7 +301,7 @@ template<typename T>
struct BuiltInEqualsComparatorFunction : public AbstractComparatorFunction
{
BuiltInEqualsComparatorFunction()
- : AbstractComparatorFunction(Q_NULLPTR, equals, destroy) {}
+ : AbstractComparatorFunction(nullptr, equals, destroy) {}
static bool equals(const AbstractComparatorFunction *, const void *l, const void *r)
{
const T *lhs = static_cast<const T *>(l);
@@ -318,7 +318,7 @@ struct BuiltInEqualsComparatorFunction : public AbstractComparatorFunction
struct AbstractConverterFunction
{
typedef bool (*Converter)(const AbstractConverterFunction *, const void *, void*);
- explicit AbstractConverterFunction(Converter c = Q_NULLPTR)
+ explicit AbstractConverterFunction(Converter c = nullptr)
: convert(c) {}
Q_DISABLE_COPY(AbstractConverterFunction)
Converter convert;
@@ -406,7 +406,7 @@ class Q_CORE_EXPORT QMetaType {
FlagsEx = 0x100, MetaObjectEx = 0x200
};
public:
-#ifndef Q_QDOC
+#ifndef Q_CLANG_QDOC
// The code that actually gets compiled.
enum Type {
// these are merged with QVariant
@@ -441,6 +441,7 @@ public:
QJsonValue = 45, QJsonObject = 46, QJsonArray = 47, QJsonDocument = 48,
QByteArrayList = 49, QObjectStar = 39, SChar = 40,
Void = 43,
+ Nullptr = 51,
QVariantMap = 8, QVariantList = 9, QVariantHash = 28,
QFont = 64, QPixmap = 65, QBrush = 66, QColor = 67, QPalette = 68,
QIcon = 69, QImage = 70, QPolygon = 71, QRegion = 72, QBitmap = 73,
@@ -448,6 +449,8 @@ public:
QMatrix = 79, QTransform = 80, QMatrix4x4 = 81, QVector2D = 82,
QVector3D = 83, QVector4D = 84, QQuaternion = 85, QPolygonF = 86,
QSizePolicy = 121,
+ LastCoreType = Nullptr,
+ LastGuiType = QPolygonF,
User = 1024
};
#endif
@@ -513,9 +516,9 @@ public:
static TypeFlags typeFlags(int type);
static const QMetaObject *metaObjectForType(int type);
static bool isRegistered(int type);
- static void *create(int type, const void *copy = Q_NULLPTR);
+ static void *create(int type, const void *copy = nullptr);
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED static void *construct(int type, const void *copy = Q_NULLPTR)
+ QT_DEPRECATED static void *construct(int type, const void *copy = nullptr)
{ return create(type, copy); }
#endif
static void destroy(int type, void *data);
@@ -536,9 +539,9 @@ public:
inline TypeFlags flags() const;
inline const QMetaObject *metaObject() const;
- inline void *create(const void *copy = Q_NULLPTR) const;
+ inline void *create(const void *copy = nullptr) const;
inline void destroy(void *data) const;
- inline void *construct(void *where, const void *copy = Q_NULLPTR) const;
+ inline void *construct(void *where, const void *copy = nullptr) const;
inline void destruct(void *data) const;
public:
@@ -596,7 +599,7 @@ public:
return registerConverter<From, To>(QtPrivate::convertImplicit<From, To>);
}
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template<typename MemberFunction, int>
static bool registerConverter(MemberFunction function);
template<typename MemberFunctionOk, char>
@@ -617,7 +620,7 @@ public:
return registerConverterFunction(&f, fromTypeId, toTypeId);
}
- // member function as in "double QString::toDouble(bool *ok = Q_NULLPTR) const"
+ // member function as in "double QString::toDouble(bool *ok = nullptr) const"
template<typename From, typename To>
static bool registerConverter(To(From::*function)(bool*) const)
{
@@ -680,9 +683,9 @@ private:
uint sizeExtended() const;
QMetaType::TypeFlags flagsExtended() const;
const QMetaObject *metaObjectExtended() const;
- void *createExtended(const void *copy = Q_NULLPTR) const;
+ void *createExtended(const void *copy = nullptr) const;
void destroyExtended(void *data) const;
- void *constructExtended(void *where, const void *copy = Q_NULLPTR) const;
+ void *constructExtended(void *where, const void *copy = nullptr) const;
void destructExtended(void *data) const;
static bool registerComparatorFunction(const QtPrivate::AbstractComparatorFunction *f, int type);
@@ -692,7 +695,7 @@ private:
// ### Qt6: FIXME: Remove the special Q_CC_MSVC handling, it was introduced to maintain BC.
#if !defined(Q_NO_TEMPLATE_FRIENDS) && !defined(Q_CC_MSVC)
-#ifndef Q_QDOC
+#ifndef Q_CLANG_QDOC
template<typename, bool> friend struct QtPrivate::ValueTypeIsMetaType;
template<typename, typename> friend struct QtPrivate::ConverterMemberFunction;
template<typename, typename> friend struct QtPrivate::ConverterMemberFunctionOk;
@@ -782,7 +785,7 @@ struct QMetaTypeFunctionHelper {
template <typename T>
struct QMetaTypeFunctionHelper<T, /* Accepted */ false> {
static void Destruct(void *) {}
- static void *Construct(void *, const void *) { return Q_NULLPTR; }
+ static void *Construct(void *, const void *) { return nullptr; }
#ifndef QT_NO_DATASTREAM
static void Save(QDataStream &, const void *) {}
static void Load(QDataStream &, void *) {}
@@ -1020,7 +1023,7 @@ public:
public:
template<class T> QSequentialIterableImpl(const T*p)
: _iterable(p)
- , _iterator(Q_NULLPTR)
+ , _iterator(nullptr)
, _metaType_id(qMetaTypeId<typename T::value_type>())
, _metaType_flags(QTypeInfo<typename T::value_type>::isPointer)
, _iteratorCapabilities(ContainerAPI<T>::IteratorCapabilities)
@@ -1037,20 +1040,20 @@ public:
}
QSequentialIterableImpl()
- : _iterable(Q_NULLPTR)
- , _iterator(Q_NULLPTR)
+ : _iterable(nullptr)
+ , _iterator(nullptr)
, _metaType_id(QMetaType::UnknownType)
, _metaType_flags(0)
, _iteratorCapabilities(0)
- , _size(Q_NULLPTR)
- , _at(Q_NULLPTR)
- , _moveToBegin(Q_NULLPTR)
- , _moveToEnd(Q_NULLPTR)
- , _advance(Q_NULLPTR)
- , _get(Q_NULLPTR)
- , _destroyIter(Q_NULLPTR)
- , _equalIter(Q_NULLPTR)
- , _copyIter(Q_NULLPTR)
+ , _size(nullptr)
+ , _at(nullptr)
+ , _moveToBegin(nullptr)
+ , _moveToEnd(nullptr)
+ , _advance(nullptr)
+ , _get(nullptr)
+ , _destroyIter(nullptr)
+ , _equalIter(nullptr)
+ , _copyIter(nullptr)
{
}
@@ -1189,7 +1192,7 @@ public:
public:
template<class T> QAssociativeIterableImpl(const T*p)
: _iterable(p)
- , _iterator(Q_NULLPTR)
+ , _iterator(nullptr)
, _metaType_id_key(qMetaTypeId<typename T::key_type>())
, _metaType_flags_key(QTypeInfo<typename T::key_type>::isPointer)
, _metaType_id_value(qMetaTypeId<typename T::mapped_type>())
@@ -1208,22 +1211,22 @@ public:
}
QAssociativeIterableImpl()
- : _iterable(Q_NULLPTR)
- , _iterator(Q_NULLPTR)
+ : _iterable(nullptr)
+ , _iterator(nullptr)
, _metaType_id_key(QMetaType::UnknownType)
, _metaType_flags_key(0)
, _metaType_id_value(QMetaType::UnknownType)
, _metaType_flags_value(0)
- , _size(Q_NULLPTR)
- , _find(Q_NULLPTR)
- , _begin(Q_NULLPTR)
- , _end(Q_NULLPTR)
- , _advance(Q_NULLPTR)
- , _getKey(Q_NULLPTR)
- , _getValue(Q_NULLPTR)
- , _destroyIter(Q_NULLPTR)
- , _equalIter(Q_NULLPTR)
- , _copyIter(Q_NULLPTR)
+ , _size(nullptr)
+ , _find(nullptr)
+ , _begin(nullptr)
+ , _end(nullptr)
+ , _advance(nullptr)
+ , _getKey(nullptr)
+ , _getValue(nullptr)
+ , _destroyIter(nullptr)
+ , _equalIter(nullptr)
+ , _copyIter(nullptr)
{
}
@@ -1292,13 +1295,13 @@ public:
}
QPairVariantInterfaceImpl()
- : _pair(Q_NULLPTR)
+ : _pair(nullptr)
, _metaType_id_first(QMetaType::UnknownType)
, _metaType_flags_first(0)
, _metaType_id_second(QMetaType::UnknownType)
, _metaType_flags_second(0)
- , _getFirst(Q_NULLPTR)
- , _getSecond(Q_NULLPTR)
+ , _getFirst(nullptr)
+ , _getSecond(nullptr)
{
}
@@ -1374,7 +1377,7 @@ namespace QtPrivate
#endif
static no_type checkType(...);
Q_STATIC_ASSERT_X(sizeof(T), "Type argument of Q_DECLARE_METATYPE(T*) must be fully defined");
- enum { Value = sizeof(checkType(static_cast<T*>(Q_NULLPTR))) == sizeof(yes_type) };
+ enum { Value = sizeof(checkType(static_cast<T*>(nullptr))) == sizeof(yes_type) };
};
template<typename T, typename Enable = void>
@@ -1419,12 +1422,12 @@ namespace QtPrivate
template<typename T, typename Enable = void>
struct MetaObjectForType
{
- static inline const QMetaObject *value() { return Q_NULLPTR; }
+ static inline const QMetaObject *value() { return nullptr; }
};
template<>
struct MetaObjectForType<void>
{
- static inline const QMetaObject *value() { return Q_NULLPTR; }
+ static inline const QMetaObject *value() { return nullptr; }
};
template<typename T>
struct MetaObjectForType<T*, typename std::enable_if<IsPointerToTypeDerivedFromQObject<T*>::Value>::type>
@@ -1682,7 +1685,7 @@ namespace QtPrivate {
template <typename T>
int qRegisterNormalizedMetaType(const QT_PREPEND_NAMESPACE(QByteArray) &normalizedTypeName
-#ifndef Q_QDOC
+#ifndef Q_CLANG_QDOC
, T * dummy = 0
, typename QtPrivate::MetaTypeDefinedHelper<T, QMetaTypeId2<T>::Defined && !QMetaTypeId2<T>::IsBuiltIn>::DefinedType defined = QtPrivate::MetaTypeDefinedHelper<T, QMetaTypeId2<T>::Defined && !QMetaTypeId2<T>::IsBuiltIn>::Defined
#endif
@@ -1719,8 +1722,8 @@ int qRegisterNormalizedMetaType(const QT_PREPEND_NAMESPACE(QByteArray) &normaliz
template <typename T>
int qRegisterMetaType(const char *typeName
-#ifndef Q_QDOC
- , T * dummy = Q_NULLPTR
+#ifndef Q_CLANG_QDOC
+ , T * dummy = nullptr
, typename QtPrivate::MetaTypeDefinedHelper<T, QMetaTypeId2<T>::Defined && !QMetaTypeId2<T>::IsBuiltIn>::DefinedType defined = QtPrivate::MetaTypeDefinedHelper<T, QMetaTypeId2<T>::Defined && !QMetaTypeId2<T>::IsBuiltIn>::Defined
#endif
)
@@ -1736,8 +1739,8 @@ int qRegisterMetaType(const char *typeName
#ifndef QT_NO_DATASTREAM
template <typename T>
void qRegisterMetaTypeStreamOperators(const char *typeName
-#ifndef Q_QDOC
- , T * /* dummy */ = Q_NULLPTR
+#ifndef Q_CLANG_QDOC
+ , T * /* dummy */ = nullptr
#endif
)
{
@@ -1760,7 +1763,7 @@ inline Q_DECL_CONSTEXPR int qRegisterMetaType()
return qMetaTypeId<T>();
}
-#if QT_DEPRECATED_SINCE(5, 1) && !defined(Q_QDOC)
+#if QT_DEPRECATED_SINCE(5, 1) && !defined(Q_CLANG_QDOC)
// There used to be a T *dummy = 0 argument in Qt 4.0 to support MSVC6
template <typename T>
QT_DEPRECATED inline Q_DECL_CONSTEXPR int qMetaTypeId(T *)
@@ -1932,7 +1935,7 @@ QT_FOR_EACH_STATIC_WIDGETS_CLASS(QT_FORWARD_DECLARE_STATIC_TYPES_ITER)
typedef QList<QVariant> QVariantList;
typedef QMap<QString, QVariant> QVariantMap;
typedef QHash<QString, QVariant> QVariantHash;
-#ifndef Q_QDOC
+#ifndef Q_CLANG_QDOC
typedef QList<QByteArray> QByteArrayList;
#endif
@@ -2150,7 +2153,7 @@ inline QMetaType::QMetaType(const ExtensionFlag extensionFlags, const QMetaTypeI
, m_loadOp(loadOp)
, m_constructor(constructor)
, m_destructor(destructor)
- , m_extension(Q_NULLPTR)
+ , m_extension(nullptr)
, m_size(size)
, m_typeFlags(theTypeFlags)
, m_extensionFlags(extensionFlags)
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index baed659590..9e1c3a50cb 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -238,7 +238,7 @@ QObjectPrivate::~QObjectPrivate()
if (extraData && !extraData->runningTimers.isEmpty()) {
if (Q_LIKELY(threadData->thread == QThread::currentThread())) {
// unregister pending timers
- if (threadData->eventDispatcher.load())
+ if (threadData->hasEventDispatcher())
threadData->eventDispatcher.load()->unregisterTimers(q_ptr);
// release the timer ids back to the pool
@@ -516,7 +516,7 @@ void QMetaCallEvent::placeMetaCall(QObject *object)
\reentrant
- QSignalBlocker can be used whereever you would otherwise use a
+ QSignalBlocker can be used wherever you would otherwise use a
pair of calls to blockSignals(). It blocks signals in its
constructor and in the destructor it resets the state to what
it was before the constructor ran.
@@ -999,7 +999,7 @@ QObject::~QObject()
if (senderLists)
senderLists->dirty = true;
- QtPrivate::QSlotObjectBase *slotObj = Q_NULLPTR;
+ QtPrivate::QSlotObjectBase *slotObj = nullptr;
if (node->isSlotObject) {
slotObj = node->slotObj;
node->isSlotObject = false;
@@ -1045,7 +1045,7 @@ QObjectPrivate::Connection::~Connection()
/*!
- \fn QMetaObject *QObject::metaObject() const
+ \fn const QMetaObject *QObject::metaObject() const
Returns a pointer to the meta-object of this object.
@@ -1093,7 +1093,9 @@ QObjectPrivate::Connection::~Connection()
\sa metaObject()
*/
-/*! \fn T *qobject_cast<T *>(QObject *object)
+/*!
+ \fn template <class T> T qobject_cast(QObject *object)
+ \fn template <class T> T qobject_cast(const QObject *object)
\relates QObject
Returns the given \a object cast to type T if the object is of type
@@ -1469,14 +1471,14 @@ void QObject::moveToThread(QThread *targetThread)
}
QThreadData *currentData = QThreadData::current();
- QThreadData *targetData = targetThread ? QThreadData::get2(targetThread) : Q_NULLPTR;
+ QThreadData *targetData = targetThread ? QThreadData::get2(targetThread) : nullptr;
if (d->threadData->thread == 0 && currentData == targetData) {
// one exception to the rule: we allow moving objects with no thread affinity to the current thread
currentData = d->threadData;
} else if (d->threadData != currentData) {
qWarning("QObject::moveToThread: Current thread (%p) is not the object's thread (%p).\n"
"Cannot move to target thread (%p)\n",
- currentData->thread.load(), d->threadData->thread.load(), targetData ? targetData->thread.load() : Q_NULLPTR);
+ currentData->thread.load(), d->threadData->thread.load(), targetData ? targetData->thread.load() : nullptr);
#ifdef Q_OS_MAC
qWarning("You might be loading two sets of Qt binaries into the same process. "
@@ -1536,7 +1538,7 @@ void QObjectPrivate::setThreadData_helper(QThreadData *currentData, QThreadData
++eventsMoved;
}
}
- if (eventsMoved > 0 && targetData->eventDispatcher.load()) {
+ if (eventsMoved > 0 && targetData->hasEventDispatcher()) {
targetData->canWait = false;
targetData->eventDispatcher.load()->wakeUp();
}
@@ -1619,7 +1621,7 @@ int QObject::startTimer(int interval, Qt::TimerType timerType)
qWarning("QObject::startTimer: Timers cannot have negative intervals");
return 0;
}
- if (Q_UNLIKELY(!d->threadData->eventDispatcher.load())) {
+ if (Q_UNLIKELY(!d->threadData->hasEventDispatcher())) {
qWarning("QObject::startTimer: Timers can only be used with threads started with QThread");
return 0;
}
@@ -1701,7 +1703,7 @@ void QObject::killTimer(int id)
return;
}
- if (d->threadData->eventDispatcher.load())
+ if (d->threadData->hasEventDispatcher())
d->threadData->eventDispatcher.load()->unregisterTimer(id);
d->extraData->runningTimers.remove(at);
@@ -1743,7 +1745,7 @@ void QObject::killTimer(int id)
/*!
- \fn T *QObject::findChild(const QString &name, Qt::FindChildOptions options) const
+ \fn template<typename T> T *QObject::findChild(const QString &name, Qt::FindChildOptions options) const
Returns the child of this object that can be cast into type T and
that is called \a name, or 0 if there is no such object.
@@ -1780,7 +1782,7 @@ void QObject::killTimer(int id)
*/
/*!
- \fn QList<T> QObject::findChildren(const QString &name, Qt::FindChildOptions options) const
+ \fn template<typename T> QList<T> QObject::findChildren(const QString &name, Qt::FindChildOptions options) const
Returns all children of this object with the given \a name that can be
cast to type T, or an empty list if there are no such objects.
@@ -1805,7 +1807,7 @@ void QObject::killTimer(int id)
*/
/*!
- \fn QList<T> QObject::findChildren(const QRegExp &regExp, Qt::FindChildOptions options) const
+ \fn template<typename T> QList<T> QObject::findChildren(const QRegExp &regExp, Qt::FindChildOptions options) const
\overload findChildren()
Returns the children of this object that can be cast to type T
@@ -1829,7 +1831,7 @@ void QObject::killTimer(int id)
*/
/*!
- \fn T qFindChild(const QObject *obj, const QString &name)
+ \fn template<typename T> T qFindChild(const QObject *obj, const QString &name)
\relates QObject
\overload qFindChildren()
\obsolete
@@ -1845,7 +1847,7 @@ void QObject::killTimer(int id)
*/
/*!
- \fn QList<T> qFindChildren(const QObject *obj, const QString &name)
+ \fn template<typename T> QList<T> qFindChildren(const QObject *obj, const QString &name)
\relates QObject
\overload qFindChildren()
\obsolete
@@ -1861,7 +1863,7 @@ void QObject::killTimer(int id)
*/
/*!
- \fn QList<T> qFindChildren(const QObject *obj, const QRegExp &regExp)
+ \fn template<typename T> QList<T> qFindChildren(const QObject *obj, const QRegExp &regExp)
\relates QObject
\overload qFindChildren()
@@ -2128,7 +2130,7 @@ void QObject::removeEventFilter(QObject *obj)
/*!
- \fn QObject::destroyed(QObject *obj)
+ \fn void QObject::destroyed(QObject *obj)
This signal is emitted immediately before the object \a obj is
destroyed, and can not be blocked.
@@ -4600,7 +4602,7 @@ void qDeleteInEventHandler(QObject *o)
}
/*!
- \fn QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
+ \fn template<typename PointerToMemberFunction> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
\overload connect()
\threadsafe
@@ -4664,7 +4666,7 @@ void qDeleteInEventHandler(QObject *o)
*/
/*!
- \fn QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
+ \fn template<typename PointerToMemberFunction, typename Functor> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
\threadsafe
\overload connect()
@@ -4698,7 +4700,7 @@ void qDeleteInEventHandler(QObject *o)
*/
/*!
- \fn QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
+ \fn template<typename PointerToMemberFunction, typename Functor> QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
\threadsafe
\overload connect()
@@ -4896,7 +4898,7 @@ bool QObject::disconnect(const QMetaObject::Connection &connection)
return true;
}
-/*! \fn bool QObject::disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
+/*! \fn template<typename PointerToMemberFunction> bool QObject::disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
\overload diconnect()
\threadsafe
@@ -5025,7 +5027,7 @@ bool QObjectPrivate::disconnect(const QObject *sender, int signal_index, void **
*/
/*!
- Create a copy of the handle to the connection
+ Create a copy of the handle to the \a other connection
*/
QMetaObject::Connection::Connection(const QMetaObject::Connection &other) : d_ptr(other.d_ptr)
{
@@ -5033,6 +5035,9 @@ QMetaObject::Connection::Connection(const QMetaObject::Connection &other) : d_pt
static_cast<QObjectPrivate::Connection *>(d_ptr)->ref();
}
+/*!
+ Assigns \a other to this connection and returns a reference to this connection.
+*/
QMetaObject::Connection& QMetaObject::Connection::operator=(const QMetaObject::Connection& other)
{
if (other.d_ptr != d_ptr) {
diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h
index 7299a2b48d..0e608a3208 100644
--- a/src/corelib/kernel/qobject.h
+++ b/src/corelib/kernel/qobject.h
@@ -121,23 +121,17 @@ class Q_CORE_EXPORT QObject
Q_DECLARE_PRIVATE(QObject)
public:
- Q_INVOKABLE explicit QObject(QObject *parent=Q_NULLPTR);
+ Q_INVOKABLE explicit QObject(QObject *parent=nullptr);
virtual ~QObject();
virtual bool event(QEvent *event);
virtual bool eventFilter(QObject *watched, QEvent *event);
-#ifdef Q_QDOC
- static QString tr(const char *sourceText, const char *comment = Q_NULLPTR, int n = -1);
- static QString trUtf8(const char *sourceText, const char *comment = Q_NULLPTR, int n = -1);
- virtual const QMetaObject *metaObject() const;
- static const QMetaObject staticMetaObject;
-#endif
-#ifdef QT_NO_TRANSLATION
- static QString tr(const char *sourceText, const char * = Q_NULLPTR, int = -1)
+#if defined(QT_NO_TRANSLATION)
+ static QString tr(const char *sourceText, const char * = nullptr, int = -1)
{ return QString::fromUtf8(sourceText); }
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED static QString trUtf8(const char *sourceText, const char * = Q_NULLPTR, int = -1)
+ QT_DEPRECATED static QString trUtf8(const char *sourceText, const char * = nullptr, int = -1)
{ return QString::fromUtf8(sourceText); }
#endif
#endif //QT_NO_TRANSLATION
@@ -155,7 +149,7 @@ public:
void moveToThread(QThread *thread);
int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);
-#if QT_HAS_INCLUDE(<chrono>) || defined(Q_QDOC)
+#if QT_HAS_INCLUDE(<chrono>)
Q_ALWAYS_INLINE
int startTimer(std::chrono::milliseconds time, Qt::TimerType timerType = Qt::CoarseTimer)
{
@@ -221,7 +215,7 @@ public:
inline QMetaObject::Connection connect(const QObject *sender, const char *signal,
const char *member, Qt::ConnectionType type = Qt::AutoConnection) const;
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template<typename PointerToMemberFunction>
static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);
template<typename PointerToMemberFunction, typename Functor>
@@ -249,7 +243,7 @@ public:
Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value),
"Return type of the slot is not compatible with the return type of the signal.");
- const int *types = Q_NULLPTR;
+ const int *types = nullptr;
if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
@@ -289,11 +283,11 @@ public:
Q_STATIC_ASSERT_X((QtPrivate::AreArgumentsCompatible<typename SlotType::ReturnType, typename SignalType::ReturnType>::value),
"Return type of the slot is not compatible with the return type of the signal.");
- const int *types = Q_NULLPTR;
+ const int *types = nullptr;
if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
- return connectImpl(sender, reinterpret_cast<void **>(&signal), context, Q_NULLPTR,
+ return connectImpl(sender, reinterpret_cast<void **>(&signal), context, nullptr,
new QtPrivate::QStaticSlotObject<Func2,
typename QtPrivate::List_Left<typename SignalType::Arguments, SlotType::ArgumentCount>::Value,
typename SignalType::ReturnType>(slot),
@@ -328,30 +322,30 @@ public:
Q_STATIC_ASSERT_X(QtPrivate::HasQ_OBJECT_Macro<typename SignalType::Object>::Value,
"No Q_OBJECT in the class with the signal");
- const int *types = Q_NULLPTR;
+ const int *types = nullptr;
if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection)
types = QtPrivate::ConnectionTypes<typename SignalType::Arguments>::types();
- return connectImpl(sender, reinterpret_cast<void **>(&signal), context, Q_NULLPTR,
+ return connectImpl(sender, reinterpret_cast<void **>(&signal), context, nullptr,
new QtPrivate::QFunctorSlotObject<Func2, SlotArgumentCount,
typename QtPrivate::List_Left<typename SignalType::Arguments, SlotArgumentCount>::Value,
typename SignalType::ReturnType>(std::move(slot)),
type, types, &SignalType::Object::staticMetaObject);
}
-#endif //Q_QDOC
+#endif //Q_CLANG_QDOC
static bool disconnect(const QObject *sender, const char *signal,
const QObject *receiver, const char *member);
static bool disconnect(const QObject *sender, const QMetaMethod &signal,
const QObject *receiver, const QMetaMethod &member);
- inline bool disconnect(const char *signal = Q_NULLPTR,
- const QObject *receiver = Q_NULLPTR, const char *member = Q_NULLPTR) const
+ inline bool disconnect(const char *signal = nullptr,
+ const QObject *receiver = nullptr, const char *member = nullptr) const
{ return disconnect(this, signal, receiver, member); }
- inline bool disconnect(const QObject *receiver, const char *member = Q_NULLPTR) const
- { return disconnect(this, Q_NULLPTR, receiver, member); }
+ inline bool disconnect(const QObject *receiver, const char *member = nullptr) const
+ { return disconnect(this, nullptr, receiver, member); }
static bool disconnect(const QMetaObject::Connection &);
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template<typename PointerToMemberFunction>
static bool disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method);
#else
@@ -376,7 +370,7 @@ public:
static inline bool disconnect(const typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal,
const QObject *receiver, void **zero)
{
- // This is the overload for when one wish to disconnect a signal from any slot. (slot=Q_NULLPTR)
+ // This is the overload for when one wish to disconnect a signal from any slot. (slot=nullptr)
// Since the function template parameter cannot be deduced from '0', we use a
// dummy void ** parameter that must be equal to 0
Q_ASSERT(!zero);
@@ -384,7 +378,7 @@ public:
return disconnectImpl(sender, reinterpret_cast<void **>(&signal), receiver, zero,
&SignalType::Object::staticMetaObject);
}
-#endif //Q_QDOC
+#endif //Q_CLANG_QDOC
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
@@ -407,14 +401,14 @@ public:
#endif // QT_NO_USERDATA
Q_SIGNALS:
- void destroyed(QObject * = Q_NULLPTR);
+ void destroyed(QObject * = nullptr);
void objectNameChanged(const QString &objectName, QPrivateSignal);
public:
inline QObject *parent() const { return d_ptr->parent; }
inline bool inherits(const char *classname) const
- { return const_cast<QObject *>(this)->qt_metacast(classname) != Q_NULLPTR; }
+ { return const_cast<QObject *>(this)->qt_metacast(classname) != nullptr; }
public Q_SLOTS:
void deleteLater();
@@ -433,7 +427,7 @@ protected:
virtual void disconnectNotify(const QMetaMethod &signal);
protected:
- QObject(QObjectPrivate &dd, QObject *parent = Q_NULLPTR);
+ QObject(QObjectPrivate &dd, QObject *parent = nullptr);
protected:
QScopedPointer<QObjectData> d_ptr;
@@ -480,11 +474,6 @@ public:
};
#endif
-#ifdef Q_QDOC
-T qFindChild(const QObject *o, const QString &name = QString());
-QList<T> qFindChildren(const QObject *oobj, const QString &name = QString());
-QList<T> qFindChildren(const QObject *o, const QRegExp &re);
-#endif
#if QT_DEPRECATED_SINCE(5, 0)
template<typename T>
inline QT_DEPRECATED T qFindChild(const QObject *o, const QString &name = QString())
@@ -496,7 +485,7 @@ inline QT_DEPRECATED QList<T> qFindChildren(const QObject *o, const QString &nam
return o->findChildren<T>(name);
}
-#ifndef QT_NO_REGEXP
+#if !defined(QT_NO_REGEXP) || defined(Q_CLANG_QDOC)
template<typename T>
inline QT_DEPRECATED QList<T> qFindChildren(const QObject *o, const QRegExp &re)
{
@@ -526,16 +515,16 @@ inline T qobject_cast(const QObject *object)
template <class T> inline const char * qobject_interface_iid()
-{ return Q_NULLPTR; }
+{ return nullptr; }
-#ifndef Q_MOC_RUN
+#if !defined(Q_MOC_RUN) && !defined(Q_CLANG_QDOC)
# define Q_DECLARE_INTERFACE(IFace, IId) \
template <> inline const char *qobject_interface_iid<IFace *>() \
{ return IId; } \
template <> inline IFace *qobject_cast<IFace *>(QObject *object) \
- { return reinterpret_cast<IFace *>((object ? object->qt_metacast(IId) : Q_NULLPTR)); } \
+ { return reinterpret_cast<IFace *>((object ? object->qt_metacast(IId) : nullptr)); } \
template <> inline IFace *qobject_cast<IFace *>(const QObject *object) \
- { return reinterpret_cast<IFace *>((object ? const_cast<QObject *>(object)->qt_metacast(IId) : Q_NULLPTR)); }
+ { return reinterpret_cast<IFace *>((object ? const_cast<QObject *>(object)->qt_metacast(IId) : nullptr)); }
#endif // Q_MOC_RUN
#ifndef QT_NO_DEBUG_STREAM
@@ -581,7 +570,7 @@ QSignalBlocker::QSignalBlocker(QSignalBlocker &&other) Q_DECL_NOTHROW
m_blocked(other.m_blocked),
m_inhibited(other.m_inhibited)
{
- other.m_o = Q_NULLPTR;
+ other.m_o = nullptr;
}
QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other) Q_DECL_NOTHROW
@@ -595,7 +584,7 @@ QSignalBlocker &QSignalBlocker::operator=(QSignalBlocker &&other) Q_DECL_NOTHROW
m_blocked = other.m_blocked;
m_inhibited = other.m_inhibited;
// disable other:
- other.m_o = Q_NULLPTR;
+ other.m_o = nullptr;
}
return *this;
}
diff --git a/src/corelib/kernel/qobject_impl.h b/src/corelib/kernel/qobject_impl.h
index c775d807b1..1a14b93dcd 100644
--- a/src/corelib/kernel/qobject_impl.h
+++ b/src/corelib/kernel/qobject_impl.h
@@ -68,9 +68,9 @@ namespace QtPrivate {
{ enum { Value = QMetaTypeId2<Arg>::Defined && TypesAreDeclaredMetaType<List<Tail...>>::Value }; };
template <typename ArgList, bool Declared = TypesAreDeclaredMetaType<ArgList>::Value > struct ConnectionTypes
- { static const int *types() { return Q_NULLPTR; } };
+ { static const int *types() { return nullptr; } };
template <> struct ConnectionTypes<List<>, true>
- { static const int *types() { return Q_NULLPTR; } };
+ { static const int *types() { return nullptr; } };
template <typename... Args> struct ConnectionTypes<List<Args...>, true>
{ static const int *types() { static const int t[sizeof...(Args) + 1] = { (QtPrivate::QMetaTypeIdHelper<Args>::qt_metatype_id())..., 0 }; return t; } };
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index ad88bcf274..6aea40cf4a 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.com>
** Contact: https://www.qt.io/licensing/
**
@@ -145,7 +145,7 @@ public:
ushort connectionType : 3; // 0 == auto, 1 == direct, 2 == queued, 4 == blocking
ushort isSlotObject : 1;
ushort ownArgumentTypes : 1;
- Connection() : nextConnectionList(0), ref_(2), ownArgumentTypes(true) {
+ Connection() : nextConnectionList(nullptr), ref_(2), ownArgumentTypes(true) {
//ref_ is 2 for the use in the internal lists, and for the use in QMetaObject::Connection
}
~Connection();
@@ -160,7 +160,7 @@ public:
};
// ConnectionList is a singly-linked list
struct ConnectionList {
- ConnectionList() : first(0), last(0) {}
+ ConnectionList() : first(nullptr), last(nullptr) {}
Connection *first;
Connection *last;
};
@@ -200,7 +200,7 @@ public:
}
static const QObjectPrivate *get(const QObject *o) { return o->d_func(); }
- int signalIndex(const char *signalName, const QMetaObject **meta = 0) const;
+ int signalIndex(const char *signalName, const QMetaObject **meta = nullptr) const;
inline bool isSignalConnected(uint signalIdx, bool checkDeclarative = true) const;
inline bool isDeclarativeSignalConnected(uint signalIdx) const;
@@ -376,12 +376,12 @@ class Q_CORE_EXPORT QMetaCallEvent : public QEvent
{
public:
QMetaCallEvent(ushort method_offset, ushort method_relative, QObjectPrivate::StaticMetaCallFunction callFunction , const QObject *sender, int signalId,
- int nargs = 0, int *types = 0, void **args = 0, QSemaphore *semaphore = 0);
+ int nargs = 0, int *types = nullptr, void **args = nullptr, QSemaphore *semaphore = nullptr);
/*! \internal
\a signalId is in the signal index range (see QObjectPrivate::signalIndex()).
*/
QMetaCallEvent(QtPrivate::QSlotObjectBase *slotObj, const QObject *sender, int signalId,
- int nargs = 0, int *types = 0, void **args = 0, QSemaphore *semaphore = 0);
+ int nargs = 0, int *types = nullptr, void **args = nullptr, QSemaphore *semaphore = nullptr);
~QMetaCallEvent();
@@ -432,9 +432,9 @@ struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData,
{
~QAbstractDynamicMetaObject();
- virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) Q_DECL_OVERRIDE { return this; }
+ virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) override { return this; }
virtual int createProperty(const char *, const char *) { return -1; }
- virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) Q_DECL_OVERRIDE
+ virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) override
{ return metaCall(c, _id, a); }
virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; } // Compat overload
};
diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h
index 5fc8937f23..d7ed2b0282 100644
--- a/src/corelib/kernel/qobjectdefs.h
+++ b/src/corelib/kernel/qobjectdefs.h
@@ -137,9 +137,9 @@ class QString;
#ifndef QT_NO_TRANSLATION
// full set of tr functions
# define QT_TR_FUNCTIONS \
- static inline QString tr(const char *s, const char *c = Q_NULLPTR, int n = -1) \
+ static inline QString tr(const char *s, const char *c = nullptr, int n = -1) \
{ return staticMetaObject.tr(s, c, n); } \
- QT_DEPRECATED static inline QString trUtf8(const char *s, const char *c = Q_NULLPTR, int n = -1) \
+ QT_DEPRECATED static inline QString trUtf8(const char *s, const char *c = nullptr, int n = -1) \
{ return staticMetaObject.tr(s, c, n); }
#else
// inherit the ones from QObject
@@ -240,11 +240,6 @@ private: \
#define Q_SLOT Q_SLOT
#endif //Q_MOC_RUN
-#ifdef Q_CLANG_QDOC
-#undef Q_GADGET
-#define Q_GADGET
-#endif
-
#ifndef QT_NO_META_MACROS
// macro for onaming members
#ifdef METHOD
@@ -294,7 +289,7 @@ class QMetaClassInfo;
class Q_CORE_EXPORT QGenericArgument
{
public:
- inline QGenericArgument(const char *aName = Q_NULLPTR, const void *aData = Q_NULLPTR)
+ inline QGenericArgument(const char *aName = nullptr, const void *aData = nullptr)
: _data(aData), _name(aName) {}
inline void *data() const { return const_cast<void *>(_data); }
inline const char *name() const { return _name; }
@@ -307,7 +302,7 @@ private:
class Q_CORE_EXPORT QGenericReturnArgument: public QGenericArgument
{
public:
- inline QGenericReturnArgument(const char *aName = Q_NULLPTR, void *aData = Q_NULLPTR)
+ inline QGenericReturnArgument(const char *aName = nullptr, void *aData = nullptr)
: QGenericArgument(aName, aData)
{}
};
@@ -349,7 +344,7 @@ struct Q_CORE_EXPORT QMetaObject
QObject *cast(QObject *obj) const;
const QObject *cast(const QObject *obj) const;
-#ifndef QT_NO_TRANSLATION
+#if !defined(QT_NO_TRANSLATION) || defined(Q_CLANG_QDOC)
QString tr(const char *s, const char *c, int n = -1) const;
#endif // QT_NO_TRANSLATION
@@ -388,7 +383,7 @@ struct Q_CORE_EXPORT QMetaObject
// internal index-based connect
static Connection connect(const QObject *sender, int signal_index,
const QObject *receiver, int method_index,
- int type = 0, int *types = Q_NULLPTR);
+ int type = 0, int *types = nullptr);
// internal index-based disconnect
static bool disconnect(const QObject *sender, int signal_index,
const QObject *receiver, int method_index);
@@ -405,7 +400,7 @@ struct Q_CORE_EXPORT QMetaObject
static bool invokeMethod(QObject *obj, const char *member,
Qt::ConnectionType,
QGenericReturnArgument ret,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -418,7 +413,7 @@ struct Q_CORE_EXPORT QMetaObject
static inline bool invokeMethod(QObject *obj, const char *member,
QGenericReturnArgument ret,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -435,7 +430,7 @@ struct Q_CORE_EXPORT QMetaObject
static inline bool invokeMethod(QObject *obj, const char *member,
Qt::ConnectionType type,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -451,7 +446,7 @@ struct Q_CORE_EXPORT QMetaObject
}
static inline bool invokeMethod(QObject *obj, const char *member,
- QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -466,11 +461,7 @@ struct Q_CORE_EXPORT QMetaObject
val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
-#ifdef Q_QDOC
- template<typename PointerToMemberFunction, typename MemberFunctionReturnType>
- static bool invokeMethod(QObject *receiver, PointerToMemberFunction function, Qt::ConnectionType type = Qt::AutoConnection, MemberFunctionReturnType *ret = nullptr);
- template<typename PointerToMemberFunction, typename MemberFunctionReturnType>
- static bool invokeMethod(QObject *receiver, PointerToMemberFunction function, MemberFunctionReturnType *ret);
+#ifdef Q_CLANG_QDOC
template<typename Functor, typename FunctorReturnType>
static bool invokeMethod(QObject *context, Functor function, Qt::ConnectionType type = Qt::AutoConnection, FunctorReturnType *ret = nullptr);
template<typename Functor, typename FunctorReturnType>
@@ -551,7 +542,7 @@ struct Q_CORE_EXPORT QMetaObject
#endif
- QObject *newInstance(QGenericArgument val0 = QGenericArgument(Q_NULLPTR),
+ QObject *newInstance(QGenericArgument val0 = QGenericArgument(nullptr),
QGenericArgument val1 = QGenericArgument(),
QGenericArgument val2 = QGenericArgument(),
QGenericArgument val3 = QGenericArgument(),
@@ -611,14 +602,12 @@ public:
operator bool() const;
#else
typedef void *Connection::*RestrictedBool;
- operator RestrictedBool() const { return d_ptr && isConnected_helper() ? &Connection::d_ptr : Q_NULLPTR; }
+ operator RestrictedBool() const { return d_ptr && isConnected_helper() ? &Connection::d_ptr : nullptr; }
#endif
-#ifdef Q_COMPILER_RVALUE_REFS
- inline Connection(Connection &&o) : d_ptr(o.d_ptr) { o.d_ptr = Q_NULLPTR; }
- inline Connection &operator=(Connection &&other)
+ Connection(Connection &&o) Q_DECL_NOTHROW : d_ptr(o.d_ptr) { o.d_ptr = nullptr; }
+ Connection &operator=(Connection &&other) Q_DECL_NOTHROW
{ qSwap(d_ptr, other.d_ptr); return *this; }
-#endif
};
inline const QMetaObject *QMetaObject::superClass() const
diff --git a/src/corelib/kernel/qobjectdefs_impl.h b/src/corelib/kernel/qobjectdefs_impl.h
index b9f2e47e32..a6ad00ea22 100644
--- a/src/corelib/kernel/qobjectdefs_impl.h
+++ b/src/corelib/kernel/qobjectdefs_impl.h
@@ -38,8 +38,6 @@
**
****************************************************************************/
-#ifndef Q_QDOC
-
#ifndef QOBJECTDEFS_H
#error Do not include qobjectdefs_impl.h directly
#include <QtCore/qnamespace.h>
@@ -372,10 +370,10 @@ namespace QtPrivate {
inline int ref() Q_DECL_NOTHROW { return m_ref.ref(); }
inline void destroyIfLastRef() Q_DECL_NOTHROW
- { if (!m_ref.deref()) m_impl(Destroy, this, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR); }
+ { if (!m_ref.deref()) m_impl(Destroy, this, nullptr, nullptr, nullptr); }
- inline bool compare(void **a) { bool ret = false; m_impl(Compare, this, Q_NULLPTR, a, &ret); return ret; }
- inline void call(QObject *r, void **a) { m_impl(Call, this, r, a, Q_NULLPTR); }
+ inline bool compare(void **a) { bool ret = false; m_impl(Compare, this, nullptr, a, &ret); return ret; }
+ inline void call(QObject *r, void **a) { m_impl(Call, this, r, a, nullptr); }
protected:
~QSlotObjectBase() {}
private:
@@ -446,4 +444,3 @@ namespace QtPrivate {
QT_END_NAMESPACE
-#endif
diff --git a/src/corelib/kernel/qpointer.cpp b/src/corelib/kernel/qpointer.cpp
index 66495ce005..c3dee7989e 100644
--- a/src/corelib/kernel/qpointer.cpp
+++ b/src/corelib/kernel/qpointer.cpp
@@ -111,7 +111,7 @@
*/
/*!
- \fn QPointer::QPointer()
+ \fn template <class T> QPointer<T>::QPointer()
Constructs a 0 guarded pointer.
@@ -119,14 +119,14 @@
*/
/*!
- \fn QPointer::QPointer(T* p)
+ \fn template <class T> QPointer<T>::QPointer(T* p)
Constructs a guarded pointer that points to the same object that \a p
points to.
*/
/*!
- \fn QPointer::~QPointer()
+ \fn template <class T> QPointer<T>::~QPointer()
Destroys the guarded pointer. Just like a normal pointer,
destroying a guarded pointer does \e not destroy the object being
@@ -134,7 +134,7 @@
*/
/*!
- \fn void QPointer::swap(QPointer &other)
+ \fn template <class T> void QPointer<T>::swap(QPointer &other)
\since 5.6
Swaps the contents of this QPointer with the contents of \a other.
@@ -142,28 +142,28 @@
*/
/*!
- \fn QPointer<T> & QPointer::operator=(T* p)
+ \fn template <class T> QPointer<T> & QPointer<T>::operator=(T* p)
Assignment operator. This guarded pointer will now point to the
same object that \a p points to.
*/
/*!
- \fn T* QPointer::data() const
+ \fn template <class T> T* QPointer<T>::data() const
\since 4.4
Returns the pointer to the object being guarded.
*/
/*!
- \fn bool QPointer::isNull() const
+ \fn template <class T> bool QPointer<T>::isNull() const
Returns \c true if the referenced object has been destroyed or if
there is no referenced object; otherwise returns \c false.
*/
/*!
- \fn void QPointer::clear()
+ \fn template <class T> void QPointer<T>::clear()
\since 5.0
Clears this QPointer object.
@@ -172,21 +172,21 @@
*/
/*!
- \fn T* QPointer::operator->() const
+ \fn template <class T> T* QPointer<T>::operator->() const
Overloaded arrow operator; implements pointer semantics. Just use
this operator as you would with a normal C++ pointer.
*/
/*!
- \fn T& QPointer::operator*() const
+ \fn template <class T> T& QPointer<T>::operator*() const
Dereference operator; implements pointer semantics. Just use this
operator as you would with a normal C++ pointer.
*/
/*!
- \fn QPointer::operator T*() const
+ \fn template <class T> QPointer<T>::operator T*() const
Cast operator; implements pointer semantics. Because of this
function you can pass a QPointer\<T\> to a function where a T*
@@ -194,7 +194,7 @@
*/
/*!
- \fn bool operator==(const T *o, const QPointer<T> &p)
+ \fn template <class T> bool operator==(const T *o, const QPointer<T> &p)
\relates QPointer
Equality operator. Returns \c true if \a o and the guarded
@@ -203,7 +203,7 @@
*/
/*!
- \fn bool operator==(const QPointer<T> &p, const T *o)
+ \fn template <class T> bool operator==(const QPointer<T> &p, const T *o)
\relates QPointer
Equality operator. Returns \c true if \a o and the guarded
@@ -212,7 +212,7 @@
*/
/*!
- \fn bool operator==(T *o, const QPointer<T> &p)
+ \fn template <class T> bool operator==(T *o, const QPointer<T> &p)
\relates QPointer
Equality operator. Returns \c true if \a o and the guarded
@@ -221,7 +221,7 @@
*/
/*!
- \fn bool operator==(const QPointer<T> &p, T *o)
+ \fn template <class T> bool operator==(const QPointer<T> &p, T *o)
\relates QPointer
Equality operator. Returns \c true if \a o and the guarded
@@ -230,7 +230,7 @@
*/
/*!
- \fn bool operator==(const QPointer<T> &p1, const QPointer<T> &p2)
+ \fn template <class T> bool operator==(const QPointer<T> &p1, const QPointer<T> &p2)
\relates QPointer
Equality operator. Returns \c true if the guarded pointers \a p1 and \a p2
@@ -241,7 +241,7 @@
/*!
- \fn bool operator!=(const T *o, const QPointer<T> &p)
+ \fn template <class T> bool operator!=(const T *o, const QPointer<T> &p)
\relates QPointer
Inequality operator. Returns \c true if \a o and the guarded
@@ -249,7 +249,7 @@
returns \c false.
*/
/*!
- \fn bool operator!=(const QPointer<T> &p, const T *o)
+ \fn template <class T> bool operator!=(const QPointer<T> &p, const T *o)
\relates QPointer
Inequality operator. Returns \c true if \a o and the guarded
@@ -257,7 +257,7 @@
returns \c false.
*/
/*!
- \fn bool operator!=(T *o, const QPointer<T> &p)
+ \fn template <class T> bool operator!=(T *o, const QPointer<T> &p)
\relates QPointer
Inequality operator. Returns \c true if \a o and the guarded
@@ -265,7 +265,7 @@
returns \c false.
*/
/*!
- \fn bool operator!=(const QPointer<T> &p, T *o)
+ \fn template <class T> bool operator!=(const QPointer<T> &p, T *o)
\relates QPointer
Inequality operator. Returns \c true if \a o and the guarded
@@ -273,7 +273,7 @@
returns \c false.
*/
/*!
- \fn bool operator!=(const QPointer<T> &p1, const QPointer<T> &p2)
+ \fn template <class T> bool operator!=(const QPointer<T> &p1, const QPointer<T> &p2)
\relates QPointer
Inequality operator. Returns \c true if the guarded pointers \a p1 and
@@ -281,7 +281,7 @@
returns \c false.
*/
/*!
- \fn QPointer<T> qPointerFromVariant(const QVariant &variant)
+ \fn template <typename T> QPointer<T> qPointerFromVariant(const QVariant &variant)
\internal
diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp
index c8ba13c90c..c952655cb8 100644
--- a/src/corelib/kernel/qsharedmemory.cpp
+++ b/src/corelib/kernel/qsharedmemory.cpp
@@ -67,9 +67,11 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key,
QString result = prefix;
- QString part1 = key;
- part1.replace(QRegExp(QLatin1String("[^A-Za-z]")), QString());
- result.append(part1);
+ for (QChar ch : key) {
+ if ((ch >= QLatin1Char('a') && ch <= QLatin1Char('z')) ||
+ (ch >= QLatin1Char('A') && ch <= QLatin1Char('Z')))
+ result += ch;
+ }
QByteArray hex = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1).toHex();
result.append(QLatin1String(hex));
diff --git a/src/corelib/kernel/qsharedmemory.h b/src/corelib/kernel/qsharedmemory.h
index 0d4edef23d..67cf52ac17 100644
--- a/src/corelib/kernel/qsharedmemory.h
+++ b/src/corelib/kernel/qsharedmemory.h
@@ -74,8 +74,8 @@ public:
UnknownError
};
- QSharedMemory(QObject *parent = Q_NULLPTR);
- QSharedMemory(const QString &key, QObject *parent = Q_NULLPTR);
+ QSharedMemory(QObject *parent = nullptr);
+ QSharedMemory(const QString &key, QObject *parent = nullptr);
~QSharedMemory();
void setKey(const QString &key);
diff --git a/src/corelib/kernel/qsocketnotifier.cpp b/src/corelib/kernel/qsocketnotifier.cpp
index 2268cb83bb..6ff8268978 100644
--- a/src/corelib/kernel/qsocketnotifier.cpp
+++ b/src/corelib/kernel/qsocketnotifier.cpp
@@ -149,7 +149,7 @@ QSocketNotifier::QSocketNotifier(qintptr socket, Type type, QObject *parent)
if (socket < 0)
qWarning("QSocketNotifier: Invalid socket specified");
- else if (!d->threadData->eventDispatcher.load())
+ else if (!d->threadData->hasEventDispatcher())
qWarning("QSocketNotifier: Can only be used with threads started with QThread");
else
d->threadData->eventDispatcher.load()->registerSocketNotifier(this);
@@ -234,7 +234,7 @@ void QSocketNotifier::setEnabled(bool enable)
return;
d->snenabled = enable;
- if (!d->threadData->eventDispatcher.load()) // perhaps application/thread is shutting down
+ if (!d->threadData->hasEventDispatcher()) // perhaps application/thread is shutting down
return;
if (Q_UNLIKELY(thread() != QThread::currentThread())) {
qWarning("QSocketNotifier: Socket notifiers cannot be enabled or disabled from another thread");
diff --git a/src/corelib/kernel/qsocketnotifier.h b/src/corelib/kernel/qsocketnotifier.h
index 92cdf5be95..38e5f27247 100644
--- a/src/corelib/kernel/qsocketnotifier.h
+++ b/src/corelib/kernel/qsocketnotifier.h
@@ -53,7 +53,7 @@ class Q_CORE_EXPORT QSocketNotifier : public QObject
public:
enum Type { Read, Write, Exception };
- QSocketNotifier(qintptr socket, Type, QObject *parent = Q_NULLPTR);
+ QSocketNotifier(qintptr socket, Type, QObject *parent = nullptr);
~QSocketNotifier();
qintptr socket() const;
@@ -68,7 +68,7 @@ Q_SIGNALS:
void activated(int socket, QPrivateSignal);
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
private:
Q_DISABLE_COPY(QSocketNotifier)
diff --git a/src/corelib/kernel/qsystemerror_p.h b/src/corelib/kernel/qsystemerror_p.h
index 1d8c253f53..abc2f1efc1 100644
--- a/src/corelib/kernel/qsystemerror_p.h
+++ b/src/corelib/kernel/qsystemerror_p.h
@@ -56,7 +56,7 @@
QT_BEGIN_NAMESPACE
-class Q_CORE_EXPORT QSystemError
+class QSystemError
{
public:
enum ErrorScope
@@ -66,51 +66,27 @@ public:
NativeError
};
- inline QSystemError(int error, ErrorScope scope);
- inline QSystemError();
+ Q_DECL_CONSTEXPR explicit QSystemError(int error, ErrorScope scope)
+ : errorCode(error), errorScope(scope)
+ {
+ }
+ Q_DECL_CONSTEXPR QSystemError() = default;
- inline QString toString() const;
- inline ErrorScope scope() const;
- inline int error() const;
+ QString toString() const { return string(errorScope, errorCode); }
+ Q_DECL_CONSTEXPR ErrorScope scope() const { return errorScope; }
+ Q_DECL_CONSTEXPR int error() const { return errorCode; }
- static QString string(ErrorScope errorScope, int errorCode);
- static QString stdString(int errorCode = -1);
+ static Q_CORE_EXPORT QString string(ErrorScope errorScope, int errorCode);
+ static Q_CORE_EXPORT QString stdString(int errorCode = -1);
#ifdef Q_OS_WIN
- static QString windowsString(int errorCode = -1);
+ static Q_CORE_EXPORT QString windowsString(int errorCode = -1);
#endif
//data members
- int errorCode;
- ErrorScope errorScope;
+ int errorCode = 0;
+ ErrorScope errorScope = NoError;
};
-QSystemError::QSystemError(int error, QSystemError::ErrorScope scope)
-: errorCode(error), errorScope(scope)
-{
-
-}
-
-QSystemError::QSystemError()
-: errorCode(0), errorScope(NoError)
-{
-
-}
-
-QString QSystemError::toString() const
-{
- return string(errorScope, errorCode);
-}
-
-QSystemError::ErrorScope QSystemError::scope() const
-{
- return errorScope;
-}
-
-int QSystemError::error() const
-{
- return errorCode;
-}
-
QT_END_NAMESPACE
#endif // QSYSTEMERROR_P_H
diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp
index 55f75ab17e..c3504943c4 100644
--- a/src/corelib/kernel/qtimer.cpp
+++ b/src/corelib/kernel/qtimer.cpp
@@ -108,7 +108,7 @@ QT_BEGIN_NAMESPACE
in many real-world situations.
The accuracy also depends on the \l{Qt::TimerType}{timer type}. For
- Qt::PreciseTimer, QTimer will try to keep the accurance at 1 millisecond.
+ Qt::PreciseTimer, QTimer will try to keep the accuracy at 1 millisecond.
Precise timers will also never time out earlier than expected.
For Qt::CoarseTimer and Qt::VeryCoarseTimer types, QTimer may wake up
@@ -271,7 +271,7 @@ public:
Q_SIGNALS:
void timeout();
protected:
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
};
QSingleShotTimer::QSingleShotTimer(int msec, Qt::TimerType timerType, const QObject *r, const char *member)
@@ -410,7 +410,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
}
}
-/*!\fn void QTimer::singleShot(int msec, const QObject *receiver, PointerToMemberFunction method)
+/*! \fn template<typename PointerToMemberFunction> void QTimer::singleShot(int msec, const QObject *receiver, PointerToMemberFunction method)
\since 5.4
@@ -432,7 +432,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
\sa start()
*/
-/*!\fn void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, PointerToMemberFunction method)
+/*! \fn template<typename PointerToMemberFunction> void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, PointerToMemberFunction method)
\since 5.4
@@ -455,7 +455,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
\sa start()
*/
-/*!\fn void QTimer::singleShot(int msec, Functor functor)
+/*! \fn template<typename Functor> void QTimer::singleShot(int msec, Functor functor)
\since 5.4
@@ -472,7 +472,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
\sa start()
*/
-/*!\fn void QTimer::singleShot(int msec, Qt::TimerType timerType, Functor functor)
+/*! \fn template<typename Functor> void QTimer::singleShot(int msec, Qt::TimerType timerType, Functor functor)
\since 5.4
@@ -490,7 +490,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
\sa start()
*/
-/*!\fn void QTimer::singleShot(int msec, const QObject *context, Functor functor)
+/*! \fn template<typename Functor> void QTimer::singleShot(int msec, const QObject *context, Functor functor)
\since 5.4
@@ -511,7 +511,7 @@ void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiv
\sa start()
*/
-/*!\fn void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *context, Functor functor)
+/*! \fn template<typename Functor> void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *context, Functor functor)
\since 5.4
diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h
index 44ae04f38d..e6db586aa0 100644
--- a/src/corelib/kernel/qtimer.h
+++ b/src/corelib/kernel/qtimer.h
@@ -63,7 +63,7 @@ class Q_CORE_EXPORT QTimer : public QObject
Q_PROPERTY(Qt::TimerType timerType READ timerType WRITE setTimerType)
Q_PROPERTY(bool active READ isActive)
public:
- explicit QTimer(QObject *parent = Q_NULLPTR);
+ explicit QTimer(QObject *parent = nullptr);
~QTimer();
inline bool isActive() const { return id >= 0; }
@@ -83,7 +83,7 @@ public:
static void singleShot(int msec, const QObject *receiver, const char *member);
static void singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member);
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template<typename PointerToMemberFunction>
static void singleShot(int msec, const QObject *receiver, PointerToMemberFunction method);
template<typename PointerToMemberFunction>
@@ -197,7 +197,7 @@ public:
#endif
protected:
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
private:
Q_DISABLE_COPY(QTimer)
diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp
index 2232e24a25..c868f6d266 100644
--- a/src/corelib/kernel/qtranslator.cpp
+++ b/src/corelib/kernel/qtranslator.cpp
@@ -1064,7 +1064,7 @@ searchDependencies:
return QString();
}
-/*!
+/*
Empties this translator of all contents.
This function works with stripped translator files.
diff --git a/src/corelib/kernel/qtranslator.h b/src/corelib/kernel/qtranslator.h
index 97be16bc90..e7c39191e7 100644
--- a/src/corelib/kernel/qtranslator.h
+++ b/src/corelib/kernel/qtranslator.h
@@ -55,11 +55,11 @@ class Q_CORE_EXPORT QTranslator : public QObject
{
Q_OBJECT
public:
- explicit QTranslator(QObject *parent = Q_NULLPTR);
+ explicit QTranslator(QObject *parent = nullptr);
~QTranslator();
virtual QString translate(const char *context, const char *sourceText,
- const char *disambiguation = Q_NULLPTR, int n = -1) const;
+ const char *disambiguation = nullptr, int n = -1) const;
virtual bool isEmpty() const;
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index 29429b5e55..96299b9eaf 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -256,6 +256,10 @@ static qreal qConvertToRealNumber(const QVariant::Private *d, bool *ok)
case QMetaType::UShort:
case QMetaType::ULong:
return qreal(qMetaTypeUNumber(d));
+#ifndef QT_BOOTSTRAPPED
+ case QMetaType::QJsonValue:
+ return v_cast<QJsonValue>(d)->toDouble();
+#endif
default:
// includes enum conversion as well as invalid types
return qreal(qConvertToNumber(d, ok));
@@ -440,10 +444,10 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
*str = v_cast<QDate>(d)->toString(Qt::ISODate);
break;
case QVariant::Time:
- *str = v_cast<QTime>(d)->toString(Qt::ISODate);
+ *str = v_cast<QTime>(d)->toString(Qt::ISODateWithMs);
break;
case QVariant::DateTime:
- *str = v_cast<QDateTime>(d)->toString(Qt::ISODate);
+ *str = v_cast<QDateTime>(d)->toString(Qt::ISODateWithMs);
break;
#endif
case QVariant::Bool:
@@ -3776,7 +3780,7 @@ void* QVariant::data()
\warning Null variants is not a single state and two null variants may easily
return \c false on the == operator if they do not contain similar null values.
- \sa QVariant(Type), convert(int)
+ \sa convert(int)
*/
bool QVariant::isNull() const
{
@@ -3820,7 +3824,7 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
#endif
-/*! \fn void QVariant::setValue(const T &value)
+/*! \fn template<typename T> void QVariant::setValue(const T &value)
Stores a copy of \a value. If \c{T} is a type that QVariant
doesn't support, QMetaType is used to store the value. A compile
@@ -3833,7 +3837,7 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
\sa value(), fromValue(), canConvert()
*/
-/*! \fn T QVariant::value() const
+/*! \fn template<typename T> T QVariant::value() const
Returns the stored value converted to the template type \c{T}.
Call canConvert() to find out whether a type can be converted.
@@ -3877,7 +3881,7 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
\sa convert()
*/
-/*! \fn static QVariant QVariant::fromValue(const T &value)
+/*! \fn template<typename T> static QVariant QVariant::fromValue(const T &value)
Returns a QVariant containing a copy of \a value. Behaves
exactly like setValue() otherwise.
@@ -3892,8 +3896,21 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
\sa setValue(), value()
*/
+/*! \fn static inline QVariant fromStdVariant(const std::variant<T, Types...> &value)
+ \since 5.11
+
+ Returns a QVariant with the type and value of the active variant of \a value. If
+ the active type is std::monostate a default QVariant is returned.
+
+ \note With this method you do not need to register the variant as a Qt metatype,
+ since the std::variant is resolved before being stored. The component types
+ should be registered however.
+
+ \sa fromValue()
+*/
+
/*!
- \fn QVariant qVariantFromValue(const T &value)
+ \fn template<typename T> QVariant qVariantFromValue(const T &value)
\relates QVariant
\obsolete
@@ -3914,7 +3931,7 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
\sa QVariant::fromValue()
*/
-/*! \fn void qVariantSetValue(QVariant &variant, const T &value)
+/*! \fn template<typename T> void qVariantSetValue(QVariant &variant, const T &value)
\relates QVariant
\obsolete
@@ -3931,7 +3948,7 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
*/
/*!
- \fn T qvariant_cast(const QVariant &value)
+ \fn template<typename T> T qvariant_cast(const QVariant &value)
\relates QVariant
Returns the given \a value converted to the template type \c{T}.
@@ -3941,7 +3958,7 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
\sa QVariant::value()
*/
-/*! \fn T qVariantValue(const QVariant &value)
+/*! \fn template<typename T> T qVariantValue(const QVariant &value)
\relates QVariant
\obsolete
@@ -3999,6 +4016,41 @@ QDebug operator<<(QDebug dbg, const QVariant::Type p)
\typedef QVariant::DataPtr
\internal
*/
+/*! \typedef QVariant::f_construct
+ \internal
+*/
+
+/*! \typedef QVariant::f_clear
+ \internal
+*/
+
+/*! \typedef QVariant::f_null
+ \internal
+*/
+
+/*! \typedef QVariant::f_load
+ \internal
+*/
+
+/*! \typedef QVariant::f_save
+ \internal
+*/
+
+/*! \typedef QVariant::f_compare
+ \internal
+*/
+
+/*! \typedef QVariant::f_convert
+ \internal
+*/
+
+/*! \typedef QVariant::f_canConvert
+ \internal
+*/
+
+/*! \typedef QVariant::f_debugStream
+ \internal
+*/
/*!
\fn DataPtr &QVariant::data_ptr()
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index a2c5711993..fe1ef1bdfc 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -53,6 +53,10 @@
#include <QtCore/qbytearraylist.h>
#endif
+#if QT_HAS_INCLUDE(<variant>) && __cplusplus >= 201703L
+#include <variant>
+#endif
+
QT_BEGIN_NAMESPACE
@@ -284,14 +288,14 @@ class Q_CORE_EXPORT QVariant
void detach();
inline bool isDetached() const;
- int toInt(bool *ok = Q_NULLPTR) const;
- uint toUInt(bool *ok = Q_NULLPTR) const;
- qlonglong toLongLong(bool *ok = Q_NULLPTR) const;
- qulonglong toULongLong(bool *ok = Q_NULLPTR) const;
+ int toInt(bool *ok = nullptr) const;
+ uint toUInt(bool *ok = nullptr) const;
+ qlonglong toLongLong(bool *ok = nullptr) const;
+ qulonglong toULongLong(bool *ok = nullptr) const;
bool toBool() const;
- double toDouble(bool *ok = Q_NULLPTR) const;
- float toFloat(bool *ok = Q_NULLPTR) const;
- qreal toReal(bool *ok = Q_NULLPTR) const;
+ double toDouble(bool *ok = nullptr) const;
+ float toFloat(bool *ok = nullptr) const;
+ qreal toReal(bool *ok = nullptr) const;
QByteArray toByteArray() const;
QBitArray toBitArray() const;
QString toString() const;
@@ -355,12 +359,21 @@ class Q_CORE_EXPORT QVariant
static inline QVariant fromValue(const T &value)
{ return qVariantFromValue(value); }
+#if QT_HAS_INCLUDE(<variant>) && __cplusplus >= 201703L
+ template<typename... Types>
+ static inline QVariant fromStdVariant(const std::variant<Types...> &value)
+ {
+ if (value.valueless_by_exception())
+ return QVariant();
+ return std::visit([](const auto &arg) { return fromValue(arg); }, value);
+ }
+#endif
+
template<typename T>
bool canConvert() const
{ return canConvert(qMetaTypeId<T>()); }
public:
-#ifndef Q_QDOC
struct PrivateShared
{
inline PrivateShared(void *v) : ptr(v), ref(1) { }
@@ -370,7 +383,7 @@ class Q_CORE_EXPORT QVariant
struct Private
{
inline Private() Q_DECL_NOTHROW : type(Invalid), is_shared(false), is_null(true)
- { data.ptr = Q_NULLPTR; }
+ { data.ptr = nullptr; }
// Internal constructor for initialized variants.
explicit inline Private(uint variantType) Q_DECL_NOTHROW
@@ -431,7 +444,6 @@ class Q_CORE_EXPORT QVariant
f_canConvert canConvert;
f_debugStream debugStream;
};
-#endif
inline bool operator==(const QVariant &v) const
{ return cmp(v); }
@@ -505,6 +517,11 @@ inline QVariant qVariantFromValue(const T &t)
template <>
inline QVariant qVariantFromValue(const QVariant &t) { return t; }
+#if QT_HAS_INCLUDE(<variant>) && __cplusplus >= 201703L
+template <>
+inline QVariant qVariantFromValue(const std::monostate &) { return QVariant(); }
+#endif
+
template <typename T>
inline void qVariantSetValue(QVariant &v, const T &t)
{
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h
index 75c269d710..b22b7c231e 100644
--- a/src/corelib/kernel/qvariant_p.h
+++ b/src/corelib/kernel/qvariant_p.h
@@ -278,11 +278,11 @@ class QVariantIsNull
Q_STATIC_ASSERT(!HasIsNullMethod<SelfTest2>::Value);
struct SelfTest3 : public SelfTest1 {};
Q_STATIC_ASSERT(HasIsNullMethod<SelfTest3>::Value);
- struct SelfTestFinal1 Q_DECL_FINAL { bool isNull() const; };
+ struct SelfTestFinal1 final { bool isNull() const; };
Q_STATIC_ASSERT(HasIsNullMethod<SelfTestFinal1>::Value);
- struct SelfTestFinal2 Q_DECL_FINAL {};
+ struct SelfTestFinal2 final {};
Q_STATIC_ASSERT(!HasIsNullMethod<SelfTestFinal2>::Value);
- struct SelfTestFinal3 Q_DECL_FINAL : public SelfTest1 {};
+ struct SelfTestFinal3 final : public SelfTest1 {};
Q_STATIC_ASSERT(HasIsNullMethod<SelfTestFinal3>::Value);
template<typename T, bool HasIsNull = HasIsNullMethod<T>::Value>
diff --git a/src/corelib/kernel/qwineventnotifier.h b/src/corelib/kernel/qwineventnotifier.h
index f29f325d13..624e77e638 100644
--- a/src/corelib/kernel/qwineventnotifier.h
+++ b/src/corelib/kernel/qwineventnotifier.h
@@ -54,8 +54,8 @@ class Q_CORE_EXPORT QWinEventNotifier : public QObject
typedef Qt::HANDLE HANDLE;
public:
- explicit QWinEventNotifier(QObject *parent = Q_NULLPTR);
- explicit QWinEventNotifier(HANDLE hEvent, QObject *parent = Q_NULLPTR);
+ explicit QWinEventNotifier(QObject *parent = nullptr);
+ explicit QWinEventNotifier(HANDLE hEvent, QObject *parent = nullptr);
~QWinEventNotifier();
void setHandle(HANDLE hEvent);
diff --git a/src/corelib/mimetypes/mimetypes.qrc b/src/corelib/mimetypes/mimetypes.qrc
index f0cf47cd49..19bc1d3e2a 100644
--- a/src/corelib/mimetypes/mimetypes.qrc
+++ b/src/corelib/mimetypes/mimetypes.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/qt-project.org/qmime">
+ <qresource prefix="/qt-project.org/qmime/packages">
<file alias="freedesktop.org.xml">mime/packages/freedesktop.org.xml</file>
</qresource>
</RCC>
diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp
index 687f0b3e03..edc414fa0a 100644
--- a/src/corelib/mimetypes/qmimedatabase.cpp
+++ b/src/corelib/mimetypes/qmimedatabase.cpp
@@ -51,6 +51,7 @@
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
#include <QtCore/QSet>
+#include <QtCore/QStandardPaths>
#include <QtCore/QBuffer>
#include <QtCore/QUrl>
#include <QtCore/QDebug>
@@ -69,34 +70,107 @@ QMimeDatabasePrivate *QMimeDatabasePrivate::instance()
}
QMimeDatabasePrivate::QMimeDatabasePrivate()
- : m_provider(0), m_defaultMimeType(QLatin1String("application/octet-stream"))
+ : m_defaultMimeType(QLatin1String("application/octet-stream"))
{
}
QMimeDatabasePrivate::~QMimeDatabasePrivate()
{
- delete m_provider;
- m_provider = 0;
+ qDeleteAll(m_providers);
}
-QMimeProviderBase *QMimeDatabasePrivate::provider()
+#ifdef QT_BUILD_INTERNAL
+Q_CORE_EXPORT
+#else
+static const
+#endif
+int qmime_secondsBetweenChecks = 5;
+
+bool QMimeDatabasePrivate::shouldCheck()
+{
+ if (m_lastCheck.isValid() && m_lastCheck.elapsed() < qmime_secondsBetweenChecks * 1000)
+ return false;
+ m_lastCheck.start();
+ return true;
+}
+
+#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY)
+#define QT_USE_MMAP
+#endif
+
+void QMimeDatabasePrivate::loadProviders()
{
- if (!m_provider) {
- QMimeProviderBase *binaryProvider = new QMimeBinaryProvider(this);
- if (binaryProvider->isValid()) {
- m_provider = binaryProvider;
+ // We use QStandardPaths every time to check if new files appeared
+ QStringList mimeDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime"), QStandardPaths::LocateDirectory);
+ const auto fdoIterator = std::find_if(mimeDirs.constBegin(), mimeDirs.constEnd(), [](const QString &mimeDir) -> bool {
+ return QFileInfo::exists(mimeDir + QStringLiteral("/packages/freedesktop.org.xml")); }
+ );
+ if (fdoIterator == mimeDirs.constEnd())
+ mimeDirs.prepend(QLatin1String(":/qt-project.org/qmime"));
+ //qDebug() << "mime dirs:" << mimeDirs;
+
+ QVector<QMimeProviderBase *> currentProviders = m_providers;
+ m_providers.clear();
+ m_providers.reserve(mimeDirs.size());
+ for (const QString &mimeDir : qAsConst(mimeDirs)) {
+ const QString cacheFile = mimeDir + QStringLiteral("/mime.cache");
+ QFileInfo fileInfo(cacheFile);
+ // Check if we already have a provider for this dir
+ const auto it = std::find_if(currentProviders.begin(), currentProviders.end(), [mimeDir](QMimeProviderBase *prov) { return prov->directory() == mimeDir; });
+ if (it == currentProviders.end()) {
+ QMimeProviderBase *provider = nullptr;
+#if defined(QT_USE_MMAP)
+ if (qEnvironmentVariableIsEmpty("QT_NO_MIME_CACHE") && fileInfo.exists()) {
+ provider = new QMimeBinaryProvider(this, mimeDir);
+ //qDebug() << "Created binary provider for" << mimeDir;
+ if (!provider->isValid()) {
+ delete provider;
+ provider = nullptr;
+ }
+ }
+#endif
+ if (!provider) {
+ provider = new QMimeXMLProvider(this, mimeDir);
+ //qDebug() << "Created XML provider for" << mimeDir;
+ }
+ m_providers.append(provider);
} else {
- delete binaryProvider;
- m_provider = new QMimeXMLProvider(this);
+ QMimeProviderBase *provider = *it;
+ currentProviders.erase(it);
+ provider->ensureLoaded();
+ if (!provider->isValid()) {
+ delete provider;
+ provider = new QMimeXMLProvider(this, mimeDir);
+ //qDebug() << "Created XML provider to replace binary provider for" << mimeDir;
+ }
+ m_providers.append(provider);
}
}
- return m_provider;
+ qDeleteAll(currentProviders);
}
-void QMimeDatabasePrivate::setProvider(QMimeProviderBase *theProvider)
+QVector<QMimeProviderBase *> QMimeDatabasePrivate::providers()
{
- delete m_provider;
- m_provider = theProvider;
+ Q_ASSERT(!mutex.tryLock()); // caller should have locked mutex
+ if (m_providers.isEmpty()) {
+ loadProviders();
+ m_lastCheck.start();
+ } else {
+ if (shouldCheck())
+ loadProviders();
+ }
+ return m_providers;
+}
+
+QString QMimeDatabasePrivate::resolveAlias(const QString &nameOrAlias)
+{
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders) {
+ const QString ret = provider->resolveAlias(nameOrAlias);
+ if (!ret.isEmpty())
+ return ret;
+ }
+ return nameOrAlias;
}
/*!
@@ -105,7 +179,14 @@ void QMimeDatabasePrivate::setProvider(QMimeProviderBase *theProvider)
*/
QMimeType QMimeDatabasePrivate::mimeTypeForName(const QString &nameOrAlias)
{
- return provider()->mimeTypeForName(provider()->resolveAlias(nameOrAlias));
+ const auto allProviders = providers();
+ const QString mimeName = resolveAlias(nameOrAlias);
+ for (QMimeProviderBase *provider : allProviders) {
+ const QMimeType mime = provider->mimeTypeForName(mimeName);
+ if (mime.isValid())
+ return mime;
+ }
+ return {};
}
QStringList QMimeDatabasePrivate::mimeTypeForFileName(const QString &fileName)
@@ -113,11 +194,113 @@ QStringList QMimeDatabasePrivate::mimeTypeForFileName(const QString &fileName)
if (fileName.endsWith(QLatin1Char('/')))
return QStringList() << QLatin1String("inode/directory");
- QStringList matchingMimeTypes = provider()->findByFileName(QFileInfo(fileName).fileName()).m_matchingMimeTypes;
+ const QString shortName = QFileInfo(fileName).fileName();
+ const QMimeGlobMatchResult result = findByFileName(shortName);
+ QStringList matchingMimeTypes = result.m_matchingMimeTypes;
matchingMimeTypes.sort(); // make it deterministic
return matchingMimeTypes;
}
+QMimeGlobMatchResult QMimeDatabasePrivate::findByFileName(const QString &fileName)
+{
+ QMimeGlobMatchResult result;
+ // TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders)
+ provider->addFileNameMatches(fileName, result);
+ return result;
+}
+
+void QMimeDatabasePrivate::loadMimeTypePrivate(QMimeTypePrivate &mimePrivate)
+{
+ QMutexLocker locker(&mutex);
+ if (!mimePrivate.loaded) { // XML provider sets loaded=true, binary provider does this on demand
+ Q_ASSERT(mimePrivate.fromCache);
+ QMimeBinaryProvider::loadMimeTypePrivate(mimePrivate);
+ }
+}
+
+void QMimeDatabasePrivate::loadGenericIcon(QMimeTypePrivate &mimePrivate)
+{
+ QMutexLocker locker(&mutex);
+ if (mimePrivate.fromCache) {
+ mimePrivate.genericIconName.clear();
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders) {
+ provider->loadGenericIcon(mimePrivate);
+ if (!mimePrivate.genericIconName.isEmpty())
+ break;
+ }
+ }
+}
+
+void QMimeDatabasePrivate::loadIcon(QMimeTypePrivate &mimePrivate)
+{
+ QMutexLocker locker(&mutex);
+ if (mimePrivate.fromCache) {
+ mimePrivate.iconName.clear();
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders) {
+ provider->loadIcon(mimePrivate);
+ if (!mimePrivate.iconName.isEmpty())
+ break;
+ }
+ }
+}
+
+static QString fallbackParent(const QString &mimeTypeName)
+{
+ const QStringRef myGroup = mimeTypeName.leftRef(mimeTypeName.indexOf(QLatin1Char('/')));
+ // All text/* types are subclasses of text/plain.
+ if (myGroup == QLatin1String("text") && mimeTypeName != QLatin1String("text/plain"))
+ return QLatin1String("text/plain");
+ // All real-file mimetypes implicitly derive from application/octet-stream
+ if (myGroup != QLatin1String("inode") &&
+ // ignore non-file extensions
+ myGroup != QLatin1String("all") && myGroup != QLatin1String("fonts") && myGroup != QLatin1String("print") && myGroup != QLatin1String("uri")
+ && mimeTypeName != QLatin1String("application/octet-stream")) {
+ return QLatin1String("application/octet-stream");
+ }
+ return QString();
+}
+
+QStringList QMimeDatabasePrivate::mimeParents(const QString &mimeName)
+{
+ QMutexLocker locker(&mutex);
+ return parents(mimeName);
+}
+
+QStringList QMimeDatabasePrivate::parents(const QString &mimeName)
+{
+ Q_ASSERT(!mutex.tryLock());
+ QStringList result;
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders)
+ provider->addParents(mimeName, result);
+ if (result.isEmpty()) {
+ const QString parent = fallbackParent(mimeName);
+ if (!parent.isEmpty())
+ result.append(parent);
+ }
+ return result;
+}
+
+QStringList QMimeDatabasePrivate::listAliases(const QString &mimeName)
+{
+ QMutexLocker locker(&mutex);
+ QStringList result;
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders)
+ provider->addAliases(mimeName, result);
+ return result;
+}
+
+bool QMimeDatabasePrivate::mimeInherits(const QString &mime, const QString &parent)
+{
+ QMutexLocker locker(&mutex);
+ return inherits(mime, parent);
+}
+
static inline bool isTextFile(const QByteArray &data)
{
// UTF16 byte order marks
@@ -145,7 +328,10 @@ QMimeType QMimeDatabasePrivate::findByData(const QByteArray &data, int *accuracy
}
*accuracyPtr = 0;
- QMimeType candidate = provider()->findByMagic(data, accuracyPtr);
+ QMimeType candidate;
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders)
+ provider->findByMagic(data, accuracyPtr, candidate);
if (candidate.isValid())
return candidate;
@@ -172,7 +358,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa
if (fileName.endsWith(QLatin1Char('/')))
candidatesByName.addMatch(QLatin1String("inode/directory"), 100, QString());
else
- candidatesByName = provider()->findByFileName(QFileInfo(fileName).fileName());
+ candidatesByName = findByFileName(QFileInfo(fileName).fileName());
if (candidatesByName.m_allMatchingMimeTypes.count() == 1) {
*accuracyPtr = 100;
const QMimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0));
@@ -222,21 +408,25 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa
QList<QMimeType> QMimeDatabasePrivate::allMimeTypes()
{
- return provider()->allMimeTypes();
+ QList<QMimeType> result;
+ const auto allProviders = providers();
+ for (QMimeProviderBase *provider : allProviders)
+ provider->addAllMimeTypes(result);
+ return result;
}
bool QMimeDatabasePrivate::inherits(const QString &mime, const QString &parent)
{
- const QString resolvedParent = provider()->resolveAlias(parent);
- //Q_ASSERT(provider()->resolveAlias(mime) == mime);
+ const QString resolvedParent = resolveAlias(parent);
std::stack<QString, QStringList> toCheck;
toCheck.push(mime);
while (!toCheck.empty()) {
if (toCheck.top() == resolvedParent)
return true;
- const auto parents = provider()->parents(toCheck.top());
+ const QString mimeName = toCheck.top();
toCheck.pop();
- for (const QString &par : parents)
+ const auto parentList = parents(mimeName);
+ for (const QString &par : parentList)
toCheck.push(par);
}
return false;
@@ -460,7 +650,7 @@ QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) co
QString QMimeDatabase::suffixForFileName(const QString &fileName) const
{
QMutexLocker locker(&d->mutex);
- return d->provider()->findByFileName(QFileInfo(fileName).fileName()).m_foundSuffix;
+ return d->findByFileName(QFileInfo(fileName).fileName()).m_foundSuffix;
}
/*!
@@ -550,6 +740,7 @@ QMimeType QMimeDatabase::mimeTypeForUrl(const QUrl &url) const
*/
QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const
{
+ QMutexLocker locker(&d->mutex);
int accuracy = 0;
const bool openedByUs = !device->isOpen() && device->open(QIODevice::ReadOnly);
const QMimeType result = d->mimeTypeForFileNameAndData(fileName, device, &accuracy);
@@ -576,6 +767,7 @@ QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIO
*/
QMimeType QMimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const
{
+ QMutexLocker locker(&d->mutex);
QBuffer buffer(const_cast<QByteArray *>(&data));
buffer.open(QIODevice::ReadOnly);
int accuracy = 0;
diff --git a/src/corelib/mimetypes/qmimedatabase_p.h b/src/corelib/mimetypes/qmimedatabase_p.h
index 3f63f5f103..1c38f46115 100644
--- a/src/corelib/mimetypes/qmimedatabase_p.h
+++ b/src/corelib/mimetypes/qmimedatabase_p.h
@@ -59,7 +59,9 @@
#include "qmimetype_p.h"
#include "qmimeglobpattern_p.h"
+#include <QtCore/qelapsedtimer.h>
#include <QtCore/qmutex.h>
+#include <QtCore/qvector.h>
QT_BEGIN_NAMESPACE
@@ -77,22 +79,37 @@ public:
static QMimeDatabasePrivate *instance();
- QMimeProviderBase *provider();
- void setProvider(QMimeProviderBase *theProvider);
-
inline QString defaultMimeType() const { return m_defaultMimeType; }
bool inherits(const QString &mime, const QString &parent);
QList<QMimeType> allMimeTypes();
-
+ QString resolveAlias(const QString &nameOrAlias);
+ QStringList parents(const QString &mimeName);
QMimeType mimeTypeForName(const QString &nameOrAlias);
QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device, int *priorityPtr);
QMimeType findByData(const QByteArray &data, int *priorityPtr);
QStringList mimeTypeForFileName(const QString &fileName);
+ QMimeGlobMatchResult findByFileName(const QString &fileName);
+
+ // API for QMimeType. Takes care of locking the mutex.
+ void loadMimeTypePrivate(QMimeTypePrivate &mimePrivate);
+ void loadGenericIcon(QMimeTypePrivate &mimePrivate);
+ void loadIcon(QMimeTypePrivate &mimePrivate);
+ QStringList mimeParents(const QString &mimeName);
+ QStringList listAliases(const QString &mimeName);
+ bool mimeInherits(const QString &mime, const QString &parent);
- mutable QMimeProviderBase *m_provider;
+private:
+ QVector<QMimeProviderBase *> providers();
+ bool shouldCheck();
+ void loadProviders();
+
+ mutable QVector<QMimeProviderBase *> m_providers;
+ QElapsedTimer m_lastCheck;
+
+public:
const QString m_defaultMimeType;
QMutex mutex;
};
diff --git a/src/corelib/mimetypes/qmimeglobpattern.cpp b/src/corelib/mimetypes/qmimeglobpattern.cpp
index a4d2b046fa..e7b2b879a1 100644
--- a/src/corelib/mimetypes/qmimeglobpattern.cpp
+++ b/src/corelib/mimetypes/qmimeglobpattern.cpp
@@ -206,10 +206,9 @@ void QMimeGlobPatternList::match(QMimeGlobMatchResult &result,
}
}
-QMimeGlobMatchResult QMimeAllGlobPatterns::matchingGlobs(const QString &fileName) const
+void QMimeAllGlobPatterns::matchingGlobs(const QString &fileName, QMimeGlobMatchResult &result) const
{
// First try the high weight matches (>50), if any.
- QMimeGlobMatchResult result;
m_highWeightGlobs.match(result, fileName);
// Now use the "fast patterns" dict, for simple *.foo patterns with weight 50
@@ -230,8 +229,6 @@ QMimeGlobMatchResult QMimeAllGlobPatterns::matchingGlobs(const QString &fileName
// Finally, try the low weight matches (<=50)
m_lowWeightGlobs.match(result, fileName);
-
- return result;
}
void QMimeAllGlobPatterns::clear()
diff --git a/src/corelib/mimetypes/qmimeglobpattern_p.h b/src/corelib/mimetypes/qmimeglobpattern_p.h
index 21332e71bc..103729c4ff 100644
--- a/src/corelib/mimetypes/qmimeglobpattern_p.h
+++ b/src/corelib/mimetypes/qmimeglobpattern_p.h
@@ -152,7 +152,7 @@ public:
void addGlob(const QMimeGlobPattern &glob);
void removeMimeType(const QString &mimeType);
- QMimeGlobMatchResult matchingGlobs(const QString &fileName) const;
+ void matchingGlobs(const QString &fileName, QMimeGlobMatchResult &result) const;
void clear();
PatternsMap m_fastPatterns; // example: "doc" -> "application/msword", "text/plain"
diff --git a/src/corelib/mimetypes/qmimemagicrule.cpp b/src/corelib/mimetypes/qmimemagicrule.cpp
index 5bbf1bba9d..6356a3581b 100644
--- a/src/corelib/mimetypes/qmimemagicrule.cpp
+++ b/src/corelib/mimetypes/qmimemagicrule.cpp
@@ -65,7 +65,7 @@ static const char magicRuleTypes_string[] =
"\0";
static const int magicRuleTypes_indices[] = {
- 0, 8, 15, 22, 29, 35, 41, 50, 59, 65, 0
+ 0, 8, 15, 22, 29, 35, 41, 50, 59, 64, 0
};
QMimeMagicRule::Type QMimeMagicRule::type(const QByteArray &theTypeName)
diff --git a/src/corelib/mimetypes/qmimemagicrule_p.h b/src/corelib/mimetypes/qmimemagicrule_p.h
index 0c6c1dbcd7..9b27ef2657 100644
--- a/src/corelib/mimetypes/qmimemagicrule_p.h
+++ b/src/corelib/mimetypes/qmimemagicrule_p.h
@@ -90,7 +90,7 @@ public:
int endPos() const { return m_endPos; }
QByteArray mask() const;
- bool isValid() const { return m_matchFunction != Q_NULLPTR; }
+ bool isValid() const { return m_matchFunction != nullptr; }
bool matches(const QByteArray &data) const;
diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp
index ed7ebb2ef5..ec0a6bf0ef 100644
--- a/src/corelib/mimetypes/qmimeprovider.cpp
+++ b/src/corelib/mimetypes/qmimeprovider.cpp
@@ -61,46 +61,18 @@ static void initResources()
QT_BEGIN_NAMESPACE
-static QString fallbackParent(const QString &mimeTypeName)
-{
- const QStringRef myGroup = mimeTypeName.leftRef(mimeTypeName.indexOf(QLatin1Char('/')));
- // All text/* types are subclasses of text/plain.
- if (myGroup == QLatin1String("text") && mimeTypeName != QLatin1String("text/plain"))
- return QLatin1String("text/plain");
- // All real-file mimetypes implicitly derive from application/octet-stream
- if (myGroup != QLatin1String("inode") &&
- // ignore non-file extensions
- myGroup != QLatin1String("all") && myGroup != QLatin1String("fonts") && myGroup != QLatin1String("print") && myGroup != QLatin1String("uri")
- && mimeTypeName != QLatin1String("application/octet-stream")) {
- return QLatin1String("application/octet-stream");
- }
- return QString();
-}
-
-QMimeProviderBase::QMimeProviderBase(QMimeDatabasePrivate *db)
- : m_db(db)
+QMimeProviderBase::QMimeProviderBase(QMimeDatabasePrivate *db, const QString &directory)
+ : m_db(db), m_directory(directory)
{
}
-Q_CORE_EXPORT int qmime_secondsBetweenChecks = 5; // exported for the unit test
-bool QMimeProviderBase::shouldCheck()
-{
- if (m_lastCheck.isValid() && m_lastCheck.elapsed() < qmime_secondsBetweenChecks * 1000)
- return false;
- m_lastCheck.start();
- return true;
-}
-
-QMimeBinaryProvider::QMimeBinaryProvider(QMimeDatabasePrivate *db)
- : QMimeProviderBase(db), m_mimetypeListLoaded(false)
+QMimeBinaryProvider::QMimeBinaryProvider(QMimeDatabasePrivate *db, const QString &directory)
+ : QMimeProviderBase(db, directory), m_mimetypeListLoaded(false)
{
+ ensureLoaded();
}
-#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY)
-#define QT_USE_MMAP
-#endif
-
struct QMimeBinaryProvider::CacheFile
{
CacheFile(const QString &fileName);
@@ -154,7 +126,6 @@ bool QMimeBinaryProvider::CacheFile::load()
bool QMimeBinaryProvider::CacheFile::reload()
{
- //qDebug() << "reload!" << file->fileName();
m_valid = false;
if (file.isOpen()) {
file.close();
@@ -163,18 +134,14 @@ bool QMimeBinaryProvider::CacheFile::reload()
return load();
}
-QMimeBinaryProvider::CacheFile *QMimeBinaryProvider::CacheFileList::findCacheFile(const QString &fileName) const
+QMimeBinaryProvider::~QMimeBinaryProvider()
{
- for (const_iterator it = begin(); it != end(); ++it) {
- if ((*it)->file.fileName() == fileName)
- return *it;
- }
- return 0;
+ delete m_cacheFile;
}
-QMimeBinaryProvider::~QMimeBinaryProvider()
+bool QMimeBinaryProvider::isValid()
{
- qDeleteAll(m_cacheFiles);
+ return m_cacheFile != nullptr;
}
// Position of the "list offsets" values, at the beginning of the mime.cache file
@@ -190,79 +157,33 @@ enum {
PosGenericIconsListOffset = 36
};
-bool QMimeBinaryProvider::isValid()
+bool QMimeBinaryProvider::checkCacheChanged()
{
-#if defined(QT_USE_MMAP)
- if (!qEnvironmentVariableIsEmpty("QT_NO_MIME_CACHE"))
- return false;
-
- Q_ASSERT(m_cacheFiles.isEmpty()); // this method is only ever called once
- checkCache();
-
- if (m_cacheFiles.count() > 1)
+ QFileInfo fileInfo(m_cacheFile->file);
+ if (fileInfo.lastModified() > m_cacheFile->m_mtime) {
+ // Deletion can't happen by just running update-mime-database.
+ // But the user could use rm -rf :-)
+ m_cacheFile->reload(); // will mark itself as invalid on failure
return true;
- if (m_cacheFiles.isEmpty())
- return false;
-
- // We found exactly one file; is it the user-modified mimes, or a system file?
- const QString foundFile = m_cacheFiles.constFirst()->file.fileName();
- const QString localCacheFile = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/mime/mime.cache");
-
- return foundFile != localCacheFile;
-#else
- return false;
-#endif
-}
-
-bool QMimeBinaryProvider::CacheFileList::checkCacheChanged()
-{
- bool somethingChanged = false;
- for (CacheFile *cacheFile : qAsConst(*this)) {
- QFileInfo fileInfo(cacheFile->file);
- if (!fileInfo.exists() || fileInfo.lastModified() > cacheFile->m_mtime) {
- // Deletion can't happen by just running update-mime-database.
- // But the user could use rm -rf :-)
- cacheFile->reload(); // will mark itself as invalid on failure
- somethingChanged = true;
- }
- }
- if (somethingChanged) {
- auto deleteIfNoLongerValid = [](CacheFile *cacheFile) -> bool {
- const bool invalid = !cacheFile->isValid();
- if (invalid)
- delete cacheFile;
- return invalid;
- };
- erase(std::remove_if(begin(), end(), deleteIfNoLongerValid), end());
}
- return somethingChanged;
+ return false;
}
-void QMimeBinaryProvider::checkCache()
+void QMimeBinaryProvider::ensureLoaded()
{
- if (!shouldCheck())
- return;
-
- // First iterate over existing known cache files and check for uptodate
- if (m_cacheFiles.checkCacheChanged())
- m_mimetypeListLoaded = false;
-
- // Then check if new cache files appeared
- const QStringList cacheFileNames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/mime.cache"));
- if (cacheFileNames != m_cacheFileNames) {
- for (const QString &cacheFileName : cacheFileNames) {
- CacheFile *cacheFile = m_cacheFiles.findCacheFile(cacheFileName);
- if (!cacheFile) {
- //qDebug() << "new file:" << cacheFileName;
- cacheFile = new CacheFile(cacheFileName);
- if (cacheFile->isValid()) // verify version
- m_cacheFiles.append(cacheFile);
- else
- delete cacheFile;
- }
- }
- m_cacheFileNames = cacheFileNames;
+ if (!m_cacheFile) {
+ const QString cacheFileName = m_directory + QLatin1String("/mime.cache");
+ m_cacheFile = new CacheFile(cacheFileName);
m_mimetypeListLoaded = false;
+ } else {
+ if (checkCacheChanged())
+ m_mimetypeListLoaded = false;
+ else
+ return; // nothing to do
+ }
+ if (!m_cacheFile->isValid()) { // verify existence and version
+ delete m_cacheFile;
+ m_cacheFile = nullptr;
}
}
@@ -270,6 +191,7 @@ static QMimeType mimeTypeForNameUnchecked(const QString &name)
{
QMimeTypePrivate data;
data.name = name;
+ data.fromCache = true;
// The rest is retrieved on demand.
// comment and globPatterns: in loadMimeTypePrivate
// iconName: in loadIcon
@@ -279,7 +201,6 @@ static QMimeType mimeTypeForNameUnchecked(const QString &name)
QMimeType QMimeBinaryProvider::mimeTypeForName(const QString &name)
{
- checkCache();
if (!m_mimetypeListLoaded)
loadMimeTypeList();
if (!m_mimetypeNames.contains(name))
@@ -287,28 +208,23 @@ QMimeType QMimeBinaryProvider::mimeTypeForName(const QString &name)
return mimeTypeForNameUnchecked(name);
}
-QMimeGlobMatchResult QMimeBinaryProvider::findByFileName(const QString &fileName)
+void QMimeBinaryProvider::addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result)
{
- checkCache();
- QMimeGlobMatchResult result;
if (fileName.isEmpty())
- return result;
+ return;
+ Q_ASSERT(m_cacheFile);
const QString lowerFileName = fileName.toLower();
- // TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- // Check literals (e.g. "Makefile")
- matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName);
- // Check complex globs (e.g. "callgrind.out[0-9]*")
- matchGlobList(result, cacheFile, cacheFile->getUint32(PosGlobListOffset), fileName);
- // Check the very common *.txt cases with the suffix tree
- const int reverseSuffixTreeOffset = cacheFile->getUint32(PosReverseSuffixTreeOffset);
- const int numRoots = cacheFile->getUint32(reverseSuffixTreeOffset);
- const int firstRootOffset = cacheFile->getUint32(reverseSuffixTreeOffset + 4);
- matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false);
- if (result.m_matchingMimeTypes.isEmpty())
- matchSuffixTree(result, cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
- }
- return result;
+ // Check literals (e.g. "Makefile")
+ matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosLiteralListOffset), fileName);
+ // Check complex globs (e.g. "callgrind.out[0-9]*")
+ matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName);
+ // Check the very common *.txt cases with the suffix tree
+ const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
+ const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
+ const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
+ matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, lowerFileName, lowerFileName.length() - 1, false);
+ if (result.m_matchingMimeTypes.isEmpty())
+ matchSuffixTree(result, m_cacheFile, numRoots, firstRootOffset, fileName, fileName.length() - 1, true);
}
void QMimeBinaryProvider::matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int off, const QString &fileName)
@@ -406,124 +322,106 @@ bool QMimeBinaryProvider::matchMagicRule(QMimeBinaryProvider::CacheFile *cacheFi
return false;
}
-QMimeType QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr)
-{
- checkCache();
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- const int magicListOffset = cacheFile->getUint32(PosMagicListOffset);
- const int numMatches = cacheFile->getUint32(magicListOffset);
- //const int maxExtent = cacheFile->getUint32(magicListOffset + 4);
- const int firstMatchOffset = cacheFile->getUint32(magicListOffset + 8);
-
- for (int i = 0; i < numMatches; ++i) {
- const int off = firstMatchOffset + i * 16;
- const int numMatchlets = cacheFile->getUint32(off + 8);
- const int firstMatchletOffset = cacheFile->getUint32(off + 12);
- if (matchMagicRule(cacheFile, numMatchlets, firstMatchletOffset, data)) {
- const int mimeTypeOffset = cacheFile->getUint32(off + 4);
- const char *mimeType = cacheFile->getCharStar(mimeTypeOffset);
- *accuracyPtr = cacheFile->getUint32(off);
- // Return the first match. We have no rules for conflicting magic data...
- // (mime.cache itself is sorted, but what about local overrides with a lower prio?)
- return mimeTypeForNameUnchecked(QLatin1String(mimeType));
- }
+void QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate)
+{
+ const int magicListOffset = m_cacheFile->getUint32(PosMagicListOffset);
+ const int numMatches = m_cacheFile->getUint32(magicListOffset);
+ //const int maxExtent = cacheFile->getUint32(magicListOffset + 4);
+ const int firstMatchOffset = m_cacheFile->getUint32(magicListOffset + 8);
+
+ for (int i = 0; i < numMatches; ++i) {
+ const int off = firstMatchOffset + i * 16;
+ const int numMatchlets = m_cacheFile->getUint32(off + 8);
+ const int firstMatchletOffset = m_cacheFile->getUint32(off + 12);
+ if (matchMagicRule(m_cacheFile, numMatchlets, firstMatchletOffset, data)) {
+ const int mimeTypeOffset = m_cacheFile->getUint32(off + 4);
+ const char *mimeType = m_cacheFile->getCharStar(mimeTypeOffset);
+ *accuracyPtr = m_cacheFile->getUint32(off);
+ // Return the first match. We have no rules for conflicting magic data...
+ // (mime.cache itself is sorted, but what about local overrides with a lower prio?)
+ candidate = mimeTypeForNameUnchecked(QLatin1String(mimeType));
+ return;
}
}
- return QMimeType();
}
-QStringList QMimeBinaryProvider::parents(const QString &mime)
+void QMimeBinaryProvider::addParents(const QString &mime, QStringList &result)
{
- checkCache();
const QByteArray mimeStr = mime.toLatin1();
- QStringList result;
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- const int parentListOffset = cacheFile->getUint32(PosParentListOffset);
- const int numEntries = cacheFile->getUint32(parentListOffset);
-
- int begin = 0;
- int end = numEntries - 1;
- while (begin <= end) {
- const int medium = (begin + end) / 2;
- const int off = parentListOffset + 4 + 8 * medium;
- const int mimeOffset = cacheFile->getUint32(off);
- const char *aMime = cacheFile->getCharStar(mimeOffset);
- const int cmp = qstrcmp(aMime, mimeStr);
- if (cmp < 0) {
- begin = medium + 1;
- } else if (cmp > 0) {
- end = medium - 1;
- } else {
- const int parentsOffset = cacheFile->getUint32(off + 4);
- const int numParents = cacheFile->getUint32(parentsOffset);
- for (int i = 0; i < numParents; ++i) {
- const int parentOffset = cacheFile->getUint32(parentsOffset + 4 + 4 * i);
- const char *aParent = cacheFile->getCharStar(parentOffset);
- result.append(QString::fromLatin1(aParent));
- }
- break;
+ const int parentListOffset = m_cacheFile->getUint32(PosParentListOffset);
+ const int numEntries = m_cacheFile->getUint32(parentListOffset);
+
+ int begin = 0;
+ int end = numEntries - 1;
+ while (begin <= end) {
+ const int medium = (begin + end) / 2;
+ const int off = parentListOffset + 4 + 8 * medium;
+ const int mimeOffset = m_cacheFile->getUint32(off);
+ const char *aMime = m_cacheFile->getCharStar(mimeOffset);
+ const int cmp = qstrcmp(aMime, mimeStr);
+ if (cmp < 0) {
+ begin = medium + 1;
+ } else if (cmp > 0) {
+ end = medium - 1;
+ } else {
+ const int parentsOffset = m_cacheFile->getUint32(off + 4);
+ const int numParents = m_cacheFile->getUint32(parentsOffset);
+ for (int i = 0; i < numParents; ++i) {
+ const int parentOffset = m_cacheFile->getUint32(parentsOffset + 4 + 4 * i);
+ const char *aParent = m_cacheFile->getCharStar(parentOffset);
+ const QString strParent = QString::fromLatin1(aParent);
+ if (!result.contains(strParent))
+ result.append(strParent);
}
+ break;
}
}
- if (result.isEmpty()) {
- const QString parent = fallbackParent(mime);
- if (!parent.isEmpty())
- result.append(parent);
- }
- return result;
}
QString QMimeBinaryProvider::resolveAlias(const QString &name)
{
- checkCache();
const QByteArray input = name.toLatin1();
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset);
- const int numEntries = cacheFile->getUint32(aliasListOffset);
- int begin = 0;
- int end = numEntries - 1;
- while (begin <= end) {
- const int medium = (begin + end) / 2;
- const int off = aliasListOffset + 4 + 8 * medium;
- const int aliasOffset = cacheFile->getUint32(off);
- const char *alias = cacheFile->getCharStar(aliasOffset);
- const int cmp = qstrcmp(alias, input);
- if (cmp < 0) {
- begin = medium + 1;
- } else if (cmp > 0) {
- end = medium - 1;
- } else {
- const int mimeOffset = cacheFile->getUint32(off + 4);
- const char *mimeType = cacheFile->getCharStar(mimeOffset);
- return QLatin1String(mimeType);
- }
+ const int aliasListOffset = m_cacheFile->getUint32(PosAliasListOffset);
+ const int numEntries = m_cacheFile->getUint32(aliasListOffset);
+ int begin = 0;
+ int end = numEntries - 1;
+ while (begin <= end) {
+ const int medium = (begin + end) / 2;
+ const int off = aliasListOffset + 4 + 8 * medium;
+ const int aliasOffset = m_cacheFile->getUint32(off);
+ const char *alias = m_cacheFile->getCharStar(aliasOffset);
+ const int cmp = qstrcmp(alias, input);
+ if (cmp < 0) {
+ begin = medium + 1;
+ } else if (cmp > 0) {
+ end = medium - 1;
+ } else {
+ const int mimeOffset = m_cacheFile->getUint32(off + 4);
+ const char *mimeType = m_cacheFile->getCharStar(mimeOffset);
+ return QLatin1String(mimeType);
}
}
-
return name;
}
-QStringList QMimeBinaryProvider::listAliases(const QString &name)
+void QMimeBinaryProvider::addAliases(const QString &name, QStringList &result)
{
- checkCache();
- QStringList result;
const QByteArray input = name.toLatin1();
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset);
- const int numEntries = cacheFile->getUint32(aliasListOffset);
- for (int pos = 0; pos < numEntries; ++pos) {
- const int off = aliasListOffset + 4 + 8 * pos;
- const int mimeOffset = cacheFile->getUint32(off + 4);
- const char *mimeType = cacheFile->getCharStar(mimeOffset);
-
- if (input == mimeType) {
- const int aliasOffset = cacheFile->getUint32(off);
- const char *alias = cacheFile->getCharStar(aliasOffset);
- result.append(QString::fromLatin1(alias));
- }
+ const int aliasListOffset = m_cacheFile->getUint32(PosAliasListOffset);
+ const int numEntries = m_cacheFile->getUint32(aliasListOffset);
+ for (int pos = 0; pos < numEntries; ++pos) {
+ const int off = aliasListOffset + 4 + 8 * pos;
+ const int mimeOffset = m_cacheFile->getUint32(off + 4);
+ const char *mimeType = m_cacheFile->getCharStar(mimeOffset);
+
+ if (input == mimeType) {
+ const int aliasOffset = m_cacheFile->getUint32(off);
+ const char *alias = m_cacheFile->getCharStar(aliasOffset);
+ const QString strAlias = QString::fromLatin1(alias);
+ if (!result.contains(strAlias))
+ result.append(strAlias);
}
}
- return result;
}
void QMimeBinaryProvider::loadMimeTypeList()
@@ -533,31 +431,30 @@ void QMimeBinaryProvider::loadMimeTypeList()
m_mimetypeNames.clear();
// Unfortunately mime.cache doesn't have a full list of all mimetypes.
// So we have to parse the plain-text files called "types".
- const QStringList typesFilenames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/types"));
- for (const QString &typeFilename : typesFilenames) {
- QFile file(typeFilename);
- if (file.open(QIODevice::ReadOnly)) {
- QTextStream stream(&file);
- stream.setCodec("ISO 8859-1");
- QString line;
- while (stream.readLineInto(&line))
- m_mimetypeNames.insert(line);
- }
+ QFile file(m_directory + QStringLiteral("/types"));
+ if (file.open(QIODevice::ReadOnly)) {
+ QTextStream stream(&file);
+ stream.setCodec("ISO 8859-1");
+ QString line;
+ while (stream.readLineInto(&line))
+ m_mimetypeNames.insert(line);
}
}
}
-QList<QMimeType> QMimeBinaryProvider::allMimeTypes()
+void QMimeBinaryProvider::addAllMimeTypes(QList<QMimeType> &result)
{
- QList<QMimeType> result;
loadMimeTypeList();
- result.reserve(m_mimetypeNames.count());
-
- for (QSet<QString>::const_iterator it = m_mimetypeNames.constBegin();
- it != m_mimetypeNames.constEnd(); ++it)
- result.append(mimeTypeForNameUnchecked(*it));
-
- return result;
+ if (result.isEmpty()) {
+ result.reserve(m_mimetypeNames.count());
+ for (const QString &name : m_mimetypeNames)
+ result.append(mimeTypeForNameUnchecked(name));
+ } else {
+ for (const QString &name : m_mimetypeNames)
+ if (std::find_if(result.constBegin(), result.constEnd(), [name](const QMimeType &mime) -> bool { return mime.name() == name; })
+ == result.constEnd())
+ result.append(mimeTypeForNameUnchecked(name));
+ }
}
void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
@@ -681,36 +578,29 @@ QLatin1String QMimeBinaryProvider::iconForMime(CacheFile *cacheFile, int posList
void QMimeBinaryProvider::loadIcon(QMimeTypePrivate &data)
{
- checkCache();
const QByteArray inputMime = data.name.toLatin1();
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- const QLatin1String icon = iconForMime(cacheFile, PosIconsListOffset, inputMime);
- if (!icon.isEmpty()) {
- data.iconName = icon;
- return;
- }
+ const QLatin1String icon = iconForMime(m_cacheFile, PosIconsListOffset, inputMime);
+ if (!icon.isEmpty()) {
+ data.iconName = icon;
}
}
void QMimeBinaryProvider::loadGenericIcon(QMimeTypePrivate &data)
{
- checkCache();
const QByteArray inputMime = data.name.toLatin1();
- for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
- const QLatin1String icon = iconForMime(cacheFile, PosGenericIconsListOffset, inputMime);
- if (!icon.isEmpty()) {
- data.genericIconName = icon;
- return;
- }
+ const QLatin1String icon = iconForMime(m_cacheFile, PosGenericIconsListOffset, inputMime);
+ if (!icon.isEmpty()) {
+ data.genericIconName = icon;
}
}
////
-QMimeXMLProvider::QMimeXMLProvider(QMimeDatabasePrivate *db)
- : QMimeProviderBase(db), m_loaded(false)
+QMimeXMLProvider::QMimeXMLProvider(QMimeDatabasePrivate *db, const QString &directory)
+ : QMimeProviderBase(db, directory)
{
initResources();
+ ensureLoaded();
}
QMimeXMLProvider::~QMimeXMLProvider()
@@ -719,81 +609,63 @@ QMimeXMLProvider::~QMimeXMLProvider()
bool QMimeXMLProvider::isValid()
{
+ // If you change this method, adjust the logic in QMimeDatabasePrivate::loadProviders,
+ // which assumes isValid==false is only possible in QMimeBinaryProvider.
return true;
}
QMimeType QMimeXMLProvider::mimeTypeForName(const QString &name)
{
- ensureLoaded();
-
return m_nameMimeTypeMap.value(name);
}
-QMimeGlobMatchResult QMimeXMLProvider::findByFileName(const QString &fileName)
+void QMimeXMLProvider::addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result)
{
- ensureLoaded();
-
- return m_mimeTypeGlobs.matchingGlobs(fileName);
+ m_mimeTypeGlobs.matchingGlobs(fileName, result);
}
-QMimeType QMimeXMLProvider::findByMagic(const QByteArray &data, int *accuracyPtr)
+void QMimeXMLProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate)
{
- ensureLoaded();
-
- QString candidate;
-
+ QString candidateName;
+ bool foundOne = false;
for (const QMimeMagicRuleMatcher &matcher : qAsConst(m_magicMatchers)) {
if (matcher.matches(data)) {
const int priority = matcher.priority();
if (priority > *accuracyPtr) {
*accuracyPtr = priority;
- candidate = matcher.mimetype();
+ candidateName = matcher.mimetype();
+ foundOne = true;
}
}
}
- return mimeTypeForName(candidate);
+ if (foundOne)
+ candidate = mimeTypeForName(candidateName);
}
void QMimeXMLProvider::ensureLoaded()
{
- if (!m_loaded || shouldCheck()) {
- bool fdoXmlFound = false;
- QStringList allFiles;
-
- const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory);
- //qDebug() << "packageDirs=" << packageDirs;
- for (const QString &packageDir : packageDirs) {
- QDir dir(packageDir);
- const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
- //qDebug() << static_cast<const void *>(this) << packageDir << files;
- if (!fdoXmlFound)
- fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml"));
- QStringList::const_iterator endIt(files.constEnd());
- for (QStringList::const_iterator it(files.constBegin()); it != endIt; ++it) {
- allFiles.append(packageDir + QLatin1Char('/') + *it);
- }
- }
-
- if (!fdoXmlFound) {
- // We could instead install the file as part of installing Qt?
- allFiles.prepend(QLatin1String(":/qt-project.org/qmime/freedesktop.org.xml"));
- }
+ QStringList allFiles;
+ const QString packageDir = m_directory + QStringLiteral("/packages");
+ QDir dir(packageDir);
+ const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
+ allFiles.reserve(files.count());
+ for (const QString &xmlFile : files)
+ allFiles.append(packageDir + QLatin1Char('/') + xmlFile);
- if (m_allFiles == allFiles)
- return;
- m_allFiles = allFiles;
+ if (m_allFiles == allFiles)
+ return;
+ m_allFiles = allFiles;
- m_nameMimeTypeMap.clear();
- m_aliases.clear();
- m_parents.clear();
- m_mimeTypeGlobs.clear();
- m_magicMatchers.clear();
+ m_nameMimeTypeMap.clear();
+ m_aliases.clear();
+ m_parents.clear();
+ m_mimeTypeGlobs.clear();
+ m_magicMatchers.clear();
- //qDebug() << "Loading" << m_allFiles;
+ //qDebug() << "Loading" << m_allFiles;
- for (const QString &file : qAsConst(allFiles))
- load(file);
- }
+ for (const QString &file : qAsConst(allFiles))
+ load(file);
}
void QMimeXMLProvider::load(const QString &fileName)
@@ -805,8 +677,6 @@ void QMimeXMLProvider::load(const QString &fileName)
bool QMimeXMLProvider::load(const QString &fileName, QString *errorMessage)
{
- m_loaded = true;
-
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
if (errorMessage)
@@ -828,19 +698,16 @@ void QMimeXMLProvider::addGlobPattern(const QMimeGlobPattern &glob)
void QMimeXMLProvider::addMimeType(const QMimeType &mt)
{
+ Q_ASSERT(!mt.d.data()->fromCache);
m_nameMimeTypeMap.insert(mt.name(), mt);
}
-QStringList QMimeXMLProvider::parents(const QString &mime)
+void QMimeXMLProvider::addParents(const QString &mime, QStringList &result)
{
- ensureLoaded();
- QStringList result = m_parents.value(mime);
- if (result.isEmpty()) {
- const QString parent = fallbackParent(mime);
- if (!parent.isEmpty())
+ for (const QString &parent : m_parents.value(mime)) {
+ if (!result.contains(parent))
result.append(parent);
}
- return result;
}
void QMimeXMLProvider::addParent(const QString &child, const QString &parent)
@@ -848,16 +715,20 @@ void QMimeXMLProvider::addParent(const QString &child, const QString &parent)
m_parents[child].append(parent);
}
-QStringList QMimeXMLProvider::listAliases(const QString &name)
+void QMimeXMLProvider::addAliases(const QString &name, QStringList &result)
{
- ensureLoaded();
// Iterate through the whole hash. This method is rarely used.
- return m_aliases.keys(name);
+ for (auto it = m_aliases.constBegin(), end = m_aliases.constEnd() ; it != end ; ++it) {
+ if (it.value() == name) {
+ if (!result.contains(it.key()))
+ result.append(it.key());
+ }
+ }
+
}
QString QMimeXMLProvider::resolveAlias(const QString &name)
{
- ensureLoaded();
return m_aliases.value(name, name);
}
@@ -866,10 +737,18 @@ void QMimeXMLProvider::addAlias(const QString &alias, const QString &name)
m_aliases.insert(alias, name);
}
-QList<QMimeType> QMimeXMLProvider::allMimeTypes()
+void QMimeXMLProvider::addAllMimeTypes(QList<QMimeType> &result)
{
- ensureLoaded();
- return m_nameMimeTypeMap.values();
+ if (result.isEmpty()) { // fast path
+ result = m_nameMimeTypeMap.values();
+ } else {
+ for (auto it = m_nameMimeTypeMap.constBegin(), end = m_nameMimeTypeMap.constEnd() ; it != end ; ++it) {
+ const QString newMime = it.key();
+ if (std::find_if(result.constBegin(), result.constEnd(), [newMime](const QMimeType &mime) -> bool { return mime.name() == newMime; })
+ == result.constEnd())
+ result.append(it.value());
+ }
+ }
}
void QMimeXMLProvider::addMagicMatcher(const QMimeMagicRuleMatcher &matcher)
diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h
index 0be01d2fd0..b2be545cf8 100644
--- a/src/corelib/mimetypes/qmimeprovider_p.h
+++ b/src/corelib/mimetypes/qmimeprovider_p.h
@@ -59,7 +59,6 @@
#include "qmimeglobpattern_p.h"
#include <QtCore/qdatetime.h>
#include <QtCore/qset.h>
-#include <QtCore/qelapsedtimer.h>
QT_BEGIN_NAMESPACE
@@ -68,25 +67,25 @@ class QMimeMagicRuleMatcher;
class QMimeProviderBase
{
public:
- QMimeProviderBase(QMimeDatabasePrivate *db);
+ QMimeProviderBase(QMimeDatabasePrivate *db, const QString &directory);
virtual ~QMimeProviderBase() {}
virtual bool isValid() = 0;
virtual QMimeType mimeTypeForName(const QString &name) = 0;
- virtual QMimeGlobMatchResult findByFileName(const QString &fileName) = 0;
- virtual QStringList parents(const QString &mime) = 0;
+ virtual void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) = 0;
+ virtual void addParents(const QString &mime, QStringList &result) = 0;
virtual QString resolveAlias(const QString &name) = 0;
- virtual QStringList listAliases(const QString &name) = 0;
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) = 0;
- virtual QList<QMimeType> allMimeTypes() = 0;
- virtual void loadMimeTypePrivate(QMimeTypePrivate &) {}
+ virtual void addAliases(const QString &name, QStringList &result) = 0;
+ virtual void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) = 0;
+ virtual void addAllMimeTypes(QList<QMimeType> &result) = 0;
virtual void loadIcon(QMimeTypePrivate &) {}
virtual void loadGenericIcon(QMimeTypePrivate &) {}
+ virtual void ensureLoaded() {}
+
+ QString directory() const { return m_directory; }
QMimeDatabasePrivate *m_db;
-protected:
- bool shouldCheck();
- QElapsedTimer m_lastCheck;
+ QString m_directory;
};
/*
@@ -95,20 +94,21 @@ protected:
class QMimeBinaryProvider : public QMimeProviderBase
{
public:
- QMimeBinaryProvider(QMimeDatabasePrivate *db);
+ QMimeBinaryProvider(QMimeDatabasePrivate *db, const QString &directory);
virtual ~QMimeBinaryProvider();
- virtual bool isValid() Q_DECL_OVERRIDE;
- virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE;
- virtual QMimeGlobMatchResult findByFileName(const QString &fileName) Q_DECL_OVERRIDE;
- virtual QStringList parents(const QString &mime) Q_DECL_OVERRIDE;
- virtual QString resolveAlias(const QString &name) Q_DECL_OVERRIDE;
- virtual QStringList listAliases(const QString &name) Q_DECL_OVERRIDE;
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) Q_DECL_OVERRIDE;
- virtual QList<QMimeType> allMimeTypes() Q_DECL_OVERRIDE;
- virtual void loadMimeTypePrivate(QMimeTypePrivate &) Q_DECL_OVERRIDE;
- virtual void loadIcon(QMimeTypePrivate &) Q_DECL_OVERRIDE;
- virtual void loadGenericIcon(QMimeTypePrivate &) Q_DECL_OVERRIDE;
+ virtual bool isValid() override;
+ virtual QMimeType mimeTypeForName(const QString &name) override;
+ void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override;
+ void addParents(const QString &mime, QStringList &result) override;
+ virtual QString resolveAlias(const QString &name) override;
+ void addAliases(const QString &name, QStringList &result) override;
+ void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) override;
+ void addAllMimeTypes(QList<QMimeType> &result) override;
+ static void loadMimeTypePrivate(QMimeTypePrivate &);
+ virtual void loadIcon(QMimeTypePrivate &) override;
+ virtual void loadGenericIcon(QMimeTypePrivate &) override;
+ void ensureLoaded() override;
private:
struct CacheFile;
@@ -118,15 +118,9 @@ private:
bool matchMagicRule(CacheFile *cacheFile, int numMatchlets, int firstOffset, const QByteArray &data);
QLatin1String iconForMime(CacheFile *cacheFile, int posListOffset, const QByteArray &inputMime);
void loadMimeTypeList();
- void checkCache();
-
- class CacheFileList : public QList<CacheFile *>
- {
- public:
- CacheFile *findCacheFile(const QString &fileName) const;
- bool checkCacheChanged();
- };
- CacheFileList m_cacheFiles;
+ bool checkCacheChanged();
+
+ CacheFile *m_cacheFile = nullptr;
QStringList m_cacheFileNames;
QSet<QString> m_mimetypeNames;
bool m_mimetypeListLoaded;
@@ -138,17 +132,18 @@ private:
class QMimeXMLProvider : public QMimeProviderBase
{
public:
- QMimeXMLProvider(QMimeDatabasePrivate *db);
+ QMimeXMLProvider(QMimeDatabasePrivate *db, const QString &directory);
~QMimeXMLProvider();
- virtual bool isValid() Q_DECL_OVERRIDE;
- virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE;
- virtual QMimeGlobMatchResult findByFileName(const QString &fileName) Q_DECL_OVERRIDE;
- virtual QStringList parents(const QString &mime) Q_DECL_OVERRIDE;
- virtual QString resolveAlias(const QString &name) Q_DECL_OVERRIDE;
- virtual QStringList listAliases(const QString &name) Q_DECL_OVERRIDE;
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) Q_DECL_OVERRIDE;
- virtual QList<QMimeType> allMimeTypes() Q_DECL_OVERRIDE;
+ virtual bool isValid() override;
+ virtual QMimeType mimeTypeForName(const QString &name) override;
+ void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override;
+ void addParents(const QString &mime, QStringList &result) override;
+ virtual QString resolveAlias(const QString &name) override;
+ void addAliases(const QString &name, QStringList &result) override;
+ void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) override;
+ void addAllMimeTypes(QList<QMimeType> &result) override;
+ void ensureLoaded() override;
bool load(const QString &fileName, QString *errorMessage);
@@ -160,11 +155,8 @@ public:
void addMagicMatcher(const QMimeMagicRuleMatcher &matcher);
private:
- void ensureLoaded();
void load(const QString &fileName);
- bool m_loaded;
-
typedef QHash<QString, QMimeType> NameMimeTypeMap;
NameMimeTypeMap m_nameMimeTypeMap;
diff --git a/src/corelib/mimetypes/qmimetype.cpp b/src/corelib/mimetypes/qmimetype.cpp
index 28113babfe..d7590ecf1f 100644
--- a/src/corelib/mimetypes/qmimetype.cpp
+++ b/src/corelib/mimetypes/qmimetype.cpp
@@ -57,7 +57,7 @@
QT_BEGIN_NAMESPACE
QMimeTypePrivate::QMimeTypePrivate()
- : loaded(false)
+ : loaded(false), fromCache(false)
{}
QMimeTypePrivate::QMimeTypePrivate(const QMimeType &other)
@@ -76,7 +76,6 @@ void QMimeTypePrivate::clear()
genericIconName.clear();
iconName.clear();
globPatterns.clear();
- loaded = false;
}
void QMimeTypePrivate::addGlobPattern(const QString &pattern)
@@ -256,7 +255,7 @@ QString QMimeType::name() const
*/
QString QMimeType::comment() const
{
- QMimeDatabasePrivate::instance()->provider()->loadMimeTypePrivate(*d);
+ QMimeDatabasePrivate::instance()->loadMimeTypePrivate(*d);
QStringList languageList;
languageList << QLocale().name();
@@ -296,7 +295,7 @@ QString QMimeType::comment() const
*/
QString QMimeType::genericIconName() const
{
- QMimeDatabasePrivate::instance()->provider()->loadGenericIcon(*d);
+ QMimeDatabasePrivate::instance()->loadGenericIcon(*d);
if (d->genericIconName.isEmpty()) {
// From the spec:
// If the generic icon name is empty (not specified by the mimetype definition)
@@ -324,7 +323,7 @@ QString QMimeType::genericIconName() const
*/
QString QMimeType::iconName() const
{
- QMimeDatabasePrivate::instance()->provider()->loadIcon(*d);
+ QMimeDatabasePrivate::instance()->loadIcon(*d);
if (d->iconName.isEmpty()) {
// Make default icon name from the mimetype name
d->iconName = name();
@@ -344,7 +343,7 @@ QString QMimeType::iconName() const
*/
QStringList QMimeType::globPatterns() const
{
- QMimeDatabasePrivate::instance()->provider()->loadMimeTypePrivate(*d);
+ QMimeDatabasePrivate::instance()->loadMimeTypePrivate(*d);
return d->globPatterns;
}
@@ -368,12 +367,12 @@ QStringList QMimeType::globPatterns() const
*/
QStringList QMimeType::parentMimeTypes() const
{
- return QMimeDatabasePrivate::instance()->provider()->parents(d->name);
+ return QMimeDatabasePrivate::instance()->mimeParents(d->name);
}
static void collectParentMimeTypes(const QString &mime, QStringList &allParents)
{
- const QStringList parents = QMimeDatabasePrivate::instance()->provider()->parents(mime);
+ const QStringList parents = QMimeDatabasePrivate::instance()->mimeParents(mime);
for (const QString &parent : parents) {
// I would use QSet, but since order matters I better not
if (!allParents.contains(parent))
@@ -425,7 +424,7 @@ QStringList QMimeType::allAncestors() const
*/
QStringList QMimeType::aliases() const
{
- return QMimeDatabasePrivate::instance()->provider()->listAliases(d->name);
+ return QMimeDatabasePrivate::instance()->listAliases(d->name);
}
/*!
@@ -439,7 +438,7 @@ QStringList QMimeType::aliases() const
*/
QStringList QMimeType::suffixes() const
{
- QMimeDatabasePrivate::instance()->provider()->loadMimeTypePrivate(*d);
+ QMimeDatabasePrivate::instance()->loadMimeTypePrivate(*d);
QStringList result;
for (const QString &pattern : qAsConst(d->globPatterns)) {
@@ -467,6 +466,8 @@ QStringList QMimeType::suffixes() const
*/
QString QMimeType::preferredSuffix() const
{
+ if (isDefault()) // workaround for unwanted *.bin suffix for octet-stream, https://bugs.freedesktop.org/show_bug.cgi?id=101667, fixed upstream in 1.10
+ return QString();
const QStringList suffixList = suffixes();
return suffixList.isEmpty() ? QString() : suffixList.at(0);
}
@@ -480,7 +481,7 @@ QString QMimeType::preferredSuffix() const
*/
QString QMimeType::filterString() const
{
- QMimeDatabasePrivate::instance()->provider()->loadMimeTypePrivate(*d);
+ QMimeDatabasePrivate::instance()->loadMimeTypePrivate(*d);
QString filter;
if (!d->globPatterns.empty()) {
@@ -508,7 +509,7 @@ bool QMimeType::inherits(const QString &mimeTypeName) const
{
if (d->name == mimeTypeName)
return true;
- return QMimeDatabasePrivate::instance()->inherits(d->name, mimeTypeName);
+ return QMimeDatabasePrivate::instance()->mimeInherits(d->name, mimeTypeName);
}
#ifndef QT_NO_DEBUG_STREAM
diff --git a/src/corelib/mimetypes/qmimetype_p.h b/src/corelib/mimetypes/qmimetype_p.h
index b0bfad2f65..aa38a1adf5 100644
--- a/src/corelib/mimetypes/qmimetype_p.h
+++ b/src/corelib/mimetypes/qmimetype_p.h
@@ -74,6 +74,7 @@ public:
void addGlobPattern(const QString &pattern);
bool loaded; // QSharedData leaves a 4 byte gap, so don't put 8 byte members first
+ bool fromCache; // true if this comes from the binary provider
QString name;
LocaleHash localeComments;
QString genericIconName;
@@ -94,6 +95,7 @@ QT_END_NAMESPACE
{ \
QMimeTypePrivate qMimeTypeData; \
qMimeTypeData.name = name; \
+ qMimeTypeData.loaded = true; \
qMimeTypeData.genericIconName = genericIconName; \
qMimeTypeData.iconName = iconName; \
qMimeTypeData.globPatterns = globPatterns; \
@@ -112,6 +114,7 @@ QT_END_NAMESPACE
) \
{ \
QMimeTypePrivate qMimeTypeData; \
+ qMimeTypeData.loaded = true; \
qMimeTypeData.name = std::move(name); \
qMimeTypeData.genericIconName = std::move(genericIconName); \
qMimeTypeData.iconName = std::move(iconName); \
diff --git a/src/corelib/mimetypes/qmimetypeparser.cpp b/src/corelib/mimetypes/qmimetypeparser.cpp
index 5ecd339908..0a55560ab0 100644
--- a/src/corelib/mimetypes/qmimetypeparser.cpp
+++ b/src/corelib/mimetypes/qmimetypeparser.cpp
@@ -201,6 +201,7 @@ bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString
return false;
#else
QMimeTypePrivate data;
+ data.loaded = true;
int priority = 50;
QStack<QMimeMagicRule *> currentRules; // stack for the nesting of rules
QList<QMimeMagicRule> rules; // toplevel rules
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 0cc193c325..a4be18a67f 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -54,6 +54,8 @@
#include "qjsonobject.h"
#include "qjsonarray.h"
+#include <qtcore_tracepoints_p.h>
+
QT_BEGIN_NAMESPACE
class QFactoryLoaderPrivate : public QObjectPrivate
@@ -142,6 +144,9 @@ void QFactoryLoader::update()
if (qt_debug_component()) {
qDebug() << "QFactoryLoader::QFactoryLoader() looking at" << fileName;
}
+
+ Q_TRACE(qfactoryloader_update, fileName);
+
library = QLibraryPrivate::findOrCreate(QFileInfo(fileName).canonicalFilePath());
if (!library->isPlugin()) {
if (qt_debug_component()) {
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 9e6e70756f..a3b8be8911 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -64,6 +64,8 @@
#include "qelfparser_p.h"
#include "qmachparser_p.h"
+#include <qtcore_tracepoints_p.h>
+
QT_BEGIN_NAMESPACE
#ifdef QT_NO_DEBUG
@@ -548,6 +550,8 @@ bool QLibraryPrivate::load()
if (fileName.isEmpty())
return false;
+ Q_TRACE(qlibraryprivate_load_entry, fileName);
+
bool ret = load_sys();
if (qt_debug_component()) {
if (ret) {
@@ -564,6 +568,8 @@ bool QLibraryPrivate::load()
installCoverageTool(this);
}
+ Q_TRACE(qlibraryprivate_load_exit, ret);
+
return ret;
}
diff --git a/src/corelib/plugin/qlibrary.h b/src/corelib/plugin/qlibrary.h
index 89be52aac3..0b37b8b134 100644
--- a/src/corelib/plugin/qlibrary.h
+++ b/src/corelib/plugin/qlibrary.h
@@ -65,10 +65,10 @@ public:
Q_FLAG(LoadHint)
Q_FLAG(LoadHints)
- explicit QLibrary(QObject *parent = Q_NULLPTR);
- explicit QLibrary(const QString& fileName, QObject *parent = Q_NULLPTR);
- explicit QLibrary(const QString& fileName, int verNum, QObject *parent = Q_NULLPTR);
- explicit QLibrary(const QString& fileName, const QString &version, QObject *parent = Q_NULLPTR);
+ explicit QLibrary(QObject *parent = nullptr);
+ explicit QLibrary(const QString& fileName, QObject *parent = nullptr);
+ explicit QLibrary(const QString& fileName, int verNum, QObject *parent = nullptr);
+ explicit QLibrary(const QString& fileName, const QString &version, QObject *parent = nullptr);
~QLibrary();
QFunctionPointer resolve(const char *symbol);
diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp
index 3c4fbaf348..23b9ad6434 100644
--- a/src/corelib/plugin/qlibrary_unix.cpp
+++ b/src/corelib/plugin/qlibrary_unix.cpp
@@ -44,25 +44,17 @@
#include <qcoreapplication.h>
#include <private/qfilesystementry_p.h>
+#include <dlfcn.h>
+
#ifdef Q_OS_MAC
# include <private/qcore_mac_p.h>
#endif
QT_BEGIN_NAMESPACE
-#if !defined(QT_HPUX_LD)
-QT_BEGIN_INCLUDE_NAMESPACE
-#include <dlfcn.h>
-QT_END_INCLUDE_NAMESPACE
-#endif
-
static QString qdlerror()
{
-#if !defined(QT_HPUX_LD)
const char *err = dlerror();
-#else
- const char *err = strerror(errno);
-#endif
return err ? QLatin1Char('(') + QString::fromLocal8Bit(err) + QLatin1Char(')'): QString();
}
@@ -139,14 +131,6 @@ bool QLibraryPrivate::load_sys()
suffixes = suffixes_sys(fullVersion);
}
int dlFlags = 0;
-#if defined(QT_HPUX_LD)
- dlFlags = DYNAMIC_PATH | BIND_NONFATAL;
- if (loadHints & QLibrary::ResolveAllSymbolsHint) {
- dlFlags |= BIND_IMMEDIATE;
- } else {
- dlFlags |= BIND_DEFERRED;
- }
-#else
int loadHints = this->loadHints();
if (loadHints & QLibrary::ResolveAllSymbolsHint) {
dlFlags |= RTLD_NOW;
@@ -182,7 +166,6 @@ bool QLibraryPrivate::load_sys()
dlFlags |= RTLD_MEMBER;
}
#endif
-#endif // QT_HPUX_LD
// If the filename is an absolute path then we want to try that first as it is most likely
// what the callee wants. If we have been given a non-absolute path then lets try the
@@ -211,11 +194,7 @@ bool QLibraryPrivate::load_sys()
} else {
attempt = path + prefixes.at(prefix) + name + suffixes.at(suffix);
}
-#if defined(QT_HPUX_LD)
- pHnd = (void*)shl_load(QFile::encodeName(attempt), dlFlags, 0);
-#else
pHnd = dlopen(QFile::encodeName(attempt), dlFlags);
-#endif
if (!pHnd && fileName.startsWith(QLatin1Char('/')) && QFile::exists(attempt)) {
// We only want to continue if dlopen failed due to that the shared library did not exist.
@@ -253,11 +232,7 @@ bool QLibraryPrivate::load_sys()
bool QLibraryPrivate::unload_sys()
{
-#if defined(QT_HPUX_LD)
- if (shl_unload((shl_t)pHnd)) {
-#else
if (dlclose(pHnd)) {
-#endif
#if defined (Q_OS_QNX) // Workaround until fixed in QNX; fixes crash in
char *error = dlerror(); // QtDeclarative auto test "qqmlenginecleanup" for instance
if (!qstrcmp(error, "Shared objects still referenced")) // On QNX that's only "informative"
@@ -289,13 +264,7 @@ Q_CORE_EXPORT QFunctionPointer qt_mac_resolve_sys(void *handle, const char *symb
QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol)
{
-#if defined(QT_HPUX_LD)
- QFunctionPointer address = 0;
- if (shl_findsym((shl_t*)&pHnd, symbol, TYPE_UNDEFINED, &address) < 0)
- address = 0;
-#else
QFunctionPointer address = QFunctionPointer(dlsym(pHnd, symbol));
-#endif
if (!address) {
errorString = QLibrary::tr("Cannot resolve symbol \"%1\" in %2: %3").arg(
QString::fromLatin1(symbol), fileName, qdlerror());
diff --git a/src/corelib/plugin/qpluginloader.h b/src/corelib/plugin/qpluginloader.h
index 80b10f76bf..5e417249a4 100644
--- a/src/corelib/plugin/qpluginloader.h
+++ b/src/corelib/plugin/qpluginloader.h
@@ -59,8 +59,8 @@ class Q_CORE_EXPORT QPluginLoader : public QObject
Q_PROPERTY(QString fileName READ fileName WRITE setFileName)
Q_PROPERTY(QLibrary::LoadHints loadHints READ loadHints WRITE setLoadHints)
public:
- explicit QPluginLoader(QObject *parent = Q_NULLPTR);
- explicit QPluginLoader(const QString &fileName, QObject *parent = Q_NULLPTR);
+ explicit QPluginLoader(QObject *parent = nullptr);
+ explicit QPluginLoader(const QString &fileName, QObject *parent = nullptr);
~QPluginLoader();
QObject *instance();
diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp
index 3a1c0495fe..b113ca13ce 100644
--- a/src/corelib/plugin/quuid.cpp
+++ b/src/corelib/plugin/quuid.cpp
@@ -83,21 +83,27 @@ bool _q_fromHex(const char *&src, Integral &value)
return true;
}
-static char *_q_uuidToHex(const QUuid &uuid, char *dst)
+static char *_q_uuidToHex(const QUuid &uuid, char *dst, QUuid::StringFormat mode = QUuid::WithBraces)
{
- *dst++ = '{';
+ if ((mode & QUuid::WithoutBraces) == 0)
+ *dst++ = '{';
_q_toHex(dst, uuid.data1);
- *dst++ = '-';
+ if ((mode & QUuid::Id128) != QUuid::Id128)
+ *dst++ = '-';
_q_toHex(dst, uuid.data2);
- *dst++ = '-';
+ if ((mode & QUuid::Id128) != QUuid::Id128)
+ *dst++ = '-';
_q_toHex(dst, uuid.data3);
- *dst++ = '-';
+ if ((mode & QUuid::Id128) != QUuid::Id128)
+ *dst++ = '-';
for (int i = 0; i < 2; i++)
_q_toHex(dst, uuid.data4[i]);
- *dst++ = '-';
+ if ((mode & QUuid::Id128) != QUuid::Id128)
+ *dst++ = '-';
for (int i = 2; i < 8; i++)
_q_toHex(dst, uuid.data4[i]);
- *dst++ = '}';
+ if ((mode & QUuid::WithoutBraces) == 0)
+ *dst++ = '}';
return dst;
}
@@ -143,7 +149,6 @@ static QUuid _q_uuidFromHex(const char *src)
return QUuid();
}
-#ifndef QT_BOOTSTRAPPED
static QUuid createFromName(const QUuid &ns, const QByteArray &baseData, QCryptographicHash::Algorithm algorithm, int version)
{
QByteArray hashResult;
@@ -166,7 +171,6 @@ static QUuid createFromName(const QUuid &ns, const QByteArray &baseData, QCrypto
return result;
}
-#endif
/*!
\class QUuid
@@ -307,6 +311,22 @@ static QUuid createFromName(const QUuid &ns, const QByteArray &baseData, QCrypto
*/
/*!
+ \enum QUuid::StringFormat
+ \since 5.11
+
+ This enum is used by toString(StringFormat) to control the formatting of the
+ string representation. The possible values are:
+
+ \value WithBraces The default, toString() will return five hex fields, separated by
+ dashes and surrounded by braces. Example:
+ {00000000-0000-0000-0000-000000000000}.
+ \value WithoutBraces Only the five dash-separated fields, without the braces. Example:
+ 00000000-0000-0000-0000-000000000000.
+ \value Id128 Only the hex digits, without braces or dashes. Note that QUuid
+ cannot parse this back again as input.
+*/
+
+/*!
\fn QUuid::QUuid(const GUID &guid)
Casts a Windows \a guid to a Qt QUuid.
@@ -488,12 +508,12 @@ QUuid QUuid::createUuidV3(const QUuid &ns, const QByteArray &baseData)
{
return createFromName(ns, baseData, QCryptographicHash::Md5, 3);
}
+#endif
QUuid QUuid::createUuidV5(const QUuid &ns, const QByteArray &baseData)
{
return createFromName(ns, baseData, QCryptographicHash::Sha1, 5);
}
-#endif
/*!
Creates a QUuid object from the binary representation of the UUID, as
@@ -592,6 +612,47 @@ QString QUuid::toString() const
}
/*!
+ \since 5.11
+
+ Returns the string representation of this QUuid, with the formattiong
+ controlled by the \a mode parameter. From left to right, the five hex
+ fields are obtained from the four public data members in QUuid as follows:
+
+ \table
+ \header
+ \li Field #
+ \li Source
+
+ \row
+ \li 1
+ \li data1
+
+ \row
+ \li 2
+ \li data2
+
+ \row
+ \li 3
+ \li data3
+
+ \row
+ \li 4
+ \li data4[0] .. data4[1]
+
+ \row
+ \li 5
+ \li data4[2] .. data4[7]
+
+ \endtable
+*/
+QString QUuid::toString(QUuid::StringFormat mode) const
+{
+ char latin1[MaxStringUuidLength];
+ const auto end = _q_uuidToHex(*this, latin1, mode);
+ return QString::fromLatin1(latin1, end - latin1);
+}
+
+/*!
Returns the binary representation of this QUuid. The byte array is
formatted as five hex fields separated by '-' and enclosed in
curly braces, i.e., "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" where
@@ -637,6 +698,48 @@ QByteArray QUuid::toByteArray() const
}
/*!
+ \since 5.11
+
+ Returns the string representation of this QUuid, with the formattiong
+ controlled by the \a mode parameter. From left to right, the five hex
+ fields are obtained from the four public data members in QUuid as follows:
+
+ \table
+ \header
+ \li Field #
+ \li Source
+
+ \row
+ \li 1
+ \li data1
+
+ \row
+ \li 2
+ \li data2
+
+ \row
+ \li 3
+ \li data3
+
+ \row
+ \li 4
+ \li data4[0] .. data4[1]
+
+ \row
+ \li 5
+ \li data4[2] .. data4[7]
+
+ \endtable
+*/
+QByteArray QUuid::toByteArray(QUuid::StringFormat mode) const
+{
+ QByteArray result(MaxStringUuidLength, Qt::Uninitialized);
+ const auto end = _q_uuidToHex(*this, const_cast<char*>(result.constData()), mode);
+ result.resize(end - result.constData());
+ return result;
+}
+
+/*!
Returns the binary representation of this QUuid. The byte array is in big
endian format, and formatted according to RFC 4122, section 4.1.2 -
"Layout and byte order".
diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h
index 9e1a35f492..08a1843640 100644
--- a/src/corelib/plugin/quuid.h
+++ b/src/corelib/plugin/quuid.h
@@ -42,7 +42,7 @@
#include <QtCore/qstring.h>
-#if defined(Q_OS_WIN)
+#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID
@@ -55,7 +55,7 @@ typedef struct _GUID
#endif
#endif
-#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
+#if defined(Q_OS_DARWIN) || defined(Q_CLANG_QDOC)
Q_FORWARD_DECLARE_CF_TYPE(CFUUID);
Q_FORWARD_DECLARE_OBJC_CLASS(NSUUID);
#endif
@@ -85,7 +85,14 @@ public:
Sha1 = 5 // 0 1 0 1
};
-#if defined(Q_COMPILER_UNIFORM_INIT) && !defined(Q_QDOC)
+ enum StringFormat {
+ WithBraces = 0,
+ WithoutBraces = 1,
+ Id128 = 3
+ };
+
+#if defined(Q_COMPILER_UNIFORM_INIT) && !defined(Q_CLANG_QDOC)
+
Q_DECL_CONSTEXPR QUuid() Q_DECL_NOTHROW : data1(0), data2(0), data3(0), data4{0,0,0,0,0,0,0,0} {}
Q_DECL_CONSTEXPR QUuid(uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3,
@@ -121,8 +128,10 @@ public:
static QUuid fromString(QLatin1String string) Q_DECL_NOTHROW;
QUuid(const char *);
QString toString() const;
+ QString toString(StringFormat mode) const; // ### Qt6: merge with previous
QUuid(const QByteArray &);
QByteArray toByteArray() const;
+ QByteArray toByteArray(StringFormat mode) const; // ### Qt6: merge with previous
QByteArray toRfc4122() const;
static QUuid fromRfc4122(const QByteArray &);
bool isNull() const Q_DECL_NOTHROW;
@@ -148,10 +157,10 @@ public:
bool operator<(const QUuid &other) const Q_DECL_NOTHROW;
bool operator>(const QUuid &other) const Q_DECL_NOTHROW;
-#if defined(Q_OS_WIN)
+#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
// On Windows we have a type GUID that is used by the platform API, so we
// provide convenience operators to cast from and to this type.
-#if defined(Q_COMPILER_UNIFORM_INIT) && !defined(Q_QDOC)
+#if defined(Q_COMPILER_UNIFORM_INIT) && !defined(Q_CLANG_QDOC)
Q_DECL_CONSTEXPR QUuid(const GUID &guid) Q_DECL_NOTHROW
: data1(guid.Data1), data2(guid.Data2), data3(guid.Data3),
data4{guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
@@ -192,23 +201,25 @@ public:
static QUuid createUuid();
#ifndef QT_BOOTSTRAPPED
static QUuid createUuidV3(const QUuid &ns, const QByteArray &baseData);
+#endif
static QUuid createUuidV5(const QUuid &ns, const QByteArray &baseData);
+#ifndef QT_BOOTSTRAPPED
static inline QUuid createUuidV3(const QUuid &ns, const QString &baseData)
{
return QUuid::createUuidV3(ns, baseData.toUtf8());
}
+#endif
static inline QUuid createUuidV5(const QUuid &ns, const QString &baseData)
{
return QUuid::createUuidV5(ns, baseData.toUtf8());
}
-#endif
QUuid::Variant variant() const Q_DECL_NOTHROW;
QUuid::Version version() const Q_DECL_NOTHROW;
-#if defined(Q_OS_DARWIN) || defined(Q_QDOC)
+#if defined(Q_OS_DARWIN) || defined(Q_CLANG_QDOC)
static QUuid fromCFUUID(CFUUIDRef uuid);
CFUUIDRef toCFUUID() const Q_DECL_CF_RETURNS_RETAINED;
static QUuid fromNSUUID(const NSUUID *uuid);
diff --git a/src/corelib/qtcore.tracepoints b/src/corelib/qtcore.tracepoints
new file mode 100644
index 0000000000..e6b666ac74
--- /dev/null
+++ b/src/corelib/qtcore.tracepoints
@@ -0,0 +1,5 @@
+qcoreapplicationprivate_init_entry()
+qcoreapplicationprivate_init_exit()
+qfactoryloader_update(const QString &fileName)
+qlibraryprivate_load_entry(const QString &fileName)
+qlibraryprivate_load_exit(bool success)
diff --git a/src/corelib/xml/.gitignore b/src/corelib/serialization/.gitignore
index 89f9ac04aa..89f9ac04aa 100644
--- a/src/corelib/xml/.gitignore
+++ b/src/corelib/serialization/.gitignore
diff --git a/src/corelib/xml/make-parser.sh b/src/corelib/serialization/make-xml-parser.sh
index 0296e4c22b..0296e4c22b 100755
--- a/src/corelib/xml/make-parser.sh
+++ b/src/corelib/serialization/make-xml-parser.sh
diff --git a/src/corelib/serialization/qdatastream.cpp b/src/corelib/serialization/qdatastream.cpp
new file mode 100644
index 0000000000..8f419a4a46
--- /dev/null
+++ b/src/corelib/serialization/qdatastream.cpp
@@ -0,0 +1,1400 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdatastream.h"
+#include "qdatastream_p.h"
+
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
+#include "qbuffer.h"
+#include "qfloat16.h"
+#include "qstring.h"
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include "qendian.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QDataStream
+ \inmodule QtCore
+ \reentrant
+ \brief The QDataStream class provides serialization of binary data
+ to a QIODevice.
+
+ \ingroup io
+
+
+ A data stream is a binary stream of encoded information which is
+ 100% independent of the host computer's operating system, CPU or
+ byte order. For example, a data stream that is written by a PC
+ under Windows can be read by a Sun SPARC running Solaris.
+
+ You can also use a data stream to read/write \l{raw}{raw
+ unencoded binary data}. If you want a "parsing" input stream, see
+ QTextStream.
+
+ The QDataStream class implements the serialization of C++'s basic
+ data types, like \c char, \c short, \c int, \c{char *}, etc.
+ Serialization of more complex data is accomplished by breaking up
+ the data into primitive units.
+
+ A data stream cooperates closely with a QIODevice. A QIODevice
+ represents an input/output medium one can read data from and write
+ data to. The QFile class is an example of an I/O device.
+
+ Example (write binary data to a stream):
+
+ \snippet code/src_corelib_io_qdatastream.cpp 0
+
+ Example (read binary data from a stream):
+
+ \snippet code/src_corelib_io_qdatastream.cpp 1
+
+ Each item written to the stream is written in a predefined binary
+ format that varies depending on the item's type. Supported Qt
+ types include QBrush, QColor, QDateTime, QFont, QPixmap, QString,
+ QVariant and many others. For the complete list of all Qt types
+ supporting data streaming see \l{Serializing Qt Data Types}.
+
+ For integers it is best to always cast to a Qt integer type for
+ writing, and to read back into the same Qt integer type. This
+ ensures that you get integers of the size you want and insulates
+ you from compiler and platform differences.
+
+ To take one example, a \c{char *} string is written as a 32-bit
+ integer equal to the length of the string including the '\\0' byte,
+ followed by all the characters of the string including the
+ '\\0' byte. When reading a \c{char *} string, 4 bytes are read to
+ create the 32-bit length value, then that many characters for the
+ \c {char *} string including the '\\0' terminator are read.
+
+ The initial I/O device is usually set in the constructor, but can be
+ changed with setDevice(). If you've reached the end of the data
+ (or if there is no I/O device set) atEnd() will return true.
+
+ \section1 Versioning
+
+ QDataStream's binary format has evolved since Qt 1.0, and is
+ likely to continue evolving to reflect changes done in Qt. When
+ inputting or outputting complex types, it's very important to
+ make sure that the same version of the stream (version()) is used
+ for reading and writing. If you need both forward and backward
+ compatibility, you can hardcode the version number in the
+ application:
+
+ \snippet code/src_corelib_io_qdatastream.cpp 2
+
+ If you are producing a new binary data format, such as a file
+ format for documents created by your application, you could use a
+ QDataStream to write the data in a portable format. Typically, you
+ would write a brief header containing a magic string and a version
+ number to give yourself room for future expansion. For example:
+
+ \snippet code/src_corelib_io_qdatastream.cpp 3
+
+ Then read it in with:
+
+ \snippet code/src_corelib_io_qdatastream.cpp 4
+
+ You can select which byte order to use when serializing data. The
+ default setting is big endian (MSB first). Changing it to little
+ endian breaks the portability (unless the reader also changes to
+ little endian). We recommend keeping this setting unless you have
+ special requirements.
+
+ \target raw
+ \section1 Reading and Writing Raw Binary Data
+
+ You may wish to read/write your own raw binary data to/from the
+ data stream directly. Data may be read from the stream into a
+ preallocated \c{char *} using readRawData(). Similarly data can be
+ written to the stream using writeRawData(). Note that any
+ encoding/decoding of the data must be done by you.
+
+ A similar pair of functions is readBytes() and writeBytes(). These
+ differ from their \e raw counterparts as follows: readBytes()
+ reads a quint32 which is taken to be the length of the data to be
+ read, then that number of bytes is read into the preallocated
+ \c{char *}; writeBytes() writes a quint32 containing the length of the
+ data, followed by the data. Note that any encoding/decoding of
+ the data (apart from the length quint32) must be done by you.
+
+ \section1 Reading and Writing Qt Collection Classes
+
+ The Qt container classes can also be serialized to a QDataStream.
+ These include QList, QLinkedList, QVector, QSet, QHash, and QMap.
+ The stream operators are declared as non-members of the classes.
+
+ \target Serializing Qt Classes
+ \section1 Reading and Writing Other Qt Classes
+
+ In addition to the overloaded stream operators documented here,
+ any Qt classes that you might want to serialize to a QDataStream
+ will have appropriate stream operators declared as non-member of
+ the class:
+
+ \code
+ QDataStream &operator<<(QDataStream &, const QXxx &);
+ QDataStream &operator>>(QDataStream &, QXxx &);
+ \endcode
+
+ For example, here are the stream operators declared as non-members
+ of the QImage class:
+
+ \code
+ QDataStream & operator<< (QDataStream& stream, const QImage& image);
+ QDataStream & operator>> (QDataStream& stream, QImage& image);
+ \endcode
+
+ To see if your favorite Qt class has similar stream operators
+ defined, check the \b {Related Non-Members} section of the
+ class's documentation page.
+
+ \section1 Using Read Transactions
+
+ When a data stream operates on an asynchronous device, the chunks of data
+ can arrive at arbitrary points in time. The QDataStream class implements
+ a transaction mechanism that provides the ability to read the data
+ atomically with a series of stream operators. As an example, you can
+ handle incomplete reads from a socket by using a transaction in a slot
+ connected to the readyRead() signal:
+
+ \snippet code/src_corelib_io_qdatastream.cpp 6
+
+ If no full packet is received, this code restores the stream to the
+ initial position, after which you need to wait for more data to arrive.
+
+ \sa QTextStream, QVariant
+*/
+
+/*!
+ \enum QDataStream::ByteOrder
+
+ The byte order used for reading/writing the data.
+
+ \value BigEndian Most significant byte first (the default)
+ \value LittleEndian Least significant byte first
+*/
+
+/*!
+ \enum QDataStream::FloatingPointPrecision
+
+ The precision of floating point numbers used for reading/writing the data. This will only have
+ an effect if the version of the data stream is Qt_4_6 or higher.
+
+ \warning The floating point precision must be set to the same value on the object that writes
+ and the object that reads the data stream.
+
+ \value SinglePrecision All floating point numbers in the data stream have 32-bit precision.
+ \value DoublePrecision All floating point numbers in the data stream have 64-bit precision.
+
+ \sa setFloatingPointPrecision(), floatingPointPrecision()
+*/
+
+/*!
+ \enum QDataStream::Status
+
+ This enum describes the current status of the data stream.
+
+ \value Ok The data stream is operating normally.
+ \value ReadPastEnd The data stream has read past the end of the
+ data in the underlying device.
+ \value ReadCorruptData The data stream has read corrupt data.
+ \value WriteFailed The data stream cannot write to the underlying device.
+*/
+
+/*****************************************************************************
+ QDataStream member functions
+ *****************************************************************************/
+
+#define Q_VOID
+
+#undef CHECK_STREAM_PRECOND
+#ifndef QT_NO_DEBUG
+#define CHECK_STREAM_PRECOND(retVal) \
+ if (!dev) { \
+ qWarning("QDataStream: No device"); \
+ return retVal; \
+ }
+#else
+#define CHECK_STREAM_PRECOND(retVal) \
+ if (!dev) { \
+ return retVal; \
+ }
+#endif
+
+#define CHECK_STREAM_WRITE_PRECOND(retVal) \
+ CHECK_STREAM_PRECOND(retVal) \
+ if (q_status != Ok) \
+ return retVal;
+
+#define CHECK_STREAM_TRANSACTION_PRECOND(retVal) \
+ if (!d || d->transactionDepth == 0) { \
+ qWarning("QDataStream: No transaction in progress"); \
+ return retVal; \
+ }
+
+/*!
+ Constructs a data stream that has no I/O device.
+
+ \sa setDevice()
+*/
+
+QDataStream::QDataStream()
+{
+ dev = 0;
+ owndev = false;
+ byteorder = BigEndian;
+ ver = Qt_DefaultCompiledVersion;
+ noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
+ q_status = Ok;
+}
+
+/*!
+ Constructs a data stream that uses the I/O device \a d.
+
+ \sa setDevice(), device()
+*/
+
+QDataStream::QDataStream(QIODevice *d)
+{
+ dev = d; // set device
+ owndev = false;
+ byteorder = BigEndian; // default byte order
+ ver = Qt_DefaultCompiledVersion;
+ noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
+ q_status = Ok;
+}
+
+/*!
+ \fn QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode mode)
+
+ Constructs a data stream that operates on a byte array, \a a. The
+ \a mode describes how the device is to be used.
+
+ Alternatively, you can use QDataStream(const QByteArray &) if you
+ just want to read from a byte array.
+
+ Since QByteArray is not a QIODevice subclass, internally a QBuffer
+ is created to wrap the byte array.
+*/
+
+QDataStream::QDataStream(QByteArray *a, QIODevice::OpenMode flags)
+{
+ QBuffer *buf = new QBuffer(a);
+#ifndef QT_NO_QOBJECT
+ buf->blockSignals(true);
+#endif
+ buf->open(flags);
+ dev = buf;
+ owndev = true;
+ byteorder = BigEndian;
+ ver = Qt_DefaultCompiledVersion;
+ noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
+ q_status = Ok;
+}
+
+/*!
+ Constructs a read-only data stream that operates on byte array \a a.
+ Use QDataStream(QByteArray*, int) if you want to write to a byte
+ array.
+
+ Since QByteArray is not a QIODevice subclass, internally a QBuffer
+ is created to wrap the byte array.
+*/
+QDataStream::QDataStream(const QByteArray &a)
+{
+ QBuffer *buf = new QBuffer;
+#ifndef QT_NO_QOBJECT
+ buf->blockSignals(true);
+#endif
+ buf->setData(a);
+ buf->open(QIODevice::ReadOnly);
+ dev = buf;
+ owndev = true;
+ byteorder = BigEndian;
+ ver = Qt_DefaultCompiledVersion;
+ noswap = QSysInfo::ByteOrder == QSysInfo::BigEndian;
+ q_status = Ok;
+}
+
+/*!
+ Destroys the data stream.
+
+ The destructor will not affect the current I/O device, unless it is
+ an internal I/O device (e.g. a QBuffer) processing a QByteArray
+ passed in the \e constructor, in which case the internal I/O device
+ is destroyed.
+*/
+
+QDataStream::~QDataStream()
+{
+ if (owndev)
+ delete dev;
+}
+
+
+/*!
+ \fn QIODevice *QDataStream::device() const
+
+ Returns the I/O device currently set, or 0 if no
+ device is currently set.
+
+ \sa setDevice()
+*/
+
+/*!
+ void QDataStream::setDevice(QIODevice *d)
+
+ Sets the I/O device to \a d, which can be 0
+ to unset to current I/O device.
+
+ \sa device()
+*/
+
+void QDataStream::setDevice(QIODevice *d)
+{
+ if (owndev) {
+ delete dev;
+ owndev = false;
+ }
+ dev = d;
+}
+
+/*!
+ \obsolete
+ Unsets the I/O device.
+ Use setDevice(0) instead.
+*/
+
+void QDataStream::unsetDevice()
+{
+ setDevice(0);
+}
+
+
+/*!
+ \fn bool QDataStream::atEnd() const
+
+ Returns \c true if the I/O device has reached the end position (end of
+ the stream or file) or if there is no I/O device set; otherwise
+ returns \c false.
+
+ \sa QIODevice::atEnd()
+*/
+
+bool QDataStream::atEnd() const
+{
+ return dev ? dev->atEnd() : true;
+}
+
+/*!
+ Returns the floating point precision of the data stream.
+
+ \since 4.6
+
+ \sa FloatingPointPrecision, setFloatingPointPrecision()
+*/
+QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const
+{
+ return d == 0 ? QDataStream::DoublePrecision : d->floatingPointPrecision;
+}
+
+/*!
+ Sets the floating point precision of the data stream to \a precision. If the floating point precision is
+ DoublePrecision and the version of the data stream is Qt_4_6 or higher, all floating point
+ numbers will be written and read with 64-bit precision. If the floating point precision is
+ SinglePrecision and the version is Qt_4_6 or higher, all floating point numbers will be written
+ and read with 32-bit precision.
+
+ For versions prior to Qt_4_6, the precision of floating point numbers in the data stream depends
+ on the stream operator called.
+
+ The default is DoublePrecision.
+
+ Note that this property does not affect the serialization or deserialization of \c qfloat16
+ instances.
+
+ \warning This property must be set to the same value on the object that writes and the object
+ that reads the data stream.
+
+ \since 4.6
+*/
+void QDataStream::setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision)
+{
+ if (d == 0)
+ d.reset(new QDataStreamPrivate());
+ d->floatingPointPrecision = precision;
+}
+
+/*!
+ Returns the status of the data stream.
+
+ \sa Status, setStatus(), resetStatus()
+*/
+
+QDataStream::Status QDataStream::status() const
+{
+ return q_status;
+}
+
+/*!
+ Resets the status of the data stream.
+
+ \sa Status, status(), setStatus()
+*/
+void QDataStream::resetStatus()
+{
+ q_status = Ok;
+}
+
+/*!
+ Sets the status of the data stream to the \a status given.
+
+ Subsequent calls to setStatus() are ignored until resetStatus()
+ is called.
+
+ \sa Status, status(), resetStatus()
+*/
+void QDataStream::setStatus(Status status)
+{
+ if (q_status == Ok)
+ q_status = status;
+}
+
+/*!
+ \fn int QDataStream::byteOrder() const
+
+ Returns the current byte order setting -- either BigEndian or
+ LittleEndian.
+
+ \sa setByteOrder()
+*/
+
+/*!
+ Sets the serialization byte order to \a bo.
+
+ The \a bo parameter can be QDataStream::BigEndian or
+ QDataStream::LittleEndian.
+
+ The default setting is big endian. We recommend leaving this
+ setting unless you have special requirements.
+
+ \sa byteOrder()
+*/
+
+void QDataStream::setByteOrder(ByteOrder bo)
+{
+ byteorder = bo;
+ if (QSysInfo::ByteOrder == QSysInfo::BigEndian)
+ noswap = (byteorder == BigEndian);
+ else
+ noswap = (byteorder == LittleEndian);
+}
+
+
+/*!
+ \enum QDataStream::Version
+
+ This enum provides symbolic synonyms for the data serialization
+ format version numbers.
+
+ \value Qt_1_0 Version 1 (Qt 1.x)
+ \value Qt_2_0 Version 2 (Qt 2.0)
+ \value Qt_2_1 Version 3 (Qt 2.1, 2.2, 2.3)
+ \value Qt_3_0 Version 4 (Qt 3.0)
+ \value Qt_3_1 Version 5 (Qt 3.1, 3.2)
+ \value Qt_3_3 Version 6 (Qt 3.3)
+ \value Qt_4_0 Version 7 (Qt 4.0, Qt 4.1)
+ \value Qt_4_1 Version 7 (Qt 4.0, Qt 4.1)
+ \value Qt_4_2 Version 8 (Qt 4.2)
+ \value Qt_4_3 Version 9 (Qt 4.3)
+ \value Qt_4_4 Version 10 (Qt 4.4)
+ \value Qt_4_5 Version 11 (Qt 4.5)
+ \value Qt_4_6 Version 12 (Qt 4.6, Qt 4.7, Qt 4.8)
+ \value Qt_4_7 Same as Qt_4_6.
+ \value Qt_4_8 Same as Qt_4_6.
+ \value Qt_4_9 Same as Qt_4_6.
+ \value Qt_5_0 Version 13 (Qt 5.0)
+ \value Qt_5_1 Version 14 (Qt 5.1)
+ \value Qt_5_2 Version 15 (Qt 5.2)
+ \value Qt_5_3 Same as Qt_5_2
+ \value Qt_5_4 Version 16 (Qt 5.4)
+ \value Qt_5_5 Same as Qt_5_4
+ \value Qt_5_6 Version 17 (Qt 5.6)
+ \value Qt_5_7 Same as Qt_5_6
+ \value Qt_5_8 Same as Qt_5_6
+ \value Qt_5_9 Same as Qt_5_6
+ \value Qt_5_10 Same as Qt_5_6
+ \value Qt_5_11 Same as Qt_5_6
+ \omitvalue Qt_DefaultCompiledVersion
+
+ \sa setVersion(), version()
+*/
+
+/*!
+ \fn int QDataStream::version() const
+
+ Returns the version number of the data serialization format.
+
+ \sa setVersion(), Version
+*/
+
+/*!
+ \fn void QDataStream::setVersion(int v)
+
+ Sets the version number of the data serialization format to \a v,
+ a value of the \l Version enum.
+
+ You don't \e have to set a version if you are using the current
+ version of Qt, but for your own custom binary formats we
+ recommend that you do; see \l{Versioning} in the Detailed
+ Description.
+
+ To accommodate new functionality, the datastream serialization
+ format of some Qt classes has changed in some versions of Qt. If
+ you want to read data that was created by an earlier version of
+ Qt, or write data that can be read by a program that was compiled
+ with an earlier version of Qt, use this function to modify the
+ serialization format used by QDataStream.
+
+ The \l Version enum provides symbolic constants for the different
+ versions of Qt. For example:
+
+ \snippet code/src_corelib_io_qdatastream.cpp 5
+
+ \sa version(), Version
+*/
+
+/*!
+ \since 5.7
+
+ Starts a new read transaction on the stream.
+
+ Defines a restorable point within the sequence of read operations. For
+ sequential devices, read data will be duplicated internally to allow
+ recovery in case of incomplete reads. For random-access devices,
+ this function saves the current position of the stream. Call
+ commitTransaction(), rollbackTransaction(), or abortTransaction() to
+ finish the current transaction.
+
+ Once a transaction is started, subsequent calls to this function will make
+ the transaction recursive. Inner transactions act as agents of the
+ outermost transaction (i.e., report the status of read operations to the
+ outermost transaction, which can restore the position of the stream).
+
+ \note Restoring to the point of the nested startTransaction() call is not
+ supported.
+
+ When an error occurs during a transaction (including an inner transaction
+ failing), reading from the data stream is suspended (all subsequent read
+ operations return empty/zero values) and subsequent inner transactions are
+ forced to fail. Starting a new outermost transaction recovers from this
+ state. This behavior makes it unnecessary to error-check every read
+ operation separately.
+
+ \sa commitTransaction(), rollbackTransaction(), abortTransaction()
+*/
+
+void QDataStream::startTransaction()
+{
+ CHECK_STREAM_PRECOND(Q_VOID)
+
+ if (d == 0)
+ d.reset(new QDataStreamPrivate());
+
+ if (++d->transactionDepth == 1) {
+ dev->startTransaction();
+ resetStatus();
+ }
+}
+
+/*!
+ \since 5.7
+
+ Completes a read transaction. Returns \c true if no read errors have
+ occurred during the transaction; otherwise returns \c false.
+
+ If called on an inner transaction, committing will be postponed until
+ the outermost commitTransaction(), rollbackTransaction(), or
+ abortTransaction() call occurs.
+
+ Otherwise, if the stream status indicates reading past the end of the
+ data, this function restores the stream data to the point of the
+ startTransaction() call. When this situation occurs, you need to wait for
+ more data to arrive, after which you start a new transaction. If the data
+ stream has read corrupt data or any of the inner transactions was aborted,
+ this function aborts the transaction.
+
+ \sa startTransaction(), rollbackTransaction(), abortTransaction()
+*/
+
+bool QDataStream::commitTransaction()
+{
+ CHECK_STREAM_TRANSACTION_PRECOND(false)
+ if (--d->transactionDepth == 0) {
+ CHECK_STREAM_PRECOND(false)
+
+ if (q_status == ReadPastEnd) {
+ dev->rollbackTransaction();
+ return false;
+ }
+ dev->commitTransaction();
+ }
+ return q_status == Ok;
+}
+
+/*!
+ \since 5.7
+
+ Reverts a read transaction.
+
+ This function is commonly used to rollback the transaction when an
+ incomplete read was detected prior to committing the transaction.
+
+ If called on an inner transaction, reverting is delegated to the outermost
+ transaction, and subsequently started inner transactions are forced to
+ fail.
+
+ For the outermost transaction, restores the stream data to the point of
+ the startTransaction() call. If the data stream has read corrupt data or
+ any of the inner transactions was aborted, this function aborts the
+ transaction.
+
+ If the preceding stream operations were successful, sets the status of the
+ data stream to \value ReadPastEnd.
+
+ \sa startTransaction(), commitTransaction(), abortTransaction()
+*/
+
+void QDataStream::rollbackTransaction()
+{
+ setStatus(ReadPastEnd);
+
+ CHECK_STREAM_TRANSACTION_PRECOND(Q_VOID)
+ if (--d->transactionDepth != 0)
+ return;
+
+ CHECK_STREAM_PRECOND(Q_VOID)
+ if (q_status == ReadPastEnd)
+ dev->rollbackTransaction();
+ else
+ dev->commitTransaction();
+}
+
+/*!
+ \since 5.7
+
+ Aborts a read transaction.
+
+ This function is commonly used to discard the transaction after
+ higher-level protocol errors or loss of stream synchronization.
+
+ If called on an inner transaction, aborting is delegated to the outermost
+ transaction, and subsequently started inner transactions are forced to
+ fail.
+
+ For the outermost transaction, discards the restoration point and any
+ internally duplicated data of the stream. Will not affect the current
+ read position of the stream.
+
+ Sets the status of the data stream to \value ReadCorruptData.
+
+ \sa startTransaction(), commitTransaction(), rollbackTransaction()
+*/
+
+void QDataStream::abortTransaction()
+{
+ q_status = ReadCorruptData;
+
+ CHECK_STREAM_TRANSACTION_PRECOND(Q_VOID)
+ if (--d->transactionDepth != 0)
+ return;
+
+ CHECK_STREAM_PRECOND(Q_VOID)
+ dev->commitTransaction();
+}
+
+/*****************************************************************************
+ QDataStream read functions
+ *****************************************************************************/
+
+/*!
+ \internal
+*/
+
+int QDataStream::readBlock(char *data, int len)
+{
+ // Disable reads on failure in transacted stream
+ if (q_status != Ok && dev->isTransactionStarted())
+ return -1;
+
+ const int readResult = dev->read(data, len);
+ if (readResult != len)
+ setStatus(ReadPastEnd);
+ return readResult;
+}
+
+/*!
+ \fn QDataStream &QDataStream::operator>>(std::nullptr_t &ptr)
+ \since 5.9
+ \overload
+
+ Simulates reading a \c{std::nullptr_t} from the stream into \a ptr and
+ returns a reference to the stream. This function does not actually read
+ anything from the stream, as \c{std::nullptr_t} values are stored as 0
+ bytes.
+*/
+
+/*!
+ \fn QDataStream &QDataStream::operator>>(quint8 &i)
+ \overload
+
+ Reads an unsigned byte from the stream into \a i, and returns a
+ reference to the stream.
+*/
+
+/*!
+ Reads a signed byte from the stream into \a i, and returns a
+ reference to the stream.
+*/
+
+QDataStream &QDataStream::operator>>(qint8 &i)
+{
+ i = 0;
+ CHECK_STREAM_PRECOND(*this)
+ char c;
+ if (readBlock(&c, 1) == 1)
+ i = qint8(c);
+ return *this;
+}
+
+
+/*!
+ \fn QDataStream &QDataStream::operator>>(quint16 &i)
+ \overload
+
+ Reads an unsigned 16-bit integer from the stream into \a i, and
+ returns a reference to the stream.
+*/
+
+/*!
+ \overload
+
+ Reads a signed 16-bit integer from the stream into \a i, and
+ returns a reference to the stream.
+*/
+
+QDataStream &QDataStream::operator>>(qint16 &i)
+{
+ i = 0;
+ CHECK_STREAM_PRECOND(*this)
+ if (readBlock(reinterpret_cast<char *>(&i), 2) != 2) {
+ i = 0;
+ } else {
+ if (!noswap) {
+ i = qbswap(i);
+ }
+ }
+ return *this;
+}
+
+
+/*!
+ \fn QDataStream &QDataStream::operator>>(quint32 &i)
+ \overload
+
+ Reads an unsigned 32-bit integer from the stream into \a i, and
+ returns a reference to the stream.
+*/
+
+/*!
+ \overload
+
+ Reads a signed 32-bit integer from the stream into \a i, and
+ returns a reference to the stream.
+*/
+
+QDataStream &QDataStream::operator>>(qint32 &i)
+{
+ i = 0;
+ CHECK_STREAM_PRECOND(*this)
+ if (readBlock(reinterpret_cast<char *>(&i), 4) != 4) {
+ i = 0;
+ } else {
+ if (!noswap) {
+ i = qbswap(i);
+ }
+ }
+ return *this;
+}
+
+/*!
+ \fn QDataStream &QDataStream::operator>>(quint64 &i)
+ \overload
+
+ Reads an unsigned 64-bit integer from the stream, into \a i, and
+ returns a reference to the stream.
+*/
+
+/*!
+ \overload
+
+ Reads a signed 64-bit integer from the stream into \a i, and
+ returns a reference to the stream.
+*/
+
+QDataStream &QDataStream::operator>>(qint64 &i)
+{
+ i = qint64(0);
+ CHECK_STREAM_PRECOND(*this)
+ if (version() < 6) {
+ quint32 i1, i2;
+ *this >> i2 >> i1;
+ i = ((quint64)i1 << 32) + i2;
+ } else {
+ if (readBlock(reinterpret_cast<char *>(&i), 8) != 8) {
+ i = qint64(0);
+ } else {
+ if (!noswap) {
+ i = qbswap(i);
+ }
+ }
+ }
+ return *this;
+}
+
+/*!
+ Reads a boolean value from the stream into \a i. Returns a
+ reference to the stream.
+*/
+QDataStream &QDataStream::operator>>(bool &i)
+{
+ qint8 v;
+ *this >> v;
+ i = !!v;
+ return *this;
+}
+
+/*!
+ \overload
+
+ Reads a floating point number from the stream into \a f,
+ using the standard IEEE 754 format. Returns a reference to the
+ stream.
+
+ \sa setFloatingPointPrecision()
+*/
+
+QDataStream &QDataStream::operator>>(float &f)
+{
+ if (version() >= QDataStream::Qt_4_6
+ && floatingPointPrecision() == QDataStream::DoublePrecision) {
+ double d;
+ *this >> d;
+ f = d;
+ return *this;
+ }
+
+ f = 0.0f;
+ CHECK_STREAM_PRECOND(*this)
+ if (readBlock(reinterpret_cast<char *>(&f), 4) != 4) {
+ f = 0.0f;
+ } else {
+ if (!noswap) {
+ union {
+ float val1;
+ quint32 val2;
+ } x;
+ x.val2 = qbswap(*reinterpret_cast<quint32 *>(&f));
+ f = x.val1;
+ }
+ }
+ return *this;
+}
+
+/*!
+ \overload
+
+ Reads a floating point number from the stream into \a f,
+ using the standard IEEE 754 format. Returns a reference to the
+ stream.
+
+ \sa setFloatingPointPrecision()
+*/
+
+QDataStream &QDataStream::operator>>(double &f)
+{
+ if (version() >= QDataStream::Qt_4_6
+ && floatingPointPrecision() == QDataStream::SinglePrecision) {
+ float d;
+ *this >> d;
+ f = d;
+ return *this;
+ }
+
+ f = 0.0;
+ CHECK_STREAM_PRECOND(*this)
+ if (readBlock(reinterpret_cast<char *>(&f), 8) != 8) {
+ f = 0.0;
+ } else {
+ if (!noswap) {
+ union {
+ double val1;
+ quint64 val2;
+ } x;
+ x.val2 = qbswap(*reinterpret_cast<quint64 *>(&f));
+ f = x.val1;
+ }
+ }
+ return *this;
+}
+
+
+/*!
+ \overload
+ \since 5.9
+
+ Reads a floating point number from the stream into \a f,
+ using the standard IEEE 754 format. Returns a reference to the
+ stream.
+*/
+QDataStream &QDataStream::operator>>(qfloat16 &f)
+{
+ return *this >> reinterpret_cast<qint16&>(f);
+}
+
+
+/*!
+ \overload
+
+ Reads the '\\0'-terminated string \a s from the stream and returns
+ a reference to the stream.
+
+ The string is deserialized using \c{readBytes()}.
+
+ Space for the string is allocated using \c{new []} -- the caller must
+ destroy it with \c{delete []}.
+
+ \sa readBytes(), readRawData()
+*/
+
+QDataStream &QDataStream::operator>>(char *&s)
+{
+ uint len = 0;
+ return readBytes(s, len);
+}
+
+
+/*!
+ Reads the buffer \a s from the stream and returns a reference to
+ the stream.
+
+ The buffer \a s is allocated using \c{new []}. Destroy it with the
+ \c{delete []} operator.
+
+ The \a l parameter is set to the length of the buffer. If the
+ string read is empty, \a l is set to 0 and \a s is set to
+ a null pointer.
+
+ The serialization format is a quint32 length specifier first,
+ then \a l bytes of data.
+
+ \sa readRawData(), writeBytes()
+*/
+
+QDataStream &QDataStream::readBytes(char *&s, uint &l)
+{
+ s = 0;
+ l = 0;
+ CHECK_STREAM_PRECOND(*this)
+
+ quint32 len;
+ *this >> len;
+ if (len == 0)
+ return *this;
+
+ const quint32 Step = 1024 * 1024;
+ quint32 allocated = 0;
+ char *prevBuf = 0;
+ char *curBuf = 0;
+
+ do {
+ int blockSize = qMin(Step, len - allocated);
+ prevBuf = curBuf;
+ curBuf = new char[allocated + blockSize + 1];
+ if (prevBuf) {
+ memcpy(curBuf, prevBuf, allocated);
+ delete [] prevBuf;
+ }
+ if (readBlock(curBuf + allocated, blockSize) != blockSize) {
+ delete [] curBuf;
+ return *this;
+ }
+ allocated += blockSize;
+ } while (allocated < len);
+
+ s = curBuf;
+ s[len] = '\0';
+ l = (uint)len;
+ return *this;
+}
+
+/*!
+ Reads at most \a len bytes from the stream into \a s and returns the number of
+ bytes read. If an error occurs, this function returns -1.
+
+ The buffer \a s must be preallocated. The data is \e not encoded.
+
+ \sa readBytes(), QIODevice::read(), writeRawData()
+*/
+
+int QDataStream::readRawData(char *s, int len)
+{
+ CHECK_STREAM_PRECOND(-1)
+ return readBlock(s, len);
+}
+
+
+/*****************************************************************************
+ QDataStream write functions
+ *****************************************************************************/
+
+/*!
+ \fn QDataStream &QDataStream::operator<<(std::nullptr_t ptr)
+ \since 5.9
+ \overload
+
+ Simulates writing a \c{std::nullptr_t}, \a ptr, to the stream and returns a
+ reference to the stream. This function does not actually write anything to
+ the stream, as \c{std::nullptr_t} values are stored as 0 bytes.
+*/
+
+/*!
+ \fn QDataStream &QDataStream::operator<<(quint8 i)
+ \overload
+
+ Writes an unsigned byte, \a i, to the stream and returns a
+ reference to the stream.
+*/
+
+/*!
+ Writes a signed byte, \a i, to the stream and returns a reference
+ to the stream.
+*/
+
+QDataStream &QDataStream::operator<<(qint8 i)
+{
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ if (!dev->putChar(i))
+ q_status = WriteFailed;
+ return *this;
+}
+
+
+/*!
+ \fn QDataStream &QDataStream::operator<<(quint16 i)
+ \overload
+
+ Writes an unsigned 16-bit integer, \a i, to the stream and returns
+ a reference to the stream.
+*/
+
+/*!
+ \overload
+
+ Writes a signed 16-bit integer, \a i, to the stream and returns a
+ reference to the stream.
+*/
+
+QDataStream &QDataStream::operator<<(qint16 i)
+{
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ if (!noswap) {
+ i = qbswap(i);
+ }
+ if (dev->write((char *)&i, sizeof(qint16)) != sizeof(qint16))
+ q_status = WriteFailed;
+ return *this;
+}
+
+/*!
+ \overload
+
+ Writes a signed 32-bit integer, \a i, to the stream and returns a
+ reference to the stream.
+*/
+
+QDataStream &QDataStream::operator<<(qint32 i)
+{
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ if (!noswap) {
+ i = qbswap(i);
+ }
+ if (dev->write((char *)&i, sizeof(qint32)) != sizeof(qint32))
+ q_status = WriteFailed;
+ return *this;
+}
+
+/*!
+ \fn QDataStream &QDataStream::operator<<(quint64 i)
+ \overload
+
+ Writes an unsigned 64-bit integer, \a i, to the stream and returns a
+ reference to the stream.
+*/
+
+/*!
+ \overload
+
+ Writes a signed 64-bit integer, \a i, to the stream and returns a
+ reference to the stream.
+*/
+
+QDataStream &QDataStream::operator<<(qint64 i)
+{
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ if (version() < 6) {
+ quint32 i1 = i & 0xffffffff;
+ quint32 i2 = i >> 32;
+ *this << i2 << i1;
+ } else {
+ if (!noswap) {
+ i = qbswap(i);
+ }
+ if (dev->write((char *)&i, sizeof(qint64)) != sizeof(qint64))
+ q_status = WriteFailed;
+ }
+ return *this;
+}
+
+/*!
+ \fn QDataStream &QDataStream::operator<<(quint32 i)
+ \overload
+
+ Writes an unsigned integer, \a i, to the stream as a 32-bit
+ unsigned integer (quint32). Returns a reference to the stream.
+*/
+
+/*!
+ Writes a boolean value, \a i, to the stream. Returns a reference
+ to the stream.
+*/
+
+QDataStream &QDataStream::operator<<(bool i)
+{
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ if (!dev->putChar(qint8(i)))
+ q_status = WriteFailed;
+ return *this;
+}
+
+/*!
+ \overload
+
+ Writes a floating point number, \a f, to the stream using
+ the standard IEEE 754 format. Returns a reference to the stream.
+
+ \sa setFloatingPointPrecision()
+*/
+
+QDataStream &QDataStream::operator<<(float f)
+{
+ if (version() >= QDataStream::Qt_4_6
+ && floatingPointPrecision() == QDataStream::DoublePrecision) {
+ *this << double(f);
+ return *this;
+ }
+
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ float g = f; // fixes float-on-stack problem
+ if (!noswap) {
+ union {
+ float val1;
+ quint32 val2;
+ } x;
+ x.val1 = g;
+ x.val2 = qbswap(x.val2);
+
+ if (dev->write((char *)&x.val2, sizeof(float)) != sizeof(float))
+ q_status = WriteFailed;
+ return *this;
+ }
+
+ if (dev->write((char *)&g, sizeof(float)) != sizeof(float))
+ q_status = WriteFailed;
+ return *this;
+}
+
+
+/*!
+ \overload
+
+ Writes a floating point number, \a f, to the stream using
+ the standard IEEE 754 format. Returns a reference to the stream.
+
+ \sa setFloatingPointPrecision()
+*/
+
+QDataStream &QDataStream::operator<<(double f)
+{
+ if (version() >= QDataStream::Qt_4_6
+ && floatingPointPrecision() == QDataStream::SinglePrecision) {
+ *this << float(f);
+ return *this;
+ }
+
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ if (noswap) {
+ if (dev->write((char *)&f, sizeof(double)) != sizeof(double))
+ q_status = WriteFailed;
+ } else {
+ union {
+ double val1;
+ quint64 val2;
+ } x;
+ x.val1 = f;
+ x.val2 = qbswap(x.val2);
+ if (dev->write((char *)&x.val2, sizeof(double)) != sizeof(double))
+ q_status = WriteFailed;
+ }
+ return *this;
+}
+
+
+/*!
+ \fn QDataStream &QDataStream::operator<<(qfloat16 f)
+ \overload
+ \since 5.9
+
+ Writes a floating point number, \a f, to the stream using
+ the standard IEEE 754 format. Returns a reference to the stream.
+*/
+QDataStream &QDataStream::operator<<(qfloat16 f)
+{
+ return *this << reinterpret_cast<qint16&>(f);
+}
+
+/*!
+ \overload
+
+ Writes the '\\0'-terminated string \a s to the stream and returns a
+ reference to the stream.
+
+ The string is serialized using \c{writeBytes()}.
+
+ \sa writeBytes(), writeRawData()
+*/
+
+QDataStream &QDataStream::operator<<(const char *s)
+{
+ if (!s) {
+ *this << (quint32)0;
+ return *this;
+ }
+ uint len = qstrlen(s) + 1; // also write null terminator
+ *this << (quint32)len; // write length specifier
+ writeRawData(s, len);
+ return *this;
+}
+
+/*!
+ Writes the length specifier \a len and the buffer \a s to the
+ stream and returns a reference to the stream.
+
+ The \a len is serialized as a quint32, followed by \a len bytes
+ from \a s. Note that the data is \e not encoded.
+
+ \sa writeRawData(), readBytes()
+*/
+
+QDataStream &QDataStream::writeBytes(const char *s, uint len)
+{
+ CHECK_STREAM_WRITE_PRECOND(*this)
+ *this << (quint32)len; // write length specifier
+ if (len)
+ writeRawData(s, len);
+ return *this;
+}
+
+
+/*!
+ Writes \a len bytes from \a s to the stream. Returns the
+ number of bytes actually written, or -1 on error.
+ The data is \e not encoded.
+
+ \sa writeBytes(), QIODevice::write(), readRawData()
+*/
+
+int QDataStream::writeRawData(const char *s, int len)
+{
+ CHECK_STREAM_WRITE_PRECOND(-1)
+ int ret = dev->write(s, len);
+ if (ret != len)
+ q_status = WriteFailed;
+ return ret;
+}
+
+/*!
+ \since 4.1
+
+ Skips \a len bytes from the device. Returns the number of bytes
+ actually skipped, or -1 on error.
+
+ This is equivalent to calling readRawData() on a buffer of length
+ \a len and ignoring the buffer.
+
+ \sa QIODevice::seek()
+*/
+int QDataStream::skipRawData(int len)
+{
+ CHECK_STREAM_PRECOND(-1)
+ if (q_status != Ok && dev->isTransactionStarted())
+ return -1;
+
+ const int skipResult = dev->skip(len);
+ if (skipResult != len)
+ setStatus(ReadPastEnd);
+ return skipResult;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_DATASTREAM
diff --git a/src/corelib/serialization/qdatastream.h b/src/corelib/serialization/qdatastream.h
new file mode 100644
index 0000000000..1f1b13686c
--- /dev/null
+++ b/src/corelib/serialization/qdatastream.h
@@ -0,0 +1,466 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDATASTREAM_H
+#define QDATASTREAM_H
+
+#include <QtCore/qscopedpointer.h>
+#include <QtCore/qiodevice.h>
+#include <QtCore/qpair.h>
+
+#ifdef Status
+#error qdatastream.h must be included before any header file that defines Status
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class qfloat16;
+class QByteArray;
+class QIODevice;
+
+template <typename T> class QList;
+template <typename T> class QLinkedList;
+template <typename T> class QVector;
+template <typename T> class QSet;
+template <class Key, class T> class QHash;
+template <class Key, class T> class QMap;
+
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
+class QDataStreamPrivate;
+namespace QtPrivate {
+class StreamStateSaver;
+}
+class Q_CORE_EXPORT QDataStream
+{
+public:
+ enum Version {
+ Qt_1_0 = 1,
+ Qt_2_0 = 2,
+ Qt_2_1 = 3,
+ Qt_3_0 = 4,
+ Qt_3_1 = 5,
+ Qt_3_3 = 6,
+ Qt_4_0 = 7,
+ Qt_4_1 = Qt_4_0,
+ Qt_4_2 = 8,
+ Qt_4_3 = 9,
+ Qt_4_4 = 10,
+ Qt_4_5 = 11,
+ Qt_4_6 = 12,
+ Qt_4_7 = Qt_4_6,
+ Qt_4_8 = Qt_4_7,
+ Qt_4_9 = Qt_4_8,
+ Qt_5_0 = 13,
+ Qt_5_1 = 14,
+ Qt_5_2 = 15,
+ Qt_5_3 = Qt_5_2,
+ Qt_5_4 = 16,
+ Qt_5_5 = Qt_5_4,
+ Qt_5_6 = 17,
+ Qt_5_7 = Qt_5_6,
+ Qt_5_8 = Qt_5_7,
+ Qt_5_9 = Qt_5_8,
+ Qt_5_10 = Qt_5_9,
+ Qt_5_11 = Qt_5_10,
+#if QT_VERSION >= 0x050c00
+#error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion
+#endif
+ Qt_DefaultCompiledVersion = Qt_5_11
+ };
+
+ enum ByteOrder {
+ BigEndian = QSysInfo::BigEndian,
+ LittleEndian = QSysInfo::LittleEndian
+ };
+
+ enum Status {
+ Ok,
+ ReadPastEnd,
+ ReadCorruptData,
+ WriteFailed
+ };
+
+ enum FloatingPointPrecision {
+ SinglePrecision,
+ DoublePrecision
+ };
+
+ QDataStream();
+ explicit QDataStream(QIODevice *);
+ QDataStream(QByteArray *, QIODevice::OpenMode flags);
+ QDataStream(const QByteArray &);
+ ~QDataStream();
+
+ QIODevice *device() const;
+ void setDevice(QIODevice *);
+ void unsetDevice();
+
+ bool atEnd() const;
+
+ Status status() const;
+ void setStatus(Status status);
+ void resetStatus();
+
+ FloatingPointPrecision floatingPointPrecision() const;
+ void setFloatingPointPrecision(FloatingPointPrecision precision);
+
+ ByteOrder byteOrder() const;
+ void setByteOrder(ByteOrder);
+
+ int version() const;
+ void setVersion(int);
+
+ QDataStream &operator>>(qint8 &i);
+ QDataStream &operator>>(quint8 &i);
+ QDataStream &operator>>(qint16 &i);
+ QDataStream &operator>>(quint16 &i);
+ QDataStream &operator>>(qint32 &i);
+ QDataStream &operator>>(quint32 &i);
+ QDataStream &operator>>(qint64 &i);
+ QDataStream &operator>>(quint64 &i);
+ QDataStream &operator>>(std::nullptr_t &ptr) { ptr = nullptr; return *this; }
+
+ QDataStream &operator>>(bool &i);
+ QDataStream &operator>>(qfloat16 &f);
+ QDataStream &operator>>(float &f);
+ QDataStream &operator>>(double &f);
+ QDataStream &operator>>(char *&str);
+
+ QDataStream &operator<<(qint8 i);
+ QDataStream &operator<<(quint8 i);
+ QDataStream &operator<<(qint16 i);
+ QDataStream &operator<<(quint16 i);
+ QDataStream &operator<<(qint32 i);
+ QDataStream &operator<<(quint32 i);
+ QDataStream &operator<<(qint64 i);
+ QDataStream &operator<<(quint64 i);
+ QDataStream &operator<<(std::nullptr_t) { return *this; }
+ QDataStream &operator<<(bool i);
+ QDataStream &operator<<(qfloat16 f);
+ QDataStream &operator<<(float f);
+ QDataStream &operator<<(double f);
+ QDataStream &operator<<(const char *str);
+
+ QDataStream &readBytes(char *&, uint &len);
+ int readRawData(char *, int len);
+
+ QDataStream &writeBytes(const char *, uint len);
+ int writeRawData(const char *, int len);
+
+ int skipRawData(int len);
+
+ void startTransaction();
+ bool commitTransaction();
+ void rollbackTransaction();
+ void abortTransaction();
+
+private:
+ Q_DISABLE_COPY(QDataStream)
+
+ QScopedPointer<QDataStreamPrivate> d;
+
+ QIODevice *dev;
+ bool owndev;
+ bool noswap;
+ ByteOrder byteorder;
+ int ver;
+ Status q_status;
+
+ int readBlock(char *data, int len);
+ friend class QtPrivate::StreamStateSaver;
+};
+
+namespace QtPrivate {
+
+class StreamStateSaver
+{
+public:
+ inline StreamStateSaver(QDataStream *s) : stream(s), oldStatus(s->status())
+ {
+ if (!stream->dev || !stream->dev->isTransactionStarted())
+ stream->resetStatus();
+ }
+ inline ~StreamStateSaver()
+ {
+ if (oldStatus != QDataStream::Ok) {
+ stream->resetStatus();
+ stream->setStatus(oldStatus);
+ }
+ }
+
+private:
+ QDataStream *stream;
+ QDataStream::Status oldStatus;
+};
+
+template <typename Container>
+QDataStream &readArrayBasedContainer(QDataStream &s, Container &c)
+{
+ StreamStateSaver stateSaver(&s);
+
+ c.clear();
+ quint32 n;
+ s >> n;
+ c.reserve(n);
+ for (quint32 i = 0; i < n; ++i) {
+ typename Container::value_type t;
+ s >> t;
+ if (s.status() != QDataStream::Ok) {
+ c.clear();
+ break;
+ }
+ c.append(t);
+ }
+
+ return s;
+}
+
+template <typename Container>
+QDataStream &readListBasedContainer(QDataStream &s, Container &c)
+{
+ StreamStateSaver stateSaver(&s);
+
+ c.clear();
+ quint32 n;
+ s >> n;
+ for (quint32 i = 0; i < n; ++i) {
+ typename Container::value_type t;
+ s >> t;
+ if (s.status() != QDataStream::Ok) {
+ c.clear();
+ break;
+ }
+ c << t;
+ }
+
+ return s;
+}
+
+template <typename Container>
+QDataStream &readAssociativeContainer(QDataStream &s, Container &c)
+{
+ StreamStateSaver stateSaver(&s);
+
+ c.clear();
+ quint32 n;
+ s >> n;
+ for (quint32 i = 0; i < n; ++i) {
+ typename Container::key_type k;
+ typename Container::mapped_type t;
+ s >> k >> t;
+ if (s.status() != QDataStream::Ok) {
+ c.clear();
+ break;
+ }
+ c.insertMulti(k, t);
+ }
+
+ return s;
+}
+
+template <typename Container>
+QDataStream &writeSequentialContainer(QDataStream &s, const Container &c)
+{
+ s << quint32(c.size());
+ for (const typename Container::value_type &t : c)
+ s << t;
+
+ return s;
+}
+
+template <typename Container>
+QDataStream &writeAssociativeContainer(QDataStream &s, const Container &c)
+{
+ s << quint32(c.size());
+ // Deserialization should occur in the reverse order.
+ // Otherwise, value() will return the least recently inserted
+ // value instead of the most recently inserted one.
+ auto it = c.constEnd();
+ auto begin = c.constBegin();
+ while (it != begin) {
+ --it;
+ s << it.key() << it.value();
+ }
+
+ return s;
+}
+
+} // QtPrivate namespace
+
+/*****************************************************************************
+ QDataStream inline functions
+ *****************************************************************************/
+
+inline QIODevice *QDataStream::device() const
+{ return dev; }
+
+inline QDataStream::ByteOrder QDataStream::byteOrder() const
+{ return byteorder; }
+
+inline int QDataStream::version() const
+{ return ver; }
+
+inline void QDataStream::setVersion(int v)
+{ ver = v; }
+
+inline QDataStream &QDataStream::operator>>(quint8 &i)
+{ return *this >> reinterpret_cast<qint8&>(i); }
+
+inline QDataStream &QDataStream::operator>>(quint16 &i)
+{ return *this >> reinterpret_cast<qint16&>(i); }
+
+inline QDataStream &QDataStream::operator>>(quint32 &i)
+{ return *this >> reinterpret_cast<qint32&>(i); }
+
+inline QDataStream &QDataStream::operator>>(quint64 &i)
+{ return *this >> reinterpret_cast<qint64&>(i); }
+
+inline QDataStream &QDataStream::operator<<(quint8 i)
+{ return *this << qint8(i); }
+
+inline QDataStream &QDataStream::operator<<(quint16 i)
+{ return *this << qint16(i); }
+
+inline QDataStream &QDataStream::operator<<(quint32 i)
+{ return *this << qint32(i); }
+
+inline QDataStream &QDataStream::operator<<(quint64 i)
+{ return *this << qint64(i); }
+
+template <typename Enum>
+inline QDataStream &operator<<(QDataStream &s, QFlags<Enum> e)
+{ return s << e.i; }
+
+template <typename Enum>
+inline QDataStream &operator>>(QDataStream &s, QFlags<Enum> &e)
+{ return s >> e.i; }
+
+template <typename T>
+inline QDataStream &operator>>(QDataStream &s, QList<T> &l)
+{
+ return QtPrivate::readArrayBasedContainer(s, l);
+}
+
+template <typename T>
+inline QDataStream &operator<<(QDataStream &s, const QList<T> &l)
+{
+ return QtPrivate::writeSequentialContainer(s, l);
+}
+
+template <typename T>
+inline QDataStream &operator>>(QDataStream &s, QLinkedList<T> &l)
+{
+ return QtPrivate::readListBasedContainer(s, l);
+}
+
+template <typename T>
+inline QDataStream &operator<<(QDataStream &s, const QLinkedList<T> &l)
+{
+ return QtPrivate::writeSequentialContainer(s, l);
+}
+
+template<typename T>
+inline QDataStream &operator>>(QDataStream &s, QVector<T> &v)
+{
+ return QtPrivate::readArrayBasedContainer(s, v);
+}
+
+template<typename T>
+inline QDataStream &operator<<(QDataStream &s, const QVector<T> &v)
+{
+ return QtPrivate::writeSequentialContainer(s, v);
+}
+
+template <typename T>
+inline QDataStream &operator>>(QDataStream &s, QSet<T> &set)
+{
+ return QtPrivate::readListBasedContainer(s, set);
+}
+
+template <typename T>
+inline QDataStream &operator<<(QDataStream &s, const QSet<T> &set)
+{
+ return QtPrivate::writeSequentialContainer(s, set);
+}
+
+template <class Key, class T>
+inline QDataStream &operator>>(QDataStream &s, QHash<Key, T> &hash)
+{
+ return QtPrivate::readAssociativeContainer(s, hash);
+}
+
+template <class Key, class T>
+inline QDataStream &operator<<(QDataStream &s, const QHash<Key, T> &hash)
+{
+ return QtPrivate::writeAssociativeContainer(s, hash);
+}
+
+template <class Key, class T>
+inline QDataStream &operator>>(QDataStream &s, QMap<Key, T> &map)
+{
+ return QtPrivate::readAssociativeContainer(s, map);
+}
+
+template <class Key, class T>
+inline QDataStream &operator<<(QDataStream &s, const QMap<Key, T> &map)
+{
+ return QtPrivate::writeAssociativeContainer(s, map);
+}
+
+#ifndef QT_NO_DATASTREAM
+template <class T1, class T2>
+inline QDataStream& operator>>(QDataStream& s, QPair<T1, T2>& p)
+{
+ s >> p.first >> p.second;
+ return s;
+}
+
+template <class T1, class T2>
+inline QDataStream& operator<<(QDataStream& s, const QPair<T1, T2>& p)
+{
+ s << p.first << p.second;
+ return s;
+}
+#endif
+
+#endif // QT_NO_DATASTREAM
+
+QT_END_NAMESPACE
+
+#endif // QDATASTREAM_H
diff --git a/src/corelib/io/qdatastream_p.h b/src/corelib/serialization/qdatastream_p.h
index 3ca0ae840e..3ca0ae840e 100644
--- a/src/corelib/io/qdatastream_p.h
+++ b/src/corelib/serialization/qdatastream_p.h
diff --git a/src/corelib/json/qjson.cpp b/src/corelib/serialization/qjson.cpp
index e4bca3bcd0..e4bca3bcd0 100644
--- a/src/corelib/json/qjson.cpp
+++ b/src/corelib/serialization/qjson.cpp
diff --git a/src/corelib/serialization/qjson_p.h b/src/corelib/serialization/qjson_p.h
new file mode 100644
index 0000000000..7743382806
--- /dev/null
+++ b/src/corelib/serialization/qjson_p.h
@@ -0,0 +1,774 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2016 Intel Corporation.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJSON_P_H
+#define QJSON_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <qjsonobject.h>
+#include <qjsonvalue.h>
+#include <qjsondocument.h>
+#include <qjsonarray.h>
+#include <qatomic.h>
+#include <qstring.h>
+#include <qendian.h>
+#include <qnumeric.h>
+
+#include "private/qendian_p.h"
+#include "private/qsimd_p.h"
+
+#include <limits.h>
+#include <limits>
+
+QT_BEGIN_NAMESPACE
+
+/*
+ This defines a binary data structure for Json data. The data structure is optimised for fast reading
+ and minimum allocations. The whole data structure can be mmap'ed and used directly.
+
+ In most cases the binary structure is not as space efficient as a utf8 encoded text representation, but
+ much faster to access.
+
+ The size requirements are:
+
+ String:
+ Latin1 data: 2 bytes header + string.length()
+ Full Unicode: 4 bytes header + 2*(string.length())
+
+ Values: 4 bytes + size of data (size can be 0 for some data)
+ bool: 0 bytes
+ double: 8 bytes (0 if integer with less than 27bits)
+ string: see above
+ array: size of array
+ object: size of object
+ Array: 12 bytes + 4*length + size of Value data
+ Object: 12 bytes + 8*length + size of Key Strings + size of Value data
+
+ For an example such as
+
+ { // object: 12 + 5*8 = 52
+ "firstName": "John", // key 12, value 8 = 20
+ "lastName" : "Smith", // key 12, value 8 = 20
+ "age" : 25, // key 8, value 0 = 8
+ "address" : // key 12, object below = 140
+ { // object: 12 + 4*8
+ "streetAddress": "21 2nd Street", // key 16, value 16
+ "city" : "New York", // key 8, value 12
+ "state" : "NY", // key 8, value 4
+ "postalCode" : "10021" // key 12, value 8
+ }, // object total: 128
+ "phoneNumber": // key: 16, value array below = 172
+ [ // array: 12 + 2*4 + values below: 156
+ { // object 12 + 2*8
+ "type" : "home", // key 8, value 8
+ "number": "212 555-1234" // key 8, value 16
+ }, // object total: 68
+ { // object 12 + 2*8
+ "type" : "fax", // key 8, value 8
+ "number": "646 555-4567" // key 8, value 16
+ } // object total: 68
+ ] // array total: 156
+ } // great total: 412 bytes
+
+ The uncompressed text file used roughly 500 bytes, so in this case we end up using about
+ the same space as the text representation.
+
+ Other measurements have shown a slightly bigger binary size than a compact text
+ representation where all possible whitespace was stripped out.
+*/
+#define Q_DECLARE_JSONPRIVATE_TYPEINFO(Class, Flags) } Q_DECLARE_TYPEINFO(QJsonPrivate::Class, Flags); namespace QJsonPrivate {
+namespace QJsonPrivate {
+
+class Array;
+class Object;
+class Value;
+class Entry;
+
+template<typename T>
+using q_littleendian = QLEInteger<T>;
+
+typedef q_littleendian<short> qle_short;
+typedef q_littleendian<unsigned short> qle_ushort;
+typedef q_littleendian<int> qle_int;
+typedef q_littleendian<unsigned int> qle_uint;
+
+template<int pos, int width>
+using qle_bitfield = QLEIntegerBitfield<uint, pos, width>;
+
+template<int pos, int width>
+using qle_signedbitfield = QLEIntegerBitfield<int, pos, width>;
+
+typedef qle_uint offset;
+
+// round the size up to the next 4 byte boundary
+inline int alignedSize(int size) { return (size + 3) & ~3; }
+
+static inline bool useCompressed(const QString &s)
+{
+ if (s.length() >= 0x8000)
+ return false;
+ return QtPrivate::isLatin1(s);
+}
+
+static inline int qStringSize(const QString &string, bool compress)
+{
+ int l = 2 + string.length();
+ if (!compress)
+ l *= 2;
+ return alignedSize(l);
+}
+
+// returns INT_MAX if it can't compress it into 28 bits
+static inline int compressedNumber(double d)
+{
+ // this relies on details of how ieee floats are represented
+ const int exponent_off = 52;
+ const quint64 fraction_mask = 0x000fffffffffffffull;
+ const quint64 exponent_mask = 0x7ff0000000000000ull;
+
+ quint64 val;
+ memcpy (&val, &d, sizeof(double));
+ int exp = (int)((val & exponent_mask) >> exponent_off) - 1023;
+ if (exp < 0 || exp > 25)
+ return INT_MAX;
+
+ quint64 non_int = val & (fraction_mask >> exp);
+ if (non_int)
+ return INT_MAX;
+
+ bool neg = (val >> 63) != 0;
+ val &= fraction_mask;
+ val |= ((quint64)1 << 52);
+ int res = (int)(val >> (52 - exp));
+ return neg ? -res : res;
+}
+
+class Latin1String;
+
+class String
+{
+public:
+ explicit String(const char *data) { d = (Data *)data; }
+
+ struct Data {
+ qle_uint length;
+ qle_ushort utf16[1];
+ };
+
+ Data *d;
+
+ int byteSize() const { return sizeof(uint) + sizeof(ushort) * d->length; }
+ bool isValid(int maxSize) const {
+ // Check byteSize() <= maxSize, avoiding integer overflow
+ maxSize -= sizeof(uint);
+ return maxSize >= 0 && uint(d->length) <= maxSize / sizeof(ushort);
+ }
+
+ inline String &operator=(const QString &str)
+ {
+ d->length = str.length();
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ const ushort *uc = (const ushort *)str.unicode();
+ for (int i = 0; i < str.length(); ++i)
+ d->utf16[i] = uc[i];
+#else
+ memcpy(d->utf16, str.unicode(), str.length()*sizeof(ushort));
+#endif
+ if (str.length() & 1)
+ d->utf16[str.length()] = 0;
+ return *this;
+ }
+
+ inline bool operator ==(const QString &str) const {
+ int slen = str.length();
+ int l = d->length;
+ if (slen != l)
+ return false;
+ const ushort *s = (const ushort *)str.constData();
+ const qle_ushort *a = d->utf16;
+ const ushort *b = s;
+ while (l-- && *a == *b)
+ a++,b++;
+ return (l == -1);
+ }
+ inline bool operator !=(const QString &str) const {
+ return !operator ==(str);
+ }
+ inline bool operator >=(const QString &str) const {
+ // ###
+ return toString() >= str;
+ }
+
+ inline bool operator<(const Latin1String &str) const;
+ inline bool operator>=(const Latin1String &str) const { return !operator <(str); }
+ inline bool operator ==(const Latin1String &str) const;
+
+ inline bool operator ==(const String &str) const {
+ if (d->length != str.d->length)
+ return false;
+ return !memcmp(d->utf16, str.d->utf16, d->length*sizeof(ushort));
+ }
+ inline bool operator<(const String &other) const;
+ inline bool operator >=(const String &other) const { return !(*this < other); }
+
+ inline QString toString() const {
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ return QString((QChar *)d->utf16, d->length);
+#else
+ int l = d->length;
+ QString str(l, Qt::Uninitialized);
+ QChar *ch = str.data();
+ for (int i = 0; i < l; ++i)
+ ch[i] = QChar(d->utf16[i]);
+ return str;
+#endif
+ }
+
+};
+
+class Latin1String
+{
+public:
+ explicit Latin1String(const char *data) { d = (Data *)data; }
+
+ struct Data {
+ qle_ushort length;
+ char latin1[1];
+ };
+ Data *d;
+
+ int byteSize() const { return sizeof(ushort) + sizeof(char)*(d->length); }
+ bool isValid(int maxSize) const {
+ return byteSize() <= maxSize;
+ }
+
+ inline Latin1String &operator=(const QString &str)
+ {
+ int len = d->length = str.length();
+ uchar *l = (uchar *)d->latin1;
+ const ushort *uc = (const ushort *)str.unicode();
+ int i = 0;
+#ifdef __SSE2__
+ for ( ; i + 16 <= len; i += 16) {
+ __m128i chunk1 = _mm_loadu_si128((__m128i*)&uc[i]); // load
+ __m128i chunk2 = _mm_loadu_si128((__m128i*)&uc[i + 8]); // load
+ // pack the two vector to 16 x 8bits elements
+ const __m128i result = _mm_packus_epi16(chunk1, chunk2);
+ _mm_storeu_si128((__m128i*)&l[i], result); // store
+ }
+# ifdef Q_PROCESSOR_X86_64
+ // we can do one more round, of 8 characters
+ if (i + 8 <= len) {
+ __m128i chunk = _mm_loadu_si128((__m128i*)&uc[i]); // load
+ // pack with itself, we'll discard the high part anyway
+ chunk = _mm_packus_epi16(chunk, chunk);
+ // unaligned 64-bit store
+ qToUnaligned(_mm_cvtsi128_si64(chunk), l + i);
+ i += 8;
+ }
+# endif
+#endif
+ for ( ; i < len; ++i)
+ l[i] = uc[i];
+ for ( ; (quintptr)(l+i) & 0x3; ++i)
+ l[i] = 0;
+ return *this;
+ }
+
+ QLatin1String toQLatin1String() const Q_DECL_NOTHROW {
+ return QLatin1String(d->latin1, d->length);
+ }
+
+ inline bool operator<(const String &str) const
+ {
+ const qle_ushort *uc = (qle_ushort *) str.d->utf16;
+ if (!uc || *uc == 0)
+ return false;
+
+ const uchar *c = (uchar *)d->latin1;
+ const uchar *e = c + qMin((int)d->length, (int)str.d->length);
+
+ while (c < e) {
+ if (*c != *uc)
+ break;
+ ++c;
+ ++uc;
+ }
+ return (c == e ? (int)d->length < (int)str.d->length : *c < *uc);
+
+ }
+ inline bool operator ==(const String &str) const {
+ return (str == *this);
+ }
+ inline bool operator >=(const String &str) const {
+ return !(*this < str);
+ }
+
+ inline QString toString() const {
+ return QString::fromLatin1(d->latin1, d->length);
+ }
+};
+
+#define DEF_OP(op) \
+ inline bool operator op(Latin1String lhs, Latin1String rhs) Q_DECL_NOTHROW \
+ { \
+ return lhs.toQLatin1String() op rhs.toQLatin1String(); \
+ } \
+ inline bool operator op(QLatin1String lhs, Latin1String rhs) Q_DECL_NOTHROW \
+ { \
+ return lhs op rhs.toQLatin1String(); \
+ } \
+ inline bool operator op(Latin1String lhs, QLatin1String rhs) Q_DECL_NOTHROW \
+ { \
+ return lhs.toQLatin1String() op rhs; \
+ } \
+ inline bool operator op(const QString &lhs, Latin1String rhs) Q_DECL_NOTHROW \
+ { \
+ return lhs op rhs.toQLatin1String(); \
+ } \
+ inline bool operator op(Latin1String lhs, const QString &rhs) Q_DECL_NOTHROW \
+ { \
+ return lhs.toQLatin1String() op rhs; \
+ } \
+ /*end*/
+DEF_OP(==)
+DEF_OP(!=)
+DEF_OP(< )
+DEF_OP(> )
+DEF_OP(<=)
+DEF_OP(>=)
+#undef DEF_OP
+
+inline bool String::operator ==(const Latin1String &str) const
+{
+ if ((int)d->length != (int)str.d->length)
+ return false;
+ const qle_ushort *uc = d->utf16;
+ const qle_ushort *e = uc + d->length;
+ const uchar *c = (uchar *)str.d->latin1;
+
+ while (uc < e) {
+ if (*uc != *c)
+ return false;
+ ++uc;
+ ++c;
+ }
+ return true;
+}
+
+inline bool String::operator <(const String &other) const
+{
+ int alen = d->length;
+ int blen = other.d->length;
+ int l = qMin(alen, blen);
+ qle_ushort *a = d->utf16;
+ qle_ushort *b = other.d->utf16;
+
+ while (l-- && *a == *b)
+ a++,b++;
+ if (l==-1)
+ return (alen < blen);
+ return (ushort)*a < (ushort)*b;
+}
+
+inline bool String::operator<(const Latin1String &str) const
+{
+ const uchar *c = (uchar *) str.d->latin1;
+ if (!c || *c == 0)
+ return false;
+
+ const qle_ushort *uc = d->utf16;
+ const qle_ushort *e = uc + qMin((int)d->length, (int)str.d->length);
+
+ while (uc < e) {
+ if (*uc != *c)
+ break;
+ ++uc;
+ ++c;
+ }
+ return (uc == e ? (int)d->length < (int)str.d->length : (ushort)*uc < *c);
+
+}
+
+static inline void copyString(char *dest, const QString &str, bool compress)
+{
+ if (compress) {
+ Latin1String string(dest);
+ string = str;
+ } else {
+ String string(dest);
+ string = str;
+ }
+}
+
+
+/*
+ Base is the base class for both Object and Array. Both classe work more or less the same way.
+ The class starts with a header (defined by the struct below), then followed by data (the data for
+ values in the Array case and Entry's (see below) for objects.
+
+ After the data a table follows (tableOffset points to it) containing Value objects for Arrays, and
+ offsets from the beginning of the object to Entry's in the case of Object.
+
+ Entry's in the Object's table are lexicographically sorted by key in the table(). This allows the usage
+ of a binary search over the keys in an Object.
+ */
+class Base
+{
+public:
+ qle_uint size;
+ union {
+ uint _dummy;
+ qle_bitfield<0, 1> is_object;
+ qle_bitfield<1, 31> length;
+ };
+ offset tableOffset;
+ // content follows here
+
+ inline bool isObject() const { return !!is_object; }
+ inline bool isArray() const { return !isObject(); }
+
+ inline offset *table() const { return (offset *) (((char *) this) + tableOffset); }
+
+ int reserveSpace(uint dataSize, int posInTable, uint numItems, bool replace);
+ void removeItems(int pos, int numItems);
+};
+
+class Object : public Base
+{
+public:
+ Entry *entryAt(int i) const {
+ return reinterpret_cast<Entry *>(((char *)this) + table()[i]);
+ }
+ int indexOf(const QString &key, bool *exists) const;
+ int indexOf(QLatin1String key, bool *exists) const;
+
+ bool isValid(int maxSize) const;
+};
+
+
+class Array : public Base
+{
+public:
+ inline Value at(int i) const;
+ inline Value &operator [](int i);
+
+ bool isValid(int maxSize) const;
+};
+
+
+class Value
+{
+public:
+ enum {
+ MaxSize = (1<<27) - 1
+ };
+ union {
+ uint _dummy;
+ qle_bitfield<0, 3> type;
+ qle_bitfield<3, 1> latinOrIntValue;
+ qle_bitfield<4, 1> latinKey;
+ qle_bitfield<5, 27> value;
+ qle_signedbitfield<5, 27> int_value;
+ };
+
+ inline char *data(const Base *b) const { return ((char *)b) + value; }
+ int usedStorage(const Base *b) const;
+
+ bool toBoolean() const;
+ double toDouble(const Base *b) const;
+ QString toString(const Base *b) const;
+ String asString(const Base *b) const;
+ Latin1String asLatin1String(const Base *b) const;
+ Base *base(const Base *b) const;
+
+ bool isValid(const Base *b) const;
+
+ static int requiredStorage(QJsonValue &v, bool *compressed);
+ static uint valueToStore(const QJsonValue &v, uint offset);
+ static void copyData(const QJsonValue &v, char *dest, bool compressed);
+};
+Q_DECLARE_JSONPRIVATE_TYPEINFO(Value, Q_PRIMITIVE_TYPE)
+
+inline Value Array::at(int i) const
+{
+ return *(Value *) (table() + i);
+}
+
+inline Value &Array::operator [](int i)
+{
+ return *(Value *) (table() + i);
+}
+
+
+
+class Entry {
+public:
+ Value value;
+ // key
+ // value data follows key
+
+ uint size() const {
+ int s = sizeof(Entry);
+ if (value.latinKey)
+ s += shallowLatin1Key().byteSize();
+ else
+ s += shallowKey().byteSize();
+ return alignedSize(s);
+ }
+
+ int usedStorage(Base *b) const {
+ return size() + value.usedStorage(b);
+ }
+
+ String shallowKey() const
+ {
+ Q_ASSERT(!value.latinKey);
+ return String((const char *)this + sizeof(Entry));
+ }
+ Latin1String shallowLatin1Key() const
+ {
+ Q_ASSERT(value.latinKey);
+ return Latin1String((const char *)this + sizeof(Entry));
+ }
+ QString key() const
+ {
+ if (value.latinKey) {
+ return shallowLatin1Key().toString();
+ }
+ return shallowKey().toString();
+ }
+
+ bool isValid(int maxSize) const {
+ if (maxSize < (int)sizeof(Entry))
+ return false;
+ maxSize -= sizeof(Entry);
+ if (value.latinKey)
+ return shallowLatin1Key().isValid(maxSize);
+ return shallowKey().isValid(maxSize);
+ }
+
+ bool operator ==(const QString &key) const;
+ inline bool operator !=(const QString &key) const { return !operator ==(key); }
+ inline bool operator >=(const QString &key) const;
+
+ bool operator==(QLatin1String key) const;
+ inline bool operator!=(QLatin1String key) const { return !operator ==(key); }
+ inline bool operator>=(QLatin1String key) const;
+
+ bool operator ==(const Entry &other) const;
+ bool operator >=(const Entry &other) const;
+};
+
+inline bool Entry::operator >=(const QString &key) const
+{
+ if (value.latinKey)
+ return (shallowLatin1Key() >= key);
+ else
+ return (shallowKey() >= key);
+}
+
+inline bool Entry::operator >=(QLatin1String key) const
+{
+ if (value.latinKey)
+ return shallowLatin1Key() >= key;
+ else
+ return shallowKey() >= key;
+}
+
+inline bool operator <(const QString &key, const Entry &e)
+{ return e >= key; }
+
+inline bool operator<(QLatin1String key, const Entry &e)
+{ return e >= key; }
+
+
+class Header {
+public:
+ qle_uint tag; // 'qbjs'
+ qle_uint version; // 1
+ Base *root() { return (Base *)(this + 1); }
+};
+
+
+inline bool Value::toBoolean() const
+{
+ Q_ASSERT(type == QJsonValue::Bool);
+ return value != 0;
+}
+
+inline double Value::toDouble(const Base *b) const
+{
+ Q_ASSERT(type == QJsonValue::Double);
+ if (latinOrIntValue)
+ return int_value;
+
+ quint64 i = qFromLittleEndian<quint64>((const uchar *)b + value);
+ double d;
+ memcpy(&d, &i, sizeof(double));
+ return d;
+}
+
+inline String Value::asString(const Base *b) const
+{
+ Q_ASSERT(type == QJsonValue::String && !latinOrIntValue);
+ return String(data(b));
+}
+
+inline Latin1String Value::asLatin1String(const Base *b) const
+{
+ Q_ASSERT(type == QJsonValue::String && latinOrIntValue);
+ return Latin1String(data(b));
+}
+
+inline QString Value::toString(const Base *b) const
+{
+ if (latinOrIntValue)
+ return asLatin1String(b).toString();
+ else
+ return asString(b).toString();
+}
+
+inline Base *Value::base(const Base *b) const
+{
+ Q_ASSERT(type == QJsonValue::Array || type == QJsonValue::Object);
+ return reinterpret_cast<Base *>(data(b));
+}
+
+class Data {
+public:
+ enum Validation {
+ Unchecked,
+ Validated,
+ Invalid
+ };
+
+ QAtomicInt ref;
+ int alloc;
+ union {
+ char *rawData;
+ Header *header;
+ };
+ uint compactionCounter : 31;
+ uint ownsData : 1;
+
+ inline Data(char *raw, int a)
+ : alloc(a), rawData(raw), compactionCounter(0), ownsData(true)
+ {
+ }
+ inline Data(int reserved, QJsonValue::Type valueType)
+ : rawData(0), compactionCounter(0), ownsData(true)
+ {
+ Q_ASSERT(valueType == QJsonValue::Array || valueType == QJsonValue::Object);
+
+ alloc = sizeof(Header) + sizeof(Base) + reserved + sizeof(offset);
+ header = (Header *)malloc(alloc);
+ Q_CHECK_PTR(header);
+ header->tag = QJsonDocument::BinaryFormatTag;
+ header->version = 1;
+ Base *b = header->root();
+ b->size = sizeof(Base);
+ b->is_object = (valueType == QJsonValue::Object);
+ b->tableOffset = sizeof(Base);
+ b->length = 0;
+ }
+ inline ~Data()
+ { if (ownsData) free(rawData); }
+
+ uint offsetOf(const void *ptr) const { return (uint)(((char *)ptr - rawData)); }
+
+ QJsonObject toObject(Object *o) const
+ {
+ return QJsonObject(const_cast<Data *>(this), o);
+ }
+
+ QJsonArray toArray(Array *a) const
+ {
+ return QJsonArray(const_cast<Data *>(this), a);
+ }
+
+ Data *clone(Base *b, int reserve = 0)
+ {
+ int size = sizeof(Header) + b->size;
+ if (b == header->root() && ref.load() == 1 && alloc >= size + reserve)
+ return this;
+
+ if (reserve) {
+ if (reserve < 128)
+ reserve = 128;
+ size = qMax(size + reserve, qMin(size *2, (int)Value::MaxSize));
+ if (size > Value::MaxSize) {
+ qWarning("QJson: Document too large to store in data structure");
+ return 0;
+ }
+ }
+ char *raw = (char *)malloc(size);
+ Q_CHECK_PTR(raw);
+ memcpy(raw + sizeof(Header), b, b->size);
+ Header *h = (Header *)raw;
+ h->tag = QJsonDocument::BinaryFormatTag;
+ h->version = 1;
+ Data *d = new Data(raw, size);
+ d->compactionCounter = (b == header->root()) ? compactionCounter : 0;
+ return d;
+ }
+
+ void compact();
+ bool valid() const;
+
+private:
+ Q_DISABLE_COPY(Data)
+};
+
+}
+
+QT_END_NAMESPACE
+
+#endif // QJSON_P_H
diff --git a/src/corelib/serialization/qjsonarray.cpp b/src/corelib/serialization/qjsonarray.cpp
new file mode 100644
index 0000000000..c5a5aaf39d
--- /dev/null
+++ b/src/corelib/serialization/qjsonarray.cpp
@@ -0,0 +1,1258 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qjsonobject.h>
+#include <qjsonvalue.h>
+#include <qjsonarray.h>
+#include <qstringlist.h>
+#include <qvariant.h>
+#include <qdebug.h>
+
+#include "qjsonwriter_p.h"
+#include "qjson_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QJsonArray
+ \inmodule QtCore
+ \ingroup json
+ \ingroup shared
+ \reentrant
+ \since 5.0
+
+ \brief The QJsonArray class encapsulates a JSON array.
+
+ A JSON array is a list of values. The list can be manipulated by inserting and
+ removing QJsonValue's from the array.
+
+ A QJsonArray can be converted to and from a QVariantList. You can query the
+ number of entries with size(), insert(), and removeAt() entries from it
+ and iterate over its content using the standard C++ iterator pattern.
+
+ QJsonArray is an implicitly shared class and shares the data with the document
+ it has been created from as long as it is not being modified.
+
+ You can convert the array to and from text based JSON through QJsonDocument.
+
+ \sa {JSON Support in Qt}, {JSON Save Game Example}
+*/
+
+/*!
+ \typedef QJsonArray::Iterator
+
+ Qt-style synonym for QJsonArray::iterator.
+*/
+
+/*!
+ \typedef QJsonArray::ConstIterator
+
+ Qt-style synonym for QJsonArray::const_iterator.
+*/
+
+/*!
+ \typedef QJsonArray::size_type
+
+ Typedef for int. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QJsonArray::value_type
+
+ Typedef for QJsonValue. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QJsonArray::difference_type
+
+ Typedef for int. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QJsonArray::pointer
+
+ Typedef for QJsonValue *. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QJsonArray::const_pointer
+
+ Typedef for const QJsonValue *. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QJsonArray::reference
+
+ Typedef for QJsonValue &. Provided for STL compatibility.
+*/
+
+/*!
+ \typedef QJsonArray::const_reference
+
+ Typedef for const QJsonValue &. Provided for STL compatibility.
+*/
+
+/*!
+ Creates an empty array.
+ */
+QJsonArray::QJsonArray()
+ : d(0), a(0)
+{
+}
+
+/*!
+ \fn QJsonArray::QJsonArray(std::initializer_list<QJsonValue> args)
+ \since 5.4
+ Creates an array initialized from \a args initialization list.
+
+ QJsonArray can be constructed in a way similar to JSON notation,
+ for example:
+ \code
+ QJsonArray array = { 1, 2.2, QString() };
+ \endcode
+ */
+
+/*!
+ \internal
+ */
+QJsonArray::QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array)
+ : d(data), a(array)
+{
+ Q_ASSERT(data);
+ Q_ASSERT(array);
+ d->ref.ref();
+}
+
+/*!
+ This method replaces part of QJsonArray(std::initializer_list<QJsonValue> args) .
+ The constructor needs to be inline, but we do not want to leak implementation details
+ of this class.
+ \note this method is called for an uninitialized object
+ \internal
+ */
+void QJsonArray::initialize()
+{
+ d = 0;
+ a = 0;
+}
+
+/*!
+ Deletes the array.
+ */
+QJsonArray::~QJsonArray()
+{
+ if (d && !d->ref.deref())
+ delete d;
+}
+
+/*!
+ Creates a copy of \a other.
+
+ Since QJsonArray is implicitly shared, the copy is shallow
+ as long as the object doesn't get modified.
+ */
+QJsonArray::QJsonArray(const QJsonArray &other)
+{
+ d = other.d;
+ a = other.a;
+ if (d)
+ d->ref.ref();
+}
+
+/*!
+ Assigns \a other to this array.
+ */
+QJsonArray &QJsonArray::operator =(const QJsonArray &other)
+{
+ if (d != other.d) {
+ if (d && !d->ref.deref())
+ delete d;
+ d = other.d;
+ if (d)
+ d->ref.ref();
+ }
+ a = other.a;
+
+ return *this;
+}
+
+/*!
+ \fn QJsonArray::QJsonArray(QJsonArray &&other)
+ \since 5.10
+
+ Move-constructs a QJsonArray from \a other.
+*/
+
+/*!
+ \fn QJsonArray &QJsonArray::operator =(QJsonArray &&other)
+ \since 5.10
+
+ Move-assigns \a other to this array.
+*/
+
+/*!
+ \fn void QJsonArray::swap(QJsonArray &other)
+ \since 5.10
+
+ Swaps the array \a other with this. This operation is very fast and never fails.
+*/
+
+/*! \fn QJsonArray &QJsonArray::operator+=(const QJsonValue &value)
+
+ Appends \a value to the array, and returns a reference to the array itself.
+
+ \since 5.3
+ \sa append(), operator<<()
+*/
+
+/*! \fn QJsonArray QJsonArray::operator+(const QJsonValue &value) const
+
+ Returns an array that contains all the items in this array followed
+ by the provided \a value.
+
+ \since 5.3
+ \sa operator+=()
+*/
+
+/*! \fn QJsonArray &QJsonArray::operator<<(const QJsonValue &value)
+
+ Appends \a value to the array, and returns a reference to the array itself.
+
+ \since 5.3
+ \sa operator+=(), append()
+*/
+
+/*!
+ Converts the string list \a list to a QJsonArray.
+
+ The values in \a list will be converted to JSON values.
+
+ \sa toVariantList(), QJsonValue::fromVariant()
+ */
+QJsonArray QJsonArray::fromStringList(const QStringList &list)
+{
+ QJsonArray array;
+ for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it)
+ array.append(QJsonValue(*it));
+ return array;
+}
+
+/*!
+ Converts the variant list \a list to a QJsonArray.
+
+ The QVariant values in \a list will be converted to JSON values.
+
+ \sa toVariantList(), QJsonValue::fromVariant()
+ */
+QJsonArray QJsonArray::fromVariantList(const QVariantList &list)
+{
+ QJsonArray array;
+ if (list.isEmpty())
+ return array;
+
+ array.detach2(1024);
+
+ QVector<QJsonPrivate::Value> values;
+ values.resize(list.size());
+ QJsonPrivate::Value *valueData = values.data();
+ uint currentOffset = sizeof(QJsonPrivate::Base);
+
+ for (int i = 0; i < list.size(); ++i) {
+ QJsonValue val = QJsonValue::fromVariant(list.at(i));
+
+ bool latinOrIntValue;
+ int valueSize = QJsonPrivate::Value::requiredStorage(val, &latinOrIntValue);
+
+ if (!array.detach2(valueSize))
+ return QJsonArray();
+
+ QJsonPrivate::Value *v = valueData + i;
+ v->type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t);
+ v->latinOrIntValue = latinOrIntValue;
+ v->latinKey = false;
+ v->value = QJsonPrivate::Value::valueToStore(val, currentOffset);
+ if (valueSize)
+ QJsonPrivate::Value::copyData(val, (char *)array.a + currentOffset, latinOrIntValue);
+
+ currentOffset += valueSize;
+ array.a->size = currentOffset;
+ }
+
+ // write table
+ array.a->tableOffset = currentOffset;
+ if (!array.detach2(sizeof(QJsonPrivate::offset)*values.size()))
+ return QJsonArray();
+ memcpy(array.a->table(), values.constData(), values.size()*sizeof(uint));
+ array.a->length = values.size();
+ array.a->size = currentOffset + sizeof(QJsonPrivate::offset)*values.size();
+
+ return array;
+}
+
+/*!
+ Converts this object to a QVariantList.
+
+ Returns the created map.
+ */
+QVariantList QJsonArray::toVariantList() const
+{
+ QVariantList list;
+
+ if (a) {
+ list.reserve(a->length);
+ for (int i = 0; i < (int)a->length; ++i)
+ list.append(QJsonValue(d, a, a->at(i)).toVariant());
+ }
+ return list;
+}
+
+
+/*!
+ Returns the number of values stored in the array.
+ */
+int QJsonArray::size() const
+{
+ if (!d)
+ return 0;
+
+ return (int)a->length;
+}
+
+/*!
+ \fn QJsonArray::count() const
+
+ Same as size().
+
+ \sa size()
+*/
+
+/*!
+ Returns \c true if the object is empty. This is the same as size() == 0.
+
+ \sa size()
+ */
+bool QJsonArray::isEmpty() const
+{
+ if (!d)
+ return true;
+
+ return !a->length;
+}
+
+/*!
+ Returns a QJsonValue representing the value for index \a i.
+
+ The returned QJsonValue is \c Undefined, if \a i is out of bounds.
+
+ */
+QJsonValue QJsonArray::at(int i) const
+{
+ if (!a || i < 0 || i >= (int)a->length)
+ return QJsonValue(QJsonValue::Undefined);
+
+ return QJsonValue(d, a, a->at(i));
+}
+
+/*!
+ Returns the first value stored in the array.
+
+ Same as \c at(0).
+
+ \sa at()
+ */
+QJsonValue QJsonArray::first() const
+{
+ return at(0);
+}
+
+/*!
+ Returns the last value stored in the array.
+
+ Same as \c{at(size() - 1)}.
+
+ \sa at()
+ */
+QJsonValue QJsonArray::last() const
+{
+ return at(a ? (a->length - 1) : 0);
+}
+
+/*!
+ Inserts \a value at the beginning of the array.
+
+ This is the same as \c{insert(0, value)} and will prepend \a value to the array.
+
+ \sa append(), insert()
+ */
+void QJsonArray::prepend(const QJsonValue &value)
+{
+ insert(0, value);
+}
+
+/*!
+ Inserts \a value at the end of the array.
+
+ \sa prepend(), insert()
+ */
+void QJsonArray::append(const QJsonValue &value)
+{
+ insert(a ? (int)a->length : 0, value);
+}
+
+/*!
+ Removes the value at index position \a i. \a i must be a valid
+ index position in the array (i.e., \c{0 <= i < size()}).
+
+ \sa insert(), replace()
+ */
+void QJsonArray::removeAt(int i)
+{
+ if (!a || i < 0 || i >= (int)a->length)
+ return;
+
+ detach2();
+ a->removeItems(i, 1);
+ ++d->compactionCounter;
+ if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(a->length) / 2u)
+ compact();
+}
+
+/*! \fn void QJsonArray::removeFirst()
+
+ Removes the first item in the array. Calling this function is
+ equivalent to calling \c{removeAt(0)}. The array must not be empty. If
+ the array can be empty, call isEmpty() before calling this
+ function.
+
+ \sa removeAt(), removeLast()
+*/
+
+/*! \fn void QJsonArray::removeLast()
+
+ Removes the last item in the array. Calling this function is
+ equivalent to calling \c{removeAt(size() - 1)}. The array must not be
+ empty. If the array can be empty, call isEmpty() before calling
+ this function.
+
+ \sa removeAt(), removeFirst()
+*/
+
+/*!
+ Removes the item at index position \a i and returns it. \a i must
+ be a valid index position in the array (i.e., \c{0 <= i < size()}).
+
+ If you don't use the return value, removeAt() is more efficient.
+
+ \sa removeAt()
+ */
+QJsonValue QJsonArray::takeAt(int i)
+{
+ if (!a || i < 0 || i >= (int)a->length)
+ return QJsonValue(QJsonValue::Undefined);
+
+ QJsonValue v(d, a, a->at(i));
+ removeAt(i); // detaches
+ return v;
+}
+
+/*!
+ Inserts \a value at index position \a i in the array. If \a i
+ is \c 0, the value is prepended to the array. If \a i is size(), the
+ value is appended to the array.
+
+ \sa append(), prepend(), replace(), removeAt()
+ */
+void QJsonArray::insert(int i, const QJsonValue &value)
+{
+ Q_ASSERT (i >= 0 && i <= (a ? (int)a->length : 0));
+ QJsonValue val = value;
+
+ bool compressed;
+ int valueSize = QJsonPrivate::Value::requiredStorage(val, &compressed);
+
+ if (!detach2(valueSize + sizeof(QJsonPrivate::Value)))
+ return;
+
+ if (!a->length)
+ a->tableOffset = sizeof(QJsonPrivate::Array);
+
+ int valueOffset = a->reserveSpace(valueSize, i, 1, false);
+ if (!valueOffset)
+ return;
+
+ QJsonPrivate::Value &v = (*a)[i];
+ v.type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t);
+ v.latinOrIntValue = compressed;
+ v.latinKey = false;
+ v.value = QJsonPrivate::Value::valueToStore(val, valueOffset);
+ if (valueSize)
+ QJsonPrivate::Value::copyData(val, (char *)a + valueOffset, compressed);
+}
+
+/*!
+ \fn QJsonArray::iterator QJsonArray::insert(iterator before, const QJsonValue &value)
+
+ Inserts \a value before the position pointed to by \a before, and returns an iterator
+ pointing to the newly inserted item.
+
+ \sa erase(), insert()
+*/
+
+/*!
+ \fn QJsonArray::iterator QJsonArray::erase(iterator it)
+
+ Removes the item pointed to by \a it, and returns an iterator pointing to the
+ next item.
+
+ \sa removeAt()
+*/
+
+/*!
+ Replaces the item at index position \a i with \a value. \a i must
+ be a valid index position in the array (i.e., \c{0 <= i < size()}).
+
+ \sa operator[](), removeAt()
+ */
+void QJsonArray::replace(int i, const QJsonValue &value)
+{
+ Q_ASSERT (a && i >= 0 && i < (int)(a->length));
+ QJsonValue val = value;
+
+ bool compressed;
+ int valueSize = QJsonPrivate::Value::requiredStorage(val, &compressed);
+
+ if (!detach2(valueSize))
+ return;
+
+ if (!a->length)
+ a->tableOffset = sizeof(QJsonPrivate::Array);
+
+ int valueOffset = a->reserveSpace(valueSize, i, 1, true);
+ if (!valueOffset)
+ return;
+
+ QJsonPrivate::Value &v = (*a)[i];
+ v.type = (val.t == QJsonValue::Undefined ? QJsonValue::Null : val.t);
+ v.latinOrIntValue = compressed;
+ v.latinKey = false;
+ v.value = QJsonPrivate::Value::valueToStore(val, valueOffset);
+ if (valueSize)
+ QJsonPrivate::Value::copyData(val, (char *)a + valueOffset, compressed);
+
+ ++d->compactionCounter;
+ if (d->compactionCounter > 32u && d->compactionCounter >= unsigned(a->length) / 2u)
+ compact();
+}
+
+/*!
+ Returns \c true if the array contains an occurrence of \a value, otherwise \c false.
+
+ \sa count()
+ */
+bool QJsonArray::contains(const QJsonValue &value) const
+{
+ for (int i = 0; i < size(); i++) {
+ if (at(i) == value)
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Returns the value at index position \a i as a modifiable reference.
+ \a i must be a valid index position in the array (i.e., \c{0 <= i <
+ size()}).
+
+ The return value is of type QJsonValueRef, a helper class for QJsonArray
+ and QJsonObject. When you get an object of type QJsonValueRef, you can
+ use it as if it were a reference to a QJsonValue. If you assign to it,
+ the assignment will apply to the character in the QJsonArray of QJsonObject
+ from which you got the reference.
+
+ \sa at()
+ */
+QJsonValueRef QJsonArray::operator [](int i)
+{
+ Q_ASSERT(a && i >= 0 && i < (int)a->length);
+ return QJsonValueRef(this, i);
+}
+
+/*!
+ \overload
+
+ Same as at().
+ */
+QJsonValue QJsonArray::operator[](int i) const
+{
+ return at(i);
+}
+
+/*!
+ Returns \c true if this array is equal to \a other.
+ */
+bool QJsonArray::operator==(const QJsonArray &other) const
+{
+ if (a == other.a)
+ return true;
+
+ if (!a)
+ return !other.a->length;
+ if (!other.a)
+ return !a->length;
+ if (a->length != other.a->length)
+ return false;
+
+ for (int i = 0; i < (int)a->length; ++i) {
+ if (QJsonValue(d, a, a->at(i)) != QJsonValue(other.d, other.a, other.a->at(i)))
+ return false;
+ }
+ return true;
+}
+
+/*!
+ Returns \c true if this array is not equal to \a other.
+ */
+bool QJsonArray::operator!=(const QJsonArray &other) const
+{
+ return !(*this == other);
+}
+
+/*! \fn QJsonArray::iterator QJsonArray::begin()
+
+ Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
+ the array.
+
+ \sa constBegin(), end()
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::begin() const
+
+ \overload
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::constBegin() const
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
+ in the array.
+
+ \sa begin(), constEnd()
+*/
+
+/*! \fn QJsonArray::iterator QJsonArray::end()
+
+ Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
+ after the last item in the array.
+
+ \sa begin(), constEnd()
+*/
+
+/*! \fn const_iterator QJsonArray::end() const
+
+ \overload
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::constEnd() const
+
+ Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
+ item after the last item in the array.
+
+ \sa constBegin(), end()
+*/
+
+/*! \fn void QJsonArray::push_back(const QJsonValue &value)
+
+ This function is provided for STL compatibility. It is equivalent
+ to \l{QJsonArray::append()}{append(value)} and will append \a value to the array.
+*/
+
+/*! \fn void QJsonArray::push_front(const QJsonValue &value)
+
+ This function is provided for STL compatibility. It is equivalent
+ to \l{QJsonArray::prepend()}{prepend(value)} and will prepend \a value to the array.
+*/
+
+/*! \fn void QJsonArray::pop_front()
+
+ This function is provided for STL compatibility. It is equivalent
+ to removeFirst(). The array must not be empty. If the array can be
+ empty, call isEmpty() before calling this function.
+*/
+
+/*! \fn void QJsonArray::pop_back()
+
+ This function is provided for STL compatibility. It is equivalent
+ to removeLast(). The array must not be empty. If the array can be
+ empty, call isEmpty() before calling this function.
+*/
+
+/*! \fn bool QJsonArray::empty() const
+
+ This function is provided for STL compatibility. It is equivalent
+ to isEmpty() and returns \c true if the array is empty.
+*/
+
+/*! \class QJsonArray::iterator
+ \inmodule QtCore
+ \brief The QJsonArray::iterator class provides an STL-style non-const iterator for QJsonArray.
+
+ QJsonArray::iterator allows you to iterate over a QJsonArray
+ and to modify the array item associated with the
+ iterator. If you want to iterate over a const QJsonArray, use
+ QJsonArray::const_iterator instead. It is generally a good practice to
+ use QJsonArray::const_iterator on a non-const QJsonArray as well, unless
+ you need to change the QJsonArray through the iterator. Const
+ iterators are slightly faster and improves code readability.
+
+ The default QJsonArray::iterator constructor creates an uninitialized
+ iterator. You must initialize it using a QJsonArray function like
+ QJsonArray::begin(), QJsonArray::end(), or QJsonArray::insert() before you can
+ start iterating.
+
+ Most QJsonArray functions accept an integer index rather than an
+ iterator. For that reason, iterators are rarely useful in
+ connection with QJsonArray. One place where STL-style iterators do
+ make sense is as arguments to \l{generic algorithms}.
+
+ Multiple iterators can be used on the same array. However, be
+ aware that any non-const function call performed on the QJsonArray
+ will render all existing iterators undefined.
+
+ \sa QJsonArray::const_iterator
+*/
+
+/*! \typedef QJsonArray::iterator::iterator_category
+
+ A synonym for \e {std::random_access_iterator_tag} indicating
+ this iterator is a random access iterator.
+*/
+
+/*! \typedef QJsonArray::iterator::difference_type
+
+ \internal
+*/
+
+/*! \typedef QJsonArray::iterator::value_type
+
+ \internal
+*/
+
+/*! \typedef QJsonArray::iterator::reference
+
+ \internal
+*/
+
+/*! \typedef QJsonArray::iterator::pointer
+
+ \internal
+*/
+
+/*! \fn QJsonArray::iterator::iterator()
+
+ Constructs an uninitialized iterator.
+
+ Functions like operator*() and operator++() should not be called
+ on an uninitialized iterator. Use operator=() to assign a value
+ to it before using it.
+
+ \sa QJsonArray::begin(), QJsonArray::end()
+*/
+
+/*! \fn QJsonArray::iterator::iterator(QJsonArray *array, int index)
+ \internal
+*/
+
+/*! \fn QJsonValueRef QJsonArray::iterator::operator*() const
+
+
+ Returns a modifiable reference to the current item.
+
+ You can change the value of an item by using operator*() on the
+ left side of an assignment.
+
+ The return value is of type QJsonValueRef, a helper class for QJsonArray
+ and QJsonObject. When you get an object of type QJsonValueRef, you can
+ use it as if it were a reference to a QJsonValue. If you assign to it,
+ the assignment will apply to the character in the QJsonArray of QJsonObject
+ from which you got the reference.
+*/
+
+/*! \fn QJsonValueRef *QJsonArray::iterator::operator->() const
+
+ Returns a pointer to a modifiable reference to the current item.
+*/
+
+/*! \fn QJsonValueRef QJsonArray::iterator::operator[](int j) const
+
+ Returns a modifiable reference to the item at offset \a j from the
+ item pointed to by this iterator (the item at position \c{*this + j}).
+
+ This function is provided to make QJsonArray iterators behave like C++
+ pointers.
+
+ The return value is of type QJsonValueRef, a helper class for QJsonArray
+ and QJsonObject. When you get an object of type QJsonValueRef, you can
+ use it as if it were a reference to a QJsonValue. If you assign to it,
+ the assignment will apply to the character in the QJsonArray of QJsonObject
+ from which you got the reference.
+
+ \sa operator+()
+*/
+
+/*!
+ \fn bool QJsonArray::iterator::operator==(const iterator &other) const
+ \fn bool QJsonArray::iterator::operator==(const const_iterator &other) const
+
+ Returns \c true if \a other points to the same item as this
+ iterator; otherwise returns \c false.
+
+ \sa operator!=()
+*/
+
+/*!
+ \fn bool QJsonArray::iterator::operator!=(const iterator &other) const
+ \fn bool QJsonArray::iterator::operator!=(const const_iterator &other) const
+
+ Returns \c true if \a other points to a different item than this
+ iterator; otherwise returns \c false.
+
+ \sa operator==()
+*/
+
+/*!
+ \fn bool QJsonArray::iterator::operator<(const iterator& other) const
+ \fn bool QJsonArray::iterator::operator<(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is less than
+ the item pointed to by the \a other iterator.
+*/
+
+/*!
+ \fn bool QJsonArray::iterator::operator<=(const iterator& other) const
+ \fn bool QJsonArray::iterator::operator<=(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is less than
+ or equal to the item pointed to by the \a other iterator.
+*/
+
+/*!
+ \fn bool QJsonArray::iterator::operator>(const iterator& other) const
+ \fn bool QJsonArray::iterator::operator>(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is greater
+ than the item pointed to by the \a other iterator.
+*/
+
+/*!
+ \fn bool QJsonArray::iterator::operator>=(const iterator& other) const
+ \fn bool QJsonArray::iterator::operator>=(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is greater
+ than or equal to the item pointed to by the \a other iterator.
+*/
+
+/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator++()
+
+ The prefix ++ operator, \c{++it}, advances the iterator to the
+ next item in the array and returns an iterator to the new current
+ item.
+
+ Calling this function on QJsonArray::end() leads to undefined results.
+
+ \sa operator--()
+*/
+
+/*! \fn QJsonArray::iterator QJsonArray::iterator::operator++(int)
+
+ \overload
+
+ The postfix ++ operator, \c{it++}, advances the iterator to the
+ next item in the array and returns an iterator to the previously
+ current item.
+*/
+
+/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator--()
+
+ The prefix -- operator, \c{--it}, makes the preceding item
+ current and returns an iterator to the new current item.
+
+ Calling this function on QJsonArray::begin() leads to undefined results.
+
+ \sa operator++()
+*/
+
+/*! \fn QJsonArray::iterator QJsonArray::iterator::operator--(int)
+
+ \overload
+
+ The postfix -- operator, \c{it--}, makes the preceding item
+ current and returns an iterator to the previously current item.
+*/
+
+/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator+=(int j)
+
+ Advances the iterator by \a j items. If \a j is negative, the
+ iterator goes backward.
+
+ \sa operator-=(), operator+()
+*/
+
+/*! \fn QJsonArray::iterator &QJsonArray::iterator::operator-=(int j)
+
+ Makes the iterator go back by \a j items. If \a j is negative,
+ the iterator goes forward.
+
+ \sa operator+=(), operator-()
+*/
+
+/*! \fn QJsonArray::iterator QJsonArray::iterator::operator+(int j) const
+
+ Returns an iterator to the item at \a j positions forward from
+ this iterator. If \a j is negative, the iterator goes backward.
+
+ \sa operator-(), operator+=()
+*/
+
+/*! \fn QJsonArray::iterator QJsonArray::iterator::operator-(int j) const
+
+ Returns an iterator to the item at \a j positions backward from
+ this iterator. If \a j is negative, the iterator goes forward.
+
+ \sa operator+(), operator-=()
+*/
+
+/*! \fn int QJsonArray::iterator::operator-(iterator other) const
+
+ Returns the number of items between the item pointed to by \a
+ other and the item pointed to by this iterator.
+*/
+
+/*! \class QJsonArray::const_iterator
+ \inmodule QtCore
+ \brief The QJsonArray::const_iterator class provides an STL-style const iterator for QJsonArray.
+
+ QJsonArray::const_iterator allows you to iterate over a
+ QJsonArray. If you want to modify the QJsonArray as
+ you iterate over it, use QJsonArray::iterator instead. It is generally a
+ good practice to use QJsonArray::const_iterator on a non-const QJsonArray
+ as well, unless you need to change the QJsonArray through the
+ iterator. Const iterators are slightly faster and improves
+ code readability.
+
+ The default QJsonArray::const_iterator constructor creates an
+ uninitialized iterator. You must initialize it using a QJsonArray
+ function like QJsonArray::constBegin(), QJsonArray::constEnd(), or
+ QJsonArray::insert() before you can start iterating.
+
+ Most QJsonArray functions accept an integer index rather than an
+ iterator. For that reason, iterators are rarely useful in
+ connection with QJsonArray. One place where STL-style iterators do
+ make sense is as arguments to \l{generic algorithms}.
+
+ Multiple iterators can be used on the same array. However, be
+ aware that any non-const function call performed on the QJsonArray
+ will render all existing iterators undefined.
+
+ \sa QJsonArray::iterator
+*/
+
+/*! \fn QJsonArray::const_iterator::const_iterator()
+
+ Constructs an uninitialized iterator.
+
+ Functions like operator*() and operator++() should not be called
+ on an uninitialized iterator. Use operator=() to assign a value
+ to it before using it.
+
+ \sa QJsonArray::constBegin(), QJsonArray::constEnd()
+*/
+
+/*! \fn QJsonArray::const_iterator::const_iterator(const QJsonArray *array, int index)
+ \internal
+*/
+
+/*! \typedef QJsonArray::const_iterator::iterator_category
+
+ A synonym for \e {std::random_access_iterator_tag} indicating
+ this iterator is a random access iterator.
+*/
+
+/*! \typedef QJsonArray::const_iterator::difference_type
+
+ \internal
+*/
+
+/*! \typedef QJsonArray::const_iterator::value_type
+
+ \internal
+*/
+
+/*! \typedef QJsonArray::const_iterator::reference
+
+ \internal
+*/
+
+/*! \typedef QJsonArray::const_iterator::pointer
+
+ \internal
+*/
+
+/*! \fn QJsonArray::const_iterator::const_iterator(const const_iterator &other)
+
+ Constructs a copy of \a other.
+*/
+
+/*! \fn QJsonArray::const_iterator::const_iterator(const iterator &other)
+
+ Constructs a copy of \a other.
+*/
+
+/*! \fn QJsonValue QJsonArray::const_iterator::operator*() const
+
+ Returns the current item.
+*/
+
+/*! \fn QJsonValue *QJsonArray::const_iterator::operator->() const
+
+ Returns a pointer to the current item.
+*/
+
+/*! \fn QJsonValue QJsonArray::const_iterator::operator[](int j) const
+
+ Returns the item at offset \a j from the item pointed to by this iterator (the item at
+ position \c{*this + j}).
+
+ This function is provided to make QJsonArray iterators behave like C++
+ pointers.
+
+ \sa operator+()
+*/
+
+/*! \fn bool QJsonArray::const_iterator::operator==(const const_iterator &other) const
+
+ Returns \c true if \a other points to the same item as this
+ iterator; otherwise returns \c false.
+
+ \sa operator!=()
+*/
+
+/*! \fn bool QJsonArray::const_iterator::operator!=(const const_iterator &other) const
+
+ Returns \c true if \a other points to a different item than this
+ iterator; otherwise returns \c false.
+
+ \sa operator==()
+*/
+
+/*!
+ \fn bool QJsonArray::const_iterator::operator<(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is less than
+ the item pointed to by the \a other iterator.
+*/
+
+/*!
+ \fn bool QJsonArray::const_iterator::operator<=(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is less than
+ or equal to the item pointed to by the \a other iterator.
+*/
+
+/*!
+ \fn bool QJsonArray::const_iterator::operator>(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is greater
+ than the item pointed to by the \a other iterator.
+*/
+
+/*!
+ \fn bool QJsonArray::const_iterator::operator>=(const const_iterator& other) const
+
+ Returns \c true if the item pointed to by this iterator is greater
+ than or equal to the item pointed to by the \a other iterator.
+*/
+
+/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator++()
+
+ The prefix ++ operator, \c{++it}, advances the iterator to the
+ next item in the array and returns an iterator to the new current
+ item.
+
+ Calling this function on QJsonArray::end() leads to undefined results.
+
+ \sa operator--()
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator++(int)
+
+ \overload
+
+ The postfix ++ operator, \c{it++}, advances the iterator to the
+ next item in the array and returns an iterator to the previously
+ current item.
+*/
+
+/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator--()
+
+ The prefix -- operator, \c{--it}, makes the preceding item
+ current and returns an iterator to the new current item.
+
+ Calling this function on QJsonArray::begin() leads to undefined results.
+
+ \sa operator++()
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator--(int)
+
+ \overload
+
+ The postfix -- operator, \c{it--}, makes the preceding item
+ current and returns an iterator to the previously current item.
+*/
+
+/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator+=(int j)
+
+ Advances the iterator by \a j items. If \a j is negative, the
+ iterator goes backward.
+
+ \sa operator-=(), operator+()
+*/
+
+/*! \fn QJsonArray::const_iterator &QJsonArray::const_iterator::operator-=(int j)
+
+ Makes the iterator go back by \a j items. If \a j is negative,
+ the iterator goes forward.
+
+ \sa operator+=(), operator-()
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator+(int j) const
+
+ Returns an iterator to the item at \a j positions forward from
+ this iterator. If \a j is negative, the iterator goes backward.
+
+ \sa operator-(), operator+=()
+*/
+
+/*! \fn QJsonArray::const_iterator QJsonArray::const_iterator::operator-(int j) const
+
+ Returns an iterator to the item at \a j positions backward from
+ this iterator. If \a j is negative, the iterator goes forward.
+
+ \sa operator+(), operator-=()
+*/
+
+/*! \fn int QJsonArray::const_iterator::operator-(const_iterator other) const
+
+ Returns the number of items between the item pointed to by \a
+ other and the item pointed to by this iterator.
+*/
+
+
+/*!
+ \internal
+ */
+void QJsonArray::detach(uint reserve)
+{
+ Q_UNUSED(reserve)
+ Q_ASSERT(!reserve);
+ detach2(0);
+}
+
+/*!
+ \internal
+ */
+bool QJsonArray::detach2(uint reserve)
+{
+ if (!d) {
+ if (reserve >= QJsonPrivate::Value::MaxSize) {
+ qWarning("QJson: Document too large to store in data structure");
+ return false;
+ }
+ d = new QJsonPrivate::Data(reserve, QJsonValue::Array);
+ a = static_cast<QJsonPrivate::Array *>(d->header->root());
+ d->ref.ref();
+ return true;
+ }
+ if (reserve == 0 && d->ref.load() == 1)
+ return true;
+
+ QJsonPrivate::Data *x = d->clone(a, reserve);
+ if (!x)
+ return false;
+ x->ref.ref();
+ if (!d->ref.deref())
+ delete d;
+ d = x;
+ a = static_cast<QJsonPrivate::Array *>(d->header->root());
+ return true;
+}
+
+/*!
+ \internal
+ */
+void QJsonArray::compact()
+{
+ if (!d || !d->compactionCounter)
+ return;
+
+ detach2();
+ d->compact();
+ a = static_cast<QJsonPrivate::Array *>(d->header->root());
+}
+
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
+QDebug operator<<(QDebug dbg, const QJsonArray &a)
+{
+ QDebugStateSaver saver(dbg);
+ if (!a.a) {
+ dbg << "QJsonArray()";
+ return dbg;
+ }
+ QByteArray json;
+ QJsonPrivate::Writer::arrayToJson(a.a, json, 0, true);
+ dbg.nospace() << "QJsonArray("
+ << json.constData() // print as utf-8 string without extra quotation marks
+ << ")";
+ return dbg;
+}
+#endif
+
+QT_END_NAMESPACE
+
diff --git a/src/corelib/serialization/qjsonarray.h b/src/corelib/serialization/qjsonarray.h
new file mode 100644
index 0000000000..8d41138c97
--- /dev/null
+++ b/src/corelib/serialization/qjsonarray.h
@@ -0,0 +1,274 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJSONARRAY_H
+#define QJSONARRAY_H
+
+#include <QtCore/qjsonvalue.h>
+#include <QtCore/qiterator.h>
+#if defined(Q_COMPILER_INITIALIZER_LISTS)
+#include <initializer_list>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QDebug;
+class QStringList;
+template <typename T> class QList;
+typedef QList<QVariant> QVariantList;
+
+class Q_CORE_EXPORT QJsonArray
+{
+public:
+ QJsonArray();
+
+#if defined(Q_COMPILER_INITIALIZER_LISTS) || defined(Q_QDOC)
+ QJsonArray(std::initializer_list<QJsonValue> args)
+ {
+ initialize();
+ for (std::initializer_list<QJsonValue>::const_iterator i = args.begin(); i != args.end(); ++i)
+ append(*i);
+ }
+#endif
+
+ ~QJsonArray();
+
+ QJsonArray(const QJsonArray &other);
+ QJsonArray &operator =(const QJsonArray &other);
+
+ QJsonArray(QJsonArray &&other) Q_DECL_NOTHROW
+ : d(other.d),
+ a(other.a)
+ {
+ other.d = nullptr;
+ other.a = nullptr;
+ }
+
+ QJsonArray &operator =(QJsonArray &&other) Q_DECL_NOTHROW
+ {
+ swap(other);
+ return *this;
+ }
+
+ static QJsonArray fromStringList(const QStringList &list);
+ static QJsonArray fromVariantList(const QVariantList &list);
+ QVariantList toVariantList() const;
+
+ int size() const;
+ inline int count() const { return size(); }
+
+ bool isEmpty() const;
+ QJsonValue at(int i) const;
+ QJsonValue first() const;
+ QJsonValue last() const;
+
+ void prepend(const QJsonValue &value);
+ void append(const QJsonValue &value);
+ void removeAt(int i);
+ QJsonValue takeAt(int i);
+ inline void removeFirst() { removeAt(0); }
+ inline void removeLast() { removeAt(size() - 1); }
+
+ void insert(int i, const QJsonValue &value);
+ void replace(int i, const QJsonValue &value);
+
+ bool contains(const QJsonValue &element) const;
+ QJsonValueRef operator[](int i);
+ QJsonValue operator[](int i) const;
+
+ bool operator==(const QJsonArray &other) const;
+ bool operator!=(const QJsonArray &other) const;
+
+ void swap(QJsonArray &other) Q_DECL_NOTHROW
+ {
+ qSwap(d, other.d);
+ qSwap(a, other.a);
+ }
+
+ class const_iterator;
+
+ class iterator {
+ public:
+ QJsonArray *a;
+ int i;
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef int difference_type;
+ typedef QJsonValue value_type;
+ typedef QJsonValueRef reference;
+ typedef QJsonValueRefPtr pointer;
+
+ inline iterator() : a(nullptr), i(0) { }
+ explicit inline iterator(QJsonArray *array, int index) : a(array), i(index) { }
+
+ inline QJsonValueRef operator*() const { return QJsonValueRef(a, i); }
+#ifdef Q_QDOC
+ inline QJsonValueRef* operator->() const;
+#else
+ inline QJsonValueRefPtr operator->() const { return QJsonValueRefPtr(a, i); }
+#endif
+ inline QJsonValueRef operator[](int j) const { return QJsonValueRef(a, i + j); }
+
+ inline bool operator==(const iterator &o) const { return i == o.i; }
+ inline bool operator!=(const iterator &o) const { return i != o.i; }
+ inline bool operator<(const iterator& other) const { return i < other.i; }
+ inline bool operator<=(const iterator& other) const { return i <= other.i; }
+ inline bool operator>(const iterator& other) const { return i > other.i; }
+ inline bool operator>=(const iterator& other) const { return i >= other.i; }
+ inline bool operator==(const const_iterator &o) const { return i == o.i; }
+ inline bool operator!=(const const_iterator &o) const { return i != o.i; }
+ inline bool operator<(const const_iterator& other) const { return i < other.i; }
+ inline bool operator<=(const const_iterator& other) const { return i <= other.i; }
+ inline bool operator>(const const_iterator& other) const { return i > other.i; }
+ inline bool operator>=(const const_iterator& other) const { return i >= other.i; }
+ inline iterator &operator++() { ++i; return *this; }
+ inline iterator operator++(int) { iterator n = *this; ++i; return n; }
+ inline iterator &operator--() { i--; return *this; }
+ inline iterator operator--(int) { iterator n = *this; i--; return n; }
+ inline iterator &operator+=(int j) { i+=j; return *this; }
+ inline iterator &operator-=(int j) { i-=j; return *this; }
+ inline iterator operator+(int j) const { return iterator(a, i+j); }
+ inline iterator operator-(int j) const { return iterator(a, i-j); }
+ inline int operator-(iterator j) const { return i - j.i; }
+ };
+ friend class iterator;
+
+ class const_iterator {
+ public:
+ const QJsonArray *a;
+ int i;
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef qptrdiff difference_type;
+ typedef QJsonValue value_type;
+ typedef QJsonValue reference;
+ typedef QJsonValuePtr pointer;
+
+ inline const_iterator() : a(nullptr), i(0) { }
+ explicit inline const_iterator(const QJsonArray *array, int index) : a(array), i(index) { }
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ inline const_iterator(const const_iterator &o) : a(o.a), i(o.i) {} // ### Qt 6: Removed so class can be trivially-copyable
+#endif
+ inline const_iterator(const iterator &o) : a(o.a), i(o.i) {}
+
+ inline QJsonValue operator*() const { return a->at(i); }
+#ifdef Q_QDOC
+ inline QJsonValue* operator->() const;
+#else
+ inline QJsonValuePtr operator->() const { return QJsonValuePtr(a->at(i)); }
+#endif
+ inline QJsonValue operator[](int j) const { return a->at(i+j); }
+ inline bool operator==(const const_iterator &o) const { return i == o.i; }
+ inline bool operator!=(const const_iterator &o) const { return i != o.i; }
+ inline bool operator<(const const_iterator& other) const { return i < other.i; }
+ inline bool operator<=(const const_iterator& other) const { return i <= other.i; }
+ inline bool operator>(const const_iterator& other) const { return i > other.i; }
+ inline bool operator>=(const const_iterator& other) const { return i >= other.i; }
+ inline const_iterator &operator++() { ++i; return *this; }
+ inline const_iterator operator++(int) { const_iterator n = *this; ++i; return n; }
+ inline const_iterator &operator--() { i--; return *this; }
+ inline const_iterator operator--(int) { const_iterator n = *this; i--; return n; }
+ inline const_iterator &operator+=(int j) { i+=j; return *this; }
+ inline const_iterator &operator-=(int j) { i-=j; return *this; }
+ inline const_iterator operator+(int j) const { return const_iterator(a, i+j); }
+ inline const_iterator operator-(int j) const { return const_iterator(a, i-j); }
+ inline int operator-(const_iterator j) const { return i - j.i; }
+ };
+ friend class const_iterator;
+
+ // stl style
+ inline iterator begin() { detach2(); return iterator(this, 0); }
+ inline const_iterator begin() const { return const_iterator(this, 0); }
+ inline const_iterator constBegin() const { return const_iterator(this, 0); }
+ inline iterator end() { detach2(); return iterator(this, size()); }
+ inline const_iterator end() const { return const_iterator(this, size()); }
+ inline const_iterator constEnd() const { return const_iterator(this, size()); }
+ iterator insert(iterator before, const QJsonValue &value) { insert(before.i, value); return before; }
+ iterator erase(iterator it) { removeAt(it.i); return it; }
+
+ // more Qt
+ typedef iterator Iterator;
+ typedef const_iterator ConstIterator;
+
+ // convenience
+ inline QJsonArray operator+(const QJsonValue &v) const
+ { QJsonArray n = *this; n += v; return n; }
+ inline QJsonArray &operator+=(const QJsonValue &v)
+ { append(v); return *this; }
+ inline QJsonArray &operator<< (const QJsonValue &v)
+ { append(v); return *this; }
+
+ // stl compatibility
+ inline void push_back(const QJsonValue &t) { append(t); }
+ inline void push_front(const QJsonValue &t) { prepend(t); }
+ inline void pop_front() { removeFirst(); }
+ inline void pop_back() { removeLast(); }
+ inline bool empty() const { return isEmpty(); }
+ typedef int size_type;
+ typedef QJsonValue value_type;
+ typedef value_type *pointer;
+ typedef const value_type *const_pointer;
+ typedef QJsonValueRef reference;
+ typedef QJsonValue const_reference;
+ typedef int difference_type;
+
+private:
+ friend class QJsonPrivate::Data;
+ friend class QJsonValue;
+ friend class QJsonDocument;
+ friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
+
+ QJsonArray(QJsonPrivate::Data *data, QJsonPrivate::Array *array);
+ void initialize();
+ void compact();
+ // ### Qt 6: remove me and merge with detach2
+ void detach(uint reserve = 0);
+ bool detach2(uint reserve = 0);
+
+ QJsonPrivate::Data *d;
+ QJsonPrivate::Array *a;
+};
+
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonArray)
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
+Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonArray &);
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QJSONARRAY_H
diff --git a/src/corelib/serialization/qjsondocument.cpp b/src/corelib/serialization/qjsondocument.cpp
new file mode 100644
index 0000000000..9794bca60d
--- /dev/null
+++ b/src/corelib/serialization/qjsondocument.cpp
@@ -0,0 +1,667 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qjsondocument.h>
+#include <qjsonobject.h>
+#include <qjsonvalue.h>
+#include <qjsonarray.h>
+#include <qstringlist.h>
+#include <qvariant.h>
+#include <qdebug.h>
+#include "qjsonwriter_p.h"
+#include "qjsonparser_p.h"
+#include "qjson_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*! \class QJsonDocument
+ \inmodule QtCore
+ \ingroup json
+ \ingroup shared
+ \reentrant
+ \since 5.0
+
+ \brief The QJsonDocument class provides a way to read and write JSON documents.
+
+ QJsonDocument is a class that wraps a complete JSON document and can read and
+ write this document both from a UTF-8 encoded text based representation as well
+ as Qt's own binary format.
+
+ A JSON document can be converted from its text-based representation to a QJsonDocument
+ using QJsonDocument::fromJson(). toJson() converts it back to text. The parser is very
+ fast and efficient and converts the JSON to the binary representation used by Qt.
+
+ Validity of the parsed document can be queried with !isNull()
+
+ A document can be queried as to whether it contains an array or an object using isArray()
+ and isObject(). The array or object contained in the document can be retrieved using
+ array() or object() and then read or manipulated.
+
+ A document can also be created from a stored binary representation using fromBinaryData() or
+ fromRawData().
+
+ \sa {JSON Support in Qt}, {JSON Save Game Example}
+*/
+
+/*!
+ * Constructs an empty and invalid document.
+ */
+QJsonDocument::QJsonDocument()
+ : d(0)
+{
+}
+
+/*!
+ * Creates a QJsonDocument from \a object.
+ */
+QJsonDocument::QJsonDocument(const QJsonObject &object)
+ : d(0)
+{
+ setObject(object);
+}
+
+/*!
+ * Constructs a QJsonDocument from \a array.
+ */
+QJsonDocument::QJsonDocument(const QJsonArray &array)
+ : d(0)
+{
+ setArray(array);
+}
+
+/*!
+ \internal
+ */
+QJsonDocument::QJsonDocument(QJsonPrivate::Data *data)
+ : d(data)
+{
+ Q_ASSERT(d);
+ d->ref.ref();
+}
+
+/*!
+ Deletes the document.
+
+ Binary data set with fromRawData is not freed.
+ */
+QJsonDocument::~QJsonDocument()
+{
+ if (d && !d->ref.deref())
+ delete d;
+}
+
+/*!
+ * Creates a copy of the \a other document.
+ */
+QJsonDocument::QJsonDocument(const QJsonDocument &other)
+{
+ d = other.d;
+ if (d)
+ d->ref.ref();
+}
+
+/*!
+ * Assigns the \a other document to this QJsonDocument.
+ * Returns a reference to this object.
+ */
+QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other)
+{
+ if (d != other.d) {
+ if (d && !d->ref.deref())
+ delete d;
+ d = other.d;
+ if (d)
+ d->ref.ref();
+ }
+
+ return *this;
+}
+
+/*!
+ \fn QJsonDocument::QJsonDocument(QJsonDocument &&other)
+ \since 5.10
+
+ Move-constructs a QJsonDocument from \a other.
+*/
+
+/*!
+ \fn QJsonDocument &QJsonDocument::operator =(QJsonDocument &&other)
+ \since 5.10
+
+ Move-assigns \a other to this document.
+*/
+
+/*!
+ \fn void QJsonDocument::swap(QJsonDocument &other)
+ \since 5.10
+
+ Swaps the document \a other with this. This operation is very fast and never fails.
+*/
+
+
+/*! \enum QJsonDocument::DataValidation
+
+ This value is used to tell QJsonDocument whether to validate the binary data
+ when converting to a QJsonDocument using fromBinaryData() or fromRawData().
+
+ \value Validate Validate the data before using it. This is the default.
+ \value BypassValidation Bypasses data validation. Only use if you received the
+ data from a trusted place and know it's valid, as using of invalid data can crash
+ the application.
+ */
+
+/*!
+ Creates a QJsonDocument that uses the first \a size bytes from
+ \a data. It assumes \a data contains a binary encoded JSON document.
+ The created document does not take ownership of \a data and the caller
+ has to guarantee that \a data will not be deleted or modified as long as
+ any QJsonDocument, QJsonObject or QJsonArray still references the data.
+
+ \a data has to be aligned to a 4 byte boundary.
+
+ \a validation decides whether the data is checked for validity before being used.
+ By default the data is validated. If the \a data is not valid, the method returns
+ a null document.
+
+ Returns a QJsonDocument representing the data.
+
+ \sa rawData(), fromBinaryData(), isNull(), DataValidation
+ */
+QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation)
+{
+ if (quintptr(data) & 3) {
+ qWarning("QJsonDocument::fromRawData: data has to have 4 byte alignment");
+ return QJsonDocument();
+ }
+
+ QJsonPrivate::Data *d = new QJsonPrivate::Data((char *)data, size);
+ d->ownsData = false;
+
+ if (validation != BypassValidation && !d->valid()) {
+ delete d;
+ return QJsonDocument();
+ }
+
+ return QJsonDocument(d);
+}
+
+/*!
+ Returns the raw binary representation of the data
+ \a size will contain the size of the returned data.
+
+ This method is useful to e.g. stream the JSON document
+ in it's binary form to a file.
+ */
+const char *QJsonDocument::rawData(int *size) const
+{
+ if (!d) {
+ *size = 0;
+ return 0;
+ }
+ *size = d->alloc;
+ return d->rawData;
+}
+
+/*!
+ Creates a QJsonDocument from \a data.
+
+ \a validation decides whether the data is checked for validity before being used.
+ By default the data is validated. If the \a data is not valid, the method returns
+ a null document.
+
+ \sa toBinaryData(), fromRawData(), isNull(), DataValidation
+ */
+QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation)
+{
+ if (data.size() < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base)))
+ return QJsonDocument();
+
+ QJsonPrivate::Header h;
+ memcpy(&h, data.constData(), sizeof(QJsonPrivate::Header));
+ QJsonPrivate::Base root;
+ memcpy(&root, data.constData() + sizeof(QJsonPrivate::Header), sizeof(QJsonPrivate::Base));
+
+ // do basic checks here, so we don't try to allocate more memory than we can.
+ if (h.tag != QJsonDocument::BinaryFormatTag || h.version != 1u ||
+ sizeof(QJsonPrivate::Header) + root.size > (uint)data.size())
+ return QJsonDocument();
+
+ const uint size = sizeof(QJsonPrivate::Header) + root.size;
+ char *raw = (char *)malloc(size);
+ if (!raw)
+ return QJsonDocument();
+
+ memcpy(raw, data.constData(), size);
+ QJsonPrivate::Data *d = new QJsonPrivate::Data(raw, size);
+
+ if (validation != BypassValidation && !d->valid()) {
+ delete d;
+ return QJsonDocument();
+ }
+
+ return QJsonDocument(d);
+}
+
+/*!
+ Creates a QJsonDocument from the QVariant \a variant.
+
+ If the \a variant contains any other type than a QVariantMap,
+ QVariantHash, QVariantList or QStringList, the returned document is invalid.
+
+ \sa toVariant()
+ */
+QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)
+{
+ QJsonDocument doc;
+ switch (variant.type()) {
+ case QVariant::Map:
+ doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));
+ break;
+ case QVariant::Hash:
+ doc.setObject(QJsonObject::fromVariantHash(variant.toHash()));
+ break;
+ case QVariant::List:
+ doc.setArray(QJsonArray::fromVariantList(variant.toList()));
+ break;
+ case QVariant::StringList:
+ doc.setArray(QJsonArray::fromStringList(variant.toStringList()));
+ break;
+ default:
+ break;
+ }
+ return doc;
+}
+
+/*!
+ Returns a QVariant representing the Json document.
+
+ The returned variant will be a QVariantList if the document is
+ a QJsonArray and a QVariantMap if the document is a QJsonObject.
+
+ \sa fromVariant(), QJsonValue::toVariant()
+ */
+QVariant QJsonDocument::toVariant() const
+{
+ if (!d)
+ return QVariant();
+
+ if (d->header->root()->isArray())
+ return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root())).toVariantList();
+ else
+ return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root())).toVariantMap();
+}
+
+/*!
+ Converts the QJsonDocument to a UTF-8 encoded JSON document.
+
+ \sa fromJson()
+ */
+#if !defined(QT_JSON_READONLY) || defined(Q_CLANG_QDOC)
+QByteArray QJsonDocument::toJson() const
+{
+ return toJson(Indented);
+}
+#endif
+
+/*!
+ \enum QJsonDocument::JsonFormat
+
+ This value defines the format of the JSON byte array produced
+ when converting to a QJsonDocument using toJson().
+
+ \value Indented Defines human readable output as follows:
+ \code
+ {
+ "Array": [
+ true,
+ 999,
+ "string"
+ ],
+ "Key": "Value",
+ "null": null
+ }
+ \endcode
+
+ \value Compact Defines a compact output as follows:
+ \code
+ {"Array":[true,999,"string"],"Key":"Value","null":null}
+ \endcode
+ */
+
+/*!
+ Converts the QJsonDocument to a UTF-8 encoded JSON document in the provided \a format.
+
+ \sa fromJson(), JsonFormat
+ */
+#if !defined(QT_JSON_READONLY) || defined(Q_CLANG_QDOC)
+QByteArray QJsonDocument::toJson(JsonFormat format) const
+{
+ QByteArray json;
+ if (!d)
+ return json;
+
+ if (d->header->root()->isArray())
+ QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact));
+ else
+ QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(d->header->root()), json, 0, (format == Compact));
+
+ return json;
+}
+#endif
+
+/*!
+ Parses \a json as a UTF-8 encoded JSON document, and creates a QJsonDocument
+ from it.
+
+ Returns a valid (non-null) QJsonDocument if the parsing succeeds. If it fails,
+ the returned document will be null, and the optional \a error variable will contain
+ further details about the error.
+
+ \sa toJson(), QJsonParseError, isNull()
+ */
+QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error)
+{
+ QJsonPrivate::Parser parser(json.constData(), json.length());
+ return parser.parse(error);
+}
+
+/*!
+ Returns \c true if the document doesn't contain any data.
+ */
+bool QJsonDocument::isEmpty() const
+{
+ if (!d)
+ return true;
+
+ return false;
+}
+
+/*!
+ Returns a binary representation of the document.
+
+ The binary representation is also the native format used internally in Qt,
+ and is very efficient and fast to convert to and from.
+
+ The binary format can be stored on disk and interchanged with other applications
+ or computers. fromBinaryData() can be used to convert it back into a
+ JSON document.
+
+ \sa fromBinaryData()
+ */
+QByteArray QJsonDocument::toBinaryData() const
+{
+ if (!d || !d->rawData)
+ return QByteArray();
+
+ return QByteArray(d->rawData, d->header->root()->size + sizeof(QJsonPrivate::Header));
+}
+
+/*!
+ Returns \c true if the document contains an array.
+
+ \sa array(), isObject()
+ */
+bool QJsonDocument::isArray() const
+{
+ if (!d)
+ return false;
+
+ QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;
+ return h->root()->isArray();
+}
+
+/*!
+ Returns \c true if the document contains an object.
+
+ \sa object(), isArray()
+ */
+bool QJsonDocument::isObject() const
+{
+ if (!d)
+ return false;
+
+ QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;
+ return h->root()->isObject();
+}
+
+/*!
+ Returns the QJsonObject contained in the document.
+
+ Returns an empty object if the document contains an
+ array.
+
+ \sa isObject(), array(), setObject()
+ */
+QJsonObject QJsonDocument::object() const
+{
+ if (d) {
+ QJsonPrivate::Base *b = d->header->root();
+ if (b->isObject())
+ return QJsonObject(d, static_cast<QJsonPrivate::Object *>(b));
+ }
+ return QJsonObject();
+}
+
+/*!
+ Returns the QJsonArray contained in the document.
+
+ Returns an empty array if the document contains an
+ object.
+
+ \sa isArray(), object(), setArray()
+ */
+QJsonArray QJsonDocument::array() const
+{
+ if (d) {
+ QJsonPrivate::Base *b = d->header->root();
+ if (b->isArray())
+ return QJsonArray(d, static_cast<QJsonPrivate::Array *>(b));
+ }
+ return QJsonArray();
+}
+
+/*!
+ Sets \a object as the main object of this document.
+
+ \sa setArray(), object()
+ */
+void QJsonDocument::setObject(const QJsonObject &object)
+{
+ if (d && !d->ref.deref())
+ delete d;
+
+ d = object.d;
+
+ if (!d) {
+ d = new QJsonPrivate::Data(0, QJsonValue::Object);
+ } else if (d->compactionCounter || object.o != d->header->root()) {
+ QJsonObject o(object);
+ if (d->compactionCounter)
+ o.compact();
+ else
+ o.detach2();
+ d = o.d;
+ d->ref.ref();
+ return;
+ }
+ d->ref.ref();
+}
+
+/*!
+ Sets \a array as the main object of this document.
+
+ \sa setObject(), array()
+ */
+void QJsonDocument::setArray(const QJsonArray &array)
+{
+ if (d && !d->ref.deref())
+ delete d;
+
+ d = array.d;
+
+ if (!d) {
+ d = new QJsonPrivate::Data(0, QJsonValue::Array);
+ } else if (d->compactionCounter || array.a != d->header->root()) {
+ QJsonArray a(array);
+ if (d->compactionCounter)
+ a.compact();
+ else
+ a.detach2();
+ d = a.d;
+ d->ref.ref();
+ return;
+ }
+ d->ref.ref();
+}
+
+/*!
+ Returns a QJsonValue representing the value for the key \a key.
+
+ Equivalent to calling object().value(key).
+
+ The returned QJsonValue is QJsonValue::Undefined if the key does not exist,
+ or if isObject() is false.
+
+ \since 5.10
+
+ \sa QJsonValue, QJsonValue::isUndefined(), QJsonObject
+ */
+const QJsonValue QJsonDocument::operator[](const QString &key) const
+{
+ if (!isObject())
+ return QJsonValue(QJsonValue::Undefined);
+
+ return object().value(key);
+}
+
+/*!
+ \overload
+ \since 5.10
+*/
+const QJsonValue QJsonDocument::operator[](QLatin1String key) const
+{
+ if (!isObject())
+ return QJsonValue(QJsonValue::Undefined);
+
+ return object().value(key);
+}
+
+/*!
+ Returns a QJsonValue representing the value for index \a i.
+
+ Equivalent to calling array().at(i).
+
+ The returned QJsonValue is QJsonValue::Undefined, if \a i is out of bounds,
+ or if isArray() is false.
+
+ \since 5.10
+
+ \sa QJsonValue, QJsonValue::isUndefined(), QJsonArray
+ */
+const QJsonValue QJsonDocument::operator[](int i) const
+{
+ if (!isArray())
+ return QJsonValue(QJsonValue::Undefined);
+
+ return array().at(i);
+}
+
+/*!
+ Returns \c true if the \a other document is equal to this document.
+ */
+bool QJsonDocument::operator==(const QJsonDocument &other) const
+{
+ if (d == other.d)
+ return true;
+
+ if (!d || !other.d)
+ return false;
+
+ if (d->header->root()->isArray() != other.d->header->root()->isArray())
+ return false;
+
+ if (d->header->root()->isObject())
+ return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root()))
+ == QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.d->header->root()));
+ else
+ return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root()))
+ == QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.d->header->root()));
+}
+
+/*!
+ \fn bool QJsonDocument::operator!=(const QJsonDocument &other) const
+
+ returns \c true if \a other is not equal to this document
+ */
+
+/*!
+ returns \c true if this document is null.
+
+ Null documents are documents created through the default constructor.
+
+ Documents created from UTF-8 encoded text or the binary format are
+ validated during parsing. If validation fails, the returned document
+ will also be null.
+ */
+bool QJsonDocument::isNull() const
+{
+ return (d == 0);
+}
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
+QDebug operator<<(QDebug dbg, const QJsonDocument &o)
+{
+ QDebugStateSaver saver(dbg);
+ if (!o.d) {
+ dbg << "QJsonDocument()";
+ return dbg;
+ }
+ QByteArray json;
+ if (o.d->header->root()->isArray())
+ QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(o.d->header->root()), json, 0, true);
+ else
+ QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(o.d->header->root()), json, 0, true);
+ dbg.nospace() << "QJsonDocument("
+ << json.constData() // print as utf-8 string without extra quotation marks
+ << ')';
+ return dbg;
+}
+#endif
+
+QT_END_NAMESPACE
diff --git a/src/corelib/serialization/qjsondocument.h b/src/corelib/serialization/qjsondocument.h
new file mode 100644
index 0000000000..b784890c54
--- /dev/null
+++ b/src/corelib/serialization/qjsondocument.h
@@ -0,0 +1,177 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJSONDOCUMENT_H
+#define QJSONDOCUMENT_H
+
+#include <QtCore/qjsonvalue.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDebug;
+
+namespace QJsonPrivate {
+ class Parser;
+}
+
+struct Q_CORE_EXPORT QJsonParseError
+{
+ enum ParseError {
+ NoError = 0,
+ UnterminatedObject,
+ MissingNameSeparator,
+ UnterminatedArray,
+ MissingValueSeparator,
+ IllegalValue,
+ TerminationByNumber,
+ IllegalNumber,
+ IllegalEscapeSequence,
+ IllegalUTF8String,
+ UnterminatedString,
+ MissingObject,
+ DeepNesting,
+ DocumentTooLarge,
+ GarbageAtEnd
+ };
+
+ QString errorString() const;
+
+ int offset;
+ ParseError error;
+};
+
+class Q_CORE_EXPORT QJsonDocument
+{
+public:
+#ifdef Q_LITTLE_ENDIAN
+ static const uint BinaryFormatTag = ('q') | ('b' << 8) | ('j' << 16) | ('s' << 24);
+#else
+ static const uint BinaryFormatTag = ('q' << 24) | ('b' << 16) | ('j' << 8) | ('s');
+#endif
+
+ QJsonDocument();
+ explicit QJsonDocument(const QJsonObject &object);
+ explicit QJsonDocument(const QJsonArray &array);
+ ~QJsonDocument();
+
+ QJsonDocument(const QJsonDocument &other);
+ QJsonDocument &operator =(const QJsonDocument &other);
+
+ QJsonDocument(QJsonDocument &&other) Q_DECL_NOTHROW
+ : d(other.d)
+ {
+ other.d = nullptr;
+ }
+
+ QJsonDocument &operator =(QJsonDocument &&other) Q_DECL_NOTHROW
+ {
+ swap(other);
+ return *this;
+ }
+
+ void swap(QJsonDocument &other) Q_DECL_NOTHROW
+ {
+ qSwap(d, other.d);
+ }
+
+ enum DataValidation {
+ Validate,
+ BypassValidation
+ };
+
+ static QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate);
+ const char *rawData(int *size) const;
+
+ static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate);
+ QByteArray toBinaryData() const;
+
+ static QJsonDocument fromVariant(const QVariant &variant);
+ QVariant toVariant() const;
+
+ enum JsonFormat {
+ Indented,
+ Compact
+ };
+
+ static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr);
+
+#if !defined(QT_JSON_READONLY) || defined(Q_CLANG_QDOC)
+ QByteArray toJson() const; //### Merge in Qt6
+ QByteArray toJson(JsonFormat format) const;
+#endif
+
+ bool isEmpty() const;
+ bool isArray() const;
+ bool isObject() const;
+
+ QJsonObject object() const;
+ QJsonArray array() const;
+
+ void setObject(const QJsonObject &object);
+ void setArray(const QJsonArray &array);
+
+ const QJsonValue operator[](const QString &key) const;
+ const QJsonValue operator[](QLatin1String key) const;
+ const QJsonValue operator[](int i) const;
+
+ bool operator==(const QJsonDocument &other) const;
+ bool operator!=(const QJsonDocument &other) const { return !(*this == other); }
+
+ bool isNull() const;
+
+private:
+ friend class QJsonValue;
+ friend class QJsonPrivate::Data;
+ friend class QJsonPrivate::Parser;
+ friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
+
+ QJsonDocument(QJsonPrivate::Data *data);
+
+ QJsonPrivate::Data *d;
+};
+
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonDocument)
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
+Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonDocument &);
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QJSONDOCUMENT_H
diff --git a/src/corelib/json/qjsonobject.cpp b/src/corelib/serialization/qjsonobject.cpp
index 4a316c8a6f..4a316c8a6f 100644
--- a/src/corelib/json/qjsonobject.cpp
+++ b/src/corelib/serialization/qjsonobject.cpp
diff --git a/src/corelib/serialization/qjsonobject.h b/src/corelib/serialization/qjsonobject.h
new file mode 100644
index 0000000000..610bce694c
--- /dev/null
+++ b/src/corelib/serialization/qjsonobject.h
@@ -0,0 +1,271 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJSONOBJECT_H
+#define QJSONOBJECT_H
+
+#include <QtCore/qjsonvalue.h>
+#include <QtCore/qiterator.h>
+#ifdef Q_COMPILER_INITIALIZER_LISTS
+#include <QtCore/qpair.h>
+#include <initializer_list>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QDebug;
+template <class Key, class T> class QMap;
+typedef QMap<QString, QVariant> QVariantMap;
+template <class Key, class T> class QHash;
+typedef QHash<QString, QVariant> QVariantHash;
+
+class Q_CORE_EXPORT QJsonObject
+{
+public:
+ QJsonObject();
+
+#if defined(Q_COMPILER_INITIALIZER_LISTS) || defined(Q_QDOC)
+ QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)
+ {
+ initialize();
+ for (std::initializer_list<QPair<QString, QJsonValue> >::const_iterator i = args.begin(); i != args.end(); ++i)
+ insert(i->first, i->second);
+ }
+#endif
+
+ ~QJsonObject();
+
+ QJsonObject(const QJsonObject &other);
+ QJsonObject &operator =(const QJsonObject &other);
+
+ QJsonObject(QJsonObject &&other) Q_DECL_NOTHROW
+ : d(other.d), o(other.o)
+ {
+ other.d = nullptr;
+ other.o = nullptr;
+ }
+
+ QJsonObject &operator =(QJsonObject &&other) Q_DECL_NOTHROW
+ {
+ swap(other);
+ return *this;
+ }
+
+ void swap(QJsonObject &other) Q_DECL_NOTHROW
+ {
+ qSwap(d, other.d);
+ qSwap(o, other.o);
+ }
+
+ static QJsonObject fromVariantMap(const QVariantMap &map);
+ QVariantMap toVariantMap() const;
+ static QJsonObject fromVariantHash(const QVariantHash &map);
+ QVariantHash toVariantHash() const;
+
+ QStringList keys() const;
+ int size() const;
+ inline int count() const { return size(); }
+ inline int length() const { return size(); }
+ bool isEmpty() const;
+
+ QJsonValue value(const QString &key) const;
+ QJsonValue value(QLatin1String key) const;
+ QJsonValue operator[] (const QString &key) const;
+ QJsonValue operator[] (QLatin1String key) const { return value(key); }
+ QJsonValueRef operator[] (const QString &key);
+ QJsonValueRef operator[] (QLatin1String key);
+
+ void remove(const QString &key);
+ QJsonValue take(const QString &key);
+ bool contains(const QString &key) const;
+ bool contains(QLatin1String key) const;
+
+ bool operator==(const QJsonObject &other) const;
+ bool operator!=(const QJsonObject &other) const;
+
+ class const_iterator;
+
+ class iterator
+ {
+ friend class const_iterator;
+ friend class QJsonObject;
+ QJsonObject *o;
+ int i;
+
+ public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef int difference_type;
+ typedef QJsonValue value_type;
+ typedef QJsonValueRef reference;
+ typedef QJsonValuePtr pointer;
+
+ Q_DECL_CONSTEXPR inline iterator() : o(nullptr), i(0) {}
+ Q_DECL_CONSTEXPR inline iterator(QJsonObject *obj, int index) : o(obj), i(index) {}
+
+ inline QString key() const { return o->keyAt(i); }
+ inline QJsonValueRef value() const { return QJsonValueRef(o, i); }
+ inline QJsonValueRef operator*() const { return QJsonValueRef(o, i); }
+#ifdef Q_QDOC
+ inline QJsonValueRef* operator->() const;
+#else
+ inline QJsonValueRefPtr operator->() const { return QJsonValueRefPtr(o, i); }
+#endif
+ inline bool operator==(const iterator &other) const { return i == other.i; }
+ inline bool operator!=(const iterator &other) const { return i != other.i; }
+
+ inline iterator &operator++() { ++i; return *this; }
+ inline iterator operator++(int) { iterator r = *this; ++i; return r; }
+ inline iterator &operator--() { --i; return *this; }
+ inline iterator operator--(int) { iterator r = *this; --i; return r; }
+ inline iterator operator+(int j) const
+ { iterator r = *this; r.i += j; return r; }
+ inline iterator operator-(int j) const { return operator+(-j); }
+ inline iterator &operator+=(int j) { i += j; return *this; }
+ inline iterator &operator-=(int j) { i -= j; return *this; }
+
+ public:
+ inline bool operator==(const const_iterator &other) const { return i == other.i; }
+ inline bool operator!=(const const_iterator &other) const { return i != other.i; }
+ };
+ friend class iterator;
+
+ class const_iterator
+ {
+ friend class iterator;
+ const QJsonObject *o;
+ int i;
+
+ public:
+ typedef std::random_access_iterator_tag iterator_category;
+ typedef int difference_type;
+ typedef QJsonValue value_type;
+ typedef QJsonValue reference;
+ typedef QJsonValuePtr pointer;
+
+ Q_DECL_CONSTEXPR inline const_iterator() : o(nullptr), i(0) {}
+ Q_DECL_CONSTEXPR inline const_iterator(const QJsonObject *obj, int index)
+ : o(obj), i(index) {}
+ inline const_iterator(const iterator &other)
+ : o(other.o), i(other.i) {}
+
+ inline QString key() const { return o->keyAt(i); }
+ inline QJsonValue value() const { return o->valueAt(i); }
+ inline QJsonValue operator*() const { return o->valueAt(i); }
+#ifdef Q_QDOC
+ inline QJsonValue* operator->() const;
+#else
+ inline QJsonValuePtr operator->() const { return QJsonValuePtr(o->valueAt(i)); }
+#endif
+ inline bool operator==(const const_iterator &other) const { return i == other.i; }
+ inline bool operator!=(const const_iterator &other) const { return i != other.i; }
+
+ inline const_iterator &operator++() { ++i; return *this; }
+ inline const_iterator operator++(int) { const_iterator r = *this; ++i; return r; }
+ inline const_iterator &operator--() { --i; return *this; }
+ inline const_iterator operator--(int) { const_iterator r = *this; --i; return r; }
+ inline const_iterator operator+(int j) const
+ { const_iterator r = *this; r.i += j; return r; }
+ inline const_iterator operator-(int j) const { return operator+(-j); }
+ inline const_iterator &operator+=(int j) { i += j; return *this; }
+ inline const_iterator &operator-=(int j) { i -= j; return *this; }
+
+ inline bool operator==(const iterator &other) const { return i == other.i; }
+ inline bool operator!=(const iterator &other) const { return i != other.i; }
+ };
+ friend class const_iterator;
+
+ // STL style
+ inline iterator begin() { detach2(); return iterator(this, 0); }
+ inline const_iterator begin() const { return const_iterator(this, 0); }
+ inline const_iterator constBegin() const { return const_iterator(this, 0); }
+ inline iterator end() { detach2(); return iterator(this, size()); }
+ inline const_iterator end() const { return const_iterator(this, size()); }
+ inline const_iterator constEnd() const { return const_iterator(this, size()); }
+ iterator erase(iterator it);
+
+ // more Qt
+ typedef iterator Iterator;
+ typedef const_iterator ConstIterator;
+ iterator find(const QString &key);
+ iterator find(QLatin1String key);
+ const_iterator find(const QString &key) const { return constFind(key); }
+ const_iterator find(QLatin1String key) const { return constFind(key); }
+ const_iterator constFind(const QString &key) const;
+ const_iterator constFind(QLatin1String key) const;
+ iterator insert(const QString &key, const QJsonValue &value);
+
+ // STL compatibility
+ typedef QJsonValue mapped_type;
+ typedef QString key_type;
+ typedef int size_type;
+
+ inline bool empty() const { return isEmpty(); }
+
+private:
+ friend class QJsonPrivate::Data;
+ friend class QJsonValue;
+ friend class QJsonDocument;
+ friend class QJsonValueRef;
+
+ friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &);
+
+ QJsonObject(QJsonPrivate::Data *data, QJsonPrivate::Object *object);
+ void initialize();
+ // ### Qt 6: remove me and merge with detach2
+ void detach(uint reserve = 0);
+ bool detach2(uint reserve = 0);
+ void compact();
+
+ QString keyAt(int i) const;
+ QJsonValue valueAt(int i) const;
+ void setValueAt(int i, const QJsonValue &val);
+
+ QJsonPrivate::Data *d;
+ QJsonPrivate::Object *o;
+};
+
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonObject)
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
+Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonObject &);
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QJSONOBJECT_H
diff --git a/src/corelib/json/qjsonparser.cpp b/src/corelib/serialization/qjsonparser.cpp
index 39738b90a8..39738b90a8 100644
--- a/src/corelib/json/qjsonparser.cpp
+++ b/src/corelib/serialization/qjsonparser.cpp
diff --git a/src/corelib/json/qjsonparser_p.h b/src/corelib/serialization/qjsonparser_p.h
index 379256847f..379256847f 100644
--- a/src/corelib/json/qjsonparser_p.h
+++ b/src/corelib/serialization/qjsonparser_p.h
diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/serialization/qjsonvalue.cpp
index 33707b6ec3..33707b6ec3 100644
--- a/src/corelib/json/qjsonvalue.cpp
+++ b/src/corelib/serialization/qjsonvalue.cpp
diff --git a/src/corelib/serialization/qjsonvalue.h b/src/corelib/serialization/qjsonvalue.h
new file mode 100644
index 0000000000..96538ebbf9
--- /dev/null
+++ b/src/corelib/serialization/qjsonvalue.h
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJSONVALUE_H
+#define QJSONVALUE_H
+
+#include <QtCore/qglobal.h>
+#include <QtCore/qstring.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDebug;
+class QVariant;
+class QJsonArray;
+class QJsonObject;
+
+namespace QJsonPrivate {
+ class Data;
+ class Base;
+ class Object;
+ class Header;
+ class Array;
+ class Value;
+ class Entry;
+}
+
+class Q_CORE_EXPORT QJsonValue
+{
+public:
+ enum Type {
+ Null = 0x0,
+ Bool = 0x1,
+ Double = 0x2,
+ String = 0x3,
+ Array = 0x4,
+ Object = 0x5,
+ Undefined = 0x80
+ };
+
+ QJsonValue(Type = Null);
+ QJsonValue(bool b);
+ QJsonValue(double n);
+ QJsonValue(int n);
+ QJsonValue(qint64 n);
+ QJsonValue(const QString &s);
+ QJsonValue(QLatin1String s);
+#ifndef QT_NO_CAST_FROM_ASCII
+ inline QT_ASCII_CAST_WARN QJsonValue(const char *s)
+ : d(nullptr), t(String) { stringDataFromQStringHelper(QString::fromUtf8(s)); }
+#endif
+ QJsonValue(const QJsonArray &a);
+ QJsonValue(const QJsonObject &o);
+
+ ~QJsonValue();
+
+ QJsonValue(const QJsonValue &other);
+ QJsonValue &operator =(const QJsonValue &other);
+
+ QJsonValue(QJsonValue &&other) Q_DECL_NOTHROW
+ : ui(other.ui),
+ d(other.d),
+ t(other.t)
+ {
+ other.ui = 0;
+ other.d = nullptr;
+ other.t = Null;
+ }
+
+ QJsonValue &operator =(QJsonValue &&other) Q_DECL_NOTHROW
+ {
+ swap(other);
+ return *this;
+ }
+
+ void swap(QJsonValue &other) Q_DECL_NOTHROW
+ {
+ qSwap(ui, other.ui);
+ qSwap(d, other.d);
+ qSwap(t, other.t);
+ }
+
+ static QJsonValue fromVariant(const QVariant &variant);
+ QVariant toVariant() const;
+
+ Type type() const;
+ inline bool isNull() const { return type() == Null; }
+ inline bool isBool() const { return type() == Bool; }
+ inline bool isDouble() const { return type() == Double; }
+ inline bool isString() const { return type() == String; }
+ inline bool isArray() const { return type() == Array; }
+ inline bool isObject() const { return type() == Object; }
+ inline bool isUndefined() const { return type() == Undefined; }
+
+ bool toBool(bool defaultValue = false) const;
+ int toInt(int defaultValue = 0) const;
+ double toDouble(double defaultValue = 0) const;
+ QString toString() const;
+ QString toString(const QString &defaultValue) const;
+ QJsonArray toArray() const;
+ QJsonArray toArray(const QJsonArray &defaultValue) const;
+ QJsonObject toObject() const;
+ QJsonObject toObject(const QJsonObject &defaultValue) const;
+
+ const QJsonValue operator[](const QString &key) const;
+ const QJsonValue operator[](QLatin1String key) const;
+ const QJsonValue operator[](int i) const;
+
+ bool operator==(const QJsonValue &other) const;
+ bool operator!=(const QJsonValue &other) const;
+
+private:
+ // avoid implicit conversions from char * to bool
+ inline QJsonValue(const void *) {}
+ friend class QJsonPrivate::Value;
+ friend class QJsonArray;
+ friend class QJsonObject;
+ friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &);
+
+ QJsonValue(QJsonPrivate::Data *d, QJsonPrivate::Base *b, const QJsonPrivate::Value& v);
+ void stringDataFromQStringHelper(const QString &string);
+
+ void detach();
+
+ union {
+ quint64 ui;
+ bool b;
+ double dbl;
+ QStringData *stringData;
+ QJsonPrivate::Base *base;
+ };
+ QJsonPrivate::Data *d; // needed for Objects and Arrays
+ Type t;
+};
+
+class Q_CORE_EXPORT QJsonValueRef
+{
+public:
+ QJsonValueRef(QJsonArray *array, int idx)
+ : a(array), is_object(false), index(idx) {}
+ QJsonValueRef(QJsonObject *object, int idx)
+ : o(object), is_object(true), index(idx) {}
+
+ inline operator QJsonValue() const { return toValue(); }
+ QJsonValueRef &operator = (const QJsonValue &val);
+ QJsonValueRef &operator = (const QJsonValueRef &val);
+
+ QVariant toVariant() const;
+ inline QJsonValue::Type type() const { return toValue().type(); }
+ inline bool isNull() const { return type() == QJsonValue::Null; }
+ inline bool isBool() const { return type() == QJsonValue::Bool; }
+ inline bool isDouble() const { return type() == QJsonValue::Double; }
+ inline bool isString() const { return type() == QJsonValue::String; }
+ inline bool isArray() const { return type() == QJsonValue::Array; }
+ inline bool isObject() const { return type() == QJsonValue::Object; }
+ inline bool isUndefined() const { return type() == QJsonValue::Undefined; }
+
+ inline bool toBool() const { return toValue().toBool(); }
+ inline int toInt() const { return toValue().toInt(); }
+ inline double toDouble() const { return toValue().toDouble(); }
+ inline QString toString() const { return toValue().toString(); }
+ QJsonArray toArray() const;
+ QJsonObject toObject() const;
+
+ // ### Qt 6: Add default values
+ inline bool toBool(bool defaultValue) const { return toValue().toBool(defaultValue); }
+ inline int toInt(int defaultValue) const { return toValue().toInt(defaultValue); }
+ inline double toDouble(double defaultValue) const { return toValue().toDouble(defaultValue); }
+ inline QString toString(const QString &defaultValue) const { return toValue().toString(defaultValue); }
+
+ inline bool operator==(const QJsonValue &other) const { return toValue() == other; }
+ inline bool operator!=(const QJsonValue &other) const { return toValue() != other; }
+
+private:
+ QJsonValue toValue() const;
+
+ union {
+ QJsonArray *a;
+ QJsonObject *o;
+ };
+ uint is_object : 1;
+ uint index : 31;
+};
+
+#ifndef Q_QDOC
+// ### Qt 6: Get rid of these fake pointer classes
+class QJsonValuePtr
+{
+ QJsonValue value;
+public:
+ explicit QJsonValuePtr(const QJsonValue& val)
+ : value(val) {}
+
+ QJsonValue& operator*() { return value; }
+ QJsonValue* operator->() { return &value; }
+};
+
+class QJsonValueRefPtr
+{
+ QJsonValueRef valueRef;
+public:
+ QJsonValueRefPtr(QJsonArray *array, int idx)
+ : valueRef(array, idx) {}
+ QJsonValueRefPtr(QJsonObject *object, int idx)
+ : valueRef(object, idx) {}
+
+ QJsonValueRef& operator*() { return valueRef; }
+ QJsonValueRef* operator->() { return &valueRef; }
+};
+#endif
+
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QJsonValue)
+
+#if !defined(QT_NO_DEBUG_STREAM) && !defined(QT_JSON_READONLY)
+Q_CORE_EXPORT QDebug operator<<(QDebug, const QJsonValue &);
+#endif
+
+QT_END_NAMESPACE
+
+#endif // QJSONVALUE_H
diff --git a/src/corelib/json/qjsonwriter.cpp b/src/corelib/serialization/qjsonwriter.cpp
index 12ce20ef09..12ce20ef09 100644
--- a/src/corelib/json/qjsonwriter.cpp
+++ b/src/corelib/serialization/qjsonwriter.cpp
diff --git a/src/corelib/json/qjsonwriter_p.h b/src/corelib/serialization/qjsonwriter_p.h
index 76a8460449..76a8460449 100644
--- a/src/corelib/json/qjsonwriter_p.h
+++ b/src/corelib/serialization/qjsonwriter_p.h
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/serialization/qtextstream.cpp
index ee3cb4efcb..ee3cb4efcb 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/serialization/qtextstream.cpp
diff --git a/src/corelib/serialization/qtextstream.h b/src/corelib/serialization/qtextstream.h
new file mode 100644
index 0000000000..ee0b09419d
--- /dev/null
+++ b/src/corelib/serialization/qtextstream.h
@@ -0,0 +1,287 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTEXTSTREAM_H
+#define QTEXTSTREAM_H
+
+#include <QtCore/qiodevice.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qchar.h>
+#include <QtCore/qlocale.h>
+#include <QtCore/qscopedpointer.h>
+
+#include <stdio.h>
+
+#ifdef Status
+#error qtextstream.h must be included before any header file that defines Status
+#endif
+
+QT_BEGIN_NAMESPACE
+
+
+class QTextCodec;
+class QTextDecoder;
+
+class QTextStreamPrivate;
+class Q_CORE_EXPORT QTextStream // text stream class
+{
+ Q_DECLARE_PRIVATE(QTextStream)
+
+public:
+ enum RealNumberNotation {
+ SmartNotation,
+ FixedNotation,
+ ScientificNotation
+ };
+ enum FieldAlignment {
+ AlignLeft,
+ AlignRight,
+ AlignCenter,
+ AlignAccountingStyle
+ };
+ enum Status {
+ Ok,
+ ReadPastEnd,
+ ReadCorruptData,
+ WriteFailed
+ };
+ enum NumberFlag {
+ ShowBase = 0x1,
+ ForcePoint = 0x2,
+ ForceSign = 0x4,
+ UppercaseBase = 0x8,
+ UppercaseDigits = 0x10
+ };
+ Q_DECLARE_FLAGS(NumberFlags, NumberFlag)
+
+ QTextStream();
+ explicit QTextStream(QIODevice *device);
+ explicit QTextStream(FILE *fileHandle, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
+ explicit QTextStream(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
+ explicit QTextStream(QByteArray *array, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
+ explicit QTextStream(const QByteArray &array, QIODevice::OpenMode openMode = QIODevice::ReadOnly);
+ virtual ~QTextStream();
+
+#ifndef QT_NO_TEXTCODEC
+ void setCodec(QTextCodec *codec);
+ void setCodec(const char *codecName);
+ QTextCodec *codec() const;
+ void setAutoDetectUnicode(bool enabled);
+ bool autoDetectUnicode() const;
+ void setGenerateByteOrderMark(bool generate);
+ bool generateByteOrderMark() const;
+#endif
+
+ void setLocale(const QLocale &locale);
+ QLocale locale() const;
+
+ void setDevice(QIODevice *device);
+ QIODevice *device() const;
+
+ void setString(QString *string, QIODevice::OpenMode openMode = QIODevice::ReadWrite);
+ QString *string() const;
+
+ Status status() const;
+ void setStatus(Status status);
+ void resetStatus();
+
+ bool atEnd() const;
+ void reset();
+ void flush();
+ bool seek(qint64 pos);
+ qint64 pos() const;
+
+ void skipWhiteSpace();
+
+ QString readLine(qint64 maxlen = 0);
+ bool readLineInto(QString *line, qint64 maxlen = 0);
+ QString readAll();
+ QString read(qint64 maxlen);
+
+ void setFieldAlignment(FieldAlignment alignment);
+ FieldAlignment fieldAlignment() const;
+
+ void setPadChar(QChar ch);
+ QChar padChar() const;
+
+ void setFieldWidth(int width);
+ int fieldWidth() const;
+
+ void setNumberFlags(NumberFlags flags);
+ NumberFlags numberFlags() const;
+
+ void setIntegerBase(int base);
+ int integerBase() const;
+
+ void setRealNumberNotation(RealNumberNotation notation);
+ RealNumberNotation realNumberNotation() const;
+
+ void setRealNumberPrecision(int precision);
+ int realNumberPrecision() const;
+
+ QTextStream &operator>>(QChar &ch);
+ QTextStream &operator>>(char &ch);
+ QTextStream &operator>>(signed short &i);
+ QTextStream &operator>>(unsigned short &i);
+ QTextStream &operator>>(signed int &i);
+ QTextStream &operator>>(unsigned int &i);
+ QTextStream &operator>>(signed long &i);
+ QTextStream &operator>>(unsigned long &i);
+ QTextStream &operator>>(qlonglong &i);
+ QTextStream &operator>>(qulonglong &i);
+ QTextStream &operator>>(float &f);
+ QTextStream &operator>>(double &f);
+ QTextStream &operator>>(QString &s);
+ QTextStream &operator>>(QByteArray &array);
+ QTextStream &operator>>(char *c);
+
+ QTextStream &operator<<(QChar ch);
+ QTextStream &operator<<(char ch);
+ QTextStream &operator<<(signed short i);
+ QTextStream &operator<<(unsigned short i);
+ QTextStream &operator<<(signed int i);
+ QTextStream &operator<<(unsigned int i);
+ QTextStream &operator<<(signed long i);
+ QTextStream &operator<<(unsigned long i);
+ QTextStream &operator<<(qlonglong i);
+ QTextStream &operator<<(qulonglong i);
+ QTextStream &operator<<(float f);
+ QTextStream &operator<<(double f);
+ QTextStream &operator<<(const QString &s);
+ QTextStream &operator<<(QLatin1String s);
+ QTextStream &operator<<(const QStringRef &s);
+ QTextStream &operator<<(const QByteArray &array);
+ QTextStream &operator<<(const char *c);
+ QTextStream &operator<<(const void *ptr);
+
+private:
+ Q_DISABLE_COPY(QTextStream)
+ friend class QDebugStateSaverPrivate;
+ friend class QDebug;
+
+ QScopedPointer<QTextStreamPrivate> d_ptr;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QTextStream::NumberFlags)
+
+/*****************************************************************************
+ QTextStream manipulators
+ *****************************************************************************/
+
+typedef QTextStream & (*QTextStreamFunction)(QTextStream &);// manipulator function
+typedef void (QTextStream::*QTSMFI)(int); // manipulator w/int argument
+typedef void (QTextStream::*QTSMFC)(QChar); // manipulator w/QChar argument
+
+
+class Q_CORE_EXPORT QTextStreamManipulator
+{
+public:
+ Q_DECL_CONSTEXPR QTextStreamManipulator(QTSMFI m, int a) Q_DECL_NOTHROW : mf(m), mc(nullptr), arg(a), ch() {}
+ Q_DECL_CONSTEXPR QTextStreamManipulator(QTSMFC m, QChar c) Q_DECL_NOTHROW : mf(nullptr), mc(m), arg(-1), ch(c) {}
+ void exec(QTextStream &s) { if (mf) { (s.*mf)(arg); } else { (s.*mc)(ch); } }
+
+private:
+ QTSMFI mf; // QTextStream member function
+ QTSMFC mc; // QTextStream member function
+ int arg; // member function argument
+ QChar ch;
+};
+
+inline QTextStream &operator>>(QTextStream &s, QTextStreamFunction f)
+{ return (*f)(s); }
+
+inline QTextStream &operator<<(QTextStream &s, QTextStreamFunction f)
+{ return (*f)(s); }
+
+inline QTextStream &operator<<(QTextStream &s, QTextStreamManipulator m)
+{ m.exec(s); return s; }
+
+Q_CORE_EXPORT QTextStream &bin(QTextStream &s);
+Q_CORE_EXPORT QTextStream &oct(QTextStream &s);
+Q_CORE_EXPORT QTextStream &dec(QTextStream &s);
+Q_CORE_EXPORT QTextStream &hex(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &showbase(QTextStream &s);
+Q_CORE_EXPORT QTextStream &forcesign(QTextStream &s);
+Q_CORE_EXPORT QTextStream &forcepoint(QTextStream &s);
+Q_CORE_EXPORT QTextStream &noshowbase(QTextStream &s);
+Q_CORE_EXPORT QTextStream &noforcesign(QTextStream &s);
+Q_CORE_EXPORT QTextStream &noforcepoint(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &uppercasebase(QTextStream &s);
+Q_CORE_EXPORT QTextStream &uppercasedigits(QTextStream &s);
+Q_CORE_EXPORT QTextStream &lowercasebase(QTextStream &s);
+Q_CORE_EXPORT QTextStream &lowercasedigits(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &fixed(QTextStream &s);
+Q_CORE_EXPORT QTextStream &scientific(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &left(QTextStream &s);
+Q_CORE_EXPORT QTextStream &right(QTextStream &s);
+Q_CORE_EXPORT QTextStream &center(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &endl(QTextStream &s);
+Q_CORE_EXPORT QTextStream &flush(QTextStream &s);
+Q_CORE_EXPORT QTextStream &reset(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &bom(QTextStream &s);
+
+Q_CORE_EXPORT QTextStream &ws(QTextStream &s);
+
+inline QTextStreamManipulator qSetFieldWidth(int width)
+{
+ QTSMFI func = &QTextStream::setFieldWidth;
+ return QTextStreamManipulator(func,width);
+}
+
+inline QTextStreamManipulator qSetPadChar(QChar ch)
+{
+ QTSMFC func = &QTextStream::setPadChar;
+ return QTextStreamManipulator(func, ch);
+}
+
+inline QTextStreamManipulator qSetRealNumberPrecision(int precision)
+{
+ QTSMFI func = &QTextStream::setRealNumberPrecision;
+ return QTextStreamManipulator(func, precision);
+}
+
+QT_END_NAMESPACE
+
+#endif // QTEXTSTREAM_H
diff --git a/src/corelib/io/qtextstream_p.h b/src/corelib/serialization/qtextstream_p.h
index a642beddc4..a642beddc4 100644
--- a/src/corelib/io/qtextstream_p.h
+++ b/src/corelib/serialization/qtextstream_p.h
diff --git a/src/corelib/serialization/qxmlstream.cpp b/src/corelib/serialization/qxmlstream.cpp
new file mode 100644
index 0000000000..a92dd71df5
--- /dev/null
+++ b/src/corelib/serialization/qxmlstream.cpp
@@ -0,0 +1,4034 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "QtCore/qxmlstream.h"
+
+#ifndef QT_NO_XMLSTREAM
+
+#include "qxmlutils_p.h"
+#include <qdebug.h>
+#include <qfile.h>
+#include <stdio.h>
+#include <qtextcodec.h>
+#include <qstack.h>
+#include <qbuffer.h>
+#ifndef QT_BOOTSTRAPPED
+#include <qcoreapplication.h>
+#else
+// This specialization of Q_DECLARE_TR_FUNCTIONS is not in qcoreapplication.h,
+// because that header depends on QObject being available, which is not the
+// case for most bootstrapped applications.
+#define Q_DECLARE_TR_FUNCTIONS(context) \
+public: \
+ static inline QString tr(const char *sourceText, const char *comment = 0) \
+ { Q_UNUSED(comment); return QString::fromLatin1(sourceText); } \
+ static inline QString trUtf8(const char *sourceText, const char *comment = 0) \
+ { Q_UNUSED(comment); return QString::fromLatin1(sourceText); } \
+ static inline QString tr(const char *sourceText, const char*, int) \
+ { return QString::fromLatin1(sourceText); } \
+ static inline QString trUtf8(const char *sourceText, const char*, int) \
+ { return QString::fromLatin1(sourceText); } \
+private:
+#endif
+QT_BEGIN_NAMESPACE
+
+#include "qxmlstream_p.h"
+
+enum { StreamEOF = ~0U };
+
+/*!
+ \enum QXmlStreamReader::TokenType
+
+ This enum specifies the type of token the reader just read.
+
+ \value NoToken The reader has not yet read anything.
+
+ \value Invalid An error has occurred, reported in error() and
+ errorString().
+
+ \value StartDocument The reader reports the XML version number in
+ documentVersion(), and the encoding as specified in the XML
+ document in documentEncoding(). If the document is declared
+ standalone, isStandaloneDocument() returns \c true; otherwise it
+ returns \c false.
+
+ \value EndDocument The reader reports the end of the document.
+
+ \value StartElement The reader reports the start of an element
+ with namespaceUri() and name(). Empty elements are also reported
+ as StartElement, followed directly by EndElement. The convenience
+ function readElementText() can be called to concatenate all
+ content until the corresponding EndElement. Attributes are
+ reported in attributes(), namespace declarations in
+ namespaceDeclarations().
+
+ \value EndElement The reader reports the end of an element with
+ namespaceUri() and name().
+
+ \value Characters The reader reports characters in text(). If the
+ characters are all white-space, isWhitespace() returns \c true. If
+ the characters stem from a CDATA section, isCDATA() returns \c true.
+
+ \value Comment The reader reports a comment in text().
+
+ \value DTD The reader reports a DTD in text(), notation
+ declarations in notationDeclarations(), and entity declarations in
+ entityDeclarations(). Details of the DTD declaration are reported
+ in in dtdName(), dtdPublicId(), and dtdSystemId().
+
+ \value EntityReference The reader reports an entity reference that
+ could not be resolved. The name of the reference is reported in
+ name(), the replacement text in text().
+
+ \value ProcessingInstruction The reader reports a processing
+ instruction in processingInstructionTarget() and
+ processingInstructionData().
+*/
+
+/*!
+ \enum QXmlStreamReader::ReadElementTextBehaviour
+
+ This enum specifies the different behaviours of readElementText().
+
+ \value ErrorOnUnexpectedElement Raise an UnexpectedElementError and return
+ what was read so far when a child element is encountered.
+
+ \value IncludeChildElements Recursively include the text from child elements.
+
+ \value SkipChildElements Skip child elements.
+
+ \since 4.6
+*/
+
+/*!
+ \enum QXmlStreamReader::Error
+
+ This enum specifies different error cases
+
+ \value NoError No error has occurred.
+
+ \value CustomError A custom error has been raised with
+ raiseError()
+
+ \value NotWellFormedError The parser internally raised an error
+ due to the read XML not being well-formed.
+
+ \value PrematureEndOfDocumentError The input stream ended before a
+ well-formed XML document was parsed. Recovery from this error is
+ possible if more XML arrives in the stream, either by calling
+ addData() or by waiting for it to arrive on the device().
+
+ \value UnexpectedElementError The parser encountered an element
+ that was different to those it expected.
+
+*/
+
+/*!
+ \class QXmlStreamEntityResolver
+ \inmodule QtCore
+ \reentrant
+ \since 4.4
+
+ \brief The QXmlStreamEntityResolver class provides an entity
+ resolver for a QXmlStreamReader.
+
+ \ingroup xml-tools
+ */
+
+/*!
+ Destroys the entity resolver.
+ */
+QXmlStreamEntityResolver::~QXmlStreamEntityResolver()
+{
+}
+
+/*!
+ \internal
+
+This function is a stub for later functionality.
+*/
+QString QXmlStreamEntityResolver::resolveEntity(const QString& /*publicId*/, const QString& /*systemId*/)
+{
+ return QString();
+}
+
+
+/*!
+ Resolves the undeclared entity \a name and returns its replacement
+ text. If the entity is also unknown to the entity resolver, it
+ returns an empty string.
+
+ The default implementation always returns an empty string.
+*/
+
+QString QXmlStreamEntityResolver::resolveUndeclaredEntity(const QString &/*name*/)
+{
+ return QString();
+}
+
+#ifndef QT_NO_XMLSTREAMREADER
+
+QString QXmlStreamReaderPrivate::resolveUndeclaredEntity(const QString &name)
+{
+ if (entityResolver)
+ return entityResolver->resolveUndeclaredEntity(name);
+ return QString();
+}
+
+
+
+/*!
+ \since 4.4
+
+ Makes \a resolver the new entityResolver().
+
+ The stream reader does \e not take ownership of the resolver. It's
+ the callers responsibility to ensure that the resolver is valid
+ during the entire life-time of the stream reader object, or until
+ another resolver or 0 is set.
+
+ \sa entityResolver()
+ */
+void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)
+{
+ Q_D(QXmlStreamReader);
+ d->entityResolver = resolver;
+}
+
+/*!
+ \since 4.4
+
+ Returns the entity resolver, or 0 if there is no entity resolver.
+
+ \sa setEntityResolver()
+ */
+QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->entityResolver;
+}
+
+
+
+/*!
+ \class QXmlStreamReader
+ \inmodule QtCore
+ \reentrant
+ \since 4.3
+
+ \brief The QXmlStreamReader class provides a fast parser for reading
+ well-formed XML via a simple streaming API.
+
+
+ \ingroup xml-tools
+
+ QXmlStreamReader is a faster and more convenient replacement for
+ Qt's own SAX parser (see QXmlSimpleReader). In some cases it might
+ also be a faster and more convenient alternative for use in
+ applications that would otherwise use a DOM tree (see QDomDocument).
+ QXmlStreamReader reads data either from a QIODevice (see
+ setDevice()), or from a raw QByteArray (see addData()).
+
+ Qt provides QXmlStreamWriter for writing XML.
+
+ The basic concept of a stream reader is to report an XML document as
+ a stream of tokens, similar to SAX. The main difference between
+ QXmlStreamReader and SAX is \e how these XML tokens are reported.
+ With SAX, the application must provide handlers (callback functions)
+ that receive so-called XML \e events from the parser at the parser's
+ convenience. With QXmlStreamReader, the application code itself
+ drives the loop and pulls \e tokens from the reader, one after
+ another, as it needs them. This is done by calling readNext(), where
+ the reader reads from the input stream until it completes the next
+ token, at which point it returns the tokenType(). A set of
+ convenient functions including isStartElement() and text() can then
+ be used to examine the token to obtain information about what has
+ been read. The big advantage of this \e pulling approach is the
+ possibility to build recursive descent parsers with it, meaning you
+ can split your XML parsing code easily into different methods or
+ classes. This makes it easy to keep track of the application's own
+ state when parsing XML.
+
+ A typical loop with QXmlStreamReader looks like this:
+
+ \snippet code/src_corelib_xml_qxmlstream.cpp 0
+
+
+ QXmlStreamReader is a well-formed XML 1.0 parser that does \e not
+ include external parsed entities. As long as no error occurs, the
+ application code can thus be assured that the data provided by the
+ stream reader satisfies the W3C's criteria for well-formed XML. For
+ example, you can be certain that all tags are indeed nested and
+ closed properly, that references to internal entities have been
+ replaced with the correct replacement text, and that attributes have
+ been normalized or added according to the internal subset of the
+ DTD.
+
+ If an error occurs while parsing, atEnd() and hasError() return
+ true, and error() returns the error that occurred. The functions
+ errorString(), lineNumber(), columnNumber(), and characterOffset()
+ are for constructing an appropriate error or warning message. To
+ simplify application code, QXmlStreamReader contains a raiseError()
+ mechanism that lets you raise custom errors that trigger the same
+ error handling described.
+
+ The \l{QXmlStream Bookmarks Example} illustrates how to use the
+ recursive descent technique to read an XML bookmark file (XBEL) with
+ a stream reader.
+
+ \section1 Namespaces
+
+ QXmlStream understands and resolves XML namespaces. E.g. in case of
+ a StartElement, namespaceUri() returns the namespace the element is
+ in, and name() returns the element's \e local name. The combination
+ of namespaceUri and name uniquely identifies an element. If a
+ namespace prefix was not declared in the XML entities parsed by the
+ reader, the namespaceUri is empty.
+
+ If you parse XML data that does not utilize namespaces according to
+ the XML specification or doesn't use namespaces at all, you can use
+ the element's qualifiedName() instead. A qualified name is the
+ element's prefix() followed by colon followed by the element's local
+ name() - exactly like the element appears in the raw XML data. Since
+ the mapping namespaceUri to prefix is neither unique nor universal,
+ qualifiedName() should be avoided for namespace-compliant XML data.
+
+ In order to parse standalone documents that do use undeclared
+ namespace prefixes, you can turn off namespace processing completely
+ with the \l namespaceProcessing property.
+
+ \section1 Incremental Parsing
+
+ QXmlStreamReader is an incremental parser. It can handle the case
+ where the document can't be parsed all at once because it arrives in
+ chunks (e.g. from multiple files, or over a network connection).
+ When the reader runs out of data before the complete document has
+ been parsed, it reports a PrematureEndOfDocumentError. When more
+ data arrives, either because of a call to addData() or because more
+ data is available through the network device(), the reader recovers
+ from the PrematureEndOfDocumentError error and continues parsing the
+ new data with the next call to readNext().
+
+ For example, if your application reads data from the network using a
+ \l{QNetworkAccessManager} {network access manager}, you would issue
+ a \l{QNetworkRequest} {network request} to the manager and receive a
+ \l{QNetworkReply} {network reply} in return. Since a QNetworkReply
+ is a QIODevice, you connect its \l{QIODevice::readyRead()}
+ {readyRead()} signal to a custom slot, e.g. \c{slotReadyRead()} in
+ the code snippet shown in the discussion for QNetworkAccessManager.
+ In this slot, you read all available data with
+ \l{QIODevice::readAll()} {readAll()} and pass it to the XML
+ stream reader using addData(). Then you call your custom parsing
+ function that reads the XML events from the reader.
+
+ \section1 Performance and Memory Consumption
+
+ QXmlStreamReader is memory-conservative by design, since it doesn't
+ store the entire XML document tree in memory, but only the current
+ token at the time it is reported. In addition, QXmlStreamReader
+ avoids the many small string allocations that it normally takes to
+ map an XML document to a convenient and Qt-ish API. It does this by
+ reporting all string data as QStringRef rather than real QString
+ objects. QStringRef is a thin wrapper around QString substrings that
+ provides a subset of the QString API without the memory allocation
+ and reference-counting overhead. Calling
+ \l{QStringRef::toString()}{toString()} on any of those objects
+ returns an equivalent real QString object.
+
+*/
+
+
+/*!
+ Constructs a stream reader.
+
+ \sa setDevice(), addData()
+ */
+QXmlStreamReader::QXmlStreamReader()
+ : d_ptr(new QXmlStreamReaderPrivate(this))
+{
+}
+
+/*! Creates a new stream reader that reads from \a device.
+
+\sa setDevice(), clear()
+ */
+QXmlStreamReader::QXmlStreamReader(QIODevice *device)
+ : d_ptr(new QXmlStreamReaderPrivate(this))
+{
+ setDevice(device);
+}
+
+/*!
+ Creates a new stream reader that reads from \a data.
+
+ \sa addData(), clear(), setDevice()
+ */
+QXmlStreamReader::QXmlStreamReader(const QByteArray &data)
+ : d_ptr(new QXmlStreamReaderPrivate(this))
+{
+ Q_D(QXmlStreamReader);
+ d->dataBuffer = data;
+}
+
+/*!
+ Creates a new stream reader that reads from \a data.
+
+ This function should only be used if the XML header either says the encoding
+ is "UTF-8" or lacks any encoding information (the latter is the case of
+ QXmlStreamWriter writing to a QString). Any other encoding is likely going to
+ cause data corruption ("mojibake").
+
+ \sa addData(), clear(), setDevice()
+ */
+QXmlStreamReader::QXmlStreamReader(const QString &data)
+ : d_ptr(new QXmlStreamReaderPrivate(this))
+{
+ Q_D(QXmlStreamReader);
+#ifdef QT_NO_TEXTCODEC
+ d->dataBuffer = data.toLatin1();
+#else
+ d->dataBuffer = d->codec->fromUnicode(data);
+ d->decoder = d->codec->makeDecoder();
+#endif
+ d->lockEncoding = true;
+
+}
+
+/*!
+ Creates a new stream reader that reads from \a data.
+
+ \sa addData(), clear(), setDevice()
+ */
+QXmlStreamReader::QXmlStreamReader(const char *data)
+ : d_ptr(new QXmlStreamReaderPrivate(this))
+{
+ Q_D(QXmlStreamReader);
+ d->dataBuffer = QByteArray(data);
+}
+
+/*!
+ Destructs the reader.
+ */
+QXmlStreamReader::~QXmlStreamReader()
+{
+ Q_D(QXmlStreamReader);
+ if (d->deleteDevice)
+ delete d->device;
+}
+
+/*! \fn bool QXmlStreamReader::hasError() const
+ Returns \c true if an error has occurred, otherwise \c false.
+
+ \sa errorString(), error()
+ */
+
+/*!
+ Sets the current device to \a device. Setting the device resets
+ the stream to its initial state.
+
+ \sa device(), clear()
+*/
+void QXmlStreamReader::setDevice(QIODevice *device)
+{
+ Q_D(QXmlStreamReader);
+ if (d->deleteDevice) {
+ delete d->device;
+ d->deleteDevice = false;
+ }
+ d->device = device;
+ d->init();
+
+}
+
+/*!
+ Returns the current device associated with the QXmlStreamReader,
+ or 0 if no device has been assigned.
+
+ \sa setDevice()
+*/
+QIODevice *QXmlStreamReader::device() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->device;
+}
+
+
+/*!
+ Adds more \a data for the reader to read. This function does
+ nothing if the reader has a device().
+
+ \sa readNext(), clear()
+ */
+void QXmlStreamReader::addData(const QByteArray &data)
+{
+ Q_D(QXmlStreamReader);
+ if (d->device) {
+ qWarning("QXmlStreamReader: addData() with device()");
+ return;
+ }
+ d->dataBuffer += data;
+}
+
+/*!
+ Adds more \a data for the reader to read. This function does
+ nothing if the reader has a device().
+
+ \sa readNext(), clear()
+ */
+void QXmlStreamReader::addData(const QString &data)
+{
+ Q_D(QXmlStreamReader);
+ d->lockEncoding = true;
+#ifdef QT_NO_TEXTCODEC
+ addData(data.toLatin1());
+#else
+ addData(d->codec->fromUnicode(data));
+#endif
+}
+
+/*!
+ Adds more \a data for the reader to read. This function does
+ nothing if the reader has a device().
+
+ \sa readNext(), clear()
+ */
+void QXmlStreamReader::addData(const char *data)
+{
+ addData(QByteArray(data));
+}
+
+/*!
+ Removes any device() or data from the reader and resets its
+ internal state to the initial state.
+
+ \sa addData()
+ */
+void QXmlStreamReader::clear()
+{
+ Q_D(QXmlStreamReader);
+ d->init();
+ if (d->device) {
+ if (d->deleteDevice)
+ delete d->device;
+ d->device = 0;
+ }
+}
+
+/*!
+ Returns \c true if the reader has read until the end of the XML
+ document, or if an error() has occurred and reading has been
+ aborted. Otherwise, it returns \c false.
+
+ When atEnd() and hasError() return true and error() returns
+ PrematureEndOfDocumentError, it means the XML has been well-formed
+ so far, but a complete XML document has not been parsed. The next
+ chunk of XML can be added with addData(), if the XML is being read
+ from a QByteArray, or by waiting for more data to arrive if the
+ XML is being read from a QIODevice. Either way, atEnd() will
+ return false once more data is available.
+
+ \sa hasError(), error(), device(), QIODevice::atEnd()
+ */
+bool QXmlStreamReader::atEnd() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->atEnd
+ && ((d->type == QXmlStreamReader::Invalid && d->error == PrematureEndOfDocumentError)
+ || (d->type == QXmlStreamReader::EndDocument))) {
+ if (d->device)
+ return d->device->atEnd();
+ else
+ return !d->dataBuffer.size();
+ }
+ return (d->atEnd || d->type == QXmlStreamReader::Invalid);
+}
+
+
+/*!
+ Reads the next token and returns its type.
+
+ With one exception, once an error() is reported by readNext(),
+ further reading of the XML stream is not possible. Then atEnd()
+ returns \c true, hasError() returns \c true, and this function returns
+ QXmlStreamReader::Invalid.
+
+ The exception is when error() returns PrematureEndOfDocumentError.
+ This error is reported when the end of an otherwise well-formed
+ chunk of XML is reached, but the chunk doesn't represent a complete
+ XML document. In that case, parsing \e can be resumed by calling
+ addData() to add the next chunk of XML, when the stream is being
+ read from a QByteArray, or by waiting for more data to arrive when
+ the stream is being read from a device().
+
+ \sa tokenType(), tokenString()
+ */
+QXmlStreamReader::TokenType QXmlStreamReader::readNext()
+{
+ Q_D(QXmlStreamReader);
+ if (d->type != Invalid) {
+ if (!d->hasCheckedStartDocument)
+ if (!d->checkStartDocument())
+ return d->type; // synthetic StartDocument or error
+ d->parse();
+ if (d->atEnd && d->type != EndDocument && d->type != Invalid)
+ d->raiseError(PrematureEndOfDocumentError);
+ else if (!d->atEnd && d->type == EndDocument)
+ d->raiseWellFormedError(QXmlStream::tr("Extra content at end of document."));
+ } else if (d->error == PrematureEndOfDocumentError) {
+ // resume error
+ d->type = NoToken;
+ d->atEnd = false;
+ d->token = -1;
+ return readNext();
+ }
+ return d->type;
+}
+
+
+/*!
+ Returns the type of the current token.
+
+ The current token can also be queried with the convenience functions
+ isStartDocument(), isEndDocument(), isStartElement(),
+ isEndElement(), isCharacters(), isComment(), isDTD(),
+ isEntityReference(), and isProcessingInstruction().
+
+ \sa tokenString()
+ */
+QXmlStreamReader::TokenType QXmlStreamReader::tokenType() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->type;
+}
+
+/*!
+ Reads until the next start element within the current element. Returns \c true
+ when a start element was reached. When the end element was reached, or when
+ an error occurred, false is returned.
+
+ The current element is the element matching the most recently parsed start
+ element of which a matching end element has not yet been reached. When the
+ parser has reached the end element, the current element becomes the parent
+ element.
+
+ This is a convenience function for when you're only concerned with parsing
+ XML elements. The \l{QXmlStream Bookmarks Example} makes extensive use of
+ this function.
+
+ \since 4.6
+ \sa readNext()
+ */
+bool QXmlStreamReader::readNextStartElement()
+{
+ while (readNext() != Invalid) {
+ if (isEndElement())
+ return false;
+ else if (isStartElement())
+ return true;
+ }
+ return false;
+}
+
+/*!
+ Reads until the end of the current element, skipping any child nodes.
+ This function is useful for skipping unknown elements.
+
+ The current element is the element matching the most recently parsed start
+ element of which a matching end element has not yet been reached. When the
+ parser has reached the end element, the current element becomes the parent
+ element.
+
+ \since 4.6
+ */
+void QXmlStreamReader::skipCurrentElement()
+{
+ int depth = 1;
+ while (depth && readNext() != Invalid) {
+ if (isEndElement())
+ --depth;
+ else if (isStartElement())
+ ++depth;
+ }
+}
+
+/*
+ * Use the following Perl script to generate the error string index list:
+===== PERL SCRIPT ====
+print "static const char QXmlStreamReader_tokenTypeString_string[] =\n";
+$counter = 0;
+$i = 0;
+while (<STDIN>) {
+ chomp;
+ print " \"$_\\0\"\n";
+ $sizes[$i++] = $counter;
+ $counter += length 1 + $_;
+}
+print " \"\\0\";\n\nstatic const short QXmlStreamReader_tokenTypeString_indices[] = {\n ";
+for ($j = 0; $j < $i; ++$j) {
+ printf "$sizes[$j], ";
+}
+print "0\n};\n";
+===== PERL SCRIPT ====
+
+ * The input data is as follows (copied from qxmlstream.h):
+NoToken
+Invalid
+StartDocument
+EndDocument
+StartElement
+EndElement
+Characters
+Comment
+DTD
+EntityReference
+ProcessingInstruction
+*/
+static const char QXmlStreamReader_tokenTypeString_string[] =
+ "NoToken\0"
+ "Invalid\0"
+ "StartDocument\0"
+ "EndDocument\0"
+ "StartElement\0"
+ "EndElement\0"
+ "Characters\0"
+ "Comment\0"
+ "DTD\0"
+ "EntityReference\0"
+ "ProcessingInstruction\0";
+
+static const short QXmlStreamReader_tokenTypeString_indices[] = {
+ 0, 8, 16, 30, 42, 55, 66, 77, 85, 89, 105, 0
+};
+
+
+/*!
+ \property QXmlStreamReader::namespaceProcessing
+ The namespace-processing flag of the stream reader
+
+ This property controls whether or not the stream reader processes
+ namespaces. If enabled, the reader processes namespaces, otherwise
+ it does not.
+
+ By default, namespace-processing is enabled.
+*/
+
+
+void QXmlStreamReader::setNamespaceProcessing(bool enable)
+{
+ Q_D(QXmlStreamReader);
+ d->namespaceProcessing = enable;
+}
+
+bool QXmlStreamReader::namespaceProcessing() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->namespaceProcessing;
+}
+
+/*! Returns the reader's current token as string.
+
+\sa tokenType()
+*/
+QString QXmlStreamReader::tokenString() const
+{
+ Q_D(const QXmlStreamReader);
+ return QLatin1String(QXmlStreamReader_tokenTypeString_string +
+ QXmlStreamReader_tokenTypeString_indices[d->type]);
+}
+
+#endif // QT_NO_XMLSTREAMREADER
+
+QXmlStreamPrivateTagStack::QXmlStreamPrivateTagStack()
+{
+ tagStack.reserve(16);
+ tagStackStringStorage.reserve(32);
+ tagStackStringStorageSize = 0;
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
+ namespaceDeclaration.prefix = addToStringStorage(QStringViewLiteral("xml"));
+ namespaceDeclaration.namespaceUri = addToStringStorage(QStringViewLiteral("http://www.w3.org/XML/1998/namespace"));
+ initialTagStackStringStorageSize = tagStackStringStorageSize;
+}
+
+#ifndef QT_NO_XMLSTREAMREADER
+
+QXmlStreamReaderPrivate::QXmlStreamReaderPrivate(QXmlStreamReader *q)
+ :q_ptr(q)
+{
+ device = 0;
+ deleteDevice = false;
+#ifndef QT_NO_TEXTCODEC
+ decoder = 0;
+#endif
+ stack_size = 64;
+ sym_stack = 0;
+ state_stack = 0;
+ reallocateStack();
+ entityResolver = 0;
+ init();
+#define ADD_PREDEFINED(n, v) \
+ do { \
+ Entity e = Entity::createLiteral(QLatin1String(n), QLatin1String(v)); \
+ entityHash.insert(qToStringViewIgnoringNull(e.name), std::move(e)); \
+ } while (false)
+ ADD_PREDEFINED("lt", "<");
+ ADD_PREDEFINED("gt", ">");
+ ADD_PREDEFINED("amp", "&");
+ ADD_PREDEFINED("apos", "'");
+ ADD_PREDEFINED("quot", "\"");
+#undef ADD_PREDEFINED
+}
+
+void QXmlStreamReaderPrivate::init()
+{
+ scanDtd = false;
+ token = -1;
+ token_char = 0;
+ isEmptyElement = false;
+ isWhitespace = true;
+ isCDATA = false;
+ standalone = false;
+ tos = 0;
+ resumeReduction = 0;
+ state_stack[tos++] = 0;
+ state_stack[tos] = 0;
+ putStack.clear();
+ putStack.reserve(32);
+ textBuffer.clear();
+ textBuffer.reserve(256);
+ tagStack.clear();
+ tagsDone = false;
+ attributes.clear();
+ attributes.reserve(16);
+ lineNumber = lastLineStart = characterOffset = 0;
+ readBufferPos = 0;
+ nbytesread = 0;
+#ifndef QT_NO_TEXTCODEC
+ codec = QTextCodec::codecForMib(106); // utf8
+ delete decoder;
+ decoder = 0;
+#endif
+ attributeStack.clear();
+ attributeStack.reserve(16);
+ entityParser = 0;
+ hasCheckedStartDocument = false;
+ normalizeLiterals = false;
+ hasSeenTag = false;
+ atEnd = false;
+ inParseEntity = false;
+ referenceToUnparsedEntityDetected = false;
+ referenceToParameterEntityDetected = false;
+ hasExternalDtdSubset = false;
+ lockEncoding = false;
+ namespaceProcessing = true;
+ rawReadBuffer.clear();
+ dataBuffer.clear();
+ readBuffer.clear();
+ tagStackStringStorageSize = initialTagStackStringStorageSize;
+
+ type = QXmlStreamReader::NoToken;
+ error = QXmlStreamReader::NoError;
+}
+
+/*
+ Well-formed requires that we verify entity values. We do this with a
+ standard parser.
+ */
+void QXmlStreamReaderPrivate::parseEntity(const QString &value)
+{
+ Q_Q(QXmlStreamReader);
+
+ if (value.isEmpty())
+ return;
+
+
+ if (!entityParser)
+ entityParser = new QXmlStreamReaderPrivate(q);
+ else
+ entityParser->init();
+ entityParser->inParseEntity = true;
+ entityParser->readBuffer = value;
+ entityParser->injectToken(PARSE_ENTITY);
+ while (!entityParser->atEnd && entityParser->type != QXmlStreamReader::Invalid)
+ entityParser->parse();
+ if (entityParser->type == QXmlStreamReader::Invalid || entityParser->tagStack.size())
+ raiseWellFormedError(QXmlStream::tr("Invalid entity value."));
+
+}
+
+inline void QXmlStreamReaderPrivate::reallocateStack()
+{
+ stack_size <<= 1;
+ sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value)));
+ Q_CHECK_PTR(sym_stack);
+ state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int)));
+ Q_CHECK_PTR(state_stack);
+}
+
+
+QXmlStreamReaderPrivate::~QXmlStreamReaderPrivate()
+{
+#ifndef QT_NO_TEXTCODEC
+ delete decoder;
+#endif
+ free(sym_stack);
+ free(state_stack);
+ delete entityParser;
+}
+
+
+inline uint QXmlStreamReaderPrivate::filterCarriageReturn()
+{
+ uint peekc = peekChar();
+ if (peekc == '\n') {
+ if (putStack.size())
+ putStack.pop();
+ else
+ ++readBufferPos;
+ return peekc;
+ }
+ if (peekc == StreamEOF) {
+ putChar('\r');
+ return 0;
+ }
+ return '\n';
+}
+
+/*!
+ \internal
+ If the end of the file is encountered, ~0 is returned.
+ */
+inline uint QXmlStreamReaderPrivate::getChar()
+{
+ uint c;
+ if (putStack.size()) {
+ c = atEnd ? StreamEOF : putStack.pop();
+ } else {
+ if (readBufferPos < readBuffer.size())
+ c = readBuffer.at(readBufferPos++).unicode();
+ else
+ c = getChar_helper();
+ }
+
+ return c;
+}
+
+inline uint QXmlStreamReaderPrivate::peekChar()
+{
+ uint c;
+ if (putStack.size()) {
+ c = putStack.top();
+ } else if (readBufferPos < readBuffer.size()) {
+ c = readBuffer.at(readBufferPos).unicode();
+ } else {
+ if ((c = getChar_helper()) != StreamEOF)
+ --readBufferPos;
+ }
+
+ return c;
+}
+
+/*!
+ \internal
+
+ Scans characters until \a str is encountered, and validates the characters
+ as according to the Char[2] production and do the line-ending normalization.
+ If any character is invalid, false is returned, otherwise true upon success.
+
+ If \a tokenToInject is not less than zero, injectToken() is called with
+ \a tokenToInject when \a str is found.
+
+ If any error occurred, false is returned, otherwise true.
+ */
+bool QXmlStreamReaderPrivate::scanUntil(const char *str, short tokenToInject)
+{
+ int pos = textBuffer.size();
+ int oldLineNumber = lineNumber;
+
+ uint c;
+ while ((c = getChar()) != StreamEOF) {
+ /* First, we do the validation & normalization. */
+ switch (c) {
+ case '\r':
+ if ((c = filterCarriageReturn()) == 0)
+ break;
+ Q_FALLTHROUGH();
+ case '\n':
+ ++lineNumber;
+ lastLineStart = characterOffset + readBufferPos;
+ Q_FALLTHROUGH();
+ case '\t':
+ textBuffer += QChar(c);
+ continue;
+ default:
+ if (c < 0x20 || (c > 0xFFFD && c < 0x10000) || c > QChar::LastValidCodePoint ) {
+ raiseWellFormedError(QXmlStream::tr("Invalid XML character."));
+ lineNumber = oldLineNumber;
+ return false;
+ }
+ textBuffer += QChar(c);
+ }
+
+
+ /* Second, attempt to lookup str. */
+ if (c == uint(*str)) {
+ if (!*(str + 1)) {
+ if (tokenToInject >= 0)
+ injectToken(tokenToInject);
+ return true;
+ } else {
+ if (scanString(str + 1, tokenToInject, false))
+ return true;
+ }
+ }
+ }
+ putString(textBuffer, pos);
+ textBuffer.resize(pos);
+ lineNumber = oldLineNumber;
+ return false;
+}
+
+bool QXmlStreamReaderPrivate::scanString(const char *str, short tokenToInject, bool requireSpace)
+{
+ int n = 0;
+ while (str[n]) {
+ uint c = getChar();
+ if (c != ushort(str[n])) {
+ if (c != StreamEOF)
+ putChar(c);
+ while (n--) {
+ putChar(ushort(str[n]));
+ }
+ return false;
+ }
+ ++n;
+ }
+ for (int i = 0; i < n; ++i)
+ textBuffer += QChar(ushort(str[i]));
+ if (requireSpace) {
+ int s = fastScanSpace();
+ if (!s || atEnd) {
+ int pos = textBuffer.size() - n - s;
+ putString(textBuffer, pos);
+ textBuffer.resize(pos);
+ return false;
+ }
+ }
+ if (tokenToInject >= 0)
+ injectToken(tokenToInject);
+ return true;
+}
+
+bool QXmlStreamReaderPrivate::scanAfterLangleBang()
+{
+ switch (peekChar()) {
+ case '[':
+ return scanString(spell[CDATA_START], CDATA_START, false);
+ case 'D':
+ return scanString(spell[DOCTYPE], DOCTYPE);
+ case 'A':
+ return scanString(spell[ATTLIST], ATTLIST);
+ case 'N':
+ return scanString(spell[NOTATION], NOTATION);
+ case 'E':
+ if (scanString(spell[ELEMENT], ELEMENT))
+ return true;
+ return scanString(spell[ENTITY], ENTITY);
+
+ default:
+ ;
+ };
+ return false;
+}
+
+bool QXmlStreamReaderPrivate::scanPublicOrSystem()
+{
+ switch (peekChar()) {
+ case 'S':
+ return scanString(spell[SYSTEM], SYSTEM);
+ case 'P':
+ return scanString(spell[PUBLIC], PUBLIC);
+ default:
+ ;
+ }
+ return false;
+}
+
+bool QXmlStreamReaderPrivate::scanNData()
+{
+ if (fastScanSpace()) {
+ if (scanString(spell[NDATA], NDATA))
+ return true;
+ putChar(' ');
+ }
+ return false;
+}
+
+bool QXmlStreamReaderPrivate::scanAfterDefaultDecl()
+{
+ switch (peekChar()) {
+ case 'R':
+ return scanString(spell[REQUIRED], REQUIRED, false);
+ case 'I':
+ return scanString(spell[IMPLIED], IMPLIED, false);
+ case 'F':
+ return scanString(spell[FIXED], FIXED, false);
+ default:
+ ;
+ }
+ return false;
+}
+
+bool QXmlStreamReaderPrivate::scanAttType()
+{
+ switch (peekChar()) {
+ case 'C':
+ return scanString(spell[CDATA], CDATA);
+ case 'I':
+ if (scanString(spell[ID], ID))
+ return true;
+ if (scanString(spell[IDREF], IDREF))
+ return true;
+ return scanString(spell[IDREFS], IDREFS);
+ case 'E':
+ if (scanString(spell[ENTITY], ENTITY))
+ return true;
+ return scanString(spell[ENTITIES], ENTITIES);
+ case 'N':
+ if (scanString(spell[NOTATION], NOTATION))
+ return true;
+ if (scanString(spell[NMTOKEN], NMTOKEN))
+ return true;
+ return scanString(spell[NMTOKENS], NMTOKENS);
+ default:
+ ;
+ }
+ return false;
+}
+
+/*!
+ \internal
+
+ Scan strings with quotes or apostrophes surround them. For instance,
+ attributes, the version and encoding field in the XML prolog and
+ entity declarations.
+
+ If normalizeLiterals is set to true, the function also normalizes
+ whitespace. It is set to true when the first start tag is
+ encountered.
+
+ */
+inline int QXmlStreamReaderPrivate::fastScanLiteralContent()
+{
+ int n = 0;
+ uint c;
+ while ((c = getChar()) != StreamEOF) {
+ switch (ushort(c)) {
+ case 0xfffe:
+ case 0xffff:
+ case 0:
+ /* The putChar() call is necessary so the parser re-gets
+ * the character from the input source, when raising an error. */
+ putChar(c);
+ return n;
+ case '\r':
+ if (filterCarriageReturn() == 0)
+ return n;
+ Q_FALLTHROUGH();
+ case '\n':
+ ++lineNumber;
+ lastLineStart = characterOffset + readBufferPos;
+ Q_FALLTHROUGH();
+ case ' ':
+ case '\t':
+ if (normalizeLiterals)
+ textBuffer += QLatin1Char(' ');
+ else
+ textBuffer += QChar(c);
+ ++n;
+ break;
+ case '&':
+ case '<':
+ case '\"':
+ case '\'':
+ if (!(c & 0xff0000)) {
+ putChar(c);
+ return n;
+ }
+ Q_FALLTHROUGH();
+ default:
+ if (c < 0x20) {
+ putChar(c);
+ return n;
+ }
+ textBuffer += QChar(c);
+ ++n;
+ }
+ }
+ return n;
+}
+
+inline int QXmlStreamReaderPrivate::fastScanSpace()
+{
+ int n = 0;
+ uint c;
+ while ((c = getChar()) != StreamEOF) {
+ switch (c) {
+ case '\r':
+ if ((c = filterCarriageReturn()) == 0)
+ return n;
+ Q_FALLTHROUGH();
+ case '\n':
+ ++lineNumber;
+ lastLineStart = characterOffset + readBufferPos;
+ Q_FALLTHROUGH();
+ case ' ':
+ case '\t':
+ textBuffer += QChar(c);
+ ++n;
+ break;
+ default:
+ putChar(c);
+ return n;
+ }
+ }
+ return n;
+}
+
+/*!
+ \internal
+
+ Used for text nodes essentially. That is, characters appearing
+ inside elements.
+ */
+inline int QXmlStreamReaderPrivate::fastScanContentCharList()
+{
+ int n = 0;
+ uint c;
+ while ((c = getChar()) != StreamEOF) {
+ switch (ushort(c)) {
+ case 0xfffe:
+ case 0xffff:
+ case 0:
+ putChar(c);
+ return n;
+ case ']': {
+ isWhitespace = false;
+ int pos = textBuffer.size();
+ textBuffer += QChar(ushort(c));
+ ++n;
+ while ((c = getChar()) == ']') {
+ textBuffer += QChar(ushort(c));
+ ++n;
+ }
+ if (c == 0) {
+ putString(textBuffer, pos);
+ textBuffer.resize(pos);
+ } else if (c == '>' && textBuffer.at(textBuffer.size()-2) == QLatin1Char(']')) {
+ raiseWellFormedError(QXmlStream::tr("Sequence ']]>' not allowed in content."));
+ } else {
+ putChar(c);
+ break;
+ }
+ return n;
+ } break;
+ case '\r':
+ if ((c = filterCarriageReturn()) == 0)
+ return n;
+ Q_FALLTHROUGH();
+ case '\n':
+ ++lineNumber;
+ lastLineStart = characterOffset + readBufferPos;
+ Q_FALLTHROUGH();
+ case ' ':
+ case '\t':
+ textBuffer += QChar(ushort(c));
+ ++n;
+ break;
+ case '&':
+ case '<':
+ if (!(c & 0xff0000)) {
+ putChar(c);
+ return n;
+ }
+ Q_FALLTHROUGH();
+ default:
+ if (c < 0x20) {
+ putChar(c);
+ return n;
+ }
+ isWhitespace = false;
+ textBuffer += QChar(ushort(c));
+ ++n;
+ }
+ }
+ return n;
+}
+
+inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
+{
+ int n = 0;
+ uint c;
+ while ((c = getChar()) != StreamEOF) {
+ switch (c) {
+ case '\n':
+ case ' ':
+ case '\t':
+ case '\r':
+ case '&':
+ case '#':
+ case '\'':
+ case '\"':
+ case '<':
+ case '>':
+ case '[':
+ case ']':
+ case '=':
+ case '%':
+ case '/':
+ case ';':
+ case '?':
+ case '!':
+ case '^':
+ case '|':
+ case ',':
+ case '(':
+ case ')':
+ case '+':
+ case '*':
+ putChar(c);
+ if (prefix && *prefix == n+1) {
+ *prefix = 0;
+ putChar(':');
+ --n;
+ }
+ return n;
+ case ':':
+ if (prefix) {
+ if (*prefix == 0) {
+ *prefix = n+2;
+ } else { // only one colon allowed according to the namespace spec.
+ putChar(c);
+ return n;
+ }
+ } else {
+ putChar(c);
+ return n;
+ }
+ Q_FALLTHROUGH();
+ default:
+ textBuffer += QChar(c);
+ ++n;
+ }
+ }
+
+ if (prefix)
+ *prefix = 0;
+ int pos = textBuffer.size() - n;
+ putString(textBuffer, pos);
+ textBuffer.resize(pos);
+ return 0;
+}
+
+enum NameChar { NameBeginning, NameNotBeginning, NotName };
+
+static const char Begi = static_cast<char>(NameBeginning);
+static const char NtBg = static_cast<char>(NameNotBeginning);
+static const char NotN = static_cast<char>(NotName);
+
+static const char nameCharTable[128] =
+{
+// 0x00
+ NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
+ NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
+// 0x10
+ NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
+ NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
+// 0x20 (0x2D is '-', 0x2E is '.')
+ NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
+ NotN, NotN, NotN, NotN, NotN, NtBg, NtBg, NotN,
+// 0x30 (0x30..0x39 are '0'..'9', 0x3A is ':')
+ NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg,
+ NtBg, NtBg, Begi, NotN, NotN, NotN, NotN, NotN,
+// 0x40 (0x41..0x5A are 'A'..'Z')
+ NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
+ Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
+// 0x50 (0x5F is '_')
+ Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
+ Begi, Begi, Begi, NotN, NotN, NotN, NotN, Begi,
+// 0x60 (0x61..0x7A are 'a'..'z')
+ NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
+ Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
+// 0x70
+ Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
+ Begi, Begi, Begi, NotN, NotN, NotN, NotN, NotN
+};
+
+static inline NameChar fastDetermineNameChar(QChar ch)
+{
+ ushort uc = ch.unicode();
+ if (!(uc & ~0x7f)) // uc < 128
+ return static_cast<NameChar>(nameCharTable[uc]);
+
+ QChar::Category cat = ch.category();
+ // ### some these categories might be slightly wrong
+ if ((cat >= QChar::Letter_Uppercase && cat <= QChar::Letter_Other)
+ || cat == QChar::Number_Letter)
+ return NameBeginning;
+ if ((cat >= QChar::Number_DecimalDigit && cat <= QChar::Number_Other)
+ || (cat >= QChar::Mark_NonSpacing && cat <= QChar::Mark_Enclosing))
+ return NameNotBeginning;
+ return NotName;
+}
+
+inline int QXmlStreamReaderPrivate::fastScanNMTOKEN()
+{
+ int n = 0;
+ uint c;
+ while ((c = getChar()) != StreamEOF) {
+ if (fastDetermineNameChar(c) == NotName) {
+ putChar(c);
+ return n;
+ } else {
+ ++n;
+ textBuffer += QChar(c);
+ }
+ }
+
+ int pos = textBuffer.size() - n;
+ putString(textBuffer, pos);
+ textBuffer.resize(pos);
+
+ return n;
+}
+
+void QXmlStreamReaderPrivate::putString(const QString &s, int from)
+{
+ putStack.reserve(s.size());
+ for (int i = s.size()-1; i >= from; --i)
+ putStack.rawPush() = s.at(i).unicode();
+}
+
+void QXmlStreamReaderPrivate::putStringLiteral(const QString &s)
+{
+ putStack.reserve(s.size());
+ for (int i = s.size()-1; i >= 0; --i)
+ putStack.rawPush() = ((LETTER << 16) | s.at(i).unicode());
+}
+
+void QXmlStreamReaderPrivate::putReplacement(const QString &s)
+{
+ putStack.reserve(s.size());
+ for (int i = s.size()-1; i >= 0; --i) {
+ ushort c = s.at(i).unicode();
+ if (c == '\n' || c == '\r')
+ putStack.rawPush() = ((LETTER << 16) | c);
+ else
+ putStack.rawPush() = c;
+ }
+}
+void QXmlStreamReaderPrivate::putReplacementInAttributeValue(const QString &s)
+{
+ putStack.reserve(s.size());
+ for (int i = s.size()-1; i >= 0; --i) {
+ ushort c = s.at(i).unicode();
+ if (c == '&' || c == ';')
+ putStack.rawPush() = c;
+ else if (c == '\n' || c == '\r')
+ putStack.rawPush() = ' ';
+ else
+ putStack.rawPush() = ((LETTER << 16) | c);
+ }
+}
+
+uint QXmlStreamReaderPrivate::getChar_helper()
+{
+ const int BUFFER_SIZE = 8192;
+ characterOffset += readBufferPos;
+ readBufferPos = 0;
+ readBuffer.resize(0);
+#ifndef QT_NO_TEXTCODEC
+ if (decoder)
+#endif
+ nbytesread = 0;
+ if (device) {
+ rawReadBuffer.resize(BUFFER_SIZE);
+ int nbytesreadOrMinus1 = device->read(rawReadBuffer.data() + nbytesread, BUFFER_SIZE - nbytesread);
+ nbytesread += qMax(nbytesreadOrMinus1, 0);
+ } else {
+ if (nbytesread)
+ rawReadBuffer += dataBuffer;
+ else
+ rawReadBuffer = dataBuffer;
+ nbytesread = rawReadBuffer.size();
+ dataBuffer.clear();
+ }
+ if (!nbytesread) {
+ atEnd = true;
+ return StreamEOF;
+ }
+
+#ifndef QT_NO_TEXTCODEC
+ if (!decoder) {
+ if (nbytesread < 4) { // the 4 is to cover 0xef 0xbb 0xbf plus
+ // one extra for the utf8 codec
+ atEnd = true;
+ return StreamEOF;
+ }
+ int mib = 106; // UTF-8
+
+ // look for byte order mark
+ uchar ch1 = rawReadBuffer.at(0);
+ uchar ch2 = rawReadBuffer.at(1);
+ uchar ch3 = rawReadBuffer.at(2);
+ uchar ch4 = rawReadBuffer.at(3);
+
+ if ((ch1 == 0 && ch2 == 0 && ch3 == 0xfe && ch4 == 0xff) ||
+ (ch1 == 0xff && ch2 == 0xfe && ch3 == 0 && ch4 == 0))
+ mib = 1017; // UTF-32 with byte order mark
+ else if (ch1 == 0x3c && ch2 == 0x00 && ch3 == 0x00 && ch4 == 0x00)
+ mib = 1019; // UTF-32LE
+ else if (ch1 == 0x00 && ch2 == 0x00 && ch3 == 0x00 && ch4 == 0x3c)
+ mib = 1018; // UTF-32BE
+ else if ((ch1 == 0xfe && ch2 == 0xff) || (ch1 == 0xff && ch2 == 0xfe))
+ mib = 1015; // UTF-16 with byte order mark
+ else if (ch1 == 0x3c && ch2 == 0x00)
+ mib = 1014; // UTF-16LE
+ else if (ch1 == 0x00 && ch2 == 0x3c)
+ mib = 1013; // UTF-16BE
+ codec = QTextCodec::codecForMib(mib);
+ Q_ASSERT(codec);
+ decoder = codec->makeDecoder();
+ }
+
+ decoder->toUnicode(&readBuffer, rawReadBuffer.constData(), nbytesread);
+
+ if(lockEncoding && decoder->hasFailure()) {
+ raiseWellFormedError(QXmlStream::tr("Encountered incorrectly encoded content."));
+ readBuffer.clear();
+ return StreamEOF;
+ }
+#else
+ readBuffer = QString::fromLatin1(rawReadBuffer.data(), nbytesread);
+#endif // QT_NO_TEXTCODEC
+
+ readBuffer.reserve(1); // keep capacity when calling resize() next time
+
+ if (readBufferPos < readBuffer.size()) {
+ ushort c = readBuffer.at(readBufferPos++).unicode();
+ return c;
+ }
+
+ atEnd = true;
+ return StreamEOF;
+}
+
+QStringRef QXmlStreamReaderPrivate::namespaceForPrefix(const QStringRef &prefix)
+{
+ for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) {
+ const NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(j);
+ if (namespaceDeclaration.prefix == prefix) {
+ return namespaceDeclaration.namespaceUri;
+ }
+ }
+
+#if 1
+ if (namespaceProcessing && !prefix.isEmpty())
+ raiseWellFormedError(QXmlStream::tr("Namespace prefix '%1' not declared").arg(prefix));
+#endif
+
+ return QStringRef();
+}
+
+/*
+ uses namespaceForPrefix and builds the attribute vector
+ */
+void QXmlStreamReaderPrivate::resolveTag()
+{
+ int n = attributeStack.size();
+
+ if (namespaceProcessing) {
+ for (int a = 0; a < dtdAttributes.size(); ++a) {
+ DtdAttribute &dtdAttribute = dtdAttributes[a];
+ if (!dtdAttribute.isNamespaceAttribute
+ || dtdAttribute.defaultValue.isNull()
+ || dtdAttribute.tagName != qualifiedName
+ || dtdAttribute.attributeQualifiedName.isNull())
+ continue;
+ int i = 0;
+ while (i < n && symName(attributeStack[i].key) != dtdAttribute.attributeQualifiedName)
+ ++i;
+ if (i != n)
+ continue;
+ if (dtdAttribute.attributePrefix.isEmpty() && dtdAttribute.attributeName == QLatin1String("xmlns")) {
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
+ namespaceDeclaration.prefix.clear();
+
+ const QStringRef ns(dtdAttribute.defaultValue);
+ if(ns == QLatin1String("http://www.w3.org/2000/xmlns/") ||
+ ns == QLatin1String("http://www.w3.org/XML/1998/namespace"))
+ raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
+ else
+ namespaceDeclaration.namespaceUri = ns;
+ } else if (dtdAttribute.attributePrefix == QLatin1String("xmlns")) {
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
+ QStringRef namespacePrefix = dtdAttribute.attributeName;
+ QStringRef namespaceUri = dtdAttribute.defaultValue;
+ if (((namespacePrefix == QLatin1String("xml"))
+ ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace")))
+ || namespaceUri == QLatin1String("http://www.w3.org/2000/xmlns/")
+ || namespaceUri.isEmpty()
+ || namespacePrefix == QLatin1String("xmlns"))
+ raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
+
+ namespaceDeclaration.prefix = namespacePrefix;
+ namespaceDeclaration.namespaceUri = namespaceUri;
+ }
+ }
+ }
+
+ tagStack.top().namespaceDeclaration.namespaceUri = namespaceUri = namespaceForPrefix(prefix);
+
+ attributes.resize(n);
+
+ for (int i = 0; i < n; ++i) {
+ QXmlStreamAttribute &attribute = attributes[i];
+ Attribute &attrib = attributeStack[i];
+ QStringRef prefix(symPrefix(attrib.key));
+ QStringRef name(symString(attrib.key));
+ QStringRef qualifiedName(symName(attrib.key));
+ QStringRef value(symString(attrib.value));
+
+ attribute.m_name = QXmlStreamStringRef(name);
+ attribute.m_qualifiedName = QXmlStreamStringRef(qualifiedName);
+ attribute.m_value = QXmlStreamStringRef(value);
+
+ if (!prefix.isEmpty()) {
+ QStringRef attributeNamespaceUri = namespaceForPrefix(prefix);
+ attribute.m_namespaceUri = QXmlStreamStringRef(attributeNamespaceUri);
+ }
+
+ for (int j = 0; j < i; ++j) {
+ if (attributes[j].name() == attribute.name()
+ && attributes[j].namespaceUri() == attribute.namespaceUri()
+ && (namespaceProcessing || attributes[j].qualifiedName() == attribute.qualifiedName()))
+ raiseWellFormedError(QXmlStream::tr("Attribute '%1' redefined.").arg(attribute.qualifiedName()));
+ }
+ }
+
+ for (int a = 0; a < dtdAttributes.size(); ++a) {
+ DtdAttribute &dtdAttribute = dtdAttributes[a];
+ if (dtdAttribute.isNamespaceAttribute
+ || dtdAttribute.defaultValue.isNull()
+ || dtdAttribute.tagName != qualifiedName
+ || dtdAttribute.attributeQualifiedName.isNull())
+ continue;
+ int i = 0;
+ while (i < n && symName(attributeStack[i].key) != dtdAttribute.attributeQualifiedName)
+ ++i;
+ if (i != n)
+ continue;
+
+
+
+ QXmlStreamAttribute attribute;
+ attribute.m_name = QXmlStreamStringRef(dtdAttribute.attributeName);
+ attribute.m_qualifiedName = QXmlStreamStringRef(dtdAttribute.attributeQualifiedName);
+ attribute.m_value = QXmlStreamStringRef(dtdAttribute.defaultValue);
+
+ if (!dtdAttribute.attributePrefix.isEmpty()) {
+ QStringRef attributeNamespaceUri = namespaceForPrefix(dtdAttribute.attributePrefix);
+ attribute.m_namespaceUri = QXmlStreamStringRef(attributeNamespaceUri);
+ }
+ attribute.m_isDefault = true;
+ attributes.append(attribute);
+ }
+
+ attributeStack.clear();
+}
+
+void QXmlStreamReaderPrivate::resolvePublicNamespaces()
+{
+ const Tag &tag = tagStack.top();
+ int n = namespaceDeclarations.size() - tag.namespaceDeclarationsSize;
+ publicNamespaceDeclarations.resize(n);
+ for (int i = 0; i < n; ++i) {
+ const NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(tag.namespaceDeclarationsSize + i);
+ QXmlStreamNamespaceDeclaration &publicNamespaceDeclaration = publicNamespaceDeclarations[i];
+ publicNamespaceDeclaration.m_prefix = QXmlStreamStringRef(namespaceDeclaration.prefix);
+ publicNamespaceDeclaration.m_namespaceUri = QXmlStreamStringRef(namespaceDeclaration.namespaceUri);
+ }
+}
+
+void QXmlStreamReaderPrivate::resolveDtd()
+{
+ publicNotationDeclarations.resize(notationDeclarations.size());
+ for (int i = 0; i < notationDeclarations.size(); ++i) {
+ const QXmlStreamReaderPrivate::NotationDeclaration &notationDeclaration = notationDeclarations.at(i);
+ QXmlStreamNotationDeclaration &publicNotationDeclaration = publicNotationDeclarations[i];
+ publicNotationDeclaration.m_name = QXmlStreamStringRef(notationDeclaration.name);
+ publicNotationDeclaration.m_systemId = QXmlStreamStringRef(notationDeclaration.systemId);
+ publicNotationDeclaration.m_publicId = QXmlStreamStringRef(notationDeclaration.publicId);
+
+ }
+ notationDeclarations.clear();
+ publicEntityDeclarations.resize(entityDeclarations.size());
+ for (int i = 0; i < entityDeclarations.size(); ++i) {
+ const QXmlStreamReaderPrivate::EntityDeclaration &entityDeclaration = entityDeclarations.at(i);
+ QXmlStreamEntityDeclaration &publicEntityDeclaration = publicEntityDeclarations[i];
+ publicEntityDeclaration.m_name = QXmlStreamStringRef(entityDeclaration.name);
+ publicEntityDeclaration.m_notationName = QXmlStreamStringRef(entityDeclaration.notationName);
+ publicEntityDeclaration.m_systemId = QXmlStreamStringRef(entityDeclaration.systemId);
+ publicEntityDeclaration.m_publicId = QXmlStreamStringRef(entityDeclaration.publicId);
+ publicEntityDeclaration.m_value = QXmlStreamStringRef(entityDeclaration.value);
+ }
+ entityDeclarations.clear();
+ parameterEntityHash.clear();
+}
+
+uint QXmlStreamReaderPrivate::resolveCharRef(int symbolIndex)
+{
+ bool ok = true;
+ uint s;
+ // ### add toXShort to QStringRef?
+ if (sym(symbolIndex).c == 'x')
+ s = symString(symbolIndex, 1).toUInt(&ok, 16);
+ else
+ s = symString(symbolIndex).toUInt(&ok, 10);
+
+ ok &= (s == 0x9 || s == 0xa || s == 0xd || (s >= 0x20 && s <= 0xd7ff)
+ || (s >= 0xe000 && s <= 0xfffd) || (s >= 0x10000 && s <= QChar::LastValidCodePoint));
+
+ return ok ? s : 0;
+}
+
+
+void QXmlStreamReaderPrivate::checkPublicLiteral(const QStringRef &publicId)
+{
+//#x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
+
+ const ushort *data = reinterpret_cast<const ushort *>(publicId.constData());
+ uchar c = 0;
+ int i;
+ for (i = publicId.size() - 1; i >= 0; --i) {
+ if (data[i] < 256)
+ switch ((c = data[i])) {
+ case ' ': case '\n': case '\r': case '-': case '(': case ')':
+ case '+': case ',': case '.': case '/': case ':': case '=':
+ case '?': case ';': case '!': case '*': case '#': case '@':
+ case '$': case '_': case '%': case '\'': case '\"':
+ continue;
+ default:
+ if ((c >= 'a' && c <= 'z')
+ || (c >= 'A' && c <= 'Z')
+ || (c >= '0' && c <= '9'))
+ continue;
+ }
+ break;
+ }
+ if (i >= 0)
+ raiseWellFormedError(QXmlStream::tr("Unexpected character '%1' in public id literal.").arg(QChar(QLatin1Char(c))));
+}
+
+/*
+ Checks whether the document starts with an xml declaration. If it
+ does, this function returns \c true; otherwise it sets up everything
+ for a synthetic start document event and returns \c false.
+ */
+bool QXmlStreamReaderPrivate::checkStartDocument()
+{
+ hasCheckedStartDocument = true;
+
+ if (scanString(spell[XML], XML))
+ return true;
+
+ type = QXmlStreamReader::StartDocument;
+ if (atEnd) {
+ hasCheckedStartDocument = false;
+ raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
+ }
+ return false;
+}
+
+void QXmlStreamReaderPrivate::startDocument()
+{
+ QString err;
+ if (documentVersion != QLatin1String("1.0")) {
+ if (documentVersion.contains(QLatin1Char(' ')))
+ err = QXmlStream::tr("Invalid XML version string.");
+ else
+ err = QXmlStream::tr("Unsupported XML version.");
+ }
+ int n = attributeStack.size();
+
+ /* We use this bool to ensure that the pesudo attributes are in the
+ * proper order:
+ *
+ * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' */
+ bool hasStandalone = false;
+
+ for (int i = 0; err.isNull() && i < n; ++i) {
+ Attribute &attrib = attributeStack[i];
+ QStringRef prefix(symPrefix(attrib.key));
+ QStringRef key(symString(attrib.key));
+ QStringRef value(symString(attrib.value));
+
+ if (prefix.isEmpty() && key == QLatin1String("encoding")) {
+ documentEncoding = value;
+
+ if(hasStandalone)
+ err = QXmlStream::tr("The standalone pseudo attribute must appear after the encoding.");
+ if (!QXmlUtils::isEncName(value))
+ err = QXmlStream::tr("%1 is an invalid encoding name.").arg(value);
+ else {
+#ifdef QT_NO_TEXTCODEC
+ readBuffer = QString::fromLatin1(rawReadBuffer.data(), nbytesread);
+#else
+ QTextCodec *const newCodec = QTextCodec::codecForName(value.toLatin1());
+ if (!newCodec)
+ err = QXmlStream::tr("Encoding %1 is unsupported").arg(value);
+ else if (newCodec != codec && !lockEncoding) {
+ codec = newCodec;
+ delete decoder;
+ decoder = codec->makeDecoder();
+ decoder->toUnicode(&readBuffer, rawReadBuffer.data(), nbytesread);
+ }
+#endif // QT_NO_TEXTCODEC
+ }
+ } else if (prefix.isEmpty() && key == QLatin1String("standalone")) {
+ hasStandalone = true;
+ if (value == QLatin1String("yes"))
+ standalone = true;
+ else if (value == QLatin1String("no"))
+ standalone = false;
+ else
+ err = QXmlStream::tr("Standalone accepts only yes or no.");
+ } else {
+ err = QXmlStream::tr("Invalid attribute in XML declaration.");
+ }
+ }
+
+ if (!err.isNull())
+ raiseWellFormedError(err);
+ attributeStack.clear();
+}
+
+
+void QXmlStreamReaderPrivate::raiseError(QXmlStreamReader::Error error, const QString& message)
+{
+ this->error = error;
+ errorString = message;
+ if (errorString.isNull()) {
+ if (error == QXmlStreamReader::PrematureEndOfDocumentError)
+ errorString = QXmlStream::tr("Premature end of document.");
+ else if (error == QXmlStreamReader::CustomError)
+ errorString = QXmlStream::tr("Invalid document.");
+ }
+
+ type = QXmlStreamReader::Invalid;
+}
+
+void QXmlStreamReaderPrivate::raiseWellFormedError(const QString &message)
+{
+ raiseError(QXmlStreamReader::NotWellFormedError, message);
+}
+
+void QXmlStreamReaderPrivate::parseError()
+{
+
+ if (token == EOF_SYMBOL) {
+ raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
+ return;
+ }
+ const int nmax = 4;
+ QString error_message;
+ int ers = state_stack[tos];
+ int nexpected = 0;
+ int expected[nmax];
+ if (token != ERROR)
+ for (int tk = 0; tk < TERMINAL_COUNT; ++tk) {
+ int k = t_action(ers, tk);
+ if (k <= 0)
+ continue;
+ if (spell[tk]) {
+ if (nexpected < nmax)
+ expected[nexpected++] = tk;
+ }
+ }
+
+ if (nexpected && nexpected < nmax) {
+ //: '<first option>'
+ QString exp_str = QXmlStream::tr("'%1'", "expected").arg(QLatin1String(spell[expected[0]]));
+ if (nexpected == 2) {
+ //: <first option>, '<second option>'
+ exp_str = QXmlStream::tr("%1 or '%2'", "expected").arg(exp_str, QLatin1String(spell[expected[1]]));
+ } else if (nexpected > 2) {
+ int s = 1;
+ for (; s < nexpected - 1; ++s) {
+ //: <options so far>, '<next option>'
+ exp_str = QXmlStream::tr("%1, '%2'", "expected").arg(exp_str, QLatin1String(spell[expected[s]]));
+ }
+ //: <options so far>, or '<final option>'
+ exp_str = QXmlStream::tr("%1, or '%2'", "expected").arg(exp_str, QLatin1String(spell[expected[s]]));
+ }
+ error_message = QXmlStream::tr("Expected %1, but got '%2'.").arg(exp_str, QLatin1String(spell[token]));
+ } else {
+ error_message = QXmlStream::tr("Unexpected '%1'.").arg(QLatin1String(spell[token]));
+ }
+
+ raiseWellFormedError(error_message);
+}
+
+void QXmlStreamReaderPrivate::resume(int rule) {
+ resumeReduction = rule;
+ if (error == QXmlStreamReader::NoError)
+ raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
+}
+
+/*! Returns the current line number, starting with 1.
+
+\sa columnNumber(), characterOffset()
+ */
+qint64 QXmlStreamReader::lineNumber() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->lineNumber + 1; // in public we start with 1
+}
+
+/*! Returns the current column number, starting with 0.
+
+\sa lineNumber(), characterOffset()
+ */
+qint64 QXmlStreamReader::columnNumber() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->characterOffset - d->lastLineStart + d->readBufferPos;
+}
+
+/*! Returns the current character offset, starting with 0.
+
+\sa lineNumber(), columnNumber()
+*/
+qint64 QXmlStreamReader::characterOffset() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->characterOffset + d->readBufferPos;
+}
+
+
+/*! Returns the text of \l Characters, \l Comment, \l DTD, or
+ EntityReference.
+ */
+QStringRef QXmlStreamReader::text() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->text;
+}
+
+
+/*! If the tokenType() is \l DTD, this function returns the DTD's
+ notation declarations. Otherwise an empty vector is returned.
+
+ The QXmlStreamNotationDeclarations class is defined to be a QVector
+ of QXmlStreamNotationDeclaration.
+ */
+QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->notationDeclarations.size())
+ const_cast<QXmlStreamReaderPrivate *>(d)->resolveDtd();
+ return d->publicNotationDeclarations;
+}
+
+
+/*! If the tokenType() is \l DTD, this function returns the DTD's
+ unparsed (external) entity declarations. Otherwise an empty vector is returned.
+
+ The QXmlStreamEntityDeclarations class is defined to be a QVector
+ of QXmlStreamEntityDeclaration.
+ */
+QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->entityDeclarations.size())
+ const_cast<QXmlStreamReaderPrivate *>(d)->resolveDtd();
+ return d->publicEntityDeclarations;
+}
+
+/*!
+ \since 4.4
+
+ If the tokenType() is \l DTD, this function returns the DTD's
+ name. Otherwise an empty string is returned.
+
+ */
+QStringRef QXmlStreamReader::dtdName() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::DTD)
+ return d->dtdName;
+ return QStringRef();
+}
+
+/*!
+ \since 4.4
+
+ If the tokenType() is \l DTD, this function returns the DTD's
+ public identifier. Otherwise an empty string is returned.
+
+ */
+QStringRef QXmlStreamReader::dtdPublicId() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::DTD)
+ return d->dtdPublicId;
+ return QStringRef();
+}
+
+/*!
+ \since 4.4
+
+ If the tokenType() is \l DTD, this function returns the DTD's
+ system identifier. Otherwise an empty string is returned.
+
+ */
+QStringRef QXmlStreamReader::dtdSystemId() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::DTD)
+ return d->dtdSystemId;
+ return QStringRef();
+}
+
+/*! If the tokenType() is \l StartElement, this function returns the
+ element's namespace declarations. Otherwise an empty vector is
+ returned.
+
+ The QXmlStreamNamespaceDeclarations class is defined to be a QVector
+ of QXmlStreamNamespaceDeclaration.
+
+ \sa addExtraNamespaceDeclaration(), addExtraNamespaceDeclarations()
+ */
+QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->publicNamespaceDeclarations.isEmpty() && d->type == StartElement)
+ const_cast<QXmlStreamReaderPrivate *>(d)->resolvePublicNamespaces();
+ return d->publicNamespaceDeclarations;
+}
+
+
+/*!
+ \since 4.4
+
+ Adds an \a extraNamespaceDeclaration. The declaration will be
+ valid for children of the current element, or - should the function
+ be called before any elements are read - for the entire XML
+ document.
+
+ \sa namespaceDeclarations(), addExtraNamespaceDeclarations(), setNamespaceProcessing()
+ */
+void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)
+{
+ Q_D(QXmlStreamReader);
+ QXmlStreamReaderPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push();
+ namespaceDeclaration.prefix = d->addToStringStorage(extraNamespaceDeclaration.prefix());
+ namespaceDeclaration.namespaceUri = d->addToStringStorage(extraNamespaceDeclaration.namespaceUri());
+}
+
+/*!
+ \since 4.4
+
+ Adds a vector of declarations specified by \a extraNamespaceDeclarations.
+
+ \sa namespaceDeclarations(), addExtraNamespaceDeclaration()
+ */
+void QXmlStreamReader::addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)
+{
+ for (int i = 0; i < extraNamespaceDeclarations.size(); ++i)
+ addExtraNamespaceDeclaration(extraNamespaceDeclarations.at(i));
+}
+
+
+/*! Convenience function to be called in case a StartElement was
+ read. Reads until the corresponding EndElement and returns all text
+ in-between. In case of no error, the current token (see tokenType())
+ after having called this function is EndElement.
+
+ The function concatenates text() when it reads either \l Characters
+ or EntityReference tokens, but skips ProcessingInstruction and \l
+ Comment. If the current token is not StartElement, an empty string is
+ returned.
+
+ The \a behaviour defines what happens in case anything else is
+ read before reaching EndElement. The function can include the text from
+ child elements (useful for example for HTML), ignore child elements, or
+ raise an UnexpectedElementError and return what was read so far (default).
+
+ \since 4.6
+ */
+QString QXmlStreamReader::readElementText(ReadElementTextBehaviour behaviour)
+{
+ Q_D(QXmlStreamReader);
+ if (isStartElement()) {
+ QString result;
+ forever {
+ switch (readNext()) {
+ case Characters:
+ case EntityReference:
+ result.insert(result.size(), d->text.unicode(), d->text.size());
+ break;
+ case EndElement:
+ return result;
+ case ProcessingInstruction:
+ case Comment:
+ break;
+ case StartElement:
+ if (behaviour == SkipChildElements) {
+ skipCurrentElement();
+ break;
+ } else if (behaviour == IncludeChildElements) {
+ result += readElementText(behaviour);
+ break;
+ }
+ Q_FALLTHROUGH();
+ default:
+ if (d->error || behaviour == ErrorOnUnexpectedElement) {
+ if (!d->error)
+ d->raiseError(UnexpectedElementError, QXmlStream::tr("Expected character data."));
+ return result;
+ }
+ }
+ }
+ }
+ return QString();
+}
+
+/*! Raises a custom error with an optional error \a message.
+
+ \sa error(), errorString()
+ */
+void QXmlStreamReader::raiseError(const QString& message)
+{
+ Q_D(QXmlStreamReader);
+ d->raiseError(CustomError, message);
+}
+
+/*!
+ Returns the error message that was set with raiseError().
+
+ \sa error(), lineNumber(), columnNumber(), characterOffset()
+ */
+QString QXmlStreamReader::errorString() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::Invalid)
+ return d->errorString;
+ return QString();
+}
+
+/*! Returns the type of the current error, or NoError if no error occurred.
+
+ \sa errorString(), raiseError()
+ */
+QXmlStreamReader::Error QXmlStreamReader::error() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::Invalid)
+ return d->error;
+ return NoError;
+}
+
+/*!
+ Returns the target of a ProcessingInstruction.
+ */
+QStringRef QXmlStreamReader::processingInstructionTarget() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->processingInstructionTarget;
+}
+
+/*!
+ Returns the data of a ProcessingInstruction.
+ */
+QStringRef QXmlStreamReader::processingInstructionData() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->processingInstructionData;
+}
+
+
+
+/*!
+ Returns the local name of a StartElement, EndElement, or an EntityReference.
+
+ \sa namespaceUri(), qualifiedName()
+ */
+QStringRef QXmlStreamReader::name() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->name;
+}
+
+/*!
+ Returns the namespaceUri of a StartElement or EndElement.
+
+ \sa name(), qualifiedName()
+ */
+QStringRef QXmlStreamReader::namespaceUri() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->namespaceUri;
+}
+
+/*!
+ Returns the qualified name of a StartElement or EndElement;
+
+ A qualified name is the raw name of an element in the XML data. It
+ consists of the namespace prefix, followed by colon, followed by the
+ element's local name. Since the namespace prefix is not unique (the
+ same prefix can point to different namespaces and different prefixes
+ can point to the same namespace), you shouldn't use qualifiedName(),
+ but the resolved namespaceUri() and the attribute's local name().
+
+ \sa name(), prefix(), namespaceUri()
+ */
+QStringRef QXmlStreamReader::qualifiedName() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->qualifiedName;
+}
+
+
+
+/*!
+ \since 4.4
+
+ Returns the prefix of a StartElement or EndElement.
+
+ \sa name(), qualifiedName()
+*/
+QStringRef QXmlStreamReader::prefix() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->prefix;
+}
+
+/*!
+ Returns the attributes of a StartElement.
+ */
+QXmlStreamAttributes QXmlStreamReader::attributes() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->attributes;
+}
+
+#endif // QT_NO_XMLSTREAMREADER
+
+/*!
+ \class QXmlStreamAttribute
+ \inmodule QtCore
+ \since 4.3
+ \reentrant
+ \brief The QXmlStreamAttribute class represents a single XML attribute
+
+ \ingroup xml-tools
+
+ An attribute consists of an optionally empty namespaceUri(), a
+ name(), a value(), and an isDefault() attribute.
+
+ The raw XML attribute name is returned as qualifiedName().
+*/
+
+/*!
+ Creates an empty attribute.
+ */
+QXmlStreamAttribute::QXmlStreamAttribute()
+{
+ m_isDefault = false;
+}
+
+/*!
+ Destructs an attribute.
+ */
+QXmlStreamAttribute::~QXmlStreamAttribute()
+{
+}
+
+/*! Constructs an attribute in the namespace described with \a
+ namespaceUri with \a name and value \a value.
+ */
+QXmlStreamAttribute::QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value)
+{
+ m_namespaceUri = QXmlStreamStringRef(QStringRef(&namespaceUri));
+ m_name = m_qualifiedName = QXmlStreamStringRef(QStringRef(&name));
+ m_value = QXmlStreamStringRef(QStringRef(&value));
+ m_namespaceUri = QXmlStreamStringRef(QStringRef(&namespaceUri));
+}
+
+/*!
+ Constructs an attribute with qualified name \a qualifiedName and value \a value.
+ */
+QXmlStreamAttribute::QXmlStreamAttribute(const QString &qualifiedName, const QString &value)
+{
+ int colon = qualifiedName.indexOf(QLatin1Char(':'));
+ m_name = QXmlStreamStringRef(QStringRef(&qualifiedName,
+ colon + 1,
+ qualifiedName.size() - (colon + 1)));
+ m_qualifiedName = QXmlStreamStringRef(QStringRef(&qualifiedName));
+ m_value = QXmlStreamStringRef(QStringRef(&value));
+}
+
+/*! \fn QStringRef QXmlStreamAttribute::namespaceUri() const
+
+ Returns the attribute's resolved namespaceUri, or an empty string
+ reference if the attribute does not have a defined namespace.
+ */
+/*! \fn QStringRef QXmlStreamAttribute::name() const
+ Returns the attribute's local name.
+ */
+/*! \fn QStringRef QXmlStreamAttribute::qualifiedName() const
+ Returns the attribute's qualified name.
+
+ A qualified name is the raw name of an attribute in the XML
+ data. It consists of the namespace prefix(), followed by colon,
+ followed by the attribute's local name(). Since the namespace prefix
+ is not unique (the same prefix can point to different namespaces
+ and different prefixes can point to the same namespace), you
+ shouldn't use qualifiedName(), but the resolved namespaceUri() and
+ the attribute's local name().
+ */
+/*!
+ \fn QStringRef QXmlStreamAttribute::prefix() const
+ \since 4.4
+ Returns the attribute's namespace prefix.
+
+ \sa name(), qualifiedName()
+
+*/
+
+/*! \fn QStringRef QXmlStreamAttribute::value() const
+ Returns the attribute's value.
+ */
+
+/*! \fn bool QXmlStreamAttribute::isDefault() const
+
+ Returns \c true if the parser added this attribute with a default
+ value following an ATTLIST declaration in the DTD; otherwise
+ returns \c false.
+*/
+/*! \fn bool QXmlStreamAttribute::operator==(const QXmlStreamAttribute &other) const
+
+ Compares this attribute with \a other and returns \c true if they are
+ equal; otherwise returns \c false.
+ */
+/*! \fn bool QXmlStreamAttribute::operator!=(const QXmlStreamAttribute &other) const
+
+ Compares this attribute with \a other and returns \c true if they are
+ not equal; otherwise returns \c false.
+ */
+
+
+/*!
+ Creates a copy of \a other.
+ */
+QXmlStreamAttribute::QXmlStreamAttribute(const QXmlStreamAttribute &other)
+{
+ *this = other;
+}
+
+/*!
+ Assigns \a other to this attribute.
+ */
+QXmlStreamAttribute& QXmlStreamAttribute::operator=(const QXmlStreamAttribute &other)
+{
+ m_name = other.m_name;
+ m_namespaceUri = other.m_namespaceUri;
+ m_qualifiedName = other.m_qualifiedName;
+ m_value = other.m_value;
+ m_isDefault = other.m_isDefault;
+ return *this;
+}
+
+
+/*!
+ \class QXmlStreamAttributes
+ \inmodule QtCore
+ \since 4.3
+ \reentrant
+ \brief The QXmlStreamAttributes class represents a vector of QXmlStreamAttribute.
+
+ Attributes are returned by a QXmlStreamReader in
+ \l{QXmlStreamReader::attributes()} {attributes()} when the reader
+ reports a \l {QXmlStreamReader::StartElement}{start element}. The
+ class can also be used with a QXmlStreamWriter as an argument to
+ \l {QXmlStreamWriter::writeAttributes()}{writeAttributes()}.
+
+ The convenience function value() loops over the vector and returns
+ an attribute value for a given namespaceUri and an attribute's
+ name.
+
+ New attributes can be added with append().
+
+ \ingroup xml-tools
+*/
+
+/*!
+ \fn QXmlStreamAttributes::QXmlStreamAttributes()
+
+ A constructor for QXmlStreamAttributes.
+*/
+
+/*!
+ \typedef QXmlStreamNotationDeclarations
+ \relates QXmlStreamNotationDeclaration
+
+ Synonym for QVector<QXmlStreamNotationDeclaration>.
+*/
+
+
+/*!
+ \class QXmlStreamNotationDeclaration
+ \inmodule QtCore
+ \since 4.3
+ \reentrant
+ \brief The QXmlStreamNotationDeclaration class represents a DTD notation declaration.
+
+ \ingroup xml-tools
+
+ An notation declaration consists of a name(), a systemId(), and a publicId().
+*/
+
+/*!
+ Creates an empty notation declaration.
+*/
+QXmlStreamNotationDeclaration::QXmlStreamNotationDeclaration()
+{
+}
+/*!
+ Creates a copy of \a other.
+ */
+QXmlStreamNotationDeclaration::QXmlStreamNotationDeclaration(const QXmlStreamNotationDeclaration &other)
+{
+ *this = other;
+}
+
+/*!
+ Assigns \a other to this notation declaration.
+ */
+QXmlStreamNotationDeclaration& QXmlStreamNotationDeclaration::operator=(const QXmlStreamNotationDeclaration &other)
+{
+ m_name = other.m_name;
+ m_systemId = other.m_systemId;
+ m_publicId = other.m_publicId;
+ return *this;
+}
+
+/*!
+Destructs this notation declaration.
+*/
+QXmlStreamNotationDeclaration::~QXmlStreamNotationDeclaration()
+{
+}
+
+/*! \fn QStringRef QXmlStreamNotationDeclaration::name() const
+
+Returns the notation name.
+*/
+/*! \fn QStringRef QXmlStreamNotationDeclaration::systemId() const
+
+Returns the system identifier.
+*/
+/*! \fn QStringRef QXmlStreamNotationDeclaration::publicId() const
+
+Returns the public identifier.
+*/
+
+/*! \fn inline bool QXmlStreamNotationDeclaration::operator==(const QXmlStreamNotationDeclaration &other) const
+
+ Compares this notation declaration with \a other and returns \c true
+ if they are equal; otherwise returns \c false.
+ */
+/*! \fn inline bool QXmlStreamNotationDeclaration::operator!=(const QXmlStreamNotationDeclaration &other) const
+
+ Compares this notation declaration with \a other and returns \c true
+ if they are not equal; otherwise returns \c false.
+ */
+
+/*!
+ \typedef QXmlStreamNamespaceDeclarations
+ \relates QXmlStreamNamespaceDeclaration
+
+ Synonym for QVector<QXmlStreamNamespaceDeclaration>.
+*/
+
+/*!
+ \class QXmlStreamNamespaceDeclaration
+ \inmodule QtCore
+ \since 4.3
+ \reentrant
+ \brief The QXmlStreamNamespaceDeclaration class represents a namespace declaration.
+
+ \ingroup xml-tools
+
+ An namespace declaration consists of a prefix() and a namespaceUri().
+*/
+/*! \fn inline bool QXmlStreamNamespaceDeclaration::operator==(const QXmlStreamNamespaceDeclaration &other) const
+
+ Compares this namespace declaration with \a other and returns \c true
+ if they are equal; otherwise returns \c false.
+ */
+/*! \fn inline bool QXmlStreamNamespaceDeclaration::operator!=(const QXmlStreamNamespaceDeclaration &other) const
+
+ Compares this namespace declaration with \a other and returns \c true
+ if they are not equal; otherwise returns \c false.
+ */
+
+/*!
+ Creates an empty namespace declaration.
+*/
+QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration()
+{
+}
+
+/*!
+ \since 4.4
+
+ Creates a namespace declaration with \a prefix and \a namespaceUri.
+*/
+QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri)
+{
+ m_prefix = prefix;
+ m_namespaceUri = namespaceUri;
+}
+
+/*!
+ Creates a copy of \a other.
+ */
+QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &other)
+{
+ *this = other;
+}
+
+/*!
+ Assigns \a other to this namespace declaration.
+ */
+QXmlStreamNamespaceDeclaration& QXmlStreamNamespaceDeclaration::operator=(const QXmlStreamNamespaceDeclaration &other)
+{
+ m_prefix = other.m_prefix;
+ m_namespaceUri = other.m_namespaceUri;
+ return *this;
+}
+/*!
+Destructs this namespace declaration.
+*/
+QXmlStreamNamespaceDeclaration::~QXmlStreamNamespaceDeclaration()
+{
+}
+
+/*! \fn QStringRef QXmlStreamNamespaceDeclaration::prefix() const
+
+Returns the prefix.
+*/
+/*! \fn QStringRef QXmlStreamNamespaceDeclaration::namespaceUri() const
+
+Returns the namespaceUri.
+*/
+
+
+
+
+/*!
+ \typedef QXmlStreamEntityDeclarations
+ \relates QXmlStreamEntityDeclaration
+
+ Synonym for QVector<QXmlStreamEntityDeclaration>.
+*/
+
+/*!
+ \class QXmlStreamStringRef
+ \inmodule QtCore
+ \since 4.3
+ \internal
+*/
+
+/*!
+ \class QXmlStreamEntityDeclaration
+ \inmodule QtCore
+ \since 4.3
+ \reentrant
+ \brief The QXmlStreamEntityDeclaration class represents a DTD entity declaration.
+
+ \ingroup xml-tools
+
+ An entity declaration consists of a name(), a notationName(), a
+ systemId(), a publicId(), and a value().
+*/
+
+/*!
+ Creates an empty entity declaration.
+*/
+QXmlStreamEntityDeclaration::QXmlStreamEntityDeclaration()
+{
+}
+
+/*!
+ Creates a copy of \a other.
+ */
+QXmlStreamEntityDeclaration::QXmlStreamEntityDeclaration(const QXmlStreamEntityDeclaration &other)
+{
+ *this = other;
+}
+
+/*!
+ Assigns \a other to this entity declaration.
+ */
+QXmlStreamEntityDeclaration& QXmlStreamEntityDeclaration::operator=(const QXmlStreamEntityDeclaration &other)
+{
+ m_name = other.m_name;
+ m_notationName = other.m_notationName;
+ m_systemId = other.m_systemId;
+ m_publicId = other.m_publicId;
+ m_value = other.m_value;
+ return *this;
+}
+
+/*!
+ Destructs this entity declaration.
+*/
+QXmlStreamEntityDeclaration::~QXmlStreamEntityDeclaration()
+{
+}
+
+/*! \fn QXmlStreamStringRef::swap(QXmlStreamStringRef &other)
+ \since 5.6
+
+ Swaps this string reference's contents with \a other.
+ This function is very fast and never fails.
+*/
+
+/*! \fn QStringRef QXmlStreamEntityDeclaration::name() const
+
+Returns the entity name.
+*/
+/*! \fn QStringRef QXmlStreamEntityDeclaration::notationName() const
+
+Returns the notation name.
+*/
+/*! \fn QStringRef QXmlStreamEntityDeclaration::systemId() const
+
+Returns the system identifier.
+*/
+/*! \fn QStringRef QXmlStreamEntityDeclaration::publicId() const
+
+Returns the public identifier.
+*/
+/*! \fn QStringRef QXmlStreamEntityDeclaration::value() const
+
+Returns the entity's value.
+*/
+
+/*! \fn bool QXmlStreamEntityDeclaration::operator==(const QXmlStreamEntityDeclaration &other) const
+
+ Compares this entity declaration with \a other and returns \c true if
+ they are equal; otherwise returns \c false.
+ */
+/*! \fn bool QXmlStreamEntityDeclaration::operator!=(const QXmlStreamEntityDeclaration &other) const
+
+ Compares this entity declaration with \a other and returns \c true if
+ they are not equal; otherwise returns \c false.
+ */
+
+/*! Returns the value of the attribute \a name in the namespace
+ described with \a namespaceUri, or an empty string reference if the
+ attribute is not defined. The \a namespaceUri can be empty.
+ */
+QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, const QString &name) const
+{
+ for (int i = 0; i < size(); ++i) {
+ const QXmlStreamAttribute &attribute = at(i);
+ if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
+ return attribute.value();
+ }
+ return QStringRef();
+}
+
+/*!\overload
+ Returns the value of the attribute \a name in the namespace
+ described with \a namespaceUri, or an empty string reference if the
+ attribute is not defined. The \a namespaceUri can be empty.
+ */
+QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, QLatin1String name) const
+{
+ for (int i = 0; i < size(); ++i) {
+ const QXmlStreamAttribute &attribute = at(i);
+ if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
+ return attribute.value();
+ }
+ return QStringRef();
+}
+
+/*!\overload
+ Returns the value of the attribute \a name in the namespace
+ described with \a namespaceUri, or an empty string reference if the
+ attribute is not defined. The \a namespaceUri can be empty.
+ */
+QStringRef QXmlStreamAttributes::value(QLatin1String namespaceUri, QLatin1String name) const
+{
+ for (int i = 0; i < size(); ++i) {
+ const QXmlStreamAttribute &attribute = at(i);
+ if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
+ return attribute.value();
+ }
+ return QStringRef();
+}
+
+/*!\overload
+
+ Returns the value of the attribute with qualified name \a
+ qualifiedName , or an empty string reference if the attribute is not
+ defined. A qualified name is the raw name of an attribute in the XML
+ data. It consists of the namespace prefix, followed by colon,
+ followed by the attribute's local name. Since the namespace prefix
+ is not unique (the same prefix can point to different namespaces and
+ different prefixes can point to the same namespace), you shouldn't
+ use qualified names, but a resolved namespaceUri and the attribute's
+ local name.
+ */
+QStringRef QXmlStreamAttributes::value(const QString &qualifiedName) const
+{
+ for (int i = 0; i < size(); ++i) {
+ const QXmlStreamAttribute &attribute = at(i);
+ if (attribute.qualifiedName() == qualifiedName)
+ return attribute.value();
+ }
+ return QStringRef();
+}
+
+/*!\overload
+
+ Returns the value of the attribute with qualified name \a
+ qualifiedName , or an empty string reference if the attribute is not
+ defined. A qualified name is the raw name of an attribute in the XML
+ data. It consists of the namespace prefix, followed by colon,
+ followed by the attribute's local name. Since the namespace prefix
+ is not unique (the same prefix can point to different namespaces and
+ different prefixes can point to the same namespace), you shouldn't
+ use qualified names, but a resolved namespaceUri and the attribute's
+ local name.
+ */
+QStringRef QXmlStreamAttributes::value(QLatin1String qualifiedName) const
+{
+ for (int i = 0; i < size(); ++i) {
+ const QXmlStreamAttribute &attribute = at(i);
+ if (attribute.qualifiedName() == qualifiedName)
+ return attribute.value();
+ }
+ return QStringRef();
+}
+
+/*!Appends a new attribute with \a name in the namespace
+ described with \a namespaceUri, and value \a value. The \a
+ namespaceUri can be empty.
+ */
+void QXmlStreamAttributes::append(const QString &namespaceUri, const QString &name, const QString &value)
+{
+ append(QXmlStreamAttribute(namespaceUri, name, value));
+}
+
+/*!\overload
+ Appends a new attribute with qualified name \a qualifiedName and
+ value \a value.
+ */
+void QXmlStreamAttributes::append(const QString &qualifiedName, const QString &value)
+{
+ append(QXmlStreamAttribute(qualifiedName, value));
+}
+
+#ifndef QT_NO_XMLSTREAMREADER
+
+/*! \fn bool QXmlStreamReader::isStartDocument() const
+ Returns \c true if tokenType() equals \l StartDocument; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isEndDocument() const
+ Returns \c true if tokenType() equals \l EndDocument; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isStartElement() const
+ Returns \c true if tokenType() equals \l StartElement; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isEndElement() const
+ Returns \c true if tokenType() equals \l EndElement; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isCharacters() const
+ Returns \c true if tokenType() equals \l Characters; otherwise returns \c false.
+
+ \sa isWhitespace(), isCDATA()
+*/
+/*! \fn bool QXmlStreamReader::isComment() const
+ Returns \c true if tokenType() equals \l Comment; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isDTD() const
+ Returns \c true if tokenType() equals \l DTD; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isEntityReference() const
+ Returns \c true if tokenType() equals \l EntityReference; otherwise returns \c false.
+*/
+/*! \fn bool QXmlStreamReader::isProcessingInstruction() const
+ Returns \c true if tokenType() equals \l ProcessingInstruction; otherwise returns \c false.
+*/
+
+/*! Returns \c true if the reader reports characters that only consist
+ of white-space; otherwise returns \c false.
+
+ \sa isCharacters(), text()
+*/
+bool QXmlStreamReader::isWhitespace() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->type == QXmlStreamReader::Characters && d->isWhitespace;
+}
+
+/*! Returns \c true if the reader reports characters that stem from a
+ CDATA section; otherwise returns \c false.
+
+ \sa isCharacters(), text()
+*/
+bool QXmlStreamReader::isCDATA() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->type == QXmlStreamReader::Characters && d->isCDATA;
+}
+
+
+
+/*!
+ Returns \c true if this document has been declared standalone in the
+ XML declaration; otherwise returns \c false.
+
+ If no XML declaration has been parsed, this function returns \c false.
+ */
+bool QXmlStreamReader::isStandaloneDocument() const
+{
+ Q_D(const QXmlStreamReader);
+ return d->standalone;
+}
+
+
+/*!
+ \since 4.4
+
+ If the tokenType() is \l StartDocument, this function returns the
+ version string as specified in the XML declaration.
+ Otherwise an empty string is returned.
+ */
+QStringRef QXmlStreamReader::documentVersion() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::StartDocument)
+ return d->documentVersion;
+ return QStringRef();
+}
+
+/*!
+ \since 4.4
+
+ If the tokenType() is \l StartDocument, this function returns the
+ encoding string as specified in the XML declaration.
+ Otherwise an empty string is returned.
+ */
+QStringRef QXmlStreamReader::documentEncoding() const
+{
+ Q_D(const QXmlStreamReader);
+ if (d->type == QXmlStreamReader::StartDocument)
+ return d->documentEncoding;
+ return QStringRef();
+}
+
+#endif // QT_NO_XMLSTREAMREADER
+
+/*!
+ \class QXmlStreamWriter
+ \inmodule QtCore
+ \since 4.3
+ \reentrant
+
+ \brief The QXmlStreamWriter class provides an XML writer with a
+ simple streaming API.
+
+ \ingroup xml-tools
+
+ QXmlStreamWriter is the counterpart to QXmlStreamReader for writing
+ XML. Like its related class, it operates on a QIODevice specified
+ with setDevice(). The API is simple and straightforward: for every
+ XML token or event you want to write, the writer provides a
+ specialized function.
+
+ You start a document with writeStartDocument() and end it with
+ writeEndDocument(). This will implicitly close all remaining open
+ tags.
+
+ Element tags are opened with writeStartElement() followed by
+ writeAttribute() or writeAttributes(), element content, and then
+ writeEndElement(). A shorter form writeEmptyElement() can be used
+ to write empty elements, followed by writeAttributes().
+
+ Element content consists of either characters, entity references or
+ nested elements. It is written with writeCharacters(), which also
+ takes care of escaping all forbidden characters and character
+ sequences, writeEntityReference(), or subsequent calls to
+ writeStartElement(). A convenience method writeTextElement() can be
+ used for writing terminal elements that contain nothing but text.
+
+ The following abridged code snippet shows the basic use of the class
+ to write formatted XML with indentation:
+
+ \snippet qxmlstreamwriter/main.cpp start stream
+ \dots
+ \snippet qxmlstreamwriter/main.cpp write element
+ \dots
+ \snippet qxmlstreamwriter/main.cpp finish stream
+
+ QXmlStreamWriter takes care of prefixing namespaces, all you have to
+ do is specify the \c namespaceUri when writing elements or
+ attributes. If you must conform to certain prefixes, you can force
+ the writer to use them by declaring the namespaces manually with
+ either writeNamespace() or writeDefaultNamespace(). Alternatively,
+ you can bypass the stream writer's namespace support and use
+ overloaded methods that take a qualified name instead. The namespace
+ \e http://www.w3.org/XML/1998/namespace is implicit and mapped to the
+ prefix \e xml.
+
+ The stream writer can automatically format the generated XML data by
+ adding line-breaks and indentation to empty sections between
+ elements, making the XML data more readable for humans and easier to
+ work with for most source code management systems. The feature can
+ be turned on with the \l autoFormatting property, and customized
+ with the \l autoFormattingIndent property.
+
+ Other functions are writeCDATA(), writeComment(),
+ writeProcessingInstruction(), and writeDTD(). Chaining of XML
+ streams is supported with writeCurrentToken().
+
+ By default, QXmlStreamWriter encodes XML in UTF-8. Different
+ encodings can be enforced using setCodec().
+
+ If an error occurs while writing to the underlying device, hasError()
+ starts returning true and subsequent writes are ignored.
+
+ The \l{QXmlStream Bookmarks Example} illustrates how to use a
+ stream writer to write an XML bookmark file (XBEL) that
+ was previously read in by a QXmlStreamReader.
+
+*/
+
+#ifndef QT_NO_XMLSTREAMWRITER
+
+class QXmlStreamWriterPrivate : public QXmlStreamPrivateTagStack {
+ QXmlStreamWriter *q_ptr;
+ Q_DECLARE_PUBLIC(QXmlStreamWriter)
+public:
+ QXmlStreamWriterPrivate(QXmlStreamWriter *q);
+ ~QXmlStreamWriterPrivate() {
+ if (deleteDevice)
+ delete device;
+#ifndef QT_NO_TEXTCODEC
+ delete encoder;
+#endif
+ }
+
+ void write(const QStringRef &);
+ void write(const QString &);
+ void writeEscaped(const QString &, bool escapeWhitespace = false);
+ void write(const char *s, int len);
+ template <int N> void write(const char (&s)[N]) { write(s, N - 1); }
+ bool finishStartElement(bool contents = true);
+ void writeStartElement(const QString &namespaceUri, const QString &name);
+ QIODevice *device;
+ QString *stringDevice;
+ uint deleteDevice :1;
+ uint inStartElement :1;
+ uint inEmptyElement :1;
+ uint lastWasStartElement :1;
+ uint wroteSomething :1;
+ uint hasIoError :1;
+ uint hasEncodingError :1;
+ uint autoFormatting :1;
+ uint isCodecASCIICompatible :1;
+ QByteArray autoFormattingIndent;
+ NamespaceDeclaration emptyNamespace;
+ int lastNamespaceDeclaration;
+
+#ifndef QT_NO_TEXTCODEC
+ QTextCodec *codec;
+ QTextEncoder *encoder;
+#endif
+ void checkIfASCIICompatibleCodec();
+
+ NamespaceDeclaration &findNamespace(const QString &namespaceUri, bool writeDeclaration = false, bool noDefault = false);
+ void writeNamespaceDeclaration(const NamespaceDeclaration &namespaceDeclaration);
+
+ int namespacePrefixCount;
+
+ void indent(int level);
+};
+
+
+QXmlStreamWriterPrivate::QXmlStreamWriterPrivate(QXmlStreamWriter *q)
+ :autoFormattingIndent(4, ' ')
+{
+ q_ptr = q;
+ device = 0;
+ stringDevice = 0;
+ deleteDevice = false;
+#ifndef QT_NO_TEXTCODEC
+ codec = QTextCodec::codecForMib(106); // utf8
+ encoder = codec->makeEncoder(QTextCodec::IgnoreHeader); // no byte order mark for utf8
+#endif
+ checkIfASCIICompatibleCodec();
+ inStartElement = inEmptyElement = false;
+ wroteSomething = false;
+ hasIoError = false;
+ hasEncodingError = false;
+ lastWasStartElement = false;
+ lastNamespaceDeclaration = 1;
+ autoFormatting = false;
+ namespacePrefixCount = 0;
+}
+
+void QXmlStreamWriterPrivate::checkIfASCIICompatibleCodec()
+{
+#ifndef QT_NO_TEXTCODEC
+ Q_ASSERT(encoder);
+ // test ASCII-compatibility using the letter 'a'
+ QChar letterA = QLatin1Char('a');
+ const QByteArray bytesA = encoder->fromUnicode(&letterA, 1);
+ const bool isCodecASCIICompatibleA = (bytesA.count() == 1) && (bytesA[0] == 0x61) ;
+ QChar letterLess = QLatin1Char('<');
+ const QByteArray bytesLess = encoder->fromUnicode(&letterLess, 1);
+ const bool isCodecASCIICompatibleLess = (bytesLess.count() == 1) && (bytesLess[0] == 0x3C) ;
+ isCodecASCIICompatible = isCodecASCIICompatibleA && isCodecASCIICompatibleLess ;
+#else
+ isCodecASCIICompatible = true;
+#endif
+}
+
+void QXmlStreamWriterPrivate::write(const QStringRef &s)
+{
+ if (device) {
+ if (hasIoError)
+ return;
+#ifdef QT_NO_TEXTCODEC
+ QByteArray bytes = s.toLatin1();
+#else
+ QByteArray bytes = encoder->fromUnicode(s.constData(), s.size());
+ if (encoder->hasFailure()) {
+ hasEncodingError = true;
+ return;
+ }
+#endif
+ if (device->write(bytes) != bytes.size())
+ hasIoError = true;
+ }
+ else if (stringDevice)
+ s.appendTo(stringDevice);
+ else
+ qWarning("QXmlStreamWriter: No device");
+}
+
+void QXmlStreamWriterPrivate::write(const QString &s)
+{
+ if (device) {
+ if (hasIoError)
+ return;
+#ifdef QT_NO_TEXTCODEC
+ QByteArray bytes = s.toLatin1();
+#else
+ QByteArray bytes = encoder->fromUnicode(s);
+ if (encoder->hasFailure()) {
+ hasEncodingError = true;
+ return;
+ }
+#endif
+ if (device->write(bytes) != bytes.size())
+ hasIoError = true;
+ }
+ else if (stringDevice)
+ stringDevice->append(s);
+ else
+ qWarning("QXmlStreamWriter: No device");
+}
+
+void QXmlStreamWriterPrivate::writeEscaped(const QString &s, bool escapeWhitespace)
+{
+ QString escaped;
+ escaped.reserve(s.size());
+ for ( int i = 0; i < s.size(); ++i ) {
+ QChar c = s.at(i);
+ switch (c.unicode()) {
+ case '<':
+ escaped.append(QLatin1String("&lt;"));
+ break;
+ case '>':
+ escaped.append(QLatin1String("&gt;"));
+ break;
+ case '&':
+ escaped.append(QLatin1String("&amp;"));
+ break;
+ case '\"':
+ escaped.append(QLatin1String("&quot;"));
+ break;
+ case '\t':
+ if (escapeWhitespace)
+ escaped.append(QLatin1String("&#9;"));
+ else
+ escaped += c;
+ break;
+ case '\n':
+ if (escapeWhitespace)
+ escaped.append(QLatin1String("&#10;"));
+ else
+ escaped += c;
+ break;
+ case '\v':
+ case '\f':
+ hasEncodingError = true;
+ break;
+ case '\r':
+ if (escapeWhitespace)
+ escaped.append(QLatin1String("&#13;"));
+ else
+ escaped += c;
+ break;
+ default:
+ if (c.unicode() > 0x1f && c.unicode() < 0xfffe)
+ escaped += c;
+ else
+ hasEncodingError = true;
+ break;
+ }
+ }
+ write(escaped);
+}
+
+// Converts from ASCII to output encoding
+void QXmlStreamWriterPrivate::write(const char *s, int len)
+{
+ if (device) {
+ if (hasIoError)
+ return;
+ if (isCodecASCIICompatible) {
+ if (device->write(s, len) != len)
+ hasIoError = true;
+ return;
+ }
+ }
+
+ write(QString::fromLatin1(s, len));
+}
+
+void QXmlStreamWriterPrivate::writeNamespaceDeclaration(const NamespaceDeclaration &namespaceDeclaration) {
+ if (namespaceDeclaration.prefix.isEmpty()) {
+ write(" xmlns=\"");
+ write(namespaceDeclaration.namespaceUri);
+ write("\"");
+ } else {
+ write(" xmlns:");
+ write(namespaceDeclaration.prefix);
+ write("=\"");
+ write(namespaceDeclaration.namespaceUri);
+ write("\"");
+ }
+}
+
+bool QXmlStreamWriterPrivate::finishStartElement(bool contents)
+{
+ bool hadSomethingWritten = wroteSomething;
+ wroteSomething = contents;
+ if (!inStartElement)
+ return hadSomethingWritten;
+
+ if (inEmptyElement) {
+ write("/>");
+ QXmlStreamWriterPrivate::Tag &tag = tagStack_pop();
+ lastNamespaceDeclaration = tag.namespaceDeclarationsSize;
+ lastWasStartElement = false;
+ } else {
+ write(">");
+ }
+ inStartElement = inEmptyElement = false;
+ lastNamespaceDeclaration = namespaceDeclarations.size();
+ return hadSomethingWritten;
+}
+
+QXmlStreamPrivateTagStack::NamespaceDeclaration &QXmlStreamWriterPrivate::findNamespace(const QString &namespaceUri, bool writeDeclaration, bool noDefault)
+{
+ for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) {
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations[j];
+ if (namespaceDeclaration.namespaceUri == namespaceUri) {
+ if (!noDefault || !namespaceDeclaration.prefix.isEmpty())
+ return namespaceDeclaration;
+ }
+ }
+ if (namespaceUri.isEmpty())
+ return emptyNamespace;
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
+ if (namespaceUri.isEmpty()) {
+ namespaceDeclaration.prefix.clear();
+ } else {
+ QString s;
+ int n = ++namespacePrefixCount;
+ forever {
+ s = QLatin1Char('n') + QString::number(n++);
+ int j = namespaceDeclarations.size() - 2;
+ while (j >= 0 && namespaceDeclarations.at(j).prefix != s)
+ --j;
+ if (j < 0)
+ break;
+ }
+ namespaceDeclaration.prefix = addToStringStorage(s);
+ }
+ namespaceDeclaration.namespaceUri = addToStringStorage(namespaceUri);
+ if (writeDeclaration)
+ writeNamespaceDeclaration(namespaceDeclaration);
+ return namespaceDeclaration;
+}
+
+
+
+void QXmlStreamWriterPrivate::indent(int level)
+{
+ write("\n");
+ for (int i = level; i > 0; --i)
+ write(autoFormattingIndent.constData(), autoFormattingIndent.length());
+}
+
+
+/*!
+ Constructs a stream writer.
+
+ \sa setDevice()
+ */
+QXmlStreamWriter::QXmlStreamWriter()
+ : d_ptr(new QXmlStreamWriterPrivate(this))
+{
+}
+
+/*!
+ Constructs a stream writer that writes into \a device;
+ */
+QXmlStreamWriter::QXmlStreamWriter(QIODevice *device)
+ : d_ptr(new QXmlStreamWriterPrivate(this))
+{
+ Q_D(QXmlStreamWriter);
+ d->device = device;
+}
+
+/*! Constructs a stream writer that writes into \a array. This is the
+ same as creating an xml writer that operates on a QBuffer device
+ which in turn operates on \a array.
+ */
+QXmlStreamWriter::QXmlStreamWriter(QByteArray *array)
+ : d_ptr(new QXmlStreamWriterPrivate(this))
+{
+ Q_D(QXmlStreamWriter);
+ d->device = new QBuffer(array);
+ d->device->open(QIODevice::WriteOnly);
+ d->deleteDevice = true;
+}
+
+
+/*! Constructs a stream writer that writes into \a string.
+ *
+ * Note that when writing to QString, QXmlStreamWriter ignores the codec set
+ * with setCodec(). See that function for more information.
+ */
+QXmlStreamWriter::QXmlStreamWriter(QString *string)
+ : d_ptr(new QXmlStreamWriterPrivate(this))
+{
+ Q_D(QXmlStreamWriter);
+ d->stringDevice = string;
+}
+
+/*!
+ Destructor.
+*/
+QXmlStreamWriter::~QXmlStreamWriter()
+{
+}
+
+
+/*!
+ Sets the current device to \a device. If you want the stream to
+ write into a QByteArray, you can create a QBuffer device.
+
+ \sa device()
+*/
+void QXmlStreamWriter::setDevice(QIODevice *device)
+{
+ Q_D(QXmlStreamWriter);
+ if (device == d->device)
+ return;
+ d->stringDevice = 0;
+ if (d->deleteDevice) {
+ delete d->device;
+ d->deleteDevice = false;
+ }
+ d->device = device;
+}
+
+/*!
+ Returns the current device associated with the QXmlStreamWriter,
+ or 0 if no device has been assigned.
+
+ \sa setDevice()
+*/
+QIODevice *QXmlStreamWriter::device() const
+{
+ Q_D(const QXmlStreamWriter);
+ return d->device;
+}
+
+
+#ifndef QT_NO_TEXTCODEC
+/*!
+ Sets the codec for this stream to \a codec. The codec is used for
+ encoding any data that is written. By default, QXmlStreamWriter
+ uses UTF-8.
+
+ The encoding information is stored in the initial xml tag which
+ gets written when you call writeStartDocument(). Call this
+ function before calling writeStartDocument().
+
+ \note When writing the XML to a QString, the codec information is ignored
+ and the XML header will not include any encoding information, since all
+ QStrings are UTF-16. If you later convert the QString to an 8-bit format,
+ you must arrange for the encoding information to be transmitted
+ out-of-band.
+
+ \sa codec()
+*/
+void QXmlStreamWriter::setCodec(QTextCodec *codec)
+{
+ Q_D(QXmlStreamWriter);
+ if (codec) {
+ d->codec = codec;
+ delete d->encoder;
+ d->encoder = codec->makeEncoder(QTextCodec::IgnoreHeader); // no byte order mark for utf8
+ d->checkIfASCIICompatibleCodec();
+ }
+}
+
+/*!
+ Sets the codec for this stream to the QTextCodec for the encoding
+ specified by \a codecName. Common values for \c codecName include
+ "ISO 8859-1", "UTF-8", and "UTF-16". If the encoding isn't
+ recognized, nothing happens.
+
+ \note When writing the XML to a QString, the codec information is ignored
+ and the XML header will not include any encoding information, since all
+ QStrings are UTF-16. If you later convert the QString to an 8-bit format,
+ you must arrange for the encoding information to be transmitted
+ out-of-band.
+
+ \sa QTextCodec::codecForName()
+*/
+void QXmlStreamWriter::setCodec(const char *codecName)
+{
+ setCodec(QTextCodec::codecForName(codecName));
+}
+
+/*!
+ Returns the codec that is currently assigned to the stream.
+
+ \sa setCodec()
+*/
+QTextCodec *QXmlStreamWriter::codec() const
+{
+ Q_D(const QXmlStreamWriter);
+ return d->codec;
+}
+#endif // QT_NO_TEXTCODEC
+
+/*!
+ \property QXmlStreamWriter::autoFormatting
+ \since 4.4
+ The auto-formatting flag of the stream writer
+
+ This property controls whether or not the stream writer
+ automatically formats the generated XML data. If enabled, the
+ writer automatically adds line-breaks and indentation to empty
+ sections between elements (ignorable whitespace). The main purpose
+ of auto-formatting is to split the data into several lines, and to
+ increase readability for a human reader. The indentation depth can
+ be controlled through the \l autoFormattingIndent property.
+
+ By default, auto-formatting is disabled.
+*/
+
+/*!
+ \since 4.4
+
+ Enables auto formatting if \a enable is \c true, otherwise
+ disables it.
+
+ The default value is \c false.
+ */
+void QXmlStreamWriter::setAutoFormatting(bool enable)
+{
+ Q_D(QXmlStreamWriter);
+ d->autoFormatting = enable;
+}
+
+/*!
+ \since 4.4
+
+ Returns \c true if auto formattting is enabled, otherwise \c false.
+ */
+bool QXmlStreamWriter::autoFormatting() const
+{
+ Q_D(const QXmlStreamWriter);
+ return d->autoFormatting;
+}
+
+/*!
+ \property QXmlStreamWriter::autoFormattingIndent
+ \since 4.4
+
+ \brief the number of spaces or tabs used for indentation when
+ auto-formatting is enabled. Positive numbers indicate spaces,
+ negative numbers tabs.
+
+ The default indentation is 4.
+
+ \sa autoFormatting
+*/
+
+
+void QXmlStreamWriter::setAutoFormattingIndent(int spacesOrTabs)
+{
+ Q_D(QXmlStreamWriter);
+ d->autoFormattingIndent = QByteArray(qAbs(spacesOrTabs), spacesOrTabs >= 0 ? ' ' : '\t');
+}
+
+int QXmlStreamWriter::autoFormattingIndent() const
+{
+ Q_D(const QXmlStreamWriter);
+ return d->autoFormattingIndent.count(' ') - d->autoFormattingIndent.count('\t');
+}
+
+/*!
+ Returns \c true if writing failed.
+
+ This can happen if the stream failed to write to the underlying
+ device or if the data to be written contained invalid characters.
+
+ The error status is never reset. Writes happening after the error
+ occurred may be ignored, even if the error condition is cleared.
+ */
+bool QXmlStreamWriter::hasError() const
+{
+ Q_D(const QXmlStreamWriter);
+ return d->hasIoError || d->hasEncodingError;
+}
+
+/*!
+ \overload
+ Writes an attribute with \a qualifiedName and \a value.
+
+
+ This function can only be called after writeStartElement() before
+ any content is written, or after writeEmptyElement().
+ */
+void QXmlStreamWriter::writeAttribute(const QString &qualifiedName, const QString &value)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(d->inStartElement);
+ Q_ASSERT(qualifiedName.count(QLatin1Char(':')) <= 1);
+ d->write(" ");
+ d->write(qualifiedName);
+ d->write("=\"");
+ d->writeEscaped(value, true);
+ d->write("\"");
+}
+
+/*! Writes an attribute with \a name and \a value, prefixed for
+ the specified \a namespaceUri. If the namespace has not been
+ declared yet, QXmlStreamWriter will generate a namespace declaration
+ for it.
+
+ This function can only be called after writeStartElement() before
+ any content is written, or after writeEmptyElement().
+ */
+void QXmlStreamWriter::writeAttribute(const QString &namespaceUri, const QString &name, const QString &value)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(d->inStartElement);
+ Q_ASSERT(!name.contains(QLatin1Char(':')));
+ QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->findNamespace(namespaceUri, true, true);
+ d->write(" ");
+ if (!namespaceDeclaration.prefix.isEmpty()) {
+ d->write(namespaceDeclaration.prefix);
+ d->write(":");
+ }
+ d->write(name);
+ d->write("=\"");
+ d->writeEscaped(value, true);
+ d->write("\"");
+}
+
+/*!
+ \overload
+
+ Writes the \a attribute.
+
+ This function can only be called after writeStartElement() before
+ any content is written, or after writeEmptyElement().
+ */
+void QXmlStreamWriter::writeAttribute(const QXmlStreamAttribute& attribute)
+{
+ if (attribute.namespaceUri().isEmpty())
+ writeAttribute(attribute.qualifiedName().toString(),
+ attribute.value().toString());
+ else
+ writeAttribute(attribute.namespaceUri().toString(),
+ attribute.name().toString(),
+ attribute.value().toString());
+}
+
+
+/*! Writes the attribute vector \a attributes. If a namespace
+ referenced in an attribute not been declared yet, QXmlStreamWriter
+ will generate a namespace declaration for it.
+
+ This function can only be called after writeStartElement() before
+ any content is written, or after writeEmptyElement().
+
+ \sa writeAttribute(), writeNamespace()
+ */
+void QXmlStreamWriter::writeAttributes(const QXmlStreamAttributes& attributes)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(d->inStartElement);
+ Q_UNUSED(d);
+ for (int i = 0; i < attributes.size(); ++i)
+ writeAttribute(attributes.at(i));
+}
+
+
+/*! Writes \a text as CDATA section. If \a text contains the
+ forbidden character sequence "]]>", it is split into different CDATA
+ sections.
+
+ This function mainly exists for completeness. Normally you should
+ not need use it, because writeCharacters() automatically escapes all
+ non-content characters.
+ */
+void QXmlStreamWriter::writeCDATA(const QString &text)
+{
+ Q_D(QXmlStreamWriter);
+ d->finishStartElement();
+ QString copy(text);
+ copy.replace(QLatin1String("]]>"), QLatin1String("]]]]><![CDATA[>"));
+ d->write("<![CDATA[");
+ d->write(copy);
+ d->write("]]>");
+}
+
+
+/*! Writes \a text. The characters "<", "&", and "\"" are escaped as entity
+ references "&lt;", "&amp;, and "&quot;". To avoid the forbidden sequence
+ "]]>", ">" is also escaped as "&gt;".
+
+ \sa writeEntityReference()
+ */
+void QXmlStreamWriter::writeCharacters(const QString &text)
+{
+ Q_D(QXmlStreamWriter);
+ d->finishStartElement();
+ d->writeEscaped(text);
+}
+
+
+/*! Writes \a text as XML comment, where \a text must not contain the
+ forbidden sequence "--" or end with "-". Note that XML does not
+ provide any way to escape "-" in a comment.
+ */
+void QXmlStreamWriter::writeComment(const QString &text)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(!text.contains(QLatin1String("--")) && !text.endsWith(QLatin1Char('-')));
+ if (!d->finishStartElement(false) && d->autoFormatting)
+ d->indent(d->tagStack.size());
+ d->write("<!--");
+ d->write(text);
+ d->write("-->");
+ d->inStartElement = d->lastWasStartElement = false;
+}
+
+
+/*! Writes a DTD section. The \a dtd represents the entire
+ doctypedecl production from the XML 1.0 specification.
+ */
+void QXmlStreamWriter::writeDTD(const QString &dtd)
+{
+ Q_D(QXmlStreamWriter);
+ d->finishStartElement();
+ if (d->autoFormatting)
+ d->write("\n");
+ d->write(dtd);
+ if (d->autoFormatting)
+ d->write("\n");
+}
+
+
+
+/*! \overload
+ Writes an empty element with qualified name \a qualifiedName.
+ Subsequent calls to writeAttribute() will add attributes to this element.
+*/
+void QXmlStreamWriter::writeEmptyElement(const QString &qualifiedName)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(qualifiedName.count(QLatin1Char(':')) <= 1);
+ d->writeStartElement(QString(), qualifiedName);
+ d->inEmptyElement = true;
+}
+
+
+/*! Writes an empty element with \a name, prefixed for the specified
+ \a namespaceUri. If the namespace has not been declared,
+ QXmlStreamWriter will generate a namespace declaration for it.
+ Subsequent calls to writeAttribute() will add attributes to this element.
+
+ \sa writeNamespace()
+ */
+void QXmlStreamWriter::writeEmptyElement(const QString &namespaceUri, const QString &name)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(!name.contains(QLatin1Char(':')));
+ d->writeStartElement(namespaceUri, name);
+ d->inEmptyElement = true;
+}
+
+
+/*!\overload
+ Writes a text element with \a qualifiedName and \a text.
+
+
+ This is a convenience function equivalent to:
+ \snippet code/src_corelib_xml_qxmlstream.cpp 1
+
+*/
+void QXmlStreamWriter::writeTextElement(const QString &qualifiedName, const QString &text)
+{
+ writeStartElement(qualifiedName);
+ writeCharacters(text);
+ writeEndElement();
+}
+
+/*! Writes a text element with \a name, prefixed for the specified \a
+ namespaceUri, and \a text. If the namespace has not been
+ declared, QXmlStreamWriter will generate a namespace declaration
+ for it.
+
+
+ This is a convenience function equivalent to:
+ \snippet code/src_corelib_xml_qxmlstream.cpp 2
+
+*/
+void QXmlStreamWriter::writeTextElement(const QString &namespaceUri, const QString &name, const QString &text)
+{
+ writeStartElement(namespaceUri, name);
+ writeCharacters(text);
+ writeEndElement();
+}
+
+
+/*!
+ Closes all remaining open start elements and writes a newline.
+
+ \sa writeStartDocument()
+ */
+void QXmlStreamWriter::writeEndDocument()
+{
+ Q_D(QXmlStreamWriter);
+ while (d->tagStack.size())
+ writeEndElement();
+ d->write("\n");
+}
+
+/*!
+ Closes the previous start element.
+
+ \sa writeStartElement()
+ */
+void QXmlStreamWriter::writeEndElement()
+{
+ Q_D(QXmlStreamWriter);
+ if (d->tagStack.isEmpty())
+ return;
+
+ // shortcut: if nothing was written, close as empty tag
+ if (d->inStartElement && !d->inEmptyElement) {
+ d->write("/>");
+ d->lastWasStartElement = d->inStartElement = false;
+ QXmlStreamWriterPrivate::Tag &tag = d->tagStack_pop();
+ d->lastNamespaceDeclaration = tag.namespaceDeclarationsSize;
+ return;
+ }
+
+ if (!d->finishStartElement(false) && !d->lastWasStartElement && d->autoFormatting)
+ d->indent(d->tagStack.size()-1);
+ if (d->tagStack.isEmpty())
+ return;
+ d->lastWasStartElement = false;
+ QXmlStreamWriterPrivate::Tag &tag = d->tagStack_pop();
+ d->lastNamespaceDeclaration = tag.namespaceDeclarationsSize;
+ d->write("</");
+ if (!tag.namespaceDeclaration.prefix.isEmpty()) {
+ d->write(tag.namespaceDeclaration.prefix);
+ d->write(":");
+ }
+ d->write(tag.name);
+ d->write(">");
+}
+
+
+
+/*!
+ Writes the entity reference \a name to the stream, as "&\a{name};".
+ */
+void QXmlStreamWriter::writeEntityReference(const QString &name)
+{
+ Q_D(QXmlStreamWriter);
+ d->finishStartElement();
+ d->write("&");
+ d->write(name);
+ d->write(";");
+}
+
+
+/*! Writes a namespace declaration for \a namespaceUri with \a
+ prefix. If \a prefix is empty, QXmlStreamWriter assigns a unique
+ prefix consisting of the letter 'n' followed by a number.
+
+ If writeStartElement() or writeEmptyElement() was called, the
+ declaration applies to the current element; otherwise it applies to
+ the next child element.
+
+ Note that the prefix \e xml is both predefined and reserved for
+ \e http://www.w3.org/XML/1998/namespace, which in turn cannot be
+ bound to any other prefix. The prefix \e xmlns and its URI
+ \e http://www.w3.org/2000/xmlns/ are used for the namespace mechanism
+ itself and thus completely forbidden in declarations.
+
+ */
+void QXmlStreamWriter::writeNamespace(const QString &namespaceUri, const QString &prefix)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(prefix != QLatin1String("xmlns"));
+ if (prefix.isEmpty()) {
+ d->findNamespace(namespaceUri, d->inStartElement);
+ } else {
+ Q_ASSERT(!((prefix == QLatin1String("xml")) ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace"))));
+ Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/2000/xmlns/"));
+ QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push();
+ namespaceDeclaration.prefix = d->addToStringStorage(prefix);
+ namespaceDeclaration.namespaceUri = d->addToStringStorage(namespaceUri);
+ if (d->inStartElement)
+ d->writeNamespaceDeclaration(namespaceDeclaration);
+ }
+}
+
+
+/*! Writes a default namespace declaration for \a namespaceUri.
+
+ If writeStartElement() or writeEmptyElement() was called, the
+ declaration applies to the current element; otherwise it applies to
+ the next child element.
+
+ Note that the namespaces \e http://www.w3.org/XML/1998/namespace
+ (bound to \e xmlns) and \e http://www.w3.org/2000/xmlns/ (bound to
+ \e xml) by definition cannot be declared as default.
+ */
+void QXmlStreamWriter::writeDefaultNamespace(const QString &namespaceUri)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/XML/1998/namespace"));
+ Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/2000/xmlns/"));
+ QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push();
+ namespaceDeclaration.prefix.clear();
+ namespaceDeclaration.namespaceUri = d->addToStringStorage(namespaceUri);
+ if (d->inStartElement)
+ d->writeNamespaceDeclaration(namespaceDeclaration);
+}
+
+
+/*!
+ Writes an XML processing instruction with \a target and \a data,
+ where \a data must not contain the sequence "?>".
+ */
+void QXmlStreamWriter::writeProcessingInstruction(const QString &target, const QString &data)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(!data.contains(QLatin1String("?>")));
+ if (!d->finishStartElement(false) && d->autoFormatting)
+ d->indent(d->tagStack.size());
+ d->write("<?");
+ d->write(target);
+ if (!data.isNull()) {
+ d->write(" ");
+ d->write(data);
+ }
+ d->write("?>");
+}
+
+
+
+/*!\overload
+
+ Writes a document start with XML version number "1.0". This also
+ writes the encoding information.
+
+ \sa writeEndDocument(), setCodec()
+ \since 4.5
+ */
+void QXmlStreamWriter::writeStartDocument()
+{
+ writeStartDocument(QLatin1String("1.0"));
+}
+
+
+/*!
+ Writes a document start with the XML version number \a version.
+
+ \sa writeEndDocument()
+ */
+void QXmlStreamWriter::writeStartDocument(const QString &version)
+{
+ Q_D(QXmlStreamWriter);
+ d->finishStartElement(false);
+ d->write("<?xml version=\"");
+ d->write(version);
+ if (d->device) { // stringDevice does not get any encoding
+ d->write("\" encoding=\"");
+#ifdef QT_NO_TEXTCODEC
+ d->write("iso-8859-1");
+#else
+ const QByteArray name = d->codec->name();
+ d->write(name.constData(), name.length());
+#endif
+ }
+ d->write("\"?>");
+}
+
+/*! Writes a document start with the XML version number \a version
+ and a standalone attribute \a standalone.
+
+ \sa writeEndDocument()
+ \since 4.5
+ */
+void QXmlStreamWriter::writeStartDocument(const QString &version, bool standalone)
+{
+ Q_D(QXmlStreamWriter);
+ d->finishStartElement(false);
+ d->write("<?xml version=\"");
+ d->write(version);
+ if (d->device) { // stringDevice does not get any encoding
+ d->write("\" encoding=\"");
+#ifdef QT_NO_TEXTCODEC
+ d->write("iso-8859-1");
+#else
+ const QByteArray name = d->codec->name();
+ d->write(name.constData(), name.length());
+#endif
+ }
+ if (standalone)
+ d->write("\" standalone=\"yes\"?>");
+ else
+ d->write("\" standalone=\"no\"?>");
+}
+
+
+/*!\overload
+
+ Writes a start element with \a qualifiedName. Subsequent calls to
+ writeAttribute() will add attributes to this element.
+
+ \sa writeEndElement(), writeEmptyElement()
+ */
+void QXmlStreamWriter::writeStartElement(const QString &qualifiedName)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(qualifiedName.count(QLatin1Char(':')) <= 1);
+ d->writeStartElement(QString(), qualifiedName);
+}
+
+
+/*! Writes a start element with \a name, prefixed for the specified
+ \a namespaceUri. If the namespace has not been declared yet,
+ QXmlStreamWriter will generate a namespace declaration for
+ it. Subsequent calls to writeAttribute() will add attributes to this
+ element.
+
+ \sa writeNamespace(), writeEndElement(), writeEmptyElement()
+ */
+void QXmlStreamWriter::writeStartElement(const QString &namespaceUri, const QString &name)
+{
+ Q_D(QXmlStreamWriter);
+ Q_ASSERT(!name.contains(QLatin1Char(':')));
+ d->writeStartElement(namespaceUri, name);
+}
+
+void QXmlStreamWriterPrivate::writeStartElement(const QString &namespaceUri, const QString &name)
+{
+ if (!finishStartElement(false) && autoFormatting)
+ indent(tagStack.size());
+
+ Tag &tag = tagStack_push();
+ tag.name = addToStringStorage(name);
+ tag.namespaceDeclaration = findNamespace(namespaceUri);
+ write("<");
+ if (!tag.namespaceDeclaration.prefix.isEmpty()) {
+ write(tag.namespaceDeclaration.prefix);
+ write(":");
+ }
+ write(tag.name);
+ inStartElement = lastWasStartElement = true;
+
+ for (int i = lastNamespaceDeclaration; i < namespaceDeclarations.size(); ++i)
+ writeNamespaceDeclaration(namespaceDeclarations[i]);
+ tag.namespaceDeclarationsSize = lastNamespaceDeclaration;
+}
+
+#ifndef QT_NO_XMLSTREAMREADER
+/*! Writes the current state of the \a reader. All possible valid
+ states are supported.
+
+ The purpose of this function is to support chained processing of XML data.
+
+ \sa QXmlStreamReader::tokenType()
+ */
+void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)
+{
+ switch (reader.tokenType()) {
+ case QXmlStreamReader::NoToken:
+ break;
+ case QXmlStreamReader::StartDocument:
+ writeStartDocument();
+ break;
+ case QXmlStreamReader::EndDocument:
+ writeEndDocument();
+ break;
+ case QXmlStreamReader::StartElement: {
+ QXmlStreamNamespaceDeclarations namespaceDeclarations = reader.namespaceDeclarations();
+ for (int i = 0; i < namespaceDeclarations.size(); ++i) {
+ const QXmlStreamNamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(i);
+ writeNamespace(namespaceDeclaration.namespaceUri().toString(),
+ namespaceDeclaration.prefix().toString());
+ }
+ writeStartElement(reader.namespaceUri().toString(), reader.name().toString());
+ writeAttributes(reader.attributes());
+ } break;
+ case QXmlStreamReader::EndElement:
+ writeEndElement();
+ break;
+ case QXmlStreamReader::Characters:
+ if (reader.isCDATA())
+ writeCDATA(reader.text().toString());
+ else
+ writeCharacters(reader.text().toString());
+ break;
+ case QXmlStreamReader::Comment:
+ writeComment(reader.text().toString());
+ break;
+ case QXmlStreamReader::DTD:
+ writeDTD(reader.text().toString());
+ break;
+ case QXmlStreamReader::EntityReference:
+ writeEntityReference(reader.name().toString());
+ break;
+ case QXmlStreamReader::ProcessingInstruction:
+ writeProcessingInstruction(reader.processingInstructionTarget().toString(),
+ reader.processingInstructionData().toString());
+ break;
+ default:
+ Q_ASSERT(reader.tokenType() != QXmlStreamReader::Invalid);
+ qWarning("QXmlStreamWriter: writeCurrentToken() with invalid state.");
+ break;
+ }
+}
+
+/*!
+ \fn bool QXmlStreamAttributes::hasAttribute(const QString &qualifiedName) const
+ \since 4.5
+
+ Returns \c true if this QXmlStreamAttributes has an attribute whose
+ qualified name is \a qualifiedName; otherwise returns \c false.
+
+ Note that this is not namespace aware. For instance, if this
+ QXmlStreamAttributes contains an attribute whose lexical name is "xlink:href"
+ this doesn't tell that an attribute named \c href in the XLink namespace is
+ present, since the \c xlink prefix can be bound to any namespace. Use the
+ overload that takes a namespace URI and a local name as parameter, for
+ namespace aware code.
+*/
+
+/*!
+ \fn bool QXmlStreamAttributes::hasAttribute(QLatin1String qualifiedName) const
+ \overload
+ \since 4.5
+*/
+
+/*!
+ \fn bool QXmlStreamAttributes::hasAttribute(const QString &namespaceUri,
+ const QString &name) const
+ \overload
+ \since 4.5
+
+ Returns \c true if this QXmlStreamAttributes has an attribute whose
+ namespace URI and name correspond to \a namespaceUri and \a name;
+ otherwise returns \c false.
+*/
+
+#endif // QT_NO_XMLSTREAMREADER
+#endif // QT_NO_XMLSTREAMWRITER
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_XMLSTREAM
diff --git a/src/corelib/xml/qxmlstream.g b/src/corelib/serialization/qxmlstream.g
index fd69a6e4af..fd69a6e4af 100644
--- a/src/corelib/xml/qxmlstream.g
+++ b/src/corelib/serialization/qxmlstream.g
diff --git a/src/corelib/serialization/qxmlstream.h b/src/corelib/serialization/qxmlstream.h
new file mode 100644
index 0000000000..2350d12dd6
--- /dev/null
+++ b/src/corelib/serialization/qxmlstream.h
@@ -0,0 +1,540 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXMLSTREAM_H
+#define QXMLSTREAM_H
+
+#include <QtCore/qiodevice.h>
+
+#ifndef QT_NO_XMLSTREAM
+
+#include <QtCore/qstring.h>
+#include <QtCore/qvector.h>
+#include <QtCore/qscopedpointer.h>
+
+QT_BEGIN_NAMESPACE
+
+
+class Q_CORE_EXPORT QXmlStreamStringRef {
+ QString m_string;
+ int m_position, m_size;
+public:
+ inline QXmlStreamStringRef():m_position(0), m_size(0){}
+ inline QXmlStreamStringRef(const QStringRef &aString)
+ :m_string(aString.string()?*aString.string():QString()), m_position(aString.position()), m_size(aString.size()){}
+ QXmlStreamStringRef(const QString &aString) : m_string(aString), m_position(0), m_size(m_string.size()) {}
+#ifdef Q_COMPILER_RVALUE_REFS
+ QXmlStreamStringRef(QString &&aString) Q_DECL_NOTHROW : m_string(std::move(aString)), m_position(0), m_size(m_string.size()) {}
+#endif
+
+#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
+ QXmlStreamStringRef(const QXmlStreamStringRef &other) // = default
+ : m_string(other.m_string), m_position(other.m_position), m_size(other.m_size) {}
+#ifdef Q_COMPILER_RVALUE_REFS
+ QXmlStreamStringRef(QXmlStreamStringRef &&other) Q_DECL_NOTHROW // = default
+ : m_string(std::move(other.m_string)), m_position(other.m_position), m_size(other.m_size) {}
+ QXmlStreamStringRef &operator=(QXmlStreamStringRef &&other) Q_DECL_NOTHROW // = default
+ { swap(other); return *this; }
+#endif
+ QXmlStreamStringRef &operator=(const QXmlStreamStringRef &other) // = default
+ { m_string = other.m_string; m_position = other.m_position; m_size = other.m_size; return *this; }
+ inline ~QXmlStreamStringRef() {} // ### this prevents (or deprecates) all the move/copy special member functions,
+ // ### that's why we need to provide them by hand above. We can't remove it in
+ // ### Qt 5, since that would change the way its passed to functions. In Qt 6, remove all.
+#endif // Qt < 6.0
+
+ void swap(QXmlStreamStringRef &other) Q_DECL_NOTHROW
+ {
+ qSwap(m_string, other.m_string);
+ qSwap(m_position, other.m_position);
+ qSwap(m_size, other.m_size);
+ }
+
+ inline void clear() { m_string.clear(); m_position = m_size = 0; }
+ inline operator QStringRef() const { return QStringRef(&m_string, m_position, m_size); }
+ inline const QString *string() const { return &m_string; }
+ inline int position() const { return m_position; }
+ inline int size() const { return m_size; }
+};
+Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QXmlStreamStringRef)
+
+
+class QXmlStreamReaderPrivate;
+class QXmlStreamAttributes;
+class Q_CORE_EXPORT QXmlStreamAttribute {
+ QXmlStreamStringRef m_name, m_namespaceUri, m_qualifiedName, m_value;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ void *reserved;
+#endif
+ uint m_isDefault : 1;
+ friend class QXmlStreamReaderPrivate;
+ friend class QXmlStreamAttributes;
+public:
+ QXmlStreamAttribute();
+ QXmlStreamAttribute(const QString &qualifiedName, const QString &value);
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value);
+ QXmlStreamAttribute(const QXmlStreamAttribute &);
+#ifdef Q_COMPILER_RVALUE_REFS
+ QXmlStreamAttribute(QXmlStreamAttribute &&other) Q_DECL_NOTHROW // = default;
+ : m_name(std::move(other.m_name)),
+ m_namespaceUri(std::move(other.m_namespaceUri)),
+ m_qualifiedName(std::move(other.m_qualifiedName)),
+ m_value(std::move(other.m_value)),
+ reserved(other.reserved),
+ m_isDefault(other.m_isDefault)
+ {
+ other.reserved = nullptr;
+ }
+ QXmlStreamAttribute &operator=(QXmlStreamAttribute &&other) Q_DECL_NOTHROW // = default;
+ {
+ m_name = std::move(other.m_name);
+ m_namespaceUri = std::move(other.m_namespaceUri);
+ m_qualifiedName = std::move(other.m_qualifiedName);
+ m_value = std::move(other.m_value);
+ qSwap(reserved, other.reserved);
+ m_isDefault = other.m_isDefault;
+ return *this;
+ }
+#endif
+ QXmlStreamAttribute& operator=(const QXmlStreamAttribute &);
+ ~QXmlStreamAttribute();
+#endif // < Qt 6
+
+ inline QStringRef namespaceUri() const { return m_namespaceUri; }
+ inline QStringRef name() const { return m_name; }
+ inline QStringRef qualifiedName() const { return m_qualifiedName; }
+ inline QStringRef prefix() const {
+ return QStringRef(m_qualifiedName.string(),
+ m_qualifiedName.position(),
+ qMax(0, m_qualifiedName.size() - m_name.size() - 1));
+ }
+ inline QStringRef value() const { return m_value; }
+ inline bool isDefault() const { return m_isDefault; }
+ inline bool operator==(const QXmlStreamAttribute &other) const {
+ return (value() == other.value()
+ && (namespaceUri().isNull() ? (qualifiedName() == other.qualifiedName())
+ : (namespaceUri() == other.namespaceUri() && name() == other.name())));
+ }
+ inline bool operator!=(const QXmlStreamAttribute &other) const
+ { return !operator==(other); }
+};
+
+Q_DECLARE_TYPEINFO(QXmlStreamAttribute, Q_MOVABLE_TYPE);
+
+class Q_CORE_EXPORT QXmlStreamAttributes : public QVector<QXmlStreamAttribute>
+{
+public:
+ inline QXmlStreamAttributes() {}
+ QStringRef value(const QString &namespaceUri, const QString &name) const;
+ QStringRef value(const QString &namespaceUri, QLatin1String name) const;
+ QStringRef value(QLatin1String namespaceUri, QLatin1String name) const;
+ QStringRef value(const QString &qualifiedName) const;
+ QStringRef value(QLatin1String qualifiedName) const;
+ void append(const QString &namespaceUri, const QString &name, const QString &value);
+ void append(const QString &qualifiedName, const QString &value);
+
+ inline bool hasAttribute(const QString &qualifiedName) const
+ {
+ return !value(qualifiedName).isNull();
+ }
+
+ inline bool hasAttribute(QLatin1String qualifiedName) const
+ {
+ return !value(qualifiedName).isNull();
+ }
+
+ inline bool hasAttribute(const QString &namespaceUri, const QString &name) const
+ {
+ return !value(namespaceUri, name).isNull();
+ }
+
+ using QVector<QXmlStreamAttribute>::append;
+};
+
+class Q_CORE_EXPORT QXmlStreamNamespaceDeclaration {
+ QXmlStreamStringRef m_prefix, m_namespaceUri;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ void *reserved;
+#endif
+
+ friend class QXmlStreamReaderPrivate;
+public:
+ QXmlStreamNamespaceDeclaration();
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QXmlStreamNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &);
+ QXmlStreamNamespaceDeclaration(QXmlStreamNamespaceDeclaration &&other) Q_DECL_NOTHROW // = default
+ : m_prefix(std::move(other.m_prefix)),
+ m_namespaceUri(std::move(other.m_namespaceUri)),
+ reserved(other.reserved)
+ {
+ other.reserved = nullptr;
+ }
+ QXmlStreamNamespaceDeclaration &operator=(QXmlStreamNamespaceDeclaration &&other) Q_DECL_NOTHROW // = default
+ {
+ m_prefix = std::move(other.m_prefix);
+ m_namespaceUri = std::move(other.m_namespaceUri);
+ qSwap(reserved, other.reserved);
+ return *this;
+ }
+ QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri);
+ ~QXmlStreamNamespaceDeclaration();
+ QXmlStreamNamespaceDeclaration& operator=(const QXmlStreamNamespaceDeclaration &);
+#endif // < Qt 6
+
+ inline QStringRef prefix() const { return m_prefix; }
+ inline QStringRef namespaceUri() const { return m_namespaceUri; }
+ inline bool operator==(const QXmlStreamNamespaceDeclaration &other) const {
+ return (prefix() == other.prefix() && namespaceUri() == other.namespaceUri());
+ }
+ inline bool operator!=(const QXmlStreamNamespaceDeclaration &other) const
+ { return !operator==(other); }
+};
+
+Q_DECLARE_TYPEINFO(QXmlStreamNamespaceDeclaration, Q_MOVABLE_TYPE);
+typedef QVector<QXmlStreamNamespaceDeclaration> QXmlStreamNamespaceDeclarations;
+
+class Q_CORE_EXPORT QXmlStreamNotationDeclaration {
+ QXmlStreamStringRef m_name, m_systemId, m_publicId;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ void *reserved;
+#endif
+
+ friend class QXmlStreamReaderPrivate;
+public:
+ QXmlStreamNotationDeclaration();
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ ~QXmlStreamNotationDeclaration();
+ QXmlStreamNotationDeclaration(const QXmlStreamNotationDeclaration &);
+ QXmlStreamNotationDeclaration(QXmlStreamNotationDeclaration &&other) Q_DECL_NOTHROW // = default
+ : m_name(std::move(other.m_name)),
+ m_systemId(std::move(other.m_systemId)),
+ m_publicId(std::move(other.m_publicId)),
+ reserved(other.reserved)
+ {
+ other.reserved = nullptr;
+ }
+ QXmlStreamNotationDeclaration& operator=(const QXmlStreamNotationDeclaration &);
+ QXmlStreamNotationDeclaration &operator=(QXmlStreamNotationDeclaration &&other) Q_DECL_NOTHROW // = default
+ {
+ m_name = std::move(other.m_name);
+ m_systemId = std::move(other.m_systemId);
+ m_publicId = std::move(other.m_publicId);
+ qSwap(reserved, other.reserved);
+ return *this;
+ }
+#endif // < Qt 6
+
+ inline QStringRef name() const { return m_name; }
+ inline QStringRef systemId() const { return m_systemId; }
+ inline QStringRef publicId() const { return m_publicId; }
+ inline bool operator==(const QXmlStreamNotationDeclaration &other) const {
+ return (name() == other.name() && systemId() == other.systemId()
+ && publicId() == other.publicId());
+ }
+ inline bool operator!=(const QXmlStreamNotationDeclaration &other) const
+ { return !operator==(other); }
+};
+
+Q_DECLARE_TYPEINFO(QXmlStreamNotationDeclaration, Q_MOVABLE_TYPE);
+typedef QVector<QXmlStreamNotationDeclaration> QXmlStreamNotationDeclarations;
+
+class Q_CORE_EXPORT QXmlStreamEntityDeclaration {
+ QXmlStreamStringRef m_name, m_notationName, m_systemId, m_publicId, m_value;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ void *reserved;
+#endif
+
+ friend class QXmlStreamReaderPrivate;
+public:
+ QXmlStreamEntityDeclaration();
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ ~QXmlStreamEntityDeclaration();
+ QXmlStreamEntityDeclaration(const QXmlStreamEntityDeclaration &);
+ QXmlStreamEntityDeclaration(QXmlStreamEntityDeclaration &&other) Q_DECL_NOTHROW // = default
+ : m_name(std::move(other.m_name)),
+ m_notationName(std::move(other.m_notationName)),
+ m_systemId(std::move(other.m_systemId)),
+ m_publicId(std::move(other.m_publicId)),
+ m_value(std::move(other.m_value)),
+ reserved(other.reserved)
+ {
+ other.reserved = nullptr;
+ }
+ QXmlStreamEntityDeclaration& operator=(const QXmlStreamEntityDeclaration &);
+ QXmlStreamEntityDeclaration &operator=(QXmlStreamEntityDeclaration &&other) Q_DECL_NOTHROW // = default
+ {
+ m_name = std::move(other.m_name);
+ m_notationName = std::move(other.m_notationName);
+ m_systemId = std::move(other.m_systemId);
+ m_publicId = std::move(other.m_publicId);
+ m_value = std::move(other.m_value);
+ qSwap(reserved, other.reserved);
+ return *this;
+ }
+#endif // < Qt 6
+
+ inline QStringRef name() const { return m_name; }
+ inline QStringRef notationName() const { return m_notationName; }
+ inline QStringRef systemId() const { return m_systemId; }
+ inline QStringRef publicId() const { return m_publicId; }
+ inline QStringRef value() const { return m_value; }
+ inline bool operator==(const QXmlStreamEntityDeclaration &other) const {
+ return (name() == other.name()
+ && notationName() == other.notationName()
+ && systemId() == other.systemId()
+ && publicId() == other.publicId()
+ && value() == other.value());
+ }
+ inline bool operator!=(const QXmlStreamEntityDeclaration &other) const
+ { return !operator==(other); }
+};
+
+Q_DECLARE_TYPEINFO(QXmlStreamEntityDeclaration, Q_MOVABLE_TYPE);
+typedef QVector<QXmlStreamEntityDeclaration> QXmlStreamEntityDeclarations;
+
+
+class Q_CORE_EXPORT QXmlStreamEntityResolver
+{
+public:
+ virtual ~QXmlStreamEntityResolver();
+ virtual QString resolveEntity(const QString& publicId, const QString& systemId);
+ virtual QString resolveUndeclaredEntity(const QString &name);
+};
+
+#ifndef QT_NO_XMLSTREAMREADER
+class Q_CORE_EXPORT QXmlStreamReader {
+ QDOC_PROPERTY(bool namespaceProcessing READ namespaceProcessing WRITE setNamespaceProcessing)
+public:
+ enum TokenType {
+ NoToken = 0,
+ Invalid,
+ StartDocument,
+ EndDocument,
+ StartElement,
+ EndElement,
+ Characters,
+ Comment,
+ DTD,
+ EntityReference,
+ ProcessingInstruction
+ };
+
+
+ QXmlStreamReader();
+ explicit QXmlStreamReader(QIODevice *device);
+ explicit QXmlStreamReader(const QByteArray &data);
+ explicit QXmlStreamReader(const QString &data);
+ explicit QXmlStreamReader(const char * data);
+ ~QXmlStreamReader();
+
+ void setDevice(QIODevice *device);
+ QIODevice *device() const;
+ void addData(const QByteArray &data);
+ void addData(const QString &data);
+ void addData(const char *data);
+ void clear();
+
+
+ bool atEnd() const;
+ TokenType readNext();
+
+ bool readNextStartElement();
+ void skipCurrentElement();
+
+ TokenType tokenType() const;
+ QString tokenString() const;
+
+ void setNamespaceProcessing(bool);
+ bool namespaceProcessing() const;
+
+ inline bool isStartDocument() const { return tokenType() == StartDocument; }
+ inline bool isEndDocument() const { return tokenType() == EndDocument; }
+ inline bool isStartElement() const { return tokenType() == StartElement; }
+ inline bool isEndElement() const { return tokenType() == EndElement; }
+ inline bool isCharacters() const { return tokenType() == Characters; }
+ bool isWhitespace() const;
+ bool isCDATA() const;
+ inline bool isComment() const { return tokenType() == Comment; }
+ inline bool isDTD() const { return tokenType() == DTD; }
+ inline bool isEntityReference() const { return tokenType() == EntityReference; }
+ inline bool isProcessingInstruction() const { return tokenType() == ProcessingInstruction; }
+
+ bool isStandaloneDocument() const;
+ QStringRef documentVersion() const;
+ QStringRef documentEncoding() const;
+
+ qint64 lineNumber() const;
+ qint64 columnNumber() const;
+ qint64 characterOffset() const;
+
+ QXmlStreamAttributes attributes() const;
+
+ enum ReadElementTextBehaviour {
+ ErrorOnUnexpectedElement,
+ IncludeChildElements,
+ SkipChildElements
+ };
+ QString readElementText(ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement);
+
+ QStringRef name() const;
+ QStringRef namespaceUri() const;
+ QStringRef qualifiedName() const;
+ QStringRef prefix() const;
+
+ QStringRef processingInstructionTarget() const;
+ QStringRef processingInstructionData() const;
+
+ QStringRef text() const;
+
+ QXmlStreamNamespaceDeclarations namespaceDeclarations() const;
+ void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaraction);
+ void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclaractions);
+ QXmlStreamNotationDeclarations notationDeclarations() const;
+ QXmlStreamEntityDeclarations entityDeclarations() const;
+ QStringRef dtdName() const;
+ QStringRef dtdPublicId() const;
+ QStringRef dtdSystemId() const;
+
+
+ enum Error {
+ NoError,
+ UnexpectedElementError,
+ CustomError,
+ NotWellFormedError,
+ PrematureEndOfDocumentError
+ };
+ void raiseError(const QString& message = QString());
+ QString errorString() const;
+ Error error() const;
+
+ inline bool hasError() const
+ {
+ return error() != NoError;
+ }
+
+ void setEntityResolver(QXmlStreamEntityResolver *resolver);
+ QXmlStreamEntityResolver *entityResolver() const;
+
+private:
+ Q_DISABLE_COPY(QXmlStreamReader)
+ Q_DECLARE_PRIVATE(QXmlStreamReader)
+ QScopedPointer<QXmlStreamReaderPrivate> d_ptr;
+
+};
+#endif // QT_NO_XMLSTREAMREADER
+
+#ifndef QT_NO_XMLSTREAMWRITER
+
+class QXmlStreamWriterPrivate;
+
+class Q_CORE_EXPORT QXmlStreamWriter
+{
+ QDOC_PROPERTY(bool autoFormatting READ autoFormatting WRITE setAutoFormatting)
+ QDOC_PROPERTY(int autoFormattingIndent READ autoFormattingIndent WRITE setAutoFormattingIndent)
+public:
+ QXmlStreamWriter();
+ explicit QXmlStreamWriter(QIODevice *device);
+ explicit QXmlStreamWriter(QByteArray *array);
+ explicit QXmlStreamWriter(QString *string);
+ ~QXmlStreamWriter();
+
+ void setDevice(QIODevice *device);
+ QIODevice *device() const;
+
+#ifndef QT_NO_TEXTCODEC
+ void setCodec(QTextCodec *codec);
+ void setCodec(const char *codecName);
+ QTextCodec *codec() const;
+#endif
+
+ void setAutoFormatting(bool);
+ bool autoFormatting() const;
+
+ void setAutoFormattingIndent(int spacesOrTabs);
+ int autoFormattingIndent() const;
+
+ void writeAttribute(const QString &qualifiedName, const QString &value);
+ void writeAttribute(const QString &namespaceUri, const QString &name, const QString &value);
+ void writeAttribute(const QXmlStreamAttribute& attribute);
+ void writeAttributes(const QXmlStreamAttributes& attributes);
+
+ void writeCDATA(const QString &text);
+ void writeCharacters(const QString &text);
+ void writeComment(const QString &text);
+
+ void writeDTD(const QString &dtd);
+
+ void writeEmptyElement(const QString &qualifiedName);
+ void writeEmptyElement(const QString &namespaceUri, const QString &name);
+
+ void writeTextElement(const QString &qualifiedName, const QString &text);
+ void writeTextElement(const QString &namespaceUri, const QString &name, const QString &text);
+
+ void writeEndDocument();
+ void writeEndElement();
+
+ void writeEntityReference(const QString &name);
+ void writeNamespace(const QString &namespaceUri, const QString &prefix = QString());
+ void writeDefaultNamespace(const QString &namespaceUri);
+ void writeProcessingInstruction(const QString &target, const QString &data = QString());
+
+ void writeStartDocument();
+ void writeStartDocument(const QString &version);
+ void writeStartDocument(const QString &version, bool standalone);
+ void writeStartElement(const QString &qualifiedName);
+ void writeStartElement(const QString &namespaceUri, const QString &name);
+
+#ifndef QT_NO_XMLSTREAMREADER
+ void writeCurrentToken(const QXmlStreamReader &reader);
+#endif
+
+ bool hasError() const;
+
+private:
+ Q_DISABLE_COPY(QXmlStreamWriter)
+ Q_DECLARE_PRIVATE(QXmlStreamWriter)
+ QScopedPointer<QXmlStreamWriterPrivate> d_ptr;
+};
+#endif // QT_NO_XMLSTREAMWRITER
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_XMLSTREAM
+#endif // QXMLSTREAM_H
diff --git a/src/corelib/serialization/qxmlstream_p.h b/src/corelib/serialization/qxmlstream_p.h
new file mode 100644
index 0000000000..5645d812eb
--- /dev/null
+++ b/src/corelib/serialization/qxmlstream_p.h
@@ -0,0 +1,1972 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+
+// This file was generated by qlalr - DO NOT EDIT!
+#ifndef QXMLSTREAM_P_H
+#define QXMLSTREAM_P_H
+
+#if defined(ERROR)
+# undef ERROR
+#endif
+
+class QXmlStreamReader_Table
+{
+public:
+ enum VariousConstants {
+ EOF_SYMBOL = 0,
+ AMPERSAND = 5,
+ ANY = 41,
+ ATTLIST = 31,
+ BANG = 25,
+ CDATA = 47,
+ CDATA_START = 28,
+ COLON = 17,
+ COMMA = 19,
+ DASH = 20,
+ DBLQUOTE = 8,
+ DIGIT = 27,
+ DOCTYPE = 29,
+ DOT = 23,
+ ELEMENT = 30,
+ EMPTY = 40,
+ ENTITIES = 51,
+ ENTITY = 32,
+ ENTITY_DONE = 45,
+ EQ = 14,
+ ERROR = 43,
+ FIXED = 39,
+ HASH = 6,
+ ID = 48,
+ IDREF = 49,
+ IDREFS = 50,
+ IMPLIED = 38,
+ LANGLE = 3,
+ LBRACK = 9,
+ LETTER = 26,
+ LPAREN = 11,
+ NDATA = 36,
+ NMTOKEN = 52,
+ NMTOKENS = 53,
+ NOTATION = 33,
+ NOTOKEN = 1,
+ PARSE_ENTITY = 44,
+ PCDATA = 42,
+ PERCENT = 15,
+ PIPE = 13,
+ PLUS = 21,
+ PUBLIC = 35,
+ QUESTIONMARK = 24,
+ QUOTE = 7,
+ RANGLE = 4,
+ RBRACK = 10,
+ REQUIRED = 37,
+ RPAREN = 12,
+ SEMICOLON = 18,
+ SHIFT_THERE = 56,
+ SLASH = 16,
+ SPACE = 2,
+ STAR = 22,
+ SYSTEM = 34,
+ UNRESOLVED_ENTITY = 46,
+ VERSION = 55,
+ XML = 54,
+
+ ACCEPT_STATE = 416,
+ RULE_COUNT = 270,
+ STATE_COUNT = 427,
+ TERMINAL_COUNT = 57,
+ NON_TERMINAL_COUNT = 84,
+
+ GOTO_INDEX_OFFSET = 427,
+ GOTO_INFO_OFFSET = 1017,
+ GOTO_CHECK_OFFSET = 1017
+ };
+
+ static const char *const spell [];
+ static const short lhs [];
+ static const short rhs [];
+ static const short goto_default [];
+ static const short action_default [];
+ static const short action_index [];
+ static const short action_info [];
+ static const short action_check [];
+
+ static inline int nt_action (int state, int nt)
+ {
+ const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt;
+ if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt)
+ return goto_default [nt];
+
+ return action_info [GOTO_INFO_OFFSET + yyn];
+ }
+
+ static inline int t_action (int state, int token)
+ {
+ const int yyn = action_index [state] + token;
+
+ if (yyn < 0 || action_check [yyn] != token)
+ return - action_default [state];
+
+ return action_info [yyn];
+ }
+};
+
+
+const char *const QXmlStreamReader_Table::spell [] = {
+ "end of file", 0, " ", "<", ">", "&", "#", "\'", "\"", "[",
+ "]", "(", ")", "|", "=", "%", "/", ":", ";", ",",
+ "-", "+", "*", ".", "?", "!", "[a-zA-Z]", "[0-9]", "[CDATA[", "DOCTYPE",
+ "ELEMENT", "ATTLIST", "ENTITY", "NOTATION", "SYSTEM", "PUBLIC", "NDATA", "REQUIRED", "IMPLIED", "FIXED",
+ "EMPTY", "ANY", "PCDATA", 0, 0, 0, 0, "CDATA", "ID", "IDREF",
+ "IDREFS", "ENTITIES", "NMTOKEN", "NMTOKENS", "<?xml", "version", 0};
+
+const short QXmlStreamReader_Table::lhs [] = {
+ 57, 57, 59, 59, 59, 59, 59, 59, 59, 59,
+ 67, 68, 64, 72, 72, 72, 75, 66, 66, 66,
+ 66, 79, 78, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 87, 83, 88,
+ 88, 88, 88, 91, 92, 93, 93, 93, 93, 94,
+ 94, 96, 96, 96, 97, 97, 98, 98, 99, 99,
+ 100, 100, 89, 89, 95, 90, 101, 101, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 104, 105,
+ 105, 105, 105, 107, 108, 109, 109, 84, 84, 110,
+ 110, 112, 112, 85, 85, 85, 65, 65, 76, 114,
+ 63, 115, 116, 86, 86, 86, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 118,
+ 118, 119, 119, 119, 119, 119, 119, 119, 119, 122,
+ 70, 70, 70, 70, 123, 124, 123, 124, 123, 124,
+ 123, 124, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 125, 73, 113, 113, 113, 113,
+ 127, 128, 127, 128, 127, 128, 127, 128, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 106, 106, 106, 106, 131, 132, 131,
+ 132, 131, 131, 132, 132, 133, 133, 133, 133, 135,
+ 71, 71, 71, 136, 136, 137, 62, 60, 61, 138,
+ 121, 82, 130, 134, 120, 139, 139, 139, 139, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 74,
+ 69, 69, 77, 111, 102, 102, 102, 102, 102, 140};
+
+const short QXmlStreamReader_Table::rhs [] = {
+ 2, 1, 4, 2, 2, 2, 2, 2, 2, 0,
+ 1, 1, 9, 2, 4, 0, 4, 4, 6, 6,
+ 4, 1, 3, 1, 1, 1, 2, 2, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 4, 4, 1,
+ 1, 1, 1, 1, 2, 1, 1, 1, 0, 2,
+ 2, 2, 6, 6, 1, 5, 1, 5, 3, 5,
+ 0, 1, 6, 8, 4, 2, 1, 5, 1, 1,
+ 1, 1, 1, 1, 1, 1, 6, 7, 1, 2,
+ 2, 1, 4, 3, 3, 1, 2, 5, 6, 4,
+ 6, 3, 5, 5, 3, 4, 4, 5, 2, 3,
+ 2, 2, 4, 5, 5, 7, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 2, 2, 3, 3, 2, 2, 2, 2, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 3, 3,
+ 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 3, 3, 2, 2, 2,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+ 0, 1, 3, 1, 3, 2, 4, 3, 5, 1,
+ 3, 3, 3, 3, 4, 1, 1, 2, 2, 2,
+ 4, 2, 2, 2, 2, 2, 2, 2, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2};
+
+const short QXmlStreamReader_Table::action_default [] = {
+ 10, 259, 0, 2, 1, 0, 125, 117, 119, 120,
+ 127, 129, 123, 11, 114, 108, 0, 109, 128, 111,
+ 115, 113, 121, 124, 126, 107, 110, 112, 118, 116,
+ 131, 122, 240, 12, 254, 136, 250, 253, 0, 130,
+ 140, 257, 16, 252, 138, 137, 0, 256, 139, 259,
+ 231, 258, 255, 0, 0, 264, 0, 247, 246, 0,
+ 249, 248, 245, 241, 99, 263, 0, 236, 0, 0,
+ 260, 97, 98, 101, 0, 132, 134, 133, 135, 0,
+ 0, 261, 0, 0, 176, 0, 173, 165, 167, 168,
+ 142, 154, 171, 162, 156, 157, 153, 159, 163, 161,
+ 169, 172, 152, 155, 158, 160, 166, 164, 174, 170,
+ 150, 175, 0, 144, 148, 146, 151, 141, 149, 0,
+ 147, 143, 145, 0, 15, 14, 262, 0, 22, 21,
+ 261, 30, 0, 20, 0, 0, 32, 37, 31, 0,
+ 33, 261, 0, 34, 0, 24, 0, 35, 0, 26,
+ 36, 25, 0, 242, 41, 40, 261, 43, 49, 261,
+ 42, 0, 44, 261, 49, 261, 0, 261, 0, 49,
+ 0, 48, 46, 47, 51, 52, 261, 261, 0, 57,
+ 261, 54, 261, 0, 58, 0, 55, 261, 53, 261,
+ 0, 56, 65, 0, 261, 61, 261, 0, 59, 62,
+ 63, 0, 261, 0, 0, 60, 64, 45, 50, 66,
+ 0, 39, 0, 0, 261, 0, 94, 95, 0, 0,
+ 0, 0, 261, 0, 210, 201, 203, 205, 178, 190,
+ 208, 199, 193, 191, 194, 189, 196, 198, 206, 209,
+ 188, 192, 195, 197, 202, 200, 204, 207, 211, 213,
+ 212, 186, 0, 0, 243, 180, 184, 182, 0, 0,
+ 93, 187, 177, 185, 0, 183, 179, 181, 92, 0,
+ 96, 0, 0, 0, 0, 0, 261, 86, 261, 0,
+ 262, 0, 87, 0, 89, 69, 74, 73, 70, 71,
+ 72, 261, 75, 76, 0, 0, 0, 269, 268, 266,
+ 267, 265, 67, 261, 0, 261, 0, 0, 68, 77,
+ 261, 0, 261, 0, 0, 78, 0, 79, 0, 82,
+ 85, 0, 0, 215, 225, 224, 0, 227, 229, 228,
+ 226, 0, 244, 217, 221, 219, 223, 214, 222, 0,
+ 220, 216, 218, 0, 81, 80, 0, 83, 0, 84,
+ 88, 100, 0, 38, 0, 0, 0, 0, 91, 90,
+ 0, 103, 23, 27, 29, 28, 0, 0, 261, 262,
+ 0, 261, 0, 106, 105, 261, 0, 104, 102, 0,
+ 0, 18, 261, 17, 0, 19, 0, 0, 251, 0,
+ 261, 0, 239, 0, 232, 238, 0, 237, 234, 261,
+ 261, 262, 233, 235, 0, 261, 0, 230, 261, 0,
+ 261, 0, 231, 0, 0, 13, 270, 9, 5, 8,
+ 4, 0, 7, 259, 6, 0, 3};
+
+const short QXmlStreamReader_Table::goto_default [] = {
+ 2, 4, 3, 49, 388, 43, 37, 52, 47, 41,
+ 249, 53, 127, 84, 393, 81, 85, 126, 42, 46,
+ 169, 130, 131, 146, 145, 149, 138, 136, 140, 147,
+ 139, 159, 160, 157, 168, 167, 209, 165, 164, 166,
+ 187, 180, 196, 200, 303, 302, 295, 321, 320, 319,
+ 279, 277, 278, 142, 56, 141, 222, 38, 34, 148,
+ 39, 48, 40, 248, 45, 36, 119, 112, 330, 111,
+ 264, 252, 251, 250, 339, 326, 325, 329, 398, 399,
+ 50, 51, 59, 0};
+
+const short QXmlStreamReader_Table::action_index [] = {
+ -21, -57, 33, 119, 960, 70, -57, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, 105, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, -57, -57, 40, -57,
+ 795, -57, 47, -57, -57, -57, 107, -57, -57, -57,
+ 84, -57, -57, -38, 80, -57, 12, -57, -57, 97,
+ -57, -57, -57, -57, -57, -57, 13, -57, 56, 34,
+ -57, -57, -57, -57, 51, -57, -57, -57, -57, 53,
+ 57, 84, 300, 255, -57, 84, -57, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+ -57, -57, 355, -57, -57, -57, -57, -57, -57, 326,
+ -57, -57, -57, 48, -57, -57, -57, 50, -57, -57,
+ 84, 155, 32, -57, 38, 22, -57, -57, -57, 115,
+ -57, 35, 156, -57, 173, -57, 245, -57, 44, -57,
+ -57, -57, 16, -57, -57, -57, 29, -57, 116, 29,
+ -57, 133, -57, 29, 129, 84, 15, 29, -22, 121,
+ 74, -57, -57, -57, -57, 82, 29, 29, 88, -57,
+ 29, 7, 29, 86, -57, 83, -57, 27, 19, 26,
+ 94, -57, -57, 106, 29, 3, 29, -8, -57, -57,
+ -57, 104, 29, -6, -7, -57, -57, -57, -57, -57,
+ 17, -57, -2, 11, 29, 18, -57, -57, 850, 65,
+ 465, 67, 84, 135, -57, -57, -57, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+ -57, -57, -57, -57, -57, -57, -57, -57, -57, -57,
+ -57, -57, 630, 24, -57, -57, -57, -57, 84, 76,
+ -57, -57, -57, -57, 740, -57, -57, -57, -57, 39,
+ -57, 23, 21, 14, 78, 22, 84, -57, 84, 184,
+ 20, 31, -57, 41, -57, -57, -57, -57, -57, -57,
+ -57, 84, -57, -57, 36, 126, 162, -57, -57, -57,
+ -57, -57, -57, 29, 79, 29, 29, 160, -57, -57,
+ 29, 145, 29, 75, 29, -57, 575, -57, 410, -57,
+ -57, 110, 64, -57, -57, -57, 685, -57, -57, -57,
+ -57, -17, -57, -57, -57, -57, -57, -57, -57, 520,
+ -57, -57, -57, 29, -57, -57, 61, -57, 29, -57,
+ -57, -57, 29, -57, 29, 29, -15, 29, -57, -57,
+ 29, -57, -57, -57, -57, -57, 95, 43, 29, 45,
+ 9, 29, 10, -57, -57, 29, 2, -57, -57, -24,
+ 190, -57, 29, -57, 1, -57, 905, 150, -57, -26,
+ 29, 0, -57, 109, -26, -57, 8, -57, -57, 29,
+ 29, -19, -57, -57, -11, 29, 59, -57, 29, -5,
+ 29, 103, 29, -16, 6, -57, -57, -57, -57, -57,
+ -57, 69, -57, -57, -57, 905, -57,
+
+ -84, -84, -84, 204, 75, -84, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, 7, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ 101, -84, -84, -84, -84, -84, -84, -84, -84, 64,
+ 54, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, 68, -84, 30, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ 32, -84, -16, -7, -84, 42, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, 45, -84, -84, -84, -84, -84, -84, 44,
+ -84, -84, -84, 33, -84, -84, -84, -84, -84, -84,
+ 36, 108, -84, -84, -84, 69, -84, -84, -84, 62,
+ -84, 63, -84, -84, -84, -84, 118, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -2, -84, -84, -10,
+ -84, -84, -84, 25, -21, 11, -84, 20, -84, -25,
+ -84, -84, -84, -84, -84, -84, 1, 2, -36, -84,
+ -9, -84, 5, -13, -84, -8, -84, 6, -84, 8,
+ 12, -84, -84, -84, 23, -84, 4, -1, -84, -84,
+ -84, -84, 0, -84, -14, -84, -84, -84, -84, -84,
+ -84, -84, 55, -84, 58, -84, -84, -84, -84, 53,
+ 47, 123, 67, 66, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -15, -84, -84, -84, -84, -84, 41, 40,
+ -84, -84, -84, -84, -46, -84, -84, -84, -84, -84,
+ -84, 35, -84, 34, 37, 18, 70, -84, 89, -84,
+ 43, -84, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, 48, -84, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, 31, -84, 29, 27, 17, -84, -84,
+ 38, 24, 39, -84, 49, -84, 71, -84, 93, -84,
+ -84, -84, -12, -84, -84, -84, 94, -84, -84, -84,
+ -84, -84, -84, -84, -84, -84, -84, -84, -84, 78,
+ -84, -84, -84, 50, -84, -84, 46, -84, 56, -84,
+ -84, -84, 60, -84, 61, 59, 51, 57, -84, -84,
+ 14, -84, -84, -84, -84, -84, -11, -6, 72, -5,
+ -84, -3, -84, -84, -84, 52, -84, -84, -84, -20,
+ 77, -84, 21, -84, -84, -84, 76, 16, -84, 19,
+ 26, -84, -84, -84, 10, -84, -84, -84, -84, 80,
+ 13, 73, -84, -84, -84, 22, -27, -84, 9, -84,
+ 28, 15, 82, -84, -84, -84, -84, -84, -84, -84,
+ -84, -84, -84, 3, -84, 98, -84};
+
+const short QXmlStreamReader_Table::action_info [] = {
+ 65, 332, 65, 405, 392, 385, 377, 65, 414, 410,
+ 415, 55, 397, 374, 373, 217, 206, 408, 65, 65,
+ 207, 211, 216, 1, 55, 199, 182, 192, 70, 70,
+ 63, 70, 189, 416, 153, 350, 133, 70, 72, 55,
+ 65, 351, 254, 270, 73, 284, 65, 310, 55, 65,
+ 83, 82, 83, 82, 129, 83, 82, 54, 70, 128,
+ 83, 82, 66, 64, 83, 82, 318, 316, 318, 316,
+ 54, 212, 83, 82, 83, 82, 54, 55, 367, 366,
+ 69, 80, 79, 83, 82, 163, 70, 314, 305, 272,
+ 55, 306, 305, 354, 163, 177, 55, 163, 379, 163,
+ 65, 176, 83, 82, 55, 163, 58, 57, 0, 65,
+ 83, 82, 65, 395, 65, 62, 203, 202, 195, 194,
+ 65, 417, 16, 61, 60, 396, 156, 272, 0, 66,
+ 64, 65, 317, 318, 316, 378, 379, 171, 173, 162,
+ 172, 54, 171, 173, 163, 172, 0, 345, 344, 343,
+ 171, 173, 0, 172, 0, 155, 154, 70, 134, 65,
+ 0, 55, 297, 220, 218, 298, 389, 0, 300, 0,
+ 135, 301, 299, 33, 66, 64, 65, 297, 0, 297,
+ 298, 0, 298, 300, 0, 300, 301, 299, 301, 299,
+ 221, 219, 70, 272, 381, 291, 0, 0, 0, 128,
+ 13, 0, 0, 273, 271, 274, 275, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 287, 294, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 285, 288, 289, 290, 286, 292, 293, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 70, 134, 0,
+ 0, 0, 0, 0, 0, 362, 0, 108, 0, 103,
+ 135, 94, 117, 116, 95, 104, 97, 105, 99, 93,
+ 98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
+ 86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 108, 0, 103, 0, 94, 102, 90, 95,
+ 104, 97, 105, 99, 93, 98, 107, 87, 106, 88,
+ 89, 100, 109, 92, 101, 86, 96, 91, 108, 0,
+ 103, 0, 94, 121, 120, 95, 104, 97, 105, 99,
+ 93, 98, 107, 87, 106, 88, 89, 100, 109, 92,
+ 101, 86, 96, 91, 0, 0, 0, 108, 0, 103,
+ 0, 94, 114, 113, 95, 104, 97, 105, 99, 93,
+ 98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
+ 86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 108, 0, 103, 322, 94, 337, 336, 95,
+ 104, 97, 105, 99, 93, 98, 107, 87, 106, 88,
+ 89, 100, 109, 92, 101, 86, 96, 91, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 246, 233, 241,
+ 223, 232, 262, 261, 234, 242, 236, 243, 237, 231,
+ 0, 245, 225, 244, 226, 227, 238, 247, 230, 239,
+ 224, 235, 229, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 108, 0, 103, 322, 94, 341, 340, 95,
+ 104, 97, 105, 99, 93, 98, 107, 87, 106, 88,
+ 89, 100, 109, 92, 101, 86, 96, 91, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 108, 0, 103,
+ 322, 94, 324, 323, 95, 104, 97, 105, 99, 93,
+ 98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
+ 86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 246, 233, 241, 223, 232, 256, 255, 234,
+ 242, 236, 243, 237, 231, 0, 245, 225, 244, 226,
+ 227, 238, 247, 230, 239, 224, 235, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 108, 0, 103,
+ 322, 94, 334, 333, 95, 104, 97, 105, 99, 93,
+ 98, 107, 87, 106, 88, 89, 100, 109, 92, 101,
+ 86, 96, 91, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 246, 233, 241, 223, 232, 266, 265, 234,
+ 242, 236, 243, 237, 231, 0, 245, 225, 244, 226,
+ 227, 238, 247, 230, 239, 224, 235, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 30, 0, 25,
+ 74, 15, 24, 10, 17, 26, 19, 27, 21, 14,
+ 20, 29, 7, 28, 8, 9, 22, 31, 12, 23,
+ 6, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 246, 233, 241, 223, 232, 240, 228, 234,
+ 242, 236, 243, 237, 231, 0, 245, 225, 244, 226,
+ 227, 238, 247, 230, 239, 224, 235, 229, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 30, 387, 25,
+ 5, 15, 24, 10, 17, 26, 19, 27, 21, 14,
+ 20, 29, 7, 28, 8, 9, 22, 31, 12, 23,
+ 6, 18, 11, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 13, 32, 0, 0, 0, 0, 0, 0, 0, 33,
+ 0, 0, 30, 16, 25, 5, 15, 24, 10, 17,
+ 26, 19, 27, 21, 14, 20, 29, 7, 28, 8,
+ 9, 22, 31, 12, 23, 6, 18, 11, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 32, 0, 0, 0,
+ 0, 0, 0, 0, 33, 0, 0,
+
+ 380, 179, 210, 181, 425, 368, 205, 375, 371, 372,
+ 161, 208, 204, 178, 185, 174, 201, 183, 188, 198,
+ 190, 409, 407, 175, 184, 404, 267, 67, 412, 186,
+ 400, 361, 193, 384, 406, 197, 67, 170, 391, 390,
+ 411, 307, 331, 304, 309, 125, 124, 71, 132, 191,
+ 311, 313, 110, 260, 352, 276, 0, 257, 259, 123,
+ 296, 118, 308, 348, 376, 386, 315, 346, 312, 258,
+ 215, 394, 360, 349, 358, 213, 359, 353, 356, 269,
+ 0, 328, 281, 0, 370, 44, 44, 280, 328, 369,
+ 0, 355, 402, 400, 383, 347, 413, 401, 382, 394,
+ 158, 283, 426, 328, 328, 357, 280, 0, 44, 214,
+ 0, 76, 122, 115, 137, 0, 150, 0, 143, 263,
+ 253, 0, 68, 152, 137, 151, 150, 144, 143, 0,
+ 0, 0, 0, 0, 327, 365, 268, 144, 35, 35,
+ 282, 327, 363, 364, 0, 0, 0, 0, 0, 0,
+ 0, 403, 0, 0, 342, 0, 327, 327, 0, 0,
+ 0, 35, 78, 0, 75, 77, 0, 0, 0, 338,
+ 335, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 423, 0, 420,
+ 418, 424, 422, 419, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 421, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0};
+
+const short QXmlStreamReader_Table::action_check [] = {
+ 26, 18, 26, 14, 4, 4, 4, 26, 24, 14,
+ 4, 26, 4, 4, 4, 4, 22, 55, 26, 26,
+ 42, 4, 4, 44, 26, 22, 19, 12, 2, 2,
+ 18, 2, 13, 0, 18, 4, 4, 2, 4, 26,
+ 26, 20, 18, 4, 4, 4, 26, 11, 26, 26,
+ 7, 8, 7, 8, 4, 7, 8, 6, 2, 9,
+ 7, 8, 24, 25, 7, 8, 7, 8, 7, 8,
+ 6, 36, 7, 8, 7, 8, 6, 26, 34, 35,
+ 24, 34, 35, 7, 8, 11, 2, 12, 13, 20,
+ 26, 12, 13, 15, 11, 13, 26, 11, 29, 11,
+ 26, 19, 7, 8, 26, 11, 26, 27, -1, 26,
+ 7, 8, 26, 4, 26, 18, 12, 13, 12, 13,
+ 26, 2, 3, 26, 27, 16, 11, 20, -1, 24,
+ 25, 26, 6, 7, 8, 28, 29, 21, 22, 6,
+ 24, 6, 21, 22, 11, 24, -1, 37, 38, 39,
+ 21, 22, -1, 24, -1, 40, 41, 2, 3, 26,
+ -1, 26, 17, 7, 8, 20, 16, -1, 23, -1,
+ 15, 26, 27, 54, 24, 25, 26, 17, -1, 17,
+ 20, -1, 20, 23, -1, 23, 26, 27, 26, 27,
+ 34, 35, 2, 20, 4, 11, -1, -1, -1, 9,
+ 45, -1, -1, 30, 31, 32, 33, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 32, 33, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 47, 48, 49, 50, 51, 52, 53, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 2, 3, -1,
+ -1, -1, -1, -1, -1, 10, -1, 2, -1, 4,
+ 15, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 2, -1, 4, -1, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 2, -1,
+ 4, -1, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, -1, -1, -1, 2, -1, 4,
+ -1, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 2, -1, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ -1, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 2, -1, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 2, -1, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, -1, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 2, -1, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, -1, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 2, -1, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 45, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, -1, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 45, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 45, 46, -1, -1, -1, -1, -1, -1, -1, 54,
+ -1, -1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 45, 46, -1, -1, -1,
+ -1, -1, -1, -1, 54, -1, -1,
+
+ 20, 37, 12, 12, 1, 16, 20, 13, 13, 12,
+ 12, 36, 12, 12, 12, 36, 12, 12, 12, 20,
+ 12, 12, 49, 12, 37, 12, 72, 20, 13, 37,
+ 20, 17, 12, 12, 12, 12, 20, 12, 12, 20,
+ 12, 12, 54, 12, 17, 13, 13, 17, 12, 37,
+ 12, 12, 68, 13, 20, 20, -1, 72, 17, 17,
+ 12, 68, 45, 20, 12, 1, 17, 17, 44, 16,
+ 12, 17, 54, 17, 17, 12, 17, 17, 17, 12,
+ -1, 10, 12, -1, 12, 10, 10, 17, 10, 17,
+ -1, 54, 12, 20, 17, 49, 14, 17, 21, 17,
+ 38, 12, 4, 10, 10, 54, 17, -1, 10, 54,
+ -1, 10, 68, 68, 6, -1, 8, -1, 10, 72,
+ 54, -1, 54, 54, 6, 17, 8, 19, 10, -1,
+ -1, -1, -1, -1, 63, 17, 13, 19, 63, 63,
+ 51, 63, 24, 25, -1, -1, -1, -1, -1, -1,
+ -1, 78, -1, -1, 76, -1, 63, 63, -1, -1,
+ -1, 63, 61, -1, 63, 64, -1, -1, -1, 76,
+ 76, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 3, -1, 5,
+ 6, 7, 8, 9, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 19, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1};
+
+
+template <typename T> class QXmlStreamSimpleStack {
+ T *data;
+ int tos, cap;
+public:
+ inline QXmlStreamSimpleStack():data(0), tos(-1), cap(0){}
+ inline ~QXmlStreamSimpleStack(){ if (data) free(data); }
+
+ inline void reserve(int extraCapacity) {
+ if (tos + extraCapacity + 1 > cap) {
+ cap = qMax(tos + extraCapacity + 1, cap << 1 );
+ data = reinterpret_cast<T *>(realloc(data, cap * sizeof(T)));
+ Q_CHECK_PTR(data);
+ }
+ }
+
+ inline T &push() { reserve(1); return data[++tos]; }
+ inline T &rawPush() { return data[++tos]; }
+ inline const T &top() const { return data[tos]; }
+ inline T &top() { return data[tos]; }
+ inline T &pop() { return data[tos--]; }
+ inline T &operator[](int index) { return data[index]; }
+ inline const T &at(int index) const { return data[index]; }
+ inline int size() const { return tos + 1; }
+ inline void resize(int s) { tos = s - 1; }
+ inline bool isEmpty() const { return tos < 0; }
+ inline void clear() { tos = -1; }
+};
+
+
+class QXmlStream
+{
+ Q_DECLARE_TR_FUNCTIONS(QXmlStream)
+};
+
+class QXmlStreamPrivateTagStack {
+public:
+ struct NamespaceDeclaration
+ {
+ QStringRef prefix;
+ QStringRef namespaceUri;
+ };
+
+ struct Tag
+ {
+ QStringRef name;
+ QStringRef qualifiedName;
+ NamespaceDeclaration namespaceDeclaration;
+ int tagStackStringStorageSize;
+ int namespaceDeclarationsSize;
+ };
+
+
+ QXmlStreamPrivateTagStack();
+ QXmlStreamSimpleStack<NamespaceDeclaration> namespaceDeclarations;
+ QString tagStackStringStorage;
+ int tagStackStringStorageSize;
+ int initialTagStackStringStorageSize;
+ bool tagsDone;
+
+ inline QStringRef addToStringStorage(const QStringRef &s) {
+ return addToStringStorage(qToStringViewIgnoringNull(s));
+ }
+ inline QStringRef addToStringStorage(const QString &s) {
+ return addToStringStorage(qToStringViewIgnoringNull(s));
+ }
+ QStringRef addToStringStorage(QStringView s)
+ {
+ int pos = tagStackStringStorageSize;
+ int sz = s.size();
+ if (pos != tagStackStringStorage.size())
+ tagStackStringStorage.resize(pos);
+ tagStackStringStorage.append(s.data(), sz);
+ tagStackStringStorageSize += sz;
+ return QStringRef(&tagStackStringStorage, pos, sz);
+ }
+
+ QXmlStreamSimpleStack<Tag> tagStack;
+
+
+ inline Tag &tagStack_pop() {
+ Tag& tag = tagStack.pop();
+ tagStackStringStorageSize = tag.tagStackStringStorageSize;
+ namespaceDeclarations.resize(tag.namespaceDeclarationsSize);
+ tagsDone = tagStack.isEmpty();
+ return tag;
+ }
+ inline Tag &tagStack_push() {
+ Tag &tag = tagStack.push();
+ tag.tagStackStringStorageSize = tagStackStringStorageSize;
+ tag.namespaceDeclarationsSize = namespaceDeclarations.size();
+ return tag;
+ }
+};
+
+
+class QXmlStreamEntityResolver;
+#ifndef QT_NO_XMLSTREAMREADER
+class QXmlStreamReaderPrivate : public QXmlStreamReader_Table, public QXmlStreamPrivateTagStack{
+ QXmlStreamReader *q_ptr;
+ Q_DECLARE_PUBLIC(QXmlStreamReader)
+public:
+ QXmlStreamReaderPrivate(QXmlStreamReader *q);
+ ~QXmlStreamReaderPrivate();
+ void init();
+
+ QByteArray rawReadBuffer;
+ QByteArray dataBuffer;
+ uchar firstByte;
+ qint64 nbytesread;
+ QString readBuffer;
+ int readBufferPos;
+ QXmlStreamSimpleStack<uint> putStack;
+ struct Entity {
+ Entity() = default;
+ Entity(const QString &name, const QString &value)
+ : name(name), value(value), external(false), unparsed(false), literal(false),
+ hasBeenParsed(false), isCurrentlyReferenced(false){}
+ static inline Entity createLiteral(QLatin1String name, QLatin1String value)
+ { Entity result(name, value); result.literal = result.hasBeenParsed = true; return result; }
+ QString name, value;
+ uint external : 1;
+ uint unparsed : 1;
+ uint literal : 1;
+ uint hasBeenParsed : 1;
+ uint isCurrentlyReferenced : 1;
+ };
+ // these hash tables use a QStringView as a key to avoid creating QStrings
+ // just for lookup. The keys are usually views into Entity::name and thus
+ // are guaranteed to have the same lifetime as the referenced data:
+ QHash<QStringView, Entity> entityHash;
+ QHash<QStringView, Entity> parameterEntityHash;
+ QXmlStreamSimpleStack<Entity *>entityReferenceStack;
+ inline bool referenceEntity(Entity &entity) {
+ if (entity.isCurrentlyReferenced) {
+ raiseWellFormedError(QXmlStream::tr("Recursive entity detected."));
+ return false;
+ }
+ entity.isCurrentlyReferenced = true;
+ entityReferenceStack.push() = &entity;
+ injectToken(ENTITY_DONE);
+ return true;
+ }
+
+
+ QIODevice *device;
+ bool deleteDevice;
+#ifndef QT_NO_TEXTCODEC
+ QTextCodec *codec;
+ QTextDecoder *decoder;
+#endif
+ bool atEnd;
+
+ /*!
+ \sa setType()
+ */
+ QXmlStreamReader::TokenType type;
+ QXmlStreamReader::Error error;
+ QString errorString;
+ QString unresolvedEntity;
+
+ qint64 lineNumber, lastLineStart, characterOffset;
+
+
+ void write(const QString &);
+ void write(const char *);
+
+
+ QXmlStreamAttributes attributes;
+ QStringRef namespaceForPrefix(const QStringRef &prefix);
+ void resolveTag();
+ void resolvePublicNamespaces();
+ void resolveDtd();
+ uint resolveCharRef(int symbolIndex);
+ bool checkStartDocument();
+ void startDocument();
+ void parseError();
+ void checkPublicLiteral(const QStringRef &publicId);
+
+ bool scanDtd;
+ QStringRef lastAttributeValue;
+ bool lastAttributeIsCData;
+ struct DtdAttribute {
+ QStringRef tagName;
+ QStringRef attributeQualifiedName;
+ QStringRef attributePrefix;
+ QStringRef attributeName;
+ QStringRef defaultValue;
+ bool isCDATA;
+ bool isNamespaceAttribute;
+ };
+ QXmlStreamSimpleStack<DtdAttribute> dtdAttributes;
+ struct NotationDeclaration {
+ QStringRef name;
+ QStringRef publicId;
+ QStringRef systemId;
+ };
+ QXmlStreamSimpleStack<NotationDeclaration> notationDeclarations;
+ QXmlStreamNotationDeclarations publicNotationDeclarations;
+ QXmlStreamNamespaceDeclarations publicNamespaceDeclarations;
+
+ struct EntityDeclaration {
+ QStringRef name;
+ QStringRef notationName;
+ QStringRef publicId;
+ QStringRef systemId;
+ QStringRef value;
+ bool parameter;
+ bool external;
+ inline void clear() {
+ name.clear();
+ notationName.clear();
+ publicId.clear();
+ systemId.clear();
+ value.clear();
+ parameter = external = false;
+ }
+ };
+ QXmlStreamSimpleStack<EntityDeclaration> entityDeclarations;
+ QXmlStreamEntityDeclarations publicEntityDeclarations;
+
+ QStringRef text;
+
+ QStringRef prefix, namespaceUri, qualifiedName, name;
+ QStringRef processingInstructionTarget, processingInstructionData;
+ QStringRef dtdName, dtdPublicId, dtdSystemId;
+ QStringRef documentVersion, documentEncoding;
+ uint isEmptyElement : 1;
+ uint isWhitespace : 1;
+ uint isCDATA : 1;
+ uint standalone : 1;
+ uint hasCheckedStartDocument : 1;
+ uint normalizeLiterals : 1;
+ uint hasSeenTag : 1;
+ uint inParseEntity : 1;
+ uint referenceToUnparsedEntityDetected : 1;
+ uint referenceToParameterEntityDetected : 1;
+ uint hasExternalDtdSubset : 1;
+ uint lockEncoding : 1;
+ uint namespaceProcessing : 1;
+
+ int resumeReduction;
+ void resume(int rule);
+
+ inline bool entitiesMustBeDeclared() const {
+ return (!inParseEntity
+ && (standalone
+ || (!referenceToUnparsedEntityDetected
+ && !referenceToParameterEntityDetected // Errata 13 as of 2006-04-25
+ && !hasExternalDtdSubset)));
+ }
+
+ // qlalr parser
+ int tos;
+ int stack_size;
+ struct Value {
+ int pos;
+ int len;
+ int prefix;
+ ushort c;
+ };
+
+ Value *sym_stack;
+ int *state_stack;
+ inline void reallocateStack();
+ inline Value &sym(int index) const
+ { return sym_stack[tos + index - 1]; }
+ QString textBuffer;
+ inline void clearTextBuffer() {
+ if (!scanDtd) {
+ textBuffer.resize(0);
+ textBuffer.reserve(256);
+ }
+ }
+ struct Attribute {
+ Value key;
+ Value value;
+ };
+ QXmlStreamSimpleStack<Attribute> attributeStack;
+
+ inline QStringRef symString(int index) {
+ const Value &symbol = sym(index);
+ return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);
+ }
+ QStringView symView(int index) const
+ {
+ const Value &symbol = sym(index);
+ return QStringView(textBuffer.data() + symbol.pos, symbol.len).mid(symbol.prefix);
+ }
+ inline QStringRef symName(int index) {
+ const Value &symbol = sym(index);
+ return QStringRef(&textBuffer, symbol.pos, symbol.len);
+ }
+ inline QStringRef symString(int index, int offset) {
+ const Value &symbol = sym(index);
+ return QStringRef(&textBuffer, symbol.pos + symbol.prefix + offset, symbol.len - symbol.prefix - offset);
+ }
+ inline QStringRef symPrefix(int index) {
+ const Value &symbol = sym(index);
+ if (symbol.prefix)
+ return QStringRef(&textBuffer, symbol.pos, symbol.prefix - 1);
+ return QStringRef();
+ }
+ inline QStringRef symString(const Value &symbol) {
+ return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);
+ }
+ inline QStringRef symName(const Value &symbol) {
+ return QStringRef(&textBuffer, symbol.pos, symbol.len);
+ }
+ inline QStringRef symPrefix(const Value &symbol) {
+ if (symbol.prefix)
+ return QStringRef(&textBuffer, symbol.pos, symbol.prefix - 1);
+ return QStringRef();
+ }
+
+ inline void clearSym() { Value &val = sym(1); val.pos = textBuffer.size(); val.len = 0; }
+
+
+ short token;
+ uint token_char;
+
+ uint filterCarriageReturn();
+ inline uint getChar();
+ inline uint peekChar();
+ inline void putChar(uint c) { putStack.push() = c; }
+ inline void putChar(QChar c) { putStack.push() = c.unicode(); }
+ void putString(const QString &s, int from = 0);
+ void putStringLiteral(const QString &s);
+ void putReplacement(const QString &s);
+ void putReplacementInAttributeValue(const QString &s);
+ uint getChar_helper();
+
+ bool scanUntil(const char *str, short tokenToInject = -1);
+ bool scanString(const char *str, short tokenToInject, bool requireSpace = true);
+ inline void injectToken(ushort tokenToInject) {
+ putChar(int(tokenToInject) << 16);
+ }
+
+ QString resolveUndeclaredEntity(const QString &name);
+ void parseEntity(const QString &value);
+ QXmlStreamReaderPrivate *entityParser;
+
+ bool scanAfterLangleBang();
+ bool scanPublicOrSystem();
+ bool scanNData();
+ bool scanAfterDefaultDecl();
+ bool scanAttType();
+
+
+ // scan optimization functions. Not strictly necessary but LALR is
+ // not very well suited for scanning fast
+ int fastScanLiteralContent();
+ int fastScanSpace();
+ int fastScanContentCharList();
+ int fastScanName(int *prefix = 0);
+ inline int fastScanNMTOKEN();
+
+
+ bool parse();
+ inline void consumeRule(int);
+
+ void raiseError(QXmlStreamReader::Error error, const QString& message = QString());
+ void raiseWellFormedError(const QString &message);
+
+ QXmlStreamEntityResolver *entityResolver;
+
+private:
+ /*! \internal
+ Never assign to variable type directly. Instead use this function.
+
+ This prevents errors from being ignored.
+ */
+ inline void setType(const QXmlStreamReader::TokenType t)
+ {
+ if(type != QXmlStreamReader::Invalid)
+ type = t;
+ }
+};
+
+bool QXmlStreamReaderPrivate::parse()
+{
+ // cleanup currently reported token
+
+ switch (type) {
+ case QXmlStreamReader::StartElement:
+ name.clear();
+ prefix.clear();
+ qualifiedName.clear();
+ namespaceUri.clear();
+ publicNamespaceDeclarations.clear();
+ attributes.clear();
+ if (isEmptyElement) {
+ setType(QXmlStreamReader::EndElement);
+ Tag &tag = tagStack_pop();
+ namespaceUri = tag.namespaceDeclaration.namespaceUri;
+ name = tag.name;
+ qualifiedName = tag.qualifiedName;
+ isEmptyElement = false;
+ return true;
+ }
+ clearTextBuffer();
+ break;
+ case QXmlStreamReader::EndElement:
+ name.clear();
+ prefix.clear();
+ qualifiedName.clear();
+ namespaceUri.clear();
+ clearTextBuffer();
+ break;
+ case QXmlStreamReader::DTD:
+ publicNotationDeclarations.clear();
+ publicEntityDeclarations.clear();
+ dtdName.clear();
+ dtdPublicId.clear();
+ dtdSystemId.clear();
+ Q_FALLTHROUGH();
+ case QXmlStreamReader::Comment:
+ case QXmlStreamReader::Characters:
+ isCDATA = false;
+ isWhitespace = true;
+ text.clear();
+ clearTextBuffer();
+ break;
+ case QXmlStreamReader::EntityReference:
+ text.clear();
+ name.clear();
+ clearTextBuffer();
+ break;
+ case QXmlStreamReader::ProcessingInstruction:
+ processingInstructionTarget.clear();
+ processingInstructionData.clear();
+ clearTextBuffer();
+ break;
+ case QXmlStreamReader::NoToken:
+ case QXmlStreamReader::Invalid:
+ break;
+ case QXmlStreamReader::StartDocument:
+ lockEncoding = true;
+ documentVersion.clear();
+ documentEncoding.clear();
+#ifndef QT_NO_TEXTCODEC
+ if (decoder && decoder->hasFailure()) {
+ raiseWellFormedError(QXmlStream::tr("Encountered incorrectly encoded content."));
+ readBuffer.clear();
+ return false;
+ }
+#endif
+ Q_FALLTHROUGH();
+ default:
+ clearTextBuffer();
+ ;
+ }
+
+ setType(QXmlStreamReader::NoToken);
+
+
+ // the main parse loop
+ int act, r;
+
+ if (resumeReduction) {
+ act = state_stack[tos-1];
+ r = resumeReduction;
+ resumeReduction = 0;
+ goto ResumeReduction;
+ }
+
+ act = state_stack[tos];
+
+ forever {
+ if (token == -1 && - TERMINAL_COUNT != action_index[act]) {
+ uint cu = getChar();
+ token = NOTOKEN;
+ token_char = cu == ~0U ? cu : ushort(cu);
+ if ((cu != ~0U) && (cu & 0xff0000)) {
+ token = cu >> 16;
+ } else switch (token_char) {
+ case 0xfffe:
+ case 0xffff:
+ token = ERROR;
+ break;
+ case '\r':
+ token = SPACE;
+ if (cu == '\r') {
+ if ((token_char = filterCarriageReturn())) {
+ ++lineNumber;
+ lastLineStart = characterOffset + readBufferPos;
+ break;
+ }
+ } else {
+ break;
+ }
+ Q_FALLTHROUGH();
+ case ~0U: {
+ token = EOF_SYMBOL;
+ if (!tagsDone && !inParseEntity) {
+ int a = t_action(act, token);
+ if (a < 0) {
+ raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
+ return false;
+ }
+ }
+
+ } break;
+ case '\n':
+ ++lineNumber;
+ lastLineStart = characterOffset + readBufferPos;
+ Q_FALLTHROUGH();
+ case ' ':
+ case '\t':
+ token = SPACE;
+ break;
+ case '&':
+ token = AMPERSAND;
+ break;
+ case '#':
+ token = HASH;
+ break;
+ case '\'':
+ token = QUOTE;
+ break;
+ case '\"':
+ token = DBLQUOTE;
+ break;
+ case '<':
+ token = LANGLE;
+ break;
+ case '>':
+ token = RANGLE;
+ break;
+ case '[':
+ token = LBRACK;
+ break;
+ case ']':
+ token = RBRACK;
+ break;
+ case '(':
+ token = LPAREN;
+ break;
+ case ')':
+ token = RPAREN;
+ break;
+ case '|':
+ token = PIPE;
+ break;
+ case '=':
+ token = EQ;
+ break;
+ case '%':
+ token = PERCENT;
+ break;
+ case '/':
+ token = SLASH;
+ break;
+ case ':':
+ token = COLON;
+ break;
+ case ';':
+ token = SEMICOLON;
+ break;
+ case ',':
+ token = COMMA;
+ break;
+ case '-':
+ token = DASH;
+ break;
+ case '+':
+ token = PLUS;
+ break;
+ case '*':
+ token = STAR;
+ break;
+ case '.':
+ token = DOT;
+ break;
+ case '?':
+ token = QUESTIONMARK;
+ break;
+ case '!':
+ token = BANG;
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ token = DIGIT;
+ break;
+ default:
+ if (cu < 0x20)
+ token = NOTOKEN;
+ else
+ token = LETTER;
+ break;
+ }
+ }
+
+ act = t_action (act, token);
+ if (act == ACCEPT_STATE) {
+ // reset the parser in case someone resumes (process instructions can follow a valid document)
+ tos = 0;
+ state_stack[tos++] = 0;
+ state_stack[tos] = 0;
+ return true;
+ } else if (act > 0) {
+ if (++tos == stack_size-1)
+ reallocateStack();
+
+ Value &val = sym_stack[tos];
+ val.c = token_char;
+ val.pos = textBuffer.size();
+ val.prefix = 0;
+ val.len = 1;
+ if (token_char)
+ textBuffer += QChar(token_char);
+
+ state_stack[tos] = act;
+ token = -1;
+
+
+ } else if (act < 0) {
+ r = - act - 1;
+
+#if defined (QLALR_DEBUG)
+ int ridx = rule_index[r];
+ printf ("%3d) %s ::=", r + 1, spell[rule_info[ridx]]);
+ ++ridx;
+ for (int i = ridx; i < ridx + rhs[r]; ++i) {
+ int symbol = rule_info[i];
+ if (const char *name = spell[symbol])
+ printf (" %s", name);
+ else
+ printf (" #%d", symbol);
+ }
+ printf ("\n");
+#endif
+
+ tos -= rhs[r];
+ act = state_stack[tos++];
+ ResumeReduction:
+ switch (r) {
+
+ case 0:
+ setType(QXmlStreamReader::EndDocument);
+ break;
+
+ case 1:
+ if (type != QXmlStreamReader::Invalid) {
+ if (hasSeenTag || inParseEntity) {
+ setType(QXmlStreamReader::EndDocument);
+ } else {
+ raiseError(QXmlStreamReader::NotWellFormedError, QXmlStream::tr("Start tag expected."));
+ // reset the parser
+ tos = 0;
+ state_stack[tos++] = 0;
+ state_stack[tos] = 0;
+ return false;
+ }
+ }
+ break;
+
+ case 10:
+ entityReferenceStack.pop()->isCurrentlyReferenced = false;
+ clearSym();
+ break;
+
+ case 11:
+ if (!scanString(spell[VERSION], VERSION, false) && atEnd) {
+ resume(11);
+ return false;
+ }
+ break;
+
+ case 12:
+ setType(QXmlStreamReader::StartDocument);
+ documentVersion = symString(6);
+ startDocument();
+ break;
+
+ case 13:
+ hasExternalDtdSubset = true;
+ dtdSystemId = symString(2);
+ break;
+
+ case 14:
+ checkPublicLiteral(symString(2));
+ dtdPublicId = symString(2);
+ dtdSystemId = symString(4);
+ hasExternalDtdSubset = true;
+ break;
+
+ case 16:
+ if (!scanPublicOrSystem() && atEnd) {
+ resume(16);
+ return false;
+ }
+ dtdName = symString(3);
+ break;
+
+ case 17:
+ case 18:
+ dtdName = symString(3);
+ Q_FALLTHROUGH();
+
+ case 19:
+ case 20:
+ setType(QXmlStreamReader::DTD);
+ text = &textBuffer;
+ break;
+
+ case 21:
+ scanDtd = true;
+ break;
+
+ case 22:
+ scanDtd = false;
+ break;
+
+ case 37:
+ if (!scanString(spell[EMPTY], EMPTY, false)
+ && !scanString(spell[ANY], ANY, false)
+ && atEnd) {
+ resume(37);
+ return false;
+ }
+ break;
+
+ case 43:
+ if (!scanString(spell[PCDATA], PCDATA, false) && atEnd) {
+ resume(43);
+ return false;
+ }
+ break;
+
+ case 68: {
+ lastAttributeIsCData = true;
+ } break;
+
+ case 78:
+ if (!scanAfterDefaultDecl() && atEnd) {
+ resume(78);
+ return false;
+ }
+ break;
+
+ case 83:
+ sym(1) = sym(2);
+ lastAttributeValue.clear();
+ lastAttributeIsCData = false;
+ if (!scanAttType() && atEnd) {
+ resume(83);
+ return false;
+ }
+ break;
+
+ case 84: {
+ DtdAttribute &dtdAttribute = dtdAttributes.push();
+ dtdAttribute.tagName.clear();
+ dtdAttribute.isCDATA = lastAttributeIsCData;
+ dtdAttribute.attributePrefix = addToStringStorage(symPrefix(1));
+ dtdAttribute.attributeName = addToStringStorage(symString(1));
+ dtdAttribute.attributeQualifiedName = addToStringStorage(symName(1));
+ dtdAttribute.isNamespaceAttribute = (dtdAttribute.attributePrefix == QLatin1String("xmlns")
+ || (dtdAttribute.attributePrefix.isEmpty()
+ && dtdAttribute.attributeName == QLatin1String("xmlns")));
+ if (lastAttributeValue.isNull()) {
+ dtdAttribute.defaultValue.clear();
+ } else {
+ if (dtdAttribute.isCDATA)
+ dtdAttribute.defaultValue = addToStringStorage(lastAttributeValue);
+ else
+ dtdAttribute.defaultValue = addToStringStorage(lastAttributeValue.toString().simplified());
+
+ }
+ } break;
+
+ case 88: {
+ if (referenceToUnparsedEntityDetected && !standalone)
+ break;
+ int n = dtdAttributes.size();
+ QStringRef tagName = addToStringStorage(symName(3));
+ while (n--) {
+ DtdAttribute &dtdAttribute = dtdAttributes[n];
+ if (!dtdAttribute.tagName.isNull())
+ break;
+ dtdAttribute.tagName = tagName;
+ for (int i = 0; i < n; ++i) {
+ if ((dtdAttributes[i].tagName.isNull() || dtdAttributes[i].tagName == tagName)
+ && dtdAttributes[i].attributeQualifiedName == dtdAttribute.attributeQualifiedName) {
+ dtdAttribute.attributeQualifiedName.clear(); // redefined, delete it
+ break;
+ }
+ }
+ }
+ } break;
+
+ case 89: {
+ if (!scanPublicOrSystem() && atEnd) {
+ resume(89);
+ return false;
+ }
+ EntityDeclaration &entityDeclaration = entityDeclarations.push();
+ entityDeclaration.clear();
+ entityDeclaration.name = symString(3);
+ } break;
+
+ case 90: {
+ if (!scanPublicOrSystem() && atEnd) {
+ resume(90);
+ return false;
+ }
+ EntityDeclaration &entityDeclaration = entityDeclarations.push();
+ entityDeclaration.clear();
+ entityDeclaration.name = symString(5);
+ entityDeclaration.parameter = true;
+ } break;
+
+ case 91: {
+ if (!scanNData() && atEnd) {
+ resume(91);
+ return false;
+ }
+ EntityDeclaration &entityDeclaration = entityDeclarations.top();
+ entityDeclaration.systemId = symString(3);
+ entityDeclaration.external = true;
+ } break;
+
+ case 92: {
+ if (!scanNData() && atEnd) {
+ resume(92);
+ return false;
+ }
+ EntityDeclaration &entityDeclaration = entityDeclarations.top();
+ checkPublicLiteral((entityDeclaration.publicId = symString(3)));
+ entityDeclaration.systemId = symString(5);
+ entityDeclaration.external = true;
+ } break;
+
+ case 93: {
+ EntityDeclaration &entityDeclaration = entityDeclarations.top();
+ entityDeclaration.notationName = symString(3);
+ if (entityDeclaration.parameter)
+ raiseWellFormedError(QXmlStream::tr("NDATA in parameter entity declaration."));
+ }
+ Q_FALLTHROUGH();
+
+ case 94:
+ case 95: {
+ if (referenceToUnparsedEntityDetected && !standalone) {
+ entityDeclarations.pop();
+ break;
+ }
+ EntityDeclaration &entityDeclaration = entityDeclarations.top();
+ if (!entityDeclaration.external)
+ entityDeclaration.value = symString(2);
+ auto &hash = entityDeclaration.parameter ? parameterEntityHash : entityHash;
+ if (!hash.contains(qToStringViewIgnoringNull(entityDeclaration.name))) {
+ Entity entity(entityDeclaration.name.toString(),
+ entityDeclaration.value.toString());
+ entity.unparsed = (!entityDeclaration.notationName.isNull());
+ entity.external = entityDeclaration.external;
+ hash.insert(qToStringViewIgnoringNull(entity.name), entity);
+ }
+ } break;
+
+ case 96: {
+ setType(QXmlStreamReader::ProcessingInstruction);
+ int pos = sym(4).pos + sym(4).len;
+ processingInstructionTarget = symString(3);
+ if (scanUntil("?>")) {
+ processingInstructionData = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 2);
+ if (!processingInstructionTarget.compare(QLatin1String("xml"), Qt::CaseInsensitive)) {
+ raiseWellFormedError(QXmlStream::tr("XML declaration not at start of document."));
+ }
+ else if (!QXmlUtils::isNCName(processingInstructionTarget))
+ raiseWellFormedError(QXmlStream::tr("%1 is an invalid processing instruction name.")
+ .arg(processingInstructionTarget));
+ } else if (type != QXmlStreamReader::Invalid){
+ resume(96);
+ return false;
+ }
+ } break;
+
+ case 97:
+ setType(QXmlStreamReader::ProcessingInstruction);
+ processingInstructionTarget = symString(3);
+ if (!processingInstructionTarget.compare(QLatin1String("xml"), Qt::CaseInsensitive))
+ raiseWellFormedError(QXmlStream::tr("Invalid processing instruction name."));
+ break;
+
+ case 98:
+ if (!scanAfterLangleBang() && atEnd) {
+ resume(98);
+ return false;
+ }
+ break;
+
+ case 99:
+ if (!scanUntil("--")) {
+ resume(99);
+ return false;
+ }
+ break;
+
+ case 100: {
+ setType(QXmlStreamReader::Comment);
+ int pos = sym(1).pos + 4;
+ text = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 3);
+ } break;
+
+ case 101: {
+ setType(QXmlStreamReader::Characters);
+ isCDATA = true;
+ isWhitespace = false;
+ int pos = sym(2).pos;
+ if (scanUntil("]]>", -1)) {
+ text = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 3);
+ } else {
+ resume(101);
+ return false;
+ }
+ } break;
+
+ case 102: {
+ if (!scanPublicOrSystem() && atEnd) {
+ resume(102);
+ return false;
+ }
+ NotationDeclaration &notationDeclaration = notationDeclarations.push();
+ notationDeclaration.name = symString(3);
+ } break;
+
+ case 103: {
+ NotationDeclaration &notationDeclaration = notationDeclarations.top();
+ notationDeclaration.systemId = symString(3);
+ notationDeclaration.publicId.clear();
+ } break;
+
+ case 104: {
+ NotationDeclaration &notationDeclaration = notationDeclarations.top();
+ notationDeclaration.systemId.clear();
+ checkPublicLiteral((notationDeclaration.publicId = symString(3)));
+ } break;
+
+ case 105: {
+ NotationDeclaration &notationDeclaration = notationDeclarations.top();
+ checkPublicLiteral((notationDeclaration.publicId = symString(3)));
+ notationDeclaration.systemId = symString(5);
+ } break;
+
+ case 129:
+ isWhitespace = false;
+ Q_FALLTHROUGH();
+
+ case 130:
+ sym(1).len += fastScanContentCharList();
+ if (atEnd && !inParseEntity) {
+ resume(130);
+ return false;
+ }
+ break;
+
+ case 139:
+ if (!textBuffer.isEmpty()) {
+ setType(QXmlStreamReader::Characters);
+ text = &textBuffer;
+ }
+ break;
+
+ case 140:
+ case 141:
+ clearSym();
+ break;
+
+ case 142:
+ case 143:
+ sym(1) = sym(2);
+ break;
+
+ case 144:
+ case 145:
+ case 146:
+ case 147:
+ sym(1).len += sym(2).len;
+ break;
+
+ case 173:
+ if (normalizeLiterals)
+ textBuffer.data()[textBuffer.size()-1] = QLatin1Char(' ');
+ break;
+
+ case 174:
+ sym(1).len += fastScanLiteralContent();
+ if (atEnd) {
+ resume(174);
+ return false;
+ }
+ break;
+
+ case 175: {
+ if (!QXmlUtils::isPublicID(symString(1))) {
+ raiseWellFormedError(QXmlStream::tr("%1 is an invalid PUBLIC identifier.").arg(symString(1)));
+ resume(175);
+ return false;
+ }
+ } break;
+
+ case 176:
+ case 177:
+ clearSym();
+ break;
+
+ case 178:
+ case 179:
+ sym(1) = sym(2);
+ break;
+
+ case 180:
+ case 181:
+ case 182:
+ case 183:
+ sym(1).len += sym(2).len;
+ break;
+
+ case 213:
+ case 214:
+ clearSym();
+ break;
+
+ case 215:
+ case 216:
+ sym(1) = sym(2);
+ lastAttributeValue = symString(1);
+ break;
+
+ case 217:
+ case 218:
+ case 219:
+ case 220:
+ sym(1).len += sym(2).len;
+ break;
+
+ case 229: {
+ QStringRef prefix = symPrefix(1);
+ if (prefix.isEmpty() && symString(1) == QLatin1String("xmlns") && namespaceProcessing) {
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
+ namespaceDeclaration.prefix.clear();
+
+ const QStringRef ns(symString(5));
+ if(ns == QLatin1String("http://www.w3.org/2000/xmlns/") ||
+ ns == QLatin1String("http://www.w3.org/XML/1998/namespace"))
+ raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
+ else
+ namespaceDeclaration.namespaceUri = addToStringStorage(ns);
+ } else {
+ Attribute &attribute = attributeStack.push();
+ attribute.key = sym(1);
+ attribute.value = sym(5);
+
+ QStringRef attributeQualifiedName = symName(1);
+ bool normalize = false;
+ for (int a = 0; a < dtdAttributes.size(); ++a) {
+ DtdAttribute &dtdAttribute = dtdAttributes[a];
+ if (!dtdAttribute.isCDATA
+ && dtdAttribute.tagName == qualifiedName
+ && dtdAttribute.attributeQualifiedName == attributeQualifiedName
+ ) {
+ normalize = true;
+ break;
+ }
+ }
+ if (normalize) {
+ // normalize attribute value (simplify and trim)
+ int pos = textBuffer.size();
+ int n = 0;
+ bool wasSpace = true;
+ for (int i = 0; i < attribute.value.len; ++i) {
+ QChar c = textBuffer.at(attribute.value.pos + i);
+ if (c.unicode() == ' ') {
+ if (wasSpace)
+ continue;
+ wasSpace = true;
+ } else {
+ wasSpace = false;
+ }
+ textBuffer += textBuffer.at(attribute.value.pos + i);
+ ++n;
+ }
+ if (wasSpace)
+ while (n && textBuffer.at(pos + n - 1).unicode() == ' ')
+ --n;
+ attribute.value.pos = pos;
+ attribute.value.len = n;
+ }
+ if (prefix == QLatin1String("xmlns") && namespaceProcessing) {
+ NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
+ QStringRef namespacePrefix = symString(attribute.key);
+ QStringRef namespaceUri = symString(attribute.value);
+ attributeStack.pop();
+ if (((namespacePrefix == QLatin1String("xml"))
+ ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace")))
+ || namespaceUri == QLatin1String("http://www.w3.org/2000/xmlns/")
+ || namespaceUri.isEmpty()
+ || namespacePrefix == QLatin1String("xmlns"))
+ raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
+
+ namespaceDeclaration.prefix = addToStringStorage(namespacePrefix);
+ namespaceDeclaration.namespaceUri = addToStringStorage(namespaceUri);
+ }
+ }
+ } break;
+
+ case 235: {
+ normalizeLiterals = true;
+ Tag &tag = tagStack_push();
+ prefix = tag.namespaceDeclaration.prefix = addToStringStorage(symPrefix(2));
+ name = tag.name = addToStringStorage(symString(2));
+ qualifiedName = tag.qualifiedName = addToStringStorage(symName(2));
+ if ((!prefix.isEmpty() && !QXmlUtils::isNCName(prefix)) || !QXmlUtils::isNCName(name))
+ raiseWellFormedError(QXmlStream::tr("Invalid XML name."));
+ } break;
+
+ case 236:
+ isEmptyElement = true;
+ Q_FALLTHROUGH();
+
+ case 237:
+ setType(QXmlStreamReader::StartElement);
+ resolveTag();
+ if (tagStack.size() == 1 && hasSeenTag && !inParseEntity)
+ raiseWellFormedError(QXmlStream::tr("Extra content at end of document."));
+ hasSeenTag = true;
+ break;
+
+ case 238: {
+ setType(QXmlStreamReader::EndElement);
+ Tag &tag = tagStack_pop();
+
+ namespaceUri = tag.namespaceDeclaration.namespaceUri;
+ name = tag.name;
+ qualifiedName = tag.qualifiedName;
+ if (qualifiedName != symName(3))
+ raiseWellFormedError(QXmlStream::tr("Opening and ending tag mismatch."));
+ } break;
+
+ case 239:
+ if (entitiesMustBeDeclared()) {
+ raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(unresolvedEntity));
+ break;
+ }
+ setType(QXmlStreamReader::EntityReference);
+ name = &unresolvedEntity;
+ break;
+
+ case 240: {
+ sym(1).len += sym(2).len + 1;
+ QStringView reference = symView(2);
+ if (entityHash.contains(reference)) {
+ Entity &entity = entityHash[reference];
+ if (entity.unparsed) {
+ raiseWellFormedError(QXmlStream::tr("Reference to unparsed entity '%1'.").arg(reference));
+ } else {
+ if (!entity.hasBeenParsed) {
+ parseEntity(entity.value);
+ entity.hasBeenParsed = true;
+ }
+ if (entity.literal)
+ putStringLiteral(entity.value);
+ else if (referenceEntity(entity))
+ putReplacement(entity.value);
+ textBuffer.chop(2 + sym(2).len);
+ clearSym();
+ }
+ break;
+ }
+
+ if (entityResolver) {
+ QString replacementText = resolveUndeclaredEntity(reference.toString());
+ if (!replacementText.isNull()) {
+ putReplacement(replacementText);
+ textBuffer.chop(2 + sym(2).len);
+ clearSym();
+ break;
+ }
+ }
+
+ injectToken(UNRESOLVED_ENTITY);
+ unresolvedEntity = symString(2).toString();
+ textBuffer.chop(2 + sym(2).len);
+ clearSym();
+
+ } break;
+
+ case 241: {
+ sym(1).len += sym(2).len + 1;
+ QStringView reference = symView(2);
+ if (parameterEntityHash.contains(reference)) {
+ referenceToParameterEntityDetected = true;
+ Entity &entity = parameterEntityHash[reference];
+ if (entity.unparsed || entity.external) {
+ referenceToUnparsedEntityDetected = true;
+ } else {
+ if (referenceEntity(entity))
+ putString(entity.value);
+ textBuffer.chop(2 + sym(2).len);
+ clearSym();
+ }
+ } else if (entitiesMustBeDeclared()) {
+ raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(symString(2)));
+ }
+ } break;
+
+ case 242:
+ sym(1).len += sym(2).len + 1;
+ break;
+
+ case 243: {
+ sym(1).len += sym(2).len + 1;
+ QStringView reference = symView(2);
+ if (entityHash.contains(reference)) {
+ Entity &entity = entityHash[reference];
+ if (entity.unparsed || entity.value.isNull()) {
+ raiseWellFormedError(QXmlStream::tr("Reference to external entity '%1' in attribute value.").arg(reference));
+ break;
+ }
+ if (!entity.hasBeenParsed) {
+ parseEntity(entity.value);
+ entity.hasBeenParsed = true;
+ }
+ if (entity.literal)
+ putStringLiteral(entity.value);
+ else if (referenceEntity(entity))
+ putReplacementInAttributeValue(entity.value);
+ textBuffer.chop(2 + sym(2).len);
+ clearSym();
+ break;
+ }
+
+ if (entityResolver) {
+ QString replacementText = resolveUndeclaredEntity(reference.toString());
+ if (!replacementText.isNull()) {
+ putReplacement(replacementText);
+ textBuffer.chop(2 + sym(2).len);
+ clearSym();
+ break;
+ }
+ }
+ if (entitiesMustBeDeclared()) {
+ raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(reference));
+ }
+ } break;
+
+ case 244: {
+ if (uint s = resolveCharRef(3)) {
+ if (s >= 0xffff)
+ putStringLiteral(QString::fromUcs4(&s, 1));
+ else
+ putChar((LETTER << 16) | s);
+
+ textBuffer.chop(3 + sym(3).len);
+ clearSym();
+ } else {
+ raiseWellFormedError(QXmlStream::tr("Invalid character reference."));
+ }
+ } break;
+
+ case 247:
+ case 248:
+ sym(1).len += sym(2).len;
+ break;
+
+ case 259:
+ sym(1).len += fastScanSpace();
+ if (atEnd) {
+ resume(259);
+ return false;
+ }
+ break;
+
+ case 262: {
+ sym(1).len += fastScanName(&sym(1).prefix);
+ if (atEnd) {
+ resume(262);
+ return false;
+ }
+ } break;
+
+ case 263:
+ sym(1).len += fastScanName();
+ if (atEnd) {
+ resume(263);
+ return false;
+ }
+ break;
+
+ case 264:
+ case 265:
+ case 266:
+ case 267:
+ case 268:
+ sym(1).len += fastScanNMTOKEN();
+ if (atEnd) {
+ resume(268);
+ return false;
+ }
+
+ break;
+
+ default:
+ ;
+ } // switch
+ act = state_stack[tos] = nt_action (act, lhs[r] - TERMINAL_COUNT);
+ if (type != QXmlStreamReader::NoToken)
+ return true;
+ } else {
+ parseError();
+ break;
+ }
+ }
+ return false;
+}
+#endif //QT_NO_XMLSTREAMREADER.xml
+
+
+#endif // QXMLSTREAM_P_H
+
diff --git a/src/corelib/xml/qxmlutils.cpp b/src/corelib/serialization/qxmlutils.cpp
index 01c84251fd..01c84251fd 100644
--- a/src/corelib/xml/qxmlutils.cpp
+++ b/src/corelib/serialization/qxmlutils.cpp
diff --git a/src/corelib/xml/qxmlutils_p.h b/src/corelib/serialization/qxmlutils_p.h
index db6bddd5be..db6bddd5be 100644
--- a/src/corelib/xml/qxmlutils_p.h
+++ b/src/corelib/serialization/qxmlutils_p.h
diff --git a/src/corelib/serialization/serialization.pri b/src/corelib/serialization/serialization.pri
new file mode 100644
index 0000000000..3d039dc30f
--- /dev/null
+++ b/src/corelib/serialization/serialization.pri
@@ -0,0 +1,30 @@
+# Qt data formats core module
+
+HEADERS += \
+ serialization/qdatastream.h \
+ serialization/qdatastream_p.h \
+ serialization/qjson_p.h \
+ serialization/qjsondocument.h \
+ serialization/qjsonobject.h \
+ serialization/qjsonvalue.h \
+ serialization/qjsonarray.h \
+ serialization/qjsonwriter_p.h \
+ serialization/qjsonparser_p.h \
+ serialization/qtextstream.h \
+ serialization/qtextstream_p.h \
+ serialization/qxmlstream.h \
+ serialization/qxmlstream_p.h \
+ serialization/qxmlutils_p.h
+
+SOURCES += \
+ serialization/qdatastream.cpp \
+ serialization/qjson.cpp \
+ serialization/qjsondocument.cpp \
+ serialization/qjsonobject.cpp \
+ serialization/qjsonarray.cpp \
+ serialization/qjsonvalue.cpp \
+ serialization/qjsonwriter.cpp \
+ serialization/qjsonparser.cpp \
+ serialization/qtextstream.cpp \
+ serialization/qxmlstream.cpp \
+ serialization/qxmlutils.cpp
diff --git a/src/corelib/statemachine/qabstractstate.h b/src/corelib/statemachine/qabstractstate.h
index 02c7d9e830..ffc2eaae13 100644
--- a/src/corelib/statemachine/qabstractstate.h
+++ b/src/corelib/statemachine/qabstractstate.h
@@ -68,12 +68,12 @@ Q_SIGNALS:
void activeChanged(bool active);
protected:
- QAbstractState(QState *parent = Q_NULLPTR);
+ QAbstractState(QState *parent = nullptr);
virtual void onEntry(QEvent *event) = 0;
virtual void onExit(QEvent *event) = 0;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
protected:
QAbstractState(QAbstractStatePrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp
index 53c713d6a8..272e681fb4 100644
--- a/src/corelib/statemachine/qabstracttransition.cpp
+++ b/src/corelib/statemachine/qabstracttransition.cpp
@@ -258,7 +258,7 @@ void QAbstractTransition::setTargetStates(const QList<QAbstractState*> &targets)
// Verify if any of the new target states is a null-pointer:
for (int i = 0; i < targets.size(); ++i) {
- if (targets.at(i) == Q_NULLPTR) {
+ if (targets.at(i) == nullptr) {
qWarning("QAbstractTransition::setTargetStates: target state(s) cannot be null");
return;
}
diff --git a/src/corelib/statemachine/qabstracttransition.h b/src/corelib/statemachine/qabstracttransition.h
index b86d26e969..9b35e0cdb6 100644
--- a/src/corelib/statemachine/qabstracttransition.h
+++ b/src/corelib/statemachine/qabstracttransition.h
@@ -72,7 +72,7 @@ public:
};
Q_ENUM(TransitionType)
- QAbstractTransition(QState *sourceState = Q_NULLPTR);
+ QAbstractTransition(QState *sourceState = nullptr);
virtual ~QAbstractTransition();
QState *sourceState() const;
@@ -102,7 +102,7 @@ protected:
virtual void onTransition(QEvent *event) = 0;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
protected:
QAbstractTransition(QAbstractTransitionPrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qeventtransition.h b/src/corelib/statemachine/qeventtransition.h
index 3c66e72658..ff4a991162 100644
--- a/src/corelib/statemachine/qeventtransition.h
+++ b/src/corelib/statemachine/qeventtransition.h
@@ -54,8 +54,8 @@ class Q_CORE_EXPORT QEventTransition : public QAbstractTransition
Q_PROPERTY(QObject* eventSource READ eventSource WRITE setEventSource)
Q_PROPERTY(QEvent::Type eventType READ eventType WRITE setEventType)
public:
- QEventTransition(QState *sourceState = Q_NULLPTR);
- QEventTransition(QObject *object, QEvent::Type type, QState *sourceState = Q_NULLPTR);
+ QEventTransition(QState *sourceState = nullptr);
+ QEventTransition(QObject *object, QEvent::Type type, QState *sourceState = nullptr);
~QEventTransition();
QObject *eventSource() const;
@@ -65,10 +65,10 @@ public:
void setEventType(QEvent::Type type);
protected:
- bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
- void onTransition(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventTest(QEvent *event) override;
+ void onTransition(QEvent *event) override;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
protected:
QEventTransition(QEventTransitionPrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qfinalstate.h b/src/corelib/statemachine/qfinalstate.h
index 1563bef397..1e52a0411d 100644
--- a/src/corelib/statemachine/qfinalstate.h
+++ b/src/corelib/statemachine/qfinalstate.h
@@ -51,14 +51,14 @@ class Q_CORE_EXPORT QFinalState : public QAbstractState
{
Q_OBJECT
public:
- QFinalState(QState *parent = Q_NULLPTR);
+ QFinalState(QState *parent = nullptr);
~QFinalState();
protected:
- void onEntry(QEvent *event) Q_DECL_OVERRIDE;
- void onExit(QEvent *event) Q_DECL_OVERRIDE;
+ void onEntry(QEvent *event) override;
+ void onExit(QEvent *event) override;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
protected:
explicit QFinalState(QFinalStatePrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qhistorystate.cpp b/src/corelib/statemachine/qhistorystate.cpp
index a179d7c75b..d4fb214a31 100644
--- a/src/corelib/statemachine/qhistorystate.cpp
+++ b/src/corelib/statemachine/qhistorystate.cpp
@@ -203,7 +203,7 @@ void QHistoryState::setDefaultTransition(QAbstractTransition *transition)
QAbstractState *QHistoryState::defaultState() const
{
Q_D(const QHistoryState);
- return d->defaultTransition ? d->defaultTransition->targetState() : Q_NULLPTR;
+ return d->defaultTransition ? d->defaultTransition->targetState() : nullptr;
}
static inline bool isSoleEntry(const QList<QAbstractState*> &states, const QAbstractState * state)
diff --git a/src/corelib/statemachine/qhistorystate.h b/src/corelib/statemachine/qhistorystate.h
index c20053abf6..44f4c5d6d4 100644
--- a/src/corelib/statemachine/qhistorystate.h
+++ b/src/corelib/statemachine/qhistorystate.h
@@ -61,8 +61,8 @@ public:
};
Q_ENUM(HistoryType)
- QHistoryState(QState *parent = Q_NULLPTR);
- QHistoryState(HistoryType type, QState *parent = Q_NULLPTR);
+ QHistoryState(QState *parent = nullptr);
+ QHistoryState(HistoryType type, QState *parent = nullptr);
~QHistoryState();
QAbstractTransition *defaultTransition() const;
@@ -80,10 +80,10 @@ Q_SIGNALS:
void historyTypeChanged(QPrivateSignal);
protected:
- void onEntry(QEvent *event) Q_DECL_OVERRIDE;
- void onExit(QEvent *event) Q_DECL_OVERRIDE;
+ void onEntry(QEvent *event) override;
+ void onExit(QEvent *event) override;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
private:
Q_DISABLE_COPY(QHistoryState)
diff --git a/src/corelib/statemachine/qsignaltransition.cpp b/src/corelib/statemachine/qsignaltransition.cpp
index c05b4617b2..59e0c0d788 100644
--- a/src/corelib/statemachine/qsignaltransition.cpp
+++ b/src/corelib/statemachine/qsignaltransition.cpp
@@ -149,8 +149,7 @@ QSignalTransition::QSignalTransition(const QObject *sender, const char *signal,
}
/*!
- \fn QSignalTransition::QSignalTransition(const QObject *sender,
- PointerToMemberFunction signal, QState *sourceState)
+ \fn template <typename PointerToMemberFunction> QSignalTransition::QSignalTransition(const QObject *sender, PointerToMemberFunction signal, QState *sourceState)
\since 5.7
\overload
diff --git a/src/corelib/statemachine/qsignaltransition.h b/src/corelib/statemachine/qsignaltransition.h
index 97c2916d9a..e785a18c73 100644
--- a/src/corelib/statemachine/qsignaltransition.h
+++ b/src/corelib/statemachine/qsignaltransition.h
@@ -55,17 +55,17 @@ class Q_CORE_EXPORT QSignalTransition : public QAbstractTransition
Q_PROPERTY(QByteArray signal READ signal WRITE setSignal NOTIFY signalChanged)
public:
- QSignalTransition(QState *sourceState = Q_NULLPTR);
+ QSignalTransition(QState *sourceState = nullptr);
QSignalTransition(const QObject *sender, const char *signal,
- QState *sourceState = Q_NULLPTR);
+ QState *sourceState = nullptr);
#ifdef Q_QDOC
template<typename PointerToMemberFunction>
QSignalTransition(const QObject *object, PointerToMemberFunction signal,
- QState *sourceState = Q_NULLPTR);
+ QState *sourceState = nullptr);
#elif defined(Q_COMPILER_DELEGATING_CONSTRUCTORS)
template <typename Func>
QSignalTransition(const typename QtPrivate::FunctionPointer<Func>::Object *obj,
- Func sig, QState *srcState = Q_NULLPTR)
+ Func sig, QState *srcState = nullptr)
: QSignalTransition(obj, QMetaMethod::fromSignal(sig).methodSignature().constData(), srcState)
{
}
@@ -80,10 +80,10 @@ public:
void setSignal(const QByteArray &signal);
protected:
- bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
- void onTransition(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventTest(QEvent *event) override;
+ void onTransition(QEvent *event) override;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
Q_SIGNALS:
void senderObjectChanged(QPrivateSignal);
diff --git a/src/corelib/statemachine/qsignaltransition_p.h b/src/corelib/statemachine/qsignaltransition_p.h
index f270a5be4a..0666e600a4 100644
--- a/src/corelib/statemachine/qsignaltransition_p.h
+++ b/src/corelib/statemachine/qsignaltransition_p.h
@@ -70,7 +70,7 @@ public:
void unregister();
void maybeRegister();
- virtual void callOnTransition(QEvent *e) Q_DECL_OVERRIDE;
+ virtual void callOnTransition(QEvent *e) override;
const QObject *sender;
QByteArray signal;
diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp
index 76dcbf784b..2531874a87 100644
--- a/src/corelib/statemachine/qstate.cpp
+++ b/src/corelib/statemachine/qstate.cpp
@@ -341,8 +341,7 @@ void QState::addTransition(QAbstractTransition *transition)
}
/*!
- \fn QState::addTransition(const QObject *sender, PointerToMemberFunction signal,
- QAbstractState *target);
+ \fn template <typename PointerToMemberFunction> QState::addTransition(const QObject *sender, PointerToMemberFunction signal, QAbstractState *target);
\since 5.5
\overload
@@ -396,8 +395,8 @@ public:
: QAbstractTransition()
{ setTargetState(target); }
protected:
- void onTransition(QEvent *) Q_DECL_OVERRIDE {}
- bool eventTest(QEvent *) Q_DECL_OVERRIDE { return true; }
+ void onTransition(QEvent *) override {}
+ bool eventTest(QEvent *) override { return true; }
};
} // namespace
@@ -524,7 +523,7 @@ void QState::setChildMode(ChildMode mode)
if (mode == QState::ParallelStates && d->initialState) {
qWarning("QState::setChildMode: setting the child-mode of state %p to "
"parallel removes the initial state", this);
- d->initialState = Q_NULLPTR;
+ d->initialState = nullptr;
emit initialStateChanged(QState::QPrivateSignal());
}
diff --git a/src/corelib/statemachine/qstate.h b/src/corelib/statemachine/qstate.h
index 33f84c2de0..9f1f07dfcc 100644
--- a/src/corelib/statemachine/qstate.h
+++ b/src/corelib/statemachine/qstate.h
@@ -71,8 +71,8 @@ public:
};
Q_ENUM(RestorePolicy)
- QState(QState *parent = Q_NULLPTR);
- QState(ChildMode childMode, QState *parent = Q_NULLPTR);
+ QState(QState *parent = nullptr);
+ QState(ChildMode childMode, QState *parent = nullptr);
~QState();
QAbstractState *errorState() const;
@@ -116,10 +116,10 @@ Q_SIGNALS:
void errorStateChanged(QPrivateSignal);
protected:
- void onEntry(QEvent *event) Q_DECL_OVERRIDE;
- void onExit(QEvent *event) Q_DECL_OVERRIDE;
+ void onEntry(QEvent *event) override;
+ void onExit(QEvent *event) override;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
protected:
QState(QStatePrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index c2b5afd241..24734f99ac 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -560,7 +560,7 @@ QList<QAbstractTransition*> QStateMachinePrivate::selectTransitions(QEvent *even
QList<QAbstractTransition*> enabledTransitions;
const_cast<QStateMachine*>(q)->beginSelectTransitions(event);
for (QAbstractState *state : qAsConst(configuration_sorted)) {
- QVector<QState*> lst = getProperAncestors(state, Q_NULLPTR);
+ QVector<QState*> lst = getProperAncestors(state, nullptr);
if (QState *grp = toStandardState(state))
lst.prepend(grp);
bool found = false;
@@ -767,7 +767,7 @@ QSet<QAbstractState*> QStateMachinePrivate::computeExitSet_Unordered(QAbstractTr
QList<QAbstractState *> effectiveTargetStates = getEffectiveTargetStates(t, cache);
QAbstractState *domain = getTransitionDomain(t, effectiveTargetStates, cache);
- if (domain == Q_NULLPTR && !t->targetStates().isEmpty()) {
+ if (domain == nullptr && !t->targetStates().isEmpty()) {
// So we didn't find the least common ancestor for the source and target states of the
// transition. If there were not target states, that would be fine: then the transition
// will fire any events or signals, but not exit the state.
@@ -909,7 +909,7 @@ QAbstractState *QStateMachinePrivate::getTransitionDomain(QAbstractTransition *t
if (effectiveTargetStates.isEmpty())
return 0;
- QAbstractState *domain = Q_NULLPTR;
+ QAbstractState *domain = nullptr;
if (cache->transitionDomain(t, &domain))
return domain;
@@ -1721,8 +1721,8 @@ QAbstractTransition *QStateMachinePrivate::createInitialTransition() const
: QAbstractTransition()
{ setTargetStates(targets); }
protected:
- virtual bool eventTest(QEvent *) Q_DECL_OVERRIDE { return true; }
- virtual void onTransition(QEvent *) Q_DECL_OVERRIDE {}
+ virtual bool eventTest(QEvent *) override { return true; }
+ virtual void onTransition(QEvent *) override {}
};
QState *root = rootState();
@@ -2126,8 +2126,8 @@ public:
: QAbstractTransition()
{ setTargetState(target); }
protected:
- void onTransition(QEvent *) Q_DECL_OVERRIDE { deleteLater(); }
- bool eventTest(QEvent *) Q_DECL_OVERRIDE { return true; }
+ void onTransition(QEvent *) override { deleteLater(); }
+ bool eventTest(QEvent *) override { return true; }
};
} // namespace
diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h
index 4f31252eed..fd90b86fd5 100644
--- a/src/corelib/statemachine/qstatemachine.h
+++ b/src/corelib/statemachine/qstatemachine.h
@@ -109,8 +109,8 @@ public:
NoCommonAncestorForTransitionError
};
- explicit QStateMachine(QObject *parent = Q_NULLPTR);
- explicit QStateMachine(QState::ChildMode childMode, QObject *parent = Q_NULLPTR);
+ explicit QStateMachine(QObject *parent = nullptr);
+ explicit QStateMachine(QState::ChildMode childMode, QObject *parent = nullptr);
~QStateMachine();
void addState(QAbstractState *state);
@@ -141,7 +141,7 @@ public:
QSet<QAbstractState*> configuration() const;
#if QT_CONFIG(qeventtransition)
- bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *watched, QEvent *event) override;
#endif
public Q_SLOTS:
@@ -156,8 +156,8 @@ Q_SIGNALS:
protected:
- void onEntry(QEvent *event) Q_DECL_OVERRIDE;
- void onExit(QEvent *event) Q_DECL_OVERRIDE;
+ void onEntry(QEvent *event) override;
+ void onExit(QEvent *event) override;
virtual void beginSelectTransitions(QEvent *event);
virtual void endSelectTransitions(QEvent *event);
@@ -165,7 +165,7 @@ protected:
virtual void beginMicrostep(QEvent *event);
virtual void endMicrostep(QEvent *event);
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
protected:
QStateMachine(QStateMachinePrivate &dd, QObject *parent);
diff --git a/src/corelib/thread/qatomic.cpp b/src/corelib/thread/qatomic.cpp
index ccb0ee6923..c161bec537 100644
--- a/src/corelib/thread/qatomic.cpp
+++ b/src/corelib/thread/qatomic.cpp
@@ -239,17 +239,17 @@
Constructs a QAtomicInt with the given \a value.
*/
-/*! \fn QAtomicInteger::QAtomicInteger(T value)
+/*! \fn QAtomicInteger<T>::QAtomicInteger(T value)
Constructs a QAtomicInteger with the given \a value.
*/
-/*! \fn QAtomicInteger::QAtomicInteger(const QAtomicInteger &other)
+/*! \fn template <typename T> QAtomicInteger<T>::QAtomicInteger(const QAtomicInteger &other)
Constructs a copy of \a other.
*/
-/*! \fn QAtomicInteger &QAtomicInteger::operator=(const QAtomicInteger &other)
+/*! \fn template <typename T> QAtomicInteger &QAtomicInteger<T>::operator=(const QAtomicInteger &other)
Assigns \a other to this QAtomicInteger and returns a reference to
this QAtomicInteger.
@@ -257,7 +257,7 @@
/*!
- \fn T QAtomicInteger::load() const
+ \fn template <typename T> T QAtomicInteger<T>::load() const
Atomically loads the value of this QAtomicInteger using relaxed memory
ordering. The value is not modified in any way, but note that there's no
@@ -267,7 +267,7 @@
*/
/*!
- \fn T QAtomicInteger::loadAcquire() const
+ \fn template <typename T> T QAtomicInteger<T>::loadAcquire() const
Atomically loads the value of this QAtomicInteger using the "Acquire" memory
ordering. The value is not modified in any way, but note that there's no
@@ -277,7 +277,7 @@
*/
/*!
- \fn void QAtomicInteger::store(T newValue)
+ \fn template <typename T> void QAtomicInteger<T>::store(T newValue)
Atomically stores the \a newValue value into this atomic type, using
relaxed memory ordering.
@@ -286,7 +286,7 @@
*/
/*!
- \fn void QAtomicInteger::storeRelease(T newValue)
+ \fn template <typename T> void QAtomicInteger<T>::storeRelease(T newValue)
Atomically stores the \a newValue value into this atomic type, using
the "Release" memory ordering.
@@ -295,7 +295,7 @@
*/
/*!
- \fn QAtomicInteger::operator T() const
+ \fn template <typename T> QAtomicInteger<T>::operator T() const
\since 5.3
Atomically loads the value of this QAtomicInteger using a sequentially
@@ -307,29 +307,29 @@
*/
/*!
- \fn QAtomicInteger &QAtomicInteger::operator=(T newValue)
+ \fn template <typename T> QAtomicInteger &QAtomicInteger<T>::operator=(T)
\since 5.3
- Atomically stores the \a newValue value into this atomic type using a
+ Atomically stores the other value into this atomic type using a
sequentially consistent memory ordering if possible; or "Release" ordering
if not. This function returns a reference to this object.
\sa store(), storeRelease()
*/
-/*! \fn bool QAtomicInteger::isReferenceCountingNative()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isReferenceCountingNative()
Returns \c true if reference counting is implemented using atomic
processor instructions, false otherwise.
*/
-/*! \fn bool QAtomicInteger::isReferenceCountingWaitFree()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isReferenceCountingWaitFree()
Returns \c true if atomic reference counting is wait-free, false
otherwise.
*/
-/*! \fn bool QAtomicInteger::ref()
+/*! \fn template <typename T> bool QAtomicInteger<T>::ref()
Atomically increments the value of this QAtomicInteger. Returns \c true
if the new value is non-zero, false otherwise.
@@ -342,7 +342,7 @@
*/
/*!
- \fn T QAtomicInteger::operator++()
+ \fn template <typename T> T QAtomicInteger<T>::operator++()
\since 5.3
Atomically pre-increments the value of this QAtomicInteger. Returns the new
@@ -355,7 +355,7 @@
*/
/*!
- \fn T QAtomicInteger::operator++(int)
+ \fn template <typename T> T QAtomicInteger<T>::operator++(int)
\since 5.3
Atomically post-increments the value of this QAtomicInteger. Returns the old
@@ -367,7 +367,7 @@
\sa ref(), operator++(), operator--(int)
*/
-/*! \fn bool QAtomicInteger::deref()
+/*! \fn template <typename T> bool QAtomicInteger<T>::deref()
Atomically decrements the value of this QAtomicInteger. Returns \c true
if the new value is non-zero, false otherwise.
@@ -380,7 +380,7 @@
*/
/*!
- \fn T QAtomicInteger::operator--()
+ \fn template <typename T> T QAtomicInteger<T>::operator--()
\since 5.3
Atomically pre-decrements the value of this QAtomicInteger. Returns the new
@@ -393,7 +393,7 @@
*/
/*!
- \fn T QAtomicInteger::operator--(int)
+ \fn template <typename T> T QAtomicInteger<T>::operator--(int)
\since 5.3
Atomically post-decrements the value of this QAtomicInteger. Returns the old
@@ -405,18 +405,18 @@
\sa deref(), operator--(), operator++(int)
*/
-/*! \fn bool QAtomicInteger::isTestAndSetNative()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isTestAndSetNative()
Returns \c true if test-and-set is implemented using atomic processor
instructions, false otherwise.
*/
-/*! \fn bool QAtomicInteger::isTestAndSetWaitFree()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isTestAndSetWaitFree()
Returns \c true if atomic test-and-set is wait-free, false otherwise.
*/
-/*! \fn bool QAtomicInteger::testAndSetRelaxed(T expectedValue, T newValue)
+/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetRelaxed(T expectedValue, T newValue)
Atomic test-and-set.
@@ -430,7 +430,7 @@
processor to freely reorder memory accesses.
*/
-/*! \fn bool QAtomicInteger::testAndSetAcquire(T expectedValue, T newValue)
+/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetAcquire(T expectedValue, T newValue)
Atomic test-and-set.
@@ -445,7 +445,7 @@
be re-ordered before the atomic operation.
*/
-/*! \fn bool QAtomicInteger::testAndSetRelease(T expectedValue, T newValue)
+/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetRelease(T expectedValue, T newValue)
Atomic test-and-set.
@@ -460,7 +460,7 @@
re-ordered after the atomic operation.
*/
-/*! \fn bool QAtomicInteger::testAndSetOrdered(T expectedValue, T newValue)
+/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetOrdered(T expectedValue, T newValue)
Atomic test-and-set.
@@ -475,19 +475,19 @@
may not be re-ordered.
*/
-/*! \fn bool QAtomicInteger::isFetchAndStoreNative()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndStoreNative()
Returns \c true if fetch-and-store is implemented using atomic
processor instructions, false otherwise.
*/
-/*! \fn bool QAtomicInteger::isFetchAndStoreWaitFree()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndStoreWaitFree()
Returns \c true if atomic fetch-and-store is wait-free, false
otherwise.
*/
-/*! \fn T QAtomicInteger::fetchAndStoreRelaxed(T newValue)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreRelaxed(T newValue)
Atomic fetch-and-store.
@@ -499,7 +499,7 @@
processor to freely reorder memory accesses.
*/
-/*! \fn T QAtomicInteger::fetchAndStoreAcquire(T newValue)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreAcquire(T newValue)
Atomic fetch-and-store.
@@ -512,7 +512,7 @@
be re-ordered before the atomic operation.
*/
-/*! \fn T QAtomicInteger::fetchAndStoreRelease(T newValue)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreRelease(T newValue)
Atomic fetch-and-store.
@@ -525,7 +525,7 @@
re-ordered after the atomic operation.
*/
-/*! \fn T QAtomicInteger::fetchAndStoreOrdered(T newValue)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreOrdered(T newValue)
Atomic fetch-and-store.
@@ -538,19 +538,19 @@
may not be re-ordered.
*/
-/*! \fn bool QAtomicInteger::isFetchAndAddNative()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndAddNative()
Returns \c true if fetch-and-add is implemented using atomic
processor instructions, false otherwise.
*/
-/*! \fn bool QAtomicInteger::isFetchAndAddWaitFree()
+/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndAddWaitFree()
Returns \c true if atomic fetch-and-add is wait-free, false
otherwise.
*/
-/*! \fn T QAtomicInteger::fetchAndAddRelaxed(T valueToAdd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddRelaxed(T valueToAdd)
Atomic fetch-and-add.
@@ -564,7 +564,7 @@
\sa operator+=(), fetchAndSubRelaxed()
*/
-/*! \fn T QAtomicInteger::fetchAndAddAcquire(T valueToAdd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddAcquire(T valueToAdd)
Atomic fetch-and-add.
@@ -579,7 +579,7 @@
\sa operator+=(), fetchAndSubAcquire()
*/
-/*! \fn T QAtomicInteger::fetchAndAddRelease(T valueToAdd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddRelease(T valueToAdd)
Atomic fetch-and-add.
@@ -594,7 +594,7 @@
\sa operator+=(), fetchAndSubRelease()
*/
-/*! \fn T QAtomicInteger::fetchAndAddOrdered(T valueToAdd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddOrdered(T valueToAdd)
Atomic fetch-and-add.
@@ -609,13 +609,13 @@
\sa operator+=(), fetchAndSubOrdered()
*/
-/*! \fn T QAtomicInteger::operator+=(T valueToAdd)
+/*! \fn template <typename T> T QAtomicInteger<T>::operator+=(T value)
\since 5.3
Atomic add-and-fetch.
Reads the current value of this QAtomicInteger and then adds
- \a valueToAdd to the current value, returning the new value value.
+ \a value to the current value, returning the new value.
This function uses a sequentially consistent memory ordering if possible;
or "Ordered" ordering if not.
@@ -623,7 +623,7 @@
\sa fetchAndAddOrdered(), operator-=()
*/
-/*! \fn T QAtomicInteger::fetchAndSubRelaxed(T valueToSub)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubRelaxed(T valueToSub)
\since 5.3
Atomic fetch-and-sub.
@@ -638,7 +638,7 @@
\sa operator-=(), fetchAndAddRelaxed()
*/
-/*! \fn T QAtomicInteger::fetchAndSubAcquire(T valueToSub)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubAcquire(T valueToSub)
\since 5.3
Atomic fetch-and-sub.
@@ -654,7 +654,7 @@
\sa operator-=(), fetchAndAddAcquire()
*/
-/*! \fn T QAtomicInteger::fetchAndSubRelease(T valueToSub)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubRelease(T valueToSub)
\since 5.3
Atomic fetch-and-sub.
@@ -670,7 +670,7 @@
\sa operator-=(), fetchAndAddRelease()
*/
-/*! \fn T QAtomicInteger::fetchAndSubOrdered(T valueToSub)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubOrdered(T valueToSub)
\since 5.3
Atomic fetch-and-sub.
@@ -686,13 +686,13 @@
\sa operator-=(), fetchAndAddOrdered()
*/
-/*! \fn T QAtomicInteger::operator-=(T valueToSub)
+/*! \fn template <typename T> T QAtomicInteger<T>::operator-=(T value)
\since 5.3
Atomic sub-and-fetch.
Reads the current value of this QAtomicInteger and then subtracts
- \a valueToSub to the current value, returning the new value value.
+ \a value to the current value, returning the new value.
This function uses a sequentially consistent memory ordering if possible;
or "Ordered" ordering if not.
@@ -700,7 +700,7 @@
\sa fetchAndSubOrdered(), operator+=()
*/
-/*! \fn T QAtomicInteger::fetchAndOrRelaxed(T valueToOr)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrRelaxed(T valueToOr)
\since 5.3
Atomic fetch-and-or.
@@ -715,7 +715,7 @@
\sa operator|=()
*/
-/*! \fn T QAtomicInteger::fetchAndOrAcquire(T valueToOr)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrAcquire(T valueToOr)
\since 5.3
Atomic fetch-and-or.
@@ -731,7 +731,7 @@
\sa operator|=()
*/
-/*! \fn T QAtomicInteger::fetchAndOrRelease(T valueToOr)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrRelease(T valueToOr)
\since 5.3
Atomic fetch-and-or.
@@ -747,7 +747,7 @@
\sa operator|=()
*/
-/*! \fn T QAtomicInteger::fetchAndOrOrdered(T valueToOr)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrOrdered(T valueToOr)
\since 5.3
Atomic fetch-and-or.
@@ -763,13 +763,13 @@
\sa operator|=()
*/
-/*! \fn T QAtomicInteger::operator|=(T valueToOr)
+/*! \fn template <typename T> T QAtomicInteger<T>::operator|=(T value)
\since 5.3
Atomic or-and-fetch.
Reads the current value of this QAtomicInteger and then bitwise-ORs
- \a valueToOr to the current value, returning the new value value.
+ \a value to the current value, returning the new value.
This function uses a sequentially consistent memory ordering if possible;
or "Ordered" ordering if not.
@@ -777,7 +777,7 @@
\sa fetchAndOrOrdered()
*/
-/*! \fn T QAtomicInteger::fetchAndXorRelaxed(T valueToXor)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorRelaxed(T valueToXor)
\since 5.3
Atomic fetch-and-xor.
@@ -792,7 +792,7 @@
\sa operator^=()
*/
-/*! \fn T QAtomicInteger::fetchAndXorAcquire(T valueToXor)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorAcquire(T valueToXor)
\since 5.3
Atomic fetch-and-xor.
@@ -808,7 +808,7 @@
\sa operator^=()
*/
-/*! \fn T QAtomicInteger::fetchAndXorRelease(T valueToXor)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorRelease(T valueToXor)
\since 5.3
Atomic fetch-and-xor.
@@ -824,7 +824,7 @@
\sa operator^=()
*/
-/*! \fn T QAtomicInteger::fetchAndXorOrdered(T valueToXor)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorOrdered(T valueToXor)
\since 5.3
Atomic fetch-and-xor.
@@ -840,13 +840,13 @@
\sa operator^=()
*/
-/*! \fn T QAtomicInteger::operator^=(T valueToXor)
+/*! \fn template <typename T> T QAtomicInteger<T>::operator^=(T value)
\since 5.3
Atomic xor-and-fetch.
Reads the current value of this QAtomicInteger and then bitwise-XORs
- \a valueToXor to the current value, returning the new value value.
+ \a value to the current value, returning the new value.
This function uses a sequentially consistent memory ordering if possible;
or "Ordered" ordering if not.
@@ -854,7 +854,7 @@
\sa fetchAndXorOrdered()
*/
-/*! \fn T QAtomicInteger::fetchAndAndRelaxed(T valueToAnd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndRelaxed(T valueToAnd)
\since 5.3
Atomic fetch-and-and.
@@ -869,7 +869,7 @@
\sa operator&=()
*/
-/*! \fn T QAtomicInteger::fetchAndAndAcquire(T valueToAnd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndAcquire(T valueToAnd)
\since 5.3
Atomic fetch-and-and.
@@ -885,7 +885,7 @@
\sa operator&=()
*/
-/*! \fn T QAtomicInteger::fetchAndAndRelease(T valueToAnd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndRelease(T valueToAnd)
\since 5.3
Atomic fetch-and-and.
@@ -901,7 +901,7 @@
\sa operator&=()
*/
-/*! \fn T QAtomicInteger::fetchAndAndOrdered(T valueToAnd)
+/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndOrdered(T valueToAnd)
\since 5.3
Atomic fetch-and-and.
@@ -917,13 +917,13 @@
\sa operator&=()
*/
-/*! \fn T QAtomicInteger::operator&=(T valueToAnd)
+/*! \fn template <typename T> T QAtomicInteger<T>::operator&=(T value)
\since 5.3
Atomic add-and-fetch.
Reads the current value of this QAtomicInteger and then bitwise-ANDs
- \a valueToAnd to the current value, returning the new value value.
+ \a value to the current value, returning the new value.
This function uses a sequentially consistent memory ordering if possible;
or "Ordered" ordering if not.
@@ -958,7 +958,7 @@
This macro is defined when only certain generations of the
processor support atomic reference counting. Use the
- QAtomicInteger::isReferenceCountingNative() function to check what
+ QAtomicInteger<T>::isReferenceCountingNative() function to check what
your processor supports.
\e{nn} is the size of the integer, in bits (8, 16, 32 or 64).
@@ -1001,7 +1001,7 @@
This macro is defined when only certain generations of the
processor support atomic test-and-set on integers. Use the
- QAtomicInteger::isTestAndSetNative() function to check what your
+ QAtomicInteger<T>::isTestAndSetNative() function to check what your
processor supports.
\e{nn} is the size of the integer, in bits (8, 16, 32 or 64).
@@ -1044,7 +1044,7 @@
This macro is defined when only certain generations of the
processor support atomic fetch-and-store on integers. Use the
- QAtomicInteger::isFetchAndStoreNative() function to check what your
+ QAtomicInteger<T>::isFetchAndStoreNative() function to check what your
processor supports.
\e{nn} is the size of the integer, in bits (8, 16, 32 or 64).
@@ -1087,7 +1087,7 @@
This macro is defined when only certain generations of the
processor support atomic fetch-and-add on integers. Use the
- QAtomicInteger::isFetchAndAddNative() function to check what your
+ QAtomicInteger<T>::isFetchAndAddNative() function to check what your
processor supports.
\e{nn} is the size of the integer, in bits (8, 16, 32 or 64).
@@ -1260,24 +1260,24 @@
\sa QAtomicInteger
*/
-/*! \fn QAtomicPointer::QAtomicPointer(T *value)
+/*! \fn template <typename T> QAtomicPointer<T>::QAtomicPointer(T *value)
Constructs a QAtomicPointer with the given \a value.
*/
-/*! \fn QAtomicPointer::QAtomicPointer(const QAtomicPointer<T> &other)
+/*! \fn template <typename T> QAtomicPointer<T>::QAtomicPointer(const QAtomicPointer<T> &other)
Constructs a copy of \a other.
*/
-/*! \fn QAtomicPointer<T> &QAtomicPointer::operator=(const QAtomicPointer<T> &other)
+/*! \fn template <typename T> QAtomicPointer &QAtomicPointer<T>::operator=(const QAtomicPointer &other)
Assigns \a other to this QAtomicPointer and returns a reference to
this QAtomicPointer.
*/
/*!
- \fn T *QAtomicPointer::load() const
+ \fn template <typename T> T *QAtomicPointer<T>::load() const
Atomically loads the value of this QAtomicPointer using relaxed memory
ordering. The value is not modified in any way, but note that there's no
@@ -1287,7 +1287,7 @@
*/
/*!
- \fn T *QAtomicPointer::loadAcquire() const
+ \fn template <typename T> T *QAtomicPointer<T>::loadAcquire() const
Atomically loads the value of this QAtomicPointer using the "Acquire" memory
ordering. The value is not modified in any way, but note that there's no
@@ -1297,7 +1297,7 @@
*/
/*!
- \fn void QAtomicPointer::store(T *newValue)
+ \fn template <typename T> void QAtomicPointer<T>::store(T *newValue)
Atomically stores the \a newValue value into this atomic type, using
relaxed memory ordering.
@@ -1306,7 +1306,7 @@
*/
/*!
- \fn void QAtomicPointer::storeRelease(T *newValue)
+ \fn template <typename T> void QAtomicPointer<T>::storeRelease(T *newValue)
Atomically stores the \a newValue value into this atomic type, using
the "Release" memory ordering.
@@ -1314,18 +1314,18 @@
\sa store(), load()
*/
-/*! \fn bool QAtomicPointer::isTestAndSetNative()
+/*! \fn template <typename T> bool QAtomicPointer<T>::isTestAndSetNative()
Returns \c true if test-and-set is implemented using atomic processor
instructions, false otherwise.
*/
-/*! \fn bool QAtomicPointer::isTestAndSetWaitFree()
+/*! \fn template <typename T> bool QAtomicPointer<T>::isTestAndSetWaitFree()
Returns \c true if atomic test-and-set is wait-free, false otherwise.
*/
-/*! \fn bool QAtomicPointer::testAndSetRelaxed(T *expectedValue, T *newValue)
+/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
Atomic test-and-set.
@@ -1339,7 +1339,7 @@
processor to freely reorder memory accesses.
*/
-/*! \fn bool QAtomicPointer::testAndSetAcquire(T *expectedValue, T *newValue)
+/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
Atomic test-and-set.
@@ -1354,7 +1354,7 @@
be re-ordered before the atomic operation.
*/
-/*! \fn bool QAtomicPointer::testAndSetRelease(T *expectedValue, T *newValue)
+/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
Atomic test-and-set.
@@ -1369,7 +1369,7 @@
re-ordered after the atomic operation.
*/
-/*! \fn bool QAtomicPointer::testAndSetOrdered(T *expectedValue, T *newValue)
+/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
Atomic test-and-set.
@@ -1384,19 +1384,19 @@
may not be re-ordered.
*/
-/*! \fn bool QAtomicPointer::isFetchAndStoreNative()
+/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndStoreNative()
Returns \c true if fetch-and-store is implemented using atomic
processor instructions, false otherwise.
*/
-/*! \fn bool QAtomicPointer::isFetchAndStoreWaitFree()
+/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndStoreWaitFree()
Returns \c true if atomic fetch-and-store is wait-free, false
otherwise.
*/
-/*! \fn T *QAtomicPointer::fetchAndStoreRelaxed(T *newValue)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
Atomic fetch-and-store.
@@ -1408,7 +1408,7 @@
processor to freely reorder memory accesses.
*/
-/*! \fn T *QAtomicPointer::fetchAndStoreAcquire(T *newValue)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
Atomic fetch-and-store.
@@ -1421,7 +1421,7 @@
be re-ordered before the atomic operation.
*/
-/*! \fn T *QAtomicPointer::fetchAndStoreRelease(T *newValue)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
Atomic fetch-and-store.
@@ -1434,7 +1434,7 @@
re-ordered after the atomic operation.
*/
-/*! \fn T *QAtomicPointer::fetchAndStoreOrdered(T *newValue)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
Atomic fetch-and-store.
@@ -1447,19 +1447,19 @@
may not be re-ordered.
*/
-/*! \fn bool QAtomicPointer::isFetchAndAddNative()
+/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndAddNative()
Returns \c true if fetch-and-add is implemented using atomic
processor instructions, false otherwise.
*/
-/*! \fn bool QAtomicPointer::isFetchAndAddWaitFree()
+/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndAddWaitFree()
Returns \c true if atomic fetch-and-add is wait-free, false
otherwise.
*/
-/*! \fn T *QAtomicPointer::fetchAndAddRelaxed(qptrdiff valueToAdd)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
Atomic fetch-and-add.
@@ -1471,7 +1471,7 @@
processor to freely reorder memory accesses.
*/
-/*! \fn T *QAtomicPointer::fetchAndAddAcquire(qptrdiff valueToAdd)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
Atomic fetch-and-add.
@@ -1484,7 +1484,7 @@
be re-ordered before the atomic operation.
*/
-/*! \fn T *QAtomicPointer::fetchAndAddRelease(qptrdiff valueToAdd)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
Atomic fetch-and-add.
@@ -1497,7 +1497,7 @@
re-ordered after the atomic operation.
*/
-/*! \fn T *QAtomicPointer::fetchAndAddOrdered(qptrdiff valueToAdd)
+/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
Atomic fetch-and-add.
diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h
index f9eacbf6f0..f842534c38 100644
--- a/src/corelib/thread/qatomic.h
+++ b/src/corelib/thread/qatomic.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -79,7 +79,7 @@ public:
return *this;
}
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
T load() const;
T loadAcquire() const;
void store(T newValue);
@@ -168,9 +168,9 @@ class QAtomicPointer : public QBasicAtomicPointer<T>
{
public:
#ifdef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS
- constexpr QAtomicPointer(T *value = 0) Q_DECL_NOTHROW : QBasicAtomicPointer<T>(value) {}
+ constexpr QAtomicPointer(T *value = nullptr) Q_DECL_NOTHROW : QBasicAtomicPointer<T>(value) {}
#else
- inline QAtomicPointer(T *value = 0) Q_DECL_NOTHROW
+ inline QAtomicPointer(T *value = nullptr) Q_DECL_NOTHROW
{
this->store(value);
}
diff --git a/src/corelib/thread/qbasicatomic.h b/src/corelib/thread/qbasicatomic.h
index 24218e833a..92db7a6228 100644
--- a/src/corelib/thread/qbasicatomic.h
+++ b/src/corelib/thread/qbasicatomic.h
@@ -90,6 +90,7 @@ template <typename T>
class QBasicAtomicInteger
{
public:
+ typedef T Type;
typedef QAtomicOps<T> Ops;
// static check that this is a valid integer
Q_STATIC_ASSERT_X(QTypeInfo<T>::isIntegral, "template parameter is not an integral type");
diff --git a/src/corelib/thread/qexception.cpp b/src/corelib/thread/qexception.cpp
index 62c2b608d8..a3e30d5a7a 100644
--- a/src/corelib/thread/qexception.cpp
+++ b/src/corelib/thread/qexception.cpp
@@ -40,8 +40,7 @@
#include "qexception.h"
#include "QtCore/qshareddata.h"
-#ifndef QT_NO_QFUTURE
-#ifndef QT_NO_EXCEPTIONS
+#if !defined(QT_NO_EXCEPTIONS) || defined(Q_CLANG_QDOC)
QT_BEGIN_NAMESPACE
@@ -155,7 +154,7 @@ QUnhandledException *QUnhandledException::clone() const
return new QUnhandledException(*this);
}
-#ifndef Q_QDOC
+#if !defined(Q_CLANG_QDOC)
namespace QtPrivate {
@@ -171,7 +170,7 @@ public:
};
ExceptionHolder::ExceptionHolder(QException *exception)
-: base(exception ? new Base(exception) : Q_NULLPTR) {}
+: base(exception ? new Base(exception) : nullptr) {}
ExceptionHolder::ExceptionHolder(const ExceptionHolder &other)
: base(other.base)
@@ -188,7 +187,7 @@ ExceptionHolder::~ExceptionHolder()
QException *ExceptionHolder::exception() const
{
if (!base)
- return Q_NULLPTR;
+ return nullptr;
return base->exception;
}
@@ -220,9 +219,8 @@ bool ExceptionStore::hasThrown() const { return exceptionHolder.base->hasThrown;
} // namespace QtPrivate
-#endif //Q_QDOC
+#endif //Q_CLANG_QDOC
QT_END_NAMESPACE
#endif // QT_NO_EXCEPTIONS
-#endif // QT_NO_QFUTURE
diff --git a/src/corelib/thread/qexception.h b/src/corelib/thread/qexception.h
index b14d386c69..d33904c1f2 100644
--- a/src/corelib/thread/qexception.h
+++ b/src/corelib/thread/qexception.h
@@ -40,10 +40,6 @@
#ifndef QTCORE_QEXCEPTION_H
#define QTCORE_QEXCEPTION_H
-#include <QtCore/qglobal.h>
-
-#ifndef QT_NO_QFUTURE
-
#include <QtCore/qatomic.h>
#include <QtCore/qshareddata.h>
@@ -51,10 +47,12 @@
# include <exception>
#endif
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_EXCEPTIONS
+#if !defined(QT_NO_EXCEPTIONS) || defined(Q_CLANG_QDOC)
class Q_CORE_EXPORT QException : public std::exception
{
@@ -80,8 +78,8 @@ public:
throw()
#endif
;
- void raise() const Q_DECL_OVERRIDE;
- QUnhandledException *clone() const Q_DECL_OVERRIDE;
+ void raise() const override;
+ QUnhandledException *clone() const override;
};
namespace QtPrivate {
@@ -90,7 +88,7 @@ class Base;
class Q_CORE_EXPORT ExceptionHolder
{
public:
- ExceptionHolder(QException *exception = Q_NULLPTR);
+ ExceptionHolder(QException *exception = nullptr);
ExceptionHolder(const ExceptionHolder &other);
void operator=(const ExceptionHolder &other); // ### Qt6: copy-assign operator shouldn't return void. Remove this method and the copy-ctor, they are unneeded.
~ExceptionHolder();
@@ -128,6 +126,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
-
#endif
diff --git a/src/corelib/thread/qfutex_p.h b/src/corelib/thread/qfutex_p.h
new file mode 100644
index 0000000000..483664c783
--- /dev/null
+++ b/src/corelib/thread/qfutex_p.h
@@ -0,0 +1,142 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Intel Corporation.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QFUTEX_P_H
+#define QFUTEX_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QtDummyFutex {
+ Q_DECL_CONSTEXPR inline bool futexAvailable() { return false; }
+ template <typename Atomic>
+ inline bool futexWait(Atomic &, typename Atomic::Type, int = 0)
+ { Q_UNREACHABLE(); return false; }
+ template <typename Atomic> inline void futexWakeOne(Atomic &)
+ { Q_UNREACHABLE(); }
+ template <typename Atomic> inline void futexWakeAll(Atomic &)
+ { Q_UNREACHABLE(); }
+}
+
+QT_END_NAMESPACE
+
+#if defined(Q_OS_LINUX) && !defined(QT_LINUXBASE)
+// use Linux mutexes everywhere except for LSB builds
+# include <sys/syscall.h>
+# include <errno.h>
+# include <limits.h>
+# include <unistd.h>
+# include <asm/unistd.h>
+# include <linux/futex.h>
+# define QT_ALWAYS_USE_FUTEX
+
+// if not defined in linux/futex.h
+# define FUTEX_PRIVATE_FLAG 128 // added in v2.6.22
+
+QT_BEGIN_NAMESPACE
+namespace QtLinuxFutex {
+ constexpr inline bool futexAvailable() { return true; }
+ inline int _q_futex(int *addr, int op, int val, quintptr val2 = 0,
+ int *addr2 = nullptr, int val3 = 0) Q_DECL_NOTHROW
+ {
+ // we use __NR_futex because some libcs (like Android's bionic) don't
+ // provide SYS_futex etc.
+ return syscall(__NR_futex, addr, op | FUTEX_PRIVATE_FLAG, val, val2, addr2, val3);
+ }
+ template <typename T> int *addr(T *ptr)
+ {
+ int *int_addr = reinterpret_cast<int *>(ptr);
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ if (sizeof(T) > sizeof(int))
+ int_addr++; //We want a pointer to the least significant half
+#endif
+ return int_addr;
+ }
+
+ template <typename Atomic>
+ inline void futexWait(Atomic &futex, typename Atomic::Type expectedValue)
+ {
+ _q_futex(addr(&futex), FUTEX_WAIT, qintptr(expectedValue));
+ }
+ template <typename Atomic>
+ inline bool futexWait(Atomic &futex, typename Atomic::Type expectedValue, qint64 nstimeout)
+ {
+ struct timespec ts;
+ ts.tv_sec = nstimeout / 1000 / 1000 / 1000;
+ ts.tv_nsec = nstimeout % (1000 * 1000 * 1000);
+ int r = _q_futex(addr(&futex), FUTEX_WAIT, qintptr(expectedValue), quintptr(&ts));
+ return r == 0 || errno != ETIMEDOUT;
+ }
+ template <typename Atomic> inline void futexWakeOne(Atomic &futex)
+ {
+ _q_futex(addr(&futex), FUTEX_WAKE, 1);
+ }
+ template <typename Atomic> inline void futexWakeAll(Atomic &futex)
+ {
+ _q_futex(addr(&futex), FUTEX_WAKE, INT_MAX);
+ }
+ template <typename Atomic> inline
+ void futexWakeOp(Atomic &futex1, int wake1, int wake2, Atomic &futex2, quint32 op)
+ {
+ _q_futex(addr(&futex1), FUTEX_WAKE_OP, wake1, wake2, addr(&futex2), op);
+ }
+}
+namespace QtFutex = QtLinuxFutex;
+QT_END_NAMESPACE
+
+#else
+
+QT_BEGIN_NAMESPACE
+namespace QtFutex = QtDummyFutex;
+QT_END_NAMESPACE
+#endif
+
+#endif // QFUTEX_P_H
diff --git a/src/corelib/thread/qfuture.h b/src/corelib/thread/qfuture.h
index 1f0c747f40..af599c26db 100644
--- a/src/corelib/thread/qfuture.h
+++ b/src/corelib/thread/qfuture.h
@@ -42,11 +42,11 @@
#include <QtCore/qglobal.h>
-#ifndef QT_NO_QFUTURE
-
#include <QtCore/qfutureinterface.h>
#include <QtCore/qstring.h>
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
@@ -65,6 +65,11 @@ public:
explicit QFuture(QFutureInterface<T> *p) // internal
: d(*p)
{ }
+#if defined(Q_CLANG_QDOC)
+ ~QFuture() { }
+ QFuture(const QFuture<T> &) { }
+ QFuture<T> & operator=(const QFuture<T> &) { }
+#endif
bool operator==(const QFuture &other) const { return (d == other.d); }
bool operator!=(const QFuture &other) const { return (d != other.d); }
@@ -242,6 +247,4 @@ QFuture<void> qToVoidFuture(const QFuture<T> &future)
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
-
#endif // QFUTURE_H
diff --git a/src/corelib/thread/qfuture.qdoc b/src/corelib/thread/qfuture.qdoc
index 25306d5564..e607d090c5 100644
--- a/src/corelib/thread/qfuture.qdoc
+++ b/src/corelib/thread/qfuture.qdoc
@@ -93,23 +93,23 @@
\sa QFutureWatcher, {Qt Concurrent}
*/
-/*! \fn QFuture::QFuture()
+/*! \fn template <typename T> QFuture<T>::QFuture()
Constructs an empty, canceled future.
*/
-/*! \fn QFuture::QFuture(const QFuture &other)
+/*! \fn template <typename T> QFuture<T>::QFuture(const QFuture<T> &other)
Constructs a copy of \a other.
\sa operator=()
*/
-/*! \fn QFuture::QFuture(QFutureInterface<T> *resultHolder)
+/*! \fn template <typename T> QFuture<T>::QFuture(QFutureInterface<T> *resultHolder)
\internal
*/
-/*! \fn QFuture::~QFuture()
+/*! \fn template <typename T> QFuture<T>::~QFuture()
Destroys the future.
@@ -118,23 +118,23 @@
computation is completed before the future is destroyed.
*/
-/*! \fn QFuture &QFuture::operator=(const QFuture &other)
+/*! \fn template <typename T> QFuture<T> &QFuture<T>::operator=(const QFuture<T> &other)
Assigns \a other to this future and returns a reference to this future.
*/
-/*! \fn bool QFuture::operator==(const QFuture &other) const
+/*! \fn template <typename T> bool QFuture<T>::operator==(const QFuture &other) const
Returns \c true if \a other is a copy of this future; otherwise returns \c false.
*/
-/*! \fn bool QFuture::operator!=(const QFuture &other) const
+/*! \fn template <typename T> bool QFuture<T>::operator!=(const QFuture &other) const
Returns \c true if \a other is \e not a copy of this future; otherwise returns
false.
*/
-/*! \fn void QFuture::cancel()
+/*! \fn template <typename T> void QFuture<T>::cancel()
Cancels the asynchronous computation represented by this future. Note that
the cancelation is asynchronous. Use waitForFinished() after calling
@@ -150,7 +150,7 @@
but the future returned by QtConcurrent::mappedReduced() can.
*/
-/*! \fn bool QFuture::isCanceled() const
+/*! \fn template <typename T> bool QFuture<T>::isCanceled() const
Returns \c true if the asynchronous computation has been canceled with the
cancel() function; otherwise returns \c false.
@@ -159,7 +159,7 @@
function returns \c true. See cancel() for more details.
*/
-/*! \fn void QFuture::setPaused(bool paused)
+/*! \fn template <typename T> void QFuture<T>::setPaused(bool paused)
If \a paused is true, this function pauses the asynchronous computation
represented by the future. If the computation is already paused, this
@@ -178,7 +178,7 @@
\sa pause(), resume(), togglePaused()
*/
-/*! \fn bool QFuture::isPaused() const
+/*! \fn template <typename T> bool QFuture<T>::isPaused() const
Returns \c true if the asynchronous computation has been paused with the
pause() function; otherwise returns \c false.
@@ -189,7 +189,7 @@
\sa setPaused(), togglePaused()
*/
-/*! \fn void QFuture::pause()
+/*! \fn template <typename T> void QFuture<T>::pause()
Pauses the asynchronous computation represented by this future. This is a
convenience method that simply calls setPaused(true).
@@ -197,7 +197,7 @@
\sa resume()
*/
-/*! \fn void QFuture::resume()
+/*! \fn template <typename T> void QFuture<T>::resume()
Resumes the asynchronous computation represented by this future. This is a
convenience method that simply calls setPaused(false).
@@ -205,7 +205,7 @@
\sa pause()
*/
-/*! \fn void QFuture::togglePaused()
+/*! \fn template <typename T> void QFuture<T>::togglePaused()
Toggles the paused state of the asynchronous computation. In other words,
if the computation is currently paused, calling this function resumes it;
@@ -215,25 +215,25 @@
\sa setPaused(), pause(), resume()
*/
-/*! \fn bool QFuture::isStarted() const
+/*! \fn template <typename T> bool QFuture<T>::isStarted() const
Returns \c true if the asynchronous computation represented by this future
has been started; otherwise returns \c false.
*/
-/*! \fn bool QFuture::isFinished() const
+/*! \fn template <typename T> bool QFuture<T>::isFinished() const
Returns \c true if the asynchronous computation represented by this future
has finished; otherwise returns \c false.
*/
-/*! \fn bool QFuture::isRunning() const
+/*! \fn template <typename T> bool QFuture<T>::isRunning() const
Returns \c true if the asynchronous computation represented by this future is
currently running; otherwise returns \c false.
*/
-/*! \fn int QFuture::resultCount() const
+/*! \fn template <typename T> int QFuture<T>::resultCount() const
Returns the number of continuous results available in this future. The real
number of results stored might be different from this value, due to gaps
@@ -242,7 +242,7 @@
\sa result(), resultAt(), results()
*/
-/*! \fn int QFuture::progressValue() const
+/*! \fn template <typename T> int QFuture<T>::progressValue() const
Returns the current progress value, which is between the progressMinimum()
and progressMaximum().
@@ -250,21 +250,21 @@
\sa progressMinimum(), progressMaximum()
*/
-/*! \fn int QFuture::progressMinimum() const
+/*! \fn template <typename T> int QFuture<T>::progressMinimum() const
Returns the minimum progressValue().
\sa progressValue(), progressMaximum()
*/
-/*! \fn int QFuture::progressMaximum() const
+/*! \fn template <typename T> int QFuture<T>::progressMaximum() const
Returns the maximum progressValue().
\sa progressValue(), progressMinimum()
*/
-/*! \fn QString QFuture::progressText() const
+/*! \fn template <typename T> QString QFuture<T>::progressText() const
Returns the (optional) textual representation of the progress as reported
by the asynchronous computation.
@@ -273,13 +273,13 @@
progress, and as such, this function may return an empty string.
*/
-/*! \fn void QFuture::waitForFinished()
+/*! \fn template <typename T> void QFuture<T>::waitForFinished()
Waits for the asynchronous computation to finish (including cancel()ed
computations).
*/
-/*! \fn T QFuture::result() const
+/*! \fn template <typename T> T QFuture<T>::result() const
Returns the first result in the future. If the result is not immediately
available, this function will block and wait for the result to become
@@ -288,7 +288,7 @@
\sa resultAt(), results()
*/
-/*! \fn T QFuture::resultAt(int index) const
+/*! \fn template <typename T> T QFuture<T>::resultAt(int index) const
Returns the result at \a index in the future. If the result is not
immediately available, this function will block and wait for the result to
@@ -297,7 +297,7 @@
\sa result(), results(), resultCount()
*/
-/*! \fn bool QFuture::isResultReadyAt(int index) const
+/*! \fn template <typename T> bool QFuture<T>::isResultReadyAt(int index) const
Returns \c true if the result at \a index is immediately available; otherwise
returns \c false.
@@ -305,7 +305,7 @@
\sa resultAt(), resultCount()
*/
-/*! \fn QFuture::operator T() const
+/*! \fn template <typename T> QFuture<T>::operator T() const
Returns the first result in the future. If the result is not immediately
available, this function will block and wait for the result to become
@@ -315,7 +315,7 @@
\sa result(), resultAt(), results()
*/
-/*! \fn QList<T> QFuture::results() const
+/*! \fn template <typename T> QList<T> QFuture<T>::results() const
Returns all results from the future. If the results are not immediately
available, this function will block and wait for them to become available.
@@ -323,7 +323,7 @@
\sa result(), resultAt(), resultCount()
*/
-/*! \fn QFuture::const_iterator QFuture::begin() const
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::begin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first result in the
future.
@@ -331,7 +331,7 @@
\sa constBegin(), end()
*/
-/*! \fn QFuture::const_iterator QFuture::end() const
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::end() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary result
after the last result in the future.
@@ -339,7 +339,7 @@
\sa begin(), constEnd()
*/
-/*! \fn QFuture::const_iterator QFuture::constBegin() const
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first result in the
future.
@@ -347,7 +347,7 @@
\sa begin(), constEnd()
*/
-/*! \fn QFuture::const_iterator QFuture::constEnd() const
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary result
after the last result in the future.
@@ -403,7 +403,7 @@
Typedef for const T &. Provided for STL compatibility.
*/
-/*! \fn QFuture::const_iterator::const_iterator()
+/*! \fn template <typename T> QFuture<T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -414,31 +414,31 @@
\sa QFuture::constBegin(), QFuture::constEnd()
*/
-/*! \fn QFuture::const_iterator::const_iterator(QFuture const * const future, int index)
+/*! \fn template <typename T> QFuture<T>::const_iterator::const_iterator(QFuture const * const future, int index)
\internal
*/
-/*! \fn QFuture::const_iterator::const_iterator(const const_iterator &other)
+/*! \fn template <typename T> QFuture<T>::const_iterator::const_iterator(const const_iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn QFuture::const_iterator &QFuture::const_iterator::operator=(const const_iterator &other)
+/*! \fn template <typename T> QFuture<T>::const_iterator &QFuture<T>::const_iterator::operator=(const const_iterator &other)
Assigns \a other to this iterator.
*/
-/*! \fn const T &QFuture::const_iterator::operator*() const
+/*! \fn template <typename T> const T &QFuture<T>::const_iterator::operator*() const
Returns the current result.
*/
-/*! \fn const T *QFuture::const_iterator::operator->() const
+/*! \fn template <typename T> const T *QFuture<T>::const_iterator::operator->() const
Returns a pointer to the current result.
*/
-/*! \fn bool QFuture::const_iterator::operator!=(const const_iterator &other) const
+/*! \fn template <typename T> bool QFuture<T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different result than this iterator;
otherwise returns \c false.
@@ -446,7 +446,7 @@
\sa operator==()
*/
-/*! \fn bool QFuture::const_iterator::operator==(const const_iterator &other) const
+/*! \fn template <typename T> bool QFuture<T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same result as this iterator;
otherwise returns \c false.
@@ -454,17 +454,17 @@
\sa operator!=()
*/
-/*! \fn QFuture::const_iterator &QFuture::const_iterator::operator++()
+/*! \fn template <typename T> QFuture<T>::const_iterator &QFuture<T>::const_iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the next result
in the future and returns an iterator to the new current result.
- Calling this function on QFuture::constEnd() leads to undefined results.
+ Calling this function on QFuture<T>::constEnd() leads to undefined results.
\sa operator--()
*/
-/*! \fn QFuture::const_iterator QFuture::const_iterator::operator++(int)
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::const_iterator::operator++(int)
\overload
@@ -473,17 +473,17 @@
result.
*/
-/*! \fn QFuture::const_iterator &QFuture::const_iterator::operator--()
+/*! \fn template <typename T> QFuture<T>::const_iterator &QFuture<T>::const_iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding result current and
returns an iterator to the new current result.
- Calling this function on QFuture::constBegin() leads to undefined results.
+ Calling this function on QFuture<T>::constBegin() leads to undefined results.
\sa operator++()
*/
-/*! \fn QFuture::const_iterator QFuture::const_iterator::operator--(int)
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::const_iterator::operator--(int)
\overload
@@ -491,7 +491,7 @@
returns an iterator to the previously current result.
*/
-/*! \fn QFuture::const_iterator &QFuture::const_iterator::operator+=(int j)
+/*! \fn template <typename T> QFuture<T>::const_iterator &QFuture<T>::const_iterator::operator+=(int j)
Advances the iterator by \a j results. (If \a j is negative, the iterator
goes backward.)
@@ -499,7 +499,7 @@
\sa operator-=(), operator+()
*/
-/*! \fn QFuture::const_iterator &QFuture::const_iterator::operator-=(int j)
+/*! \fn template <typename T> QFuture<T>::const_iterator &QFuture<T>::const_iterator::operator-=(int j)
Makes the iterator go back by \a j results. (If \a j is negative, the
iterator goes forward.)
@@ -507,7 +507,7 @@
\sa operator+=(), operator-()
*/
-/*! \fn QFuture::const_iterator QFuture::const_iterator::operator+(int j) const
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::const_iterator::operator+(int j) const
Returns an iterator to the results at \a j positions forward from this
iterator. (If \a j is negative, the iterator goes backward.)
@@ -515,7 +515,7 @@
\sa operator-(), operator+=()
*/
-/*! \fn QFuture::const_iterator QFuture::const_iterator::operator-(int j) const
+/*! \fn template <typename T> QFuture<T>::const_iterator QFuture<T>::const_iterator::operator-(int j) const
Returns an iterator to the result at \a j positions backward from this
iterator. (If \a j is negative, the iterator goes forward.)
@@ -582,7 +582,7 @@
*/
/*!
- \fn QFutureIterator::QFutureIterator(const QFuture<T> &future)
+ \fn template <typename T> QFutureIterator<T>::QFutureIterator(const QFuture<T> &future)
Constructs an iterator for traversing \a future. The iterator is set to be
at the front of the result list (before the first result).
@@ -590,7 +590,7 @@
\sa operator=()
*/
-/*! \fn QFutureIterator &QFutureIterator::operator=(const QFuture<T> &future)
+/*! \fn template <typename T> QFutureIterator<T> &QFutureIterator<T>::operator=(const QFuture<T> &future)
Makes the iterator operate on \a future. The iterator is set to be at the
front of the result list (before the first result).
@@ -598,7 +598,7 @@
\sa toFront(), toBack()
*/
-/*! \fn void QFutureIterator::toFront()
+/*! \fn template <typename T> void QFutureIterator<T>::toFront()
Moves the iterator to the front of the result list (before the first
result).
@@ -606,14 +606,14 @@
\sa toBack(), next()
*/
-/*! \fn void QFutureIterator::toBack()
+/*! \fn template <typename T> void QFutureIterator<T>::toBack()
Moves the iterator to the back of the result list (after the last result).
\sa toFront(), previous()
*/
-/*! \fn bool QFutureIterator::hasNext() const
+/*! \fn template <typename T> bool QFutureIterator<T>::hasNext() const
Returns \c true if there is at least one result ahead of the iterator, e.g.,
the iterator is \e not at the back of the result list; otherwise returns
@@ -622,7 +622,7 @@
\sa hasPrevious(), next()
*/
-/*! \fn const T &QFutureIterator::next()
+/*! \fn template <typename T> const T &QFutureIterator<T>::next()
Returns the next result and advances the iterator by one position.
@@ -632,7 +632,7 @@
\sa hasNext(), peekNext(), previous()
*/
-/*! \fn const T &QFutureIterator::peekNext() const
+/*! \fn template <typename T> const T &QFutureIterator<T>::peekNext() const
Returns the next result without moving the iterator.
@@ -642,7 +642,7 @@
\sa hasNext(), next(), peekPrevious()
*/
-/*! \fn bool QFutureIterator::hasPrevious() const
+/*! \fn template <typename T> bool QFutureIterator<T>::hasPrevious() const
Returns \c true if there is at least one result ahead of the iterator, e.g.,
the iterator is \e not at the front of the result list; otherwise returns
@@ -651,7 +651,7 @@
\sa hasNext(), previous()
*/
-/*! \fn const T &QFutureIterator::previous()
+/*! \fn template <typename T> const T &QFutureIterator<T>::previous()
Returns the previous result and moves the iterator back by one position.
@@ -661,7 +661,7 @@
\sa hasPrevious(), peekPrevious(), next()
*/
-/*! \fn const T &QFutureIterator::peekPrevious() const
+/*! \fn template <typename T> const T &QFutureIterator<T>::peekPrevious() const
Returns the previous result without moving the iterator.
@@ -671,7 +671,7 @@
\sa hasPrevious(), previous(), peekNext()
*/
-/*! \fn bool QFutureIterator::findNext(const T &value)
+/*! \fn template <typename T> bool QFutureIterator<T>::findNext(const T &value)
Searches for \a value starting from the current iterator position forward.
Returns \c true if \a value is found; otherwise returns \c false.
@@ -683,7 +683,7 @@
\sa findPrevious()
*/
-/*! \fn bool QFutureIterator::findPrevious(const T &value)
+/*! \fn template <typename T> bool QFutureIterator<T>::findPrevious(const T &value)
Searches for \a value starting from the current iterator position
backward. Returns \c true if \a value is found; otherwise returns \c false.
diff --git a/src/corelib/thread/qfutureinterface.cpp b/src/corelib/thread/qfutureinterface.cpp
index 9db33c3af2..dfbed5fb0f 100644
--- a/src/corelib/thread/qfutureinterface.cpp
+++ b/src/corelib/thread/qfutureinterface.cpp
@@ -39,9 +39,6 @@
// qfutureinterface.h included from qfuture.h
#include "qfuture.h"
-
-#ifndef QT_NO_QFUTURE
-
#include "qfutureinterface_p.h"
#include <QtCore/qatomic.h>
@@ -608,5 +605,3 @@ void QFutureInterfaceBasePrivate::setState(QFutureInterfaceBase::State newState)
}
QT_END_NAMESPACE
-
-#endif // QT_NO_QFUTURE
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index 7b12f51e3e..3dd236752c 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -41,13 +41,12 @@
#define QFUTUREINTERFACE_H
#include <QtCore/qrunnable.h>
-
-#ifndef QT_NO_QFUTURE
-
#include <QtCore/qmutex.h>
#include <QtCore/qexception.h>
#include <QtCore/qresultstore.h>
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
@@ -291,10 +290,9 @@ public:
void reportResult(const void *, int) { }
void reportResults(const QVector<void> &, int) { }
- void reportFinished(const void * = Q_NULLPTR) { QFutureInterfaceBase::reportFinished(); }
+ void reportFinished(const void * = nullptr) { QFutureInterfaceBase::reportFinished(); }
};
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
#endif // QFUTUREINTERFACE_H
diff --git a/src/corelib/thread/qfutureinterface_p.h b/src/corelib/thread/qfutureinterface_p.h
index cf882dd9b4..63e534464f 100644
--- a/src/corelib/thread/qfutureinterface_p.h
+++ b/src/corelib/thread/qfutureinterface_p.h
@@ -59,6 +59,8 @@
#include <QtCore/qrunnable.h>
#include <QtCore/qthreadpool.h>
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
class QFutureCallOutEvent : public QEvent
diff --git a/src/corelib/thread/qfuturesynchronizer.h b/src/corelib/thread/qfuturesynchronizer.h
index 6bc2725024..5006ebb9cf 100644
--- a/src/corelib/thread/qfuturesynchronizer.h
+++ b/src/corelib/thread/qfuturesynchronizer.h
@@ -42,7 +42,7 @@
#include <QtCore/qfuture.h>
-#ifndef QT_NO_QFUTURE
+QT_REQUIRE_CONFIG(future);
QT_BEGIN_NAMESPACE
@@ -110,6 +110,5 @@ protected:
};
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
#endif // QFUTURESYNCHRONIZER_H
diff --git a/src/corelib/thread/qfuturesynchronizer.qdoc b/src/corelib/thread/qfuturesynchronizer.qdoc
index 580eae6982..c9c402ff87 100644
--- a/src/corelib/thread/qfuturesynchronizer.qdoc
+++ b/src/corelib/thread/qfuturesynchronizer.qdoc
@@ -68,13 +68,13 @@
*/
/*!
- \fn QFutureSynchronizer::QFutureSynchronizer()
+ \fn template <typename T> QFutureSynchronizer<T>::QFutureSynchronizer()
Constructs a QFutureSynchronizer.
*/
/*!
- \fn QFutureSynchronizer::QFutureSynchronizer(const QFuture<T> &future)
+ \fn template <typename T> QFutureSynchronizer<T>::QFutureSynchronizer(const QFuture<T> &future)
Constructs a QFutureSynchronizer and begins watching \a future by calling
addFuture().
@@ -83,7 +83,7 @@
*/
/*!
- \fn QFutureSynchronizer::~QFutureSynchronizer()
+ \fn template <typename T> QFutureSynchronizer<T>::~QFutureSynchronizer()
Calls waitForFinished() function to ensure that all futures have finished
before destroying this QFutureSynchronizer.
@@ -92,7 +92,7 @@
*/
/*!
- \fn void QFutureSynchronizer::setFuture(const QFuture<T> &future)
+ \fn template <typename T> void QFutureSynchronizer<T>::setFuture(const QFuture<T> &future)
Sets \a future to be the only future managed by this QFutureSynchronizer.
This is a convenience function that calls waitForFinished(),
@@ -102,7 +102,7 @@
*/
/*!
- \fn void QFutureSynchronizer::addFuture(const QFuture<T> &future)
+ \fn template <typename T> void QFutureSynchronizer<T>::addFuture(const QFuture<T> &future)
Adds \a future to the list of managed futures.
@@ -110,7 +110,7 @@
*/
/*!
- \fn void QFutureSynchronizer::waitForFinished()
+ \fn template <typename T> void QFutureSynchronizer<T>::waitForFinished()
Waits for all futures to finish. If cancelOnWait() returns \c true, each
future is canceled before waiting for them to finish.
@@ -119,7 +119,7 @@
*/
/*!
- \fn void QFutureSynchronizer::clearFutures()
+ \fn template <typename T> void QFutureSynchronizer<T>::clearFutures()
Removes all managed futures from this QFutureSynchronizer.
@@ -127,7 +127,7 @@
*/
/*!
- \fn QList<QFuture<T> > QFutureSynchronizer::futures() const
+ \fn template <typename T> QList<QFuture<T> > QFutureSynchronizer<T>::futures() const
Returns a list of all managed futures.
@@ -135,7 +135,7 @@
*/
/*!
- \fn void QFutureSynchronizer::setCancelOnWait(bool enabled)
+ \fn template <typename T> void QFutureSynchronizer<T>::setCancelOnWait(bool enabled)
Enables or disables the cancel-on-wait feature based on the \a enabled
argument. If \a enabled is true, the waitForFinished() function will cancel
@@ -145,7 +145,7 @@
*/
/*!
- \fn bool QFutureSynchronizer::cancelOnWait() const
+ \fn template <typename T> bool QFutureSynchronizer<T>::cancelOnWait() const
Returns \c true if the cancel-on-wait feature is enabled; otherwise returns
false. If cancel-on-wait is enabled, the waitForFinished() function will
diff --git a/src/corelib/thread/qfuturewatcher.cpp b/src/corelib/thread/qfuturewatcher.cpp
index d2ec18850f..8c4cb9a5a2 100644
--- a/src/corelib/thread/qfuturewatcher.cpp
+++ b/src/corelib/thread/qfuturewatcher.cpp
@@ -38,9 +38,6 @@
****************************************************************************/
#include "qfuturewatcher.h"
-
-#ifndef QT_NO_QFUTURE
-
#include "qfuturewatcher_p.h"
#include <QtCore/qcoreevent.h>
@@ -99,7 +96,7 @@ QT_BEGIN_NAMESPACE
\sa QFuture, {Qt Concurrent}
*/
-/*! \fn QFutureWatcher::QFutureWatcher(QObject *parent)
+/*! \fn template <typename T> QFutureWatcher<T>::QFutureWatcher(QObject *parent)
Constructs a new QFutureWatcher with the given \a parent.
*/
@@ -107,12 +104,12 @@ QFutureWatcherBase::QFutureWatcherBase(QObject *parent)
:QObject(*new QFutureWatcherBasePrivate, parent)
{ }
-/*! \fn QFutureWatcher::~QFutureWatcher()
+/*! \fn template <typename T> QFutureWatcher<T>::~QFutureWatcher()
Destroys the QFutureWatcher.
*/
-/*! \fn void QFutureWatcher::cancel()
+/*! \fn template <typename T> void QFutureWatcher<T>::cancel()
Cancels the asynchronous computation represented by the future(). Note that
the cancelation is asynchronous. Use waitForFinished() after calling
@@ -134,7 +131,7 @@ void QFutureWatcherBase::cancel()
futureInterface().cancel();
}
-/*! \fn void QFutureWatcher::setPaused(bool paused)
+/*! \fn template <typename T> void QFutureWatcher<T>::setPaused(bool paused)
If \a paused is true, this function pauses the asynchronous computation
represented by the future(). If the computation is already paused, this
@@ -156,7 +153,7 @@ void QFutureWatcherBase::setPaused(bool paused)
futureInterface().setPaused(paused);
}
-/*! \fn void QFutureWatcher::pause()
+/*! \fn template <typename T> void QFutureWatcher<T>::pause()
Pauses the asynchronous computation represented by the future(). This is a
convenience method that simply calls setPaused(true).
@@ -168,7 +165,7 @@ void QFutureWatcherBase::pause()
futureInterface().setPaused(true);
}
-/*! \fn void QFutureWatcher::resume()
+/*! \fn template <typename T> void QFutureWatcher<T>::resume()
Resumes the asynchronous computation represented by the future(). This is
a convenience method that simply calls setPaused(false).
@@ -180,7 +177,7 @@ void QFutureWatcherBase::resume()
futureInterface().setPaused(false);
}
-/*! \fn void QFutureWatcher::togglePaused()
+/*! \fn template <typename T> void QFutureWatcher<T>::togglePaused()
Toggles the paused state of the asynchronous computation. In other words,
if the computation is currently paused, calling this function resumes it;
@@ -194,7 +191,7 @@ void QFutureWatcherBase::togglePaused()
futureInterface().togglePaused();
}
-/*! \fn int QFutureWatcher::progressValue() const
+/*! \fn template <typename T> int QFutureWatcher<T>::progressValue() const
Returns the current progress value, which is between the progressMinimum()
and progressMaximum().
@@ -206,7 +203,7 @@ int QFutureWatcherBase::progressValue() const
return futureInterface().progressValue();
}
-/*! \fn int QFutureWatcher::progressMinimum() const
+/*! \fn template <typename T> int QFutureWatcher<T>::progressMinimum() const
Returns the minimum progressValue().
@@ -217,7 +214,7 @@ int QFutureWatcherBase::progressMinimum() const
return futureInterface().progressMinimum();
}
-/*! \fn int QFutureWatcher::progressMaximum() const
+/*! \fn template <typename T> int QFutureWatcher<T>::progressMaximum() const
Returns the maximum progressValue().
@@ -228,7 +225,7 @@ int QFutureWatcherBase::progressMaximum() const
return futureInterface().progressMaximum();
}
-/*! \fn QString QFutureWatcher::progressText() const
+/*! \fn template <typename T> QString QFutureWatcher<T>::progressText() const
Returns the (optional) textual representation of the progress as reported
by the asynchronous computation.
@@ -241,7 +238,7 @@ QString QFutureWatcherBase::progressText() const
return futureInterface().progressText();
}
-/*! \fn bool QFutureWatcher::isStarted() const
+/*! \fn template <typename T> bool QFutureWatcher<T>::isStarted() const
Returns \c true if the asynchronous computation represented by the future()
has been started; otherwise returns \c false.
@@ -251,7 +248,7 @@ bool QFutureWatcherBase::isStarted() const
return futureInterface().queryState(QFutureInterfaceBase::Started);
}
-/*! \fn bool QFutureWatcher::isFinished() const
+/*! \fn template <typename T> bool QFutureWatcher<T>::isFinished() const
Returns \c true if the asynchronous computation represented by the future()
has finished, or if no future has been set; otherwise returns \c false.
@@ -262,7 +259,7 @@ bool QFutureWatcherBase::isFinished() const
return d->finished;
}
-/*! \fn bool QFutureWatcher::isRunning() const
+/*! \fn template <typename T> bool QFutureWatcher<T>::isRunning() const
Returns \c true if the asynchronous computation represented by the future()
is currently running; otherwise returns \c false.
@@ -272,7 +269,7 @@ bool QFutureWatcherBase::isRunning() const
return futureInterface().queryState(QFutureInterfaceBase::Running);
}
-/*! \fn bool QFutureWatcher::isCanceled() const
+/*! \fn template <typename T> bool QFutureWatcher<T>::isCanceled() const
Returns \c true if the asynchronous computation has been canceled with the
cancel() function; otherwise returns \c false.
@@ -285,7 +282,7 @@ bool QFutureWatcherBase::isCanceled() const
return futureInterface().queryState(QFutureInterfaceBase::Canceled);
}
-/*! \fn bool QFutureWatcher::isPaused() const
+/*! \fn template <typename T> bool QFutureWatcher<T>::isPaused() const
Returns \c true if the asynchronous computation has been paused with the
pause() function; otherwise returns \c false.
@@ -300,7 +297,7 @@ bool QFutureWatcherBase::isPaused() const
return futureInterface().queryState(QFutureInterfaceBase::Paused);
}
-/*! \fn void QFutureWatcher::waitForFinished()
+/*! \fn template <typename T> void QFutureWatcher<T>::waitForFinished()
Waits for the asynchronous computation to finish (including cancel()ed
computations).
@@ -339,7 +336,7 @@ bool QFutureWatcherBase::event(QEvent *event)
return QObject::event(event);
}
-/*! \fn void QFutureWatcher::setPendingResultsLimit(int limit)
+/*! \fn template <typename T> void QFutureWatcher<T>::setPendingResultsLimit(int limit)
The setPendingResultsLimit() provides throttling control. When the number
of pending resultReadyAt() or resultsReadyAt() signals exceeds the
@@ -490,7 +487,7 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
}
-/*! \fn const T &QFutureWatcher::result() const
+/*! \fn template <typename T> const T &QFutureWatcher<T>::result() const
Returns the first result in the future(). If the result is not immediately
available, this function will block and wait for the result to become
@@ -499,7 +496,7 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
\sa resultAt()
*/
-/*! \fn const T &QFutureWatcher::resultAt(int index) const
+/*! \fn template <typename T> const T &QFutureWatcher<T>::resultAt(int index) const
Returns the result at \a index in the future(). If the result is not
immediately available, this function will block and wait for the result to
@@ -508,7 +505,7 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
\sa result()
*/
-/*! \fn void QFutureWatcher::setFuture(const QFuture<T> &future)
+/*! \fn template <typename T> void QFutureWatcher<T>::setFuture(const QFuture<T> &future)
Starts watching the given \a future.
@@ -520,44 +517,44 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
\e after doing the connections.
*/
-/*! \fn QFuture<T> QFutureWatcher::future() const
+/*! \fn template <typename T> QFuture<T> QFutureWatcher<T>::future() const
Returns the watched future.
*/
-/*! \fn void QFutureWatcher::started()
+/*! \fn template <typename T> void QFutureWatcher<T>::started()
This signal is emitted when this QFutureWatcher starts watching the future
set with setFuture().
*/
/*!
- \fn void QFutureWatcher::finished()
+ \fn template <typename T> void QFutureWatcher<T>::finished()
This signal is emitted when the watched future finishes.
*/
/*!
- \fn void QFutureWatcher::canceled()
+ \fn template <typename T> void QFutureWatcher<T>::canceled()
This signal is emitted if the watched future is canceled.
*/
-/*! \fn void QFutureWatcher::paused()
+/*! \fn template <typename T> void QFutureWatcher<T>::paused()
This signal is emitted when the watched future is paused.
*/
-/*! \fn void QFutureWatcher::resumed()
+/*! \fn template <typename T> void QFutureWatcher<T>::resumed()
This signal is emitted when the watched future is resumed.
*/
/*!
- \fn void QFutureWatcher::progressRangeChanged(int minimum, int maximum)
+ \fn template <typename T> void QFutureWatcher<T>::progressRangeChanged(int minimum, int maximum)
The progress range for the watched future has changed to \a minimum and
\a maximum
*/
/*!
- \fn void QFutureWatcher::progressValueChanged(int progressValue)
+ \fn template <typename T> void QFutureWatcher<T>::progressValueChanged(int progressValue)
This signal is emitted when the watched future reports progress,
\a progressValue gives the current progress. In order to avoid overloading
@@ -567,14 +564,14 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
\a progressValue equals the maximum value) will always be delivered.
*/
-/*! \fn void QFutureWatcher::progressTextChanged(const QString &progressText)
+/*! \fn template <typename T> void QFutureWatcher<T>::progressTextChanged(const QString &progressText)
This signal is emitted when the watched future reports textual progress
information, \a progressText.
*/
/*!
- \fn void QFutureWatcher::resultReadyAt(int index)
+ \fn template <typename T> void QFutureWatcher<T>::resultReadyAt(int index)
This signal is emitted when the watched future reports a ready result at
\a index. If the future reports multiple results, the index will indicate
@@ -583,7 +580,7 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
*/
/*!
- \fn void QFutureWatcher::resultsReadyAt(int beginIndex, int endIndex);
+ \fn template <typename T> void QFutureWatcher<T>::resultsReadyAt(int beginIndex, int endIndex);
This signal is emitted when the watched future reports ready results.
The results are indexed from \a beginIndex to \a endIndex.
@@ -593,5 +590,3 @@ void QFutureWatcherBasePrivate::sendCallOutEvent(QFutureCallOutEvent *event)
QT_END_NAMESPACE
#include "moc_qfuturewatcher.cpp"
-
-#endif // QT_NO_QFUTURE
diff --git a/src/corelib/thread/qfuturewatcher.h b/src/corelib/thread/qfuturewatcher.h
index 8a6716a8f7..fb7dd30499 100644
--- a/src/corelib/thread/qfuturewatcher.h
+++ b/src/corelib/thread/qfuturewatcher.h
@@ -41,11 +41,10 @@
#define QFUTUREWATCHER_H
#include <QtCore/qfuture.h>
-
-#ifndef QT_NO_QFUTURE
-
#include <QtCore/qobject.h>
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
@@ -58,7 +57,7 @@ class Q_CORE_EXPORT QFutureWatcherBase : public QObject
Q_DECLARE_PRIVATE(QFutureWatcherBase)
public:
- explicit QFutureWatcherBase(QObject *parent = Q_NULLPTR);
+ explicit QFutureWatcherBase(QObject *parent = nullptr);
// de-inline dtor
int progressValue() const;
@@ -76,7 +75,7 @@ public:
void setPendingResultsLimit(int limit);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
Q_SIGNALS:
void started();
@@ -98,8 +97,8 @@ public Q_SLOTS:
void togglePaused();
protected:
- void connectNotify (const QMetaMethod &signal) Q_DECL_OVERRIDE;
- void disconnectNotify (const QMetaMethod &signal) Q_DECL_OVERRIDE;
+ void connectNotify (const QMetaMethod &signal) override;
+ void disconnectNotify (const QMetaMethod &signal) override;
// called from setFuture() implemented in template sub-classes
void connectOutputInterface();
@@ -166,8 +165,8 @@ public Q_SLOTS:
private:
QFuture<T> m_future;
- const QFutureInterfaceBase &futureInterface() const Q_DECL_OVERRIDE { return m_future.d; }
- QFutureInterfaceBase &futureInterface() Q_DECL_OVERRIDE { return m_future.d; }
+ const QFutureInterfaceBase &futureInterface() const override { return m_future.d; }
+ QFutureInterfaceBase &futureInterface() override { return m_future.d; }
};
template <typename T>
@@ -185,7 +184,7 @@ template <>
class QFutureWatcher<void> : public QFutureWatcherBase
{
public:
- explicit QFutureWatcher(QObject *_parent = Q_NULLPTR)
+ explicit QFutureWatcher(QObject *_parent = nullptr)
: QFutureWatcherBase(_parent)
{ }
~QFutureWatcher()
@@ -197,8 +196,8 @@ public:
private:
QFuture<void> m_future;
- const QFutureInterfaceBase &futureInterface() const Q_DECL_OVERRIDE { return m_future.d; }
- QFutureInterfaceBase &futureInterface() Q_DECL_OVERRIDE { return m_future.d; }
+ const QFutureInterfaceBase &futureInterface() const override { return m_future.d; }
+ QFutureInterfaceBase &futureInterface() override { return m_future.d; }
};
Q_INLINE_TEMPLATE void QFutureWatcher<void>::setFuture(const QFuture<void> &_future)
@@ -212,6 +211,5 @@ Q_INLINE_TEMPLATE void QFutureWatcher<void>::setFuture(const QFuture<void> &_fut
}
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
#endif // QFUTUREWATCHER_H
diff --git a/src/corelib/thread/qfuturewatcher_p.h b/src/corelib/thread/qfuturewatcher_p.h
index e83bdaf45a..ead247b040 100644
--- a/src/corelib/thread/qfuturewatcher_p.h
+++ b/src/corelib/thread/qfuturewatcher_p.h
@@ -54,10 +54,10 @@
#include "qfutureinterface_p.h"
#include <qlist.h>
-#ifndef QT_NO_QFUTURE
-
#include <private/qobject_p.h>
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
class QFutureWatcherBase;
@@ -69,8 +69,8 @@ class QFutureWatcherBasePrivate : public QObjectPrivate,
public:
QFutureWatcherBasePrivate();
- void postCallOutEvent(const QFutureCallOutEvent &callOutEvent) Q_DECL_OVERRIDE;
- void callOutInterfaceDisconnected() Q_DECL_OVERRIDE;
+ void postCallOutEvent(const QFutureCallOutEvent &callOutEvent) override;
+ void callOutInterfaceDisconnected() override;
void sendCallOutEvent(QFutureCallOutEvent *event);
@@ -84,5 +84,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
#endif
diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp
index 3e7033451e..63fb6f3efb 100644
--- a/src/corelib/thread/qmutex.cpp
+++ b/src/corelib/thread/qmutex.cpp
@@ -276,7 +276,7 @@ bool QMutex::tryLock(int timeout) QT_MUTEX_LOCK_NOEXCEPT
returns \c false
*/
-/*! \fn bool QMutex::try_lock_for(std::chrono::duration<Rep, Period> duration)
+/*! \fn template <class Rep, class Period> bool QMutex::try_lock_for(std::chrono::duration<Rep, Period> duration)
\since 5.8
Attempts to lock the mutex. This function returns \c true if the lock
@@ -300,7 +300,7 @@ bool QMutex::tryLock(int timeout) QT_MUTEX_LOCK_NOEXCEPT
\sa lock(), unlock()
*/
-/*! \fn bool QMutex::try_lock_until(std::chrono::time_point<Clock, Duration> timePoint)
+/*! \fn template<class Clock, class Duration> bool QMutex::try_lock_until(std::chrono::time_point<Clock, Duration> timePoint)
\since 5.8
Attempts to lock the mutex. This function returns \c true if the lock
diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h
index 3d24379fa9..7cda53db5f 100644
--- a/src/corelib/thread/qmutex.h
+++ b/src/corelib/thread/qmutex.h
@@ -98,16 +98,16 @@ public:
private:
inline bool fastTryLock() Q_DECL_NOTHROW {
- return d_ptr.testAndSetAcquire(Q_NULLPTR, dummyLocked());
+ return d_ptr.testAndSetAcquire(nullptr, dummyLocked());
}
inline bool fastTryUnlock() Q_DECL_NOTHROW {
- return d_ptr.testAndSetRelease(dummyLocked(), Q_NULLPTR);
+ return d_ptr.testAndSetRelease(dummyLocked(), nullptr);
}
inline bool fastTryLock(QMutexData *&current) Q_DECL_NOTHROW {
- return d_ptr.testAndSetAcquire(Q_NULLPTR, dummyLocked(), current);
+ return d_ptr.testAndSetAcquire(nullptr, dummyLocked(), current);
}
inline bool fastTryUnlock(QMutexData *&current) Q_DECL_NOTHROW {
- return d_ptr.testAndSetRelease(dummyLocked(), Q_NULLPTR, current);
+ return d_ptr.testAndSetRelease(dummyLocked(), nullptr, current);
}
void lockInternal() QT_MUTEX_LOCK_NOEXCEPT;
@@ -139,7 +139,7 @@ public:
// Lockable concept
bool try_lock() QT_MUTEX_LOCK_NOEXCEPT { return tryLock(); }
-#if QT_HAS_INCLUDE(<chrono>)
+#if QT_HAS_INCLUDE(<chrono>) || defined(Q_CLANG_QDOC)
// TimedLockable concept
template <class Rep, class Period>
bool try_lock_for(std::chrono::duration<Rep, Period> duration)
@@ -293,7 +293,7 @@ public:
inline void unlock() Q_DECL_NOTHROW {}
void relock() Q_DECL_NOTHROW {}
- inline QMutex *mutex() const Q_DECL_NOTHROW { return Q_NULLPTR; }
+ inline QMutex *mutex() const Q_DECL_NOTHROW { return nullptr; }
private:
Q_DISABLE_COPY(QMutexLocker)
diff --git a/src/corelib/thread/qmutex_linux.cpp b/src/corelib/thread/qmutex_linux.cpp
index 5f6e74ac6f..d3d97ea108 100644
--- a/src/corelib/thread/qmutex_linux.cpp
+++ b/src/corelib/thread/qmutex_linux.cpp
@@ -44,15 +44,9 @@
#ifndef QT_NO_THREAD
#include "qatomic.h"
#include "qmutex_p.h"
-#include "qelapsedtimer.h"
+#include "qfutex_p.h"
-#include <linux/futex.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-#include <errno.h>
-#include <asm/unistd.h>
-
-#ifndef QT_LINUX_FUTEX
+#ifndef QT_ALWAYS_USE_FUTEX
# error "Qt build is broken: qmutex_linux.cpp is being built but futex support is not wanted"
#endif
@@ -63,6 +57,8 @@
QT_BEGIN_NAMESPACE
+using namespace QtFutex;
+
/*
* QBasicMutex implementation on Linux with futexes
*
@@ -107,20 +103,6 @@ QT_BEGIN_NAMESPACE
* waiting in the past. We then set the mutex to 0x0 and perform a FUTEX_WAKE.
*/
-static inline int _q_futex(void *addr, int op, int val, const struct timespec *timeout) Q_DECL_NOTHROW
-{
- volatile int *int_addr = reinterpret_cast<volatile int *>(addr);
-#if Q_BYTE_ORDER == Q_BIG_ENDIAN && QT_POINTER_SIZE == 8
- int_addr++; //We want a pointer to the 32 least significant bit of QMutex::d
-#endif
- int *addr2 = 0;
- int val2 = 0;
-
- // we use __NR_futex because some libcs (like Android's bionic) don't
- // provide SYS_futex etc.
- return syscall(__NR_futex, int_addr, op | FUTEX_PRIVATE_FLAG, val, timeout, addr2, val2);
-}
-
static inline QMutexData *dummyFutexValue()
{
return reinterpret_cast<QMutexData *>(quintptr(3));
@@ -136,36 +118,38 @@ bool lockInternal_helper(QBasicAtomicPointer<QMutexData> &d_ptr, int timeout = -
if (timeout == 0)
return false;
- struct timespec ts, *pts = 0;
- if (IsTimed && timeout > 0) {
- ts.tv_sec = timeout / 1000;
- ts.tv_nsec = (timeout % 1000) * 1000 * 1000;
- }
-
// the mutex is locked already, set a bit indicating we're waiting
- while (d_ptr.fetchAndStoreAcquire(dummyFutexValue()) != 0) {
- if (IsTimed && pts == &ts) {
- // recalculate the timeout
- qint64 xtimeout = qint64(timeout) * 1000 * 1000;
- xtimeout -= elapsedTimer->nsecsElapsed();
- if (xtimeout <= 0) {
- // timer expired after we returned
- return false;
- }
- ts.tv_sec = xtimeout / Q_INT64_C(1000) / 1000 / 1000;
- ts.tv_nsec = xtimeout % (Q_INT64_C(1000) * 1000 * 1000);
- }
- if (IsTimed && timeout > 0)
- pts = &ts;
+ if (d_ptr.fetchAndStoreAcquire(dummyFutexValue()) == nullptr)
+ return true;
+ qint64 nstimeout = timeout * Q_INT64_C(1000) * 1000;
+ qint64 remainingTime = nstimeout;
+ forever {
// successfully set the waiting bit, now sleep
- int r = _q_futex(&d_ptr, FUTEX_WAIT, quintptr(dummyFutexValue()), pts);
- if (IsTimed && r != 0 && errno == ETIMEDOUT)
- return false;
+ if (IsTimed && nstimeout >= 0) {
+ bool r = futexWait(d_ptr, dummyFutexValue(), remainingTime);
+ if (!r)
+ return false;
+
+ // we got woken up, so try to acquire the mutex
+ // note we must set to dummyFutexValue because there could be other threads
+ // also waiting
+ if (d_ptr.fetchAndStoreAcquire(dummyFutexValue()) == nullptr)
+ return true;
- // we got woken up, so try to acquire the mutex
- // note we must set to dummyFutexValue because there could be other threads
- // also waiting
+ // recalculate the timeout
+ remainingTime = nstimeout - elapsedTimer->nsecsElapsed();
+ if (remainingTime <= 0)
+ return false;
+ } else {
+ futexWait(d_ptr, dummyFutexValue());
+
+ // we got woken up, so try to acquire the mutex
+ // note we must set to dummyFutexValue because there could be other threads
+ // also waiting
+ if (d_ptr.fetchAndStoreAcquire(dummyFutexValue()) == nullptr)
+ return true;
+ }
}
Q_ASSERT(d_ptr.load());
@@ -195,10 +179,9 @@ void QBasicMutex::unlockInternal() Q_DECL_NOTHROW
Q_ASSERT(!isRecursive());
d_ptr.storeRelease(0);
- _q_futex(&d_ptr, FUTEX_WAKE, 1, 0);
+ futexWakeOne(d_ptr);
}
-
QT_END_NAMESPACE
#endif // QT_NO_THREAD
diff --git a/src/corelib/thread/qreadwritelock.h b/src/corelib/thread/qreadwritelock.h
index 777efdb3bf..ecdb98f2f5 100644
--- a/src/corelib/thread/qreadwritelock.h
+++ b/src/corelib/thread/qreadwritelock.h
@@ -205,7 +205,7 @@ public:
static inline void unlock() Q_DECL_NOTHROW { }
static inline void relock() Q_DECL_NOTHROW { }
- static inline QReadWriteLock *readWriteLock() Q_DECL_NOTHROW { return Q_NULLPTR; }
+ static inline QReadWriteLock *readWriteLock() Q_DECL_NOTHROW { return nullptr; }
private:
Q_DISABLE_COPY(QReadLocker)
@@ -219,7 +219,7 @@ public:
static inline void unlock() Q_DECL_NOTHROW { }
static inline void relock() Q_DECL_NOTHROW { }
- static inline QReadWriteLock *readWriteLock() Q_DECL_NOTHROW { return Q_NULLPTR; }
+ static inline QReadWriteLock *readWriteLock() Q_DECL_NOTHROW { return nullptr; }
private:
Q_DISABLE_COPY(QWriteLocker)
diff --git a/src/corelib/thread/qresultstore.cpp b/src/corelib/thread/qresultstore.cpp
index 9a6fcec678..e0ce1b4b78 100644
--- a/src/corelib/thread/qresultstore.cpp
+++ b/src/corelib/thread/qresultstore.cpp
@@ -39,8 +39,6 @@
#include "qresultstore.h"
-#ifndef QT_NO_QFUTURE
-
QT_BEGIN_NAMESPACE
namespace QtPrivate {
@@ -256,5 +254,3 @@ int ResultStoreBase::updateInsertIndex(int index, int _count)
} // namespace QtPrivate
QT_END_NAMESPACE
-
-#endif // QT_NO_QFUTURE
diff --git a/src/corelib/thread/qresultstore.h b/src/corelib/thread/qresultstore.h
index 6c814ef854..39f0a6d1bb 100644
--- a/src/corelib/thread/qresultstore.h
+++ b/src/corelib/thread/qresultstore.h
@@ -40,13 +40,11 @@
#ifndef QTCORE_RESULTSTORE_H
#define QTCORE_RESULTSTORE_H
-#include <QtCore/qglobal.h>
-
-#ifndef QT_NO_QFUTURE
-
#include <QtCore/qmap.h>
#include <QtCore/qdebug.h>
+QT_REQUIRE_CONFIG(future);
+
QT_BEGIN_NAMESPACE
@@ -67,8 +65,8 @@ class ResultItem
public:
ResultItem(const void *_result, int _count) : m_count(_count), result(_result) { } // contruct with vector of results
ResultItem(const void *_result) : m_count(0), result(_result) { } // construct with result
- ResultItem() : m_count(0), result(Q_NULLPTR) { }
- bool isValid() const { return result != Q_NULLPTR; }
+ ResultItem() : m_count(0), result(nullptr) { }
+ bool isValid() const { return result != nullptr; }
bool isVector() const { return m_count != 0; }
int count() const { return (m_count == 0) ? 1 : m_count; }
int m_count; // result is either a pointer to a result or to a vector of results,
@@ -202,6 +200,4 @@ Q_DECLARE_TYPEINFO(QtPrivate::ResultItem, Q_PRIMITIVE_TYPE);
QT_END_NAMESPACE
-#endif // QT_NO_QFUTURE
-
#endif
diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp
index 37736b3960..012628ef63 100644
--- a/src/corelib/thread/qsemaphore.cpp
+++ b/src/corelib/thread/qsemaphore.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2017 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -41,12 +42,15 @@
#ifndef QT_NO_THREAD
#include "qmutex.h"
+#include "qfutex_p.h"
#include "qwaitcondition.h"
#include "qdeadlinetimer.h"
#include "qdatetime.h"
QT_BEGIN_NAMESPACE
+using namespace QtFutex;
+
/*!
\class QSemaphore
\inmodule QtCore
@@ -97,6 +101,117 @@ QT_BEGIN_NAMESPACE
\sa QSemaphoreReleaser, QMutex, QWaitCondition, QThread, {Semaphores Example}
*/
+/*
+ QSemaphore futex operation
+
+ QSemaphore stores a 32-bit integer with the counter of currently available
+ tokens (value between 0 and INT_MAX). When a thread attempts to acquire n
+ tokens and the counter is larger than that, we perform a compare-and-swap
+ with the new count. If that succeeds, the acquisition worked; if not, we
+ loop again because the counter changed. If there were not enough tokens,
+ we'll perform a futex-wait.
+
+ Before we do, we set the high bit in the futex to indicate that semaphore
+ is contended: that is, there's a thread waiting for more tokens. On
+ release() for n tokens, we perform a fetch-and-add of n and then check if
+ that high bit was set. If it was, then we clear that bit and perform a
+ futex-wake on the semaphore to indicate the waiting threads can wake up and
+ acquire tokens. Which ones get woken up is unspecified.
+
+ If the system has the ability to wake up a precise number of threads, has
+ Linux's FUTEX_WAKE_OP functionality, and is 64-bit, we'll use the high word
+ as a copy of the low word, but the sign bit indicating the presence of a
+ thread waiting for multiple tokens. So when releasing n tokens on those
+ systems, we tell the kernel to wake up n single-token threads and all of
+ the multi-token ones, then clear that wait bit. Which threads get woken up
+ is unspecified, but it's likely single-token threads will get woken up
+ first.
+ */
+static const quint32 futexContendedBit = 1U << 31;
+
+static int futexAvailCounter(quintptr v)
+{
+ // the low 31 bits
+ return int(v & (futexContendedBit - 1));
+}
+
+static quintptr futexCounterParcel(int n)
+{
+ // replicate the 31 bits if we're on 64-bit
+ quint64 nn = quint32(n);
+ nn |= (nn << 32);
+ return quintptr(nn);
+}
+
+static QBasicAtomicInteger<quint32> *futexLow32(QBasicAtomicInteger<quintptr> *ptr)
+{
+ auto result = reinterpret_cast<QBasicAtomicInteger<quint32> *>(ptr);
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN && QT_POINTER_SIZE > 4
+ ++result;
+#endif
+ return result;
+}
+
+#ifdef FUTEX_OP
+// quintptr might be 32bit, in which case we want this to be 0, without implicitly casting.
+static const quintptr futexMultiWaiterBit = static_cast<quintptr>(Q_UINT64_C(1) << 63);
+static QBasicAtomicInteger<quint32> *futexHigh32(QBasicAtomicInteger<quintptr> *ptr)
+{
+ auto result = reinterpret_cast<QBasicAtomicInteger<quint32> *>(ptr);
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN && QT_POINTER_SIZE > 4
+ ++result;
+#endif
+ return result;
+}
+#endif
+
+template <bool IsTimed> bool futexSemaphoreTryAcquire(QBasicAtomicInteger<quintptr> &u, int n, int timeout)
+{
+ QDeadlineTimer timer(IsTimed ? QDeadlineTimer(timeout) : QDeadlineTimer());
+ quintptr curValue = u.loadAcquire();
+ qint64 remainingTime = timeout * Q_INT64_C(1000) * 1000;
+ forever {
+ int available = futexAvailCounter(curValue);
+ if (available >= n) {
+ // try to acquire
+ quintptr newValue = curValue - futexCounterParcel(n);
+ if (u.testAndSetOrdered(curValue, newValue, curValue))
+ return true; // succeeded!
+ continue;
+ }
+
+ // not enough tokens available, put us to wait
+ if (remainingTime == 0)
+ return false;
+
+ // set the contended and multi-wait bits
+ quintptr bitsToSet = futexContendedBit;
+ auto ptr = futexLow32(&u);
+#ifdef FUTEX_OP
+ if (n > 1 && sizeof(curValue) >= sizeof(int)) {
+ bitsToSet |= futexMultiWaiterBit;
+ ptr = futexHigh32(&u);
+ }
+#endif
+
+ // the value is the same for either branch
+ u.fetchAndOrRelaxed(bitsToSet);
+ curValue |= bitsToSet;
+
+ if (IsTimed && remainingTime > 0) {
+ bool timedout = !futexWait(*ptr, curValue, remainingTime);
+ if (timedout)
+ return false;
+ } else {
+ futexWait(*ptr, curValue);
+ }
+
+ curValue = u.loadAcquire();
+ if (IsTimed)
+ remainingTime = timer.remainingTimeNSecs();
+ }
+}
+
class QSemaphorePrivate {
public:
inline QSemaphorePrivate(int n) : avail(n) { }
@@ -116,7 +231,10 @@ public:
QSemaphore::QSemaphore(int n)
{
Q_ASSERT_X(n >= 0, "QSemaphore", "parameter 'n' must be non-negative");
- d = new QSemaphorePrivate(n);
+ if (futexAvailable())
+ u.store(n);
+ else
+ d = new QSemaphorePrivate(n);
}
/*!
@@ -126,7 +244,10 @@ QSemaphore::QSemaphore(int n)
undefined behavior.
*/
QSemaphore::~QSemaphore()
-{ delete d; }
+{
+ if (!futexAvailable())
+ delete d;
+}
/*!
Tries to acquire \c n resources guarded by the semaphore. If \a n
@@ -138,6 +259,12 @@ QSemaphore::~QSemaphore()
void QSemaphore::acquire(int n)
{
Q_ASSERT_X(n >= 0, "QSemaphore::acquire", "parameter 'n' must be non-negative");
+
+ if (futexAvailable()) {
+ futexSemaphoreTryAcquire<false>(u, n, -1);
+ return;
+ }
+
QMutexLocker locker(&d->mutex);
while (n > d->avail)
d->cond.wait(locker.mutex());
@@ -160,6 +287,69 @@ void QSemaphore::acquire(int n)
void QSemaphore::release(int n)
{
Q_ASSERT_X(n >= 0, "QSemaphore::release", "parameter 'n' must be non-negative");
+
+ if (futexAvailable()) {
+ quintptr prevValue = u.fetchAndAddRelease(futexCounterParcel(n));
+ if (prevValue & futexContendedBit) {
+#ifdef FUTEX_OP
+ if (sizeof(u) == sizeof(int)) {
+ /*
+ On 32-bit systems, all waiters are waiting on the same address,
+ so we'll wake them all and ask the kernel to clear the high bit.
+
+ atomic {
+ int oldval = u;
+ u = oldval & ~(1 << 31);
+ futexWake(u, INT_MAX);
+ if (oldval == 0) // impossible condition
+ futexWake(u, INT_MAX);
+ }
+ */
+ quint32 op = FUTEX_OP_ANDN | FUTEX_OP_OPARG_SHIFT;
+ quint32 oparg = 31;
+ quint32 cmp = FUTEX_OP_CMP_EQ;
+ quint32 cmparg = 0;
+ futexWakeOp(u, INT_MAX, INT_MAX, u, FUTEX_OP(op, oparg, cmp, cmparg));
+ } else {
+ /*
+ On 64-bit systems, the single-token waiters wait on the low half
+ and the multi-token waiters wait on the upper half. So we ask
+ the kernel to wake up n single-token waiters and all multi-token
+ waiters (if any), then clear the multi-token wait bit.
+
+ That means we must clear the contention bit ourselves. See
+ below for handling the race.
+
+ atomic {
+ int oldval = *upper;
+ *upper = oldval & ~(1 << 31);
+ futexWake(lower, n);
+ if (oldval < 0) // sign bit set
+ futexWake(upper, INT_MAX);
+ }
+ */
+ quint32 op = FUTEX_OP_ANDN | FUTEX_OP_OPARG_SHIFT;
+ quint32 oparg = 31;
+ quint32 cmp = FUTEX_OP_CMP_LT;
+ quint32 cmparg = 0;
+ futexLow32(&u)->fetchAndAndRelease(futexContendedBit - 1);
+ futexWakeOp(*futexLow32(&u), n, INT_MAX, *futexHigh32(&u), FUTEX_OP(op, oparg, cmp, cmparg));
+ }
+#else
+ // Unset the bit and wake everyone. There are two possibibilies
+ // under which a thread can set the bit between the AND and the
+ // futexWake:
+ // 1) it did see the new counter value, but it wasn't enough for
+ // its acquisition anyway, so it has to wait;
+ // 2) it did not see the new counter value, in which case its
+ // futexWait will fail.
+ u.fetchAndAndRelease(futexContendedBit - 1);
+ futexWakeAll(u);
+#endif
+ }
+ return;
+ }
+
QMutexLocker locker(&d->mutex);
d->avail += n;
d->cond.wakeAll();
@@ -173,6 +363,9 @@ void QSemaphore::release(int n)
*/
int QSemaphore::available() const
{
+ if (futexAvailable())
+ return futexAvailCounter(u.load());
+
QMutexLocker locker(&d->mutex);
return d->avail;
}
@@ -191,6 +384,10 @@ int QSemaphore::available() const
bool QSemaphore::tryAcquire(int n)
{
Q_ASSERT_X(n >= 0, "QSemaphore::tryAcquire", "parameter 'n' must be non-negative");
+
+ if (futexAvailable())
+ return futexSemaphoreTryAcquire<false>(u, n, 0);
+
QMutexLocker locker(&d->mutex);
if (n > d->avail)
return false;
@@ -222,6 +419,9 @@ bool QSemaphore::tryAcquire(int n, int timeout)
// but QDeadlineTimer only accepts -1.
timeout = qMax(timeout, -1);
+ if (futexAvailable())
+ return futexSemaphoreTryAcquire<true>(u, n, timeout);
+
QDeadlineTimer timer(timeout);
QMutexLocker locker(&d->mutex);
qint64 remainingTime = timer.remainingTime();
diff --git a/src/corelib/thread/qsemaphore.h b/src/corelib/thread/qsemaphore.h
index 9de23173e8..2639085e99 100644
--- a/src/corelib/thread/qsemaphore.h
+++ b/src/corelib/thread/qsemaphore.h
@@ -66,7 +66,10 @@ public:
private:
Q_DISABLE_COPY(QSemaphore)
- QSemaphorePrivate *d;
+ union {
+ QSemaphorePrivate *d;
+ QBasicAtomicInteger<quintptr> u; // ### Qt6: make 64-bit
+ };
};
class QSemaphoreReleaser
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index cad7a14017..7d908fd4e7 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -844,15 +844,17 @@ bool QThread::event(QEvent *event)
void QThread::requestInterruption()
{
- Q_D(QThread);
- QMutexLocker locker(&d->mutex);
- if (!d->running || d->finished || d->isInFinish)
- return;
if (this == QCoreApplicationPrivate::theMainThread) {
qWarning("QThread::requestInterruption has no effect on the main thread");
return;
}
- d->interruptionRequested = true;
+ Q_D(QThread);
+ // ### Qt 6: use std::atomic_flag, and document that
+ // requestInterruption/isInterruptionRequested do not synchronize with each other
+ QMutexLocker locker(&d->mutex);
+ if (!d->running || d->finished || d->isInFinish)
+ return;
+ d->interruptionRequested.store(true, std::memory_order_relaxed);
}
/*!
@@ -881,14 +883,16 @@ void QThread::requestInterruption()
bool QThread::isInterruptionRequested() const
{
Q_D(const QThread);
- QMutexLocker locker(&d->mutex);
- if (!d->running || d->finished || d->isInFinish)
+ // fast path: check that the flag is not set:
+ if (!d->interruptionRequested.load(std::memory_order_relaxed))
return false;
- return d->interruptionRequested;
+ // slow path: if the flag is set, take into account run status:
+ QMutexLocker locker(&d->mutex);
+ return d->running && !d->finished && !d->isInFinish;
}
-/*
- \fn template <typename Function, typename Args...> static QThread *QThread::create(Function &&f, Args &&... args)
+/*!
+ \fn template <typename Function, typename... Args> QThread *QThread::create(Function &&f, Args &&... args)
\since 5.10
Creates a new QThread object that will execute the function \a f with the
@@ -911,8 +915,8 @@ bool QThread::isInterruptionRequested() const
\sa start()
*/
-/*
- \fn template <typename Function> static QThread *QThread::create(Function &&f)
+/*!
+ \fn template <typename Function> QThread *QThread::create(Function &&f)
\since 5.10
Creates a new QThread object that will execute the function \a f.
diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h
index 03b5424bb6..3df76077e1 100644
--- a/src/corelib/thread/qthread.h
+++ b/src/corelib/thread/qthread.h
@@ -76,7 +76,7 @@ public:
static int idealThreadCount() Q_DECL_NOTHROW;
static void yieldCurrentThread();
- explicit QThread(QObject *parent = Q_NULLPTR);
+ explicit QThread(QObject *parent = nullptr);
~QThread();
enum Priority {
@@ -110,10 +110,10 @@ public:
QAbstractEventDispatcher *eventDispatcher() const;
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
int loopLevel() const;
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template <typename Function, typename... Args>
static QThread *create(Function &&f, Args &&... args);
template <typename Function>
@@ -128,7 +128,7 @@ public:
static QThread *create(Function &&f);
# endif // QTHREAD_HAS_VARIADIC_CREATE
# endif // QT_CONFIG(cxx11_future)
-#endif // Q_QDOC
+#endif // Q_CLANG_QDOC
public Q_SLOTS:
void start(Priority = InheritPriority);
@@ -154,7 +154,7 @@ protected:
static void setTerminationEnabled(bool enabled = true);
protected:
- QThread(QThreadPrivate &dd, QObject *parent = Q_NULLPTR);
+ QThread(QThreadPrivate &dd, QObject *parent = nullptr);
private:
Q_DECLARE_PRIVATE(QThread)
@@ -169,7 +169,7 @@ private:
#if QT_CONFIG(cxx11_future)
-#if defined(QTHREAD_HAS_VARIADIC_CREATE)
+#if defined(QTHREAD_HAS_VARIADIC_CREATE) || defined(Q_CLANG_QDOC)
// C++17: std::thread's constructor complying call
template <typename Function, typename... Args>
QThread *QThread::create(Function &&f, Args &&... args)
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index f3d4750177..46294a5fc8 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -63,6 +63,7 @@
#include "private/qobject_p.h"
#include <algorithm>
+#include <atomic>
#ifdef Q_OS_WINRT
namespace ABI {
@@ -165,7 +166,7 @@ public:
bool running;
bool finished;
bool isInFinish; //when in QThreadPrivate::finish
- bool interruptionRequested;
+ std::atomic<bool> interruptionRequested;
bool exited;
int returnCode;
@@ -194,7 +195,7 @@ public:
#endif // Q_OS_WIN
QThreadData *data;
- static void createEventDispatcher(QThreadData *data);
+ static QAbstractEventDispatcher *createEventDispatcher(QThreadData *data);
void ref()
{
@@ -221,7 +222,7 @@ public:
static void setCurrentThread(QThread*) {}
static QThread *threadForId(int) { return QThread::currentThread(); }
- static void createEventDispatcher(QThreadData *data);
+ static QAbstractEventDispatcher *createEventDispatcher(QThreadData *data);
void ref() {}
void deref() {}
@@ -317,7 +318,7 @@ public:
void init();
private:
- void run() Q_DECL_OVERRIDE;
+ void run() override;
};
QT_END_NAMESPACE
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index 6540f02f34..2c815b870a 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -109,6 +109,10 @@
#define QT_HAS_THREAD_PRIORITY_SCHEDULING
#endif
+#if defined(Q_OS_QNX)
+#include <sys/neutrino.h>
+#endif
+
QT_BEGIN_NAMESPACE
@@ -281,42 +285,39 @@ typedef void*(*QtThreadCallback)(void*);
#endif // QT_NO_THREAD
-void QThreadPrivate::createEventDispatcher(QThreadData *data)
+QAbstractEventDispatcher *QThreadPrivate::createEventDispatcher(QThreadData *data)
{
+ Q_UNUSED(data);
#if defined(Q_OS_DARWIN)
bool ok = false;
int value = qEnvironmentVariableIntValue("QT_EVENT_DISPATCHER_CORE_FOUNDATION", &ok);
if (ok && value > 0)
- data->eventDispatcher.storeRelease(new QEventDispatcherCoreFoundation);
+ return new QEventDispatcherCoreFoundation;
else
- data->eventDispatcher.storeRelease(new QEventDispatcherUNIX);
+ return new QEventDispatcherUNIX;
#elif !defined(QT_NO_GLIB)
if (qEnvironmentVariableIsEmpty("QT_NO_GLIB")
&& qEnvironmentVariableIsEmpty("QT_NO_THREADED_GLIB")
&& QEventDispatcherGlib::versionSupported())
- data->eventDispatcher.storeRelease(new QEventDispatcherGlib);
+ return new QEventDispatcherGlib;
else
- data->eventDispatcher.storeRelease(new QEventDispatcherUNIX);
+ return new QEventDispatcherUNIX;
#else
- data->eventDispatcher.storeRelease(new QEventDispatcherUNIX);
+ return new QEventDispatcherUNIX;
#endif
-
- data->eventDispatcher.load()->startingUp();
}
#ifndef QT_NO_THREAD
#if (defined(Q_OS_LINUX) || defined(Q_OS_MAC) || defined(Q_OS_QNX))
-static void setCurrentThreadName(pthread_t threadId, const char *name)
+static void setCurrentThreadName(const char *name)
{
# if defined(Q_OS_LINUX) && !defined(QT_LINUXBASE)
- Q_UNUSED(threadId);
prctl(PR_SET_NAME, (unsigned long)name, 0, 0, 0);
# elif defined(Q_OS_MAC)
- Q_UNUSED(threadId);
pthread_setname_np(name);
# elif defined(Q_OS_QNX)
- pthread_setname_np(threadId, name);
+ pthread_setname_np(pthread_self(), name);
# endif
}
#endif
@@ -350,21 +351,23 @@ void *QThreadPrivate::start(void *arg)
data->quitNow = thr->d_func()->exited;
}
- if (data->eventDispatcher.load()) // custom event dispatcher set?
- data->eventDispatcher.load()->startingUp();
- else
- createEventDispatcher(data);
+ QAbstractEventDispatcher *eventDispatcher = data->eventDispatcher.load();
+ if (!eventDispatcher) {
+ eventDispatcher = createEventDispatcher(data);
+ data->eventDispatcher.storeRelease(eventDispatcher);
+ }
+
+ eventDispatcher->startingUp();
#if (defined(Q_OS_LINUX) || defined(Q_OS_MAC) || defined(Q_OS_QNX))
{
- // sets the name of the current thread.
- QString objectName = thr->objectName();
-
- pthread_t thread_id = from_HANDLE<pthread_t>(data->threadId.load());
- if (Q_LIKELY(objectName.isEmpty()))
- setCurrentThreadName(thread_id, thr->metaObject()->className());
+ // Sets the name of the current thread. We can only do this
+ // when the thread is starting, as we don't have a cross
+ // platform way of setting the name of an arbitrary thread.
+ if (Q_LIKELY(thr->objectName().isEmpty()))
+ setCurrentThreadName(thr->metaObject()->className());
else
- setCurrentThreadName(thread_id, objectName.toLocal8Bit());
+ setCurrentThreadName(thr->objectName().toLocal8Bit());
}
#endif
@@ -487,9 +490,6 @@ int QThread::idealThreadCount() Q_DECL_NOTHROW
if (sysctl(mib, 2, &cores, &len, NULL, 0) != 0) {
perror("sysctl");
}
-#elif defined(Q_OS_IRIX)
- // IRIX
- cores = (int)sysconf(_SC_NPROC_ONLN);
#elif defined(Q_OS_INTEGRITY)
#if (__INTEGRITY_MAJOR_VERSION >= 10)
// Integrity V10+ does support multicore CPUs
@@ -555,6 +555,55 @@ void QThread::usleep(unsigned long usecs)
}
#ifdef QT_HAS_THREAD_PRIORITY_SCHEDULING
+#if defined(Q_OS_QNX)
+static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_priority)
+{
+ // On QNX, NormalPriority is mapped to 10. A QNX system could use a value different
+ // than 10 for the "normal" priority but it's difficult to achieve this so we'll
+ // assume that no one has ever created such a system. This makes the mapping from
+ // Qt priorities to QNX priorities lopsided. There's usually more space available
+ // to map into above the "normal" priority than below it. QNX also has a privileged
+ // priority range (for threads that assist the kernel). We'll assume that no Qt
+ // thread needs to use priorities in that range.
+ int priority_norm = 10;
+ // _sched_info::priority_priv isn't documented. You'd think that it's the start of the
+ // privileged priority range but it's actually the end of the unpriviledged range.
+ struct _sched_info info;
+ if (SchedInfo_r(0, *sched_policy, &info) != EOK)
+ return false;
+
+ if (priority == QThread::IdlePriority) {
+ *sched_priority = info.priority_min;
+ return true;
+ }
+
+ if (priority_norm < info.priority_min)
+ priority_norm = info.priority_min;
+ if (priority_norm > info.priority_priv)
+ priority_norm = info.priority_priv;
+
+ int to_min, to_max;
+ int from_min, from_max;
+ int prio;
+ if (priority < QThread::NormalPriority) {
+ to_min = info.priority_min;
+ to_max = priority_norm;
+ from_min = QThread::LowestPriority;
+ from_max = QThread::NormalPriority;
+ } else {
+ to_min = priority_norm;
+ to_max = info.priority_priv;
+ from_min = QThread::NormalPriority;
+ from_max = QThread::TimeCriticalPriority;
+ }
+
+ prio = ((priority - from_min) * (to_max - to_min)) / (from_max - from_min) + to_min;
+ prio = qBound(to_min, prio, to_max);
+
+ *sched_priority = prio;
+ return true;
+}
+#else
// Does some magic and calculate the Unix scheduler priorities
// sched_policy is IN/OUT: it must be set to a valid policy before calling this function
// sched_priority is OUT only
@@ -598,6 +647,7 @@ static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_pr
return true;
}
#endif
+#endif
void QThread::start(Priority priority)
{
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index 24d3ca2d7d..4459ae87af 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -331,15 +331,14 @@ void qt_set_thread_name(HANDLE threadId, LPCSTR threadName)
#endif // QT_NO_THREAD
-void QThreadPrivate::createEventDispatcher(QThreadData *data)
+QAbstractEventDispatcher *QThreadPrivate::createEventDispatcher(QThreadData *data)
{
+ Q_UNUSED(data);
#ifndef Q_OS_WINRT
- QEventDispatcherWin32 *theEventDispatcher = new QEventDispatcherWin32;
+ return new QEventDispatcherWin32;
#else
- QEventDispatcherWinRT *theEventDispatcher = new QEventDispatcherWinRT;
+ return new QEventDispatcherWinRT;
#endif
- data->eventDispatcher.storeRelease(theEventDispatcher);
- theEventDispatcher->startingUp();
}
#ifndef QT_NO_THREAD
@@ -360,10 +359,13 @@ unsigned int __stdcall QT_ENSURE_STACK_ALIGNED_FOR_SSE QThreadPrivate::start(voi
data->quitNow = thr->d_func()->exited;
}
- if (data->eventDispatcher.load()) // custom event dispatcher set?
- data->eventDispatcher.load()->startingUp();
- else
- createEventDispatcher(data);
+ QAbstractEventDispatcher *eventDispatcher = data->eventDispatcher.load();
+ if (!eventDispatcher) {
+ eventDispatcher = createEventDispatcher(data);
+ data->eventDispatcher.storeRelease(eventDispatcher);
+ }
+
+ eventDispatcher->startingUp();
#if !defined(QT_NO_DEBUG) && defined(Q_CC_MSVC) && !defined(Q_OS_WINRT)
// sets the name of the current thread.
diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp
index 8eca3b56e4..157cbeaf4d 100644
--- a/src/corelib/thread/qthreadpool.cpp
+++ b/src/corelib/thread/qthreadpool.cpp
@@ -56,7 +56,7 @@ class QThreadPoolThread : public QThread
{
public:
QThreadPoolThread(QThreadPoolPrivate *manager);
- void run() Q_DECL_OVERRIDE;
+ void run() override;
void registerThreadInactive();
QWaitCondition runnableReady;
diff --git a/src/corelib/thread/qthreadpool.h b/src/corelib/thread/qthreadpool.h
index a65eacc996..606e192768 100644
--- a/src/corelib/thread/qthreadpool.h
+++ b/src/corelib/thread/qthreadpool.h
@@ -62,7 +62,7 @@ class Q_CORE_EXPORT QThreadPool : public QObject
friend class QFutureInterfaceBase;
public:
- QThreadPool(QObject *parent = Q_NULLPTR);
+ QThreadPool(QObject *parent = nullptr);
~QThreadPool();
static QThreadPool *globalInstance();
diff --git a/src/corelib/thread/qthreadstorage.cpp b/src/corelib/thread/qthreadstorage.cpp
index 2f77a9ce26..c0b523a431 100644
--- a/src/corelib/thread/qthreadstorage.cpp
+++ b/src/corelib/thread/qthreadstorage.cpp
@@ -260,13 +260,13 @@ void QThreadStorageData::finish(void **p)
*/
/*!
- \fn QThreadStorage::QThreadStorage()
+ \fn template <class T> QThreadStorage<T>::QThreadStorage()
Constructs a new per-thread data storage object.
*/
/*!
- \fn QThreadStorage::~QThreadStorage()
+ \fn template <class T> QThreadStorage<T>::~QThreadStorage()
Destroys the per-thread data storage object.
@@ -278,7 +278,7 @@ void QThreadStorageData::finish(void **p)
*/
/*!
- \fn bool QThreadStorage::hasLocalData() const
+ \fn template <class T> bool QThreadStorage<T>::hasLocalData() const
If T is a pointer type, returns \c true if the calling thread has
non-zero data available.
@@ -290,7 +290,7 @@ void QThreadStorageData::finish(void **p)
*/
/*!
- \fn T &QThreadStorage::localData()
+ \fn template <class T> T &QThreadStorage<T>::localData()
Returns a reference to the data that was set by the calling
thread.
@@ -302,7 +302,7 @@ void QThreadStorageData::finish(void **p)
*/
/*!
- \fn const T QThreadStorage::localData() const
+ \fn template <class T> const T QThreadStorage<T>::localData() const
\overload
Returns a copy of the data that was set by the calling thread.
@@ -311,7 +311,7 @@ void QThreadStorageData::finish(void **p)
*/
/*!
- \fn void QThreadStorage::setLocalData(T data)
+ \fn template <class T> void QThreadStorage<T>::setLocalData(T data)
Sets the local data for the calling thread to \a data. It can be
accessed later using the localData() functions.
diff --git a/src/corelib/thread/thread.pri b/src/corelib/thread/thread.pri
index 0a989cfcaf..e4972a57b3 100644
--- a/src/corelib/thread/thread.pri
+++ b/src/corelib/thread/thread.pri
@@ -10,30 +10,19 @@ HEADERS += thread/qmutex.h \
thread/qthreadstorage.h \
thread/qwaitcondition.h \
thread/qatomic.h \
- thread/qexception.h \
- thread/qresultstore.h \
- thread/qfuture.h \
- thread/qfutureinterface.h \
- thread/qfuturesynchronizer.h \
- thread/qfuturewatcher.h \
thread/qbasicatomic.h \
thread/qgenericatomic.h
# private headers
HEADERS += thread/qmutex_p.h \
thread/qmutexpool_p.h \
- thread/qfutureinterface_p.h \
- thread/qfuturewatcher_p.h \
+ thread/qfutex_p.h \
thread/qorderedmutexlocker_p.h \
thread/qreadwritelock_p.h \
thread/qthread_p.h \
thread/qthreadpool_p.h
SOURCES += thread/qatomic.cpp \
- thread/qexception.cpp \
- thread/qresultstore.cpp \
- thread/qfutureinterface.cpp \
- thread/qfuturewatcher.cpp \
thread/qmutex.cpp \
thread/qreadwritelock.cpp \
thread/qrunnable.cpp \
@@ -43,6 +32,24 @@ SOURCES += thread/qatomic.cpp \
thread/qthreadpool.cpp \
thread/qthreadstorage.cpp
+qtConfig(future) {
+ HEADERS += \
+ thread/qexception.h \
+ thread/qfuture.h \
+ thread/qfutureinterface.h \
+ thread/qfutureinterface_p.h \
+ thread/qfuturesynchronizer.h \
+ thread/qfuturewatcher.h \
+ thread/qfuturewatcher_p.h \
+ thread/qresultstore.h
+
+ SOURCES += \
+ thread/qexception.cpp \
+ thread/qfutureinterface.cpp \
+ thread/qfuturewatcher.cpp \
+ thread/qresultstore.cpp
+}
+
win32 {
SOURCES += \
thread/qmutex_win.cpp \
diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h
index c0f7709fec..1a03bfaac4 100644
--- a/src/corelib/tools/qalgorithms.h
+++ b/src/corelib/tools/qalgorithms.h
@@ -42,7 +42,7 @@
#include <QtCore/qglobal.h>
-#if defined(Q_CC_MSVC) && _MSC_VER > 1500
+#ifdef Q_CC_MSVC
#include <intrin.h>
#endif
diff --git a/src/corelib/tools/qalgorithms.qdoc b/src/corelib/tools/qalgorithms.qdoc
index 096ede2fec..f0ac2701e7 100644
--- a/src/corelib/tools/qalgorithms.qdoc
+++ b/src/corelib/tools/qalgorithms.qdoc
@@ -228,7 +228,7 @@
\sa {container classes}, <QtGlobal>
*/
-/*! \fn OutputIterator qCopy(InputIterator begin1, InputIterator end1, OutputIterator begin2)
+/*! \fn template <typename InputIterator, typename OutputIterator> OutputIterator qCopy(InputIterator begin1, InputIterator end1, OutputIterator begin2)
\relates <QtAlgorithms>
\deprecated
@@ -247,7 +247,7 @@
\sa qCopyBackward(), {input iterators}, {output iterators}
*/
-/*! \fn BiIterator2 qCopyBackward(BiIterator1 begin1, BiIterator1 end1, BiIterator2 end2)
+/*! \fn template <typename BiIterator1, typename BiIterator2> BiIterator2 qCopyBackward(BiIterator1 begin1, BiIterator1 end1, BiIterator2 end2)
\relates <QtAlgorithms>
\deprecated
@@ -266,7 +266,7 @@
\sa qCopy(), {bidirectional iterators}
*/
-/*! \fn bool qEqual(InputIterator1 begin1, InputIterator1 end1, InputIterator2 begin2)
+/*! \fn template <typename InputIterator1, typename InputIterator2> bool qEqual(InputIterator1 begin1, InputIterator1 end1, InputIterator2 begin2)
\relates <QtAlgorithms>
\deprecated
@@ -285,7 +285,7 @@
\sa {input iterators}
*/
-/*! \fn void qFill(ForwardIterator begin, ForwardIterator end, const T &value)
+/*! \fn template <typename ForwardIterator, typename T> void qFill(ForwardIterator begin, ForwardIterator end, const T &value)
\relates <QtAlgorithms>
\deprecated
@@ -299,7 +299,7 @@
\sa qCopy(), {forward iterators}
*/
-/*! \fn void qFill(Container &container, const T &value)
+/*! \fn template <typename Container, typename T> void qFill(Container &container, const T &value)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -309,7 +309,7 @@
This is the same as qFill(\a{container}.begin(), \a{container}.end(), \a value);
*/
-/*! \fn InputIterator qFind(InputIterator begin, InputIterator end, const T &value)
+/*! \fn template <typename InputIterator, typename T> InputIterator qFind(InputIterator begin, InputIterator end, const T &value)
\relates <QtAlgorithms>
\deprecated
@@ -332,7 +332,7 @@
\sa qBinaryFind(), {input iterators}
*/
-/*! \fn void qFind(const Container &container, const T &value)
+/*! \fn template <typename Container, typename T> void qFind(const Container &container, const T &value)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -342,7 +342,7 @@
This is the same as qFind(\a{container}.constBegin(), \a{container}.constEnd(), \a value);
*/
-/*! \fn void qCount(InputIterator begin, InputIterator end, const T &value, Size &n)
+/*! \fn template <typename InputIterator, typename T, typename Size> void qCount(InputIterator begin, InputIterator end, const T &value, Size &n)
\relates <QtAlgorithms>
\deprecated
@@ -362,7 +362,7 @@
\sa {input iterators}
*/
-/*! \fn void qCount(const Container &container, const T &value, Size &n)
+/*! \fn template <typename Container, typename T, typename Size> void qCount(const Container &container, const T &value, Size &n)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -374,7 +374,7 @@
of \a value in the variable passed as a reference in argument \a n.
*/
-/*! \fn void qSwap(T &var1, T &var2)
+/*! \fn template <typename T> void qSwap(T &var1, T &var2)
\relates <QtAlgorithms>
\deprecated
@@ -386,7 +386,7 @@
\snippet code/doc_src_qalgorithms.cpp 10
*/
-/*! \fn void qSort(RandomAccessIterator begin, RandomAccessIterator end)
+/*! \fn template <typename RandomAccessIterator> void qSort(RandomAccessIterator begin, RandomAccessIterator end)
\relates <QtAlgorithms>
\deprecated
@@ -411,7 +411,7 @@
\sa qStableSort(), {random access iterators}
*/
-/*! \fn void qSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
+/*! \fn template <typename RandomAccessIterator, typename LessThan> void qSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -447,7 +447,7 @@
\sa QMap
*/
-/*! \fn void qSort(Container &container)
+/*! \fn template<typename Container> void qSort(Container &container)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -458,7 +458,7 @@
*/
/*!
- \fn void qStableSort(RandomAccessIterator begin, RandomAccessIterator end)
+ \fn template <typename RandomAccessIterator> void qStableSort(RandomAccessIterator begin, RandomAccessIterator end)
\relates <QtAlgorithms>
\deprecated
@@ -485,7 +485,7 @@
*/
/*!
- \fn void qStableSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
+ \fn template <typename RandomAccessIterator, typename LessThan> void qStableSort(RandomAccessIterator begin, RandomAccessIterator end, LessThan lessThan)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -517,7 +517,7 @@
*/
/*!
- \fn void qStableSort(Container &container)
+ \fn template <typename Container> void qStableSort(Container &container)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -527,7 +527,7 @@
This is the same as qStableSort(\a{container}.begin(), \a{container}.end());
*/
-/*! \fn RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
+/*! \fn template <typename RandomAccessIterator, typename T> RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
\relates <QtAlgorithms>
\deprecated
@@ -556,7 +556,7 @@
*/
/*!
- \fn RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
+ \fn template <typename RandomAccessIterator, typename T, typename LessThan> RandomAccessIterator qLowerBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -571,7 +571,7 @@
*/
/*!
- \fn void qLowerBound(const Container &container, const T &value)
+ \fn template <typename Container, typename T> void qLowerBound(const Container &container, const T &value)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -584,7 +584,7 @@
to insert items.
*/
-/*! \fn RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
+/*! \fn template <typename RandomAccessIterator, typename T> RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
\relates <QtAlgorithms>
\deprecated
@@ -613,7 +613,7 @@
*/
/*!
- \fn RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
+ \fn template <typename RandomAccessIterator, typename T, typename LessThan> RandomAccessIterator qUpperBound(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -628,7 +628,7 @@
*/
/*!
- \fn void qUpperBound(const Container &container, const T &value)
+ \fn template <typename Container, typename T> void qUpperBound(const Container &container, const T &value)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -639,7 +639,7 @@
*/
-/*! \fn RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
+/*! \fn template <typename RandomAccessIterator, typename T> RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value)
\relates <QtAlgorithms>
\deprecated
@@ -665,7 +665,7 @@
\sa qLowerBound(), qUpperBound(), {random access iterators}
*/
-/*! \fn RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
+/*! \fn template <typename RandomAccessIterator, typename T, typename LessThan> RandomAccessIterator qBinaryFind(RandomAccessIterator begin, RandomAccessIterator end, const T &value, LessThan lessThan)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -680,7 +680,7 @@
*/
/*!
- \fn void qBinaryFind(const Container &container, const T &value)
+ \fn template <typename Container, typename T> void qBinaryFind(const Container &container, const T &value)
\relates <QtAlgorithms>
\deprecated
\overload
@@ -692,7 +692,7 @@
/*!
- \fn void qDeleteAll(ForwardIterator begin, ForwardIterator end)
+ \fn template <typename ForwardIterator> void qDeleteAll(ForwardIterator begin, ForwardIterator end)
\relates <QtAlgorithms>
Deletes all the items in the range [\a begin, \a end) using the
@@ -715,7 +715,7 @@
*/
/*!
- \fn void qDeleteAll(const Container &c)
+ \fn template <typename Container> void qDeleteAll(const Container &c)
\relates <QtAlgorithms>
\overload
@@ -723,7 +723,7 @@
This is the same as qDeleteAll(\a{c}.begin(), \a{c}.end()).
*/
-/*! \fn LessThan qLess()
+/*! \fn template <typename LessThan> LessThan qLess()
\relates <QtAlgorithms>
\deprecated
@@ -739,7 +739,7 @@
\sa {qGreater()}{qGreater<T>()}
*/
-/*! \fn LessThan qGreater()
+/*! \fn template <typename LessThan> LessThan qGreater()
\relates <QtAlgorithms>
\deprecated
diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h
index 88f0cfb0ea..f0cc56e899 100644
--- a/src/corelib/tools/qarraydata.h
+++ b/src/corelib/tools/qarraydata.h
@@ -139,7 +139,7 @@ struct QTypedArrayData
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(Q_NULLPTR) {}
+ inline iterator() : i(nullptr) {}
inline iterator(T *n) : i(n) {}
inline iterator(const iterator &o): i(o.i){} // #### Qt 6: remove, the implicit version is fine
inline T &operator*() const { return *i; }
@@ -173,7 +173,7 @@ struct QTypedArrayData
typedef const T *pointer;
typedef const T &reference;
- inline const_iterator() : i(Q_NULLPTR) {}
+ inline const_iterator() : i(nullptr) {}
inline const_iterator(const T *n) : i(n) {}
inline const_iterator(const const_iterator &o): i(o.i) {} // #### Qt 6: remove, the default version is fine
inline explicit const_iterator(const iterator &o): i(o.i) {}
diff --git a/src/corelib/tools/qbitarray.cpp b/src/corelib/tools/qbitarray.cpp
index 12e4687b3c..f68a807203 100644
--- a/src/corelib/tools/qbitarray.cpp
+++ b/src/corelib/tools/qbitarray.cpp
@@ -300,6 +300,46 @@ void QBitArray::fill(bool value, int begin, int end)
setBit(begin++, value);
}
+/*!
+ \fn const char *QBitArray::bits() const
+ \since 5.11
+
+ Returns a pointer to a dense bit array for this QBitArray. Bits are counted
+ upwards from the least significant bit in each byte. The the number of bits
+ relevant in the last byte is given by \c{size() % 8}.
+
+ \sa fromBits(), size()
+ */
+
+/*!
+ \since 5.11
+
+ Creates a QBitArray with the dense bit array located at \a data, with \a
+ len bits. The byte array at \a data must be at least \a size / 8 (rounded up)
+ bytes long.
+
+ If \a size is not a multiple of 8, this function will include the lowest
+ \a size % 8 bits from the last byte in \a data.
+
+ \sa bits()
+ */
+QBitArray QBitArray::fromBits(const char *data, qsizetype size)
+{
+ QBitArray result;
+ qsizetype nbytes = (size + 7) / 8;
+
+ result.d = QByteArray(nbytes + 1, Qt::Uninitialized);
+ char *bits = result.d.data();
+ memcpy(bits + 1, data, nbytes);
+
+ // clear any unused bits from the last byte
+ if (size & 7)
+ bits[nbytes] &= 0xffU >> (size & 7);
+
+ *bits = result.d.size() * 8 - size;
+ return result;
+}
+
/*! \fn bool QBitArray::isDetached() const
\internal
diff --git a/src/corelib/tools/qbitarray.h b/src/corelib/tools/qbitarray.h
index 8fa5323127..ff40bf5654 100644
--- a/src/corelib/tools/qbitarray.h
+++ b/src/corelib/tools/qbitarray.h
@@ -104,6 +104,9 @@ public:
inline void truncate(int pos) { if (pos < size()) resize(pos); }
+ const char *bits() const { return isEmpty() ? nullptr : d.constData() + 1; }
+ static QBitArray fromBits(const char *data, qsizetype len);
+
public:
typedef QByteArray::DataPtr DataPtr;
inline DataPtr &data_ptr() { return d.data_ptr(); }
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 9b648adb06..adfa939cc6 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -268,7 +268,7 @@ char *qstrcpy(char *dst, const char *src)
{
if (!src)
return 0;
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
const int len = int(strlen(src));
// This is actually not secure!!! It will be fixed
// properly in a later release!
@@ -304,7 +304,7 @@ char *qstrncpy(char *dst, const char *src, uint len)
if (!src || !dst)
return 0;
if (len > 0) {
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
strncpy_s(dst, len, src, len - 1);
#else
strncpy(dst, src, len);
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index 732d3afc17..300f795469 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -340,16 +340,16 @@ public:
inline QT_ASCII_CAST_WARN bool operator>=(const QString &s2) const;
#endif
- short toShort(bool *ok = Q_NULLPTR, int base = 10) const;
- ushort toUShort(bool *ok = Q_NULLPTR, int base = 10) const;
- int toInt(bool *ok = Q_NULLPTR, int base = 10) const;
- uint toUInt(bool *ok = Q_NULLPTR, int base = 10) const;
- long toLong(bool *ok = Q_NULLPTR, int base = 10) const;
- ulong toULong(bool *ok = Q_NULLPTR, int base = 10) const;
- qlonglong toLongLong(bool *ok = Q_NULLPTR, int base = 10) const;
- qulonglong toULongLong(bool *ok = Q_NULLPTR, int base = 10) const;
- float toFloat(bool *ok = Q_NULLPTR) const;
- double toDouble(bool *ok = Q_NULLPTR) const;
+ short toShort(bool *ok = nullptr, int base = 10) const;
+ ushort toUShort(bool *ok = nullptr, int base = 10) const;
+ int toInt(bool *ok = nullptr, int base = 10) const;
+ uint toUInt(bool *ok = nullptr, int base = 10) const;
+ long toLong(bool *ok = nullptr, int base = 10) const;
+ ulong toULong(bool *ok = nullptr, int base = 10) const;
+ qlonglong toLongLong(bool *ok = nullptr, int base = 10) const;
+ qulonglong toULongLong(bool *ok = nullptr, int base = 10) const;
+ float toFloat(bool *ok = nullptr) const;
+ double toDouble(bool *ok = nullptr) const;
QByteArray toBase64(Base64Options options) const;
QByteArray toBase64() const; // ### Qt6 merge with previous
QByteArray toHex() const;
diff --git a/src/corelib/tools/qbytearraylist.h b/src/corelib/tools/qbytearraylist.h
index 501bb2e0d5..ed014dd157 100644
--- a/src/corelib/tools/qbytearraylist.h
+++ b/src/corelib/tools/qbytearraylist.h
@@ -70,7 +70,7 @@ protected:
#endif
public:
inline QByteArray join() const
- { return QtPrivate::QByteArrayList_join(self(), Q_NULLPTR, 0); }
+ { return QtPrivate::QByteArrayList_join(self(), nullptr, 0); }
inline QByteArray join(const QByteArray &sep) const
{ return QtPrivate::QByteArrayList_join(self(), sep.constData(), sep.size()); }
inline QByteArray join(char sep) const
diff --git a/src/corelib/tools/qbytearraymatcher.cpp b/src/corelib/tools/qbytearraymatcher.cpp
index 76af726ef9..06d01f9829 100644
--- a/src/corelib/tools/qbytearraymatcher.cpp
+++ b/src/corelib/tools/qbytearraymatcher.cpp
@@ -370,7 +370,7 @@ int qFindByteArray(
*/
/*!
- \fn int QStaticByteArrayMatcher::indexIn(const char *haystack, int hlen, int from = 0) const
+ \fn template <uint N> int QStaticByteArrayMatcher<N>::indexIn(const char *haystack, int hlen, int from = 0) const
Searches the char string \a haystack, which has length \a hlen, from
byte position \a from (default 0, i.e. from the first byte), for
@@ -380,7 +380,7 @@ int qFindByteArray(
*/
/*!
- \fn int QStaticByteArrayMatcher::indexIn(const QByteArray &haystack, int from = 0) const
+ \fn template <uint N> int QStaticByteArrayMatcher<N>::indexIn(const QByteArray &haystack, int from = 0) const
Searches the char string \a haystack, from byte position \a from
(default 0, i.e. from the first byte), for the byte array pattern()
@@ -390,12 +390,12 @@ int qFindByteArray(
*/
/*!
- \fn QByteArray QStaticByteArrayMatcher::pattern() const
+ \fn template <uint N> QByteArray QStaticByteArrayMatcher<N>::pattern() const
Returns the byte array pattern that this byte array matcher will
search for.
- \sa setPattern()
+ \sa QByteArrayMatcher::setPattern()
*/
/*!
@@ -410,12 +410,12 @@ int QStaticByteArrayMatcherBase::indexOfIn(const char *needle, uint nlen, const
}
/*!
- \fn QStaticByteArrayMatcher::QStaticByteArrayMatcher(const char (&pattern)[N])
+ \fn template <uint N> QStaticByteArrayMatcher<N>::QStaticByteArrayMatcher(const char (&pattern)[N])
\internal
*/
/*!
- \fn qMakeStaticByteArrayMatcher(const char (&pattern)[N])
+ \fn template <uint N> QStaticByteArrayMatcher qMakeStaticByteArrayMatcher(const char (&pattern)[N])
\since 5.9
\relates QStaticByteArrayMatcher
diff --git a/src/corelib/tools/qbytearraymatcher.h b/src/corelib/tools/qbytearraymatcher.h
index c1c0c3a660..dafaea9c12 100644
--- a/src/corelib/tools/qbytearraymatcher.h
+++ b/src/corelib/tools/qbytearraymatcher.h
@@ -134,9 +134,6 @@ private:
}
};
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_MSVC(4351) // MSVC 2013: "new behavior: elements of array ... will be default initialized"
- // remove once we drop MSVC 2013 support
template <uint N>
class QStaticByteArrayMatcher : QStaticByteArrayMatcherBase
{
@@ -158,8 +155,6 @@ public:
QByteArray pattern() const { return QByteArray(m_pattern, int(N - 1)); }
};
-QT_WARNING_POP
-
template <uint N>
Q_DECL_RELAXED_CONSTEXPR QStaticByteArrayMatcher<N> qMakeStaticByteArrayMatcher(const char (&pattern)[N]) Q_DECL_NOTHROW
{ return QStaticByteArrayMatcher<N>(pattern); }
diff --git a/src/corelib/tools/qcache.qdoc b/src/corelib/tools/qcache.qdoc
index 423a911ce0..31dfcb42cf 100644
--- a/src/corelib/tools/qcache.qdoc
+++ b/src/corelib/tools/qcache.qdoc
@@ -80,25 +80,25 @@
\sa QPixmapCache, QHash, QMap
*/
-/*! \fn QCache::QCache(int maxCost = 100)
+/*! \fn template <class Key, class T> QCache<Key, T>::QCache(int maxCost = 100)
Constructs a cache whose contents will never have a total cost
greater than \a maxCost.
*/
-/*! \fn QCache::~QCache()
+/*! \fn template <class Key, class T> QCache<Key, T>::~QCache()
Destroys the cache. Deletes all the objects in the cache.
*/
-/*! \fn int QCache::maxCost() const
+/*! \fn template <class Key, class T> int QCache<Key, T>::maxCost() const
Returns the maximum allowed total cost of the cache.
\sa setMaxCost(), totalCost()
*/
-/*! \fn void QCache::setMaxCost(int cost)
+/*! \fn template <class Key, class T> void QCache<Key, T>::setMaxCost(int cost)
Sets the maximum allowed total cost of the cache to \a cost. If
the current total cost is greater than \a cost, some objects are
@@ -107,7 +107,7 @@
\sa maxCost(), totalCost()
*/
-/*! \fn int QCache::totalCost() const
+/*! \fn template <class Key, class T> int QCache<Key, T>::totalCost() const
Returns the total cost of the objects in the cache.
@@ -120,19 +120,19 @@
\sa setMaxCost()
*/
-/*! \fn int QCache::size() const
+/*! \fn template <class Key, class T> int QCache<Key, T>::size() const
Returns the number of objects in the cache.
\sa isEmpty()
*/
-/*! \fn int QCache::count() const
+/*! \fn template <class Key, class T> int QCache<Key, T>::count() const
Same as size().
*/
-/*! \fn bool QCache::isEmpty() const
+/*! \fn template <class Key, class T> bool QCache<Key, T>::isEmpty() const
Returns \c true if the cache contains no objects; otherwise
returns \c false.
@@ -140,12 +140,12 @@
\sa size()
*/
-/*! \fn QList<Key> QCache::keys() const
+/*! \fn template <class Key, class T> QList<Key> QCache<Key, T>::keys() const
Returns a list of the keys in the cache.
*/
-/*! \fn void QCache::clear();
+/*! \fn template <class Key, class T> void QCache<Key, T>::clear();
Deletes all the objects in the cache.
@@ -153,7 +153,7 @@
*/
-/*! \fn bool QCache::insert(const Key &key, T *object, int cost = 1)
+/*! \fn template <class Key, class T> bool QCache<Key, T>::insert(const Key &key, T *object, int cost = 1)
Inserts \a object into the cache with key \a key and
associated cost \a cost. Any object with the same key already in
@@ -169,7 +169,7 @@
\sa take(), remove()
*/
-/*! \fn T *QCache::object(const Key &key) const
+/*! \fn template <class Key, class T> T *QCache<Key, T>::object(const Key &key) const
Returns the object associated with key \a key, or 0 if the key does
not exist in the cache.
@@ -180,7 +180,7 @@
\sa take(), remove()
*/
-/*! \fn bool QCache::contains(const Key &key) const
+/*! \fn template <class Key, class T> bool QCache<Key, T>::contains(const Key &key) const
Returns \c true if the cache contains an object associated with key \a
key; otherwise returns \c false.
@@ -188,7 +188,7 @@
\sa take(), remove()
*/
-/*! \fn T *QCache::operator[](const Key &key) const
+/*! \fn template <class Key, class T> T *QCache<Key, T>::operator[](const Key &key) const
Returns the object associated with key \a key, or 0 if the key does
not exist in the cache.
@@ -199,7 +199,7 @@
deleted at any time.
*/
-/*! \fn bool QCache::remove(const Key &key)
+/*! \fn template <class Key, class T> bool QCache<Key, T>::remove(const Key &key)
Deletes the object associated with key \a key. Returns \c true if the
object was found in the cache; otherwise returns \c false.
@@ -207,7 +207,7 @@
\sa take(), clear()
*/
-/*! \fn T *QCache::take(const Key &key)
+/*! \fn template <class Key, class T> T *QCache<Key, T>::take(const Key &key)
Takes the object associated with key \a key out of the cache
without deleting it. Returns a pointer to the object taken out, or
diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp
index 5c887f47cd..94de69f075 100644
--- a/src/corelib/tools/qchar.cpp
+++ b/src/corelib/tools/qchar.cpp
@@ -186,6 +186,8 @@ QT_BEGIN_NAMESPACE
\value Unicode_6_3 Version 6.3 Since Qt 5.3
\value Unicode_7_0 Version 7.0 Since Qt 5.5
\value Unicode_8_0 Version 8.0 Since Qt 5.6
+ \value Unicode_9_0 Version 9.0 Since Qt 5.11
+ \value Unicode_10_0 Version 10.0 Since Qt 5.11
\value Unicode_Unassigned The value is not assigned to any character
in version 8.0 of Unicode.
@@ -414,6 +416,16 @@ QT_BEGIN_NAMESPACE
\value Script_Multani
\value Script_OldHungarian
\value Script_SignWriting
+ \value Script_Adlam
+ \value Script_Bhaiksuki
+ \value Script_Marchen
+ \value Script_Newa
+ \value Script_Osage
+ \value Script_Tangut
+ \value Script_MasaramGondi
+ \value Script_Nushu
+ \value Script_Soyombo
+ \value Script_ZanabazarSquare
\omitvalue ScriptCount
@@ -612,8 +624,6 @@ QT_BEGIN_NAMESPACE
\since 5.10
Constructs a QChar corresponding to the UTF-16 character \a ch.
-
- \note This constructor is not available on MSVC 2013.
*/
/*!
diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h
index 53cb8993fb..84df8accc5 100644
--- a/src/corelib/tools/qchar.h
+++ b/src/corelib/tools/qchar.h
@@ -91,6 +91,8 @@ public:
#endif
#if defined(Q_OS_WIN)
Q_STATIC_ASSERT(sizeof(wchar_t) == sizeof(ushort));
+#endif
+#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
Q_DECL_CONSTEXPR QChar(wchar_t ch) Q_DECL_NOTHROW : ucs(ushort(ch)) {} // implicit
#endif
@@ -296,6 +298,20 @@ public:
Script_OldHungarian,
Script_SignWriting,
+ // Unicode 9.0 additions
+ Script_Adlam,
+ Script_Bhaiksuki,
+ Script_Marchen,
+ Script_Newa,
+ Script_Osage,
+ Script_Tangut,
+
+ // Unicode 10.0 additions
+ Script_MasaramGondi,
+ Script_Nushu,
+ Script_Soyombo,
+ Script_ZanabazarSquare,
+
ScriptCount
};
@@ -387,7 +403,9 @@ public:
Unicode_6_2,
Unicode_6_3,
Unicode_7_0,
- Unicode_8_0
+ Unicode_8_0,
+ Unicode_9_0,
+ Unicode_10_0
};
// ****** WHEN ADDING FUNCTIONS, CONSIDER ADDING TO QCharRef TOO
diff --git a/src/corelib/tools/qcollator.h b/src/corelib/tools/qcollator.h
index d81c7c85e3..6fa199cb0f 100644
--- a/src/corelib/tools/qcollator.h
+++ b/src/corelib/tools/qcollator.h
@@ -89,7 +89,7 @@ public:
QCollator &operator=(const QCollator &);
#ifdef Q_COMPILER_RVALUE_REFS
QCollator(QCollator &&other) Q_DECL_NOTHROW
- : d(other.d) { other.d = Q_NULLPTR; }
+ : d(other.d) { other.d = nullptr; }
QCollator &operator=(QCollator &&other) Q_DECL_NOTHROW
{ swap(other); return *this; }
#endif
diff --git a/src/corelib/tools/qcollator_win.cpp b/src/corelib/tools/qcollator_win.cpp
index bce896278e..5a838c1b50 100644
--- a/src/corelib/tools/qcollator_win.cpp
+++ b/src/corelib/tools/qcollator_win.cpp
@@ -70,12 +70,8 @@ void QCollatorPrivate::init()
if (caseSensitivity == Qt::CaseInsensitive)
collator |= NORM_IGNORECASE;
- if (numericMode) {
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7)
- collator |= SORT_DIGITSASNUMBERS;
- else
- qWarning("Numeric sorting unsupported on Windows versions older than Windows 7.");
- }
+ if (numericMode)
+ collator |= SORT_DIGITSASNUMBERS;
if (ignorePunctuation)
collator |= NORM_IGNORESYMBOLS;
diff --git a/src/corelib/tools/qcontiguouscache.cpp b/src/corelib/tools/qcontiguouscache.cpp
index 3393be2dee..2ded61c0be 100644
--- a/src/corelib/tools/qcontiguouscache.cpp
+++ b/src/corelib/tools/qcontiguouscache.cpp
@@ -131,14 +131,14 @@ MyRecord record(int row) const
See the \l{Contiguous Cache Example}{Contiguous Cache} example.
*/
-/*! \fn QContiguousCache::QContiguousCache(int capacity)
+/*! \fn template<typename T> QContiguousCache<T>::QContiguousCache(int capacity)
Constructs a cache with the given \a capacity.
\sa setCapacity()
*/
-/*! \fn QContiguousCache::QContiguousCache(const QContiguousCache<T> &other)
+/*! \fn template<typename T> QContiguousCache<T>::QContiguousCache(const QContiguousCache<T> &other)
Constructs a copy of \a other.
@@ -150,20 +150,20 @@ MyRecord record(int row) const
\sa operator=()
*/
-/*! \fn QContiguousCache::~QContiguousCache()
+/*! \fn template<typename T> QContiguousCache<T>::~QContiguousCache()
Destroys the cache.
*/
-/*! \fn void QContiguousCache::detach()
+/*! \fn template<typename T> void QContiguousCache<T>::detach()
\internal
*/
-/*! \fn bool QContiguousCache::isDetached() const
+/*! \fn template<typename T> bool QContiguousCache<T>::isDetached() const
\internal
*/
-/*! \fn void QContiguousCache::setSharable(bool sharable)
+/*! \fn template<typename T> void QContiguousCache<T>::setSharable(bool sharable)
\internal
*/
@@ -195,27 +195,27 @@ MyRecord record(int row) const
\internal
*/
-/*! \fn QContiguousCache<T> &QContiguousCache::operator=(const QContiguousCache<T> &other)
+/*! \fn template<typename T> QContiguousCache<T> &QContiguousCache<T>::operator=(const QContiguousCache<T> &other)
Assigns \a other to this cache and returns a reference to this cache.
*/
/*!
- \fn QContiguousCache<T> &QContiguousCache::operator=(QContiguousCache<T> &&other)
+ \fn template<typename T> QContiguousCache<T> &QContiguousCache<T>::operator=(QContiguousCache<T> &&other)
Move-assigns \a other to this QContiguousCache instance.
\since 5.2
*/
-/*! \fn void QContiguousCache::swap(QContiguousCache<T> &other)
+/*! \fn template<typename T> void QContiguousCache<T>::swap(QContiguousCache<T> &other)
\since 4.8
Swaps cache \a other with this cache. This operation is very
fast and never fails.
*/
-/*! \fn bool QContiguousCache::operator==(const QContiguousCache<T> &other) const
+/*! \fn template<typename T> bool QContiguousCache<T>::operator==(const QContiguousCache<T> &other) const
Returns \c true if \a other is equal to this cache; otherwise returns \c false.
@@ -225,7 +225,7 @@ MyRecord record(int row) const
\sa operator!=()
*/
-/*! \fn bool QContiguousCache::operator!=(const QContiguousCache<T> &other) const
+/*! \fn template<typename T> bool QContiguousCache<T>::operator!=(const QContiguousCache<T> &other) const
Returns \c true if \a other is not equal to this cache; otherwise
returns \c false.
@@ -236,7 +236,7 @@ MyRecord record(int row) const
\sa operator==()
*/
-/*! \fn int QContiguousCache::capacity() const
+/*! \fn template<typename T> int QContiguousCache<T>::capacity() const
Returns the number of items the cache can store before it is full.
When a cache contains a number of items equal to its capacity, adding new
@@ -245,26 +245,26 @@ MyRecord record(int row) const
\sa setCapacity(), size()
*/
-/*! \fn int QContiguousCache::count() const
+/*! \fn template<typename T> int QContiguousCache<T>::count() const
Same as size().
*/
-/*! \fn int QContiguousCache::size() const
+/*! \fn template<typename T> int QContiguousCache<T>::size() const
Returns the number of items contained within the cache.
\sa capacity()
*/
-/*! \fn bool QContiguousCache::isEmpty() const
+/*! \fn template<typename T> bool QContiguousCache<T>::isEmpty() const
Returns \c true if no items are stored within the cache.
\sa size(), capacity()
*/
-/*! \fn bool QContiguousCache::isFull() const
+/*! \fn template<typename T> bool QContiguousCache<T>::isFull() const
Returns \c true if the number of items stored within the cache is equal
to the capacity of the cache.
@@ -272,19 +272,19 @@ MyRecord record(int row) const
\sa size(), capacity()
*/
-/*! \fn int QContiguousCache::available() const
+/*! \fn template<typename T> int QContiguousCache<T>::available() const
Returns the number of items that can be added to the cache before it becomes full.
\sa size(), capacity(), isFull()
*/
-/*! \fn void QContiguousCache::clear()
+/*! \fn template<typename T> void QContiguousCache<T>::clear()
Removes all items from the cache. The capacity is unchanged.
*/
-/*! \fn void QContiguousCache::setCapacity(int size)
+/*! \fn template<typename T> void QContiguousCache<T>::setCapacity(int size)
Sets the capacity of the cache to the given \a size. A cache can hold a
number of items equal to its capacity. When inserting, appending or prepending
@@ -297,7 +297,7 @@ MyRecord record(int row) const
\sa capacity(), isFull()
*/
-/*! \fn const T &QContiguousCache::at(int i) const
+/*! \fn template<typename T> const T &QContiguousCache<T>::at(int i) const
Returns the item at index position \a i in the cache. \a i must
be a valid index position in the cache (i.e, firstIndex() <= \a i <= lastIndex()).
@@ -311,7 +311,7 @@ MyRecord record(int row) const
\sa firstIndex(), lastIndex(), insert(), operator[]()
*/
-/*! \fn T &QContiguousCache::operator[](int i)
+/*! \fn template<typename T> T &QContiguousCache<T>::operator[](int i)
Returns the item at index position \a i as a modifiable reference. If
the cache does not contain an item at the given index position \a i
@@ -326,14 +326,14 @@ MyRecord record(int row) const
\sa insert(), at()
*/
-/*! \fn const T &QContiguousCache::operator[](int i) const
+/*! \fn template<typename T> const T &QContiguousCache<T>::operator[](int i) const
\overload
Same as at(\a i).
*/
-/*! \fn void QContiguousCache::append(const T &value)
+/*! \fn template<typename T> void QContiguousCache<T>::append(const T &value)
Inserts \a value at the end of the cache. If the cache is already full
the item at the start of the cache will be removed.
@@ -341,7 +341,7 @@ MyRecord record(int row) const
\sa prepend(), insert(), isFull()
*/
-/*! \fn void QContiguousCache::prepend(const T &value)
+/*! \fn template<typename T> void QContiguousCache<T>::prepend(const T &value)
Inserts \a value at the start of the cache. If the cache is already full
the item at the end of the cache will be removed.
@@ -349,7 +349,7 @@ MyRecord record(int row) const
\sa append(), insert(), isFull()
*/
-/*! \fn void QContiguousCache::insert(int i, const T &value)
+/*! \fn template<typename T> void QContiguousCache<T>::insert(int i, const T &value)
Inserts the \a value at the index position \a i. If the cache already contains
an item at \a i then that value is replaced. If \a i is either one more than
@@ -369,14 +369,14 @@ MyRecord record(int row) const
\sa prepend(), append(), isFull(), firstIndex(), lastIndex()
*/
-/*! \fn bool QContiguousCache::containsIndex(int i) const
+/*! \fn template<typename T> bool QContiguousCache<T>::containsIndex(int i) const
Returns \c true if the cache's index range includes the given index \a i.
\sa firstIndex(), lastIndex()
*/
-/*! \fn int QContiguousCache::firstIndex() const
+/*! \fn template<typename T> int QContiguousCache<T>::firstIndex() const
Returns the first valid index in the cache. The index will be invalid if the
cache is empty.
@@ -384,7 +384,7 @@ MyRecord record(int row) const
\sa capacity(), size(), lastIndex()
*/
-/*! \fn int QContiguousCache::lastIndex() const
+/*! \fn template<typename T> int QContiguousCache<T>::lastIndex() const
Returns the last valid index in the cache. The index will be invalid if the cache is empty.
@@ -392,7 +392,7 @@ MyRecord record(int row) const
*/
-/*! \fn T &QContiguousCache::first()
+/*! \fn template<typename T> T &QContiguousCache<T>::first()
Returns a reference to the first item in the cache. This function
assumes that the cache isn't empty.
@@ -400,7 +400,7 @@ MyRecord record(int row) const
\sa last(), isEmpty()
*/
-/*! \fn T &QContiguousCache::last()
+/*! \fn template<typename T> T &QContiguousCache<T>::last()
Returns a reference to the last item in the cache. This function
assumes that the cache isn't empty.
@@ -408,17 +408,17 @@ MyRecord record(int row) const
\sa first(), isEmpty()
*/
-/*! \fn const T& QContiguousCache::first() const
+/*! \fn template<typename T> const T& QContiguousCache<T>::first() const
\overload
*/
-/*! \fn const T& QContiguousCache::last() const
+/*! \fn template<typename T> const T& QContiguousCache<T>::last() const
\overload
*/
-/*! \fn void QContiguousCache::removeFirst()
+/*! \fn template<typename T> void QContiguousCache<T>::removeFirst()
Removes the first item from the cache. This function assumes that
the cache isn't empty.
@@ -426,7 +426,7 @@ MyRecord record(int row) const
\sa removeLast()
*/
-/*! \fn void QContiguousCache::removeLast()
+/*! \fn template<typename T> void QContiguousCache<T>::removeLast()
Removes the last item from the cache. This function assumes that
the cache isn't empty.
@@ -434,7 +434,7 @@ MyRecord record(int row) const
\sa removeFirst()
*/
-/*! \fn T QContiguousCache::takeFirst()
+/*! \fn template<typename T> T QContiguousCache<T>::takeFirst()
Removes the first item in the cache and returns it. This function
assumes that the cache isn't empty.
@@ -444,7 +444,7 @@ MyRecord record(int row) const
\sa takeLast(), removeFirst()
*/
-/*! \fn T QContiguousCache::takeLast()
+/*! \fn template<typename T> T QContiguousCache<T>::takeLast()
Removes the last item in the cache and returns it. This function
assumes that the cache isn't empty.
@@ -454,7 +454,7 @@ MyRecord record(int row) const
\sa takeFirst(), removeLast()
*/
-/*! \fn void QContiguousCache::normalizeIndexes()
+/*! \fn template<typename T> void QContiguousCache<T>::normalizeIndexes()
Moves the first index and last index of the cache
such that they point to valid indexes. The function does not modify
@@ -473,7 +473,7 @@ MyRecord record(int row) const
\sa areIndexesValid(), append(), prepend()
*/
-/*! \fn bool QContiguousCache::areIndexesValid() const
+/*! \fn template<typename T> bool QContiguousCache<T>::areIndexesValid() const
Returns whether the indexes for items stored in the cache are valid.
Indexes can become invalid if items are appended after the index position
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index 050f37dcd2..df5e4e44e4 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -1272,7 +1272,7 @@ QDate QDate::fromString(const QString& string, Qt::DateFormat format)
}
/*!
- \fn QDate::fromString(const QString &string, const QString &format)
+ \fn QDate QDate::fromString(const QString &string, const QString &format)
Returns the QDate represented by the \a string, using the \a
format given, or an invalid date if the string cannot be parsed.
@@ -2000,7 +2000,7 @@ QTime QTime::fromString(const QString& string, Qt::DateFormat format)
}
/*!
- \fn QTime::fromString(const QString &string, const QString &format)
+ \fn QTime QTime::fromString(const QString &string, const QString &format)
Returns the QTime represented by the \a string, using the \a
format given, or an invalid time if the string cannot be parsed.
@@ -2216,7 +2216,7 @@ static int qt_timezone()
static QString qt_tzname(QDateTimePrivate::DaylightStatus daylightStatus)
{
int isDst = (daylightStatus == QDateTimePrivate::DaylightTime) ? 1 : 0;
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#if defined(Q_CC_MSVC)
size_t s = 0;
char name[512];
if (_get_tzname(&s, name, 512, isDst))
@@ -2346,7 +2346,7 @@ static bool qt_localtime(qint64 msecsSinceEpoch, QDate *localDate, QTime *localT
res = localtime_r(&secsSinceEpoch, &local);
if (res)
valid = true;
-#elif defined(_MSC_VER) && _MSC_VER >= 1400
+#elif defined(Q_CC_MSVC)
if (!_localtime64_s(&local, &secsSinceEpoch))
valid = true;
#else
@@ -4944,7 +4944,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
}
/*!
- \fn QDateTime::fromString(const QString &string, const QString &format)
+ \fn QDateTime QDateTime::fromString(const QString &string, const QString &format)
Returns the QDateTime represented by the \a string, using the \a
format given, or an invalid datetime if the string cannot be parsed.
diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h
index 3b741553d5..5a7b75db62 100644
--- a/src/corelib/tools/qdatetime.h
+++ b/src/corelib/tools/qdatetime.h
@@ -79,7 +79,7 @@ public:
int dayOfYear() const;
int daysInMonth() const;
int daysInYear() const;
- int weekNumber(int *yearNum = Q_NULLPTR) const;
+ int weekNumber(int *yearNum = nullptr) const;
#if QT_DEPRECATED_SINCE(5, 10) && !defined QT_NO_TEXTDATE
QT_DEPRECATED_X("Use QLocale::monthName or QLocale::standaloneMonthName")
diff --git a/src/corelib/tools/qdatetimeparser.cpp b/src/corelib/tools/qdatetimeparser.cpp
index 1a56418aaf..551e01e076 100644
--- a/src/corelib/tools/qdatetimeparser.cpp
+++ b/src/corelib/tools/qdatetimeparser.cpp
@@ -802,6 +802,7 @@ QDateTimeParser::parseSection(const QDateTime &currentValue, int sectionIndex,
break;
}
Q_FALLTHROUGH();
+ // All numeric:
case DaySection:
case YearSection:
case YearSection2Digits:
@@ -824,9 +825,9 @@ QDateTimeParser::parseSection(const QDateTime &currentValue, int sectionIndex,
bool ok = true;
int last = -1, used = -1;
- const int max = qMin(sectionmaxsize, sectiontextSize);
- QStringRef digitsStr = sectionTextRef.left(max);
- for (int digits = max; digits >= 1; --digits) {
+ Q_ASSERT(sectiontextSize <= sectionmaxsize);
+ QStringRef digitsStr = sectionTextRef.left(sectiontextSize);
+ for (int digits = sectiontextSize; digits >= 1; --digits) {
digitsStr.truncate(digits);
int tmp = (int)loc.toUInt(digitsStr, &ok);
if (ok && sn.type == Hour12Section) {
@@ -853,20 +854,20 @@ QDateTimeParser::parseSection(const QDateTime &currentValue, int sectionIndex,
QDTPDEBUG << "invalid because" << sectionTextRef << "can't become a uint" << last << ok;
} else {
const FieldInfo fi = fieldInfo(sectionIndex);
- const bool done = (used == sectionmaxsize);
- if (!done && fi & Fraction) { // typing 2 in a zzz field should be .200, not .002
+ const bool unfilled = used < sectionmaxsize;
+ if (unfilled && fi & Fraction) { // typing 2 in a zzz field should be .200, not .002
for (int i = used; i < sectionmaxsize; ++i)
last *= 10;
}
+ // Even those *= 10s can't take last above absMax:
+ Q_ASSERT(last <= absMax);
const int absMin = absoluteMin(sectionIndex);
if (last < absMin) {
- if (!done) // reversed test to dodge QDTPDEBUG ugliness !
+ if (unfilled)
result = ParsedSection(Intermediate, last, used);
else
QDTPDEBUG << "invalid because" << last << "is less than absoluteMin" << absMin;
- } else if (last > absMax) {
- result = ParsedSection(Intermediate, last, used);
- } else if (!done && (fi & (FixedWidth|Numeric)) == (FixedWidth|Numeric)) {
+ } else if (unfilled && (fi & (FixedWidth|Numeric)) == (FixedWidth|Numeric)) {
if (skipToNextSection(sectionIndex, currentValue, digitsStr)) {
const int missingZeroes = sectionmaxsize - digitsStr.size();
result = ParsedSection(Acceptable, last, sectionmaxsize, missingZeroes);
@@ -1159,7 +1160,8 @@ QDateTimeParser::scanString(const QDateTime &defaultValue,
}
state = qMin<State>(state, sect.state);
- if (state == Invalid || (state == Intermediate && context == FromString))
+ // QDateTimeEdit can fix Intermediate and zeroes, but input needing that didn't match format:
+ if (state == Invalid || (context == FromString && (state == Intermediate || sect.zeroes)))
return StateNode();
switch (sn.type) {
@@ -1475,8 +1477,8 @@ QDateTimeParser::parse(QString input, int position, const QDateTime &defaultValu
} else {
if (context == FromString) {
// optimization
- Q_ASSERT(maximum.date().toJulianDay() == 4642999);
- if (scan.value.date().toJulianDay() > 4642999)
+ Q_ASSERT(maximum.date().toJulianDay() == 5373484);
+ if (scan.value.date().toJulianDay() > 5373484)
scan.state = Invalid;
} else {
if (scan.value > maximum)
diff --git a/src/corelib/tools/qdatetimeparser_p.h b/src/corelib/tools/qdatetimeparser_p.h
index c3ae08da71..c9e63fe307 100644
--- a/src/corelib/tools/qdatetimeparser_p.h
+++ b/src/corelib/tools/qdatetimeparser_p.h
@@ -69,7 +69,7 @@ QT_REQUIRE_CONFIG(datetimeparser);
#define QDATETIMEEDIT_TIME_MAX QTime(23, 59, 59, 999)
#define QDATETIMEEDIT_DATE_MIN QDate(100, 1, 1)
#define QDATETIMEEDIT_COMPAT_DATE_MIN QDate(1752, 9, 14)
-#define QDATETIMEEDIT_DATE_MAX QDate(7999, 12, 31)
+#define QDATETIMEEDIT_DATE_MAX QDate(9999, 12, 31)
#define QDATETIMEEDIT_DATETIME_MIN QDateTime(QDATETIMEEDIT_DATE_MIN, QDATETIMEEDIT_TIME_MIN)
#define QDATETIMEEDIT_COMPAT_DATETIME_MIN QDateTime(QDATETIMEEDIT_COMPAT_DATE_MIN, QDATETIMEEDIT_TIME_MIN)
#define QDATETIMEEDIT_DATETIME_MAX QDateTime(QDATETIMEEDIT_DATE_MAX, QDATETIMEEDIT_TIME_MAX)
diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp
index 03bb1a1411..0b8fa4ca74 100644
--- a/src/corelib/tools/qeasingcurve.cpp
+++ b/src/corelib/tools/qeasingcurve.cpp
@@ -496,7 +496,7 @@ struct BezierEase : public QEasingCurveFunction
}
}
- QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
+ QEasingCurveFunction *copy() const override
{
BezierEase *rv = new BezierEase();
rv->_t = _t;
@@ -532,7 +532,7 @@ struct BezierEase : public QEasingCurveFunction
return newT;
}
- qreal value(qreal x) Q_DECL_OVERRIDE
+ qreal value(qreal x) override
{
Q_ASSERT(_bezierCurves.count() % 3 == 0);
@@ -826,7 +826,7 @@ struct TCBEase : public BezierEase
: BezierEase(QEasingCurve::TCBSpline)
{ }
- qreal value(qreal x) Q_DECL_OVERRIDE
+ qreal value(qreal x) override
{
Q_ASSERT(_bezierCurves.count() % 3 == 0);
@@ -846,7 +846,7 @@ struct ElasticEase : public QEasingCurveFunction
: QEasingCurveFunction(type, qreal(0.3), qreal(1.0))
{ }
- QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
+ QEasingCurveFunction *copy() const override
{
ElasticEase *rv = new ElasticEase(_t);
rv->_p = _p;
@@ -856,7 +856,7 @@ struct ElasticEase : public QEasingCurveFunction
return rv;
}
- qreal value(qreal t) Q_DECL_OVERRIDE
+ qreal value(qreal t) override
{
qreal p = (_p < 0) ? qreal(0.3) : _p;
qreal a = (_a < 0) ? qreal(1.0) : _a;
@@ -881,7 +881,7 @@ struct BounceEase : public QEasingCurveFunction
: QEasingCurveFunction(type, qreal(0.3), qreal(1.0))
{ }
- QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
+ QEasingCurveFunction *copy() const override
{
BounceEase *rv = new BounceEase(_t);
rv->_a = _a;
@@ -890,7 +890,7 @@ struct BounceEase : public QEasingCurveFunction
return rv;
}
- qreal value(qreal t) Q_DECL_OVERRIDE
+ qreal value(qreal t) override
{
qreal a = (_a < 0) ? qreal(1.0) : _a;
switch(_t) {
@@ -914,7 +914,7 @@ struct BackEase : public QEasingCurveFunction
: QEasingCurveFunction(type, qreal(0.3), qreal(1.0), qreal(1.70158))
{ }
- QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
+ QEasingCurveFunction *copy() const override
{
BackEase *rv = new BackEase(_t);
rv->_o = _o;
@@ -923,7 +923,7 @@ struct BackEase : public QEasingCurveFunction
return rv;
}
- qreal value(qreal t) Q_DECL_OVERRIDE
+ qreal value(qreal t) override
{
qreal o = (_o < 0) ? qreal(1.70158) : _o;
switch(_t) {
@@ -1488,7 +1488,7 @@ QDataStream &operator>>(QDataStream &stream, QEasingCurve &easing)
bool hasConfig;
stream >> hasConfig;
delete easing.d_ptr->config;
- easing.d_ptr->config = Q_NULLPTR;
+ easing.d_ptr->config = nullptr;
if (hasConfig) {
QEasingCurveFunction *config = curveToFunctionObject(type);
stream >> config->_p;
diff --git a/src/corelib/tools/qeasingcurve.h b/src/corelib/tools/qeasingcurve.h
index ba06de8f9e..74bde5825a 100644
--- a/src/corelib/tools/qeasingcurve.h
+++ b/src/corelib/tools/qeasingcurve.h
@@ -81,7 +81,7 @@ public:
QEasingCurve &operator=(const QEasingCurve &other)
{ if ( this != &other ) { QEasingCurve copy(other); swap(copy); } return *this; }
#ifdef Q_COMPILER_RVALUE_REFS
- QEasingCurve(QEasingCurve &&other) Q_DECL_NOTHROW : d_ptr(other.d_ptr) { other.d_ptr = Q_NULLPTR; }
+ QEasingCurve(QEasingCurve &&other) Q_DECL_NOTHROW : d_ptr(other.d_ptr) { other.d_ptr = nullptr; }
QEasingCurve &operator=(QEasingCurve &&other) Q_DECL_NOTHROW
{ qSwap(d_ptr, other.d_ptr); return *this; }
#endif
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index 501f0d345f..5f0b131342 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -736,7 +736,7 @@ void QHashData::checkSanity()
#endif
/*!
- \fn uint qHash(const QPair<T1, T2> &key, uint seed = 0)
+ \fn template <typename T1, typename T2> uint qHash(const QPair<T1, T2> &key, uint seed = 0)
\since 5.0
\relates QHash
@@ -746,7 +746,7 @@ void QHashData::checkSanity()
*/
/*!
- \fn uint qHash(const std::pair<T1, T2> &key, uint seed = 0)
+ \fn template <typename T1, typename T2> uint qHash(const std::pair<T1, T2> &key, uint seed = 0)
\since 5.7
\relates QHash
@@ -762,7 +762,7 @@ void QHashData::checkSanity()
constraints, we cannot change the QPair algorithm to match the std::pair one before Qt 6.
*/
-/*! \fn uint qHashRange(InputIterator first, InputIterator last, uint seed = 0)
+/*! \fn template <typename InputIterator> uint qHashRange(InputIterator first, InputIterator last, uint seed = 0)
\relates QHash
\since 5.5
@@ -801,7 +801,7 @@ void QHashData::checkSanity()
\sa qHashBits(), qHashRangeCommutative()
*/
-/*! \fn uint qHashRangeCommutative(InputIterator first, InputIterator last, uint seed = 0)
+/*! \fn template <typename InputIterator> uint qHashRangeCommutative(InputIterator first, InputIterator last, uint seed = 0)
\relates QHash
\since 5.5
@@ -963,7 +963,7 @@ uint qHash(double key, uint seed) Q_DECL_NOTHROW
return key != 0.0 ? hash(reinterpret_cast<const uchar *>(&key), sizeof(key), seed) : seed ;
}
-#ifndef Q_OS_DARWIN
+#if !defined(Q_OS_DARWIN) || defined(Q_CLANG_QDOC)
/*! \relates QHash
\since 5.3
@@ -1024,7 +1024,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
Returns the hash value for the \a key, using \a seed to seed the calculation.
*/
-/*! \fn uint qHash(const T *key, uint seed = 0)
+/*! \fn template <class T> uint qHash(const T *key, uint seed = 0)
\relates QHash
\since 5.0
@@ -1242,7 +1242,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHashIterator, QMutableHashIterator, QMap, QSet
*/
-/*! \fn QHash::QHash()
+/*! \fn template <class Key, class T> QHash<Key, T>::QHash()
Constructs an empty hash.
@@ -1250,7 +1250,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::QHash(QHash &&other)
+ \fn template <class Key, class T> QHash<Key, T>::QHash(QHash &&other)
Move-constructs a QHash instance, making it point at the same
object that \a other was pointing to.
@@ -1258,7 +1258,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\since 5.2
*/
-/*! \fn QHash::QHash(std::initializer_list<std::pair<Key,T> > list)
+/*! \fn template <class Key, class T> QHash<Key, T>::QHash(std::initializer_list<std::pair<Key,T> > list)
\since 5.1
Constructs a hash with a copy of each of the elements in the
@@ -1268,7 +1268,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
compiled in C++11 mode.
*/
-/*! \fn QHash::QHash(const QHash &other)
+/*! \fn template <class Key, class T> QHash<Key, T>::QHash(const QHash &other)
Constructs a copy of \a other.
@@ -1280,40 +1280,40 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator=()
*/
-/*! \fn QHash::~QHash()
+/*! \fn template <class Key, class T> QHash<Key, T>::~QHash()
Destroys the hash. References to the values in the hash and all
iterators of this hash become invalid.
*/
-/*! \fn QHash &QHash::operator=(const QHash &other)
+/*! \fn template <class Key, class T> QHash &QHash<Key, T>::operator=(const QHash &other)
Assigns \a other to this hash and returns a reference to this hash.
*/
/*!
- \fn QHash &QHash::operator=(QHash &&other)
+ \fn template <class Key, class T> QHash &QHash<Key, T>::operator=(QHash &&other)
Move-assigns \a other to this QHash instance.
\since 5.2
*/
-/*! \fn void QHash::swap(QHash &other)
+/*! \fn template <class Key, class T> void QHash<Key, T>::swap(QHash &other)
\since 4.8
Swaps hash \a other with this hash. This operation is very
fast and never fails.
*/
-/*! \fn void QMultiHash::swap(QMultiHash &other)
+/*! \fn template <class Key, class T> void QMultiHash<Key, T>::swap(QMultiHash &other)
\since 4.8
Swaps hash \a other with this hash. This operation is very
fast and never fails.
*/
-/*! \fn bool QHash::operator==(const QHash &other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::operator==(const QHash &other) const
Returns \c true if \a other is equal to this hash; otherwise returns
false.
@@ -1326,7 +1326,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator!=()
*/
-/*! \fn bool QHash::operator!=(const QHash &other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::operator!=(const QHash &other) const
Returns \c true if \a other is not equal to this hash; otherwise
returns \c false.
@@ -1339,14 +1339,14 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator==()
*/
-/*! \fn int QHash::size() const
+/*! \fn template <class Key, class T> int QHash<Key, T>::size() const
Returns the number of items in the hash.
\sa isEmpty(), count()
*/
-/*! \fn bool QHash::isEmpty() const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::isEmpty() const
Returns \c true if the hash contains no items; otherwise returns
false.
@@ -1354,7 +1354,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa size()
*/
-/*! \fn int QHash::capacity() const
+/*! \fn template <class Key, class T> int QHash<Key, T>::capacity() const
Returns the number of buckets in the QHash's internal hash table.
@@ -1366,7 +1366,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa reserve(), squeeze()
*/
-/*! \fn void QHash::reserve(int size)
+/*! \fn template <class Key, class T> void QHash<Key, T>::reserve(int size)
Ensures that the QHash's internal hash table consists of at least
\a size buckets.
@@ -1389,7 +1389,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa squeeze(), capacity()
*/
-/*! \fn void QHash::squeeze()
+/*! \fn template <class Key, class T> void QHash<Key, T>::squeeze()
Reduces the size of the QHash's internal hash table to save
memory.
@@ -1401,7 +1401,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa reserve(), capacity()
*/
-/*! \fn void QHash::detach()
+/*! \fn template <class Key, class T> void QHash<Key, T>::detach()
\internal
@@ -1411,7 +1411,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa isDetached()
*/
-/*! \fn bool QHash::isDetached() const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::isDetached() const
\internal
@@ -1421,24 +1421,24 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa detach()
*/
-/*! \fn void QHash::setSharable(bool sharable)
+/*! \fn template <class Key, class T> void QHash<Key, T>::setSharable(bool sharable)
\internal
*/
-/*! \fn bool QHash::isSharedWith(const QHash &other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::isSharedWith(const QHash &other) const
\internal
*/
-/*! \fn void QHash::clear()
+/*! \fn template <class Key, class T> void QHash<Key, T>::clear()
Removes all items from the hash.
\sa remove()
*/
-/*! \fn int QHash::remove(const Key &key)
+/*! \fn template <class Key, class T> int QHash<Key, T>::remove(const Key &key)
Removes all the items that have the \a key from the hash.
Returns the number of items removed which is usually 1 but will
@@ -1448,7 +1448,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa clear(), take(), QMultiHash::remove()
*/
-/*! \fn T QHash::take(const Key &key)
+/*! \fn template <class Key, class T> T QHash<Key, T>::take(const Key &key)
Removes the item with the \a key from the hash and returns
the value associated with it.
@@ -1463,7 +1463,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa remove()
*/
-/*! \fn bool QHash::contains(const Key &key) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::contains(const Key &key) const
Returns \c true if the hash contains an item with the \a key;
otherwise returns \c false.
@@ -1471,7 +1471,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa count(), QMultiHash::contains()
*/
-/*! \fn const T QHash::value(const Key &key) const
+/*! \fn template <class Key, class T> const T QHash<Key, T>::value(const Key &key) const
Returns the value associated with the \a key.
@@ -1483,14 +1483,14 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa key(), values(), contains(), operator[]()
*/
-/*! \fn const T QHash::value(const Key &key, const T &defaultValue) const
+/*! \fn template <class Key, class T> const T QHash<Key, T>::value(const Key &key, const T &defaultValue) const
\overload
If the hash contains no item with the given \a key, the function returns
\a defaultValue.
*/
-/*! \fn T &QHash::operator[](const Key &key)
+/*! \fn template <class Key, class T> T &QHash<Key, T>::operator[](const Key &key)
Returns the value associated with the \a key as a modifiable
reference.
@@ -1504,14 +1504,14 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insert(), value()
*/
-/*! \fn const T QHash::operator[](const Key &key) const
+/*! \fn template <class Key, class T> const T QHash<Key, T>::operator[](const Key &key) const
\overload
Same as value().
*/
-/*! \fn QList<Key> QHash::uniqueKeys() const
+/*! \fn template <class Key, class T> QList<Key> QHash<Key, T>::uniqueKeys() const
\since 4.2
Returns a list containing all the keys in the map. Keys that occur multiple
@@ -1521,7 +1521,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keys(), values()
*/
-/*! \fn QList<Key> QHash::keys() const
+/*! \fn template <class Key, class T> QList<Key> QHash<Key, T>::keys() const
Returns a list containing all the keys in the hash, in an
arbitrary order. Keys that occur multiple times in the hash
@@ -1536,7 +1536,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa uniqueKeys(), values(), key()
*/
-/*! \fn QList<Key> QHash::keys(const T &value) const
+/*! \fn template <class Key, class T> QList<Key> QHash<Key, T>::keys(const T &value) const
\overload
@@ -1548,7 +1548,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
by value.
*/
-/*! \fn QList<T> QHash::values() const
+/*! \fn template <class Key, class T> QList<T> QHash<Key, T>::values() const
Returns a list containing all the values in the hash, in an
arbitrary order. If a key is associated with multiple values, all of
@@ -1560,7 +1560,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keys(), value()
*/
-/*! \fn QList<T> QHash::values(const Key &key) const
+/*! \fn template <class Key, class T> QList<T> QHash<Key, T>::values(const Key &key) const
\overload
@@ -1570,7 +1570,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa count(), insertMulti()
*/
-/*! \fn Key QHash::key(const T &value) const
+/*! \fn template <class Key, class T> Key QHash<Key, T>::key(const T &value) const
Returns the first key mapped to \a value.
@@ -1585,7 +1585,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn Key QHash::key(const T &value, const Key &defaultKey) const
+ \fn template <class Key, class T> Key QHash<Key, T>::key(const T &value, const Key &defaultKey) const
\since 4.3
\overload
@@ -1597,21 +1597,21 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
by value.
*/
-/*! \fn int QHash::count(const Key &key) const
+/*! \fn template <class Key, class T> int QHash<Key, T>::count(const Key &key) const
Returns the number of items associated with the \a key.
\sa contains(), insertMulti()
*/
-/*! \fn int QHash::count() const
+/*! \fn template <class Key, class T> int QHash<Key, T>::count() const
\overload
Same as size().
*/
-/*! \fn QHash::iterator QHash::begin()
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
the hash.
@@ -1619,12 +1619,12 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa constBegin(), end()
*/
-/*! \fn QHash::const_iterator QHash::begin() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::begin() const
\overload
*/
-/*! \fn QHash::const_iterator QHash::cbegin() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -1633,7 +1633,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa begin(), cend()
*/
-/*! \fn QHash::const_iterator QHash::constBegin() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
in the hash.
@@ -1641,7 +1641,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa begin(), constEnd()
*/
-/*! \fn QHash::key_iterator QHash::keyBegin() const
+/*! \fn template <class Key, class T> QHash<Key, T>::key_iterator QHash<Key, T>::keyBegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first key
@@ -1650,7 +1650,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyEnd()
*/
-/*! \fn QHash::iterator QHash::end()
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
after the last item in the hash.
@@ -1658,12 +1658,12 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa begin(), constEnd()
*/
-/*! \fn QHash::const_iterator QHash::end() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::end() const
\overload
*/
-/*! \fn QHash::const_iterator QHash::constEnd() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the hash.
@@ -1671,7 +1671,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa constBegin(), end()
*/
-/*! \fn QHash::const_iterator QHash::cend() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -1680,7 +1680,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa cbegin(), end()
*/
-/*! \fn QHash::key_iterator QHash::keyEnd() const
+/*! \fn template <class Key, class T> QHash<Key, T>::key_iterator QHash<Key, T>::keyEnd() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -1689,7 +1689,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyBegin()
*/
-/*! \fn QHash::key_value_iterator QHash::keyValueBegin()
+/*! \fn template <class Key, class T> QHash<Key, T>::key_value_iterator QHash<Key, T>::keyValueBegin()
\since 5.10
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first entry
@@ -1698,7 +1698,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyValueEnd()
*/
-/*! \fn QHash::key_value_iterator QHash::keyValueEnd()
+/*! \fn template <class Key, class T> QHash<Key, T>::key_value_iterator QHash<Key, T>::keyValueEnd()
\since 5.10
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -1707,7 +1707,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyValueBegin()
*/
-/*! \fn QHash::const_key_value_iterator QHash::keyValueBegin() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_key_value_iterator QHash<Key, T>::keyValueBegin() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first entry
@@ -1716,7 +1716,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyValueEnd()
*/
-/*! \fn QHash::const_key_value_iterator QHash::constKeyValueBegin() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_key_value_iterator QHash<Key, T>::constKeyValueBegin() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first entry
@@ -1725,7 +1725,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyValueBegin()
*/
-/*! \fn QHash::const_key_value_iterator QHash::keyValueEnd() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_key_value_iterator QHash<Key, T>::keyValueEnd() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -1734,7 +1734,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa keyValueBegin()
*/
-/*! \fn QHash::const_key_value_iterator QHash::constKeyValueEnd() const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_key_value_iterator QHash<Key, T>::constKeyValueEnd() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -1743,7 +1743,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa constKeyValueBegin()
*/
-/*! \fn QHash::iterator QHash::erase(const_iterator pos)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::erase(const_iterator pos)
\since 5.7
Removes the (key, value) pair associated with the iterator \a pos
@@ -1760,11 +1760,11 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa remove(), take(), find()
*/
-/*! \fn QHash::iterator QHash::erase(iterator pos)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::erase(iterator pos)
\overload
*/
-/*! \fn QHash::iterator QHash::find(const Key &key)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::find(const Key &key)
Returns an iterator pointing to the item with the \a key in the
hash.
@@ -1783,12 +1783,12 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa value(), values(), QMultiHash::find()
*/
-/*! \fn QHash::const_iterator QHash::find(const Key &key) const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::find(const Key &key) const
\overload
*/
-/*! \fn QHash::const_iterator QHash::constFind(const Key &key) const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::constFind(const Key &key) const
\since 4.1
Returns an iterator pointing to the item with the \a key in the
@@ -1800,7 +1800,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa find(), QMultiHash::constFind()
*/
-/*! \fn QHash::iterator QHash::insert(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::insert(const Key &key, const T &value)
Inserts a new item with the \a key and a value of \a value.
@@ -1813,7 +1813,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insertMulti()
*/
-/*! \fn QHash::iterator QHash::insertMulti(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::insertMulti(const Key &key, const T &value)
Inserts a new item with the \a key and a value of \a value.
@@ -1825,7 +1825,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insert(), values()
*/
-/*! \fn QHash &QHash::unite(const QHash &other)
+/*! \fn template <class Key, class T> QHash &QHash<Key, T>::unite(const QHash &other)
Inserts all the items in the \a other hash into this hash. If a
key is common to both hashes, the resulting hash will contain the
@@ -1834,14 +1834,14 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insertMulti()
*/
-/*! \fn bool QHash::empty() const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::empty() const
This function is provided for STL compatibility. It is equivalent
to isEmpty(), returning true if the hash is empty; otherwise
returns \c false.
*/
-/*! \fn QPair<iterator, iterator> QHash::equal_range(const Key &key)
+/*! \fn template <class Key, class T> QPair<iterator, iterator> QHash<Key, T>::equal_range(const Key &key)
\since 5.7
Returns a pair of iterators delimiting the range of values \c{[first, second)}, that
@@ -1849,7 +1849,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QPair<const_iterator, const_iterator> QHash::equal_range(const Key &key) const
+ \fn template <class Key, class T> QPair<const_iterator, const_iterator> QHash<Key, T>::equal_range(const Key &key) const
\overload
\since 5.7
*/
@@ -2020,7 +2020,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash::const_iterator, QHash::key_iterator, QMutableHashIterator
*/
-/*! \fn QHash::iterator::iterator()
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator::iterator()
Constructs an uninitialized iterator.
@@ -2031,12 +2031,12 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash::begin(), QHash::end()
*/
-/*! \fn QHash::iterator::iterator(void *node)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator::iterator(void *node)
\internal
*/
-/*! \fn const Key &QHash::iterator::key() const
+/*! \fn template <class Key, class T> const Key &QHash<Key, T>::iterator::key() const
Returns the current item's key as a const reference.
@@ -2047,7 +2047,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa value()
*/
-/*! \fn T &QHash::iterator::value() const
+/*! \fn template <class Key, class T> T &QHash<Key, T>::iterator::value() const
Returns a modifiable reference to the current item's value.
@@ -2059,7 +2059,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa key(), operator*()
*/
-/*! \fn T &QHash::iterator::operator*() const
+/*! \fn template <class Key, class T> T &QHash<Key, T>::iterator::operator*() const
Returns a modifiable reference to the current item's value.
@@ -2068,7 +2068,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa key()
*/
-/*! \fn T *QHash::iterator::operator->() const
+/*! \fn template <class Key, class T> T *QHash<Key, T>::iterator::operator->() const
Returns a pointer to the current item's value.
@@ -2076,8 +2076,8 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn bool QHash::iterator::operator==(const iterator &other) const
- \fn bool QHash::iterator::operator==(const const_iterator &other) const
+ \fn template <class Key, class T> bool QHash<Key, T>::iterator::operator==(const iterator &other) const
+ \fn template <class Key, class T> bool QHash<Key, T>::iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -2086,8 +2086,8 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn bool QHash::iterator::operator!=(const iterator &other) const
- \fn bool QHash::iterator::operator!=(const const_iterator &other) const
+ \fn template <class Key, class T> bool QHash<Key, T>::iterator::operator!=(const iterator &other) const
+ \fn template <class Key, class T> bool QHash<Key, T>::iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -2096,7 +2096,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::iterator &QHash::iterator::operator++()
+ \fn template <class Key, class T> QHash<Key, T>::iterator &QHash<Key, T>::iterator::operator++()
The prefix ++ operator (\c{++i}) advances the iterator to the
next item in the hash and returns an iterator to the new current
@@ -2107,7 +2107,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator--()
*/
-/*! \fn QHash::iterator QHash::iterator::operator++(int)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::iterator::operator++(int)
\overload
@@ -2117,7 +2117,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::iterator &QHash::iterator::operator--()
+ \fn template <class Key, class T> QHash<Key, T>::iterator &QHash<Key, T>::iterator::operator--()
The prefix -- operator (\c{--i}) makes the preceding item
current and returns an iterator pointing to the new current item.
@@ -2129,7 +2129,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::iterator QHash::iterator::operator--(int)
+ \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::iterator::operator--(int)
\overload
@@ -2138,7 +2138,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
current item.
*/
-/*! \fn QHash::iterator QHash::iterator::operator+(int j) const
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -2149,7 +2149,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
-/*! \fn QHash::iterator QHash::iterator::operator-(int j) const
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator QHash<Key, T>::iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -2159,7 +2159,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator+()
*/
-/*! \fn QHash::iterator &QHash::iterator::operator+=(int j)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator &QHash<Key, T>::iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -2167,7 +2167,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator-=(), operator+()
*/
-/*! \fn QHash::iterator &QHash::iterator::operator-=(int j)
+/*! \fn template <class Key, class T> QHash<Key, T>::iterator &QHash<Key, T>::iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -2222,7 +2222,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash::iterator, QHashIterator
*/
-/*! \fn QHash::const_iterator::const_iterator()
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -2233,31 +2233,31 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash::constBegin(), QHash::constEnd()
*/
-/*! \fn QHash::const_iterator::const_iterator(void *node)
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator::const_iterator(void *node)
\internal
*/
-/*! \fn QHash::const_iterator::const_iterator(const iterator &other)
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator::const_iterator(const iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn const Key &QHash::const_iterator::key() const
+/*! \fn template <class Key, class T> const Key &QHash<Key, T>::const_iterator::key() const
Returns the current item's key.
\sa value()
*/
-/*! \fn const T &QHash::const_iterator::value() const
+/*! \fn template <class Key, class T> const T &QHash<Key, T>::const_iterator::value() const
Returns the current item's value.
\sa key(), operator*()
*/
-/*! \fn const T &QHash::const_iterator::operator*() const
+/*! \fn template <class Key, class T> const T &QHash<Key, T>::const_iterator::operator*() const
Returns the current item's value.
@@ -2266,14 +2266,14 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa key()
*/
-/*! \fn const T *QHash::const_iterator::operator->() const
+/*! \fn template <class Key, class T> const T *QHash<Key, T>::const_iterator::operator->() const
Returns a pointer to the current item's value.
\sa value()
*/
-/*! \fn bool QHash::const_iterator::operator==(const const_iterator &other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -2281,7 +2281,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator!=()
*/
-/*! \fn bool QHash::const_iterator::operator!=(const const_iterator &other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -2290,7 +2290,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::const_iterator &QHash::const_iterator::operator++()
+ \fn template <class Key, class T> QHash<Key, T>::const_iterator &QHash<Key, T>::const_iterator::operator++()
The prefix ++ operator (\c{++i}) advances the iterator to the
next item in the hash and returns an iterator to the new current
@@ -2301,7 +2301,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator--()
*/
-/*! \fn QHash::const_iterator QHash::const_iterator::operator++(int)
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::const_iterator::operator++(int)
\overload
@@ -2310,7 +2310,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
current item.
*/
-/*! \fn QHash::const_iterator &QHash::const_iterator::operator--()
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator &QHash<Key, T>::const_iterator::operator--()
The prefix -- operator (\c{--i}) makes the preceding item
current and returns an iterator pointing to the new current item.
@@ -2321,7 +2321,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator++()
*/
-/*! \fn QHash::const_iterator QHash::const_iterator::operator--(int)
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::const_iterator::operator--(int)
\overload
@@ -2330,7 +2330,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
current item.
*/
-/*! \fn QHash::const_iterator QHash::const_iterator::operator+(int j) const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::const_iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -2340,7 +2340,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator-()
*/
-/*! \fn QHash::const_iterator QHash::const_iterator::operator-(int j) const
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator QHash<Key, T>::const_iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -2350,7 +2350,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator+()
*/
-/*! \fn QHash::const_iterator &QHash::const_iterator::operator+=(int j)
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator &QHash<Key, T>::const_iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -2360,7 +2360,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator-=(), operator+()
*/
-/*! \fn QHash::const_iterator &QHash::const_iterator::operator-=(int j)
+/*! \fn template <class Key, class T> QHash<Key, T>::const_iterator &QHash<Key, T>::const_iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -2407,17 +2407,17 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash::const_iterator, QHash::iterator
*/
-/*! \fn const T &QHash::key_iterator::operator*() const
+/*! \fn template <class Key, class T> const T &QHash<Key, T>::key_iterator::operator*() const
Returns the current item's key.
*/
-/*! \fn const T *QHash::key_iterator::operator->() const
+/*! \fn template <class Key, class T> const T *QHash<Key, T>::key_iterator::operator->() const
Returns a pointer to the current item's key.
*/
-/*! \fn bool QHash::key_iterator::operator==(key_iterator other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::key_iterator::operator==(key_iterator other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -2425,7 +2425,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator!=()
*/
-/*! \fn bool QHash::key_iterator::operator!=(key_iterator other) const
+/*! \fn template <class Key, class T> bool QHash<Key, T>::key_iterator::operator!=(key_iterator other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -2434,7 +2434,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::key_iterator &QHash::key_iterator::operator++()
+ \fn template <class Key, class T> QHash<Key, T>::key_iterator &QHash<Key, T>::key_iterator::operator++()
The prefix ++ operator (\c{++i}) advances the iterator to the
next item in the hash and returns an iterator to the new current
@@ -2445,7 +2445,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator--()
*/
-/*! \fn QHash::key_iterator QHash::key_iterator::operator++(int)
+/*! \fn template <class Key, class T> QHash<Key, T>::key_iterator QHash<Key, T>::key_iterator::operator++(int)
\overload
@@ -2454,7 +2454,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
item.
*/
-/*! \fn QHash::key_iterator &QHash::key_iterator::operator--()
+/*! \fn template <class Key, class T> QHash<Key, T>::key_iterator &QHash<Key, T>::key_iterator::operator--()
The prefix -- operator (\c{--i}) makes the preceding item
current and returns an iterator pointing to the new current item.
@@ -2465,7 +2465,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator++()
*/
-/*! \fn QHash::key_iterator QHash::key_iterator::operator--(int)
+/*! \fn template <class Key, class T> QHash<Key, T>::key_iterator QHash<Key, T>::key_iterator::operator--(int)
\overload
@@ -2474,10 +2474,22 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
item.
*/
-/*! \fn const_iterator QHash::key_iterator::base() const
+/*! \fn template <class Key, class T> const_iterator QHash<Key, T>::key_iterator::base() const
Returns the underlying const_iterator this key_iterator is based on.
*/
+/*! \typedef QHash::const_key_value_iterator
+ \inmodule QtCore
+ \since 5.10
+ \brief The QMap::const_key_value_iterator typedef provides an STL-style const iterator for QHash and QMultiHash.
+
+ QHash::const_key_value_iterator is essentially the same as QHash::const_iterator
+ with the difference that operator*() returns a key/value pair instead of a
+ value.
+
+ \sa QKeyValueIterator
+*/
+
/*! \typedef QHash::key_value_iterator
\inmodule QtCore
\since 5.10
@@ -2490,7 +2502,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QKeyValueIterator
*/
-/*! \fn QDataStream &operator<<(QDataStream &out, const QHash<Key, T>& hash)
+/*! \fn template <class Key, class T> QDataStream &operator<<(QDataStream &out, const QHash<Key, T>& hash)
\relates QHash
Writes the hash \a hash to stream \a out.
@@ -2501,7 +2513,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa {Serializing Qt Data Types}
*/
-/*! \fn QDataStream &operator>>(QDataStream &in, QHash<Key, T> &hash)
+/*! \fn template <class Key, class T> QDataStream &operator>>(QDataStream &in, QHash<Key, T> &hash)
\relates QHash
Reads a hash from stream \a in into \a hash.
@@ -2568,12 +2580,12 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash, QHashIterator, QMutableHashIterator, QMultiMap
*/
-/*! \fn QMultiHash::QMultiHash()
+/*! \fn template <class Key, class T> QMultiHash<Key, T>::QMultiHash()
Constructs an empty hash.
*/
-/*! \fn QMultiHash::QMultiHash(std::initializer_list<std::pair<Key,T> > list)
+/*! \fn template <class Key, class T> QMultiHash<Key, T>::QMultiHash(std::initializer_list<std::pair<Key,T> > list)
\since 5.1
Constructs a multi-hash with a copy of each of the elements in the
@@ -2583,7 +2595,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
compiled in C++11 mode.
*/
-/*! \fn QMultiHash::QMultiHash(const QHash<Key, T> &other)
+/*! \fn template <class Key, class T> QMultiHash<Key, T>::QMultiHash(const QHash<Key, T> &other)
Constructs a copy of \a other (which can be a QHash or a
QMultiHash).
@@ -2591,7 +2603,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator=()
*/
-/*! \fn QMultiHash::iterator QMultiHash::replace(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMultiHash<Key, T>::iterator QMultiHash<Key, T>::replace(const Key &key, const T &value)
Inserts a new item with the \a key and a value of \a value.
@@ -2604,7 +2616,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insert()
*/
-/*! \fn QMultiHash::iterator QMultiHash::insert(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMultiHash<Key, T>::iterator QMultiHash<Key, T>::insert(const Key &key, const T &value)
Inserts a new item with the \a key and a value of \a value.
@@ -2616,7 +2628,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa replace()
*/
-/*! \fn QMultiHash &QMultiHash::operator+=(const QMultiHash &other)
+/*! \fn template <class Key, class T> QMultiHash &QMultiHash<Key, T>::operator+=(const QMultiHash &other)
Inserts all the items in the \a other hash into this hash
and returns a reference to this hash.
@@ -2624,7 +2636,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insert()
*/
-/*! \fn QMultiHash QMultiHash::operator+(const QMultiHash &other) const
+/*! \fn template <class Key, class T> QMultiHash QMultiHash<Key, T>::operator+(const QMultiHash &other) const
Returns a hash that contains all the items in this hash in
addition to all the items in \a other. If a key is common to both
@@ -2634,7 +2646,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn bool QMultiHash::contains(const Key &key, const T &value) const
+ \fn template <class Key, class T> bool QMultiHash<Key, T>::contains(const Key &key, const T &value) const
\since 4.3
Returns \c true if the hash contains an item with the \a key and
@@ -2644,7 +2656,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn int QMultiHash::remove(const Key &key, const T &value)
+ \fn template <class Key, class T> int QMultiHash<Key, T>::remove(const Key &key, const T &value)
\since 4.3
Removes all the items that have the \a key and the value \a
@@ -2654,7 +2666,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn int QMultiHash::count(const Key &key, const T &value) const
+ \fn template <class Key, class T> int QMultiHash<Key, T>::count(const Key &key, const T &value) const
\since 4.3
Returns the number of items with the \a key and \a value.
@@ -2663,7 +2675,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn typename QHash<Key, T>::iterator QMultiHash::find(const Key &key, const T &value)
+ \fn template <class Key, class T> typename QHash<Key, T>::iterator QMultiHash<Key, T>::find(const Key &key, const T &value)
\since 4.3
Returns an iterator pointing to the item with the \a key and \a value.
@@ -2676,13 +2688,13 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn typename QHash<Key, T>::const_iterator QMultiHash::find(const Key &key, const T &value) const
+ \fn template <class Key, class T> typename QHash<Key, T>::const_iterator QMultiHash<Key, T>::find(const Key &key, const T &value) const
\since 4.3
\overload
*/
/*!
- \fn typename QHash<Key, T>::const_iterator QMultiHash::constFind(const Key &key, const T &value) const
+ \fn template <class Key, class T> typename QHash<Key, T>::const_iterator QMultiHash<Key, T>::constFind(const Key &key, const T &value) const
\since 4.3
Returns an iterator pointing to the item with the \a key and the
@@ -2695,7 +2707,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn uint qHash(const QHash<Key, T> &key, uint seed = 0)
+ \fn template <class Key, class T> uint qHash(const QHash<Key, T> &key, uint seed = 0)
\since 5.8
\relates QHash
@@ -2705,7 +2717,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn uint qHash(const QMultiHash<Key, T> &key, uint seed = 0)
+ \fn template <class Key, class T> uint qHash(const QMultiHash<Key, T> &key, uint seed = 0)
\since 5.8
\relates QMultiHash
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index 715acc77ce..ce663ce2ca 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -315,7 +315,7 @@ public:
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(Q_NULLPTR) { }
+ inline iterator() : i(nullptr) { }
explicit inline iterator(void *node) : i(reinterpret_cast<QHashData::Node *>(node)) { }
inline const Key &key() const { return concrete(i)->key; }
@@ -373,7 +373,7 @@ public:
typedef const T *pointer;
typedef const T &reference;
- Q_DECL_CONSTEXPR inline const_iterator() : i(Q_NULLPTR) { }
+ Q_DECL_CONSTEXPR inline const_iterator() : i(nullptr) { }
explicit inline const_iterator(void *node)
: i(reinterpret_cast<QHashData::Node *>(node)) { }
#ifdef QT_STRICT_ITERATORS
@@ -502,7 +502,7 @@ public:
private:
void detach_helper();
void freeData(QHashData *d);
- Node **findNode(const Key &key, uint *hp = Q_NULLPTR) const;
+ Node **findNode(const Key &key, uint *hp = nullptr) const;
Node **findNode(const Key &key, uint h) const;
Node *createNode(uint h, const Key &key, const T &value, Node **nextNode);
void deleteNode(Node *node);
@@ -550,7 +550,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE void QHash<Key, T>::duplicateNode(QHashData::Node *node, void *newNode)
{
Node *concreteNode = concrete(node);
- new (newNode) Node(concreteNode->key, concreteNode->value, concreteNode->h, Q_NULLPTR);
+ new (newNode) Node(concreteNode->key, concreteNode->value, concreteNode->h, nullptr);
}
template <class Key, class T>
@@ -969,7 +969,7 @@ Q_OUTOFLINE_TEMPLATE bool QHash<Key, T>::operator==(const QHash &other) const
//
// ### Qt 6: if C++14 library support is a mandated minimum, remove the ifdef for MSVC.
if (!std::is_permutation(it, thisEqualRangeEnd, otherEqualRange.first
-#if defined(Q_CC_MSVC) && _MSC_VER >= 1900
+#ifdef Q_CC_MSVC
, otherEqualRange.second
#endif
)) {
diff --git a/src/corelib/tools/qhashfunctions.h b/src/corelib/tools/qhashfunctions.h
index f75b310e4e..e6ae7a0b85 100644
--- a/src/corelib/tools/qhashfunctions.h
+++ b/src/corelib/tools/qhashfunctions.h
@@ -90,7 +90,7 @@ Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(quint64 key, uint seed
Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(qint64 key, uint seed = 0) Q_DECL_NOTHROW { return qHash(quint64(key), seed); }
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(float key, uint seed = 0) Q_DECL_NOTHROW;
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(double key, uint seed = 0) Q_DECL_NOTHROW;
-#ifndef Q_OS_DARWIN
+#if !defined(Q_OS_DARWIN) || defined(Q_CLANG_QDOC)
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION uint qHash(long double key, uint seed = 0) Q_DECL_NOTHROW;
#endif
Q_DECL_CONST_FUNCTION Q_DECL_CONSTEXPR inline uint qHash(const QChar key, uint seed = 0) Q_DECL_NOTHROW { return qHash(key.unicode(), seed); }
diff --git a/src/corelib/tools/qiterator.qdoc b/src/corelib/tools/qiterator.qdoc
index 77cc412602..b4d332b7b1 100644
--- a/src/corelib/tools/qiterator.qdoc
+++ b/src/corelib/tools/qiterator.qdoc
@@ -25,6 +25,128 @@
**
****************************************************************************/
+/*! \class QKeyValueIterator
+ \inmodule QtCore
+ \since 5.10
+
+ \brief Iterator over the key/value pairs of an associative container.
+
+ The QKeyValueIterator class provides an STL-style iterator for returning
+ key/value pairs from associative containers like QHash and QMap. It
+ supports the same API as the STL associative containers, i.e. getting a
+ key/value pair when iterating through the container.
+
+ This will allow for better interoperability between QMap, QHash and friends
+ and STL-style algorithms.
+
+ \warning Iterators on implicitly shared containers do not work
+ exactly like STL-iterators. You should avoid copying a container
+ while iterators are active on that container. For more information,
+ read \l{Implicit sharing iterator problem}.
+*/
+
+/*! \typedef QKeyValueIterator::iterator_category
+ \internal
+*/
+
+/*! \typedef QKeyValueIterator::difference_type
+ \internal
+*/
+
+/*! \typedef QKeyValueIterator::value_type
+ \internal
+*/
+
+/*! \typedef QKeyValueIterator::pointer
+ \internal
+*/
+
+/*! \typedef QKeyValueIterator::reference
+ \internal
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> QKeyValueIterator<Key, T, Iterator>::QKeyValueIterator()
+
+ Constructs a default QKeyValueIterator.
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> QKeyValueIterator<Key, T, Iterator>::QKeyValueIterator(Iterator o)
+
+ Constructs a QKeyValueIterator on top of \a o.
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> const T &QKeyValueIterator<Key, T, Iterator>::operator*() const
+
+ Returns the current entry as a pair.
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> bool operator==(QKeyValueIterator<Key, T, Iterator> lhs, QKeyValueIterator<Key, T, Iterator> rhs)
+ \relates QKeyValueIterator
+
+ Returns \c true if \a rhs points to the same item as \a lhs otherwise returns
+ \c false.
+
+ \sa operator!=()
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> bool operator!=(QKeyValueIterator<Key, T, Iterator> lhs, QKeyValueIterator<Key, T, Iterator> rhs) const
+ \relates QKeyValueIterator
+
+ Returns \c true if \a rhs points to a different item than \a lhs otherwise
+ returns \c false.
+
+ \sa operator==()
+*/
+
+/*!
+ \fn template<typename Key, typename T, class Iterator> QKeyValueIterator &QKeyValueIterator<Key, T, Iterator>::operator++()
+
+ The prefix ++ operator (\c{++i}) advances the iterator to the
+ next item in the container and returns the iterator.
+
+ \note Advancing the iterator past its container's end() constitutes
+ undefined behavior.
+
+ \sa operator--()
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> QKeyValueIterator QKeyValueIterator<Key, T, Iterator>::operator++(int)
+
+ \overload
+
+ The postfix ++ operator (\c{i++}) advances the iterator to the
+ next item in the container and returns the iterator's prior value.
+
+ \note Advancing the iterator past its container's end() constitutes
+ undefined behavior.
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> QKeyValueIterator &QKeyValueIterator<Key, T, Iterator>::operator--()
+
+ The prefix -- operator (\c{--i}) backs the iterator up to the previous item
+ in the container and returns the iterator.
+
+ \note Backing up an iterator to before its container's begin() constitutes
+ undefined behavior.
+
+ \sa operator++()
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> QKeyValueIterator QKeyValueIterator<Key, T, Iterator>::operator--(int)
+
+ \overload
+
+ The postfix -- operator (\c{i--}) backs the iterator up to the previous item
+ in the container and returns the iterator's prior value.
+
+ \note Backing up an iterator to before its container's begin() constitutes
+ undefined behavior.
+*/
+
+/*! \fn template<typename Key, typename T, class Iterator> Iterator QKeyValueIterator<Key, T, Iterator>::base() const
+ Returns the underlying iterator this QKeyValueIterator is based on.
+*/
+
/*!
\class QListIterator
\inmodule QtCore
@@ -470,10 +592,10 @@
*/
/*!
- \fn QListIterator::QListIterator(const QList<T> &list)
- \fn QLinkedListIterator::QLinkedListIterator(const QLinkedList<T> &list)
- \fn QMutableListIterator::QMutableListIterator(QList<T> &list)
- \fn QMutableLinkedListIterator::QMutableLinkedListIterator(QLinkedList<T> &list)
+ \fn template <class T> QListIterator<T>::QListIterator(const QList<T> &list)
+ \fn template <class T> QLinkedListIterator<T>::QLinkedListIterator(const QLinkedList<T> &list)
+ \fn template <class T> QMutableListIterator<T>::QMutableListIterator(QList<T> &list)
+ \fn template <class T> QMutableLinkedListIterator<T>::QMutableLinkedListIterator(QLinkedList<T> &list)
Constructs an iterator for traversing \a list. The iterator is
set to be at the front of the list (before the first item).
@@ -482,8 +604,8 @@
*/
/*!
- \fn QVectorIterator::QVectorIterator(const QVector<T> &vector)
- \fn QMutableVectorIterator::QMutableVectorIterator(QVector<T> &vector)
+ \fn template <class T> QVectorIterator<T>::QVectorIterator(const QVector<T> &vector)
+ \fn template <class T> QMutableVectorIterator<T>::QMutableVectorIterator(QVector<T> &vector)
Constructs an iterator for traversing \a vector. The iterator is
set to be at the front of the vector (before the first item).
@@ -492,8 +614,8 @@
*/
/*!
- \fn QSetIterator::QSetIterator(const QSet<T> &set)
- \fn QMutableSetIterator::QMutableSetIterator(QSet<T> &set)
+ \fn template <class T> QSetIterator<T>::QSetIterator(const QSet<T> &set)
+ \fn template <class T> QMutableSetIterator<T>::QMutableSetIterator(QSet<T> &set)
Constructs an iterator for traversing \a set. The iterator is
set to be at the front of the set (before the first item).
@@ -501,10 +623,10 @@
\sa operator=()
*/
-/*! \fn QMutableListIterator &QMutableListIterator::operator=(QList<T> &list)
- \fn QMutableLinkedListIterator &QMutableLinkedListIterator::operator=(QLinkedList<T> &list)
- \fn QListIterator &QListIterator::operator=(const QList<T> &list)
- \fn QLinkedListIterator &QLinkedListIterator::operator=(const QLinkedList<T> &list)
+/*! \fn template <class T> QMutableListIterator &QMutableListIterator<T>::operator=(QList<T> &list)
+ \fn template <class T> QMutableLinkedListIterator &QMutableLinkedListIterator<T>::operator=(QLinkedList<T> &list)
+ \fn template <class T> QListIterator &QListIterator<T>::operator=(const QList<T> &list)
+ \fn template <class T> QLinkedListIterator &QLinkedListIterator<T>::operator=(const QLinkedList<T> &list)
Makes the iterator operate on \a list. The iterator is set to be
at the front of the list (before the first item).
@@ -512,8 +634,8 @@
\sa toFront(), toBack()
*/
-/*! \fn QVectorIterator &QVectorIterator::operator=(const QVector<T> &vector)
- \fn QMutableVectorIterator &QMutableVectorIterator::operator=(QVector<T> &vector)
+/*! \fn template <class T> QVectorIterator &QVectorIterator<T>::operator=(const QVector<T> &vector)
+ \fn template <class T> QMutableVectorIterator &QMutableVectorIterator<T>::operator=(QVector<T> &vector)
Makes the iterator operate on \a vector. The iterator is set to be
at the front of the vector (before the first item).
@@ -521,8 +643,8 @@
\sa toFront(), toBack()
*/
-/*! \fn QSetIterator &QSetIterator::operator=(const QSet<T> &set)
- \fn QMutableSetIterator &QMutableSetIterator::operator=(QSet<T> &set)
+/*! \fn template <class T> QSetIterator &QSetIterator<T>::operator=(const QSet<T> &set)
+ \fn template <class T> QMutableSetIterator &QMutableSetIterator<T>::operator=(QSet<T> &set)
Makes the iterator operate on \a set. The iterator is set to be
at the front of the set (before the first item).
@@ -530,14 +652,14 @@
\sa toFront(), toBack()
*/
-/*! \fn void QListIterator::toFront()
- \fn void QLinkedListIterator::toFront()
- \fn void QVectorIterator::toFront()
- \fn void QSetIterator::toFront()
- \fn void QMutableListIterator::toFront()
- \fn void QMutableLinkedListIterator::toFront()
- \fn void QMutableVectorIterator::toFront()
- \fn void QMutableSetIterator::toFront()
+/*! \fn template <class T> void QListIterator<T>::toFront()
+ \fn template <class T> void QLinkedListIterator<T>::toFront()
+ \fn template <class T> void QVectorIterator<T>::toFront()
+ \fn template <class T> void QSetIterator<T>::toFront()
+ \fn template <class T> void QMutableListIterator<T>::toFront()
+ \fn template <class T> void QMutableLinkedListIterator<T>::toFront()
+ \fn template <class T> void QMutableVectorIterator<T>::toFront()
+ \fn template <class T> void QMutableSetIterator<T>::toFront()
Moves the iterator to the front of the container (before the
first item).
@@ -545,14 +667,14 @@
\sa toBack(), next()
*/
-/*! \fn void QListIterator::toBack()
- \fn void QLinkedListIterator::toBack()
- \fn void QVectorIterator::toBack()
- \fn void QSetIterator::toBack()
- \fn void QMutableListIterator::toBack()
- \fn void QMutableLinkedListIterator::toBack()
- \fn void QMutableVectorIterator::toBack()
- \fn void QMutableSetIterator::toBack()
+/*! \fn template <class T> void QListIterator<T>::toBack()
+ \fn template <class T> void QLinkedListIterator<T>::toBack()
+ \fn template <class T> void QVectorIterator<T>::toBack()
+ \fn template <class T> void QSetIterator<T>::toBack()
+ \fn template <class T> void QMutableListIterator<T>::toBack()
+ \fn template <class T> void QMutableLinkedListIterator<T>::toBack()
+ \fn template <class T> void QMutableVectorIterator<T>::toBack()
+ \fn template <class T> void QMutableSetIterator<T>::toBack()
Moves the iterator to the back of the container (after the last
item).
@@ -560,14 +682,14 @@
\sa toFront(), previous()
*/
-/*! \fn bool QListIterator::hasNext() const
- \fn bool QLinkedListIterator::hasNext() const
- \fn bool QVectorIterator::hasNext() const
- \fn bool QSetIterator::hasNext() const
- \fn bool QMutableListIterator::hasNext() const
- \fn bool QMutableLinkedListIterator::hasNext() const
- \fn bool QMutableVectorIterator::hasNext() const
- \fn bool QMutableSetIterator::hasNext() const
+/*! \fn template <class T> bool QListIterator<T>::hasNext() const
+ \fn template <class T> bool QLinkedListIterator<T>::hasNext() const
+ \fn template <class T> bool QVectorIterator<T>::hasNext() const
+ \fn template <class T> bool QSetIterator<T>::hasNext() const
+ \fn template <class T> bool QMutableListIterator<T>::hasNext() const
+ \fn template <class T> bool QMutableLinkedListIterator<T>::hasNext() const
+ \fn template <class T> bool QMutableVectorIterator<T>::hasNext() const
+ \fn template <class T> bool QMutableSetIterator<T>::hasNext() const
Returns \c true if there is at least one item ahead of the iterator,
i.e. the iterator is \e not at the back of the container;
@@ -576,11 +698,11 @@
\sa hasPrevious(), next()
*/
-/*! \fn const T &QListIterator::next()
- \fn const T &QLinkedListIterator::next()
- \fn const T &QVectorIterator::next()
- \fn const T &QSetIterator::next()
- \fn const T &QMutableSetIterator::next()
+/*! \fn template <class T> const T &QListIterator<T>::next()
+ \fn template <class T> const T &QLinkedListIterator<T>::next()
+ \fn template <class T> const T &QVectorIterator<T>::next()
+ \fn template <class T> const T &QSetIterator<T>::next()
+ \fn template <class T> const T &QMutableSetIterator<T>::next()
Returns the next item and advances the iterator by one position.
@@ -590,9 +712,9 @@
\sa hasNext(), peekNext(), previous()
*/
-/*! \fn T &QMutableListIterator::next()
- \fn T &QMutableLinkedListIterator::next()
- \fn T &QMutableVectorIterator::next()
+/*! \fn template <class T> T &QMutableListIterator<T>::next()
+ \fn template <class T> T &QMutableLinkedListIterator<T>::next()
+ \fn template <class T> T &QMutableVectorIterator<T>::next()
Returns a reference to the next item, and advances the iterator
by one position.
@@ -603,11 +725,11 @@
\sa hasNext(), peekNext(), previous()
*/
-/*! \fn const T &QListIterator::peekNext() const
- \fn const T &QLinkedListIterator::peekNext() const
- \fn const T &QVectorIterator::peekNext() const
- \fn const T &QSetIterator::peekNext() const
- \fn const T &QMutableSetIterator::peekNext() const
+/*! \fn template <class T> const T &QListIterator<T>::peekNext() const
+ \fn template <class T> const T &QLinkedListIterator<T>::peekNext() const
+ \fn template <class T> const T &QVectorIterator<T>::peekNext() const
+ \fn template <class T> const T &QSetIterator<T>::peekNext() const
+ \fn template <class T> const T &QMutableSetIterator<T>::peekNext() const
Returns the next item without moving the iterator.
@@ -617,9 +739,9 @@
\sa hasNext(), next(), peekPrevious()
*/
-/*! \fn T &QMutableListIterator::peekNext() const
- \fn T &QMutableLinkedListIterator::peekNext() const
- \fn T &QMutableVectorIterator::peekNext() const
+/*! \fn template <class T> T &QMutableListIterator<T>::peekNext() const
+ \fn template <class T> T &QMutableLinkedListIterator<T>::peekNext() const
+ \fn template <class T> T &QMutableVectorIterator<T>::peekNext() const
Returns a reference to the next item, without moving the iterator.
@@ -629,14 +751,14 @@
\sa hasNext(), next(), peekPrevious()
*/
-/*! \fn bool QListIterator::hasPrevious() const
- \fn bool QLinkedListIterator::hasPrevious() const
- \fn bool QVectorIterator::hasPrevious() const
- \fn bool QSetIterator::hasPrevious() const
- \fn bool QMutableListIterator::hasPrevious() const
- \fn bool QMutableLinkedListIterator::hasPrevious() const
- \fn bool QMutableVectorIterator::hasPrevious() const
- \fn bool QMutableSetIterator::hasPrevious() const
+/*! \fn template <class T> bool QListIterator<T>::hasPrevious() const
+ \fn template <class T> bool QLinkedListIterator<T>::hasPrevious() const
+ \fn template <class T> bool QVectorIterator<T>::hasPrevious() const
+ \fn template <class T> bool QSetIterator<T>::hasPrevious() const
+ \fn template <class T> bool QMutableListIterator<T>::hasPrevious() const
+ \fn template <class T> bool QMutableLinkedListIterator<T>::hasPrevious() const
+ \fn template <class T> bool QMutableVectorIterator<T>::hasPrevious() const
+ \fn template <class T> bool QMutableSetIterator<T>::hasPrevious() const
Returns \c true if there is at least one item behind the iterator,
i.e. the iterator is \e not at the front of the container;
@@ -645,11 +767,11 @@
\sa hasNext(), previous()
*/
-/*! \fn const T &QListIterator::previous()
- \fn const T &QLinkedListIterator::previous()
- \fn const T &QVectorIterator::previous()
- \fn const T &QSetIterator::previous()
- \fn const T &QMutableSetIterator::previous()
+/*! \fn template <class T> const T &QListIterator<T>::previous()
+ \fn template <class T> const T &QLinkedListIterator<T>::previous()
+ \fn template <class T> const T &QVectorIterator<T>::previous()
+ \fn template <class T> const T &QSetIterator<T>::previous()
+ \fn template <class T> const T &QMutableSetIterator<T>::previous()
Returns the previous item and moves the iterator back by one
position.
@@ -660,9 +782,9 @@
\sa hasPrevious(), peekPrevious(), next()
*/
-/*! \fn T &QMutableListIterator::previous()
- \fn T &QMutableLinkedListIterator::previous()
- \fn T &QMutableVectorIterator::previous()
+/*! \fn template <class T> T &QMutableListIterator<T>::previous()
+ \fn template <class T> T &QMutableLinkedListIterator<T>::previous()
+ \fn template <class T> T &QMutableVectorIterator<T>::previous()
Returns a reference to the previous item and moves the iterator
back by one position.
@@ -673,11 +795,11 @@
\sa hasPrevious(), peekPrevious(), next()
*/
-/*! \fn const T &QListIterator::peekPrevious() const
- \fn const T &QLinkedListIterator::peekPrevious() const
- \fn const T &QVectorIterator::peekPrevious() const
- \fn const T &QSetIterator::peekPrevious() const
- \fn const T &QMutableSetIterator::peekPrevious() const
+/*! \fn template <class T> const T &QListIterator<T>::peekPrevious() const
+ \fn template <class T> const T &QLinkedListIterator<T>::peekPrevious() const
+ \fn template <class T> const T &QVectorIterator<T>::peekPrevious() const
+ \fn template <class T> const T &QSetIterator<T>::peekPrevious() const
+ \fn template <class T> const T &QMutableSetIterator<T>::peekPrevious() const
Returns the previous item without moving the iterator.
@@ -687,9 +809,9 @@
\sa hasPrevious(), previous(), peekNext()
*/
-/*! \fn T &QMutableListIterator::peekPrevious() const
- \fn T &QMutableLinkedListIterator::peekPrevious() const
- \fn T &QMutableVectorIterator::peekPrevious() const
+/*! \fn template <class T> T &QMutableListIterator<T>::peekPrevious() const
+ \fn template <class T> T &QMutableLinkedListIterator<T>::peekPrevious() const
+ \fn template <class T> T &QMutableVectorIterator<T>::peekPrevious() const
Returns a reference to the previous item, without moving the iterator.
@@ -699,14 +821,14 @@
\sa hasPrevious(), previous(), peekNext()
*/
-/*! \fn bool QListIterator::findNext(const T &value)
- \fn bool QLinkedListIterator::findNext(const T &value)
- \fn bool QVectorIterator::findNext(const T &value)
- \fn bool QSetIterator::findNext(const T &value)
- \fn bool QMutableListIterator::findNext(const T &value)
- \fn bool QMutableLinkedListIterator::findNext(const T &value)
- \fn bool QMutableVectorIterator::findNext(const T &value)
- \fn bool QMutableSetIterator::findNext(const T &value)
+/*! \fn template <class T> bool QListIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QLinkedListIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QVectorIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QSetIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QMutableListIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QMutableLinkedListIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QMutableVectorIterator<T>::findNext(const T &value)
+ \fn template <class T> bool QMutableSetIterator<T>::findNext(const T &value)
Searches for \a value starting from the current iterator position
forward. Returns \c true if \a value is found; otherwise returns \c false.
@@ -718,14 +840,14 @@
\sa findPrevious()
*/
-/*! \fn bool QListIterator::findPrevious(const T &value)
- \fn bool QLinkedListIterator::findPrevious(const T &value)
- \fn bool QVectorIterator::findPrevious(const T &value)
- \fn bool QSetIterator::findPrevious(const T &value)
- \fn bool QMutableListIterator::findPrevious(const T &value)
- \fn bool QMutableLinkedListIterator::findPrevious(const T &value)
- \fn bool QMutableVectorIterator::findPrevious(const T &value)
- \fn bool QMutableSetIterator::findPrevious(const T &value)
+/*! \fn template <class T> bool QListIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QLinkedListIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QVectorIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QSetIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QMutableListIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QMutableLinkedListIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QMutableVectorIterator<T>::findPrevious(const T &value)
+ \fn template <class T> bool QMutableSetIterator<T>::findPrevious(const T &value)
Searches for \a value starting from the current iterator position
backward. Returns \c true if \a value is found; otherwise returns
@@ -738,7 +860,7 @@
\sa findNext()
*/
-/*! \fn void QMutableListIterator::remove()
+/*! \fn template <class T> void QMutableListIterator<T>::remove()
Removes the last item that was jumped over using one of the
traversal functions (next(), previous(), findNext(), findPrevious()).
@@ -749,7 +871,7 @@
\sa insert(), setValue()
*/
-/*! \fn void QMutableLinkedListIterator::remove()
+/*! \fn template <class T> void QMutableLinkedListIterator<T>::remove()
Removes the last item that was jumped over using one of the
traversal functions (next(), previous(), findNext(), findPrevious()).
@@ -760,7 +882,7 @@
\sa insert(), setValue()
*/
-/*! \fn void QMutableVectorIterator::remove()
+/*! \fn template <class T> void QMutableVectorIterator<T>::remove()
Removes the last item that was jumped over using one of the
traversal functions (next(), previous(), findNext(), findPrevious()).
@@ -771,7 +893,7 @@
\sa insert(), setValue()
*/
-/*! \fn void QMutableSetIterator::remove()
+/*! \fn template <class T> void QMutableSetIterator<T>::remove()
Removes the last item that was jumped over using one of the
traversal functions (next(), previous(), findNext(), findPrevious()).
@@ -782,7 +904,7 @@
\sa value()
*/
-/*! \fn void QMutableListIterator::setValue(const T &value) const
+/*! \fn template <class T> void QMutableListIterator<T>::setValue(const T &value) const
Replaces the value of the last item that was jumped over using
one of the traversal functions with \a value.
@@ -796,7 +918,7 @@
\sa value(), remove(), insert()
*/
-/*! \fn void QMutableLinkedListIterator::setValue(const T &value) const
+/*! \fn template <class T> void QMutableLinkedListIterator<T>::setValue(const T &value) const
Replaces the value of the last item that was jumped over using
one of the traversal functions with \a value.
@@ -810,7 +932,7 @@
\sa value(), remove(), insert()
*/
-/*! \fn void QMutableVectorIterator::setValue(const T &value) const
+/*! \fn template <class T> void QMutableVectorIterator<T>::setValue(const T &value) const
Replaces the value of the last item that was jumped over using
one of the traversal functions with \a value.
@@ -824,10 +946,10 @@
\sa value(), remove(), insert()
*/
-/*! \fn const T &QMutableListIterator::value() const
- \fn const T &QMutableLinkedListIterator::value() const
- \fn const T &QMutableVectorIterator::value() const
- \fn const T &QMutableSetIterator::value() const
+/*! \fn template <class T> const T &QMutableListIterator<T>::value() const
+ \fn template <class T> const T &QMutableLinkedListIterator<T>::value() const
+ \fn template <class T> const T &QMutableVectorIterator<T>::value() const
+ \fn template <class T> const T &QMutableSetIterator<T>::value() const
Returns the value of the last item that was jumped over using one
of the traversal functions (next(), previous(), findNext(),
@@ -839,18 +961,18 @@
*/
/*!
- \fn T &QMutableListIterator::value()
- \fn T &QMutableLinkedListIterator::value()
- \fn T &QMutableVectorIterator::value()
+ \fn template <class T> T &QMutableListIterator<T>::value()
+ \fn template <class T> T &QMutableLinkedListIterator<T>::value()
+ \fn template <class T> T &QMutableVectorIterator<T>::value()
\overload
Returns a non-const reference to the value of the last item that
was jumped over using one of the traversal functions.
*/
-/*! \fn void QMutableListIterator::insert(const T &value)
- \fn void QMutableLinkedListIterator::insert(const T &value)
- \fn void QMutableVectorIterator::insert(const T &value)
+/*! \fn template <class T> void QMutableListIterator<T>::insert(const T &value)
+ \fn template <class T> void QMutableLinkedListIterator<T>::insert(const T &value)
+ \fn template <class T> void QMutableVectorIterator<T>::insert(const T &value)
Inserts \a value at the current iterator position. After the
call, the iterator is located just after the inserted item.
@@ -1092,8 +1214,8 @@
\sa QHashIterator, QHash::iterator
*/
-/*! \fn QMapIterator::QMapIterator(const QMap<Key, T> &map)
- \fn QMutableMapIterator::QMutableMapIterator(QMap<Key, T> &map)
+/*! \fn template <class Key, class T> QMapIterator<Key, T>::QMapIterator(const QMap<Key, T> &map)
+ \fn template <class Key, class T> QMutableMapIterator<Key, T>::QMutableMapIterator(QMap<Key, T> &map)
Constructs an iterator for traversing \a map. The iterator is set
to be at the front of the map (before the first item).
@@ -1101,8 +1223,8 @@
\sa operator=()
*/
-/*! \fn QHashIterator::QHashIterator(const QHash<Key, T> &hash)
- \fn QMutableHashIterator::QMutableHashIterator(QHash<Key, T> &hash)
+/*! \fn template <class Key, class T> QHashIterator<Key, T>::QHashIterator(const QHash<Key, T> &hash)
+ \fn template <class Key, class T> QMutableHashIterator<Key, T>::QMutableHashIterator(QHash<Key, T> &hash)
Constructs an iterator for traversing \a hash. The iterator is
set to be at the front of the hash (before the first item).
@@ -1110,8 +1232,8 @@
\sa operator=()
*/
-/*! \fn QMapIterator &QMapIterator::operator=(const QMap<Key, T> &map)
- \fn QMutableMapIterator &QMutableMapIterator::operator=(QMap<Key, T> &map)
+/*! \fn template <class Key, class T> QMapIterator &QMapIterator<Key, T>::operator=(const QMap<Key, T> &map)
+ \fn template <class Key, class T> QMutableMapIterator &QMutableMapIterator<Key, T>::operator=(QMap<Key, T> &map)
Makes the iterator operate on \a map. The iterator is set to be
at the front of the map (before the first item).
@@ -1119,8 +1241,8 @@
\sa toFront(), toBack()
*/
-/*! \fn QHashIterator &QHashIterator::operator=(const QHash<Key, T> &hash)
- \fn QMutableHashIterator &QMutableHashIterator::operator=(QHash<Key, T> &hash)
+/*! \fn template <class Key, class T> QHashIterator &QHashIterator<Key, T>::operator=(const QHash<Key, T> &hash)
+ \fn template <class Key, class T> QMutableHashIterator &QMutableHashIterator<Key, T>::operator=(QHash<Key, T> &hash)
Makes the iterator operate on \a hash. The iterator is set to be
at the front of the hash (before the first item).
@@ -1128,10 +1250,10 @@
\sa toFront(), toBack()
*/
-/*! \fn void QMapIterator::toFront()
- \fn void QHashIterator::toFront()
- \fn void QMutableMapIterator::toFront()
- \fn void QMutableHashIterator::toFront()
+/*! \fn template <class Key, class T> void QMapIterator<Key, T>::toFront()
+ \fn template <class Key, class T> void QHashIterator<Key, T>::toFront()
+ \fn template <class Key, class T> void QMutableMapIterator<Key, T>::toFront()
+ \fn template <class Key, class T> void QMutableHashIterator<Key, T>::toFront()
Moves the iterator to the front of the container (before the
first item).
@@ -1139,10 +1261,10 @@
\sa toBack(), next()
*/
-/*! \fn void QMapIterator::toBack()
- \fn void QHashIterator::toBack()
- \fn void QMutableMapIterator::toBack()
- \fn void QMutableHashIterator::toBack()
+/*! \fn template <class Key, class T> void QMapIterator<Key, T>::toBack()
+ \fn template <class Key, class T> void QHashIterator<Key, T>::toBack()
+ \fn template <class Key, class T> void QMutableMapIterator<Key, T>::toBack()
+ \fn template <class Key, class T> void QMutableHashIterator<Key, T>::toBack()
Moves the iterator to the back of the container (after the last
item).
@@ -1150,10 +1272,10 @@
\sa toFront(), previous()
*/
-/*! \fn bool QMapIterator::hasNext() const
- \fn bool QHashIterator::hasNext() const
- \fn bool QMutableMapIterator::hasNext() const
- \fn bool QMutableHashIterator::hasNext() const
+/*! \fn template <class Key, class T> bool QMapIterator<Key, T>::hasNext() const
+ \fn template <class Key, class T> bool QHashIterator<Key, T>::hasNext() const
+ \fn template <class Key, class T> bool QMutableMapIterator<Key, T>::hasNext() const
+ \fn template <class Key, class T> bool QMutableHashIterator<Key, T>::hasNext() const
Returns \c true if there is at least one item ahead of the iterator,
i.e. the iterator is \e not at the back of the container;
@@ -1162,8 +1284,8 @@
\sa hasPrevious(), next()
*/
-/*! \fn QMapIterator::Item QMapIterator::next()
- \fn QHashIterator::Item QHashIterator::next()
+/*! \fn template <class Key, class T> QMapIterator<Key, T>::Item QMapIterator<Key, T>::next()
+ \fn template <class Key, class T> QHashIterator<Key, T>::Item QHashIterator<Key, T>::next()
Returns the next item and advances the iterator by one position.
@@ -1176,8 +1298,8 @@
\sa hasNext(), peekNext(), previous()
*/
-/*! \fn QMutableMapIterator::Item QMutableMapIterator::next()
- \fn QMutableHashIterator::Item QMutableHashIterator::next()
+/*! \fn template <class Key, class T> QMutableMapIterator<Key, T>::Item QMutableMapIterator<Key, T>::next()
+ \fn template <class Key, class T> QMutableHashIterator<Key, T>::Item QMutableHashIterator<Key, T>::next()
Returns the next item and advances the iterator by one position.
@@ -1190,8 +1312,8 @@
\sa hasNext(), peekNext(), previous()
*/
-/*! \fn QMapIterator::Item QMapIterator::peekNext() const
- \fn QHashIterator::Item QHashIterator::peekNext() const
+/*! \fn template <class Key, class T> QMapIterator<Key, T>::Item QMapIterator<Key, T>::peekNext() const
+ \fn template <class Key, class T> QHashIterator<Key, T>::Item QHashIterator<Key, T>::peekNext() const
Returns the next item without moving the iterator.
@@ -1204,8 +1326,8 @@
\sa hasNext(), next(), peekPrevious()
*/
-/*! \fn QMutableMapIterator::Item QMutableMapIterator::peekNext() const
- \fn QMutableHashIterator::Item QMutableHashIterator::peekNext() const
+/*! \fn template <class Key, class T> QMutableMapIterator<Key, T>::Item QMutableMapIterator<Key, T>::peekNext() const
+ \fn template <class Key, class T> QMutableHashIterator<Key, T>::Item QMutableHashIterator<Key, T>::peekNext() const
Returns a reference to the next item without moving the iterator.
@@ -1218,10 +1340,10 @@
\sa hasNext(), next(), peekPrevious()
*/
-/*! \fn bool QMapIterator::hasPrevious() const
- \fn bool QHashIterator::hasPrevious() const
- \fn bool QMutableMapIterator::hasPrevious() const
- \fn bool QMutableHashIterator::hasPrevious() const
+/*! \fn template <class Key, class T> bool QMapIterator<Key, T>::hasPrevious() const
+ \fn template <class Key, class T> bool QHashIterator<Key, T>::hasPrevious() const
+ \fn template <class Key, class T> bool QMutableMapIterator<Key, T>::hasPrevious() const
+ \fn template <class Key, class T> bool QMutableHashIterator<Key, T>::hasPrevious() const
Returns \c true if there is at least one item behind the iterator,
i.e. the iterator is \e not at the front of the container;
@@ -1230,8 +1352,8 @@
\sa hasNext(), previous()
*/
-/*! \fn QMapIterator::Item QMapIterator::previous()
- \fn QHashIterator::Item QHashIterator::previous()
+/*! \fn template <class Key, class T> QMapIterator<Key, T>::Item QMapIterator<Key, T>::previous()
+ \fn template <class Key, class T> QHashIterator<Key, T>::Item QHashIterator<Key, T>::previous()
Returns the previous item and moves the iterator back by one
position.
@@ -1245,8 +1367,8 @@
\sa hasPrevious(), peekPrevious(), next()
*/
-/*! \fn QMutableMapIterator::Item QMutableMapIterator::previous()
- \fn QMutableHashIterator::Item QMutableHashIterator::previous()
+/*! \fn template <class Key, class T> QMutableMapIterator<Key, T>::Item QMutableMapIterator<Key, T>::previous()
+ \fn template <class Key, class T> QMutableHashIterator<Key, T>::Item QMutableHashIterator<Key, T>::previous()
Returns the previous item and moves the iterator back by one
position.
@@ -1260,8 +1382,8 @@
\sa hasPrevious(), peekPrevious(), next()
*/
-/*! \fn QMapIterator::Item QMapIterator::peekPrevious() const
- \fn QHashIterator::Item QHashIterator::peekPrevious() const
+/*! \fn template <class Key, class T> QMapIterator<Key, T>::Item QMapIterator<Key, T>::peekPrevious() const
+ \fn template <class Key, class T> QHashIterator<Key, T>::Item QHashIterator<Key, T>::peekPrevious() const
Returns the previous item without moving the iterator.
@@ -1274,8 +1396,8 @@
\sa hasPrevious(), previous(), peekNext()
*/
-/*! \fn QMutableMapIterator::Item QMutableMapIterator::peekPrevious() const
- \fn QMutableHashIterator::Item QMutableHashIterator::peekPrevious() const
+/*! \fn template <class Key, class T> QMutableMapIterator<Key, T>::Item QMutableMapIterator<Key, T>::peekPrevious() const
+ \fn template <class Key, class T> QMutableHashIterator<Key, T>::Item QMutableHashIterator<Key, T>::peekPrevious() const
Returns the previous item without moving the iterator.
@@ -1288,8 +1410,8 @@
\sa hasPrevious(), previous(), peekNext()
*/
-/*! \fn const T &QMapIterator::value() const
- \fn const T &QHashIterator::value() const
+/*! \fn template <class Key, class T> const T &QMapIterator<Key, T>::value() const
+ \fn template <class Key, class T> const T &QHashIterator<Key, T>::value() const
Returns the value of the last item that was jumped over using one
of the traversal functions (next(), previous(), findNext(),
@@ -1303,8 +1425,8 @@
*/
/*!
- \fn const T &QMutableMapIterator::value() const
- \fn const T &QMutableHashIterator::value() const
+ \fn template <class Key, class T> const T &QMutableMapIterator<Key, T>::value() const
+ \fn template <class Key, class T> const T &QMutableHashIterator<Key, T>::value() const
Returns the value of the last item that was jumped over using one
of the traversal functions (next(), previous(), findNext(),
@@ -1318,8 +1440,8 @@
*/
/*!
- \fn T &QMutableMapIterator::value()
- \fn T &QMutableHashIterator::value()
+ \fn template <class Key, class T> T &QMutableMapIterator<Key, T>::value()
+ \fn template <class Key, class T> T &QMutableHashIterator<Key, T>::value()
\overload
Returns a non-const reference to the value of
@@ -1327,10 +1449,10 @@
of the traversal functions.
*/
-/*! \fn const Key &QMapIterator::key() const
- \fn const Key &QHashIterator::key() const
- \fn const Key &QMutableMapIterator::key() const
- \fn const Key &QMutableHashIterator::key() const
+/*! \fn template <class Key, class T> const Key &QMapIterator<Key, T>::key() const
+ \fn template <class Key, class T> const Key &QHashIterator<Key, T>::key() const
+ \fn template <class Key, class T> const Key &QMutableMapIterator<Key, T>::key() const
+ \fn template <class Key, class T> const Key &QMutableHashIterator<Key, T>::key() const
Returns the key of the last item that was jumped over using one
of the traversal functions (next(), previous(), findNext(),
@@ -1343,10 +1465,10 @@
\sa value()
*/
-/*! \fn bool QMapIterator::findNext(const T &value)
- \fn bool QHashIterator::findNext(const T &value)
- \fn bool QMutableMapIterator::findNext(const T &value)
- \fn bool QMutableHashIterator::findNext(const T &value)
+/*! \fn template <class Key, class T> bool QMapIterator<Key, T>::findNext(const T &value)
+ \fn template <class Key, class T> bool QHashIterator<Key, T>::findNext(const T &value)
+ \fn template <class Key, class T> bool QMutableMapIterator<Key, T>::findNext(const T &value)
+ \fn template <class Key, class T> bool QMutableHashIterator<Key, T>::findNext(const T &value)
Searches for \a value starting from the current iterator position
forward. Returns \c true if a (key, value) pair with value \a value
@@ -1359,10 +1481,10 @@
\sa findPrevious()
*/
-/*! \fn bool QMapIterator::findPrevious(const T &value)
- \fn bool QHashIterator::findPrevious(const T &value)
- \fn bool QMutableMapIterator::findPrevious(const T &value)
- \fn bool QMutableHashIterator::findPrevious(const T &value)
+/*! \fn template <class Key, class T> bool QMapIterator<Key, T>::findPrevious(const T &value)
+ \fn template <class Key, class T> bool QHashIterator<Key, T>::findPrevious(const T &value)
+ \fn template <class Key, class T> bool QMutableMapIterator<Key, T>::findPrevious(const T &value)
+ \fn template <class Key, class T> bool QMutableHashIterator<Key, T>::findPrevious(const T &value)
Searches for \a value starting from the current iterator position
backward. Returns \c true if a (key, value) pair with value \a value
@@ -1375,8 +1497,8 @@
\sa findNext()
*/
-/*! \fn void QMutableMapIterator::remove()
- \fn void QMutableHashIterator::remove()
+/*! \fn template <class Key, class T> void QMutableMapIterator<Key, T>::remove()
+ \fn template <class Key, class T> void QMutableHashIterator<Key, T>::remove()
Removes the last item that was jumped over using one of the
traversal functions (next(), previous(), findNext(), findPrevious()).
@@ -1384,8 +1506,8 @@
\sa setValue()
*/
-/*! \fn void QMutableMapIterator::setValue(const T &value)
- \fn void QMutableHashIterator::setValue(const T &value)
+/*! \fn template <class Key, class T> void QMutableMapIterator<Key, T>::setValue(const T &value)
+ \fn template <class Key, class T> void QMutableHashIterator<Key, T>::setValue(const T &value)
Replaces the value of the last item that was jumped over using
one of the traversal functions with \a value.
@@ -1395,123 +1517,3 @@
\sa key(), value(), remove()
*/
-
-/*! \class QKeyValueIterator
- \inmodule QtCore
- \since 5.10
-
- \brief Iterator over the key/value pairs of an associative container.
-
- The QKeyValueIterator class provides an STL-style iterator for returning
- key/value pairs from associative containers like QHash and QMap. It
- supports the same API as the STL associative containers, i.e. getting a
- key/value pair when iterating through the container.
-
- This will allow for better interoperability between QMap, QHash and friends
- and STL-style algorithms.
-
- \warning Iterators on implicitly shared containers do not work
- exactly like STL-iterators. You should avoid copying a container
- while iterators are active on that container. For more information,
- read \l{Implicit sharing iterator problem}.
-*/
-
-/*! \typedef QKeyValueIterator::iterator_category
- \internal
-*/
-
-/*! \typedef QKeyValueIterator::difference_type
- \internal
-*/
-
-/*! \typedef QKeyValueIterator::value_type
- \internal
-*/
-
-/*! \typedef QKeyValueIterator::pointer
- \internal
-*/
-
-/*! \typedef QKeyValueIterator::reference
- \internal
-*/
-
-/*! \fn QKeyValueIterator::QKeyValueIterator()
-
- Constructs a default QKeyValueIterator.
-*/
-
-/*! \fn QKeyValueIterator::QKeyValueIterator(Iterator o)
-
- Constructs a QKeyValueIterator on top of \a o.
-*/
-
-/*! \fn const T &QKeyValueIterator::operator*() const
-
- Returns the current entry as a pair.
-*/
-
-/*! \fn bool QKeyValueIterator::operator==(QKeyValueIterator lhs, QKeyValueIterator rhs)
-
- Returns \c true if \a rhs points to the same item as \a lhs otherwise returns
- \c false.
-
- \sa operator!=()
-*/
-
-/*! \fn bool QKeyValueIterator::operator!=(QKeyValueIterator lhs, QKeyValueIterator rhs) const
-
- Returns \c true if \a rhs points to a different item than \a lhs otherwise
- returns \c false.
-
- \sa operator==()
-*/
-
-/*!
- \fn QKeyValueIterator &QKeyValueIterator::operator++()
-
- The prefix ++ operator (\c{++i}) advances the iterator to the
- next item in the container and returns the iterator.
-
- \note Advancing the iterator past its container's end() constitutes
- undefined behavior.
-
- \sa operator--()
-*/
-
-/*! \fn QKeyValueIterator QKeyValueIterator::operator++(int)
-
- \overload
-
- The postfix ++ operator (\c{i++}) advances the iterator to the
- next item in the container and returns the iterator's prior value.
-
- \note Advancing the iterator past its container's end() constitutes
- undefined behavior.
-*/
-
-/*! \fn QKeyValueIterator &QKeyValueIterator::operator--()
-
- The prefix -- operator (\c{--i}) backs the iterator up to the previous item
- in the container and returns the iterator.
-
- \note Backing up an iterator to before its container's begin() constitutes
- undefined behavior.
-
- \sa operator++()
-*/
-
-/*! \fn QKeyValueIterator QKeyValueIterator::operator--(int)
-
- \overload
-
- The postfix -- operator (\c{i--}) backs the iterator up to the previous item
- in the container and returns the iterator's prior value.
-
- \note Backing up an iterator to before its container's begin() constitutes
- undefined behavior.
-*/
-
-/*! \fn Iterator QKeyValueIterator::base() const
- Returns the underlying iterator this QKeyValueIterator is based on.
-*/
diff --git a/src/corelib/tools/qline.cpp b/src/corelib/tools/qline.cpp
index 8942292a3d..9704a00b85 100644
--- a/src/corelib/tools/qline.cpp
+++ b/src/corelib/tools/qline.cpp
@@ -508,7 +508,7 @@ QDataStream &operator>>(QDataStream &stream, QLine &line)
*/
/*!
- \fn QLineF::setLength(qreal length)
+ \fn void QLineF::setLength(qreal length)
Sets the length of the line to the given \a length. QLineF will
move the end point - p2() - of the line to give the line its new length.
diff --git a/src/corelib/tools/qlinkedlist.cpp b/src/corelib/tools/qlinkedlist.cpp
index 642d2a28a0..d9d93862e5 100644
--- a/src/corelib/tools/qlinkedlist.cpp
+++ b/src/corelib/tools/qlinkedlist.cpp
@@ -118,13 +118,13 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa QLinkedListIterator, QMutableLinkedListIterator, QList, QVector
*/
-/*! \fn QLinkedList::QLinkedList()
+/*! \fn template <class T> QLinkedList<T>::QLinkedList()
Constructs an empty list.
*/
/*!
- \fn QLinkedList::QLinkedList(QLinkedList<T> &&other)
+ \fn template <class T> QLinkedList<T>::QLinkedList(QLinkedList<T> &&other)
Move-constructs a QLinkedList instance, making it point at the same
object that \a other was pointing to.
@@ -132,7 +132,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\since 5.2
*/
-/*! \fn QLinkedList::QLinkedList(const QLinkedList<T> &other)
+/*! \fn template <class T> QLinkedList<T>::QLinkedList(const QLinkedList<T> &other)
Constructs a copy of \a other.
@@ -144,7 +144,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator=()
*/
-/*! \fn QLinkedList::QLinkedList(std::initializer_list<T> list)
+/*! \fn template <class T> QLinkedList<T>::QLinkedList(std::initializer_list<T> list)
\since 5.2
Constructs a list from the std::initializer_list specified by \a list.
@@ -153,26 +153,26 @@ const QLinkedListData QLinkedListData::shared_null = {
initializer lists.
*/
-/*! \fn QLinkedList::~QLinkedList()
+/*! \fn template <class T> QLinkedList<T>::~QLinkedList()
Destroys the list. References to the values in the list, and all
iterators over this list, become invalid.
*/
-/*! \fn QLinkedList<T> &QLinkedList::operator=(const QLinkedList<T> &other)
+/*! \fn template <class T> QLinkedList<T> &QLinkedList<T>::operator=(const QLinkedList<T> &other)
Assigns \a other to this list and returns a reference to this
list.
*/
-/*! \fn void QLinkedList::swap(QLinkedList<T> &other)
+/*! \fn template <class T> void QLinkedList<T>::swap(QLinkedList<T> &other)
\since 4.8
Swaps list \a other with this list. This operation is very
fast and never fails.
*/
-/*! \fn bool QLinkedList::operator==(const QLinkedList<T> &other) const
+/*! \fn template <class T> bool QLinkedList<T>::operator==(const QLinkedList<T> &other) const
Returns \c true if \a other is equal to this list; otherwise returns
false.
@@ -186,7 +186,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator!=()
*/
-/*! \fn bool QLinkedList::operator!=(const QLinkedList<T> &other) const
+/*! \fn template <class T> bool QLinkedList<T>::operator!=(const QLinkedList<T> &other) const
Returns \c true if \a other is not equal to this list; otherwise
returns \c false.
@@ -200,34 +200,34 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator==()
*/
-/*! \fn int QLinkedList::size() const
+/*! \fn template <class T> int QLinkedList<T>::size() const
Returns the number of items in the list.
\sa isEmpty(), count()
*/
-/*! \fn void QLinkedList::detach()
+/*! \fn template <class T> void QLinkedList<T>::detach()
\internal
*/
-/*! \fn bool QLinkedList::isDetached() const
+/*! \fn template <class T> bool QLinkedList<T>::isDetached() const
\internal
*/
-/*! \fn void QLinkedList::setSharable(bool sharable)
+/*! \fn template <class T> void QLinkedList<T>::setSharable(bool sharable)
\internal
*/
-/*! \fn bool QLinkedList::isSharedWith(const QLinkedList<T> &other) const
+/*! \fn template <class T> bool QLinkedList<T>::isSharedWith(const QLinkedList<T> &other) const
\internal
*/
-/*! \fn bool QLinkedList::isEmpty() const
+/*! \fn template <class T> bool QLinkedList<T>::isEmpty() const
Returns \c true if the list contains no items; otherwise returns
false.
@@ -235,14 +235,14 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa size()
*/
-/*! \fn void QLinkedList::clear()
+/*! \fn template <class T> void QLinkedList<T>::clear()
Removes all the items in the list.
\sa removeAll()
*/
-/*! \fn void QLinkedList::append(const T &value)
+/*! \fn template <class T> void QLinkedList<T>::append(const T &value)
Inserts \a value at the end of the list.
@@ -254,7 +254,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator<<(), prepend(), insert()
*/
-/*! \fn void QLinkedList::prepend(const T &value)
+/*! \fn template <class T> void QLinkedList<T>::prepend(const T &value)
Inserts \a value at the beginning of the list.
@@ -266,7 +266,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa append(), insert()
*/
-/*! \fn int QLinkedList::removeAll(const T &value)
+/*! \fn template <class T> int QLinkedList<T>::removeAll(const T &value)
Removes all occurrences of \a value in the list.
@@ -280,7 +280,7 @@ const QLinkedListData QLinkedListData::shared_null = {
*/
/*!
- \fn bool QLinkedList::removeOne(const T &value)
+ \fn template <class T> bool QLinkedList<T>::removeOne(const T &value)
\since 4.4
Removes the first occurrences of \a value in the list. Returns \c true on
@@ -295,7 +295,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa insert()
*/
-/*! \fn bool QLinkedList::contains(const T &value) const
+/*! \fn template <class T> bool QLinkedList<T>::contains(const T &value) const
Returns \c true if the list contains an occurrence of \a value;
otherwise returns \c false.
@@ -306,7 +306,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa QLinkedListIterator::findNext(), QLinkedListIterator::findPrevious()
*/
-/*! \fn int QLinkedList::count(const T &value) const
+/*! \fn template <class T> int QLinkedList<T>::count(const T &value) const
Returns the number of occurrences of \a value in the list.
@@ -316,7 +316,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa contains()
*/
-/*! \fn bool QLinkedList::startsWith(const T &value) const
+/*! \fn template <class T> bool QLinkedList<T>::startsWith(const T &value) const
\since 4.5
Returns \c true if the list is not empty and its first
@@ -325,7 +325,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa isEmpty(), first()
*/
-/*! \fn bool QLinkedList::endsWith(const T &value) const
+/*! \fn template <class T> bool QLinkedList<T>::endsWith(const T &value) const
\since 4.5
Returns \c true if the list is not empty and its last
@@ -334,7 +334,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa isEmpty(), last()
*/
-/*! \fn QLinkedList::iterator QLinkedList::begin()
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
the list.
@@ -342,12 +342,12 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa constBegin(), end()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::begin() const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::begin() const
\overload
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::cbegin() const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -356,7 +356,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa begin(), cend()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::constBegin() const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
in the list.
@@ -364,7 +364,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa begin(), constEnd()
*/
-/*! \fn QLinkedList::iterator QLinkedList::end()
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
after the last item in the list.
@@ -372,12 +372,12 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa begin(), constEnd()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::end() const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::end() const
\overload
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::cend() const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -386,7 +386,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa cbegin(), end()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::constEnd() const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the list.
@@ -394,7 +394,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa constBegin(), end()
*/
-/*! \fn QLinkedList::reverse_iterator QLinkedList::rbegin()
+/*! \fn template <class T> QLinkedList<T>::reverse_iterator QLinkedList<T>::rbegin()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -403,12 +403,12 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa begin(), crbegin(), rend()
*/
-/*! \fn QLinkedList::const_reverse_iterator QLinkedList::rbegin() const
+/*! \fn template <class T> QLinkedList<T>::const_reverse_iterator QLinkedList<T>::rbegin() const
\since 5.6
\overload
*/
-/*! \fn QLinkedList::const_reverse_iterator QLinkedList::crbegin() const
+/*! \fn template <class T> QLinkedList<T>::const_reverse_iterator QLinkedList<T>::crbegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -417,7 +417,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa begin(), rbegin(), rend()
*/
-/*! \fn QLinkedList::reverse_iterator QLinkedList::rend()
+/*! \fn template <class T> QLinkedList<T>::reverse_iterator QLinkedList<T>::rend()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
@@ -426,12 +426,12 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa end(), crend(), rbegin()
*/
-/*! \fn QLinkedList::const_reverse_iterator QLinkedList::rend() const
+/*! \fn template <class T> QLinkedList<T>::const_reverse_iterator QLinkedList<T>::rend() const
\since 5.6
\overload
*/
-/*! \fn QLinkedList::const_reverse_iterator QLinkedList::crend() const
+/*! \fn template <class T> QLinkedList<T>::const_reverse_iterator QLinkedList<T>::crend() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
@@ -440,7 +440,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa end(), rend(), rbegin()
*/
-/*! \fn QLinkedList::iterator QLinkedList::insert(iterator before, const T &value)
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::insert(iterator before, const T &value)
Inserts \a value in front of the item pointed to by the iterator
\a before. Returns an iterator pointing at the inserted item.
@@ -448,7 +448,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa erase()
*/
-/*! \fn QLinkedList::iterator QLinkedList::erase(iterator pos)
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::erase(iterator pos)
Removes the item pointed to by the iterator \a pos from the list,
and returns an iterator to the next item in the list (which may be
@@ -457,7 +457,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa insert()
*/
-/*! \fn QLinkedList::iterator QLinkedList::erase(iterator begin, iterator end)
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::erase(iterator begin, iterator end)
\overload
@@ -549,12 +549,12 @@ const QLinkedListData QLinkedListData::shared_null = {
Typedef for ptrdiff_t. Provided for STL compatibility.
*/
-/*! \fn int QLinkedList::count() const
+/*! \fn template <class T> int QLinkedList<T>::count() const
Same as size().
*/
-/*! \fn T& QLinkedList::first()
+/*! \fn template <class T> T& QLinkedList<T>::first()
Returns a reference to the first item in the list. This function
assumes that the list isn't empty.
@@ -562,12 +562,12 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa last(), isEmpty()
*/
-/*! \fn const T& QLinkedList::first() const
+/*! \fn template <class T> const T& QLinkedList<T>::first() const
\overload
*/
-/*! \fn T& QLinkedList::last()
+/*! \fn template <class T> T& QLinkedList<T>::last()
Returns a reference to the last item in the list. This function
assumes that the list isn't empty.
@@ -575,12 +575,12 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa first(), isEmpty()
*/
-/*! \fn const T& QLinkedList::last() const
+/*! \fn template <class T> const T& QLinkedList<T>::last() const
\overload
*/
-/*! \fn void QLinkedList::removeFirst()
+/*! \fn template <class T> void QLinkedList<T>::removeFirst()
Removes the first item in the list.
@@ -589,14 +589,14 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa removeLast(), erase()
*/
-/*! \fn void QLinkedList::removeLast()
+/*! \fn template <class T> void QLinkedList<T>::removeLast()
Removes the last item in the list.
\sa removeFirst(), erase()
*/
-/*! \fn T QLinkedList::takeFirst()
+/*! \fn template <class T> T QLinkedList<T>::takeFirst()
Removes the first item in the list and returns it.
@@ -606,7 +606,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa takeLast(), removeFirst()
*/
-/*! \fn T QLinkedList::takeLast()
+/*! \fn template <class T> T QLinkedList<T>::takeLast()
Removes the last item in the list and returns it.
@@ -616,59 +616,59 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa takeFirst(), removeLast()
*/
-/*! \fn void QLinkedList::push_back(const T &value)
+/*! \fn template <class T> void QLinkedList<T>::push_back(const T &value)
This function is provided for STL compatibility. It is equivalent
to append(\a value).
*/
-/*! \fn void QLinkedList::push_front(const T &value)
+/*! \fn template <class T> void QLinkedList<T>::push_front(const T &value)
This function is provided for STL compatibility. It is equivalent
to prepend(\a value).
*/
-/*! \fn T& QLinkedList::front()
+/*! \fn template <class T> T& QLinkedList<T>::front()
This function is provided for STL compatibility. It is equivalent
to first().
*/
-/*! \fn const T& QLinkedList::front() const
+/*! \fn template <class T> const T& QLinkedList<T>::front() const
\overload
*/
-/*! \fn T& QLinkedList::back()
+/*! \fn template <class T> T& QLinkedList<T>::back()
This function is provided for STL compatibility. It is equivalent
to last().
*/
-/*! \fn const T& QLinkedList::back() const
+/*! \fn template <class T> const T& QLinkedList<T>::back() const
\overload
*/
-/*! \fn void QLinkedList::pop_front()
+/*! \fn template <class T> void QLinkedList<T>::pop_front()
This function is provided for STL compatibility. It is equivalent
to removeFirst().
*/
-/*! \fn void QLinkedList::pop_back()
+/*! \fn template <class T> void QLinkedList<T>::pop_back()
This function is provided for STL compatibility. It is equivalent
to removeLast().
*/
-/*! \fn bool QLinkedList::empty() const
+/*! \fn template <class T> bool QLinkedList<T>::empty() const
This function is provided for STL compatibility. It is equivalent
to isEmpty() and returns \c true if the list is empty.
*/
-/*! \fn QLinkedList<T> &QLinkedList::operator+=(const QLinkedList<T> &other)
+/*! \fn template <class T> QLinkedList<T> &QLinkedList<T>::operator+=(const QLinkedList<T> &other)
Appends the items of the \a other list to this list and returns a
reference to this list.
@@ -676,14 +676,14 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator+(), append()
*/
-/*! \fn void QLinkedList::operator+=(const T &value)
+/*! \fn template <class T> void QLinkedList<T>::operator+=(const T &value)
\overload
Appends \a value to the list.
*/
-/*! \fn QLinkedList<T> QLinkedList::operator+(const QLinkedList<T> &other) const
+/*! \fn template <class T> QLinkedList<T> QLinkedList<T>::operator+(const QLinkedList<T> &other) const
Returns a list that contains all the items in this list followed
by all the items in the \a other list.
@@ -691,7 +691,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator+=()
*/
-/*! \fn QLinkedList<T> &QLinkedList::operator<<(const QLinkedList<T> &other)
+/*! \fn template <class T> QLinkedList<T> &QLinkedList<T>::operator<<(const QLinkedList<T> &other)
Appends the items of the \a other list to this list and returns a
reference to this list.
@@ -699,7 +699,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator+=(), append()
*/
-/*! \fn QLinkedList<T> &QLinkedList::operator<<(const T &value)
+/*! \fn template <class T> QLinkedList<T> &QLinkedList<T>::operator<<(const T &value)
\overload
@@ -777,7 +777,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa QLinkedList::const_iterator, QMutableLinkedListIterator
*/
-/*! \fn QLinkedList::iterator::iterator()
+/*! \fn template <class T> QLinkedList<T>::iterator::iterator()
Constructs an uninitialized iterator.
@@ -788,7 +788,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa QLinkedList::begin(), QLinkedList::end()
*/
-/*! \fn QLinkedList::iterator::iterator(Node *node)
+/*! \fn template <class T> QLinkedList<T>::iterator::iterator(Node *node)
\internal
*/
@@ -818,25 +818,25 @@ const QLinkedListData QLinkedListData::shared_null = {
\internal
*/
-/*! \fn QLinkedList::iterator::iterator(const iterator &other)
+/*! \fn template <class T> QLinkedList<T>::iterator::iterator(const iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn QLinkedList::iterator &QLinkedList::iterator::operator=(const iterator &other)
+/*! \fn template <class T> QLinkedList<T>::iterator &QLinkedList<T>::iterator::operator=(const iterator &other)
Assigns \a other to this iterator.
*/
/*!
- \fn QLinkedList<T> &QLinkedList::operator=(QLinkedList<T> &&other)
+ \fn template <class T> QLinkedList<T> &QLinkedList<T>::operator=(QLinkedList<T> &&other)
Move-assigns \a other to this QLinkedList instance.
\since 5.2
*/
-/*! \fn T &QLinkedList::iterator::operator*() const
+/*! \fn template <class T> T &QLinkedList<T>::iterator::operator*() const
Returns a modifiable reference to the current item.
@@ -848,7 +848,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator->()
*/
-/*! \fn T *QLinkedList::iterator::operator->() const
+/*! \fn template <class T> T *QLinkedList<T>::iterator::operator->() const
Returns a pointer to the current item.
@@ -856,8 +856,8 @@ const QLinkedListData QLinkedListData::shared_null = {
*/
/*!
- \fn bool QLinkedList::iterator::operator==(const iterator &other) const
- \fn bool QLinkedList::iterator::operator==(const const_iterator &other) const
+ \fn template <class T> bool QLinkedList<T>::iterator::operator==(const iterator &other) const
+ \fn template <class T> bool QLinkedList<T>::iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -866,8 +866,8 @@ const QLinkedListData QLinkedListData::shared_null = {
*/
/*!
- \fn bool QLinkedList::iterator::operator!=(const iterator &other) const
- \fn bool QLinkedList::iterator::operator!=(const const_iterator &other) const
+ \fn template <class T> bool QLinkedList<T>::iterator::operator!=(const iterator &other) const
+ \fn template <class T> bool QLinkedList<T>::iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -875,7 +875,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator==()
*/
-/*! \fn QLinkedList::iterator &QLinkedList::iterator::operator++()
+/*! \fn template <class T> QLinkedList<T>::iterator &QLinkedList<T>::iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the
next item in the list and returns an iterator to the new current
@@ -887,7 +887,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator--()
*/
-/*! \fn QLinkedList::iterator QLinkedList::iterator::operator++(int)
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::iterator::operator++(int)
\overload
@@ -896,7 +896,7 @@ const QLinkedListData QLinkedListData::shared_null = {
current item.
*/
-/*! \fn QLinkedList::iterator &QLinkedList::iterator::operator--()
+/*! \fn template <class T> QLinkedList<T>::iterator &QLinkedList<T>::iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding item
current and returns an iterator to the new current item.
@@ -907,7 +907,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator++()
*/
-/*! \fn QLinkedList::iterator QLinkedList::iterator::operator--(int)
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::iterator::operator--(int)
\overload
@@ -915,7 +915,7 @@ const QLinkedListData QLinkedListData::shared_null = {
current and returns an iterator to the previously current item.
*/
-/*! \fn QLinkedList::iterator QLinkedList::iterator::operator+(int j) const
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -926,7 +926,7 @@ const QLinkedListData QLinkedListData::shared_null = {
*/
-/*! \fn QLinkedList::iterator QLinkedList::iterator::operator-(int j) const
+/*! \fn template <class T> QLinkedList<T>::iterator QLinkedList<T>::iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -936,7 +936,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator+()
*/
-/*! \fn QLinkedList::iterator &QLinkedList::iterator::operator+=(int j)
+/*! \fn template <class T> QLinkedList<T>::iterator &QLinkedList<T>::iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -944,7 +944,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator-=(), operator+()
*/
-/*! \fn QLinkedList::iterator &QLinkedList::iterator::operator-=(int j)
+/*! \fn template <class T> QLinkedList<T>::iterator &QLinkedList<T>::iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -997,7 +997,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa QLinkedList::iterator, QLinkedListIterator
*/
-/*! \fn QLinkedList::const_iterator::const_iterator()
+/*! \fn template <class T> QLinkedList<T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -1008,7 +1008,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa QLinkedList::constBegin(), QLinkedList::constEnd()
*/
-/*! \fn QLinkedList::const_iterator::const_iterator(Node *node)
+/*! \fn template <class T> QLinkedList<T>::const_iterator::const_iterator(Node *node)
\internal
*/
@@ -1038,37 +1038,36 @@ const QLinkedListData QLinkedListData::shared_null = {
\internal
*/
-/*! \fn QLinkedList::const_iterator::const_iterator(const const_iterator &other)
+/*! \fn template <class T> QLinkedList<T>::const_iterator::const_iterator(const const_iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn QLinkedList::const_iterator::const_iterator(iterator other)
+/*! \fn template <class T> QLinkedList<T>::const_iterator::const_iterator(iterator other)
Constructs a copy of \a other.
*/
-/*! \fn QLinkedList::const_iterator &QLinkedList::const_iterator::operator=( \
- const const_iterator &other)
+/*! \fn template <class T> typename QLinkedList<T>::const_iterator &QLinkedList<T>::const_iterator::operator=(const const_iterator &other)
Assigns \a other to this iterator.
*/
-/*! \fn const T &QLinkedList::const_iterator::operator*() const
+/*! \fn template <class T> const T &QLinkedList<T>::const_iterator::operator*() const
Returns a reference to the current item.
\sa operator->()
*/
-/*! \fn const T *QLinkedList::const_iterator::operator->() const
+/*! \fn template <class T> const T *QLinkedList<T>::const_iterator::operator->() const
Returns a pointer to the current item.
\sa operator*()
*/
-/*! \fn bool QLinkedList::const_iterator::operator==(const const_iterator &other) const
+/*! \fn template <class T> bool QLinkedList<T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -1076,7 +1075,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator!=()
*/
-/*! \fn bool QLinkedList::const_iterator::operator!=(const const_iterator &other) const
+/*! \fn template <class T> bool QLinkedList<T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -1084,19 +1083,19 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator==()
*/
-/*! \fn QLinkedList::const_iterator &QLinkedList::const_iterator::operator++()
+/*! \fn template <class T> QLinkedList<T>::const_iterator &QLinkedList<T>::const_iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the
next item in the list and returns an iterator to the new current
item.
- Calling this function on QLinkedList::constEnd() leads to
+ Calling this function on QLinkedList<T>::constEnd() leads to
undefined results.
\sa operator--()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::const_iterator::operator++(int)
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::const_iterator::operator++(int)
\overload
@@ -1105,7 +1104,7 @@ const QLinkedListData QLinkedListData::shared_null = {
current item.
*/
-/*! \fn QLinkedList::const_iterator &QLinkedList::const_iterator::operator--()
+/*! \fn template <class T> QLinkedList<T>::const_iterator &QLinkedList<T>::const_iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding item
current and returns an iterator to the new current item.
@@ -1116,7 +1115,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator++()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::const_iterator::operator--(int)
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::const_iterator::operator--(int)
\overload
@@ -1124,7 +1123,7 @@ const QLinkedListData QLinkedListData::shared_null = {
current and returns an iterator to the previously current item.
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::const_iterator::operator+(int j) const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::const_iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -1134,7 +1133,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator-()
*/
-/*! \fn QLinkedList::const_iterator QLinkedList::const_iterator::operator-(int j) const
+/*! \fn template <class T> QLinkedList<T>::const_iterator QLinkedList<T>::const_iterator::operator-(int j) const
This function returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -1144,7 +1143,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator+()
*/
-/*! \fn QLinkedList::const_iterator &QLinkedList::const_iterator::operator+=(int j)
+/*! \fn template <class T> QLinkedList<T>::const_iterator &QLinkedList<T>::const_iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -1154,7 +1153,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator-=(), operator+()
*/
-/*! \fn QLinkedList::const_iterator &QLinkedList::const_iterator::operator-=(int j)
+/*! \fn template <class T> QLinkedList<T>::const_iterator &QLinkedList<T>::const_iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -1164,7 +1163,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa operator+=(), operator-()
*/
-/*! \fn QDataStream &operator<<(QDataStream &out, const QLinkedList<T> &list)
+/*! \fn template <class T> QDataStream &operator<<(QDataStream &out, const QLinkedList<T> &list)
\relates QLinkedList
Writes the linked list \a list to stream \a out.
@@ -1175,7 +1174,7 @@ const QLinkedListData QLinkedListData::shared_null = {
\sa{Serializing Qt Data Types}{Format of the QDataStream operators}
*/
-/*! \fn QDataStream &operator>>(QDataStream &in, QLinkedList<T> &list)
+/*! \fn template <class T> QDataStream &operator>>(QDataStream &in, QLinkedList<T> &list)
\relates QLinkedList
Reads a linked list from stream \a in into \a list.
@@ -1187,7 +1186,7 @@ const QLinkedListData QLinkedListData::shared_null = {
/*!
\since 4.1
- \fn QLinkedList<T> QLinkedList<T>::fromStdList(const std::list<T> &list)
+ \fn template <class T> QLinkedList<T> QLinkedList<T>::fromStdList(const std::list<T> &list)
Returns a QLinkedList object with the data contained in \a list.
The order of the elements in the QLinkedList is the same as in \a
@@ -1202,7 +1201,7 @@ const QLinkedListData QLinkedListData::shared_null = {
/*!
\since 4.1
- \fn std::list<T> QLinkedList<T>::toStdList() const
+ \fn template <class T> std::list<T> QLinkedList<T>::toStdList() const
Returns a std::list object with the data contained in this
QLinkedList. Example:
diff --git a/src/corelib/tools/qlinkedlist.h b/src/corelib/tools/qlinkedlist.h
index 9f54ba7825..c8f3f4c8c3 100644
--- a/src/corelib/tools/qlinkedlist.h
+++ b/src/corelib/tools/qlinkedlist.h
@@ -134,7 +134,7 @@ public:
typedef T *pointer;
typedef T &reference;
Node *i;
- inline iterator() : i(Q_NULLPTR) {}
+ inline iterator() : i(nullptr) {}
inline iterator(Node *n) : i(n) {}
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
iterator(const iterator &other) Q_DECL_NOTHROW : i(other.i) {}
@@ -171,7 +171,7 @@ public:
typedef const T *pointer;
typedef const T &reference;
Node *i;
- inline const_iterator() : i(Q_NULLPTR) {}
+ inline const_iterator() : i(nullptr) {}
inline const_iterator(Node *n) : i(n) {}
inline const_iterator(iterator ci) : i(ci.i){}
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp
index 5f26e704c4..33835e3d28 100644
--- a/src/corelib/tools/qlist.cpp
+++ b/src/corelib/tools/qlist.cpp
@@ -515,7 +515,7 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn QList::QList(QList<T> &&other)
+ \fn template <class T> QList<T>::QList(QList<T> &&other)
Move-constructs a QList instance, making it point at the same
object that \a other was pointing to.
@@ -524,7 +524,7 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn QList<T> QList<T>::mid(int pos, int length) const
+ \fn template <class T> QList<T> QList<T>::mid(int pos, int length) const
Returns a sub-list which includes elements from this list,
starting at position \a pos. If \a length is -1 (the default), all
@@ -533,12 +533,12 @@ void **QListData::erase(void **xi)
are included.
*/
-/*! \fn QList::QList()
+/*! \fn template <class T> QList<T>::QList()
Constructs an empty list.
*/
-/*! \fn QList::QList(const QList<T> &other)
+/*! \fn template <class T> QList<T>::QList(const QList<T> &other)
Constructs a copy of \a other.
@@ -551,7 +551,7 @@ void **QListData::erase(void **xi)
\sa operator=()
*/
-/*! \fn inline QList::QList(std::initializer_list<T> args)
+/*! \fn template <class T> QList<T>::QList(std::initializer_list<T> args)
\since 4.8
Construct a list from the std::initializer_list specified by \a args.
@@ -560,34 +560,34 @@ void **QListData::erase(void **xi)
lists.
*/
-/*! \fn QList::~QList()
+/*! \fn template <class T> QList<T>::~QList()
Destroys the list. References to the values in the list and all
iterators of this list become invalid.
*/
-/*! \fn QList<T> &QList::operator=(const QList<T> &other)
+/*! \fn template <class T> QList<T> &QList<T>::operator=(const QList<T> &other)
Assigns \a other to this list and returns a reference to this
list.
*/
/*!
- \fn QList &QList::operator=(QList<T> &&other)
+ \fn template <class T> QList &QList<T>::operator=(QList<T> &&other)
Move-assigns \a other to this QList instance.
\since 5.2
*/
-/*! \fn void QList::swap(QList<T> &other)
+/*! \fn template <class T> void QList<T>::swap(QList<T> &other)
\since 4.8
Swaps list \a other with this list. This operation is very
fast and never fails.
*/
-/*! \fn bool QList::operator==(const QList<T> &other) const
+/*! \fn template <class T> bool QList<T>::operator==(const QList<T> &other) const
Returns \c true if \a other is equal to this list; otherwise returns
false.
@@ -601,7 +601,7 @@ void **QListData::erase(void **xi)
\sa operator!=()
*/
-/*! \fn bool QList::operator!=(const QList<T> &other) const
+/*! \fn template <class T> bool QList<T>::operator!=(const QList<T> &other) const
Returns \c true if \a other is not equal to this list; otherwise
returns \c false.
@@ -615,7 +615,7 @@ void **QListData::erase(void **xi)
\sa operator==()
*/
-/*! \fn bool operator<(const QList<T> &lhs, const QList<T> &rhs)
+/*! \fn template <class T> bool operator<(const QList<T> &lhs, const QList<T> &rhs)
\since 5.6
\relates QList
@@ -627,7 +627,7 @@ void **QListData::erase(void **xi)
of \c operator<().
*/
-/*! \fn bool operator<=(const QList<T> &lhs, const QList<T> &rhs)
+/*! \fn template <class T> bool operator<=(const QList<T> &lhs, const QList<T> &rhs)
\since 5.6
\relates QList
@@ -639,7 +639,7 @@ void **QListData::erase(void **xi)
of \c operator<().
*/
-/*! \fn bool operator>(const QList<T> &lhs, const QList<T> &rhs)
+/*! \fn template <class T> bool operator>(const QList<T> &lhs, const QList<T> &rhs)
\since 5.6
\relates QList
@@ -651,7 +651,7 @@ void **QListData::erase(void **xi)
of \c operator<().
*/
-/*! \fn bool operator>=(const QList<T> &lhs, const QList<T> &rhs)
+/*! \fn template <class T> bool operator>=(const QList<T> &lhs, const QList<T> &rhs)
\since 5.6
\relates QList
@@ -664,7 +664,7 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn uint qHash(const QList<T> &key, uint seed = 0)
+ \fn template <class T> uint qHash(const QList<T> &key, uint seed = 0)
\since 5.6
\relates QList
@@ -675,19 +675,19 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn int QList::size() const
+ \fn template <class T> int QList<T>::size() const
Returns the number of items in the list.
\sa isEmpty(), count()
*/
-/*! \fn void QList::detach()
+/*! \fn template <class T> void QList<T>::detach()
\internal
*/
-/*! \fn void QList::detachShared()
+/*! \fn template <class T> void QList<T>::detachShared()
\internal
@@ -696,22 +696,22 @@ void **QListData::erase(void **xi)
in case of cleanup work done in destructors on empty lists.
*/
-/*! \fn bool QList::isDetached() const
+/*! \fn template <class T> bool QList<T>::isDetached() const
\internal
*/
-/*! \fn void QList::setSharable(bool sharable)
+/*! \fn template <class T> void QList<T>::setSharable(bool sharable)
\internal
*/
-/*! \fn bool QList::isSharedWith(const QList<T> &other) const
+/*! \fn template <class T> bool QList<T>::isSharedWith(const QList<T> &other) const
\internal
*/
-/*! \fn bool QList::isEmpty() const
+/*! \fn template <class T> bool QList<T>::isEmpty() const
Returns \c true if the list contains no items; otherwise returns
false.
@@ -719,14 +719,14 @@ void **QListData::erase(void **xi)
\sa size()
*/
-/*! \fn void QList::clear()
+/*! \fn template <class T> void QList<T>::clear()
Removes all items from the list.
\sa removeAll()
*/
-/*! \fn const T &QList::at(int i) const
+/*! \fn template <class T> const T &QList<T>::at(int i) const
Returns the item at index position \a i in the list. \a i must be
a valid index position in the list (i.e., 0 <= \a i < size()).
@@ -736,7 +736,7 @@ void **QListData::erase(void **xi)
\sa value(), operator[]()
*/
-/*! \fn T &QList::operator[](int i)
+/*! \fn template <class T> T &QList<T>::operator[](int i)
Returns the item at index position \a i as a modifiable reference.
\a i must be a valid index position in the list (i.e., 0 <= \a i <
@@ -750,14 +750,14 @@ void **QListData::erase(void **xi)
\sa at(), value()
*/
-/*! \fn const T &QList::operator[](int i) const
+/*! \fn template <class T> const T &QList<T>::operator[](int i) const
\overload
Same as at(). This function runs in \l{Algorithmic Complexity}{constant time}.
*/
-/*! \fn QList::reserve(int alloc)
+/*! \fn template <class T> void QList<T>::reserve(int alloc)
Reserve space for \a alloc elements.
@@ -770,7 +770,7 @@ void **QListData::erase(void **xi)
\since 4.7
*/
-/*! \fn void QList::append(const T &value)
+/*! \fn template <class T> void QList<T>::append(const T &value)
Inserts \a value at the end of the list.
@@ -787,7 +787,7 @@ void **QListData::erase(void **xi)
\sa operator<<(), prepend(), insert()
*/
-/*! \fn void QList::append(const QList<T> &value)
+/*! \fn template <class T> void QList<T>::append(const QList<T> &value)
\overload
@@ -798,7 +798,7 @@ void **QListData::erase(void **xi)
\sa operator<<(), operator+=()
*/
-/*! \fn void QList::prepend(const T &value)
+/*! \fn template <class T> void QList<T>::prepend(const T &value)
Inserts \a value at the beginning of the list.
@@ -815,7 +815,7 @@ void **QListData::erase(void **xi)
\sa append(), insert()
*/
-/*! \fn void QList::insert(int i, const T &value)
+/*! \fn template <class T> void QList<T>::insert(int i, const T &value)
Inserts \a value at index position \a i in the list. If \a i <= 0,
the value is prepended to the list. If \a i >= size(), the
@@ -827,7 +827,7 @@ void **QListData::erase(void **xi)
\sa append(), prepend(), replace(), removeAt()
*/
-/*! \fn QList::iterator QList::insert(iterator before, const T &value)
+/*! \fn template <class T> QList<T>::iterator QList<T>::insert(iterator before, const T &value)
\overload
@@ -838,7 +838,7 @@ void **QListData::erase(void **xi)
instead.
*/
-/*! \fn void QList::replace(int i, const T &value)
+/*! \fn template <class T> void QList<T>::replace(int i, const T &value)
Replaces the item at index position \a i with \a value. \a i must
be a valid index position in the list (i.e., 0 <= \a i < size()).
@@ -847,7 +847,7 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn int QList::removeAll(const T &value)
+ \fn template <class T> int QList<T>::removeAll(const T &value)
Removes all occurrences of \a value in the list and returns the
number of entries removed.
@@ -862,7 +862,7 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn bool QList::removeOne(const T &value)
+ \fn template <class T> bool QList<T>::removeOne(const T &value)
\since 4.4
Removes the first occurrence of \a value in the list and returns
@@ -877,7 +877,7 @@ void **QListData::erase(void **xi)
\sa removeAll(), removeAt(), takeAt(), replace()
*/
-/*! \fn void QList::removeAt(int i)
+/*! \fn template <class T> void QList<T>::removeAt(int i)
Removes the item at index position \a i. \a i must be a valid
index position in the list (i.e., 0 <= \a i < size()).
@@ -885,7 +885,7 @@ void **QListData::erase(void **xi)
\sa takeAt(), removeFirst(), removeLast(), removeOne()
*/
-/*! \fn T QList::takeAt(int i)
+/*! \fn template <class T> T QList<T>::takeAt(int i)
Removes the item at index position \a i and returns it. \a i must
be a valid index position in the list (i.e., 0 <= \a i < size()).
@@ -895,7 +895,7 @@ void **QListData::erase(void **xi)
\sa removeAt(), takeFirst(), takeLast()
*/
-/*! \fn T QList::takeFirst()
+/*! \fn template <class T> T QList<T>::takeFirst()
Removes the first item in the list and returns it. This is the
same as takeAt(0). This function assumes the list is not empty. To
@@ -910,7 +910,7 @@ void **QListData::erase(void **xi)
\sa takeLast(), takeAt(), removeFirst()
*/
-/*! \fn T QList::takeLast()
+/*! \fn template <class T> T QList<T>::takeLast()
Removes the last item in the list and returns it. This is the
same as takeAt(size() - 1). This function assumes the list is
@@ -926,7 +926,7 @@ void **QListData::erase(void **xi)
\sa takeFirst(), takeAt(), removeLast()
*/
-/*! \fn void QList::move(int from, int to)
+/*! \fn template <class T> void QList<T>::move(int from, int to)
Moves the item at index position \a from to index position \a to.
@@ -941,7 +941,7 @@ void **QListData::erase(void **xi)
\sa swap(), insert(), takeAt()
*/
-/*! \fn void QList::swap(int i, int j)
+/*! \fn template <class T> void QList<T>::swap(int i, int j)
Exchange the item at index position \a i with the item at index
position \a j. This function assumes that both \a i and \a j are
@@ -954,7 +954,7 @@ void **QListData::erase(void **xi)
\sa move()
*/
-/*! \fn int QList::indexOf(const T &value, int from = 0) const
+/*! \fn template <class T> int QList<T>::indexOf(const T &value, int from = 0) const
Returns the index position of the first occurrence of \a value in
the list, searching forward from index position \a from. Returns
@@ -973,7 +973,7 @@ void **QListData::erase(void **xi)
\sa lastIndexOf(), contains()
*/
-/*! \fn int QList::lastIndexOf(const T &value, int from = -1) const
+/*! \fn template <class T> int QList<T>::lastIndexOf(const T &value, int from = -1) const
Returns the index position of the last occurrence of \a value in
the list, searching backward from index position \a from. If \a
@@ -993,7 +993,7 @@ void **QListData::erase(void **xi)
\sa indexOf()
*/
-/*! \fn bool QList::contains(const T &value) const
+/*! \fn template <class T> bool QList<T>::contains(const T &value) const
Returns \c true if the list contains an occurrence of \a value;
otherwise returns \c false.
@@ -1004,7 +1004,7 @@ void **QListData::erase(void **xi)
\sa indexOf(), count()
*/
-/*! \fn int QList::count(const T &value) const
+/*! \fn template <class T> int QList<T>::count(const T &value) const
Returns the number of occurrences of \a value in the list.
@@ -1014,7 +1014,7 @@ void **QListData::erase(void **xi)
\sa contains(), indexOf()
*/
-/*! \fn bool QList::startsWith(const T &value) const
+/*! \fn template <class T> bool QList<T>::startsWith(const T &value) const
\since 4.5
Returns \c true if this list is not empty and its first
@@ -1023,7 +1023,7 @@ void **QListData::erase(void **xi)
\sa isEmpty(), contains()
*/
-/*! \fn bool QList::endsWith(const T &value) const
+/*! \fn template <class T> bool QList<T>::endsWith(const T &value) const
\since 4.5
Returns \c true if this list is not empty and its last
@@ -1032,7 +1032,7 @@ void **QListData::erase(void **xi)
\sa isEmpty(), contains()
*/
-/*! \fn QList::iterator QList::begin()
+/*! \fn template <class T> QList<T>::iterator QList<T>::begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
the list.
@@ -1040,12 +1040,12 @@ void **QListData::erase(void **xi)
\sa constBegin(), end()
*/
-/*! \fn QList::const_iterator QList::begin() const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::begin() const
\overload
*/
-/*! \fn QList::const_iterator QList::cbegin() const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -1054,7 +1054,7 @@ void **QListData::erase(void **xi)
\sa begin(), cend()
*/
-/*! \fn QList::const_iterator QList::constBegin() const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
in the list.
@@ -1062,7 +1062,7 @@ void **QListData::erase(void **xi)
\sa begin(), constEnd()
*/
-/*! \fn QList::iterator QList::end()
+/*! \fn template <class T> QList<T>::iterator QList<T>::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
after the last item in the list.
@@ -1070,12 +1070,12 @@ void **QListData::erase(void **xi)
\sa begin(), constEnd()
*/
-/*! \fn const_iterator QList::end() const
+/*! \fn template <class T> const_iterator QList<T>::end() const
\overload
*/
-/*! \fn QList::const_iterator QList::cend() const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -1084,7 +1084,7 @@ void **QListData::erase(void **xi)
\sa cbegin(), end()
*/
-/*! \fn QList::const_iterator QList::constEnd() const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the list.
@@ -1092,7 +1092,7 @@ void **QListData::erase(void **xi)
\sa constBegin(), end()
*/
-/*! \fn QList::reverse_iterator QList::rbegin()
+/*! \fn template <class T> QList<T>::reverse_iterator QList<T>::rbegin()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -1101,12 +1101,12 @@ void **QListData::erase(void **xi)
\sa begin(), crbegin(), rend()
*/
-/*! \fn QList::const_reverse_iterator QList::rbegin() const
+/*! \fn template <class T> QList<T>::const_reverse_iterator QList<T>::rbegin() const
\since 5.6
\overload
*/
-/*! \fn QList::const_reverse_iterator QList::crbegin() const
+/*! \fn template <class T> QList<T>::const_reverse_iterator QList<T>::crbegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -1115,7 +1115,7 @@ void **QListData::erase(void **xi)
\sa begin(), rbegin(), rend()
*/
-/*! \fn QList::reverse_iterator QList::rend()
+/*! \fn template <class T> QList<T>::reverse_iterator QList<T>::rend()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
@@ -1124,12 +1124,12 @@ void **QListData::erase(void **xi)
\sa end(), crend(), rbegin()
*/
-/*! \fn QList::const_reverse_iterator QList::rend() const
+/*! \fn template <class T> QList<T>::const_reverse_iterator QList<T>::rend() const
\since 5.6
\overload
*/
-/*! \fn QList::const_reverse_iterator QList::crend() const
+/*! \fn template <class T> QList<T>::const_reverse_iterator QList<T>::crend() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
@@ -1138,7 +1138,7 @@ void **QListData::erase(void **xi)
\sa end(), rend(), rbegin()
*/
-/*! \fn QList::iterator QList::erase(iterator pos)
+/*! \fn template <class T> QList<T>::iterator QList<T>::erase(iterator pos)
Removes the item associated with the iterator \a pos from the
list, and returns an iterator to the next item in the list (which
@@ -1147,7 +1147,7 @@ void **QListData::erase(void **xi)
\sa insert(), removeAt()
*/
-/*! \fn QList::iterator QList::erase(iterator begin, iterator end)
+/*! \fn template <class T> QList<T>::iterator QList<T>::erase(iterator begin, iterator end)
\overload
@@ -1240,13 +1240,13 @@ void **QListData::erase(void **xi)
\sa QList::rbegin(), QList::rend(), QList::reverse_iterator, QList::const_iterator
*/
-/*! \fn int QList::count() const
+/*! \fn template <class T> int QList<T>::count() const
Returns the number of items in the list. This is effectively the
same as size().
*/
-/*! \fn int QList::length() const
+/*! \fn template <class T> int QList<T>::length() const
\since 4.5
This function is identical to count().
@@ -1254,7 +1254,7 @@ void **QListData::erase(void **xi)
\sa count()
*/
-/*! \fn T& QList::first()
+/*! \fn template <class T> T& QList<T>::first()
Returns a reference to the first item in the list. The list must
not be empty. If the list can be empty, call isEmpty() before
@@ -1263,12 +1263,12 @@ void **QListData::erase(void **xi)
\sa constFirst(), last(), isEmpty()
*/
-/*! \fn const T& QList::first() const
+/*! \fn template <class T> const T& QList<T>::first() const
\overload
*/
-/*! \fn const T& QList::constFirst() const
+/*! \fn template <class T> const T& QList<T>::constFirst() const
\since 5.6
Returns a const reference to the first item in the list. The list must
@@ -1278,7 +1278,7 @@ void **QListData::erase(void **xi)
\sa constLast(), isEmpty(), first()
*/
-/*! \fn T& QList::last()
+/*! \fn template <class T> T& QList<T>::last()
Returns a reference to the last item in the list. The list must
not be empty. If the list can be empty, call isEmpty() before
@@ -1287,12 +1287,12 @@ void **QListData::erase(void **xi)
\sa constLast(), first(), isEmpty()
*/
-/*! \fn const T& QList::last() const
+/*! \fn template <class T> const T& QList<T>::last() const
\overload
*/
-/*! \fn const T& QList::constLast() const
+/*! \fn template <class T> const T& QList<T>::constLast() const
\since 5.6
Returns a reference to the last item in the list. The list must
@@ -1302,7 +1302,7 @@ void **QListData::erase(void **xi)
\sa constFirst(), isEmpty(), last()
*/
-/*! \fn void QList::removeFirst()
+/*! \fn template <class T> void QList<T>::removeFirst()
Removes the first item in the list. Calling this function is
equivalent to calling removeAt(0). The list must not be empty. If
@@ -1312,7 +1312,7 @@ void **QListData::erase(void **xi)
\sa removeAt(), takeFirst()
*/
-/*! \fn void QList::removeLast()
+/*! \fn template <class T> void QList<T>::removeLast()
Removes the last item in the list. Calling this function is
equivalent to calling removeAt(size() - 1). The list must not be
@@ -1322,7 +1322,7 @@ void **QListData::erase(void **xi)
\sa removeAt(), takeLast()
*/
-/*! \fn T QList::value(int i) const
+/*! \fn template <class T> T QList<T>::value(int i) const
Returns the value at index position \a i in the list.
@@ -1334,7 +1334,7 @@ void **QListData::erase(void **xi)
\sa at(), operator[]()
*/
-/*! \fn T QList::value(int i, const T &defaultValue) const
+/*! \fn template <class T> T QList<T>::value(int i, const T &defaultValue) const
\overload
@@ -1342,63 +1342,63 @@ void **QListData::erase(void **xi)
\a defaultValue.
*/
-/*! \fn void QList::push_back(const T &value)
+/*! \fn template <class T> void QList<T>::push_back(const T &value)
This function is provided for STL compatibility. It is equivalent
to \l{QList::append()}{append(\a value)}.
*/
-/*! \fn void QList::push_front(const T &value)
+/*! \fn template <class T> void QList<T>::push_front(const T &value)
This function is provided for STL compatibility. It is equivalent
to \l{QList::prepend()}{prepend(\a value)}.
*/
-/*! \fn T& QList::front()
+/*! \fn template <class T> T& QList<T>::front()
This function is provided for STL compatibility. It is equivalent
to first(). The list must not be empty. If the list can be empty,
call isEmpty() before calling this function.
*/
-/*! \fn const T& QList::front() const
+/*! \fn template <class T> const T& QList<T>::front() const
\overload
*/
-/*! \fn T& QList::back()
+/*! \fn template <class T> T& QList<T>::back()
This function is provided for STL compatibility. It is equivalent
to last(). The list must not be empty. If the list can be empty,
call isEmpty() before calling this function.
*/
-/*! \fn const T& QList::back() const
+/*! \fn template <class T> const T& QList<T>::back() const
\overload
*/
-/*! \fn void QList::pop_front()
+/*! \fn template <class T> void QList<T>::pop_front()
This function is provided for STL compatibility. It is equivalent
to removeFirst(). The list must not be empty. If the list can be
empty, call isEmpty() before calling this function.
*/
-/*! \fn void QList::pop_back()
+/*! \fn template <class T> void QList<T>::pop_back()
This function is provided for STL compatibility. It is equivalent
to removeLast(). The list must not be empty. If the list can be
empty, call isEmpty() before calling this function.
*/
-/*! \fn bool QList::empty() const
+/*! \fn template <class T> bool QList<T>::empty() const
This function is provided for STL compatibility. It is equivalent
to isEmpty() and returns \c true if the list is empty.
*/
-/*! \fn QList<T> &QList::operator+=(const QList<T> &other)
+/*! \fn template <class T> QList<T> &QList<T>::operator+=(const QList<T> &other)
Appends the items of the \a other list to this list and returns a
reference to this list.
@@ -1406,7 +1406,7 @@ void **QListData::erase(void **xi)
\sa operator+(), append()
*/
-/*! \fn void QList::operator+=(const T &value)
+/*! \fn template <class T> void QList<T>::operator+=(const T &value)
\overload
@@ -1415,7 +1415,7 @@ void **QListData::erase(void **xi)
\sa append(), operator<<()
*/
-/*! \fn QList<T> QList::operator+(const QList<T> &other) const
+/*! \fn template <class T> QList<T> QList<T>::operator+(const QList<T> &other) const
Returns a list that contains all the items in this list followed
by all the items in the \a other list.
@@ -1423,7 +1423,7 @@ void **QListData::erase(void **xi)
\sa operator+=()
*/
-/*! \fn QList<T> &QList::operator<<(const QList<T> &other)
+/*! \fn template <class T> QList<T> &QList<T>::operator<<(const QList<T> &other)
Appends the items of the \a other list to this list and returns a
reference to this list.
@@ -1431,7 +1431,7 @@ void **QListData::erase(void **xi)
\sa operator+=(), append()
*/
-/*! \fn void QList::operator<<(const T &value)
+/*! \fn template <class T> void QList<T>::operator<<(const T &value)
\overload
@@ -1521,7 +1521,7 @@ void **QListData::erase(void **xi)
\internal
*/
-/*! \fn QList::iterator::iterator()
+/*! \fn template <class T> QList<T>::iterator::iterator()
Constructs an uninitialized iterator.
@@ -1532,17 +1532,17 @@ void **QListData::erase(void **xi)
\sa QList::begin(), QList::end()
*/
-/*! \fn QList::iterator::iterator(Node *node)
+/*! \fn template <class T> QList<T>::iterator::iterator(Node *node)
\internal
*/
-/*! \fn QList::iterator::iterator(const iterator &other)
+/*! \fn template <class T> QList<T>::iterator::iterator(const iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn T &QList::iterator::operator*() const
+/*! \fn template <class T> T &QList<T>::iterator::operator*() const
Returns a modifiable reference to the current item.
@@ -1554,14 +1554,14 @@ void **QListData::erase(void **xi)
\sa operator->()
*/
-/*! \fn T *QList::iterator::operator->() const
+/*! \fn template <class T> T *QList<T>::iterator::operator->() const
Returns a pointer to the current item.
\sa operator*()
*/
-/*! \fn T &QList::iterator::operator[](difference_type j) const
+/*! \fn template <class T> T &QList<T>::iterator::operator[](difference_type j) const
Returns a modifiable reference to the item at position *this +
\a{j}.
@@ -1573,8 +1573,8 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn bool QList::iterator::operator==(const iterator &other) const
- \fn bool QList::iterator::operator==(const const_iterator &other) const
+ \fn template <class T> bool QList<T>::iterator::operator==(const iterator &other) const
+ \fn template <class T> bool QList<T>::iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -1583,8 +1583,8 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn bool QList::iterator::operator!=(const iterator &other) const
- \fn bool QList::iterator::operator!=(const const_iterator &other) const
+ \fn template <class T> bool QList<T>::iterator::operator!=(const iterator &other) const
+ \fn template <class T> bool QList<T>::iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -1593,38 +1593,38 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn bool QList::iterator::operator<(const iterator& other) const
- \fn bool QList::iterator::operator<(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator<(const iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator<(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is less than
the item pointed to by the \a other iterator.
*/
/*!
- \fn bool QList::iterator::operator<=(const iterator& other) const
- \fn bool QList::iterator::operator<=(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator<=(const iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator<=(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is less than
or equal to the item pointed to by the \a other iterator.
*/
/*!
- \fn bool QList::iterator::operator>(const iterator& other) const
- \fn bool QList::iterator::operator>(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator>(const iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator>(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is greater
than the item pointed to by the \a other iterator.
*/
/*!
- \fn bool QList::iterator::operator>=(const iterator& other) const
- \fn bool QList::iterator::operator>=(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator>=(const iterator& other) const
+ \fn template <class T> bool QList<T>::iterator::operator>=(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is greater
than or equal to the item pointed to by the \a other iterator.
*/
-/*! \fn QList::iterator &QList::iterator::operator++()
+/*! \fn template <class T> QList<T>::iterator &QList<T>::iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the
next item in the list and returns an iterator to the new current
@@ -1635,7 +1635,7 @@ void **QListData::erase(void **xi)
\sa operator--()
*/
-/*! \fn QList::iterator QList::iterator::operator++(int)
+/*! \fn template <class T> QList<T>::iterator QList<T>::iterator::operator++(int)
\overload
@@ -1644,7 +1644,7 @@ void **QListData::erase(void **xi)
current item.
*/
-/*! \fn QList::iterator &QList::iterator::operator--()
+/*! \fn template <class T> QList<T>::iterator &QList<T>::iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding item
current and returns an iterator to the new current item.
@@ -1654,7 +1654,7 @@ void **QListData::erase(void **xi)
\sa operator++()
*/
-/*! \fn QList::iterator QList::iterator::operator--(int)
+/*! \fn template <class T> QList<T>::iterator QList<T>::iterator::operator--(int)
\overload
@@ -1662,7 +1662,7 @@ void **QListData::erase(void **xi)
current and returns an iterator to the previously current item.
*/
-/*! \fn QList::iterator &QList::iterator::operator+=(difference_type j)
+/*! \fn template <class T> QList<T>::iterator &QList<T>::iterator::operator+=(difference_type j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -1670,7 +1670,7 @@ void **QListData::erase(void **xi)
\sa operator-=(), operator+()
*/
-/*! \fn QList::iterator &QList::iterator::operator-=(difference_type j)
+/*! \fn template <class T> QList<T>::iterator &QList<T>::iterator::operator-=(difference_type j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -1678,7 +1678,7 @@ void **QListData::erase(void **xi)
\sa operator+=(), operator-()
*/
-/*! \fn QList::iterator QList::iterator::operator+(difference_type j) const
+/*! \fn template <class T> QList<T>::iterator QList<T>::iterator::operator+(difference_type j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -1686,7 +1686,7 @@ void **QListData::erase(void **xi)
\sa operator-(), operator+=()
*/
-/*! \fn QList::iterator QList::iterator::operator-(difference_type j) const
+/*! \fn template <class T> QList<T>::iterator QList<T>::iterator::operator-(difference_type j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -1694,7 +1694,7 @@ void **QListData::erase(void **xi)
\sa operator+(), operator-=()
*/
-/*! \fn int QList::iterator::operator-(iterator other) const
+/*! \fn template <class T> int QList<T>::iterator::operator-(iterator other) const
Returns the number of items between the item pointed to by \a
other and the item pointed to by this iterator.
@@ -1750,7 +1750,7 @@ void **QListData::erase(void **xi)
\sa QList::iterator, QListIterator
*/
-/*! \fn QList::const_iterator::const_iterator()
+/*! \fn template <class T> QList<T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -1787,36 +1787,36 @@ void **QListData::erase(void **xi)
\internal
*/
-/*! \fn QList::const_iterator::const_iterator(Node *node)
+/*! \fn template <class T> QList<T>::const_iterator::const_iterator(Node *node)
\internal
*/
-/*! \fn QList::const_iterator::const_iterator(const const_iterator &other)
+/*! \fn template <class T> QList<T>::const_iterator::const_iterator(const const_iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn QList::const_iterator::const_iterator(const iterator &other)
+/*! \fn template <class T> QList<T>::const_iterator::const_iterator(const iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn const T &QList::const_iterator::operator*() const
+/*! \fn template <class T> const T &QList<T>::const_iterator::operator*() const
Returns the current item.
\sa operator->()
*/
-/*! \fn const T *QList::const_iterator::operator->() const
+/*! \fn template <class T> const T *QList<T>::const_iterator::operator->() const
Returns a pointer to the current item.
\sa operator*()
*/
-/*! \fn const T &QList::const_iterator::operator[](difference_type j) const
+/*! \fn template <class T> const T &QList<T>::const_iterator::operator[](difference_type j) const
Returns the item at position *this + \a{j}.
@@ -1826,7 +1826,7 @@ void **QListData::erase(void **xi)
\sa operator+()
*/
-/*! \fn bool QList::const_iterator::operator==(const const_iterator &other) const
+/*! \fn template <class T> bool QList<T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -1834,7 +1834,7 @@ void **QListData::erase(void **xi)
\sa operator!=()
*/
-/*! \fn bool QList::const_iterator::operator!=(const const_iterator &other) const
+/*! \fn template <class T> bool QList<T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -1843,34 +1843,34 @@ void **QListData::erase(void **xi)
*/
/*!
- \fn bool QList::const_iterator::operator<(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::const_iterator::operator<(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is less than
the item pointed to by the \a other iterator.
*/
/*!
- \fn bool QList::const_iterator::operator<=(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::const_iterator::operator<=(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is less than
or equal to the item pointed to by the \a other iterator.
*/
/*!
- \fn bool QList::const_iterator::operator>(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::const_iterator::operator>(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is greater
than the item pointed to by the \a other iterator.
*/
/*!
- \fn bool QList::const_iterator::operator>=(const const_iterator& other) const
+ \fn template <class T> bool QList<T>::const_iterator::operator>=(const const_iterator& other) const
Returns \c true if the item pointed to by this iterator is greater
than or equal to the item pointed to by the \a other iterator.
*/
-/*! \fn QList::const_iterator &QList::const_iterator::operator++()
+/*! \fn template <class T> QList<T>::const_iterator &QList<T>::const_iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the
next item in the list and returns an iterator to the new current
@@ -1881,7 +1881,7 @@ void **QListData::erase(void **xi)
\sa operator--()
*/
-/*! \fn QList::const_iterator QList::const_iterator::operator++(int)
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::const_iterator::operator++(int)
\overload
@@ -1890,7 +1890,7 @@ void **QListData::erase(void **xi)
current item.
*/
-/*! \fn QList::const_iterator &QList::const_iterator::operator--()
+/*! \fn template <class T> QList<T>::const_iterator &QList<T>::const_iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding item
current and returns an iterator to the new current item.
@@ -1900,7 +1900,7 @@ void **QListData::erase(void **xi)
\sa operator++()
*/
-/*! \fn QList::const_iterator QList::const_iterator::operator--(int)
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::const_iterator::operator--(int)
\overload
@@ -1908,7 +1908,7 @@ void **QListData::erase(void **xi)
current and returns an iterator to the previously current item.
*/
-/*! \fn QList::const_iterator &QList::const_iterator::operator+=(difference_type j)
+/*! \fn template <class T> QList<T>::const_iterator &QList<T>::const_iterator::operator+=(difference_type j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -1916,7 +1916,7 @@ void **QListData::erase(void **xi)
\sa operator-=(), operator+()
*/
-/*! \fn QList::const_iterator &QList::const_iterator::operator-=(difference_type j)
+/*! \fn template <class T> QList<T>::const_iterator &QList<T>::const_iterator::operator-=(difference_type j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -1924,7 +1924,7 @@ void **QListData::erase(void **xi)
\sa operator+=(), operator-()
*/
-/*! \fn QList::const_iterator QList::const_iterator::operator+(difference_type j) const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::const_iterator::operator+(difference_type j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -1932,7 +1932,7 @@ void **QListData::erase(void **xi)
\sa operator-(), operator+=()
*/
-/*! \fn QList::const_iterator QList::const_iterator::operator-(difference_type j) const
+/*! \fn template <class T> QList<T>::const_iterator QList<T>::const_iterator::operator-(difference_type j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -1940,13 +1940,13 @@ void **QListData::erase(void **xi)
\sa operator+(), operator-=()
*/
-/*! \fn int QList::const_iterator::operator-(const_iterator other) const
+/*! \fn template <class T> int QList<T>::const_iterator::operator-(const_iterator other) const
Returns the number of items between the item pointed to by \a
other and the item pointed to by this iterator.
*/
-/*! \fn QDataStream &operator<<(QDataStream &out, const QList<T> &list)
+/*! \fn template <class T> QDataStream &operator<<(QDataStream &out, const QList<T> &list)
\relates QList
Writes the list \a list to stream \a out.
@@ -1957,7 +1957,7 @@ void **QListData::erase(void **xi)
\sa{Serializing Qt Data Types}{Format of the QDataStream operators}
*/
-/*! \fn QDataStream &operator>>(QDataStream &in, QList<T> &list)
+/*! \fn template <class T> QDataStream &operator>>(QDataStream &in, QList<T> &list)
\relates QList
Reads a list from stream \a in into \a list.
@@ -1968,7 +1968,7 @@ void **QListData::erase(void **xi)
\sa{Serializing Qt Data Types}{Format of the QDataStream operators}
*/
-/*! \fn QList<T> QList<T>::fromVector(const QVector<T> &vector)
+/*! \fn template <class T> QList<T> QList<T>::fromVector(const QVector<T> &vector)
Returns a QList object with the data contained in \a vector.
@@ -1979,7 +1979,7 @@ void **QListData::erase(void **xi)
\sa fromSet(), toVector(), QVector::toList()
*/
-/*! \fn QVector<T> QList<T>::toVector() const
+/*! \fn template <class T> QVector<T> QList<T>::toVector() const
Returns a QVector object with the data contained in this QList.
@@ -1990,7 +1990,7 @@ void **QListData::erase(void **xi)
\sa toSet(), fromVector(), QVector::fromList()
*/
-/*! \fn QList<T> QList<T>::fromSet(const QSet<T> &set)
+/*! \fn template <class T> QList<T> QList<T>::fromSet(const QSet<T> &set)
Returns a QList object with the data contained in \a set. The
order of the elements in the QList is undefined.
@@ -2002,7 +2002,7 @@ void **QListData::erase(void **xi)
\sa fromVector(), toSet(), QSet::toList()
*/
-/*! \fn QSet<T> QList<T>::toSet() const
+/*! \fn template <class T> QSet<T> QList<T>::toSet() const
Returns a QSet object with the data contained in this QList.
Since QSet doesn't allow duplicates, the resulting QSet might be
@@ -2015,7 +2015,7 @@ void **QListData::erase(void **xi)
\sa toVector(), fromSet(), QSet::fromList()
*/
-/*! \fn QList<T> QList<T>::fromStdList(const std::list<T> &list)
+/*! \fn template <class T> QList<T> QList<T>::fromStdList(const std::list<T> &list)
Returns a QList object with the data contained in \a list. The
order of the elements in the QList is the same as in \a list.
@@ -2027,7 +2027,7 @@ void **QListData::erase(void **xi)
\sa toStdList(), QVector::fromStdVector()
*/
-/*! \fn std::list<T> QList<T>::toStdList() const
+/*! \fn template <class T> std::list<T> QList<T>::toStdList() const
Returns a std::list object with the data contained in this QList.
Example:
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index 1042c29460..af7659e995 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -231,7 +231,7 @@ public:
typedef T *pointer;
typedef T &reference;
- inline iterator() Q_DECL_NOTHROW : i(Q_NULLPTR) {}
+ inline iterator() Q_DECL_NOTHROW : i(nullptr) {}
inline iterator(Node *n) Q_DECL_NOTHROW : i(n) {}
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
// can't remove it in Qt 5, since doing so would make the type trivial,
@@ -283,7 +283,7 @@ public:
typedef const T *pointer;
typedef const T &reference;
- inline const_iterator() Q_DECL_NOTHROW : i(Q_NULLPTR) {}
+ inline const_iterator() Q_DECL_NOTHROW : i(nullptr) {}
inline const_iterator(Node *n) Q_DECL_NOTHROW : i(n) {}
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
// can't remove it in Qt 5, since doing so would make the type trivial,
diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp
index a072ea411c..f7a6f35183 100644
--- a/src/corelib/tools/qlocale.cpp
+++ b/src/corelib/tools/qlocale.cpp
@@ -64,6 +64,9 @@
#include "qstringbuilder.h"
#include "private/qnumeric_p.h"
#include <cmath>
+#ifndef QT_NO_SYSTEMLOCALE
+# include "qmutex.h"
+#endif
#ifdef Q_OS_WIN
# include <qt_windows.h>
# include <time.h>
@@ -107,31 +110,32 @@ QLocale::Language QLocalePrivate::codeToLanguage(QStringView code) Q_DECL_NOTHRO
return QLocale::Language((c - language_code_list)/3);
}
- // legacy codes
- if (uc1 == 'n' && uc2 == 'o' && uc3 == 0) { // no -> nb
- Q_STATIC_ASSERT(QLocale::Norwegian == QLocale::NorwegianBokmal);
- return QLocale::Norwegian;
- }
- if (uc1 == 't' && uc2 == 'l' && uc3 == 0) { // tl -> fil
- Q_STATIC_ASSERT(QLocale::Tagalog == QLocale::Filipino);
- return QLocale::Tagalog;
- }
- if (uc1 == 's' && uc2 == 'h' && uc3 == 0) { // sh -> sr[_Latn]
- Q_STATIC_ASSERT(QLocale::SerboCroatian == QLocale::Serbian);
- return QLocale::SerboCroatian;
- }
- if (uc1 == 'm' && uc2 == 'o' && uc3 == 0) { // mo -> ro
- Q_STATIC_ASSERT(QLocale::Moldavian == QLocale::Romanian);
- return QLocale::Moldavian;
+ if (uc3 == 0) {
+ // legacy codes
+ if (uc1 == 'n' && uc2 == 'o') { // no -> nb
+ Q_STATIC_ASSERT(QLocale::Norwegian == QLocale::NorwegianBokmal);
+ return QLocale::Norwegian;
+ }
+ if (uc1 == 't' && uc2 == 'l') { // tl -> fil
+ Q_STATIC_ASSERT(QLocale::Tagalog == QLocale::Filipino);
+ return QLocale::Tagalog;
+ }
+ if (uc1 == 's' && uc2 == 'h') { // sh -> sr[_Latn]
+ Q_STATIC_ASSERT(QLocale::SerboCroatian == QLocale::Serbian);
+ return QLocale::SerboCroatian;
+ }
+ if (uc1 == 'm' && uc2 == 'o') { // mo -> ro
+ Q_STATIC_ASSERT(QLocale::Moldavian == QLocale::Romanian);
+ return QLocale::Moldavian;
+ }
+ // Android uses the following deprecated codes
+ if (uc1 == 'i' && uc2 == 'w') // iw -> he
+ return QLocale::Hebrew;
+ if (uc1 == 'i' && uc2 == 'n') // in -> id
+ return QLocale::Indonesian;
+ if (uc1 == 'j' && uc2 == 'i') // ji -> yi
+ return QLocale::Yiddish;
}
- // Android uses the following deprecated codes
- if (uc1 == 'i' && uc2 == 'w' && uc3 == 0) // iw -> he
- return QLocale::Hebrew;
- if (uc1 == 'i' && uc2 == 'n' && uc3 == 0) // in -> id
- return QLocale::Indonesian;
- if (uc1 == 'j' && uc2 == 'i' && uc3 == 0) // ji -> yi
- return QLocale::Yiddish;
-
return QLocale::C;
}
@@ -368,48 +372,52 @@ static const QLocaleData *findLocaleDataById(const QLocaleId &localeId)
const QLocaleData *QLocaleData::findLocaleData(QLocale::Language language, QLocale::Script script, QLocale::Country country)
{
QLocaleId localeId = QLocaleId::fromIds(language, script, country);
- localeId = localeId.withLikelySubtagsAdded();
+ QLocaleId likelyId = localeId.withLikelySubtagsAdded();
- const uint idx = locale_index[localeId.language_id];
+ const uint idx = locale_index[likelyId.language_id];
- // Try a straight match
- if (const QLocaleData *const data = findLocaleDataById(localeId))
+ // Try a straight match with the likely data:
+ if (const QLocaleData *const data = findLocaleDataById(likelyId))
return data;
QList<QLocaleId> tried;
- tried.push_back(localeId);
+ tried.push_back(likelyId);
// No match; try again with likely country
- localeId = QLocaleId::fromIds(language, script, QLocale::AnyCountry);
- localeId = localeId.withLikelySubtagsAdded();
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
- }
+ if (country != QLocale::AnyCountry
+ && (language != QLocale::AnyLanguage || script != QLocale::AnyScript)) {
+ localeId = QLocaleId::fromIds(language, script, QLocale::AnyCountry);
+ likelyId = localeId.withLikelySubtagsAdded();
+ if (!tried.contains(likelyId)) {
+ if (const QLocaleData *const data = findLocaleDataById(likelyId))
+ return data;
+ tried.push_back(likelyId);
+ }
- // No match; try again with any country
- localeId = QLocaleId::fromIds(language, script, QLocale::AnyCountry);
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
+ // No match; try again with any country
+ if (!tried.contains(localeId)) {
+ if (const QLocaleData *const data = findLocaleDataById(localeId))
+ return data;
+ tried.push_back(localeId);
+ }
}
// No match; try again with likely script
- localeId = QLocaleId::fromIds(language, QLocale::AnyScript, country);
- localeId = localeId.withLikelySubtagsAdded();
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
- }
+ if (script != QLocale::AnyScript
+ && (language != QLocale::AnyLanguage || country != QLocale::AnyCountry)) {
+ localeId = QLocaleId::fromIds(language, QLocale::AnyScript, country);
+ likelyId = localeId.withLikelySubtagsAdded();
+ if (!tried.contains(likelyId)) {
+ if (const QLocaleData *const data = findLocaleDataById(likelyId))
+ return data;
+ tried.push_back(likelyId);
+ }
- // No match; try again with any script
- localeId = QLocaleId::fromIds(language, QLocale::AnyScript, country);
- if (!tried.contains(localeId)) {
- if (const QLocaleData *const data = findLocaleDataById(localeId))
- return data;
- tried.push_back(localeId);
+ // No match; try again with any script
+ if (!tried.contains(localeId)) {
+ if (const QLocaleData *const data = findLocaleDataById(localeId))
+ return data;
+ tried.push_back(localeId);
+ }
}
// No match; return data at original index
@@ -593,8 +601,6 @@ static QLocalePrivate *c_private()
}
#ifndef QT_NO_SYSTEMLOCALE
-
-
/******************************************************************************
** Default system locale behavior
*/
@@ -683,14 +689,24 @@ void QLocalePrivate::updateSystemPrivate()
if (!res.isNull())
system_data->m_plus = res.toString().at(0).unicode();
}
-#endif
+#endif // !QT_NO_SYSTEMLOCALE
static const QLocaleData *systemData()
{
#ifndef QT_NO_SYSTEMLOCALE
- // copy over the information from the fallback locale and modify
- if (!system_data || system_data->m_language_id == 0)
- QLocalePrivate::updateSystemPrivate();
+ /*
+ Copy over the information from the fallback locale and modify.
+
+ This modifies (cross-thread) global state, so take care to only call it in
+ one thread.
+ */
+ {
+ static QBasicMutex systemDataMutex;
+ systemDataMutex.lock();
+ if (!system_data || system_data->m_language_id == 0)
+ QLocalePrivate::updateSystemPrivate();
+ systemDataMutex.unlock();
+ }
return system_data;
#else
@@ -3151,11 +3167,15 @@ QString QLocaleData::longLongToString(const QChar zero, const QChar group,
negative = false; // neither are negative numbers
}
- QString num_str;
- if (base == 10)
- num_str = qlltoa(l, base, zero);
- else
- num_str = qulltoa(l, base, zero);
+QT_WARNING_PUSH
+ /* "unary minus operator applied to unsigned type, result still unsigned" */
+QT_WARNING_DISABLE_MSVC(4146)
+ /*
+ Negating std::numeric_limits<qlonglong>::min() hits undefined behavior, so
+ taking an absolute value has to cast to unsigned to change sign.
+ */
+ QString num_str = qulltoa(negative ? -qulonglong(l) : qulonglong(l), base, zero);
+QT_WARNING_POP
uint cnt_thousand_sep = 0;
if (flags & ThousandsGroup && base == 10) {
@@ -3787,6 +3807,12 @@ QString QLocale::toCurrencyString(double value, const QString &symbol, int preci
}
/*!
+ \fn QString QLocale::toCurrencyString(float i, const QString &symbol) const
+ \fn QString QLocale::toCurrencyString(float i, const QString &symbol, int precision) const
+ \overload toCurrencyString()
+*/
+
+/*!
\since 5.10
\enum QLocale::DataSizeFormat
diff --git a/src/corelib/tools/qlocale.h b/src/corelib/tools/qlocale.h
index 54b1a32946..ef7a26ea79 100644
--- a/src/corelib/tools/qlocale.h
+++ b/src/corelib/tools/qlocale.h
@@ -949,23 +949,23 @@ public:
QString nativeCountryName() const;
#if QT_STRINGVIEW_LEVEL < 2
- short toShort(const QString &s, bool *ok = Q_NULLPTR) const;
- ushort toUShort(const QString &s, bool *ok = Q_NULLPTR) const;
- int toInt(const QString &s, bool *ok = Q_NULLPTR) const;
- uint toUInt(const QString &s, bool *ok = Q_NULLPTR) const;
- qlonglong toLongLong(const QString &s, bool *ok = Q_NULLPTR) const;
- qulonglong toULongLong(const QString &s, bool *ok = Q_NULLPTR) const;
- float toFloat(const QString &s, bool *ok = Q_NULLPTR) const;
- double toDouble(const QString &s, bool *ok = Q_NULLPTR) const;
+ short toShort(const QString &s, bool *ok = nullptr) const;
+ ushort toUShort(const QString &s, bool *ok = nullptr) const;
+ int toInt(const QString &s, bool *ok = nullptr) const;
+ uint toUInt(const QString &s, bool *ok = nullptr) const;
+ qlonglong toLongLong(const QString &s, bool *ok = nullptr) const;
+ qulonglong toULongLong(const QString &s, bool *ok = nullptr) const;
+ float toFloat(const QString &s, bool *ok = nullptr) const;
+ double toDouble(const QString &s, bool *ok = nullptr) const;
- short toShort(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- ushort toUShort(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- int toInt(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- uint toUInt(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- qlonglong toLongLong(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- qulonglong toULongLong(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- float toFloat(const QStringRef &s, bool *ok = Q_NULLPTR) const;
- double toDouble(const QStringRef &s, bool *ok = Q_NULLPTR) const;
+ short toShort(const QStringRef &s, bool *ok = nullptr) const;
+ ushort toUShort(const QStringRef &s, bool *ok = nullptr) const;
+ int toInt(const QStringRef &s, bool *ok = nullptr) const;
+ uint toUInt(const QStringRef &s, bool *ok = nullptr) const;
+ qlonglong toLongLong(const QStringRef &s, bool *ok = nullptr) const;
+ qulonglong toULongLong(const QStringRef &s, bool *ok = nullptr) const;
+ float toFloat(const QStringRef &s, bool *ok = nullptr) const;
+ double toDouble(const QStringRef &s, bool *ok = nullptr) const;
#endif
short toShort(QStringView s, bool *ok = nullptr) const;
diff --git a/src/corelib/tools/qlocale_tools.cpp b/src/corelib/tools/qlocale_tools.cpp
index 3e4f37501e..4d969a4723 100644
--- a/src/corelib/tools/qlocale_tools.cpp
+++ b/src/corelib/tools/qlocale_tools.cpp
@@ -456,11 +456,6 @@ QString qulltoa(qulonglong l, int base, const QChar _zero)
return QString(reinterpret_cast<QChar *>(p), 65 - (p - buff));
}
-QString qlltoa(qlonglong l, int base, const QChar zero)
-{
- return qulltoa(l < 0 ? -l : l, base, zero);
-}
-
QString &decimalForm(QChar zero, QChar decimal, QChar group,
QString &digits, int decpt, int precision,
PrecisionMode pm,
diff --git a/src/corelib/tools/qlocale_tools_p.h b/src/corelib/tools/qlocale_tools_p.h
index 6133f67add..742abb4957 100644
--- a/src/corelib/tools/qlocale_tools_p.h
+++ b/src/corelib/tools/qlocale_tools_p.h
@@ -83,7 +83,6 @@ void doubleToAscii(double d, QLocaleData::DoubleForm form, int precision, char *
bool &sign, int &length, int &decpt);
QString qulltoa(qulonglong l, int base, const QChar _zero);
-QString qlltoa(qlonglong l, int base, const QChar zero);
Q_CORE_EXPORT QString qdtoa(qreal d, int *decpt, int *sign);
enum PrecisionMode {
diff --git a/src/corelib/tools/qlocale_win.cpp b/src/corelib/tools/qlocale_win.cpp
index 1d80320d8e..30aefb71c1 100644
--- a/src/corelib/tools/qlocale_win.cpp
+++ b/src/corelib/tools/qlocale_win.cpp
@@ -326,9 +326,7 @@ QVariant QSystemLocalePrivate::timeFormat(QLocale::FormatType type)
{
switch (type) {
case QLocale::ShortFormat:
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7)
- return winToQtFormat(getLocaleInfo(LOCALE_SSHORTTIME));
- // fall through
+ return winToQtFormat(getLocaleInfo(LOCALE_SSHORTTIME));
case QLocale::LongFormat:
return winToQtFormat(getLocaleInfo(LOCALE_STIMEFORMAT));
case QLocale::NarrowFormat:
@@ -367,7 +365,7 @@ QVariant QSystemLocalePrivate::dayName(int day, QLocale::FormatType type)
if (type == QLocale::LongFormat)
return getLocaleInfo(long_day_map[day]);
- else if (type == QLocale::NarrowFormat && QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
+ else if (type == QLocale::NarrowFormat)
return getLocaleInfo(narrow_day_map[day]);
return getLocaleInfo(short_day_map[day]);
}
@@ -425,7 +423,7 @@ QVariant QSystemLocalePrivate::toString(const QTime &time, QLocale::FormatType t
DWORD flags = 0;
// keep the same conditional as timeFormat() above
- if (type == QLocale::ShortFormat && QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7)
+ if (type == QLocale::ShortFormat)
flags = TIME_NOSECONDS;
wchar_t buf[255];
@@ -656,15 +654,11 @@ QVariant QSystemLocalePrivate::uiLanguages()
QVariant QSystemLocalePrivate::nativeLanguageName()
{
- if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS7)
- return getLocaleInfo(LOCALE_SNATIVELANGNAME);
return getLocaleInfo(LOCALE_SNATIVELANGUAGENAME);
}
QVariant QSystemLocalePrivate::nativeCountryName()
{
- if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS7)
- return getLocaleInfo(LOCALE_SNATIVECTRYNAME);
return getLocaleInfo(LOCALE_SNATIVECOUNTRYNAME);
}
diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp
index afdd30e5c8..d7844f3128 100644
--- a/src/corelib/tools/qmap.cpp
+++ b/src/corelib/tools/qmap.cpp
@@ -509,7 +509,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa QMapIterator, QMutableMapIterator, QHash, QSet
*/
-/*! \fn QMap::QMap()
+/*! \fn template <class Key, class T> QMap<Key, T>::QMap()
Constructs an empty map.
@@ -517,7 +517,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn QMap::QMap(QMap<Key, T> &&other)
+ \fn template <class Key, class T> QMap<Key, T>::QMap(QMap<Key, T> &&other)
Move-constructs a QMap instance, making it point at the same
object that \a other was pointing to.
@@ -525,7 +525,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\since 5.2
*/
-/*! \fn QMap::QMap(const QMap<Key, T> &other)
+/*! \fn template <class Key, class T> QMap<Key, T>::QMap(const QMap<Key, T> &other)
Constructs a copy of \a other.
@@ -537,14 +537,14 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator=()
*/
-/*! \fn QMap::QMap(const std::map<Key, T> & other)
+/*! \fn template <class Key, class T> QMap<Key, T>::QMap(const std::map<Key, T> & other)
Constructs a copy of \a other.
\sa toStdMap()
*/
-/*! \fn QMap::QMap(std::initializer_list<std::pair<Key,T> > list)
+/*! \fn template <class Key, class T> QMap<Key, T>::QMap(std::initializer_list<std::pair<Key,T> > list)
\since 5.1
Constructs a map with a copy of each of the elements in the
@@ -554,45 +554,45 @@ void QMapDataBase::freeData(QMapDataBase *d)
compiled in C++11 mode.
*/
-/*! \fn std::map<Key, T> QMap::toStdMap() const
+/*! \fn template <class Key, class T> std::map<Key, T> QMap<Key, T>::toStdMap() const
Returns an STL map equivalent to this QMap.
*/
-/*! \fn QMap::~QMap()
+/*! \fn template <class Key, class T> QMap<Key, T>::~QMap()
Destroys the map. References to the values in the map, and all
iterators over this map, become invalid.
*/
-/*! \fn QMap<Key, T> &QMap::operator=(const QMap<Key, T> &other)
+/*! \fn template <class Key, class T> QMap<Key, T> &QMap<Key, T>::operator=(const QMap<Key, T> &other)
Assigns \a other to this map and returns a reference to this map.
*/
/*!
- \fn QMap<Key, T> &QMap::operator=(QMap<Key, T> &&other)
+ \fn template <class Key, class T> QMap<Key, T> &QMap<Key, T>::operator=(QMap<Key, T> &&other)
Move-assigns \a other to this QMap instance.
\since 5.2
*/
-/*! \fn void QMap::swap(QMap<Key, T> &other)
+/*! \fn template <class Key, class T> void QMap<Key, T>::swap(QMap<Key, T> &other)
\since 4.8
Swaps map \a other with this map. This operation is very
fast and never fails.
*/
-/*! \fn void QMultiMap::swap(QMultiMap<Key, T> &other)
+/*! \fn template <class Key, class T> void QMultiMap<Key, T>::swap(QMultiMap<Key, T> &other)
\since 4.8
Swaps map \a other with this map. This operation is very
fast and never fails.
*/
-/*! \fn bool QMap::operator==(const QMap<Key, T> &other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::operator==(const QMap<Key, T> &other) const
Returns \c true if \a other is equal to this map; otherwise returns
false.
@@ -606,7 +606,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator!=()
*/
-/*! \fn bool QMap::operator!=(const QMap<Key, T> &other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::operator!=(const QMap<Key, T> &other) const
Returns \c true if \a other is not equal to this map; otherwise
returns \c false.
@@ -620,7 +620,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator==()
*/
-/*! \fn int QMap::size() const
+/*! \fn template <class Key, class T> int QMap<Key, T>::size() const
Returns the number of (key, value) pairs in the map.
@@ -628,7 +628,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn bool QMap::isEmpty() const
+ \fn template <class Key, class T> bool QMap<Key, T>::isEmpty() const
Returns \c true if the map contains no items; otherwise returns
false.
@@ -636,7 +636,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa size()
*/
-/*! \fn void QMap::detach()
+/*! \fn template <class Key, class T> void QMap<Key, T>::detach()
\internal
@@ -646,7 +646,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa isDetached()
*/
-/*! \fn bool QMap::isDetached() const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::isDetached() const
\internal
@@ -656,24 +656,24 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa detach()
*/
-/*! \fn void QMap::setSharable(bool sharable)
+/*! \fn template <class Key, class T> void QMap<Key, T>::setSharable(bool sharable)
\internal
*/
-/*! \fn bool QMap::isSharedWith(const QMap<Key, T> &other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::isSharedWith(const QMap<Key, T> &other) const
\internal
*/
-/*! \fn void QMap::clear()
+/*! \fn template <class Key, class T> void QMap<Key, T>::clear()
Removes all items from the map.
\sa remove()
*/
-/*! \fn int QMap::remove(const Key &key)
+/*! \fn template <class Key, class T> int QMap<Key, T>::remove(const Key &key)
Removes all the items that have the key \a key from the map.
Returns the number of items removed which is usually 1 but will be
@@ -683,7 +683,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa clear(), take(), QMultiMap::remove()
*/
-/*! \fn T QMap::take(const Key &key)
+/*! \fn template <class Key, class T> T QMap<Key, T>::take(const Key &key)
Removes the item with the key \a key from the map and returns
the value associated with it.
@@ -698,7 +698,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa remove()
*/
-/*! \fn bool QMap::contains(const Key &key) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::contains(const Key &key) const
Returns \c true if the map contains an item with key \a key;
otherwise returns \c false.
@@ -706,7 +706,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa count(), QMultiMap::contains()
*/
-/*! \fn const T QMap::value(const Key &key, const T &defaultValue) const
+/*! \fn template <class Key, class T> const T QMap<Key, T>::value(const Key &key, const T &defaultValue) const
Returns the value associated with the key \a key.
@@ -719,7 +719,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa key(), values(), contains(), operator[]()
*/
-/*! \fn T &QMap::operator[](const Key &key)
+/*! \fn template <class Key, class T> T &QMap<Key, T>::operator[](const Key &key)
Returns the value associated with the key \a key as a modifiable
reference.
@@ -733,14 +733,14 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa insert(), value()
*/
-/*! \fn const T QMap::operator[](const Key &key) const
+/*! \fn template <class Key, class T> const T QMap<Key, T>::operator[](const Key &key) const
\overload
Same as value().
*/
-/*! \fn QList<Key> QMap::uniqueKeys() const
+/*! \fn template <class Key, class T> QList<Key> QMap<Key, T>::uniqueKeys() const
\since 4.2
Returns a list containing all the keys in the map in ascending
@@ -751,7 +751,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keys(), values()
*/
-/*! \fn QList<Key> QMap::keys() const
+/*! \fn template <class Key, class T> QList<Key> QMap<Key, T>::keys() const
Returns a list containing all the keys in the map in ascending
order. Keys that occur multiple times in the map (because items
@@ -766,7 +766,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa uniqueKeys(), values(), key()
*/
-/*! \fn QList<Key> QMap::keys(const T &value) const
+/*! \fn template <class Key, class T> QList<Key> QMap<Key, T>::keys(const T &value) const
\overload
@@ -779,7 +779,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn Key QMap::key(const T &value, const Key &defaultKey) const
+ \fn template <class Key, class T> Key QMap<Key, T>::key(const T &value, const Key &defaultKey) const
\since 4.3
\overload
@@ -795,7 +795,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa value(), keys()
*/
-/*! \fn QList<T> QMap::values() const
+/*! \fn template <class Key, class T> QList<T> QMap<Key, T>::values() const
Returns a list containing all the values in the map, in ascending
order of their keys. If a key is associated with multiple values,
@@ -805,7 +805,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keys(), value()
*/
-/*! \fn QList<T> QMap::values(const Key &key) const
+/*! \fn template <class Key, class T> QList<T> QMap<Key, T>::values(const Key &key) const
\overload
@@ -816,21 +816,21 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa count(), insertMulti()
*/
-/*! \fn int QMap::count(const Key &key) const
+/*! \fn template <class Key, class T> int QMap<Key, T>::count(const Key &key) const
Returns the number of items associated with key \a key.
\sa contains(), insertMulti(), QMultiMap::count()
*/
-/*! \fn int QMap::count() const
+/*! \fn template <class Key, class T> int QMap<Key, T>::count() const
\overload
Same as size().
*/
-/*! \fn QMap::iterator QMap::begin()
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
the map.
@@ -838,12 +838,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa constBegin(), end()
*/
-/*! \fn QMap::const_iterator QMap::begin() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::begin() const
\overload
*/
-/*! \fn QMap::const_iterator QMap::cbegin() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -852,7 +852,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa begin(), cend()
*/
-/*! \fn QMap::const_iterator QMap::constBegin() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
in the map.
@@ -860,7 +860,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa begin(), constEnd()
*/
-/*! \fn QMap::key_iterator QMap::keyBegin() const
+/*! \fn template <class Key, class T> QMap<Key, T>::key_iterator QMap<Key, T>::keyBegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first key
@@ -869,7 +869,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keyEnd(), firstKey()
*/
-/*! \fn QMap::iterator QMap::end()
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
after the last item in the map.
@@ -877,12 +877,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa begin(), constEnd()
*/
-/*! \fn QMap::const_iterator QMap::end() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::end() const
\overload
*/
-/*! \fn QMap::const_iterator QMap::cend() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -891,7 +891,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa cbegin(), end()
*/
-/*! \fn QMap::const_iterator QMap::constEnd() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the map.
@@ -899,7 +899,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa constBegin(), end()
*/
-/*! \fn QMap::key_iterator QMap::keyEnd() const
+/*! \fn template <class Key, class T> QMap<Key, T>::key_iterator QMap<Key, T>::keyEnd() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -909,7 +909,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
-/*! \fn QMap::key_value_iterator QMap::keyValueBegin()
+/*! \fn template <class Key, class T> QMap<Key, T>::key_value_iterator QMap<Key, T>::keyValueBegin()
\since 5.10
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first entry
@@ -918,7 +918,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keyValueEnd()
*/
-/*! \fn QMap::key_value_iterator QMap::keyValueEnd()
+/*! \fn template <class Key, class T> QMap<Key, T>::key_value_iterator QMap<Key, T>::keyValueEnd()
\since 5.10
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -927,7 +927,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keyValueBegin()
*/
-/*! \fn QMap::const_key_value_iterator QMap::keyValueBegin() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_key_value_iterator QMap<Key, T>::keyValueBegin() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first entry
@@ -936,7 +936,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keyValueEnd()
*/
-/*! \fn QMap::const_key_value_iterator QMap::constKeyValueBegin() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_key_value_iterator QMap<Key, T>::constKeyValueBegin() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first entry
@@ -945,7 +945,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keyValueBegin()
*/
-/*! \fn QMap::const_key_value_iterator QMap::keyValueEnd() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_key_value_iterator QMap<Key, T>::keyValueEnd() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -954,7 +954,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa keyValueBegin()
*/
-/*! \fn QMap::const_key_value_iterator QMap::constKeyValueEnd() const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_key_value_iterator QMap<Key, T>::constKeyValueEnd() const
\since 5.10
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -963,7 +963,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa constKeyValueBegin()
*/
-/*! \fn const Key &QMap::firstKey() const
+/*! \fn template <class Key, class T> const Key &QMap<Key, T>::firstKey() const
\since 5.2
Returns a reference to the smallest key in the map.
@@ -974,7 +974,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa lastKey(), first(), keyBegin(), isEmpty()
*/
-/*! \fn const Key &QMap::lastKey() const
+/*! \fn template <class Key, class T> const Key &QMap<Key, T>::lastKey() const
\since 5.2
Returns a reference to the largest key in the map.
@@ -985,7 +985,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa firstKey(), last(), keyEnd(), isEmpty()
*/
-/*! \fn T &QMap::first()
+/*! \fn template <class Key, class T> T &QMap<Key, T>::first()
\since 5.2
Returns a reference to the first value in the map, that is the value mapped
@@ -996,13 +996,13 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa last(), firstKey(), isEmpty()
*/
-/*! \fn const T &QMap::first() const
+/*! \fn template <class Key, class T> const T &QMap<Key, T>::first() const
\since 5.2
\overload
*/
-/*! \fn T &QMap::last()
+/*! \fn template <class Key, class T> T &QMap<Key, T>::last()
\since 5.2
Returns a reference to the last value in the map, that is the value mapped
@@ -1013,13 +1013,13 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa first(), lastKey(), isEmpty()
*/
-/*! \fn const T &QMap::last() const
+/*! \fn template <class Key, class T> const T &QMap<Key, T>::last() const
\since 5.2
\overload
*/
-/*! \fn QMap::iterator QMap::erase(iterator pos)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::erase(iterator pos)
Removes the (key, value) pair pointed to by the iterator \a pos
from the map, and returns an iterator to the next item in the
@@ -1028,7 +1028,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa remove()
*/
-/*! \fn QMap::iterator QMap::find(const Key &key)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::find(const Key &key)
Returns an iterator pointing to the item with key \a key in the
map.
@@ -1047,12 +1047,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa constFind(), value(), values(), lowerBound(), upperBound(), QMultiMap::find()
*/
-/*! \fn QMap::const_iterator QMap::find(const Key &key) const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::find(const Key &key) const
\overload
*/
-/*! \fn QMap::const_iterator QMap::constFind(const Key &key) const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::constFind(const Key &key) const
\since 4.1
Returns an const iterator pointing to the item with key \a key in the
@@ -1064,7 +1064,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa find(), QMultiMap::constFind()
*/
-/*! \fn QMap::iterator QMap::lowerBound(const Key &key)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::lowerBound(const Key &key)
Returns an iterator pointing to the first item with key \a key in
the map. If the map contains no item with key \a key, the
@@ -1085,12 +1085,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa upperBound(), find()
*/
-/*! \fn QMap::const_iterator QMap::lowerBound(const Key &key) const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::lowerBound(const Key &key) const
\overload
*/
-/*! \fn QMap::iterator QMap::upperBound(const Key &key)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::upperBound(const Key &key)
Returns an iterator pointing to the item that immediately follows
the last item with key \a key in the map. If the map contains no
@@ -1103,12 +1103,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa lowerBound(), find()
*/
-/*! \fn QMap::const_iterator QMap::upperBound(const Key &key) const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::upperBound(const Key &key) const
\overload
*/
-/*! \fn QMap::iterator QMap::insert(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::insert(const Key &key, const T &value)
Inserts a new item with the key \a key and a value of \a value.
@@ -1121,7 +1121,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa insertMulti()
*/
-/*! \fn QMap::iterator QMap::insert(const_iterator pos, const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::insert(const_iterator pos, const Key &key, const T &value)
\overload
\since 5.1
Inserts a new item with the key \a key and value \a value and with hint \a pos
@@ -1150,7 +1150,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa insertMulti()
*/
-/*! \fn QMap::iterator QMap::insertMulti(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::insertMulti(const Key &key, const T &value)
Inserts a new item with the key \a key and a value of \a value.
@@ -1162,7 +1162,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa insert(), values()
*/
-/*! \fn QMap::iterator QMap::insertMulti(const_iterator pos, const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::insertMulti(const_iterator pos, const Key &key, const T &value)
\overload
\since 5.1
Inserts a new item with the key \a key and value \a value and with hint \a pos
@@ -1182,7 +1182,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
-/*! \fn QMap<Key, T> &QMap::unite(const QMap<Key, T> &other)
+/*! \fn template <class Key, class T> QMap<Key, T> &QMap<Key, T>::unite(const QMap<Key, T> &other)
Inserts all the items in the \a other map into this map. If a
key is common to both maps, the resulting map will contain the
@@ -1193,12 +1193,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
/*! \typedef QMap::Iterator
- Qt-style synonym for QMap::iterator.
+ Qt-style synonym for QMap<Key, T>::iterator.
*/
/*! \typedef QMap::ConstIterator
- Qt-style synonym for QMap::const_iterator.
+ Qt-style synonym for QMap<Key, T>::const_iterator.
*/
/*! \typedef QMap::difference_type
@@ -1222,7 +1222,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn bool QMap::empty() const
+ \fn template <class Key, class T> bool QMap<Key, T>::empty() const
This function is provided for STL compatibility. It is equivalent
to isEmpty(), returning true if the map is empty; otherwise
@@ -1230,14 +1230,14 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn QPair<iterator, iterator> QMap::equal_range(const Key &key)
+ \fn template <class Key, class T> QPair<typename QMap<Key, T>::iterator, typename QMap<Key, T>::iterator> QMap<Key, T>::equal_range(const Key &key)
Returns a pair of iterators delimiting the range of values \c{[first, second)}, that
are stored under \a key.
*/
/*!
- \fn QPair<const_iterator, const_iterator> QMap::equal_range(const Key &key) const
+ \fn template <class Key, class T> QPair<typename QMap<Key, T>::const_iterator, typename QMap<Key, T>::const_iterator> QMap<Key, T>::equal_range(const Key &key) const
\overload
\since 5.6
*/
@@ -1339,7 +1339,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\internal
*/
-/*! \fn QMap::iterator::iterator()
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator::iterator()
Constructs an uninitialized iterator.
@@ -1350,12 +1350,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa QMap::begin(), QMap::end()
*/
-/*! \fn QMap::iterator::iterator(Node *)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator::iterator(Node *)
\internal
*/
-/*! \fn const Key &QMap::iterator::key() const
+/*! \fn template <class Key, class T> const Key &QMap<Key, T>::iterator::key() const
Returns the current item's key as a const reference.
@@ -1366,7 +1366,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa value()
*/
-/*! \fn T &QMap::iterator::value() const
+/*! \fn template <class Key, class T> T &QMap<Key, T>::iterator::value() const
Returns a modifiable reference to the current item's value.
@@ -1378,7 +1378,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa key(), operator*()
*/
-/*! \fn T &QMap::iterator::operator*() const
+/*! \fn template <class Key, class T> T &QMap<Key, T>::iterator::operator*() const
Returns a modifiable reference to the current item's value.
@@ -1387,7 +1387,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa key()
*/
-/*! \fn T *QMap::iterator::operator->() const
+/*! \fn template <class Key, class T> T *QMap<Key, T>::iterator::operator->() const
Returns a pointer to the current item's value.
@@ -1395,8 +1395,8 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn bool QMap::iterator::operator==(const iterator &other) const
- \fn bool QMap::iterator::operator==(const const_iterator &other) const
+ \fn template <class Key, class T> bool QMap<Key, T>::iterator::operator==(const iterator &other) const
+ \fn template <class Key, class T> bool QMap<Key, T>::iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -1405,8 +1405,8 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn bool QMap::iterator::operator!=(const iterator &other) const
- \fn bool QMap::iterator::operator!=(const const_iterator &other) const
+ \fn template <class Key, class T> bool QMap<Key, T>::iterator::operator!=(const iterator &other) const
+ \fn template <class Key, class T> bool QMap<Key, T>::iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -1414,7 +1414,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator==()
*/
-/*! \fn QMap::iterator QMap::iterator::operator++()
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::iterator::operator++()
The prefix ++ operator (\c{++i}) advances the iterator to the
next item in the map and returns an iterator to the new current
@@ -1425,7 +1425,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator--()
*/
-/*! \fn QMap::iterator QMap::iterator::operator++(int)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::iterator::operator++(int)
\overload
@@ -1434,7 +1434,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
current item.
*/
-/*! \fn QMap::iterator QMap::iterator::operator--()
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::iterator::operator--()
The prefix -- operator (\c{--i}) makes the preceding item
current and returns an iterator pointing to the new current item.
@@ -1445,7 +1445,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator++()
*/
-/*! \fn QMap::iterator QMap::iterator::operator--(int)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::iterator::operator--(int)
\overload
@@ -1454,7 +1454,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
current item.
*/
-/*! \fn QMap::iterator QMap::iterator::operator+(int j) const
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -1465,7 +1465,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
-/*! \fn QMap::iterator QMap::iterator::operator-(int j) const
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator QMap<Key, T>::iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -1475,7 +1475,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator+()
*/
-/*! \fn QMap::iterator &QMap::iterator::operator+=(int j)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator &QMap<Key, T>::iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -1483,7 +1483,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator-=(), operator+()
*/
-/*! \fn QMap::iterator &QMap::iterator::operator-=(int j)
+/*! \fn template <class Key, class T> QMap<Key, T>::iterator &QMap<Key, T>::iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -1562,7 +1562,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\internal
*/
-/*! \fn QMap::const_iterator::const_iterator()
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -1573,31 +1573,31 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa QMap::constBegin(), QMap::constEnd()
*/
-/*! \fn QMap::const_iterator::const_iterator(const Node *)
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator::const_iterator(const Node *)
\internal
*/
-/*! \fn QMap::const_iterator::const_iterator(const iterator &other)
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator::const_iterator(const iterator &other)
Constructs a copy of \a other.
*/
-/*! \fn const Key &QMap::const_iterator::key() const
+/*! \fn template <class Key, class T> const Key &QMap<Key, T>::const_iterator::key() const
Returns the current item's key.
\sa value()
*/
-/*! \fn const T &QMap::const_iterator::value() const
+/*! \fn template <class Key, class T> const T &QMap<Key, T>::const_iterator::value() const
Returns the current item's value.
\sa key(), operator*()
*/
-/*! \fn const T &QMap::const_iterator::operator*() const
+/*! \fn template <class Key, class T> const T &QMap<Key, T>::const_iterator::operator*() const
Returns the current item's value.
@@ -1606,14 +1606,14 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa key()
*/
-/*! \fn const T *QMap::const_iterator::operator->() const
+/*! \fn template <class Key, class T> const T *QMap<Key, T>::const_iterator::operator->() const
Returns a pointer to the current item's value.
\sa value()
*/
-/*! \fn bool QMap::const_iterator::operator==(const const_iterator &other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -1621,7 +1621,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator!=()
*/
-/*! \fn bool QMap::const_iterator::operator!=(const const_iterator &other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -1629,7 +1629,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator==()
*/
-/*! \fn QMap::const_iterator QMap::const_iterator::operator++()
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::const_iterator::operator++()
The prefix ++ operator (\c{++i}) advances the iterator to the
next item in the map and returns an iterator to the new current
@@ -1640,7 +1640,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator--()
*/
-/*! \fn QMap::const_iterator QMap::const_iterator::operator++(int)
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::const_iterator::operator++(int)
\overload
@@ -1649,7 +1649,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
current item.
*/
-/*! \fn QMap::const_iterator &QMap::const_iterator::operator--()
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator &QMap<Key, T>::const_iterator::operator--()
The prefix -- operator (\c{--i}) makes the preceding item
current and returns an iterator pointing to the new current item.
@@ -1660,7 +1660,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator++()
*/
-/*! \fn QMap::const_iterator QMap::const_iterator::operator--(int)
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::const_iterator::operator--(int)
\overload
@@ -1669,7 +1669,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
current item.
*/
-/*! \fn QMap::const_iterator QMap::const_iterator::operator+(int j) const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::const_iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -1679,7 +1679,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator-()
*/
-/*! \fn QMap::const_iterator QMap::const_iterator::operator-(int j) const
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator QMap<Key, T>::const_iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -1689,7 +1689,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator+()
*/
-/*! \fn QMap::const_iterator &QMap::const_iterator::operator+=(int j)
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator &QMap<Key, T>::const_iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -1699,7 +1699,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator-=(), operator+()
*/
-/*! \fn QMap::const_iterator &QMap::const_iterator::operator-=(int j)
+/*! \fn template <class Key, class T> QMap<Key, T>::const_iterator &QMap<Key, T>::const_iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -1766,17 +1766,17 @@ void QMapDataBase::freeData(QMapDataBase *d)
\internal
*/
-/*! \fn const T &QMap::key_iterator::operator*() const
+/*! \fn template <class Key, class T> const T &QMap<Key, T>::key_iterator::operator*() const
Returns the current item's key.
*/
-/*! \fn const T *QMap::key_iterator::operator->() const
+/*! \fn template <class Key, class T> const T *QMap<Key, T>::key_iterator::operator->() const
Returns a pointer to the current item's key.
*/
-/*! \fn bool QMap::key_iterator::operator==(key_iterator other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::key_iterator::operator==(key_iterator other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -1784,7 +1784,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator!=()
*/
-/*! \fn bool QMap::key_iterator::operator!=(key_iterator other) const
+/*! \fn template <class Key, class T> bool QMap<Key, T>::key_iterator::operator!=(key_iterator other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -1793,7 +1793,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn QMap::key_iterator &QMap::key_iterator::operator++()
+ \fn template <class Key, class T> QMap<Key, T>::key_iterator &QMap<Key, T>::key_iterator::operator++()
The prefix ++ operator (\c{++i}) advances the iterator to the
next item in the hash and returns an iterator to the new current
@@ -1804,7 +1804,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator--()
*/
-/*! \fn QMap::key_iterator QMap::key_iterator::operator++(int)
+/*! \fn template <class Key, class T> QMap<Key, T>::key_iterator QMap<Key, T>::key_iterator::operator++(int)
\overload
@@ -1813,7 +1813,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
item.
*/
-/*! \fn QMap::key_iterator &QMap::key_iterator::operator--()
+/*! \fn template <class Key, class T> QMap<Key, T>::key_iterator &QMap<Key, T>::key_iterator::operator--()
The prefix -- operator (\c{--i}) makes the preceding item
current and returns an iterator pointing to the new current item.
@@ -1824,7 +1824,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator++()
*/
-/*! \fn QMap::key_iterator QMap::key_iterator::operator--(int)
+/*! \fn template <class Key, class T> QMap<Key, T>::key_iterator QMap<Key, T>::key_iterator::operator--(int)
\overload
@@ -1833,10 +1833,22 @@ void QMapDataBase::freeData(QMapDataBase *d)
item.
*/
-/*! \fn const_iterator QMap::key_iterator::base() const
+/*! \fn template <class Key, class T> const_iterator QMap<Key, T>::key_iterator::base() const
Returns the underlying const_iterator this key_iterator is based on.
*/
+/*! \typedef QMap::const_key_value_iterator
+ \inmodule QtCore
+ \since 5.10
+ \brief The QMap::const_key_value_iterator typedef provides an STL-style iterator for QMap and QMultiMap.
+
+ QMap::const_key_value_iterator is essentially the same as QMap::const_iterator
+ with the difference that operator*() returns a key/value pair instead of a
+ value.
+
+ \sa QKeyValueIterator
+*/
+
/*! \typedef QMap::key_value_iterator
\inmodule QtCore
\since 5.10
@@ -1849,7 +1861,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa QKeyValueIterator
*/
-/*! \fn QDataStream &operator<<(QDataStream &out, const QMap<Key, T> &map)
+/*! \fn template <class Key, class T> QDataStream &operator<<(QDataStream &out, const QMap<Key, T> &map)
\relates QMap
Writes the map \a map to stream \a out.
@@ -1860,7 +1872,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa{Serializing Qt Data Types}{Format of the QDataStream operators}
*/
-/*! \fn QDataStream &operator>>(QDataStream &in, QMap<Key, T> &map)
+/*! \fn template <class Key, class T> QDataStream &operator>>(QDataStream &in, QMap<Key, T> &map)
\relates QMap
Reads a map from stream \a in into \a map.
@@ -1926,12 +1938,12 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa QMap, QMapIterator, QMutableMapIterator, QMultiHash
*/
-/*! \fn QMultiMap::QMultiMap()
+/*! \fn template <class Key, class T> QMultiMap<Key, T>::QMultiMap()
Constructs an empty map.
*/
-/*! \fn QMultiMap::QMultiMap(std::initializer_list<std::pair<Key,T> > list)
+/*! \fn template <class Key, class T> QMultiMap<Key, T>::QMultiMap(std::initializer_list<std::pair<Key,T> > list)
\since 5.1
Constructs a multi-map with a copy of each of the elements in the
@@ -1941,7 +1953,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
compiled in C++11 mode.
*/
-/*! \fn QMultiMap::QMultiMap(const QMap<Key, T> &other)
+/*! \fn template <class Key, class T> QMultiMap<Key, T>::QMultiMap(const QMap<Key, T> &other)
Constructs a copy of \a other (which can be a QMap or a
QMultiMap).
@@ -1949,7 +1961,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa operator=()
*/
-/*! \fn QMultiMap::iterator QMultiMap::replace(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMultiMap<Key, T>::iterator QMultiMap<Key, T>::replace(const Key &key, const T &value)
Inserts a new item with the key \a key and a value of \a value.
@@ -1962,7 +1974,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa insert()
*/
-/*! \fn QMultiMap::iterator QMultiMap::insert(const Key &key, const T &value)
+/*! \fn template <class Key, class T> QMultiMap<Key, T>::iterator QMultiMap<Key, T>::insert(const Key &key, const T &value)
Inserts a new item with the key \a key and a value of \a value.
@@ -1974,7 +1986,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa replace()
*/
-/*! \fn QMultiMap::iterator QMultiMap::insert(QMap<Key, T>::const_iterator pos, const Key &key, const T &value)
+/*! \fn template <class Key, class T> typename QMap<Key, T>::iterator QMultiMap<Key, T>::insert(typename QMap<Key, T>::const_iterator pos, const Key &key, const T &value)
\since 5.1
Inserts a new item with the key \a key and value \a value and with hint \a pos
@@ -1991,7 +2003,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
crash but there is also a risk that it will silently corrupt both the map and the \a pos map.
*/
-/*! \fn QMultiMap &QMultiMap::operator+=(const QMultiMap &other)
+/*! \fn template <class Key, class T> QMultiMap &QMultiMap<Key, T>::operator+=(const QMultiMap &other)
Inserts all the items in the \a other map into this map and
returns a reference to this map.
@@ -1999,7 +2011,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa insert(), operator+()
*/
-/*! \fn QMultiMap QMultiMap::operator+(const QMultiMap &other) const
+/*! \fn template <class Key, class T> QMultiMap QMultiMap<Key, T>::operator+(const QMultiMap &other) const
Returns a map that contains all the items in this map in
addition to all the items in \a other. If a key is common to both
@@ -2009,7 +2021,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn bool QMultiMap::contains(const Key &key, const T &value) const
+ \fn template <class Key, class T> bool QMultiMap<Key, T>::contains(const Key &key, const T &value) const
\since 4.3
Returns \c true if the map contains an item with key \a key and
@@ -2019,7 +2031,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn int QMultiMap::remove(const Key &key, const T &value)
+ \fn template <class Key, class T> int QMultiMap<Key, T>::remove(const Key &key, const T &value)
\since 4.3
Removes all the items that have the key \a key and the value \a
@@ -2029,7 +2041,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn int QMultiMap::count(const Key &key, const T &value) const
+ \fn template <class Key, class T> int QMultiMap<Key, T>::count(const Key &key, const T &value) const
\since 4.3
Returns the number of items with key \a key and value \a value.
@@ -2038,7 +2050,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn typename QMap<Key, T>::iterator QMultiMap::find(const Key &key, const T &value)
+ \fn template <class Key, class T> typename QMap<Key, T>::iterator QMultiMap<Key, T>::find(const Key &key, const T &value)
\since 4.3
Returns an iterator pointing to the item with key \a key and
@@ -2054,7 +2066,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn typename QMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const
+ \fn template <class Key, class T> typename QMap<Key, T>::const_iterator QMultiMap<Key, T>::find(const Key &key, const T &value) const
\since 4.3
\overload
@@ -2071,7 +2083,7 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn typename QMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const
+ \fn template <class Key, class T> typename QMap<Key, T>::const_iterator QMultiMap<Key, T>::constFind(const Key &key, const T &value) const
\since 4.3
Returns an iterator pointing to the item with key \a key and the
diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h
index b400e69f0c..a5b9096835 100644
--- a/src/corelib/tools/qmap.h
+++ b/src/corelib/tools/qmap.h
@@ -150,7 +150,7 @@ template <class Key, class T>
inline QMapNode<Key, T> *QMapNode<Key, T>::lowerBound(const Key &akey)
{
QMapNode<Key, T> *n = this;
- QMapNode<Key, T> *lastNode = Q_NULLPTR;
+ QMapNode<Key, T> *lastNode = nullptr;
while (n) {
if (!qMapLessThanKey(n->key, akey)) {
lastNode = n;
@@ -166,7 +166,7 @@ template <class Key, class T>
inline QMapNode<Key, T> *QMapNode<Key, T>::upperBound(const Key &akey)
{
QMapNode<Key, T> *n = this;
- QMapNode<Key, T> *lastNode = Q_NULLPTR;
+ QMapNode<Key, T> *lastNode = nullptr;
while (n) {
if (qMapLessThanKey(akey, n->key)) {
lastNode = n;
@@ -220,7 +220,7 @@ struct QMapData : public QMapDataBase
Node *findNode(const Key &akey) const;
void nodeRange(const Key &akey, Node **firstNode, Node **lastNode);
- Node *createNode(const Key &k, const T &v, Node *parent = Q_NULLPTR, bool left = false)
+ Node *createNode(const Key &k, const T &v, Node *parent = nullptr, bool left = false)
{
Node *n = static_cast<Node *>(QMapDataBase::createNode(sizeof(Node), Q_ALIGNOF(Node),
parent, left));
@@ -261,13 +261,13 @@ QMapNode<Key, T> *QMapNode<Key, T>::copy(QMapData<Key, T> *d) const
n->left = leftNode()->copy(d);
n->left->setParent(n);
} else {
- n->left = Q_NULLPTR;
+ n->left = nullptr;
}
if (right) {
n->right = rightNode()->copy(d);
n->right->setParent(n);
} else {
- n->right = Q_NULLPTR;
+ n->right = nullptr;
}
return n;
}
@@ -288,7 +288,7 @@ QMapNode<Key, T> *QMapData<Key, T>::findNode(const Key &akey) const
if (lb && !qMapLessThanKey(akey, lb->key))
return lb;
}
- return Q_NULLPTR;
+ return nullptr;
}
@@ -304,10 +304,10 @@ void QMapData<Key, T>::nodeRange(const Key &akey, QMapNode<Key, T> **firstNode,
} else if (qMapLessThanKey(n->key, akey)) {
n = n->rightNode();
} else {
- *firstNode = n->leftNode() ? n->leftNode()->lowerBound(akey) : Q_NULLPTR;
+ *firstNode = n->leftNode() ? n->leftNode()->lowerBound(akey) : nullptr;
if (!*firstNode)
*firstNode = n;
- *lastNode = n->rightNode() ? n->rightNode()->upperBound(akey) : Q_NULLPTR;
+ *lastNode = n->rightNode() ? n->rightNode()->upperBound(akey) : nullptr;
if (!*lastNode)
*lastNode = l;
return;
@@ -416,7 +416,7 @@ public:
typedef T *pointer;
typedef T &reference;
- inline iterator() : i(Q_NULLPTR) { }
+ inline iterator() : i(nullptr) { }
inline iterator(Node *node) : i(node) { }
inline const Key &key() const { return i->key; }
@@ -473,7 +473,7 @@ public:
typedef const T *pointer;
typedef const T &reference;
- Q_DECL_CONSTEXPR inline const_iterator() : i(Q_NULLPTR) { }
+ Q_DECL_CONSTEXPR inline const_iterator() : i(nullptr) { }
inline const_iterator(const Node *node) : i(node) { }
#ifdef QT_STRICT_ITERATORS
explicit inline const_iterator(const iterator &o)
@@ -695,7 +695,7 @@ Q_INLINE_TEMPLATE int QMap<Key, T>::count(const Key &akey) const
template <class Key, class T>
Q_INLINE_TEMPLATE bool QMap<Key, T>::contains(const Key &akey) const
{
- return d->findNode(akey) != Q_NULLPTR;
+ return d->findNode(akey) != nullptr;
}
template <class Key, class T>
@@ -704,7 +704,7 @@ Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::insert(const Key
detach();
Node *n = d->root();
Node *y = d->end();
- Node *lastNode = Q_NULLPTR;
+ Node *lastNode = nullptr;
bool left = true;
while (n) {
y = n;
@@ -779,15 +779,15 @@ typename QMap<Key, T>::iterator QMap<Key, T>::insert(const_iterator pos, const K
}
// we need to insert (not overwrite)
- if (prev->right == Q_NULLPTR) {
+ if (prev->right == nullptr) {
Node *z = d->createNode(akey, avalue, prev, false);
return iterator(z);
}
- if (next->left == Q_NULLPTR) {
+ if (next->left == nullptr) {
Node *z = d->createNode(akey, avalue, next, true);
return iterator(z);
}
- Q_ASSERT(false); // We should have prev->right == Q_NULLPTR or next->left == Q_NULLPTR.
+ Q_ASSERT(false); // We should have prev->right == nullptr or next->left == nullptr.
return this->insert(akey, avalue);
}
}
@@ -801,7 +801,7 @@ Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::insertMulti(cons
Node* y = d->end();
Node* x = static_cast<Node *>(d->root());
bool left = true;
- while (x != Q_NULLPTR) {
+ while (x != nullptr) {
left = !qMapLessThanKey(x->key, akey);
y = x;
x = left ? x->leftNode() : x->rightNode();
@@ -848,15 +848,15 @@ typename QMap<Key, T>::iterator QMap<Key, T>::insertMulti(const_iterator pos, co
return this->insertMulti(akey, avalue); // ignore hint
// Hint is ok - do insert
- if (prev->right == Q_NULLPTR) {
+ if (prev->right == nullptr) {
Node *z = d->createNode(akey, avalue, prev, false);
return iterator(z);
}
- if (next->left == Q_NULLPTR) {
+ if (next->left == nullptr) {
Node *z = d->createNode(akey, avalue, next, true);
return iterator(z);
}
- Q_ASSERT(false); // We should have prev->right == Q_NULLPTR or next->left == Q_NULLPTR.
+ Q_ASSERT(false); // We should have prev->right == nullptr or next->left == nullptr.
return this->insertMulti(akey, avalue);
}
}
@@ -1102,7 +1102,7 @@ Q_OUTOFLINE_TEMPLATE QList<T> QMap<Key, T>::values(const Key &akey) const
template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::const_iterator QMap<Key, T>::lowerBound(const Key &akey) const
{
- Node *lb = d->root() ? d->root()->lowerBound(akey) : Q_NULLPTR;
+ Node *lb = d->root() ? d->root()->lowerBound(akey) : nullptr;
if (!lb)
lb = d->end();
return const_iterator(lb);
@@ -1112,7 +1112,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::lowerBound(const Key &akey)
{
detach();
- Node *lb = d->root() ? d->root()->lowerBound(akey) : Q_NULLPTR;
+ Node *lb = d->root() ? d->root()->lowerBound(akey) : nullptr;
if (!lb)
lb = d->end();
return iterator(lb);
@@ -1122,7 +1122,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::const_iterator
QMap<Key, T>::upperBound(const Key &akey) const
{
- Node *ub = d->root() ? d->root()->upperBound(akey) : Q_NULLPTR;
+ Node *ub = d->root() ? d->root()->upperBound(akey) : nullptr;
if (!ub)
ub = d->end();
return const_iterator(ub);
@@ -1132,7 +1132,7 @@ template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::iterator QMap<Key, T>::upperBound(const Key &akey)
{
detach();
- Node *ub = d->root() ? d->root()->upperBound(akey) : Q_NULLPTR;
+ Node *ub = d->root() ? d->root()->upperBound(akey) : nullptr;
if (!ub)
ub = d->end();
return iterator(ub);
diff --git a/src/corelib/tools/qpair.qdoc b/src/corelib/tools/qpair.qdoc
index 9b9b1783ac..59e6931995 100644
--- a/src/corelib/tools/qpair.qdoc
+++ b/src/corelib/tools/qpair.qdoc
@@ -93,14 +93,14 @@
The second element in the pair.
*/
-/*! \fn QPair::QPair()
+/*! \fn template <class T1, class T2> QPair<T1, T2>::QPair()
Constructs an empty pair. The \c first and \c second elements are
initialized with \l{default-constructed value}s.
*/
/*!
- \fn QPair::QPair(const T1 &value1, const T2 &value2)
+ \fn template <class T1, class T2> QPair<T1, T2>::QPair(const T1 &value1, const T2 &value2)
Constructs a pair and initializes the \c first element with \a
value1 and the \c second element with \a value2.
@@ -109,7 +109,7 @@
*/
/*!
-\fn void QPair::swap(QPair &other)
+\fn template <class T1, class T2> void QPair<T1, T2>::swap(QPair &other)
\since 5.5
Swaps this pair with \a other.
@@ -125,7 +125,7 @@
*/
/*!
-\fn void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)
+\fn template <class T1, class T2> void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)
\overload
\relates QPair
\since 5.5
@@ -134,7 +134,7 @@
*/
/*!
- \fn QPair::QPair(const QPair<TT1, TT2> &p)
+ \fn template <class T1, class T2> template <typename TT1, typename TT2> QPair<T1, T2>::QPair(const QPair<TT1, TT2> &p)
\since 5.2
Constructs a pair from the other pair \a p, of types TT1 and TT2. This
@@ -145,14 +145,14 @@
*/
/*!
- \fn QPair::QPair(QPair<TT1, TT2> &&p)
+ \fn template <class T1, class T2> template <typename TT1, typename TT2> QPair<T1, T2>::QPair(QPair<TT1, TT2> &&p)
\since 5.2
Move-constructs a QPair instance, making it point to the same object that \a p was pointing to.
*/
/*!
- \fn QPair & QPair::operator=(const QPair<TT1, TT2> &p)
+ \fn template <class T1, class T2> template <typename TT1, typename TT2> QPair & QPair<T1, T2>::operator=(const QPair<TT1, TT2> &p)
\since 5.2
Copies pair \a p into this pair.
@@ -161,13 +161,13 @@
*/
/*!
- \fn QPair & QPair::operator=(QPair<TT1, TT2> &&p)
+ \fn template <class T1, class T2> template <typename TT1, typename TT2> QPair & QPair<T1, T2>::operator=(QPair<TT1, TT2> &&p)
\since 5.2
Move-assigns pair \a p into this pair instance.
*/
-/*! \fn bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+/*! \fn template <class T1, class T2> bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
@@ -179,7 +179,7 @@
implementation of \c operator==().
*/
-/*! \fn bool operator!=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+/*! \fn template <class T1, class T2> bool operator!=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
@@ -192,7 +192,7 @@
implementation of \c operator==().
*/
-/*! \fn bool operator<(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+/*! \fn template <class T1, class T2> bool operator<(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
@@ -205,7 +205,7 @@
implementation of \c operator<().
*/
-/*! \fn bool operator>(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+/*! \fn template <class T1, class T2> bool operator>(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
@@ -218,7 +218,7 @@
implementation of \c operator<().
*/
-/*! \fn bool operator<=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+/*! \fn template <class T1, class T2> bool operator<=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
@@ -231,7 +231,7 @@
implementation of \c operator<().
*/
-/*! \fn bool operator>=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+/*! \fn template <class T1, class T2> bool operator>=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
@@ -245,7 +245,7 @@
*/
/*!
- \fn QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2)
+ \fn template <class T1, class T2> QPair<T1, T2> qMakePair(const T1 &value1, const T2 &value2)
\relates QPair
@@ -258,7 +258,7 @@
usually requires less typing.
*/
-/*! \fn QDataStream &operator>>(QDataStream &in, QPair<T1, T2> &pair)
+/*! \fn template <class T1, class T2> QDataStream &operator>>(QDataStream &in, QPair<T1, T2> &pair)
\relates QPair
@@ -269,7 +269,7 @@
\sa {Serializing Qt Data Types}
*/
-/*! \fn QDataStream &operator<<(QDataStream &out, const QPair<T1, T2> &pair)
+/*! \fn template <class T1, class T2> QDataStream &operator<<(QDataStream &out, const QPair<T1, T2> &pair)
\relates QPair
diff --git a/src/corelib/tools/qqueue.cpp b/src/corelib/tools/qqueue.cpp
index 4b22903c1a..ffc48d6714 100644
--- a/src/corelib/tools/qqueue.cpp
+++ b/src/corelib/tools/qqueue.cpp
@@ -77,7 +77,7 @@
*/
/*!
- \fn void QQueue::swap(QQueue<T> &other)
+ \fn template <class T> void QQueue<T>::swap(QQueue<T> &other)
\since 4.8
Swaps queue \a other with this queue. This operation is very
@@ -85,7 +85,7 @@
*/
/*!
- \fn void QQueue::enqueue(const T& t)
+ \fn template <class T> void QQueue<T>::enqueue(const T& t)
Adds value \a t to the tail of the queue.
@@ -95,7 +95,7 @@
*/
/*!
- \fn T &QQueue::head()
+ \fn template <class T> T &QQueue<T>::head()
Returns a reference to the queue's head item. This function
assumes that the queue isn't empty.
@@ -106,13 +106,13 @@
*/
/*!
- \fn const T &QQueue::head() const
+ \fn template <class T> const T &QQueue<T>::head() const
\overload
*/
/*!
- \fn T QQueue::dequeue()
+ \fn template <class T> T QQueue<T>::dequeue()
Removes the head item in the queue and returns it. This function
assumes that the queue isn't empty.
diff --git a/src/corelib/tools/qringbuffer.cpp b/src/corelib/tools/qringbuffer.cpp
index 8fa378e935..eb7bdfe95c 100644
--- a/src/corelib/tools/qringbuffer.cpp
+++ b/src/corelib/tools/qringbuffer.cpp
@@ -44,6 +44,46 @@
QT_BEGIN_NAMESPACE
+void QRingChunk::allocate(int alloc)
+{
+ Q_ASSERT(alloc > 0 && size() == 0);
+
+ if (chunk.size() < alloc || isShared())
+ chunk = QByteArray(alloc, Qt::Uninitialized);
+}
+
+void QRingChunk::detach()
+{
+ Q_ASSERT(isShared());
+
+ const int chunkSize = size();
+ QByteArray x(chunkSize, Qt::Uninitialized);
+ ::memcpy(x.data(), chunk.constData() + headOffset, chunkSize);
+ chunk = qMove(x);
+ headOffset = 0;
+ tailOffset = chunkSize;
+}
+
+QByteArray QRingChunk::toByteArray()
+{
+ if (headOffset != 0 || tailOffset != chunk.size()) {
+ if (isShared())
+ return chunk.mid(headOffset, size());
+
+ if (headOffset != 0) {
+ char *ptr = chunk.data();
+ ::memmove(ptr, ptr + headOffset, size());
+ tailOffset -= headOffset;
+ headOffset = 0;
+ }
+
+ chunk.reserve(0); // avoid that resizing needlessly reallocates
+ chunk.resize(tailOffset);
+ }
+
+ return chunk;
+}
+
/*!
\internal
@@ -53,16 +93,15 @@ QT_BEGIN_NAMESPACE
*/
const char *QRingBuffer::readPointerAtPosition(qint64 pos, qint64 &length) const
{
- if (pos >= 0) {
- pos += head;
- for (int i = 0; i < buffers.size(); ++i) {
- length = (i == tailBuffer ? tail : buffers[i].size());
- if (length > pos) {
- length -= pos;
- return buffers[i].constData() + pos;
- }
- pos -= length;
+ Q_ASSERT(pos >= 0);
+
+ for (const QRingChunk &chunk : buffers) {
+ length = chunk.size();
+ if (length > pos) {
+ length -= pos;
+ return chunk.data() + pos;
}
+ pos -= length;
}
length = 0;
@@ -74,66 +113,57 @@ void QRingBuffer::free(qint64 bytes)
Q_ASSERT(bytes <= bufferSize);
while (bytes > 0) {
- const qint64 blockSize = buffers.constFirst().size() - head;
+ const qint64 chunkSize = buffers.constFirst().size();
- if (tailBuffer == 0 || blockSize > bytes) {
+ if (buffers.size() == 1 || chunkSize > bytes) {
+ QRingChunk &chunk = buffers.first();
// keep a single block around if it does not exceed
// the basic block size, to avoid repeated allocations
// between uses of the buffer
- if (bufferSize <= bytes) {
- if (buffers.constFirst().size() <= basicBlockSize) {
+ if (bufferSize == bytes) {
+ if (chunk.capacity() <= basicBlockSize && !chunk.isShared()) {
+ chunk.reset();
bufferSize = 0;
- head = tail = 0;
} else {
clear(); // try to minify/squeeze us
}
} else {
Q_ASSERT(bytes < MaxByteArraySize);
- head += int(bytes);
+ chunk.advance(bytes);
bufferSize -= bytes;
}
return;
}
- bufferSize -= blockSize;
- bytes -= blockSize;
+ bufferSize -= chunkSize;
+ bytes -= chunkSize;
buffers.removeFirst();
- --tailBuffer;
- head = 0;
}
}
char *QRingBuffer::reserve(qint64 bytes)
{
- if (bytes <= 0 || bytes >= MaxByteArraySize)
- return 0;
+ Q_ASSERT(bytes > 0 && bytes < MaxByteArraySize);
+ const int chunkSize = qMax(basicBlockSize, int(bytes));
+ int tail = 0;
if (bufferSize == 0) {
if (buffers.isEmpty())
- buffers.append(QByteArray(qMax(basicBlockSize, int(bytes)), Qt::Uninitialized));
+ buffers.append(QRingChunk(chunkSize));
else
- buffers.first().resize(qMax(basicBlockSize, int(bytes)));
+ buffers.first().allocate(chunkSize);
} else {
- const qint64 newSize = bytes + tail;
+ const QRingChunk &chunk = buffers.constLast();
// if need a new buffer
- if (basicBlockSize == 0 || (newSize > buffers.constLast().capacity()
- && (tail >= basicBlockSize || newSize >= MaxByteArraySize))) {
- // shrink this buffer to its current size
- buffers.last().resize(tail);
-
- // create a new QByteArray
- buffers.append(QByteArray(qMax(basicBlockSize, int(bytes)), Qt::Uninitialized));
- ++tailBuffer;
- tail = 0;
- } else if (newSize > buffers.constLast().size()) {
- buffers.last().resize(qMax(basicBlockSize, int(newSize)));
- }
+ if (basicBlockSize == 0 || chunk.isShared() || bytes > chunk.available())
+ buffers.append(QRingChunk(chunkSize));
+ else
+ tail = chunk.size();
}
- char *writePtr = buffers.last().data() + tail;
+ buffers.last().grow(bytes);
bufferSize += bytes;
- tail += int(bytes);
- return writePtr;
+ return buffers.last().data() + tail;
}
/*!
@@ -143,32 +173,30 @@ char *QRingBuffer::reserve(qint64 bytes)
*/
char *QRingBuffer::reserveFront(qint64 bytes)
{
- if (bytes <= 0 || bytes >= MaxByteArraySize)
- return 0;
-
- if (head < bytes || basicBlockSize == 0) {
- if (head > 0) {
- buffers.first().remove(0, head);
- if (tailBuffer == 0)
- tail -= head;
- }
+ Q_ASSERT(bytes > 0 && bytes < MaxByteArraySize);
- head = qMax(basicBlockSize, int(bytes));
- if (bufferSize == 0) {
- if (buffers.isEmpty())
- buffers.prepend(QByteArray(head, Qt::Uninitialized));
- else
- buffers.first().resize(head);
- tail = head;
+ const int chunkSize = qMax(basicBlockSize, int(bytes));
+ if (bufferSize == 0) {
+ if (buffers.isEmpty())
+ buffers.prepend(QRingChunk(chunkSize));
+ else
+ buffers.first().allocate(chunkSize);
+ buffers.first().grow(chunkSize);
+ buffers.first().advance(chunkSize - bytes);
+ } else {
+ const QRingChunk &chunk = buffers.constFirst();
+ // if need a new buffer
+ if (basicBlockSize == 0 || chunk.isShared() || bytes > chunk.head()) {
+ buffers.prepend(QRingChunk(chunkSize));
+ buffers.first().grow(chunkSize);
+ buffers.first().advance(chunkSize - bytes);
} else {
- buffers.prepend(QByteArray(head, Qt::Uninitialized));
- ++tailBuffer;
+ buffers.first().advance(-bytes);
}
}
- head -= int(bytes);
bufferSize += bytes;
- return buffers.first().data() + head;
+ return buffers.first().data();
}
void QRingBuffer::chop(qint64 bytes)
@@ -176,30 +204,31 @@ void QRingBuffer::chop(qint64 bytes)
Q_ASSERT(bytes <= bufferSize);
while (bytes > 0) {
- if (tailBuffer == 0 || tail > bytes) {
+ const qint64 chunkSize = buffers.constLast().size();
+
+ if (buffers.size() == 1 || chunkSize > bytes) {
+ QRingChunk &chunk = buffers.last();
// keep a single block around if it does not exceed
// the basic block size, to avoid repeated allocations
// between uses of the buffer
- if (bufferSize <= bytes) {
- if (buffers.constFirst().size() <= basicBlockSize) {
+ if (bufferSize == bytes) {
+ if (chunk.capacity() <= basicBlockSize && !chunk.isShared()) {
+ chunk.reset();
bufferSize = 0;
- head = tail = 0;
} else {
clear(); // try to minify/squeeze us
}
} else {
Q_ASSERT(bytes < MaxByteArraySize);
- tail -= int(bytes);
+ chunk.grow(-bytes);
bufferSize -= bytes;
}
return;
}
- bufferSize -= tail;
- bytes -= tail;
+ bufferSize -= chunkSize;
+ bytes -= chunkSize;
buffers.removeLast();
- --tailBuffer;
- tail = buffers.constLast().size();
}
}
@@ -210,24 +239,22 @@ void QRingBuffer::clear()
buffers.erase(buffers.begin() + 1, buffers.end());
buffers.first().clear();
-
- head = tail = 0;
- tailBuffer = 0;
bufferSize = 0;
}
qint64 QRingBuffer::indexOf(char c, qint64 maxLength, qint64 pos) const
{
- if (maxLength <= 0 || pos < 0)
+ Q_ASSERT(maxLength >= 0 && pos >= 0);
+
+ if (maxLength == 0)
return -1;
- qint64 index = -(pos + head);
- for (int i = 0; i < buffers.size(); ++i) {
- const qint64 nextBlockIndex = qMin(index + (i == tailBuffer ? tail : buffers[i].size()),
- maxLength);
+ qint64 index = -pos;
+ for (const QRingChunk &chunk : buffers) {
+ const qint64 nextBlockIndex = qMin(index + chunk.size(), maxLength);
if (nextBlockIndex > 0) {
- const char *ptr = buffers[i].constData();
+ const char *ptr = chunk.data();
if (index < 0) {
ptr -= index;
index = 0;
@@ -271,19 +298,8 @@ QByteArray QRingBuffer::read()
if (bufferSize == 0)
return QByteArray();
- QByteArray qba(buffers.takeFirst());
-
- qba.reserve(0); // avoid that resizing needlessly reallocates
- if (tailBuffer == 0) {
- qba.resize(tail);
- tail = 0;
- } else {
- --tailBuffer;
- }
- qba.remove(0, head); // does nothing if head is 0
- head = 0;
- bufferSize -= qba.size();
- return qba;
+ bufferSize -= buffers.constFirst().size();
+ return buffers.takeFirst().toByteArray();
}
/*!
@@ -293,21 +309,19 @@ QByteArray QRingBuffer::read()
*/
qint64 QRingBuffer::peek(char *data, qint64 maxLength, qint64 pos) const
{
- qint64 readSoFar = 0;
+ Q_ASSERT(maxLength >= 0 && pos >= 0);
- if (pos >= 0) {
- pos += head;
- for (int i = 0; readSoFar < maxLength && i < buffers.size(); ++i) {
- qint64 blockLength = (i == tailBuffer ? tail : buffers[i].size());
-
- if (pos < blockLength) {
- blockLength = qMin(blockLength - pos, maxLength - readSoFar);
- memcpy(data + readSoFar, buffers[i].constData() + pos, blockLength);
- readSoFar += blockLength;
- pos = 0;
- } else {
- pos -= blockLength;
- }
+ qint64 readSoFar = 0;
+ for (int i = 0; readSoFar < maxLength && i < buffers.size(); ++i) {
+ qint64 blockLength = buffers[i].size();
+
+ if (pos < blockLength) {
+ blockLength = qMin(blockLength - pos, maxLength - readSoFar);
+ memcpy(data + readSoFar, buffers[i].data() + pos, blockLength);
+ readSoFar += blockLength;
+ pos = 0;
+ } else {
+ pos -= blockLength;
}
}
@@ -321,10 +335,15 @@ qint64 QRingBuffer::peek(char *data, qint64 maxLength, qint64 pos) const
*/
void QRingBuffer::append(const char *data, qint64 size)
{
+ Q_ASSERT(size >= 0);
+
+ if (size == 0)
+ return;
+
char *writePointer = reserve(size);
if (size == 1)
*writePointer = *data;
- else if (size)
+ else
::memcpy(writePointer, data, size);
}
@@ -335,25 +354,18 @@ void QRingBuffer::append(const char *data, qint64 size)
*/
void QRingBuffer::append(const QByteArray &qba)
{
- if (tail == 0) {
- if (buffers.isEmpty())
- buffers.append(qba);
- else
- buffers.last() = qba;
- } else {
- buffers.last().resize(tail);
- buffers.append(qba);
- ++tailBuffer;
- }
- tail = qba.size();
- bufferSize += tail;
+ if (bufferSize != 0 || buffers.isEmpty())
+ buffers.append(QRingChunk(qba));
+ else
+ buffers.last().assign(qba);
+ bufferSize += qba.size();
}
qint64 QRingBuffer::readLine(char *data, qint64 maxLength)
{
- if (!data || --maxLength <= 0)
- return -1;
+ Q_ASSERT(data != nullptr && maxLength > 1);
+ --maxLength;
qint64 i = indexOf('\n', maxLength);
i = read(data, i >= 0 ? (i + 1) : maxLength);
diff --git a/src/corelib/tools/qringbuffer_p.h b/src/corelib/tools/qringbuffer_p.h
index 558a456515..76ab4a5b62 100644
--- a/src/corelib/tools/qringbuffer_p.h
+++ b/src/corelib/tools/qringbuffer_p.h
@@ -53,7 +53,7 @@
#include <QtCore/private/qglobal_p.h>
#include <QtCore/qbytearray.h>
-#include <QtCore/qlist.h>
+#include <QtCore/qvector.h>
QT_BEGIN_NAMESPACE
@@ -61,11 +61,129 @@ QT_BEGIN_NAMESPACE
#define QRINGBUFFER_CHUNKSIZE 4096
#endif
+class QRingChunk
+{
+public:
+ // initialization and cleanup
+ inline QRingChunk() Q_DECL_NOTHROW :
+ headOffset(0), tailOffset(0)
+ {
+ }
+ inline QRingChunk(const QRingChunk &other) Q_DECL_NOTHROW :
+ chunk(other.chunk), headOffset(other.headOffset), tailOffset(other.tailOffset)
+ {
+ }
+ explicit inline QRingChunk(int alloc) :
+ chunk(alloc, Qt::Uninitialized), headOffset(0), tailOffset(0)
+ {
+ }
+ explicit inline QRingChunk(const QByteArray &qba) Q_DECL_NOTHROW :
+ chunk(qba), headOffset(0), tailOffset(qba.size())
+ {
+ }
+
+ inline QRingChunk &operator=(const QRingChunk &other) Q_DECL_NOTHROW
+ {
+ chunk = other.chunk;
+ headOffset = other.headOffset;
+ tailOffset = other.tailOffset;
+ return *this;
+ }
+ inline QRingChunk(QRingChunk &&other) Q_DECL_NOTHROW :
+ chunk(other.chunk), headOffset(other.headOffset), tailOffset(other.tailOffset)
+ {
+ other.headOffset = other.tailOffset = 0;
+ }
+ inline QRingChunk &operator=(QRingChunk &&other) Q_DECL_NOTHROW
+ {
+ swap(other);
+ return *this;
+ }
+
+ inline void swap(QRingChunk &other) Q_DECL_NOTHROW
+ {
+ chunk.swap(other.chunk);
+ qSwap(headOffset, other.headOffset);
+ qSwap(tailOffset, other.tailOffset);
+ }
+
+ // allocating and sharing
+ void allocate(int alloc);
+ inline bool isShared() const
+ {
+ return !chunk.isDetached();
+ }
+ Q_CORE_EXPORT void detach();
+ QByteArray toByteArray();
+
+ // getters
+ inline int head() const
+ {
+ return headOffset;
+ }
+ inline int size() const
+ {
+ return tailOffset - headOffset;
+ }
+ inline int capacity() const
+ {
+ return chunk.size();
+ }
+ inline int available() const
+ {
+ return chunk.size() - tailOffset;
+ }
+ inline const char *data() const
+ {
+ return chunk.constData() + headOffset;
+ }
+ inline char *data()
+ {
+ if (isShared())
+ detach();
+ return chunk.data() + headOffset;
+ }
+
+ // array management
+ inline void advance(int offset)
+ {
+ Q_ASSERT(headOffset + offset >= 0);
+ Q_ASSERT(size() - offset > 0);
+
+ headOffset += offset;
+ }
+ inline void grow(int offset)
+ {
+ Q_ASSERT(size() + offset > 0);
+ Q_ASSERT(head() + size() + offset <= capacity());
+
+ tailOffset += offset;
+ }
+ inline void assign(const QByteArray &qba)
+ {
+ chunk = qba;
+ headOffset = 0;
+ tailOffset = qba.size();
+ }
+ inline void reset()
+ {
+ headOffset = tailOffset = 0;
+ }
+ inline void clear()
+ {
+ assign(QByteArray());
+ }
+
+private:
+ QByteArray chunk;
+ int headOffset, tailOffset;
+};
+
class QRingBuffer
{
public:
explicit inline QRingBuffer(int growth = QRINGBUFFER_CHUNKSIZE) :
- head(0), tail(0), tailBuffer(0), basicBlockSize(growth), bufferSize(0) { }
+ bufferSize(0), basicBlockSize(growth) { }
inline void setChunkSize(int size) {
basicBlockSize = size;
@@ -76,11 +194,11 @@ public:
}
inline qint64 nextDataBlockSize() const {
- return (tailBuffer == 0 ? tail : buffers.first().size()) - head;
+ return bufferSize == 0 ? Q_INT64_C(0) : buffers.first().size();
}
inline const char *readPointer() const {
- return bufferSize == 0 ? Q_NULLPTR : (buffers.first().constData() + head);
+ return bufferSize == 0 ? nullptr : buffers.first().data();
}
Q_CORE_EXPORT const char *readPointerAtPosition(qint64 pos, qint64 &length) const;
@@ -89,8 +207,9 @@ public:
Q_CORE_EXPORT char *reserveFront(qint64 bytes);
inline void truncate(qint64 pos) {
- if (pos < size())
- chop(size() - pos);
+ Q_ASSERT(pos >= 0 && pos <= size());
+
+ chop(size() - pos);
}
Q_CORE_EXPORT void chop(qint64 bytes);
@@ -114,14 +233,8 @@ public:
void ungetChar(char c)
{
- if (head > 0) {
- --head;
- buffers.first()[head] = c;
- ++bufferSize;
- } else {
- char *ptr = reserveFront(1);
- *ptr = c;
- }
+ char *ptr = reserveFront(1);
+ *ptr = c;
}
@@ -152,13 +265,12 @@ public:
}
private:
- QList<QByteArray> buffers;
- int head, tail;
- int tailBuffer; // always buffers.size() - 1
- int basicBlockSize;
+ QVector<QRingChunk> buffers;
qint64 bufferSize;
+ int basicBlockSize;
};
+Q_DECLARE_SHARED(QRingChunk)
Q_DECLARE_TYPEINFO(QRingBuffer, Q_MOVABLE_TYPE);
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp
index 8d84b3beca..6c24e19bfa 100644
--- a/src/corelib/tools/qscopedpointer.cpp
+++ b/src/corelib/tools/qscopedpointer.cpp
@@ -126,27 +126,34 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QScopedPointer::QScopedPointer(T *p = 0)
+ \fn template <typename T, typename Cleanup> QScopedPointer<T, Cleanup>::QScopedPointer(T *p = 0)
Constructs this QScopedPointer instance and sets its pointer to \a p.
*/
/*!
- \fn QScopedPointer::~QScopedPointer()
+ \fn template <typename T, typename Cleanup> QScopedPointer<T, Cleanup>::~QScopedPointer()
Destroys this QScopedPointer object. Delete the object its pointer points
to.
*/
/*!
- \fn T *QScopedPointer::data() const
+ \fn template <typename T, typename Cleanup> T *QScopedPointer<T, Cleanup>::data() const
Returns the value of the pointer referenced by this object. QScopedPointer
still owns the object pointed to.
*/
/*!
- \fn T &QScopedPointer::operator*() const
+ \fn template <typename T, typename Cleanup> T *QScopedPointer<T, Cleanup>::get() const
+ \since 5.11
+
+ Same as data().
+*/
+
+/*!
+ \fn template <typename T, typename Cleanup> T &QScopedPointer<T, Cleanup>::operator*() const
Provides access to the scoped pointer's object.
@@ -155,7 +162,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn T *QScopedPointer::operator->() const
+ \fn template <typename T, typename Cleanup> T *QScopedPointer<T, Cleanup>::operator->() const
Provides access to the scoped pointer's object.
@@ -165,7 +172,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QScopedPointer::operator bool() const
+ \fn template <typename T, typename Cleanup> QScopedPointer<T, Cleanup>::operator bool() const
Returns \c true if this object is not \c null. This function is suitable
for use in \tt if-constructs, like:
@@ -176,7 +183,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool operator==(const QScopedPointer<T, Cleanup> &lhs, const QScopedPointer<T, Cleanup> &rhs)
+ \fn template <typename T, typename Cleanup> bool operator==(const QScopedPointer<T, Cleanup> &lhs, const QScopedPointer<T, Cleanup> &rhs)
Equality operator. Returns \c true if the scoped pointers
\a lhs and \a rhs are pointing to the same object.
@@ -185,7 +192,7 @@ QT_BEGIN_NAMESPACE
/*!
- \fn bool operator!=(const QScopedPointer<T, Cleanup> &lhs, const QScopedPointer<T, Cleanup> &rhs)
+ \fn template <typename T, typename Cleanup> bool operator!=(const QScopedPointer<T, Cleanup> &lhs, const QScopedPointer<T, Cleanup> &rhs)
Inequality operator. Returns \c true if the scoped pointers
\a lhs and \a rhs are \e not pointing to the same object.
@@ -193,7 +200,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool operator==(const QScopedPointer<T, Cleanup> &lhs, std::nullptr_t)
+ \fn template <typename T, typename Cleanup> bool operator==(const QScopedPointer<T, Cleanup> &lhs, std::nullptr_t)
\relates QScopedPointer
\since 5.8
@@ -203,7 +210,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool operator==(std::nullptr_t, const QScopedPointer<T, Cleanup> &rhs)
+ \fn template <typename T, typename Cleanup> bool operator==(std::nullptr_t, const QScopedPointer<T, Cleanup> &rhs)
\relates QScopedPointer
\since 5.8
@@ -213,7 +220,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool operator!=(const QScopedPointer<T, Cleanup> &lhs, std::nullptr_t)
+ \fn template <typename T, typename Cleanup> bool operator!=(const QScopedPointer<T, Cleanup> &lhs, std::nullptr_t)
\relates QScopedPointer
\since 5.8
@@ -224,7 +231,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool operator!=(std::nullptr_t, const QScopedPointer<T, Cleanup> &rhs)
+ \fn template <typename T, typename Cleanup> bool operator!=(std::nullptr_t, const QScopedPointer<T, Cleanup> &rhs)
\relates QScopedPointer
\since 5.8
@@ -235,13 +242,13 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool QScopedPointer::isNull() const
+ \fn template <typename T, typename Cleanup> bool QScopedPointer<T, Cleanup>::isNull() const
Returns \c true if this object is holding a pointer that is \c null.
*/
/*!
- \fn void QScopedPointer::reset(T *other = 0)
+ \fn template <typename T, typename Cleanup> void QScopedPointer<T, Cleanup>::reset(T *other = 0)
Deletes the existing object it is pointing to if any, and sets its pointer to
\a other. QScopedPointer now owns \a other and will delete it in its
@@ -249,7 +256,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn T *QScopedPointer::take()
+ \fn template <typename T, typename Cleanup> T *QScopedPointer<T, Cleanup>::take()
Returns the value of the pointer referenced by this object. The pointer of this
QScopedPointer object will be reset to \c null.
@@ -257,7 +264,7 @@ QT_BEGIN_NAMESPACE
Callers of this function take ownership of the pointer.
*/
-/*! \fn bool QScopedPointer::operator!() const
+/*! \fn template <typename T, typename Cleanup> bool QScopedPointer<T, Cleanup>::operator!() const
Returns \c true if the pointer referenced by this object is \c null, otherwise
returns \c false.
@@ -265,7 +272,7 @@ QT_BEGIN_NAMESPACE
\sa isNull()
*/
-/*! \fn void QScopedPointer::swap(QScopedPointer<T, Cleanup> &other)
+/*! \fn template <typename T, typename Cleanup> void QScopedPointer<T, Cleanup>::swap(QScopedPointer<T, Cleanup> &other)
Swap this pointer with \a other.
*/
@@ -297,20 +304,20 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QScopedArrayPointer::QScopedArrayPointer()
+ \fn template <typename T, typename Cleanup> QScopedArrayPointer<T, Cleanup>::QScopedArrayPointer()
Constructs a QScopedArrayPointer instance.
*/
/*!
- \fn QScopedArrayPointer::QScopedArrayPointer(D * p)
+ \fn template <typename T, typename Cleanup> template <typename D> QScopedArrayPointer<T, Cleanup>::QScopedArrayPointer(D * p)
Constructs a QScopedArrayPointer and stores the array of objects
pointed to by \a p.
*/
/*!
- \fn T *QScopedArrayPointer::operator[](int i)
+ \fn template <typename T, typename Cleanup> T *QScopedArrayPointer<T, Cleanup>::operator[](int i)
Provides access to entry \a i of the scoped pointer's array of
objects.
@@ -321,7 +328,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn T *QScopedArrayPointer::operator[](int i) const
+ \fn template <typename T, typename Cleanup> T *QScopedArrayPointer<T, Cleanup>::operator[](int i) const
Provides access to entry \a i of the scoped pointer's array of
objects.
@@ -331,4 +338,8 @@ QT_BEGIN_NAMESPACE
\sa isNull()
*/
+/*! \fn template <typename T, typename Cleanup> void QScopedArrayPointer<T, Cleanup>::swap(QScopedArrayPointer<T, Cleanup> &other)
+ Swap this pointer with \a other.
+ */
+
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h
index 141a3f8c70..2a4083466b 100644
--- a/src/corelib/tools/qscopedpointer.h
+++ b/src/corelib/tools/qscopedpointer.h
@@ -97,7 +97,7 @@ class QScopedPointer
{
typedef T *QScopedPointer:: *RestrictedBool;
public:
- explicit QScopedPointer(T *p = Q_NULLPTR) Q_DECL_NOTHROW : d(p)
+ explicit QScopedPointer(T *p = nullptr) Q_DECL_NOTHROW : d(p)
{
}
@@ -126,12 +126,12 @@ public:
#if defined(Q_QDOC)
inline operator bool() const
{
- return isNull() ? Q_NULLPTR : &QScopedPointer::d;
+ return isNull() ? nullptr : &QScopedPointer::d;
}
#else
operator RestrictedBool() const Q_DECL_NOTHROW
{
- return isNull() ? Q_NULLPTR : &QScopedPointer::d;
+ return isNull() ? nullptr : &QScopedPointer::d;
}
#endif
@@ -140,12 +140,17 @@ public:
return d;
}
+ T *get() const Q_DECL_NOTHROW
+ {
+ return d;
+ }
+
bool isNull() const Q_DECL_NOTHROW
{
return !d;
}
- void reset(T *other = Q_NULLPTR) Q_DECL_NOEXCEPT_EXPR(noexcept(Cleanup::cleanup(std::declval<T *>())))
+ void reset(T *other = nullptr) Q_DECL_NOEXCEPT_EXPR(noexcept(Cleanup::cleanup(std::declval<T *>())))
{
if (d == other)
return;
@@ -157,7 +162,7 @@ public:
T *take() Q_DECL_NOTHROW
{
T *oldD = d;
- d = Q_NULLPTR;
+ d = nullptr;
return oldD;
}
@@ -221,7 +226,7 @@ class QScopedArrayPointer : public QScopedPointer<T, Cleanup>
template <typename Ptr>
using if_same_type = typename std::enable_if<std::is_same<typename std::remove_cv<T>::type, Ptr>::value, bool>::type;
public:
- inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(Q_NULLPTR) {}
+ inline QScopedArrayPointer() : QScopedPointer<T, Cleanup>(nullptr) {}
template <typename D, if_same_type<D> = true>
explicit QScopedArrayPointer(D *p)
diff --git a/src/corelib/tools/qscopedvaluerollback.cpp b/src/corelib/tools/qscopedvaluerollback.cpp
index 0a819859e8..baca7c8229 100644
--- a/src/corelib/tools/qscopedvaluerollback.cpp
+++ b/src/corelib/tools/qscopedvaluerollback.cpp
@@ -62,13 +62,13 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QScopedValueRollback::QScopedValueRollback(T &var)
+ \fn template <typename T> QScopedValueRollback<T>::QScopedValueRollback(T &var)
Stores the previous value of \a var internally, for revert on destruction.
*/
/*!
- \fn QScopedValueRollback::QScopedValueRollback(T &var, T value)
+ \fn template <typename T> QScopedValueRollback<T>::QScopedValueRollback(T &var, T value)
Assigns \a value to \ var and stores the previous value of \a var
internally, for revert on destruction.
@@ -77,14 +77,14 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QScopedValueRollback::~QScopedValueRollback()
+ \fn template <typename T> QScopedValueRollback<T>::~QScopedValueRollback()
Assigns the previous value to the managed variable.
This is the value at construction time, or at the last call to commit()
*/
/*!
- \fn void QScopedValueRollback::commit()
+ \fn template <typename T> void QScopedValueRollback<T>::commit()
Updates the previous value of the managed variable to its current value.
*/
diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc
index 93f157fdc5..48863f2399 100644
--- a/src/corelib/tools/qset.qdoc
+++ b/src/corelib/tools/qset.qdoc
@@ -96,14 +96,14 @@
*/
/*!
- \fn QSet::QSet()
+ \fn template <class T> QSet<T>::QSet()
Constructs an empty set.
\sa clear()
*/
-/*! \fn QSet::QSet(std::initializer_list<T> list)
+/*! \fn template <class T> QSet<T>::QSet(std::initializer_list<T> list)
\since 5.1
Constructs a set with a copy of each of the elements in the
@@ -114,14 +114,14 @@
*/
/*!
- \fn void QSet::swap(QSet<T> &other)
+ \fn template <class T> void QSet<T>::swap(QSet<T> &other)
Swaps set \a other with this set. This operation is very fast and
never fails.
*/
/*!
- \fn bool QSet::operator==(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::operator==(const QSet<T> &other) const
Returns \c true if the \a other set is equal to this set; otherwise
returns \c false.
@@ -134,7 +134,7 @@
*/
/*!
- \fn bool QSet::operator!=(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::operator!=(const QSet<T> &other) const
Returns \c true if the \a other set is not equal to this set; otherwise
returns \c false.
@@ -147,7 +147,7 @@
*/
/*!
- \fn int QSet::size() const
+ \fn template <class T> int QSet<T>::size() const
Returns the number of items in the set.
@@ -155,7 +155,7 @@
*/
/*!
- \fn bool QSet::isEmpty() const
+ \fn template <class T> bool QSet<T>::isEmpty() const
Returns \c true if the set contains no elements; otherwise returns
false.
@@ -164,7 +164,7 @@
*/
/*!
- \fn int QSet::capacity() const
+ \fn template <class T> int QSet<T>::capacity() const
Returns the number of buckets in the set's internal hash
table.
@@ -177,7 +177,7 @@
\sa reserve(), squeeze()
*/
-/*! \fn void QSet::reserve(int size)
+/*! \fn template <class T> void QSet<T>::reserve(int size)
Ensures that the set's internal hash table consists of at
least \a size buckets.
@@ -201,7 +201,7 @@
*/
/*!
- \fn void QSet::squeeze()
+ \fn template <class T> void QSet<T>::squeeze()
Reduces the size of the set's internal hash table to save
memory.
@@ -214,7 +214,7 @@
*/
/*!
- \fn void QSet::detach()
+ \fn template <class T> void QSet<T>::detach()
\internal
@@ -224,7 +224,7 @@
\sa isDetached()
*/
-/*! \fn bool QSet::isDetached() const
+/*! \fn template <class T> bool QSet<T>::isDetached() const
\internal
@@ -235,12 +235,12 @@
*/
/*!
- \fn void QSet::setSharable(bool sharable)
+ \fn template <class T> void QSet<T>::setSharable(bool sharable)
\internal
*/
/*!
- \fn void QSet::clear()
+ \fn template <class T> void QSet<T>::clear()
Removes all elements from the set.
@@ -248,7 +248,7 @@
*/
/*!
- \fn bool QSet::remove(const T &value)
+ \fn template <class T> bool QSet<T>::remove(const T &value)
Removes any occurrence of item \a value from the set. Returns
true if an item was actually removed; otherwise returns \c false.
@@ -257,7 +257,7 @@
*/
/*!
- \fn QSet::iterator QSet::erase(const_iterator pos)
+ \fn template <class T> QSet<T>::iterator QSet<T>::erase(const_iterator pos)
\since 5.7
Removes the item at the iterator position \a pos from the set, and
@@ -271,12 +271,12 @@
*/
/*!
- \fn QSet::iterator QSet::erase(iterator pos)
+ \fn template <class T> QSet<T>::iterator QSet<T>::erase(iterator pos)
\since 4.2
\overload
*/
-/*! \fn QSet::const_iterator QSet::find(const T &value) const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::find(const T &value) const
\since 4.2
Returns a const iterator positioned at the item \a value in the
@@ -286,7 +286,7 @@
\sa constFind(), contains()
*/
-/*! \fn QSet::iterator QSet::find(const T &value)
+/*! \fn template <class T> QSet<T>::iterator QSet<T>::find(const T &value)
\since 4.2
\overload
@@ -295,7 +295,7 @@
returns end().
*/
-/*! \fn QSet::const_iterator QSet::constFind(const T &value) const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::constFind(const T &value) const
\since 4.2
Returns a const iterator positioned at the item \a value in the
@@ -306,7 +306,7 @@
*/
/*!
- \fn bool QSet::contains(const T &value) const
+ \fn template <class T> bool QSet<T>::contains(const T &value) const
Returns \c true if the set contains item \a value; otherwise returns
false.
@@ -315,7 +315,7 @@
*/
/*!
- \fn bool QSet::contains(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::contains(const QSet<T> &other) const
\since 4.6
Returns \c true if the set contains all items from the \a other set;
@@ -324,7 +324,7 @@
\sa insert(), remove(), find()
*/
-/*! \fn QSet::const_iterator QSet::begin() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::begin() const
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the first
item in the set.
@@ -332,7 +332,7 @@
\sa constBegin(), end()
*/
-/*! \fn QSet::iterator QSet::begin()
+/*! \fn template <class T> QSet<T>::iterator QSet<T>::begin()
\since 4.2
\overload
@@ -340,7 +340,7 @@
item in the set.
*/
-/*! \fn QSet::const_iterator QSet::cbegin() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the first
@@ -349,7 +349,7 @@
\sa begin(), cend()
*/
-/*! \fn QSet::const_iterator QSet::constBegin() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the first
item in the set.
@@ -357,7 +357,7 @@
\sa begin(), constEnd()
*/
-/*! \fn QSet::const_iterator QSet::end() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::end() const
Returns a const \l{STL-style iterators}{STL-style iterator} positioned at the imaginary
item after the last item in the set.
@@ -365,7 +365,7 @@
\sa constEnd(), begin()
*/
-/*! \fn QSet::iterator QSet::end()
+/*! \fn template <class T> QSet<T>::iterator QSet<T>::end()
\since 4.2
\overload
@@ -373,7 +373,7 @@
imaginary item after the last item in the set.
*/
-/*! \fn QSet::const_iterator QSet::cend() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -382,7 +382,7 @@
\sa cbegin(), end()
*/
-/*! \fn QSet::const_iterator QSet::constEnd() const
+/*! \fn template <class T> QSet<T>::const_iterator QSet<T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the set.
@@ -390,7 +390,7 @@
\sa constBegin(), end()
*/
-/*! \fn QSet::reverse_iterator QSet::rbegin()
+/*! \fn template <class T> QSet<T>::reverse_iterator QSet<T>::rbegin()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -399,12 +399,12 @@
\sa begin(), crbegin(), rend()
*/
-/*! \fn QSet::const_reverse_iterator QSet::rbegin() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::rbegin() const
\since 5.6
\overload
*/
-/*! \fn QSet::const_reverse_iterator QSet::crbegin() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::crbegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -413,7 +413,7 @@
\sa begin(), rbegin(), rend()
*/
-/*! \fn QSet::reverse_iterator QSet::rend()
+/*! \fn template <class T> QSet<T>::reverse_iterator QSet<T>::rend()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
@@ -422,12 +422,12 @@
\sa end(), crend(), rbegin()
*/
-/*! \fn QSet::const_reverse_iterator QSet::rend() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::rend() const
\since 5.6
\overload
*/
-/*! \fn QSet::const_reverse_iterator QSet::crend() const
+/*! \fn template <class T> QSet<T>::const_reverse_iterator QSet<T>::crend() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
@@ -530,7 +530,7 @@
*/
/*!
- \fn QSet::insert(const T &value)
+ \fn template <class T> QSet<T>::insert(const T &value)
Inserts item \a value into the set, if \a value isn't already
in the set, and returns an iterator pointing at the inserted
@@ -540,7 +540,7 @@
*/
/*!
- \fn QSet<T> &QSet::unite(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::unite(const QSet<T> &other)
Each item in the \a other set that isn't already in this set is
inserted into this set. A reference to this set is returned.
@@ -549,7 +549,7 @@
*/
/*!
- \fn QSet<T> &QSet::intersect(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::intersect(const QSet<T> &other)
Removes all items from this set that are not contained in the
\a other set. A reference to this set is returned.
@@ -558,7 +558,7 @@
*/
/*!
- \fn bool QSet::intersects(const QSet<T> &other) const
+ \fn template <class T> bool QSet<T>::intersects(const QSet<T> &other) const
\since 5.6
Returns \c true if this set has at least one item in common with
@@ -568,7 +568,7 @@
*/
/*!
- \fn QSet<T> &QSet::subtract(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::subtract(const QSet<T> &other)
Removes all items from this set that are contained in the
\a other set. Returns a reference to this set.
@@ -577,22 +577,22 @@
*/
/*!
- \fn bool QSet::empty() const
+ \fn template <class T> bool QSet<T>::empty() const
Returns \c true if the set is empty. This function is provided
for STL compatibility. It is equivalent to isEmpty().
*/
/*!
- \fn bool QSet::count() const
+ \fn template <class T> bool QSet<T>::count() const
Same as size().
*/
/*!
- \fn QSet<T> &QSet::operator<<(const T &value)
- \fn QSet<T> &QSet::operator+=(const T &value)
- \fn QSet<T> &QSet::operator|=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator<<(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator+=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator|=(const T &value)
Inserts a new item \a value and returns a reference to the set.
If \a value already exists in the set, the set is left unchanged.
@@ -601,7 +601,7 @@
*/
/*!
- \fn QSet<T> &QSet::operator-=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator-=(const T &value)
Removes the occurrence of item \a value from the set, if
it is found, and returns a reference to the set. If the
@@ -611,8 +611,8 @@
*/
/*!
- \fn QSet<T> &QSet::operator|=(const QSet<T> &other)
- \fn QSet<T> &QSet::operator+=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator|=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator+=(const QSet<T> &other)
Same as unite(\a other).
@@ -620,7 +620,7 @@
*/
/*!
- \fn QSet<T> &QSet::operator&=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator&=(const QSet<T> &other)
Same as intersect(\a other).
@@ -628,7 +628,7 @@
*/
/*!
- \fn QSet<T> &QSet::operator&=(const T &value)
+ \fn template <class T> QSet<T> &QSet<T>::operator&=(const T &value)
\overload
@@ -638,7 +638,7 @@
/*!
- \fn QSet<T> &QSet::operator-=(const QSet<T> &other)
+ \fn template <class T> QSet<T> &QSet<T>::operator-=(const QSet<T> &other)
Same as subtract(\a{other}).
@@ -646,8 +646,8 @@
*/
/*!
- \fn QSet<T> QSet::operator|(const QSet<T> &other) const
- \fn QSet<T> QSet::operator+(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator|(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator+(const QSet<T> &other) const
Returns a new QSet that is the union of this set and the
\a other set.
@@ -656,7 +656,7 @@
*/
/*!
- \fn QSet<T> QSet::operator&(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator&(const QSet<T> &other) const
Returns a new QSet that is the intersection of this set and the
\a other set.
@@ -665,7 +665,7 @@
*/
/*!
- \fn QSet<T> QSet::operator-(const QSet<T> &other) const
+ \fn template <class T> QSet<T> QSet<T>::operator-(const QSet<T> &other) const
Returns a new QSet that is the set difference of this set and
the \a other set, i.e., this set - \a other set.
@@ -766,8 +766,8 @@
*/
/*!
- \fn QSet::iterator::iterator()
- \fn QSet::const_iterator::const_iterator()
+ \fn template <class T> QSet<T>::iterator::iterator()
+ \fn template <class T> QSet<T>::const_iterator::const_iterator()
Constructs an uninitialized iterator.
@@ -779,8 +779,8 @@
*/
/*!
- \fn QSet::iterator::iterator(typename Hash::iterator i)
- \fn QSet::const_iterator::const_iterator(typename Hash::const_iterator i)
+ \fn template <class T> QSet<T>::iterator::iterator(typename Hash::iterator i)
+ \fn template <class T> QSet<T>::const_iterator::const_iterator(typename Hash::const_iterator i)
\internal
*/
@@ -822,14 +822,14 @@
*/
/*!
- \fn QSet::iterator::iterator(const iterator &other)
- \fn QSet::const_iterator::const_iterator(const const_iterator &other)
+ \fn template <class T> QSet<T>::iterator::iterator(const iterator &other)
+ \fn template <class T> QSet<T>::const_iterator::const_iterator(const const_iterator &other)
Constructs a copy of \a other.
*/
/*!
- \fn QSet::const_iterator::const_iterator(const iterator &other)
+ \fn template <class T> QSet<T>::const_iterator::const_iterator(const iterator &other)
\since 4.2
\overload
@@ -837,15 +837,15 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator=(const iterator &other)
- \fn QSet::const_iterator &QSet::const_iterator::operator=(const const_iterator &other)
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator=(const iterator &other)
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator=(const const_iterator &other)
Assigns \a other to this iterator.
*/
/*!
- \fn const T &QSet::iterator::operator*() const
- \fn const T &QSet::const_iterator::operator*() const
+ \fn template <class T> const T &QSet<T>::iterator::operator*() const
+ \fn template <class T> const T &QSet<T>::const_iterator::operator*() const
Returns a reference to the current item.
@@ -853,8 +853,8 @@
*/
/*!
- \fn const T *QSet::iterator::operator->() const
- \fn const T *QSet::const_iterator::operator->() const
+ \fn template <class T> const T *QSet<T>::iterator::operator->() const
+ \fn template <class T> const T *QSet<T>::const_iterator::operator->() const
Returns a pointer to the current item.
@@ -862,8 +862,8 @@
*/
/*!
- \fn bool QSet::iterator::operator==(const iterator &other) const
- \fn bool QSet::const_iterator::operator==(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator==(const iterator &other) const
+ \fn template <class T> bool QSet<T>::const_iterator::operator==(const const_iterator &other) const
Returns \c true if \a other points to the same item as this
iterator; otherwise returns \c false.
@@ -872,15 +872,15 @@
*/
/*!
- \fn bool QSet::iterator::operator==(const const_iterator &other) const
- \fn bool QSet::iterator::operator!=(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator==(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator!=(const const_iterator &other) const
\overload
*/
/*!
- \fn bool QSet::iterator::operator!=(const iterator &other) const
- \fn bool QSet::const_iterator::operator!=(const const_iterator &other) const
+ \fn template <class T> bool QSet<T>::iterator::operator!=(const iterator &other) const
+ \fn template <class T> bool QSet<T>::const_iterator::operator!=(const const_iterator &other) const
Returns \c true if \a other points to a different item than this
iterator; otherwise returns \c false.
@@ -889,22 +889,22 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator++()
- \fn QSet::const_iterator &QSet::const_iterator::operator++()
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator++()
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator++()
The prefix ++ operator (\c{++it}) advances the iterator to the
next item in the set and returns an iterator to the new current
item.
- Calling this function on QSet::constEnd() leads to
+ Calling this function on QSet<T>::constEnd() leads to
undefined results.
\sa operator--()
*/
/*!
- \fn QSet::iterator QSet::iterator::operator++(int)
- \fn QSet::const_iterator QSet::const_iterator::operator++(int)
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator++(int)
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator++(int)
\overload
@@ -914,8 +914,8 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator--()
- \fn QSet::const_iterator &QSet::const_iterator::operator--()
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator--()
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator--()
The prefix -- operator (\c{--it}) makes the preceding item
current and returns an iterator to the new current item.
@@ -927,8 +927,8 @@
*/
/*!
- \fn QSet::iterator QSet::iterator::operator--(int)
- \fn QSet::const_iterator QSet::const_iterator::operator--(int)
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator--(int)
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator--(int)
\overload
@@ -937,8 +937,8 @@
*/
/*!
- \fn QSet::iterator QSet::iterator::operator+(int j) const
- \fn QSet::const_iterator QSet::const_iterator::operator+(int j) const
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator+(int j) const
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator+(int j) const
Returns an iterator to the item at \a j positions forward from
this iterator. (If \a j is negative, the iterator goes backward.)
@@ -949,8 +949,8 @@
*/
/*!
- \fn QSet::iterator QSet::iterator::operator-(int j) const
- \fn QSet::const_iterator QSet::const_iterator::operator-(int j) const
+ \fn template <class T> QSet<T>::iterator QSet<T>::iterator::operator-(int j) const
+ \fn template <class T> QSet<T>::const_iterator QSet<T>::const_iterator::operator-(int j) const
Returns an iterator to the item at \a j positions backward from
this iterator. (If \a j is negative, the iterator goes forward.)
@@ -961,8 +961,8 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator+=(int j)
- \fn QSet::const_iterator &QSet::const_iterator::operator+=(int j)
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator+=(int j)
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator+=(int j)
Advances the iterator by \a j items. (If \a j is negative, the
iterator goes backward.)
@@ -973,8 +973,8 @@
*/
/*!
- \fn QSet::iterator &QSet::iterator::operator-=(int j)
- \fn QSet::const_iterator &QSet::const_iterator::operator-=(int j)
+ \fn template <class T> QSet<T>::iterator &QSet<T>::iterator::operator-=(int j)
+ \fn template <class T> QSet<T>::const_iterator &QSet<T>::const_iterator::operator-=(int j)
Makes the iterator go back by \a j items. (If \a j is negative,
the iterator goes forward.)
@@ -984,7 +984,7 @@
\sa operator+=(), operator-()
*/
-/*! \fn QList<T> QSet<T>::toList() const
+/*! \fn template <class T> QList<T> QSet<T>::toList() const
Returns a new QList containing the elements in the set. The
order of the elements in the QList is undefined.
@@ -996,7 +996,7 @@
\sa fromList(), QList::fromSet()
*/
-/*! \fn QList<T> QSet<T>::values() const
+/*! \fn template <class T> QList<T> QSet<T>::values() const
Returns a new QList containing the elements in the set. The
order of the elements in the QList is undefined.
@@ -1007,7 +1007,7 @@
*/
-/*! \fn QSet<T> QSet<T>::fromList(const QList<T> &list)
+/*! \fn template <class T> QSet<T> QSet<T>::fromList(const QList<T> &list)
Returns a new QSet object containing the data contained in \a
list. Since QSet doesn't allow duplicates, the resulting QSet
@@ -1022,7 +1022,7 @@
*/
/*!
- \fn QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
+ \fn template <class T> QDataStream &operator<<(QDataStream &out, const QSet<T> &set)
\relates QSet
Writes the \a set to stream \a out.
@@ -1033,7 +1033,7 @@
*/
/*!
- \fn QDataStream &operator>>(QDataStream &in, QSet<T> &set)
+ \fn template <class T> QDataStream &operator>>(QDataStream &in, QSet<T> &set)
\relates QSet
Reads a set from stream \a in into \a set.
@@ -1044,7 +1044,7 @@
*/
/*!
- \fn uint qHash(const QSet<T> &key, uint seed = 0)
+ \fn template <class T> uint qHash(const QSet<T> &key, uint seed = 0)
\relates QHash
\since 5.5
diff --git a/src/corelib/tools/qshareddata.cpp b/src/corelib/tools/qshareddata.cpp
index 14bc70734d..f95d75c4a8 100644
--- a/src/corelib/tools/qshareddata.cpp
+++ b/src/corelib/tools/qshareddata.cpp
@@ -59,9 +59,9 @@ QT_BEGIN_NAMESPACE
Constructs a QSharedData object with a reference count of 0.
*/
-/*! \fn QSharedData::QSharedData(const QSharedData& other)
+/*! \fn QSharedData::QSharedData(const QSharedData& )
Constructs a QSharedData object with reference count 0.
- \a other is ignored.
+ The parameter is ignored.
*/
/*!
@@ -248,86 +248,86 @@ QT_BEGIN_NAMESPACE
\internal
*/
-/*! \fn T& QSharedDataPointer::operator*()
+/*! \fn template <class T> T& QSharedDataPointer<T>::operator*()
Provides access to the shared data object's members.
This function calls detach().
*/
-/*! \fn const T& QSharedDataPointer::operator*() const
+/*! \fn template <class T> const T& QSharedDataPointer<T>::operator*() const
Provides const access to the shared data object's members.
This function does \e not call detach().
*/
-/*! \fn T* QSharedDataPointer::operator->()
+/*! \fn template <class T> T* QSharedDataPointer<T>::operator->()
Provides access to the shared data object's members.
This function calls detach().
*/
-/*! \fn const T* QSharedDataPointer::operator->() const
+/*! \fn template <class T> const T* QSharedDataPointer<T>::operator->() const
Provides const access to the shared data object's members.
This function does \e not call detach().
*/
-/*! \fn QSharedDataPointer::operator T*()
+/*! \fn template <class T> QSharedDataPointer<T>::operator T*()
Returns a pointer to the shared data object.
This function calls detach().
\sa data(), constData()
*/
-/*! \fn QSharedDataPointer::operator const T*() const
+/*! \fn template <class T> QSharedDataPointer<T>::operator const T*() const
Returns a pointer to the shared data object.
This function does \e not call detach().
*/
-/*! \fn T* QSharedDataPointer::data()
+/*! \fn template <class T> T* QSharedDataPointer<T>::data()
Returns a pointer to the shared data object.
This function calls detach().
\sa constData()
*/
-/*! \fn const T* QSharedDataPointer::data() const
+/*! \fn template <class T> const T* QSharedDataPointer<T>::data() const
Returns a pointer to the shared data object.
This function does \e not call detach().
*/
-/*! \fn const T* QSharedDataPointer::constData() const
+/*! \fn template <class T> const T* QSharedDataPointer<T>::constData() const
Returns a const pointer to the shared data object.
This function does \e not call detach().
\sa data()
*/
-/*! \fn void QSharedDataPointer::swap(QSharedDataPointer &other)
+/*! \fn template <class T> void QSharedDataPointer<T>::swap(QSharedDataPointer &other)
Swap this instance's shared data pointer with the shared
data pointer in \a other.
*/
/*!
- \fn QSharedDataPointer<T> &QSharedDataPointer::operator=(QSharedDataPointer<T> &&other)
+ \fn template <class T> QSharedDataPointer<T> &QSharedDataPointer<T>::operator=(QSharedDataPointer<T> &&other)
Move-assigns \a other to this QSharedDataPointer instance.
\since 5.2
*/
-/*! \fn bool QSharedDataPointer::operator==(const QSharedDataPointer<T>& other) const
+/*! \fn template <class T> bool QSharedDataPointer<T>::operator==(const QSharedDataPointer<T>& other) const
Returns \c true if \a other and \e this have the same \e{d pointer}.
This function does \e not call detach().
*/
-/*! \fn bool QSharedDataPointer::operator!=(const QSharedDataPointer<T>& other) const
+/*! \fn template <class T> bool QSharedDataPointer<T>::operator!=(const QSharedDataPointer<T>& other) const
Returns \c true if \a other and \e this do \e not have the same
\e{d pointer}. This function does \e not call detach().
*/
-/*! \fn QSharedDataPointer::QSharedDataPointer()
+/*! \fn template <class T> QSharedDataPointer<T>::QSharedDataPointer()
Constructs a QSharedDataPointer initialized with a null \e{d pointer}.
*/
/*!
- \fn QSharedDataPointer::QSharedDataPointer(QSharedDataPointer &&o)
+ \fn template <class T> QSharedDataPointer<T>::QSharedDataPointer(QSharedDataPointer &&o)
Move-constructs a QSharedDataPointer instance, making it point at the same
object that \a o was pointing to.
@@ -335,45 +335,45 @@ QT_BEGIN_NAMESPACE
\since 5.2
*/
-/*! \fn QSharedDataPointer::~QSharedDataPointer()
+/*! \fn template <class T> QSharedDataPointer<T>::~QSharedDataPointer()
Decrements the reference count of the shared data object.
If the reference count becomes 0, the shared data object
is deleted. \e This is then destroyed.
*/
-/*! \fn QSharedDataPointer::QSharedDataPointer(T* sharedData)
+/*! \fn template <class T> QSharedDataPointer<T>::QSharedDataPointer(T* data)
Constructs a QSharedDataPointer with \e{d pointer} set to
- \a sharedData and increments \a{sharedData}'s reference count.
+ \a data and increments \a{data}'s reference count.
*/
-/*! \fn QSharedDataPointer::QSharedDataPointer(const QSharedDataPointer<T>& other)
+/*! \fn template <class T> QSharedDataPointer<T>::QSharedDataPointer(const QSharedDataPointer<T>& o)
Sets the \e{d pointer} of \e this to the \e{d pointer} in
- \a other and increments the reference count of the shared
+ \a o and increments the reference count of the shared
data object.
*/
-/*! \fn QSharedDataPointer<T>& QSharedDataPointer::operator=(const QSharedDataPointer<T>& other)
+/*! \fn template <class T> QSharedDataPointer<T>& QSharedDataPointer<T>::operator=(const QSharedDataPointer<T>& o)
Sets the \e{d pointer} of \e this to the \e{d pointer} of
- \a other and increments the reference count of the shared
+ \a o and increments the reference count of the shared
data object. The reference count of the old shared data
object of \e this is decremented. If the reference count
of the old shared data object becomes 0, the old shared
data object is deleted.
*/
-/*! \fn QSharedDataPointer& QSharedDataPointer::operator=(T* sharedData)
- Sets the \e{d pointer} og \e this to \a sharedData and increments
- \a{sharedData}'s reference count. The reference count of the old
+/*! \fn template <class T> QSharedDataPointer& QSharedDataPointer<T>::operator=(T* o)
+ Sets the \e{d pointer} og \e this to \a o and increments
+ \a{o}'s reference count. The reference count of the old
shared data object of \e this is decremented. If the reference
count of the old shared data object becomes 0, the old shared data
object is deleted.
*/
-/*! \fn bool QSharedDataPointer::operator!() const
+/*! \fn template <class T> bool QSharedDataPointer<T>::operator!() const
Returns \c true if the \e{d pointer} of \e this is null.
*/
-/*! \fn void QSharedDataPointer::detach()
+/*! \fn template <class T> void QSharedDataPointer<T>::detach()
If the shared data object's reference count is greater than 1, this
function creates a deep copy of the shared data object and sets the
\e{d pointer} of \e this to the copy.
@@ -383,7 +383,7 @@ QT_BEGIN_NAMESPACE
required. You don't need to call it yourself.
*/
-/*! \fn T *QSharedDataPointer::clone()
+/*! \fn template <class T> T *QSharedDataPointer<T>::clone()
\since 4.5
Creates and returns a deep copy of the current data. This function
@@ -449,71 +449,71 @@ QT_BEGIN_NAMESPACE
\sa QSharedData, QSharedDataPointer
*/
-/*! \fn T& QExplicitlySharedDataPointer::operator*() const
+/*! \fn template <class T> T& QExplicitlySharedDataPointer<T>::operator*() const
Provides access to the shared data object's members.
*/
-/*! \fn T* QExplicitlySharedDataPointer::operator->()
+/*! \fn template <class T> T* QExplicitlySharedDataPointer<T>::operator->()
Provides access to the shared data object's members.
*/
-/*! \fn const T* QExplicitlySharedDataPointer::operator->() const
+/*! \fn template <class T> const T* QExplicitlySharedDataPointer<T>::operator->() const
Provides const access to the shared data object's members.
*/
-/*! \fn T* QExplicitlySharedDataPointer::data() const
+/*! \fn template <class T> T* QExplicitlySharedDataPointer<T>::data() const
Returns a pointer to the shared data object.
*/
-/*! \fn const T* QExplicitlySharedDataPointer::constData() const
+/*! \fn template <class T> const T* QExplicitlySharedDataPointer<T>::constData() const
Returns a const pointer to the shared data object.
\sa data()
*/
-/*! \fn void QExplicitlySharedDataPointer::swap(QExplicitlySharedDataPointer &other)
+/*! \fn template <class T> void QExplicitlySharedDataPointer<T>::swap(QExplicitlySharedDataPointer &other)
Swap this instance's explicitly shared data pointer with
the explicitly shared data pointer in \a other.
*/
-/*! \fn bool QExplicitlySharedDataPointer::operator==(const QExplicitlySharedDataPointer<T>& other) const
+/*! \fn template <class T> bool QExplicitlySharedDataPointer<T>::operator==(const QExplicitlySharedDataPointer<T>& other) const
Returns \c true if \a other and \e this have the same \e{d pointer}.
*/
/*!
- \fn QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer::operator=(QExplicitlySharedDataPointer<T> &&other)
+ \fn template <class T> QExplicitlySharedDataPointer<T> &QExplicitlySharedDataPointer<T>::operator=(QExplicitlySharedDataPointer<T> &&other)
Move-assigns \a other to this QExplicitlySharedDataPointer instance.
\since 5.2
*/
-/*! \fn bool QExplicitlySharedDataPointer::operator==(const T* ptr) const
+/*! \fn template <class T> bool QExplicitlySharedDataPointer<T>::operator==(const T* ptr) const
Returns \c true if the \e{d pointer} of \e this is \a ptr.
*/
-/*! \fn bool QExplicitlySharedDataPointer::operator!=(const QExplicitlySharedDataPointer<T>& other) const
+/*! \fn template <class T> bool QExplicitlySharedDataPointer<T>::operator!=(const QExplicitlySharedDataPointer<T>& other) const
Returns \c true if \a other and \e this do \e not have the same
\e{d pointer}.
*/
-/*! \fn bool QExplicitlySharedDataPointer::operator!=(const T* ptr) const
+/*! \fn template <class T> bool QExplicitlySharedDataPointer<T>::operator!=(const T* ptr) const
Returns \c true if the \e{d pointer} of \e this is \e not \a ptr.
*/
-/*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer()
+/*! \fn template <class T> QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer()
Constructs a QExplicitlySharedDataPointer initialized with a null
\e{d pointer}.
*/
-/*! \fn QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer()
+/*! \fn template <class T> QExplicitlySharedDataPointer<T>::~QExplicitlySharedDataPointer()
Decrements the reference count of the shared data object.
If the reference count becomes 0, the shared data object
is deleted. \e This is then destroyed.
*/
/*!
- \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o)
+ \fn template <class T> QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o)
Move-constructs a QExplicitlySharedDataPointer instance, making it point at the same
object that \a o was pointing to.
@@ -521,24 +521,24 @@ QT_BEGIN_NAMESPACE
\since 5.2
*/
-/*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T* sharedData)
+/*! \fn template <class T> QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(T* data)
Constructs a QExplicitlySharedDataPointer with \e{d pointer}
- set to \a sharedData and increments \a{sharedData}'s reference
+ set to \a data and increments \a{data}'s reference
count.
*/
-/*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T>& other)
+/*! \fn template <class T> QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T>& o)
This standard copy constructor sets the \e {d pointer} of \e this to
- the \e {d pointer} in \a other and increments the reference count of
+ the \e {d pointer} in \a o and increments the reference count of
the shared data object.
*/
-/*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X>& other)
- This copy constructor is different in that it allows \a other to be
+/*! \fn template <class T> template <class X> QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X>& o)
+ This copy constructor is different in that it allows \a o to be
a different type of explicitly shared data pointer but one that has
a compatible shared data object.
- By default, the \e{d pointer} of \a other (of type \c{X *}) gets
+ By default, the \e{d pointer} of \a o (of type \c{X *}) gets
implicitly converted to the type \c{T *}; the result of this
conversion is set as the \e{d pointer} of \e{this}, and the
reference count of the shared data object is incremented.
@@ -546,7 +546,7 @@ QT_BEGIN_NAMESPACE
However, if the macro
\c{QT_ENABLE_QEXPLICITLYSHAREDDATAPOINTER_STATICCAST} is defined
before including the \c{QExplicitlySharedDataPointer} header, then
- the \e{d pointer} of \a other undergoes a \c{static_cast} to the
+ the \e{d pointer} of \a o undergoes a \c{static_cast} to the
type \c{T *}. The result of the cast is then set as the
\e{d pointer} of \e{this}, and the reference count of the shared data
object is incremented.
@@ -566,39 +566,39 @@ QT_BEGIN_NAMESPACE
compile without modifications.
*/
-/*! \fn QExplicitlySharedDataPointer<T>& QExplicitlySharedDataPointer::operator=(const QExplicitlySharedDataPointer<T>& other)
+/*! \fn template <class T> QExplicitlySharedDataPointer<T>& QExplicitlySharedDataPointer<T>::operator=(const QExplicitlySharedDataPointer<T>& o)
Sets the \e{d pointer} of \e this to the \e{d pointer} of
- \a other and increments the reference count of the shared
+ \a o and increments the reference count of the shared
data object. The reference count of the old shared data
object of \e this is decremented. If the reference count
of the old shared data object becomes 0, the old shared
data object is deleted.
*/
-/*! \fn QExplicitlySharedDataPointer& QExplicitlySharedDataPointer::operator=(T* sharedData)
- Sets the \e{d pointer} of \e this to \a sharedData and
- increments \a{sharedData}'s reference count. The reference
+/*! \fn template <class T> QExplicitlySharedDataPointer& QExplicitlySharedDataPointer<T>::operator=(T* o)
+ Sets the \e{d pointer} of \e this to \a o and
+ increments \a{o}'s reference count. The reference
count of the old shared data object of \e this is decremented.
If the reference count of the old shared data object becomes
0, the old shared data object is deleted.
*/
-/*! \fn void QExplicitlySharedDataPointer::reset()
+/*! \fn template <class T> void QExplicitlySharedDataPointer<T>::reset()
Resets \e this to be null. i.e., this function sets the
\e{d pointer} of \e this to 0, but first it decrements
the reference count of the shared data object and deletes
the shared data object if the reference count became 0.
*/
-/*! \fn QExplicitlySharedDataPointer::operator bool () const
+/*! \fn template <class T> QExplicitlySharedDataPointer<T>::operator bool () const
Returns \c true if the \e{d pointer} of \e this is \e not null.
*/
-/*! \fn bool QExplicitlySharedDataPointer::operator!() const
+/*! \fn template <class T> bool QExplicitlySharedDataPointer<T>::operator!() const
Returns \c true if the \e{d pointer} of \e this is null.
*/
-/*! \fn void QExplicitlySharedDataPointer::detach()
+/*! \fn template <class T> void QExplicitlySharedDataPointer<T>::detach()
If the shared data object's reference count is greater than 1, this
function creates a deep copy of the shared data object and sets the
\e{d pointer} of \e this to the copy.
@@ -610,7 +610,7 @@ QT_BEGIN_NAMESPACE
everywhere in your code, consider using QSharedDataPointer instead.
*/
-/*! \fn T *QExplicitlySharedDataPointer::clone()
+/*! \fn template <class T> T *QExplicitlySharedDataPointer<T>::clone()
\since 4.5
Creates and returns a deep copy of the current data. This function
@@ -618,7 +618,7 @@ QT_BEGIN_NAMESPACE
order to create the new copy. This function uses the \e {operator
new} and calls the copy constructor of the type T.
- See QSharedDataPointer::clone() for an explanation of how to use it.
+ See QSharedDataPointer<T>::clone() for an explanation of how to use it.
*/
/*!
diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h
index 13b0032605..dbf0907a0f 100644
--- a/src/corelib/tools/qshareddata.h
+++ b/src/corelib/tools/qshareddata.h
@@ -85,7 +85,7 @@ public:
inline bool operator==(const QSharedDataPointer<T> &other) const { return d == other.d; }
inline bool operator!=(const QSharedDataPointer<T> &other) const { return d != other.d; }
- inline QSharedDataPointer() { d = Q_NULLPTR; }
+ inline QSharedDataPointer() { d = nullptr; }
inline ~QSharedDataPointer() { if (d && !d->ref.deref()) delete d; }
explicit QSharedDataPointer(T *data) Q_DECL_NOTHROW;
@@ -113,7 +113,7 @@ public:
return *this;
}
#ifdef Q_COMPILER_RVALUE_REFS
- QSharedDataPointer(QSharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = Q_NULLPTR; }
+ QSharedDataPointer(QSharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = nullptr; }
inline QSharedDataPointer<T> &operator=(QSharedDataPointer<T> &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
@@ -151,17 +151,17 @@ public:
if(d && !d->ref.deref())
delete d;
- d = Q_NULLPTR;
+ d = nullptr;
}
- inline operator bool () const { return d != Q_NULLPTR; }
+ inline operator bool () const { return d != nullptr; }
inline bool operator==(const QExplicitlySharedDataPointer<T> &other) const { return d == other.d; }
inline bool operator!=(const QExplicitlySharedDataPointer<T> &other) const { return d != other.d; }
inline bool operator==(const T *ptr) const { return d == ptr; }
inline bool operator!=(const T *ptr) const { return d != ptr; }
- inline QExplicitlySharedDataPointer() { d = Q_NULLPTR; }
+ inline QExplicitlySharedDataPointer() { d = nullptr; }
inline ~QExplicitlySharedDataPointer() { if (d && !d->ref.deref()) delete d; }
explicit QExplicitlySharedDataPointer(T *data) Q_DECL_NOTHROW;
@@ -202,7 +202,7 @@ public:
return *this;
}
#ifdef Q_COMPILER_RVALUE_REFS
- inline QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = Q_NULLPTR; }
+ inline QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = nullptr; }
inline QExplicitlySharedDataPointer<T> &operator=(QExplicitlySharedDataPointer<T> &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp
index af09ef6f40..f88153db5d 100644
--- a/src/corelib/tools/qsharedpointer.cpp
+++ b/src/corelib/tools/qsharedpointer.cpp
@@ -429,20 +429,20 @@
*/
/*!
- \fn QSharedPointer::QSharedPointer()
+ \fn template <class T> QSharedPointer<T>::QSharedPointer()
Creates a QSharedPointer that points to null (0).
*/
/*!
- \fn QSharedPointer::~QSharedPointer()
+ \fn template <class T> QSharedPointer<T>::~QSharedPointer()
Destroys this QSharedPointer object. If it is the last reference to
the pointer stored, this will delete the pointer as well.
*/
/*!
- \fn QSharedPointer::QSharedPointer(X *ptr)
+ \fn template <class T> template <typename X> QSharedPointer<T>::QSharedPointer(X *ptr)
Creates a QSharedPointer that points to \a ptr. The pointer \a ptr
becomes managed by this QSharedPointer and must not be passed to
@@ -455,13 +455,13 @@
*/
/*!
- \fn QSharedPointer::QSharedPointer(X *ptr, Deleter deleter)
+ \fn template <class T> template <typename X, typename Deleter> QSharedPointer<T>::QSharedPointer(X *ptr, Deleter d)
Creates a QSharedPointer that points to \a ptr. The pointer \a ptr
becomes managed by this QSharedPointer and must not be passed to
another QSharedPointer object or deleted outside this object.
- The \a deleter parameter specifies the custom deleter for this
+ The deleter parameter \a d specifies the custom deleter for this
object. The custom deleter is called, instead of the operator delete(),
when the strong reference count drops to 0. This is useful,
for instance, for calling \l {QObject::}{deleteLater()} on a QObject instead:
@@ -495,7 +495,7 @@
*/
/*!
- \fn QSharedPointer::QSharedPointer(std::nullptr_t)
+ \fn template <class T> QSharedPointer<T>::QSharedPointer(std::nullptr_t)
\since 5.8
Creates a QSharedPointer that is null. This is equivalent to the
@@ -503,15 +503,19 @@
*/
/*!
- \fn QSharedPointer::QSharedPointer(std::nullptr_t, Deleter)
+ \fn template <class T> template <typename Deleter> QSharedPointer<T>::QSharedPointer(std::nullptr_t, Deleter d)
\since 5.8
Creates a QSharedPointer that is null. This is equivalent to the
QSharedPointer default constructor.
+
+ The deleter parameter \a d specifies the custom deleter for this
+ object. The custom deleter is called, instead of the operator
+ delete(), when the strong reference count drops to 0.
*/
/*!
- \fn QSharedPointer::QSharedPointer(const QSharedPointer<T> &other)
+ \fn template <class T> QSharedPointer<T>::QSharedPointer(const QSharedPointer<T> &other)
Creates a QSharedPointer object that shares \a other's pointer.
@@ -521,7 +525,7 @@
*/
/*!
- \fn QSharedPointer::QSharedPointer(const QWeakPointer<T> &other)
+ \fn template <class T> QSharedPointer<T>::QSharedPointer(const QWeakPointer<T> &other)
Creates a QSharedPointer by promoting the weak reference \a other
to strong reference and sharing its pointer.
@@ -534,7 +538,7 @@
*/
/*!
- \fn QSharedPointer &QSharedPointer::operator=(const QSharedPointer<T> &other)
+ \fn template <class T> QSharedPointer &QSharedPointer<T>::operator=(const QSharedPointer<T> &other)
Makes this object share \a other's pointer. The current pointer
reference is discarded and, if it was the last, the pointer will
@@ -546,7 +550,7 @@
*/
/*!
- \fn QSharedPointer &QSharedPointer::operator=(const QWeakPointer<T> &other)
+ \fn template <class T> QSharedPointer &QSharedPointer<T>::operator=(const QWeakPointer<T> &other)
Promotes \a other to a strong reference and makes this object
share a reference to the pointer referenced by it. The current pointer
@@ -559,7 +563,7 @@
*/
/*!
- \fn void QSharedPointer::swap(QSharedPointer<T> &other);
+ \fn template <class T> void QSharedPointer<T>::swap(QSharedPointer<T> &other);
\since 5.3
Swaps this shared pointer instance with \a other. This function is
@@ -567,7 +571,7 @@
*/
/*!
- \fn T *QSharedPointer::data() const
+ \fn template <class T> T *QSharedPointer<T>::data() const
Returns the value of the pointer referenced by this object.
@@ -577,7 +581,16 @@
*/
/*!
- \fn T &QSharedPointer::operator *() const
+ \fn template <class T> T *QSharedPointer<T>::get() const
+ \since 5.11
+
+ Same as data().
+
+ This function is provided for API compatibility with \c{std::shared_ptr}.
+*/
+
+/*!
+ \fn template <class T> T &QSharedPointer<T>::operator *() const
Provides access to the shared pointer's members.
@@ -585,7 +598,7 @@
*/
/*!
- \fn T *QSharedPointer::operator ->() const
+ \fn template <class T> T *QSharedPointer<T>::operator ->() const
Provides access to the shared pointer's members.
@@ -593,14 +606,14 @@
*/
/*!
- \fn bool QSharedPointer::isNull() const
+ \fn template <class T> bool QSharedPointer<T>::isNull() const
Returns \c true if this object is holding a reference to a null
pointer.
*/
/*!
- \fn QSharedPointer::operator bool() const
+ \fn template <class T> QSharedPointer<T>::operator bool() const
Returns \c true if this object is not null. This function is suitable
for use in \tt if-constructs, like:
@@ -613,7 +626,7 @@
*/
/*!
- \fn bool QSharedPointer::operator !() const
+ \fn template <class T> bool QSharedPointer<T>::operator !() const
Returns \c true if this object is null. This function is suitable
for use in \tt if-constructs, like:
@@ -626,7 +639,7 @@
*/
/*!
- \fn QSharedPointer<X> QSharedPointer::staticCast() const
+ \fn template <class T> template <class X> QSharedPointer<X> QSharedPointer<T>::staticCast() const
Performs a static cast from this pointer's type to \tt X and returns
a QSharedPointer that shares the reference. This function can be
@@ -641,7 +654,7 @@
*/
/*!
- \fn QSharedPointer<X> QSharedPointer::dynamicCast() const
+ \fn template <class T> template <class X> QSharedPointer<X> QSharedPointer<T>::dynamicCast() const
Performs a dynamic cast from this pointer's type to \tt X and
returns a QSharedPointer that shares the reference. If this
@@ -658,7 +671,7 @@
*/
/*!
- \fn QSharedPointer<X> QSharedPointer::constCast() const
+ \fn template <class T> template <class X> QSharedPointer<X> QSharedPointer<T>::constCast() const
Performs a \tt const_cast from this pointer's type to \tt X and returns
a QSharedPointer that shares the reference. This function can be
@@ -669,7 +682,7 @@
*/
/*!
- \fn QSharedPointer<X> QSharedPointer::objectCast() const
+ \fn template <class T> template <class X> QSharedPointer<X> QSharedPointer<T>::objectCast() const
\since 4.6
Performs a \l qobject_cast() from this pointer's type to \tt X and
@@ -687,7 +700,7 @@
*/
/*!
- \fn QSharedPointer<T> QSharedPointer::create()
+ \fn template <class T> QSharedPointer<T> QSharedPointer<T>::create()
\since 5.1
Creates a QSharedPointer object and allocates a new item of type \tt T. The
@@ -699,7 +712,7 @@
*/
/*!
- \fn QSharedPointer<T> QSharedPointer::create(...)
+ \fn template <class T> QSharedPointer<T> QSharedPointer<T>::create(...)
\overload
\since 5.1
@@ -724,7 +737,7 @@
*/
/*!
- \fn QWeakPointer<T> QSharedPointer::toWeakRef() const
+ \fn template <class T> QWeakPointer<T> QSharedPointer<T>::toWeakRef() const
Returns a weak reference object that shares the pointer referenced
by this object.
@@ -733,7 +746,7 @@
*/
/*!
- \fn void QSharedPointer::clear()
+ \fn template <class T> void QSharedPointer<T>::clear()
Clears this QSharedPointer object, dropping the reference that it
may have had to the pointer. If this was the last reference, then
@@ -741,14 +754,14 @@
*/
/*!
- \fn void QSharedPointer::reset()
+ \fn template <class T> void QSharedPointer<T>::reset()
\since 5.0
Same as clear(). For std::shared_ptr compatibility.
*/
/*!
- \fn void QSharedPointer::reset(T *t)
+ \fn template <class T> void QSharedPointer<T>::reset(T *t)
\since 5.0
Resets this QSharedPointer object to point to \a t
@@ -759,31 +772,31 @@
*/
/*!
- \fn void QSharedPointer::reset(T *t, Deleter deleter)
+ \fn template <class T> template <typename Deleter> void QSharedPointer<T>::reset(T *t, Deleter deleter)
\since 5.0
Resets this QSharedPointer object to point to \a t
- instead, with deleter \a deleter. Equivalent to:
+ instead, with the Deleter \a deleter. Equivalent to:
\code
QSharedPointer<T> other(t, deleter); this->swap(other);
\endcode
*/
/*!
- \fn QWeakPointer::QWeakPointer()
+ \fn template <class T> QWeakPointer<T>::QWeakPointer()
Creates a QWeakPointer that points to nothing.
*/
/*!
- \fn QWeakPointer::~QWeakPointer()
+ \fn template <class T> QWeakPointer<T>::~QWeakPointer()
Destroys this QWeakPointer object. The pointer referenced
by this object will not be deleted.
*/
/*!
- \fn QWeakPointer::QWeakPointer(const QWeakPointer<T> &other)
+ \fn template <class T> QWeakPointer<T>::QWeakPointer(const QWeakPointer<T> &other)
Creates a QWeakPointer that holds a weak reference to the
pointer referenced by \a other.
@@ -794,7 +807,7 @@
*/
/*!
- \fn QWeakPointer::QWeakPointer(const QSharedPointer<T> &other)
+ \fn template <class T> QWeakPointer<T>::QWeakPointer(const QSharedPointer<T> &other)
Creates a QWeakPointer that holds a weak reference to the
pointer referenced by \a other.
@@ -805,12 +818,12 @@
*/
/*!
- \fn QWeakPointer::QWeakPointer(const QObject *obj)
+ \fn template <class T> QWeakPointer<T>::QWeakPointer(const QObject *other)
\since 4.6
\deprecated
Creates a QWeakPointer that holds a weak reference directly to the
- QObject \a obj. This constructor is only available if the template type
+ QObject \a other. This constructor is only available if the template type
\tt T is QObject or derives from it (otherwise a compilation error will
result).
@@ -824,19 +837,19 @@
*/
/*!
- \fn QWeakPointer &QWeakPointer::operator=(const QObject *obj)
+ \fn template <class T> QWeakPointer &QWeakPointer<T>::operator=(const QObject *other)
\since 4.6
\deprecated
Makes this QWeakPointer hold a weak reference directly to the QObject
- \a obj. This function is only available if the template type \tt T is
+ \a other. This function is only available if the template type \tt T is
QObject or derives from it.
\sa QPointer
*/
/*!
- \fn QWeakPointer &QWeakPointer::operator=(const QWeakPointer<T> &other)
+ \fn template <class T> QWeakPointer &QWeakPointer<T>::operator=(const QWeakPointer<T> &other)
Makes this object share \a other's pointer. The current pointer
reference is discarded but is not deleted.
@@ -847,7 +860,7 @@
*/
/*!
- \fn QWeakPointer &QWeakPointer::operator=(const QSharedPointer<T> &other)
+ \fn template <class T> QWeakPointer &QWeakPointer<T>::operator=(const QSharedPointer<T> &other)
Makes this object share \a other's pointer. The current pointer
reference is discarded but is not deleted.
@@ -858,7 +871,7 @@
*/
/*!
- \fn void QWeakPointer::swap(QWeakPointer<T> &other)
+ \fn template <class T> void QWeakPointer<T>::swap(QWeakPointer<T> &other)
\since 5.4
Swaps this weak pointer instance with \a other. This function is
@@ -866,7 +879,7 @@
*/
/*!
- \fn bool QWeakPointer::isNull() const
+ \fn template <class T> bool QWeakPointer<T>::isNull() const
Returns \c true if this object is holding a reference to a null
pointer.
@@ -878,7 +891,7 @@
*/
/*!
- \fn QWeakPointer::operator bool() const
+ \fn template <class T> QWeakPointer<T>::operator bool() const
Returns \c true if this object is not null. This function is suitable
for use in \tt if-constructs, like:
@@ -896,7 +909,7 @@
*/
/*!
- \fn bool QWeakPointer::operator !() const
+ \fn template <class T> bool QWeakPointer<T>::operator !() const
Returns \c true if this object is null. This function is suitable
for use in \tt if-constructs, like:
@@ -914,7 +927,7 @@
*/
/*!
- \fn T *QWeakPointer::data() const
+ \fn template <class T> T *QWeakPointer<T>::data() const
\since 4.6
Returns the value of the pointer being tracked by this QWeakPointer,
@@ -956,7 +969,7 @@
*/
/*!
- \fn QSharedPointer<T> QWeakPointer::toStrongRef() const
+ \fn template <class T> QSharedPointer<T> QWeakPointer<T>::toStrongRef() const
Promotes this weak reference to a strong one and returns a
QSharedPointer object holding that reference. When promoting to
@@ -989,7 +1002,7 @@
*/
/*!
- \fn QSharedPointer<T> QWeakPointer::lock() const
+ \fn template <class T> QSharedPointer<T> QWeakPointer<T>::lock() const
\since 5.4
Same as toStrongRef().
@@ -998,14 +1011,14 @@
*/
/*!
- \fn void QWeakPointer::clear()
+ \fn template <class T> void QWeakPointer<T>::clear()
Clears this QWeakPointer object, dropping the reference that it
may have had to the pointer.
*/
/*!
- \fn QSharedPointer<T> QEnableSharedFromThis::sharedFromThis()
+ \fn template <class T> QSharedPointer<T> QEnableSharedFromThis<T>::sharedFromThis()
\since 5.4
If \c this (that is, the subclass instance invoking this method) is being
@@ -1014,7 +1027,7 @@
*/
/*!
- \fn QSharedPointer<const T> QEnableSharedFromThis::sharedFromThis() const
+ \fn template <class T> QSharedPointer<const T> QEnableSharedFromThis<T>::sharedFromThis() const
\overload
\since 5.4
@@ -1022,7 +1035,7 @@
*/
/*!
- \fn bool operator==(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator==(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
\relates QSharedPointer
Returns \c true if the pointer referenced by \a ptr1 is the
@@ -1036,7 +1049,7 @@
*/
/*!
- \fn bool operator!=(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator!=(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
\relates QSharedPointer
Returns \c true if the pointer referenced by \a ptr1 is not the
@@ -1050,7 +1063,7 @@
*/
/*!
- \fn bool operator==(const QSharedPointer<T> &ptr1, const X *ptr2)
+ \fn template <class T> template <class X> bool operator==(const QSharedPointer<T> &ptr1, const X *ptr2)
\relates QSharedPointer
Returns \c true if the pointer referenced by \a ptr1 is the
@@ -1064,7 +1077,7 @@
*/
/*!
- \fn bool operator!=(const QSharedPointer<T> &ptr1, const X *ptr2)
+ \fn template <class T> template <class X> bool operator!=(const QSharedPointer<T> &ptr1, const X *ptr2)
\relates QSharedPointer
Returns \c true if the pointer referenced by \a ptr1 is not the
@@ -1078,7 +1091,7 @@
*/
/*!
- \fn bool operator==(const T *ptr1, const QSharedPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator==(const T *ptr1, const QSharedPointer<X> &ptr2)
\relates QSharedPointer
Returns \c true if the pointer \a ptr1 is the
@@ -1092,7 +1105,7 @@
*/
/*!
- \fn bool operator!=(const T *ptr1, const QSharedPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator!=(const T *ptr1, const QSharedPointer<X> &ptr2)
\relates QSharedPointer
Returns \c true if the pointer \a ptr1 is not the
@@ -1106,7 +1119,7 @@
*/
/*!
- \fn bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator==(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
\relates QWeakPointer
Returns \c true if the pointer referenced by \a ptr1 is the
@@ -1120,7 +1133,7 @@
*/
/*!
- \fn bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator!=(const QSharedPointer<T> &ptr1, const QWeakPointer<X> &ptr2)
\relates QWeakPointer
Returns \c true if the pointer referenced by \a ptr1 is not the
@@ -1134,7 +1147,7 @@
*/
/*!
- \fn bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator==(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
\relates QWeakPointer
Returns \c true if the pointer referenced by \a ptr1 is the
@@ -1148,7 +1161,7 @@
*/
/*!
- \fn bool operator==(const QSharedPointer<T> &lhs, std::nullptr_t)
+ \fn template <class T> bool operator==(const QSharedPointer<T> &lhs, std::nullptr_t)
\relates QSharedPointer
\since 5.8
@@ -1158,7 +1171,7 @@
*/
/*!
- \fn bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)
+ \fn template <class T> bool operator==(std::nullptr_t, const QSharedPointer<T> &rhs)
\relates QSharedPointer
\since 5.8
@@ -1168,7 +1181,7 @@
*/
/*!
- \fn bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
+ \fn template <class T> bool operator!=(const QSharedPointer<T> &lhs, std::nullptr_t)
\relates QSharedPointer
\since 5.8
@@ -1179,7 +1192,7 @@
*/
/*!
- \fn bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
+ \fn template <class T> bool operator!=(std::nullptr_t, const QSharedPointer<T> &rhs)
\relates QSharedPointer
\since 5.8
@@ -1190,7 +1203,7 @@
*/
/*!
- \fn bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)
+ \fn template <class T> bool operator==(const QWeakPointer<T> &lhs, std::nullptr_t)
\relates QWeakPointer
\since 5.8
@@ -1200,7 +1213,7 @@
*/
/*!
- \fn bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)
+ \fn template <class T> bool operator==(std::nullptr_t, const QWeakPointer<T> &rhs)
\relates QWeakPointer
\since 5.8
@@ -1210,7 +1223,7 @@
*/
/*!
- \fn bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
+ \fn template <class T> bool operator!=(const QWeakPointer<T> &lhs, std::nullptr_t)
\relates QWeakPointer
\since 5.8
@@ -1221,7 +1234,7 @@
*/
/*!
- \fn bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
+ \fn template <class T> bool operator!=(std::nullptr_t, const QWeakPointer<T> &rhs)
\relates QWeakPointer
\since 5.8
@@ -1232,7 +1245,7 @@
*/
/*!
- \fn bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
+ \fn template <class T> template <class X> bool operator!=(const QWeakPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
\relates QWeakPointer
Returns \c true if the pointer referenced by \a ptr1 is not the
@@ -1246,7 +1259,7 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerCast(const QSharedPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerCast(const QSharedPointer<T> &other)
\relates QSharedPointer
Returns a shared pointer to the pointer held by \a other, cast to
@@ -1261,7 +1274,7 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerCast(const QWeakPointer<T> &other)
\relates QSharedPointer
\relates QWeakPointer
@@ -1282,10 +1295,10 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerDynamicCast(const QSharedPointer<T> &src)
\relates QSharedPointer
- Returns a shared pointer to the pointer held by \a other, using a
+ Returns a shared pointer to the pointer held by \a src, using a
dynamic cast to type \tt X to obtain an internal pointer of the
appropriate type. If the \tt dynamic_cast fails, the object
returned will be null.
@@ -1298,16 +1311,16 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerDynamicCast(const QWeakPointer<T> &src)
\relates QSharedPointer
\relates QWeakPointer
- Returns a shared pointer to the pointer held by \a other, using a
+ Returns a shared pointer to the pointer held by \a src, using a
dynamic cast to type \tt X to obtain an internal pointer of the
appropriate type. If the \tt dynamic_cast fails, the object
returned will be null.
- The \a other object is converted first to a strong reference. If
+ The \a src object is converted first to a strong reference. If
that conversion fails (because the object it's pointing to has
already been deleted), this function also returns a null
QSharedPointer.
@@ -1320,10 +1333,10 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerConstCast(const QSharedPointer<T> &src)
\relates QSharedPointer
- Returns a shared pointer to the pointer held by \a other, cast to
+ Returns a shared pointer to the pointer held by \a src, cast to
type \tt X. The types \tt T and \tt X must belong to one
hierarchy for the \tt const_cast to succeed. The \tt const and \tt
volatile differences between \tt T and \tt X are ignored.
@@ -1332,16 +1345,16 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerConstCast(const QWeakPointer<T> &src)
\relates QSharedPointer
\relates QWeakPointer
- Returns a shared pointer to the pointer held by \a other, cast to
+ Returns a shared pointer to the pointer held by \a src, cast to
type \tt X. The types \tt T and \tt X must belong to one
hierarchy for the \tt const_cast to succeed. The \tt const and
\tt volatile differences between \tt T and \tt X are ignored.
- The \a other object is converted first to a strong reference. If
+ The \a src object is converted first to a strong reference. If
that conversion fails (because the object it's pointing to has
already been deleted), this function returns a null
QSharedPointer.
@@ -1350,13 +1363,13 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &src)
\relates QSharedPointer
\since 4.6
\brief The qSharedPointerObjectCast function is for casting a shared pointer.
- Returns a shared pointer to the pointer held by \a other, using a
+ Returns a shared pointer to the pointer held by \a src, using a
\l qobject_cast() to type \tt X to obtain an internal pointer of the
appropriate type. If the \tt qobject_cast fails, the object
returned will be null.
@@ -1369,19 +1382,19 @@
*/
/*!
- \fn QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &other)
+ \fn template <class X> template <class T> QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &src)
\relates QSharedPointer
\relates QWeakPointer
\since 4.6
\brief The qSharedPointerObjectCast function is for casting a shared pointer.
- Returns a shared pointer to the pointer held by \a other, using a
+ Returns a shared pointer to the pointer held by \a src, using a
\l qobject_cast() to type \tt X to obtain an internal pointer of the
appropriate type. If the \tt qobject_cast fails, the object
returned will be null.
- The \a other object is converted first to a strong reference. If
+ The \a src object is converted first to a strong reference. If
that conversion fails (because the object it's pointing to has
already been deleted), this function also returns a null
QSharedPointer.
@@ -1395,10 +1408,10 @@
/*!
- \fn QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &other)
+ \fn template <class X> template <class T> QWeakPointer<X> qWeakPointerCast(const QWeakPointer<T> &src)
\relates QWeakPointer
- Returns a weak pointer to the pointer held by \a other, cast to
+ Returns a weak pointer to the pointer held by \a src, cast to
type \tt X. The types \tt T and \tt X must belong to one
hierarchy for the \tt static_cast to succeed.
diff --git a/src/corelib/tools/qsharedpointer.h b/src/corelib/tools/qsharedpointer.h
index 3b86eb238b..98b38b97d3 100644
--- a/src/corelib/tools/qsharedpointer.h
+++ b/src/corelib/tools/qsharedpointer.h
@@ -59,6 +59,7 @@ class QSharedPointer
public:
// basic accessor functions
T *data() const;
+ T *get() const;
bool isNull() const;
operator bool() const;
bool operator!() const;
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index ede54c155d..a0e408b94a 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -303,8 +303,9 @@ public:
typedef qptrdiff difference_type;
T *data() const Q_DECL_NOTHROW { return value; }
+ T *get() const Q_DECL_NOTHROW { return value; }
bool isNull() const Q_DECL_NOTHROW { return !data(); }
- operator RestrictedBool() const Q_DECL_NOTHROW { return isNull() ? Q_NULLPTR : &QSharedPointer::value; }
+ operator RestrictedBool() const Q_DECL_NOTHROW { return isNull() ? nullptr : &QSharedPointer::value; }
bool operator !() const Q_DECL_NOTHROW { return isNull(); }
T &operator*() const { return *data(); }
T *operator->() const Q_DECL_NOTHROW { return data(); }
@@ -337,8 +338,8 @@ public:
QSharedPointer(QSharedPointer &&other) Q_DECL_NOTHROW
: value(other.value), d(other.d)
{
- other.d = Q_NULLPTR;
- other.value = Q_NULLPTR;
+ other.d = nullptr;
+ other.value = nullptr;
}
QSharedPointer &operator=(QSharedPointer &&other) Q_DECL_NOTHROW
{
@@ -351,8 +352,8 @@ public:
QSharedPointer(QSharedPointer<X> &&other) Q_DECL_NOTHROW
: value(other.value), d(other.d)
{
- other.d = Q_NULLPTR;
- other.value = Q_NULLPTR;
+ other.d = nullptr;
+ other.value = nullptr;
}
template <class X>
@@ -378,7 +379,7 @@ public:
}
template <class X>
- inline QSharedPointer(const QWeakPointer<X> &other) : value(Q_NULLPTR), d(Q_NULLPTR)
+ inline QSharedPointer(const QWeakPointer<X> &other) : value(nullptr), d(nullptr)
{ *this = other; }
template <class X>
@@ -476,7 +477,7 @@ private:
inline void internalConstruct(X *ptr, Deleter deleter)
{
if (!ptr) {
- d = Q_NULLPTR;
+ d = nullptr;
return;
}
@@ -527,14 +528,14 @@ public:
o->weakref.ref();
} else {
o->checkQObjectShared(actual);
- o = Q_NULLPTR;
+ o = nullptr;
}
}
qSwap(d, o);
qSwap(this->value, actual);
if (!d || d->strongref.load() == 0)
- this->value = Q_NULLPTR;
+ this->value = nullptr;
// dereference saved data
deref(o);
@@ -559,19 +560,19 @@ public:
typedef const value_type &const_reference;
typedef qptrdiff difference_type;
- bool isNull() const Q_DECL_NOTHROW { return d == Q_NULLPTR || d->strongref.load() == 0 || value == Q_NULLPTR; }
- operator RestrictedBool() const Q_DECL_NOTHROW { return isNull() ? Q_NULLPTR : &QWeakPointer::value; }
+ bool isNull() const Q_DECL_NOTHROW { return d == nullptr || d->strongref.load() == 0 || value == nullptr; }
+ operator RestrictedBool() const Q_DECL_NOTHROW { return isNull() ? nullptr : &QWeakPointer::value; }
bool operator !() const Q_DECL_NOTHROW { return isNull(); }
- T *data() const Q_DECL_NOTHROW { return d == Q_NULLPTR || d->strongref.load() == 0 ? Q_NULLPTR : value; }
+ T *data() const Q_DECL_NOTHROW { return d == nullptr || d->strongref.load() == 0 ? nullptr : value; }
- inline QWeakPointer() Q_DECL_NOTHROW : d(Q_NULLPTR), value(Q_NULLPTR) { }
+ inline QWeakPointer() Q_DECL_NOTHROW : d(nullptr), value(nullptr) { }
inline ~QWeakPointer() { if (d && !d->weakref.deref()) delete d; }
#ifndef QT_NO_QOBJECT
// special constructor that is enabled only if X derives from QObject
#if QT_DEPRECATED_SINCE(5, 0)
template <class X>
- QT_DEPRECATED inline QWeakPointer(X *ptr) : d(ptr ? Data::getAndRef(ptr) : Q_NULLPTR), value(ptr)
+ QT_DEPRECATED inline QWeakPointer(X *ptr) : d(ptr ? Data::getAndRef(ptr) : nullptr), value(ptr)
{ }
#endif
#endif
@@ -588,8 +589,8 @@ public:
QWeakPointer(QWeakPointer &&other) Q_DECL_NOTHROW
: d(other.d), value(other.value)
{
- other.d = Q_NULLPTR;
- other.value = Q_NULLPTR;
+ other.d = nullptr;
+ other.value = nullptr;
}
QWeakPointer &operator=(QWeakPointer &&other) Q_DECL_NOTHROW
{ QWeakPointer moved(std::move(other)); swap(moved); return *this; }
@@ -616,7 +617,7 @@ public:
}
template <class X>
- inline QWeakPointer(const QWeakPointer<X> &o) : d(Q_NULLPTR), value(Q_NULLPTR)
+ inline QWeakPointer(const QWeakPointer<X> &o) : d(nullptr), value(nullptr)
{ *this = o; }
template <class X>
@@ -637,7 +638,7 @@ public:
{ return !(*this == o); }
template <class X>
- inline QWeakPointer(const QSharedPointer<X> &o) : d(Q_NULLPTR), value(Q_NULLPTR)
+ inline QWeakPointer(const QSharedPointer<X> &o) : d(nullptr), value(nullptr)
{ *this = o; }
template <class X>
@@ -681,7 +682,7 @@ public:
#ifndef QT_NO_QOBJECT
template <class X>
- inline QWeakPointer(X *ptr, bool) : d(ptr ? Data::getAndRef(ptr) : Q_NULLPTR), value(ptr)
+ inline QWeakPointer(X *ptr, bool) : d(ptr ? Data::getAndRef(ptr) : nullptr), value(ptr)
{ }
#endif
diff --git a/src/corelib/tools/qsimd_p.h b/src/corelib/tools/qsimd_p.h
index e315bc7f4e..eb56b31348 100644
--- a/src/corelib/tools/qsimd_p.h
+++ b/src/corelib/tools/qsimd_p.h
@@ -53,7 +53,6 @@
//
#include <QtCore/private/qglobal_p.h>
-#include <qatomic.h>
/*
* qt_module_config.prf defines the QT_COMPILER_SUPPORTS_XXX macros.
@@ -165,11 +164,7 @@
# if !defined(__MIPS_DSPR2__) && defined(__mips_dspr2) && defined(Q_PROCESSOR_MIPS_32)
# define __MIPS_DSPR2__
# endif
-#elif (defined(Q_CC_INTEL) || defined(Q_CC_MSVC) \
- || (defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && Q_CC_GNU >= 409) \
- || (defined(Q_CC_CLANG) && Q_CC_CLANG >= 308)) \
- && !defined(QT_BOOTSTRAPPED)
-# define QT_COMPILER_SUPPORTS_SIMD_ALWAYS
+#elif defined(Q_PROCESSOR_X86) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS)
# define QT_COMPILER_SUPPORTS_HERE(x) ((__ ## x ## __) || QT_COMPILER_SUPPORTS(x))
# if defined(Q_CC_GNU) && !defined(Q_CC_INTEL)
/* GCC requires attributes for a function */
@@ -182,55 +177,37 @@
# define QT_FUNCTION_TARGET(x)
#endif
-#if defined(Q_CC_MSVC) && (defined(_M_AVX) || defined(__AVX__))
-// Visual Studio defines __AVX__ when /arch:AVX is passed, but not the earlier macros
-// See: https://msdn.microsoft.com/en-us/library/b0084kay.aspx
-// SSE2 is handled by _M_IX86_FP below
-# define __SSE3__ 1
-# define __SSSE3__ 1
-// no Intel CPU supports SSE4a, so don't define it
-# define __SSE4_1__ 1
-# define __SSE4_2__ 1
-# ifndef __AVX__
-# define __AVX__ 1
-# endif
-#endif
-
-// SSE intrinsics
-#if defined(__SSE2__) || (defined(QT_COMPILER_SUPPORTS_SSE2) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-#if defined(QT_LINUXBASE) || defined(Q_OS_ANDROID_EMBEDDED)
-/// 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
-#if defined(Q_CC_MSVC) && (defined(_M_X64) || _M_IX86_FP >= 2)
-# define __SSE__ 1
-# define __SSE2__ 1
-#endif
-#endif
+#ifdef Q_PROCESSOR_X86
+/* -- x86 intrinsic support -- */
-// SSE3 intrinsics
-#if defined(__SSE3__) || (defined(QT_COMPILER_SUPPORTS_SSE3) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-#include <pmmintrin.h>
-#endif
+# if defined(Q_CC_MSVC) && (defined(_M_X64) || _M_IX86_FP >= 2)
+// MSVC doesn't define __SSE2__, so do it ourselves
+# define __SSE__ 1
+# define __SSE2__ 1
+# endif
-// SSSE3 intrinsics
-#if defined(__SSSE3__) || (defined(QT_COMPILER_SUPPORTS_SSSE3) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-#include <tmmintrin.h>
-#endif
+# ifdef __SSE2__
+// #include the intrinsics
+# include <immintrin.h>
+# endif
-// SSE4.1 intrinsics
-#if defined(__SSE4_1__) || (defined(QT_COMPILER_SUPPORTS_SSE4_1) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-#include <smmintrin.h>
-#endif
+# if defined(Q_CC_GNU) && !defined(Q_CC_INTEL)
+// GCC 4.4 and Clang 2.8 added a few more intrinsics there
+# include <x86intrin.h>
+# endif
-// SSE4.2 intrinsics
-#if defined(__SSE4_2__) || (defined(QT_COMPILER_SUPPORTS_SSE4_2) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-#include <nmmintrin.h>
+# if defined(Q_CC_MSVC) && (defined(_M_AVX) || defined(__AVX__))
+// Visual Studio defines __AVX__ when /arch:AVX is passed, but not the earlier macros
+// See: https://msdn.microsoft.com/en-us/library/b0084kay.aspx
+# define __SSE3__ 1
+# define __SSSE3__ 1
+// no Intel CPU supports SSE4a, so don't define it
+# define __SSE4_1__ 1
+# define __SSE4_2__ 1
+# ifndef __AVX__
+# define __AVX__ 1
+# endif
+# endif
# if defined(__SSE4_2__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC))
// POPCNT instructions:
@@ -238,13 +215,8 @@
// (but neither MSVC nor the Intel compiler define this macro)
# define __POPCNT__ 1
# endif
-#endif
// AVX intrinsics
-#if defined(__AVX__) || (defined(QT_COMPILER_SUPPORTS_AVX) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-// immintrin.h is the ultimate header, we don't need anything else after this
-#include <immintrin.h>
-
# if defined(__AVX__) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS) && (defined(Q_CC_INTEL) || defined(Q_CC_MSVC))
// AES, PCLMULQDQ instructions:
// All processors that support AVX support AES, PCLMULQDQ
@@ -260,11 +232,6 @@
# define __F16C__ 1
# define __RDRND__ 1
# endif
-#endif
-
-#if defined(__AES__) || defined(__PCLMUL__) || (defined(QT_COMPILER_SUPPORTS_AES) && defined(QT_COMPILER_SUPPORTS_SIMD_ALWAYS))
-# include <wmmintrin.h>
-#endif
#define QT_FUNCTION_TARGET_STRING_SSE2 "sse2"
#define QT_FUNCTION_TARGET_STRING_SSE3 "sse3"
@@ -293,19 +260,7 @@
#define QT_FUNCTION_TARGET_STRING_RDSEED "rdseed"
#define QT_FUNCTION_TARGET_STRING_SHA "sha"
-// other x86 intrinsics
-#if defined(Q_PROCESSOR_X86) && ((defined(Q_CC_GNU) && (Q_CC_GNU >= 404)) \
- || (defined(Q_CC_CLANG) && (Q_CC_CLANG >= 208)) \
- || defined(Q_CC_INTEL))
-# define QT_COMPILER_SUPPORTS_X86INTRIN
-# ifdef Q_CC_INTEL
-// The Intel compiler has no <x86intrin.h> -- all intrinsics are in <immintrin.h>;
-# include <immintrin.h>
-# else
-// GCC 4.4 and Clang 2.8 added a few more intrinsics there
-# include <x86intrin.h>
-# endif
-#endif
+#endif /* Q_PROCESSOR_X86 */
// Clang compiler fix, see http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20160222/151168.html
// This should be tweaked with an "upper version" of clang once we know which release fixes the
@@ -333,8 +288,10 @@
# include <arm_acle.h>
#endif
-QT_BEGIN_NAMESPACE
+#ifdef __cplusplus
+#include <qatomic.h>
+QT_BEGIN_NAMESPACE
enum CPUFeatures {
#if defined(Q_PROCESSOR_ARM)
@@ -512,9 +469,11 @@ static inline quint64 qCpuFeatures()
#define ALIGNMENT_PROLOGUE_32BYTES(ptr, i, length) \
for (; i < static_cast<int>(qMin(static_cast<quintptr>(length), ((8 - ((reinterpret_cast<quintptr>(ptr) >> 2) & 0x7)) & 0x7))); ++i)
+QT_END_NAMESPACE
+
+#endif // __cplusplus
+
#define SIMD_EPILOGUE(i, length, max) \
for (int _i = 0; _i < max && i < length; ++i, ++_i)
-QT_END_NAMESPACE
-
#endif // QSIMD_P_H
diff --git a/src/corelib/tools/qstack.cpp b/src/corelib/tools/qstack.cpp
index c1848f83dd..af72313a67 100644
--- a/src/corelib/tools/qstack.cpp
+++ b/src/corelib/tools/qstack.cpp
@@ -77,7 +77,7 @@
*/
/*!
- \fn void QStack::swap(QStack<T> &other)
+ \fn template<class T> void QStack<T>::swap(QStack<T> &other)
\since 4.8
Swaps stack \a other with this stack. This operation is very fast and
@@ -85,7 +85,7 @@
*/
/*!
- \fn void QStack::push(const T& t)
+ \fn template<class T> void QStack<T>::push(const T& t)
Adds element \a t to the top of the stack.
@@ -95,7 +95,7 @@
*/
/*!
- \fn T& QStack::top()
+ \fn template<class T> T& QStack<T>::top()
Returns a reference to the stack's top item. This function
assumes that the stack isn't empty.
@@ -106,7 +106,7 @@
*/
/*!
- \fn const T& QStack::top() const
+ \fn template<class T> const T& QStack<T>::top() const
\overload
@@ -114,7 +114,7 @@
*/
/*!
- \fn T QStack::pop()
+ \fn template<class T> T QStack<T>::pop()
Removes the top item from the stack and returns it. This function
assumes that the stack isn't empty.
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 1ef9f5a3c5..08fe9b899d 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2018 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -251,6 +251,151 @@ inline RetType UnrollTailLoop<0>::exec(Number, RetType returnIfExited, Functor1,
}
#endif
+#ifdef __SSE2__
+static bool simdTestMask(const char *&ptr, const char *end, quint32 maskval)
+{
+# if defined(__AVX2__)
+ // AVX2 implementation: test 32 bytes at a time
+ const __m256i mask256 = _mm256_broadcastd_epi32(_mm_cvtsi32_si128(maskval));
+ while (ptr + 32 < end) {
+ __m256i data = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(ptr));
+ if (!_mm256_testz_si256(mask256, data))
+ return false;
+ ptr += 32;
+ }
+
+ const __m128i mask = _mm256_castsi256_si128(mask256);
+# elif defined(__SSE4_1__)
+ // SSE 4.1 implementation: test 32 bytes at a time (two 16-byte
+ // comparisons, unrolled)
+ const __m128i mask = _mm_set1_epi32(maskval);
+ while (ptr + 32 < end) {
+ __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i data2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr + 16));
+ if (!_mm_testz_si128(mask, data1))
+ return false;
+ if (!_mm_testz_si128(mask, data2))
+ return false;
+ ptr += 32;
+ }
+# endif
+# if defined(__SSE4_1__)
+ // AVX2 and SSE4.1: final 16-byte comparison
+ if (ptr + 16 < end) {
+ __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ if (!_mm_testz_si128(mask, data1))
+ return false;
+ ptr += 16;
+ }
+# else
+ // SSE2 implementation: test 16 bytes at a time.
+ const __m128i mask = _mm_set1_epi32(maskval);
+ while (ptr + 16 < end) {
+ __m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i masked = _mm_andnot_si128(mask, data);
+ __m128i comparison = _mm_cmpeq_epi16(masked, _mm_setzero_si128());
+ if (quint16(_mm_movemask_epi8(comparison)) != 0xffff)
+ return false;
+ ptr += 16;
+ }
+# endif
+
+ return true;
+}
+#endif
+
+bool QtPrivate::isAscii(QLatin1String s) Q_DECL_NOTHROW
+{
+ const char *ptr = s.begin();
+ const char *end = s.end();
+
+#if defined(__AVX2__)
+ if (!simdTestMask(ptr, end, 0x80808080))
+ return false;
+#elif defined(__SSE2__)
+ // Testing for the high bit can be done efficiently with just PMOVMSKB
+ while (ptr + 16 < end) {
+ __m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ quint32 mask = _mm_movemask_epi8(data);
+ if (mask)
+ return false;
+ ptr += 16;
+ }
+#endif
+
+ while (ptr + 4 < end) {
+ quint32 data = qFromUnaligned<quint32>(ptr);
+ if (data & 0x80808080U)
+ return false;
+ ptr += 4;
+ }
+
+ while (ptr != end) {
+ if (quint8(*ptr++) & 0x80)
+ return false;
+ }
+ return true;
+}
+
+bool QtPrivate::isAscii(QStringView s) Q_DECL_NOTHROW
+{
+ const QChar *ptr = s.begin();
+ const QChar *end = s.end();
+
+#ifdef __SSE2__
+ const char *ptr8 = reinterpret_cast<const char *>(ptr);
+ const char *end8 = reinterpret_cast<const char *>(end);
+ if (!simdTestMask(ptr8, end8, 0xff80ff80))
+ return false;
+ ptr = reinterpret_cast<const QChar *>(ptr8);
+#endif
+
+ while (ptr != end) {
+ if ((*ptr++).unicode() & 0xff80)
+ return false;
+ }
+ return true;
+}
+
+bool QtPrivate::isLatin1(QStringView s) Q_DECL_NOTHROW
+{
+ const QChar *ptr = s.begin();
+ const QChar *end = s.end();
+
+#if defined(__SSE4_1__)
+ const char *ptr8 = reinterpret_cast<const char *>(ptr);
+ const char *end8 = reinterpret_cast<const char *>(end);
+ if (!simdTestMask(ptr8, end8, 0xff00ff00))
+ return false;
+ ptr = reinterpret_cast<const QChar *>(ptr8);
+#elif defined(__SSE2__)
+ // Testing if every other byte is non-zero can be done efficiently by
+ // using PUNPCKHBW (unpack high order bytes) and comparing that to zero.
+ while (ptr + 32 < end) {
+ __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i data2 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr + 16));
+ __m128i high = _mm_unpackhi_epi8(data1, data2);
+ __m128i comparison = _mm_cmpeq_epi16(high, _mm_setzero_si128());
+ if (_mm_movemask_epi8(comparison))
+ return false;
+ ptr += 16;
+ }
+ if (ptr + 16 < end) {
+ __m128i data1 = _mm_loadu_si128(reinterpret_cast<const __m128i *>(ptr));
+ __m128i high = _mm_unpackhi_epi8(data1, data1);
+ __m128i comparison = _mm_cmpeq_epi16(high, _mm_setzero_si128());
+ if (_mm_movemask_epi8(comparison))
+ return false;
+ }
+#endif
+
+ while (ptr != end) {
+ if ((*ptr++).unicode() > 0xff)
+ return false;
+ }
+ return true;
+}
+
// conversion between Latin 1 and UTF-16
void qt_from_latin1(ushort *dst, const char *str, size_t size) Q_DECL_NOTHROW
{
@@ -2441,6 +2586,21 @@ QString &QString::remove(int pos, int len)
return *this;
}
+template<typename T>
+static void removeStringImpl(QString &s, const T &needle, Qt::CaseSensitivity cs)
+{
+ const int needleSize = needle.size();
+ if (needleSize) {
+ if (needleSize == 1) {
+ s.remove(needle.front(), cs);
+ } else {
+ int i = 0;
+ while ((i = s.indexOf(needle, i, cs)) != -1)
+ s.remove(i, needleSize);
+ }
+ }
+}
+
/*!
Removes every occurrence of the given \a str string in this
string, and returns a reference to this string.
@@ -2454,11 +2614,27 @@ QString &QString::remove(int pos, int len)
*/
QString &QString::remove(const QString &str, Qt::CaseSensitivity cs)
{
- if (str.d->size) {
- int i = 0;
- while ((i = indexOf(str, i, cs)) != -1)
- remove(i, str.d->size);
- }
+ removeStringImpl(*this, str, cs);
+ return *this;
+}
+
+/*!
+ \since 5.11
+ \overload
+
+ Removes every occurrence of the given \a str string in this
+ string, and returns a reference to this string.
+
+ If \a cs is Qt::CaseSensitive (default), the search is
+ case sensitive; otherwise the search is case insensitive.
+
+ This is the same as \c replace(str, "", cs).
+
+ \sa replace()
+*/
+QString &QString::remove(QLatin1String str, Qt::CaseSensitivity cs)
+{
+ removeStringImpl(*this, str, cs);
return *this;
}
@@ -3679,14 +3855,14 @@ QString& QString::replace(const QRegExp &rx, const QString &after)
while (i < pos) {
int copyend = replacements[i].pos;
int size = copyend - copystart;
- memcpy(uc, d->data() + copystart, size * sizeof(QChar));
+ memcpy(static_cast<void*>(uc), static_cast<const void *>(d->data() + copystart), size * sizeof(QChar));
uc += size;
- memcpy(uc, after.d->data(), al * sizeof(QChar));
+ memcpy(static_cast<void *>(uc), static_cast<const void *>(after.d->data()), al * sizeof(QChar));
uc += al;
copystart = copyend + replacements[i].length;
i++;
}
- memcpy(uc, d->data() + copystart, (d->size - copystart) * sizeof(QChar));
+ memcpy(static_cast<void *>(uc), static_cast<const void *>(d->data() + copystart), (d->size - copystart) * sizeof(QChar));
newstring.resize(newlen);
*this = newstring;
caretMode = QRegExp::CaretWontMatch;
@@ -4056,7 +4232,7 @@ int QString::count(const QRegExp& rx) const
*/
int QString::indexOf(const QRegularExpression& re, int from) const
{
- return indexOf(re, from, Q_NULLPTR);
+ return indexOf(re, from, nullptr);
}
/*!
@@ -4107,7 +4283,7 @@ int QString::indexOf(const QRegularExpression &re, int from, QRegularExpressionM
*/
int QString::lastIndexOf(const QRegularExpression &re, int from) const
{
- return lastIndexOf(re, from, Q_NULLPTR);
+ return lastIndexOf(re, from, nullptr);
}
/*!
@@ -4159,7 +4335,7 @@ int QString::lastIndexOf(const QRegularExpression &re, int from, QRegularExpress
*/
bool QString::contains(const QRegularExpression &re) const
{
- return contains(re, Q_NULLPTR);
+ return contains(re, nullptr);
}
/*!
@@ -4574,7 +4750,7 @@ QString QString::mid(int position, int n) const
}
/*!
- \fn QString::chopped(int len) const
+ \fn QString QString::chopped(int len) const
\since 5.10
Returns a substring that contains the size() - \a len leftmost characters
@@ -4802,7 +4978,7 @@ QByteArray QString::toLatin1_helper_inplace(QString &s)
characters. Those characters may be suppressed or replaced with a
question mark.
- \sa fromLatin1(), toUtf8(), toLocal8Bit(), QTextCodec, qConvertToLatin1()
+ \sa fromLatin1(), toUtf8(), toLocal8Bit(), QTextCodec
*/
/*!
@@ -4863,8 +5039,7 @@ static QByteArray qt_convert_to_local_8bit(QStringView string)
Returns a local 8-bit representation of \a string as a QByteArray.
QTextCodec::codecForLocale() is used to perform the conversion from
- Unicode. If the locale's encoding could not be determined, this function
- does the same as qConvertToLatin1().
+ Unicode.
The behavior is undefined if \a string contains characters not
supported by the locale's 8-bit encoding.
@@ -4886,7 +5061,7 @@ static QByteArray qt_convert_to_utf8(QStringView str);
UTF-8 is a Unicode codec and can represent all characters in a Unicode
string like QString.
- \sa fromUtf8(), toLatin1(), toLocal8Bit(), QTextCodec, qConvertToUtf8()
+ \sa fromUtf8(), toLatin1(), toLocal8Bit(), QTextCodec
*/
QByteArray QString::toUtf8_helper(const QString &str)
@@ -4933,7 +5108,7 @@ static QVector<uint> qt_convert_to_ucs4(QStringView string);
The returned vector is not NUL terminated.
- \sa fromUtf8(), toUtf8(), toLatin1(), toLocal8Bit(), QTextCodec, fromUcs4(), toWCharArray(), qConvertToUcs4()
+ \sa fromUtf8(), toUtf8(), toLatin1(), toLocal8Bit(), QTextCodec, fromUcs4(), toWCharArray()
*/
QVector<uint> QString::toUcs4() const
{
@@ -6134,7 +6309,7 @@ QString QString::rightJustified(int width, QChar fill, bool truncate) const
while (padlen--)
* uc++ = fill;
if (len)
- memcpy(uc, d->data(), sizeof(QChar)*len);
+ memcpy(static_cast<void *>(uc), static_cast<const void *>(d->data()), sizeof(QChar)*len);
} else {
if (truncate)
result = left(width);
@@ -6438,7 +6613,7 @@ static LengthMod parse_length_modifier(const char * &c) Q_DECL_NOTHROW
}
/*!
- \fn QString::vasprintf(const char *cformat, va_list ap)
+ \fn QString QString::vasprintf(const char *cformat, va_list ap)
\since 5.5
Equivalent method to asprintf(), but takes a va_list \a ap
@@ -8531,7 +8706,7 @@ bool QString::isSimpleText() const
*/
bool QString::isRightToLeft() const
{
- return QStringRef(this).isRightToLeft();
+ return QtPrivate::isRightToLeft(QStringView(*this));
}
/*! \fn QChar *QString::data()
@@ -8825,6 +9000,13 @@ QString &QString::setRawData(const QChar *unicode, int size)
*/
/*!
+ \typedef QLatin1String::const_reference
+ \since 5.11
+
+ Alias for \c{reference}. Provided for compatibility with the STL.
+*/
+
+/*!
\typedef QLatin1String::iterator
\since 5.10
@@ -9238,8 +9420,6 @@ QString &QString::setRawData(const QChar *unicode, int size)
Whitespace means any character for which QChar::isSpace() returns
\c true. This includes the ASCII characters '\\t', '\\n', '\\v',
'\\f', '\\r', and ' '.
-
- \sa qTrimmed()
*/
/*! \fn bool QLatin1String::operator==(const QString &other) const
@@ -10481,7 +10661,7 @@ QStringRef QString::rightRef(int n) const
}
/*!
- \fn QStringRef::mid(int position, int n = -1) const
+ \fn QStringRef QStringRef::mid(int position, int n = -1) const
\since 5.2
Returns a substring reference to \a n characters of this string,
@@ -10515,7 +10695,7 @@ QStringRef QStringRef::mid(int pos, int n) const
}
/*!
- \fn QStringRef::chopped(int len) const
+ \fn QStringRef QStringRef::chopped(int len) const
\since 5.10
Returns a substring reference to the size() - \a len leftmost characters
@@ -10803,8 +10983,23 @@ int QStringRef::count(const QStringRef &str, Qt::CaseSensitivity cs) const
*/
bool QStringRef::isRightToLeft() const
{
- const ushort *p = reinterpret_cast<const ushort*>(unicode());
- const ushort * const end = p + size();
+ return QtPrivate::isRightToLeft(QStringView(unicode(), size()));
+}
+
+/*!
+ \since 5.11
+ \internal
+ \relates QStringView
+
+ Returns \c true if the string is read right to left.
+
+ \sa QString::isRightToLeft()
+*/
+bool QtPrivate::isRightToLeft(QStringView string)
+{
+ const ushort *p = reinterpret_cast<const ushort*>(string.data());
+ const ushort * const end = p + string.size();
+ int isolateLevel = 0;
while (p < end) {
uint ucs4 = *p;
if (QChar::isHighSurrogate(ucs4) && p < end - 1) {
@@ -10816,10 +11011,23 @@ bool QStringRef::isRightToLeft() const
}
switch (QChar::direction(ucs4))
{
+ case QChar::DirRLI:
+ case QChar::DirLRI:
+ case QChar::DirFSI:
+ ++isolateLevel;
+ break;
+ case QChar::DirPDI:
+ if (isolateLevel)
+ --isolateLevel;
+ break;
case QChar::DirL:
+ if (isolateLevel)
+ break;
return false;
case QChar::DirR:
case QChar::DirAL:
+ if (isolateLevel)
+ break;
return true;
default:
break;
@@ -11117,7 +11325,7 @@ static inline bool qt_starts_with(QStringView haystack, QChar needle, Qt::CaseSe
\since 5.10
\fn bool QtPrivate::startsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::startsWith(QLatin1String haystack, QStringview needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::startsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs)
\since 5.10
\fn bool QtPrivate::startsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs)
\since 5.10
@@ -11190,7 +11398,7 @@ static inline bool qt_ends_with(QStringView haystack, QChar needle, Qt::CaseSens
\since 5.10
\fn bool QtPrivate::endsWith(QStringView haystack, QLatin1String needle, Qt::CaseSensitivity cs)
\since 5.10
- \fn bool QtPrivate::endsWith(QLatin1String haystack, QStringview needle, Qt::CaseSensitivity cs)
+ \fn bool QtPrivate::endsWith(QLatin1String haystack, QStringView needle, Qt::CaseSensitivity cs)
\since 5.10
\fn bool QtPrivate::endsWith(QLatin1String haystack, QLatin1String needle, Qt::CaseSensitivity cs)
\since 5.10
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index fe7e9b050b..0138ae4098 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -91,7 +91,7 @@ template <typename T> class QVector;
class QLatin1String
{
public:
- Q_DECL_CONSTEXPR inline QLatin1String() Q_DECL_NOTHROW : m_size(0), m_data(Q_NULLPTR) {}
+ Q_DECL_CONSTEXPR inline QLatin1String() Q_DECL_NOTHROW : m_size(0), m_data(nullptr) {}
Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s) Q_DECL_NOTHROW : m_size(s ? int(strlen(s)) : 0), m_data(s) {}
Q_DECL_CONSTEXPR explicit QLatin1String(const char *f, const char *l)
: QLatin1String(f, int(l - f)) {}
@@ -202,6 +202,12 @@ Q_DECLARE_TYPEINFO(QLatin1String, Q_MOVABLE_TYPE);
typedef QLatin1String QLatin1Literal;
//
+// QLatin1String inline implementations
+//
+inline bool QtPrivate::isLatin1(QLatin1String) Q_DECL_NOTHROW
+{ return true; }
+
+//
// QStringView members that require QLatin1String:
//
bool QStringView::startsWith(QLatin1String s, Qt::CaseSensitivity cs) const Q_DECL_NOTHROW
@@ -477,6 +483,7 @@ public:
QString &remove(int i, int len);
QString &remove(QChar c, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ QString &remove(QLatin1String s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &remove(const QString &s, Qt::CaseSensitivity cs = Qt::CaseSensitive);
QString &replace(int i, int len, QChar after);
QString &replace(int i, int len, const QChar *s, int slen);
@@ -624,16 +631,16 @@ public:
static int localeAwareCompare(const QString& s1, const QStringRef& s2);
// ### Qt6: make inline except for the long long versions
- short toShort(bool *ok=Q_NULLPTR, int base=10) const;
- ushort toUShort(bool *ok=Q_NULLPTR, int base=10) const;
- int toInt(bool *ok=Q_NULLPTR, int base=10) const;
- uint toUInt(bool *ok=Q_NULLPTR, int base=10) const;
- long toLong(bool *ok=Q_NULLPTR, int base=10) const;
- ulong toULong(bool *ok=Q_NULLPTR, int base=10) const;
- qlonglong toLongLong(bool *ok=Q_NULLPTR, int base=10) const;
- qulonglong toULongLong(bool *ok=Q_NULLPTR, int base=10) const;
- float toFloat(bool *ok=Q_NULLPTR) const;
- double toDouble(bool *ok=Q_NULLPTR) const;
+ short toShort(bool *ok=nullptr, int base=10) const;
+ ushort toUShort(bool *ok=nullptr, int base=10) const;
+ int toInt(bool *ok=nullptr, int base=10) const;
+ uint toUInt(bool *ok=nullptr, int base=10) const;
+ long toLong(bool *ok=nullptr, int base=10) const;
+ ulong toULong(bool *ok=nullptr, int base=10) const;
+ qlonglong toLongLong(bool *ok=nullptr, int base=10) const;
+ qulonglong toULongLong(bool *ok=nullptr, int base=10) const;
+ float toFloat(bool *ok=nullptr) const;
+ double toDouble(bool *ok=nullptr) const;
QString &setNum(short, int base=10);
QString &setNum(ushort, int base=10);
@@ -675,8 +682,12 @@ public:
: d(fromAscii_helper(ch, N - 1))
{}
template <int N>
+ QString(char (&)[N]) = delete;
+ template <int N>
inline QString &operator=(const char (&ch)[N])
{ return (*this = fromUtf8(ch, N - 1)); }
+ template <int N>
+ QString &operator=(char (&)[N]) = delete;
#endif
#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline QT_ASCII_CAST_WARN QString(const char *ch)
@@ -1363,7 +1374,7 @@ inline std::wstring QString::toStdWString() const
std::wstring str;
str.resize(length());
-#if defined(_MSC_VER) && _MSC_VER >= 1400
+#ifdef Q_CC_MSVC
// VS2005 crashes if the string is empty
if (!length())
return str;
@@ -1417,7 +1428,7 @@ public:
typedef QString::const_reference const_reference;
// ### Qt 6: make this constructor constexpr, after the destructor is made trivial
- inline QStringRef() : m_string(Q_NULLPTR), m_position(0), m_size(0) {}
+ inline QStringRef() : m_string(nullptr), m_position(0), m_size(0) {}
inline QStringRef(const QString *string, int position, int size);
inline QStringRef(const QString *string);
@@ -1533,10 +1544,10 @@ public:
Q_REQUIRED_RESULT QByteArray toLocal8Bit() const;
Q_REQUIRED_RESULT QVector<uint> toUcs4() const;
- inline void clear() { m_string = Q_NULLPTR; m_position = m_size = 0; }
+ inline void clear() { m_string = nullptr; m_position = m_size = 0; }
QString toString() const;
inline bool isEmpty() const { return m_size == 0; }
- inline bool isNull() const { return m_string == Q_NULLPTR || m_string->isNull(); }
+ inline bool isNull() const { return m_string == nullptr || m_string->isNull(); }
QStringRef appendTo(QString *string) const;
@@ -1576,16 +1587,16 @@ public:
static int localeAwareCompare(const QStringRef &s1, const QStringRef &s2);
Q_REQUIRED_RESULT QStringRef trimmed() const;
- short toShort(bool *ok = Q_NULLPTR, int base = 10) const;
- ushort toUShort(bool *ok = Q_NULLPTR, int base = 10) const;
- int toInt(bool *ok = Q_NULLPTR, int base = 10) const;
- uint toUInt(bool *ok = Q_NULLPTR, int base = 10) const;
- long toLong(bool *ok = Q_NULLPTR, int base = 10) const;
- ulong toULong(bool *ok = Q_NULLPTR, int base = 10) const;
- qlonglong toLongLong(bool *ok = Q_NULLPTR, int base = 10) const;
- qulonglong toULongLong(bool *ok = Q_NULLPTR, int base = 10) const;
- float toFloat(bool *ok = Q_NULLPTR) const;
- double toDouble(bool *ok = Q_NULLPTR) const;
+ short toShort(bool *ok = nullptr, int base = 10) const;
+ ushort toUShort(bool *ok = nullptr, int base = 10) const;
+ int toInt(bool *ok = nullptr, int base = 10) const;
+ uint toUInt(bool *ok = nullptr, int base = 10) const;
+ long toLong(bool *ok = nullptr, int base = 10) const;
+ ulong toULong(bool *ok = nullptr, int base = 10) const;
+ qlonglong toLongLong(bool *ok = nullptr, int base = 10) const;
+ qulonglong toULongLong(bool *ok = nullptr, int base = 10) const;
+ float toFloat(bool *ok = nullptr) const;
+ double toDouble(bool *ok = nullptr) const;
};
Q_DECLARE_TYPEINFO(QStringRef, Q_PRIMITIVE_TYPE);
diff --git a/src/corelib/tools/qstringalgorithms.h b/src/corelib/tools/qstringalgorithms.h
index aaa702301e..8446d85239 100644
--- a/src/corelib/tools/qstringalgorithms.h
+++ b/src/corelib/tools/qstringalgorithms.h
@@ -80,6 +80,12 @@ Q_REQUIRED_RESULT Q_CORE_EXPORT QByteArray convertToLatin1(QStringView str);
Q_REQUIRED_RESULT Q_CORE_EXPORT QByteArray convertToUtf8(QStringView str);
Q_REQUIRED_RESULT Q_CORE_EXPORT QByteArray convertToLocal8Bit(QStringView str);
Q_REQUIRED_RESULT Q_CORE_EXPORT QVector<uint> convertToUcs4(QStringView str);
+Q_REQUIRED_RESULT Q_CORE_EXPORT bool isRightToLeft(QStringView string);
+
+Q_REQUIRED_RESULT Q_CORE_EXPORT bool isAscii(QLatin1String s) Q_DECL_NOTHROW;
+Q_REQUIRED_RESULT Q_CORE_EXPORT bool isAscii(QStringView s) Q_DECL_NOTHROW;
+Q_REQUIRED_RESULT bool isLatin1(QLatin1String s) Q_DECL_NOTHROW; // in qstring.h
+Q_REQUIRED_RESULT Q_CORE_EXPORT bool isLatin1(QStringView s) Q_DECL_NOTHROW;
} // namespace QtPRivate
diff --git a/src/corelib/tools/qstringbuilder.cpp b/src/corelib/tools/qstringbuilder.cpp
index 56ba909e2f..73748e55a3 100644
--- a/src/corelib/tools/qstringbuilder.cpp
+++ b/src/corelib/tools/qstringbuilder.cpp
@@ -73,9 +73,10 @@ QT_BEGIN_NAMESPACE
For building QStrings:
\list
- \li QString, QStringRef,
- \li QChar, QCharRef, QLatin1Char,
+ \li QString, QStringRef, (since 5.10:) QStringView
+ \li QChar, QCharRef, QLatin1Char, (since 5.10:) \c char16_t,
\li QLatin1String,
+ \li (since 5.10:) \c{const char16_t[]} (\c{u"foo"}),
\li QByteArray, \c char, \c{const char[]}.
\endlist
@@ -96,11 +97,11 @@ QT_BEGIN_NAMESPACE
\sa QLatin1String, QString
*/
-/*! \fn QStringBuilder::QStringBuilder(const A &a, const B &b)
+/*! \fn template <typename A, typename B> QStringBuilder<A, B>::QStringBuilder(const A &a, const B &b)
Constructs a QStringBuilder from \a a and \a b.
*/
-/* \fn QStringBuilder::operator%(const A &a, const B &b)
+/* \fn template <typename A, typename B> QStringBuilder<A, B>::operator%(const A &a, const B &b)
Returns a \c QStringBuilder object that is converted to a QString object
when assigned to a variable of QString type or passed to a function that
@@ -111,12 +112,12 @@ QT_BEGIN_NAMESPACE
\c QChar, \c QCharRef, \c QLatin1Char, and \c char.
*/
-/* \fn QByteArray QStringBuilder::toLatin1() const
+/* \fn template <typename A, typename B> QByteArray QStringBuilder<A, B>::toLatin1() const
Returns a Latin-1 representation of the string as a QByteArray. The
returned byte array is undefined if the string contains non-Latin1
characters.
*/
-/* \fn QByteArray QStringBuilder::toUtf8() const
+/* \fn template <typename A, typename B> QByteArray QStringBuilder<A, B>::toUtf8() const
Returns a UTF-8 representation of the string as a QByteArray.
*/
diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h
index 5c6d990314..1d96d70637 100644
--- a/src/corelib/tools/qstringbuilder.h
+++ b/src/corelib/tools/qstringbuilder.h
@@ -187,6 +187,18 @@ template <> struct QConcatenable<char> : private QAbstractConcatenable
{ *out++ = c; }
};
+#if defined(Q_COMPILER_UNICODE_STRINGS)
+template <> struct QConcatenable<char16_t> : private QAbstractConcatenable
+{
+ typedef char16_t type;
+ typedef QString ConvertTo;
+ enum { ExactSize = true };
+ static Q_DECL_CONSTEXPR int size(char16_t) { return 1; }
+ static inline void appendTo(char16_t c, QChar *&out)
+ { *out++ = c; }
+};
+#endif
+
template <> struct QConcatenable<QLatin1Char>
{
typedef QLatin1Char type;
@@ -277,6 +289,20 @@ template <> struct QConcatenable<QStringRef> : private QAbstractConcatenable
}
};
+template <> struct QConcatenable<QStringView> : private QAbstractConcatenable
+{
+ typedef QStringView type;
+ typedef QString ConvertTo;
+ enum { ExactSize = true };
+ static int size(QStringView a) { return a.length(); }
+ static inline void appendTo(QStringView a, QChar *&out)
+ {
+ const auto n = a.size();
+ memcpy(out, a.data(), sizeof(QChar) * n);
+ out += n;
+ }
+};
+
template <int N> struct QConcatenable<const char[N]> : private QAbstractConcatenable
{
typedef const char type[N];
@@ -325,6 +351,46 @@ template <> struct QConcatenable<char *> : QConcatenable<const char*>
typedef char *type;
};
+#if defined(Q_COMPILER_UNICODE_STRINGS)
+template <int N> struct QConcatenable<const char16_t[N]> : private QAbstractConcatenable
+{
+ using type = const char16_t[N];
+ using ConvertTo = QString;
+ enum { ExactSize = true };
+ static int size(const char16_t[N]) { return N - 1; }
+ static void appendTo(const char16_t a[N], QChar *&out)
+ {
+ memcpy(out, a, (N - 1) * sizeof(char16_t));
+ out += N - 1;
+ }
+};
+
+template <int N> struct QConcatenable<char16_t[N]> : QConcatenable<const char16_t[N]>
+{
+ using type = char16_t[N];
+};
+
+template <> struct QConcatenable<const char16_t *> : private QAbstractConcatenable
+{
+ using type = const char16_t *;
+ using ConvertTo = QString;
+ enum { ExactSize = true };
+ static int size(const char16_t *a) { return QStringView(a).length(); };
+ static inline void QT_ASCII_CAST_WARN appendTo(const char16_t *a, QChar *&out)
+ {
+ if (!a)
+ return;
+ while (*a)
+ *out++ = *a++;
+ }
+};
+
+template <> struct QConcatenable<char16_t *> : QConcatenable<const char16_t*>
+{
+ typedef char16_t *type;
+};
+#endif // UNICODE_STRINGS
+
template <> struct QConcatenable<QByteArray> : private QAbstractConcatenable
{
typedef QByteArray type;
diff --git a/src/corelib/tools/qstringview.cpp b/src/corelib/tools/qstringview.cpp
index 6321427a2d..0e3246c72c 100644
--- a/src/corelib/tools/qstringview.cpp
+++ b/src/corelib/tools/qstringview.cpp
@@ -117,6 +117,13 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \typedef QStringView::storage_type
+
+ Alias for \c{char16_t} for non-Windows or if Q_COMPILER_UNICODE_STRINGS
+ is defined. Otherwise, alias for \c{wchar_t}.
+*/
+
+/*!
\typedef QStringView::value_type
Alias for \c{const QChar}. Provided for compatibility with the STL.
@@ -224,7 +231,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringView::QStringView(const Char *str, qsizetype len)
+ \fn template <typename Char> QStringView::QStringView(const Char *str, qsizetype len)
Constructs a string view on \a str with length \a len.
@@ -240,7 +247,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringView::QStringView(const Char *first, const Char *last)
+ \fn template <typename Char> QStringView::QStringView(const Char *first, const Char *last)
Constructs a string view on \a first with length (\a last - \a first).
@@ -260,7 +267,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringView::QStringView(const Char *str)
+ \fn template <typename Char> QStringView::QStringView(const Char *str)
Constructs a string view on \a str. The length is determined
by scanning for the first \c{Char(0)}.
@@ -277,7 +284,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringView::QStringView(const Char (&string)[N])
+ \fn template <typename Char, size_t N> QStringView::QStringView(const Char (&string)[N])
Constructs a string view on the character string literal \a string.
The length is set to \c{N-1}, excluding the trailing \{Char(0)}.
@@ -319,7 +326,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QStringView::QStringView(const StdBasicString &str)
+ \fn template <typename StdBasicString> QStringView::QStringView(const StdBasicString &str)
Constructs a string view on \a str. The length is taken from \c{str.size()}.
@@ -364,8 +371,7 @@ QT_BEGIN_NAMESPACE
Returns a const pointer to the first character in the string.
- \c{storage_type} is \c{char16_t}, except on MSVC 2013 (which lacks \c char16_t support),
- where it is \c{wchar_t} instead.
+ \c{storage_type} is \c{char16_t}.
\note The character array represented by the return value is \e not null-terminated.
@@ -713,7 +719,7 @@ QT_BEGIN_NAMESPACE
The behavior is undefined if the string contains non-Latin1 characters.
- \sa toUtf8(), toLocal8Bit(), QTextCodec, qConvertToLatin1()
+ \sa toUtf8(), toLocal8Bit(), QTextCodec
*/
/*!
@@ -739,7 +745,7 @@ QT_BEGIN_NAMESPACE
UTF-8 is a Unicode codec and can represent all characters in a Unicode
string like QString.
- \sa toLatin1(), toLocal8Bit(), QTextCodec, qConvertToUtf8()
+ \sa toLatin1(), toLocal8Bit(), QTextCodec
*/
/*!
@@ -758,7 +764,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn qToStringViewIgnoringNull(const QStringLike &s);
+ \fn template <typename QStringLike> qToStringViewIgnoringNull(const QStringLike &s);
\since 5.10
\internal
@@ -772,4 +778,13 @@ QT_BEGIN_NAMESPACE
\sa QString::isNull(), QStringRef::isNull(), QStringView
*/
+/*!
+ \fn bool QStringView::isRightToLeft() const
+ \since 5.11
+
+ Returns \c true if the string is read right to left.
+
+ \sa QString::isRightToLeft()
+*/
+
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qstringview.h b/src/corelib/tools/qstringview.h
index ef442e5b65..4f7d48fe1d 100644
--- a/src/corelib/tools/qstringview.h
+++ b/src/corelib/tools/qstringview.h
@@ -183,7 +183,7 @@ public:
Q_DECL_CONSTEXPR QStringView(const Char *f, const Char *l)
: QStringView(f, l - f) {}
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template <typename Char, size_t N>
Q_DECL_CONSTEXPR QStringView(const Char (&array)[N]) Q_DECL_NOTHROW;
@@ -199,7 +199,7 @@ public:
: QStringView(str, str ? lengthHelperPointer(str) : 0) {}
#endif
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
QStringView(const QString &str) Q_DECL_NOTHROW;
QStringView(const QStringRef &str) Q_DECL_NOTHROW;
#else
@@ -266,6 +266,9 @@ public:
Q_REQUIRED_RESULT bool endsWith(QChar c, Qt::CaseSensitivity cs) const Q_DECL_NOTHROW
{ return QtPrivate::endsWith(*this, QStringView(&c, 1), cs); }
+ Q_REQUIRED_RESULT bool isRightToLeft() const Q_DECL_NOTHROW
+ { return QtPrivate::isRightToLeft(*this); }
+
//
// STL compatibility API:
//
diff --git a/src/corelib/tools/qtextboundaryfinder.h b/src/corelib/tools/qtextboundaryfinder.h
index d021df3f2c..b1e5008f54 100644
--- a/src/corelib/tools/qtextboundaryfinder.h
+++ b/src/corelib/tools/qtextboundaryfinder.h
@@ -74,7 +74,7 @@ public:
Q_DECLARE_FLAGS( BoundaryReasons, BoundaryReason )
QTextBoundaryFinder(BoundaryType type, const QString &string);
- QTextBoundaryFinder(BoundaryType type, const QChar *chars, int length, unsigned char *buffer = Q_NULLPTR, int bufferSize = 0);
+ QTextBoundaryFinder(BoundaryType type, const QChar *chars, int length, unsigned char *buffer = nullptr, int bufferSize = 0);
inline bool isValid() const { return d; }
diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp
index e70e7f8e16..fa6c45aa11 100644
--- a/src/corelib/tools/qtimeline.cpp
+++ b/src/corelib/tools/qtimeline.cpp
@@ -269,7 +269,7 @@ void QTimeLinePrivate::setCurrentTime(int msecs)
*/
/*!
- \fn QTimeLine::valueChanged(qreal value)
+ \fn void QTimeLine::valueChanged(qreal value)
QTimeLine emits this signal at regular intervals when in \l Running state,
but only if the current value changes. \a value is the current value. \a value is
@@ -279,7 +279,7 @@ void QTimeLinePrivate::setCurrentTime(int msecs)
*/
/*!
- \fn QTimeLine::frameChanged(int frame)
+ \fn void QTimeLine::frameChanged(int frame)
QTimeLine emits this signal at regular intervals when in \l Running state,
but only if the current frame changes. \a frame is the current frame number.
@@ -288,14 +288,14 @@ void QTimeLinePrivate::setCurrentTime(int msecs)
*/
/*!
- \fn QTimeLine::stateChanged(QTimeLine::State newState)
+ \fn void QTimeLine::stateChanged(QTimeLine::State newState)
This signal is emitted whenever QTimeLine's state changes. The new state
is \a newState.
*/
/*!
- \fn QTimeLine::finished()
+ \fn void QTimeLine::finished()
This signal is emitted when QTimeLine finishes (i.e., reaches the end of
its time line), and does not loop.
diff --git a/src/corelib/tools/qtimeline.h b/src/corelib/tools/qtimeline.h
index f0e9a32e4d..d9982bdb58 100644
--- a/src/corelib/tools/qtimeline.h
+++ b/src/corelib/tools/qtimeline.h
@@ -76,7 +76,7 @@ public:
CosineCurve
};
- explicit QTimeLine(int duration = 1000, QObject *parent = Q_NULLPTR);
+ explicit QTimeLine(int duration = 1000, QObject *parent = nullptr);
virtual ~QTimeLine();
State state() const;
@@ -127,7 +127,7 @@ Q_SIGNALS:
void finished(QPrivateSignal);
protected:
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *event) override;
private:
Q_DISABLE_COPY(QTimeLine)
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index 3b41e7670c..65c304bcf7 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -225,6 +225,20 @@ Q_GLOBAL_STATIC(QTimeZoneSingleton, global_tz);
*/
/*!
+ \enum QTimeZone::anonymous
+
+ Sane UTC offsets range from -14 to +14 hours.
+ No known zone > 12 hrs West of Greenwich (Baker Island, USA).
+ No known zone > 14 hrs East of Greenwich (Kiritimati, Christmas Island, Kiribati).
+
+ \value MinUtcOffsetSecs
+ -14 * 3600,
+
+ \value MaxUtcOffsetSecs
+ +14 * 3600
+*/
+
+/*!
\enum QTimeZone::TimeType
The type of time zone time, for example when requesting the name. In time
diff --git a/src/corelib/tools/qtimezoneprivate.cpp b/src/corelib/tools/qtimezoneprivate.cpp
index e45dd48de0..1a5135f103 100644
--- a/src/corelib/tools/qtimezoneprivate.cpp
+++ b/src/corelib/tools/qtimezoneprivate.cpp
@@ -329,7 +329,7 @@ QTimeZonePrivate::Data QTimeZonePrivate::dataForLocalTime(qint64 forLocalMSecs,
// Only around the transition times might we need another.
Data tran = previousTransition(forLocalMSecs - sixteenHoursInMSecs);
Q_ASSERT(forLocalMSecs < 0 || // Pre-epoch TZ info may be unavailable
- forLocalMSecs >= tran.atMSecsSinceEpoch + tran.offsetFromUtc * 1000);
+ forLocalMSecs - tran.offsetFromUtc * 1000 >= tran.atMSecsSinceEpoch);
Data nextTran = nextTransition(tran.atMSecsSinceEpoch);
/*
Now walk those forward until they bracket forLocalMSecs with transitions.
@@ -363,7 +363,7 @@ QTimeZonePrivate::Data QTimeZonePrivate::dataForLocalTime(qint64 forLocalMSecs,
fail life's tricky.
*/
Q_ASSERT(forLocalMSecs < 0
- || forLocalMSecs > tran.atMSecsSinceEpoch + tran.offsetFromUtc * 1000);
+ || forLocalMSecs - tran.offsetFromUtc * 1000 > tran.atMSecsSinceEpoch);
const qint64 nextStart = nextTran.atMSecsSinceEpoch;
// Work out the UTC values it might make sense to return:
nextTran.atMSecsSinceEpoch = forLocalMSecs - nextTran.offsetFromUtc * 1000;
diff --git a/src/corelib/tools/qtimezoneprivate_p.h b/src/corelib/tools/qtimezoneprivate_p.h
index 83e06ffcb0..4d357111f2 100644
--- a/src/corelib/tools/qtimezoneprivate_p.h
+++ b/src/corelib/tools/qtimezoneprivate_p.h
@@ -171,7 +171,7 @@ Q_DECLARE_TYPEINFO(QTimeZonePrivate::Data, Q_MOVABLE_TYPE);
template<> QTimeZonePrivate *QSharedDataPointer<QTimeZonePrivate>::clone();
-class Q_AUTOTEST_EXPORT QUtcTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+class Q_AUTOTEST_EXPORT QUtcTimeZonePrivate final : public QTimeZonePrivate
{
public:
// Create default UTC time zone
@@ -189,26 +189,26 @@ public:
QUtcTimeZonePrivate *clone() const override;
- Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data data(qint64 forMSecsSinceEpoch) const override;
- QLocale::Country country() const Q_DECL_OVERRIDE;
- QString comment() const Q_DECL_OVERRIDE;
+ QLocale::Country country() const override;
+ QString comment() const override;
QString displayName(QTimeZone::TimeType timeType,
QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
- QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const override;
- int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
- QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+ QByteArray systemTimeZoneId() const override;
- QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
- QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
- QList<QByteArray> availableTimeZoneIds(int utcOffset) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const override;
+ QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const override;
+ QList<QByteArray> availableTimeZoneIds(int utcOffset) const override;
- void serialize(QDataStream &ds) const Q_DECL_OVERRIDE;
+ void serialize(QDataStream &ds) const override;
private:
void init(const QByteArray &zoneId);
@@ -224,7 +224,7 @@ private:
};
#if QT_CONFIG(icu)
-class Q_AUTOTEST_EXPORT QIcuTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+class Q_AUTOTEST_EXPORT QIcuTimeZonePrivate final : public QTimeZonePrivate
{
public:
// Create default time zone
@@ -237,27 +237,27 @@ public:
QIcuTimeZonePrivate *clone() const override;
QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
- QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const override;
- int offsetFromUtc(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
- bool hasDaylightTime() const Q_DECL_OVERRIDE;
- bool isDaylightTime(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasDaylightTime() const override;
+ bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
- Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data data(qint64 forMSecsSinceEpoch) const override;
- bool hasTransitions() const Q_DECL_OVERRIDE;
- Data nextTransition(qint64 afterMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- Data previousTransition(qint64 beforeMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasTransitions() const override;
+ Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
+ Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
- QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+ QByteArray systemTimeZoneId() const override;
- QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
- QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
- QList<QByteArray> availableTimeZoneIds(int offsetFromUtc) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const override;
+ QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const override;
+ QList<QByteArray> availableTimeZoneIds(int offsetFromUtc) const override;
private:
void init(const QByteArray &ianaId);
@@ -285,7 +285,7 @@ Q_DECL_CONSTEXPR inline bool operator==(const QTzTransitionRule &lhs, const QTzT
Q_DECL_CONSTEXPR inline bool operator!=(const QTzTransitionRule &lhs, const QTzTransitionRule &rhs) Q_DECL_NOTHROW
{ return !operator==(lhs, rhs); }
-class Q_AUTOTEST_EXPORT QTzTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+class Q_AUTOTEST_EXPORT QTzTimeZonePrivate final : public QTimeZonePrivate
{
QTzTimeZonePrivate(const QTzTimeZonePrivate &) = default;
public:
@@ -297,34 +297,34 @@ public:
QTzTimeZonePrivate *clone() const override;
- QLocale::Country country() const Q_DECL_OVERRIDE;
- QString comment() const Q_DECL_OVERRIDE;
+ QLocale::Country country() const override;
+ QString comment() const override;
QString displayName(qint64 atMSecsSinceEpoch,
QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
QString displayName(QTimeZone::TimeType timeType,
QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
- QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const override;
- int offsetFromUtc(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
- bool hasDaylightTime() const Q_DECL_OVERRIDE;
- bool isDaylightTime(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasDaylightTime() const override;
+ bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
- Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data data(qint64 forMSecsSinceEpoch) const override;
- bool hasTransitions() const Q_DECL_OVERRIDE;
- Data nextTransition(qint64 afterMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- Data previousTransition(qint64 beforeMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasTransitions() const override;
+ Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
+ Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
- QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+ QByteArray systemTimeZoneId() const override;
- QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
- QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const override;
+ QList<QByteArray> availableTimeZoneIds(QLocale::Country country) const override;
private:
void init(const QByteArray &ianaId);
@@ -341,7 +341,7 @@ private:
#endif // Q_OS_UNIX
#ifdef Q_OS_MAC
-class Q_AUTOTEST_EXPORT QMacTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+class Q_AUTOTEST_EXPORT QMacTimeZonePrivate final : public QTimeZonePrivate
{
public:
// Create default time zone
@@ -353,28 +353,28 @@ public:
QMacTimeZonePrivate *clone() const override;
- QString comment() const Q_DECL_OVERRIDE;
+ QString comment() const override;
QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
- QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const override;
- int offsetFromUtc(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
- bool hasDaylightTime() const Q_DECL_OVERRIDE;
- bool isDaylightTime(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasDaylightTime() const override;
+ bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
- Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data data(qint64 forMSecsSinceEpoch) const override;
- bool hasTransitions() const Q_DECL_OVERRIDE;
- Data nextTransition(qint64 afterMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- Data previousTransition(qint64 beforeMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasTransitions() const override;
+ Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
+ Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
- QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+ QByteArray systemTimeZoneId() const override;
- QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const override;
NSTimeZone *nsTimeZone() const;
@@ -386,7 +386,7 @@ private:
#endif // Q_OS_MAC
#ifdef Q_OS_WIN
-class Q_AUTOTEST_EXPORT QWinTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+class Q_AUTOTEST_EXPORT QWinTimeZonePrivate final : public QTimeZonePrivate
{
public:
struct QWinTransitionRule {
@@ -406,34 +406,33 @@ public:
QWinTimeZonePrivate *clone() const override;
- QString comment() const Q_DECL_OVERRIDE;
+ QString comment() const override;
QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
- QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const override;
- int offsetFromUtc(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
- bool hasDaylightTime() const Q_DECL_OVERRIDE;
- bool isDaylightTime(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasDaylightTime() const override;
+ bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
- Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data data(qint64 forMSecsSinceEpoch) const override;
- bool hasTransitions() const Q_DECL_OVERRIDE;
- Data nextTransition(qint64 afterMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- Data previousTransition(qint64 beforeMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasTransitions() const override;
+ Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
+ Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
- QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+ QByteArray systemTimeZoneId() const override;
- QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const override;
private:
void init(const QByteArray &ianaId);
- QWinTransitionRule ruleForYear(int year) const;
QTimeZonePrivate::Data ruleToData(const QWinTransitionRule &rule, qint64 atMSecsSinceEpoch,
- QTimeZone::TimeType type) const;
+ QTimeZone::TimeType type, bool fakeDst = false) const;
QByteArray m_windowsId;
QString m_displayName;
@@ -444,7 +443,7 @@ private:
#endif // Q_OS_WIN
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
-class QAndroidTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+class QAndroidTimeZonePrivate final : public QTimeZonePrivate
{
public:
// Create default time zone
@@ -457,25 +456,25 @@ public:
QAndroidTimeZonePrivate *clone() const override;
QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
- const QLocale &locale) const Q_DECL_OVERRIDE;
- QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ const QLocale &locale) const override;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const override;
- int offsetFromUtc(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int offsetFromUtc(qint64 atMSecsSinceEpoch) const override;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const override;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const override;
- bool hasDaylightTime() const Q_DECL_OVERRIDE;
- bool isDaylightTime(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasDaylightTime() const override;
+ bool isDaylightTime(qint64 atMSecsSinceEpoch) const override;
- Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data data(qint64 forMSecsSinceEpoch) const override;
- bool hasTransitions() const Q_DECL_OVERRIDE;
- Data nextTransition(qint64 afterMSecsSinceEpoch) const Q_DECL_OVERRIDE;
- Data previousTransition(qint64 beforeMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ bool hasTransitions() const override;
+ Data nextTransition(qint64 afterMSecsSinceEpoch) const override;
+ Data previousTransition(qint64 beforeMSecsSinceEpoch) const override;
- QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+ QByteArray systemTimeZoneId() const override;
- QList<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+ QList<QByteArray> availableTimeZoneIds() const override;
private:
void init(const QByteArray &zoneId);
diff --git a/src/corelib/tools/qtimezoneprivate_win.cpp b/src/corelib/tools/qtimezoneprivate_win.cpp
index a50227d3cc..8bde07c710 100644
--- a/src/corelib/tools/qtimezoneprivate_win.cpp
+++ b/src/corelib/tools/qtimezoneprivate_win.cpp
@@ -92,9 +92,11 @@ typedef struct _REG_TZI_FORMAT
SYSTEMTIME DaylightDate;
} REG_TZI_FORMAT;
+namespace {
+
// Fast and reliable conversion from msecs to date for all values
// Adapted from QDateTime msecsToDate
-static QDate msecsToDate(qint64 msecs)
+QDate msecsToDate(qint64 msecs)
{
qint64 jd = JULIAN_DAY_FOR_EPOCH;
@@ -111,7 +113,7 @@ static QDate msecsToDate(qint64 msecs)
return QDate::fromJulianDay(jd);
}
-static bool equalSystemtime(const SYSTEMTIME &t1, const SYSTEMTIME &t2)
+bool equalSystemtime(const SYSTEMTIME &t1, const SYSTEMTIME &t2)
{
return (t1.wYear == t2.wYear
&& t1.wMonth == t2.wMonth
@@ -123,7 +125,7 @@ static bool equalSystemtime(const SYSTEMTIME &t1, const SYSTEMTIME &t2)
&& t1.wMilliseconds == t2.wMilliseconds);
}
-static bool equalTzi(const TIME_ZONE_INFORMATION &tzi1, const TIME_ZONE_INFORMATION &tzi2)
+bool equalTzi(const TIME_ZONE_INFORMATION &tzi1, const TIME_ZONE_INFORMATION &tzi2)
{
return(tzi1.Bias == tzi2.Bias
&& tzi1.StandardBias == tzi2.StandardBias
@@ -135,13 +137,13 @@ static bool equalTzi(const TIME_ZONE_INFORMATION &tzi1, const TIME_ZONE_INFORMAT
}
#ifdef QT_USE_REGISTRY_TIMEZONE
-static bool openRegistryKey(const QString &keyPath, HKEY *key)
+bool openRegistryKey(const QString &keyPath, HKEY *key)
{
return (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (const wchar_t*)keyPath.utf16(), 0, KEY_READ, key)
== ERROR_SUCCESS);
}
-static QString readRegistryString(const HKEY &key, const wchar_t *value)
+QString readRegistryString(const HKEY &key, const wchar_t *value)
{
wchar_t buffer[MAX_PATH] = {0};
DWORD size = sizeof(wchar_t) * MAX_PATH;
@@ -149,7 +151,7 @@ static QString readRegistryString(const HKEY &key, const wchar_t *value)
return QString::fromWCharArray(buffer);
}
-static int readRegistryValue(const HKEY &key, const wchar_t *value)
+int readRegistryValue(const HKEY &key, const wchar_t *value)
{
DWORD buffer;
DWORD size = sizeof(buffer);
@@ -157,8 +159,8 @@ static int readRegistryValue(const HKEY &key, const wchar_t *value)
return buffer;
}
-static QWinTimeZonePrivate::QWinTransitionRule readRegistryRule(const HKEY &key,
- const wchar_t *value, bool *ok)
+QWinTimeZonePrivate::QWinTransitionRule readRegistryRule(const HKEY &key,
+ const wchar_t *value, bool *ok)
{
*ok = false;
QWinTimeZonePrivate::QWinTransitionRule rule;
@@ -176,7 +178,7 @@ static QWinTimeZonePrivate::QWinTransitionRule readRegistryRule(const HKEY &key,
return rule;
}
-static TIME_ZONE_INFORMATION getRegistryTzi(const QByteArray &windowsId, bool *ok)
+TIME_ZONE_INFORMATION getRegistryTzi(const QByteArray &windowsId, bool *ok)
{
*ok = false;
TIME_ZONE_INFORMATION tzi;
@@ -223,7 +225,7 @@ typedef QHash<QByteArray, QWinDynamicTimeZone> QWinRTTimeZoneHash;
Q_GLOBAL_STATIC(QWinRTTimeZoneHash, gTimeZones)
-static void enumerateTimeZones()
+void enumerateTimeZones()
{
DYNAMIC_TIME_ZONE_INFORMATION dtzInfo;
quint32 index = 0;
@@ -244,7 +246,7 @@ static void enumerateTimeZones()
}
}
-static DYNAMIC_TIME_ZONE_INFORMATION dynamicInfoForId(const QByteArray &windowsId)
+DYNAMIC_TIME_ZONE_INFORMATION dynamicInfoForId(const QByteArray &windowsId)
{
DYNAMIC_TIME_ZONE_INFORMATION dtzInfo;
quint32 index = 0;
@@ -259,9 +261,39 @@ static DYNAMIC_TIME_ZONE_INFORMATION dynamicInfoForId(const QByteArray &windowsI
}
return dtzInfo;
}
+
+QWinTimeZonePrivate::QWinTransitionRule
+readDynamicRule(DYNAMIC_TIME_ZONE_INFORMATION &dtzi, int year, bool *ok)
+{
+ TIME_ZONE_INFORMATION tzi;
+ QWinTimeZonePrivate::QWinTransitionRule rule;
+ *ok = GetTimeZoneInformationForYear(year, &dtzi, &tzi);
+ if (*ok) {
+ rule.startYear = 0;
+ rule.standardTimeBias = tzi.Bias + tzi.StandardBias;
+ rule.daylightTimeBias = tzi.Bias + tzi.DaylightBias - rule.standardTimeBias;
+ rule.standardTimeRule = tzi.StandardDate;
+ rule.daylightTimeRule = tzi.DaylightDate;
+ }
+ return rule;
+}
#endif // QT_USE_REGISTRY_TIMEZONE
-static QList<QByteArray> availableWindowsIds()
+bool isSameRule(const QWinTimeZonePrivate::QWinTransitionRule &last,
+ const QWinTimeZonePrivate::QWinTransitionRule &rule)
+{
+ // In particular, when this is true and either wYear is 0, so is the other;
+ // so if one rule is recurrent and they're equal, so is the other. If
+ // either rule *isn't* recurrent, it has non-0 wYear which shall be
+ // different from the other's. Note that we don't compare .startYear, since
+ // that will always be different.
+ return equalSystemtime(last.standardTimeRule, rule.standardTimeRule)
+ && equalSystemtime(last.daylightTimeRule, rule.daylightTimeRule)
+ && last.standardTimeBias == rule.standardTimeBias
+ && last.daylightTimeBias == rule.daylightTimeBias;
+}
+
+QList<QByteArray> availableWindowsIds()
{
#ifdef QT_USE_REGISTRY_TIMEZONE
// TODO Consider caching results in a global static, very unlikely to change.
@@ -288,7 +320,7 @@ static QList<QByteArray> availableWindowsIds()
#endif // QT_USE_REGISTRY_TIMEZONE
}
-static QByteArray windowsSystemZoneId()
+QByteArray windowsSystemZoneId()
{
#ifdef QT_USE_REGISTRY_TIMEZONE
// On Vista and later is held in the value TimeZoneKeyName in key currTzRegPath
@@ -322,66 +354,141 @@ static QByteArray windowsSystemZoneId()
return QTimeZonePrivate::utcQByteArray();
}
-static QDate calculateTransitionLocalDate(const SYSTEMTIME &rule, int year)
+QDate calculateTransitionLocalDate(const SYSTEMTIME &rule, int year)
{
// If month is 0 then there is no date
if (rule.wMonth == 0)
return QDate();
- SYSTEMTIME time = rule;
- // If the year isn't set, then the rule date is relative
- if (time.wYear == 0) {
- if (time.wDayOfWeek == 0)
- time.wDayOfWeek = 7;
- QDate date(year, time.wMonth, 1);
- int startDow = date.dayOfWeek();
- if (startDow <= time.wDayOfWeek)
- date = date.addDays(time.wDayOfWeek - startDow - 7);
- else
- date = date.addDays(time.wDayOfWeek - startDow);
- date = date.addDays(time.wDay * 7);
- while (date.month() != time.wMonth)
- date = date.addDays(-7);
- return date;
+ // Interpret SYSTEMTIME according to the slightly quirky rules in:
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms725481(v=vs.85).aspx
+
+ // If the year is set, the rule gives an absolute date:
+ if (rule.wYear)
+ return QDate(rule.wYear, rule.wMonth, rule.wDay);
+
+ // Otherwise, the rule date is annual and relative:
+ const int dayOfWeek = rule.wDayOfWeek == 0 ? 7 : rule.wDayOfWeek;
+ QDate date(year, rule.wMonth, 1);
+ // How many days before was last dayOfWeek before target month ?
+ int adjust = dayOfWeek - date.dayOfWeek(); // -6 <= adjust < 7
+ if (adjust >= 0) // Ensure -7 <= adjust < 0:
+ adjust -= 7;
+ // Normally, wDay is day-within-month; but here it is 1 for the first
+ // of the given dayOfWeek in the month, through 4 for the fourth or ...
+ adjust += (rule.wDay < 1 ? 1 : rule.wDay > 4 ? 5 : rule.wDay) * 7;
+ date = date.addDays(adjust);
+ // ... 5 for the last; so back up by weeks to get within the month:
+ if (date.month() != rule.wMonth) {
+ Q_ASSERT(rule.wDay > 4);
+ // (Note that, with adjust < 0, date <= 28th of our target month
+ // is guaranteed when wDay <= 4, or after our first -7 here.)
+ date = date.addDays(-7);
+ Q_ASSERT(date.month() == rule.wMonth);
}
-
- // If the year is set then is an absolute date
- return QDate(time.wYear, time.wMonth, time.wDay);
+ return date;
}
// Converts a date/time value into msecs
-static inline qint64 timeToMSecs(const QDate &date, const QTime &time)
+inline qint64 timeToMSecs(const QDate &date, const QTime &time)
{
return ((date.toJulianDay() - JULIAN_DAY_FOR_EPOCH) * MSECS_PER_DAY)
+ time.msecsSinceStartOfDay();
}
-static void calculateTransitionsForYear(const QWinTimeZonePrivate::QWinTransitionRule &rule, int year,
- qint64 *stdMSecs, qint64 *dstMSecs)
-{
- // TODO Consider caching the calculated values
- // The local time in Daylight Time when switches to Standard Time
- QDate standardDate = calculateTransitionLocalDate(rule.standardTimeRule, year);
- QTime standardTime = QTime(rule.standardTimeRule.wHour, rule.standardTimeRule.wMinute,
- rule.standardTimeRule.wSecond);
- if (standardDate.isValid() && standardTime.isValid()) {
- *stdMSecs = timeToMSecs(standardDate, standardTime)
- + ((rule.standardTimeBias + rule.daylightTimeBias) * 60000);
- } else {
- *stdMSecs = QTimeZonePrivate::invalidMSecs();
+qint64 calculateTransitionForYear(const SYSTEMTIME &rule, int year, int bias)
+{
+ // TODO Consider caching the calculated values - i.e. replace SYSTEMTIME in
+ // WinTransitionRule; do this in init() once and store the results.
+ const QDate date = calculateTransitionLocalDate(rule, year);
+ const QTime time = QTime(rule.wHour, rule.wMinute, rule.wSecond);
+ if (date.isValid() && time.isValid())
+ return timeToMSecs(date, time) + bias * 60000;
+ return QTimeZonePrivate::invalidMSecs();
+}
+
+struct TransitionTimePair
+{
+ // Transition times after the epoch, in ms:
+ qint64 std, dst;
+ // If either is invalidMSecs(), which shall then be < the other, there is no
+ // DST and the other describes a change in actual standard offset.
+
+ TransitionTimePair(const QWinTimeZonePrivate::QWinTransitionRule &rule,
+ int year, int oldYearOffset)
+ // The local time in Daylight Time of the switch to Standard Time
+ : std(calculateTransitionForYear(rule.standardTimeRule, year,
+ rule.standardTimeBias + rule.daylightTimeBias)),
+ // The local time in Standard Time of the switch to Daylight Time
+ dst(calculateTransitionForYear(rule.daylightTimeRule, year, rule.standardTimeBias))
+ {
+ /*
+ Check for potential "fake DST", used by MS's APIs because the
+ TIME_ZONE_INFORMATION spec either expresses no transitions in the
+ year, or expresses a transition of each kind, even if standard time
+ did change in a year with no DST. We've seen year-start fake-DST
+ (whose offset matches prior standard offset, in which the previous
+ year ended); and conjecture that similar might be used at a year-end.
+ (This might be used for a southern-hemisphere zone, where the start of
+ the year usually is in DST, when applicable.) Note that, here, wDay
+ identifies an instance of a given day-of-week in the month, with 5
+ meaning last.
+
+ Either the alleged standardTimeRule or the alleged daylightTimeRule
+ may be faked; either way, the transition is actually a change to the
+ current standard offset; but the unfaked half of the rule contains the
+ useful bias data, so we have to go along with its lies.
+
+ Example: Russia/Moscow
+ Format: -bias +( -stdBias, stdDate | -dstBias, dstDate ) notes
+ Last year of DST, 2010: 180 +( 0, 0-10-5 3:0 | 60, 0-3-5 2:0 ) normal DST
+ Zone change in 2011: 180 +( 0, 0-1-1 0:0 | 60 0-3-5 2:0 ) fake DST at transition
+ Fixed standard in 2012: 240 +( 0, 0-0-0 0:0 | 60, 0-0-0 0:0 ) standard time years
+ Zone change in 2014: 180 +( 0, 0-10-5 2:0 | 60, 0-1-1 0:0 ) fake DST at year-start
+ The last of these is missing on Win7 VMs (too old to know about it).
+ */
+ if (rule.daylightTimeRule.wMonth == 1 && rule.daylightTimeRule.wDay == 1) {
+ // Fake "DST transition" at start of year producing the same offset as
+ // previous year ended in.
+ if (rule.standardTimeBias + rule.daylightTimeBias == oldYearOffset)
+ dst = QTimeZonePrivate::invalidMSecs();
+ } else if (rule.daylightTimeRule.wMonth == 12 && rule.daylightTimeRule.wDay > 3) {
+ // Similar, conjectured, for end of year, not changing offset.
+ if (rule.daylightTimeBias == 0)
+ dst = QTimeZonePrivate::invalidMSecs();
+ }
+ if (rule.standardTimeRule.wMonth == 1 && rule.standardTimeRule.wDay == 1) {
+ // Fake "transition out of DST" at start of year producing the same
+ // offset as previous year ended in.
+ if (rule.standardTimeBias == oldYearOffset)
+ std = QTimeZonePrivate::invalidMSecs();
+ } else if (rule.standardTimeRule.wMonth == 12 && rule.standardTimeRule.wDay > 3) {
+ // Similar, conjectured, for end of year, not changing offset.
+ if (rule.daylightTimeBias == 0)
+ std = QTimeZonePrivate::invalidMSecs();
+ }
}
- // The local time in Standard Time when switches to Daylight Time
- QDate daylightDate = calculateTransitionLocalDate(rule.daylightTimeRule, year);
- QTime daylightTime = QTime(rule.daylightTimeRule.wHour, rule.daylightTimeRule.wMinute,
- rule.daylightTimeRule.wSecond);
- if (daylightDate.isValid() && daylightTime.isValid())
- *dstMSecs = timeToMSecs(daylightDate, daylightTime) + (rule.standardTimeBias * 60000);
- else
- *dstMSecs = QTimeZonePrivate::invalidMSecs();
+ bool fakesDst() const
+ {
+ return std == QTimeZonePrivate::invalidMSecs()
+ || dst == QTimeZonePrivate::invalidMSecs();
+ }
+};
+
+int yearEndOffset(const QWinTimeZonePrivate::QWinTransitionRule &rule, int year)
+{
+ int offset = rule.standardTimeBias;
+ // Only needed to help another TransitionTimePair work out year + 1's start
+ // offset; and the oldYearOffset we use only affects an alleged transition
+ // at the *start* of this year, so it doesn't matter if we guess wrong here:
+ TransitionTimePair pair(rule, year, offset);
+ if (pair.dst > pair.std)
+ offset += rule.daylightTimeBias;
+ return offset;
}
-static QLocale::Country userCountry()
+QLocale::Country userCountry()
{
const GEOID id = GetUserGeoID(GEOCLASS_NATION);
wchar_t code[3];
@@ -390,6 +497,36 @@ static QLocale::Country userCountry()
: QLocale::AnyCountry;
}
+// Index of last rule in rules with .startYear <= year:
+int ruleIndexForYear(const QList<QWinTimeZonePrivate::QWinTransitionRule> &rules, int year)
+{
+ if (rules.last().startYear <= year)
+ return rules.count() - 1;
+ // We don't have a rule for before the first, but the first is the best we can offer:
+ if (rules.first().startYear > year)
+ return 0;
+
+ // Otherwise, use binary chop:
+ int lo = 0, hi = rules.count();
+ // invariant: rules[i].startYear <= year < rules[hi].startYear
+ // subject to treating rules[rules.count()] as "off the end of time"
+ while (lo + 1 < hi) {
+ const int mid = (lo + hi) / 2;
+ // lo + 2 <= hi, so lo + 1 <= mid <= hi - 1, so lo < mid < hi
+ // In particular, mid < rules.count()
+ const int midYear = rules.at(mid).startYear;
+ if (midYear > year)
+ hi = mid;
+ else if (midYear < year)
+ lo = mid;
+ else // No two rules have the same startYear:
+ return mid;
+ }
+ return lo;
+}
+
+} // anonymous namespace
+
// Create the system default time zone
QWinTimeZonePrivate::QWinTimeZonePrivate()
: QTimeZonePrivate()
@@ -430,6 +567,7 @@ void QWinTimeZonePrivate::init(const QByteArray &ianaId)
m_id = ianaId;
}
+ bool badMonth = false; // Only warn once per zone, if at all.
if (!m_windowsId.isEmpty()) {
#ifdef QT_USE_REGISTRY_TIMEZONE
// Open the base TZI for the time zone
@@ -453,16 +591,28 @@ void QWinTimeZonePrivate::init(const QByteArray &ianaId)
QWinTransitionRule rule = readRegistryRule(dynamicKey,
(LPCWSTR)QString::number(year).utf16(),
&ruleOk);
- rule.startYear = year;
- if (ruleOk)
+ if (ruleOk
+ // Don't repeat a recurrent rule:
+ && (m_tranRules.isEmpty()
+ || !isSameRule(m_tranRules.last(), rule))) {
+ if (!badMonth
+ && (rule.standardTimeRule.wMonth == 0)
+ != (rule.daylightTimeRule.wMonth == 0)) {
+ badMonth = true;
+ qWarning("MS registry TZ API violated its wMonth constraint;"
+ "this may cause mistakes for %s from %d",
+ ianaId.constData(), year);
+ }
+ rule.startYear = m_tranRules.isEmpty() ? MIN_YEAR : year;
m_tranRules.append(rule);
+ }
}
RegCloseKey(dynamicKey);
} else {
// No dynamic data so use the base data
bool ruleOk;
QWinTransitionRule rule = readRegistryRule(baseKey, L"TZI", &ruleOk);
- rule.startYear = 1970;
+ rule.startYear = MIN_YEAR;
if (ruleOk)
m_tranRules.append(rule);
}
@@ -479,20 +629,36 @@ void QWinTimeZonePrivate::init(const QByteArray &ianaId)
DWORD firstYear = 0;
DWORD lastYear = 0;
DYNAMIC_TIME_ZONE_INFORMATION dtzi = dynamicInfoForId(m_windowsId);
- GetDynamicTimeZoneInformationEffectiveYears(&dtzi, &firstYear, &lastYear);
- // If there is no dynamic information, you can still query for
- // year 0, which helps simplifying following part
- for (DWORD year = firstYear; year <= lastYear; ++year) {
- TIME_ZONE_INFORMATION tzi;
- if (!GetTimeZoneInformationForYear(year, &dtzi, &tzi))
- continue;
- QWinTransitionRule rule;
- rule.standardTimeBias = tzi.Bias + tzi.StandardBias;
- rule.daylightTimeBias = tzi.Bias + tzi.DaylightBias - rule.standardTimeBias;
- rule.standardTimeRule = tzi.StandardDate;
- rule.daylightTimeRule = tzi.DaylightDate;
- rule.startYear = year;
- m_tranRules.append(rule);
+ if (GetDynamicTimeZoneInformationEffectiveYears(&dtzi, &firstYear, &lastYear)
+ == ERROR_SUCCESS && firstYear < lastYear) {
+ for (DWORD year = firstYear; year <= lastYear; ++year) {
+ bool ok = false;
+ QWinTransitionRule rule = readDynamicRule(dtzi, year, &ok);
+ if (ok
+ // Don't repeat a recurrent rule
+ && (m_tranRules.isEmpty()
+ || !isSameRule(m_tranRules.last(), rule))) {
+ if (!badMonth
+ && (rule.standardTimeRule.wMonth == 0)
+ != (rule.daylightTimeRule.wMonth == 0)) {
+ badMonth = true;
+ qWarning("MS dynamic TZ API violated its wMonth constraint;"
+ "this may cause mistakes for %s from %d",
+ ianaId.constData(), year);
+ }
+ rule.startYear = m_tranRules.isEmpty() ? MIN_YEAR : year;
+ m_tranRules.append(rule);
+ }
+ }
+ } else {
+ // At least try to get the non-dynamic data:
+ dtzi.DynamicDaylightTimeDisabled = false;
+ bool ok = false;
+ QWinTransitionRule rule = readDynamicRule(dtzi, 1970, &ok);
+ if (ok) {
+ rule.startYear = MIN_YEAR;
+ m_tranRules.append(rule);
+ }
}
}
#endif // QT_USE_REGISTRY_TIMEZONE
@@ -519,7 +685,8 @@ QString QWinTimeZonePrivate::displayName(QTimeZone::TimeType timeType,
Q_UNUSED(locale);
if (nameType == QTimeZone::OffsetName) {
- QWinTransitionRule rule = ruleForYear(QDate::currentDate().year());
+ const QWinTransitionRule &rule =
+ m_tranRules.at(ruleIndexForYear(m_tranRules, QDate::currentDate().year()));
if (timeType == QTimeZone::DaylightTime)
return isoOffsetFormat((rule.standardTimeBias + rule.daylightTimeBias) * -60);
else
@@ -569,38 +736,41 @@ bool QWinTimeZonePrivate::isDaylightTime(qint64 atMSecsSinceEpoch) const
QTimeZonePrivate::Data QWinTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const
{
- // Convert MSecs to year to get transitions for, assumes no transitions around 31 Dec/1 Jan
int year = msecsToDate(forMSecsSinceEpoch).year();
-
- qint64 first;
- qint64 second;
- qint64 next = maxMSecs();
- qint64 stdMSecs;
- qint64 dstMSecs;
- QWinTransitionRule rule;
- do {
- // Convert the transition rules into msecs for the year we want to try
- rule = ruleForYear(year);
- // If no transition rules to calculate then no DST, so just use rule for std
- if (rule.standardTimeRule.wMonth == 0 && rule.daylightTimeRule.wMonth == 0)
- break;
- calculateTransitionsForYear(rule, year, &stdMSecs, &dstMSecs);
- if (stdMSecs < dstMSecs) {
- first = stdMSecs;
- second = dstMSecs;
+ for (int ruleIndex = ruleIndexForYear(m_tranRules, year);
+ ruleIndex >= 0; --ruleIndex) {
+ const QWinTransitionRule &rule = m_tranRules.at(ruleIndex);
+ // Does this rule's period include any transition at all ?
+ if (rule.standardTimeRule.wMonth > 0 || rule.daylightTimeRule.wMonth > 0) {
+ const int endYear = qMax(rule.startYear, year - 1);
+ while (year >= endYear) {
+ const int newYearOffset = (year <= rule.startYear && ruleIndex > 0)
+ ? yearEndOffset(m_tranRules.at(ruleIndex - 1), year - 1)
+ : yearEndOffset(rule, year - 1);
+ const TransitionTimePair pair(rule, year, newYearOffset);
+ bool isDst = false;
+ if (pair.std != invalidMSecs() && pair.std <= forMSecsSinceEpoch) {
+ isDst = pair.std < pair.dst && pair.dst <= forMSecsSinceEpoch;
+ } else if (pair.dst != invalidMSecs() && pair.dst <= forMSecsSinceEpoch) {
+ isDst = true;
+ } else {
+ --year; // Try an earlier year for this rule (once).
+ continue;
+ }
+ return ruleToData(rule, forMSecsSinceEpoch,
+ isDst ? QTimeZone::DaylightTime : QTimeZone::StandardTime,
+ pair.fakesDst());
+ }
+ // Fell off start of rule, try previous rule.
} else {
- first = dstMSecs;
- second = stdMSecs;
+ // No transition, no DST, use the year's standard time.
+ return ruleToData(rule, forMSecsSinceEpoch, QTimeZone::StandardTime);
}
- if (forMSecsSinceEpoch >= second && second != invalidMSecs())
- next = second;
- else if (forMSecsSinceEpoch >= first && first != invalidMSecs())
- next = first;
- // If didn't fall in this year, try the previous
- --year;
- } while (next == maxMSecs() && year >= MIN_YEAR);
-
- return ruleToData(rule, forMSecsSinceEpoch, (next == dstMSecs) ? QTimeZone::DaylightTime : QTimeZone::StandardTime);
+ if (year >= rule.startYear)
+ year = rule.startYear - 1; // Seek last transition in new rule.
+ }
+ // We don't have relevant data :-(
+ return invalidData();
}
bool QWinTimeZonePrivate::hasTransitions() const
@@ -614,105 +784,89 @@ bool QWinTimeZonePrivate::hasTransitions() const
QTimeZonePrivate::Data QWinTimeZonePrivate::nextTransition(qint64 afterMSecsSinceEpoch) const
{
- // Convert MSecs to year to get transitions for, assumes no transitions around 31 Dec/1 Jan
int year = msecsToDate(afterMSecsSinceEpoch).year();
+ for (int ruleIndex = ruleIndexForYear(m_tranRules, year);
+ ruleIndex < m_tranRules.count(); ++ruleIndex) {
+ const QWinTransitionRule &rule = m_tranRules.at(ruleIndex);
+ // Does this rule's period include any transition at all ?
+ if (rule.standardTimeRule.wMonth > 0 || rule.daylightTimeRule.wMonth > 0) {
+ if (year < rule.startYear)
+ year = rule.startYear; // Seek first transition in this rule.
+ const int endYear = ruleIndex + 1 < m_tranRules.count()
+ ? qMin(m_tranRules.at(ruleIndex + 1).startYear, year + 2) : (year + 2);
+ int newYearOffset = (year <= rule.startYear && ruleIndex > 0)
+ ? yearEndOffset(m_tranRules.at(ruleIndex - 1), year - 1)
+ : yearEndOffset(rule, year - 1);
+ while (year < endYear) {
+ const TransitionTimePair pair(rule, year, newYearOffset);
+ bool isDst = false;
+ Q_ASSERT(invalidMSecs() <= afterMSecsSinceEpoch); // invalid is min qint64
+ if (pair.std > afterMSecsSinceEpoch) {
+ isDst = pair.std > pair.dst && pair.dst > afterMSecsSinceEpoch;
+ } else if (pair.dst > afterMSecsSinceEpoch) {
+ isDst = true;
+ } else {
+ newYearOffset = rule.standardTimeBias;
+ if (pair.dst > pair.std)
+ newYearOffset += rule.daylightTimeBias;
+ ++year; // Try a later year for this rule (once).
+ continue;
+ }
- QWinTransitionRule rule;
- // If the required year falls after the last rule start year and the last rule has no
- // valid future transition calculations then there is no next transition
- if (year > m_tranRules.last().startYear) {
- rule = ruleForYear(year);
- // If the rules have either a fixed year, or no month, then no future trans
- if (rule.standardTimeRule.wYear != 0 || rule.daylightTimeRule.wYear != 0
- || rule.standardTimeRule.wMonth == 0 || rule.daylightTimeRule.wMonth == 0) {
- return invalidData();
- }
+ if (isDst)
+ return ruleToData(rule, pair.dst, QTimeZone::DaylightTime, pair.fakesDst());
+ return ruleToData(rule, pair.std, QTimeZone::StandardTime, pair.fakesDst());
+ }
+ // Fell off end of rule, try next rule.
+ } // else: no transition during rule's period
}
-
- // Otherwise we have a valid rule for the required year that can be used
- // to calculate this year or next
- qint64 first;
- qint64 second;
- qint64 next = minMSecs();
- qint64 stdMSecs;
- qint64 dstMSecs;
- do {
- // Convert the transition rules into msecs for the year we want to try
- rule = ruleForYear(year);
- // If no transition rules to calculate then no next transition
- if (rule.standardTimeRule.wMonth == 0 && rule.daylightTimeRule.wMonth == 0)
- return invalidData();
- calculateTransitionsForYear(rule, year, &stdMSecs, &dstMSecs);
- // Find the first and second transition for the year
- if (stdMSecs < dstMSecs) {
- first = stdMSecs;
- second = dstMSecs;
- } else {
- first = dstMSecs;
- second = stdMSecs;
- }
- if (afterMSecsSinceEpoch < first)
- next = first;
- else if (afterMSecsSinceEpoch < second)
- next = second;
- // If didn't fall in this year, try the next
- ++year;
- } while (next == minMSecs() && year <= MAX_YEAR);
-
- if (next == minMSecs() || next == invalidMSecs())
- return invalidData();
-
- return ruleToData(rule, next, (next == dstMSecs) ? QTimeZone::DaylightTime : QTimeZone::StandardTime);
+ // Apparently no transition after the given time:
+ return invalidData();
}
QTimeZonePrivate::Data QWinTimeZonePrivate::previousTransition(qint64 beforeMSecsSinceEpoch) const
{
- // Convert MSecs to year to get transitions for, assumes no transitions around 31 Dec/1 Jan
- int year = msecsToDate(beforeMSecsSinceEpoch).year();
-
- QWinTransitionRule rule;
- // If the required year falls before the first rule start year and the first rule has no
- // valid transition calculations then there is no previous transition
- if (year < m_tranRules.first().startYear) {
- rule = ruleForYear(year);
- // If the rules have either a fixed year, or no month, then no previous trans
- if (rule.standardTimeRule.wYear != 0 || rule.daylightTimeRule.wYear != 0
- || rule.standardTimeRule.wMonth == 0 || rule.daylightTimeRule.wMonth == 0) {
- return invalidData();
- }
- }
-
- qint64 first;
- qint64 second;
- qint64 next = maxMSecs();
- qint64 stdMSecs;
- qint64 dstMSecs;
- do {
- // Convert the transition rules into msecs for the year we want to try
- rule = ruleForYear(year);
- // If no transition rules to calculate then no previous transition
- if (rule.standardTimeRule.wMonth == 0 && rule.daylightTimeRule.wMonth == 0)
- return invalidData();
- calculateTransitionsForYear(rule, year, &stdMSecs, &dstMSecs);
- if (stdMSecs < dstMSecs) {
- first = stdMSecs;
- second = dstMSecs;
- } else {
- first = dstMSecs;
- second = stdMSecs;
- }
- if (beforeMSecsSinceEpoch > second && second != invalidMSecs())
- next = second;
- else if (beforeMSecsSinceEpoch > first && first != invalidMSecs())
- next = first;
- // If didn't fall in this year, try the previous
- --year;
- } while (next == maxMSecs() && year >= MIN_YEAR);
-
- if (next == maxMSecs())
+ const qint64 startOfTime = invalidMSecs() + 1;
+ if (beforeMSecsSinceEpoch <= startOfTime)
return invalidData();
- return ruleToData(rule, next, (next == dstMSecs) ? QTimeZone::DaylightTime : QTimeZone::StandardTime);
+ int year = msecsToDate(beforeMSecsSinceEpoch).year();
+ for (int ruleIndex = ruleIndexForYear(m_tranRules, year);
+ ruleIndex >= 0; --ruleIndex) {
+ const QWinTransitionRule &rule = m_tranRules.at(ruleIndex);
+ // Does this rule's period include any transition at all ?
+ if (rule.standardTimeRule.wMonth > 0 || rule.daylightTimeRule.wMonth > 0) {
+ const int endYear = qMax(rule.startYear, year - 1);
+ while (year >= endYear) {
+ const int newYearOffset = (year <= rule.startYear && ruleIndex > 0)
+ ? yearEndOffset(m_tranRules.at(ruleIndex - 1), year - 1)
+ : yearEndOffset(rule, year - 1);
+ const TransitionTimePair pair(rule, year, newYearOffset);
+ bool isDst = false;
+ if (pair.std != invalidMSecs() && pair.std < beforeMSecsSinceEpoch) {
+ isDst = pair.std < pair.dst && pair.dst < beforeMSecsSinceEpoch;
+ } else if (pair.dst != invalidMSecs() && pair.dst < beforeMSecsSinceEpoch) {
+ isDst = true;
+ } else {
+ --year; // Try an earlier year for this rule (once).
+ continue;
+ }
+ if (isDst)
+ return ruleToData(rule, pair.dst, QTimeZone::DaylightTime, pair.fakesDst());
+ return ruleToData(rule, pair.std, QTimeZone::StandardTime, pair.fakesDst());
+ }
+ // Fell off start of rule, try previous rule.
+ } else if (ruleIndex == 0) {
+ // Treat a no-transition first rule as a transition at the start of
+ // time, so that a scan through all rules *does* see it as the first
+ // rule:
+ return ruleToData(rule, startOfTime, QTimeZone::StandardTime, false);
+ } // else: no transition during rule's period
+ if (year >= rule.startYear)
+ year = rule.startYear - 1; // Seek last transition in new rule
+ }
+ // Apparently no transition before the given time:
+ return invalidData();
}
QByteArray QWinTimeZonePrivate::systemTimeZoneId() const
@@ -744,23 +898,21 @@ QList<QByteArray> QWinTimeZonePrivate::availableTimeZoneIds() const
return result;
}
-QWinTimeZonePrivate::QWinTransitionRule QWinTimeZonePrivate::ruleForYear(int year) const
-{
- for (int i = m_tranRules.size() - 1; i >= 0; --i) {
- if (m_tranRules.at(i).startYear <= year)
- return m_tranRules.at(i);
- }
- return m_tranRules.at(0);
-}
-
QTimeZonePrivate::Data QWinTimeZonePrivate::ruleToData(const QWinTransitionRule &rule,
qint64 atMSecsSinceEpoch,
- QTimeZone::TimeType type) const
+ QTimeZone::TimeType type,
+ bool fakeDst) const
{
- QTimeZonePrivate::Data tran = QTimeZonePrivate::invalidData();
+ Data tran = invalidData();
tran.atMSecsSinceEpoch = atMSecsSinceEpoch;
tran.standardTimeOffset = rule.standardTimeBias * -60;
- if (type == QTimeZone::DaylightTime) {
+ if (fakeDst) {
+ tran.daylightTimeOffset = 0;
+ tran.abbreviation = m_standardName;
+ // Rule may claim we're in DST when it's actually a standard time change:
+ if (type == QTimeZone::DaylightTime)
+ tran.standardTimeOffset += rule.daylightTimeBias * -60;
+ } else if (type == QTimeZone::DaylightTime) {
tran.daylightTimeOffset = rule.daylightTimeBias * -60;
tran.abbreviation = m_daylightName;
} else {
diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp
index 01fa8b2102..4c4821802d 100644
--- a/src/corelib/tools/qunicodetables.cpp
+++ b/src/corelib/tools/qunicodetables.cpp
@@ -37,7 +37,7 @@
**
****************************************************************************/
-/* This file is autogenerated from the Unicode 8.0 database. Do not edit */
+/* This file is autogenerated from the Unicode 10.0 database. Do not edit */
#include "qunicodetables_p.h"
@@ -56,87 +56,53 @@ static const unsigned short uc_property_trie[] = {
7536, 7568, 7600, 7632, 7664, 7696, 7728, 7760,
7792, 7824, 7856, 7888, 7920, 7952, 7984, 8016,
8048, 8080, 8112, 8144, 8176, 8208, 8240, 8272,
- 8304, 8336, 8368, 8400, 8400, 8432, 8464, 8496,
- 8528, 8560, 8592, 8624, 8656, 8688, 8720, 8752,
- 8784, 8816, 8848, 8880, 8912, 8944, 8976, 9008,
- 9040, 9072, 9104, 9136, 9168, 9200, 9232, 9264,
- 9296, 9328, 9360, 9392, 9424, 9456, 9488, 9520,
- 9552, 9584, 9616, 9648, 9680, 9712, 9744, 9776,
- 9808, 9840, 9872, 9904, 9936, 9968, 10000, 9904,
- 10032, 10064, 10096, 10128, 10160, 10192, 10224, 9904,
-
- 10256, 10288, 10320, 10352, 10384, 10416, 10448, 10480,
- 10512, 10512, 10544, 10576, 10608, 10640, 10672, 10704,
- 10736, 10768, 10800, 10768, 10832, 10864, 10896, 10928,
- 10960, 10768, 10992, 11024, 11056, 11088, 11120, 11152,
- 11184, 11216, 11216, 11216, 11216, 11216, 11216, 11216,
- 11216, 11216, 11216, 11216, 11216, 11216, 11216, 11216,
- 11216, 11216, 11216, 11248, 11280, 11312, 11312, 11344,
- 11376, 11408, 11440, 11472, 11504, 11536, 11568, 11600,
- 11632, 11664, 11696, 11728, 11760, 11792, 11824, 11856,
- 11888, 11920, 11952, 11984, 12016, 12048, 12080, 12112,
- 12144, 12176, 12208, 12240, 12272, 12304, 9904, 9904,
- 12336, 12368, 12400, 12432, 12464, 12496, 12528, 12560,
- 12592, 12624, 12656, 12688, 9904, 9904, 12720, 12752,
- 12784, 12816, 12848, 12880, 12912, 12944, 12976, 13008,
- 13040, 13040, 13040, 13040, 13072, 13040, 13040, 13104,
- 13136, 13168, 13200, 13232, 13264, 13296, 13328, 13360,
-
- 13392, 13424, 13456, 13488, 13520, 13552, 13584, 13616,
- 13648, 13680, 13712, 13744, 13776, 13808, 13840, 13872,
- 13904, 13936, 13968, 14000, 14032, 14064, 14096, 14128,
- 14160, 14192, 14224, 14256, 14288, 14320, 14352, 14384,
- 14416, 14448, 14480, 14512, 14544, 14576, 14608, 14640,
- 14416, 14416, 14416, 14416, 14672, 14704, 14736, 14768,
- 14800, 14832, 14416, 14864, 14896, 14928, 14960, 14992,
- 15024, 15056, 15088, 15120, 15152, 15184, 15216, 15248,
- 15280, 15280, 15280, 15280, 15280, 15280, 15280, 15280,
- 15312, 15312, 15312, 15312, 15344, 15376, 15408, 15440,
- 15472, 15504, 15312, 15536, 15568, 15600, 15632, 15664,
- 15696, 15728, 15760, 15792, 15824, 15856, 15888, 15920,
- 15952, 15984, 16016, 16048, 16080, 16080, 16080, 16112,
- 16144, 16176, 16208, 16240, 16272, 16304, 16304, 16336,
- 16368, 16400, 16432, 9904, 16464, 16496, 16496, 16528,
- 16560, 16560, 16560, 16560, 16560, 16560, 16592, 16624,
-
- 16656, 16688, 16720, 16752, 16784, 16816, 16848, 16880,
- 16912, 16944, 16976, 16976, 17008, 17040, 17072, 17104,
- 17136, 17168, 17200, 17232, 17168, 17264, 17296, 17328,
- 17360, 17360, 17392, 17424, 17456, 17456, 17488, 17520,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
-
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17552, 17552, 17552,
- 17552, 17552, 17552, 17552, 17552, 17584, 17616, 17616,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
-
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
+ 8304, 8336, 8368, 8400, 8432, 8464, 8496, 8528,
+ 8560, 8592, 8624, 8656, 8688, 8720, 8752, 8784,
+ 8816, 8848, 8880, 8912, 8944, 8976, 9008, 9040,
+ 9072, 9104, 9136, 9168, 9200, 9232, 9264, 9296,
+ 9328, 9360, 9392, 9424, 9456, 9488, 9520, 9552,
+ 9584, 9616, 9648, 9680, 9712, 9744, 9776, 9808,
+ 9840, 9872, 9904, 9936, 9968, 10000, 10032, 9936,
+ 10064, 10096, 10128, 10160, 10192, 10224, 10256, 9936,
+
+ 10288, 10320, 10352, 10384, 10416, 10448, 10480, 10512,
+ 10544, 10544, 10576, 10608, 10640, 10672, 10704, 10736,
+ 10768, 10800, 10832, 10800, 10864, 10896, 10928, 10960,
+ 10992, 10800, 11024, 11056, 11088, 11120, 11152, 11184,
+ 11216, 11248, 11248, 11248, 11248, 11248, 11248, 11248,
+ 11248, 11248, 11248, 11248, 11248, 11248, 11248, 11248,
+ 11248, 11248, 11248, 11280, 11312, 11344, 11344, 11376,
+ 11408, 11440, 11472, 11504, 11536, 11568, 11600, 11632,
+ 11664, 11696, 11728, 11760, 11792, 11824, 11856, 11888,
+ 11920, 11952, 11984, 12016, 12048, 12080, 12112, 12144,
+ 12176, 12208, 12240, 12272, 12304, 12336, 9936, 9936,
+ 12368, 12400, 12432, 12464, 12496, 12528, 12560, 12592,
+ 12624, 12656, 12688, 12720, 12752, 9936, 12784, 12816,
+ 12848, 12880, 12912, 12944, 12976, 13008, 13040, 13072,
+ 13104, 13104, 13104, 13104, 13136, 13104, 13104, 13168,
+ 13200, 13232, 13264, 13296, 13328, 13360, 13392, 13424,
+
+ 13456, 13488, 13520, 13552, 13584, 13616, 13648, 13680,
+ 13712, 13744, 13776, 13808, 13840, 13872, 13904, 13936,
+ 13968, 14000, 14032, 14064, 14096, 14128, 14160, 14192,
+ 14224, 14256, 14288, 14320, 14352, 14384, 14416, 14448,
+ 14480, 14512, 14544, 14576, 14608, 14640, 14672, 14704,
+ 14480, 14480, 14480, 14480, 14736, 14768, 14800, 14832,
+ 14864, 14896, 14928, 14960, 14992, 15024, 15056, 15088,
+ 15120, 15152, 15184, 15216, 15248, 15280, 15312, 15344,
+ 15376, 15376, 15376, 15376, 15376, 15376, 15376, 15376,
+ 15408, 15408, 15408, 15408, 15440, 15472, 15504, 15536,
+ 15568, 15600, 15408, 15632, 15664, 15696, 15728, 15760,
+ 15792, 15824, 15856, 15888, 15920, 15952, 15984, 16016,
+ 16048, 16080, 16112, 16144, 16176, 16176, 16176, 16208,
+ 16240, 16272, 16304, 16336, 16368, 16400, 16400, 16432,
+ 16464, 16496, 16528, 9936, 16560, 16592, 16592, 16624,
+ 16656, 16656, 16656, 16656, 16656, 16656, 16688, 16720,
+
+ 16752, 16784, 16816, 16848, 16880, 16912, 16944, 16976,
+ 17008, 17040, 17072, 17072, 17104, 17136, 17168, 17200,
+ 17232, 17264, 17296, 17328, 17264, 17360, 17392, 17424,
+ 17456, 17456, 17488, 17520, 17552, 17552, 17584, 17616,
17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
@@ -163,708 +129,742 @@ static const unsigned short uc_property_trie[] = {
17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
-
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
-
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
-
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17648, 17648, 17648,
- 17648, 17648, 17648, 17648, 17648, 17680, 17712, 17744,
-
- 17776, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
- 17808, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
- 17808, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
- 17808, 17808, 17808, 17808, 17808, 17808, 17808, 17808,
- 17808, 17808, 17808, 17808, 17840, 17872, 17904, 17936,
- 17968, 17968, 17968, 17968, 17968, 17968, 17968, 17968,
- 18000, 18032, 18064, 18096, 18128, 18160, 18160, 18192,
- 18224, 18256, 18288, 18320, 18352, 18384, 9904, 18416,
- 18448, 18480, 18512, 18544, 18576, 18608, 18640, 18672,
- 18704, 18736, 18768, 18800, 18832, 18864, 18896, 18928,
- 18960, 18992, 19024, 19056, 19088, 19120, 19152, 19184,
- 19216, 19248, 19280, 19312, 19344, 19376, 19408, 19440,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
- 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
- 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
- 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
-
- 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
- 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
- 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
- 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
- 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
- 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
- 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
- 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
- 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
- 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
- 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
-
- 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
- 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
- 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
- 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
- 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
- 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
- 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
- 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
- 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
- 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
- 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
-
- 19504, 19536, 19568, 19600, 19632, 19664, 19472, 19504,
- 19536, 19568, 19600, 19632, 19664, 19472, 19504, 19536,
- 19568, 19600, 19632, 19664, 19472, 19504, 19536, 19568,
- 19600, 19632, 19664, 19472, 19504, 19536, 19568, 19600,
- 19632, 19664, 19472, 19504, 19536, 19568, 19600, 19632,
- 19664, 19472, 19504, 19536, 19568, 19600, 19632, 19664,
- 19472, 19504, 19536, 19568, 19600, 19632, 19664, 19472,
- 19504, 19536, 19568, 19600, 19632, 19696, 19728, 19760,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
- 19792, 19792, 19792, 19792, 19792, 19792, 19792, 19792,
-
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
-
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19824, 19824, 19824, 19824, 19824, 19824, 19824, 19824,
- 19856, 19856, 19856, 19856, 19856, 19856, 19856, 19856,
- 19888, 19920, 19952, 19984, 20016, 20016, 20048, 17744,
- 20080, 20112, 20144, 20176, 20176, 20208, 20240, 20176,
- 20176, 20176, 20176, 20176, 20176, 20176, 20176, 20176,
- 20176, 20272, 20304, 20176, 20336, 20176, 20368, 20400,
- 20432, 20464, 20496, 20528, 20176, 20176, 20176, 20560,
- 20592, 20624, 20656, 20688, 20720, 20752, 20784, 20816,
-
- 20848, 20880, 20912, 9904, 20944, 20944, 20944, 20976,
- 21008, 21040, 21072, 21104, 21136, 21168, 21200, 21232,
- 9904, 9904, 9904, 9904, 21264, 21296, 21328, 21360,
- 21392, 21424, 21456, 21488, 21520, 21552, 21584, 9904,
- 21616, 21648, 21680, 21712, 21744, 21776, 9904, 9904,
- 21808, 21840, 21872, 21904, 9904, 9904, 9904, 9904,
- 21936, 21936, 21936, 21936, 21936, 21936, 21936, 21936,
- 21936, 21968, 22000, 22032, 9904, 9904, 9904, 9904,
- 22064, 22096, 22128, 22160, 22192, 22224, 8400, 22256,
- 22288, 22320, 8400, 8400, 22352, 22384, 22416, 22448,
- 22480, 22512, 22544, 22576, 22608, 8400, 22640, 22672,
- 22704, 22736, 22768, 22800, 22832, 22864, 8400, 8400,
- 22896, 22896, 22928, 8400, 22960, 22992, 23024, 23056,
- 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400,
- 8400, 8400, 8400, 23088, 8400, 8400, 8400, 8400,
- 8400, 8400, 8400, 8400, 8400, 8400, 8400, 8400,
+ 17648, 17648, 17648, 17648, 17648, 17680, 17712, 17712,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17744, 17744, 17744,
+ 17744, 17744, 17744, 17744, 17744, 17776, 17808, 17840,
+
+ 17872, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17904, 17904, 17904, 17904,
+ 17904, 17904, 17904, 17904, 17936, 17968, 18000, 18032,
+ 18064, 18064, 18064, 18064, 18064, 18064, 18064, 18064,
+ 18096, 18128, 18160, 18192, 18224, 18256, 18256, 18288,
+ 18320, 18352, 18384, 18416, 18448, 18480, 9936, 18512,
+ 18544, 18576, 18608, 18640, 18672, 18704, 18736, 18768,
+ 18800, 18832, 18864, 18896, 18928, 18960, 18992, 19024,
+ 19056, 19088, 19120, 19152, 19184, 19216, 19248, 19280,
+ 19312, 19344, 19376, 19408, 19440, 19472, 19504, 19536,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19760, 19568, 19600,
+ 19632, 19664, 19696, 19728, 19760, 19568, 19600, 19632,
+ 19664, 19696, 19728, 19760, 19568, 19600, 19632, 19664,
+
+ 19696, 19728, 19760, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19568, 19600, 19632, 19664, 19696, 19728,
+ 19760, 19568, 19600, 19632, 19664, 19696, 19728, 19760,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19760, 19568, 19600,
+ 19632, 19664, 19696, 19728, 19760, 19568, 19600, 19632,
+ 19664, 19696, 19728, 19760, 19568, 19600, 19632, 19664,
+ 19696, 19728, 19760, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19568, 19600, 19632, 19664, 19696, 19728,
+ 19760, 19568, 19600, 19632, 19664, 19696, 19728, 19760,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19760, 19568, 19600,
+ 19632, 19664, 19696, 19728, 19760, 19568, 19600, 19632,
+ 19664, 19696, 19728, 19760, 19568, 19600, 19632, 19664,
+ 19696, 19728, 19760, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19568, 19600, 19632, 19664, 19696, 19728,
+
+ 19760, 19568, 19600, 19632, 19664, 19696, 19728, 19760,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19760, 19568, 19600,
+ 19632, 19664, 19696, 19728, 19760, 19568, 19600, 19632,
+ 19664, 19696, 19728, 19760, 19568, 19600, 19632, 19664,
+ 19696, 19728, 19760, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19568, 19600, 19632, 19664, 19696, 19728,
+ 19760, 19568, 19600, 19632, 19664, 19696, 19728, 19760,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19760, 19568, 19600,
+ 19632, 19664, 19696, 19728, 19760, 19568, 19600, 19632,
+ 19664, 19696, 19728, 19760, 19568, 19600, 19632, 19664,
+ 19696, 19728, 19760, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19568, 19600, 19632, 19664, 19696, 19728,
+ 19760, 19568, 19600, 19632, 19664, 19696, 19728, 19760,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+
+ 19600, 19632, 19664, 19696, 19728, 19760, 19568, 19600,
+ 19632, 19664, 19696, 19728, 19760, 19568, 19600, 19632,
+ 19664, 19696, 19728, 19760, 19568, 19600, 19632, 19664,
+ 19696, 19728, 19760, 19568, 19600, 19632, 19664, 19696,
+ 19728, 19760, 19568, 19600, 19632, 19664, 19696, 19728,
+ 19760, 19568, 19600, 19632, 19664, 19696, 19728, 19760,
+ 19568, 19600, 19632, 19664, 19696, 19728, 19760, 19568,
+ 19600, 19632, 19664, 19696, 19728, 19792, 19824, 19856,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+ 19888, 19888, 19888, 19888, 19888, 19888, 19888, 19888,
+
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19920, 19920, 19920, 19920, 19920, 19920, 19920, 19920,
+ 19952, 19952, 19952, 19952, 19952, 19952, 19952, 19952,
+ 19984, 20016, 20048, 20080, 20112, 20112, 20144, 20176,
+ 20208, 20240, 20272, 20304, 20304, 20336, 20368, 20304,
+ 20304, 20304, 20304, 20304, 20304, 20304, 20304, 20304,
+ 20304, 20400, 20432, 20304, 20464, 20304, 20496, 20528,
+ 20560, 20592, 20624, 20656, 20304, 20304, 20304, 20688,
+ 20720, 20752, 20784, 20816, 20848, 20880, 20912, 20944,
+
+ 20976, 21008, 21040, 9936, 21072, 21072, 21072, 21104,
+ 21136, 21168, 21200, 21232, 21264, 21296, 21328, 21360,
+ 9936, 9936, 9936, 9936, 21392, 21424, 21456, 21488,
+ 21520, 21552, 21584, 21616, 21648, 21680, 21712, 9936,
+ 21744, 21776, 21808, 21840, 21872, 21904, 21936, 21968,
+ 22000, 22032, 22064, 22096, 9936, 9936, 9936, 9936,
+ 22128, 22128, 22128, 22128, 22128, 22128, 22128, 22128,
+ 22128, 22160, 22192, 22224, 9936, 9936, 9936, 9936,
+ 22256, 22288, 22320, 22352, 22384, 22416, 8432, 22448,
+ 22480, 22512, 8432, 8432, 22544, 22576, 22608, 22640,
+ 22672, 22704, 22736, 22768, 22800, 8432, 22832, 22864,
+ 22896, 22928, 22960, 22992, 23024, 23056, 8432, 8432,
+ 23088, 23088, 23120, 8432, 23152, 23184, 23216, 23248,
+ 8432, 8432, 8432, 8432, 8432, 8432, 8432, 8432,
+ 8432, 8432, 8432, 23280, 8432, 8432, 8432, 8432,
+ 8432, 8432, 8432, 8432, 8432, 8432, 8432, 8432,
// [0x11000..0x110000)
- 23120, 23376, 23632, 23888, 24144, 24400, 24656, 24912,
- 25168, 25424, 25680, 25424, 25424, 25424, 25424, 25424,
- 25936, 25936, 25936, 26192, 26448, 26704, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 26960, 26960, 27216, 27472, 27728, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 27984, 28240, 28496, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 28752, 28752, 29008, 29264, 25424, 25424, 25424, 29520,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 29776, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 30032, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 30288, 30544, 30800, 31056, 31312, 31568, 31824, 32080,
- 32336, 32336, 32592, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 32848, 33104, 33104, 33104, 33104, 33104, 33360, 33104,
- 33616, 33872, 34128, 34384, 34640, 34896, 35152, 35408,
- 35664, 35920, 25424, 25424, 25424, 25424, 25424, 36176,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
-
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36432, 36432,
- 36432, 36432, 36432, 36432, 36432, 36432, 36688, 36944,
- 36944, 36944, 36944, 36944, 36944, 36944, 36944, 36944,
- 36944, 36944, 36944, 36944, 36944, 36944, 36944, 37200,
- 37456, 37712, 37712, 37712, 37712, 37712, 37712, 37712,
- 37712, 37712, 37712, 37712, 37712, 37712, 37712, 37712,
- 37712, 37712, 37712, 37712, 37712, 37712, 37968, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38480, 38480, 38736, 38224, 38224, 38224, 38224, 38992,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
-
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38224,
- 38224, 38224, 38224, 38224, 38224, 38224, 38224, 38992,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 39248, 39504, 39760, 39760, 39760, 39760, 39760, 39760,
- 39760, 39760, 39760, 39760, 39760, 39760, 39760, 39760,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
-
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 25424,
- 25424, 25424, 25424, 25424, 25424, 25424, 25424, 36176,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
-
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40272,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
-
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40016,
- 40016, 40016, 40016, 40016, 40016, 40016, 40016, 40272,
+ 23312, 23568, 23824, 24080, 24336, 24592, 24848, 25104,
+ 25360, 25616, 25872, 25616, 26128, 26384, 25616, 25616,
+ 26640, 26640, 26640, 26896, 27152, 27408, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 27664, 27664, 27920, 28176, 28432, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 28688, 28944, 29200, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 29456, 29456, 29712, 29968, 25616, 25616, 25616, 30224,
+ 30480, 30480, 30480, 30480, 30480, 30480, 30480, 30480,
+ 30480, 30480, 30480, 30480, 30480, 30480, 30480, 30480,
+ 30480, 30480, 30480, 30480, 30480, 30480, 30480, 30736,
+ 30480, 30480, 30992, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 31248, 31504, 31760, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 32016, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 32272, 32528, 32784, 33040, 33296, 33552, 33808, 34064,
+ 34320, 34320, 34576, 25616, 25616, 25616, 25616, 25616,
+ 34832, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 35088, 35344, 35600, 35600, 35600, 35600, 35856, 35600,
+ 36112, 36368, 36624, 36880, 37136, 37392, 37648, 37904,
+ 38160, 38416, 38672, 38672, 38672, 38672, 38672, 38928,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39184, 39184,
+ 39184, 39184, 39184, 39184, 39184, 39184, 39440, 39696,
+ 39696, 39696, 39696, 39696, 39696, 39696, 39696, 39696,
+ 39696, 39696, 39696, 39696, 39696, 39696, 39696, 39952,
+ 40208, 40464, 40464, 40464, 40464, 40464, 40464, 40464,
+ 40464, 40464, 40464, 40464, 40464, 40464, 40464, 40464,
+ 40464, 40464, 40464, 40464, 40464, 40464, 40720, 40976,
+ 40976, 40976, 40976, 40976, 40976, 40976, 40976, 40976,
+ 40976, 40976, 40976, 40976, 40976, 40976, 40976, 40976,
+ 40976, 40976, 40976, 40976, 40976, 40976, 40976, 40976,
+ 40976, 40976, 40976, 41232, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 41488, 41488, 41744, 38672, 38672, 38672, 38672, 38928,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38672,
+ 38672, 38672, 38672, 38672, 38672, 38672, 38672, 38928,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 42256, 42512, 42768, 42768, 42768, 42768, 42768, 42768,
+ 42768, 42768, 42768, 42768, 42768, 42768, 42768, 42768,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 25616,
+ 25616, 25616, 25616, 25616, 25616, 25616, 25616, 42000,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43280,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43024,
+ 43024, 43024, 43024, 43024, 43024, 43024, 43024, 43280,
0, 0, 0, 0, 0, 0, 0, 0,
@@ -963,969 +963,979 @@ static const unsigned short uc_property_trie[] = {
78, 134, 78, 135, 136, 78, 78, 78,
133, 137, 78, 138, 78, 139, 140, 78,
- 141, 142, 78, 143, 144, 78, 78, 142,
- 78, 145, 146, 78, 78, 147, 78, 78,
- 78, 78, 78, 78, 78, 148, 78, 78,
+ 141, 142, 143, 144, 145, 78, 78, 142,
+ 78, 146, 147, 78, 78, 148, 78, 78,
+ 78, 78, 78, 78, 78, 149, 78, 78,
- 149, 78, 78, 149, 78, 78, 78, 150,
- 149, 151, 152, 152, 153, 78, 78, 78,
- 78, 78, 154, 78, 100, 78, 78, 78,
- 78, 78, 78, 78, 78, 155, 156, 78,
+ 150, 78, 78, 150, 78, 78, 78, 151,
+ 150, 152, 153, 153, 154, 78, 78, 78,
+ 78, 78, 155, 78, 100, 78, 78, 78,
+ 78, 78, 78, 78, 78, 156, 157, 78,
78, 78, 78, 78, 78, 78, 78, 78,
- 78, 157, 157, 157, 157, 157, 114, 114,
- 158, 158, 158, 158, 158, 158, 158, 158,
- 158, 159, 159, 160, 160, 160, 160, 160,
-
- 161, 161, 42, 42, 42, 42, 159, 159,
- 162, 159, 159, 159, 162, 159, 159, 159,
- 160, 160, 42, 42, 42, 42, 42, 163,
- 52, 52, 52, 52, 52, 52, 42, 164,
-
- 158, 158, 158, 158, 158, 42, 42, 42,
- 42, 42, 165, 165, 166, 167, 168, 169,
- 169, 169, 169, 169, 169, 169, 169, 169,
- 169, 169, 169, 169, 169, 169, 169, 169,
-
- 170, 170, 170, 170, 170, 171, 170, 170,
- 170, 170, 170, 170, 170, 171, 171, 170,
- 171, 170, 171, 170, 170, 172, 173, 173,
- 173, 173, 172, 174, 173, 173, 173, 173,
-
- 173, 175, 175, 176, 176, 176, 176, 177,
- 177, 173, 173, 173, 173, 176, 176, 173,
- 176, 176, 173, 173, 178, 178, 178, 178,
- 179, 173, 173, 173, 173, 171, 171, 171,
-
- 180, 180, 170, 180, 180, 181, 182, 183,
- 183, 183, 182, 182, 182, 183, 183, 184,
- 185, 185, 185, 186, 186, 186, 186, 185,
- 187, 188, 188, 189, 190, 191, 191, 192,
-
- 193, 193, 194, 195, 195, 195, 195, 195,
- 195, 195, 195, 195, 195, 195, 195, 195,
- 196, 197, 196, 197, 198, 199, 196, 197,
- 200, 200, 201, 202, 202, 202, 203, 204,
-
- 200, 200, 200, 200, 205, 206, 207, 208,
- 209, 209, 209, 200, 210, 200, 211, 211,
- 212, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 213, 213, 213, 213, 213,
-
- 213, 213, 200, 213, 213, 213, 213, 213,
- 213, 213, 214, 214, 215, 216, 216, 216,
- 217, 218, 218, 218, 218, 218, 218, 218,
- 218, 218, 218, 218, 218, 218, 218, 218,
-
- 218, 218, 219, 218, 218, 218, 218, 218,
- 218, 218, 220, 220, 221, 222, 222, 223,
- 224, 225, 226, 227, 227, 228, 229, 230,
- 231, 232, 233, 234, 233, 234, 233, 234,
-
- 233, 234, 235, 236, 235, 236, 235, 236,
- 235, 236, 235, 236, 235, 236, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 244, 245, 247, 248, 248, 248,
-
- 249, 250, 251, 250, 251, 251, 251, 250,
- 251, 251, 251, 251, 250, 249, 250, 251,
- 252, 252, 252, 252, 252, 252, 252, 252,
- 252, 253, 252, 252, 252, 252, 252, 252,
-
- 252, 252, 252, 252, 252, 252, 252, 252,
- 252, 252, 252, 252, 252, 252, 252, 252,
- 254, 254, 254, 254, 254, 254, 254, 254,
- 254, 255, 254, 254, 254, 254, 254, 254,
-
- 254, 254, 254, 254, 254, 254, 254, 254,
- 254, 254, 254, 254, 254, 254, 254, 254,
- 256, 257, 258, 257, 258, 258, 258, 257,
- 258, 258, 258, 258, 257, 256, 257, 258,
-
- 259, 260, 259, 260, 259, 260, 259, 260,
- 259, 260, 259, 260, 259, 260, 259, 260,
- 259, 260, 259, 260, 259, 260, 261, 262,
- 259, 260, 259, 260, 259, 260, 259, 260,
-
- 259, 260, 263, 264, 264, 171, 171, 265,
- 266, 266, 267, 268, 269, 270, 269, 270,
- 259, 260, 259, 260, 259, 260, 259, 260,
- 259, 260, 259, 260, 259, 260, 259, 260,
-
- 259, 260, 259, 260, 259, 260, 259, 260,
- 259, 260, 259, 260, 259, 260, 259, 260,
- 259, 260, 259, 260, 259, 260, 259, 260,
- 259, 260, 259, 260, 259, 260, 259, 260,
-
- 271, 261, 262, 259, 260, 267, 268, 259,
- 260, 267, 268, 259, 260, 267, 268, 272,
- 261, 262, 261, 262, 259, 260, 261, 262,
- 259, 260, 261, 262, 261, 262, 261, 262,
-
- 259, 260, 261, 262, 261, 262, 261, 262,
- 259, 260, 261, 262, 273, 274, 261, 262,
- 261, 262, 261, 262, 261, 262, 275, 276,
- 261, 262, 277, 278, 277, 278, 277, 278,
-
- 267, 268, 267, 268, 267, 268, 267, 268,
- 267, 268, 267, 268, 267, 268, 267, 268,
- 277, 278, 277, 278, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 279, 280,
-
- 279, 280, 279, 280, 281, 282, 283, 284,
- 285, 286, 285, 286, 285, 286, 285, 286,
- 200, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 287,
-
- 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 287,
- 287, 287, 287, 287, 287, 287, 287, 200,
- 200, 288, 289, 289, 289, 290, 289, 289,
-
- 200, 291, 291, 291, 291, 291, 291, 291,
- 291, 291, 291, 291, 291, 291, 291, 291,
- 291, 291, 291, 291, 291, 291, 291, 291,
- 291, 291, 291, 291, 291, 291, 291, 291,
-
- 291, 291, 291, 291, 291, 291, 291, 292,
- 200, 293, 294, 200, 200, 295, 295, 296,
- 297, 298, 299, 299, 299, 299, 298, 299,
- 299, 299, 300, 298, 299, 299, 299, 299,
-
- 299, 299, 301, 298, 298, 298, 298, 298,
- 299, 299, 298, 299, 299, 300, 302, 299,
- 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318,
-
- 319, 320, 321, 319, 299, 301, 322, 323,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 324, 324, 324, 324, 324,
-
- 324, 324, 324, 324, 324, 324, 324, 324,
- 324, 324, 324, 297, 297, 297, 297, 297,
- 324, 324, 324, 325, 326, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
-
- 327, 327, 327, 327, 328, 329, 330, 330,
- 331, 332, 332, 333, 19, 334, 335, 335,
- 336, 336, 336, 336, 336, 336, 337, 337,
- 338, 339, 340, 341, 342, 343, 344, 345,
-
- 346, 347, 348, 348, 348, 348, 349, 350,
- 351, 350, 351, 351, 351, 351, 351, 350,
- 350, 350, 350, 351, 351, 351, 351, 351,
+ 78, 158, 158, 158, 158, 158, 114, 114,
+ 159, 159, 159, 159, 159, 159, 159, 159,
+ 159, 160, 160, 161, 161, 161, 161, 161,
+
+ 162, 162, 163, 163, 163, 163, 160, 160,
+ 164, 160, 160, 160, 164, 160, 160, 160,
+ 161, 161, 163, 163, 163, 163, 163, 163,
+ 52, 52, 52, 52, 52, 52, 163, 165,
+
+ 159, 159, 159, 159, 159, 42, 42, 42,
+ 42, 42, 166, 166, 167, 168, 169, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 170, 170,
+
+ 171, 171, 171, 171, 171, 172, 171, 171,
+ 171, 171, 171, 171, 171, 172, 172, 171,
+ 172, 171, 172, 171, 171, 173, 174, 174,
+ 174, 174, 173, 175, 174, 174, 174, 174,
+
+ 174, 176, 176, 177, 177, 177, 177, 178,
+ 178, 174, 174, 174, 174, 177, 177, 174,
+ 177, 177, 174, 174, 179, 179, 179, 179,
+ 180, 174, 174, 174, 174, 172, 172, 172,
+
+ 181, 181, 171, 181, 181, 182, 183, 184,
+ 184, 184, 183, 183, 183, 184, 184, 185,
+ 186, 186, 186, 187, 187, 187, 187, 186,
+ 188, 189, 189, 190, 191, 192, 192, 193,
+
+ 194, 194, 195, 196, 196, 196, 196, 196,
+ 196, 196, 196, 196, 196, 196, 196, 196,
+ 197, 198, 197, 198, 199, 200, 197, 198,
+ 201, 201, 202, 203, 203, 203, 204, 205,
+
+ 201, 201, 201, 201, 206, 207, 208, 209,
+ 210, 210, 210, 201, 211, 201, 212, 212,
+ 213, 214, 214, 214, 214, 214, 214, 214,
+ 214, 214, 214, 214, 214, 214, 214, 214,
+
+ 214, 214, 201, 214, 214, 214, 214, 214,
+ 214, 214, 215, 215, 216, 217, 217, 217,
+ 218, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219,
+
+ 219, 219, 220, 219, 219, 219, 219, 219,
+ 219, 219, 221, 221, 222, 223, 223, 224,
+ 225, 226, 227, 228, 228, 229, 230, 231,
+ 232, 233, 234, 235, 234, 235, 234, 235,
+
+ 234, 235, 236, 237, 236, 237, 236, 237,
+ 236, 237, 236, 237, 236, 237, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 245, 246, 248, 249, 249, 249,
+
+ 250, 251, 252, 251, 252, 252, 252, 251,
+ 252, 252, 252, 252, 251, 250, 251, 252,
+ 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 254, 253, 253, 253, 253, 253, 253,
+
+ 253, 253, 253, 253, 253, 253, 253, 253,
+ 253, 253, 253, 253, 253, 253, 253, 253,
+ 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 256, 255, 255, 255, 255, 255, 255,
+
+ 255, 255, 255, 255, 255, 255, 255, 255,
+ 255, 255, 255, 255, 255, 255, 255, 255,
+ 257, 258, 259, 258, 259, 259, 259, 258,
+ 259, 259, 259, 259, 258, 257, 258, 259,
+
+ 260, 261, 260, 261, 260, 261, 260, 261,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+ 260, 261, 260, 261, 260, 261, 262, 263,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+
+ 260, 261, 264, 265, 265, 172, 172, 266,
+ 267, 267, 268, 269, 270, 271, 270, 271,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+
+ 260, 261, 260, 261, 260, 261, 260, 261,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+ 260, 261, 260, 261, 260, 261, 260, 261,
+
+ 272, 262, 263, 260, 261, 268, 269, 260,
+ 261, 268, 269, 260, 261, 268, 269, 273,
+ 262, 263, 262, 263, 260, 261, 262, 263,
+ 260, 261, 262, 263, 262, 263, 262, 263,
+
+ 260, 261, 262, 263, 262, 263, 262, 263,
+ 260, 261, 262, 263, 274, 275, 262, 263,
+ 262, 263, 262, 263, 262, 263, 276, 277,
+ 262, 263, 278, 279, 278, 279, 278, 279,
+
+ 268, 269, 268, 269, 268, 269, 268, 269,
+ 268, 269, 268, 269, 268, 269, 268, 269,
+ 278, 279, 278, 279, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 280, 281,
+
+ 280, 281, 280, 281, 282, 283, 284, 285,
+ 286, 287, 286, 287, 286, 287, 286, 287,
+ 201, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288,
+
+ 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 288,
+ 288, 288, 288, 288, 288, 288, 288, 201,
+ 201, 289, 290, 290, 290, 291, 290, 290,
+
+ 201, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292,
+ 292, 292, 292, 292, 292, 292, 292, 292,
+
+ 292, 292, 292, 292, 292, 292, 292, 293,
+ 201, 294, 295, 201, 201, 296, 296, 297,
+ 298, 299, 300, 300, 300, 300, 299, 300,
+ 300, 300, 301, 299, 300, 300, 300, 300,
+
+ 300, 300, 302, 299, 299, 299, 299, 299,
+ 300, 300, 299, 300, 300, 301, 303, 300,
+ 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319,
+
+ 320, 321, 322, 320, 300, 302, 323, 324,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 325, 325, 325, 325, 325, 325, 325, 325,
+ 325, 325, 325, 325, 325, 325, 325, 325,
+
+ 325, 325, 325, 325, 325, 325, 325, 325,
+ 325, 325, 325, 298, 298, 298, 298, 298,
+ 325, 325, 325, 326, 327, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 328, 328, 328, 328, 329, 330, 331, 331,
+ 332, 333, 333, 334, 19, 335, 336, 336,
+ 337, 337, 337, 337, 337, 337, 338, 338,
+ 339, 340, 341, 342, 343, 344, 345, 346,
+
+ 347, 348, 349, 349, 349, 349, 350, 351,
+ 352, 351, 352, 352, 352, 352, 352, 351,
351, 351, 351, 352, 352, 352, 352, 352,
+ 352, 352, 352, 353, 353, 353, 353, 353,
- 353, 351, 351, 351, 351, 351, 351, 351,
- 350, 351, 351, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 362, 363, 364, 336,
- 336, 365, 365, 365, 366, 365, 365, 367,
-
- 368, 369, 370, 371, 372, 373, 374, 375,
- 376, 377, 378, 379, 380, 381, 382, 382,
- 383, 350, 350, 350, 347, 384, 384, 384,
- 385, 351, 351, 351, 351, 351, 351, 351,
+ 354, 352, 352, 352, 352, 352, 352, 352,
+ 351, 352, 352, 355, 356, 357, 358, 359,
+ 360, 361, 362, 363, 363, 364, 365, 337,
+ 337, 366, 366, 366, 367, 366, 366, 368,
- 351, 351, 351, 351, 351, 351, 351, 351,
- 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 350, 350, 350, 350,
- 350, 350, 351, 351, 351, 351, 351, 351,
+ 369, 370, 371, 372, 373, 374, 375, 376,
+ 377, 378, 379, 380, 381, 382, 383, 383,
+ 384, 351, 351, 351, 348, 385, 385, 385,
+ 386, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352,
351, 351, 351, 351, 351, 351, 351, 351,
351, 351, 351, 351, 351, 351, 351, 351,
- 351, 351, 351, 351, 351, 351, 351, 351,
- 386, 386, 351, 351, 351, 351, 351, 386,
-
- 348, 351, 349, 350, 350, 350, 350, 350,
- 350, 350, 350, 350, 351, 350, 351, 387,
- 351, 351, 350, 348, 388, 350, 389, 389,
- 389, 389, 389, 389, 389, 390, 391, 389,
-
- 389, 389, 389, 392, 389, 393, 393, 389,
- 389, 391, 392, 389, 389, 392, 394, 394,
- 395, 396, 397, 398, 399, 400, 401, 402,
- 403, 404, 386, 386, 386, 405, 405, 406,
-
- 407, 407, 407, 408, 408, 408, 408, 408,
- 408, 408, 408, 408, 408, 408, 343, 409,
- 410, 411, 412, 412, 412, 410, 410, 410,
- 410, 410, 412, 412, 412, 412, 410, 412,
-
- 412, 412, 412, 412, 412, 412, 412, 412,
- 410, 412, 410, 412, 410, 413, 413, 414,
- 415, 416, 415, 415, 416, 415, 415, 416,
- 416, 416, 415, 416, 416, 415, 416, 415,
-
- 415, 415, 416, 415, 416, 415, 416, 415,
- 416, 415, 415, 343, 343, 414, 413, 413,
- 417, 417, 417, 417, 417, 417, 417, 417,
- 417, 418, 418, 418, 417, 417, 417, 417,
-
- 417, 417, 417, 417, 417, 417, 417, 417,
- 417, 417, 417, 418, 418, 417, 352, 352,
- 352, 419, 352, 419, 419, 352, 352, 352,
- 419, 419, 352, 352, 352, 352, 352, 352,
-
- 420, 420, 420, 420, 420, 420, 420, 420,
- 420, 420, 420, 420, 420, 420, 420, 420,
- 420, 420, 420, 420, 420, 420, 420, 420,
- 420, 420, 420, 420, 420, 420, 420, 420,
-
- 420, 420, 420, 420, 420, 420, 421, 421,
+ 351, 351, 352, 352, 352, 352, 352, 352,
+
+ 352, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352,
+ 352, 352, 352, 352, 352, 352, 352, 352,
+ 387, 387, 352, 352, 352, 352, 352, 387,
+
+ 349, 352, 350, 351, 351, 351, 351, 351,
+ 351, 351, 351, 351, 352, 351, 352, 388,
+ 352, 352, 351, 349, 389, 351, 390, 390,
+ 390, 390, 390, 390, 390, 391, 392, 390,
+
+ 390, 390, 390, 393, 390, 394, 394, 390,
+ 390, 392, 393, 390, 390, 393, 395, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403,
+ 404, 405, 387, 387, 387, 406, 406, 407,
+
+ 408, 408, 408, 409, 409, 409, 409, 409,
+ 409, 409, 409, 409, 409, 409, 344, 410,
+ 411, 412, 413, 413, 413, 411, 411, 411,
+ 411, 411, 413, 413, 413, 413, 411, 413,
+
+ 413, 413, 413, 413, 413, 413, 413, 413,
+ 411, 413, 411, 413, 411, 414, 414, 415,
+ 416, 417, 416, 416, 417, 416, 416, 417,
+ 417, 417, 416, 417, 417, 416, 417, 416,
+
+ 416, 416, 417, 416, 417, 416, 417, 416,
+ 417, 416, 416, 344, 344, 415, 414, 414,
+ 418, 418, 418, 418, 418, 418, 418, 418,
+ 418, 419, 419, 419, 418, 418, 418, 418,
+
+ 418, 418, 418, 418, 418, 418, 418, 418,
+ 418, 418, 418, 419, 419, 418, 353, 353,
+ 353, 420, 353, 420, 420, 353, 353, 353,
+ 420, 420, 353, 353, 353, 353, 353, 353,
+
421, 421, 421, 421, 421, 421, 421, 421,
- 421, 422, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
-
- 423, 424, 425, 426, 427, 428, 429, 430,
- 431, 432, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 433, 433, 433, 433, 433,
-
- 433, 433, 433, 433, 433, 433, 433, 433,
- 433, 433, 433, 434, 434, 434, 434, 434,
- 434, 434, 435, 434, 436, 436, 437, 438,
- 439, 440, 441, 297, 297, 297, 297, 297,
-
- 442, 442, 442, 442, 442, 442, 442, 442,
- 442, 442, 442, 442, 442, 442, 442, 442,
- 442, 442, 442, 442, 442, 442, 443, 443,
- 443, 443, 444, 443, 443, 443, 443, 443,
-
- 443, 443, 443, 443, 444, 443, 443, 443,
- 444, 443, 443, 443, 443, 443, 297, 297,
- 445, 445, 445, 445, 445, 445, 445, 445,
- 445, 445, 445, 445, 445, 445, 445, 297,
-
- 446, 447, 447, 447, 447, 447, 446, 446,
- 447, 446, 447, 447, 447, 447, 447, 447,
- 447, 447, 447, 447, 446, 447, 448, 448,
- 448, 449, 449, 449, 297, 297, 450, 297,
-
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
-
- 451, 452, 451, 451, 451, 451, 451, 451,
- 451, 451, 453, 453, 453, 454, 455, 452,
- 452, 455, 455, 456, 456, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
-
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
-
- 343, 343, 343, 457, 458, 458, 459, 458,
- 458, 459, 458, 458, 458, 459, 459, 459,
- 460, 461, 462, 458, 458, 458, 459, 458,
- 458, 459, 459, 458, 458, 458, 458, 463,
-
- 464, 465, 465, 466, 467, 468, 468, 468,
- 468, 468, 468, 468, 468, 468, 468, 468,
- 468, 468, 468, 468, 468, 468, 468, 468,
- 468, 468, 468, 468, 468, 468, 468, 468,
-
- 468, 468, 468, 468, 468, 468, 468, 468,
- 468, 469, 468, 468, 468, 468, 468, 468,
- 468, 469, 468, 468, 469, 468, 468, 468,
- 468, 468, 470, 471, 472, 468, 466, 466,
-
- 466, 465, 465, 465, 465, 465, 465, 465,
- 465, 466, 466, 466, 466, 473, 474, 471,
- 468, 171, 173, 475, 475, 464, 470, 470,
+ 421, 421, 421, 421, 421, 421, 421, 421,
+ 421, 421, 421, 421, 421, 421, 421, 421,
+ 421, 421, 421, 421, 421, 421, 421, 421,
+
+ 421, 421, 421, 421, 421, 421, 422, 422,
+ 422, 422, 422, 422, 422, 422, 422, 422,
+ 422, 423, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+
+ 424, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 434, 434, 434, 434, 434,
+
+ 434, 434, 434, 434, 434, 434, 434, 434,
+ 434, 434, 434, 435, 435, 435, 435, 435,
+ 435, 435, 436, 435, 437, 437, 438, 439,
+ 440, 441, 442, 298, 298, 298, 298, 298,
+
+ 443, 443, 443, 443, 443, 443, 443, 443,
+ 443, 443, 443, 443, 443, 443, 443, 443,
+ 443, 443, 443, 443, 443, 443, 444, 444,
+ 444, 444, 445, 444, 444, 444, 444, 444,
+
+ 444, 444, 444, 444, 445, 444, 444, 444,
+ 445, 444, 444, 444, 444, 444, 298, 298,
+ 446, 446, 446, 446, 446, 446, 446, 446,
+ 446, 446, 446, 446, 446, 446, 446, 298,
+
+ 447, 448, 448, 448, 448, 448, 447, 447,
+ 448, 447, 448, 448, 448, 448, 448, 448,
+ 448, 448, 448, 448, 447, 448, 449, 449,
+ 449, 450, 450, 450, 298, 298, 451, 298,
+
+ 452, 453, 452, 452, 452, 452, 453, 454,
+ 452, 454, 454, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 455, 456, 455, 455, 455, 455, 455, 455,
+ 455, 455, 457, 457, 457, 458, 459, 456,
+ 456, 459, 459, 460, 460, 344, 461, 461,
+ 461, 462, 461, 461, 461, 461, 344, 344,
+
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 463, 463, 463, 463,
+ 463, 463, 463, 463, 463, 463, 463, 463,
+
+ 463, 463, 464, 465, 466, 466, 467, 466,
+ 466, 467, 466, 466, 466, 467, 467, 467,
+ 468, 469, 470, 466, 466, 466, 467, 466,
+ 466, 467, 467, 466, 466, 466, 466, 471,
+
+ 472, 473, 473, 474, 475, 476, 476, 476,
+ 476, 476, 476, 476, 476, 476, 476, 476,
+ 476, 476, 476, 476, 476, 476, 476, 476,
476, 476, 476, 476, 476, 476, 476, 476,
- 468, 468, 465, 465, 477, 477, 478, 479,
- 480, 481, 482, 483, 484, 485, 486, 487,
- 488, 489, 490, 491, 491, 491, 491, 491,
- 492, 493, 493, 494, 494, 495, 494, 494,
-
- 496, 497, 498, 498, 200, 499, 499, 499,
- 499, 499, 499, 499, 499, 200, 200, 499,
- 499, 200, 200, 499, 499, 499, 499, 499,
- 499, 499, 499, 499, 499, 499, 499, 499,
-
- 499, 499, 499, 499, 499, 499, 499, 499,
- 499, 200, 499, 499, 499, 499, 499, 499,
- 499, 200, 499, 200, 200, 200, 499, 499,
- 499, 499, 200, 200, 500, 501, 502, 498,
-
- 498, 497, 497, 497, 497, 200, 200, 498,
- 498, 200, 200, 503, 503, 504, 505, 200,
- 200, 200, 200, 200, 200, 200, 200, 502,
- 200, 200, 200, 200, 506, 506, 200, 506,
-
- 499, 499, 497, 497, 200, 200, 507, 508,
- 509, 510, 511, 512, 513, 514, 515, 516,
- 499, 499, 517, 517, 518, 518, 518, 518,
- 518, 519, 520, 521, 200, 200, 200, 200,
-
- 200, 522, 523, 524, 200, 525, 525, 525,
- 525, 525, 525, 200, 200, 200, 200, 525,
- 525, 200, 200, 525, 525, 525, 525, 525,
- 525, 525, 525, 525, 525, 525, 525, 525,
-
- 525, 525, 525, 525, 525, 525, 525, 525,
- 525, 200, 525, 525, 525, 525, 525, 525,
- 525, 200, 525, 526, 200, 525, 526, 200,
- 525, 525, 200, 200, 527, 200, 528, 528,
-
- 528, 523, 523, 200, 200, 200, 200, 523,
- 523, 200, 200, 523, 523, 529, 200, 200,
- 200, 530, 200, 200, 200, 200, 200, 200,
- 200, 526, 526, 526, 525, 200, 526, 200,
-
- 200, 200, 200, 200, 200, 200, 531, 532,
- 533, 534, 535, 536, 537, 538, 539, 540,
- 523, 523, 525, 525, 525, 530, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 541, 541, 542, 200, 543, 543, 543,
- 543, 543, 543, 543, 544, 543, 200, 543,
- 543, 543, 200, 543, 543, 543, 543, 543,
- 543, 543, 543, 543, 543, 543, 543, 543,
-
- 543, 543, 543, 543, 543, 543, 543, 543,
- 543, 200, 543, 543, 543, 543, 543, 543,
- 543, 200, 543, 543, 200, 543, 543, 543,
- 543, 543, 200, 200, 545, 543, 542, 542,
-
- 542, 541, 541, 541, 541, 541, 200, 541,
- 541, 542, 200, 542, 542, 546, 200, 200,
- 543, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 543, 544, 547, 547, 200, 200, 548, 549,
- 550, 551, 552, 553, 554, 555, 556, 557,
- 558, 559, 200, 200, 200, 200, 200, 200,
- 200, 560, 200, 200, 200, 200, 200, 200,
-
- 200, 561, 562, 562, 200, 563, 563, 563,
- 563, 563, 563, 563, 563, 200, 200, 563,
- 563, 200, 200, 563, 563, 563, 563, 563,
- 563, 563, 563, 563, 563, 563, 563, 563,
-
- 563, 563, 563, 563, 563, 563, 563, 563,
- 563, 200, 563, 563, 563, 563, 563, 563,
- 563, 200, 563, 563, 200, 564, 563, 563,
- 563, 563, 200, 200, 565, 563, 566, 561,
-
- 562, 561, 561, 561, 567, 200, 200, 562,
- 568, 200, 200, 568, 568, 569, 200, 200,
- 200, 200, 200, 200, 200, 200, 570, 566,
- 200, 200, 200, 200, 571, 571, 200, 563,
-
- 563, 563, 567, 567, 200, 200, 572, 573,
- 574, 575, 576, 577, 578, 579, 580, 581,
- 582, 564, 583, 583, 583, 583, 583, 583,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 584, 585, 200, 585, 585, 585,
- 585, 585, 585, 200, 200, 200, 585, 585,
- 585, 200, 585, 585, 586, 585, 200, 200,
- 200, 585, 585, 200, 585, 200, 585, 585,
-
- 200, 200, 200, 585, 585, 200, 200, 200,
- 585, 585, 585, 200, 200, 200, 585, 585,
- 585, 585, 585, 585, 585, 585, 587, 585,
- 585, 585, 200, 200, 200, 200, 588, 589,
-
- 584, 589, 589, 200, 200, 200, 589, 589,
- 589, 200, 590, 590, 590, 591, 200, 200,
- 592, 200, 200, 200, 200, 200, 200, 588,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 593, 594,
- 595, 596, 597, 598, 599, 600, 601, 602,
- 603, 603, 603, 604, 604, 604, 604, 604,
- 604, 605, 604, 200, 200, 200, 200, 200,
-
- 606, 607, 607, 607, 200, 608, 608, 608,
- 608, 608, 608, 608, 608, 200, 608, 608,
- 608, 200, 608, 608, 608, 608, 608, 608,
- 608, 608, 608, 608, 608, 608, 608, 608,
-
- 608, 608, 608, 608, 608, 608, 608, 608,
- 608, 200, 608, 608, 608, 608, 608, 608,
- 608, 608, 608, 608, 609, 608, 608, 608,
- 608, 608, 200, 200, 200, 610, 611, 611,
-
- 611, 607, 607, 607, 607, 200, 611, 611,
- 612, 200, 611, 611, 611, 613, 200, 200,
- 200, 200, 200, 200, 200, 614, 615, 200,
- 610, 610, 616, 200, 200, 200, 200, 200,
-
- 608, 608, 617, 617, 200, 200, 618, 619,
- 620, 621, 622, 623, 624, 625, 626, 627,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 628, 628, 628, 628, 628, 628, 628, 629,
-
- 200, 630, 631, 631, 200, 632, 632, 632,
- 632, 632, 632, 632, 632, 200, 632, 632,
- 632, 200, 632, 632, 632, 632, 632, 632,
- 632, 632, 632, 632, 632, 632, 632, 632,
-
- 632, 632, 632, 632, 632, 632, 632, 632,
- 632, 200, 632, 632, 632, 632, 632, 632,
- 632, 632, 632, 632, 200, 632, 632, 632,
- 632, 632, 200, 200, 633, 634, 631, 635,
-
- 636, 631, 637, 631, 631, 200, 635, 636,
- 636, 200, 636, 636, 638, 639, 200, 200,
- 200, 200, 200, 200, 200, 637, 637, 200,
- 200, 200, 200, 200, 200, 200, 632, 200,
-
- 632, 632, 640, 640, 200, 200, 641, 642,
- 643, 644, 645, 646, 647, 648, 649, 650,
- 200, 651, 651, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 652, 653, 653, 200, 654, 654, 654,
- 654, 654, 654, 654, 654, 200, 654, 654,
- 654, 200, 654, 654, 654, 654, 654, 654,
- 654, 654, 654, 654, 654, 654, 654, 654,
-
- 654, 654, 654, 654, 654, 654, 654, 654,
- 654, 655, 654, 654, 654, 654, 654, 654,
- 654, 654, 654, 654, 654, 654, 654, 654,
- 654, 654, 655, 200, 200, 656, 657, 653,
-
- 653, 658, 658, 658, 659, 200, 653, 653,
- 653, 200, 660, 660, 660, 661, 655, 200,
- 200, 200, 200, 200, 200, 200, 200, 657,
- 200, 200, 200, 200, 200, 200, 200, 662,
-
- 654, 654, 659, 659, 200, 200, 663, 664,
- 665, 666, 667, 668, 669, 670, 671, 672,
- 673, 673, 673, 673, 673, 673, 200, 200,
- 200, 674, 656, 656, 656, 656, 656, 656,
-
- 200, 200, 675, 675, 200, 676, 676, 676,
- 676, 676, 676, 676, 676, 676, 676, 676,
- 676, 676, 676, 676, 676, 676, 676, 200,
- 200, 200, 676, 676, 676, 676, 676, 676,
-
- 676, 676, 676, 676, 676, 676, 676, 676,
- 676, 676, 676, 676, 676, 676, 676, 676,
- 676, 676, 200, 676, 676, 676, 676, 676,
- 676, 676, 676, 676, 200, 676, 200, 200,
-
- 676, 676, 676, 676, 676, 676, 676, 200,
- 200, 200, 677, 200, 200, 200, 200, 678,
- 675, 675, 679, 679, 679, 200, 679, 200,
- 675, 675, 680, 675, 680, 680, 680, 678,
-
- 200, 200, 200, 200, 200, 200, 681, 682,
+ 476, 476, 476, 476, 476, 476, 476, 476,
+ 476, 477, 476, 476, 476, 476, 476, 476,
+ 476, 477, 476, 476, 477, 476, 476, 476,
+ 476, 476, 478, 479, 480, 476, 474, 474,
+
+ 474, 473, 473, 473, 473, 473, 473, 473,
+ 473, 474, 474, 474, 474, 481, 482, 479,
+ 476, 172, 174, 483, 483, 472, 478, 478,
+ 484, 484, 484, 484, 484, 484, 484, 484,
+
+ 476, 476, 473, 473, 485, 485, 486, 487,
+ 488, 489, 490, 491, 492, 493, 494, 495,
+ 496, 497, 498, 499, 499, 499, 499, 499,
+ 500, 501, 501, 502, 502, 503, 502, 502,
+
+ 504, 505, 506, 506, 201, 507, 507, 507,
+ 507, 507, 507, 507, 507, 201, 201, 507,
+ 507, 201, 201, 507, 507, 507, 507, 507,
+ 507, 507, 507, 507, 507, 507, 507, 507,
+
+ 507, 507, 507, 507, 507, 507, 507, 507,
+ 507, 201, 507, 507, 507, 507, 507, 507,
+ 507, 201, 507, 201, 201, 201, 507, 507,
+ 507, 507, 201, 201, 508, 509, 510, 506,
+
+ 506, 505, 505, 505, 505, 201, 201, 506,
+ 506, 201, 201, 511, 511, 512, 513, 201,
+ 201, 201, 201, 201, 201, 201, 201, 510,
+ 201, 201, 201, 201, 514, 514, 201, 514,
+
+ 507, 507, 505, 505, 201, 201, 515, 516,
+ 517, 518, 519, 520, 521, 522, 523, 524,
+ 507, 507, 525, 525, 526, 526, 526, 526,
+ 526, 527, 528, 529, 530, 531, 201, 201,
+
+ 201, 532, 533, 534, 201, 535, 535, 535,
+ 535, 535, 535, 201, 201, 201, 201, 535,
+ 535, 201, 201, 535, 535, 535, 535, 535,
+ 535, 535, 535, 535, 535, 535, 535, 535,
+
+ 535, 535, 535, 535, 535, 535, 535, 535,
+ 535, 201, 535, 535, 535, 535, 535, 535,
+ 535, 201, 535, 536, 201, 535, 536, 201,
+ 535, 535, 201, 201, 537, 201, 538, 538,
+
+ 538, 533, 533, 201, 201, 201, 201, 533,
+ 533, 201, 201, 533, 533, 539, 201, 201,
+ 201, 540, 201, 201, 201, 201, 201, 201,
+ 201, 536, 536, 536, 535, 201, 536, 201,
+
+ 201, 201, 201, 201, 201, 201, 541, 542,
+ 543, 544, 545, 546, 547, 548, 549, 550,
+ 533, 533, 535, 535, 535, 540, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 551, 551, 552, 201, 553, 553, 553,
+ 553, 553, 553, 553, 554, 553, 201, 553,
+ 553, 553, 201, 553, 553, 553, 553, 553,
+ 553, 553, 553, 553, 553, 553, 553, 553,
+
+ 553, 553, 553, 553, 553, 553, 553, 553,
+ 553, 201, 553, 553, 553, 553, 553, 553,
+ 553, 201, 553, 553, 201, 553, 553, 553,
+ 553, 553, 201, 201, 555, 553, 552, 552,
+
+ 552, 551, 551, 551, 551, 551, 201, 551,
+ 551, 552, 201, 552, 552, 556, 201, 201,
+ 553, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 553, 554, 557, 557, 201, 201, 558, 559,
+ 560, 561, 562, 563, 564, 565, 566, 567,
+ 568, 569, 201, 201, 201, 201, 201, 201,
+ 201, 570, 571, 571, 571, 571, 571, 571,
+
+ 201, 572, 573, 573, 201, 574, 574, 574,
+ 574, 574, 574, 574, 574, 201, 201, 574,
+ 574, 201, 201, 574, 574, 574, 574, 574,
+ 574, 574, 574, 574, 574, 574, 574, 574,
+
+ 574, 574, 574, 574, 574, 574, 574, 574,
+ 574, 201, 574, 574, 574, 574, 574, 574,
+ 574, 201, 574, 574, 201, 575, 574, 574,
+ 574, 574, 201, 201, 576, 574, 577, 572,
+
+ 573, 572, 572, 572, 578, 201, 201, 573,
+ 579, 201, 201, 579, 579, 580, 201, 201,
+ 201, 201, 201, 201, 201, 201, 581, 577,
+ 201, 201, 201, 201, 582, 582, 201, 574,
+
+ 574, 574, 578, 578, 201, 201, 583, 584,
+ 585, 586, 587, 588, 589, 590, 591, 592,
+ 593, 575, 594, 594, 594, 594, 594, 594,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 595, 596, 201, 596, 596, 596,
+ 596, 596, 596, 201, 201, 201, 596, 596,
+ 596, 201, 596, 596, 597, 596, 201, 201,
+ 201, 596, 596, 201, 596, 201, 596, 596,
+
+ 201, 201, 201, 596, 596, 201, 201, 201,
+ 596, 596, 596, 201, 201, 201, 596, 596,
+ 596, 596, 596, 596, 596, 596, 598, 596,
+ 596, 596, 201, 201, 201, 201, 599, 600,
+
+ 595, 600, 600, 201, 201, 201, 600, 600,
+ 600, 201, 601, 601, 601, 602, 201, 201,
+ 603, 201, 201, 201, 201, 201, 201, 599,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 604, 605,
+ 606, 607, 608, 609, 610, 611, 612, 613,
+ 614, 614, 614, 615, 615, 615, 615, 615,
+ 615, 616, 615, 201, 201, 201, 201, 201,
+
+ 617, 618, 618, 618, 201, 619, 619, 619,
+ 619, 619, 619, 619, 619, 201, 619, 619,
+ 619, 201, 619, 619, 619, 619, 619, 619,
+ 619, 619, 619, 619, 619, 619, 619, 619,
+
+ 619, 619, 619, 619, 619, 619, 619, 619,
+ 619, 201, 619, 619, 619, 619, 619, 619,
+ 619, 619, 619, 619, 620, 619, 619, 619,
+ 619, 619, 201, 201, 201, 621, 622, 622,
+
+ 622, 618, 618, 618, 618, 201, 622, 622,
+ 623, 201, 622, 622, 622, 624, 201, 201,
+ 201, 201, 201, 201, 201, 625, 626, 201,
+ 621, 621, 627, 201, 201, 201, 201, 201,
+
+ 619, 619, 628, 628, 201, 201, 629, 630,
+ 631, 632, 633, 634, 635, 636, 637, 638,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 639, 639, 639, 639, 639, 639, 639, 640,
+
+ 641, 642, 643, 643, 201, 644, 644, 644,
+ 644, 644, 644, 644, 644, 201, 644, 644,
+ 644, 201, 644, 644, 644, 644, 644, 644,
+ 644, 644, 644, 644, 644, 644, 644, 644,
+
+ 644, 644, 644, 644, 644, 644, 644, 644,
+ 644, 201, 644, 644, 644, 644, 644, 644,
+ 644, 644, 644, 644, 201, 644, 644, 644,
+ 644, 644, 201, 201, 645, 646, 643, 647,
+
+ 648, 643, 649, 643, 643, 201, 647, 648,
+ 648, 201, 648, 648, 650, 651, 201, 201,
+ 201, 201, 201, 201, 201, 649, 649, 201,
+ 201, 201, 201, 201, 201, 201, 644, 201,
+
+ 644, 644, 652, 652, 201, 201, 653, 654,
+ 655, 656, 657, 658, 659, 660, 661, 662,
+ 201, 663, 663, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 664, 665, 666, 666, 201, 667, 667, 667,
+ 667, 667, 667, 667, 667, 201, 667, 667,
+ 667, 201, 667, 667, 667, 667, 667, 667,
+ 667, 667, 667, 667, 667, 667, 667, 667,
+
+ 667, 667, 667, 667, 667, 667, 667, 667,
+ 667, 668, 667, 667, 667, 667, 667, 667,
+ 667, 667, 667, 667, 667, 667, 667, 667,
+ 667, 667, 668, 669, 669, 670, 671, 666,
+
+ 666, 672, 672, 672, 673, 201, 666, 666,
+ 666, 201, 674, 674, 674, 675, 676, 677,
+ 201, 201, 201, 201, 678, 678, 678, 671,
+ 679, 679, 679, 679, 679, 679, 679, 680,
+
+ 667, 667, 673, 673, 201, 201, 681, 682,
683, 684, 685, 686, 687, 688, 689, 690,
- 200, 200, 675, 675, 691, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 692, 692, 692, 692, 692, 692, 692,
- 692, 692, 692, 692, 692, 692, 692, 692,
- 692, 692, 692, 692, 692, 692, 692, 692,
- 692, 692, 692, 692, 692, 692, 692, 692,
-
- 692, 692, 692, 692, 692, 692, 692, 692,
- 692, 692, 692, 692, 692, 692, 692, 692,
- 692, 693, 692, 694, 693, 693, 693, 693,
- 695, 695, 696, 200, 200, 200, 200, 12,
-
- 692, 692, 692, 692, 692, 692, 697, 693,
- 698, 698, 698, 698, 693, 693, 693, 699,
- 700, 701, 702, 703, 704, 705, 706, 707,
- 708, 709, 710, 710, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 711, 711, 200, 711, 200, 200, 711,
- 711, 200, 711, 200, 200, 711, 200, 200,
- 200, 200, 200, 200, 711, 711, 711, 711,
- 200, 711, 711, 711, 711, 711, 711, 711,
-
- 200, 711, 711, 711, 200, 711, 200, 711,
- 200, 200, 711, 711, 200, 711, 711, 711,
- 711, 712, 711, 713, 712, 712, 712, 712,
- 714, 714, 200, 712, 712, 711, 200, 200,
-
- 711, 711, 711, 711, 711, 200, 715, 200,
- 716, 716, 716, 716, 712, 712, 200, 200,
- 717, 718, 719, 720, 721, 722, 723, 724,
- 725, 726, 200, 200, 727, 727, 728, 728,
-
- 729, 730, 730, 730, 731, 732, 731, 731,
- 733, 731, 731, 734, 735, 736, 736, 736,
- 736, 736, 733, 737, 736, 737, 737, 737,
- 738, 738, 737, 737, 737, 737, 737, 737,
-
- 739, 740, 741, 742, 743, 744, 745, 746,
- 747, 748, 749, 749, 749, 749, 749, 749,
- 749, 749, 749, 749, 750, 738, 737, 738,
- 737, 751, 752, 753, 752, 753, 754, 754,
-
- 729, 729, 729, 755, 729, 729, 729, 729,
- 200, 729, 729, 729, 729, 755, 729, 729,
- 729, 729, 755, 729, 729, 729, 729, 755,
- 729, 729, 729, 729, 755, 729, 729, 729,
-
- 729, 729, 729, 729, 729, 729, 729, 729,
- 729, 755, 756, 757, 757, 200, 200, 200,
- 200, 758, 759, 760, 761, 760, 760, 762,
- 760, 762, 759, 759, 759, 759, 763, 764,
-
- 759, 760, 765, 765, 766, 734, 765, 765,
- 729, 729, 729, 729, 767, 768, 768, 768,
- 763, 763, 763, 760, 763, 763, 769, 763,
- 200, 763, 763, 763, 763, 760, 763, 763,
-
- 763, 763, 760, 763, 763, 763, 763, 760,
- 763, 763, 763, 763, 760, 763, 769, 769,
- 769, 763, 763, 763, 763, 763, 763, 763,
- 769, 760, 769, 769, 769, 200, 770, 770,
-
- 771, 771, 771, 771, 771, 771, 772, 771,
- 771, 771, 771, 771, 771, 200, 773, 771,
- 774, 774, 775, 776, 777, 778, 778, 778,
- 778, 779, 779, 200, 200, 200, 200, 200,
-
- 780, 780, 780, 780, 780, 780, 780, 780,
- 780, 780, 780, 780, 780, 780, 780, 780,
- 780, 780, 780, 780, 780, 780, 780, 780,
- 780, 780, 780, 780, 780, 780, 780, 780,
-
- 780, 780, 781, 780, 780, 780, 782, 780,
- 781, 780, 780, 783, 784, 785, 786, 785,
- 785, 787, 785, 788, 788, 788, 785, 789,
- 784, 790, 791, 792, 792, 788, 788, 781,
-
- 793, 794, 795, 796, 797, 798, 799, 800,
- 801, 802, 803, 803, 804, 804, 804, 804,
- 780, 780, 780, 780, 780, 780, 787, 787,
- 785, 785, 781, 781, 781, 781, 788, 788,
-
- 788, 781, 783, 783, 783, 781, 781, 783,
- 783, 783, 783, 783, 783, 783, 781, 781,
- 781, 788, 788, 788, 788, 781, 781, 781,
- 781, 781, 781, 781, 781, 781, 781, 781,
-
- 781, 781, 788, 783, 792, 788, 788, 783,
- 783, 783, 783, 783, 783, 805, 781, 783,
- 806, 807, 808, 809, 810, 811, 812, 813,
- 814, 815, 816, 816, 816, 817, 818, 818,
-
- 819, 819, 819, 819, 819, 819, 819, 819,
- 819, 819, 819, 819, 819, 819, 819, 819,
- 819, 819, 819, 819, 819, 819, 819, 819,
- 819, 819, 819, 819, 819, 819, 819, 819,
-
- 819, 819, 819, 819, 819, 819, 200, 820,
- 200, 200, 200, 200, 200, 820, 200, 200,
- 821, 821, 821, 821, 821, 821, 821, 821,
- 821, 821, 821, 821, 821, 821, 821, 821,
-
- 821, 821, 821, 821, 821, 821, 821, 821,
- 821, 821, 821, 821, 821, 821, 821, 821,
- 821, 821, 821, 821, 821, 821, 821, 822,
- 822, 823, 823, 824, 825, 826, 826, 826,
-
- 827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 827, 827, 827, 827, 827, 827,
-
- 827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 827, 827, 827, 827, 827, 827,
- 827, 827, 828, 828, 828, 828, 828, 827,
-
- 829, 830, 830, 830, 830, 830, 830, 830,
- 830, 830, 830, 830, 830, 830, 830, 830,
- 830, 830, 830, 830, 830, 830, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
-
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
- 829, 829, 829, 829, 829, 829, 829, 829,
-
- 829, 829, 829, 831, 831, 831, 831, 831,
- 832, 832, 832, 832, 832, 832, 832, 832,
- 832, 832, 832, 832, 832, 832, 832, 832,
- 832, 832, 832, 832, 832, 832, 832, 832,
-
- 832, 832, 832, 833, 833, 833, 833, 833,
- 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 833, 833, 833, 833, 833, 833,
-
- 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 833, 833, 833, 833, 833, 833,
- 833, 833, 834, 834, 834, 834, 834, 834,
-
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
-
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
-
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 200, 835, 835, 835, 835, 200, 200,
- 835, 835, 835, 835, 835, 835, 835, 200,
- 835, 200, 835, 835, 835, 835, 200, 200,
-
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 200, 835, 835, 835, 835, 200, 200,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
-
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 200, 835, 835, 835, 835, 200, 200,
- 835, 835, 835, 835, 835, 835, 835, 200,
-
- 835, 200, 835, 835, 835, 835, 200, 200,
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 835, 835, 835, 835, 835, 835, 200,
- 835, 835, 835, 835, 835, 835, 835, 835,
-
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
-
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 200, 835, 835, 835, 835, 200, 200,
- 835, 835, 835, 835, 835, 835, 835, 836,
-
- 835, 835, 835, 835, 835, 835, 835, 836,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 835, 835, 835, 835, 835,
- 835, 835, 835, 200, 200, 837, 837, 838,
-
- 839, 840, 841, 842, 842, 842, 842, 841,
- 841, 843, 844, 845, 846, 847, 848, 849,
- 850, 851, 852, 852, 852, 852, 852, 852,
- 852, 852, 852, 852, 852, 200, 200, 200,
-
- 836, 836, 836, 836, 836, 836, 836, 836,
- 836, 836, 836, 836, 836, 836, 836, 836,
+ 691, 691, 691, 691, 691, 691, 679, 679,
+ 679, 692, 670, 670, 670, 670, 670, 670,
+
+ 201, 201, 693, 693, 201, 694, 694, 694,
+ 694, 694, 694, 694, 694, 694, 694, 694,
+ 694, 694, 694, 694, 694, 694, 694, 201,
+ 201, 201, 694, 694, 694, 694, 694, 694,
+
+ 694, 694, 694, 694, 694, 694, 694, 694,
+ 694, 694, 694, 694, 694, 694, 694, 694,
+ 694, 694, 201, 694, 694, 694, 694, 694,
+ 694, 694, 694, 694, 201, 694, 201, 201,
+
+ 694, 694, 694, 694, 694, 694, 694, 201,
+ 201, 201, 695, 201, 201, 201, 201, 696,
+ 693, 693, 697, 697, 697, 201, 697, 201,
+ 693, 693, 698, 693, 698, 698, 698, 696,
+
+ 201, 201, 201, 201, 201, 201, 699, 700,
+ 701, 702, 703, 704, 705, 706, 707, 708,
+ 201, 201, 693, 693, 709, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710,
+
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 710, 710, 710, 710, 710, 710, 710,
+ 710, 711, 710, 712, 711, 711, 711, 711,
+ 713, 713, 714, 201, 201, 201, 201, 12,
+
+ 710, 710, 710, 710, 710, 710, 715, 711,
+ 716, 716, 716, 716, 711, 711, 711, 717,
+ 718, 719, 720, 721, 722, 723, 724, 725,
+ 726, 727, 728, 728, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 729, 729, 201, 729, 201, 201, 729,
+ 729, 201, 729, 201, 201, 729, 201, 201,
+ 201, 201, 201, 201, 729, 729, 729, 729,
+ 201, 729, 729, 729, 729, 729, 729, 729,
+
+ 201, 729, 729, 729, 201, 729, 201, 729,
+ 201, 201, 729, 729, 201, 729, 729, 729,
+ 729, 730, 729, 731, 730, 730, 730, 730,
+ 732, 732, 201, 730, 730, 729, 201, 201,
+
+ 729, 729, 729, 729, 729, 201, 733, 201,
+ 734, 734, 734, 734, 730, 730, 201, 201,
+ 735, 736, 737, 738, 739, 740, 741, 742,
+ 743, 744, 201, 201, 745, 745, 746, 746,
+
+ 747, 748, 748, 748, 749, 750, 749, 749,
+ 751, 749, 749, 752, 753, 754, 754, 754,
+ 754, 754, 751, 755, 754, 755, 755, 755,
+ 756, 756, 755, 755, 755, 755, 755, 755,
+
+ 757, 758, 759, 760, 761, 762, 763, 764,
+ 765, 766, 767, 767, 767, 767, 767, 767,
+ 767, 767, 767, 767, 768, 756, 755, 756,
+ 755, 769, 770, 771, 770, 771, 772, 772,
+
+ 747, 747, 747, 773, 747, 747, 747, 747,
+ 201, 747, 747, 747, 747, 773, 747, 747,
+ 747, 747, 773, 747, 747, 747, 747, 773,
+ 747, 747, 747, 747, 773, 747, 747, 747,
+
+ 747, 747, 747, 747, 747, 747, 747, 747,
+ 747, 773, 774, 775, 775, 201, 201, 201,
+ 201, 776, 777, 778, 779, 778, 778, 780,
+ 778, 780, 777, 777, 777, 777, 781, 782,
+
+ 777, 778, 783, 783, 784, 752, 783, 783,
+ 747, 747, 747, 747, 785, 786, 786, 786,
+ 781, 781, 781, 778, 781, 781, 787, 781,
+ 201, 781, 781, 781, 781, 778, 781, 781,
+
+ 781, 781, 778, 781, 781, 781, 781, 778,
+ 781, 781, 781, 781, 778, 781, 787, 787,
+ 787, 781, 781, 781, 781, 781, 781, 781,
+ 787, 778, 787, 787, 787, 201, 788, 788,
+
+ 789, 789, 789, 789, 789, 789, 790, 789,
+ 789, 789, 789, 789, 789, 201, 791, 789,
+ 792, 792, 793, 794, 795, 796, 796, 796,
+ 796, 797, 797, 201, 201, 201, 201, 201,
+
+ 798, 798, 798, 798, 798, 798, 798, 798,
+ 798, 798, 798, 798, 798, 798, 798, 798,
+ 798, 798, 798, 798, 798, 798, 798, 798,
+ 798, 798, 798, 798, 798, 798, 798, 798,
+
+ 798, 798, 799, 798, 798, 798, 800, 798,
+ 799, 798, 798, 801, 802, 803, 804, 803,
+ 803, 805, 803, 806, 806, 806, 803, 807,
+ 802, 808, 809, 810, 810, 806, 806, 799,
+
+ 811, 812, 813, 814, 815, 816, 817, 818,
+ 819, 820, 821, 821, 822, 822, 822, 822,
+ 798, 798, 798, 798, 798, 798, 805, 805,
+ 803, 803, 799, 799, 799, 799, 806, 806,
+
+ 806, 799, 801, 801, 801, 799, 799, 801,
+ 801, 801, 801, 801, 801, 801, 799, 799,
+ 799, 806, 806, 806, 806, 799, 799, 799,
+ 799, 799, 799, 799, 799, 799, 799, 799,
+
+ 799, 799, 806, 801, 810, 806, 806, 801,
+ 801, 801, 801, 801, 801, 823, 799, 801,
+ 824, 825, 826, 827, 828, 829, 830, 831,
+ 832, 833, 834, 834, 834, 835, 836, 836,
+
+ 837, 837, 837, 837, 837, 837, 837, 837,
+ 837, 837, 837, 837, 837, 837, 837, 837,
+ 837, 837, 837, 837, 837, 837, 837, 837,
+ 837, 837, 837, 837, 837, 837, 837, 837,
+
+ 837, 837, 837, 837, 837, 837, 201, 838,
+ 201, 201, 201, 201, 201, 838, 201, 201,
+ 839, 839, 839, 839, 839, 839, 839, 839,
+ 839, 839, 839, 839, 839, 839, 839, 839,
+
+ 839, 839, 839, 839, 839, 839, 839, 839,
+ 839, 839, 839, 839, 839, 839, 839, 839,
+ 839, 839, 839, 839, 839, 839, 839, 840,
+ 840, 841, 841, 842, 843, 844, 844, 844,
+
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 845, 845, 845, 845, 845, 845,
+ 845, 845, 846, 846, 846, 846, 846, 845,
+
+ 847, 848, 848, 848, 848, 848, 848, 848,
+ 848, 848, 848, 848, 848, 848, 848, 848,
+ 848, 848, 848, 848, 848, 848, 847, 847,
+ 847, 847, 847, 847, 847, 847, 847, 847,
+
+ 847, 847, 847, 847, 847, 847, 847, 847,
+ 847, 847, 847, 847, 847, 847, 847, 847,
+ 847, 847, 847, 847, 847, 847, 847, 847,
+ 847, 847, 847, 847, 847, 847, 847, 847,
+
+ 847, 847, 847, 849, 849, 849, 849, 849,
+ 850, 850, 850, 850, 850, 850, 850, 850,
+ 850, 850, 850, 850, 850, 850, 850, 850,
+ 850, 850, 850, 850, 850, 850, 850, 850,
+
+ 850, 850, 850, 851, 851, 851, 851, 851,
+ 851, 851, 851, 851, 851, 851, 851, 851,
+ 851, 851, 851, 851, 851, 851, 851, 851,
+ 851, 851, 851, 851, 851, 851, 851, 851,
+
+ 851, 851, 851, 851, 851, 851, 851, 851,
+ 851, 851, 851, 851, 851, 851, 851, 851,
+ 851, 851, 851, 851, 851, 851, 851, 851,
+ 851, 851, 852, 852, 852, 852, 852, 852,
+
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
853, 853, 853, 853, 853, 853, 853, 853,
- 853, 853, 200, 200, 200, 200, 200, 200,
-
- 854, 855, 856, 857, 858, 859, 860, 861,
- 862, 863, 864, 865, 866, 867, 868, 869,
- 870, 871, 872, 873, 874, 875, 876, 877,
- 878, 879, 880, 881, 882, 883, 884, 885,
-
- 886, 887, 888, 889, 890, 891, 892, 893,
- 894, 895, 896, 897, 898, 899, 900, 901,
- 902, 903, 904, 905, 906, 907, 908, 909,
- 910, 911, 912, 913, 914, 915, 916, 917,
-
- 918, 919, 920, 921, 922, 923, 924, 925,
- 926, 927, 928, 929, 930, 931, 932, 933,
- 934, 934, 934, 934, 934, 935, 200, 200,
- 936, 936, 936, 936, 936, 936, 200, 200,
-
- 937, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 938, 938, 938,
-
- 938, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 938, 938, 938,
-
- 938, 938, 938, 938, 938, 938, 938, 938,
- 938, 938, 938, 938, 938, 939, 940, 938,
- 938, 938, 938, 938, 938, 938, 938, 941,
- 941, 941, 941, 941, 941, 941, 941, 941,
-
- 942, 943, 943, 943, 943, 943, 943, 943,
- 943, 943, 943, 943, 943, 943, 943, 943,
- 943, 943, 943, 943, 943, 943, 943, 943,
- 943, 943, 943, 944, 945, 200, 200, 200,
-
- 946, 946, 946, 946, 946, 946, 946, 946,
- 946, 946, 946, 946, 946, 946, 946, 946,
- 946, 946, 946, 946, 946, 946, 946, 946,
- 946, 946, 946, 946, 946, 946, 946, 946,
-
- 946, 946, 946, 946, 946, 946, 946, 946,
- 946, 946, 946, 947, 947, 947, 948, 948,
- 948, 949, 949, 949, 949, 949, 949, 949,
- 949, 200, 200, 200, 200, 200, 200, 200,
-
- 950, 950, 950, 950, 950, 950, 950, 950,
- 950, 950, 950, 950, 950, 200, 950, 950,
- 950, 950, 951, 951, 952, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 953, 953, 953, 953, 953, 953, 953, 953,
- 953, 953, 953, 953, 953, 953, 953, 953,
- 953, 953, 954, 954, 955, 956, 956, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 957, 957, 957, 957, 957, 957, 957, 957,
- 957, 957, 957, 957, 957, 957, 957, 957,
- 957, 957, 958, 958, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 201, 853, 853, 853, 853, 201, 201,
+ 853, 853, 853, 853, 853, 853, 853, 201,
+ 853, 201, 853, 853, 853, 853, 201, 201,
+
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 201, 853, 853, 853, 853, 201, 201,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 201, 853, 853, 853, 853, 201, 201,
+ 853, 853, 853, 853, 853, 853, 853, 201,
+
+ 853, 201, 853, 853, 853, 853, 201, 201,
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 853, 853, 853, 853, 853, 853, 201,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 201, 853, 853, 853, 853, 201, 201,
+ 853, 853, 853, 853, 853, 853, 853, 854,
+
+ 853, 853, 853, 853, 853, 853, 853, 854,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 853, 853, 853, 853, 853,
+ 853, 853, 853, 201, 201, 855, 855, 856,
+
+ 857, 858, 859, 860, 860, 860, 860, 859,
+ 859, 861, 862, 863, 864, 865, 866, 867,
+ 868, 869, 870, 870, 870, 870, 870, 870,
+ 870, 870, 870, 870, 870, 201, 201, 201,
+
+ 854, 854, 854, 854, 854, 854, 854, 854,
+ 854, 854, 854, 854, 854, 854, 854, 854,
+ 871, 871, 871, 871, 871, 871, 871, 871,
+ 871, 871, 201, 201, 201, 201, 201, 201,
+
+ 872, 873, 874, 875, 876, 877, 878, 879,
+ 880, 881, 882, 883, 884, 885, 886, 887,
+ 888, 889, 890, 891, 892, 893, 894, 895,
+ 896, 897, 898, 899, 900, 901, 902, 903,
+
+ 904, 905, 906, 907, 908, 909, 910, 911,
+ 912, 913, 914, 915, 916, 917, 918, 919,
+ 920, 921, 922, 923, 924, 925, 926, 927,
+ 928, 929, 930, 931, 932, 933, 934, 935,
+
+ 936, 937, 938, 939, 940, 941, 942, 943,
+ 944, 945, 946, 947, 948, 949, 950, 951,
+ 952, 952, 952, 952, 952, 953, 201, 201,
+ 954, 954, 954, 954, 954, 954, 201, 201,
+
+ 955, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 956, 956, 956,
+
+ 956, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 956, 956, 956,
+
+ 956, 956, 956, 956, 956, 956, 956, 956,
+ 956, 956, 956, 956, 956, 957, 958, 956,
+ 956, 956, 956, 956, 956, 956, 956, 959,
959, 959, 959, 959, 959, 959, 959, 959,
- 959, 959, 959, 959, 959, 200, 959, 959,
- 959, 200, 960, 960, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
+ 960, 961, 961, 961, 961, 961, 961, 961,
961, 961, 961, 961, 961, 961, 961, 961,
961, 961, 961, 961, 961, 961, 961, 961,
- 961, 961, 961, 961, 961, 961, 961, 961,
- 961, 961, 961, 961, 961, 961, 961, 961,
+ 961, 961, 961, 962, 963, 201, 201, 201,
+
+ 964, 964, 964, 964, 964, 964, 964, 964,
+ 964, 964, 964, 964, 964, 964, 964, 964,
+ 964, 964, 964, 964, 964, 964, 964, 964,
+ 964, 964, 964, 964, 964, 964, 964, 964,
+
+ 964, 964, 964, 964, 964, 964, 964, 964,
+ 964, 964, 964, 965, 965, 965, 966, 966,
+ 966, 967, 967, 967, 967, 967, 967, 967,
+ 967, 201, 201, 201, 201, 201, 201, 201,
+
+ 968, 968, 968, 968, 968, 968, 968, 968,
+ 968, 968, 968, 968, 968, 201, 968, 968,
+ 968, 968, 969, 969, 970, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 971, 971, 971, 971, 971, 971,
+ 971, 971, 972, 972, 973, 974, 974, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 975, 975, 975, 975, 975, 975, 975, 975,
+ 975, 975, 975, 975, 975, 975, 975, 975,
+ 975, 975, 976, 976, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 977, 977, 977, 977, 977, 977, 977, 977,
+ 977, 977, 977, 977, 977, 201, 977, 977,
+ 977, 201, 978, 978, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 979, 979, 979, 979,
+
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 979, 979, 979, 979,
+ 979, 979, 979, 979, 980, 980, 981, 980,
+ 980, 980, 980, 980, 980, 980, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 980, 981,
+ 981, 980, 980, 980, 980, 980, 980, 980,
+ 980, 980, 982, 980, 983, 983, 984, 985,
+ 983, 986, 983, 987, 979, 988, 201, 201,
+
+ 989, 990, 991, 992, 993, 994, 995, 996,
+ 997, 998, 201, 201, 201, 201, 201, 201,
+ 999, 999, 999, 999, 999, 999, 999, 999,
+ 999, 999, 201, 201, 201, 201, 201, 201,
+
+ 1000, 1000, 1001, 1002, 1003, 1004, 1005, 1006,
+ 1007, 1008, 1009, 1010, 1010, 1010, 1011, 201,
+ 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019,
+ 1020, 1021, 201, 201, 201, 201, 201, 201,
+
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+
+ 1022, 1022, 1022, 1023, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1024, 1024, 1024, 1024, 1024, 1010, 1010, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+
+ 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022,
+ 1022, 1025, 1026, 201, 201, 201, 201, 201,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 959, 959, 959,
- 961, 961, 961, 961, 961, 961, 961, 961,
- 961, 961, 961, 961, 961, 961, 961, 961,
- 961, 961, 961, 961, 962, 962, 963, 962,
- 962, 962, 962, 962, 962, 962, 963, 963,
-
- 963, 963, 963, 963, 963, 963, 962, 963,
- 963, 962, 962, 962, 962, 962, 962, 962,
- 962, 962, 964, 962, 965, 965, 966, 967,
- 965, 968, 965, 969, 961, 970, 200, 200,
-
- 971, 972, 973, 974, 975, 976, 977, 978,
- 979, 980, 200, 200, 200, 200, 200, 200,
- 981, 981, 981, 981, 981, 981, 981, 981,
- 981, 981, 200, 200, 200, 200, 200, 200,
-
- 982, 982, 983, 984, 985, 986, 987, 988,
- 989, 990, 991, 992, 992, 992, 993, 200,
- 994, 995, 996, 997, 998, 999, 1000, 1001,
- 1002, 1003, 200, 200, 200, 200, 200, 200,
-
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
-
- 1004, 1004, 1004, 1005, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
-
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
-
- 1004, 1004, 1004, 1004, 1004, 1004, 1004, 1004,
- 1004, 1007, 1008, 200, 200, 200, 200, 200,
- 941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 941, 941, 941, 941, 941, 941,
-
- 941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 941, 941, 941, 941, 941, 941,
-
- 941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 941, 941, 941, 941, 941, 941,
- 941, 941, 941, 941, 941, 941, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
- 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
- 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
- 1009, 1009, 1009, 1009, 1009, 1010, 1010, 200,
-
- 1011, 1011, 1011, 1012, 1012, 1012, 1012, 1011,
- 1011, 1012, 1012, 1012, 200, 200, 200, 200,
- 1012, 1012, 1011, 1012, 1012, 1012, 1012, 1012,
- 1012, 1013, 1014, 1015, 200, 200, 200, 200,
-
- 1016, 200, 200, 200, 1017, 1017, 1018, 1019,
- 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
- 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
- 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
-
- 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
- 1028, 1028, 1028, 1028, 1028, 1028, 200, 200,
- 1028, 1028, 1028, 1028, 1028, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
- 1029, 1029, 1030, 1030, 200, 200, 200, 200,
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
-
- 1029, 1029, 1029, 1029, 1029, 1029, 1029, 1029,
- 1029, 1029, 200, 200, 200, 200, 200, 200,
- 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038,
- 1039, 1040, 1041, 200, 200, 200, 1042, 1042,
-
- 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
- 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
- 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
- 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
-
- 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
- 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
- 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1045,
- 1046, 1047, 1047, 1048, 200, 200, 1049, 1049,
-
- 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
- 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
- 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
- 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
-
- 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
- 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050,
- 1050, 1050, 1050, 1050, 1050, 1051, 1052, 1051,
- 1052, 1052, 1052, 1052, 1052, 1052, 1052, 200,
-
- 1053, 1054, 1052, 1054, 1054, 1052, 1052, 1052,
- 1052, 1052, 1052, 1052, 1052, 1051, 1051, 1051,
- 1051, 1051, 1051, 1052, 1052, 1055, 1055, 1055,
- 1055, 1055, 1055, 1055, 1055, 200, 200, 1056,
-
- 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
- 1065, 1066, 200, 200, 200, 200, 200, 200,
- 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064,
- 1065, 1066, 200, 200, 200, 200, 200, 200,
-
- 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1068,
- 1069, 1069, 1069, 1069, 1067, 1067, 200, 200,
- 1070, 1070, 1070, 1070, 1070, 1071, 1071, 1071,
- 1071, 1071, 1071, 1070, 1070, 1071, 1072, 200,
-
- 1073, 1073, 1073, 1073, 1074, 1075, 1076, 1075,
- 1076, 1075, 1076, 1075, 1076, 1075, 1076, 1075,
- 1075, 1075, 1076, 1075, 1075, 1075, 1075, 1075,
- 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
-
- 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
- 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,
- 1075, 1075, 1075, 1075, 1077, 1078, 1073, 1073,
- 1073, 1073, 1073, 1079, 1073, 1079, 1074, 1074,
-
- 1079, 1079, 1073, 1079, 1080, 1075, 1075, 1075,
- 1075, 1075, 1075, 1075, 200, 200, 200, 200,
- 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088,
- 1089, 1090, 1091, 1091, 1092, 1093, 1091, 1091,
-
- 1093, 1094, 1094, 1094, 1094, 1094, 1094, 1094,
- 1094, 1094, 1094, 1095, 1096, 1095, 1095, 1095,
- 1095, 1095, 1095, 1095, 1094, 1094, 1094, 1094,
- 1094, 1094, 1094, 1094, 1094, 200, 200, 200,
-
- 1097, 1097, 1098, 1099, 1099, 1099, 1099, 1099,
- 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
- 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
- 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099,
-
- 1099, 1098, 1097, 1097, 1097, 1097, 1098, 1098,
- 1097, 1097, 1100, 1101, 1102, 1102, 1099, 1099,
- 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110,
- 1111, 1112, 1113, 1113, 1113, 1113, 1113, 1113,
-
- 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
- 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
- 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
- 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
-
- 1114, 1114, 1114, 1114, 1114, 1114, 1115, 1116,
- 1117, 1117, 1116, 1116, 1116, 1117, 1116, 1117,
- 1117, 1117, 1118, 1118, 200, 200, 200, 200,
- 200, 200, 200, 200, 1119, 1119, 1119, 1119,
-
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
- 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120,
-
- 1120, 1120, 1120, 1120, 1121, 1121, 1121, 1121,
- 1121, 1121, 1121, 1121, 1122, 1122, 1122, 1122,
- 1122, 1122, 1122, 1122, 1121, 1121, 1122, 1123,
- 200, 200, 200, 1124, 1124, 1125, 1125, 1125,
-
- 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133,
- 1134, 1135, 200, 200, 200, 1120, 1120, 1120,
- 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143,
- 1144, 1145, 1146, 1146, 1146, 1146, 1146, 1146,
-
- 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
- 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
- 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
- 1147, 1147, 1147, 1147, 1147, 1147, 1148, 1148,
-
- 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1150, 1150, 1150, 1151, 1152, 1153, 1153, 1153,
- 1153, 1153, 1150, 1150, 1153, 1153, 1153, 1153,
-
- 1150, 1154, 1152, 1152, 1152, 1152, 1152, 1152,
- 1152, 1155, 1155, 1155, 1155, 1153, 1155, 1155,
- 1155, 1155, 1154, 1156, 1157, 1158, 1158, 200,
- 1070, 1070, 200, 200, 200, 200, 200, 200,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 959, 959, 959,
+ 959, 959, 959, 959, 959, 959, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ 1027, 1027, 1027, 1027, 1027, 1028, 1028, 201,
+
+ 1029, 1029, 1029, 1030, 1030, 1030, 1030, 1029,
+ 1029, 1030, 1030, 1030, 201, 201, 201, 201,
+ 1030, 1030, 1029, 1030, 1030, 1030, 1030, 1030,
+ 1030, 1031, 1032, 1033, 201, 201, 201, 201,
+
+ 1034, 201, 201, 201, 1035, 1035, 1036, 1037,
+ 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045,
+ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+
+ 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,
+ 1046, 1046, 1046, 1046, 1046, 1046, 201, 201,
+ 1046, 1046, 1046, 1046, 1046, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+ 1047, 1047, 1048, 1048, 201, 201, 201, 201,
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+
+ 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047,
+ 1047, 1047, 201, 201, 201, 201, 201, 201,
+ 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056,
+ 1057, 1058, 1059, 201, 201, 201, 1060, 1060,
+
+ 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+ 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+ 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+ 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061,
+
+ 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+ 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
+ 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1063,
+ 1064, 1065, 1065, 1066, 201, 201, 1067, 1067,
+
+ 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+
+ 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068,
+ 1068, 1068, 1068, 1068, 1068, 1069, 1070, 1069,
+ 1070, 1070, 1070, 1070, 1070, 1070, 1070, 201,
+
+ 1071, 1072, 1070, 1072, 1072, 1070, 1070, 1070,
+ 1070, 1070, 1070, 1070, 1070, 1069, 1069, 1069,
+ 1069, 1069, 1069, 1070, 1070, 1073, 1073, 1073,
+ 1073, 1073, 1073, 1073, 1073, 201, 201, 1074,
+
+ 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,
+ 1083, 1084, 201, 201, 201, 201, 201, 201,
+ 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082,
+ 1083, 1084, 201, 201, 201, 201, 201, 201,
+
+ 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1086,
+ 1087, 1087, 1087, 1087, 1085, 1085, 201, 201,
+ 1088, 1088, 1088, 1088, 1088, 1089, 1089, 1089,
+ 1089, 1089, 1089, 1088, 1088, 1089, 1090, 201,
+
+ 1091, 1091, 1091, 1091, 1092, 1093, 1094, 1093,
+ 1094, 1093, 1094, 1093, 1094, 1093, 1094, 1093,
+ 1093, 1093, 1094, 1093, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+
+ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 1095, 1096, 1091, 1091,
+ 1091, 1091, 1091, 1097, 1091, 1097, 1092, 1092,
+
+ 1097, 1097, 1091, 1097, 1098, 1093, 1093, 1093,
+ 1093, 1093, 1093, 1093, 201, 201, 201, 201,
+ 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106,
+ 1107, 1108, 1109, 1109, 1110, 1111, 1109, 1109,
+
+ 1111, 1112, 1112, 1112, 1112, 1112, 1112, 1112,
+ 1112, 1112, 1112, 1113, 1114, 1113, 1113, 1113,
+ 1113, 1113, 1113, 1113, 1112, 1112, 1112, 1112,
+ 1112, 1112, 1112, 1112, 1112, 201, 201, 201,
+
+ 1115, 1115, 1116, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+ 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117,
+
+ 1117, 1116, 1115, 1115, 1115, 1115, 1116, 1116,
+ 1115, 1115, 1118, 1119, 1120, 1120, 1117, 1117,
+ 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128,
+ 1129, 1130, 1131, 1131, 1131, 1131, 1131, 1131,
+
+ 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+ 1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,
+
+ 1132, 1132, 1132, 1132, 1132, 1132, 1133, 1134,
+ 1135, 1135, 1134, 1134, 1134, 1135, 1134, 1135,
+ 1135, 1135, 1136, 1136, 201, 201, 201, 201,
+ 201, 201, 201, 201, 1137, 1137, 1137, 1137,
+
+ 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+ 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+ 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+ 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
+
+ 1138, 1138, 1138, 1138, 1139, 1139, 1139, 1139,
+ 1139, 1139, 1139, 1139, 1140, 1140, 1140, 1140,
+ 1140, 1140, 1140, 1140, 1139, 1139, 1140, 1141,
+ 201, 201, 201, 1142, 1142, 1143, 1143, 1143,
+
+ 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151,
+ 1152, 1153, 201, 201, 201, 1138, 1138, 1138,
+ 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
+ 1162, 1163, 1164, 1164, 1164, 1164, 1164, 1164,
+
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164,
+ 1165, 1165, 1165, 1165, 1165, 1165, 1166, 1166,
+
+ 1167, 1168, 1169, 1170, 1170, 1171, 1172, 1173,
+ 1174, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 1176, 1176, 1176, 1177, 1178, 1179, 1179, 1179,
+ 1179, 1179, 1176, 1176, 1179, 1179, 1179, 1179,
+
+ 1176, 1180, 1178, 1178, 1178, 1178, 1178, 1178,
+ 1178, 1181, 1181, 1181, 1181, 1179, 1181, 1181,
+ 1181, 1181, 1180, 1182, 1183, 1184, 1184, 1185,
+ 1088, 1088, 201, 201, 201, 201, 201, 201,
114, 114, 114, 114, 114, 114, 114, 114,
114, 114, 114, 114, 114, 114, 114, 114,
114, 114, 114, 114, 114, 114, 114, 114,
114, 114, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 114, 114, 1159, 1159,
- 1159, 1159, 1159, 1160, 1161, 1161, 1161, 1162,
- 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
- 1161, 1161, 1161, 1162, 1161, 1161, 1161, 1161,
+ 114, 114, 114, 114, 114, 114, 1186, 1186,
+ 1186, 1186, 1186, 1187, 1188, 1188, 1188, 1189,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1189, 1188, 1188, 1188, 1188,
- 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
- 1161, 1161, 1161, 1161, 1161, 1161, 1162, 1161,
- 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161,
- 1161, 1161, 1161, 1161, 1161, 1163, 1163, 1163,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1189, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
+ 1188, 1188, 1188, 1188, 1188, 1190, 1190, 1190,
- 1163, 1163, 1161, 1161, 1161, 1161, 1163, 1163,
- 1163, 1163, 1163, 114, 115, 115, 115, 115,
+ 1190, 1190, 1188, 1188, 1188, 1188, 1190, 1190,
+ 1190, 1190, 1190, 114, 115, 115, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
- 1164, 1165, 115, 115, 115, 1166, 115, 115,
+ 1191, 1192, 115, 115, 115, 1193, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
115, 115, 115, 115, 115, 115, 115, 115,
- 115, 115, 115, 1167, 1167, 1167, 1167, 1167,
+ 115, 115, 115, 1194, 1194, 1194, 1194, 1194,
- 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
- 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
- 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
- 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1168,
+ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
+ 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1195,
- 189, 189, 188, 189, 1169, 1169, 1169, 1169,
- 1169, 1169, 1170, 1171, 1171, 1172, 1173, 1174,
- 1175, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
- 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
+ 190, 190, 189, 190, 1196, 1196, 1196, 1196,
+ 1196, 1196, 1197, 1198, 1198, 1199, 1200, 1201,
+ 1202, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
+ 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
- 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1070,
- 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070,
- 1070, 1070, 1070, 1070, 1070, 1070, 200, 200,
- 200, 200, 200, 200, 1176, 1153, 1169, 1170,
+ 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
+ 1088, 1088, 1088, 1088, 1088, 1088, 1203, 1204,
+ 1204, 1205, 201, 1206, 1207, 1179, 1196, 1197,
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
@@ -1934,258 +1944,258 @@ static const unsigned short uc_property_trie[] = {
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 70, 71, 70, 71, 1177, 1178,
- 1179, 1180, 1181, 1182, 1183, 1183, 1184, 1183,
+ 70, 71, 70, 71, 70, 71, 1208, 1209,
+ 1210, 1211, 1212, 1213, 1214, 1214, 1215, 1214,
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
70, 71, 70, 71, 70, 71, 70, 71,
- 70, 71, 1185, 1186, 1185, 1186, 1185, 1186,
-
- 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
- 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- 1187, 1187, 1187, 1187, 1187, 1187, 200, 200,
- 1188, 1188, 1188, 1188, 1188, 1188, 200, 200,
-
- 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
- 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
- 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
-
- 1187, 1187, 1187, 1187, 1187, 1187, 200, 200,
- 1188, 1188, 1188, 1188, 1188, 1188, 200, 200,
- 1189, 1187, 1190, 1187, 1191, 1187, 1192, 1187,
- 200, 1188, 200, 1188, 200, 1188, 200, 1188,
-
- 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
- 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
- 1193, 1194, 1195, 1196, 1195, 1196, 1197, 1198,
- 1199, 1200, 1201, 1202, 1203, 1204, 200, 200,
-
- 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212,
- 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220,
- 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228,
- 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
-
- 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244,
- 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252,
- 1187, 1187, 1253, 1254, 1255, 200, 1256, 1257,
- 1188, 1188, 1258, 1259, 1260, 205, 1261, 205,
-
- 205, 1262, 1263, 1264, 1265, 200, 1266, 1267,
- 1268, 1269, 1268, 1269, 1270, 1262, 1262, 1262,
- 1187, 1187, 1271, 1272, 200, 200, 1273, 1274,
- 1188, 1188, 1275, 1276, 200, 1262, 1262, 1262,
-
- 1187, 1187, 1277, 1278, 1279, 1280, 1281, 1282,
- 1188, 1188, 1283, 1284, 1285, 1262, 1286, 1286,
- 200, 200, 1287, 1288, 1289, 200, 1290, 1291,
- 1292, 1293, 1294, 1295, 1296, 1297, 205, 200,
-
- 1298, 1298, 1299, 1299, 1299, 1299, 1299, 1300,
- 1299, 1299, 1299, 1301, 1302, 1303, 1304, 1305,
- 1306, 1307, 1306, 1308, 1309, 1310, 14, 1311,
- 1312, 1313, 1314, 1315, 1315, 1316, 1314, 1315,
-
- 14, 14, 14, 14, 1317, 1318, 1318, 1319,
- 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327,
- 13, 13, 13, 1328, 1328, 1329, 1330, 1330,
- 14, 1331, 1332, 14, 1333, 1334, 1311, 43,
-
- 43, 14, 14, 14, 1335, 16, 1336, 1337,
- 1338, 1338, 1339, 1339, 1339, 1339, 1340, 1340,
- 1340, 1340, 1341, 1342, 1343, 1344, 1345, 1346,
- 1345, 1345, 1345, 1345, 1344, 1345, 1345, 1347,
-
- 1348, 1349, 1349, 1349, 1350, 1351, 1352, 1353,
- 1354, 1355, 1356, 1356, 1356, 1356, 1356, 1356,
- 1357, 1358, 200, 200, 1359, 1360, 1361, 1362,
- 1363, 1364, 1365, 1365, 1366, 1367, 1368, 158,
-
- 1357, 63, 58, 59, 1359, 1360, 1361, 1362,
- 1363, 1364, 1365, 1365, 1366, 1367, 1368, 200,
- 1167, 1167, 1167, 1167, 1167, 1369, 1369, 1369,
- 1369, 1369, 1369, 1369, 1369, 200, 200, 200,
+ 70, 71, 1216, 1217, 1216, 1217, 1216, 1217,
+
+ 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
+ 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+ 1218, 1218, 1218, 1218, 1218, 1218, 201, 201,
+ 1219, 1219, 1219, 1219, 1219, 1219, 201, 201,
+
+ 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
+ 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+ 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
+ 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+
+ 1218, 1218, 1218, 1218, 1218, 1218, 201, 201,
+ 1219, 1219, 1219, 1219, 1219, 1219, 201, 201,
+ 1220, 1218, 1221, 1218, 1222, 1218, 1223, 1218,
+ 201, 1219, 201, 1219, 201, 1219, 201, 1219,
+
+ 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
+ 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
+ 1224, 1225, 1226, 1227, 1226, 1227, 1228, 1229,
+ 1230, 1231, 1232, 1233, 1234, 1235, 201, 201,
+
+ 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243,
+ 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
+ 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259,
+ 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267,
+
+ 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
+ 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283,
+ 1218, 1218, 1284, 1285, 1286, 201, 1287, 1288,
+ 1219, 1219, 1289, 1290, 1291, 206, 1292, 206,
+
+ 206, 1293, 1294, 1295, 1296, 201, 1297, 1298,
+ 1299, 1300, 1299, 1300, 1301, 1293, 1293, 1293,
+ 1218, 1218, 1302, 1303, 201, 201, 1304, 1305,
+ 1219, 1219, 1306, 1307, 201, 1293, 1293, 1293,
+
+ 1218, 1218, 1308, 1309, 1310, 1311, 1312, 1313,
+ 1219, 1219, 1314, 1315, 1316, 1293, 1317, 1317,
+ 201, 201, 1318, 1319, 1320, 201, 1321, 1322,
+ 1323, 1324, 1325, 1326, 1327, 1328, 206, 201,
+
+ 1329, 1329, 1330, 1330, 1330, 1330, 1330, 1331,
+ 1330, 1330, 1330, 1332, 1333, 1334, 1335, 1336,
+ 1337, 1338, 1337, 1339, 1340, 1341, 14, 1342,
+ 1343, 1344, 1345, 1346, 1346, 1347, 1345, 1346,
+
+ 14, 14, 14, 14, 1348, 1349, 1349, 1350,
+ 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358,
+ 13, 13, 13, 1359, 1359, 1360, 1361, 1361,
+ 14, 1362, 1363, 14, 1364, 1365, 1342, 43,
+
+ 43, 14, 14, 14, 1366, 16, 1367, 1368,
+ 1369, 1369, 1370, 1370, 1370, 1370, 1371, 1371,
+ 1371, 1371, 1372, 1373, 1374, 1375, 1376, 1377,
+ 1376, 1376, 1376, 1376, 1375, 1376, 1376, 1378,
+
+ 1379, 1380, 1380, 1380, 1381, 1382, 1383, 1384,
+ 1385, 1386, 1387, 1387, 1387, 1387, 1387, 1387,
+ 1388, 1389, 201, 201, 1390, 1391, 1392, 1393,
+ 1394, 1395, 1396, 1396, 1397, 1398, 1399, 159,
+
+ 1388, 63, 58, 59, 1390, 1391, 1392, 1393,
+ 1394, 1395, 1396, 1396, 1397, 1398, 1399, 201,
+ 1194, 1194, 1194, 1194, 1194, 1400, 1400, 1400,
+ 1400, 1400, 1400, 1400, 1400, 201, 201, 201,
12, 12, 12, 12, 12, 12, 12, 50,
- 1370, 12, 12, 1371, 1372, 1373, 1373, 1373,
- 1374, 1374, 1375, 1375, 1375, 1375, 1376, 1377,
- 1377, 1378, 1379, 1380, 1381, 1381, 1382, 1383,
-
- 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
- 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383,
- 171, 171, 178, 178, 171, 171, 171, 171,
- 178, 178, 178, 171, 171, 1384, 1384, 1384,
-
- 1384, 171, 1385, 1385, 1386, 1387, 1387, 195,
- 1388, 195, 1387, 1389, 1170, 1170, 1170, 1170,
- 1171, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1390, 1390, 1391, 1392, 51, 1390, 1390, 1391,
- 51, 1392, 1393, 1391, 1391, 1391, 1393, 1393,
- 1391, 1391, 1391, 1393, 51, 1391, 1394, 51,
- 36, 1391, 1391, 1391, 1391, 1391, 51, 51,
-
- 1390, 1390, 1390, 51, 1391, 51, 1395, 51,
- 1391, 51, 1396, 1397, 1391, 1391, 1398, 1393,
- 1391, 1391, 1399, 1391, 1393, 1400, 1400, 1400,
- 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1406,
-
- 1407, 1341, 1341, 1341, 1341, 1406, 1405, 1405,
- 1405, 1405, 1408, 1341, 1409, 1410, 1411, 1412,
- 1413, 1413, 1413, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65,
+ 1401, 12, 12, 1402, 1403, 1404, 1404, 1404,
+ 1405, 1405, 1406, 1406, 1406, 1406, 1407, 1408,
+ 1408, 1409, 1410, 1411, 1412, 1412, 1413, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
- 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414,
1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415,
1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415,
+ 172, 172, 179, 179, 172, 172, 172, 172,
+ 179, 179, 179, 172, 172, 1416, 1416, 1416,
+
+ 1416, 172, 1417, 1417, 1418, 1419, 1419, 196,
+ 1420, 196, 1419, 1421, 1197, 1197, 1197, 1197,
+ 1198, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1422, 1422, 1423, 1424, 51, 1422, 1422, 1423,
+ 51, 1424, 1425, 1423, 1423, 1423, 1425, 1425,
+ 1423, 1423, 1423, 1425, 51, 1423, 1426, 51,
+ 36, 1423, 1423, 1423, 1423, 1423, 51, 51,
+
+ 1422, 1422, 1422, 51, 1423, 51, 1427, 51,
+ 1423, 51, 1428, 1429, 1423, 1423, 1430, 1425,
+ 1423, 1423, 1431, 1423, 1425, 1432, 1432, 1432,
+ 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1438,
+
+ 1439, 1372, 1372, 1372, 1372, 1438, 1437, 1437,
+ 1437, 1437, 1440, 1372, 1441, 1442, 1443, 1444,
+ 1445, 1445, 1445, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65,
+
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447,
+ 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447,
- 1416, 1416, 1416, 111, 123, 1417, 1417, 1417,
- 1417, 1413, 1418, 1418, 200, 200, 200, 200,
+ 1448, 1448, 1448, 111, 123, 1449, 1449, 1449,
+ 1449, 1445, 1450, 1450, 201, 201, 201, 201,
36, 36, 36, 36, 36, 51, 51, 51,
- 51, 51, 1419, 1419, 51, 51, 51, 51,
+ 51, 51, 1451, 1451, 51, 51, 51, 51,
36, 51, 51, 36, 51, 51, 36, 51,
- 51, 51, 51, 51, 51, 51, 1419, 51,
+ 51, 51, 51, 51, 51, 51, 1451, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 1420, 1419, 1419,
+ 51, 51, 51, 51, 51, 1452, 1451, 1451,
51, 51, 36, 51, 36, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 1402, 1402, 1402, 1402, 1402,
- 1402, 1402, 1402, 1402, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 51, 51, 51, 1434, 1434, 1434, 1434, 1434,
+ 1434, 1434, 1434, 1434, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
- 36, 36, 36, 36, 1419, 36, 36, 36,
- 1421, 1422, 1421, 1423, 1424, 1423, 36, 36,
- 36, 36, 18, 57, 36, 1425, 36, 36,
+ 36, 36, 36, 36, 1451, 36, 36, 36,
+ 1453, 1454, 1453, 1455, 1456, 1455, 36, 36,
+ 36, 36, 18, 57, 36, 1457, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 1419, 36, 1419, 36,
- 36, 36, 36, 36, 1366, 1366, 36, 1366,
- 1366, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 1426, 1427, 36, 36,
+ 36, 36, 36, 36, 1451, 36, 1451, 36,
+ 36, 36, 36, 36, 1397, 1397, 36, 1397,
+ 1397, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 1458, 1459, 36, 36,
- 36, 1419, 36, 1428, 1419, 36, 36, 1419,
- 36, 1419, 36, 36, 36, 36, 36, 36,
- 36, 36, 1426, 1427, 1426, 1427, 36, 36,
+ 36, 1451, 36, 1460, 1451, 36, 36, 1451,
+ 36, 1451, 36, 36, 36, 36, 36, 36,
+ 36, 36, 1458, 1459, 1458, 1459, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 1419, 36, 1419, 36, 1426, 1427, 1426, 1427,
- 1426, 1427, 1426, 1427, 36, 1419, 1429, 1430,
- 1429, 1430, 1426, 1427, 1429, 1430, 1426, 1427,
- 1429, 1430, 1426, 1427, 1426, 1427, 1426, 1427,
+ 1451, 36, 1451, 36, 1458, 1459, 1458, 1459,
+ 1458, 1459, 1458, 1459, 36, 1451, 1461, 1462,
+ 1461, 1462, 1458, 1459, 1461, 1462, 1458, 1459,
+ 1461, 1462, 1458, 1459, 1458, 1459, 1458, 1459,
- 1429, 1430, 1426, 1427, 1429, 1430, 1426, 1427,
- 1429, 1430, 1426, 1427, 36, 36, 36, 1426,
- 1427, 1426, 1427, 36, 36, 36, 36, 36,
- 1431, 36, 36, 36, 36, 36, 36, 36,
+ 1461, 1462, 1458, 1459, 1461, 1462, 1458, 1459,
+ 1461, 1462, 1458, 1459, 36, 36, 36, 1458,
+ 1459, 1458, 1459, 36, 36, 36, 36, 36,
+ 1463, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 1426, 1427, 36, 36, 1432, 36,
- 1433, 1434, 36, 1434, 1419, 1419, 1419, 1419,
- 1426, 1427, 1426, 1427, 1426, 1427, 1426, 1427,
+ 36, 36, 1458, 1459, 36, 36, 1464, 36,
+ 1465, 1466, 36, 1466, 1451, 1451, 1451, 1451,
+ 1458, 1459, 1458, 1459, 1458, 1459, 1458, 1459,
36, 36, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36,
- 36, 1426, 1427, 1426, 1427, 1435, 36, 36,
- 1426, 1427, 36, 36, 36, 36, 1426, 1427,
- 1426, 1427, 1426, 1427, 1426, 1427, 1426, 1427,
+ 36, 1458, 1459, 1458, 1459, 1467, 36, 36,
+ 1458, 1459, 36, 36, 36, 36, 1458, 1459,
+ 1458, 1459, 1458, 1459, 1458, 1459, 1458, 1459,
- 1429, 1430, 1429, 1430, 1426, 1427, 1426, 1427,
- 1426, 1427, 1429, 1430, 1429, 1430, 36, 1436,
- 1426, 1427, 1437, 1437, 1437, 1341, 1438, 1438,
- 1341, 1341, 1439, 1439, 1439, 1440, 1440, 1341,
+ 1461, 1462, 1461, 1462, 1458, 1459, 1458, 1459,
+ 1458, 1459, 1461, 1462, 1461, 1462, 36, 1468,
+ 1458, 1459, 1469, 1469, 1469, 1372, 1470, 1470,
+ 1372, 1372, 1471, 1471, 1471, 1472, 1472, 1372,
- 51, 1402, 51, 51, 51, 51, 51, 51,
- 16, 1336, 16, 1336, 51, 51, 51, 51,
+ 51, 1434, 51, 51, 51, 51, 51, 51,
+ 16, 1367, 16, 1367, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 1441, 1441, 51, 51, 51, 51,
+ 51, 51, 1473, 1473, 51, 51, 51, 51,
36, 36, 51, 51, 51, 51, 51, 51,
- 51, 1442, 1443, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1444, 1444,
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
-
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
-
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 1444, 1444, 1444, 1402, 1341, 1402, 1402, 1402,
-
- 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
- 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
- 1402, 1402, 1402, 1402, 1402, 1445, 1402, 1402,
- 1402, 1402, 1402, 1341, 1341, 1341, 1341, 1341,
-
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1408, 1408, 1408, 1408,
- 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
-
- 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
- 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1446,
- 1446, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
- 1409, 1409, 1409, 1409, 1447, 1447, 1447, 1447,
-
- 1447, 1447, 1410, 1410, 1410, 1410, 1410, 1410,
- 1448, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1450, 1450, 1450, 1450, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 200, 200, 200, 200, 200,
+ 51, 1474, 1475, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 1476, 1476,
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+ 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476,
+ 1476, 1476, 1476, 1434, 1372, 1434, 1434, 1434,
+
+ 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434,
+ 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434,
+ 1434, 1434, 1434, 1434, 1434, 1477, 1434, 1434,
+ 1434, 1434, 1434, 1372, 1372, 1372, 1372, 1372,
+
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1440, 1440, 1440, 1440,
+ 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+
+ 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+ 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1478,
+ 1478, 1441, 1441, 1441, 1441, 1441, 1441, 1441,
+ 1441, 1441, 1441, 1441, 1479, 1479, 1479, 1479,
+
+ 1479, 1479, 1442, 1442, 1442, 1442, 1442, 1442,
+ 1480, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1482, 1482, 1482, 1482, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1484, 1484, 1484, 1484, 1485,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 1402, 1402, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
+ 51, 51, 51, 51, 51, 1434, 1434, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
+ 51, 51, 51, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
- 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459,
- 1460, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 1452, 1453, 1454, 1455,
- 1456, 1457, 1458, 1459, 1460, 65, 65, 65,
+ 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493,
+ 1494, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 1486, 1487, 1488, 1489,
+ 1490, 1491, 1492, 1493, 1494, 65, 65, 65,
65, 65, 65, 65, 65, 65, 65, 65,
- 63, 58, 59, 1359, 1360, 1361, 1362, 1363,
- 1364, 1461, 1461, 1461, 1461, 1461, 1461, 1461,
- 1461, 1461, 1461, 1461, 1462, 1462, 1462, 1462,
+ 63, 58, 59, 1390, 1391, 1392, 1393, 1394,
+ 1395, 1495, 1495, 1495, 1495, 1495, 1495, 1495,
+ 1495, 1495, 1495, 1495, 1496, 1496, 1496, 1496,
- 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462,
- 1462, 1462, 1462, 1462, 1462, 1462, 1463, 1463,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
+ 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496,
+ 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496,
+ 1496, 1496, 1496, 1496, 1496, 1496, 1497, 1497,
+ 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
- 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
- 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
- 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
+ 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
+ 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497,
+ 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
+ 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
- 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464,
- 1464, 1464, 1465, 1466, 1466, 1466, 1466, 1466,
- 1466, 1466, 1466, 1466, 1466, 1467, 1468, 1469,
- 1470, 1471, 1472, 1473, 1474, 1475, 1466, 1476,
+ 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498,
+ 1498, 1498, 1499, 1500, 1500, 1500, 1500, 1500,
+ 1500, 1500, 1500, 1500, 1500, 1501, 1502, 1503,
+ 1504, 1505, 1506, 1507, 1508, 1509, 1500, 1510,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 1408, 1408,
- 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
+ 51, 51, 51, 51, 51, 51, 1440, 1440,
+ 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
@@ -2199,348 +2209,288 @@ static const unsigned short uc_property_trie[] = {
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
+ 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
- 1441, 1441, 1441, 1441, 51, 51, 51, 51,
+ 1473, 1473, 1473, 1473, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1477, 1477, 1408, 1408,
- 1478, 1402, 1441, 1441, 1441, 1441, 1441, 1441,
+ 51, 51, 51, 51, 1511, 1511, 1440, 1440,
+ 1512, 1434, 1473, 1473, 1473, 1513, 1473, 1473,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 1441, 1441, 1441, 51, 51, 51, 51,
+ 51, 1473, 1473, 1473, 51, 51, 51, 51,
+ 1514, 51, 1514, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1441, 51, 51, 51, 51, 51, 51, 36,
- 1402, 1402, 1408, 1408, 1408, 1408, 1408, 1408,
- 1408, 1408, 1408, 1408, 1408, 1408, 1409, 1478,
-
- 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408,
- 1408, 1408, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1409, 1409, 1409, 1409, 1409, 1409,
- 1409, 1409, 1409, 1409, 1409, 1479, 1448, 1448,
-
- 1446, 1446, 1409, 1409, 1409, 1409, 1409, 1409,
- 1409, 1409, 1409, 1409, 1480, 1409, 1409, 1409,
- 1409, 1409, 1410, 1479, 1479, 1479, 1479, 1479,
- 1479, 1479, 1479, 1479, 1479, 1481, 1481, 1481,
-
- 1482, 1482, 1482, 1482, 1481, 1481, 1481, 1481,
- 1481, 1448, 1448, 1448, 1448, 1481, 1449, 1481,
- 1481, 1481, 1448, 1481, 1481, 1448, 1448, 1448,
- 1481, 1481, 1448, 1448, 1481, 1448, 1448, 1481,
-
- 1481, 1481, 1449, 1448, 1449, 1449, 1449, 1449,
- 1448, 1448, 1481, 1448, 1448, 1448, 1448, 1448,
- 1448, 1481, 1481, 1481, 1481, 1481, 1448, 1481,
- 1481, 1481, 1481, 1448, 1448, 1481, 1481, 1481,
-
- 1483, 1441, 1441, 1441, 1441, 1449, 51, 51,
- 1441, 1441, 1450, 1450, 1441, 1441, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 1449, 51, 51, 51, 51, 51, 51, 51,
+ 1473, 51, 51, 51, 51, 51, 51, 36,
+ 1434, 1434, 1440, 1440, 1440, 1440, 1440, 1440,
+ 1440, 1440, 1440, 1440, 1440, 1440, 1441, 1512,
+
+ 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
+ 1440, 1440, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1441, 1441, 1441, 1515, 1515, 1441,
+ 1441, 1441, 1441, 1441, 1441, 1516, 1480, 1480,
+
+ 1478, 1478, 1441, 1441, 1441, 1441, 1441, 1441,
+ 1441, 1441, 1441, 1441, 1517, 1441, 1441, 1441,
+ 1441, 1441, 1442, 1516, 1516, 1516, 1516, 1516,
+ 1516, 1516, 1516, 1516, 1516, 1518, 1518, 1518,
+
+ 1519, 1519, 1519, 1519, 1518, 1518, 1518, 1518,
+ 1518, 1480, 1480, 1480, 1480, 1518, 1481, 1518,
+ 1518, 1518, 1480, 1518, 1518, 1480, 1480, 1480,
+ 1518, 1518, 1480, 1480, 1518, 1480, 1480, 1518,
+
+ 1518, 1518, 1481, 1480, 1481, 1481, 1481, 1481,
+ 1480, 1480, 1518, 1480, 1480, 1480, 1480, 1480,
+ 1480, 1518, 1518, 1518, 1518, 1518, 1480, 1518,
+ 1518, 1520, 1518, 1480, 1480, 1518, 1518, 1518,
+
+ 1521, 1473, 1473, 1473, 1473, 1481, 51, 51,
+ 1522, 1473, 1523, 1523, 1513, 1513, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 1449, 51, 1449, 51,
- 51, 51, 51, 1449, 1449, 1449, 51, 1448,
- 51, 51, 51, 1484, 1484, 1484, 1484, 1485,
-
- 1485, 51, 1486, 1486, 51, 51, 51, 51,
- 1487, 1488, 1487, 1488, 1487, 1488, 1487, 1488,
- 1487, 1488, 1487, 1488, 1487, 1488, 1489, 1490,
- 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498,
-
- 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496,
- 1497, 1498, 1489, 1490, 1491, 1492, 1493, 1494,
- 1495, 1496, 1497, 1498, 51, 1449, 1449, 1449,
+ 1481, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 1481, 51, 1481, 51,
+ 51, 51, 51, 1481, 1481, 1481, 51, 1480,
+ 51, 51, 51, 1524, 1524, 1524, 1524, 1525,
+
+ 1525, 51, 1526, 1526, 1522, 51, 51, 51,
+ 1527, 1528, 1527, 1528, 1527, 1528, 1527, 1528,
+ 1527, 1528, 1527, 1528, 1527, 1528, 1529, 1530,
+ 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538,
+
+ 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536,
+ 1537, 1538, 1529, 1530, 1531, 1532, 1533, 1534,
+ 1535, 1536, 1537, 1538, 51, 1481, 1481, 1481,
51, 51, 51, 51, 51, 51, 51, 51,
- 1449, 51, 51, 51, 51, 51, 51, 51,
- 51, 51, 51, 51, 51, 51, 51, 1449,
-
- 1499, 1499, 1499, 1500, 1501, 1502, 1503, 1447,
- 1504, 1505, 1447, 1506, 1507, 1508, 1509, 1509,
- 1341, 1341, 1341, 1341, 1341, 1510, 1511, 1341,
- 1341, 1341, 1341, 1341, 1341, 1510, 1511, 1341,
-
- 1341, 1341, 1510, 1511, 1510, 1511, 1487, 1488,
- 1487, 1488, 1487, 1488, 1512, 1513, 1512, 1513,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
-
- 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
- 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
- 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
- 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514,
-
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
-
- 1341, 1341, 1341, 1487, 1488, 1487, 1488, 1487,
- 1488, 1487, 1488, 1487, 1488, 1515, 1516, 1517,
- 1518, 1487, 1488, 1487, 1488, 1487, 1488, 1487,
- 1488, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
-
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1519, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
-
- 1510, 1511, 1341, 1341, 1510, 1511, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1510,
- 1511, 1510, 1511, 1341, 1510, 1511, 1341, 1341,
- 1487, 1488, 1487, 1488, 1341, 1341, 1341, 1341,
-
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1520, 1341, 1341,
- 1510, 1511, 1341, 1341, 1487, 1488, 1341, 1341,
-
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1407, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
-
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1510, 1511, 1510, 1511, 1341,
- 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
- 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
-
- 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341,
- 1341, 1341, 1341, 1341, 1407, 1407, 1407, 1341,
- 1341, 1510, 1511, 1341, 1341, 1510, 1511, 1510,
-
- 1511, 1510, 1511, 1510, 1511, 1341, 1341, 1341,
- 1341, 1341, 1341, 1510, 1511, 1341, 1341, 1341,
- 1341, 1510, 1511, 1510, 1511, 1510, 1511, 1510,
- 1511, 1510, 1511, 1510, 1511, 1341, 1341, 1341,
-
- 1341, 1510, 1511, 1341, 1341, 1341, 1510, 1511,
- 1510, 1511, 1510, 1511, 1510, 1511, 1341, 1510,
- 1511, 1341, 1341, 1510, 1511, 1341, 1341, 1341,
- 1341, 1341, 1341, 1510, 1511, 1510, 1511, 1510,
-
- 1511, 1510, 1511, 1510, 1511, 1510, 1511, 1341,
- 1341, 1341, 1341, 1341, 1341, 1510, 1511, 1510,
- 1511, 1510, 1511, 1510, 1511, 1510, 1511, 1341,
- 1341, 1341, 1341, 1341, 1521, 1341, 1522, 1341,
-
- 1341, 1341, 1341, 1523, 1524, 1523, 1341, 1341,
- 1341, 1341, 1341, 1341, 1510, 1511, 1341, 1341,
- 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1510,
- 1511, 1510, 1511, 1341, 1341, 1341, 1341, 1341,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1409, 1409,
- 1409, 1409, 1409, 1409, 1410, 1410, 1410, 1410,
- 1410, 1410, 1410, 1479, 1479, 1479, 1479, 1479,
-
- 1410, 1410, 1410, 1410, 1479, 1479, 1479, 1479,
- 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
- 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507,
-
- 1507, 1507, 1507, 1507, 1507, 1479, 1479, 1507,
- 1507, 1507, 1507, 1507, 1507, 1451, 1451, 1451,
- 1479, 1479, 1479, 1479, 1479, 1448, 1448, 1448,
- 1448, 1448, 1451, 1451, 1451, 1451, 1451, 1451,
-
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 200, 200, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
-
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 200, 200,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
-
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 200, 200, 200, 1451, 1451, 1451,
-
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 200, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 1418, 1418, 1418, 1418,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
-
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 1525,
- 1525, 1525, 1525, 1525, 1525, 1525, 1525, 200,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
-
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 1526,
- 1526, 1526, 1526, 1526, 1526, 1526, 1526, 200,
-
- 127, 123, 1527, 1528, 1529, 1530, 1531, 127,
- 123, 127, 123, 127, 123, 1532, 1533, 1534,
- 1535, 1183, 1185, 1186, 1536, 127, 123, 1536,
- 1183, 1183, 1183, 1183, 1537, 1537, 1538, 1539,
-
- 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
- 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
- 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
- 1540, 1541, 1540, 1541, 1540, 1541, 1540, 1541,
-
- 1540, 1541, 1540, 1541, 1542, 1543, 1543, 1543,
- 1543, 1543, 1543, 1544, 1545, 1544, 1545, 1546,
- 1546, 1546, 1547, 1548, 200, 200, 200, 200,
- 200, 1549, 1550, 1550, 1550, 1551, 1549, 1550,
-
- 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
- 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
- 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
- 1552, 1552, 1552, 1552, 1552, 1552, 1552, 1552,
-
- 1552, 1552, 1552, 1552, 1552, 1552, 200, 1553,
- 200, 200, 200, 200, 200, 1553, 200, 200,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
+ 51, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 51,
+ 1481, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51, 51, 51, 51, 1481,
+
+ 1539, 1539, 1539, 1540, 1541, 1542, 1543, 1479,
+ 1544, 1545, 1479, 1546, 1547, 1548, 1549, 1549,
+ 1372, 1372, 1372, 1372, 1372, 1550, 1551, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1550, 1551, 1372,
+
+ 1372, 1372, 1550, 1551, 1550, 1551, 1527, 1528,
+ 1527, 1528, 1527, 1528, 1552, 1553, 1552, 1553,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
1554, 1554, 1554, 1554, 1554, 1554, 1554, 1554,
- 1554, 1554, 1554, 1554, 1554, 1554, 1555, 1555,
- 200, 200, 200, 200, 200, 200, 200, 1556,
- 1557, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 1558,
-
- 836, 836, 836, 836, 836, 836, 836, 836,
- 836, 836, 836, 836, 836, 836, 836, 836,
- 836, 836, 836, 836, 836, 836, 836, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 836, 836, 836, 836, 836, 836, 836, 200,
- 836, 836, 836, 836, 836, 836, 836, 200,
- 836, 836, 836, 836, 836, 836, 836, 200,
- 836, 836, 836, 836, 836, 836, 836, 200,
-
- 265, 265, 265, 265, 265, 265, 265, 265,
- 265, 265, 265, 265, 265, 265, 265, 265,
- 265, 265, 265, 265, 265, 265, 265, 265,
- 265, 265, 265, 265, 265, 265, 265, 265,
-
- 1559, 1559, 1560, 1561, 1560, 1561, 1559, 1559,
- 1559, 1560, 1561, 1559, 1560, 1561, 1345, 1345,
- 1345, 1345, 1345, 1345, 1345, 1345, 1344, 1562,
- 1563, 1564, 1565, 1566, 1560, 1561, 1566, 1566,
-
- 1567, 1568, 1512, 1513, 1512, 1513, 1512, 1513,
- 1512, 1513, 1564, 1564, 1564, 1564, 1569, 1570,
- 1564, 1571, 1572, 1573, 1573, 1572, 1572, 1572,
- 1572, 1572, 1574, 1574, 1575, 1576, 1576, 1577,
-
- 1578, 1576, 1579, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 200, 1580, 1580, 1580, 1580, 1581,
-
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
-
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580,
- 1580, 1580, 1580, 1581, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
-
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581,
- 1581, 1581, 1581, 1581, 1581, 1581, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582,
- 1582, 1582, 1582, 1582, 200, 200, 200, 200,
-
- 1299, 1583, 1584, 1585, 1441, 1586, 1587, 1588,
- 16, 1336, 16, 1336, 16, 1336, 16, 1336,
- 16, 1336, 1441, 1441, 16, 1336, 16, 1336,
- 16, 1336, 16, 1336, 1589, 1314, 1590, 1590,
-
- 1441, 1588, 1588, 1588, 1588, 1588, 1588, 1588,
- 1588, 1588, 1591, 1592, 172, 1593, 1594, 1594,
- 1595, 1596, 1596, 1596, 1596, 1597, 1598, 1441,
- 1599, 1599, 1599, 1600, 1601, 1602, 1582, 1441,
-
- 200, 1603, 1604, 1603, 1604, 1603, 1604, 1603,
- 1604, 1603, 1604, 1604, 1605, 1604, 1605, 1604,
- 1605, 1604, 1605, 1604, 1605, 1604, 1605, 1604,
- 1605, 1604, 1605, 1604, 1605, 1604, 1605, 1604,
-
- 1605, 1604, 1605, 1603, 1604, 1605, 1604, 1605,
- 1604, 1605, 1604, 1604, 1604, 1604, 1604, 1604,
- 1605, 1605, 1604, 1605, 1605, 1604, 1605, 1605,
- 1604, 1605, 1605, 1604, 1605, 1605, 1604, 1604,
-
- 1604, 1604, 1604, 1603, 1604, 1603, 1604, 1603,
- 1604, 1604, 1604, 1604, 1604, 1604, 1603, 1604,
- 1604, 1604, 1604, 1604, 1605, 1606, 1606, 200,
- 200, 1607, 1607, 1608, 1608, 1609, 1610, 1611,
-
- 1612, 1613, 1614, 1613, 1614, 1613, 1614, 1613,
- 1614, 1613, 1614, 1614, 1615, 1614, 1615, 1614,
- 1615, 1614, 1615, 1614, 1615, 1614, 1615, 1614,
- 1615, 1614, 1615, 1614, 1615, 1614, 1615, 1614,
-
- 1615, 1614, 1615, 1613, 1614, 1615, 1614, 1615,
- 1614, 1615, 1614, 1614, 1614, 1614, 1614, 1614,
- 1615, 1615, 1614, 1615, 1615, 1614, 1615, 1615,
- 1614, 1615, 1615, 1614, 1615, 1615, 1614, 1614,
-
- 1614, 1614, 1614, 1613, 1614, 1613, 1614, 1613,
- 1614, 1614, 1614, 1614, 1614, 1614, 1613, 1614,
- 1614, 1614, 1614, 1614, 1615, 1613, 1613, 1615,
- 1615, 1615, 1615, 1616, 1617, 1618, 1619, 1620,
-
- 200, 200, 200, 200, 200, 1621, 1621, 1621,
- 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
- 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
- 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
-
- 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621,
- 1621, 1621, 1621, 1621, 1621, 1622, 200, 200,
- 200, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
- 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+
+ 1372, 1372, 1372, 1527, 1528, 1527, 1528, 1527,
+ 1528, 1527, 1528, 1527, 1528, 1555, 1556, 1557,
+ 1558, 1527, 1528, 1527, 1528, 1527, 1528, 1527,
+ 1528, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1559, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+
+ 1550, 1551, 1372, 1372, 1550, 1551, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1550,
+ 1551, 1550, 1551, 1372, 1550, 1551, 1372, 1372,
+ 1527, 1528, 1527, 1528, 1372, 1372, 1372, 1372,
+
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1560, 1372, 1372,
+ 1550, 1551, 1372, 1372, 1527, 1528, 1372, 1372,
+
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1439, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1550, 1551, 1550, 1551, 1372,
+ 1372, 1372, 1372, 1372, 1550, 1551, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1550, 1551, 1372, 1372,
+
+ 1372, 1372, 1372, 1372, 1550, 1551, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1439, 1439, 1439, 1372,
+ 1372, 1550, 1551, 1372, 1372, 1550, 1551, 1550,
+
+ 1551, 1550, 1551, 1550, 1551, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1550, 1551, 1372, 1372, 1372,
+ 1372, 1550, 1551, 1550, 1551, 1550, 1551, 1550,
+ 1551, 1550, 1551, 1550, 1551, 1372, 1372, 1372,
+
+ 1372, 1550, 1551, 1372, 1372, 1372, 1550, 1551,
+ 1550, 1551, 1550, 1551, 1550, 1551, 1372, 1550,
+ 1551, 1372, 1372, 1550, 1551, 1372, 1372, 1372,
+ 1372, 1372, 1372, 1550, 1551, 1550, 1551, 1550,
+
+ 1551, 1550, 1551, 1550, 1551, 1550, 1551, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1550, 1551, 1550,
+ 1551, 1550, 1551, 1550, 1551, 1550, 1551, 1372,
+ 1372, 1372, 1372, 1372, 1561, 1372, 1562, 1372,
+
+ 1372, 1372, 1372, 1563, 1564, 1563, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1550, 1551, 1372, 1372,
+ 1372, 1372, 1372, 1372, 1372, 1372, 1372, 1550,
+ 1551, 1550, 1551, 1372, 1372, 1372, 1372, 1372,
+
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1441, 1441,
+ 1441, 1441, 1441, 1441, 1442, 1442, 1442, 1442,
+ 1442, 1442, 1442, 1516, 1516, 1516, 1516, 1516,
+
+ 1442, 1442, 1442, 1442, 1516, 1516, 1516, 1516,
+ 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516,
+ 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+ 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547,
+
+ 1547, 1547, 1547, 1547, 1547, 1516, 1516, 1547,
+ 1547, 1547, 1547, 1547, 1547, 1483, 1483, 1483,
+ 1516, 1516, 1516, 1516, 1516, 1480, 1480, 1480,
+ 1480, 1480, 1483, 1483, 1483, 1483, 1483, 1483,
+
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 201, 201, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 201, 201,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 201, 201, 201, 1483, 1483, 1483,
+
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 201, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1485, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 1450, 1450, 1450, 1450,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565,
+ 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565,
+ 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565,
+ 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565,
+
+ 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565,
+ 1565, 1565, 1565, 1565, 1565, 1565, 1565, 201,
+ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+
+ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566,
+ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 201,
+
+ 127, 123, 1567, 1568, 1569, 1570, 1571, 127,
+ 123, 127, 123, 127, 123, 1572, 1573, 1574,
+ 1575, 1214, 1216, 1217, 1576, 127, 123, 1576,
+ 1214, 1214, 1214, 1214, 1577, 1577, 1578, 1579,
+
+ 1580, 1581, 1580, 1581, 1580, 1581, 1580, 1581,
+ 1580, 1581, 1580, 1581, 1580, 1581, 1580, 1581,
+ 1580, 1581, 1580, 1581, 1580, 1581, 1580, 1581,
+ 1580, 1581, 1580, 1581, 1580, 1581, 1580, 1581,
+
+ 1580, 1581, 1580, 1581, 1582, 1583, 1583, 1583,
+ 1583, 1583, 1583, 1584, 1585, 1584, 1585, 1586,
+ 1586, 1586, 1587, 1588, 201, 201, 201, 201,
+ 201, 1589, 1590, 1590, 1590, 1591, 1589, 1590,
+
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592,
+
+ 1592, 1592, 1592, 1592, 1592, 1592, 201, 1593,
+ 201, 201, 201, 201, 201, 1593, 201, 201,
+ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+
+ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594,
+
+ 1594, 1594, 1594, 1594, 1594, 1594, 1595, 1595,
+ 201, 201, 201, 201, 201, 201, 201, 1596,
+ 1597, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 1598,
+
+ 854, 854, 854, 854, 854, 854, 854, 854,
+ 854, 854, 854, 854, 854, 854, 854, 854,
+ 854, 854, 854, 854, 854, 854, 854, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 854, 854, 854, 854, 854, 854, 854, 201,
+ 854, 854, 854, 854, 854, 854, 854, 201,
+ 854, 854, 854, 854, 854, 854, 854, 201,
+ 854, 854, 854, 854, 854, 854, 854, 201,
+
+ 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 266, 266, 266, 266,
+
+ 1599, 1599, 1600, 1601, 1600, 1601, 1599, 1599,
+ 1599, 1600, 1601, 1599, 1600, 1601, 1376, 1376,
+ 1376, 1376, 1376, 1376, 1376, 1376, 1375, 1602,
+ 1603, 1604, 1605, 1606, 1600, 1601, 1606, 1606,
+
+ 1607, 1608, 1552, 1553, 1552, 1553, 1552, 1553,
+ 1552, 1553, 1604, 1604, 1604, 1604, 1609, 1610,
+ 1604, 1611, 1612, 1613, 1613, 1612, 1612, 1612,
+ 1612, 1612, 1614, 1614, 1615, 1616, 1616, 1617,
+
+ 1618, 1616, 1619, 1620, 1620, 1621, 1621, 1621,
+ 1621, 1621, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 201, 1622, 1622, 1622, 1622, 1623,
+
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622,
+ 1622, 1622, 1622, 1623, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
@@ -2548,2708 +2498,1534 @@ static const unsigned short uc_property_trie[] = {
1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
- 1623, 1623, 1623, 1623, 1623, 1623, 1623, 200,
- 1624, 1624, 1625, 1625, 1625, 1625, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
-
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627,
- 1628, 1628, 1628, 200, 200, 200, 200, 200,
+ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623,
+ 1623, 1623, 1623, 1623, 1623, 1623, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624,
+ 1624, 1624, 1624, 1624, 201, 201, 201, 201,
+
+ 1330, 1625, 1626, 1627, 1473, 1628, 1629, 1630,
+ 16, 1367, 16, 1367, 16, 1367, 16, 1367,
+ 16, 1367, 1473, 1473, 16, 1367, 16, 1367,
+ 16, 1367, 16, 1367, 1631, 1345, 1632, 1632,
+
+ 1473, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
+ 1630, 1630, 1633, 1634, 173, 1635, 1636, 1636,
+ 1637, 1638, 1638, 1638, 1638, 1639, 1640, 1473,
+ 1641, 1641, 1641, 1642, 1643, 1644, 1624, 1473,
+
+ 201, 1645, 1646, 1645, 1646, 1645, 1646, 1645,
+ 1646, 1645, 1646, 1646, 1647, 1646, 1647, 1646,
+ 1647, 1646, 1647, 1646, 1647, 1646, 1647, 1646,
+ 1647, 1646, 1647, 1646, 1647, 1646, 1647, 1646,
+
+ 1647, 1646, 1647, 1645, 1646, 1647, 1646, 1647,
+ 1646, 1647, 1646, 1646, 1646, 1646, 1646, 1646,
+ 1647, 1647, 1646, 1647, 1647, 1646, 1647, 1647,
+ 1646, 1647, 1647, 1646, 1647, 1647, 1646, 1646,
+
+ 1646, 1646, 1646, 1645, 1646, 1645, 1646, 1645,
+ 1646, 1646, 1646, 1646, 1646, 1646, 1645, 1646,
+ 1646, 1646, 1646, 1646, 1647, 1648, 1648, 201,
+ 201, 1649, 1649, 1650, 1650, 1651, 1652, 1653,
+
+ 1654, 1655, 1656, 1655, 1656, 1655, 1656, 1655,
+ 1656, 1655, 1656, 1656, 1657, 1656, 1657, 1656,
+ 1657, 1656, 1657, 1656, 1657, 1656, 1657, 1656,
+ 1657, 1656, 1657, 1656, 1657, 1656, 1657, 1656,
+
+ 1657, 1656, 1657, 1655, 1656, 1657, 1656, 1657,
+ 1656, 1657, 1656, 1656, 1656, 1656, 1656, 1656,
+ 1657, 1657, 1656, 1657, 1657, 1656, 1657, 1657,
+ 1656, 1657, 1657, 1656, 1657, 1657, 1656, 1656,
+
+ 1656, 1656, 1656, 1655, 1656, 1655, 1656, 1655,
+ 1656, 1656, 1656, 1656, 1656, 1656, 1655, 1656,
+ 1656, 1656, 1656, 1656, 1657, 1655, 1655, 1657,
+ 1657, 1657, 1657, 1658, 1659, 1660, 1661, 1662,
+
+ 201, 201, 201, 201, 201, 1663, 1663, 1663,
+ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
+ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
+ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
+
+ 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663,
+ 1663, 1663, 1663, 1663, 1663, 1664, 1665, 201,
+ 201, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 201,
+ 1667, 1667, 1668, 1668, 1668, 1668, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+
+ 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670,
+ 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670,
+ 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670,
+ 1671, 1671, 1671, 201, 201, 201, 201, 201,
+
+ 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+ 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+
+ 1519, 1519, 1519, 1519, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
+ 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672,
+
+ 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+ 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+ 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+ 1673, 1673, 1673, 1673, 1673, 1674, 1674, 201,
+
+ 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668,
+ 1668, 1668, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+
+ 1669, 1669, 1669, 1669, 1675, 1675, 1675, 1675,
+ 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1677, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
+ 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
+
+ 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+ 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+ 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673,
+ 1673, 1673, 1673, 1673, 1674, 1674, 1679, 1667,
+
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
+ 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678,
+
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1677, 1677, 1677, 1677,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 201,
+
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1677,
+ 1677, 1677, 1677, 1669, 1669, 1669, 1669, 1669,
+
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1677, 1677,
+
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669,
+ 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1677,
+
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681,
+ 1681, 1681, 1681, 1681, 1681, 1681, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
- 1482, 1482, 1482, 1482, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
- 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629,
-
- 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
- 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
- 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
- 1630, 1630, 1630, 1630, 1630, 1631, 1631, 200,
-
- 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625,
- 1625, 1625, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
-
- 1626, 1626, 1626, 1626, 1632, 1632, 1632, 1632,
- 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633,
- 1634, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
- 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
-
- 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
- 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
- 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630,
- 1630, 1630, 1630, 1630, 1631, 1631, 1636, 1624,
-
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
- 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635,
-
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1634, 1634, 1634, 1634,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
-
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 200,
-
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
-
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
-
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1634,
- 1634, 1634, 1634, 1626, 1626, 1626, 1626, 1626,
-
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
-
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1634, 1634,
-
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626,
- 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1634,
-
- 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
- 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
- 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
- 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
-
- 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
- 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638,
- 1638, 1638, 1638, 1638, 1638, 1638, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
+ 1683, 1683, 1683, 1683, 1683, 1683, 1684, 1684,
+ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684,
+ 1684, 1684, 1684, 1684, 1685, 1685, 1685, 1685,
- 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
- 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
- 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
- 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640,
-
- 1640, 1640, 1640, 1640, 1640, 1640, 1641, 1641,
- 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
- 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641,
- 1641, 1641, 1641, 1641, 1642, 1642, 1642, 1642,
-
- 1642, 1642, 1642, 1642, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1644, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 1647, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
-
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
-
- 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646,
- 1646, 1646, 1646, 1646, 1646, 200, 200, 200,
- 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
- 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
-
- 1648, 1648, 1649, 1649, 1648, 1648, 1648, 1648,
- 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
- 1648, 1648, 1648, 1648, 1649, 1648, 1648, 1648,
- 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648,
-
- 1648, 1649, 1648, 1648, 1648, 1649, 1648, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
- 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
-
- 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
- 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
- 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650,
- 1651, 1651, 1651, 1651, 1651, 1651, 1652, 1653,
-
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
-
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
- 1654, 1654, 1654, 1654, 1655, 1656, 1657, 1658,
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
- 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654,
-
- 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666,
- 1667, 1668, 1654, 1654, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 279, 280, 279, 280, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 279, 280,
-
- 283, 284, 279, 280, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 1669, 265,
- 1670, 1670, 1670, 1671, 1672, 1672, 1672, 1672,
- 1672, 1672, 1672, 1672, 265, 265, 1671, 1673,
-
- 279, 280, 279, 280, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 279, 280,
- 279, 280, 279, 280, 279, 280, 279, 280,
- 285, 286, 285, 286, 1674, 1674, 1675, 1672,
+ 1685, 1685, 1685, 1685, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1687, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
- 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
- 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
- 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
- 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
- 1676, 1676, 1676, 1676, 1676, 1676, 1677, 1677,
- 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677,
- 1678, 1678, 1679, 1680, 1681, 1681, 1681, 1680,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
- 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
- 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1683,
- 1683, 1683, 1683, 1570, 1570, 1570, 1570, 1570,
-
- 1684, 1684, 1185, 1186, 1185, 1186, 1185, 1186,
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1183, 1183, 1185, 1186, 1185, 1186, 1185, 1186,
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
-
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
-
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1537, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
- 1183, 1185, 1186, 1185, 1186, 1685, 1185, 1186,
-
- 1185, 1186, 1185, 1186, 1185, 1186, 1185, 1186,
- 1570, 1686, 1686, 1185, 1186, 1687, 1688, 1689,
- 1690, 1691, 1692, 1693, 1694, 1694, 1695, 1696,
- 1695, 1696, 1695, 1696, 1695, 1696, 1695, 1696,
-
- 1690, 1691, 1690, 1691, 1690, 1691, 1690, 1691,
- 1690, 1691, 1697, 1698, 1699, 1700, 200, 200,
- 1701, 1702, 1703, 1704, 1705, 1706, 1705, 1706,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 1707,
- 1708, 1708, 1688, 1709, 1709, 1709, 1709, 1709,
-
- 1710, 1710, 1711, 1710, 1710, 1710, 1712, 1710,
- 1710, 1710, 1710, 1711, 1710, 1710, 1710, 1710,
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
- 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710,
-
- 1710, 1710, 1710, 1713, 1713, 1711, 1711, 1713,
- 1714, 1714, 1714, 1714, 200, 200, 200, 200,
- 1633, 1633, 1633, 1633, 1633, 1633, 778, 778,
- 1376, 1715, 200, 200, 200, 200, 200, 200,
-
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
-
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716,
- 1716, 1716, 1717, 1718, 1719, 1719, 1720, 1720,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1721, 1721, 1722, 1722, 1722, 1722, 1722, 1722,
- 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
- 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
- 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
-
- 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
- 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722,
- 1722, 1722, 1722, 1722, 1721, 1721, 1721, 1721,
- 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 1691, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
- 1721, 1721, 1721, 1721, 1723, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 1724, 1724,
- 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732,
- 1733, 1734, 200, 200, 200, 200, 200, 200,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
- 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
- 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735,
- 1735, 1735, 493, 493, 493, 493, 493, 493,
- 1736, 1736, 1736, 493, 1737, 1738, 200, 200,
+ 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690,
+ 1690, 1690, 1690, 1690, 1690, 201, 201, 201,
+ 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692,
+ 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692,
- 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746,
- 1747, 1748, 1749, 1749, 1749, 1749, 1749, 1749,
- 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
- 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749,
+ 1692, 1692, 1693, 1693, 1692, 1692, 1692, 1692,
+ 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692,
+ 1692, 1692, 1692, 1692, 1693, 1692, 1692, 1692,
+ 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692,
- 1749, 1749, 1749, 1749, 1749, 1749, 1750, 1750,
- 1750, 1750, 1750, 1751, 1751, 1751, 1752, 1753,
- 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
- 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754,
+ 1692, 1693, 1692, 1692, 1692, 1693, 1692, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
- 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1755,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1695, 1695, 1695, 1695, 1695, 1695, 1696, 1697,
+
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+ 1698, 1698, 1698, 1698, 1699, 1700, 1701, 1702,
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+ 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698,
+
+ 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710,
+ 1711, 1712, 1698, 1698, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 280, 281, 280, 281, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 280, 281,
+
+ 284, 285, 280, 281, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 1713, 266,
+ 1714, 1714, 1714, 1715, 1716, 1716, 1716, 1716,
+ 1716, 1716, 1716, 1716, 266, 266, 1715, 1717,
+
+ 280, 281, 280, 281, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 280, 281,
+ 280, 281, 280, 281, 280, 281, 280, 281,
+ 286, 287, 286, 287, 1718, 1718, 1719, 1716,
+
+ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
+ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
+ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
+ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720,
+
+ 1720, 1720, 1720, 1720, 1720, 1720, 1721, 1721,
+ 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721,
+ 1722, 1722, 1723, 1724, 1725, 1725, 1725, 1724,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+ 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726,
+ 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1727,
+ 1727, 1727, 1727, 1610, 1610, 1610, 1610, 1610,
+
+ 1728, 1728, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1214, 1214, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1577, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
+ 1214, 1216, 1217, 1216, 1217, 1729, 1216, 1217,
+
+ 1216, 1217, 1216, 1217, 1216, 1217, 1216, 1217,
+ 1610, 1730, 1730, 1216, 1217, 1731, 1732, 1733,
+ 1734, 1735, 1736, 1737, 1738, 1738, 1739, 1740,
+ 1739, 1740, 1739, 1740, 1739, 1740, 1739, 1740,
+
+ 1734, 1735, 1734, 1735, 1734, 1735, 1734, 1735,
+ 1734, 1735, 1741, 1742, 1743, 1744, 1745, 201,
+ 1746, 1747, 1748, 1749, 1750, 1751, 1750, 1751,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 1752,
+ 1753, 1753, 1732, 1754, 1754, 1754, 1754, 1754,
+
+ 1755, 1755, 1756, 1755, 1755, 1755, 1757, 1755,
+ 1755, 1755, 1755, 1756, 1755, 1755, 1755, 1755,
+ 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755,
- 1755, 1755, 1756, 1757, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 1758,
- 828, 828, 828, 828, 828, 828, 828, 828,
- 828, 828, 828, 828, 828, 828, 828, 828,
- 828, 828, 828, 828, 828, 828, 828, 828,
- 828, 828, 828, 828, 828, 200, 200, 200,
+ 1755, 1755, 1755, 1758, 1758, 1756, 1756, 1758,
+ 1759, 1759, 1759, 1759, 201, 201, 201, 201,
+ 1676, 1676, 1676, 1676, 1676, 1676, 796, 796,
+ 1407, 1760, 201, 201, 201, 201, 201, 201,
- 1759, 1759, 1759, 1760, 1761, 1761, 1761, 1761,
+ 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761,
- 1761, 1761, 1761, 1762, 1760, 1760, 1759, 1759,
- 1759, 1759, 1760, 1760, 1759, 1760, 1760, 1760,
-
- 1763, 1764, 1764, 1764, 1764, 1764, 1764, 1765,
- 1766, 1766, 1764, 1764, 1764, 1764, 200, 1767,
- 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775,
- 1776, 1777, 200, 200, 200, 200, 1764, 1764,
-
- 1778, 1778, 1778, 1778, 1778, 1779, 1780, 1778,
- 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778,
- 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788,
- 1789, 1790, 1778, 1778, 1778, 1778, 1778, 200,
-
- 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
- 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
- 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
- 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
-
- 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791,
- 1791, 1792, 1792, 1792, 1792, 1792, 1792, 1793,
- 1793, 1792, 1792, 1793, 1793, 1792, 1792, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1791, 1791, 1791, 1792, 1791, 1791, 1791, 1791,
- 1791, 1791, 1791, 1791, 1792, 1793, 200, 200,
- 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801,
- 1802, 1803, 200, 200, 1804, 1805, 1805, 1805,
-
- 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
- 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806,
- 1807, 1806, 1806, 1806, 1806, 1806, 1806, 1808,
- 1808, 1808, 1806, 816, 1779, 1809, 1778, 1778,
-
- 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
- 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
- 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
- 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
-
- 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
- 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810,
- 1811, 1810, 1811, 1811, 1812, 1810, 1810, 1811,
- 1811, 1810, 1810, 1810, 1810, 1810, 1811, 1811,
-
- 1810, 1811, 1810, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 1810, 1810, 1813, 1814, 1814,
-
- 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815,
- 1815, 1815, 1815, 1816, 1817, 1817, 1816, 1816,
- 1818, 1818, 1815, 1819, 1819, 1816, 1820, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 1821, 1821, 1821, 1821, 1821, 1821, 200,
- 200, 1821, 1821, 1821, 1821, 1821, 1821, 200,
- 200, 1821, 1821, 1821, 1821, 1821, 1821, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1821, 1821, 1821, 1821, 1821, 1821, 1821, 200,
- 1821, 1821, 1821, 1821, 1821, 1821, 1821, 200,
- 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
- 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
+ 1761, 1761, 1762, 1763, 1764, 1764, 1765, 1765,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1766, 1766, 1767, 1767, 1767, 1767, 1767, 1767,
+ 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
+ 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
+ 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
+
+ 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
+ 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767,
+ 1767, 1767, 1767, 1767, 1766, 1766, 1766, 1766,
+ 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766,
+
+ 1766, 1766, 1766, 1766, 1768, 1769, 201, 201,
+ 201, 201, 201, 201, 201, 201, 1770, 1770,
+ 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778,
+ 1779, 1780, 201, 201, 201, 201, 201, 201,
+
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781,
+ 1781, 1781, 501, 501, 501, 501, 501, 501,
+ 1782, 1782, 1782, 501, 1783, 1784, 201, 201,
+
+ 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792,
+ 1793, 1794, 1795, 1795, 1795, 1795, 1795, 1795,
+ 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795,
+ 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795,
+
+ 1795, 1795, 1795, 1795, 1795, 1795, 1796, 1796,
+ 1796, 1796, 1796, 1797, 1797, 1797, 1798, 1799,
+ 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800,
+ 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800,
+
+ 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1801,
+ 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801,
+ 1801, 1801, 1802, 1803, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 1804,
+
+ 846, 846, 846, 846, 846, 846, 846, 846,
+ 846, 846, 846, 846, 846, 846, 846, 846,
+ 846, 846, 846, 846, 846, 846, 846, 846,
+ 846, 846, 846, 846, 846, 201, 201, 201,
+
+ 1805, 1805, 1805, 1806, 1807, 1807, 1807, 1807,
+ 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+ 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+ 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+
+ 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+ 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807,
+ 1807, 1807, 1807, 1808, 1806, 1806, 1805, 1805,
+ 1805, 1805, 1806, 1806, 1805, 1806, 1806, 1806,
+
+ 1809, 1810, 1810, 1810, 1810, 1810, 1810, 1811,
+ 1812, 1812, 1810, 1810, 1810, 1810, 201, 1813,
+ 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821,
+ 1822, 1823, 201, 201, 201, 201, 1810, 1810,
+
+ 1824, 1824, 1824, 1824, 1824, 1825, 1826, 1824,
+ 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824,
+ 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834,
+ 1835, 1836, 1824, 1824, 1824, 1824, 1824, 201,
+
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+
+ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837,
+ 1837, 1838, 1838, 1838, 1838, 1838, 1838, 1839,
+ 1839, 1838, 1838, 1839, 1839, 1838, 1838, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1837, 1837, 1837, 1838, 1837, 1837, 1837, 1837,
+ 1837, 1837, 1837, 1837, 1838, 1839, 201, 201,
+ 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847,
+ 1848, 1849, 201, 201, 1850, 1851, 1851, 1851,
+
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852,
+ 1853, 1852, 1852, 1852, 1852, 1852, 1852, 1854,
+ 1854, 1854, 1852, 834, 1825, 1855, 1824, 1824,
+
+ 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
+ 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
+ 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
+ 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
+
+ 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
+ 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856,
+ 1857, 1856, 1857, 1857, 1858, 1856, 1856, 1857,
+ 1857, 1856, 1856, 1856, 1856, 1856, 1857, 1857,
+
+ 1856, 1857, 1856, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 1856, 1856, 1859, 1860, 1860,
+
+ 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861,
+ 1861, 1861, 1861, 1862, 1863, 1863, 1862, 1862,
+ 1864, 1864, 1861, 1865, 1865, 1862, 1866, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 1867, 1867, 1867, 1867, 1867, 1867, 201,
+ 201, 1867, 1867, 1867, 1867, 1867, 1867, 201,
+ 201, 1867, 1867, 1867, 1867, 1867, 1867, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1867, 1867, 1867, 1867, 1867, 1867, 1867, 201,
+ 1867, 1867, 1867, 1867, 1867, 1867, 1867, 201,
+ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+
+ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738,
+ 1738, 1738, 1738, 1868, 1738, 1738, 1738, 1738,
+ 1738, 1738, 1738, 1869, 1870, 1870, 1870, 1870,
+
+ 1871, 1871, 1871, 1871, 1738, 1872, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880,
+ 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888,
+
+ 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896,
+ 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904,
+ 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912,
+ 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920,
+
+ 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928,
+ 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936,
+ 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944,
+ 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952,
+
+ 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953,
+ 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953,
+ 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953,
+ 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953,
+
+ 1953, 1953, 1953, 1954, 1954, 1955, 1954, 1954,
+ 1955, 1954, 1954, 1956, 1954, 1957, 201, 201,
+ 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965,
+ 1966, 1967, 201, 201, 201, 201, 201, 201,
+
+ 1968, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1968, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1968, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1968, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1968, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1968, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1968, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 1968, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+ 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969,
+
+ 1969, 1969, 1969, 1969, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 849, 849, 849, 849, 849, 849, 849, 849,
+ 849, 849, 849, 849, 849, 849, 849, 849,
+
+ 849, 849, 849, 849, 849, 849, 849, 201,
+ 201, 201, 201, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 852, 852, 852,
+
+ 852, 852, 852, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 852, 852, 852, 852,
+ 852, 852, 852, 852, 201, 201, 201, 201,
+
+ 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+ 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+ 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+ 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970,
+
+ 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971,
+ 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971,
+ 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971,
+ 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971,
+
+ 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+ 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+ 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+ 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+
+ 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972,
+ 1972, 1972, 1972, 1972, 1972, 1972, 1683, 1683,
+ 1972, 1683, 1972, 1683, 1683, 1972, 1972, 1972,
+ 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1683,
+
+ 1972, 1683, 1972, 1683, 1683, 1972, 1972, 1683,
+ 1683, 1683, 1972, 1972, 1972, 1972, 1973, 1973,
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+
+ 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974,
+ 1974, 1974, 1974, 1975, 1975, 1975, 1682, 1682,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976,
+ 1976, 1976, 1682, 1682, 1682, 1682, 1682, 1682,
- 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
- 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694,
- 1694, 1694, 1694, 1822, 1694, 1694, 1694, 1694,
- 1694, 1694, 1694, 1823, 1824, 1824, 1824, 1824,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
- 1825, 1825, 1825, 1825, 1694, 1826, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834,
- 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842,
-
- 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850,
- 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858,
- 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866,
- 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874,
-
- 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882,
- 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890,
- 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898,
- 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906,
-
- 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
- 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
- 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
- 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907,
-
- 1907, 1907, 1907, 1908, 1908, 1909, 1908, 1908,
- 1909, 1908, 1908, 1910, 1908, 1911, 200, 200,
- 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919,
- 1920, 1921, 200, 200, 200, 200, 200, 200,
-
- 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1922, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 1922, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
- 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923,
-
- 1923, 1923, 1923, 1923, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 831, 831, 831, 831, 831, 831, 831, 831,
- 831, 831, 831, 831, 831, 831, 831, 831,
-
- 831, 831, 831, 831, 831, 831, 831, 200,
- 200, 200, 200, 834, 834, 834, 834, 834,
- 834, 834, 834, 834, 834, 834, 834, 834,
- 834, 834, 834, 834, 834, 834, 834, 834,
-
- 834, 834, 834, 834, 834, 834, 834, 834,
- 834, 834, 834, 834, 834, 834, 834, 834,
- 834, 834, 834, 834, 834, 834, 834, 834,
- 834, 834, 834, 834, 200, 200, 200, 200,
-
- 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
- 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
- 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
- 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924,
-
- 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
- 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
- 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
- 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925,
-
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
-
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926,
- 1926, 1926, 1926, 1926, 1926, 1926, 1640, 1640,
- 1926, 1640, 1926, 1640, 1640, 1926, 1926, 1926,
- 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1640,
-
- 1926, 1640, 1926, 1640, 1640, 1926, 1926, 1640,
- 1640, 1640, 1926, 1926, 1926, 1926, 1927, 1927,
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
-
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
-
- 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928,
- 1928, 1928, 1928, 1929, 1929, 1929, 1639, 1639,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
-
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
-
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930,
- 1930, 1930, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 1931, 1932, 1933, 1934, 1935, 1936, 1936, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 1937, 1938, 1939, 1940, 1941,
- 200, 200, 200, 200, 200, 1942, 1943, 1944,
-
- 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945,
- 1945, 1946, 1944, 1944, 1944, 1944, 1944, 1944,
- 1944, 1944, 1944, 1944, 1944, 1944, 1944, 297,
- 1944, 1944, 1944, 1944, 1944, 297, 1944, 297,
-
- 1944, 1944, 297, 1944, 1944, 297, 1944, 1944,
- 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1945,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
-
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
-
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1948, 1948, 1948, 1948, 1948, 1948,
- 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948,
-
- 1948, 1948, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
-
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1590, 1314,
-
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
-
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 343, 343, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
-
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
- 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
-
- 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
- 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1950, 335, 343, 343,
-
- 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951,
- 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951,
- 1952, 1953, 1954, 1955, 1956, 1957, 1957, 1958,
- 1959, 1960, 200, 200, 200, 200, 200, 200,
-
- 171, 171, 171, 171, 1171, 1171, 1171, 1071,
- 1071, 1071, 1071, 1071, 1071, 1071, 1675, 1675,
- 1961, 1962, 1962, 1963, 1963, 1964, 1965, 1964,
- 1965, 1964, 1965, 1964, 1965, 1964, 1965, 1964,
-
- 1965, 1964, 1965, 1964, 1965, 1602, 1602, 1966,
- 1967, 1961, 1961, 1961, 1961, 1963, 1963, 1963,
- 1968, 1969, 1970, 200, 1971, 1972, 1973, 1973,
- 1962, 1367, 1368, 1367, 1368, 1367, 1368, 1974,
-
- 1961, 1961, 1975, 1976, 1977, 1978, 1979, 200,
- 1961, 1370, 1328, 1961, 200, 200, 200, 200,
- 1947, 1947, 1947, 1980, 1947, 343, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
-
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947,
- 1947, 1947, 1947, 1947, 1947, 343, 343, 1981,
-
- 200, 1973, 1961, 1974, 1370, 1328, 1961, 1982,
- 1367, 1368, 1961, 1975, 1968, 1976, 1970, 1983,
- 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,
- 1992, 1993, 1972, 1971, 1994, 1979, 1995, 1973,
-
- 1961, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
- 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
- 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996,
- 1996, 1996, 1996, 1997, 1961, 1998, 1999, 1963,
-
- 1999, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
- 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
- 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000,
- 2000, 2000, 2000, 1997, 1979, 1998, 1979, 2001,
-
- 2002, 2003, 1367, 1368, 2004, 2005, 2006, 2007,
- 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
- 2008, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
- 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
-
- 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
- 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
- 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
- 2006, 2006, 2006, 2006, 2006, 2006, 2009, 2009,
-
- 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
- 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
- 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,
- 2010, 2010, 2010, 2010, 2010, 2010, 2010, 200,
-
- 200, 200, 2010, 2010, 2010, 2010, 2010, 2010,
- 200, 200, 2010, 2010, 2010, 2010, 2010, 2010,
- 200, 200, 2010, 2010, 2010, 2010, 2010, 2010,
- 200, 200, 2010, 2010, 2010, 200, 200, 200,
-
- 2011, 1370, 1979, 1999, 1598, 1370, 1370, 200,
- 1390, 1366, 1366, 1366, 1366, 1390, 1390, 200,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 2012, 2012, 2012, 2013, 51, 2014, 2014,
-
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 200, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
-
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 200,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 200, 2015, 2015, 200, 2015,
-
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 200, 200,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 200, 200,
-
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
-
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
- 2015, 2015, 2015, 200, 200, 200, 200, 200,
-
- 2016, 2017, 2016, 200, 200, 200, 200, 2018,
- 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
- 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
- 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
-
- 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
- 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018,
- 2018, 2018, 2018, 2018, 200, 200, 200, 2019,
- 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019,
-
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
-
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
- 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020,
- 2020, 2020, 2020, 2020, 2020, 2021, 2021, 2021,
- 2021, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
-
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2021, 2023, 2024, 200, 200, 200,
- 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479,
- 1479, 1479, 1479, 1479, 200, 200, 200, 200,
-
- 2024, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
- 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
-
- 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
- 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
- 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
- 1412, 1412, 1412, 1412, 1412, 1174, 200, 200,
-
- 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
- 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
- 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025,
- 2025, 2025, 2025, 2025, 2025, 200, 200, 200,
-
- 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
- 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
- 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
- 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
-
- 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
- 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026,
- 2026, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1071, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
- 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
- 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027,
- 2027, 2027, 2027, 2027, 200, 200, 200, 200,
-
- 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028,
- 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028,
- 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028,
- 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2029,
-
- 2030, 2030, 2030, 2030, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
- 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031,
-
- 2031, 2032, 2031, 2031, 2031, 2031, 2031, 2031,
- 2031, 2031, 2032, 200, 200, 200, 200, 200,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
-
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033,
- 2033, 2033, 2033, 2033, 2033, 2033, 2034, 2034,
- 2034, 2034, 2034, 200, 200, 200, 200, 200,
-
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035,
- 2035, 2035, 2035, 2035, 2035, 2035, 200, 2036,
-
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
-
- 2037, 2037, 2037, 2037, 200, 200, 200, 200,
- 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037,
- 2038, 2039, 2039, 2039, 2039, 2039, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
- 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
- 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
- 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040,
-
- 2040, 2040, 2040, 2040, 2040, 2040, 2041, 2041,
- 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+ 1977, 1978, 1979, 1980, 1981, 1982, 1982, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 1983, 1984, 1985, 1986, 1987,
+ 201, 201, 201, 201, 201, 1988, 1989, 1990,
+
+ 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991,
+ 1991, 1992, 1990, 1990, 1990, 1990, 1990, 1990,
+ 1990, 1990, 1990, 1990, 1990, 1990, 1990, 298,
+ 1990, 1990, 1990, 1990, 1990, 298, 1990, 298,
+
+ 1990, 1990, 298, 1990, 1990, 298, 1990, 1990,
+ 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1991,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1994, 1994, 1994, 1994, 1994, 1994,
+ 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994,
+
+ 1994, 1994, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1632, 1345,
+
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 344, 344, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+ 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+
+ 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+ 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1996, 336, 344, 344,
+
+ 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997,
+ 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997,
+ 1998, 1999, 2000, 2001, 2002, 2003, 2003, 2004,
+ 2005, 2006, 201, 201, 201, 201, 201, 201,
+
+ 172, 172, 172, 172, 1198, 1198, 1198, 1089,
+ 1089, 1089, 1089, 1089, 1089, 1089, 1719, 1719,
+ 2007, 2008, 2008, 2009, 2009, 2010, 2011, 2010,
+ 2011, 2010, 2011, 2010, 2011, 2010, 2011, 2010,
+
+ 2011, 2010, 2011, 2010, 2011, 1644, 1644, 2012,
+ 2013, 2007, 2007, 2007, 2007, 2009, 2009, 2009,
+ 2014, 2015, 2016, 201, 2017, 2018, 2019, 2019,
+ 2008, 1398, 1399, 1398, 1399, 1398, 1399, 2020,
+
+ 2007, 2007, 2021, 2022, 2023, 2024, 2025, 201,
+ 2007, 1401, 1359, 2007, 201, 201, 201, 201,
+ 1993, 1993, 1993, 2026, 1993, 344, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993,
+ 1993, 1993, 1993, 1993, 1993, 344, 344, 2027,
+
+ 201, 2019, 2007, 2020, 1401, 1359, 2007, 2028,
+ 1398, 1399, 2007, 2021, 2014, 2022, 2016, 2029,
+ 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037,
+ 2038, 2039, 2018, 2017, 2040, 2025, 2041, 2019,
+
+ 2007, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
+ 2042, 2042, 2042, 2043, 2007, 2044, 2045, 2009,
+
+ 2045, 2046, 2046, 2046, 2046, 2046, 2046, 2046,
+ 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046,
+ 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046,
+ 2046, 2046, 2046, 2043, 2025, 2044, 2025, 2047,
+
+ 2048, 2049, 1398, 1399, 2050, 2051, 2052, 2053,
+ 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+ 2054, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052,
+ 2052, 2052, 2052, 2052, 2052, 2052, 2055, 2055,
+
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666,
+ 1666, 1666, 1666, 1666, 1666, 1666, 1666, 201,
+
+ 201, 201, 1666, 1666, 1666, 1666, 1666, 1666,
+ 201, 201, 1666, 1666, 1666, 1666, 1666, 1666,
+ 201, 201, 1666, 1666, 1666, 1666, 1666, 1666,
+ 201, 201, 1666, 1666, 1666, 201, 201, 201,
+
+ 2056, 1401, 2025, 2045, 1640, 1401, 1401, 201,
+ 1422, 1397, 1397, 1397, 1397, 1422, 1422, 201,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 2057, 2057, 2057, 2058, 51, 2059, 2059,
- 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042,
- 2042, 2042, 2042, 2042, 2042, 2042, 2043, 2043,
- 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
- 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
-
- 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
- 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
- 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
- 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044,
-
- 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
- 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
- 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045,
- 2045, 2045, 2045, 2045, 2045, 2045, 200, 200,
-
- 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053,
- 2054, 2055, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
-
- 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
-
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
- 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057,
-
- 2057, 2057, 2057, 2057, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 2058,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
-
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 2059, 2059, 2059, 2059, 2059, 2059, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2060, 2060, 2060, 2060, 2060, 2060, 297, 297,
- 2060, 297, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 201, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 201,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 201, 2060, 2060, 201, 2060,
+
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 201, 201,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 201, 201,
+
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
- 2060, 2060, 2060, 2060, 2060, 2060, 297, 2060,
- 2060, 297, 297, 297, 2060, 297, 297, 2060,
+ 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060,
+ 2060, 2060, 2060, 201, 201, 201, 201, 201,
- 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061,
- 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061,
- 2061, 2061, 2061, 2061, 2061, 2061, 297, 2062,
+ 2061, 2062, 2061, 201, 201, 201, 201, 2063,
+ 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063,
+ 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063,
2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063,
+ 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063,
+ 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063,
+ 2063, 2063, 2063, 2063, 201, 201, 201, 2064,
2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
- 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064,
- 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2065,
- 2065, 2066, 2066, 2066, 2066, 2066, 2066, 2066,
- 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
- 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
- 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
- 2067, 2067, 2067, 2067, 2067, 2067, 2067, 297,
+ 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065,
+ 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065,
+ 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065,
+ 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065,
- 297, 297, 297, 297, 297, 297, 297, 2068,
- 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
+ 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065,
+ 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065,
+ 2065, 2065, 2065, 2065, 2065, 2066, 2066, 2066,
+ 2066, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
- 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
- 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069,
- 2069, 2069, 2069, 297, 2069, 2069, 297, 297,
- 297, 297, 297, 2070, 2070, 2070, 2070, 2070,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2066, 2068, 2069, 2070, 2070, 201,
+ 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516,
+ 1516, 1516, 1516, 1516, 201, 201, 201, 201,
- 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
- 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
- 2071, 2071, 2071, 2071, 2071, 2071, 2072, 2072,
- 2072, 2072, 2073, 2073, 297, 297, 297, 2074,
+ 2069, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
- 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
- 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
- 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075,
- 2075, 2075, 297, 297, 297, 297, 297, 2076,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
- 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
- 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
- 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
- 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
+ 1444, 1444, 1444, 1444, 1444, 1201, 201, 201,
+ 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
+ 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
+ 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071,
+ 2071, 2071, 2071, 2071, 2071, 201, 201, 201,
+
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072,
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072,
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072,
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072,
+
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072,
+ 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072,
+ 2072, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1089, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+ 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+ 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073,
+ 2073, 2073, 2073, 2073, 201, 201, 201, 201,
+
+ 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074,
+ 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074,
+ 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074,
+ 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2075,
+
+ 2076, 2076, 2076, 2076, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 2077, 2077, 2077,
2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
- 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078,
- 297, 297, 297, 297, 2079, 2079, 2078, 2078,
-
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
- 297, 297, 2079, 2079, 2079, 2079, 2079, 2079,
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
-
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
- 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079,
-
- 2080, 2081, 2081, 2081, 297, 2081, 2081, 297,
- 297, 297, 297, 297, 2081, 2082, 2081, 2083,
- 2080, 2080, 2080, 2080, 297, 2080, 2080, 2080,
- 297, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
+ 2078, 2079, 2078, 2078, 2078, 2078, 2078, 2078,
+ 2078, 2078, 2079, 201, 201, 201, 201, 201,
2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
- 2080, 2080, 2080, 2080, 297, 297, 297, 297,
- 2083, 2084, 2082, 297, 297, 297, 297, 2085,
-
- 2086, 2087, 2088, 2089, 2090, 2090, 2090, 2090,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 2091, 2091, 2091, 2091, 2091, 2091, 2092, 2092,
- 2093, 297, 297, 297, 297, 297, 297, 297,
-
- 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
- 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
- 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094,
- 2094, 2094, 2094, 2094, 2094, 2095, 2095, 2096,
-
- 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097,
- 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097,
- 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097,
- 2097, 2097, 2097, 2097, 2097, 2098, 2098, 2098,
-
- 2099, 2099, 2099, 2099, 2099, 2100, 2101, 2100,
- 2102, 2100, 2100, 2101, 2101, 2103, 2100, 2100,
- 2100, 2100, 2100, 2099, 2099, 2099, 2099, 2103,
- 2099, 2099, 2099, 2099, 2099, 2100, 2099, 2099,
-
- 2099, 2100, 2101, 2101, 2100, 2104, 2105, 297,
- 297, 297, 297, 2106, 2106, 2106, 2106, 2107,
- 2108, 2108, 2108, 2108, 2108, 2108, 2109, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
- 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
- 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
- 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
+ 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
+ 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080,
+ 2080, 2080, 2080, 2080, 2080, 2080, 2081, 2081,
+ 2081, 2081, 2081, 201, 201, 201, 201, 201,
+
+ 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082,
+ 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082,
+ 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082,
+ 2082, 2082, 2082, 2082, 2082, 2082, 201, 2083,
+
+ 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084,
+ 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084,
+ 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084,
+ 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084,
+
+ 2084, 2084, 2084, 2084, 201, 201, 201, 201,
+ 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084,
+ 2085, 2086, 2086, 2086, 2086, 2086, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+ 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+ 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+ 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087,
+
+ 2087, 2087, 2087, 2087, 2087, 2087, 2088, 2088,
+ 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+ 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+ 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+
+ 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089,
+ 2089, 2089, 2089, 2089, 2089, 2089, 2090, 2090,
+ 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+ 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+
+ 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+ 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+ 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+ 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091,
+
+ 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+ 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+ 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092,
+ 2092, 2092, 2092, 2092, 2092, 2092, 201, 201,
+
+ 2093, 2094, 2095, 2096, 2097, 2098, 2099, 2100,
+ 2101, 2102, 201, 201, 201, 201, 201, 201,
+ 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
+ 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
+
+ 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
+ 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103,
+ 2103, 2103, 2103, 2103, 201, 201, 201, 201,
+ 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+
+ 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+ 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+ 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104,
+ 2104, 2104, 2104, 2104, 201, 201, 201, 201,
+
+ 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
+ 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
+ 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
+ 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
+
+ 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106,
+ 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106,
+
+ 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106,
+ 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106,
+ 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106,
+ 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106,
+
+ 2106, 2106, 2106, 2106, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 2107,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 2108, 2108, 2108, 2108, 2108, 2108, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2109, 2109, 2109, 2109, 2109, 2109, 298, 298,
+ 2109, 298, 2109, 2109, 2109, 2109, 2109, 2109,
+ 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+ 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+
+ 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+ 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109,
+ 2109, 2109, 2109, 2109, 2109, 2109, 298, 2109,
+ 2109, 298, 298, 298, 2109, 298, 298, 2109,
2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110,
- 2110, 2110, 2110, 2110, 2110, 2110, 297, 297,
- 297, 2111, 2111, 2111, 2111, 2111, 2111, 2111,
-
+ 2110, 2110, 2110, 2110, 2110, 2110, 298, 2111,
2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112,
- 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112,
- 2112, 2112, 2112, 2112, 2112, 2112, 297, 297,
+
2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113,
+ 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113,
+ 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2114,
+ 2114, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
- 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
- 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114,
- 2114, 2114, 2114, 297, 297, 297, 297, 297,
- 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115,
-
- 2116, 2117, 2116, 2117, 2117, 2117, 2116, 2116,
- 2116, 2117, 2116, 2116, 2117, 2116, 2117, 2117,
- 2116, 2117, 297, 297, 297, 297, 297, 297,
- 297, 2118, 2118, 2118, 2118, 297, 297, 297,
-
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 2119, 2119, 2119, 2119, 2120, 2120, 2121,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
-
- 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
- 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
- 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
- 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
-
- 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122,
- 2122, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
-
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123,
- 2123, 2123, 2123, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
+ 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
+ 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
+ 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116,
+ 2116, 2116, 2116, 2116, 2116, 2116, 2116, 298,
+
+ 298, 298, 298, 298, 298, 298, 298, 2117,
+ 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118,
+ 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118,
+ 2118, 2118, 2118, 298, 2118, 2118, 298, 298,
+ 298, 298, 298, 2119, 2119, 2119, 2119, 2119,
+
+ 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120,
+ 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120,
+ 2120, 2120, 2120, 2120, 2120, 2120, 2121, 2121,
+ 2121, 2121, 2122, 2122, 298, 298, 298, 2123,
2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
- 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
+ 2124, 2124, 298, 298, 298, 298, 298, 2125,
+
+ 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
+ 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
+ 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
+ 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126,
+
+ 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127,
+ 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127,
+ 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127,
+ 298, 298, 298, 298, 2128, 2128, 2127, 2127,
+
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+ 298, 298, 2128, 2128, 2128, 2128, 2128, 2128,
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+ 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128,
+
+ 2129, 2130, 2130, 2130, 298, 2130, 2130, 298,
+ 298, 298, 298, 298, 2130, 2131, 2130, 2132,
+ 2129, 2129, 2129, 2129, 298, 2129, 2129, 2129,
+ 298, 2129, 2129, 2129, 2129, 2129, 2129, 2129,
+
+ 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129,
+ 2129, 2129, 2129, 2129, 2129, 2129, 2129, 2129,
+ 2129, 2129, 2129, 2129, 298, 298, 298, 298,
+ 2132, 2133, 2131, 298, 298, 298, 298, 2134,
+
+ 2135, 2136, 2137, 2138, 2139, 2139, 2139, 2139,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 2140, 2140, 2140, 2140, 2140, 2140, 2141, 2141,
+ 2142, 298, 298, 298, 298, 298, 298, 298,
+
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2143, 2143, 2143,
+ 2143, 2143, 2143, 2143, 2143, 2144, 2144, 2145,
+
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2146, 2146, 2146,
+ 2146, 2146, 2146, 2146, 2146, 2147, 2147, 2147,
+
+ 2148, 2148, 2148, 2148, 2148, 2149, 2150, 2149,
+ 2151, 2149, 2149, 2150, 2150, 2152, 2149, 2149,
+ 2149, 2149, 2149, 2148, 2148, 2148, 2148, 2152,
+ 2148, 2148, 2148, 2148, 2148, 2149, 2148, 2148,
+
+ 2148, 2149, 2150, 2150, 2149, 2153, 2154, 298,
+ 298, 298, 298, 2155, 2155, 2155, 2155, 2156,
+ 2157, 2157, 2157, 2157, 2157, 2157, 2158, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159,
+ 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159,
+ 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159,
+ 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159,
+
+ 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159,
+ 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159,
+ 2159, 2159, 2159, 2159, 2159, 2159, 298, 298,
+ 298, 2160, 2160, 2160, 2160, 2160, 2160, 2160,
+
+ 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161,
+ 2161, 2161, 2161, 2161, 2161, 2161, 2161, 2161,
+ 2161, 2161, 2161, 2161, 2161, 2161, 298, 298,
+ 2162, 2162, 2162, 2162, 2162, 2162, 2162, 2162,
+
+ 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+ 2163, 2163, 2163, 2163, 2163, 2163, 2163, 2163,
+ 2163, 2163, 2163, 298, 298, 298, 298, 298,
+ 2164, 2164, 2164, 2164, 2164, 2164, 2164, 2164,
+
+ 2165, 2166, 2165, 2166, 2166, 2166, 2165, 2165,
+ 2165, 2166, 2165, 2165, 2166, 2165, 2166, 2166,
+ 2165, 2166, 298, 298, 298, 298, 298, 298,
+ 298, 2167, 2167, 2167, 2167, 298, 298, 298,
+
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 2168, 2168, 2168, 2168, 2169, 2169, 2170,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+ 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+ 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+ 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+
+ 2171, 2171, 2171, 2171, 2171, 2171, 2171, 2171,
+ 2171, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
- 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
- 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124,
- 2124, 2124, 2124, 297, 297, 297, 297, 297,
- 297, 297, 2125, 2125, 2125, 2125, 2125, 2125,
-
- 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133,
- 2134, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 2135,
- 2135, 2135, 2135, 2135, 2135, 2135, 2135, 297,
-
- 2136, 2137, 2136, 2138, 2138, 2138, 2138, 2138,
- 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
- 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
- 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
- 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
- 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
- 2138, 2138, 2138, 2138, 2138, 2138, 2138, 2138,
- 2137, 2137, 2137, 2137, 2137, 2137, 2137, 2137,
- 2137, 2137, 2137, 2137, 2137, 2137, 2139, 2140,
- 2140, 2141, 2141, 2141, 2141, 2141, 200, 200,
- 200, 200, 2142, 2143, 2144, 2145, 2146, 2147,
- 2148, 2149, 2150, 2151, 2151, 2151, 2151, 2151,
- 2151, 2151, 2151, 2151, 2151, 2151, 2152, 2153,
- 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 2162,
- 2163, 2163, 2164, 2165, 2165, 2165, 2165, 2165,
- 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
- 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
- 2165, 2165, 2166, 2165, 2166, 2165, 2165, 2165,
- 2165, 2165, 2165, 2165, 2165, 2165, 2165, 2165,
- 2165, 2165, 2165, 2166, 2165, 2165, 2165, 2165,
- 2164, 2164, 2164, 2163, 2163, 2163, 2163, 2164,
- 2164, 2167, 2168, 2169, 2169, 2170, 2171, 2171,
- 2171, 2171, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2172, 200, 200, 200, 200, 200, 200, 200,
- 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180,
- 2181, 2182, 200, 200, 200, 200, 200, 200,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
- 2183, 2183, 2183, 2184, 2184, 2184, 2184, 2184,
- 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
- 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
- 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
- 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2185,
- 2186, 2186, 2186, 2186, 2187, 2186, 2188, 2188,
- 2186, 2186, 2186, 2189, 2189, 200, 2190, 2191,
- 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199,
- 2200, 2201, 2201, 2201, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
- 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
- 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
- 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202,
- 2202, 2202, 2202, 2203, 2204, 2205, 2202, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2206, 2206, 2207, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208,
- 2208, 2208, 2208, 2207, 2207, 2207, 2206, 2206,
- 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2207,
- 2209, 2208, 2208, 2208, 2208, 2210, 2210, 2211,
- 2212, 2213, 2214, 2215, 2215, 2216, 200, 200,
- 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224,
- 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2231,
- 200, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232,
- 2232, 2232, 2232, 2232, 2232, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2172, 2172, 2172, 2172, 2172, 2172, 2172, 2172,
+ 2172, 2172, 2172, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
+ 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
+ 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
+ 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
+
+ 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
+ 2173, 2173, 2173, 2173, 2173, 2173, 2173, 2173,
+ 2173, 2173, 2173, 298, 298, 298, 298, 298,
+ 298, 298, 2174, 2174, 2174, 2174, 2174, 2174,
+
+ 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182,
+ 2183, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+ 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184,
+ 2184, 2184, 2184, 2184, 2184, 2184, 2184, 298,
+
+ 2185, 2186, 2185, 2187, 2187, 2187, 2187, 2187,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
+ 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187,
+ 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186,
+ 2186, 2186, 2186, 2186, 2186, 2186, 2188, 2189,
+ 2189, 2190, 2190, 2190, 2190, 2190, 201, 201,
+ 201, 201, 2191, 2192, 2193, 2194, 2195, 2196,
+ 2197, 2198, 2199, 2200, 2200, 2200, 2200, 2200,
+ 2200, 2200, 2200, 2200, 2200, 2200, 2201, 2202,
+ 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 2211,
+ 2212, 2212, 2213, 2214, 2214, 2214, 2214, 2214,
+ 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214,
+ 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214,
+ 2214, 2214, 2215, 2214, 2215, 2214, 2214, 2214,
+ 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214,
+ 2214, 2214, 2214, 2215, 2214, 2214, 2214, 2214,
+ 2213, 2213, 2213, 2212, 2212, 2212, 2212, 2213,
+ 2213, 2216, 2217, 2218, 2218, 2219, 2220, 2220,
+ 2220, 2220, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 2221, 2221, 2221, 2221, 2221, 2221, 2221,
+ 2221, 201, 201, 201, 201, 201, 201, 201,
+ 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229,
+ 2230, 2231, 201, 201, 201, 201, 201, 201,
+
+ 2232, 2232, 2232, 2233, 2233, 2233, 2233, 2233,
2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
- 2233, 2233, 200, 2233, 2233, 2233, 2233, 2233,
- 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233,
- 2233, 2233, 2233, 2233, 2234, 2234, 2234, 2235,
- 2235, 2235, 2234, 2234, 2235, 2236, 2237, 2235,
- 2238, 2238, 2239, 2238, 2238, 2239, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2240, 2240, 2240, 2240, 2240, 2240, 2240, 200,
- 2240, 200, 2240, 2240, 2240, 2240, 200, 2240,
- 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240,
- 2240, 2240, 2240, 2240, 2240, 2240, 200, 2240,
- 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240,
- 2240, 2241, 200, 200, 200, 200, 200, 200,
- 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
- 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
- 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
- 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
- 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242,
- 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2243,
- 2244, 2244, 2244, 2243, 2243, 2243, 2243, 2243,
- 2243, 2245, 2246, 200, 200, 200, 200, 200,
- 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254,
- 2255, 2256, 200, 200, 200, 200, 200, 200,
-
- 2257, 2258, 2259, 2259, 200, 2260, 2260, 2260,
- 2260, 2260, 2260, 2260, 2260, 200, 200, 2260,
- 2260, 200, 200, 2260, 2260, 2260, 2260, 2260,
- 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260,
- 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260,
- 2260, 200, 2260, 2260, 2260, 2260, 2260, 2260,
- 2260, 200, 2260, 2260, 200, 2260, 2260, 2260,
- 2260, 2260, 200, 200, 2261, 2260, 2262, 2259,
- 2258, 2259, 2259, 2259, 2259, 200, 200, 2259,
- 2259, 200, 200, 2263, 2263, 2264, 200, 200,
- 2265, 200, 200, 200, 200, 200, 200, 2262,
- 200, 200, 200, 200, 200, 2260, 2260, 2260,
- 2260, 2260, 2259, 2259, 200, 200, 2266, 2266,
- 2266, 2266, 2266, 2266, 2266, 200, 200, 200,
- 2266, 2266, 2266, 2266, 2266, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267,
- 2268, 2269, 2269, 2270, 2270, 2270, 2270, 2270,
- 2270, 2269, 2271, 2272, 2272, 2268, 2272, 2270,
- 2270, 2269, 2273, 2274, 2267, 2267, 2275, 2267,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2276, 2277, 2278, 2279, 2280, 2281, 2282, 2283,
- 2284, 2285, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286,
- 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2287,
- 2288, 2288, 2289, 2289, 2289, 2289, 200, 200,
- 2288, 2288, 2290, 2290, 2289, 2289, 2288, 2291,
- 2292, 2293, 2294, 2294, 2295, 2295, 2296, 2296,
- 2296, 2294, 2297, 2297, 2297, 2297, 2297, 2297,
- 2297, 2297, 2297, 2297, 2297, 2297, 2297, 2297,
- 2298, 2298, 2298, 2298, 2299, 2299, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
- 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300,
- 2301, 2301, 2301, 2302, 2302, 2302, 2302, 2302,
- 2302, 2302, 2302, 2301, 2301, 2302, 2301, 2303,
- 2302, 2304, 2304, 2305, 2300, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313,
- 2314, 2315, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
- 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
- 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
- 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
- 2316, 2316, 2316, 2316, 2316, 2316, 2316, 2316,
- 2316, 2316, 2316, 2317, 2318, 2317, 2318, 2318,
- 2317, 2317, 2317, 2317, 2317, 2317, 2319, 2320,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328,
- 2329, 2330, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
- 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
- 2331, 2331, 2331, 2331, 2331, 2331, 2331, 2331,
- 2331, 2331, 200, 200, 200, 2332, 2332, 2332,
- 2333, 2333, 2332, 2332, 2332, 2332, 2333, 2332,
- 2332, 2332, 2332, 2334, 200, 200, 200, 200,
- 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342,
- 2343, 2344, 2345, 2345, 2346, 2346, 2346, 2347,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
- 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
- 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
- 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348,
- 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
- 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
- 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
- 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349,
- 2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357,
- 2358, 2359, 2360, 2360, 2360, 2360, 2360, 2360,
- 2360, 2360, 2360, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 2361,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362,
- 2362, 200, 200, 200, 200, 200, 200, 200,
-
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
-
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363,
- 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2364,
- 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
- 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
- 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
- 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
- 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364,
- 2364, 2365, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
+ 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2234,
+ 2235, 2235, 2235, 2235, 2236, 2235, 2237, 2237,
+ 2235, 2235, 2235, 2238, 2238, 201, 2239, 2240,
+ 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248,
+ 2249, 2250, 2250, 2250, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251,
+ 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251,
+ 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251,
+ 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251,
+ 2251, 2251, 2251, 2252, 2253, 2254, 2251, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2255, 2255, 2256, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257,
+ 2257, 2257, 2257, 2256, 2256, 2256, 2255, 2255,
+ 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2256,
+ 2258, 2257, 2259, 2259, 2257, 2260, 2260, 2261,
+ 2262, 2263, 2264, 2265, 2265, 2266, 201, 201,
+ 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274,
+ 2275, 2276, 2277, 2278, 2279, 2280, 2281, 2281,
+ 201, 2282, 2282, 2282, 2282, 2282, 2282, 2282,
+ 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282,
+ 2282, 2282, 2282, 2282, 2282, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 201, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283,
+ 2283, 2283, 2283, 2283, 2284, 2284, 2284, 2285,
+ 2285, 2285, 2284, 2284, 2285, 2286, 2287, 2285,
+ 2288, 2288, 2289, 2288, 2288, 2289, 2290, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2291, 2291, 2291, 2291, 2291, 2291, 2291, 201,
+ 2291, 201, 2291, 2291, 2291, 2291, 201, 2291,
+ 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291,
+ 2291, 2291, 2291, 2291, 2291, 2291, 201, 2291,
+ 2291, 2291, 2291, 2291, 2291, 2291, 2291, 2291,
+ 2291, 2292, 201, 201, 201, 201, 201, 201,
+ 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293,
+ 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293,
+ 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293,
+ 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293,
+ 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2293,
+ 2293, 2293, 2293, 2293, 2293, 2293, 2293, 2294,
+ 2295, 2295, 2295, 2294, 2294, 2294, 2294, 2294,
+ 2294, 2296, 2297, 201, 201, 201, 201, 201,
+ 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305,
+ 2306, 2307, 201, 201, 201, 201, 201, 201,
+
+ 2308, 2309, 2310, 2310, 201, 2311, 2311, 2311,
+ 2311, 2311, 2311, 2311, 2311, 201, 201, 2311,
+ 2311, 201, 201, 2311, 2311, 2311, 2311, 2311,
+ 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311,
+ 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311,
+ 2311, 201, 2311, 2311, 2311, 2311, 2311, 2311,
+ 2311, 201, 2311, 2311, 201, 2311, 2311, 2311,
+ 2311, 2311, 201, 201, 2312, 2311, 2313, 2310,
+ 2309, 2310, 2310, 2310, 2310, 201, 201, 2310,
+ 2310, 201, 201, 2314, 2314, 2315, 201, 201,
+ 2316, 201, 201, 201, 201, 201, 201, 2313,
+ 201, 201, 201, 201, 201, 2311, 2311, 2311,
+ 2311, 2311, 2310, 2310, 201, 201, 2317, 2317,
+ 2317, 2317, 2317, 2317, 2317, 201, 201, 201,
+ 2317, 2317, 2317, 2317, 2317, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
+ 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
+ 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
+ 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
+ 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
+ 2318, 2318, 2318, 2318, 2318, 2318, 2318, 2318,
+ 2318, 2318, 2318, 2318, 2318, 2319, 2319, 2319,
+ 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320,
+ 2319, 2319, 2321, 2320, 2320, 2319, 2322, 2318,
+ 2318, 2318, 2318, 2323, 2323, 2324, 2324, 2325,
+ 2326, 2327, 2328, 2329, 2330, 2331, 2332, 2333,
+ 2334, 2335, 201, 2324, 201, 2325, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+ 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+ 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+ 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+ 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+ 2336, 2336, 2336, 2336, 2336, 2336, 2336, 2336,
+ 2337, 2338, 2338, 2339, 2339, 2339, 2339, 2339,
+ 2339, 2338, 2340, 2341, 2341, 2337, 2341, 2339,
+ 2339, 2338, 2342, 2343, 2336, 2336, 2344, 2336,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2345, 2346, 2347, 2348, 2349, 2350, 2351, 2352,
+ 2353, 2354, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+ 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+ 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+ 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+ 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355,
+ 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2356,
+ 2357, 2357, 2358, 2358, 2358, 2358, 201, 201,
+ 2357, 2357, 2359, 2359, 2358, 2358, 2357, 2360,
+ 2361, 2362, 2363, 2363, 2364, 2364, 2365, 2365,
+ 2365, 2363, 2366, 2366, 2366, 2366, 2366, 2366,
2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2366, 2366, 2366, 2366, 2366,
- 2366, 2366, 2366, 2367, 2367, 2367, 2367, 2367,
- 2367, 2367, 2367, 2367, 2367, 2367, 2367, 200,
- 2368, 2368, 2368, 2368, 2369, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
-
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 2365, 2365, 2365, 2365,
- 2365, 2365, 2365, 2365, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
-
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2371, 2371, 2371, 2372, 2372, 2372, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2372, 2370, 2370, 2370, 2371, 2372,
- 2371, 2372, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
-
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2371, 2372, 2372, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
-
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 2370,
- 2370, 2370, 2370, 2370, 2370, 2370, 2370, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
-
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2374, 2375,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
-
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 2373,
- 2373, 2373, 2373, 2373, 2373, 2373, 2373, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
-
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 2376, 2376, 2376, 2376, 2376, 2376, 2376,
- 2376, 200, 200, 200, 200, 200, 200, 200,
- 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
- 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
- 2377, 2377, 2377, 2377, 2377, 2377, 2377, 2377,
- 2377, 2377, 2377, 2377, 2377, 2377, 2377, 200,
- 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385,
- 2386, 2387, 200, 200, 200, 200, 2388, 2388,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
- 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
- 2389, 2389, 2389, 2389, 2389, 2389, 2389, 2389,
- 2389, 2389, 2389, 2389, 2389, 2389, 200, 200,
- 2390, 2390, 2390, 2390, 2390, 2391, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2393, 2393, 2393, 2393, 2393, 2393, 2393, 2394,
- 2394, 2395, 2396, 2396, 2397, 2397, 2397, 2397,
- 2398, 2398, 2398, 2398, 2394, 2397, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406,
- 2407, 2408, 200, 2409, 2409, 2409, 2409, 2409,
- 2409, 2409, 200, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 200, 200, 200, 200, 200, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 2410, 2410, 2410,
- 2410, 2410, 2410, 2410, 2410, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2410, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
- 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
- 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
- 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
- 2411, 2411, 2411, 2411, 2411, 2411, 2411, 2411,
- 2411, 2411, 2411, 2411, 2411, 2411, 2411, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 2412,
- 2412, 2412, 2412, 2413, 2413, 2413, 2413, 2413,
- 2413, 2413, 2413, 2413, 2413, 2413, 2413, 2413,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2414, 2415, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 200, 200, 200, 200, 200,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 2416, 2416, 2416, 200, 200, 200,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 200, 200, 200, 200, 200, 200, 200,
- 2416, 2416, 2416, 2416, 2416, 2416, 2416, 2416,
- 2416, 2416, 200, 200, 2417, 2418, 2419, 2420,
- 2421, 2421, 2421, 2421, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 200,
- 200, 1412, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2423, 2423,
- 2423, 2423, 2423, 2423, 2423, 2424, 2425, 2426,
- 2426, 2426, 2422, 2422, 2422, 2427, 2424, 2424,
- 2424, 2424, 2424, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2429, 2429, 2429, 2429, 2429,
- 2429, 2429, 2429, 2422, 2422, 2430, 2430, 2430,
- 2430, 2430, 2429, 2429, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2430, 2430, 2430, 2430, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2423, 2423, 2423, 2423, 2423,
- 2423, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2422, 2422,
- 2422, 2422, 2422, 2422, 2422, 2422, 2431, 2431,
- 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431,
- 2431, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,
- 2022, 2022, 2432, 2432, 2432, 2022, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446,
- 1446, 1446, 1446, 1446, 1446, 1446, 1446, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
- 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433,
- 2433, 2433, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 200, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2434, 200, 2434, 2434,
- 200, 200, 2434, 200, 200, 2434, 2434, 200,
- 200, 2434, 2434, 2434, 2434, 200, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
- 2435, 2435, 200, 2435, 200, 2435, 2435, 2435,
- 2435, 2436, 2435, 2435, 200, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
-
- 2435, 2435, 2435, 2435, 2434, 2434, 200, 2434,
- 2434, 2434, 2434, 200, 200, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 200, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 200, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 200, 2434, 2434, 2434, 2434, 200,
- 2434, 2434, 2434, 2434, 2434, 200, 2434, 200,
- 200, 200, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 200, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
-
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 1404, 1404, 200, 200,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2437, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2438, 2435, 2435, 2435, 2435,
- 2435, 2435, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2437, 2435, 2435, 2435, 2435,
-
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2438, 2435, 2435,
- 2435, 2435, 2435, 2435, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2437, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2438,
- 2435, 2435, 2435, 2435, 2435, 2435, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2437,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2438, 2435, 2435, 2435, 2435, 2435, 2435,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434,
- 2434, 2437, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435,
- 2435, 2435, 2435, 2438, 2435, 2435, 2435, 2435,
- 2435, 2435, 2439, 2440, 200, 200, 2441, 2442,
- 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450,
- 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448,
- 2449, 2450, 2441, 2442, 2443, 2444, 2445, 2446,
- 2447, 2448, 2449, 2450, 2441, 2442, 2443, 2444,
- 2445, 2446, 2447, 2448, 2449, 2450, 2441, 2442,
- 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450,
-
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
-
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2451,
- 2451, 2451, 2451, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2452, 2451, 2451,
- 2451, 2451, 2451, 2451, 2451, 2451, 2451, 2451,
- 2451, 2451, 2451, 2451, 2452, 2451, 2451, 2453,
- 2454, 2453, 2453, 2455, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 2452, 2452, 2452, 2452, 2452,
- 200, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 2452, 2452, 2452, 2452, 2452, 2452, 2452, 2452,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 2456, 2456, 2456,
- 2456, 2456, 2456, 2456, 2456, 297, 297, 2457,
- 2457, 2457, 2457, 2457, 2457, 2457, 2457, 2457,
- 2458, 2458, 2458, 2458, 2458, 2458, 2458, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
-
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
- 297, 297, 297, 297, 297, 297, 297, 297,
-
- 2459, 2459, 2459, 2459, 343, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 343, 2459, 2459, 343, 2459, 343, 343, 2459,
- 343, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 343, 2459, 2459, 2459, 2459,
- 343, 2459, 343, 2459, 343, 343, 343, 343,
- 343, 343, 2459, 343, 343, 343, 343, 2459,
- 343, 2459, 343, 2459, 343, 2459, 2459, 2459,
- 343, 2459, 2459, 343, 2459, 343, 343, 2459,
- 343, 2459, 343, 2459, 343, 2459, 343, 2459,
- 343, 2459, 2459, 343, 2459, 343, 343, 2459,
- 2459, 2459, 2459, 343, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 343, 2459, 2459, 2459, 2459,
- 343, 2459, 2459, 2459, 2459, 343, 2459, 343,
- 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 343, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 343, 343, 343, 343,
- 343, 2459, 2459, 2459, 343, 2459, 2459, 2459,
- 2459, 2459, 343, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 2459, 2459, 2459, 2459,
- 2459, 2459, 2459, 2459, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 2460, 2460, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
-
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 200, 200, 200, 200,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
- 1482, 1482, 1482, 1482, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 200,
- 200, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1483,
- 200, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 200, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 2461, 2461, 2462, 2463, 2464, 2465, 2466, 2467,
- 2468, 2469, 2470, 2471, 2471, 200, 200, 200,
+ 2367, 2367, 2367, 2367, 2368, 2368, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2369, 2369, 2369, 2369, 2369, 2369, 2369, 2369,
+ 2370, 2370, 2370, 2371, 2371, 2371, 2371, 2371,
+ 2371, 2371, 2371, 2370, 2370, 2371, 2370, 2372,
+ 2371, 2373, 2373, 2374, 2369, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382,
+ 2383, 2384, 201, 201, 201, 201, 201, 201,
+ 2385, 2385, 2385, 2385, 2385, 2385, 2385, 2385,
+ 2385, 2385, 2385, 2385, 2385, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+ 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+ 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+ 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+ 2386, 2386, 2386, 2386, 2386, 2386, 2386, 2386,
+ 2386, 2386, 2386, 2387, 2388, 2387, 2388, 2388,
+ 2387, 2387, 2387, 2387, 2387, 2387, 2389, 2390,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398,
+ 2399, 2400, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401,
+ 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401,
+ 2401, 2401, 2401, 2401, 2401, 2401, 2401, 2401,
+ 2401, 2401, 201, 201, 201, 2402, 2402, 2402,
+ 2403, 2403, 2402, 2402, 2402, 2402, 2403, 2402,
+ 2402, 2402, 2402, 2404, 201, 201, 201, 201,
+ 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412,
+ 2413, 2414, 2415, 2415, 2416, 2416, 2416, 2417,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2418, 2418, 2418, 2418, 2418, 2418, 2418, 2418,
+ 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+ 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+ 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+ 2419, 2419, 2419, 2419, 2419, 2419, 2419, 2419,
+ 2420, 2421, 2422, 2423, 2424, 2425, 2426, 2427,
+ 2428, 2429, 2430, 2430, 2430, 2430, 2430, 2430,
+ 2430, 2430, 2430, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 2431,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2432, 2433, 2433, 2433, 2433, 2433, 2433, 2434,
+ 2434, 2433, 2433, 2432, 2432, 2432, 2432, 2432,
+ 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432,
+ 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432,
+ 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432,
+ 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432,
+ 2432, 2432, 2432, 2433, 2435, 2433, 2433, 2433,
+ 2433, 2434, 2436, 2433, 2433, 2433, 2433, 2437,
+ 2438, 2439, 2440, 2440, 2439, 2437, 2438, 2435,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2441, 2442, 2442, 2442, 2442, 2442, 2442, 2443,
+ 2443, 2442, 2442, 2442, 2441, 2441, 2441, 2441,
+ 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441,
+ 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441,
+ 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441,
+ 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441,
+ 2441, 2441, 2441, 2441, 201, 201, 2444, 2444,
+ 2444, 2444, 2442, 2442, 2442, 2442, 2442, 2442,
+ 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2443,
+ 2442, 2445, 2446, 2447, 2447, 201, 2448, 2448,
+ 2448, 2446, 2446, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 2449, 2449, 2449, 2449, 2449, 2449, 2449,
+ 2449, 201, 201, 201, 201, 201, 201, 201,
+
+ 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450,
+ 2450, 201, 2450, 2450, 2450, 2450, 2450, 2450,
+ 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450,
+ 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450,
+ 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2450,
+ 2450, 2450, 2450, 2450, 2450, 2450, 2450, 2451,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2452, 201,
+ 2452, 2452, 2452, 2452, 2452, 2452, 2451, 2453,
+ 2450, 2454, 2454, 2455, 2455, 2455, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2456, 2457, 2458, 2459, 2460, 2461, 2462, 2463,
+ 2464, 2465, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 2466, 2466, 2466,
+ 2466, 2466, 2466, 2466, 2466, 201, 201, 201,
+ 2467, 2468, 2469, 2469, 2469, 2469, 2469, 2469,
+ 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+ 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+ 2469, 2469, 2469, 2469, 2469, 2469, 2469, 2469,
+ 201, 201, 2470, 2470, 2470, 2470, 2470, 2470,
+ 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+ 2470, 2470, 2470, 2470, 2470, 2470, 2470, 2470,
+ 201, 2471, 2470, 2470, 2470, 2470, 2470, 2470,
+ 2470, 2471, 2470, 2470, 2471, 2470, 2470, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2472, 2472, 2472, 2472, 2472, 2472, 2472, 201,
+ 2472, 2472, 201, 2472, 2472, 2472, 2472, 2472,
2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
- 2472, 2472, 2472, 2472, 2472, 2472, 2472, 200,
- 2473, 2474, 2473, 2473, 2473, 2473, 2473, 2473,
- 2473, 2473, 2473, 2473, 2473, 2474, 2473, 2474,
- 2473, 2473, 2474, 2473, 2473, 2473, 2474, 2473,
- 2473, 2473, 2472, 2472, 2472, 2472, 2472, 2475,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2477,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2477,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
- 2476, 2476, 2478, 2478, 200, 200, 200, 200,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
- 2476, 2477, 2476, 2477, 2477, 2476, 2476, 2477,
- 2476, 2476, 2476, 2476, 2476, 2476, 2476, 2476,
- 2476, 2476, 778, 778, 778, 778, 2479, 2479,
- 2472, 2479, 2479, 2479, 2479, 2479, 2479, 2479,
- 2479, 2479, 2479, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 2480, 2480,
- 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480,
- 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480,
- 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480,
-
- 2481, 2482, 2482, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
- 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
- 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
- 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
- 1632, 1632, 2482, 2482, 2482, 2482, 2482, 2482,
- 2482, 2482, 2482, 200, 200, 200, 200, 200,
- 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632,
- 1632, 200, 200, 200, 200, 200, 200, 200,
- 2482, 2482, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 2483, 2483, 2483,
- 1450, 1450, 1450, 1450, 1450, 1450, 1483, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1483, 2483, 2483,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1451, 1451, 1483, 1483,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1449, 1449, 1450,
- 1450, 1450, 1450, 1450, 1449, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1483, 1450, 1450,
- 1450, 1450, 1450, 1483, 1483, 1483, 1483, 2483,
- 2483, 2483, 2483, 2483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 2483, 2483, 2483, 2484, 2484, 2484, 2484, 2484,
-
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1483,
- 1450, 1483, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1449, 1450, 1449, 1450, 1449, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1449,
- 1450, 1449, 1449, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1483, 1450, 1450, 1450, 1450, 1483, 1483, 2483,
-
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1451, 1451,
- 2485, 2485, 2485, 2485, 1451, 1451, 1451, 1451,
- 1451, 1451, 1483, 2483, 2483, 2483, 2483, 2483,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 200, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 200, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1451, 1451, 1451, 1451,
- 1451, 1451, 1483, 1450, 1450, 1450, 1450, 1450,
-
- 2486, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 2486, 1450, 1450, 1450, 2486, 1450, 2486,
- 1450, 2486, 1450, 2486, 1450, 1450, 1450, 2486,
- 1450, 1450, 1450, 1450, 1450, 1450, 2486, 2486,
- 1450, 1450, 1450, 1450, 2486, 1450, 2486, 2486,
- 1450, 1450, 1450, 1450, 2486, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1483, 1483, 2483, 2483, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 2487, 2487,
- 2487, 2488, 2488, 2488, 1451, 1451, 1451, 1451,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1450, 1450,
- 1450, 1450, 1450, 1450, 1450, 1450, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 2483, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
- 1483, 1483, 1483, 1483, 1483, 200, 200, 200,
- 1483, 1483, 1483, 1483, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 1449, 1449, 1449, 1449,
- 1449, 1449, 1449, 1449, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 200, 200, 200, 200,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 200, 200, 200, 200, 200, 200,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 1451, 1451,
- 1451, 1451, 1451, 1451, 1451, 1451, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483,
- 2483, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2483, 2483, 2483, 2483, 2483, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 2483, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
-
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 2489, 2489,
-
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
+ 2472, 2472, 2472, 2472, 2472, 2472, 2472, 2472,
+ 2472, 2473, 2473, 2473, 2473, 2473, 2473, 201,
+ 201, 201, 2473, 201, 2473, 2473, 201, 2473,
+ 2473, 2473, 2474, 2473, 2475, 2475, 2476, 2473,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484,
+ 2485, 2486, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2487,
+ 2487, 2487, 2487, 2487, 2487, 2487, 2487, 2488,
+ 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
+ 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
+ 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
+ 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
+ 2488, 2488, 2488, 2488, 2488, 2488, 2488, 2488,
+ 2488, 2489, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
@@ -5263,422 +4039,59 @@ static const unsigned short uc_property_trie[] = {
2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 2490,
- 2490, 2490, 2490, 2490, 2490, 2490, 2490, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
-
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643,
- 1643, 1643, 1643, 1643, 1643, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
-
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 2491, 2491,
- 2491, 2491, 2491, 2491, 2491, 2491, 1639, 1639,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
-
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
-
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645,
- 1645, 1645, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
-
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 2492, 2492,
- 2492, 2492, 2492, 2492, 2492, 2492, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
-
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639,
- 1639, 1639, 1639, 1639, 1639, 1639, 2489, 2489,
-
- 1351, 2428, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 2428, 2428, 2428, 2428, 2428, 2428, 2428, 2428,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
-
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 2493, 2493, 2493, 2493, 2493, 2493, 2493, 2493,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
-
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
- 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
+ 2490, 2490, 2490, 2491, 2491, 2491, 2491, 2491,
+ 2491, 2491, 2491, 2491, 2491, 2491, 2491, 201,
+ 2492, 2492, 2492, 2492, 2493, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 2489, 2489, 2489, 2489,
+ 2489, 2489, 2489, 2489, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
@@ -5724,10 +4137,44 @@ static const unsigned short uc_property_trie[] = {
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2495, 2495, 2495, 2496, 2496, 2496, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2496, 2494, 2494, 2494, 2495, 2496,
+ 2495, 2496, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2495, 2496, 2496, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
@@ -5744,7 +4191,1953 @@ static const unsigned short uc_property_trie[] = {
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
- 2494, 2494, 2494, 2494, 2494, 2494, 2489, 2489
+
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 2494,
+ 2494, 2494, 2494, 2494, 2494, 2494, 2494, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2498, 2499,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 2497,
+ 2497, 2497, 2497, 2497, 2497, 2497, 2497, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 2500, 2500, 2500, 2500, 2500, 2500, 2500,
+ 2500, 201, 201, 201, 201, 201, 201, 201,
+ 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+ 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+ 2501, 2501, 2501, 2501, 2501, 2501, 2501, 2501,
+ 2501, 2501, 2501, 2501, 2501, 2501, 2501, 201,
+ 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509,
+ 2510, 2511, 201, 201, 201, 201, 2512, 2512,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+ 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+ 2513, 2513, 2513, 2513, 2513, 2513, 2513, 2513,
+ 2513, 2513, 2513, 2513, 2513, 2513, 201, 201,
+ 2514, 2514, 2514, 2514, 2514, 2515, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2518,
+ 2518, 2519, 2520, 2520, 2521, 2521, 2521, 2521,
+ 2522, 2522, 2522, 2522, 2518, 2521, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2523, 2524, 2525, 2526, 2527, 2528, 2529, 2530,
+ 2531, 2532, 201, 2533, 2533, 2533, 2533, 2533,
+ 2533, 2533, 201, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 201, 201, 201, 201, 201, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 2516, 2516, 2516, 2516, 2516, 2516, 2516, 2516,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534,
+ 2534, 2534, 2534, 2534, 2534, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2534, 2535, 2535, 2535, 2535, 2535, 2535, 2535,
+ 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535,
+ 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535,
+ 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535,
+ 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535,
+ 2535, 2535, 2535, 2535, 2535, 2535, 2535, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 2536,
+ 2536, 2536, 2536, 2537, 2537, 2537, 2537, 2537,
+ 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2538, 2539, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540,
+ 2540, 2540, 2540, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2541, 2542, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 2543,
+ 2543, 2543, 2543, 2543, 2543, 2543, 2543, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 2544, 2544, 2544, 2544,
+ 2544, 2544, 2544, 2544, 201, 201, 201, 201,
+
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 201, 201, 201, 201, 201,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 2545, 2545, 2545, 201, 201, 201,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 201, 201, 201, 201, 201, 201, 201,
+ 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545,
+ 2545, 2545, 201, 201, 2546, 2547, 2548, 2549,
+ 2550, 2550, 2550, 2550, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 201,
+ 201, 1444, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2552, 2552,
+ 2552, 2552, 2552, 2552, 2552, 2553, 2554, 2555,
+ 2555, 2555, 2551, 2551, 2551, 2556, 2553, 2553,
+ 2553, 2553, 2553, 2557, 2557, 2557, 2557, 2557,
+ 2557, 2557, 2557, 2558, 2558, 2558, 2558, 2558,
+ 2558, 2558, 2558, 2551, 2551, 2559, 2559, 2559,
+ 2559, 2559, 2558, 2558, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2559, 2559, 2559, 2559, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2552, 2552, 2552, 2552, 2552,
+ 2552, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551,
+ 2551, 2551, 2551, 2551, 2551, 2551, 2560, 2560,
+ 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560,
+ 2560, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067,
+ 2067, 2067, 2561, 2561, 2561, 2067, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478,
+ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562,
+ 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562,
+ 2562, 2562, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 201, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2563, 201, 2563, 2563,
+ 201, 201, 2563, 201, 201, 2563, 2563, 201,
+ 201, 2563, 2563, 2563, 2563, 201, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2564, 2564,
+ 2564, 2564, 201, 2564, 201, 2564, 2564, 2564,
+ 2564, 2565, 2564, 2564, 201, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+
+ 2564, 2564, 2564, 2564, 2563, 2563, 201, 2563,
+ 2563, 2563, 2563, 201, 201, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 201, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 201, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 201, 2563, 2563, 2563, 2563, 201,
+ 2563, 2563, 2563, 2563, 2563, 201, 2563, 201,
+ 201, 201, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 201, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 1436, 1436, 201, 201,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2566, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2567, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2566, 2564, 2564, 2564, 2564,
+
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2567, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2566, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2567,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2566,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2567, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563,
+ 2563, 2566, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2564, 2567, 2564, 2564, 2564, 2564,
+ 2564, 2564, 2568, 2569, 201, 201, 2570, 2571,
+ 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579,
+ 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577,
+ 2578, 2579, 2570, 2571, 2572, 2573, 2574, 2575,
+ 2576, 2577, 2578, 2579, 2570, 2571, 2572, 2573,
+ 2574, 2575, 2576, 2577, 2578, 2579, 2570, 2571,
+ 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579,
+
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2580,
+ 2580, 2580, 2580, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2581, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580,
+ 2580, 2580, 2580, 2580, 2581, 2580, 2580, 2582,
+ 2583, 2582, 2582, 2584, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 2581, 2581, 2581, 2581, 2581,
+ 201, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2585, 2585, 2585, 2585, 2585, 2585, 2585, 201,
+ 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+ 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585,
+ 2585, 201, 201, 2585, 2585, 2585, 2585, 2585,
+ 2585, 2585, 201, 2585, 2585, 201, 2585, 2585,
+ 2585, 2585, 2585, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586,
+ 2586, 2586, 2586, 2586, 2586, 298, 298, 2587,
+ 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587,
+ 2588, 2588, 2588, 2588, 2588, 2588, 2588, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589,
+ 2589, 2589, 2590, 2590, 2590, 2590, 2590, 2590,
+ 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590,
+ 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590,
+ 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590,
+ 2590, 2590, 2590, 2590, 2591, 2591, 2591, 2591,
+ 2591, 2591, 2592, 298, 298, 298, 298, 298,
+ 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600,
+ 2601, 2602, 298, 298, 298, 298, 2603, 2603,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+ 298, 298, 298, 298, 298, 298, 298, 298,
+
+ 2604, 2604, 2604, 2604, 344, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 344, 2604, 2604, 344, 2604, 344, 344, 2604,
+ 344, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 344, 2604, 2604, 2604, 2604,
+ 344, 2604, 344, 2604, 344, 344, 344, 344,
+ 344, 344, 2604, 344, 344, 344, 344, 2604,
+ 344, 2604, 344, 2604, 344, 2604, 2604, 2604,
+ 344, 2604, 2604, 344, 2604, 344, 344, 2604,
+ 344, 2604, 344, 2604, 344, 2604, 344, 2604,
+ 344, 2604, 2604, 344, 2604, 344, 344, 2604,
+ 2604, 2604, 2604, 344, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 344, 2604, 2604, 2604, 2604,
+ 344, 2604, 2604, 2604, 2604, 344, 2604, 344,
+ 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 344, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 344, 344, 344, 344,
+ 344, 2604, 2604, 2604, 344, 2604, 2604, 2604,
+ 2604, 2604, 344, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604,
+ 2604, 2604, 2604, 2604, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+ 2605, 2605, 344, 344, 344, 344, 344, 344,
+ 344, 344, 344, 344, 344, 344, 344, 344,
+
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1682, 1682, 1682, 1682,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519,
+ 1519, 1519, 1519, 1519, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1682,
+ 1682, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1521,
+ 1682, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1682, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 2606, 2606, 2607, 2608, 2609, 2610, 2611, 2612,
+ 2613, 2614, 2615, 2616, 2616, 1682, 1682, 1682,
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617,
+ 2617, 2617, 2617, 2617, 2617, 2617, 2617, 1682,
+ 2618, 2619, 2618, 2618, 2618, 2618, 2618, 2618,
+ 2618, 2618, 2618, 2618, 2618, 2619, 2618, 2619,
+ 2618, 2618, 2619, 2618, 2618, 2618, 2619, 2618,
+ 2618, 2618, 2617, 2617, 2617, 2617, 2617, 2620,
+ 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2622,
+ 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2622,
+ 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621,
+ 2621, 2621, 2623, 2623, 1682, 1682, 1682, 1682,
+ 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621,
+ 2621, 2622, 2621, 2622, 2622, 2621, 2621, 2622,
+ 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621,
+ 2621, 2621, 796, 796, 796, 796, 2624, 2624,
+ 2617, 2624, 2624, 2624, 2624, 2624, 2624, 2624,
+ 2624, 2624, 2624, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625,
+ 2625, 2625, 2625, 2625, 2625, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 2626, 2626,
+ 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626,
+ 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626,
+ 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626,
+
+ 2627, 2628, 2628, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675,
+ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675,
+ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675,
+ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675,
+ 1675, 1675, 2628, 2628, 2628, 2628, 2628, 2628,
+ 2628, 2628, 2628, 2629, 1682, 1682, 1682, 1682,
+ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675,
+ 1675, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 2628, 2628, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 2630, 2630, 2630, 2630, 2630, 2630, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 2631, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 2632, 2632, 2632,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1521, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 2631, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 2631, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1521, 2632, 2632,
+ 1482, 1482, 1482, 1482, 1482, 1523, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 2631, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1483, 1483, 1521, 1521,
+ 1482, 1482, 1482, 1482, 2631, 1482, 1482, 1482,
+ 2631, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1481, 1481, 1482,
+ 1482, 1482, 1482, 1482, 1481, 1482, 1482, 1482,
+ 1482, 1482, 1523, 1523, 1523, 1521, 1482, 1523,
+ 1482, 1482, 1523, 2633, 2633, 1521, 1521, 2632,
+ 2632, 2632, 2632, 2632, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 2631, 1482, 2631, 1482, 1482,
+ 1482, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 2632, 2632, 2632, 2634, 2634, 2634, 2634, 2634,
+
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1521,
+ 1482, 1521, 1523, 1523, 1482, 1482, 1523, 1523,
+ 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
+ 1523, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 2635, 2635,
+ 2635, 2635, 1482, 1482, 1482, 1482, 1523, 1482,
+ 1523, 1523, 1523, 1523, 1523, 1523, 1523, 1523,
+ 1523, 1482, 1482, 1482, 1523, 1482, 1482, 1482,
+ 1482, 1523, 1523, 1523, 1482, 1523, 1523, 1523,
+ 1482, 1482, 1482, 2631, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1481, 1482, 1481, 1482, 1481, 1482, 1482, 1482,
+ 1482, 1482, 1523, 1482, 1482, 1482, 1482, 1481,
+ 1482, 1481, 1481, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 2631, 2631, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1521, 1482, 1482, 1482, 1482, 1521, 1521, 2632,
+
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1482, 1482, 2631,
+ 1482, 1482, 1482, 1482, 2631, 1482, 1482, 1482,
+ 1482, 1482, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1483, 1483,
+ 2636, 2636, 2636, 2636, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1521, 2632, 2632, 2632, 2632, 2632,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 2633, 2633, 1521, 1521,
+ 1521, 1521, 2637, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 2633, 1521, 1521, 1521, 1521, 2633, 2633, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 2638, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 2639, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1521, 1482, 1482, 1482, 1482, 1482,
+
+ 2640, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 2640, 1482, 1482, 1482, 2640, 1482, 2640,
+ 1482, 2640, 1482, 2640, 1482, 1482, 1482, 2640,
+ 1482, 1482, 1482, 1482, 1482, 1482, 2640, 2640,
+ 1482, 1482, 1482, 1482, 2640, 1482, 2640, 2640,
+ 1482, 1482, 1482, 1482, 2640, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1521, 1521, 2632, 2632, 1523, 1523, 1523,
+ 1482, 1482, 1482, 1523, 1523, 1523, 1523, 1523,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 2641, 2641,
+ 2641, 2642, 2642, 2642, 1483, 1483, 1483, 1483,
+ 2631, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 2631, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1523, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1482, 1482, 1482, 1482, 1523, 1523, 1523, 1482,
+ 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482,
+ 1523, 1482, 1482, 1482, 1482, 1482, 1521, 1521,
+ 1521, 1521, 1521, 1521, 2633, 1521, 1521, 1521,
+ 2632, 2638, 2638, 2630, 2630, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521,
+ 1521, 1521, 1521, 1521, 1521, 1682, 1682, 1682,
+ 1521, 1521, 1521, 1521, 2638, 2638, 2638, 2630,
+ 2630, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481,
+ 1481, 1481, 1481, 1481, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1682, 1682, 1682, 1682,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483,
+ 1483, 1483, 1483, 1483, 1483, 1483, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485,
+ 1485, 1485, 1485, 1485, 1682, 1682, 1682, 1682,
+ 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632,
+ 2643, 2637, 2637, 2637, 2637, 2638, 2637, 2644,
+ 2638, 2638, 2638, 2638, 2638, 2638, 2637, 2638,
+ 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630,
+ 2637, 2644, 2644, 2637, 2637, 2637, 2637, 2637,
+ 2637, 2637, 2638, 2638, 2638, 2637, 2637, 1682,
+ 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638,
+ 2638, 2638, 2638, 2638, 2630, 1682, 1682, 1682,
+ 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638,
+ 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2630,
+ 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630,
+ 2630, 2630, 2630, 2630, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 2632, 2632, 2632, 2632, 2632, 2638, 2638, 2638,
+ 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638,
+ 2638, 2638, 2630, 2630, 2630, 2630, 2630, 2630,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 2632, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 2630, 2644, 2644, 2644, 2644, 2644, 2644, 2644,
+ 2644, 2644, 2644, 2644, 2644, 2644, 2630, 2630,
+ 2630, 2630, 2630, 2630, 2630, 2630, 2630, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 2645, 2645,
+
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646,
+ 2646, 2646, 2646, 2646, 2646, 2646, 2646, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686,
+ 1686, 1686, 1686, 1686, 1686, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 2647, 2647,
+ 2647, 2647, 2647, 2647, 2647, 2647, 1682, 1682,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688,
+ 1688, 1688, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689,
+ 1689, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 2648, 2648,
+ 2648, 2648, 2648, 2648, 2648, 2648, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+ 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682,
+
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 2645, 2645,
+
+ 1382, 2557, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 2649, 2649, 2649, 2649, 2649, 2649, 2649, 2649,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 2650, 2650, 2650, 2650, 2650, 2650, 2650, 2650,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+ 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382,
+
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2651, 2651,
+ 2651, 2651, 2651, 2651, 2651, 2651, 2645, 2645
};
#define GET_PROP_INDEX(ucs4) \
@@ -5758,174 +6151,175 @@ static const unsigned short uc_property_trie[] = {
static const Properties uc_properties[] = {
{ 9, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 },
{ 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 5, 17, 2 },
- { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 34, 2 },
- { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 },
- { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 35, 2 },
- { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 33, 2 },
+ { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 2, 2, 37, 2 },
+ { 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 38, 2 },
+ { 9, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 5, 38, 2 },
+ { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 36, 2 },
{ 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 },
{ 9, 8, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 21, 2 },
- { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 32, 2 },
+ { 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 35, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 13, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 13, 3, 2 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9, 13, 3, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 },
{ 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 },
{ 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 },
- { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 11, 8, 2 },
+ { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 11, 8, 2 },
{ 20, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 16, 2 },
- { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 10, 8, 2 },
+ { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 10, 8, 2 },
{ 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 7, 2 },
- { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 2 },
+ { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 2 },
{ 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 8, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 8, 2 },
{ 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 10, 7, 12, 3 },
{ 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 },
{ 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 2, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
- { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
+ { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 17, 0, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 },
{ 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 },
- { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 },
+ { 9, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 38, 2 },
{ 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
{ 23, 10, 0, 0, -1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 17, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 17, 2 },
{ 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 },
{ 26, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 2 },
{ 5, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 18, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 743, 0, 743, 0, 775, 1, 80, 0, 8, 6, 12, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 743, 0, 743, 0, 775, 1, 80, 0, 10, 6, 12, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 0, 12, 2 },
{ 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 24, 10, 0, 0, -1, -16, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 404, 1, 401, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 121, 0, 121, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 407, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -232, 0, -232, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 486, 1, 486, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -121, 0, 0, 0, 0, 0, -121, 1, 17, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -300, 0, -300, 0, -268, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 195, 0, 195, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 210, 0, 0, 0, 0, 0, 210, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 206, 0, 0, 0, 0, 0, 206, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 205, 0, 0, 0, 0, 0, 205, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 79, 0, 0, 0, 0, 0, 79, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 202, 0, 0, 0, 0, 0, 202, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 203, 0, 0, 0, 0, 0, 203, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 207, 0, 0, 0, 0, 0, 207, 1, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 97, 0, 97, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 211, 0, 0, 0, 0, 0, 211, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 209, 0, 0, 0, 0, 0, 209, 1, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 163, 0, 163, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 213, 0, 0, 0, 0, 0, 213, 1, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 214, 0, 0, 0, 0, 0, 214, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 218, 0, 0, 0, 0, 0, 218, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 217, 0, 0, 0, 0, 0, 217, 1, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 219, 0, 0, 0, 0, 0, 219, 1, 0, 0, 8, 7, 12, 3 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 56, 0, 56, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 1, 0, 2, 1, 80, 0, 8, 7, 12, 3 },
- { 16, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, 0, 1, 1, 80, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -2, 0, -1, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -79, 0, -79, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 497, 1, 497, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -97, 0, 0, 0, 0, 0, -97, 4, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -56, 0, 0, 0, 0, 0, -56, 4, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 6, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 8, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -163, 0, 0, 0, 0, 0, -163, 8, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 3, 0, 0, 0, 0, 1, 3, 8, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 5, 1, 5, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 7, 1, 7, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -195, 0, 0, 0, 0, 0, -195, 9, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 69, 0, 0, 0, 0, 0, 69, 9, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 71, 0, 0, 0, 0, 0, 71, 9, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 9, 1, 9, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 11, 1, 11, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 13, 1, 13, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -210, 0, -210, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -206, 0, -206, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -205, 0, -205, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -202, 0, -202, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -203, 0, -203, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 15, 1, 15, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 17, 1, 17, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -207, 0, -207, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 19, 1, 19, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 21, 1, 21, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -209, 0, -209, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -211, 0, -211, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 23, 1, 23, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 25, 1, 25, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 27, 1, 27, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -213, 0, -213, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -214, 0, -214, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 29, 1, 29, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -218, 0, -218, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 31, 1, 31, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -69, 0, -69, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -217, 0, -217, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -71, 0, -71, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -219, 0, -219, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 33, 1, 33, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 35, 1, 35, 0, 0, 1, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 6, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 6, 12, 2 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 18, 2 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 2 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 18, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 410, 1, 407, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 121, 0, 121, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 413, 0, 0, 0, 0, 0, 0, 1, 17, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -232, 0, -232, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 80, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 492, 1, 492, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -121, 0, 0, 0, 0, 0, -121, 1, 17, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -300, 0, -300, 0, -268, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 195, 0, 195, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 210, 0, 0, 0, 0, 0, 210, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 206, 0, 0, 0, 0, 0, 206, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 205, 0, 0, 0, 0, 0, 205, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 79, 0, 0, 0, 0, 0, 79, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 202, 0, 0, 0, 0, 0, 202, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 203, 0, 0, 0, 0, 0, 203, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 207, 0, 0, 0, 0, 0, 207, 1, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 97, 0, 97, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 211, 0, 0, 0, 0, 0, 211, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 209, 0, 0, 0, 0, 0, 209, 1, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 163, 0, 163, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 213, 0, 0, 0, 0, 0, 213, 1, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 214, 0, 0, 0, 0, 0, 214, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 218, 0, 0, 0, 0, 0, 218, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 217, 0, 0, 0, 0, 0, 217, 1, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 219, 0, 0, 0, 0, 0, 219, 1, 0, 0, 10, 7, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 56, 0, 56, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 2, 0, 0, 0, 1, 0, 2, 1, 80, 0, 10, 7, 12, 3 },
+ { 16, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 0, 0, 1, 1, 80, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -2, 0, -1, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -79, 0, -79, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 503, 1, 503, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -97, 0, 0, 0, 0, 0, -97, 4, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -56, 0, 0, 0, 0, 0, -56, 4, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 6, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 8, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -163, 0, 0, 0, 0, 0, -163, 8, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 3, 0, 0, 0, 0, 1, 3, 8, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 5, 1, 5, 0, 0, 8, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 7, 1, 7, 0, 0, 8, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -195, 0, 0, 0, 0, 0, -195, 9, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 69, 0, 0, 0, 0, 0, 69, 9, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 71, 0, 0, 0, 0, 0, 71, 9, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 9, 1, 9, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 11, 1, 11, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 13, 1, 13, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -210, 0, -210, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -206, 0, -206, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -205, 0, -205, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -202, 0, -202, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -203, 0, -203, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 15, 1, 15, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 17, 1, 17, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -207, 0, -207, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 19, 1, 19, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 21, 1, 21, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -209, 0, -209, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -211, 0, -211, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 23, 1, 23, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 25, 1, 25, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 27, 1, 27, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 29, 1, 29, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -213, 0, -213, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -214, 0, -214, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 31, 1, 31, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -218, 0, -218, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 33, 1, 33, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -69, 0, -69, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -217, 0, -217, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -71, 0, -71, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -219, 0, -219, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 35, 1, 35, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 37, 1, 37, 0, 0, 1, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 6, 12, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 0, 12, 2 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 18, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 0, 18, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 36 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 2 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 0, 12, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 0, 12, 2 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
@@ -5952,104 +6346,104 @@ static const Properties uc_properties[] = {
{ 0, 17, 234, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 4, 1 },
{ 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 4, 1 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 4 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 10, 6, 12, 4 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 10, 8, 12, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 4 },
{ 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 9, 0, 0, 8, 6, 12, 4 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 13, 0, 8, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 116, 0, 0, 0, 0, 0, 116, 16, 0, 0, 8, 7, 12, 4 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 130, 0, 130, 0, 0, 9, 0, 0, 10, 6, 12, 4 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 15, 0, 8, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 116, 0, 0, 0, 0, 0, 116, 16, 0, 0, 10, 7, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 38, 0, 0, 0, 0, 0, 38, 1, 17, 0, 8, 7, 12, 4 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 12, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 37, 0, 0, 0, 0, 0, 37, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 63, 0, 0, 0, 0, 0, 63, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 489, 1, 489, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -38, 0, -38, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -37, 0, -37, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 493, 1, 493, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -31, 0, -31, 0, 1, 1, 0, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -63, 0, -63, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 8, 10, 0, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -62, 0, -62, 0, -30, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -57, 0, -57, 0, -25, 1, 80, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -47, 0, -47, 0, -15, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -54, 0, -54, 0, -22, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, 0, 4, 0, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -86, 0, -86, 0, -54, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, -48, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 80, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -116, 0, -116, 0, 0, 1, 0, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -60, 0, 0, 0, 0, 0, -60, 5, 80, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -96, 0, -96, 0, -64, 5, 80, 0, 8, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 38, 0, 0, 0, 0, 0, 38, 1, 17, 0, 10, 7, 12, 4 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 14, 0, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 37, 0, 0, 0, 0, 0, 37, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 63, 0, 0, 0, 0, 0, 63, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 495, 1, 495, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -38, 0, -38, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -37, 0, -37, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 499, 1, 499, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -31, 0, -31, 0, 1, 1, 0, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -63, 0, -63, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 8, 10, 0, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -62, 0, -62, 0, -30, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -57, 0, -57, 0, -25, 1, 80, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -47, 0, -47, 0, -15, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -54, 0, -54, 0, -22, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, 0, 4, 0, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 10, 7, 12, 46 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 10, 6, 12, 46 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -86, 0, -86, 0, -54, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, -48, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 80, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -116, 0, -116, 0, 0, 1, 0, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -60, 0, 0, 0, 0, 0, -60, 5, 80, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -96, 0, -96, 0, -64, 5, 80, 0, 10, 6, 12, 4 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 7, 0, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 7, 0, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 7, 80, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 8, 0, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 4, 17, 0, 8, 7, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 17, 0, 8, 7, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 0, 0, 8, 7, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 8, 7, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 8, 6, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 8, 6, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 4, 17, 0, 8, 6, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 17, 0, 8, 6, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 8, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 7, 0, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 7, 0, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 7, 80, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -130, 0, 0, 0, 0, 0, -130, 8, 0, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 4, 17, 0, 10, 7, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 17, 0, 10, 7, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 80, 0, 0, 0, 0, 0, 80, 1, 0, 0, 10, 7, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 0, 0, 10, 7, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 17, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 17, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 4, 17, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 17, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -80, 0, -80, 0, 0, 1, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 17, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 1, 17, 0, 10, 6, 12, 5 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 5 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 5 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 15, 0, 0, 0, 0, 0, 15, 1, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -15, 0, -15, 0, 0, 9, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 5 },
- { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 1, 0, 0, 8, 7, 12, 6 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 6 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 6, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 15, 0, 0, 0, 0, 0, 15, 1, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -15, 0, -15, 0, 0, 9, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 4, 17, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 4, 17, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 9, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 9, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 10, 7, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 10, 6, 12, 5 },
+ { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 1, 0, 0, 10, 7, 12, 6 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 6 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 6 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 1, 0, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 453, 1, 450, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 12, 8, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 1, 0, 0, 10, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 459, 1, 456, 0, 0, 1, 80, 0, 10, 6, 12, 6 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 12, 8, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 6 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 6 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 9, 6 },
@@ -6080,17 +6474,17 @@ static const Properties uc_properties[] = {
{ 0, 17, 25, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 7 },
{ 0, 17, 18, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 7 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 7, 8, 13, 7 },
- { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 7 },
- { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 12, 7 },
- { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 3, 4, 4, 12, 8 },
- { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 3, 4, 4, 12, 8 },
- { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 4, 4, 12, 2 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 9, 8, 13, 7 },
+ { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 7 },
+ { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 0, 12, 7 },
+ { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 6, 4, 12, 8 },
+ { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 6, 4, 12, 8 },
+ { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 6, 4, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 },
{ 26, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 8 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 8 },
{ 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 10, 8 },
- { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 13, 11, 8, 8 },
+ { 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 11, 8, 8 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 8 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 },
@@ -6098,18 +6492,18 @@ static const Properties uc_properties[] = {
{ 0, 17, 31, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 32, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 8 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 },
- { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 },
+ { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 6, 4, 21, 8 },
{ 13, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 8 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 2 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 },
- { 17, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 2 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 8 },
+ { 17, 13, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 2 },
{ 0, 17, 27, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 28, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 29, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
@@ -6124,95 +6518,102 @@ static const Properties uc_properties[] = {
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 8 },
- { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 8 },
- { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 9, 11, 8 },
+ { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 25, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 9, 11, 8 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 8 },
{ 0, 17, 35, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 8 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 6, 8 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 },
- { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 12, 2 },
+ { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 6, 4, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 8 },
- { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 },
- { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
- { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 8 },
+ { 17, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 8 },
+ { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
+ { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 8 },
{ 29, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 8 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 9 },
{ 25, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 9 },
- { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 12, 9 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 },
+ { 10, 13, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 6, 4, 12, 9 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 9 },
{ 0, 17, 36, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 9 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 9 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 9 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 9 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 9 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 9 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 10 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 10 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 10 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 10 },
- { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 66 },
- { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 10 },
+ { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 66 },
+ { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 66 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 66 },
- { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 },
+ { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 66 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 66 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 13, 11, 8, 66 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 15, 11, 8, 66 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 66 },
- { 17, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 66 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 },
+ { 17, 1, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 66 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 82 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 82 },
- { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 82 },
+ { 17, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 82 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 82 },
- { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 },
- { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 95 },
+ { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 95 },
+ { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 95 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 95 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 95 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 95 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 8 },
- { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 9 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 9 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 9 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 8 },
+ { 18, 13, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 8 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 8 },
+ { 10, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 7, 6, 4, 12, 2 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 8 },
@@ -6222,270 +6623,280 @@ static const Properties uc_properties[] = {
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 8 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 11 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 10, 8, 12, 11 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 11 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 11 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 8, 4, 4, 21, 11 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 11 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 11 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 21, 11 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 10, 8, 12, 11 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 17, 2 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 11 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 11 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 11 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 12 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 11 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 12 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 12 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 12 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 12 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 12 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 12 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 12 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 12 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 12 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 8, 4, 4, 21, 12 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 12 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 12 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 12 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 12 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 12 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 10, 8, 12, 12 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 12 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 12 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 12 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 9, 12 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 12 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 12, 12 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 13 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 13 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 13 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 13 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 4, 4, 21, 13 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 13 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 10, 8, 12, 13 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 13 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 13 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 13 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 13 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 13 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 13 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 14 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 14 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 14 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 14 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 14 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 14 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 14 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 14 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 14 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 14 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 14 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 14 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 14 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 14 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 14 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 15 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 15 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 15 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 15 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 15 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 15 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 15 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 15 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 8, 4, 4, 21, 15 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 15 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 15 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 8, 8, 12, 15 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 15 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 10, 8, 12, 15 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 15 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 15 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 15 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 16 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 12, 16 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 16 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 16 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 10, 8, 12, 16 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 16 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 16 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 16 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 16 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 16 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 8, 4, 4, 21, 16 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 16 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 16 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 16 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 16 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 16 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 16 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 16 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 9, 16 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 17 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 17 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 17 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 17 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 17 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 17 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 17 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 17 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 17 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 4, 4, 21, 17 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 },
{ 0, 17, 84, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 17 },
{ 0, 17, 91, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 17 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 17 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 17 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 17 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 17 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 17 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 17 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 18 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 18 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 18 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 18 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 18 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 18 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 18 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 18 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 18 },
{ 0, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 18 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 8, 4, 4, 21, 18 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 18 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 18 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 18 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 18 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 18 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 18 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 18 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 19 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 19 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 4, 4, 21, 19 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 19 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 19 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 19 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 4, 4, 21, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 19 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 19 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 19 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 19 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 7, 4, 4, 21, 19 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 8, 4, 4, 21, 19 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 19 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 19 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 10, 8, 12, 19 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 19 },
+ { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 19 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 19 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 19 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 19 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 10, 19 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 21, 20 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 20 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 8, 4, 4, 21, 20 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 20 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 21, 20 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 20 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 7, 4, 4, 21, 20 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 20 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 8, 4, 4, 21, 20 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 20 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 20 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 21 },
- { 0, 17, 103, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 },
- { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 21 },
- { 0, 17, 107, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 21 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 33, 21 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 21 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 8, 0, 8, 33, 21 },
+ { 0, 17, 103, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 21 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 21 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 33, 21 },
+ { 0, 17, 107, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 21 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 21 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 21 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 21 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 21 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 7, 0, 8, 30, 22 },
- { 0, 17, 118, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 30, 22 },
- { 0, 17, 122, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 30, 22 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 9, 11, 22 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 8, 30, 22 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 30, 22 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 8, 12, 23 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 33, 22 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 22 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 8, 0, 8, 33, 22 },
+ { 0, 17, 118, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 22 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 33, 22 },
+ { 0, 17, 122, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 33, 22 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 16, 9, 11, 22 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 8, 33, 22 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 33, 22 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 10, 8, 12, 23 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 18, 23 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 },
@@ -6495,35 +6906,35 @@ static const Properties uc_properties[] = {
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 6, 23 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 14, 9, 11, 23 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 9, 11, 23 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 23 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 17, 23 },
{ 0, 17, 216, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
{ 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 0, 23 },
{ 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 13, 1, 23 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 21, 23 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 0, 8, 8, 12, 23 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 23 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 23 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 4, 4, 21, 23 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 0, 10, 8, 12, 23 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 23 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 23 },
{ 0, 17, 129, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
{ 0, 17, 130, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 85, 4, 4, 4, 21, 23 },
{ 0, 17, 132, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 80, 4, 4, 4, 21, 23 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 7, 4, 4, 17, 23 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 4, 4, 17, 23 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 4, 4, 21, 23 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 23 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 23 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 23 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 23 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 23 },
@@ -6536,63 +6947,63 @@ static const Properties uc_properties[] = {
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 23 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 4, 23 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 24 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 30, 24 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 0, 0, 8, 30, 24 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 4, 30, 24 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 4, 30, 24 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 30, 24 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 24 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 },
- { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 },
- { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 24 },
- { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 30, 24 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 24 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 33, 24 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 8, 33, 24 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 17, 0, 0, 8, 33, 24 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 4, 4, 33, 24 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 4, 4, 33, 24 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 33, 24 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 204, 4, 4, 4, 33, 24 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 8, 4, 4, 33, 24 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 33, 24 },
+ { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 33, 24 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 33, 24 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 33, 24 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 33, 24 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 24 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 17, 24 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 24 },
- { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 30, 24 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 24 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 24 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 24 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 30, 24 },
- { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 1, 0, 0, 8, 7, 12, 25 },
- { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 13, 0, 0, 8, 7, 12, 25 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 25 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 25 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 25 },
+ { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 33, 24 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 24 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 33, 24 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 33, 24 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 33, 24 },
+ { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 1, 0, 0, 10, 7, 12, 25 },
+ { 14, 0, 0, 0, -1, 0, 0, 7264, 0, 0, 0, 0, 0, 7264, 13, 0, 0, 10, 7, 12, 25 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 25 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 25 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 25 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 25 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 25 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8, 8, 8, 25, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 8, 8, 25, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 8, 8, 26, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 9, 8, 8, 26, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 8, 8, 26, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 10, 8, 8, 27, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 8, 8, 27, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 8, 8, 27, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 27 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 27 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 10, 8, 12, 25 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 25 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 9, 10, 8, 25, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 9, 10, 8, 25, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 10, 10, 8, 26, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 10, 10, 8, 26, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 10, 10, 8, 26, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 11, 10, 8, 27, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 11, 10, 8, 27, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 11, 10, 8, 27, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 27 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 27 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 27 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 27 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 },
@@ -6610,133 +7021,133 @@ static const Properties uc_properties[] = {
{ 5, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 27 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 27 },
- { 14, 0, 0, 0, -1, 0, 1, 37, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 39, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 43, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 45, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 47, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 49, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 51, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 53, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 55, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 57, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 59, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 61, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 63, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 65, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 67, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 69, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 71, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 73, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 75, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 77, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 79, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 81, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 83, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 85, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 87, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 89, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 91, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 93, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 95, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 97, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 99, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 101, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 103, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 105, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 107, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 109, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 111, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 113, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 115, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 117, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 119, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 121, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 123, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 125, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 127, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 129, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 131, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 133, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 135, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 137, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 139, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 141, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 143, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 145, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 147, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 149, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 151, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 153, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 155, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 157, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 159, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 161, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 163, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 165, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 167, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 169, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 171, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 173, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 175, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 177, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 179, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 181, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 183, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 185, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 187, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 189, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 191, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 193, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 1, 195, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 7, 12, 28 },
- { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 7, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, -8, 17, 0, 0, 8, 6, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 39, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 41, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 43, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 45, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 47, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 49, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 51, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 53, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 55, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 57, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 59, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 61, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 63, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 65, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 67, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 69, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 71, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 73, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 75, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 77, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 79, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 81, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 83, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 85, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 87, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 89, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 91, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 93, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 95, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 97, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 99, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 101, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 103, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 105, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 107, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 109, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 111, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 113, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 115, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 117, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 119, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 121, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 123, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 125, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 127, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 129, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 131, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 133, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 135, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 137, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 139, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 141, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 143, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 145, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 147, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 149, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 151, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 153, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 155, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 157, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 159, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 161, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 163, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 165, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 167, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 169, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 171, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 173, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 175, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 177, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 179, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 181, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 183, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 185, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 187, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 189, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 191, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 193, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 195, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 1, 197, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 7, 12, 28 },
+ { 14, 0, 0, 0, -1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 7, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -8, 0, -8, 0, -8, 17, 0, 0, 10, 6, 12, 28 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 29 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 29 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 29 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 29 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 12, 29 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 29 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 29 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 5, 17, 30 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 30 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 30 },
{ 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 0, 30 },
{ 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 13, 1, 30 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 31 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 2 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 31 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 31 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 42 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 31 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 31 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 42 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 42 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 43 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 43 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 43 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 12, 17, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 44 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 44 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 44 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 45 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 45 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 45 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 7, 4, 4, 30, 32 },
- { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 30, 32 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 33, 32 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 33, 32 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 8, 4, 4, 33, 32 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 33, 32 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 32 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5, 32 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 30, 32 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 33, 32 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 32 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 32 },
- { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 30, 32 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 32 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 33, 32 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 32 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 11, 6, 2 },
@@ -6749,104 +7160,104 @@ static const Properties uc_properties[] = {
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 12, 6, 33 },
{ 25, 10, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 33 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 },
- { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 4, 33 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 14, 9, 11, 33 },
- { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 },
- { 17, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 12, 33 },
+ { 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 6, 4, 4, 33 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 16, 9, 11, 33 },
+ { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 33 },
+ { 17, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 33 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 12, 33 },
{ 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 33 },
- { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 33 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 47 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 47 },
+ { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 33 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 47 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 47 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 7, 4, 4, 21, 47 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 8, 4, 4, 21, 47 },
{ 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 47 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 47 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 12, 6, 47 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 47 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 30, 48 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 30, 56 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 56 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 14, 9, 11, 56 },
- { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 56 },
- { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 30, 56 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 47 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, 33, 48 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 33, 56 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 56 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 9, 11, 56 },
+ { 5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 33, 56 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 33, 56 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 32 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 55 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 55 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 55 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 8, 4, 4, 21, 55 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 55 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 55 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 30, 78 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 },
- { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 30, 78 },
- { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 78 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 78 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 33, 78 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 33, 78 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 33, 78 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 4, 4, 33, 78 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 33, 78 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 78 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 78 },
- { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 78 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 78 },
- { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 30, 78 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 78 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 33, 78 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 78 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 33, 78 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 62 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 0, 8, 8, 12, 62 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 8, 4, 4, 21, 62 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 62 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 0, 10, 8, 12, 62 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 204, 7, 4, 4, 21, 62 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 7, 4, 4, 21, 62 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 7, 4, 4, 21, 62 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 14, 9, 11, 62 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 204, 8, 4, 4, 21, 62 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 17, 8, 4, 4, 21, 62 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 8, 4, 4, 21, 62 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 16, 9, 11, 62 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 17, 62 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 62 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 62 },
@@ -6854,77 +7265,86 @@ static const Properties uc_properties[] = {
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 62 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 67 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 67 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 67 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 67 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 67 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 67 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 67 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 67 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 67 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 93 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 67 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 67 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 93 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 8, 4, 4, 21, 93 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 93 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 93 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 8, 4, 4, 21, 93 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 93 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 68 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 68 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 68 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 68 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 68 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 68 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 68 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 68 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 69 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 69 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 68 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 69 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 69 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 69 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 69 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6254, 0, -6254, 0, -6222, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6253, 0, -6253, 0, -6221, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6244, 0, -6244, 0, -6212, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6242, 0, -6242, 0, -6210, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6243, 0, -6243, 0, -6211, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6236, 0, -6236, 0, -6204, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -6181, 0, -6181, 0, -6180, 18, 0, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 199, 1, 199, 1, 711, 18, 0, 0, 10, 6, 12, 5 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 67 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 },
{ 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 1 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 2 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 21, 2 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 2 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 2 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 1 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 5 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 6, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 4 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 5 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 197, 1, 197, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 3814, 0, 3814, 0, 0, 8, 0, 0, 8, 6, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 4 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 2 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 8, 4, 4, 21, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 6, 12, 5 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 10, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 10, 6, 12, 4 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 10, 6, 12, 5 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 201, 1, 201, 0, 0, 8, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 3814, 0, 3814, 0, 0, 8, 0, 0, 10, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 10, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 10, 6, 12, 4 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 },
@@ -6932,158 +7352,162 @@ static const Properties uc_properties[] = {
{ 0, 17, 214, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 202, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 1 },
+ { 0, 17, 232, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 1 },
+ { 0, 17, 228, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 1 },
+ { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 1 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 233, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 1 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 500, 1, 500, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 503, 1, 503, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 506, 1, 506, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 509, 1, 509, 0, 0, 1, 17, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 512, 1, 512, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -59, 0, -59, 0, -58, 2, 81, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -7615, 0, 0, 0, 0, 0, -7615, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 8, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -8, 0, 0, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 515, 1, 515, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 518, 1, 518, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 522, 1, 522, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 526, 1, 526, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 564, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 567, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 570, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 573, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 576, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 579, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 582, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 585, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 564, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 567, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 570, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 573, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 576, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 579, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 582, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 585, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 588, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 591, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 594, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 597, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 600, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 603, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 606, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 609, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 588, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 591, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 594, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 597, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 600, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 603, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 606, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 609, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 612, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 615, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 618, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 621, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 624, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 627, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 630, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 633, 0, 8, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 612, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 615, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 618, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 621, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 624, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 627, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 630, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -8, 1, 633, 0, 0, 0, -8, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 648, 1, 645, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 636, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 654, 1, 651, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 530, 1, 530, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 685, 1, 681, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 85, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -9, 1, 636, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7205, 0, -7205, 0, -7173, 1, 85, 0, 8, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 506, 1, 506, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 509, 1, 509, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 512, 1, 512, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 515, 1, 515, 0, 0, 1, 17, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 518, 1, 518, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -59, 0, -59, 0, -58, 2, 81, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -7615, 0, 0, 0, 0, 0, -7615, 10, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 10, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 10, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 8, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -8, 0, 0, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 521, 1, 521, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 524, 1, 524, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 528, 1, 528, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 532, 1, 532, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 74, 0, 74, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 86, 0, 86, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 100, 0, 100, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 128, 0, 128, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 112, 0, 112, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 126, 0, 126, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 570, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 573, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 576, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 579, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 582, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 585, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 588, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 591, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 570, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 573, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 576, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 579, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 582, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 585, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 588, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 591, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 594, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 597, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 600, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 603, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 606, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 609, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 612, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 615, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 594, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 597, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 600, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 603, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 606, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 609, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 612, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 615, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 618, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 621, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 624, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 627, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 630, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 633, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 636, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 639, 0, 8, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 618, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 621, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 624, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 627, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 630, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 633, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 636, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -8, 1, 639, 0, 0, 0, -8, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 654, 1, 651, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 642, 0, 9, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 660, 1, 657, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 536, 1, 536, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 691, 1, 687, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -74, 0, 0, 0, 0, 0, -74, 1, 85, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -9, 1, 642, 0, 0, 0, -9, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7205, 0, -7205, 0, -7173, 1, 85, 0, 10, 6, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 81, 0, 0, 0, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 660, 1, 657, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 639, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 666, 1, 663, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 533, 1, 533, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 693, 1, 689, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 85, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -9, 1, 639, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 536, 1, 536, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 489, 1, 489, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 540, 1, 540, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 543, 1, 543, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 85, 0, 8, 7, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 547, 1, 547, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 493, 1, 493, 0, 0, 1, 85, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 551, 1, 551, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 554, 1, 554, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 557, 1, 557, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 85, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 1, 17, 0, 8, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 666, 1, 663, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 645, 0, 9, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 672, 1, 669, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 539, 1, 539, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 699, 1, 695, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -86, 0, 0, 0, 0, 0, -86, 1, 85, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -9, 1, 645, 0, 0, 0, -9, 1, 17, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 542, 1, 542, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 495, 1, 495, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 546, 1, 546, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 549, 1, 549, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -100, 0, 0, 0, 0, 0, -100, 1, 85, 0, 10, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 553, 1, 553, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 499, 1, 499, 0, 0, 1, 85, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 557, 1, 557, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 7, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 560, 1, 560, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 563, 1, 563, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -112, 0, 0, 0, 0, 0, -112, 1, 85, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -7, 0, 0, 0, 0, 0, -7, 1, 17, 0, 10, 7, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 672, 1, 669, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 642, 0, 9, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 678, 1, 675, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 561, 1, 561, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 701, 1, 697, 0, 0, 1, 17, 0, 8, 6, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 85, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 17, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 85, 0, 8, 7, 12, 4 },
- { 16, 0, 0, 0, -1, 0, 0, -9, 1, 642, 0, 0, 0, -9, 1, 17, 0, 8, 7, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 678, 1, 675, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 648, 0, 9, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 684, 1, 681, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 567, 1, 567, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 707, 1, 703, 0, 0, 1, 17, 0, 10, 6, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -128, 0, 0, 0, 0, 0, -128, 1, 85, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 17, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 0, -126, 0, 0, 0, 0, 0, -126, 1, 85, 0, 10, 7, 12, 4 },
+ { 16, 0, 0, 0, -1, 0, 0, -9, 1, 648, 0, 0, 0, -9, 1, 17, 0, 10, 7, 12, 4 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 0, 18, 4 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 5, 17, 2 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 17, 2 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 5, 4, 2 },
{ 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0, 4, 20, 2 },
{ 10, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
- { 10, 18, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
- { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
- { 10, 1, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
+ { 10, 18, 0, 1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 5, 5, 4, 32, 1 },
+ { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
+ { 10, 1, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 4, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 17, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 19, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
- { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 },
- { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 11, 13, 3, 2 },
+ { 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 13, 3, 2 },
+ { 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 13, 3, 2 },
{ 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 0, 2 },
{ 23, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
{ 24, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 15, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 10, 15, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 15, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0, 17, 2 },
- { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 },
- { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 35, 2 },
- { 10, 11, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
- { 10, 14, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
- { 10, 16, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
- { 10, 12, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
- { 10, 15, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
- { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 5, 4, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 14, 0, 17, 2 },
+ { 7, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 38, 2 },
+ { 8, 7, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 3, 3, 38, 2 },
+ { 10, 11, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
+ { 10, 14, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
+ { 10, 16, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
+ { 10, 12, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
+ { 10, 15, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
+ { 6, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 17, 5, 4, 2 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 10, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 },
@@ -7091,7 +7515,7 @@ static const Properties uc_properties[] = {
{ 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 5, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 5, 2 },
- { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 13, 0, 8, 2 },
+ { 26, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 15, 0, 8, 2 },
{ 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 12, 5, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 12, 5, 2 },
@@ -7099,22 +7523,22 @@ static const Properties uc_properties[] = {
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 },
- { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 15, 0, 12, 2 },
+ { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 17, 0, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 },
{ 6, 9, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 5, 17, 2 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 22, 2 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 4, 4, 12, 2 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 4, 4, 12, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 6, 4, 22, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 6, 4, 12, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 6, 4, 12, 2 },
{ 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 12, 0 },
- { 10, 19, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 },
- { 10, 20, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 },
- { 10, 21, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 },
- { 10, 22, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 4, 4, 21, 2 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 21, 2 },
+ { 10, 19, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 6, 4, 21, 2 },
+ { 10, 20, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 6, 4, 21, 2 },
+ { 10, 21, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 6, 4, 21, 2 },
+ { 10, 22, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 3, 6, 4, 21, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 21, 2 },
{ 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 10, 6, 12, 3 },
{ 5, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
@@ -7125,7 +7549,7 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 10, 6, 12, 3 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 9, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 9, 2 },
@@ -7139,6 +7563,7 @@ static const Properties uc_properties[] = {
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 10, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 9, 2 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 10, 2 },
+ { 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 9, 2 },
{ 13, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, 4, 21, 1 },
@@ -7147,33 +7572,33 @@ static const Properties uc_properties[] = {
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 1 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 7, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 7, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 6, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 6, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 9, 2 },
- { 14, 0, 0, 0, -1, 0, 0, -7517, 0, 0, 0, 0, 0, -7517, 1, 85, 0, 8, 7, 12, 4 },
- { 14, 0, 0, 0, -1, 0, 1, 199, 0, 0, 0, 0, 1, 199, 1, 85, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 201, 0, 0, 0, 0, 1, 201, 1, 85, 0, 8, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -7517, 0, 0, 0, 0, 0, -7517, 1, 85, 0, 10, 7, 12, 4 },
+ { 14, 0, 0, 0, -1, 0, 1, 203, 0, 0, 0, 0, 1, 203, 1, 85, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 205, 0, 0, 0, 0, 1, 205, 1, 85, 0, 10, 7, 12, 3 },
{ 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 28, 0, 0, 0, 0, 0, 28, 1, 0, 0, 8, 7, 12, 3 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 8, 6, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 28, 0, 0, 0, 0, 0, 28, 1, 0, 0, 10, 7, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 8, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 10, 6, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 6, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 6, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 7, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 10, 6, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 10, 6, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 10, 7, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -28, 0, -28, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -28, 0, -28, 0, 0, 9, 0, 0, 10, 6, 12, 3 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 },
- { 4, 0, 0, 0, -1, 0, 0, 16, 0, 0, 0, 0, 0, 16, 1, 80, 0, 8, 7, 12, 3 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, -16, 0, -16, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 12, 3 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 },
+ { 4, 0, 0, 0, -1, 0, 0, 16, 0, 0, 0, 0, 0, 16, 1, 80, 0, 10, 7, 12, 3 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, -16, 0, -16, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 12, 3 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 3 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 12, 2 },
@@ -7208,6 +7633,8 @@ static const Properties uc_properties[] = {
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
@@ -7219,8 +7646,8 @@ static const Properties uc_properties[] = {
{ 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 26, 0, 0, 0, 0, 0, 26, 1, 80, 0, 8, 7, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, -26, 0, -26, 0, 0, 1, 80, 0, 8, 6, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 26, 0, 0, 0, 0, 0, 26, 1, 80, 0, 10, 7, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, -26, 0, -26, 0, 0, 1, 80, 0, 10, 6, 12, 2 },
{ 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
@@ -7235,11 +7662,17 @@ static const Properties uc_properties[] = {
{ 5, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 14, 18, 0, 30, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 20, 0, 12, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 16, 20, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 14, 18, 0, 30, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 20, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 14, 18, 0, 30, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 13, 3, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 13, 3, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 2 },
@@ -7281,38 +7714,38 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, -2104, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, -2106, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, -2108, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 8, 0, 0, 8, 7, 12, 57 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 8, 0, 0, 8, 6, 12, 57 },
- { 14, 0, 0, 0, -1, 0, 1, 203, 0, 0, 0, 0, 1, 203, 9, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, -3814, 0, 0, 0, 0, 0, -3814, 9, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 205, 0, 0, 0, 0, 1, 205, 9, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 207, 1, 207, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 209, 1, 209, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 211, 0, 0, 0, 0, 1, 211, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 213, 0, 0, 0, 0, 1, 213, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 215, 0, 0, 0, 0, 1, 215, 10, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 217, 0, 0, 0, 0, 1, 217, 11, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 6, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 219, 0, 0, 0, 0, 1, 219, 11, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 221, 0, 0, 0, 0, 1, 221, 11, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 8, 7, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 8, 6, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 6, 12, 46 },
+ { 14, 0, 0, 0, -1, 0, 0, 48, 0, 0, 0, 0, 0, 48, 8, 0, 0, 10, 7, 12, 57 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -48, 0, -48, 0, 0, 8, 0, 0, 10, 6, 12, 57 },
+ { 14, 0, 0, 0, -1, 0, 1, 207, 0, 0, 0, 0, 1, 207, 9, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, -3814, 0, 0, 0, 0, 0, -3814, 9, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 209, 0, 0, 0, 0, 1, 209, 9, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 211, 1, 211, 0, 0, 9, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 213, 1, 213, 0, 0, 9, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 215, 0, 0, 0, 0, 1, 215, 10, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 217, 0, 0, 0, 0, 1, 217, 10, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 219, 0, 0, 0, 0, 1, 219, 10, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 221, 0, 0, 0, 0, 1, 221, 11, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 6, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 80, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 223, 0, 0, 0, 0, 1, 223, 11, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 225, 0, 0, 0, 0, 1, 225, 11, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 8, 0, 0, 10, 7, 12, 46 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 8, 0, 0, 10, 6, 12, 46 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 6, 12, 46 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 8, 7, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 8, 6, 12, 46 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 11, 0, 0, 10, 7, 12, 46 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 11, 0, 0, 10, 6, 12, 46 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 46 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 8, 6, 12, 46 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 10, 7, 12, 46 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 10, 6, 12, 46 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 46 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 46 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 46 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 8, 0, 0, 8, 6, 12, 25 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 13, 0, 0, 8, 6, 12, 25 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 58 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 58 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 8, 8, 12, 58 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 8, 0, 0, 10, 6, 12, 25 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -7264, 0, -7264, 0, 0, 13, 0, 0, 10, 6, 12, 25 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 58 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 58 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 10, 8, 12, 58 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 17, 58 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 58 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 13, 3, 2 },
@@ -7326,7 +7759,7 @@ static const Properties uc_properties[] = {
{ 23, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 },
{ 24, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 13, 3, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 2 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 2 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 2 },
@@ -7336,13 +7769,15 @@ static const Properties uc_properties[] = {
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 2 },
{ 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 0, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 17, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 17, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 37 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 0, 14, 37 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 11, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 37 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 5, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 2 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 },
@@ -7352,40 +7787,41 @@ static const Properties uc_properties[] = {
{ 0, 17, 222, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 1 },
{ 1, 0, 224, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 26 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 21, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 21, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 80, 0, 0, 8, 14, 37 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 37 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 5, 37 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 5, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 2 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 34 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 14, 34 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 5, 34 },
{ 0, 17, 8, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 204, 4, 4, 4, 21, 1 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 5, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 0, 5, 2 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 5, 34 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 5, 34 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 8, 14, 34 },
- { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 0, 5, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 14, 35 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 14, 35 },
+ { 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 0, 5, 2 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 35 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 35 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 14, 35 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 6, 8, 5, 35 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 6, 8, 5, 35 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 6, 8, 14, 35 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 14, 36 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 14, 36 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 14, 26 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 8, 8, 5, 35 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 8, 8, 5, 35 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 8, 8, 14, 35 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 8, 14, 36 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 14, 36 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 14, 36 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 8, 14, 26 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 14, 2 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 36 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 14, 36 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 6, 8, 5, 35 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 14, 36 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 14, 36 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 5, 35 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 26 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 26 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 2 },
@@ -7393,7 +7829,7 @@ static const Properties uc_properties[] = {
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 0, 14, 2 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 14, 26 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 0, 14, 35 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 0, 14, 35 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 8, 14, 37 },
{ 13, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 8, 14, 37 },
@@ -7402,333 +7838,336 @@ static const Properties uc_properties[] = {
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 8, 14, 37 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 14, 38 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 8, 5, 38 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 8, 14, 37 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 14, 38 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 10, 8, 5, 38 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 14, 38 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14, 38 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 83 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 83 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 83 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 83 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 83 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 70 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 70 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 70 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 70 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 6, 70 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 70 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 70 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 70 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 5 },
{ 2, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 5 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 5 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 5 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 5 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 5 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 5 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 10, 6, 12, 5 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 5 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 84 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 84 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 84 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 84 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 84 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 84 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 84 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 2 },
- { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 2 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 223, 0, 0, 0, 0, 1, 223, 10, 0, 0, 8, 7, 12, 3 },
- { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 1, 225, 0, 0, 0, 0, 1, 225, 12, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 6, 12, 3 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 8, 6, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 227, 0, 0, 0, 0, 1, 227, 13, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 229, 0, 0, 0, 0, 1, 229, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 231, 0, 0, 0, 0, 1, 231, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 233, 0, 0, 0, 0, 1, 233, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 235, 0, 0, 0, 0, 1, 235, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 237, 0, 0, 0, 0, 1, 237, 16, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 1, 239, 0, 0, 0, 0, 1, 239, 17, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 928, 0, 0, 0, 0, 0, 928, 17, 0, 0, 8, 7, 12, 3 },
- { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 17, 0, 0, 8, 7, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 17, 0, 0, 8, 6, 12, 3 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 3 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 6, 12, 3 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 3 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 59 },
+ { 17, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 0, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 227, 0, 0, 0, 0, 1, 227, 10, 0, 0, 10, 7, 12, 3 },
+ { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 0, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 1, 229, 0, 0, 0, 0, 1, 229, 12, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 6, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 12, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 13, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 13, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 16, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 16, 0, 0, 10, 6, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 231, 0, 0, 0, 0, 1, 231, 13, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 233, 0, 0, 0, 0, 1, 233, 16, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 235, 0, 0, 0, 0, 1, 235, 16, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 237, 0, 0, 0, 0, 1, 237, 16, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 239, 0, 0, 0, 0, 1, 239, 18, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 241, 0, 0, 0, 0, 1, 241, 16, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 243, 0, 0, 0, 0, 1, 243, 16, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 1, 245, 0, 0, 0, 0, 1, 245, 17, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 928, 0, 0, 0, 0, 0, 928, 17, 0, 0, 10, 7, 12, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 17, 0, 0, 10, 7, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 17, 0, 0, 10, 6, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 3 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 10, 6, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 3 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 59 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 59 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 7, 4, 4, 21, 59 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 8, 4, 4, 21, 59 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 59 },
{ 29, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 2 },
- { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 },
- { 18, 0, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 65 },
+ { 18, 0, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 65 },
+ { 18, 0, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 65 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 65 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 18, 65 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 12, 6, 65 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 71 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 71 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 71 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 71 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 71 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 71 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 71 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 71 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 71 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 11 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 11 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 11 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 11 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 72 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 72 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 11 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 72 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 72 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 72 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 17, 2 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 72 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 73 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 73 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 73 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 73 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 73 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 73 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 73 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 85 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 21, 85 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 85 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 85 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 85 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 21, 85 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 85 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 85 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 85 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 2 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 85 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 30, 24 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 30, 24 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 30, 24 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 24 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 77 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 2 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 85 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 33, 24 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 33, 24 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 8, 33, 24 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 24 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 77 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 4, 4, 4, 21, 77 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 7, 4, 4, 21, 77 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 14, 9, 11, 77 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 8, 4, 4, 21, 77 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 16, 9, 11, 77 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 77 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 12, 17, 77 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 24 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 24 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 4, 30, 24 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 },
- { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 },
- { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 30, 79 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 30, 79 },
- { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 30, 79 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 86 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 24 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 24 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 33, 24 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 4, 33, 24 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 79 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 33, 79 },
+ { 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 33, 79 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 8, 33, 79 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 33, 79 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 86 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 86 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 86 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 86 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 86 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 86 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 27 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -928, 0, -928, 0, 0, 16, 0, 0, 8, 6, 12, 3 },
- { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 6, 12, 4 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 241, 1, 241, 1, 241, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 243, 1, 243, 1, 243, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 245, 1, 245, 1, 245, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 247, 1, 247, 1, 247, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 249, 1, 249, 1, 249, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 251, 1, 251, 1, 251, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 253, 1, 253, 1, 253, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 255, 1, 255, 1, 255, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 257, 1, 257, 1, 257, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 259, 1, 259, 1, 259, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 261, 1, 261, 1, 261, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 263, 1, 263, 1, 263, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 265, 1, 265, 1, 265, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 267, 1, 267, 1, 267, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 269, 1, 269, 1, 269, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 271, 1, 271, 1, 271, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 273, 1, 273, 1, 273, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 275, 1, 275, 1, 275, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 277, 1, 277, 1, 277, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 279, 1, 279, 1, 279, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 281, 1, 281, 1, 281, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 283, 1, 283, 1, 283, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 285, 1, 285, 1, 285, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 287, 1, 287, 1, 287, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 289, 1, 289, 1, 289, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 291, 1, 291, 1, 291, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 293, 1, 293, 1, 293, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 295, 1, 295, 1, 295, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 297, 1, 297, 1, 297, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 299, 1, 299, 1, 299, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 301, 1, 301, 1, 301, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 303, 1, 303, 1, 303, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 305, 1, 305, 1, 305, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 307, 1, 307, 1, 307, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 309, 1, 309, 1, 309, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 311, 1, 311, 1, 311, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 313, 1, 313, 1, 313, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 315, 1, 315, 1, 315, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 317, 1, 317, 1, 317, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 319, 1, 319, 1, 319, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 321, 1, 321, 1, 321, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 323, 1, 323, 1, 323, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 325, 1, 325, 1, 325, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 327, 1, 327, 1, 327, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 329, 1, 329, 1, 329, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 331, 1, 331, 1, 331, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 333, 1, 333, 1, 333, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 335, 1, 335, 1, 335, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 337, 1, 337, 1, 337, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 339, 1, 339, 1, 339, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 341, 1, 341, 1, 341, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 343, 1, 343, 1, 343, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 345, 1, 345, 1, 345, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 347, 1, 347, 1, 347, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 349, 1, 349, 1, 349, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 351, 1, 351, 1, 351, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 353, 1, 353, 1, 353, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 355, 1, 355, 1, 355, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 357, 1, 357, 1, 357, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 359, 1, 359, 1, 359, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 361, 1, 361, 1, 361, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 363, 1, 363, 1, 363, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 365, 1, 365, 1, 365, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 367, 1, 367, 1, 367, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 369, 1, 369, 1, 369, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 371, 1, 371, 1, 371, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 373, 1, 373, 1, 373, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 375, 1, 375, 1, 375, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 377, 1, 377, 1, 377, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 379, 1, 379, 1, 379, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 381, 1, 381, 1, 381, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 383, 1, 383, 1, 383, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 385, 1, 385, 1, 385, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 387, 1, 387, 1, 387, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 389, 1, 389, 1, 389, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 391, 1, 391, 1, 391, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 393, 1, 393, 1, 393, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 395, 1, 395, 1, 395, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 397, 1, 397, 1, 397, 17, 0, 0, 8, 6, 12, 28 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 399, 1, 399, 1, 399, 17, 0, 0, 8, 6, 12, 28 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 86 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 86 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 27 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -928, 0, -928, 0, 0, 16, 0, 0, 10, 6, 12, 3 },
+ { 28, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 0, 12, 2 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 6, 12, 4 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 247, 1, 247, 1, 247, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 249, 1, 249, 1, 249, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 251, 1, 251, 1, 251, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 253, 1, 253, 1, 253, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 255, 1, 255, 1, 255, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 257, 1, 257, 1, 257, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 259, 1, 259, 1, 259, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 261, 1, 261, 1, 261, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 263, 1, 263, 1, 263, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 265, 1, 265, 1, 265, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 267, 1, 267, 1, 267, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 269, 1, 269, 1, 269, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 271, 1, 271, 1, 271, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 273, 1, 273, 1, 273, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 275, 1, 275, 1, 275, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 277, 1, 277, 1, 277, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 279, 1, 279, 1, 279, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 281, 1, 281, 1, 281, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 283, 1, 283, 1, 283, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 285, 1, 285, 1, 285, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 287, 1, 287, 1, 287, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 289, 1, 289, 1, 289, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 291, 1, 291, 1, 291, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 293, 1, 293, 1, 293, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 295, 1, 295, 1, 295, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 297, 1, 297, 1, 297, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 299, 1, 299, 1, 299, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 301, 1, 301, 1, 301, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 303, 1, 303, 1, 303, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 305, 1, 305, 1, 305, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 307, 1, 307, 1, 307, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 309, 1, 309, 1, 309, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 311, 1, 311, 1, 311, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 313, 1, 313, 1, 313, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 315, 1, 315, 1, 315, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 317, 1, 317, 1, 317, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 319, 1, 319, 1, 319, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 321, 1, 321, 1, 321, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 323, 1, 323, 1, 323, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 325, 1, 325, 1, 325, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 327, 1, 327, 1, 327, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 329, 1, 329, 1, 329, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 331, 1, 331, 1, 331, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 333, 1, 333, 1, 333, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 335, 1, 335, 1, 335, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 337, 1, 337, 1, 337, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 339, 1, 339, 1, 339, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 341, 1, 341, 1, 341, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 343, 1, 343, 1, 343, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 345, 1, 345, 1, 345, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 347, 1, 347, 1, 347, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 349, 1, 349, 1, 349, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 351, 1, 351, 1, 351, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 353, 1, 353, 1, 353, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 355, 1, 355, 1, 355, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 357, 1, 357, 1, 357, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 359, 1, 359, 1, 359, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 361, 1, 361, 1, 361, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 363, 1, 363, 1, 363, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 365, 1, 365, 1, 365, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 367, 1, 367, 1, 367, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 369, 1, 369, 1, 369, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 371, 1, 371, 1, 371, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 373, 1, 373, 1, 373, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 375, 1, 375, 1, 375, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 377, 1, 377, 1, 377, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 379, 1, 379, 1, 379, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 381, 1, 381, 1, 381, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 383, 1, 383, 1, 383, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 385, 1, 385, 1, 385, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 387, 1, 387, 1, 387, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 389, 1, 389, 1, 389, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 391, 1, 391, 1, 391, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 393, 1, 393, 1, 393, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 395, 1, 395, 1, 395, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 397, 1, 397, 1, 397, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 399, 1, 399, 1, 399, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 401, 1, 401, 1, 401, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 403, 1, 403, 1, 403, 17, 0, 0, 10, 6, 12, 28 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 405, 1, 405, 1, 405, 17, 0, 0, 10, 6, 12, 28 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 86 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 21, 86 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 86 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 86 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 14, 9, 11, 86 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 11, 8, 8, 23, 26 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 12, 8, 8, 24, 26 },
- { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 31, 0 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 16, 9, 11, 86 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 12, 10, 8, 23, 26 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 17, 13, 10, 8, 24, 26 },
+ { 11, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 34, 0 },
{ 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 85, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 85, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 85, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 85, 0, 0, 8, 14, 37 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 413, 1, 410, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 419, 1, 416, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 425, 1, 422, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 432, 1, 428, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 440, 1, 436, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 447, 1, 444, 0, 0, 1, 80, 0, 8, 6, 12, 3 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 459, 1, 456, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 465, 1, 462, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 471, 1, 468, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 477, 1, 474, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 1, 483, 1, 480, 0, 0, 1, 80, 0, 8, 6, 12, 6 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 7, 8, 13, 7 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 419, 1, 416, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 425, 1, 422, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 431, 1, 428, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 438, 1, 434, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 446, 1, 442, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 453, 1, 450, 0, 0, 1, 80, 0, 10, 6, 12, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 465, 1, 462, 0, 0, 1, 80, 0, 10, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 471, 1, 468, 0, 0, 1, 80, 0, 10, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 477, 1, 474, 0, 0, 1, 80, 0, 10, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 483, 1, 480, 0, 0, 1, 80, 0, 10, 6, 12, 6 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 1, 489, 1, 486, 0, 0, 1, 80, 0, 10, 6, 12, 6 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 85, 0, 9, 8, 13, 7 },
{ 0, 17, 26, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 4, 4, 21, 7 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 7, 8, 13, 7 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 7, 8, 13, 7 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 85, 0, 9, 8, 13, 7 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 9, 8, 13, 7 },
{ 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 12, 7 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 8 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 10, 8, 12, 8 },
{ 28, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 8 },
{ 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 0 },
{ 27, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 0, 10, 8 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 4, 4, 4, 21, 1 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 11, 8, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 15, 11, 8, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 11, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 1, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 12, 11, 8, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 13, 0, 8, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 14, 11, 8, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 15, 0, 8, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 6, 2 },
{ 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 13, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 80, 0, 0, 0, 15, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 20, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 },
- { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 0, 14, 2 },
+ { 19, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 17, 0, 14, 2 },
{ 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 },
{ 21, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 0, 13, 1, 2 },
- { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 11, 1, 2 },
+ { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 11, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 14, 2 },
- { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 10, 1, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 0, 5, 2 },
- { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 12, 11, 5, 2 },
+ { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 10, 1, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 15, 0, 5, 2 },
+ { 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 14, 11, 5, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 6, 2 },
{ 25, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 26, 3, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
@@ -7736,9 +8175,9 @@ static const Properties uc_properties[] = {
{ 26, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 26, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 8, 12, 8 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 4, 4, 22, 2 },
- { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 11, 0, 14, 2 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 10, 8, 12, 8 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 6, 4, 22, 2 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 13, 0, 14, 2 },
{ 25, 6, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
@@ -7752,91 +8191,94 @@ static const Properties uc_properties[] = {
{ 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 26, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
{ 26, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 80, 0, 8, 7, 14, 3 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 1, 80, 0, 10, 7, 14, 3 },
{ 21, 10, 0, 0, -1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, -2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 13, 1, 2 },
{ 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 14, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 80, 0, 8, 6, 14, 3 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 1, 80, 0, 10, 6, 14, 3 },
{ 21, 10, 0, 0, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 0, 2 },
{ 22, 10, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 80, 0, 0, 13, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 12, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 11, 1, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 5, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 12, 35 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 35 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 6, 8, 5, 2 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 14, 35 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 5, 35 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 5, 2 },
{ 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 4, 4, 4, 5, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 8, 8, 12, 26 },
{ 27, 4, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 80, 0, 0, 0, 10, 2 },
- { 10, 10, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 4, 4, 21, 2 },
+ { 10, 10, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 3, 6, 4, 21, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 29, 2 },
{ 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 49 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 49 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 2 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 12, 2 },
- { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 4 },
+ { 4, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 4 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 4 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 4 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 4 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 74 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 75 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 4 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 74 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 75 },
{ 5, 2, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 39 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 39 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 10, 8, 12, 39 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 39 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 39 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 8, 8, 12, 40 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 120 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 39 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 10, 8, 12, 40 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 10, 8, 12, 40 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 120 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 120 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 50 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 50 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 17, 50 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 60 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 60 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 60 },
- { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 5, 0, 0, 8, 7, 12, 41 },
- { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 7, 0, 0, 8, 7, 12, 41 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 5, 0, 0, 8, 6, 12, 41 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 7, 0, 0, 8, 6, 12, 41 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 51 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 52 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 14, 9, 11, 52 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 106 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 103 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 60 },
+ { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 5, 0, 0, 10, 7, 12, 41 },
+ { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 7, 0, 0, 10, 7, 12, 41 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 5, 0, 0, 10, 6, 12, 41 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 7, 0, 0, 10, 6, 12, 41 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 51 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 52 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 9, 11, 52 },
+ { 14, 0, 0, 0, -1, 0, 0, 40, 0, 0, 0, 0, 0, 40, 18, 0, 0, 10, 7, 12, 136 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -40, 0, -40, 0, 0, 18, 0, 0, 10, 6, 12, 136 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 106 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 103 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 103 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 110 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 8, 8, 12, 53 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 87 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 110 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 10, 8, 12, 53 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 87 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 87 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 87 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 118 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 118 },
{ 29, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 118 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 117 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 117 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 117 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 128 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 128 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 128 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 64 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 64 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 64 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 64 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 64 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 8, 8, 12, 76 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 10, 8, 12, 76 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 12, 76 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 98 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 97 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 98 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 97 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 97 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 8, 8, 12, 61 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 10, 8, 12, 61 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 61 },
@@ -7850,37 +8292,37 @@ static const Properties uc_properties[] = {
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 17, 61 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 12, 17, 61 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 12, 61 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 88 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 88 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 88 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 116 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 116 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 116 },
- { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 },
- { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 },
+ { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 112 },
+ { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 112 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 112 },
{ 29, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 },
- { 18, 1, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 112 },
+ { 18, 1, 0, 4, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 112 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 112 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 112 },
{ 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 },
{ 5, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 112 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 112 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 15, 112 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 80 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 80 },
{ 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 17, 80 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 89 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 89 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 89 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 90 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 90 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 90 },
- { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 121 },
- { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 121 },
+ { 18, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 121 },
+ { 18, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 121 },
{ 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 },
{ 5, 1, 0, 3, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 },
{ 5, 1, 0, 2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 121 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 91 },
- { 14, 1, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 17, 0, 0, 8, 7, 12, 130 },
- { 15, 1, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 17, 0, 0, 8, 6, 12, 130 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 91 },
+ { 14, 1, 0, 0, -1, 0, 0, 64, 0, 0, 0, 0, 0, 64, 17, 0, 0, 10, 7, 12, 130 },
+ { 15, 1, 0, 0, -1, 0, 0, 0, 0, -64, 0, -64, 0, 0, 17, 0, 0, 10, 6, 12, 130 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 130 },
{ 5, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
{ 5, 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
@@ -7892,9 +8334,9 @@ static const Properties uc_properties[] = {
{ 5, 5, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
{ 5, 5, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
{ 5, 5, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 8 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 7, 4, 4, 21, 94 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 8, 4, 4, 21, 94 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 94 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 94 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 4, 4, 4, 21, 94 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 12, 17, 94 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 },
@@ -7908,64 +8350,65 @@ static const Properties uc_properties[] = {
{ 5, 10, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 },
{ 5, 10, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 94 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 14, 9, 11, 94 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 16, 9, 11, 94 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 94 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 4, 4, 21, 92 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 92 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 0, 8, 8, 12, 92 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 8, 4, 4, 21, 92 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 92 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 17, 0, 10, 8, 12, 92 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 4, 4, 4, 21, 92 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 204, 4, 4, 4, 21, 92 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 12, 92 },
- { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 3, 4, 4, 12, 92 },
+ { 10, 0, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 7, 6, 4, 12, 92 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 12, 17, 92 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 101 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 101 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 101 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 101 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 96 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 96 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 204, 4, 4, 4, 21, 96 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 96 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 96 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 17, 4, 4, 4, 21, 96 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 96 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 96 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 96 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 96 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 96 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 111 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 111 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 111 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 111 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 18, 111 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 100 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 100 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 100 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 100 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 100 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 100 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 10, 8, 12, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 12, 17, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 17, 100 },
@@ -7973,80 +8416,99 @@ static const Properties uc_properties[] = {
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 100 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 12, 100 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 100 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 100 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 100 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 18, 100 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 100 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 100 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 100 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 20 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 109 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 109 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 109 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 109 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 109 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 109 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 109 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 109 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 129 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 109 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 129 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 129 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 123 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 123 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 123 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 123 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 123 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 123 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 123 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 107 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 107 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 107 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 107 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 107 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 107 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 107 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 107 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 8, 4, 4, 21, 107 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 107 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 107 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 107 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 124 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 135 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 8, 4, 4, 21, 135 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 135 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 135 },
+ { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 135 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 12, 17, 135 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 17, 135 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 135 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 135 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 124 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 124 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 124 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 124 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 124 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 8, 4, 4, 21, 124 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 124 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 124 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 124 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 122 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 124 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 122 },
{ 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 204, 4, 4, 4, 21, 122 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 122 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 122 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 7, 4, 4, 21, 122 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 8, 4, 4, 21, 122 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 122 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 18, 122 },
@@ -8054,168 +8516,244 @@ static const Properties uc_properties[] = {
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 6, 122 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 122 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 122 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 122 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 122 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 122 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 114 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 7, 4, 4, 21, 114 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 114 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 4, 4, 21, 114 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 },
{ 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 114 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 114 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 114 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 114 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 102 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 114 },
+ { 25, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 18, 33 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 102 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 },
- { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 102 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 102 },
+ { 1, 0, 9, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 102 },
{ 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 102 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 14, 9, 11, 102 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 8, 30, 126 },
- { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 30, 126 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 7, 4, 4, 30, 126 },
- { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 30, 126 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 14, 9, 11, 126 },
- { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 30, 126 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 16, 9, 11, 102 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 8, 33, 126 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 33, 126 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 8, 4, 4, 33, 126 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 33, 126 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 16, 9, 11, 126 },
+ { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 33, 126 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 126 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 30, 126 },
- { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 16, 0, 0, 8, 7, 12, 125 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 16, 0, 0, 8, 6, 12, 125 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 125 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 33, 126 },
+ { 14, 0, 0, 0, -1, 0, 0, 32, 0, 0, 0, 0, 0, 32, 16, 0, 0, 10, 7, 12, 125 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, -32, 0, -32, 0, 0, 16, 0, 0, 10, 6, 12, 125 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 125 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 125 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 125 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 119 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 63 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 8, 8, 12, 63 },
- { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 63 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 125 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 141 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 141 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 8, 4, 4, 21, 141 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 141 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 7, 10, 8, 12, 141 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 18, 141 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 12, 141 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 17, 141 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 12, 17, 141 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 140 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 140 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 8, 4, 4, 21, 140 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 7, 10, 8, 12, 140 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 140 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 17, 140 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 12, 17, 140 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 18, 140 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 119 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 133 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 8, 4, 4, 21, 133 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 133 },
+ { 0, 0, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 133 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 12, 17, 133 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 17, 133 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 133 },
+ { 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 133 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 18, 134 },
+ { 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 6, 134 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 12, 134 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 134 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 8, 4, 4, 21, 134 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 12, 138 },
+ { 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 138 },
+ { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 138 },
+ { 0, 17, 9, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 4, 4, 4, 21, 138 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 7, 10, 8, 12, 138 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 16, 9, 11, 138 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 63 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 63 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 63 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 10, 8, 12, 63 },
+ { 4, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 63 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 17, 63 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 63 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 12, 81 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 0, 81 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 8, 1, 81 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 12, 127 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 0, 127 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 8, 8, 1, 127 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 12, 84 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 115 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 115 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 12, 81 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 0, 81 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 8, 1, 81 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 12, 127 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 0, 127 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 10, 8, 1, 127 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 8, 12, 84 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 115 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 115 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 115 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 104 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 104 },
{ 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 104 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 104 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 108 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 108 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 108 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 108 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 108 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 108 },
- { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
- { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 14, 9, 11, 108 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 108 },
+ { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
+ { 3, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 16, 9, 11, 108 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 108 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 },
- { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 7, 4, 4, 21, 99 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 99 },
+ { 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 8, 4, 4, 21, 99 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 4, 4, 21, 99 },
- { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 8, 8, 12, 99 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 6, 8, 14, 35 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 10, 8, 12, 99 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 10, 8, 5, 137 },
+ { 17, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 10, 8, 5, 139 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 8, 14, 137 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 8, 14, 35 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 34 },
- { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 105 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 8, 14, 34 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 8, 14, 139 },
+ { 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 105 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 105 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 105 },
{ 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 105 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 12, 17, 105 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 4, 4, 21, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 3, 6, 4, 21, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 0, 12, 2 },
{ 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 2 },
- { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 },
+ { 1, 0, 216, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 4, 4, 21, 2 },
{ 0, 17, 1, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 },
- { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 7, 4, 4, 21, 2 },
- { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 4, 4, 21, 2 },
+ { 1, 0, 226, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 8, 4, 4, 21, 2 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 3, 6, 4, 21, 2 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 1 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 2 },
{ 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 4, 4, 4, 21, 4 },
{ 5, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 7, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 8, 6, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 8, 6, 12, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 10, 7, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 10, 6, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 80, 0, 10, 6, 12, 2 },
{ 26, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 0, 0, 12, 2 },
- { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 7, 12, 2 },
- { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 8, 6, 12, 2 },
- { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
- { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 14, 9, 11, 2 },
+ { 14, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 10, 7, 12, 2 },
+ { 15, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 80, 0, 10, 6, 12, 2 },
+ { 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
+ { 3, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 80, 0, 16, 9, 11, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 131 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 4, 4, 4, 21, 131 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 17, 131 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 12, 17, 131 },
{ 25, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 131 },
- { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8, 8, 12, 113 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 57 },
+ { 18, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 10, 8, 12, 113 },
{ 5, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 113 },
{ 0, 17, 220, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 4, 4, 4, 21, 113 },
- { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 8, 8, 12, 8 },
+ { 14, 1, 0, 2, -1, 0, 0, 34, 0, 0, 0, 0, 0, 34, 18, 0, 0, 10, 7, 12, 132 },
+ { 15, 1, 0, 2, -1, 0, 0, 0, 0, -34, 0, -34, 0, 0, 18, 0, 0, 10, 6, 12, 132 },
+ { 0, 17, 230, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 132 },
+ { 0, 17, 7, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 4, 4, 4, 21, 132 },
+ { 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 3, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 16, 9, 11, 132 },
+ { 25, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 132 },
+ { 18, 13, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 10, 8, 12, 8 },
{ 26, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 8 },
{ 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 },
{ 5, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 },
@@ -8229,26 +8767,38 @@ static const Properties uc_properties[] = {
{ 5, 2, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 },
{ 5, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 8, 7, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 8, 7, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 10, 7, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 10, 7, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 8, 7, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 8, 7, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 10, 7, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 10, 7, 12, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 80, 0, 0, 0, 12, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 12, 2 },
- { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 5, 5, 0, 28, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 12, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 6, 7, 0, 28, 2 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 80, 0, 0, 0, 14, 34 },
{ 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 80, 0, 0, 0, 14, 2 },
+ { 29, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 80, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 16, 20, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 14, 2 },
- { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 12, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 14, 18, 0, 30, 2 },
+ { 28, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 15, 19, 0, 31, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 17, 21, 0, 30, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 12, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 14, 18, 0, 30, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 14, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 16, 20, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 14, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 13, 3, 2 },
{ 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 5, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 14, 18, 0, 30, 2 },
+ { 29, 10, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 14, 18, 0, 30, 2 },
{ 13, 18, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 8, 14, 37 },
{ 18, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 85, 0, 0, 8, 14, 37 },
+ { 10, 18, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 4, 4, 4, 21, 2 },
{ 0, 17, 0, 5, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 4, 4, 4, 21, 1 },
{ 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 }
};
@@ -8307,6 +8857,7 @@ static const unsigned short specialCaseMap[] = {
0x1, 0xa7ac,
0x1, 0xa78d,
0x1, 0xa7aa,
+ 0x1, 0xa7ae,
0x1, 0x2c62,
0x1, 0xa7ad,
0x1, 0x2c6e,
@@ -8394,6 +8945,7 @@ static const unsigned short specialCaseMap[] = {
0x1, 0xabbd,
0x1, 0xabbe,
0x1, 0xabbf,
+ 0x1, 0xa64a,
0x1, 0xa77d,
0x1, 0x6b,
0x1, 0xe5,
@@ -8413,6 +8965,7 @@ static const unsigned short specialCaseMap[] = {
0x1, 0x25c,
0x1, 0x261,
0x1, 0x26c,
+ 0x1, 0x26a,
0x1, 0x29e,
0x1, 0x287,
0x1, 0x29d,
@@ -8590,7 +9143,8 @@ static const unsigned short specialCaseMap[] = {
0x3, 0x397, 0x342, 0x345,
0x3, 0x397, 0x342, 0x399,
0x3, 0x3a9, 0x342, 0x345,
- 0x3, 0x3a9, 0x342, 0x399
+ 0x3, 0x3a9, 0x342, 0x399,
+ 0x1, 0xa64b
};
@@ -10282,10 +10836,10 @@ static const unsigned short uc_decomposition_trie[] = {
0x3344, 0x3346, 0x3348, 0x334a, 0x334c, 0x334e, 0x3350, 0x3352,
0x3354, 0x3356, 0x3358, 0x335a, 0x335c, 0x335e, 0x3360, 0x3362,
0x3364, 0x3366, 0x3368, 0x336a, 0x336c, 0x336e, 0x3370, 0x3372,
- 0x3374, 0x3376, 0x3378, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x337a, 0x337e, 0x3382, 0x3386, 0x338a, 0x338e, 0x3392, 0x3396,
- 0x339a, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x339e, 0x33a0, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x3374, 0x3376, 0x3378, 0x337a, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x337c, 0x3380, 0x3384, 0x3388, 0x338c, 0x3390, 0x3394, 0x3398,
+ 0x339c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
+ 0x33a0, 0x33a2, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -10308,76 +10862,76 @@ static const unsigned short uc_decomposition_trie[] = {
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
- 0x33a2, 0x33a4, 0x33a6, 0x33a8, 0x33ab, 0x33ad, 0x33af, 0x33b1,
- 0x33b3, 0x33b5, 0x33b7, 0x33b9, 0x33bb, 0x33bd, 0x33c0, 0x33c2,
- 0x33c4, 0x33c6, 0x33c8, 0x33cb, 0x33cd, 0x33cf, 0x33d1, 0x33d4,
- 0x33d6, 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e1, 0x33e3, 0x33e5,
- 0x33e7, 0x33e9, 0x33eb, 0x33ed, 0x33ef, 0x33f1, 0x33f3, 0x33f5,
- 0x33f7, 0x33f9, 0x33fb, 0x33fd, 0x33ff, 0x3401, 0x3403, 0x3405,
- 0x3407, 0x3409, 0x340b, 0x340d, 0x340f, 0x3412, 0x3414, 0x3416,
- 0x3418, 0x341b, 0x341d, 0x341f, 0x3421, 0x3423, 0x3425, 0x3427,
- 0x3429, 0x342b, 0x342d, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437,
- 0x3439, 0x343b, 0x343d, 0x343f, 0x3441, 0x3443, 0x3445, 0x3447,
- 0x3449, 0x344b, 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3457,
- 0x3459, 0x345b, 0x345e, 0x3460, 0x3462, 0x3464, 0x3466, 0x3468,
- 0x346a, 0x346d, 0x3470, 0x3472, 0x3474, 0x3476, 0x3478, 0x347a,
- 0x347c, 0x347e, 0x3480, 0x3482, 0x3484, 0x3487, 0x3489, 0x348b,
- 0x348d, 0x348f, 0x3492, 0x3494, 0x3496, 0x3498, 0x349a, 0x349c,
- 0x349e, 0x34a0, 0x34a2, 0x34a4, 0x34a7, 0x34a9, 0x34ac, 0x34ae,
- 0x34b0, 0x34b2, 0x34b4, 0x34b6, 0x34b8, 0x34ba, 0x34bc, 0x34be,
- 0x34c0, 0x34c2, 0x34c5, 0x34c7, 0x34c9, 0x34cb, 0x34cd, 0x34cf,
- 0x34d2, 0x34d4, 0x34d7, 0x34da, 0x34dc, 0x34de, 0x34e0, 0x34e2,
- 0x34e5, 0x34e8, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2, 0x34f4,
- 0x34f6, 0x34f8, 0x34fa, 0x34fc, 0x34fe, 0x3501, 0x3503, 0x3505,
- 0x3507, 0x3509, 0x350b, 0x350d, 0x350f, 0x3511, 0x3513, 0x3515,
- 0x3517, 0x3519, 0x351b, 0x351d, 0x351f, 0x3521, 0x3523, 0x3525,
- 0x3527, 0x352a, 0x352c, 0x352e, 0x3530, 0x3532, 0x3534, 0x3537,
- 0x3539, 0x353b, 0x353d, 0x353f, 0x3541, 0x3543, 0x3545, 0x3547,
- 0x3549, 0x354b, 0x354d, 0x3550, 0x3552, 0x3554, 0x3556, 0x3558,
- 0x355a, 0x355c, 0x355e, 0x3560, 0x3562, 0x3564, 0x3566, 0x3568,
- 0x356a, 0x356c, 0x356e, 0x3570, 0x3572, 0x3574, 0x3577, 0x3579,
- 0x357b, 0x357d, 0x357f, 0x3581, 0x3584, 0x3586, 0x3588, 0x358a,
- 0x358c, 0x358e, 0x3590, 0x3592, 0x3594, 0x3597, 0x3599, 0x359b,
- 0x359d, 0x35a0, 0x35a2, 0x35a4, 0x35a6, 0x35a8, 0x35aa, 0x35ac,
- 0x35af, 0x35b2, 0x35b5, 0x35b7, 0x35ba, 0x35bc, 0x35be, 0x35c0,
+ 0x33a4, 0x33a6, 0x33a8, 0x33aa, 0x33ad, 0x33af, 0x33b1, 0x33b3,
+ 0x33b5, 0x33b7, 0x33b9, 0x33bb, 0x33bd, 0x33bf, 0x33c2, 0x33c4,
+ 0x33c6, 0x33c8, 0x33ca, 0x33cd, 0x33cf, 0x33d1, 0x33d3, 0x33d6,
+ 0x33d8, 0x33da, 0x33dc, 0x33de, 0x33e0, 0x33e3, 0x33e5, 0x33e7,
+ 0x33e9, 0x33eb, 0x33ed, 0x33ef, 0x33f1, 0x33f3, 0x33f5, 0x33f7,
+ 0x33f9, 0x33fb, 0x33fd, 0x33ff, 0x3401, 0x3403, 0x3405, 0x3407,
+ 0x3409, 0x340b, 0x340d, 0x340f, 0x3411, 0x3414, 0x3416, 0x3418,
+ 0x341a, 0x341d, 0x341f, 0x3421, 0x3423, 0x3425, 0x3427, 0x3429,
+ 0x342b, 0x342d, 0x342f, 0x3431, 0x3433, 0x3435, 0x3437, 0x3439,
+ 0x343b, 0x343d, 0x343f, 0x3441, 0x3443, 0x3445, 0x3447, 0x3449,
+ 0x344b, 0x344d, 0x344f, 0x3451, 0x3453, 0x3455, 0x3457, 0x3459,
+ 0x345b, 0x345d, 0x3460, 0x3462, 0x3464, 0x3466, 0x3468, 0x346a,
+ 0x346c, 0x346f, 0x3472, 0x3474, 0x3476, 0x3478, 0x347a, 0x347c,
+ 0x347e, 0x3480, 0x3482, 0x3484, 0x3486, 0x3489, 0x348b, 0x348d,
+ 0x348f, 0x3491, 0x3494, 0x3496, 0x3498, 0x349a, 0x349c, 0x349e,
+ 0x34a0, 0x34a2, 0x34a4, 0x34a6, 0x34a9, 0x34ab, 0x34ae, 0x34b0,
+ 0x34b2, 0x34b4, 0x34b6, 0x34b8, 0x34ba, 0x34bc, 0x34be, 0x34c0,
+ 0x34c2, 0x34c4, 0x34c7, 0x34c9, 0x34cb, 0x34cd, 0x34cf, 0x34d1,
+ 0x34d4, 0x34d6, 0x34d9, 0x34dc, 0x34de, 0x34e0, 0x34e2, 0x34e4,
+ 0x34e7, 0x34ea, 0x34ec, 0x34ee, 0x34f0, 0x34f2, 0x34f4, 0x34f6,
+ 0x34f8, 0x34fa, 0x34fc, 0x34fe, 0x3500, 0x3503, 0x3505, 0x3507,
+ 0x3509, 0x350b, 0x350d, 0x350f, 0x3511, 0x3513, 0x3515, 0x3517,
+ 0x3519, 0x351b, 0x351d, 0x351f, 0x3521, 0x3523, 0x3525, 0x3527,
+ 0x3529, 0x352c, 0x352e, 0x3530, 0x3532, 0x3534, 0x3536, 0x3539,
+ 0x353b, 0x353d, 0x353f, 0x3541, 0x3543, 0x3545, 0x3547, 0x3549,
+ 0x354b, 0x354d, 0x354f, 0x3552, 0x3554, 0x3556, 0x3558, 0x355a,
+ 0x355c, 0x355e, 0x3560, 0x3562, 0x3564, 0x3566, 0x3568, 0x356a,
+ 0x356c, 0x356e, 0x3570, 0x3572, 0x3574, 0x3576, 0x3579, 0x357b,
+ 0x357d, 0x357f, 0x3581, 0x3583, 0x3586, 0x3588, 0x358a, 0x358c,
+ 0x358e, 0x3590, 0x3592, 0x3594, 0x3596, 0x3599, 0x359b, 0x359d,
+ 0x359f, 0x35a2, 0x35a4, 0x35a6, 0x35a8, 0x35aa, 0x35ac, 0x35ae,
+ 0x35b1, 0x35b4, 0x35b7, 0x35b9, 0x35bc, 0x35be, 0x35c0, 0x35c2,
- 0x35c2, 0x35c4, 0x35c6, 0x35c8, 0x35ca, 0x35cc, 0x35ce, 0x35d1,
- 0x35d3, 0x35d5, 0x35d7, 0x35d9, 0x35db, 0x35dd, 0x35e0, 0x35e2,
- 0x35e4, 0x35e7, 0x35ea, 0x35ec, 0x35ee, 0x35f0, 0x35f2, 0x35f4,
- 0x35f6, 0x35f8, 0x35fa, 0x35fc, 0x35ff, 0x3601, 0x3604, 0x3606,
- 0x3609, 0x360b, 0x360d, 0x360f, 0x3612, 0x3614, 0x3616, 0x3619,
- 0x361c, 0x361e, 0x3620, 0x3622, 0x3624, 0x3626, 0x3628, 0x362a,
- 0x362c, 0x362e, 0x3630, 0x3632, 0x3634, 0x3636, 0x3639, 0x363b,
- 0x363e, 0x3640, 0x3643, 0x3645, 0x3648, 0x364b, 0x364e, 0x3650,
- 0x3652, 0x3654, 0x3657, 0x365a, 0x365d, 0x3660, 0x3662, 0x3664,
- 0x3666, 0x3668, 0x366a, 0x366c, 0x366e, 0x3670, 0x3673, 0x3675,
- 0x3677, 0x3679, 0x367b, 0x367e, 0x3680, 0x3683, 0x3686, 0x3688,
- 0x368a, 0x368c, 0x368e, 0x3690, 0x3692, 0x3695, 0x3698, 0x369b,
- 0x369d, 0x369f, 0x36a2, 0x36a4, 0x36a6, 0x36a8, 0x36ab, 0x36ad,
- 0x36af, 0x36b1, 0x36b3, 0x36b5, 0x36b8, 0x36ba, 0x36bc, 0x36be,
- 0x36c0, 0x36c2, 0x36c4, 0x36c7, 0x36ca, 0x36cc, 0x36cf, 0x36d1,
- 0x36d4, 0x36d6, 0x36d8, 0x36da, 0x36dd, 0x36e0, 0x36e2, 0x36e5,
- 0x36e7, 0x36ea, 0x36ec, 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6,
- 0x36f9, 0x36fc, 0x36ff, 0x3702, 0x3704, 0x3706, 0x3708, 0x370a,
- 0x370c, 0x370e, 0x3710, 0x3712, 0x3714, 0x3716, 0x3718, 0x371a,
- 0x371d, 0x371f, 0x3721, 0x3723, 0x3725, 0x3727, 0x3729, 0x372b,
- 0x372d, 0x372f, 0x3731, 0x3733, 0x3735, 0x3738, 0x373b, 0x373e,
- 0x3740, 0x3742, 0x3744, 0x3746, 0x3749, 0x374b, 0x374e, 0x3750,
- 0x3752, 0x3755, 0x3758, 0x375a, 0x375c, 0x375e, 0x3760, 0x3762,
- 0x3764, 0x3766, 0x3768, 0x376a, 0x376c, 0x376e, 0x3770, 0x3772,
- 0x3774, 0x3776, 0x3778, 0x377a, 0x377c, 0x377e, 0x3781, 0x3783,
- 0x3785, 0x3787, 0x3789, 0x378b, 0x378e, 0x3791, 0x3793, 0x3795,
- 0x3797, 0x3799, 0x379b, 0x379d, 0x37a0, 0x37a2, 0x37a4, 0x37a6,
- 0x37a8, 0x37ab, 0x37ae, 0x37b0, 0x37b2, 0x37b4, 0x37b7, 0x37b9,
- 0x37bb, 0x37be, 0x37c1, 0x37c3, 0x37c5, 0x37c7, 0x37ca, 0x37cc,
- 0x37ce, 0x37d0, 0x37d2, 0x37d4, 0x37d6, 0x37d8, 0x37db, 0x37dd,
- 0x37df, 0x37e1, 0x37e4, 0x37e6, 0x37e8, 0x37ea, 0x37ec, 0x37ef,
- 0x37f2, 0x37f4, 0x37f6, 0x37f8, 0x37fb, 0x37fd, 0x3800, 0x3802,
+ 0x35c4, 0x35c6, 0x35c8, 0x35ca, 0x35cc, 0x35ce, 0x35d0, 0x35d3,
+ 0x35d5, 0x35d7, 0x35d9, 0x35db, 0x35dd, 0x35df, 0x35e2, 0x35e4,
+ 0x35e6, 0x35e9, 0x35ec, 0x35ee, 0x35f0, 0x35f2, 0x35f4, 0x35f6,
+ 0x35f8, 0x35fa, 0x35fc, 0x35fe, 0x3601, 0x3603, 0x3606, 0x3608,
+ 0x360b, 0x360d, 0x360f, 0x3611, 0x3614, 0x3616, 0x3618, 0x361b,
+ 0x361e, 0x3620, 0x3622, 0x3624, 0x3626, 0x3628, 0x362a, 0x362c,
+ 0x362e, 0x3630, 0x3632, 0x3634, 0x3636, 0x3638, 0x363b, 0x363d,
+ 0x3640, 0x3642, 0x3645, 0x3647, 0x364a, 0x364d, 0x3650, 0x3652,
+ 0x3654, 0x3656, 0x3659, 0x365c, 0x365f, 0x3662, 0x3664, 0x3666,
+ 0x3668, 0x366a, 0x366c, 0x366e, 0x3670, 0x3672, 0x3675, 0x3677,
+ 0x3679, 0x367b, 0x367d, 0x3680, 0x3682, 0x3685, 0x3688, 0x368a,
+ 0x368c, 0x368e, 0x3690, 0x3692, 0x3694, 0x3697, 0x369a, 0x369d,
+ 0x369f, 0x36a1, 0x36a4, 0x36a6, 0x36a8, 0x36aa, 0x36ad, 0x36af,
+ 0x36b1, 0x36b3, 0x36b5, 0x36b7, 0x36ba, 0x36bc, 0x36be, 0x36c0,
+ 0x36c2, 0x36c4, 0x36c6, 0x36c9, 0x36cc, 0x36ce, 0x36d1, 0x36d3,
+ 0x36d6, 0x36d8, 0x36da, 0x36dc, 0x36df, 0x36e2, 0x36e4, 0x36e7,
+ 0x36e9, 0x36ec, 0x36ee, 0x36f0, 0x36f2, 0x36f4, 0x36f6, 0x36f8,
+ 0x36fb, 0x36fe, 0x3701, 0x3704, 0x3706, 0x3708, 0x370a, 0x370c,
+ 0x370e, 0x3710, 0x3712, 0x3714, 0x3716, 0x3718, 0x371a, 0x371c,
+ 0x371f, 0x3721, 0x3723, 0x3725, 0x3727, 0x3729, 0x372b, 0x372d,
+ 0x372f, 0x3731, 0x3733, 0x3735, 0x3737, 0x373a, 0x373d, 0x3740,
+ 0x3742, 0x3744, 0x3746, 0x3748, 0x374b, 0x374d, 0x3750, 0x3752,
+ 0x3754, 0x3757, 0x375a, 0x375c, 0x375e, 0x3760, 0x3762, 0x3764,
+ 0x3766, 0x3768, 0x376a, 0x376c, 0x376e, 0x3770, 0x3772, 0x3774,
+ 0x3776, 0x3778, 0x377a, 0x377c, 0x377e, 0x3780, 0x3783, 0x3785,
+ 0x3787, 0x3789, 0x378b, 0x378d, 0x3790, 0x3793, 0x3795, 0x3797,
+ 0x3799, 0x379b, 0x379d, 0x379f, 0x37a2, 0x37a4, 0x37a6, 0x37a8,
+ 0x37aa, 0x37ad, 0x37b0, 0x37b2, 0x37b4, 0x37b6, 0x37b9, 0x37bb,
+ 0x37bd, 0x37c0, 0x37c3, 0x37c5, 0x37c7, 0x37c9, 0x37cc, 0x37ce,
+ 0x37d0, 0x37d2, 0x37d4, 0x37d6, 0x37d8, 0x37da, 0x37dd, 0x37df,
+ 0x37e1, 0x37e3, 0x37e6, 0x37e8, 0x37ea, 0x37ec, 0x37ee, 0x37f1,
+ 0x37f4, 0x37f6, 0x37f8, 0x37fa, 0x37fd, 0x37ff, 0x3802, 0x3804,
- 0x3804, 0x3806, 0x3809, 0x380b, 0x380d, 0x380f, 0x3811, 0x3813,
- 0x3815, 0x3817, 0x381a, 0x381c, 0x381e, 0x3820, 0x3822, 0x3824,
- 0x3826, 0x3829, 0x382b, 0x382e, 0x3831, 0x3834, 0x3836, 0x3838,
- 0x383a, 0x383c, 0x383e, 0x3840, 0x3842, 0x3844, 0xffff, 0xffff,
+ 0x3806, 0x3808, 0x380b, 0x380d, 0x380f, 0x3811, 0x3813, 0x3815,
+ 0x3817, 0x3819, 0x381c, 0x381e, 0x3820, 0x3822, 0x3824, 0x3826,
+ 0x3828, 0x382b, 0x382d, 0x3830, 0x3833, 0x3836, 0x3838, 0x383a,
+ 0x383c, 0x383e, 0x3840, 0x3842, 0x3844, 0x3846, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
@@ -12063,160 +12617,161 @@ static const unsigned short uc_decomposition_map[] = {
0x10f, 0x53f3, 0x10f, 0x6307, 0x10f, 0x8d70, 0x10f, 0x6253,
0x10f, 0x7981, 0x10f, 0x7a7a, 0x10f, 0x5408, 0x10f, 0x6e80,
0x10f, 0x6709, 0x10f, 0x6708, 0x10f, 0x7533, 0x10f, 0x5272,
- 0x10f, 0x55b6, 0x310, 0x3014, 0x672c, 0x3015, 0x310, 0x3014,
- 0x4e09, 0x3015, 0x310, 0x3014, 0x4e8c, 0x3015, 0x310, 0x3014,
- 0x5b89, 0x3015, 0x310, 0x3014, 0x70b9, 0x3015, 0x310, 0x3014,
- 0x6253, 0x3015, 0x310, 0x3014, 0x76d7, 0x3015, 0x310, 0x3014,
- 0x52dd, 0x3015, 0x310, 0x3014, 0x6557, 0x3015, 0x108, 0x5f97,
- 0x108, 0x53ef, 0x101, 0x4e3d, 0x101, 0x4e38, 0x101, 0x4e41,
- 0x201, 0xd840, 0xdd22, 0x101, 0x4f60, 0x101, 0x4fae, 0x101,
- 0x4fbb, 0x101, 0x5002, 0x101, 0x507a, 0x101, 0x5099, 0x101,
- 0x50e7, 0x101, 0x50cf, 0x101, 0x349e, 0x201, 0xd841, 0xde3a,
- 0x101, 0x514d, 0x101, 0x5154, 0x101, 0x5164, 0x101, 0x5177,
- 0x201, 0xd841, 0xdd1c, 0x101, 0x34b9, 0x101, 0x5167, 0x101,
- 0x518d, 0x201, 0xd841, 0xdd4b, 0x101, 0x5197, 0x101, 0x51a4,
- 0x101, 0x4ecc, 0x101, 0x51ac, 0x101, 0x51b5, 0x201, 0xd864,
- 0xdddf, 0x101, 0x51f5, 0x101, 0x5203, 0x101, 0x34df, 0x101,
- 0x523b, 0x101, 0x5246, 0x101, 0x5272, 0x101, 0x5277, 0x101,
- 0x3515, 0x101, 0x52c7, 0x101, 0x52c9, 0x101, 0x52e4, 0x101,
- 0x52fa, 0x101, 0x5305, 0x101, 0x5306, 0x101, 0x5317, 0x101,
- 0x5349, 0x101, 0x5351, 0x101, 0x535a, 0x101, 0x5373, 0x101,
- 0x537d, 0x101, 0x537f, 0x101, 0x537f, 0x101, 0x537f, 0x201,
- 0xd842, 0xde2c, 0x101, 0x7070, 0x101, 0x53ca, 0x101, 0x53df,
- 0x201, 0xd842, 0xdf63, 0x101, 0x53eb, 0x101, 0x53f1, 0x101,
- 0x5406, 0x101, 0x549e, 0x101, 0x5438, 0x101, 0x5448, 0x101,
- 0x5468, 0x101, 0x54a2, 0x101, 0x54f6, 0x101, 0x5510, 0x101,
- 0x5553, 0x101, 0x5563, 0x101, 0x5584, 0x101, 0x5584, 0x101,
- 0x5599, 0x101, 0x55ab, 0x101, 0x55b3, 0x101, 0x55c2, 0x101,
- 0x5716, 0x101, 0x5606, 0x101, 0x5717, 0x101, 0x5651, 0x101,
- 0x5674, 0x101, 0x5207, 0x101, 0x58ee, 0x101, 0x57ce, 0x101,
- 0x57f4, 0x101, 0x580d, 0x101, 0x578b, 0x101, 0x5832, 0x101,
- 0x5831, 0x101, 0x58ac, 0x201, 0xd845, 0xdce4, 0x101, 0x58f2,
- 0x101, 0x58f7, 0x101, 0x5906, 0x101, 0x591a, 0x101, 0x5922,
- 0x101, 0x5962, 0x201, 0xd845, 0xdea8, 0x201, 0xd845, 0xdeea,
- 0x101, 0x59ec, 0x101, 0x5a1b, 0x101, 0x5a27, 0x101, 0x59d8,
- 0x101, 0x5a66, 0x101, 0x36ee, 0x101, 0x36fc, 0x101, 0x5b08,
- 0x101, 0x5b3e, 0x101, 0x5b3e, 0x201, 0xd846, 0xddc8, 0x101,
- 0x5bc3, 0x101, 0x5bd8, 0x101, 0x5be7, 0x101, 0x5bf3, 0x201,
- 0xd846, 0xdf18, 0x101, 0x5bff, 0x101, 0x5c06, 0x101, 0x5f53,
- 0x101, 0x5c22, 0x101, 0x3781, 0x101, 0x5c60, 0x101, 0x5c6e,
- 0x101, 0x5cc0, 0x101, 0x5c8d, 0x201, 0xd847, 0xdde4, 0x101,
- 0x5d43, 0x201, 0xd847, 0xdde6, 0x101, 0x5d6e, 0x101, 0x5d6b,
- 0x101, 0x5d7c, 0x101, 0x5de1, 0x101, 0x5de2, 0x101, 0x382f,
- 0x101, 0x5dfd, 0x101, 0x5e28, 0x101, 0x5e3d, 0x101, 0x5e69,
- 0x101, 0x3862, 0x201, 0xd848, 0xdd83, 0x101, 0x387c, 0x101,
- 0x5eb0, 0x101, 0x5eb3, 0x101, 0x5eb6, 0x101, 0x5eca, 0x201,
- 0xd868, 0xdf92, 0x101, 0x5efe, 0x201, 0xd848, 0xdf31, 0x201,
- 0xd848, 0xdf31, 0x101, 0x8201, 0x101, 0x5f22, 0x101, 0x5f22,
- 0x101, 0x38c7, 0x201, 0xd84c, 0xdeb8, 0x201, 0xd858, 0xddda,
- 0x101, 0x5f62, 0x101, 0x5f6b, 0x101, 0x38e3, 0x101, 0x5f9a,
- 0x101, 0x5fcd, 0x101, 0x5fd7, 0x101, 0x5ff9, 0x101, 0x6081,
- 0x101, 0x393a, 0x101, 0x391c, 0x101, 0x6094, 0x201, 0xd849,
- 0xded4, 0x101, 0x60c7, 0x101, 0x6148, 0x101, 0x614c, 0x101,
- 0x614e, 0x101, 0x614c, 0x101, 0x617a, 0x101, 0x618e, 0x101,
- 0x61b2, 0x101, 0x61a4, 0x101, 0x61af, 0x101, 0x61de, 0x101,
- 0x61f2, 0x101, 0x61f6, 0x101, 0x6210, 0x101, 0x621b, 0x101,
- 0x625d, 0x101, 0x62b1, 0x101, 0x62d4, 0x101, 0x6350, 0x201,
- 0xd84a, 0xdf0c, 0x101, 0x633d, 0x101, 0x62fc, 0x101, 0x6368,
- 0x101, 0x6383, 0x101, 0x63e4, 0x201, 0xd84a, 0xdff1, 0x101,
- 0x6422, 0x101, 0x63c5, 0x101, 0x63a9, 0x101, 0x3a2e, 0x101,
- 0x6469, 0x101, 0x647e, 0x101, 0x649d, 0x101, 0x6477, 0x101,
- 0x3a6c, 0x101, 0x654f, 0x101, 0x656c, 0x201, 0xd84c, 0xdc0a,
- 0x101, 0x65e3, 0x101, 0x66f8, 0x101, 0x6649, 0x101, 0x3b19,
- 0x101, 0x6691, 0x101, 0x3b08, 0x101, 0x3ae4, 0x101, 0x5192,
- 0x101, 0x5195, 0x101, 0x6700, 0x101, 0x669c, 0x101, 0x80ad,
- 0x101, 0x43d9, 0x101, 0x6717, 0x101, 0x671b, 0x101, 0x6721,
- 0x101, 0x675e, 0x101, 0x6753, 0x201, 0xd84c, 0xdfc3, 0x101,
- 0x3b49, 0x101, 0x67fa, 0x101, 0x6785, 0x101, 0x6852, 0x101,
- 0x6885, 0x201, 0xd84d, 0xdc6d, 0x101, 0x688e, 0x101, 0x681f,
- 0x101, 0x6914, 0x101, 0x3b9d, 0x101, 0x6942, 0x101, 0x69a3,
- 0x101, 0x69ea, 0x101, 0x6aa8, 0x201, 0xd84d, 0xdea3, 0x101,
- 0x6adb, 0x101, 0x3c18, 0x101, 0x6b21, 0x201, 0xd84e, 0xdca7,
- 0x101, 0x6b54, 0x101, 0x3c4e, 0x101, 0x6b72, 0x101, 0x6b9f,
- 0x101, 0x6bba, 0x101, 0x6bbb, 0x201, 0xd84e, 0xde8d, 0x201,
- 0xd847, 0xdd0b, 0x201, 0xd84e, 0xdefa, 0x101, 0x6c4e, 0x201,
- 0xd84f, 0xdcbc, 0x101, 0x6cbf, 0x101, 0x6ccd, 0x101, 0x6c67,
- 0x101, 0x6d16, 0x101, 0x6d3e, 0x101, 0x6d77, 0x101, 0x6d41,
- 0x101, 0x6d69, 0x101, 0x6d78, 0x101, 0x6d85, 0x201, 0xd84f,
- 0xdd1e, 0x101, 0x6d34, 0x101, 0x6e2f, 0x101, 0x6e6e, 0x101,
- 0x3d33, 0x101, 0x6ecb, 0x101, 0x6ec7, 0x201, 0xd84f, 0xded1,
- 0x101, 0x6df9, 0x101, 0x6f6e, 0x201, 0xd84f, 0xdf5e, 0x201,
- 0xd84f, 0xdf8e, 0x101, 0x6fc6, 0x101, 0x7039, 0x101, 0x701e,
- 0x101, 0x701b, 0x101, 0x3d96, 0x101, 0x704a, 0x101, 0x707d,
- 0x101, 0x7077, 0x101, 0x70ad, 0x201, 0xd841, 0xdd25, 0x101,
- 0x7145, 0x201, 0xd850, 0xde63, 0x101, 0x719c, 0x201, 0xd850,
- 0xdfab, 0x101, 0x7228, 0x101, 0x7235, 0x101, 0x7250, 0x201,
- 0xd851, 0xde08, 0x101, 0x7280, 0x101, 0x7295, 0x201, 0xd851,
- 0xdf35, 0x201, 0xd852, 0xdc14, 0x101, 0x737a, 0x101, 0x738b,
- 0x101, 0x3eac, 0x101, 0x73a5, 0x101, 0x3eb8, 0x101, 0x3eb8,
- 0x101, 0x7447, 0x101, 0x745c, 0x101, 0x7471, 0x101, 0x7485,
- 0x101, 0x74ca, 0x101, 0x3f1b, 0x101, 0x7524, 0x201, 0xd853,
- 0xdc36, 0x101, 0x753e, 0x201, 0xd853, 0xdc92, 0x101, 0x7570,
- 0x201, 0xd848, 0xdd9f, 0x101, 0x7610, 0x201, 0xd853, 0xdfa1,
- 0x201, 0xd853, 0xdfb8, 0x201, 0xd854, 0xdc44, 0x101, 0x3ffc,
- 0x101, 0x4008, 0x101, 0x76f4, 0x201, 0xd854, 0xdcf3, 0x201,
- 0xd854, 0xdcf2, 0x201, 0xd854, 0xdd19, 0x201, 0xd854, 0xdd33,
- 0x101, 0x771e, 0x101, 0x771f, 0x101, 0x771f, 0x101, 0x774a,
- 0x101, 0x4039, 0x101, 0x778b, 0x101, 0x4046, 0x101, 0x4096,
- 0x201, 0xd855, 0xdc1d, 0x101, 0x784e, 0x101, 0x788c, 0x101,
- 0x78cc, 0x101, 0x40e3, 0x201, 0xd855, 0xde26, 0x101, 0x7956,
- 0x201, 0xd855, 0xde9a, 0x201, 0xd855, 0xdec5, 0x101, 0x798f,
- 0x101, 0x79eb, 0x101, 0x412f, 0x101, 0x7a40, 0x101, 0x7a4a,
- 0x101, 0x7a4f, 0x201, 0xd856, 0xdd7c, 0x201, 0xd856, 0xdea7,
- 0x201, 0xd856, 0xdea7, 0x101, 0x7aee, 0x101, 0x4202, 0x201,
- 0xd856, 0xdfab, 0x101, 0x7bc6, 0x101, 0x7bc9, 0x101, 0x4227,
- 0x201, 0xd857, 0xdc80, 0x101, 0x7cd2, 0x101, 0x42a0, 0x101,
- 0x7ce8, 0x101, 0x7ce3, 0x101, 0x7d00, 0x201, 0xd857, 0xdf86,
- 0x101, 0x7d63, 0x101, 0x4301, 0x101, 0x7dc7, 0x101, 0x7e02,
- 0x101, 0x7e45, 0x101, 0x4334, 0x201, 0xd858, 0xde28, 0x201,
- 0xd858, 0xde47, 0x101, 0x4359, 0x201, 0xd858, 0xded9, 0x101,
- 0x7f7a, 0x201, 0xd858, 0xdf3e, 0x101, 0x7f95, 0x101, 0x7ffa,
- 0x101, 0x8005, 0x201, 0xd859, 0xdcda, 0x201, 0xd859, 0xdd23,
- 0x101, 0x8060, 0x201, 0xd859, 0xdda8, 0x101, 0x8070, 0x201,
- 0xd84c, 0xdf5f, 0x101, 0x43d5, 0x101, 0x80b2, 0x101, 0x8103,
- 0x101, 0x440b, 0x101, 0x813e, 0x101, 0x5ab5, 0x201, 0xd859,
- 0xdfa7, 0x201, 0xd859, 0xdfb5, 0x201, 0xd84c, 0xdf93, 0x201,
- 0xd84c, 0xdf9c, 0x101, 0x8201, 0x101, 0x8204, 0x101, 0x8f9e,
- 0x101, 0x446b, 0x101, 0x8291, 0x101, 0x828b, 0x101, 0x829d,
- 0x101, 0x52b3, 0x101, 0x82b1, 0x101, 0x82b3, 0x101, 0x82bd,
- 0x101, 0x82e6, 0x201, 0xd85a, 0xdf3c, 0x101, 0x82e5, 0x101,
- 0x831d, 0x101, 0x8363, 0x101, 0x83ad, 0x101, 0x8323, 0x101,
- 0x83bd, 0x101, 0x83e7, 0x101, 0x8457, 0x101, 0x8353, 0x101,
- 0x83ca, 0x101, 0x83cc, 0x101, 0x83dc, 0x201, 0xd85b, 0xdc36,
- 0x201, 0xd85b, 0xdd6b, 0x201, 0xd85b, 0xdcd5, 0x101, 0x452b,
- 0x101, 0x84f1, 0x101, 0x84f3, 0x101, 0x8516, 0x201, 0xd85c,
- 0xdfca, 0x101, 0x8564, 0x201, 0xd85b, 0xdf2c, 0x101, 0x455d,
- 0x101, 0x4561, 0x201, 0xd85b, 0xdfb1, 0x201, 0xd85c, 0xdcd2,
- 0x101, 0x456b, 0x101, 0x8650, 0x101, 0x865c, 0x101, 0x8667,
- 0x101, 0x8669, 0x101, 0x86a9, 0x101, 0x8688, 0x101, 0x870e,
- 0x101, 0x86e2, 0x101, 0x8779, 0x101, 0x8728, 0x101, 0x876b,
- 0x101, 0x8786, 0x101, 0x45d7, 0x101, 0x87e1, 0x101, 0x8801,
- 0x101, 0x45f9, 0x101, 0x8860, 0x101, 0x8863, 0x201, 0xd85d,
- 0xde67, 0x101, 0x88d7, 0x101, 0x88de, 0x101, 0x4635, 0x101,
- 0x88fa, 0x101, 0x34bb, 0x201, 0xd85e, 0xdcae, 0x201, 0xd85e,
- 0xdd66, 0x101, 0x46be, 0x101, 0x46c7, 0x101, 0x8aa0, 0x101,
- 0x8aed, 0x101, 0x8b8a, 0x101, 0x8c55, 0x201, 0xd85f, 0xdca8,
- 0x101, 0x8cab, 0x101, 0x8cc1, 0x101, 0x8d1b, 0x101, 0x8d77,
- 0x201, 0xd85f, 0xdf2f, 0x201, 0xd842, 0xdc04, 0x101, 0x8dcb,
- 0x101, 0x8dbc, 0x101, 0x8df0, 0x201, 0xd842, 0xdcde, 0x101,
- 0x8ed4, 0x101, 0x8f38, 0x201, 0xd861, 0xddd2, 0x201, 0xd861,
- 0xdded, 0x101, 0x9094, 0x101, 0x90f1, 0x101, 0x9111, 0x201,
- 0xd861, 0xdf2e, 0x101, 0x911b, 0x101, 0x9238, 0x101, 0x92d7,
- 0x101, 0x92d8, 0x101, 0x927c, 0x101, 0x93f9, 0x101, 0x9415,
- 0x201, 0xd862, 0xdffa, 0x101, 0x958b, 0x101, 0x4995, 0x101,
- 0x95b7, 0x201, 0xd863, 0xdd77, 0x101, 0x49e6, 0x101, 0x96c3,
- 0x101, 0x5db2, 0x101, 0x9723, 0x201, 0xd864, 0xdd45, 0x201,
- 0xd864, 0xde1a, 0x101, 0x4a6e, 0x101, 0x4a76, 0x101, 0x97e0,
- 0x201, 0xd865, 0xdc0a, 0x101, 0x4ab2, 0x201, 0xd865, 0xdc96,
- 0x101, 0x980b, 0x101, 0x980b, 0x101, 0x9829, 0x201, 0xd865,
- 0xddb6, 0x101, 0x98e2, 0x101, 0x4b33, 0x101, 0x9929, 0x101,
- 0x99a7, 0x101, 0x99c2, 0x101, 0x99fe, 0x101, 0x4bce, 0x201,
- 0xd866, 0xdf30, 0x101, 0x9b12, 0x101, 0x9c40, 0x101, 0x9cfd,
- 0x101, 0x4cce, 0x101, 0x4ced, 0x101, 0x9d67, 0x201, 0xd868,
- 0xdcce, 0x101, 0x4cf8, 0x201, 0xd868, 0xdd05, 0x201, 0xd868,
- 0xde0e, 0x201, 0xd868, 0xde91, 0x101, 0x9ebb, 0x101, 0x4d56,
- 0x101, 0x9ef9, 0x101, 0x9efe, 0x101, 0x9f05, 0x101, 0x9f0f,
- 0x101, 0x9f16, 0x101, 0x9f3b, 0x201, 0xd869, 0xde00
+ 0x10f, 0x55b6, 0x10f, 0x914d, 0x310, 0x3014, 0x672c, 0x3015,
+ 0x310, 0x3014, 0x4e09, 0x3015, 0x310, 0x3014, 0x4e8c, 0x3015,
+ 0x310, 0x3014, 0x5b89, 0x3015, 0x310, 0x3014, 0x70b9, 0x3015,
+ 0x310, 0x3014, 0x6253, 0x3015, 0x310, 0x3014, 0x76d7, 0x3015,
+ 0x310, 0x3014, 0x52dd, 0x3015, 0x310, 0x3014, 0x6557, 0x3015,
+ 0x108, 0x5f97, 0x108, 0x53ef, 0x101, 0x4e3d, 0x101, 0x4e38,
+ 0x101, 0x4e41, 0x201, 0xd840, 0xdd22, 0x101, 0x4f60, 0x101,
+ 0x4fae, 0x101, 0x4fbb, 0x101, 0x5002, 0x101, 0x507a, 0x101,
+ 0x5099, 0x101, 0x50e7, 0x101, 0x50cf, 0x101, 0x349e, 0x201,
+ 0xd841, 0xde3a, 0x101, 0x514d, 0x101, 0x5154, 0x101, 0x5164,
+ 0x101, 0x5177, 0x201, 0xd841, 0xdd1c, 0x101, 0x34b9, 0x101,
+ 0x5167, 0x101, 0x518d, 0x201, 0xd841, 0xdd4b, 0x101, 0x5197,
+ 0x101, 0x51a4, 0x101, 0x4ecc, 0x101, 0x51ac, 0x101, 0x51b5,
+ 0x201, 0xd864, 0xdddf, 0x101, 0x51f5, 0x101, 0x5203, 0x101,
+ 0x34df, 0x101, 0x523b, 0x101, 0x5246, 0x101, 0x5272, 0x101,
+ 0x5277, 0x101, 0x3515, 0x101, 0x52c7, 0x101, 0x52c9, 0x101,
+ 0x52e4, 0x101, 0x52fa, 0x101, 0x5305, 0x101, 0x5306, 0x101,
+ 0x5317, 0x101, 0x5349, 0x101, 0x5351, 0x101, 0x535a, 0x101,
+ 0x5373, 0x101, 0x537d, 0x101, 0x537f, 0x101, 0x537f, 0x101,
+ 0x537f, 0x201, 0xd842, 0xde2c, 0x101, 0x7070, 0x101, 0x53ca,
+ 0x101, 0x53df, 0x201, 0xd842, 0xdf63, 0x101, 0x53eb, 0x101,
+ 0x53f1, 0x101, 0x5406, 0x101, 0x549e, 0x101, 0x5438, 0x101,
+ 0x5448, 0x101, 0x5468, 0x101, 0x54a2, 0x101, 0x54f6, 0x101,
+ 0x5510, 0x101, 0x5553, 0x101, 0x5563, 0x101, 0x5584, 0x101,
+ 0x5584, 0x101, 0x5599, 0x101, 0x55ab, 0x101, 0x55b3, 0x101,
+ 0x55c2, 0x101, 0x5716, 0x101, 0x5606, 0x101, 0x5717, 0x101,
+ 0x5651, 0x101, 0x5674, 0x101, 0x5207, 0x101, 0x58ee, 0x101,
+ 0x57ce, 0x101, 0x57f4, 0x101, 0x580d, 0x101, 0x578b, 0x101,
+ 0x5832, 0x101, 0x5831, 0x101, 0x58ac, 0x201, 0xd845, 0xdce4,
+ 0x101, 0x58f2, 0x101, 0x58f7, 0x101, 0x5906, 0x101, 0x591a,
+ 0x101, 0x5922, 0x101, 0x5962, 0x201, 0xd845, 0xdea8, 0x201,
+ 0xd845, 0xdeea, 0x101, 0x59ec, 0x101, 0x5a1b, 0x101, 0x5a27,
+ 0x101, 0x59d8, 0x101, 0x5a66, 0x101, 0x36ee, 0x101, 0x36fc,
+ 0x101, 0x5b08, 0x101, 0x5b3e, 0x101, 0x5b3e, 0x201, 0xd846,
+ 0xddc8, 0x101, 0x5bc3, 0x101, 0x5bd8, 0x101, 0x5be7, 0x101,
+ 0x5bf3, 0x201, 0xd846, 0xdf18, 0x101, 0x5bff, 0x101, 0x5c06,
+ 0x101, 0x5f53, 0x101, 0x5c22, 0x101, 0x3781, 0x101, 0x5c60,
+ 0x101, 0x5c6e, 0x101, 0x5cc0, 0x101, 0x5c8d, 0x201, 0xd847,
+ 0xdde4, 0x101, 0x5d43, 0x201, 0xd847, 0xdde6, 0x101, 0x5d6e,
+ 0x101, 0x5d6b, 0x101, 0x5d7c, 0x101, 0x5de1, 0x101, 0x5de2,
+ 0x101, 0x382f, 0x101, 0x5dfd, 0x101, 0x5e28, 0x101, 0x5e3d,
+ 0x101, 0x5e69, 0x101, 0x3862, 0x201, 0xd848, 0xdd83, 0x101,
+ 0x387c, 0x101, 0x5eb0, 0x101, 0x5eb3, 0x101, 0x5eb6, 0x101,
+ 0x5eca, 0x201, 0xd868, 0xdf92, 0x101, 0x5efe, 0x201, 0xd848,
+ 0xdf31, 0x201, 0xd848, 0xdf31, 0x101, 0x8201, 0x101, 0x5f22,
+ 0x101, 0x5f22, 0x101, 0x38c7, 0x201, 0xd84c, 0xdeb8, 0x201,
+ 0xd858, 0xddda, 0x101, 0x5f62, 0x101, 0x5f6b, 0x101, 0x38e3,
+ 0x101, 0x5f9a, 0x101, 0x5fcd, 0x101, 0x5fd7, 0x101, 0x5ff9,
+ 0x101, 0x6081, 0x101, 0x393a, 0x101, 0x391c, 0x101, 0x6094,
+ 0x201, 0xd849, 0xded4, 0x101, 0x60c7, 0x101, 0x6148, 0x101,
+ 0x614c, 0x101, 0x614e, 0x101, 0x614c, 0x101, 0x617a, 0x101,
+ 0x618e, 0x101, 0x61b2, 0x101, 0x61a4, 0x101, 0x61af, 0x101,
+ 0x61de, 0x101, 0x61f2, 0x101, 0x61f6, 0x101, 0x6210, 0x101,
+ 0x621b, 0x101, 0x625d, 0x101, 0x62b1, 0x101, 0x62d4, 0x101,
+ 0x6350, 0x201, 0xd84a, 0xdf0c, 0x101, 0x633d, 0x101, 0x62fc,
+ 0x101, 0x6368, 0x101, 0x6383, 0x101, 0x63e4, 0x201, 0xd84a,
+ 0xdff1, 0x101, 0x6422, 0x101, 0x63c5, 0x101, 0x63a9, 0x101,
+ 0x3a2e, 0x101, 0x6469, 0x101, 0x647e, 0x101, 0x649d, 0x101,
+ 0x6477, 0x101, 0x3a6c, 0x101, 0x654f, 0x101, 0x656c, 0x201,
+ 0xd84c, 0xdc0a, 0x101, 0x65e3, 0x101, 0x66f8, 0x101, 0x6649,
+ 0x101, 0x3b19, 0x101, 0x6691, 0x101, 0x3b08, 0x101, 0x3ae4,
+ 0x101, 0x5192, 0x101, 0x5195, 0x101, 0x6700, 0x101, 0x669c,
+ 0x101, 0x80ad, 0x101, 0x43d9, 0x101, 0x6717, 0x101, 0x671b,
+ 0x101, 0x6721, 0x101, 0x675e, 0x101, 0x6753, 0x201, 0xd84c,
+ 0xdfc3, 0x101, 0x3b49, 0x101, 0x67fa, 0x101, 0x6785, 0x101,
+ 0x6852, 0x101, 0x6885, 0x201, 0xd84d, 0xdc6d, 0x101, 0x688e,
+ 0x101, 0x681f, 0x101, 0x6914, 0x101, 0x3b9d, 0x101, 0x6942,
+ 0x101, 0x69a3, 0x101, 0x69ea, 0x101, 0x6aa8, 0x201, 0xd84d,
+ 0xdea3, 0x101, 0x6adb, 0x101, 0x3c18, 0x101, 0x6b21, 0x201,
+ 0xd84e, 0xdca7, 0x101, 0x6b54, 0x101, 0x3c4e, 0x101, 0x6b72,
+ 0x101, 0x6b9f, 0x101, 0x6bba, 0x101, 0x6bbb, 0x201, 0xd84e,
+ 0xde8d, 0x201, 0xd847, 0xdd0b, 0x201, 0xd84e, 0xdefa, 0x101,
+ 0x6c4e, 0x201, 0xd84f, 0xdcbc, 0x101, 0x6cbf, 0x101, 0x6ccd,
+ 0x101, 0x6c67, 0x101, 0x6d16, 0x101, 0x6d3e, 0x101, 0x6d77,
+ 0x101, 0x6d41, 0x101, 0x6d69, 0x101, 0x6d78, 0x101, 0x6d85,
+ 0x201, 0xd84f, 0xdd1e, 0x101, 0x6d34, 0x101, 0x6e2f, 0x101,
+ 0x6e6e, 0x101, 0x3d33, 0x101, 0x6ecb, 0x101, 0x6ec7, 0x201,
+ 0xd84f, 0xded1, 0x101, 0x6df9, 0x101, 0x6f6e, 0x201, 0xd84f,
+ 0xdf5e, 0x201, 0xd84f, 0xdf8e, 0x101, 0x6fc6, 0x101, 0x7039,
+ 0x101, 0x701e, 0x101, 0x701b, 0x101, 0x3d96, 0x101, 0x704a,
+ 0x101, 0x707d, 0x101, 0x7077, 0x101, 0x70ad, 0x201, 0xd841,
+ 0xdd25, 0x101, 0x7145, 0x201, 0xd850, 0xde63, 0x101, 0x719c,
+ 0x201, 0xd850, 0xdfab, 0x101, 0x7228, 0x101, 0x7235, 0x101,
+ 0x7250, 0x201, 0xd851, 0xde08, 0x101, 0x7280, 0x101, 0x7295,
+ 0x201, 0xd851, 0xdf35, 0x201, 0xd852, 0xdc14, 0x101, 0x737a,
+ 0x101, 0x738b, 0x101, 0x3eac, 0x101, 0x73a5, 0x101, 0x3eb8,
+ 0x101, 0x3eb8, 0x101, 0x7447, 0x101, 0x745c, 0x101, 0x7471,
+ 0x101, 0x7485, 0x101, 0x74ca, 0x101, 0x3f1b, 0x101, 0x7524,
+ 0x201, 0xd853, 0xdc36, 0x101, 0x753e, 0x201, 0xd853, 0xdc92,
+ 0x101, 0x7570, 0x201, 0xd848, 0xdd9f, 0x101, 0x7610, 0x201,
+ 0xd853, 0xdfa1, 0x201, 0xd853, 0xdfb8, 0x201, 0xd854, 0xdc44,
+ 0x101, 0x3ffc, 0x101, 0x4008, 0x101, 0x76f4, 0x201, 0xd854,
+ 0xdcf3, 0x201, 0xd854, 0xdcf2, 0x201, 0xd854, 0xdd19, 0x201,
+ 0xd854, 0xdd33, 0x101, 0x771e, 0x101, 0x771f, 0x101, 0x771f,
+ 0x101, 0x774a, 0x101, 0x4039, 0x101, 0x778b, 0x101, 0x4046,
+ 0x101, 0x4096, 0x201, 0xd855, 0xdc1d, 0x101, 0x784e, 0x101,
+ 0x788c, 0x101, 0x78cc, 0x101, 0x40e3, 0x201, 0xd855, 0xde26,
+ 0x101, 0x7956, 0x201, 0xd855, 0xde9a, 0x201, 0xd855, 0xdec5,
+ 0x101, 0x798f, 0x101, 0x79eb, 0x101, 0x412f, 0x101, 0x7a40,
+ 0x101, 0x7a4a, 0x101, 0x7a4f, 0x201, 0xd856, 0xdd7c, 0x201,
+ 0xd856, 0xdea7, 0x201, 0xd856, 0xdea7, 0x101, 0x7aee, 0x101,
+ 0x4202, 0x201, 0xd856, 0xdfab, 0x101, 0x7bc6, 0x101, 0x7bc9,
+ 0x101, 0x4227, 0x201, 0xd857, 0xdc80, 0x101, 0x7cd2, 0x101,
+ 0x42a0, 0x101, 0x7ce8, 0x101, 0x7ce3, 0x101, 0x7d00, 0x201,
+ 0xd857, 0xdf86, 0x101, 0x7d63, 0x101, 0x4301, 0x101, 0x7dc7,
+ 0x101, 0x7e02, 0x101, 0x7e45, 0x101, 0x4334, 0x201, 0xd858,
+ 0xde28, 0x201, 0xd858, 0xde47, 0x101, 0x4359, 0x201, 0xd858,
+ 0xded9, 0x101, 0x7f7a, 0x201, 0xd858, 0xdf3e, 0x101, 0x7f95,
+ 0x101, 0x7ffa, 0x101, 0x8005, 0x201, 0xd859, 0xdcda, 0x201,
+ 0xd859, 0xdd23, 0x101, 0x8060, 0x201, 0xd859, 0xdda8, 0x101,
+ 0x8070, 0x201, 0xd84c, 0xdf5f, 0x101, 0x43d5, 0x101, 0x80b2,
+ 0x101, 0x8103, 0x101, 0x440b, 0x101, 0x813e, 0x101, 0x5ab5,
+ 0x201, 0xd859, 0xdfa7, 0x201, 0xd859, 0xdfb5, 0x201, 0xd84c,
+ 0xdf93, 0x201, 0xd84c, 0xdf9c, 0x101, 0x8201, 0x101, 0x8204,
+ 0x101, 0x8f9e, 0x101, 0x446b, 0x101, 0x8291, 0x101, 0x828b,
+ 0x101, 0x829d, 0x101, 0x52b3, 0x101, 0x82b1, 0x101, 0x82b3,
+ 0x101, 0x82bd, 0x101, 0x82e6, 0x201, 0xd85a, 0xdf3c, 0x101,
+ 0x82e5, 0x101, 0x831d, 0x101, 0x8363, 0x101, 0x83ad, 0x101,
+ 0x8323, 0x101, 0x83bd, 0x101, 0x83e7, 0x101, 0x8457, 0x101,
+ 0x8353, 0x101, 0x83ca, 0x101, 0x83cc, 0x101, 0x83dc, 0x201,
+ 0xd85b, 0xdc36, 0x201, 0xd85b, 0xdd6b, 0x201, 0xd85b, 0xdcd5,
+ 0x101, 0x452b, 0x101, 0x84f1, 0x101, 0x84f3, 0x101, 0x8516,
+ 0x201, 0xd85c, 0xdfca, 0x101, 0x8564, 0x201, 0xd85b, 0xdf2c,
+ 0x101, 0x455d, 0x101, 0x4561, 0x201, 0xd85b, 0xdfb1, 0x201,
+ 0xd85c, 0xdcd2, 0x101, 0x456b, 0x101, 0x8650, 0x101, 0x865c,
+ 0x101, 0x8667, 0x101, 0x8669, 0x101, 0x86a9, 0x101, 0x8688,
+ 0x101, 0x870e, 0x101, 0x86e2, 0x101, 0x8779, 0x101, 0x8728,
+ 0x101, 0x876b, 0x101, 0x8786, 0x101, 0x45d7, 0x101, 0x87e1,
+ 0x101, 0x8801, 0x101, 0x45f9, 0x101, 0x8860, 0x101, 0x8863,
+ 0x201, 0xd85d, 0xde67, 0x101, 0x88d7, 0x101, 0x88de, 0x101,
+ 0x4635, 0x101, 0x88fa, 0x101, 0x34bb, 0x201, 0xd85e, 0xdcae,
+ 0x201, 0xd85e, 0xdd66, 0x101, 0x46be, 0x101, 0x46c7, 0x101,
+ 0x8aa0, 0x101, 0x8aed, 0x101, 0x8b8a, 0x101, 0x8c55, 0x201,
+ 0xd85f, 0xdca8, 0x101, 0x8cab, 0x101, 0x8cc1, 0x101, 0x8d1b,
+ 0x101, 0x8d77, 0x201, 0xd85f, 0xdf2f, 0x201, 0xd842, 0xdc04,
+ 0x101, 0x8dcb, 0x101, 0x8dbc, 0x101, 0x8df0, 0x201, 0xd842,
+ 0xdcde, 0x101, 0x8ed4, 0x101, 0x8f38, 0x201, 0xd861, 0xddd2,
+ 0x201, 0xd861, 0xdded, 0x101, 0x9094, 0x101, 0x90f1, 0x101,
+ 0x9111, 0x201, 0xd861, 0xdf2e, 0x101, 0x911b, 0x101, 0x9238,
+ 0x101, 0x92d7, 0x101, 0x92d8, 0x101, 0x927c, 0x101, 0x93f9,
+ 0x101, 0x9415, 0x201, 0xd862, 0xdffa, 0x101, 0x958b, 0x101,
+ 0x4995, 0x101, 0x95b7, 0x201, 0xd863, 0xdd77, 0x101, 0x49e6,
+ 0x101, 0x96c3, 0x101, 0x5db2, 0x101, 0x9723, 0x201, 0xd864,
+ 0xdd45, 0x201, 0xd864, 0xde1a, 0x101, 0x4a6e, 0x101, 0x4a76,
+ 0x101, 0x97e0, 0x201, 0xd865, 0xdc0a, 0x101, 0x4ab2, 0x201,
+ 0xd865, 0xdc96, 0x101, 0x980b, 0x101, 0x980b, 0x101, 0x9829,
+ 0x201, 0xd865, 0xddb6, 0x101, 0x98e2, 0x101, 0x4b33, 0x101,
+ 0x9929, 0x101, 0x99a7, 0x101, 0x99c2, 0x101, 0x99fe, 0x101,
+ 0x4bce, 0x201, 0xd866, 0xdf30, 0x101, 0x9b12, 0x101, 0x9c40,
+ 0x101, 0x9cfd, 0x101, 0x4cce, 0x101, 0x4ced, 0x101, 0x9d67,
+ 0x201, 0xd868, 0xdcce, 0x101, 0x4cf8, 0x201, 0xd868, 0xdd05,
+ 0x201, 0xd868, 0xde0e, 0x201, 0xd868, 0xde91, 0x101, 0x9ebb,
+ 0x101, 0x4d56, 0x101, 0x9ef9, 0x101, 0x9efe, 0x101, 0x9f05,
+ 0x101, 0x9f0f, 0x101, 0x9f16, 0x101, 0x9f3b, 0x201, 0xd869,
+ 0xde00
};
static const unsigned short uc_ligature_trie[] = {
diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h
index be2f44f0c3..f3fb6ec1b0 100644
--- a/src/corelib/tools/qunicodetables_p.h
+++ b/src/corelib/tools/qunicodetables_p.h
@@ -37,7 +37,7 @@
**
****************************************************************************/
-/* This file is autogenerated from the Unicode 8.0 database. Do not edit */
+/* This file is autogenerated from the Unicode 10.0 database. Do not edit */
//
// W A R N I N G
@@ -59,7 +59,7 @@
QT_BEGIN_NAMESPACE
-#define UNICODE_DATA_VERSION QChar::Unicode_8_0
+#define UNICODE_DATA_VERSION QChar::Unicode_10_0
namespace QUnicodeTables {
@@ -80,10 +80,10 @@ struct Properties {
signed short caseFoldDiff : 15;
ushort unicodeVersion : 8; /* 5 used */
ushort nfQuickCheck : 8;
- ushort graphemeBreakClass : 4; /* 4 used */
- ushort wordBreakClass : 4; /* 4 used */
+ ushort graphemeBreakClass : 5; /* 5 used */
+ ushort wordBreakClass : 5; /* 5 used */
ushort sentenceBreakClass : 8; /* 4 used */
- ushort lineBreakClass : 8; /* 6 used */
+ ushort lineBreakClass : 6; /* 6 used */
ushort script : 8;
};
@@ -123,11 +123,12 @@ struct CasefoldTraits
};
enum GraphemeBreakClass {
- GraphemeBreak_Other,
+ GraphemeBreak_Any,
GraphemeBreak_CR,
GraphemeBreak_LF,
GraphemeBreak_Control,
GraphemeBreak_Extend,
+ GraphemeBreak_ZWJ,
GraphemeBreak_RegionalIndicator,
GraphemeBreak_Prepend,
GraphemeBreak_SpacingMark,
@@ -135,15 +136,22 @@ enum GraphemeBreakClass {
GraphemeBreak_V,
GraphemeBreak_T,
GraphemeBreak_LV,
- GraphemeBreak_LVT
+ GraphemeBreak_LVT,
+ Graphemebreak_E_Base,
+ Graphemebreak_E_Modifier,
+ Graphemebreak_Glue_After_Zwj,
+ Graphemebreak_E_Base_GAZ,
+ NumGraphemeBreakClasses,
};
enum WordBreakClass {
- WordBreak_Other,
+ WordBreak_Any,
WordBreak_CR,
WordBreak_LF,
WordBreak_Newline,
WordBreak_Extend,
+ WordBreak_ZWJ,
+ WordBreak_Format,
WordBreak_RegionalIndicator,
WordBreak_Katakana,
WordBreak_HebrewLetter,
@@ -154,11 +162,16 @@ enum WordBreakClass {
WordBreak_MidLetter,
WordBreak_MidNum,
WordBreak_Numeric,
- WordBreak_ExtendNumLet
+ WordBreak_ExtendNumLet,
+ WordBreak_E_Base,
+ WordBreak_E_Modifier,
+ WordBreak_Glue_After_Zwj,
+ WordBreak_E_Base_GAZ,
+ NumWordBreakClasses,
};
enum SentenceBreakClass {
- SentenceBreak_Other,
+ SentenceBreak_Any,
SentenceBreak_CR,
SentenceBreak_LF,
SentenceBreak_Sep,
@@ -171,7 +184,8 @@ enum SentenceBreakClass {
SentenceBreak_ATerm,
SentenceBreak_SContinue,
SentenceBreak_STerm,
- SentenceBreak_Close
+ SentenceBreak_Close,
+ NumSentenceBreakClasses
};
// see http://www.unicode.org/reports/tr14/tr14-30.html
@@ -183,8 +197,10 @@ enum LineBreakClass {
LineBreak_IN, LineBreak_HY, LineBreak_BA, LineBreak_BB, LineBreak_B2,
LineBreak_ZW, LineBreak_CM, LineBreak_WJ, LineBreak_H2, LineBreak_H3,
LineBreak_JL, LineBreak_JV, LineBreak_JT, LineBreak_RI, LineBreak_CB,
- LineBreak_SA, LineBreak_SG, LineBreak_SP, LineBreak_CR, LineBreak_LF,
- LineBreak_BK
+ LineBreak_EB, LineBreak_EM, LineBreak_ZWJ,
+ LineBreak_SA, LineBreak_SG, LineBreak_SP,
+ LineBreak_CR, LineBreak_LF, LineBreak_BK,
+ NumLineBreakClasses
};
Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) Q_DECL_NOTHROW;
diff --git a/src/corelib/tools/qunicodetools.cpp b/src/corelib/tools/qunicodetools.cpp
index ac19d6b6d1..c9d0868fef 100644
--- a/src/corelib/tools/qunicodetools.cpp
+++ b/src/corelib/tools/qunicodetools.cpp
@@ -55,27 +55,45 @@ namespace QUnicodeTools {
// -----------------------------------------------------------------------------------------------------
//
// The text boundaries determination algorithm.
-// See http://www.unicode.org/reports/tr29/tr29-27.html
+// See http://www.unicode.org/reports/tr29/tr29-31.html
//
// -----------------------------------------------------------------------------------------------------
namespace GB {
-static const uchar breakTable[QUnicodeTables::GraphemeBreak_LVT + 1][QUnicodeTables::GraphemeBreak_LVT + 1] = {
-// Other CR LF Control Extend RI Prepend S-Mark L V T LV LVT
- { true , true , true , true , false, true , true , false, true , true , true , true , true }, // Other
- { true , true , false, true , true , true , true , true , true , true , true , true , true }, // CR
- { true , true , true , true , true , true , true , true , true , true , true , true , true }, // LF
- { true , true , true , true , true , true , true , true , true , true , true , true , true }, // Control
- { true , true , true , true , false, true , true , false, true , true , true , true , true }, // Extend
- { true , true , true , true , false, false, true , false, true , true , true , true , true }, // RegionalIndicator
- { false, true , true , true , false, false, false, false, false, false, false, false, false }, // Prepend
- { true , true , true , true , false, true , true , false, true , true , true , true , true }, // SpacingMark
- { true , true , true , true , false, true , true , false, false, false, true , false, false }, // L
- { true , true , true , true , false, true , true , false, true , false, false, true , true }, // V
- { true , true , true , true , false, true , true , false, true , true , false, true , true }, // T
- { true , true , true , true , false, true , true , false, true , false, false, true , true }, // LV
- { true , true , true , true , false, true , true , false, true , true , false, true , true }, // LVT
+/*
+ * Most grapheme break rules can be implemented table driven, but rules GB10, GB12 and GB13 need a bit
+ * of special treatment.
+ */
+enum State : uchar {
+ Break,
+ Inside,
+ GB10,
+ GB10_2,
+ GB10_3,
+ GB13, // also covers GB12
+};
+
+static const State breakTable[QUnicodeTables::NumGraphemeBreakClasses][QUnicodeTables::NumGraphemeBreakClasses] = {
+// Any CR LF Control Extend ZWJ RI Prepend S-Mark L V T LV LVT E_B E_M GAZ EBG
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Any
+ { Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
+ { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
+ { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Control
+ { Break , Break , Break , Break , GB10_2, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , GB10_3, Break , Break }, // Extend
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Inside, Inside }, // ZWJ
+ { Break , Break , Break , Break , Inside, Inside, GB13 , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
+ { Inside, Break , Break , Break , Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside, Inside }, // Prepend
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SpacingMark
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Inside, Inside, Break , Inside, Inside, Break , Break , Break , Break }, // L
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Inside, Inside, Break , Break , Break , Break , Break , Break }, // V
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break }, // T
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Inside, Inside, Break , Break , Break , Break , Break , Break }, // LV
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break }, // LVT
+ { Break , Break , Break , Break , GB10 , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Inside, Break , Break }, // E_B
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // E_M
+ { Break , Break , Break , Break , Inside, Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Break , Break , Break }, // GAZ
+ { Break , Break , Break , Break , GB10 , Inside, Break , Break , Inside, Break , Break , Break , Break , Break , Break , Inside, Break , Break }, // EBG
};
} // namespace GB
@@ -83,6 +101,7 @@ static const uchar breakTable[QUnicodeTables::GraphemeBreak_LVT + 1][QUnicodeTab
static void getGraphemeBreaks(const ushort *string, quint32 len, QCharAttributes *attributes)
{
QUnicodeTables::GraphemeBreakClass lcls = QUnicodeTables::GraphemeBreak_LF; // to meet GB1
+ GB::State state = GB::Break; // only required to track some of the rules
for (quint32 i = 0; i != len; ++i) {
quint32 pos = i;
uint ucs4 = string[i];
@@ -97,8 +116,36 @@ static void getGraphemeBreaks(const ushort *string, quint32 len, QCharAttributes
const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::GraphemeBreakClass cls = (QUnicodeTables::GraphemeBreakClass) prop->graphemeBreakClass;
- if (Q_LIKELY(GB::breakTable[lcls][cls]))
+ switch (GB::breakTable[lcls][cls]) {
+ case GB::Break:
attributes[pos].graphemeBoundary = true;
+ state = GB::Break;
+ break;
+ case GB::Inside:
+ state = GB::Break;
+ break;
+ case GB::GB10:
+ state = GB::GB10;
+ break;
+ case GB::GB10_2:
+ if (state == GB::GB10 || state == GB::GB10_2)
+ state = GB::GB10_2;
+ else
+ state = GB::Break;
+ break;
+ case GB::GB10_3:
+ if (state != GB::GB10 && state != GB::GB10_2)
+ attributes[pos].graphemeBoundary = true;
+ state = GB::Break;
+ break;
+ case GB::GB13:
+ if (state != GB::GB13) {
+ state = GB::GB13;
+ } else {
+ attributes[pos].graphemeBoundary = true;
+ state = GB::Break;
+ }
+ }
lcls = cls;
}
@@ -116,24 +163,30 @@ enum Action {
LookupW
};
-static const uchar breakTable[QUnicodeTables::WordBreak_ExtendNumLet + 1][QUnicodeTables::WordBreak_ExtendNumLet + 1] = {
-// Other CR LF Newline Extend RI Katakana HLetter ALetter SQuote DQuote MidNumLet MidLetter MidNum Numeric ExtendNumLet
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Other
- { Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
- { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Newline
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Extend
- { Break , Break , Break , Break , NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
- { Break , Break , Break , Break , NoBreak, Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , NoBreak }, // Katakana
- { Break , Break , Break , Break , NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Lookup , LookupW, LookupW, Break , NoBreak, NoBreak }, // HebrewLetter
- { Break , Break , Break , Break , NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Break , LookupW, LookupW, Break , NoBreak, NoBreak }, // ALetter
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SingleQuote
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // DoubleQuote
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNumLet
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidLetter
- { Break , Break , Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNum
- { Break , Break , Break , Break , NoBreak, Break , Break , NoBreak, NoBreak, Lookup , Break , Lookup , Break , Lookup , NoBreak, NoBreak }, // Numeric
- { Break , Break , Break , Break , NoBreak, Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , NoBreak, NoBreak }, // ExtendNumLet
+static const uchar breakTable[QUnicodeTables::NumWordBreakClasses][QUnicodeTables::NumWordBreakClasses] = {
+// Any CR LF Newline Extend ZWJ Format RI Katakana HLetter ALetter SQuote DQuote MidNumLet MidLetter MidNum Numeric ExtNumLet E_Base E_Mod GAZ EBG
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Any
+ { Break , Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // CR
+ { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // LF
+ { Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Newline
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Extend
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, NoBreak }, // ZWJ
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // Format
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // RegionalIndicator
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break , Break , Break , Break }, // Katakana
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Lookup , LookupW, LookupW, Break , NoBreak, NoBreak, Break , Break , Break , Break }, // HebrewLetter
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, LookupW, Break , LookupW, LookupW, Break , NoBreak, NoBreak, Break , Break , Break , Break }, // ALetter
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // SingleQuote
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // DoubleQuote
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNumLet
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidLetter
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // MidNum
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , NoBreak, NoBreak, Lookup , Break , Lookup , Break , Lookup , NoBreak, NoBreak, Break , Break , Break , Break }, // Numeric
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , NoBreak, NoBreak, Break , Break , Break , Break }, // ExtendNumLet
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break , Break }, // E_Base
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // E_Mod
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break }, // GAZ
+ { Break , Break , Break , Break , NoBreak, NoBreak, NoBreak, Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , Break , NoBreak, Break , Break }, // EBG
};
} // namespace WB
@@ -176,9 +229,14 @@ static void getWordBreaks(const ushort *string, quint32 len, QCharAttributes *at
case WB::Break:
break;
case WB::NoBreak:
- if (Q_UNLIKELY(ncls == QUnicodeTables::WordBreak_Extend)) {
+ if (Q_UNLIKELY(ncls == QUnicodeTables::WordBreak_Extend || ncls == QUnicodeTables::WordBreak_ZWJ || ncls == QUnicodeTables::WordBreak_Format)) {
// WB4: X(Extend|Format)* -> X
- continue;
+ if (cls != QUnicodeTables::WordBreak_ZWJ) // WB3c
+ continue;
+ }
+ if (Q_UNLIKELY(cls == QUnicodeTables::WordBreak_RegionalIndicator)) {
+ // WB15/WB16: break between pairs of Regional indicator
+ ncls = QUnicodeTables::WordBreak_Any;
}
break;
case WB::Lookup:
@@ -196,7 +254,7 @@ static void getWordBreaks(const ushort *string, quint32 len, QCharAttributes *at
prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::WordBreakClass tcls = (QUnicodeTables::WordBreakClass) prop->wordBreakClass;
- if (Q_UNLIKELY(tcls == QUnicodeTables::WordBreak_Extend)) {
+ if (Q_UNLIKELY(tcls == QUnicodeTables::WordBreak_Extend || tcls == QUnicodeTables::WordBreak_ZWJ || tcls == QUnicodeTables::WordBreak_Format)) {
// WB4: X(Extend|Format)* -> X
continue;
}
@@ -265,8 +323,8 @@ enum State {
Lookup
};
-static const uchar breakTable[BAfter + 1][QUnicodeTables::SentenceBreak_Close + 1] = {
-// Other CR LF Sep Extend Sp Lower Upper OLetter Numeric ATerm SContinue STerm Close
+static const uchar breakTable[BAfter + 1][QUnicodeTables::NumSentenceBreakClasses] = {
+// Any CR LF Sep Extend Sp Lower Upper OLetter Numeric ATerm SContinue STerm Close
{ Initial, BAfterC, BAfter , BAfter , Initial, Initial, Lower , Upper , Initial, Initial, ATerm , Initial, STerm , Initial }, // Initial
{ Initial, BAfterC, BAfter , BAfter , Lower , Initial, Initial, Initial, Initial, Initial, LUATerm, Initial, STerm , Initial }, // Lower
{ Initial, BAfterC, BAfter , BAfter , Upper , Initial, Initial, Upper , Initial, Initial, LUATerm, STerm , STerm , Initial }, // Upper
@@ -319,7 +377,7 @@ static void getSentenceBreaks(const ushort *string, quint32 len, QCharAttributes
prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::SentenceBreakClass tcls = (QUnicodeTables::SentenceBreakClass) prop->sentenceBreakClass;
switch (tcls) {
- case QUnicodeTables::SentenceBreak_Other:
+ case QUnicodeTables::SentenceBreak_Any:
case QUnicodeTables::SentenceBreak_Extend:
case QUnicodeTables::SentenceBreak_Sp:
case QUnicodeTables::SentenceBreak_Numeric:
@@ -349,7 +407,7 @@ static void getSentenceBreaks(const ushort *string, quint32 len, QCharAttributes
// -----------------------------------------------------------------------------------------------------
//
// The line breaking algorithm.
-// See http://www.unicode.org/reports/tr14/tr14-35.html
+// See http://www.unicode.org/reports/tr14/tr14-39.html
//
// -----------------------------------------------------------------------------------------------------
@@ -441,38 +499,41 @@ enum Action {
ProhibitedBreakAfterHebrewPlusHyphen, HH = ProhibitedBreakAfterHebrewPlusHyphen
};
-static const uchar breakTable[QUnicodeTables::LineBreak_CB + 1][QUnicodeTables::LineBreak_CB + 1] = {
-/* OP CL CP QU GL NS EX SY IS PR PO NU AL HL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT RI CB */
-/* OP */ { PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, CP, PB, PB, PB, PB, PB, PB, PB, PB },
-/* CL */ { DB, PB, PB, IB, IB, PB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* CP */ { DB, PB, PB, IB, IB, PB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* QU */ { PB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB },
-/* GL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB },
-/* NS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* EX */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* SY */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* IS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* PR */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, IB, DB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, IB, DB, DB },
-/* PO */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* NU */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* AL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* HL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, CI, CI, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* ID */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* IN */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* HY */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, IB, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB },
-/* BA */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, HH, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB },
-/* BB */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, DB },
-/* B2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, PB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* ZW */ { DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
-/* CM */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB },
-/* WJ */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB },
-/* H2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB },
-/* H3 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB },
-/* JL */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, DB, DB, DB },
-/* JV */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB },
-/* JT */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB },
-/* RI */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, IB, DB },
-/* CB */ { DB, PB, PB, IB, IB, DB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB }
+static const uchar breakTable[QUnicodeTables::LineBreak_SA][QUnicodeTables::LineBreak_SA] = {
+/* OP CL CP QU GL NS EX SY IS PR PO NU AL HL ID IN HY BA BB B2 ZW CM WJ H2 H3 JL JV JT RI CB EB EM ZWJ*/
+/* OP */ { PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, CP, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PB },
+/* CL */ { DB, PB, PB, IB, IB, PB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* CP */ { DB, PB, PB, IB, IB, PB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* QU */ { PB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* GL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* NS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* EX */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* SY */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* IS */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* PR */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, IB, DB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, IB, DB, DB, IB, IB, IB },
+/* PO */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* NU */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* AL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* HL */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, DB, IB, CI, CI, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* ID */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* IN */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* HY */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, IB, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB, DB, DB, IB },
+/* BA */ { HH, PB, PB, IB, HH, IB, PB, PB, PB, HH, HH, HH, HH, HH, HH, HH, IB, IB, HH, HH, PB, CI, PB, HH, HH, HH, HH, HH, HH, DB, DB, DB, IB },
+/* BB */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, DB, IB, IB, IB },
+/* B2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, PB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* ZW */ { DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB },
+/* CM */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, IB, IB, IB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* WJ */ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB, PB, CI, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, IB },
+/* H2 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB, DB, DB, IB },
+/* H3 */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB, DB, DB, IB },
+/* JL */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, IB, IB, IB, IB, DB, DB, DB, DB, DB, IB },
+/* JV */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, IB, IB, DB, DB, DB, DB, IB },
+/* JT */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, IB, DB, DB, DB, DB, IB },
+/* RI */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, IB, DB, DB, DB, IB },
+/* CB */ { DB, PB, PB, IB, IB, DB, PB, PB, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* EB */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, IB, IB },
+/* EM */ { DB, PB, PB, IB, IB, IB, PB, PB, PB, DB, IB, DB, DB, DB, DB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, DB, DB, IB },
+/* ZWJ*/ { IB, PB, PB, IB, IB, IB, PB, PB, PB, IB, IB, IB, IB, IB, IB, IB, IB, IB, DB, DB, PB, CI, PB, DB, DB, DB, DB, DB, DB, DB, IB, IB, IB }
};
// The following line break classes are not treated by the pair table
@@ -501,6 +562,7 @@ static void getLineBreaks(const ushort *string, quint32 len, QCharAttributes *at
const QUnicodeTables::Properties *prop = QUnicodeTables::properties(ucs4);
QUnicodeTables::LineBreakClass ncls = (QUnicodeTables::LineBreakClass) prop->lineBreakClass;
+ QUnicodeTables::LineBreakClass tcls;
if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_SA)) {
// LB1: resolve SA to AL, except of those that have Category Mn or Mc be resolved to CM
@@ -508,14 +570,39 @@ static void getLineBreaks(const ushort *string, quint32 len, QCharAttributes *at
if (FLAG(prop->category) & test)
ncls = QUnicodeTables::LineBreak_CM;
}
- if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_CM)) {
- // LB10: treat CM that follows SP, BK, CR, LF, NL, or ZW as AL
- if (lcls == QUnicodeTables::LineBreak_ZW || lcls >= QUnicodeTables::LineBreak_SP)
- ncls = QUnicodeTables::LineBreak_AL;
+
+ if (Q_UNLIKELY(lcls >= QUnicodeTables::LineBreak_CR)) {
+ // LB4: BK!, LB5: (CRxLF|CR|LF|NL)!
+ if (lcls > QUnicodeTables::LineBreak_CR || ncls != QUnicodeTables::LineBreak_LF)
+ attributes[pos].lineBreak = attributes[pos].mandatoryBreak = true;
+ if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_CM || ncls == QUnicodeTables::LineBreak_ZWJ)) {
+ cls = QUnicodeTables::LineBreak_AL;
+ goto next_no_cls_update;
+ }
+ goto next;
}
- if (Q_LIKELY(ncls != QUnicodeTables::LineBreak_CM)) {
- // LB25: do not break lines inside numbers
+ if (Q_UNLIKELY(ncls >= QUnicodeTables::LineBreak_SP)) {
+ if (ncls > QUnicodeTables::LineBreak_SP)
+ goto next; // LB6: x(BK|CR|LF|NL)
+ goto next_no_cls_update; // LB7: xSP
+ }
+
+ if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_CM || ncls == QUnicodeTables::LineBreak_ZWJ)) {
+ // LB9: treat CM that don't follows SP, BK, CR, LF, NL, or ZW as X
+ if (lcls != QUnicodeTables::LineBreak_ZW && lcls < QUnicodeTables::LineBreak_SP)
+ // don't update anything
+ goto next_no_cls_update;
+ }
+
+ if (Q_UNLIKELY(lcls == QUnicodeTables::LineBreak_ZWJ)) {
+ // LB8a: ZWJ x (ID | EB | EM)
+ if (ncls == QUnicodeTables::LineBreak_ID || ncls == QUnicodeTables::LineBreak_EB || ncls == QUnicodeTables::LineBreak_EM)
+ goto next;
+ }
+
+ // LB25: do not break lines inside numbers
+ {
LB::NS::Class necur = LB::NS::toClass(ncls, (QChar::Category)prop->category);
switch (LB::NS::actionTable[nelast][necur]) {
case LB::NS::Break:
@@ -535,25 +622,22 @@ static void getLineBreaks(const ushort *string, quint32 len, QCharAttributes *at
}
}
- if (Q_UNLIKELY(lcls >= QUnicodeTables::LineBreak_CR)) {
- // LB4: BK!, LB5: (CRxLF|CR|LF|NL)!
- if (lcls > QUnicodeTables::LineBreak_CR || ncls != QUnicodeTables::LineBreak_LF)
- attributes[pos].lineBreak = attributes[pos].mandatoryBreak = true;
+ if (Q_UNLIKELY(ncls == QUnicodeTables::LineBreak_RI && lcls == QUnicodeTables::LineBreak_RI)) {
+ // LB30a
+ ncls = QUnicodeTables::LineBreak_SP;
goto next;
}
- if (Q_UNLIKELY(ncls >= QUnicodeTables::LineBreak_SP)) {
- if (ncls > QUnicodeTables::LineBreak_SP)
- goto next; // LB6: x(BK|CR|LF|NL)
- goto next_no_cls_update; // LB7: xSP
- }
-
// for South East Asian chars that require a complex analysis, the Unicode
// standard recommends to treat them as AL. tailoring that do dictionary analysis can override
if (Q_UNLIKELY(cls >= QUnicodeTables::LineBreak_SA))
cls = QUnicodeTables::LineBreak_AL;
- switch (LB::breakTable[cls][ncls < QUnicodeTables::LineBreak_SA ? ncls : QUnicodeTables::LineBreak_AL]) {
+ tcls = cls;
+ if (tcls == QUnicodeTables::LineBreak_CM)
+ // LB10
+ tcls = QUnicodeTables::LineBreak_AL;
+ switch (LB::breakTable[tcls][ncls < QUnicodeTables::LineBreak_SA ? ncls : QUnicodeTables::LineBreak_AL]) {
case LB::DirectBreak:
attributes[pos].lineBreak = true;
break;
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h
index 3112ebe866..d0088471c7 100644
--- a/src/corelib/tools/qvarlengtharray.h
+++ b/src/corelib/tools/qvarlengtharray.h
@@ -178,7 +178,9 @@ public:
inline QVarLengthArray<T, Prealloc> &operator+=(const T &t)
{ append(t); return *this; }
+ void prepend(T &&t);
void prepend(const T &t);
+ void insert(int i, T &&t);
void insert(int i, const T &t);
void insert(int i, int n, const T &t);
void replace(int i, const T &t);
@@ -218,6 +220,7 @@ public:
const_reverse_iterator crbegin() const { return const_reverse_iterator(end()); }
const_reverse_iterator crend() const { return const_reverse_iterator(begin()); }
iterator insert(const_iterator before, int n, const T &x);
+ iterator insert(const_iterator before, T &&x);
inline iterator insert(const_iterator before, const T &x) { return insert(before, 1, x); }
iterator erase(const_iterator begin, const_iterator end);
inline iterator erase(const_iterator pos) { return erase(pos, pos+1); }
@@ -373,9 +376,9 @@ Q_OUTOFLINE_TEMPLATE void QVarLengthArray<T, Prealloc>::realloc(int asize, int a
s = 0;
if (!QTypeInfoQuery<T>::isRelocatable) {
QT_TRY {
- // copy all the old elements
+ // move all the old elements
while (s < copySize) {
- new (ptr+s) T(*(oldPtr+s));
+ new (ptr+s) T(std::move(*(oldPtr+s)));
(oldPtr+s)->~T();
s++;
}
@@ -427,6 +430,10 @@ Q_OUTOFLINE_TEMPLATE T QVarLengthArray<T, Prealloc>::value(int i, const T &defau
}
template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::insert(int i, T &&t)
+{ Q_ASSERT_X(i >= 0 && i <= s, "QVarLengthArray::insert", "index out of range");
+ insert(cbegin() + i, std::move(t)); }
+template <class T, int Prealloc>
inline void QVarLengthArray<T, Prealloc>::insert(int i, const T &t)
{ Q_ASSERT_X(i >= 0 && i <= s, "QVarLengthArray::insert", "index out of range");
insert(begin() + i, 1, t); }
@@ -443,6 +450,9 @@ inline void QVarLengthArray<T, Prealloc>::remove(int i)
{ Q_ASSERT_X(i >= 0 && i < s, "QVarLengthArray::remove", "index out of range");
erase(begin() + i, begin() + i + 1); }
template <class T, int Prealloc>
+inline void QVarLengthArray<T, Prealloc>::prepend(T &&t)
+{ insert(cbegin(), std::move(t)); }
+template <class T, int Prealloc>
inline void QVarLengthArray<T, Prealloc>::prepend(const T &t)
{ insert(begin(), 1, t); }
@@ -454,6 +464,34 @@ inline void QVarLengthArray<T, Prealloc>::replace(int i, const T &t)
data()[i] = copy;
}
+template <class T, int Prealloc>
+Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, T &&t)
+{
+ Q_ASSERT_X(isValidIterator(before), "QVarLengthArray::insert", "The specified const_iterator argument 'before' is invalid");
+
+ int offset = int(before - ptr);
+ reserve(s + 1);
+ if (!QTypeInfo<T>::isRelocatable) {
+ T *b = ptr + offset;
+ T *i = ptr + s;
+ T *j = i + 1;
+ // The new end-element needs to be constructed, the rest must be move assigned
+ if (i != b) {
+ new (--j) T(std::move(*--i));
+ while (i != b)
+ *--j = std::move(*--i);
+ *b = std::move(t);
+ } else {
+ new (b) T(std::move(t));
+ }
+ } else {
+ T *b = ptr + offset;
+ memmove(b + 1, b, (s - offset) * sizeof(T));
+ new (b) T(std::move(t));
+ }
+ s += 1;
+ return ptr + offset;
+}
template <class T, int Prealloc>
Q_OUTOFLINE_TEMPLATE typename QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, size_type n, const T &t)
diff --git a/src/corelib/tools/qvarlengtharray.qdoc b/src/corelib/tools/qvarlengtharray.qdoc
index be2bdeda07..336f2afaca 100644
--- a/src/corelib/tools/qvarlengtharray.qdoc
+++ b/src/corelib/tools/qvarlengtharray.qdoc
@@ -90,7 +90,7 @@
\sa QVector, QList, QLinkedList
*/
-/*! \fn QVarLengthArray::QVarLengthArray(int size)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::QVarLengthArray(int size)
Constructs an array with an initial size of \a size elements.
@@ -101,7 +101,7 @@
*/
-/*! \fn QVarLengthArray::QVarLengthArray(std::initializer_list<T> args)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::QVarLengthArray(std::initializer_list<T> args)
\since 5.5
Constructs an array from the std::initializer_list given by \a args.
@@ -111,26 +111,26 @@
*/
-/*! \fn QVarLengthArray::~QVarLengthArray()
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::~QVarLengthArray()
Destroys the array.
*/
-/*! \fn int QVarLengthArray::size() const
+/*! \fn template<class T, int Prealloc> int QVarLengthArray<T, Prealloc>::size() const
Returns the number of elements in the array.
\sa isEmpty(), resize()
*/
-/*! \fn int QVarLengthArray::count() const
+/*! \fn template<class T, int Prealloc> int QVarLengthArray<T, Prealloc>::count() const
Same as size().
\sa isEmpty(), resize()
*/
-/*! \fn int QVarLengthArray::length() const
+/*! \fn template<class T, int Prealloc> int QVarLengthArray<T, Prealloc>::length() const
\since 5.0
Same as size().
@@ -138,7 +138,7 @@
\sa isEmpty(), resize()
*/
-/*! \fn T& QVarLengthArray::first()
+/*! \fn template<class T, int Prealloc> T& QVarLengthArray<T, Prealloc>::first()
Returns a reference to the first item in the array. The array must
not be empty. If the array can be empty, check isEmpty() before
@@ -147,24 +147,24 @@
\sa last(), isEmpty()
*/
-/*! \fn const T& QVarLengthArray::first() const
+/*! \fn template<class T, int Prealloc> const T& QVarLengthArray<T, Prealloc>::first() const
\overload
*/
-/*! \fn T& QVarLengthArray::front()
+/*! \fn template<class T, int Prealloc> T& QVarLengthArray<T, Prealloc>::front()
\since 5.0
Same as first(). Provided for STL-compatibility.
*/
-/*! \fn const T& QVarLengthArray::front() const
+/*! \fn template<class T, int Prealloc> const T& QVarLengthArray<T, Prealloc>::front() const
\since 5.0
\overload
*/
-/*! \fn T& QVarLengthArray::last()
+/*! \fn template<class T, int Prealloc> T& QVarLengthArray<T, Prealloc>::last()
Returns a reference to the last item in the array. The array must
not be empty. If the array can be empty, check isEmpty() before
@@ -173,37 +173,37 @@
\sa first(), isEmpty()
*/
-/*! \fn const T& QVarLengthArray::last() const
+/*! \fn template<class T, int Prealloc> const T& QVarLengthArray<T, Prealloc>::last() const
\overload
*/
-/*! \fn T& QVarLengthArray::back()
+/*! \fn template<class T, int Prealloc> T& QVarLengthArray<T, Prealloc>::back()
\since 5.0
Same as last(). Provided for STL-compatibility.
*/
-/*! \fn const T& QVarLengthArray::back() const
+/*! \fn template<class T, int Prealloc> const T& QVarLengthArray<T, Prealloc>::back() const
\since 5.0
\overload
*/
-/*! \fn void QVarLengthArray::shrink_to_fit()
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::shrink_to_fit()
\since 5.10
Same as squeeze(). Provided for STL-compatibility.
*/
-/*! \fn bool QVarLengthArray::isEmpty() const
+/*! \fn template<class T, int Prealloc> bool QVarLengthArray<T, Prealloc>::isEmpty() const
Returns \c true if the array has size 0; otherwise returns \c false.
\sa size(), resize()
*/
-/*! \fn bool QVarLengthArray::empty() const
+/*! \fn template<class T, int Prealloc> bool QVarLengthArray<T, Prealloc>::empty() const
\since 5.0
Returns \c true if the array has size 0; otherwise returns \c false.
@@ -211,14 +211,14 @@
Same as isEmpty(). Provided for STL-compatibility.
*/
-/*! \fn void QVarLengthArray::clear()
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::clear()
Removes all the elements from the array.
Same as resize(0).
*/
-/*! \fn void QVarLengthArray::resize(int size)
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::resize(int size)
Sets the size of the array to \a size. If \a size is greater than
the current size, elements are added to the end. If \a size is
@@ -232,7 +232,7 @@
\sa size(), squeeze()
*/
-/*! \fn int QVarLengthArray::capacity() const
+/*! \fn template<class T, int Prealloc> int QVarLengthArray<T, Prealloc>::capacity() const
Returns the maximum number of elements that can be stored in the
array without forcing a reallocation.
@@ -245,7 +245,7 @@
\sa reserve(), squeeze()
*/
-/*! \fn void QVarLengthArray::reserve(int size)
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::reserve(int size)
Attempts to allocate memory for at least \a size elements. If you
know in advance how large the array can get, you can call this
@@ -262,7 +262,7 @@
\sa capacity(), squeeze()
*/
-/*! \fn void QVarLengthArray::squeeze()
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::squeeze()
\since 5.1
Releases any memory not required to store the items.
@@ -276,7 +276,7 @@
\sa reserve(), capacity(), resize()
*/
-/*! \fn T &QVarLengthArray::operator[](int i)
+/*! \fn template<class T, int Prealloc> T &QVarLengthArray<T, Prealloc>::operator[](int i)
Returns a reference to the item at index position \a i.
@@ -286,14 +286,14 @@
\sa data(), at()
*/
-/*! \fn const T &QVarLengthArray::operator[](int i) const
+/*! \fn template<class T, int Prealloc> const T &QVarLengthArray<T, Prealloc>::operator[](int i) const
\overload
*/
/*!
- \fn void QVarLengthArray::append(const T &t)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::append(const T &t)
Appends item \a t to the array, extending the array if necessary.
@@ -301,7 +301,7 @@
*/
/*!
- \fn void QVarLengthArray::push_back(const T &t)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::push_back(const T &t)
\since 5.0
Appends item \a t to the array, extending the array if necessary.
@@ -309,7 +309,7 @@
*/
/*!
- \fn void QVarLengthArray::append(T &&t)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::append(T &&t)
\overload append
\since 5.9
@@ -323,7 +323,7 @@
*/
/*!
- \fn void QVarLengthArray::push_back(T &&t)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::push_back(T &&t)
\overload push_back
\since 5.9
@@ -337,7 +337,7 @@
*/
/*!
- \fn inline void QVarLengthArray::removeLast()
+ \fn template<class T, int Prealloc> inline void QVarLengthArray<T, Prealloc>::removeLast()
\since 4.5
Decreases the size of the array by one. The allocated size is not changed.
@@ -346,20 +346,20 @@
*/
/*!
- \fn void QVarLengthArray::pop_back()
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::pop_back()
\since 5.0
Same as removeLast(). Provided for STL-compatibility.
*/
/*!
- \fn void QVarLengthArray::append(const T *buf, int size)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::append(const T *buf, int size)
Appends \a size amount of items referenced by \a buf to this array.
*/
-/*! \fn T *QVarLengthArray::data()
+/*! \fn template<class T, int Prealloc> T *QVarLengthArray<T, Prealloc>::data()
Returns a pointer to the data stored in the array. The pointer can
be used to access and modify the items in the array.
@@ -375,12 +375,12 @@
\sa constData(), operator[]()
*/
-/*! \fn const T *QVarLengthArray::data() const
+/*! \fn template<class T, int Prealloc> const T *QVarLengthArray<T, Prealloc>::data() const
\overload
*/
-/*! \fn const T *QVarLengthArray::constData() const
+/*! \fn template<class T, int Prealloc> const T *QVarLengthArray<T, Prealloc>::constData() const
Returns a const pointer to the data stored in the array. The
pointer can be used to access the items in the array. The
@@ -392,11 +392,11 @@
\sa data(), operator[]()
*/
-/*! \fn QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(const QVarLengthArray<T, Prealloc> &other)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc> &QVarLengthArray<T, Prealloc>::operator=(const QVarLengthArray<T, Prealloc> &other)
Assigns \a other to this array and returns a reference to this array.
*/
-/*! \fn QVarLengthArray<T, Prealloc> &QVarLengthArray::operator=(std::initializer_list<T> list)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc> &QVarLengthArray<T, Prealloc>::operator=(std::initializer_list<T> list)
\since 5.5
Assigns the values of \a list to this array, and returns a reference to this array.
@@ -405,11 +405,11 @@
lists.
*/
-/*! \fn QVarLengthArray::QVarLengthArray(const QVarLengthArray<T, Prealloc> &other)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::QVarLengthArray(const QVarLengthArray<T, Prealloc> &other)
Constructs a copy of \a other.
*/
-/*! \fn const T &QVarLengthArray::at(int i) const
+/*! \fn template<class T, int Prealloc> const T &QVarLengthArray<T, Prealloc>::at(int i) const
Returns a reference to the item at index position \a i.
@@ -419,7 +419,7 @@
\sa value(), operator[]()
*/
-/*! \fn T QVarLengthArray::value(int i) const
+/*! \fn template<class T, int Prealloc> T QVarLengthArray<T, Prealloc>::value(int i) const
Returns the value at index position \a i.
@@ -431,7 +431,7 @@
\sa at(), operator[]()
*/
-/*! \fn T QVarLengthArray::value(int i, const T &defaultValue) const
+/*! \fn template<class T, int Prealloc> T QVarLengthArray<T, Prealloc>::value(int i, const T &defaultValue) const
\overload
@@ -516,7 +516,9 @@
Typedef for \c{std::reverse_iterator<T*>}. Provided for STL compatibility.
*/
-/*! \fn void QVarLengthArray::prepend(const T &value)
+/*!
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::prepend(const T &value)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::prepend(T &&value)
\since 4.8
Inserts \a value at the beginning of the array.
@@ -533,7 +535,7 @@
\sa append(), insert()
*/
-/*! \fn void QVarLengthArray::replace(int i, const T &value)
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::replace(int i, const T &value)
\since 4.8
Replaces the item at index position \a i with \a value.
@@ -544,7 +546,7 @@
\sa operator[](), remove()
*/
-/*! \fn void QVarLengthArray::remove(int i)
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::remove(int i)
\overload
\since 4.8
@@ -554,7 +556,7 @@
\sa insert(), replace()
*/
-/*! \fn void QVarLengthArray::remove(int i, int count)
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::remove(int i, int count)
\overload
\since 4.8
@@ -565,7 +567,7 @@
\sa insert(), replace()
*/
-/*! \fn QVarLengthArray::iterator QVarLengthArray::begin()
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::begin()
\since 4.8
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
@@ -574,12 +576,12 @@
\sa constBegin(), end()
*/
-/*! \fn QVarLengthArray::const_iterator QVarLengthArray::begin() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray<T, Prealloc>::begin() const
\since 4.8
\overload
*/
-/*! \fn QVarLengthArray::const_iterator QVarLengthArray::cbegin() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray<T, Prealloc>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -588,7 +590,7 @@
\sa begin(), cend()
*/
-/*! \fn QVarLengthArray::const_iterator QVarLengthArray::constBegin() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray<T, Prealloc>::constBegin() const
\since 4.8
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -597,7 +599,7 @@
\sa begin(), constEnd()
*/
-/*! \fn QVarLengthArray::iterator QVarLengthArray::end()
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::end()
\since 4.8
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
@@ -606,13 +608,13 @@
\sa begin(), constEnd()
*/
-/*! \fn QVarLengthArray::const_iterator QVarLengthArray::end() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray<T, Prealloc>::end() const
\since 4.8
\overload
*/
-/*! \fn QVarLengthArray::const_iterator QVarLengthArray::cend() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray<T, Prealloc>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -621,7 +623,7 @@
\sa cbegin(), end()
*/
-/*! \fn QVarLengthArray::const_iterator QVarLengthArray::constEnd() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_iterator QVarLengthArray<T, Prealloc>::constEnd() const
\since 4.8
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -630,7 +632,7 @@
\sa constBegin(), end()
*/
-/*! \fn QVarLengthArray::reverse_iterator QVarLengthArray::rbegin()
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::reverse_iterator QVarLengthArray<T, Prealloc>::rbegin()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -639,12 +641,12 @@
\sa begin(), crbegin(), rend()
*/
-/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::rbegin() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray<T, Prealloc>::rbegin() const
\since 5.6
\overload
*/
-/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::crbegin() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray<T, Prealloc>::crbegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -653,7 +655,7 @@
\sa begin(), rbegin(), rend()
*/
-/*! \fn QVarLengthArray::reverse_iterator QVarLengthArray::rend()
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::reverse_iterator QVarLengthArray<T, Prealloc>::rend()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
@@ -662,12 +664,12 @@
\sa end(), crend(), rbegin()
*/
-/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::rend() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray<T, Prealloc>::rend() const
\since 5.6
\overload
*/
-/*! \fn QVarLengthArray::const_reverse_iterator QVarLengthArray::crend() const
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::const_reverse_iterator QVarLengthArray<T, Prealloc>::crend() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
@@ -676,7 +678,7 @@
\sa end(), rend(), rbegin()
*/
-/*! \fn QVarLengthArray::iterator QVarLengthArray::erase(const_iterator pos)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::erase(const_iterator pos)
\since 4.8
Removes the item pointed to by the iterator \a pos from the
@@ -686,7 +688,7 @@
\sa insert(), remove()
*/
-/*! \fn QVarLengthArray::iterator QVarLengthArray::erase(const_iterator begin, const_iterator end)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::erase(const_iterator begin, const_iterator end)
\overload
\since 4.8
@@ -696,7 +698,9 @@
before the call.
*/
-/*! \fn void QVarLengthArray::insert(int i, const T &value)
+/*!
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::insert(int i, const T &value)
+ \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::insert(int i, T &&value)
\since 4.8
Inserts \a value at index position \a i in the array. If \a i is
@@ -712,7 +716,7 @@
\sa remove()
*/
-/*! \fn void QVarLengthArray::insert(int i, int count, const T &value)
+/*! \fn template<class T, int Prealloc> void QVarLengthArray<T, Prealloc>::insert(int i, int count, const T &value)
\overload
\since 4.8
@@ -721,7 +725,8 @@
vector.
*/
-/*! \fn QVarLengthArray::iterator QVarLengthArray::insert(const_iterator before, const T &value)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, const T &value)
+ \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, T &&value)
\overload
\since 4.8
@@ -730,7 +735,7 @@
\a before. Returns an iterator pointing at the inserted item.
*/
-/*! \fn QVarLengthArray::iterator QVarLengthArray::insert(const_iterator before, int count, const T &value)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc>::iterator QVarLengthArray<T, Prealloc>::insert(const_iterator before, int count, const T &value)
\since 4.8
Inserts \a count copies of \a value in front of the item pointed to
@@ -740,7 +745,7 @@
-/*! \fn bool operator==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
+/*! \fn template<class T, int Prealloc1, int Prealloc2> bool operator==(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
\relates QVarLengthArray
\since 4.8
@@ -755,7 +760,7 @@
\sa operator!=()
*/
-/*! \fn bool operator!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
+/*! \fn template<typename T, int Prealloc1, int Prealloc2> bool operator!=(const QVarLengthArray<T, Prealloc1> &left, const QVarLengthArray<T, Prealloc2> &right)
\relates QVarLengthArray
\since 4.8
@@ -770,7 +775,7 @@
\sa operator==()
*/
-/*! \fn bool operator<(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+/*! \fn template<typename T, int Prealloc1, int Prealloc2> bool operator<(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
\since 5.6
\relates QVarLengthArray
@@ -782,7 +787,7 @@
of \c operator<().
*/
-/*! \fn bool operator<=(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+/*! \fn template<typename T, int Prealloc1, int Prealloc2> bool operator<=(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
\since 5.6
\relates QVarLengthArray
@@ -794,7 +799,7 @@
of \c operator<().
*/
-/*! \fn bool operator>(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+/*! \fn template<typename T, int Prealloc1, int Prealloc2> bool operator>(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
\since 5.6
\relates QVarLengthArray
@@ -806,7 +811,7 @@
of \c operator<().
*/
-/*! \fn bool operator>=(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
+/*! \fn template<typename T, int Prealloc1, int Prealloc2> bool operator>=(const QVarLengthArray<T,Prealloc1> &lhs, const QVarLengthArray<T,Prealloc2> &rhs)
\since 5.6
\relates QVarLengthArray
@@ -818,7 +823,7 @@
of \c operator<().
*/
-/*! \fn QVarLengthArray &QVarLengthArray::operator<<(const T &value)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc> &QVarLengthArray<T, Prealloc>::operator<<(const T &value)
\since 4.8
Appends \a value to the array and returns a reference to this
@@ -827,7 +832,7 @@
\sa append(), operator+=()
*/
-/*! \fn QVarLengthArray &QVarLengthArray::operator+=(const T &value)
+/*! \fn template<class T, int Prealloc> QVarLengthArray<T, Prealloc> &QVarLengthArray<T, Prealloc>::operator+=(const T &value)
\since 4.8
Appends \a value to the array and returns a reference to this vector.
@@ -835,7 +840,7 @@
\sa append(), operator<<()
*/
-/*! \fn int QVarLengthArray::indexOf(const T &value, int from = 0) const
+/*! \fn template<class T, int Prealloc> int QVarLengthArray<T, Prealloc>::indexOf(const T &value, int from = 0) const
\since 5.3
Returns the index position of the first occurrence of \a value in
@@ -848,7 +853,7 @@
\sa lastIndexOf(), contains()
*/
-/*! \fn int QVarLengthArray::lastIndexOf(const T &value, int from = -1) const
+/*! \fn template<class T, int Prealloc> int QVarLengthArray<T, Prealloc>::lastIndexOf(const T &value, int from = -1) const
\since 5.3
Returns the index position of the last occurrence of the value \a
@@ -862,7 +867,7 @@
\sa indexOf(), contains()
*/
-/*! \fn bool QVarLengthArray::contains(const T &value) const
+/*! \fn template<class T, int Prealloc> bool QVarLengthArray<T, Prealloc>::contains(const T &value) const
\since 5.3
Returns \c true if the array contains an occurrence of \a value;
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 3a3d416775..9a6e67cc0b 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -59,8 +59,6 @@
QT_BEGIN_NAMESPACE
-class QRegion;
-
template <typename T>
class QVector
{
@@ -74,7 +72,7 @@ public:
inline QVector(const QVector<T> &v);
inline ~QVector() { if (!d->ref.deref()) freeData(d); }
QVector<T> &operator=(const QVector<T> &v);
-#ifdef Q_COMPILER_RVALUE_REFS
+#if defined(Q_COMPILER_RVALUE_REFS) || defined(Q_CLANG_QDOC)
QVector(QVector<T> &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Data::sharedNull(); }
QVector<T> &operator=(QVector<T> &&other) Q_DECL_NOTHROW
{ QVector moved(std::move(other)); swap(moved); return *this; }
@@ -135,11 +133,13 @@ public:
T &operator[](int i);
const T &operator[](int i) const;
void append(const T &t);
-#ifdef Q_COMPILER_RVALUE_REFS
+#if defined(Q_COMPILER_RVALUE_REFS) || defined(Q_CLANG_QDOC)
void append(T &&t);
#endif
inline void append(const QVector<T> &l) { *this += l; }
+ void prepend(T &&t);
void prepend(const T &t);
+ void insert(int i, T &&t);
void insert(int i, const T &t);
void insert(int i, int n, const T &t);
void replace(int i, const T &t);
@@ -201,7 +201,7 @@ public:
typedef typename Data::const_iterator const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-#if !defined(QT_STRICT_ITERATORS) || defined(Q_QDOC)
+#if !defined(QT_STRICT_ITERATORS) || defined(Q_CLANG_QDOC)
inline iterator begin() { detach(); return d->begin(); }
inline const_iterator begin() const Q_DECL_NOTHROW { return d->constBegin(); }
inline const_iterator cbegin() const Q_DECL_NOTHROW { return d->constBegin(); }
@@ -228,6 +228,7 @@ public:
const_reverse_iterator crend() const Q_DECL_NOTHROW { return const_reverse_iterator(begin()); }
iterator insert(iterator before, int n, const T &x);
inline iterator insert(iterator before, const T &x) { return insert(before, 1, x); }
+ inline iterator insert(iterator before, T &&x);
iterator erase(iterator begin, iterator end);
inline iterator erase(iterator pos) { return erase(pos, pos+1); }
@@ -257,8 +258,9 @@ public:
typedef const_iterator ConstIterator;
typedef int size_type;
inline void push_back(const T &t) { append(t); }
-#ifdef Q_COMPILER_RVALUE_REFS
+#if defined(Q_COMPILER_RVALUE_REFS) || defined(Q_CLANG_QDOC)
void push_back(T &&t) { append(std::move(t)); }
+ void push_front(T &&t) { prepend(std::move(t)); }
#endif
inline void push_front(const T &t) { prepend(t); }
void pop_back() { removeLast(); }
@@ -291,8 +293,6 @@ public:
inline std::vector<T> toStdVector() const
{ return std::vector<T>(d->begin(), d->end()); }
private:
- friend class QRegion; // Optimization for QRegion::rects()
-
// ### Qt6: remove const from int parameters
void reallocData(const int size, const int alloc, QArrayData::AllocationOptions options = QArrayData::Default);
void reallocData(const int sz) { reallocData(sz, d->alloc); }
@@ -440,6 +440,10 @@ inline void QVector<T>::insert(int i, int n, const T &t)
{ Q_ASSERT_X(i >= 0 && i <= d->size, "QVector<T>::insert", "index out of range");
insert(begin() + i, n, t); }
template <typename T>
+inline void QVector<T>::insert(int i, T &&t)
+{ Q_ASSERT_X(i >= 0 && i <= d->size, "QVector<T>::insert", "index out of range");
+ insert(begin() + i, std::move(t)); }
+template <typename T>
inline void QVector<T>::remove(int i, int n)
{ Q_ASSERT_X(i >= 0 && n >= 0 && i + n <= d->size, "QVector<T>::remove", "index out of range");
erase(d->begin() + i, d->begin() + i + n); }
@@ -450,6 +454,9 @@ inline void QVector<T>::remove(int i)
template <typename T>
inline void QVector<T>::prepend(const T &t)
{ insert(begin(), 1, t); }
+template <typename T>
+inline void QVector<T>::prepend(T &&t)
+{ insert(begin(), std::move(t)); }
template <typename T>
inline void QVector<T>::replace(int i, const T &t)
@@ -562,9 +569,19 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Allo
T *dst = x->begin();
if (!QTypeInfoQuery<T>::isRelocatable || (isShared && QTypeInfo<T>::isComplex)) {
- // we can not move the data, we need to copy construct it
- while (srcBegin != srcEnd) {
- new (dst++) T(*srcBegin++);
+ QT_TRY {
+ if (isShared || !std::is_nothrow_move_constructible<T>::value) {
+ // we can not move the data, we need to copy construct it
+ while (srcBegin != srcEnd)
+ new (dst++) T(*srcBegin++);
+ } else {
+ while (srcBegin != srcEnd)
+ new (dst++) T(std::move(*srcBegin++));
+ }
+ } QT_CATCH (...) {
+ // destruct already copied objects
+ destruct(x->begin(), dst);
+ QT_RETHROW;
}
} else {
::memcpy(static_cast<void *>(dst), static_cast<void *>(srcBegin), (srcEnd - srcBegin) * sizeof(T));
@@ -577,12 +594,17 @@ void QVector<T>::reallocData(const int asize, const int aalloc, QArrayData::Allo
if (asize > d->size) {
// construct all new objects when growing
- QT_TRY {
- defaultConstruct(dst, x->end());
- } QT_CATCH (...) {
- // destruct already copied objects
- destruct(x->begin(), dst);
- QT_RETHROW;
+ if (!QTypeInfo<T>::isComplex) {
+ ::memset(static_cast<void *>(dst), 0, (static_cast<T *>(x->end()) - dst) * sizeof(T));
+ } else {
+ QT_TRY {
+ while (dst != x->end())
+ new (dst++) T();
+ } QT_CATCH (...) {
+ // destruct already copied objects
+ destruct(x->begin(), dst);
+ QT_RETHROW;
+ }
}
}
} QT_CATCH (...) {
@@ -725,7 +747,7 @@ typename QVector<T>::iterator QVector<T>::insert(iterator before, size_type n, c
} else {
T *b = d->begin() + offset;
T *i = b + n;
- memmove(i, b, (d->size - offset) * sizeof(T));
+ memmove(static_cast<void *>(i), static_cast<const void *>(b), (d->size - offset) * sizeof(T));
while (i != b)
new (--i) T(copy);
}
@@ -735,6 +757,36 @@ typename QVector<T>::iterator QVector<T>::insert(iterator before, size_type n, c
}
template <typename T>
+typename QVector<T>::iterator QVector<T>::insert(iterator before, T &&t)
+{
+ Q_ASSERT_X(isValidIterator(before), "QVector::insert", "The specified iterator argument 'before' is invalid");
+
+ const auto offset = std::distance(d->begin(), before);
+ if (!isDetached() || d->size + 1 > int(d->alloc))
+ reallocData(d->size, d->size + 1, QArrayData::Grow);
+ if (!QTypeInfoQuery<T>::isRelocatable) {
+ T *i = d->end();
+ T *j = i + 1;
+ T *b = d->begin() + offset;
+ // The new end-element needs to be constructed, the rest must be move assigned
+ if (i != b) {
+ new (--j) T(std::move(*--i));
+ while (i != b)
+ *--j = std::move(*--i);
+ *b = std::move(t);
+ } else {
+ new (b) T(std::move(t));
+ }
+ } else {
+ T *b = d->begin() + offset;
+ memmove(b + 1, b, (d->size - offset) * sizeof(T));
+ new (b) T(std::move(t));
+ }
+ d->size += 1;
+ return d->begin() + offset;
+}
+
+template <typename T>
typename QVector<T>::iterator QVector<T>::erase(iterator abegin, iterator aend)
{
Q_ASSERT_X(isValidIterator(abegin), "QVector::erase", "The specified iterator argument 'abegin' is invalid");
diff --git a/src/corelib/tools/qvector.qdoc b/src/corelib/tools/qvector.qdoc
index 61fb3d494d..cc250b72a5 100644
--- a/src/corelib/tools/qvector.qdoc
+++ b/src/corelib/tools/qvector.qdoc
@@ -189,7 +189,7 @@
*/
/*!
- \fn QVector<T> QVector::mid(int pos, int length = -1) const
+ \fn template <typename T> QVector<T> QVector<T>::mid(int pos, int length = -1) const
Returns a sub-vector which contains elements from this vector,
starting at position \a pos. If \a length is -1 (the default), all
@@ -199,7 +199,7 @@
*/
-/*! \fn QVector::QVector()
+/*! \fn template <typename T> QVector<T>::QVector()
Constructs an empty vector.
@@ -207,7 +207,7 @@
*/
/*!
- \fn QVector::QVector(QVector<T> &&other)
+ \fn template <typename T> QVector<T>::QVector(QVector<T> &&other)
Move-constructs a QVector instance, making it point at the same
object that \a other was pointing to.
@@ -215,7 +215,7 @@
\since 5.2
*/
-/*! \fn QVector::QVector(int size)
+/*! \fn template <typename T> QVector<T>::QVector(int size)
Constructs a vector with an initial size of \a size elements.
@@ -225,7 +225,7 @@
\sa resize()
*/
-/*! \fn QVector::QVector(int size, const T &value)
+/*! \fn template <typename T> QVector<T>::QVector(int size, const T &value)
Constructs a vector with an initial size of \a size elements.
Each element is initialized with \a value.
@@ -233,7 +233,7 @@
\sa resize(), fill()
*/
-/*! \fn QVector::QVector(const QVector<T> &other)
+/*! \fn template <typename T> QVector<T>::QVector(const QVector<T> &other)
Constructs a copy of \a other.
@@ -246,7 +246,7 @@
\sa operator=()
*/
-/*! \fn QVector::QVector(std::initializer_list<T> args)
+/*! \fn template <typename T> QVector<T>::QVector(std::initializer_list<T> args)
\since 4.8
Constructs a vector from the std::initializer_list given by \a args.
@@ -256,33 +256,33 @@
*/
-/*! \fn QVector::~QVector()
+/*! \fn template <typename T> QVector<T>::~QVector()
Destroys the vector.
*/
-/*! \fn QVector<T> &QVector::operator=(const QVector<T> &other)
+/*! \fn template <typename T> QVector<T> &QVector<T>::operator=(const QVector<T> &other)
Assigns \a other to this vector and returns a reference to this
vector.
*/
/*!
- \fn QVector<T> &QVector::operator=(QVector<T> &&other)
+ \fn template <typename T> QVector<T> &QVector<T>::operator=(QVector<T> &&other)
Move-assigns \a other to this QVector instance.
\since 5.2
*/
-/*! \fn void QVector::swap(QVector<T> &other)
+/*! \fn template <typename T> void QVector<T>::swap(QVector<T> &other)
\since 4.8
Swaps vector \a other with this vector. This operation is very fast and
never fails.
*/
-/*! \fn bool QVector::operator==(const QVector<T> &other) const
+/*! \fn template <typename T> bool QVector<T>::operator==(const QVector<T> &other) const
Returns \c true if \a other is equal to this vector; otherwise
returns \c false.
@@ -296,7 +296,7 @@
\sa operator!=()
*/
-/*! \fn bool QVector::operator!=(const QVector<T> &other) const
+/*! \fn template <typename T> bool QVector<T>::operator!=(const QVector<T> &other) const
Returns \c true if \a other is not equal to this vector; otherwise
returns \c false.
@@ -310,7 +310,7 @@
\sa operator==()
*/
-/*! \fn bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
+/*! \fn template <typename T> bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
\since 5.6
\relates QVector
@@ -322,7 +322,7 @@
of \c operator<().
*/
-/*! \fn bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
+/*! \fn template <typename T> bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
\since 5.6
\relates QVector
@@ -334,7 +334,7 @@
of \c operator<().
*/
-/*! \fn bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
+/*! \fn template <typename T> bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
\since 5.6
\relates QVector
@@ -346,7 +346,7 @@
of \c operator<().
*/
-/*! \fn bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
+/*! \fn template <typename T> bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
\since 5.6
\relates QVector
@@ -359,7 +359,7 @@
*/
/*!
- \fn uint qHash(const QVector<T> &key, uint seed = 0)
+ \fn template <typename T> uint qHash(const QVector<T> &key, uint seed = 0)
\since 5.6
\relates QVector
@@ -369,21 +369,21 @@
This function requires qHash() to be overloaded for the value type \c T.
*/
-/*! \fn int QVector::size() const
+/*! \fn template <typename T> int QVector<T>::size() const
Returns the number of items in the vector.
\sa isEmpty(), resize()
*/
-/*! \fn bool QVector::isEmpty() const
+/*! \fn template <typename T> bool QVector<T>::isEmpty() const
Returns \c true if the vector has size 0; otherwise returns \c false.
\sa size(), resize()
*/
-/*! \fn void QVector::resize(int size)
+/*! \fn template <typename T> void QVector<T>::resize(int size)
Sets the size of the vector to \a size. If \a size is greater than the
current size, elements are added to the end; the new elements are
@@ -396,7 +396,7 @@
\sa size()
*/
-/*! \fn int QVector::capacity() const
+/*! \fn template <typename T> int QVector<T>::capacity() const
Returns the maximum number of items that can be stored in the
vector without forcing a reallocation.
@@ -409,7 +409,7 @@
\sa reserve(), squeeze()
*/
-/*! \fn void QVector::reserve(int size)
+/*! \fn template <typename T> void QVector<T>::reserve(int size)
Attempts to allocate memory for at least \a size elements. If you
know in advance how large the vector will be, you should call this
@@ -434,7 +434,7 @@
\sa squeeze(), capacity()
*/
-/*! \fn void QVector::squeeze()
+/*! \fn template <typename T> void QVector<T>::squeeze()
Releases any memory not required to store the items.
@@ -445,27 +445,27 @@
\sa reserve(), capacity()
*/
-/*! \fn void QVector::detach()
+/*! \fn template <typename T> void QVector<T>::detach()
\internal
*/
-/*! \fn bool QVector::isDetached() const
+/*! \fn template <typename T> bool QVector<T>::isDetached() const
\internal
*/
-/*! \fn void QVector::setSharable(bool sharable)
+/*! \fn template <typename T> void QVector<T>::setSharable(bool sharable)
\internal
*/
-/*! \fn bool QVector::isSharedWith(const QVector<T> &other) const
+/*! \fn template <typename T> bool QVector<T>::isSharedWith(const QVector<T> &other) const
\internal
*/
-/*! \fn T *QVector::data()
+/*! \fn template <typename T> T *QVector<T>::data()
Returns a pointer to the data stored in the vector. The pointer
can be used to access and modify the items in the vector.
@@ -482,12 +482,12 @@
\sa constData(), operator[]()
*/
-/*! \fn const T *QVector::data() const
+/*! \fn template <typename T> const T *QVector<T>::data() const
\overload
*/
-/*! \fn const T *QVector::constData() const
+/*! \fn template <typename T> const T *QVector<T>::constData() const
Returns a const pointer to the data stored in the vector. The
pointer can be used to access the items in the vector.
@@ -500,7 +500,7 @@
\sa data(), operator[]()
*/
-/*! \fn void QVector::clear()
+/*! \fn template <typename T> void QVector<T>::clear()
Removes all the elements from the vector.
@@ -517,7 +517,7 @@
\sa squeeze()
*/
-/*! \fn const T &QVector::at(int i) const
+/*! \fn template <typename T> const T &QVector<T>::at(int i) const
Returns the item at index position \a i in the vector.
@@ -527,7 +527,7 @@
\sa value(), operator[]()
*/
-/*! \fn T &QVector::operator[](int i)
+/*! \fn template <typename T> T &QVector<T>::operator[](int i)
Returns the item at index position \a i as a modifiable reference.
@@ -540,7 +540,7 @@
\sa at(), value()
*/
-/*! \fn const T &QVector::operator[](int i) const
+/*! \fn template <typename T> const T &QVector<T>::operator[](int i) const
\overload
@@ -548,7 +548,7 @@
*/
/*!
- \fn void QVector::append(const T &value)
+ \fn template <typename T> void QVector<T>::append(const T &value)
Inserts \a value at the end of the vector.
@@ -566,7 +566,7 @@
*/
/*!
- \fn void QVector::append(T &&value)
+ \fn template <typename T> void QVector<T>::append(T &&value)
\since 5.6
\overload
@@ -575,7 +575,7 @@
\snippet code/src_corelib_tools_qvector.cpp move-append
*/
-/*! \fn void QVector::append(const QVector<T> &value)
+/*! \fn template <typename T> void QVector<T>::append(const QVector<T> &value)
\overload
@@ -587,7 +587,9 @@
*/
-/*! \fn void QVector::prepend(const T &value)
+/*!
+ \fn template <typename T> void QVector<T>::prepend(const T &value)
+ \fn template <typename T> void QVector<T>::prepend(T &&value)
Inserts \a value at the beginning of the vector.
@@ -605,7 +607,8 @@
\sa append(), insert()
*/
-/*! \fn void QVector::insert(int i, const T &value)
+/*! \fn template <typename T> void QVector<T>::insert(int i, const T &value)
+ \fn template <typename T> void QVector<T>::insert(int i, T &&value)
Inserts \a value at index position \a i in the vector. If \a i is
0, the value is prepended to the vector. If \a i is size(), the
@@ -623,7 +626,7 @@
\sa append(), prepend(), remove()
*/
-/*! \fn void QVector::insert(int i, int count, const T &value)
+/*! \fn template <typename T> void QVector<T>::insert(int i, int count, const T &value)
\overload
@@ -634,7 +637,9 @@
\snippet code/src_corelib_tools_qvector.cpp 10
*/
-/*! \fn QVector::iterator QVector::insert(iterator before, const T &value)
+/*!
+ \fn template <typename T> QVector<T>::iterator QVector<T>::insert(iterator before, const T &value)
+ \fn template <typename T> QVector<T>::iterator QVector<T>::insert(iterator before, T &&value)
\overload
@@ -642,14 +647,14 @@
\a before. Returns an iterator pointing at the inserted item.
*/
-/*! \fn QVector::iterator QVector::insert(iterator before, int count, const T &value)
+/*! \fn template <typename T> QVector<T>::iterator QVector<T>::insert(iterator before, int count, const T &value)
Inserts \a count copies of \a value in front of the item pointed to
by the iterator \a before. Returns an iterator pointing at the
first of the inserted items.
*/
-/*! \fn void QVector::replace(int i, const T &value)
+/*! \fn template <typename T> void QVector<T>::replace(int i, const T &value)
Replaces the item at index position \a i with \a value.
@@ -659,7 +664,7 @@
\sa operator[](), remove()
*/
-/*! \fn void QVector::remove(int i)
+/*! \fn template <typename T> void QVector<T>::remove(int i)
\overload
@@ -668,7 +673,7 @@
\sa insert(), replace(), fill()
*/
-/*! \fn void QVector::remove(int i, int count)
+/*! \fn template <typename T> void QVector<T>::remove(int i, int count)
\overload
@@ -678,7 +683,7 @@
\sa insert(), replace(), fill()
*/
-/*! \fn void QVector::removeAt(int i)
+/*! \fn template <typename T> void QVector<T>::removeAt(int i)
\since 5.2
Removes the element at index position \a i.
@@ -692,7 +697,7 @@
\sa remove(), QList::removeAt()
*/
-/*! \fn int QVector::removeAll(const T &t)
+/*! \fn template <typename T> int QVector<T>::removeAll(const T &t)
\since 5.4
Removes all elements that compare equal to \a t from the
@@ -703,7 +708,7 @@
\sa removeOne(), QList::removeAll()
*/
-/*! \fn bool QVector::removeOne(const T &t)
+/*! \fn template <typename T> bool QVector<T>::removeOne(const T &t)
\since 5.4
Removes the first element that compares equal to \a t from the
@@ -714,7 +719,7 @@
\sa removeAll(), QList::removeOne()
*/
-/*! \fn int QVector::length() const
+/*! \fn template <typename T> int QVector<T>::length() const
\since 5.2
Same as size() and count().
@@ -724,7 +729,7 @@
\sa size(), count(), QList::length()
*/
-/*! \fn T QVector::takeAt(int i)
+/*! \fn template <typename T> T QVector<T>::takeAt(int i)
\since 5.2
Removes the element at index position \a i and returns it.
@@ -741,7 +746,7 @@
\sa takeFirst(), takeLast(), QList::takeAt()
*/
-/*! \fn void QVector::move(int from, int to)
+/*! \fn template <typename T> void QVector<T>::move(int from, int to)
\since 5.6
Moves the item at index position \a from to index position \a to.
@@ -751,7 +756,7 @@
\sa QList::move()
*/
-/*! \fn void QVector::removeFirst()
+/*! \fn template <typename T> void QVector<T>::removeFirst()
\since 5.1
Removes the first item in the vector. Calling this function is
equivalent to calling remove(0). The vector must not be empty. If
@@ -761,7 +766,7 @@
\sa remove(), takeFirst(), isEmpty()
*/
-/*! \fn void QVector::removeLast()
+/*! \fn template <typename T> void QVector<T>::removeLast()
\since 5.1
Removes the last item in the vector. Calling this function is
equivalent to calling remove(size() - 1). The vector must not be
@@ -771,7 +776,7 @@
\sa remove(), takeLast(), removeFirst(), isEmpty()
*/
-/*! \fn T QVector::takeFirst()
+/*! \fn template <typename T> T QVector<T>::takeFirst()
\since 5.1
Removes the first item in the vector and returns it. This function
@@ -781,7 +786,7 @@
\sa takeLast(), removeFirst()
*/
-/*! \fn T QVector::takeLast()
+/*! \fn template <typename T> T QVector<T>::takeLast()
\since 5.1
Removes the last item in the list and returns it. This function
@@ -795,7 +800,7 @@
*/
-/*! \fn QVector &QVector::fill(const T &value, int size = -1)
+/*! \fn template <typename T> QVector<T> &QVector<T>::fill(const T &value, int size = -1)
Assigns \a value to all items in the vector. If \a size is
different from -1 (the default), the vector is resized to size \a
@@ -807,7 +812,7 @@
\sa resize()
*/
-/*! \fn int QVector::indexOf(const T &value, int from = 0) const
+/*! \fn template <typename T> int QVector<T>::indexOf(const T &value, int from = 0) const
Returns the index position of the first occurrence of \a value in
the vector, searching forward from index position \a from.
@@ -822,7 +827,7 @@
\sa lastIndexOf(), contains()
*/
-/*! \fn int QVector::lastIndexOf(const T &value, int from = -1) const
+/*! \fn template <typename T> int QVector<T>::lastIndexOf(const T &value, int from = -1) const
Returns the index position of the last occurrence of the value \a
value in the vector, searching backward from index position \a
@@ -838,7 +843,7 @@
\sa indexOf()
*/
-/*! \fn bool QVector::contains(const T &value) const
+/*! \fn template <typename T> bool QVector<T>::contains(const T &value) const
Returns \c true if the vector contains an occurrence of \a value;
otherwise returns \c false.
@@ -849,7 +854,7 @@
\sa indexOf(), count()
*/
-/*! \fn bool QVector::startsWith(const T &value) const
+/*! \fn template <typename T> bool QVector<T>::startsWith(const T &value) const
\since 4.5
Returns \c true if this vector is not empty and its first
@@ -858,7 +863,7 @@
\sa isEmpty(), first()
*/
-/*! \fn bool QVector::endsWith(const T &value) const
+/*! \fn template <typename T> bool QVector<T>::endsWith(const T &value) const
\since 4.5
Returns \c true if this vector is not empty and its last
@@ -868,7 +873,7 @@
*/
-/*! \fn int QVector::count(const T &value) const
+/*! \fn template <typename T> int QVector<T>::count(const T &value) const
Returns the number of occurrences of \a value in the vector.
@@ -878,14 +883,14 @@
\sa contains(), indexOf()
*/
-/*! \fn int QVector::count() const
+/*! \fn template <typename T> int QVector<T>::count() const
\overload
Same as size().
*/
-/*! \fn QVector::iterator QVector::begin()
+/*! \fn template <typename T> QVector<T>::iterator QVector<T>::begin()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the first item in
the vector.
@@ -893,12 +898,12 @@
\sa constBegin(), end()
*/
-/*! \fn QVector::const_iterator QVector::begin() const
+/*! \fn template <typename T> QVector<T>::const_iterator QVector<T>::begin() const
\overload
*/
-/*! \fn QVector::const_iterator QVector::cbegin() const
+/*! \fn template <typename T> QVector<T>::const_iterator QVector<T>::cbegin() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
@@ -907,7 +912,7 @@
\sa begin(), cend()
*/
-/*! \fn QVector::const_iterator QVector::constBegin() const
+/*! \fn template <typename T> QVector<T>::const_iterator QVector<T>::constBegin() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the first item
in the vector.
@@ -915,7 +920,7 @@
\sa begin(), constEnd()
*/
-/*! \fn QVector::iterator QVector::end()
+/*! \fn template <typename T> QVector<T>::iterator QVector<T>::end()
Returns an \l{STL-style iterators}{STL-style iterator} pointing to the imaginary item
after the last item in the vector.
@@ -923,12 +928,12 @@
\sa begin(), constEnd()
*/
-/*! \fn QVector::const_iterator QVector::end() const
+/*! \fn template <typename T> QVector<T>::const_iterator QVector<T>::end() const
\overload
*/
-/*! \fn QVector::const_iterator QVector::cend() const
+/*! \fn template <typename T> QVector<T>::const_iterator QVector<T>::cend() const
\since 5.0
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
@@ -937,7 +942,7 @@
\sa cbegin(), end()
*/
-/*! \fn QVector::const_iterator QVector::constEnd() const
+/*! \fn template <typename T> QVector<T>::const_iterator QVector<T>::constEnd() const
Returns a const \l{STL-style iterators}{STL-style iterator} pointing to the imaginary
item after the last item in the vector.
@@ -945,7 +950,7 @@
\sa constBegin(), end()
*/
-/*! \fn QVector::reverse_iterator QVector::rbegin()
+/*! \fn template <typename T> QVector<T>::reverse_iterator QVector<T>::rbegin()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -954,12 +959,12 @@
\sa begin(), crbegin(), rend()
*/
-/*! \fn QVector::const_reverse_iterator QVector::rbegin() const
+/*! \fn template <typename T> QVector<T>::const_reverse_iterator QVector<T>::rbegin() const
\since 5.6
\overload
*/
-/*! \fn QVector::const_reverse_iterator QVector::crbegin() const
+/*! \fn template <typename T> QVector<T>::const_reverse_iterator QVector<T>::crbegin() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to the first
@@ -968,7 +973,7 @@
\sa begin(), rbegin(), rend()
*/
-/*! \fn QVector::reverse_iterator QVector::rend()
+/*! \fn template <typename T> QVector<T>::reverse_iterator QVector<T>::rend()
\since 5.6
Returns a \l{STL-style iterators}{STL-style} reverse iterator pointing to one past
@@ -977,12 +982,12 @@
\sa end(), crend(), rbegin()
*/
-/*! \fn QVector::const_reverse_iterator QVector::rend() const
+/*! \fn template <typename T> QVector<T>::const_reverse_iterator QVector<T>::rend() const
\since 5.6
\overload
*/
-/*! \fn QVector::const_reverse_iterator QVector::crend() const
+/*! \fn template <typename T> QVector<T>::const_reverse_iterator QVector<T>::crend() const
\since 5.6
Returns a const \l{STL-style iterators}{STL-style} reverse iterator pointing to one
@@ -991,7 +996,7 @@
\sa end(), rend(), rbegin()
*/
-/*! \fn QVector::iterator QVector::erase(iterator pos)
+/*! \fn template <typename T> QVector<T>::iterator QVector<T>::erase(iterator pos)
Removes the item pointed to by the iterator \a pos from the
vector, and returns an iterator to the next item in the vector
@@ -1000,7 +1005,7 @@
\sa insert(), remove()
*/
-/*! \fn QVector::iterator QVector::erase(iterator begin, iterator end)
+/*! \fn template <typename T> QVector<T>::iterator QVector<T>::erase(iterator begin, iterator end)
\overload
@@ -1009,7 +1014,7 @@
before the call.
*/
-/*! \fn T& QVector::first()
+/*! \fn template <typename T> T& QVector<T>::first()
Returns a reference to the first item in the vector. This
function assumes that the vector isn't empty.
@@ -1017,12 +1022,12 @@
\sa last(), isEmpty(), constFirst()
*/
-/*! \fn const T& QVector::first() const
+/*! \fn template <typename T> const T& QVector<T>::first() const
\overload
*/
-/*! \fn const T& QVector::constFirst() const
+/*! \fn template <typename T> const T& QVector<T>::constFirst() const
\since 5.6
Returns a const reference to the first item in the vector. This
@@ -1031,7 +1036,7 @@
\sa constLast(), isEmpty(), first()
*/
-/*! \fn T& QVector::last()
+/*! \fn template <typename T> T& QVector<T>::last()
Returns a reference to the last item in the vector. This function
assumes that the vector isn't empty.
@@ -1039,12 +1044,12 @@
\sa first(), isEmpty(), constLast()
*/
-/*! \fn const T& QVector::last() const
+/*! \fn template <typename T> const T& QVector<T>::last() const
\overload
*/
-/*! \fn const T& QVector::constLast() const
+/*! \fn template <typename T> const T& QVector<T>::constLast() const
\since 5.6
Returns a const reference to the last item in the vector. This function
@@ -1053,7 +1058,7 @@
\sa constFirst(), isEmpty(), last()
*/
-/*! \fn T QVector::value(int i) const
+/*! \fn template <typename T> T QVector<T>::value(int i) const
Returns the value at index position \a i in the vector.
@@ -1065,7 +1070,7 @@
\sa at(), operator[]()
*/
-/*! \fn T QVector::value(int i, const T &defaultValue) const
+/*! \fn template <typename T> T QVector<T>::value(int i, const T &defaultValue) const
\overload
@@ -1073,72 +1078,74 @@
\a defaultValue.
*/
-/*! \fn void QVector::push_back(const T &value)
+/*! \fn template <typename T> void QVector<T>::push_back(const T &value)
This function is provided for STL compatibility. It is equivalent
to append(\a value).
*/
-/*! \fn void QVector::push_back(T &&value)
+/*! \fn template <typename T> void QVector<T>::push_back(T &&value)
\since 5.6
\overload
*/
-/*! \fn void QVector::push_front(const T &value)
+/*!
+ \fn template <typename T> void QVector<T>::push_front(const T &value)
+ \fn template <typename T> void QVector<T>::push_front(T &&value)
This function is provided for STL compatibility. It is equivalent
to prepend(\a value).
*/
-/*! \fn void QVector::pop_front()
+/*! \fn template <typename T> void QVector<T>::pop_front()
This function is provided for STL compatibility. It is equivalent
to removeFirst().
*/
-/*! \fn void QVector::pop_back()
+/*! \fn template <typename T> void QVector<T>::pop_back()
This function is provided for STL compatibility. It is equivalent
to removeLast().
*/
-/*! \fn T& QVector::front()
+/*! \fn template <typename T> T& QVector<T>::front()
This function is provided for STL compatibility. It is equivalent
to first().
*/
-/*! \fn QVector::const_reference QVector::front() const
+/*! \fn template <typename T> QVector<T>::const_reference QVector<T>::front() const
\overload
*/
-/*! \fn QVector::reference QVector::back()
+/*! \fn template <typename T> QVector<T>::reference QVector<T>::back()
This function is provided for STL compatibility. It is equivalent
to last().
*/
-/*! \fn QVector::const_reference QVector::back() const
+/*! \fn template <typename T> QVector<T>::const_reference QVector<T>::back() const
\overload
*/
-/*! \fn void QVector::shrink_to_fit()
+/*! \fn template <typename T> void QVector<T>::shrink_to_fit()
\since 5.10
This function is provided for STL compatibility. It is equivalent
to squeeze().
*/
-/*! \fn bool QVector::empty() const
+/*! \fn template <typename T> bool QVector<T>::empty() const
This function is provided for STL compatibility. It is equivalent
to isEmpty(), returning \c true if the vector is empty; otherwise
returns \c false.
*/
-/*! \fn QVector<T> &QVector::operator+=(const QVector<T> &other)
+/*! \fn template <typename T> QVector<T> &QVector<T>::operator+=(const QVector<T> &other)
Appends the items of the \a other vector to this vector and
returns a reference to this vector.
@@ -1146,7 +1153,7 @@
\sa operator+(), append()
*/
-/*! \fn void QVector::operator+=(const T &value)
+/*! \fn template <typename T> void QVector<T>::operator+=(const T &value)
\overload
@@ -1155,7 +1162,7 @@
\sa append(), operator<<()
*/
-/*! \fn QVector<T> QVector::operator+(const QVector<T> &other) const
+/*! \fn template <typename T> QVector<T> QVector<T>::operator+(const QVector<T> &other) const
Returns a vector that contains all the items in this vector
followed by all the items in the \a other vector.
@@ -1163,7 +1170,7 @@
\sa operator+=()
*/
-/*! \fn QVector<T> &QVector::operator<<(const T &value)
+/*! \fn template <typename T> QVector<T> &QVector<T>::operator<<(const T &value)
Appends \a value to the vector and returns a reference to this
vector.
@@ -1171,7 +1178,7 @@
\sa append(), operator+=()
*/
-/*! \fn QVector<T> &QVector::operator<<(const QVector<T> &other)
+/*! \fn template <typename T> QVector<T> &QVector<T>::operator<<(const QVector<T> &other)
Appends \a other to the vector and returns a reference to the
vector.
@@ -1288,7 +1295,7 @@
Typedef for T. Provided for STL compatibility.
*/
-/*! \fn QList<T> QVector<T>::toList() const
+/*! \fn template <typename T> QList<T> QVector<T>::toList() const
Returns a QList object with the data contained in this QVector.
@@ -1299,7 +1306,7 @@
\sa fromList(), QList::fromVector()
*/
-/*! \fn QVector<T> QVector<T>::fromList(const QList<T> &list)
+/*! \fn template <typename T> QVector<T> QVector<T>::fromList(const QList<T> &list)
Returns a QVector object with the data contained in \a list.
@@ -1310,7 +1317,7 @@
\sa toList(), QList::toVector()
*/
-/*! \fn QVector<T> QVector<T>::fromStdVector(const std::vector<T> &vector)
+/*! \fn template <typename T> QVector<T> QVector<T>::fromStdVector(const std::vector<T> &vector)
Returns a QVector object with the data contained in \a vector. The
order of the elements in the QVector is the same as in \a vector.
@@ -1322,7 +1329,7 @@
\sa toStdVector(), QList::fromStdList()
*/
-/*! \fn std::vector<T> QVector<T>::toStdVector() const
+/*! \fn template <typename T> std::vector<T> QVector<T>::toStdVector() const
Returns a std::vector object with the data contained in this QVector.
Example:
@@ -1332,7 +1339,7 @@
\sa fromStdVector(), QList::toStdList()
*/
-/*! \fn QDataStream &operator<<(QDataStream &out, const QVector<T> &vector)
+/*! \fn template <typename T> QDataStream &operator<<(QDataStream &out, const QVector<T> &vector)
\relates QVector
Writes the vector \a vector to stream \a out.
@@ -1342,7 +1349,7 @@
\sa{Serializing Qt Data Types}{Format of the QDataStream operators}
*/
-/*! \fn QDataStream &operator>>(QDataStream &in, QVector<T> &vector)
+/*! \fn template <typename T> QDataStream &operator>>(QDataStream &in, QVector<T> &vector)
\relates QVector
Reads a vector from stream \a in into \a vector.
diff --git a/src/corelib/tools/qversionnumber.h b/src/corelib/tools/qversionnumber.h
index 3836bc2119..1bfb4aab39 100644
--- a/src/corelib/tools/qversionnumber.h
+++ b/src/corelib/tools/qversionnumber.h
@@ -281,7 +281,7 @@ public:
Q_REQUIRED_RESULT Q_CORE_EXPORT QString toString() const;
#if QT_STRINGVIEW_LEVEL < 2
- Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = Q_NULLPTR);
+ Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = nullptr);
#endif
Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QLatin1String string, int *suffixIndex = nullptr);
Q_REQUIRED_RESULT Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QStringView string, int *suffixIndex = nullptr);
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index f214d34d08..72224f280d 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -223,4 +223,3 @@ TR_EXCLUDE += ../3rdparty/*
# MIPS DSP
MIPS_DSP_ASM += tools/qstring_mips_dsp_asm.S
MIPS_DSP_HEADERS += ../gui/painting/qt_mips_asm_dsp_p.h
-CONFIG += simd
diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp
deleted file mode 100644
index ef5fafbd76..0000000000
--- a/src/corelib/xml/qxmlstream.cpp
+++ /dev/null
@@ -1,3979 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "QtCore/qxmlstream.h"
-
-#ifndef QT_NO_XMLSTREAM
-
-#include "qxmlutils_p.h"
-#include <qdebug.h>
-#include <qfile.h>
-#include <stdio.h>
-#include <qtextcodec.h>
-#include <qstack.h>
-#include <qbuffer.h>
-#ifndef QT_BOOTSTRAPPED
-#include <qcoreapplication.h>
-#else
-// This specialization of Q_DECLARE_TR_FUNCTIONS is not in qcoreapplication.h,
-// because that header depends on QObject being available, which is not the
-// case for most bootstrapped applications.
-#define Q_DECLARE_TR_FUNCTIONS(context) \
-public: \
- static inline QString tr(const char *sourceText, const char *comment = 0) \
- { Q_UNUSED(comment); return QString::fromLatin1(sourceText); } \
- static inline QString trUtf8(const char *sourceText, const char *comment = 0) \
- { Q_UNUSED(comment); return QString::fromLatin1(sourceText); } \
- static inline QString tr(const char *sourceText, const char*, int) \
- { return QString::fromLatin1(sourceText); } \
- static inline QString trUtf8(const char *sourceText, const char*, int) \
- { return QString::fromLatin1(sourceText); } \
-private:
-#endif
-QT_BEGIN_NAMESPACE
-
-#include "qxmlstream_p.h"
-
-enum { StreamEOF = ~0U };
-
-/*!
- \enum QXmlStreamReader::TokenType
-
- This enum specifies the type of token the reader just read.
-
- \value NoToken The reader has not yet read anything.
-
- \value Invalid An error has occurred, reported in error() and
- errorString().
-
- \value StartDocument The reader reports the XML version number in
- documentVersion(), and the encoding as specified in the XML
- document in documentEncoding(). If the document is declared
- standalone, isStandaloneDocument() returns \c true; otherwise it
- returns \c false.
-
- \value EndDocument The reader reports the end of the document.
-
- \value StartElement The reader reports the start of an element
- with namespaceUri() and name(). Empty elements are also reported
- as StartElement, followed directly by EndElement. The convenience
- function readElementText() can be called to concatenate all
- content until the corresponding EndElement. Attributes are
- reported in attributes(), namespace declarations in
- namespaceDeclarations().
-
- \value EndElement The reader reports the end of an element with
- namespaceUri() and name().
-
- \value Characters The reader reports characters in text(). If the
- characters are all white-space, isWhitespace() returns \c true. If
- the characters stem from a CDATA section, isCDATA() returns \c true.
-
- \value Comment The reader reports a comment in text().
-
- \value DTD The reader reports a DTD in text(), notation
- declarations in notationDeclarations(), and entity declarations in
- entityDeclarations(). Details of the DTD declaration are reported
- in in dtdName(), dtdPublicId(), and dtdSystemId().
-
- \value EntityReference The reader reports an entity reference that
- could not be resolved. The name of the reference is reported in
- name(), the replacement text in text().
-
- \value ProcessingInstruction The reader reports a processing
- instruction in processingInstructionTarget() and
- processingInstructionData().
-*/
-
-/*!
- \enum QXmlStreamReader::ReadElementTextBehaviour
-
- This enum specifies the different behaviours of readElementText().
-
- \value ErrorOnUnexpectedElement Raise an UnexpectedElementError and return
- what was read so far when a child element is encountered.
-
- \value IncludeChildElements Recursively include the text from child elements.
-
- \value SkipChildElements Skip child elements.
-
- \since 4.6
-*/
-
-/*!
- \enum QXmlStreamReader::Error
-
- This enum specifies different error cases
-
- \value NoError No error has occurred.
-
- \value CustomError A custom error has been raised with
- raiseError()
-
- \value NotWellFormedError The parser internally raised an error
- due to the read XML not being well-formed.
-
- \value PrematureEndOfDocumentError The input stream ended before a
- well-formed XML document was parsed. Recovery from this error is
- possible if more XML arrives in the stream, either by calling
- addData() or by waiting for it to arrive on the device().
-
- \value UnexpectedElementError The parser encountered an element
- that was different to those it expected.
-
-*/
-
-/*!
- \class QXmlStreamEntityResolver
- \inmodule QtCore
- \reentrant
- \since 4.4
-
- \brief The QXmlStreamEntityResolver class provides an entity
- resolver for a QXmlStreamReader.
-
- \ingroup xml-tools
- */
-
-/*!
- Destroys the entity resolver.
- */
-QXmlStreamEntityResolver::~QXmlStreamEntityResolver()
-{
-}
-
-/*!
- \internal
-
-This function is a stub for later functionality.
-*/
-QString QXmlStreamEntityResolver::resolveEntity(const QString& /*publicId*/, const QString& /*systemId*/)
-{
- return QString();
-}
-
-
-/*!
- Resolves the undeclared entity \a name and returns its replacement
- text. If the entity is also unknown to the entity resolver, it
- returns an empty string.
-
- The default implementation always returns an empty string.
-*/
-
-QString QXmlStreamEntityResolver::resolveUndeclaredEntity(const QString &/*name*/)
-{
- return QString();
-}
-
-#ifndef QT_NO_XMLSTREAMREADER
-
-QString QXmlStreamReaderPrivate::resolveUndeclaredEntity(const QString &name)
-{
- if (entityResolver)
- return entityResolver->resolveUndeclaredEntity(name);
- return QString();
-}
-
-
-
-/*!
- \since 4.4
-
- Makes \a resolver the new entityResolver().
-
- The stream reader does \e not take ownership of the resolver. It's
- the callers responsibility to ensure that the resolver is valid
- during the entire life-time of the stream reader object, or until
- another resolver or 0 is set.
-
- \sa entityResolver()
- */
-void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)
-{
- Q_D(QXmlStreamReader);
- d->entityResolver = resolver;
-}
-
-/*!
- \since 4.4
-
- Returns the entity resolver, or 0 if there is no entity resolver.
-
- \sa setEntityResolver()
- */
-QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const
-{
- Q_D(const QXmlStreamReader);
- return d->entityResolver;
-}
-
-
-
-/*!
- \class QXmlStreamReader
- \inmodule QtCore
- \reentrant
- \since 4.3
-
- \brief The QXmlStreamReader class provides a fast parser for reading
- well-formed XML via a simple streaming API.
-
-
- \ingroup xml-tools
-
- QXmlStreamReader is a faster and more convenient replacement for
- Qt's own SAX parser (see QXmlSimpleReader). In some cases it might
- also be a faster and more convenient alternative for use in
- applications that would otherwise use a DOM tree (see QDomDocument).
- QXmlStreamReader reads data either from a QIODevice (see
- setDevice()), or from a raw QByteArray (see addData()).
-
- Qt provides QXmlStreamWriter for writing XML.
-
- The basic concept of a stream reader is to report an XML document as
- a stream of tokens, similar to SAX. The main difference between
- QXmlStreamReader and SAX is \e how these XML tokens are reported.
- With SAX, the application must provide handlers (callback functions)
- that receive so-called XML \e events from the parser at the parser's
- convenience. With QXmlStreamReader, the application code itself
- drives the loop and pulls \e tokens from the reader, one after
- another, as it needs them. This is done by calling readNext(), where
- the reader reads from the input stream until it completes the next
- token, at which point it returns the tokenType(). A set of
- convenient functions including isStartElement() and text() can then
- be used to examine the token to obtain information about what has
- been read. The big advantage of this \e pulling approach is the
- possibility to build recursive descent parsers with it, meaning you
- can split your XML parsing code easily into different methods or
- classes. This makes it easy to keep track of the application's own
- state when parsing XML.
-
- A typical loop with QXmlStreamReader looks like this:
-
- \snippet code/src_corelib_xml_qxmlstream.cpp 0
-
-
- QXmlStreamReader is a well-formed XML 1.0 parser that does \e not
- include external parsed entities. As long as no error occurs, the
- application code can thus be assured that the data provided by the
- stream reader satisfies the W3C's criteria for well-formed XML. For
- example, you can be certain that all tags are indeed nested and
- closed properly, that references to internal entities have been
- replaced with the correct replacement text, and that attributes have
- been normalized or added according to the internal subset of the
- DTD.
-
- If an error occurs while parsing, atEnd() and hasError() return
- true, and error() returns the error that occurred. The functions
- errorString(), lineNumber(), columnNumber(), and characterOffset()
- are for constructing an appropriate error or warning message. To
- simplify application code, QXmlStreamReader contains a raiseError()
- mechanism that lets you raise custom errors that trigger the same
- error handling described.
-
- The \l{QXmlStream Bookmarks Example} illustrates how to use the
- recursive descent technique to read an XML bookmark file (XBEL) with
- a stream reader.
-
- \section1 Namespaces
-
- QXmlStream understands and resolves XML namespaces. E.g. in case of
- a StartElement, namespaceUri() returns the namespace the element is
- in, and name() returns the element's \e local name. The combination
- of namespaceUri and name uniquely identifies an element. If a
- namespace prefix was not declared in the XML entities parsed by the
- reader, the namespaceUri is empty.
-
- If you parse XML data that does not utilize namespaces according to
- the XML specification or doesn't use namespaces at all, you can use
- the element's qualifiedName() instead. A qualified name is the
- element's prefix() followed by colon followed by the element's local
- name() - exactly like the element appears in the raw XML data. Since
- the mapping namespaceUri to prefix is neither unique nor universal,
- qualifiedName() should be avoided for namespace-compliant XML data.
-
- In order to parse standalone documents that do use undeclared
- namespace prefixes, you can turn off namespace processing completely
- with the \l namespaceProcessing property.
-
- \section1 Incremental Parsing
-
- QXmlStreamReader is an incremental parser. It can handle the case
- where the document can't be parsed all at once because it arrives in
- chunks (e.g. from multiple files, or over a network connection).
- When the reader runs out of data before the complete document has
- been parsed, it reports a PrematureEndOfDocumentError. When more
- data arrives, either because of a call to addData() or because more
- data is available through the network device(), the reader recovers
- from the PrematureEndOfDocumentError error and continues parsing the
- new data with the next call to readNext().
-
- For example, if your application reads data from the network using a
- \l{QNetworkAccessManager} {network access manager}, you would issue
- a \l{QNetworkRequest} {network request} to the manager and receive a
- \l{QNetworkReply} {network reply} in return. Since a QNetworkReply
- is a QIODevice, you connect its \l{QIODevice::readyRead()}
- {readyRead()} signal to a custom slot, e.g. \c{slotReadyRead()} in
- the code snippet shown in the discussion for QNetworkAccessManager.
- In this slot, you read all available data with
- \l{QIODevice::readAll()} {readAll()} and pass it to the XML
- stream reader using addData(). Then you call your custom parsing
- function that reads the XML events from the reader.
-
- \section1 Performance and Memory Consumption
-
- QXmlStreamReader is memory-conservative by design, since it doesn't
- store the entire XML document tree in memory, but only the current
- token at the time it is reported. In addition, QXmlStreamReader
- avoids the many small string allocations that it normally takes to
- map an XML document to a convenient and Qt-ish API. It does this by
- reporting all string data as QStringRef rather than real QString
- objects. QStringRef is a thin wrapper around QString substrings that
- provides a subset of the QString API without the memory allocation
- and reference-counting overhead. Calling
- \l{QStringRef::toString()}{toString()} on any of those objects
- returns an equivalent real QString object.
-
-*/
-
-
-/*!
- Constructs a stream reader.
-
- \sa setDevice(), addData()
- */
-QXmlStreamReader::QXmlStreamReader()
- : d_ptr(new QXmlStreamReaderPrivate(this))
-{
-}
-
-/*! Creates a new stream reader that reads from \a device.
-
-\sa setDevice(), clear()
- */
-QXmlStreamReader::QXmlStreamReader(QIODevice *device)
- : d_ptr(new QXmlStreamReaderPrivate(this))
-{
- setDevice(device);
-}
-
-/*!
- Creates a new stream reader that reads from \a data.
-
- \sa addData(), clear(), setDevice()
- */
-QXmlStreamReader::QXmlStreamReader(const QByteArray &data)
- : d_ptr(new QXmlStreamReaderPrivate(this))
-{
- Q_D(QXmlStreamReader);
- d->dataBuffer = data;
-}
-
-/*!
- Creates a new stream reader that reads from \a data.
-
- \sa addData(), clear(), setDevice()
- */
-QXmlStreamReader::QXmlStreamReader(const QString &data)
- : d_ptr(new QXmlStreamReaderPrivate(this))
-{
- Q_D(QXmlStreamReader);
-#ifdef QT_NO_TEXTCODEC
- d->dataBuffer = data.toLatin1();
-#else
- d->dataBuffer = d->codec->fromUnicode(data);
- d->decoder = d->codec->makeDecoder();
-#endif
- d->lockEncoding = true;
-
-}
-
-/*!
- Creates a new stream reader that reads from \a data.
-
- \sa addData(), clear(), setDevice()
- */
-QXmlStreamReader::QXmlStreamReader(const char *data)
- : d_ptr(new QXmlStreamReaderPrivate(this))
-{
- Q_D(QXmlStreamReader);
- d->dataBuffer = QByteArray(data);
-}
-
-/*!
- Destructs the reader.
- */
-QXmlStreamReader::~QXmlStreamReader()
-{
- Q_D(QXmlStreamReader);
- if (d->deleteDevice)
- delete d->device;
-}
-
-/*! \fn bool QXmlStreamReader::hasError() const
- Returns \c true if an error has occurred, otherwise \c false.
-
- \sa errorString(), error()
- */
-
-/*!
- Sets the current device to \a device. Setting the device resets
- the stream to its initial state.
-
- \sa device(), clear()
-*/
-void QXmlStreamReader::setDevice(QIODevice *device)
-{
- Q_D(QXmlStreamReader);
- if (d->deleteDevice) {
- delete d->device;
- d->deleteDevice = false;
- }
- d->device = device;
- d->init();
-
-}
-
-/*!
- Returns the current device associated with the QXmlStreamReader,
- or 0 if no device has been assigned.
-
- \sa setDevice()
-*/
-QIODevice *QXmlStreamReader::device() const
-{
- Q_D(const QXmlStreamReader);
- return d->device;
-}
-
-
-/*!
- Adds more \a data for the reader to read. This function does
- nothing if the reader has a device().
-
- \sa readNext(), clear()
- */
-void QXmlStreamReader::addData(const QByteArray &data)
-{
- Q_D(QXmlStreamReader);
- if (d->device) {
- qWarning("QXmlStreamReader: addData() with device()");
- return;
- }
- d->dataBuffer += data;
-}
-
-/*!
- Adds more \a data for the reader to read. This function does
- nothing if the reader has a device().
-
- \sa readNext(), clear()
- */
-void QXmlStreamReader::addData(const QString &data)
-{
- Q_D(QXmlStreamReader);
- d->lockEncoding = true;
-#ifdef QT_NO_TEXTCODEC
- addData(data.toLatin1());
-#else
- addData(d->codec->fromUnicode(data));
-#endif
-}
-
-/*!
- Adds more \a data for the reader to read. This function does
- nothing if the reader has a device().
-
- \sa readNext(), clear()
- */
-void QXmlStreamReader::addData(const char *data)
-{
- addData(QByteArray(data));
-}
-
-/*!
- Removes any device() or data from the reader and resets its
- internal state to the initial state.
-
- \sa addData()
- */
-void QXmlStreamReader::clear()
-{
- Q_D(QXmlStreamReader);
- d->init();
- if (d->device) {
- if (d->deleteDevice)
- delete d->device;
- d->device = 0;
- }
-}
-
-/*!
- Returns \c true if the reader has read until the end of the XML
- document, or if an error() has occurred and reading has been
- aborted. Otherwise, it returns \c false.
-
- When atEnd() and hasError() return true and error() returns
- PrematureEndOfDocumentError, it means the XML has been well-formed
- so far, but a complete XML document has not been parsed. The next
- chunk of XML can be added with addData(), if the XML is being read
- from a QByteArray, or by waiting for more data to arrive if the
- XML is being read from a QIODevice. Either way, atEnd() will
- return false once more data is available.
-
- \sa hasError(), error(), device(), QIODevice::atEnd()
- */
-bool QXmlStreamReader::atEnd() const
-{
- Q_D(const QXmlStreamReader);
- if (d->atEnd
- && ((d->type == QXmlStreamReader::Invalid && d->error == PrematureEndOfDocumentError)
- || (d->type == QXmlStreamReader::EndDocument))) {
- if (d->device)
- return d->device->atEnd();
- else
- return !d->dataBuffer.size();
- }
- return (d->atEnd || d->type == QXmlStreamReader::Invalid);
-}
-
-
-/*!
- Reads the next token and returns its type.
-
- With one exception, once an error() is reported by readNext(),
- further reading of the XML stream is not possible. Then atEnd()
- returns \c true, hasError() returns \c true, and this function returns
- QXmlStreamReader::Invalid.
-
- The exception is when error() returns PrematureEndOfDocumentError.
- This error is reported when the end of an otherwise well-formed
- chunk of XML is reached, but the chunk doesn't represent a complete
- XML document. In that case, parsing \e can be resumed by calling
- addData() to add the next chunk of XML, when the stream is being
- read from a QByteArray, or by waiting for more data to arrive when
- the stream is being read from a device().
-
- \sa tokenType(), tokenString()
- */
-QXmlStreamReader::TokenType QXmlStreamReader::readNext()
-{
- Q_D(QXmlStreamReader);
- if (d->type != Invalid) {
- if (!d->hasCheckedStartDocument)
- if (!d->checkStartDocument())
- return d->type; // synthetic StartDocument or error
- d->parse();
- if (d->atEnd && d->type != EndDocument && d->type != Invalid)
- d->raiseError(PrematureEndOfDocumentError);
- else if (!d->atEnd && d->type == EndDocument)
- d->raiseWellFormedError(QXmlStream::tr("Extra content at end of document."));
- } else if (d->error == PrematureEndOfDocumentError) {
- // resume error
- d->type = NoToken;
- d->atEnd = false;
- d->token = -1;
- return readNext();
- }
- return d->type;
-}
-
-
-/*!
- Returns the type of the current token.
-
- The current token can also be queried with the convenience functions
- isStartDocument(), isEndDocument(), isStartElement(),
- isEndElement(), isCharacters(), isComment(), isDTD(),
- isEntityReference(), and isProcessingInstruction().
-
- \sa tokenString()
- */
-QXmlStreamReader::TokenType QXmlStreamReader::tokenType() const
-{
- Q_D(const QXmlStreamReader);
- return d->type;
-}
-
-/*!
- Reads until the next start element within the current element. Returns \c true
- when a start element was reached. When the end element was reached, or when
- an error occurred, false is returned.
-
- The current element is the element matching the most recently parsed start
- element of which a matching end element has not yet been reached. When the
- parser has reached the end element, the current element becomes the parent
- element.
-
- This is a convenience function for when you're only concerned with parsing
- XML elements. The \l{QXmlStream Bookmarks Example} makes extensive use of
- this function.
-
- \since 4.6
- \sa readNext()
- */
-bool QXmlStreamReader::readNextStartElement()
-{
- while (readNext() != Invalid) {
- if (isEndElement())
- return false;
- else if (isStartElement())
- return true;
- }
- return false;
-}
-
-/*!
- Reads until the end of the current element, skipping any child nodes.
- This function is useful for skipping unknown elements.
-
- The current element is the element matching the most recently parsed start
- element of which a matching end element has not yet been reached. When the
- parser has reached the end element, the current element becomes the parent
- element.
-
- \since 4.6
- */
-void QXmlStreamReader::skipCurrentElement()
-{
- int depth = 1;
- while (depth && readNext() != Invalid) {
- if (isEndElement())
- --depth;
- else if (isStartElement())
- ++depth;
- }
-}
-
-/*
- * Use the following Perl script to generate the error string index list:
-===== PERL SCRIPT ====
-print "static const char QXmlStreamReader_tokenTypeString_string[] =\n";
-$counter = 0;
-$i = 0;
-while (<STDIN>) {
- chomp;
- print " \"$_\\0\"\n";
- $sizes[$i++] = $counter;
- $counter += length 1 + $_;
-}
-print " \"\\0\";\n\nstatic const short QXmlStreamReader_tokenTypeString_indices[] = {\n ";
-for ($j = 0; $j < $i; ++$j) {
- printf "$sizes[$j], ";
-}
-print "0\n};\n";
-===== PERL SCRIPT ====
-
- * The input data is as follows (copied from qxmlstream.h):
-NoToken
-Invalid
-StartDocument
-EndDocument
-StartElement
-EndElement
-Characters
-Comment
-DTD
-EntityReference
-ProcessingInstruction
-*/
-static const char QXmlStreamReader_tokenTypeString_string[] =
- "NoToken\0"
- "Invalid\0"
- "StartDocument\0"
- "EndDocument\0"
- "StartElement\0"
- "EndElement\0"
- "Characters\0"
- "Comment\0"
- "DTD\0"
- "EntityReference\0"
- "ProcessingInstruction\0";
-
-static const short QXmlStreamReader_tokenTypeString_indices[] = {
- 0, 8, 16, 30, 42, 55, 66, 77, 85, 89, 105, 0
-};
-
-
-/*!
- \property QXmlStreamReader::namespaceProcessing
- The namespace-processing flag of the stream reader
-
- This property controls whether or not the stream reader processes
- namespaces. If enabled, the reader processes namespaces, otherwise
- it does not.
-
- By default, namespace-processing is enabled.
-*/
-
-
-void QXmlStreamReader::setNamespaceProcessing(bool enable)
-{
- Q_D(QXmlStreamReader);
- d->namespaceProcessing = enable;
-}
-
-bool QXmlStreamReader::namespaceProcessing() const
-{
- Q_D(const QXmlStreamReader);
- return d->namespaceProcessing;
-}
-
-/*! Returns the reader's current token as string.
-
-\sa tokenType()
-*/
-QString QXmlStreamReader::tokenString() const
-{
- Q_D(const QXmlStreamReader);
- return QLatin1String(QXmlStreamReader_tokenTypeString_string +
- QXmlStreamReader_tokenTypeString_indices[d->type]);
-}
-
-#endif // QT_NO_XMLSTREAMREADER
-
-QXmlStreamPrivateTagStack::QXmlStreamPrivateTagStack()
-{
- tagStack.reserve(16);
- tagStackStringStorage.reserve(32);
- tagStackStringStorageSize = 0;
- NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
- namespaceDeclaration.prefix = addToStringStorage(QStringViewLiteral("xml"));
- namespaceDeclaration.namespaceUri = addToStringStorage(QStringViewLiteral("http://www.w3.org/XML/1998/namespace"));
- initialTagStackStringStorageSize = tagStackStringStorageSize;
-}
-
-#ifndef QT_NO_XMLSTREAMREADER
-
-QXmlStreamReaderPrivate::QXmlStreamReaderPrivate(QXmlStreamReader *q)
- :q_ptr(q)
-{
- device = 0;
- deleteDevice = false;
-#ifndef QT_NO_TEXTCODEC
- decoder = 0;
-#endif
- stack_size = 64;
- sym_stack = 0;
- state_stack = 0;
- reallocateStack();
- entityResolver = 0;
- init();
-#define ADD_PREDEFINED(n, v) \
- do { \
- Entity e = Entity::createLiteral(QLatin1String(n), QLatin1String(v)); \
- entityHash.insert(qToStringViewIgnoringNull(e.name), std::move(e)); \
- } while (false)
- ADD_PREDEFINED("lt", "<");
- ADD_PREDEFINED("gt", ">");
- ADD_PREDEFINED("amp", "&");
- ADD_PREDEFINED("apos", "'");
- ADD_PREDEFINED("quot", "\"");
-#undef ADD_PREDEFINED
-}
-
-void QXmlStreamReaderPrivate::init()
-{
- scanDtd = false;
- token = -1;
- token_char = 0;
- isEmptyElement = false;
- isWhitespace = true;
- isCDATA = false;
- standalone = false;
- tos = 0;
- resumeReduction = 0;
- state_stack[tos++] = 0;
- state_stack[tos] = 0;
- putStack.clear();
- putStack.reserve(32);
- textBuffer.clear();
- textBuffer.reserve(256);
- tagStack.clear();
- tagsDone = false;
- attributes.clear();
- attributes.reserve(16);
- lineNumber = lastLineStart = characterOffset = 0;
- readBufferPos = 0;
- nbytesread = 0;
-#ifndef QT_NO_TEXTCODEC
- codec = QTextCodec::codecForMib(106); // utf8
- delete decoder;
- decoder = 0;
-#endif
- attributeStack.clear();
- attributeStack.reserve(16);
- entityParser = 0;
- hasCheckedStartDocument = false;
- normalizeLiterals = false;
- hasSeenTag = false;
- atEnd = false;
- inParseEntity = false;
- referenceToUnparsedEntityDetected = false;
- referenceToParameterEntityDetected = false;
- hasExternalDtdSubset = false;
- lockEncoding = false;
- namespaceProcessing = true;
- rawReadBuffer.clear();
- dataBuffer.clear();
- readBuffer.clear();
- tagStackStringStorageSize = initialTagStackStringStorageSize;
-
- type = QXmlStreamReader::NoToken;
- error = QXmlStreamReader::NoError;
-}
-
-/*
- Well-formed requires that we verify entity values. We do this with a
- standard parser.
- */
-void QXmlStreamReaderPrivate::parseEntity(const QString &value)
-{
- Q_Q(QXmlStreamReader);
-
- if (value.isEmpty())
- return;
-
-
- if (!entityParser)
- entityParser = new QXmlStreamReaderPrivate(q);
- else
- entityParser->init();
- entityParser->inParseEntity = true;
- entityParser->readBuffer = value;
- entityParser->injectToken(PARSE_ENTITY);
- while (!entityParser->atEnd && entityParser->type != QXmlStreamReader::Invalid)
- entityParser->parse();
- if (entityParser->type == QXmlStreamReader::Invalid || entityParser->tagStack.size())
- raiseWellFormedError(QXmlStream::tr("Invalid entity value."));
-
-}
-
-inline void QXmlStreamReaderPrivate::reallocateStack()
-{
- stack_size <<= 1;
- sym_stack = reinterpret_cast<Value*> (realloc(sym_stack, stack_size * sizeof(Value)));
- Q_CHECK_PTR(sym_stack);
- state_stack = reinterpret_cast<int*> (realloc(state_stack, stack_size * sizeof(int)));
- Q_CHECK_PTR(state_stack);
-}
-
-
-QXmlStreamReaderPrivate::~QXmlStreamReaderPrivate()
-{
-#ifndef QT_NO_TEXTCODEC
- delete decoder;
-#endif
- free(sym_stack);
- free(state_stack);
- delete entityParser;
-}
-
-
-inline uint QXmlStreamReaderPrivate::filterCarriageReturn()
-{
- uint peekc = peekChar();
- if (peekc == '\n') {
- if (putStack.size())
- putStack.pop();
- else
- ++readBufferPos;
- return peekc;
- }
- if (peekc == StreamEOF) {
- putChar('\r');
- return 0;
- }
- return '\n';
-}
-
-/*!
- \internal
- If the end of the file is encountered, ~0 is returned.
- */
-inline uint QXmlStreamReaderPrivate::getChar()
-{
- uint c;
- if (putStack.size()) {
- c = atEnd ? StreamEOF : putStack.pop();
- } else {
- if (readBufferPos < readBuffer.size())
- c = readBuffer.at(readBufferPos++).unicode();
- else
- c = getChar_helper();
- }
-
- return c;
-}
-
-inline uint QXmlStreamReaderPrivate::peekChar()
-{
- uint c;
- if (putStack.size()) {
- c = putStack.top();
- } else if (readBufferPos < readBuffer.size()) {
- c = readBuffer.at(readBufferPos).unicode();
- } else {
- if ((c = getChar_helper()) != StreamEOF)
- --readBufferPos;
- }
-
- return c;
-}
-
-/*!
- \internal
-
- Scans characters until \a str is encountered, and validates the characters
- as according to the Char[2] production and do the line-ending normalization.
- If any character is invalid, false is returned, otherwise true upon success.
-
- If \a tokenToInject is not less than zero, injectToken() is called with
- \a tokenToInject when \a str is found.
-
- If any error occurred, false is returned, otherwise true.
- */
-bool QXmlStreamReaderPrivate::scanUntil(const char *str, short tokenToInject)
-{
- int pos = textBuffer.size();
- int oldLineNumber = lineNumber;
-
- uint c;
- while ((c = getChar()) != StreamEOF) {
- /* First, we do the validation & normalization. */
- switch (c) {
- case '\r':
- if ((c = filterCarriageReturn()) == 0)
- break;
- Q_FALLTHROUGH();
- case '\n':
- ++lineNumber;
- lastLineStart = characterOffset + readBufferPos;
- Q_FALLTHROUGH();
- case '\t':
- textBuffer += QChar(c);
- continue;
- default:
- if (c < 0x20 || (c > 0xFFFD && c < 0x10000) || c > QChar::LastValidCodePoint ) {
- raiseWellFormedError(QXmlStream::tr("Invalid XML character."));
- lineNumber = oldLineNumber;
- return false;
- }
- textBuffer += QChar(c);
- }
-
-
- /* Second, attempt to lookup str. */
- if (c == uint(*str)) {
- if (!*(str + 1)) {
- if (tokenToInject >= 0)
- injectToken(tokenToInject);
- return true;
- } else {
- if (scanString(str + 1, tokenToInject, false))
- return true;
- }
- }
- }
- putString(textBuffer, pos);
- textBuffer.resize(pos);
- lineNumber = oldLineNumber;
- return false;
-}
-
-bool QXmlStreamReaderPrivate::scanString(const char *str, short tokenToInject, bool requireSpace)
-{
- int n = 0;
- while (str[n]) {
- uint c = getChar();
- if (c != ushort(str[n])) {
- if (c != StreamEOF)
- putChar(c);
- while (n--) {
- putChar(ushort(str[n]));
- }
- return false;
- }
- ++n;
- }
- for (int i = 0; i < n; ++i)
- textBuffer += QChar(ushort(str[i]));
- if (requireSpace) {
- int s = fastScanSpace();
- if (!s || atEnd) {
- int pos = textBuffer.size() - n - s;
- putString(textBuffer, pos);
- textBuffer.resize(pos);
- return false;
- }
- }
- if (tokenToInject >= 0)
- injectToken(tokenToInject);
- return true;
-}
-
-bool QXmlStreamReaderPrivate::scanAfterLangleBang()
-{
- switch (peekChar()) {
- case '[':
- return scanString(spell[CDATA_START], CDATA_START, false);
- case 'D':
- return scanString(spell[DOCTYPE], DOCTYPE);
- case 'A':
- return scanString(spell[ATTLIST], ATTLIST);
- case 'N':
- return scanString(spell[NOTATION], NOTATION);
- case 'E':
- if (scanString(spell[ELEMENT], ELEMENT))
- return true;
- return scanString(spell[ENTITY], ENTITY);
-
- default:
- ;
- };
- return false;
-}
-
-bool QXmlStreamReaderPrivate::scanPublicOrSystem()
-{
- switch (peekChar()) {
- case 'S':
- return scanString(spell[SYSTEM], SYSTEM);
- case 'P':
- return scanString(spell[PUBLIC], PUBLIC);
- default:
- ;
- }
- return false;
-}
-
-bool QXmlStreamReaderPrivate::scanNData()
-{
- if (fastScanSpace()) {
- if (scanString(spell[NDATA], NDATA))
- return true;
- putChar(' ');
- }
- return false;
-}
-
-bool QXmlStreamReaderPrivate::scanAfterDefaultDecl()
-{
- switch (peekChar()) {
- case 'R':
- return scanString(spell[REQUIRED], REQUIRED, false);
- case 'I':
- return scanString(spell[IMPLIED], IMPLIED, false);
- case 'F':
- return scanString(spell[FIXED], FIXED, false);
- default:
- ;
- }
- return false;
-}
-
-bool QXmlStreamReaderPrivate::scanAttType()
-{
- switch (peekChar()) {
- case 'C':
- return scanString(spell[CDATA], CDATA);
- case 'I':
- if (scanString(spell[ID], ID))
- return true;
- if (scanString(spell[IDREF], IDREF))
- return true;
- return scanString(spell[IDREFS], IDREFS);
- case 'E':
- if (scanString(spell[ENTITY], ENTITY))
- return true;
- return scanString(spell[ENTITIES], ENTITIES);
- case 'N':
- if (scanString(spell[NOTATION], NOTATION))
- return true;
- if (scanString(spell[NMTOKEN], NMTOKEN))
- return true;
- return scanString(spell[NMTOKENS], NMTOKENS);
- default:
- ;
- }
- return false;
-}
-
-/*!
- \internal
-
- Scan strings with quotes or apostrophes surround them. For instance,
- attributes, the version and encoding field in the XML prolog and
- entity declarations.
-
- If normalizeLiterals is set to true, the function also normalizes
- whitespace. It is set to true when the first start tag is
- encountered.
-
- */
-inline int QXmlStreamReaderPrivate::fastScanLiteralContent()
-{
- int n = 0;
- uint c;
- while ((c = getChar()) != StreamEOF) {
- switch (ushort(c)) {
- case 0xfffe:
- case 0xffff:
- case 0:
- /* The putChar() call is necessary so the parser re-gets
- * the character from the input source, when raising an error. */
- putChar(c);
- return n;
- case '\r':
- if (filterCarriageReturn() == 0)
- return n;
- Q_FALLTHROUGH();
- case '\n':
- ++lineNumber;
- lastLineStart = characterOffset + readBufferPos;
- Q_FALLTHROUGH();
- case ' ':
- case '\t':
- if (normalizeLiterals)
- textBuffer += QLatin1Char(' ');
- else
- textBuffer += QChar(c);
- ++n;
- break;
- case '&':
- case '<':
- case '\"':
- case '\'':
- if (!(c & 0xff0000)) {
- putChar(c);
- return n;
- }
- Q_FALLTHROUGH();
- default:
- if (c < 0x20) {
- putChar(c);
- return n;
- }
- textBuffer += QChar(c);
- ++n;
- }
- }
- return n;
-}
-
-inline int QXmlStreamReaderPrivate::fastScanSpace()
-{
- int n = 0;
- uint c;
- while ((c = getChar()) != StreamEOF) {
- switch (c) {
- case '\r':
- if ((c = filterCarriageReturn()) == 0)
- return n;
- Q_FALLTHROUGH();
- case '\n':
- ++lineNumber;
- lastLineStart = characterOffset + readBufferPos;
- Q_FALLTHROUGH();
- case ' ':
- case '\t':
- textBuffer += QChar(c);
- ++n;
- break;
- default:
- putChar(c);
- return n;
- }
- }
- return n;
-}
-
-/*!
- \internal
-
- Used for text nodes essentially. That is, characters appearing
- inside elements.
- */
-inline int QXmlStreamReaderPrivate::fastScanContentCharList()
-{
- int n = 0;
- uint c;
- while ((c = getChar()) != StreamEOF) {
- switch (ushort(c)) {
- case 0xfffe:
- case 0xffff:
- case 0:
- putChar(c);
- return n;
- case ']': {
- isWhitespace = false;
- int pos = textBuffer.size();
- textBuffer += QChar(ushort(c));
- ++n;
- while ((c = getChar()) == ']') {
- textBuffer += QChar(ushort(c));
- ++n;
- }
- if (c == 0) {
- putString(textBuffer, pos);
- textBuffer.resize(pos);
- } else if (c == '>' && textBuffer.at(textBuffer.size()-2) == QLatin1Char(']')) {
- raiseWellFormedError(QXmlStream::tr("Sequence ']]>' not allowed in content."));
- } else {
- putChar(c);
- break;
- }
- return n;
- } break;
- case '\r':
- if ((c = filterCarriageReturn()) == 0)
- return n;
- Q_FALLTHROUGH();
- case '\n':
- ++lineNumber;
- lastLineStart = characterOffset + readBufferPos;
- Q_FALLTHROUGH();
- case ' ':
- case '\t':
- textBuffer += QChar(ushort(c));
- ++n;
- break;
- case '&':
- case '<':
- if (!(c & 0xff0000)) {
- putChar(c);
- return n;
- }
- Q_FALLTHROUGH();
- default:
- if (c < 0x20) {
- putChar(c);
- return n;
- }
- isWhitespace = false;
- textBuffer += QChar(ushort(c));
- ++n;
- }
- }
- return n;
-}
-
-inline int QXmlStreamReaderPrivate::fastScanName(int *prefix)
-{
- int n = 0;
- uint c;
- while ((c = getChar()) != StreamEOF) {
- switch (c) {
- case '\n':
- case ' ':
- case '\t':
- case '\r':
- case '&':
- case '#':
- case '\'':
- case '\"':
- case '<':
- case '>':
- case '[':
- case ']':
- case '=':
- case '%':
- case '/':
- case ';':
- case '?':
- case '!':
- case '^':
- case '|':
- case ',':
- case '(':
- case ')':
- case '+':
- case '*':
- putChar(c);
- if (prefix && *prefix == n+1) {
- *prefix = 0;
- putChar(':');
- --n;
- }
- return n;
- case ':':
- if (prefix) {
- if (*prefix == 0) {
- *prefix = n+2;
- } else { // only one colon allowed according to the namespace spec.
- putChar(c);
- return n;
- }
- } else {
- putChar(c);
- return n;
- }
- Q_FALLTHROUGH();
- default:
- textBuffer += QChar(c);
- ++n;
- }
- }
-
- if (prefix)
- *prefix = 0;
- int pos = textBuffer.size() - n;
- putString(textBuffer, pos);
- textBuffer.resize(pos);
- return 0;
-}
-
-enum NameChar { NameBeginning, NameNotBeginning, NotName };
-
-static const char Begi = static_cast<char>(NameBeginning);
-static const char NtBg = static_cast<char>(NameNotBeginning);
-static const char NotN = static_cast<char>(NotName);
-
-static const char nameCharTable[128] =
-{
-// 0x00
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
-// 0x10
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
-// 0x20 (0x2D is '-', 0x2E is '.')
- NotN, NotN, NotN, NotN, NotN, NotN, NotN, NotN,
- NotN, NotN, NotN, NotN, NotN, NtBg, NtBg, NotN,
-// 0x30 (0x30..0x39 are '0'..'9', 0x3A is ':')
- NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg, NtBg,
- NtBg, NtBg, Begi, NotN, NotN, NotN, NotN, NotN,
-// 0x40 (0x41..0x5A are 'A'..'Z')
- NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
-// 0x50 (0x5F is '_')
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, NotN, NotN, NotN, NotN, Begi,
-// 0x60 (0x61..0x7A are 'a'..'z')
- NotN, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
-// 0x70
- Begi, Begi, Begi, Begi, Begi, Begi, Begi, Begi,
- Begi, Begi, Begi, NotN, NotN, NotN, NotN, NotN
-};
-
-static inline NameChar fastDetermineNameChar(QChar ch)
-{
- ushort uc = ch.unicode();
- if (!(uc & ~0x7f)) // uc < 128
- return static_cast<NameChar>(nameCharTable[uc]);
-
- QChar::Category cat = ch.category();
- // ### some these categories might be slightly wrong
- if ((cat >= QChar::Letter_Uppercase && cat <= QChar::Letter_Other)
- || cat == QChar::Number_Letter)
- return NameBeginning;
- if ((cat >= QChar::Number_DecimalDigit && cat <= QChar::Number_Other)
- || (cat >= QChar::Mark_NonSpacing && cat <= QChar::Mark_Enclosing))
- return NameNotBeginning;
- return NotName;
-}
-
-inline int QXmlStreamReaderPrivate::fastScanNMTOKEN()
-{
- int n = 0;
- uint c;
- while ((c = getChar()) != StreamEOF) {
- if (fastDetermineNameChar(c) == NotName) {
- putChar(c);
- return n;
- } else {
- ++n;
- textBuffer += QChar(c);
- }
- }
-
- int pos = textBuffer.size() - n;
- putString(textBuffer, pos);
- textBuffer.resize(pos);
-
- return n;
-}
-
-void QXmlStreamReaderPrivate::putString(const QString &s, int from)
-{
- putStack.reserve(s.size());
- for (int i = s.size()-1; i >= from; --i)
- putStack.rawPush() = s.at(i).unicode();
-}
-
-void QXmlStreamReaderPrivate::putStringLiteral(const QString &s)
-{
- putStack.reserve(s.size());
- for (int i = s.size()-1; i >= 0; --i)
- putStack.rawPush() = ((LETTER << 16) | s.at(i).unicode());
-}
-
-void QXmlStreamReaderPrivate::putReplacement(const QString &s)
-{
- putStack.reserve(s.size());
- for (int i = s.size()-1; i >= 0; --i) {
- ushort c = s.at(i).unicode();
- if (c == '\n' || c == '\r')
- putStack.rawPush() = ((LETTER << 16) | c);
- else
- putStack.rawPush() = c;
- }
-}
-void QXmlStreamReaderPrivate::putReplacementInAttributeValue(const QString &s)
-{
- putStack.reserve(s.size());
- for (int i = s.size()-1; i >= 0; --i) {
- ushort c = s.at(i).unicode();
- if (c == '&' || c == ';')
- putStack.rawPush() = c;
- else if (c == '\n' || c == '\r')
- putStack.rawPush() = ' ';
- else
- putStack.rawPush() = ((LETTER << 16) | c);
- }
-}
-
-uint QXmlStreamReaderPrivate::getChar_helper()
-{
- const int BUFFER_SIZE = 8192;
- characterOffset += readBufferPos;
- readBufferPos = 0;
- readBuffer.resize(0);
-#ifndef QT_NO_TEXTCODEC
- if (decoder)
-#endif
- nbytesread = 0;
- if (device) {
- rawReadBuffer.resize(BUFFER_SIZE);
- int nbytesreadOrMinus1 = device->read(rawReadBuffer.data() + nbytesread, BUFFER_SIZE - nbytesread);
- nbytesread += qMax(nbytesreadOrMinus1, 0);
- } else {
- if (nbytesread)
- rawReadBuffer += dataBuffer;
- else
- rawReadBuffer = dataBuffer;
- nbytesread = rawReadBuffer.size();
- dataBuffer.clear();
- }
- if (!nbytesread) {
- atEnd = true;
- return StreamEOF;
- }
-
-#ifndef QT_NO_TEXTCODEC
- if (!decoder) {
- if (nbytesread < 4) { // the 4 is to cover 0xef 0xbb 0xbf plus
- // one extra for the utf8 codec
- atEnd = true;
- return StreamEOF;
- }
- int mib = 106; // UTF-8
-
- // look for byte order mark
- uchar ch1 = rawReadBuffer.at(0);
- uchar ch2 = rawReadBuffer.at(1);
- uchar ch3 = rawReadBuffer.at(2);
- uchar ch4 = rawReadBuffer.at(3);
-
- if ((ch1 == 0 && ch2 == 0 && ch3 == 0xfe && ch4 == 0xff) ||
- (ch1 == 0xff && ch2 == 0xfe && ch3 == 0 && ch4 == 0))
- mib = 1017; // UTF-32 with byte order mark
- else if (ch1 == 0x3c && ch2 == 0x00 && ch3 == 0x00 && ch4 == 0x00)
- mib = 1019; // UTF-32LE
- else if (ch1 == 0x00 && ch2 == 0x00 && ch3 == 0x00 && ch4 == 0x3c)
- mib = 1018; // UTF-32BE
- else if ((ch1 == 0xfe && ch2 == 0xff) || (ch1 == 0xff && ch2 == 0xfe))
- mib = 1015; // UTF-16 with byte order mark
- else if (ch1 == 0x3c && ch2 == 0x00)
- mib = 1014; // UTF-16LE
- else if (ch1 == 0x00 && ch2 == 0x3c)
- mib = 1013; // UTF-16BE
- codec = QTextCodec::codecForMib(mib);
- Q_ASSERT(codec);
- decoder = codec->makeDecoder();
- }
-
- decoder->toUnicode(&readBuffer, rawReadBuffer.constData(), nbytesread);
-
- if(lockEncoding && decoder->hasFailure()) {
- raiseWellFormedError(QXmlStream::tr("Encountered incorrectly encoded content."));
- readBuffer.clear();
- return StreamEOF;
- }
-#else
- readBuffer = QString::fromLatin1(rawReadBuffer.data(), nbytesread);
-#endif // QT_NO_TEXTCODEC
-
- readBuffer.reserve(1); // keep capacity when calling resize() next time
-
- if (readBufferPos < readBuffer.size()) {
- ushort c = readBuffer.at(readBufferPos++).unicode();
- return c;
- }
-
- atEnd = true;
- return StreamEOF;
-}
-
-QStringRef QXmlStreamReaderPrivate::namespaceForPrefix(const QStringRef &prefix)
-{
- for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) {
- const NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(j);
- if (namespaceDeclaration.prefix == prefix) {
- return namespaceDeclaration.namespaceUri;
- }
- }
-
-#if 1
- if (namespaceProcessing && !prefix.isEmpty())
- raiseWellFormedError(QXmlStream::tr("Namespace prefix '%1' not declared").arg(prefix));
-#endif
-
- return QStringRef();
-}
-
-/*
- uses namespaceForPrefix and builds the attribute vector
- */
-void QXmlStreamReaderPrivate::resolveTag()
-{
- int n = attributeStack.size();
-
- if (namespaceProcessing) {
- for (int a = 0; a < dtdAttributes.size(); ++a) {
- DtdAttribute &dtdAttribute = dtdAttributes[a];
- if (!dtdAttribute.isNamespaceAttribute
- || dtdAttribute.defaultValue.isNull()
- || dtdAttribute.tagName != qualifiedName
- || dtdAttribute.attributeQualifiedName.isNull())
- continue;
- int i = 0;
- while (i < n && symName(attributeStack[i].key) != dtdAttribute.attributeQualifiedName)
- ++i;
- if (i != n)
- continue;
- if (dtdAttribute.attributePrefix.isEmpty() && dtdAttribute.attributeName == QLatin1String("xmlns")) {
- NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
- namespaceDeclaration.prefix.clear();
-
- const QStringRef ns(dtdAttribute.defaultValue);
- if(ns == QLatin1String("http://www.w3.org/2000/xmlns/") ||
- ns == QLatin1String("http://www.w3.org/XML/1998/namespace"))
- raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
- else
- namespaceDeclaration.namespaceUri = ns;
- } else if (dtdAttribute.attributePrefix == QLatin1String("xmlns")) {
- NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
- QStringRef namespacePrefix = dtdAttribute.attributeName;
- QStringRef namespaceUri = dtdAttribute.defaultValue;
- if (((namespacePrefix == QLatin1String("xml"))
- ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace")))
- || namespaceUri == QLatin1String("http://www.w3.org/2000/xmlns/")
- || namespaceUri.isEmpty()
- || namespacePrefix == QLatin1String("xmlns"))
- raiseWellFormedError(QXmlStream::tr("Illegal namespace declaration."));
-
- namespaceDeclaration.prefix = namespacePrefix;
- namespaceDeclaration.namespaceUri = namespaceUri;
- }
- }
- }
-
- tagStack.top().namespaceDeclaration.namespaceUri = namespaceUri = namespaceForPrefix(prefix);
-
- attributes.resize(n);
-
- for (int i = 0; i < n; ++i) {
- QXmlStreamAttribute &attribute = attributes[i];
- Attribute &attrib = attributeStack[i];
- QStringRef prefix(symPrefix(attrib.key));
- QStringRef name(symString(attrib.key));
- QStringRef qualifiedName(symName(attrib.key));
- QStringRef value(symString(attrib.value));
-
- attribute.m_name = QXmlStreamStringRef(name);
- attribute.m_qualifiedName = QXmlStreamStringRef(qualifiedName);
- attribute.m_value = QXmlStreamStringRef(value);
-
- if (!prefix.isEmpty()) {
- QStringRef attributeNamespaceUri = namespaceForPrefix(prefix);
- attribute.m_namespaceUri = QXmlStreamStringRef(attributeNamespaceUri);
- }
-
- for (int j = 0; j < i; ++j) {
- if (attributes[j].name() == attribute.name()
- && attributes[j].namespaceUri() == attribute.namespaceUri()
- && (namespaceProcessing || attributes[j].qualifiedName() == attribute.qualifiedName()))
- raiseWellFormedError(QXmlStream::tr("Attribute '%1' redefined.").arg(attribute.qualifiedName()));
- }
- }
-
- for (int a = 0; a < dtdAttributes.size(); ++a) {
- DtdAttribute &dtdAttribute = dtdAttributes[a];
- if (dtdAttribute.isNamespaceAttribute
- || dtdAttribute.defaultValue.isNull()
- || dtdAttribute.tagName != qualifiedName
- || dtdAttribute.attributeQualifiedName.isNull())
- continue;
- int i = 0;
- while (i < n && symName(attributeStack[i].key) != dtdAttribute.attributeQualifiedName)
- ++i;
- if (i != n)
- continue;
-
-
-
- QXmlStreamAttribute attribute;
- attribute.m_name = QXmlStreamStringRef(dtdAttribute.attributeName);
- attribute.m_qualifiedName = QXmlStreamStringRef(dtdAttribute.attributeQualifiedName);
- attribute.m_value = QXmlStreamStringRef(dtdAttribute.defaultValue);
-
- if (!dtdAttribute.attributePrefix.isEmpty()) {
- QStringRef attributeNamespaceUri = namespaceForPrefix(dtdAttribute.attributePrefix);
- attribute.m_namespaceUri = QXmlStreamStringRef(attributeNamespaceUri);
- }
- attribute.m_isDefault = true;
- attributes.append(attribute);
- }
-
- attributeStack.clear();
-}
-
-void QXmlStreamReaderPrivate::resolvePublicNamespaces()
-{
- const Tag &tag = tagStack.top();
- int n = namespaceDeclarations.size() - tag.namespaceDeclarationsSize;
- publicNamespaceDeclarations.resize(n);
- for (int i = 0; i < n; ++i) {
- const NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(tag.namespaceDeclarationsSize + i);
- QXmlStreamNamespaceDeclaration &publicNamespaceDeclaration = publicNamespaceDeclarations[i];
- publicNamespaceDeclaration.m_prefix = QXmlStreamStringRef(namespaceDeclaration.prefix);
- publicNamespaceDeclaration.m_namespaceUri = QXmlStreamStringRef(namespaceDeclaration.namespaceUri);
- }
-}
-
-void QXmlStreamReaderPrivate::resolveDtd()
-{
- publicNotationDeclarations.resize(notationDeclarations.size());
- for (int i = 0; i < notationDeclarations.size(); ++i) {
- const QXmlStreamReaderPrivate::NotationDeclaration &notationDeclaration = notationDeclarations.at(i);
- QXmlStreamNotationDeclaration &publicNotationDeclaration = publicNotationDeclarations[i];
- publicNotationDeclaration.m_name = QXmlStreamStringRef(notationDeclaration.name);
- publicNotationDeclaration.m_systemId = QXmlStreamStringRef(notationDeclaration.systemId);
- publicNotationDeclaration.m_publicId = QXmlStreamStringRef(notationDeclaration.publicId);
-
- }
- notationDeclarations.clear();
- publicEntityDeclarations.resize(entityDeclarations.size());
- for (int i = 0; i < entityDeclarations.size(); ++i) {
- const QXmlStreamReaderPrivate::EntityDeclaration &entityDeclaration = entityDeclarations.at(i);
- QXmlStreamEntityDeclaration &publicEntityDeclaration = publicEntityDeclarations[i];
- publicEntityDeclaration.m_name = QXmlStreamStringRef(entityDeclaration.name);
- publicEntityDeclaration.m_notationName = QXmlStreamStringRef(entityDeclaration.notationName);
- publicEntityDeclaration.m_systemId = QXmlStreamStringRef(entityDeclaration.systemId);
- publicEntityDeclaration.m_publicId = QXmlStreamStringRef(entityDeclaration.publicId);
- publicEntityDeclaration.m_value = QXmlStreamStringRef(entityDeclaration.value);
- }
- entityDeclarations.clear();
- parameterEntityHash.clear();
-}
-
-uint QXmlStreamReaderPrivate::resolveCharRef(int symbolIndex)
-{
- bool ok = true;
- uint s;
- // ### add toXShort to QStringRef?
- if (sym(symbolIndex).c == 'x')
- s = symString(symbolIndex, 1).toUInt(&ok, 16);
- else
- s = symString(symbolIndex).toUInt(&ok, 10);
-
- ok &= (s == 0x9 || s == 0xa || s == 0xd || (s >= 0x20 && s <= 0xd7ff)
- || (s >= 0xe000 && s <= 0xfffd) || (s >= 0x10000 && s <= QChar::LastValidCodePoint));
-
- return ok ? s : 0;
-}
-
-
-void QXmlStreamReaderPrivate::checkPublicLiteral(const QStringRef &publicId)
-{
-//#x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
-
- const ushort *data = reinterpret_cast<const ushort *>(publicId.constData());
- uchar c = 0;
- int i;
- for (i = publicId.size() - 1; i >= 0; --i) {
- if (data[i] < 256)
- switch ((c = data[i])) {
- case ' ': case '\n': case '\r': case '-': case '(': case ')':
- case '+': case ',': case '.': case '/': case ':': case '=':
- case '?': case ';': case '!': case '*': case '#': case '@':
- case '$': case '_': case '%': case '\'': case '\"':
- continue;
- default:
- if ((c >= 'a' && c <= 'z')
- || (c >= 'A' && c <= 'Z')
- || (c >= '0' && c <= '9'))
- continue;
- }
- break;
- }
- if (i >= 0)
- raiseWellFormedError(QXmlStream::tr("Unexpected character '%1' in public id literal.").arg(QChar(QLatin1Char(c))));
-}
-
-/*
- Checks whether the document starts with an xml declaration. If it
- does, this function returns \c true; otherwise it sets up everything
- for a synthetic start document event and returns \c false.
- */
-bool QXmlStreamReaderPrivate::checkStartDocument()
-{
- hasCheckedStartDocument = true;
-
- if (scanString(spell[XML], XML))
- return true;
-
- type = QXmlStreamReader::StartDocument;
- if (atEnd) {
- hasCheckedStartDocument = false;
- raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
- }
- return false;
-}
-
-void QXmlStreamReaderPrivate::startDocument()
-{
- QString err;
- if (documentVersion != QLatin1String("1.0")) {
- if (documentVersion.contains(QLatin1Char(' ')))
- err = QXmlStream::tr("Invalid XML version string.");
- else
- err = QXmlStream::tr("Unsupported XML version.");
- }
- int n = attributeStack.size();
-
- /* We use this bool to ensure that the pesudo attributes are in the
- * proper order:
- *
- * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' */
- bool hasStandalone = false;
-
- for (int i = 0; err.isNull() && i < n; ++i) {
- Attribute &attrib = attributeStack[i];
- QStringRef prefix(symPrefix(attrib.key));
- QStringRef key(symString(attrib.key));
- QStringRef value(symString(attrib.value));
-
- if (prefix.isEmpty() && key == QLatin1String("encoding")) {
- documentEncoding = value;
-
- if(hasStandalone)
- err = QXmlStream::tr("The standalone pseudo attribute must appear after the encoding.");
- if (!QXmlUtils::isEncName(value))
- err = QXmlStream::tr("%1 is an invalid encoding name.").arg(value);
- else {
-#ifdef QT_NO_TEXTCODEC
- readBuffer = QString::fromLatin1(rawReadBuffer.data(), nbytesread);
-#else
- QTextCodec *const newCodec = QTextCodec::codecForName(value.toLatin1());
- if (!newCodec)
- err = QXmlStream::tr("Encoding %1 is unsupported").arg(value);
- else if (newCodec != codec && !lockEncoding) {
- codec = newCodec;
- delete decoder;
- decoder = codec->makeDecoder();
- decoder->toUnicode(&readBuffer, rawReadBuffer.data(), nbytesread);
- }
-#endif // QT_NO_TEXTCODEC
- }
- } else if (prefix.isEmpty() && key == QLatin1String("standalone")) {
- hasStandalone = true;
- if (value == QLatin1String("yes"))
- standalone = true;
- else if (value == QLatin1String("no"))
- standalone = false;
- else
- err = QXmlStream::tr("Standalone accepts only yes or no.");
- } else {
- err = QXmlStream::tr("Invalid attribute in XML declaration.");
- }
- }
-
- if (!err.isNull())
- raiseWellFormedError(err);
- attributeStack.clear();
-}
-
-
-void QXmlStreamReaderPrivate::raiseError(QXmlStreamReader::Error error, const QString& message)
-{
- this->error = error;
- errorString = message;
- if (errorString.isNull()) {
- if (error == QXmlStreamReader::PrematureEndOfDocumentError)
- errorString = QXmlStream::tr("Premature end of document.");
- else if (error == QXmlStreamReader::CustomError)
- errorString = QXmlStream::tr("Invalid document.");
- }
-
- type = QXmlStreamReader::Invalid;
-}
-
-void QXmlStreamReaderPrivate::raiseWellFormedError(const QString &message)
-{
- raiseError(QXmlStreamReader::NotWellFormedError, message);
-}
-
-void QXmlStreamReaderPrivate::parseError()
-{
-
- if (token == EOF_SYMBOL) {
- raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
- return;
- }
- const int nmax = 4;
- QString error_message;
- int ers = state_stack[tos];
- int nexpected = 0;
- int expected[nmax];
- if (token != ERROR)
- for (int tk = 0; tk < TERMINAL_COUNT; ++tk) {
- int k = t_action(ers, tk);
- if (k <= 0)
- continue;
- if (spell[tk]) {
- if (nexpected < nmax)
- expected[nexpected++] = tk;
- }
- }
-
- if (nexpected && nexpected < nmax) {
- //: '<first option>'
- QString exp_str = QXmlStream::tr("'%1'", "expected").arg(QLatin1String(spell[expected[0]]));
- if (nexpected == 2) {
- //: <first option>, '<second option>'
- exp_str = QXmlStream::tr("%1 or '%2'", "expected").arg(exp_str, QLatin1String(spell[expected[1]]));
- } else if (nexpected > 2) {
- int s = 1;
- for (; s < nexpected - 1; ++s) {
- //: <options so far>, '<next option>'
- exp_str = QXmlStream::tr("%1, '%2'", "expected").arg(exp_str, QLatin1String(spell[expected[s]]));
- }
- //: <options so far>, or '<final option>'
- exp_str = QXmlStream::tr("%1, or '%2'", "expected").arg(exp_str, QLatin1String(spell[expected[s]]));
- }
- error_message = QXmlStream::tr("Expected %1, but got '%2'.").arg(exp_str, QLatin1String(spell[token]));
- } else {
- error_message = QXmlStream::tr("Unexpected '%1'.").arg(QLatin1String(spell[token]));
- }
-
- raiseWellFormedError(error_message);
-}
-
-void QXmlStreamReaderPrivate::resume(int rule) {
- resumeReduction = rule;
- if (error == QXmlStreamReader::NoError)
- raiseError(QXmlStreamReader::PrematureEndOfDocumentError);
-}
-
-/*! Returns the current line number, starting with 1.
-
-\sa columnNumber(), characterOffset()
- */
-qint64 QXmlStreamReader::lineNumber() const
-{
- Q_D(const QXmlStreamReader);
- return d->lineNumber + 1; // in public we start with 1
-}
-
-/*! Returns the current column number, starting with 0.
-
-\sa lineNumber(), characterOffset()
- */
-qint64 QXmlStreamReader::columnNumber() const
-{
- Q_D(const QXmlStreamReader);
- return d->characterOffset - d->lastLineStart + d->readBufferPos;
-}
-
-/*! Returns the current character offset, starting with 0.
-
-\sa lineNumber(), columnNumber()
-*/
-qint64 QXmlStreamReader::characterOffset() const
-{
- Q_D(const QXmlStreamReader);
- return d->characterOffset + d->readBufferPos;
-}
-
-
-/*! Returns the text of \l Characters, \l Comment, \l DTD, or
- EntityReference.
- */
-QStringRef QXmlStreamReader::text() const
-{
- Q_D(const QXmlStreamReader);
- return d->text;
-}
-
-
-/*! If the tokenType() is \l DTD, this function returns the DTD's
- notation declarations. Otherwise an empty vector is returned.
-
- The QXmlStreamNotationDeclarations class is defined to be a QVector
- of QXmlStreamNotationDeclaration.
- */
-QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const
-{
- Q_D(const QXmlStreamReader);
- if (d->notationDeclarations.size())
- const_cast<QXmlStreamReaderPrivate *>(d)->resolveDtd();
- return d->publicNotationDeclarations;
-}
-
-
-/*! If the tokenType() is \l DTD, this function returns the DTD's
- unparsed (external) entity declarations. Otherwise an empty vector is returned.
-
- The QXmlStreamEntityDeclarations class is defined to be a QVector
- of QXmlStreamEntityDeclaration.
- */
-QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const
-{
- Q_D(const QXmlStreamReader);
- if (d->entityDeclarations.size())
- const_cast<QXmlStreamReaderPrivate *>(d)->resolveDtd();
- return d->publicEntityDeclarations;
-}
-
-/*!
- \since 4.4
-
- If the tokenType() is \l DTD, this function returns the DTD's
- name. Otherwise an empty string is returned.
-
- */
-QStringRef QXmlStreamReader::dtdName() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::DTD)
- return d->dtdName;
- return QStringRef();
-}
-
-/*!
- \since 4.4
-
- If the tokenType() is \l DTD, this function returns the DTD's
- public identifier. Otherwise an empty string is returned.
-
- */
-QStringRef QXmlStreamReader::dtdPublicId() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::DTD)
- return d->dtdPublicId;
- return QStringRef();
-}
-
-/*!
- \since 4.4
-
- If the tokenType() is \l DTD, this function returns the DTD's
- system identifier. Otherwise an empty string is returned.
-
- */
-QStringRef QXmlStreamReader::dtdSystemId() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::DTD)
- return d->dtdSystemId;
- return QStringRef();
-}
-
-/*! If the tokenType() is \l StartElement, this function returns the
- element's namespace declarations. Otherwise an empty vector is
- returned.
-
- The QXmlStreamNamespaceDeclarations class is defined to be a QVector
- of QXmlStreamNamespaceDeclaration.
-
- \sa addExtraNamespaceDeclaration(), addExtraNamespaceDeclarations()
- */
-QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const
-{
- Q_D(const QXmlStreamReader);
- if (d->publicNamespaceDeclarations.isEmpty() && d->type == StartElement)
- const_cast<QXmlStreamReaderPrivate *>(d)->resolvePublicNamespaces();
- return d->publicNamespaceDeclarations;
-}
-
-
-/*!
- \since 4.4
-
- Adds an \a extraNamespaceDeclaration. The declaration will be
- valid for children of the current element, or - should the function
- be called before any elements are read - for the entire XML
- document.
-
- \sa namespaceDeclarations(), addExtraNamespaceDeclarations(), setNamespaceProcessing()
- */
-void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)
-{
- Q_D(QXmlStreamReader);
- QXmlStreamReaderPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push();
- namespaceDeclaration.prefix = d->addToStringStorage(extraNamespaceDeclaration.prefix());
- namespaceDeclaration.namespaceUri = d->addToStringStorage(extraNamespaceDeclaration.namespaceUri());
-}
-
-/*!
- \since 4.4
-
- Adds a vector of declarations specified by \a extraNamespaceDeclarations.
-
- \sa namespaceDeclarations(), addExtraNamespaceDeclaration()
- */
-void QXmlStreamReader::addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)
-{
- for (int i = 0; i < extraNamespaceDeclarations.size(); ++i)
- addExtraNamespaceDeclaration(extraNamespaceDeclarations.at(i));
-}
-
-
-/*! Convenience function to be called in case a StartElement was
- read. Reads until the corresponding EndElement and returns all text
- in-between. In case of no error, the current token (see tokenType())
- after having called this function is EndElement.
-
- The function concatenates text() when it reads either \l Characters
- or EntityReference tokens, but skips ProcessingInstruction and \l
- Comment. If the current token is not StartElement, an empty string is
- returned.
-
- The \a behaviour defines what happens in case anything else is
- read before reaching EndElement. The function can include the text from
- child elements (useful for example for HTML), ignore child elements, or
- raise an UnexpectedElementError and return what was read so far (default).
-
- \since 4.6
- */
-QString QXmlStreamReader::readElementText(ReadElementTextBehaviour behaviour)
-{
- Q_D(QXmlStreamReader);
- if (isStartElement()) {
- QString result;
- forever {
- switch (readNext()) {
- case Characters:
- case EntityReference:
- result.insert(result.size(), d->text.unicode(), d->text.size());
- break;
- case EndElement:
- return result;
- case ProcessingInstruction:
- case Comment:
- break;
- case StartElement:
- if (behaviour == SkipChildElements) {
- skipCurrentElement();
- break;
- } else if (behaviour == IncludeChildElements) {
- result += readElementText(behaviour);
- break;
- }
- Q_FALLTHROUGH();
- default:
- if (d->error || behaviour == ErrorOnUnexpectedElement) {
- if (!d->error)
- d->raiseError(UnexpectedElementError, QXmlStream::tr("Expected character data."));
- return result;
- }
- }
- }
- }
- return QString();
-}
-
-/*! Raises a custom error with an optional error \a message.
-
- \sa error(), errorString()
- */
-void QXmlStreamReader::raiseError(const QString& message)
-{
- Q_D(QXmlStreamReader);
- d->raiseError(CustomError, message);
-}
-
-/*!
- Returns the error message that was set with raiseError().
-
- \sa error(), lineNumber(), columnNumber(), characterOffset()
- */
-QString QXmlStreamReader::errorString() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::Invalid)
- return d->errorString;
- return QString();
-}
-
-/*! Returns the type of the current error, or NoError if no error occurred.
-
- \sa errorString(), raiseError()
- */
-QXmlStreamReader::Error QXmlStreamReader::error() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::Invalid)
- return d->error;
- return NoError;
-}
-
-/*!
- Returns the target of a ProcessingInstruction.
- */
-QStringRef QXmlStreamReader::processingInstructionTarget() const
-{
- Q_D(const QXmlStreamReader);
- return d->processingInstructionTarget;
-}
-
-/*!
- Returns the data of a ProcessingInstruction.
- */
-QStringRef QXmlStreamReader::processingInstructionData() const
-{
- Q_D(const QXmlStreamReader);
- return d->processingInstructionData;
-}
-
-
-
-/*!
- Returns the local name of a StartElement, EndElement, or an EntityReference.
-
- \sa namespaceUri(), qualifiedName()
- */
-QStringRef QXmlStreamReader::name() const
-{
- Q_D(const QXmlStreamReader);
- return d->name;
-}
-
-/*!
- Returns the namespaceUri of a StartElement or EndElement.
-
- \sa name(), qualifiedName()
- */
-QStringRef QXmlStreamReader::namespaceUri() const
-{
- Q_D(const QXmlStreamReader);
- return d->namespaceUri;
-}
-
-/*!
- Returns the qualified name of a StartElement or EndElement;
-
- A qualified name is the raw name of an element in the XML data. It
- consists of the namespace prefix, followed by colon, followed by the
- element's local name. Since the namespace prefix is not unique (the
- same prefix can point to different namespaces and different prefixes
- can point to the same namespace), you shouldn't use qualifiedName(),
- but the resolved namespaceUri() and the attribute's local name().
-
- \sa name(), prefix(), namespaceUri()
- */
-QStringRef QXmlStreamReader::qualifiedName() const
-{
- Q_D(const QXmlStreamReader);
- return d->qualifiedName;
-}
-
-
-
-/*!
- \since 4.4
-
- Returns the prefix of a StartElement or EndElement.
-
- \sa name(), qualifiedName()
-*/
-QStringRef QXmlStreamReader::prefix() const
-{
- Q_D(const QXmlStreamReader);
- return d->prefix;
-}
-
-/*!
- Returns the attributes of a StartElement.
- */
-QXmlStreamAttributes QXmlStreamReader::attributes() const
-{
- Q_D(const QXmlStreamReader);
- return d->attributes;
-}
-
-#endif // QT_NO_XMLSTREAMREADER
-
-/*!
- \class QXmlStreamAttribute
- \inmodule QtCore
- \since 4.3
- \reentrant
- \brief The QXmlStreamAttribute class represents a single XML attribute
-
- \ingroup xml-tools
-
- An attribute consists of an optionally empty namespaceUri(), a
- name(), a value(), and an isDefault() attribute.
-
- The raw XML attribute name is returned as qualifiedName().
-*/
-
-/*!
- Creates an empty attribute.
- */
-QXmlStreamAttribute::QXmlStreamAttribute()
-{
- m_isDefault = false;
-}
-
-/*!
- Destructs an attribute.
- */
-QXmlStreamAttribute::~QXmlStreamAttribute()
-{
-}
-
-/*! Constructs an attribute in the namespace described with \a
- namespaceUri with \a name and value \a value.
- */
-QXmlStreamAttribute::QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value)
-{
- m_namespaceUri = QXmlStreamStringRef(QStringRef(&namespaceUri));
- m_name = m_qualifiedName = QXmlStreamStringRef(QStringRef(&name));
- m_value = QXmlStreamStringRef(QStringRef(&value));
- m_namespaceUri = QXmlStreamStringRef(QStringRef(&namespaceUri));
-}
-
-/*!
- Constructs an attribute with qualified name \a qualifiedName and value \a value.
- */
-QXmlStreamAttribute::QXmlStreamAttribute(const QString &qualifiedName, const QString &value)
-{
- int colon = qualifiedName.indexOf(QLatin1Char(':'));
- m_name = QXmlStreamStringRef(QStringRef(&qualifiedName,
- colon + 1,
- qualifiedName.size() - (colon + 1)));
- m_qualifiedName = QXmlStreamStringRef(QStringRef(&qualifiedName));
- m_value = QXmlStreamStringRef(QStringRef(&value));
-}
-
-/*! \fn QStringRef QXmlStreamAttribute::namespaceUri() const
-
- Returns the attribute's resolved namespaceUri, or an empty string
- reference if the attribute does not have a defined namespace.
- */
-/*! \fn QStringRef QXmlStreamAttribute::name() const
- Returns the attribute's local name.
- */
-/*! \fn QStringRef QXmlStreamAttribute::qualifiedName() const
- Returns the attribute's qualified name.
-
- A qualified name is the raw name of an attribute in the XML
- data. It consists of the namespace prefix(), followed by colon,
- followed by the attribute's local name(). Since the namespace prefix
- is not unique (the same prefix can point to different namespaces
- and different prefixes can point to the same namespace), you
- shouldn't use qualifiedName(), but the resolved namespaceUri() and
- the attribute's local name().
- */
-/*!
- \fn QStringRef QXmlStreamAttribute::prefix() const
- \since 4.4
- Returns the attribute's namespace prefix.
-
- \sa name(), qualifiedName()
-
-*/
-
-/*! \fn QStringRef QXmlStreamAttribute::value() const
- Returns the attribute's value.
- */
-
-/*! \fn bool QXmlStreamAttribute::isDefault() const
-
- Returns \c true if the parser added this attribute with a default
- value following an ATTLIST declaration in the DTD; otherwise
- returns \c false.
-*/
-/*! \fn bool QXmlStreamAttribute::operator==(const QXmlStreamAttribute &other) const
-
- Compares this attribute with \a other and returns \c true if they are
- equal; otherwise returns \c false.
- */
-/*! \fn bool QXmlStreamAttribute::operator!=(const QXmlStreamAttribute &other) const
-
- Compares this attribute with \a other and returns \c true if they are
- not equal; otherwise returns \c false.
- */
-
-
-/*!
- Creates a copy of \a other.
- */
-QXmlStreamAttribute::QXmlStreamAttribute(const QXmlStreamAttribute &other)
-{
- *this = other;
-}
-
-/*!
- Assigns \a other to this attribute.
- */
-QXmlStreamAttribute& QXmlStreamAttribute::operator=(const QXmlStreamAttribute &other)
-{
- m_name = other.m_name;
- m_namespaceUri = other.m_namespaceUri;
- m_qualifiedName = other.m_qualifiedName;
- m_value = other.m_value;
- m_isDefault = other.m_isDefault;
- return *this;
-}
-
-
-/*!
- \class QXmlStreamAttributes
- \inmodule QtCore
- \since 4.3
- \reentrant
- \brief The QXmlStreamAttributes class represents a vector of QXmlStreamAttribute.
-
- Attributes are returned by a QXmlStreamReader in
- \l{QXmlStreamReader::attributes()} {attributes()} when the reader
- reports a \l {QXmlStreamReader::StartElement}{start element}. The
- class can also be used with a QXmlStreamWriter as an argument to
- \l {QXmlStreamWriter::writeAttributes()}{writeAttributes()}.
-
- The convenience function value() loops over the vector and returns
- an attribute value for a given namespaceUri and an attribute's
- name.
-
- New attributes can be added with append().
-
- \ingroup xml-tools
-*/
-
-/*!
- \fn QXmlStreamAttributes::QXmlStreamAttributes()
-
- A constructor for QXmlStreamAttributes.
-*/
-
-/*!
- \typedef QXmlStreamNotationDeclarations
- \relates QXmlStreamNotationDeclaration
-
- Synonym for QVector<QXmlStreamNotationDeclaration>.
-*/
-
-
-/*!
- \class QXmlStreamNotationDeclaration
- \inmodule QtCore
- \since 4.3
- \reentrant
- \brief The QXmlStreamNotationDeclaration class represents a DTD notation declaration.
-
- \ingroup xml-tools
-
- An notation declaration consists of a name(), a systemId(), and a publicId().
-*/
-
-/*!
- Creates an empty notation declaration.
-*/
-QXmlStreamNotationDeclaration::QXmlStreamNotationDeclaration()
-{
-}
-/*!
- Creates a copy of \a other.
- */
-QXmlStreamNotationDeclaration::QXmlStreamNotationDeclaration(const QXmlStreamNotationDeclaration &other)
-{
- *this = other;
-}
-
-/*!
- Assigns \a other to this notation declaration.
- */
-QXmlStreamNotationDeclaration& QXmlStreamNotationDeclaration::operator=(const QXmlStreamNotationDeclaration &other)
-{
- m_name = other.m_name;
- m_systemId = other.m_systemId;
- m_publicId = other.m_publicId;
- return *this;
-}
-
-/*!
-Destructs this notation declaration.
-*/
-QXmlStreamNotationDeclaration::~QXmlStreamNotationDeclaration()
-{
-}
-
-/*! \fn QStringRef QXmlStreamNotationDeclaration::name() const
-
-Returns the notation name.
-*/
-/*! \fn QStringRef QXmlStreamNotationDeclaration::systemId() const
-
-Returns the system identifier.
-*/
-/*! \fn QStringRef QXmlStreamNotationDeclaration::publicId() const
-
-Returns the public identifier.
-*/
-
-/*! \fn inline bool QXmlStreamNotationDeclaration::operator==(const QXmlStreamNotationDeclaration &other) const
-
- Compares this notation declaration with \a other and returns \c true
- if they are equal; otherwise returns \c false.
- */
-/*! \fn inline bool QXmlStreamNotationDeclaration::operator!=(const QXmlStreamNotationDeclaration &other) const
-
- Compares this notation declaration with \a other and returns \c true
- if they are not equal; otherwise returns \c false.
- */
-
-/*!
- \typedef QXmlStreamNamespaceDeclarations
- \relates QXmlStreamNamespaceDeclaration
-
- Synonym for QVector<QXmlStreamNamespaceDeclaration>.
-*/
-
-/*!
- \class QXmlStreamNamespaceDeclaration
- \inmodule QtCore
- \since 4.3
- \reentrant
- \brief The QXmlStreamNamespaceDeclaration class represents a namespace declaration.
-
- \ingroup xml-tools
-
- An namespace declaration consists of a prefix() and a namespaceUri().
-*/
-/*! \fn inline bool QXmlStreamNamespaceDeclaration::operator==(const QXmlStreamNamespaceDeclaration &other) const
-
- Compares this namespace declaration with \a other and returns \c true
- if they are equal; otherwise returns \c false.
- */
-/*! \fn inline bool QXmlStreamNamespaceDeclaration::operator!=(const QXmlStreamNamespaceDeclaration &other) const
-
- Compares this namespace declaration with \a other and returns \c true
- if they are not equal; otherwise returns \c false.
- */
-
-/*!
- Creates an empty namespace declaration.
-*/
-QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration()
-{
-}
-
-/*!
- \since 4.4
-
- Creates a namespace declaration with \a prefix and \a namespaceUri.
-*/
-QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri)
-{
- m_prefix = prefix;
- m_namespaceUri = namespaceUri;
-}
-
-/*!
- Creates a copy of \a other.
- */
-QXmlStreamNamespaceDeclaration::QXmlStreamNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &other)
-{
- *this = other;
-}
-
-/*!
- Assigns \a other to this namespace declaration.
- */
-QXmlStreamNamespaceDeclaration& QXmlStreamNamespaceDeclaration::operator=(const QXmlStreamNamespaceDeclaration &other)
-{
- m_prefix = other.m_prefix;
- m_namespaceUri = other.m_namespaceUri;
- return *this;
-}
-/*!
-Destructs this namespace declaration.
-*/
-QXmlStreamNamespaceDeclaration::~QXmlStreamNamespaceDeclaration()
-{
-}
-
-/*! \fn QStringRef QXmlStreamNamespaceDeclaration::prefix() const
-
-Returns the prefix.
-*/
-/*! \fn QStringRef QXmlStreamNamespaceDeclaration::namespaceUri() const
-
-Returns the namespaceUri.
-*/
-
-
-
-
-/*!
- \typedef QXmlStreamEntityDeclarations
- \relates QXmlStreamEntityDeclaration
-
- Synonym for QVector<QXmlStreamEntityDeclaration>.
-*/
-
-/*!
- \class QXmlStreamStringRef
- \inmodule QtCore
- \since 4.3
- \internal
-*/
-
-/*!
- \class QXmlStreamEntityDeclaration
- \inmodule QtCore
- \since 4.3
- \reentrant
- \brief The QXmlStreamEntityDeclaration class represents a DTD entity declaration.
-
- \ingroup xml-tools
-
- An entity declaration consists of a name(), a notationName(), a
- systemId(), a publicId(), and a value().
-*/
-
-/*!
- Creates an empty entity declaration.
-*/
-QXmlStreamEntityDeclaration::QXmlStreamEntityDeclaration()
-{
-}
-
-/*!
- Creates a copy of \a other.
- */
-QXmlStreamEntityDeclaration::QXmlStreamEntityDeclaration(const QXmlStreamEntityDeclaration &other)
-{
- *this = other;
-}
-
-/*!
- Assigns \a other to this entity declaration.
- */
-QXmlStreamEntityDeclaration& QXmlStreamEntityDeclaration::operator=(const QXmlStreamEntityDeclaration &other)
-{
- m_name = other.m_name;
- m_notationName = other.m_notationName;
- m_systemId = other.m_systemId;
- m_publicId = other.m_publicId;
- m_value = other.m_value;
- return *this;
-}
-
-/*!
- Destructs this entity declaration.
-*/
-QXmlStreamEntityDeclaration::~QXmlStreamEntityDeclaration()
-{
-}
-
-/*! \fn QXmlStreamStringRef::swap(QXmlStreamStringRef &other)
- \since 5.6
-
- Swaps this string reference's contents with \a other.
- This function is very fast and never fails.
-*/
-
-/*! \fn QStringRef QXmlStreamEntityDeclaration::name() const
-
-Returns the entity name.
-*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::notationName() const
-
-Returns the notation name.
-*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::systemId() const
-
-Returns the system identifier.
-*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::publicId() const
-
-Returns the public identifier.
-*/
-/*! \fn QStringRef QXmlStreamEntityDeclaration::value() const
-
-Returns the entity's value.
-*/
-
-/*! \fn bool QXmlStreamEntityDeclaration::operator==(const QXmlStreamEntityDeclaration &other) const
-
- Compares this entity declaration with \a other and returns \c true if
- they are equal; otherwise returns \c false.
- */
-/*! \fn bool QXmlStreamEntityDeclaration::operator!=(const QXmlStreamEntityDeclaration &other) const
-
- Compares this entity declaration with \a other and returns \c true if
- they are not equal; otherwise returns \c false.
- */
-
-/*! Returns the value of the attribute \a name in the namespace
- described with \a namespaceUri, or an empty string reference if the
- attribute is not defined. The \a namespaceUri can be empty.
- */
-QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, const QString &name) const
-{
- for (int i = 0; i < size(); ++i) {
- const QXmlStreamAttribute &attribute = at(i);
- if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
- return attribute.value();
- }
- return QStringRef();
-}
-
-/*!\overload
- Returns the value of the attribute \a name in the namespace
- described with \a namespaceUri, or an empty string reference if the
- attribute is not defined. The \a namespaceUri can be empty.
- */
-QStringRef QXmlStreamAttributes::value(const QString &namespaceUri, QLatin1String name) const
-{
- for (int i = 0; i < size(); ++i) {
- const QXmlStreamAttribute &attribute = at(i);
- if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
- return attribute.value();
- }
- return QStringRef();
-}
-
-/*!\overload
- Returns the value of the attribute \a name in the namespace
- described with \a namespaceUri, or an empty string reference if the
- attribute is not defined. The \a namespaceUri can be empty.
- */
-QStringRef QXmlStreamAttributes::value(QLatin1String namespaceUri, QLatin1String name) const
-{
- for (int i = 0; i < size(); ++i) {
- const QXmlStreamAttribute &attribute = at(i);
- if (attribute.name() == name && attribute.namespaceUri() == namespaceUri)
- return attribute.value();
- }
- return QStringRef();
-}
-
-/*!\overload
-
- Returns the value of the attribute with qualified name \a
- qualifiedName , or an empty string reference if the attribute is not
- defined. A qualified name is the raw name of an attribute in the XML
- data. It consists of the namespace prefix, followed by colon,
- followed by the attribute's local name. Since the namespace prefix
- is not unique (the same prefix can point to different namespaces and
- different prefixes can point to the same namespace), you shouldn't
- use qualified names, but a resolved namespaceUri and the attribute's
- local name.
- */
-QStringRef QXmlStreamAttributes::value(const QString &qualifiedName) const
-{
- for (int i = 0; i < size(); ++i) {
- const QXmlStreamAttribute &attribute = at(i);
- if (attribute.qualifiedName() == qualifiedName)
- return attribute.value();
- }
- return QStringRef();
-}
-
-/*!\overload
-
- Returns the value of the attribute with qualified name \a
- qualifiedName , or an empty string reference if the attribute is not
- defined. A qualified name is the raw name of an attribute in the XML
- data. It consists of the namespace prefix, followed by colon,
- followed by the attribute's local name. Since the namespace prefix
- is not unique (the same prefix can point to different namespaces and
- different prefixes can point to the same namespace), you shouldn't
- use qualified names, but a resolved namespaceUri and the attribute's
- local name.
- */
-QStringRef QXmlStreamAttributes::value(QLatin1String qualifiedName) const
-{
- for (int i = 0; i < size(); ++i) {
- const QXmlStreamAttribute &attribute = at(i);
- if (attribute.qualifiedName() == qualifiedName)
- return attribute.value();
- }
- return QStringRef();
-}
-
-/*!Appends a new attribute with \a name in the namespace
- described with \a namespaceUri, and value \a value. The \a
- namespaceUri can be empty.
- */
-void QXmlStreamAttributes::append(const QString &namespaceUri, const QString &name, const QString &value)
-{
- append(QXmlStreamAttribute(namespaceUri, name, value));
-}
-
-/*!\overload
- Appends a new attribute with qualified name \a qualifiedName and
- value \a value.
- */
-void QXmlStreamAttributes::append(const QString &qualifiedName, const QString &value)
-{
- append(QXmlStreamAttribute(qualifiedName, value));
-}
-
-#ifndef QT_NO_XMLSTREAMREADER
-
-/*! \fn bool QXmlStreamReader::isStartDocument() const
- Returns \c true if tokenType() equals \l StartDocument; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isEndDocument() const
- Returns \c true if tokenType() equals \l EndDocument; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isStartElement() const
- Returns \c true if tokenType() equals \l StartElement; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isEndElement() const
- Returns \c true if tokenType() equals \l EndElement; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isCharacters() const
- Returns \c true if tokenType() equals \l Characters; otherwise returns \c false.
-
- \sa isWhitespace(), isCDATA()
-*/
-/*! \fn bool QXmlStreamReader::isComment() const
- Returns \c true if tokenType() equals \l Comment; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isDTD() const
- Returns \c true if tokenType() equals \l DTD; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isEntityReference() const
- Returns \c true if tokenType() equals \l EntityReference; otherwise returns \c false.
-*/
-/*! \fn bool QXmlStreamReader::isProcessingInstruction() const
- Returns \c true if tokenType() equals \l ProcessingInstruction; otherwise returns \c false.
-*/
-
-/*! Returns \c true if the reader reports characters that only consist
- of white-space; otherwise returns \c false.
-
- \sa isCharacters(), text()
-*/
-bool QXmlStreamReader::isWhitespace() const
-{
- Q_D(const QXmlStreamReader);
- return d->type == QXmlStreamReader::Characters && d->isWhitespace;
-}
-
-/*! Returns \c true if the reader reports characters that stem from a
- CDATA section; otherwise returns \c false.
-
- \sa isCharacters(), text()
-*/
-bool QXmlStreamReader::isCDATA() const
-{
- Q_D(const QXmlStreamReader);
- return d->type == QXmlStreamReader::Characters && d->isCDATA;
-}
-
-
-
-/*!
- Returns \c true if this document has been declared standalone in the
- XML declaration; otherwise returns \c false.
-
- If no XML declaration has been parsed, this function returns \c false.
- */
-bool QXmlStreamReader::isStandaloneDocument() const
-{
- Q_D(const QXmlStreamReader);
- return d->standalone;
-}
-
-
-/*!
- \since 4.4
-
- If the tokenType() is \l StartDocument, this function returns the
- version string as specified in the XML declaration.
- Otherwise an empty string is returned.
- */
-QStringRef QXmlStreamReader::documentVersion() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::StartDocument)
- return d->documentVersion;
- return QStringRef();
-}
-
-/*!
- \since 4.4
-
- If the tokenType() is \l StartDocument, this function returns the
- encoding string as specified in the XML declaration.
- Otherwise an empty string is returned.
- */
-QStringRef QXmlStreamReader::documentEncoding() const
-{
- Q_D(const QXmlStreamReader);
- if (d->type == QXmlStreamReader::StartDocument)
- return d->documentEncoding;
- return QStringRef();
-}
-
-#endif // QT_NO_XMLSTREAMREADER
-
-/*!
- \class QXmlStreamWriter
- \inmodule QtCore
- \since 4.3
- \reentrant
-
- \brief The QXmlStreamWriter class provides an XML writer with a
- simple streaming API.
-
- \ingroup xml-tools
-
- QXmlStreamWriter is the counterpart to QXmlStreamReader for writing
- XML. Like its related class, it operates on a QIODevice specified
- with setDevice(). The API is simple and straightforward: for every
- XML token or event you want to write, the writer provides a
- specialized function.
-
- You start a document with writeStartDocument() and end it with
- writeEndDocument(). This will implicitly close all remaining open
- tags.
-
- Element tags are opened with writeStartElement() followed by
- writeAttribute() or writeAttributes(), element content, and then
- writeEndElement(). A shorter form writeEmptyElement() can be used
- to write empty elements, followed by writeAttributes().
-
- Element content consists of either characters, entity references or
- nested elements. It is written with writeCharacters(), which also
- takes care of escaping all forbidden characters and character
- sequences, writeEntityReference(), or subsequent calls to
- writeStartElement(). A convenience method writeTextElement() can be
- used for writing terminal elements that contain nothing but text.
-
- The following abridged code snippet shows the basic use of the class
- to write formatted XML with indentation:
-
- \snippet qxmlstreamwriter/main.cpp start stream
- \dots
- \snippet qxmlstreamwriter/main.cpp write element
- \dots
- \snippet qxmlstreamwriter/main.cpp finish stream
-
- QXmlStreamWriter takes care of prefixing namespaces, all you have to
- do is specify the \c namespaceUri when writing elements or
- attributes. If you must conform to certain prefixes, you can force
- the writer to use them by declaring the namespaces manually with
- either writeNamespace() or writeDefaultNamespace(). Alternatively,
- you can bypass the stream writer's namespace support and use
- overloaded methods that take a qualified name instead. The namespace
- \e http://www.w3.org/XML/1998/namespace is implicit and mapped to the
- prefix \e xml.
-
- The stream writer can automatically format the generated XML data by
- adding line-breaks and indentation to empty sections between
- elements, making the XML data more readable for humans and easier to
- work with for most source code management systems. The feature can
- be turned on with the \l autoFormatting property, and customized
- with the \l autoFormattingIndent property.
-
- Other functions are writeCDATA(), writeComment(),
- writeProcessingInstruction(), and writeDTD(). Chaining of XML
- streams is supported with writeCurrentToken().
-
- By default, QXmlStreamWriter encodes XML in UTF-8. Different
- encodings can be enforced using setCodec().
-
- If an error occurs while writing to the underlying device, hasError()
- starts returning true and subsequent writes are ignored.
-
- The \l{QXmlStream Bookmarks Example} illustrates how to use a
- stream writer to write an XML bookmark file (XBEL) that
- was previously read in by a QXmlStreamReader.
-
-*/
-
-#ifndef QT_NO_XMLSTREAMWRITER
-
-class QXmlStreamWriterPrivate : public QXmlStreamPrivateTagStack {
- QXmlStreamWriter *q_ptr;
- Q_DECLARE_PUBLIC(QXmlStreamWriter)
-public:
- QXmlStreamWriterPrivate(QXmlStreamWriter *q);
- ~QXmlStreamWriterPrivate() {
- if (deleteDevice)
- delete device;
-#ifndef QT_NO_TEXTCODEC
- delete encoder;
-#endif
- }
-
- void write(const QStringRef &);
- void write(const QString &);
- void writeEscaped(const QString &, bool escapeWhitespace = false);
- void write(const char *s, int len);
- template <int N> void write(const char (&s)[N]) { write(s, N - 1); }
- bool finishStartElement(bool contents = true);
- void writeStartElement(const QString &namespaceUri, const QString &name);
- QIODevice *device;
- QString *stringDevice;
- uint deleteDevice :1;
- uint inStartElement :1;
- uint inEmptyElement :1;
- uint lastWasStartElement :1;
- uint wroteSomething :1;
- uint hasError :1;
- uint autoFormatting :1;
- uint isCodecASCIICompatible :1;
- QByteArray autoFormattingIndent;
- NamespaceDeclaration emptyNamespace;
- int lastNamespaceDeclaration;
-
-#ifndef QT_NO_TEXTCODEC
- QTextCodec *codec;
- QTextEncoder *encoder;
-#endif
- void checkIfASCIICompatibleCodec();
-
- NamespaceDeclaration &findNamespace(const QString &namespaceUri, bool writeDeclaration = false, bool noDefault = false);
- void writeNamespaceDeclaration(const NamespaceDeclaration &namespaceDeclaration);
-
- int namespacePrefixCount;
-
- void indent(int level);
-};
-
-
-QXmlStreamWriterPrivate::QXmlStreamWriterPrivate(QXmlStreamWriter *q)
- :autoFormattingIndent(4, ' ')
-{
- q_ptr = q;
- device = 0;
- stringDevice = 0;
- deleteDevice = false;
-#ifndef QT_NO_TEXTCODEC
- codec = QTextCodec::codecForMib(106); // utf8
- encoder = codec->makeEncoder(QTextCodec::IgnoreHeader); // no byte order mark for utf8
-#endif
- checkIfASCIICompatibleCodec();
- inStartElement = inEmptyElement = false;
- wroteSomething = false;
- hasError = false;
- lastWasStartElement = false;
- lastNamespaceDeclaration = 1;
- autoFormatting = false;
- namespacePrefixCount = 0;
-}
-
-void QXmlStreamWriterPrivate::checkIfASCIICompatibleCodec()
-{
-#ifndef QT_NO_TEXTCODEC
- Q_ASSERT(encoder);
- // test ASCII-compatibility using the letter 'a'
- QChar letterA = QLatin1Char('a');
- const QByteArray bytesA = encoder->fromUnicode(&letterA, 1);
- const bool isCodecASCIICompatibleA = (bytesA.count() == 1) && (bytesA[0] == 0x61) ;
- QChar letterLess = QLatin1Char('<');
- const QByteArray bytesLess = encoder->fromUnicode(&letterLess, 1);
- const bool isCodecASCIICompatibleLess = (bytesLess.count() == 1) && (bytesLess[0] == 0x3C) ;
- isCodecASCIICompatible = isCodecASCIICompatibleA && isCodecASCIICompatibleLess ;
-#else
- isCodecASCIICompatible = true;
-#endif
-}
-
-void QXmlStreamWriterPrivate::write(const QStringRef &s)
-{
- if (device) {
- if (hasError)
- return;
-#ifdef QT_NO_TEXTCODEC
- QByteArray bytes = s.toLatin1();
-#else
- QByteArray bytes = encoder->fromUnicode(s.constData(), s.size());
-#endif
- if (device->write(bytes) != bytes.size())
- hasError = true;
- }
- else if (stringDevice)
- s.appendTo(stringDevice);
- else
- qWarning("QXmlStreamWriter: No device");
-}
-
-void QXmlStreamWriterPrivate::write(const QString &s)
-{
- if (device) {
- if (hasError)
- return;
-#ifdef QT_NO_TEXTCODEC
- QByteArray bytes = s.toLatin1();
-#else
- QByteArray bytes = encoder->fromUnicode(s);
-#endif
- if (device->write(bytes) != bytes.size())
- hasError = true;
- }
- else if (stringDevice)
- stringDevice->append(s);
- else
- qWarning("QXmlStreamWriter: No device");
-}
-
-void QXmlStreamWriterPrivate::writeEscaped(const QString &s, bool escapeWhitespace)
-{
- QString escaped;
- escaped.reserve(s.size());
- for ( int i = 0; i < s.size(); ++i ) {
- QChar c = s.at(i);
- if (c.unicode() == '<' )
- escaped.append(QLatin1String("&lt;"));
- else if (c.unicode() == '>' )
- escaped.append(QLatin1String("&gt;"));
- else if (c.unicode() == '&' )
- escaped.append(QLatin1String("&amp;"));
- else if (c.unicode() == '\"' )
- escaped.append(QLatin1String("&quot;"));
- else if (escapeWhitespace && c.isSpace()) {
- if (c.unicode() == '\n')
- escaped.append(QLatin1String("&#10;"));
- else if (c.unicode() == '\r')
- escaped.append(QLatin1String("&#13;"));
- else if (c.unicode() == '\t')
- escaped.append(QLatin1String("&#9;"));
- else
- escaped += c;
- } else {
- escaped += QChar(c);
- }
- }
- write(escaped);
-}
-
-// Converts from ASCII to output encoding
-void QXmlStreamWriterPrivate::write(const char *s, int len)
-{
- if (device) {
- if (hasError)
- return;
- if (isCodecASCIICompatible) {
- if (device->write(s, len) != len)
- hasError = true;
- return;
- }
- }
-
- write(QString::fromLatin1(s, len));
-}
-
-void QXmlStreamWriterPrivate::writeNamespaceDeclaration(const NamespaceDeclaration &namespaceDeclaration) {
- if (namespaceDeclaration.prefix.isEmpty()) {
- write(" xmlns=\"");
- write(namespaceDeclaration.namespaceUri);
- write("\"");
- } else {
- write(" xmlns:");
- write(namespaceDeclaration.prefix);
- write("=\"");
- write(namespaceDeclaration.namespaceUri);
- write("\"");
- }
-}
-
-bool QXmlStreamWriterPrivate::finishStartElement(bool contents)
-{
- bool hadSomethingWritten = wroteSomething;
- wroteSomething = contents;
- if (!inStartElement)
- return hadSomethingWritten;
-
- if (inEmptyElement) {
- write("/>");
- QXmlStreamWriterPrivate::Tag &tag = tagStack_pop();
- lastNamespaceDeclaration = tag.namespaceDeclarationsSize;
- lastWasStartElement = false;
- } else {
- write(">");
- }
- inStartElement = inEmptyElement = false;
- lastNamespaceDeclaration = namespaceDeclarations.size();
- return hadSomethingWritten;
-}
-
-QXmlStreamPrivateTagStack::NamespaceDeclaration &QXmlStreamWriterPrivate::findNamespace(const QString &namespaceUri, bool writeDeclaration, bool noDefault)
-{
- for (int j = namespaceDeclarations.size() - 1; j >= 0; --j) {
- NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations[j];
- if (namespaceDeclaration.namespaceUri == namespaceUri) {
- if (!noDefault || !namespaceDeclaration.prefix.isEmpty())
- return namespaceDeclaration;
- }
- }
- if (namespaceUri.isEmpty())
- return emptyNamespace;
- NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
- if (namespaceUri.isEmpty()) {
- namespaceDeclaration.prefix.clear();
- } else {
- QString s;
- int n = ++namespacePrefixCount;
- forever {
- s = QLatin1Char('n') + QString::number(n++);
- int j = namespaceDeclarations.size() - 2;
- while (j >= 0 && namespaceDeclarations.at(j).prefix != s)
- --j;
- if (j < 0)
- break;
- }
- namespaceDeclaration.prefix = addToStringStorage(s);
- }
- namespaceDeclaration.namespaceUri = addToStringStorage(namespaceUri);
- if (writeDeclaration)
- writeNamespaceDeclaration(namespaceDeclaration);
- return namespaceDeclaration;
-}
-
-
-
-void QXmlStreamWriterPrivate::indent(int level)
-{
- write("\n");
- for (int i = level; i > 0; --i)
- write(autoFormattingIndent.constData(), autoFormattingIndent.length());
-}
-
-
-/*!
- Constructs a stream writer.
-
- \sa setDevice()
- */
-QXmlStreamWriter::QXmlStreamWriter()
- : d_ptr(new QXmlStreamWriterPrivate(this))
-{
-}
-
-/*!
- Constructs a stream writer that writes into \a device;
- */
-QXmlStreamWriter::QXmlStreamWriter(QIODevice *device)
- : d_ptr(new QXmlStreamWriterPrivate(this))
-{
- Q_D(QXmlStreamWriter);
- d->device = device;
-}
-
-/*! Constructs a stream writer that writes into \a array. This is the
- same as creating an xml writer that operates on a QBuffer device
- which in turn operates on \a array.
- */
-QXmlStreamWriter::QXmlStreamWriter(QByteArray *array)
- : d_ptr(new QXmlStreamWriterPrivate(this))
-{
- Q_D(QXmlStreamWriter);
- d->device = new QBuffer(array);
- d->device->open(QIODevice::WriteOnly);
- d->deleteDevice = true;
-}
-
-
-/*! Constructs a stream writer that writes into \a string.
- */
-QXmlStreamWriter::QXmlStreamWriter(QString *string)
- : d_ptr(new QXmlStreamWriterPrivate(this))
-{
- Q_D(QXmlStreamWriter);
- d->stringDevice = string;
-}
-
-/*!
- Destructor.
-*/
-QXmlStreamWriter::~QXmlStreamWriter()
-{
-}
-
-
-/*!
- Sets the current device to \a device. If you want the stream to
- write into a QByteArray, you can create a QBuffer device.
-
- \sa device()
-*/
-void QXmlStreamWriter::setDevice(QIODevice *device)
-{
- Q_D(QXmlStreamWriter);
- if (device == d->device)
- return;
- d->stringDevice = 0;
- if (d->deleteDevice) {
- delete d->device;
- d->deleteDevice = false;
- }
- d->device = device;
-}
-
-/*!
- Returns the current device associated with the QXmlStreamWriter,
- or 0 if no device has been assigned.
-
- \sa setDevice()
-*/
-QIODevice *QXmlStreamWriter::device() const
-{
- Q_D(const QXmlStreamWriter);
- return d->device;
-}
-
-
-#ifndef QT_NO_TEXTCODEC
-/*!
- Sets the codec for this stream to \a codec. The codec is used for
- encoding any data that is written. By default, QXmlStreamWriter
- uses UTF-8.
-
- The encoding information is stored in the initial xml tag which
- gets written when you call writeStartDocument(). Call this
- function before calling writeStartDocument().
-
- \sa codec()
-*/
-void QXmlStreamWriter::setCodec(QTextCodec *codec)
-{
- Q_D(QXmlStreamWriter);
- if (codec) {
- d->codec = codec;
- delete d->encoder;
- d->encoder = codec->makeEncoder(QTextCodec::IgnoreHeader); // no byte order mark for utf8
- d->checkIfASCIICompatibleCodec();
- }
-}
-
-/*!
- Sets the codec for this stream to the QTextCodec for the encoding
- specified by \a codecName. Common values for \c codecName include
- "ISO 8859-1", "UTF-8", and "UTF-16". If the encoding isn't
- recognized, nothing happens.
-
- \sa QTextCodec::codecForName()
-*/
-void QXmlStreamWriter::setCodec(const char *codecName)
-{
- setCodec(QTextCodec::codecForName(codecName));
-}
-
-/*!
- Returns the codec that is currently assigned to the stream.
-
- \sa setCodec()
-*/
-QTextCodec *QXmlStreamWriter::codec() const
-{
- Q_D(const QXmlStreamWriter);
- return d->codec;
-}
-#endif // QT_NO_TEXTCODEC
-
-/*!
- \property QXmlStreamWriter::autoFormatting
- \since 4.4
- The auto-formatting flag of the stream writer
-
- This property controls whether or not the stream writer
- automatically formats the generated XML data. If enabled, the
- writer automatically adds line-breaks and indentation to empty
- sections between elements (ignorable whitespace). The main purpose
- of auto-formatting is to split the data into several lines, and to
- increase readability for a human reader. The indentation depth can
- be controlled through the \l autoFormattingIndent property.
-
- By default, auto-formatting is disabled.
-*/
-
-/*!
- \since 4.4
-
- Enables auto formatting if \a enable is \c true, otherwise
- disables it.
-
- The default value is \c false.
- */
-void QXmlStreamWriter::setAutoFormatting(bool enable)
-{
- Q_D(QXmlStreamWriter);
- d->autoFormatting = enable;
-}
-
-/*!
- \since 4.4
-
- Returns \c true if auto formattting is enabled, otherwise \c false.
- */
-bool QXmlStreamWriter::autoFormatting() const
-{
- Q_D(const QXmlStreamWriter);
- return d->autoFormatting;
-}
-
-/*!
- \property QXmlStreamWriter::autoFormattingIndent
- \since 4.4
-
- \brief the number of spaces or tabs used for indentation when
- auto-formatting is enabled. Positive numbers indicate spaces,
- negative numbers tabs.
-
- The default indentation is 4.
-
- \sa autoFormatting
-*/
-
-
-void QXmlStreamWriter::setAutoFormattingIndent(int spacesOrTabs)
-{
- Q_D(QXmlStreamWriter);
- d->autoFormattingIndent = QByteArray(qAbs(spacesOrTabs), spacesOrTabs >= 0 ? ' ' : '\t');
-}
-
-int QXmlStreamWriter::autoFormattingIndent() const
-{
- Q_D(const QXmlStreamWriter);
- return d->autoFormattingIndent.count(' ') - d->autoFormattingIndent.count('\t');
-}
-
-/*!
- Returns \c true if the stream failed to write to the underlying device.
-
- The error status is never reset. Writes happening after the error
- occurred are ignored, even if the error condition is cleared.
- */
-bool QXmlStreamWriter::hasError() const
-{
- Q_D(const QXmlStreamWriter);
- return d->hasError;
-}
-
-/*!
- \overload
- Writes an attribute with \a qualifiedName and \a value.
-
-
- This function can only be called after writeStartElement() before
- any content is written, or after writeEmptyElement().
- */
-void QXmlStreamWriter::writeAttribute(const QString &qualifiedName, const QString &value)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(d->inStartElement);
- Q_ASSERT(qualifiedName.count(QLatin1Char(':')) <= 1);
- d->write(" ");
- d->write(qualifiedName);
- d->write("=\"");
- d->writeEscaped(value, true);
- d->write("\"");
-}
-
-/*! Writes an attribute with \a name and \a value, prefixed for
- the specified \a namespaceUri. If the namespace has not been
- declared yet, QXmlStreamWriter will generate a namespace declaration
- for it.
-
- This function can only be called after writeStartElement() before
- any content is written, or after writeEmptyElement().
- */
-void QXmlStreamWriter::writeAttribute(const QString &namespaceUri, const QString &name, const QString &value)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(d->inStartElement);
- Q_ASSERT(!name.contains(QLatin1Char(':')));
- QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->findNamespace(namespaceUri, true, true);
- d->write(" ");
- if (!namespaceDeclaration.prefix.isEmpty()) {
- d->write(namespaceDeclaration.prefix);
- d->write(":");
- }
- d->write(name);
- d->write("=\"");
- d->writeEscaped(value, true);
- d->write("\"");
-}
-
-/*!
- \overload
-
- Writes the \a attribute.
-
- This function can only be called after writeStartElement() before
- any content is written, or after writeEmptyElement().
- */
-void QXmlStreamWriter::writeAttribute(const QXmlStreamAttribute& attribute)
-{
- if (attribute.namespaceUri().isEmpty())
- writeAttribute(attribute.qualifiedName().toString(),
- attribute.value().toString());
- else
- writeAttribute(attribute.namespaceUri().toString(),
- attribute.name().toString(),
- attribute.value().toString());
-}
-
-
-/*! Writes the attribute vector \a attributes. If a namespace
- referenced in an attribute not been declared yet, QXmlStreamWriter
- will generate a namespace declaration for it.
-
- This function can only be called after writeStartElement() before
- any content is written, or after writeEmptyElement().
-
- \sa writeAttribute(), writeNamespace()
- */
-void QXmlStreamWriter::writeAttributes(const QXmlStreamAttributes& attributes)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(d->inStartElement);
- Q_UNUSED(d);
- for (int i = 0; i < attributes.size(); ++i)
- writeAttribute(attributes.at(i));
-}
-
-
-/*! Writes \a text as CDATA section. If \a text contains the
- forbidden character sequence "]]>", it is split into different CDATA
- sections.
-
- This function mainly exists for completeness. Normally you should
- not need use it, because writeCharacters() automatically escapes all
- non-content characters.
- */
-void QXmlStreamWriter::writeCDATA(const QString &text)
-{
- Q_D(QXmlStreamWriter);
- d->finishStartElement();
- QString copy(text);
- copy.replace(QLatin1String("]]>"), QLatin1String("]]]]><![CDATA[>"));
- d->write("<![CDATA[");
- d->write(copy);
- d->write("]]>");
-}
-
-
-/*! Writes \a text. The characters "<", "&", and "\"" are escaped as entity
- references "&lt;", "&amp;, and "&quot;". To avoid the forbidden sequence
- "]]>", ">" is also escaped as "&gt;".
-
- \sa writeEntityReference()
- */
-void QXmlStreamWriter::writeCharacters(const QString &text)
-{
- Q_D(QXmlStreamWriter);
- d->finishStartElement();
- d->writeEscaped(text);
-}
-
-
-/*! Writes \a text as XML comment, where \a text must not contain the
- forbidden sequence "--" or end with "-". Note that XML does not
- provide any way to escape "-" in a comment.
- */
-void QXmlStreamWriter::writeComment(const QString &text)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(!text.contains(QLatin1String("--")) && !text.endsWith(QLatin1Char('-')));
- if (!d->finishStartElement(false) && d->autoFormatting)
- d->indent(d->tagStack.size());
- d->write("<!--");
- d->write(text);
- d->write("-->");
- d->inStartElement = d->lastWasStartElement = false;
-}
-
-
-/*! Writes a DTD section. The \a dtd represents the entire
- doctypedecl production from the XML 1.0 specification.
- */
-void QXmlStreamWriter::writeDTD(const QString &dtd)
-{
- Q_D(QXmlStreamWriter);
- d->finishStartElement();
- if (d->autoFormatting)
- d->write("\n");
- d->write(dtd);
- if (d->autoFormatting)
- d->write("\n");
-}
-
-
-
-/*! \overload
- Writes an empty element with qualified name \a qualifiedName.
- Subsequent calls to writeAttribute() will add attributes to this element.
-*/
-void QXmlStreamWriter::writeEmptyElement(const QString &qualifiedName)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(qualifiedName.count(QLatin1Char(':')) <= 1);
- d->writeStartElement(QString(), qualifiedName);
- d->inEmptyElement = true;
-}
-
-
-/*! Writes an empty element with \a name, prefixed for the specified
- \a namespaceUri. If the namespace has not been declared,
- QXmlStreamWriter will generate a namespace declaration for it.
- Subsequent calls to writeAttribute() will add attributes to this element.
-
- \sa writeNamespace()
- */
-void QXmlStreamWriter::writeEmptyElement(const QString &namespaceUri, const QString &name)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(!name.contains(QLatin1Char(':')));
- d->writeStartElement(namespaceUri, name);
- d->inEmptyElement = true;
-}
-
-
-/*!\overload
- Writes a text element with \a qualifiedName and \a text.
-
-
- This is a convenience function equivalent to:
- \snippet code/src_corelib_xml_qxmlstream.cpp 1
-
-*/
-void QXmlStreamWriter::writeTextElement(const QString &qualifiedName, const QString &text)
-{
- writeStartElement(qualifiedName);
- writeCharacters(text);
- writeEndElement();
-}
-
-/*! Writes a text element with \a name, prefixed for the specified \a
- namespaceUri, and \a text. If the namespace has not been
- declared, QXmlStreamWriter will generate a namespace declaration
- for it.
-
-
- This is a convenience function equivalent to:
- \snippet code/src_corelib_xml_qxmlstream.cpp 2
-
-*/
-void QXmlStreamWriter::writeTextElement(const QString &namespaceUri, const QString &name, const QString &text)
-{
- writeStartElement(namespaceUri, name);
- writeCharacters(text);
- writeEndElement();
-}
-
-
-/*!
- Closes all remaining open start elements and writes a newline.
-
- \sa writeStartDocument()
- */
-void QXmlStreamWriter::writeEndDocument()
-{
- Q_D(QXmlStreamWriter);
- while (d->tagStack.size())
- writeEndElement();
- d->write("\n");
-}
-
-/*!
- Closes the previous start element.
-
- \sa writeStartElement()
- */
-void QXmlStreamWriter::writeEndElement()
-{
- Q_D(QXmlStreamWriter);
- if (d->tagStack.isEmpty())
- return;
-
- // shortcut: if nothing was written, close as empty tag
- if (d->inStartElement && !d->inEmptyElement) {
- d->write("/>");
- d->lastWasStartElement = d->inStartElement = false;
- QXmlStreamWriterPrivate::Tag &tag = d->tagStack_pop();
- d->lastNamespaceDeclaration = tag.namespaceDeclarationsSize;
- return;
- }
-
- if (!d->finishStartElement(false) && !d->lastWasStartElement && d->autoFormatting)
- d->indent(d->tagStack.size()-1);
- if (d->tagStack.isEmpty())
- return;
- d->lastWasStartElement = false;
- QXmlStreamWriterPrivate::Tag &tag = d->tagStack_pop();
- d->lastNamespaceDeclaration = tag.namespaceDeclarationsSize;
- d->write("</");
- if (!tag.namespaceDeclaration.prefix.isEmpty()) {
- d->write(tag.namespaceDeclaration.prefix);
- d->write(":");
- }
- d->write(tag.name);
- d->write(">");
-}
-
-
-
-/*!
- Writes the entity reference \a name to the stream, as "&\a{name};".
- */
-void QXmlStreamWriter::writeEntityReference(const QString &name)
-{
- Q_D(QXmlStreamWriter);
- d->finishStartElement();
- d->write("&");
- d->write(name);
- d->write(";");
-}
-
-
-/*! Writes a namespace declaration for \a namespaceUri with \a
- prefix. If \a prefix is empty, QXmlStreamWriter assigns a unique
- prefix consisting of the letter 'n' followed by a number.
-
- If writeStartElement() or writeEmptyElement() was called, the
- declaration applies to the current element; otherwise it applies to
- the next child element.
-
- Note that the prefix \e xml is both predefined and reserved for
- \e http://www.w3.org/XML/1998/namespace, which in turn cannot be
- bound to any other prefix. The prefix \e xmlns and its URI
- \e http://www.w3.org/2000/xmlns/ are used for the namespace mechanism
- itself and thus completely forbidden in declarations.
-
- */
-void QXmlStreamWriter::writeNamespace(const QString &namespaceUri, const QString &prefix)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(prefix != QLatin1String("xmlns"));
- if (prefix.isEmpty()) {
- d->findNamespace(namespaceUri, d->inStartElement);
- } else {
- Q_ASSERT(!((prefix == QLatin1String("xml")) ^ (namespaceUri == QLatin1String("http://www.w3.org/XML/1998/namespace"))));
- Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/2000/xmlns/"));
- QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push();
- namespaceDeclaration.prefix = d->addToStringStorage(prefix);
- namespaceDeclaration.namespaceUri = d->addToStringStorage(namespaceUri);
- if (d->inStartElement)
- d->writeNamespaceDeclaration(namespaceDeclaration);
- }
-}
-
-
-/*! Writes a default namespace declaration for \a namespaceUri.
-
- If writeStartElement() or writeEmptyElement() was called, the
- declaration applies to the current element; otherwise it applies to
- the next child element.
-
- Note that the namespaces \e http://www.w3.org/XML/1998/namespace
- (bound to \e xmlns) and \e http://www.w3.org/2000/xmlns/ (bound to
- \e xml) by definition cannot be declared as default.
- */
-void QXmlStreamWriter::writeDefaultNamespace(const QString &namespaceUri)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/XML/1998/namespace"));
- Q_ASSERT(namespaceUri != QLatin1String("http://www.w3.org/2000/xmlns/"));
- QXmlStreamWriterPrivate::NamespaceDeclaration &namespaceDeclaration = d->namespaceDeclarations.push();
- namespaceDeclaration.prefix.clear();
- namespaceDeclaration.namespaceUri = d->addToStringStorage(namespaceUri);
- if (d->inStartElement)
- d->writeNamespaceDeclaration(namespaceDeclaration);
-}
-
-
-/*!
- Writes an XML processing instruction with \a target and \a data,
- where \a data must not contain the sequence "?>".
- */
-void QXmlStreamWriter::writeProcessingInstruction(const QString &target, const QString &data)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(!data.contains(QLatin1String("?>")));
- if (!d->finishStartElement(false) && d->autoFormatting)
- d->indent(d->tagStack.size());
- d->write("<?");
- d->write(target);
- if (!data.isNull()) {
- d->write(" ");
- d->write(data);
- }
- d->write("?>");
-}
-
-
-
-/*!\overload
-
- Writes a document start with XML version number "1.0". This also
- writes the encoding information.
-
- \sa writeEndDocument(), setCodec()
- \since 4.5
- */
-void QXmlStreamWriter::writeStartDocument()
-{
- writeStartDocument(QLatin1String("1.0"));
-}
-
-
-/*!
- Writes a document start with the XML version number \a version.
-
- \sa writeEndDocument()
- */
-void QXmlStreamWriter::writeStartDocument(const QString &version)
-{
- Q_D(QXmlStreamWriter);
- d->finishStartElement(false);
- d->write("<?xml version=\"");
- d->write(version);
- if (d->device) { // stringDevice does not get any encoding
- d->write("\" encoding=\"");
-#ifdef QT_NO_TEXTCODEC
- d->write("iso-8859-1");
-#else
- const QByteArray name = d->codec->name();
- d->write(name.constData(), name.length());
-#endif
- }
- d->write("\"?>");
-}
-
-/*! Writes a document start with the XML version number \a version
- and a standalone attribute \a standalone.
-
- \sa writeEndDocument()
- \since 4.5
- */
-void QXmlStreamWriter::writeStartDocument(const QString &version, bool standalone)
-{
- Q_D(QXmlStreamWriter);
- d->finishStartElement(false);
- d->write("<?xml version=\"");
- d->write(version);
- if (d->device) { // stringDevice does not get any encoding
- d->write("\" encoding=\"");
-#ifdef QT_NO_TEXTCODEC
- d->write("iso-8859-1");
-#else
- const QByteArray name = d->codec->name();
- d->write(name.constData(), name.length());
-#endif
- }
- if (standalone)
- d->write("\" standalone=\"yes\"?>");
- else
- d->write("\" standalone=\"no\"?>");
-}
-
-
-/*!\overload
-
- Writes a start element with \a qualifiedName. Subsequent calls to
- writeAttribute() will add attributes to this element.
-
- \sa writeEndElement(), writeEmptyElement()
- */
-void QXmlStreamWriter::writeStartElement(const QString &qualifiedName)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(qualifiedName.count(QLatin1Char(':')) <= 1);
- d->writeStartElement(QString(), qualifiedName);
-}
-
-
-/*! Writes a start element with \a name, prefixed for the specified
- \a namespaceUri. If the namespace has not been declared yet,
- QXmlStreamWriter will generate a namespace declaration for
- it. Subsequent calls to writeAttribute() will add attributes to this
- element.
-
- \sa writeNamespace(), writeEndElement(), writeEmptyElement()
- */
-void QXmlStreamWriter::writeStartElement(const QString &namespaceUri, const QString &name)
-{
- Q_D(QXmlStreamWriter);
- Q_ASSERT(!name.contains(QLatin1Char(':')));
- d->writeStartElement(namespaceUri, name);
-}
-
-void QXmlStreamWriterPrivate::writeStartElement(const QString &namespaceUri, const QString &name)
-{
- if (!finishStartElement(false) && autoFormatting)
- indent(tagStack.size());
-
- Tag &tag = tagStack_push();
- tag.name = addToStringStorage(name);
- tag.namespaceDeclaration = findNamespace(namespaceUri);
- write("<");
- if (!tag.namespaceDeclaration.prefix.isEmpty()) {
- write(tag.namespaceDeclaration.prefix);
- write(":");
- }
- write(tag.name);
- inStartElement = lastWasStartElement = true;
-
- for (int i = lastNamespaceDeclaration; i < namespaceDeclarations.size(); ++i)
- writeNamespaceDeclaration(namespaceDeclarations[i]);
- tag.namespaceDeclarationsSize = lastNamespaceDeclaration;
-}
-
-#ifndef QT_NO_XMLSTREAMREADER
-/*! Writes the current state of the \a reader. All possible valid
- states are supported.
-
- The purpose of this function is to support chained processing of XML data.
-
- \sa QXmlStreamReader::tokenType()
- */
-void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)
-{
- switch (reader.tokenType()) {
- case QXmlStreamReader::NoToken:
- break;
- case QXmlStreamReader::StartDocument:
- writeStartDocument();
- break;
- case QXmlStreamReader::EndDocument:
- writeEndDocument();
- break;
- case QXmlStreamReader::StartElement: {
- QXmlStreamNamespaceDeclarations namespaceDeclarations = reader.namespaceDeclarations();
- for (int i = 0; i < namespaceDeclarations.size(); ++i) {
- const QXmlStreamNamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.at(i);
- writeNamespace(namespaceDeclaration.namespaceUri().toString(),
- namespaceDeclaration.prefix().toString());
- }
- writeStartElement(reader.namespaceUri().toString(), reader.name().toString());
- writeAttributes(reader.attributes());
- } break;
- case QXmlStreamReader::EndElement:
- writeEndElement();
- break;
- case QXmlStreamReader::Characters:
- if (reader.isCDATA())
- writeCDATA(reader.text().toString());
- else
- writeCharacters(reader.text().toString());
- break;
- case QXmlStreamReader::Comment:
- writeComment(reader.text().toString());
- break;
- case QXmlStreamReader::DTD:
- writeDTD(reader.text().toString());
- break;
- case QXmlStreamReader::EntityReference:
- writeEntityReference(reader.name().toString());
- break;
- case QXmlStreamReader::ProcessingInstruction:
- writeProcessingInstruction(reader.processingInstructionTarget().toString(),
- reader.processingInstructionData().toString());
- break;
- default:
- Q_ASSERT(reader.tokenType() != QXmlStreamReader::Invalid);
- qWarning("QXmlStreamWriter: writeCurrentToken() with invalid state.");
- break;
- }
-}
-
-/*!
- \fn bool QXmlStreamAttributes::hasAttribute(const QString &qualifiedName) const
- \since 4.5
-
- Returns \c true if this QXmlStreamAttributes has an attribute whose
- qualified name is \a qualifiedName; otherwise returns \c false.
-
- Note that this is not namespace aware. For instance, if this
- QXmlStreamAttributes contains an attribute whose lexical name is "xlink:href"
- this doesn't tell that an attribute named \c href in the XLink namespace is
- present, since the \c xlink prefix can be bound to any namespace. Use the
- overload that takes a namespace URI and a local name as parameter, for
- namespace aware code.
-*/
-
-/*!
- \fn bool QXmlStreamAttributes::hasAttribute(QLatin1String qualifiedName) const
- \overload
- \since 4.5
-*/
-
-/*!
- \fn bool QXmlStreamAttributes::hasAttribute(const QString &namespaceUri,
- const QString &name) const
- \overload
- \since 4.5
-
- Returns \c true if this QXmlStreamAttributes has an attribute whose
- namespace URI and name correspond to \a namespaceUri and \a name;
- otherwise returns \c false.
-*/
-
-#endif // QT_NO_XMLSTREAMREADER
-#endif // QT_NO_XMLSTREAMWRITER
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_XMLSTREAM
diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h
deleted file mode 100644
index bf6ddefcdd..0000000000
--- a/src/corelib/xml/qxmlstream.h
+++ /dev/null
@@ -1,540 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QXMLSTREAM_H
-#define QXMLSTREAM_H
-
-#include <QtCore/qiodevice.h>
-
-#ifndef QT_NO_XMLSTREAM
-
-#include <QtCore/qstring.h>
-#include <QtCore/qvector.h>
-#include <QtCore/qscopedpointer.h>
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_CORE_EXPORT QXmlStreamStringRef {
- QString m_string;
- int m_position, m_size;
-public:
- inline QXmlStreamStringRef():m_position(0), m_size(0){}
- inline QXmlStreamStringRef(const QStringRef &aString)
- :m_string(aString.string()?*aString.string():QString()), m_position(aString.position()), m_size(aString.size()){}
- QXmlStreamStringRef(const QString &aString) : m_string(aString), m_position(0), m_size(m_string.size()) {}
-#ifdef Q_COMPILER_RVALUE_REFS
- QXmlStreamStringRef(QString &&aString) Q_DECL_NOTHROW : m_string(std::move(aString)), m_position(0), m_size(m_string.size()) {}
-#endif
-
-#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
- QXmlStreamStringRef(const QXmlStreamStringRef &other) // = default
- : m_string(other.m_string), m_position(other.m_position), m_size(other.m_size) {}
-#ifdef Q_COMPILER_RVALUE_REFS
- QXmlStreamStringRef(QXmlStreamStringRef &&other) Q_DECL_NOTHROW // = default
- : m_string(std::move(other.m_string)), m_position(other.m_position), m_size(other.m_size) {}
- QXmlStreamStringRef &operator=(QXmlStreamStringRef &&other) Q_DECL_NOTHROW // = default
- { swap(other); return *this; }
-#endif
- QXmlStreamStringRef &operator=(const QXmlStreamStringRef &other) // = default
- { m_string = other.m_string; m_position = other.m_position; m_size = other.m_size; return *this; }
- inline ~QXmlStreamStringRef() {} // ### this prevents (or deprecates) all the move/copy special member functions,
- // ### that's why we need to provide them by hand above. We can't remove it in
- // ### Qt 5, since that would change the way its passed to functions. In Qt 6, remove all.
-#endif // Qt < 6.0
-
- void swap(QXmlStreamStringRef &other) Q_DECL_NOTHROW
- {
- qSwap(m_string, other.m_string);
- qSwap(m_position, other.m_position);
- qSwap(m_size, other.m_size);
- }
-
- inline void clear() { m_string.clear(); m_position = m_size = 0; }
- inline operator QStringRef() const { return QStringRef(&m_string, m_position, m_size); }
- inline const QString *string() const { return &m_string; }
- inline int position() const { return m_position; }
- inline int size() const { return m_size; }
-};
-Q_DECLARE_SHARED_NOT_MOVABLE_UNTIL_QT6(QXmlStreamStringRef)
-
-
-class QXmlStreamReaderPrivate;
-class QXmlStreamAttributes;
-class Q_CORE_EXPORT QXmlStreamAttribute {
- QXmlStreamStringRef m_name, m_namespaceUri, m_qualifiedName, m_value;
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- void *reserved;
-#endif
- uint m_isDefault : 1;
- friend class QXmlStreamReaderPrivate;
- friend class QXmlStreamAttributes;
-public:
- QXmlStreamAttribute();
- QXmlStreamAttribute(const QString &qualifiedName, const QString &value);
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- QXmlStreamAttribute(const QString &namespaceUri, const QString &name, const QString &value);
- QXmlStreamAttribute(const QXmlStreamAttribute &);
-#ifdef Q_COMPILER_RVALUE_REFS
- QXmlStreamAttribute(QXmlStreamAttribute &&other) Q_DECL_NOTHROW // = default;
- : m_name(std::move(other.m_name)),
- m_namespaceUri(std::move(other.m_namespaceUri)),
- m_qualifiedName(std::move(other.m_qualifiedName)),
- m_value(std::move(other.m_value)),
- reserved(other.reserved),
- m_isDefault(other.m_isDefault)
- {
- other.reserved = Q_NULLPTR;
- }
- QXmlStreamAttribute &operator=(QXmlStreamAttribute &&other) Q_DECL_NOTHROW // = default;
- {
- m_name = std::move(other.m_name);
- m_namespaceUri = std::move(other.m_namespaceUri);
- m_qualifiedName = std::move(other.m_qualifiedName);
- m_value = std::move(other.m_value);
- qSwap(reserved, other.reserved);
- m_isDefault = other.m_isDefault;
- return *this;
- }
-#endif
- QXmlStreamAttribute& operator=(const QXmlStreamAttribute &);
- ~QXmlStreamAttribute();
-#endif // < Qt 6
-
- inline QStringRef namespaceUri() const { return m_namespaceUri; }
- inline QStringRef name() const { return m_name; }
- inline QStringRef qualifiedName() const { return m_qualifiedName; }
- inline QStringRef prefix() const {
- return QStringRef(m_qualifiedName.string(),
- m_qualifiedName.position(),
- qMax(0, m_qualifiedName.size() - m_name.size() - 1));
- }
- inline QStringRef value() const { return m_value; }
- inline bool isDefault() const { return m_isDefault; }
- inline bool operator==(const QXmlStreamAttribute &other) const {
- return (value() == other.value()
- && (namespaceUri().isNull() ? (qualifiedName() == other.qualifiedName())
- : (namespaceUri() == other.namespaceUri() && name() == other.name())));
- }
- inline bool operator!=(const QXmlStreamAttribute &other) const
- { return !operator==(other); }
-};
-
-Q_DECLARE_TYPEINFO(QXmlStreamAttribute, Q_MOVABLE_TYPE);
-
-class Q_CORE_EXPORT QXmlStreamAttributes : public QVector<QXmlStreamAttribute>
-{
-public:
- inline QXmlStreamAttributes() {}
- QStringRef value(const QString &namespaceUri, const QString &name) const;
- QStringRef value(const QString &namespaceUri, QLatin1String name) const;
- QStringRef value(QLatin1String namespaceUri, QLatin1String name) const;
- QStringRef value(const QString &qualifiedName) const;
- QStringRef value(QLatin1String qualifiedName) const;
- void append(const QString &namespaceUri, const QString &name, const QString &value);
- void append(const QString &qualifiedName, const QString &value);
-
- inline bool hasAttribute(const QString &qualifiedName) const
- {
- return !value(qualifiedName).isNull();
- }
-
- inline bool hasAttribute(QLatin1String qualifiedName) const
- {
- return !value(qualifiedName).isNull();
- }
-
- inline bool hasAttribute(const QString &namespaceUri, const QString &name) const
- {
- return !value(namespaceUri, name).isNull();
- }
-
- using QVector<QXmlStreamAttribute>::append;
-};
-
-class Q_CORE_EXPORT QXmlStreamNamespaceDeclaration {
- QXmlStreamStringRef m_prefix, m_namespaceUri;
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- void *reserved;
-#endif
-
- friend class QXmlStreamReaderPrivate;
-public:
- QXmlStreamNamespaceDeclaration();
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- QXmlStreamNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &);
- QXmlStreamNamespaceDeclaration(QXmlStreamNamespaceDeclaration &&other) Q_DECL_NOTHROW // = default
- : m_prefix(std::move(other.m_prefix)),
- m_namespaceUri(std::move(other.m_namespaceUri)),
- reserved(other.reserved)
- {
- other.reserved = nullptr;
- }
- QXmlStreamNamespaceDeclaration &operator=(QXmlStreamNamespaceDeclaration &&other) Q_DECL_NOTHROW // = default
- {
- m_prefix = std::move(other.m_prefix);
- m_namespaceUri = std::move(other.m_namespaceUri);
- qSwap(reserved, other.reserved);
- return *this;
- }
- QXmlStreamNamespaceDeclaration(const QString &prefix, const QString &namespaceUri);
- ~QXmlStreamNamespaceDeclaration();
- QXmlStreamNamespaceDeclaration& operator=(const QXmlStreamNamespaceDeclaration &);
-#endif // < Qt 6
-
- inline QStringRef prefix() const { return m_prefix; }
- inline QStringRef namespaceUri() const { return m_namespaceUri; }
- inline bool operator==(const QXmlStreamNamespaceDeclaration &other) const {
- return (prefix() == other.prefix() && namespaceUri() == other.namespaceUri());
- }
- inline bool operator!=(const QXmlStreamNamespaceDeclaration &other) const
- { return !operator==(other); }
-};
-
-Q_DECLARE_TYPEINFO(QXmlStreamNamespaceDeclaration, Q_MOVABLE_TYPE);
-typedef QVector<QXmlStreamNamespaceDeclaration> QXmlStreamNamespaceDeclarations;
-
-class Q_CORE_EXPORT QXmlStreamNotationDeclaration {
- QXmlStreamStringRef m_name, m_systemId, m_publicId;
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- void *reserved;
-#endif
-
- friend class QXmlStreamReaderPrivate;
-public:
- QXmlStreamNotationDeclaration();
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- ~QXmlStreamNotationDeclaration();
- QXmlStreamNotationDeclaration(const QXmlStreamNotationDeclaration &);
- QXmlStreamNotationDeclaration(QXmlStreamNotationDeclaration &&other) Q_DECL_NOTHROW // = default
- : m_name(std::move(other.m_name)),
- m_systemId(std::move(other.m_systemId)),
- m_publicId(std::move(other.m_publicId)),
- reserved(other.reserved)
- {
- other.reserved = nullptr;
- }
- QXmlStreamNotationDeclaration& operator=(const QXmlStreamNotationDeclaration &);
- QXmlStreamNotationDeclaration &operator=(QXmlStreamNotationDeclaration &&other) Q_DECL_NOTHROW // = default
- {
- m_name = std::move(other.m_name);
- m_systemId = std::move(other.m_systemId);
- m_publicId = std::move(other.m_publicId);
- qSwap(reserved, other.reserved);
- return *this;
- }
-#endif // < Qt 6
-
- inline QStringRef name() const { return m_name; }
- inline QStringRef systemId() const { return m_systemId; }
- inline QStringRef publicId() const { return m_publicId; }
- inline bool operator==(const QXmlStreamNotationDeclaration &other) const {
- return (name() == other.name() && systemId() == other.systemId()
- && publicId() == other.publicId());
- }
- inline bool operator!=(const QXmlStreamNotationDeclaration &other) const
- { return !operator==(other); }
-};
-
-Q_DECLARE_TYPEINFO(QXmlStreamNotationDeclaration, Q_MOVABLE_TYPE);
-typedef QVector<QXmlStreamNotationDeclaration> QXmlStreamNotationDeclarations;
-
-class Q_CORE_EXPORT QXmlStreamEntityDeclaration {
- QXmlStreamStringRef m_name, m_notationName, m_systemId, m_publicId, m_value;
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- void *reserved;
-#endif
-
- friend class QXmlStreamReaderPrivate;
-public:
- QXmlStreamEntityDeclaration();
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- ~QXmlStreamEntityDeclaration();
- QXmlStreamEntityDeclaration(const QXmlStreamEntityDeclaration &);
- QXmlStreamEntityDeclaration(QXmlStreamEntityDeclaration &&other) Q_DECL_NOTHROW // = default
- : m_name(std::move(other.m_name)),
- m_notationName(std::move(other.m_notationName)),
- m_systemId(std::move(other.m_systemId)),
- m_publicId(std::move(other.m_publicId)),
- m_value(std::move(other.m_value)),
- reserved(other.reserved)
- {
- other.reserved = nullptr;
- }
- QXmlStreamEntityDeclaration& operator=(const QXmlStreamEntityDeclaration &);
- QXmlStreamEntityDeclaration &operator=(QXmlStreamEntityDeclaration &&other) Q_DECL_NOTHROW // = default
- {
- m_name = std::move(other.m_name);
- m_notationName = std::move(other.m_notationName);
- m_systemId = std::move(other.m_systemId);
- m_publicId = std::move(other.m_publicId);
- m_value = std::move(other.m_value);
- qSwap(reserved, other.reserved);
- return *this;
- }
-#endif // < Qt 6
-
- inline QStringRef name() const { return m_name; }
- inline QStringRef notationName() const { return m_notationName; }
- inline QStringRef systemId() const { return m_systemId; }
- inline QStringRef publicId() const { return m_publicId; }
- inline QStringRef value() const { return m_value; }
- inline bool operator==(const QXmlStreamEntityDeclaration &other) const {
- return (name() == other.name()
- && notationName() == other.notationName()
- && systemId() == other.systemId()
- && publicId() == other.publicId()
- && value() == other.value());
- }
- inline bool operator!=(const QXmlStreamEntityDeclaration &other) const
- { return !operator==(other); }
-};
-
-Q_DECLARE_TYPEINFO(QXmlStreamEntityDeclaration, Q_MOVABLE_TYPE);
-typedef QVector<QXmlStreamEntityDeclaration> QXmlStreamEntityDeclarations;
-
-
-class Q_CORE_EXPORT QXmlStreamEntityResolver
-{
-public:
- virtual ~QXmlStreamEntityResolver();
- virtual QString resolveEntity(const QString& publicId, const QString& systemId);
- virtual QString resolveUndeclaredEntity(const QString &name);
-};
-
-#ifndef QT_NO_XMLSTREAMREADER
-class Q_CORE_EXPORT QXmlStreamReader {
- QDOC_PROPERTY(bool namespaceProcessing READ namespaceProcessing WRITE setNamespaceProcessing)
-public:
- enum TokenType {
- NoToken = 0,
- Invalid,
- StartDocument,
- EndDocument,
- StartElement,
- EndElement,
- Characters,
- Comment,
- DTD,
- EntityReference,
- ProcessingInstruction
- };
-
-
- QXmlStreamReader();
- explicit QXmlStreamReader(QIODevice *device);
- explicit QXmlStreamReader(const QByteArray &data);
- explicit QXmlStreamReader(const QString &data);
- explicit QXmlStreamReader(const char * data);
- ~QXmlStreamReader();
-
- void setDevice(QIODevice *device);
- QIODevice *device() const;
- void addData(const QByteArray &data);
- void addData(const QString &data);
- void addData(const char *data);
- void clear();
-
-
- bool atEnd() const;
- TokenType readNext();
-
- bool readNextStartElement();
- void skipCurrentElement();
-
- TokenType tokenType() const;
- QString tokenString() const;
-
- void setNamespaceProcessing(bool);
- bool namespaceProcessing() const;
-
- inline bool isStartDocument() const { return tokenType() == StartDocument; }
- inline bool isEndDocument() const { return tokenType() == EndDocument; }
- inline bool isStartElement() const { return tokenType() == StartElement; }
- inline bool isEndElement() const { return tokenType() == EndElement; }
- inline bool isCharacters() const { return tokenType() == Characters; }
- bool isWhitespace() const;
- bool isCDATA() const;
- inline bool isComment() const { return tokenType() == Comment; }
- inline bool isDTD() const { return tokenType() == DTD; }
- inline bool isEntityReference() const { return tokenType() == EntityReference; }
- inline bool isProcessingInstruction() const { return tokenType() == ProcessingInstruction; }
-
- bool isStandaloneDocument() const;
- QStringRef documentVersion() const;
- QStringRef documentEncoding() const;
-
- qint64 lineNumber() const;
- qint64 columnNumber() const;
- qint64 characterOffset() const;
-
- QXmlStreamAttributes attributes() const;
-
- enum ReadElementTextBehaviour {
- ErrorOnUnexpectedElement,
- IncludeChildElements,
- SkipChildElements
- };
- QString readElementText(ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement);
-
- QStringRef name() const;
- QStringRef namespaceUri() const;
- QStringRef qualifiedName() const;
- QStringRef prefix() const;
-
- QStringRef processingInstructionTarget() const;
- QStringRef processingInstructionData() const;
-
- QStringRef text() const;
-
- QXmlStreamNamespaceDeclarations namespaceDeclarations() const;
- void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaraction);
- void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclaractions);
- QXmlStreamNotationDeclarations notationDeclarations() const;
- QXmlStreamEntityDeclarations entityDeclarations() const;
- QStringRef dtdName() const;
- QStringRef dtdPublicId() const;
- QStringRef dtdSystemId() const;
-
-
- enum Error {
- NoError,
- UnexpectedElementError,
- CustomError,
- NotWellFormedError,
- PrematureEndOfDocumentError
- };
- void raiseError(const QString& message = QString());
- QString errorString() const;
- Error error() const;
-
- inline bool hasError() const
- {
- return error() != NoError;
- }
-
- void setEntityResolver(QXmlStreamEntityResolver *resolver);
- QXmlStreamEntityResolver *entityResolver() const;
-
-private:
- Q_DISABLE_COPY(QXmlStreamReader)
- Q_DECLARE_PRIVATE(QXmlStreamReader)
- QScopedPointer<QXmlStreamReaderPrivate> d_ptr;
-
-};
-#endif // QT_NO_XMLSTREAMREADER
-
-#ifndef QT_NO_XMLSTREAMWRITER
-
-class QXmlStreamWriterPrivate;
-
-class Q_CORE_EXPORT QXmlStreamWriter
-{
- QDOC_PROPERTY(bool autoFormatting READ autoFormatting WRITE setAutoFormatting)
- QDOC_PROPERTY(int autoFormattingIndent READ autoFormattingIndent WRITE setAutoFormattingIndent)
-public:
- QXmlStreamWriter();
- explicit QXmlStreamWriter(QIODevice *device);
- explicit QXmlStreamWriter(QByteArray *array);
- explicit QXmlStreamWriter(QString *string);
- ~QXmlStreamWriter();
-
- void setDevice(QIODevice *device);
- QIODevice *device() const;
-
-#ifndef QT_NO_TEXTCODEC
- void setCodec(QTextCodec *codec);
- void setCodec(const char *codecName);
- QTextCodec *codec() const;
-#endif
-
- void setAutoFormatting(bool);
- bool autoFormatting() const;
-
- void setAutoFormattingIndent(int spacesOrTabs);
- int autoFormattingIndent() const;
-
- void writeAttribute(const QString &qualifiedName, const QString &value);
- void writeAttribute(const QString &namespaceUri, const QString &name, const QString &value);
- void writeAttribute(const QXmlStreamAttribute& attribute);
- void writeAttributes(const QXmlStreamAttributes& attributes);
-
- void writeCDATA(const QString &text);
- void writeCharacters(const QString &text);
- void writeComment(const QString &text);
-
- void writeDTD(const QString &dtd);
-
- void writeEmptyElement(const QString &qualifiedName);
- void writeEmptyElement(const QString &namespaceUri, const QString &name);
-
- void writeTextElement(const QString &qualifiedName, const QString &text);
- void writeTextElement(const QString &namespaceUri, const QString &name, const QString &text);
-
- void writeEndDocument();
- void writeEndElement();
-
- void writeEntityReference(const QString &name);
- void writeNamespace(const QString &namespaceUri, const QString &prefix = QString());
- void writeDefaultNamespace(const QString &namespaceUri);
- void writeProcessingInstruction(const QString &target, const QString &data = QString());
-
- void writeStartDocument();
- void writeStartDocument(const QString &version);
- void writeStartDocument(const QString &version, bool standalone);
- void writeStartElement(const QString &qualifiedName);
- void writeStartElement(const QString &namespaceUri, const QString &name);
-
-#ifndef QT_NO_XMLSTREAMREADER
- void writeCurrentToken(const QXmlStreamReader &reader);
-#endif
-
- bool hasError() const;
-
-private:
- Q_DISABLE_COPY(QXmlStreamWriter)
- Q_DECLARE_PRIVATE(QXmlStreamWriter)
- QScopedPointer<QXmlStreamWriterPrivate> d_ptr;
-};
-#endif // QT_NO_XMLSTREAMWRITER
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_XMLSTREAM
-#endif // QXMLSTREAM_H
diff --git a/src/corelib/xml/qxmlstream_p.h b/src/corelib/xml/qxmlstream_p.h
index 4157fbbd0e..e6c89e40cd 100644
--- a/src/corelib/xml/qxmlstream_p.h
+++ b/src/corelib/xml/qxmlstream_p.h
@@ -702,18 +702,20 @@ public:
bool tagsDone;
inline QStringRef addToStringStorage(const QStringRef &s) {
- return addToStringStorage(qToStringViewIgnoringNull(s));
+ int pos = tagStackStringStorageSize;
+ int sz = s.size();
+ if (pos != tagStackStringStorage.size())
+ tagStackStringStorage.resize(pos);
+ tagStackStringStorage.insert(pos, s.unicode(), sz);
+ tagStackStringStorageSize += sz;
+ return QStringRef(&tagStackStringStorage, pos, sz);
}
inline QStringRef addToStringStorage(const QString &s) {
- return addToStringStorage(qToStringViewIgnoringNull(s));
- }
- QStringRef addToStringStorage(QStringView s)
- {
int pos = tagStackStringStorageSize;
int sz = s.size();
if (pos != tagStackStringStorage.size())
tagStackStringStorage.resize(pos);
- tagStackStringStorage.append(s.data(), sz);
+ tagStackStringStorage.insert(pos, s.unicode(), sz);
tagStackStringStorageSize += sz;
return QStringRef(&tagStackStringStorage, pos, sz);
}
@@ -755,24 +757,20 @@ public:
int readBufferPos;
QXmlStreamSimpleStack<uint> putStack;
struct Entity {
- Entity() = default;
- Entity(const QString &name, const QString &value)
- : name(name), value(value), external(false), unparsed(false), literal(false),
+ Entity(const QString& str = QString())
+ :value(str), external(false), unparsed(false), literal(false),
hasBeenParsed(false), isCurrentlyReferenced(false){}
- static inline Entity createLiteral(QLatin1String name, QLatin1String value)
- { Entity result(name, value); result.literal = result.hasBeenParsed = true; return result; }
- QString name, value;
+ static inline Entity createLiteral(const QString &entity)
+ { Entity result(entity); result.literal = result.hasBeenParsed = true; return result; }
+ QString value;
uint external : 1;
uint unparsed : 1;
uint literal : 1;
uint hasBeenParsed : 1;
uint isCurrentlyReferenced : 1;
};
- // these hash tables use a QStringView as a key to avoid creating QStrings
- // just for lookup. The keys are usually views into Entity::name and thus
- // are guaranteed to have the same lifetime as the referenced data:
- QHash<QStringView, Entity> entityHash;
- QHash<QStringView, Entity> parameterEntityHash;
+ QHash<QString, Entity> entityHash;
+ QHash<QString, Entity> parameterEntityHash;
QXmlStreamSimpleStack<Entity *>entityReferenceStack;
inline bool referenceEntity(Entity &entity) {
if (entity.isCurrentlyReferenced) {
@@ -925,11 +923,6 @@ public:
const Value &symbol = sym(index);
return QStringRef(&textBuffer, symbol.pos + symbol.prefix, symbol.len - symbol.prefix);
}
- QStringView symView(int index) const
- {
- const Value &symbol = sym(index);
- return QStringView(textBuffer.data() + symbol.pos, symbol.len).mid(symbol.prefix);
- }
inline QStringRef symName(int index) {
const Value &symbol = sym(index);
return QStringRef(&textBuffer, symbol.pos, symbol.len);
@@ -1500,13 +1493,13 @@ bool QXmlStreamReaderPrivate::parse()
EntityDeclaration &entityDeclaration = entityDeclarations.top();
if (!entityDeclaration.external)
entityDeclaration.value = symString(2);
- auto &hash = entityDeclaration.parameter ? parameterEntityHash : entityHash;
- if (!hash.contains(qToStringViewIgnoringNull(entityDeclaration.name))) {
- Entity entity(entityDeclaration.name.toString(),
- entityDeclaration.value.toString());
+ QString entityName = entityDeclaration.name.toString();
+ QHash<QString, Entity> &hash = entityDeclaration.parameter ? parameterEntityHash : entityHash;
+ if (!hash.contains(entityName)) {
+ Entity entity(entityDeclaration.value.toString());
entity.unparsed = (!entityDeclaration.notationName.isNull());
entity.external = entityDeclaration.external;
- hash.insert(qToStringViewIgnoringNull(entity.name), entity);
+ hash.insert(entityName, entity);
}
} break;
@@ -1516,12 +1509,12 @@ bool QXmlStreamReaderPrivate::parse()
processingInstructionTarget = symString(3);
if (scanUntil("?>")) {
processingInstructionData = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 2);
- if (!processingInstructionTarget.compare(QLatin1String("xml"), Qt::CaseInsensitive)) {
+ const QString piTarget(processingInstructionTarget.toString());
+ if (!piTarget.compare(QLatin1String("xml"), Qt::CaseInsensitive)) {
raiseWellFormedError(QXmlStream::tr("XML declaration not at start of document."));
}
- else if (!QXmlUtils::isNCName(processingInstructionTarget))
- raiseWellFormedError(QXmlStream::tr("%1 is an invalid processing instruction name.")
- .arg(processingInstructionTarget));
+ else if(!QXmlUtils::isNCName(piTarget))
+ raiseWellFormedError(QXmlStream::tr("%1 is an invalid processing instruction name.").arg(piTarget));
} else if (type != QXmlStreamReader::Invalid){
resume(96);
return false;
@@ -1531,7 +1524,7 @@ bool QXmlStreamReaderPrivate::parse()
case 97:
setType(QXmlStreamReader::ProcessingInstruction);
processingInstructionTarget = symString(3);
- if (!processingInstructionTarget.compare(QLatin1String("xml"), Qt::CaseInsensitive))
+ if (!processingInstructionTarget.toString().compare(QLatin1String("xml"), Qt::CaseInsensitive))
raiseWellFormedError(QXmlStream::tr("Invalid processing instruction name."));
break;
@@ -1645,8 +1638,8 @@ bool QXmlStreamReaderPrivate::parse()
break;
case 175: {
- if (!QXmlUtils::isPublicID(symString(1))) {
- raiseWellFormedError(QXmlStream::tr("%1 is an invalid PUBLIC identifier.").arg(symString(1)));
+ if (!QXmlUtils::isPublicID(symString(1).toString())) {
+ raiseWellFormedError(QXmlStream::tr("%1 is an invalid PUBLIC identifier.").arg(symString(1).toString()));
resume(175);
return false;
}
@@ -1801,7 +1794,7 @@ bool QXmlStreamReaderPrivate::parse()
case 240: {
sym(1).len += sym(2).len + 1;
- QStringView reference = symView(2);
+ QString reference = symString(2).toString();
if (entityHash.contains(reference)) {
Entity &entity = entityHash[reference];
if (entity.unparsed) {
@@ -1822,7 +1815,7 @@ bool QXmlStreamReaderPrivate::parse()
}
if (entityResolver) {
- QString replacementText = resolveUndeclaredEntity(reference.toString());
+ QString replacementText = resolveUndeclaredEntity(reference);
if (!replacementText.isNull()) {
putReplacement(replacementText);
textBuffer.chop(2 + sym(2).len);
@@ -1840,7 +1833,7 @@ bool QXmlStreamReaderPrivate::parse()
case 241: {
sym(1).len += sym(2).len + 1;
- QStringView reference = symView(2);
+ QString reference = symString(2).toString();
if (parameterEntityHash.contains(reference)) {
referenceToParameterEntityDetected = true;
Entity &entity = parameterEntityHash[reference];
@@ -1853,7 +1846,7 @@ bool QXmlStreamReaderPrivate::parse()
clearSym();
}
} else if (entitiesMustBeDeclared()) {
- raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(symString(2)));
+ raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(symString(2).toString()));
}
} break;
@@ -1863,7 +1856,7 @@ bool QXmlStreamReaderPrivate::parse()
case 243: {
sym(1).len += sym(2).len + 1;
- QStringView reference = symView(2);
+ QString reference = symString(2).toString();
if (entityHash.contains(reference)) {
Entity &entity = entityHash[reference];
if (entity.unparsed || entity.value.isNull()) {
@@ -1884,7 +1877,7 @@ bool QXmlStreamReaderPrivate::parse()
}
if (entityResolver) {
- QString replacementText = resolveUndeclaredEntity(reference.toString());
+ QString replacementText = resolveUndeclaredEntity(reference);
if (!replacementText.isNull()) {
putReplacement(replacementText);
textBuffer.chop(2 + sym(2).len);
diff --git a/src/corelib/xml/xml.pri b/src/corelib/xml/xml.pri
deleted file mode 100644
index 2401c09ab7..0000000000
--- a/src/corelib/xml/xml.pri
+++ /dev/null
@@ -1,10 +0,0 @@
-# Qt xml core module
-
-HEADERS += \
- xml/qxmlstream.h \
- xml/qxmlstream_p.h \
- xml/qxmlutils_p.h
-
-SOURCES += \
- xml/qxmlstream.cpp \
- xml/qxmlutils.cpp
diff --git a/src/dbus/qdbusabstractadaptor_p.h b/src/dbus/qdbusabstractadaptor_p.h
index fb185cfb16..023b3b1be2 100644
--- a/src/dbus/qdbusabstractadaptor_p.h
+++ b/src/dbus/qdbusabstractadaptor_p.h
@@ -106,10 +106,6 @@ public: // typedefs
{ return QLatin1String(interface) < other; }
inline bool operator<(const QByteArray &other) const
{ return interface < other; }
-#if defined(Q_CC_MSVC) && _MSC_VER < 1600
- friend inline bool operator<(const QString &str, const AdaptorData &obj)
- { return str < QLatin1String(obj.interface); }
-#endif
};
typedef QVector<AdaptorData> AdaptorMap;
diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp
index 9f2e688ebb..7ddf68daa0 100644
--- a/src/dbus/qdbusabstractinterface.cpp
+++ b/src/dbus/qdbusabstractinterface.cpp
@@ -70,10 +70,10 @@ class DisconnectRelayEvent : public QMetaCallEvent
{
public:
DisconnectRelayEvent(QObject *sender, const QMetaMethod &m)
- : QMetaCallEvent(0, 0, Q_NULLPTR, sender, m.methodIndex())
+ : QMetaCallEvent(0, 0, nullptr, sender, m.methodIndex())
{}
- void placeMetaCall(QObject *object) Q_DECL_OVERRIDE
+ void placeMetaCall(QObject *object) override
{
QDBusAbstractInterface *iface = static_cast<QDBusAbstractInterface *>(object);
QDBusAbstractInterfacePrivate::finishDisconnectNotify(iface, signalId());
@@ -761,27 +761,28 @@ QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &m
switch (count) {
case 8:
argList.prepend(arg8);
- // fall through
+ Q_FALLTHROUGH();
case 7:
argList.prepend(arg7);
- // fall through
+ Q_FALLTHROUGH();
case 6:
argList.prepend(arg6);
- // fall through
+ Q_FALLTHROUGH();
case 5:
argList.prepend(arg5);
- // fall through
+ Q_FALLTHROUGH();
case 4:
argList.prepend(arg4);
- // fall through
+ Q_FALLTHROUGH();
case 3:
argList.prepend(arg3);
- // fall through
+ Q_FALLTHROUGH();
case 2:
argList.prepend(arg2);
- // fall through
+ Q_FALLTHROUGH();
case 1:
argList.prepend(arg1);
+ break;
}
return callWithArgumentList(mode, method, argList);
@@ -826,27 +827,28 @@ QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, const
switch (count) {
case 8:
argList.prepend(arg8);
- // fall through
+ Q_FALLTHROUGH();
case 7:
argList.prepend(arg7);
- // fall through
+ Q_FALLTHROUGH();
case 6:
argList.prepend(arg6);
- // fall through
+ Q_FALLTHROUGH();
case 5:
argList.prepend(arg5);
- // fall through
+ Q_FALLTHROUGH();
case 4:
argList.prepend(arg4);
- // fall through
+ Q_FALLTHROUGH();
case 3:
argList.prepend(arg3);
- // fall through
+ Q_FALLTHROUGH();
case 2:
argList.prepend(arg2);
- // fall through
+ Q_FALLTHROUGH();
case 1:
argList.prepend(arg1);
+ break;
}
return asyncCallWithArgumentList(method, argList);
diff --git a/src/dbus/qdbusabstractinterface.h b/src/dbus/qdbusabstractinterface.h
index f859c5ee7d..d6b0870787 100644
--- a/src/dbus/qdbusabstractinterface.h
+++ b/src/dbus/qdbusabstractinterface.h
@@ -67,7 +67,7 @@ class QDBusAbstractInterfacePrivate;
class Q_DBUS_EXPORT QDBusAbstractInterfaceBase: public QObject
{
public:
- int qt_metacall(QMetaObject::Call, int, void**) Q_DECL_OVERRIDE;
+ int qt_metacall(QMetaObject::Call, int, void**) override;
protected:
QDBusAbstractInterfaceBase(QDBusAbstractInterfacePrivate &dd, QObject *parent);
private:
@@ -147,8 +147,8 @@ protected:
const QDBusConnection &connection, QObject *parent);
QDBusAbstractInterface(QDBusAbstractInterfacePrivate &, QObject *parent);
- void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
- void disconnectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
+ void connectNotify(const QMetaMethod &signal) override;
+ void disconnectNotify(const QMetaMethod &signal) override;
QVariant internalPropGet(const char *propname) const;
void internalPropSet(const char *propname, const QVariant &value);
QDBusMessage internalConstCall(QDBus::CallMode mode,
diff --git a/src/dbus/qdbusargument.cpp b/src/dbus/qdbusargument.cpp
index df2817ca77..a33c4f8363 100644
--- a/src/dbus/qdbusargument.cpp
+++ b/src/dbus/qdbusargument.cpp
@@ -267,11 +267,11 @@ bool QDBusArgumentPrivate::checkReadAndDetach(QDBusArgumentPrivate *&d)
*/
/*!
- \fn qdbus_cast(const QDBusArgument &argument)
+ \fn qdbus_cast(const QDBusArgument &arg)
\relates QDBusArgument
\since 4.2
- Attempts to demarshall the contents of \a argument into the type
+ Attempts to demarshall the contents of \a arg into the type
\c{T}. For example:
\snippet code/src_qdbus_qdbusargument.cpp 2
@@ -1374,6 +1374,12 @@ QDBusArgument &operator<<(QDBusArgument &a, const QLineF &line)
}
#endif
+/*!
+ \fn void QDBusArgument::swap(QDBusArgument &other)
+
+ Swaps this QDBusArgument instance with \a other.
+*/
+
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/dbus/qdbusargument.h b/src/dbus/qdbusargument.h
index 5342a79227..a6d4e9cd25 100644
--- a/src/dbus/qdbusargument.h
+++ b/src/dbus/qdbusargument.h
@@ -77,7 +77,7 @@ public:
QDBusArgument();
QDBusArgument(const QDBusArgument &other);
#ifdef Q_COMPILER_RVALUE_REFS
- QDBusArgument(QDBusArgument &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; }
+ QDBusArgument(QDBusArgument &&other) Q_DECL_NOTHROW : d(other.d) { other.d = nullptr; }
QDBusArgument &operator=(QDBusArgument &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
QDBusArgument &operator=(const QDBusArgument &other);
@@ -160,7 +160,7 @@ QT_BEGIN_NAMESPACE
template<typename T> inline T qdbus_cast(const QDBusArgument &arg
#ifndef Q_QDOC
-, T * = Q_NULLPTR
+, T * = nullptr
#endif
)
{
@@ -171,7 +171,7 @@ template<typename T> inline T qdbus_cast(const QDBusArgument &arg
template<typename T> inline T qdbus_cast(const QVariant &v
#ifndef Q_QDOC
-, T * = Q_NULLPTR
+, T * = nullptr
#endif
)
{
diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp
index 75c1e92f96..2c2dfc1ff6 100644
--- a/src/dbus/qdbusconnection.cpp
+++ b/src/dbus/qdbusconnection.cpp
@@ -147,7 +147,7 @@ QDBusConnectionManager::QDBusConnectionManager()
// prevent the library from being unloaded on Windows. See comments in the function.
preventDllUnload();
#endif
- defaultBuses[0] = defaultBuses[1] = Q_NULLPTR;
+ defaultBuses[0] = defaultBuses[1] = nullptr;
start();
}
@@ -186,13 +186,13 @@ void QDBusConnectionManager::run()
delete d;
} else {
d->closeConnection();
- d->moveToThread(Q_NULLPTR); // allow it to be deleted in another thread
+ d->moveToThread(nullptr); // allow it to be deleted in another thread
}
}
connectionHash.clear();
// allow deletion from any thread without warning
- moveToThread(Q_NULLPTR);
+ moveToThread(nullptr);
}
QDBusConnectionPrivate *QDBusConnectionManager::connectToBus(QDBusConnection::BusType type, const QString &name,
@@ -1175,7 +1175,7 @@ bool QDBusConnection::unregisterService(const QString &serviceName)
QDBusConnection QDBusConnection::sessionBus()
{
if (_q_manager.isDestroyed())
- return QDBusConnection(Q_NULLPTR);
+ return QDBusConnection(nullptr);
return QDBusConnection(_q_manager()->busConnection(SessionBus));
}
@@ -1189,7 +1189,7 @@ QDBusConnection QDBusConnection::sessionBus()
QDBusConnection QDBusConnection::systemBus()
{
if (_q_manager.isDestroyed())
- return QDBusConnection(Q_NULLPTR);
+ return QDBusConnection(nullptr);
return QDBusConnection(_q_manager()->busConnection(SystemBus));
}
@@ -1272,6 +1272,12 @@ QByteArray QDBusConnection::localMachineId()
When using BlockWithGui, applications must be prepared for reentrancy in any function.
*/
+/*!
+ \fn void QDBusConnection::swap(QDBusConnection &other)
+
+ Swaps this QDBusConnection instance with \a other.
+*/
+
QT_END_NAMESPACE
#ifdef Q_OS_WIN
diff --git a/src/dbus/qdbusconnection.h b/src/dbus/qdbusconnection.h
index f801d6225c..ca7adfaaeb 100644
--- a/src/dbus/qdbusconnection.h
+++ b/src/dbus/qdbusconnection.h
@@ -134,7 +134,7 @@ public:
explicit QDBusConnection(const QString &name);
QDBusConnection(const QDBusConnection &other);
#ifdef Q_COMPILER_RVALUE_REFS
- QDBusConnection(QDBusConnection &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; }
+ QDBusConnection(QDBusConnection &&other) Q_DECL_NOTHROW : d(other.d) { other.d = nullptr; }
QDBusConnection &operator=(QDBusConnection &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
QDBusConnection &operator=(const QDBusConnection &other);
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
index d323088779..444d4727fd 100644
--- a/src/dbus/qdbusconnection_p.h
+++ b/src/dbus/qdbusconnection_p.h
@@ -59,7 +59,6 @@
#include <QtCore/qatomic.h>
#include <QtCore/qhash.h>
-#include <QtCore/qmutex.h>
#include <QtCore/qobject.h>
#include <QtCore/qpointer.h>
#include <QtCore/qreadwritelock.h>
@@ -149,14 +148,6 @@ public:
{ return name < other; }
inline bool operator<(const QStringRef &other) const
{ return QStringRef(&name) < other; }
-#if defined(Q_CC_MSVC) && _MSC_VER < 1600
- inline bool operator<(const ObjectTreeNode &other) const
- { return name < other.name; }
- friend inline bool operator<(const QString &str, const ObjectTreeNode &obj)
- { return str < obj.name; }
- friend inline bool operator<(const QStringRef &str, const ObjectTreeNode &obj)
- { return str < QStringRef(&obj.name); }
-#endif
inline bool isActive() const
{ return obj || !children.isEmpty(); }
@@ -198,7 +189,6 @@ public:
~QDBusConnectionPrivate();
void createBusService();
- void setDispatchEnabled(bool enable);
void setPeer(DBusConnection *connection, const QDBusErrorInternal &error);
void setConnection(DBusConnection *connection, const QDBusErrorInternal &error);
void setServer(QDBusServer *object, DBusServer *server, const QDBusErrorInternal &error);
@@ -271,10 +261,11 @@ private:
void _q_newConnection(QDBusConnectionPrivate *newConnection);
protected:
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) override;
public slots:
// public slots
+ void setDispatchEnabled(bool enable);
void doDispatch();
void socketRead(int);
void socketWrite(int);
@@ -312,9 +303,6 @@ public:
QDBusServer *serverObject;
};
- // the dispatch lock protects everything related to the DBusConnection or DBusServer
- // including the timeouts and watches
- QMutex dispatchLock;
union {
DBusConnection *connection;
DBusServer *server;
@@ -390,7 +378,9 @@ public:
public slots:
void execute()
{
- con->setDispatchEnabled(true);
+ // This call cannot race with something disabling dispatch only because dispatch is
+ // never re-disabled from Qt code on an in-use connection once it has been enabled.
+ QMetaObject::invokeMethod(con, "setDispatchEnabled", Qt::QueuedConnection, Q_ARG(bool, true));
if (!con->ref.deref())
con->deleteLater();
deleteLater();
diff --git a/src/dbus/qdbusconnectioninterface.cpp b/src/dbus/qdbusconnectioninterface.cpp
index 2b86eded7f..ebb3803489 100644
--- a/src/dbus/qdbusconnectioninterface.cpp
+++ b/src/dbus/qdbusconnectioninterface.cpp
@@ -378,21 +378,21 @@ void QDBusConnectionInterface::disconnectNotify(const QMetaMethod &signal)
// signals
/*!
- \fn QDBusConnectionInterface::serviceRegistered(const QString &serviceName)
+ \fn QDBusConnectionInterface::serviceRegistered(const QString &service)
This signal is emitted by the D-Bus server when the bus service
name (unique connection name or well-known service name) given by
- \a serviceName is acquired by this application.
+ \a service is acquired by this application.
Acquisition happens after this application has requested a name using
registerService().
*/
/*!
- \fn QDBusConnectionInterface::serviceUnregistered(const QString &serviceName)
+ \fn QDBusConnectionInterface::serviceUnregistered(const QString &service)
This signal is emitted by the D-Bus server when this application
- loses ownership of the bus service name given by \a serviceName.
+ loses ownership of the bus service name given by \a service.
*/
/*!
diff --git a/src/dbus/qdbusconnectioninterface.h b/src/dbus/qdbusconnectioninterface.h
index 37f35dbe81..c7b1573722 100644
--- a/src/dbus/qdbusconnectioninterface.h
+++ b/src/dbus/qdbusconnectioninterface.h
@@ -115,8 +115,8 @@ Q_SIGNALS:
void NameLost(const QString &);
void NameOwnerChanged(const QString &, const QString &, const QString &);
protected:
- void connectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
- void disconnectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
+ void connectNotify(const QMetaMethod &) override;
+ void disconnectNotify(const QMetaMethod &) override;
#endif
};
diff --git a/src/dbus/qdbusconnectionmanager_p.h b/src/dbus/qdbusconnectionmanager_p.h
index 1c7dea811d..ac49683cee 100644
--- a/src/dbus/qdbusconnectionmanager_p.h
+++ b/src/dbus/qdbusconnectionmanager_p.h
@@ -85,7 +85,7 @@ signals:
void serverRequested(const QString &address, void *server);
protected:
- void run() Q_DECL_OVERRIDE;
+ void run() override;
private:
void executeConnectionRequest(ConnectionRequestData *data);
diff --git a/src/dbus/qdbusdemarshaller.cpp b/src/dbus/qdbusdemarshaller.cpp
index 57684897c6..6befb33d61 100644
--- a/src/dbus/qdbusdemarshaller.cpp
+++ b/src/dbus/qdbusdemarshaller.cpp
@@ -289,7 +289,7 @@ QVariant QDBusDemarshaller::toVariantInternal()
case DBUS_TYPE_UNIX_FD:
if (capabilities & QDBusConnection::UnixFileDescriptorPassing)
return QVariant::fromValue(toUnixFileDescriptor());
- // fall through
+ Q_FALLTHROUGH();
default:
// qWarning("QDBusDemarshaller: Found unknown D-Bus type %d '%c'",
diff --git a/src/dbus/qdbuserror.cpp b/src/dbus/qdbuserror.cpp
index c599df6a32..e966f9dcde 100644
--- a/src/dbus/qdbuserror.cpp
+++ b/src/dbus/qdbuserror.cpp
@@ -409,6 +409,12 @@ QDebug operator<<(QDebug dbg, const QDBusError &msg)
}
#endif
+/*!
+ \fn void QDBusError::swap(QDBusError &other)
+
+ Swaps this QDBusError instance with \a other.
+*/
+
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/dbus/qdbusextratypes.cpp b/src/dbus/qdbusextratypes.cpp
index 964daac6d9..a0b121a1a3 100644
--- a/src/dbus/qdbusextratypes.cpp
+++ b/src/dbus/qdbusextratypes.cpp
@@ -218,6 +218,24 @@ void QDBusSignature::doCheck()
\sa signature()
*/
+/*!
+ \fn void QDBusObjectPath::swap(QDBusObjectPath &other)
+
+ Swaps this QDBusObjectPath instance with \a other.
+*/
+
+/*!
+ \fn void QDBusSignature::swap(QDBusSignature &other)
+
+ Swaps this QDBusSignature instance with \a other.
+*/
+
+/*!
+ \fn void QDBusVariant::swap(QDBusVariant &other)
+
+ Swaps this QDBusVariant instance with \a other.
+*/
+
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 16cd021d0d..03de5b0091 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -150,7 +150,6 @@ static dbus_bool_t qDBusAddTimeout(DBusTimeout *timeout, void *data)
if (Q_UNLIKELY(!q_dbus_timeout_get_enabled(timeout)))
return false;
- QDBusDispatchLocker locker(AddTimeoutAction, d);
Q_ASSERT(d->timeouts.key(timeout, 0) == 0);
int timerId = d->startTimer(q_dbus_timeout_get_interval(timeout));
@@ -172,8 +171,6 @@ static void qDBusRemoveTimeout(DBusTimeout *timeout, void *data)
QDBusConnectionPrivate *d = static_cast<QDBusConnectionPrivate *>(data);
Q_ASSERT(QThread::currentThread() == d->thread());
- QDBusDispatchLocker locker(RemoveTimeoutAction, d);
-
QDBusConnectionPrivate::TimeoutHash::iterator it = d->timeouts.begin();
while (it != d->timeouts.end()) {
if (it.value() == timeout) {
@@ -210,7 +207,6 @@ static dbus_bool_t qDBusAddWatch(DBusWatch *watch, void *data)
QDBusConnectionPrivate::Watcher watcher;
- QDBusDispatchLocker locker(AddWatchAction, d);
if (flags & DBUS_WATCH_READABLE) {
//qDebug("addReadWatch %d", fd);
watcher.watch = watch;
@@ -241,7 +237,6 @@ static void qDBusRemoveWatch(DBusWatch *watch, void *data)
Q_ASSERT(QThread::currentThread() == d->thread());
int fd = q_dbus_watch_get_unix_fd(watch);
- QDBusDispatchLocker locker(RemoveWatchAction, d);
QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
while (i != d->watchers.end() && i.key() == fd) {
if (i.value().watch == watch) {
@@ -263,8 +258,6 @@ static void qDBusToggleWatch(DBusWatch *watch, void *data)
Q_ASSERT(QThread::currentThread() == d->thread());
int fd = q_dbus_watch_get_unix_fd(watch);
- QDBusDispatchLocker locker(ToggleWatchAction, d);
-
QDBusConnectionPrivate::WatcherHash::iterator i = d->watchers.find(fd);
while (i != d->watchers.end() && i.key() == fd) {
if (i.value().watch == watch) {
@@ -766,7 +759,7 @@ static int findSlot(const QMetaObject *mo, const QByteArray &name, int flags,
*/
void QDBusConnectionPrivate::setDispatchEnabled(bool enable)
{
- QDBusDispatchLocker locker(SetDispatchEnabledAction, this);
+ checkThread();
dispatchEnabled = enable;
if (enable)
emit dispatchStatusChanged();
@@ -1024,7 +1017,7 @@ extern bool qDBusInitThreads();
QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
: QObject(p), ref(1), capabilities(0), mode(InvalidMode), busService(0),
- dispatchLock(QMutex::Recursive), connection(0),
+ connection(0),
rootNode(QString(QLatin1Char('/'))),
anonymousAuthenticationAllowed(false),
dispatchEnabled(true)
@@ -1078,7 +1071,7 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
Q_ASSERT(ref.load() == 0);
QObject *obj = (QObject *)busService;
if (obj) {
- disconnect(obj, Q_NULLPTR, this, Q_NULLPTR);
+ disconnect(obj, nullptr, this, nullptr);
delete obj;
}
if (connection)
@@ -1176,7 +1169,6 @@ bool QDBusConnectionPrivate::handleError(const QDBusErrorInternal &error)
void QDBusConnectionPrivate::timerEvent(QTimerEvent *e)
{
{
- QDBusDispatchLocker locker(TimerEventAction, this);
DBusTimeout *timeout = timeouts.value(e->timerId(), 0);
if (timeout)
q_dbus_timeout_handle(timeout);
@@ -1187,7 +1179,6 @@ void QDBusConnectionPrivate::timerEvent(QTimerEvent *e)
void QDBusConnectionPrivate::doDispatch()
{
- QDBusDispatchLocker locker(DoDispatchAction, this);
if (mode == ClientMode || mode == PeerMode) {
while (q_dbus_connection_dispatch(connection) == DBUS_DISPATCH_DATA_REMAINS) ;
if (dispatchEnabled && !pendingMessages.isEmpty()) {
@@ -1205,7 +1196,6 @@ void QDBusConnectionPrivate::doDispatch()
void QDBusConnectionPrivate::socketRead(int fd)
{
- QDBusDispatchLocker locker(SocketReadAction, this);
WatcherHash::ConstIterator it = watchers.constFind(fd);
while (it != watchers.constEnd() && it.key() == fd) {
if (it->watch && it->read && it->read->isEnabled()) {
@@ -1220,7 +1210,6 @@ void QDBusConnectionPrivate::socketRead(int fd)
void QDBusConnectionPrivate::socketWrite(int fd)
{
- QDBusDispatchLocker locker(SocketWriteAction, this);
WatcherHash::ConstIterator it = watchers.constFind(fd);
while (it != watchers.constEnd() && it.key() == fd) {
if (it->watch && it->write && it->write->isEnabled()) {
@@ -1283,10 +1272,7 @@ void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, in
//qDBusDebug() << "Emitting signal" << message;
//qDBusDebug() << "for paths:";
q_dbus_message_set_no_reply(msg, true); // the reply would not be delivered to anything
- {
- QDBusDispatchLocker locker(HuntAndEmitAction, this);
- huntAndEmit(connection, msg, obj, rootNode, isScriptable, isAdaptor);
- }
+ huntAndEmit(connection, msg, obj, rootNode, isScriptable, isAdaptor);
q_dbus_message_unref(msg);
}
@@ -1950,7 +1936,7 @@ bool QDBusConnectionPrivate::send(const QDBusMessage& message)
q_dbus_message_set_no_reply(msg, true); // the reply would not be delivered to anything
qDBusDebug() << this << "sending message (no reply):" << message;
- emit messageNeedsSending(Q_NULLPTR, msg);
+ emit messageNeedsSending(nullptr, msg);
return true;
}
@@ -2164,9 +2150,8 @@ void QDBusConnectionPrivate::sendInternal(QDBusPendingCallPrivate *pcall, void *
Q_ASSERT(isNoReply == !!q_dbus_message_get_no_reply(msg));
checkThread();
- QDBusDispatchLocker locker(SendMessageAction, this);
- if (isNoReply && q_dbus_connection_send(connection, msg, Q_NULLPTR)) {
+ if (isNoReply && q_dbus_connection_send(connection, msg, nullptr)) {
// success
} else if (!isNoReply && q_dbus_connection_send_with_reply(connection, msg, &pending, timeout)) {
if (pending) {
@@ -2509,7 +2494,7 @@ QString QDBusConnectionPrivate::getNameOwnerNoCache(const QString &serviceName)
QDBusMessagePrivate::setParametersValidated(msg, true);
msg << serviceName;
- QDBusPendingCallPrivate *pcall = sendWithReplyAsync(msg, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR);
+ QDBusPendingCallPrivate *pcall = sendWithReplyAsync(msg, nullptr, nullptr, nullptr);
if (thread() == QThread::currentThread()) {
// this function may be called in our own thread and
// QDBusPendingCallPrivate::waitForFinished() would deadlock there
diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h
index 85a067da1e..3cd029a933 100644
--- a/src/dbus/qdbusintegrator_p.h
+++ b/src/dbus/qdbusintegrator_p.h
@@ -109,7 +109,7 @@ public:
: QMetaCallEvent(0, id, 0, sender, -1), connection(c), message(msg), metaTypes(types), flags(f)
{ }
- void placeMetaCall(QObject *object) Q_DECL_OVERRIDE
+ void placeMetaCall(QObject *object) override
{
QDBusConnectionPrivate::d(connection)->deliverCall(object, flags, message, metaTypes, id());
}
@@ -132,7 +132,7 @@ public:
{ }
~QDBusActivateObjectEvent();
- void placeMetaCall(QObject *) Q_DECL_OVERRIDE;
+ void placeMetaCall(QObject *) override;
private:
QDBusConnection connection; // just for refcounting
@@ -148,10 +148,10 @@ public:
typedef void (*Hook)(const QDBusMessage&);
QDBusSpyCallEvent(QDBusConnectionPrivate *cp, const QDBusConnection &c, const QDBusMessage &msg,
const Hook *hooks, int count)
- : QMetaCallEvent(0, 0, Q_NULLPTR, cp, 0), conn(c), msg(msg), hooks(hooks), hookCount(count)
+ : QMetaCallEvent(0, 0, nullptr, cp, 0), conn(c), msg(msg), hooks(hooks), hookCount(count)
{}
~QDBusSpyCallEvent();
- void placeMetaCall(QObject *) Q_DECL_OVERRIDE;
+ void placeMetaCall(QObject *) override;
static inline void invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount);
QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up
diff --git a/src/dbus/qdbusinterface.h b/src/dbus/qdbusinterface.h
index b6c2693400..c147d07d50 100644
--- a/src/dbus/qdbusinterface.h
+++ b/src/dbus/qdbusinterface.h
@@ -59,12 +59,12 @@ private:
public:
QDBusInterface(const QString &service, const QString &path, const QString &interface = QString(),
const QDBusConnection &connection = QDBusConnection::sessionBus(),
- QObject *parent = Q_NULLPTR);
+ QObject *parent = nullptr);
~QDBusInterface();
- virtual const QMetaObject *metaObject() const Q_DECL_OVERRIDE;
- virtual void *qt_metacast(const char *) Q_DECL_OVERRIDE;
- virtual int qt_metacall(QMetaObject::Call, int, void **) Q_DECL_OVERRIDE;
+ virtual const QMetaObject *metaObject() const override;
+ virtual void *qt_metacast(const char *) override;
+ virtual int qt_metacall(QMetaObject::Call, int, void **) override;
private:
Q_DECLARE_PRIVATE(QDBusInterface)
diff --git a/src/dbus/qdbusmessage.cpp b/src/dbus/qdbusmessage.cpp
index 28d832c7c2..ef827e82b0 100644
--- a/src/dbus/qdbusmessage.cpp
+++ b/src/dbus/qdbusmessage.cpp
@@ -777,16 +777,6 @@ QDBusMessage::MessageType QDBusMessage::type() const
return InvalidMessage;
}
-/*!
- Sends the message without waiting for a reply. This is suitable
- for errors, signals, and return values as well as calls whose
- return values are not necessary.
-
- Returns \c true if the message was queued successfully;
- otherwise returns \c false.
-
- \sa QDBusConnection::send()
-*/
#ifndef QT_NO_DEBUG_STREAM
static QDebug operator<<(QDebug dbg, QDBusMessage::MessageType t)
{
@@ -839,6 +829,12 @@ QDebug operator<<(QDebug dbg, const QDBusMessage &msg)
}
#endif
+/*!
+ \fn void QDBusMessage::swap(QDBusMessage &other)
+
+ Swaps this QDBusMessage instance with \a other.
+*/
+
QT_END_NAMESPACE
#endif // QT_NO_DBUS
diff --git a/src/dbus/qdbusmetatype.cpp b/src/dbus/qdbusmetatype.cpp
index 6ed6c43e9d..0729a3cbbb 100644
--- a/src/dbus/qdbusmetatype.cpp
+++ b/src/dbus/qdbusmetatype.cpp
@@ -131,6 +131,18 @@ void QDBusMetaTypeId::init()
qDBusRegisterMetaType<QList<QDBusObjectPath> >();
qDBusRegisterMetaType<QList<QDBusSignature> >();
qDBusRegisterMetaType<QList<QDBusUnixFileDescriptor> >();
+
+ qDBusRegisterMetaType<QVector<bool> >();
+ qDBusRegisterMetaType<QVector<short> >();
+ qDBusRegisterMetaType<QVector<ushort> >();
+ qDBusRegisterMetaType<QVector<int> >();
+ qDBusRegisterMetaType<QVector<uint> >();
+ qDBusRegisterMetaType<QVector<qlonglong> >();
+ qDBusRegisterMetaType<QVector<qulonglong> >();
+ qDBusRegisterMetaType<QVector<double> >();
+ qDBusRegisterMetaType<QVector<QDBusObjectPath> >();
+ qDBusRegisterMetaType<QVector<QDBusSignature> >();
+ qDBusRegisterMetaType<QVector<QDBusUnixFileDescriptor> >();
#endif
initialized.store(true);
diff --git a/src/dbus/qdbuspendingcall.cpp b/src/dbus/qdbuspendingcall.cpp
index 6cc76946ac..bd6eb9eca3 100644
--- a/src/dbus/qdbuspendingcall.cpp
+++ b/src/dbus/qdbuspendingcall.cpp
@@ -414,7 +414,7 @@ QDBusMessage QDBusPendingCall::reply() const
}
#if 0
-/*!
+/*
Sets the slot \a member in object \a target to be called when the
reply arrives. The slot's parameter list must match the reply
message's arguments for it to be called.
diff --git a/src/dbus/qdbuspendingcall.h b/src/dbus/qdbuspendingcall.h
index 1e4c6ebfd2..ec8ba6c541 100644
--- a/src/dbus/qdbuspendingcall.h
+++ b/src/dbus/qdbuspendingcall.h
@@ -100,7 +100,7 @@ class Q_DBUS_EXPORT QDBusPendingCallWatcher: public QObject, public QDBusPending
{
Q_OBJECT
public:
- explicit QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = Q_NULLPTR);
+ explicit QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr);
~QDBusPendingCallWatcher();
#ifdef Q_QDOC
@@ -110,7 +110,7 @@ public:
void waitForFinished(); // non-virtual override
Q_SIGNALS:
- void finished(QDBusPendingCallWatcher *self = Q_NULLPTR);
+ void finished(QDBusPendingCallWatcher *self = nullptr);
private:
Q_DECLARE_PRIVATE(QDBusPendingCallWatcher)
diff --git a/src/dbus/qdbuspendingreply.cpp b/src/dbus/qdbuspendingreply.cpp
index f1489ed720..c0baa4a005 100644
--- a/src/dbus/qdbuspendingreply.cpp
+++ b/src/dbus/qdbuspendingreply.cpp
@@ -165,6 +165,12 @@
*/
/*!
+ \enum QDBusPendingReply::anonymous
+
+ \value Count The number of arguments the reply is expected to have
+ */
+
+/*!
\fn int QDBusPendingReply::count() const
Return the number of arguments the reply is supposed to have. This
@@ -192,21 +198,9 @@
*/
/*!
- \fn Type QDBusPendingReply::argumentAt() const
-
- Returns the argument at position \c Index (which is a template
- parameter) cast to type \c Type. This function uses template code
- to determine the proper \c Type type, according to the type list
- used in the construction of this object.
-
- Note that, if the reply hasn't arrived, this function causes the
- calling thread to block until the reply is processed.
-
- If the reply does not contain an argument at position \c Index or if the
- reply was an error, this function returns a \c Type object that is default
- constructed, which may be indistinguishable from a valid value. To reliably
- determine whether the message was an error, use isError().
-*/
+ \typedef QDBusPendingReply::T1
+ \internal
+ */
/*!
\fn T1 QDBusPendingReply::value() const
diff --git a/src/dbus/qdbuspendingreply.h b/src/dbus/qdbuspendingreply.h
index da29894d15..4d2c3a7c5a 100644
--- a/src/dbus/qdbuspendingreply.h
+++ b/src/dbus/qdbuspendingreply.h
@@ -108,10 +108,12 @@ namespace QDBusPendingReplyTypes {
template <> struct NotVoid<void> { typedef TypeIsVoid Type; };
} // namespace QDBusPendingReplyTypes
+#ifndef Q_CLANG_QDOC
template<typename T1 = void, typename T2 = void, typename T3 = void, typename T4 = void,
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void>
+#endif
class QDBusPendingReply:
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
public QDBusPendingCall
#else
public QDBusPendingReplyData
@@ -144,13 +146,23 @@ public:
inline int count() const { return Count; }
-#if defined(Q_QDOC)
+#if defined(Q_CLANG_QDOC)
QVariant argumentAt(int index) const;
#else
using QDBusPendingReplyData::argumentAt;
#endif
-#if defined(Q_QDOC)
+#ifndef Q_CLANG_QDOC
+ template<int Index> inline
+ const typename Select<Index>::Type argumentAt() const
+ {
+ Q_STATIC_ASSERT_X(Index >= 0 && Index < Count, "Index out of bounds");
+ typedef typename Select<Index>::Type ResultType;
+ return qdbus_cast<ResultType>(argumentAt(Index), 0);
+ }
+#endif
+
+#if defined(Q_CLANG_QDOC)
bool isFinished() const;
void waitForFinished();
@@ -159,18 +171,10 @@ public:
QDBusError error() const;
QDBusMessage reply() const;
- template<int Index> inline Type argumentAt() const;
+ typedef QVariant T1;
inline T1 value() const;
inline operator T1() const;
#else
- template<int Index> inline
- const typename Select<Index>::Type argumentAt() const
- {
- Q_STATIC_ASSERT_X(Index >= 0 && Index < Count, "Index out of bounds");
- typedef typename Select<Index>::Type ResultType;
- return qdbus_cast<ResultType>(argumentAt(Index), 0);
- }
-
inline typename Select<0>::Type value() const
{
return argumentAt<0>();
diff --git a/src/dbus/qdbusreply.cpp b/src/dbus/qdbusreply.cpp
index aefbb4f9a2..ab361f1674 100644
--- a/src/dbus/qdbusreply.cpp
+++ b/src/dbus/qdbusreply.cpp
@@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE
If the remote method call cannot fail, you can skip the error checking:
\snippet code/src_qdbus_qdbusreply.cpp 1
- However, if it does fail under those conditions, the value returned by QDBusReply::value() is
+ However, if it does fail under those conditions, the value returned by QDBusReply<T>::value() is
a default-constructed value. It may be indistinguishable from a valid return value.
QDBusReply objects are used for remote calls that have no output
@@ -75,18 +75,18 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QDBusReply::QDBusReply(const QDBusMessage &reply)
+ \fn template<typename T> QDBusReply<T>::QDBusReply(const QDBusMessage &reply)
Automatically construct a QDBusReply object from the reply message \a reply, extracting the
first return value from it if it is a success reply.
*/
/*!
- \fn QDBusReply::QDBusReply(const QDBusPendingReply<T> &reply)
+ \fn template<typename T> QDBusReply<T>::QDBusReply(const QDBusPendingReply &reply)
Constructs a QDBusReply object from the pending reply message, \a reply.
*/
/*!
- \fn QDBusReply::QDBusReply(const QDBusPendingCall &pcall)
+ \fn template <typename T> QDBusReply<T>::QDBusReply(const QDBusPendingCall &pcall)
Automatically construct a QDBusReply object from the asynchronous
pending call \a pcall. If the call isn't finished yet, QDBusReply
will call QDBusPendingCall::waitForFinished(), which is a blocking
@@ -97,29 +97,29 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QDBusReply::QDBusReply(const QDBusError &error)
+ \fn template <typename T> QDBusReply<T>::QDBusReply(const QDBusError &error)
Constructs an error reply from the D-Bus error code given by \a error.
*/
/*!
- \fn QDBusReply::operator=(const QDBusReply &other)
+ \fn template <typename T> QDBusReply<T>::operator=(const QDBusReply &other)
Makes this object be a copy of the object \a other.
*/
/*!
- \fn QDBusReply::operator=(const QDBusError &error)
- Sets this object to contain the error code given by \a error. You
+ \fn template <typename T> QDBusReply<T>::operator=(const QDBusError &dbusError)
+ Sets this object to contain the error code given by \a dbusError. You
can later access it with error().
*/
/*!
- \fn QDBusReply::operator=(const QDBusMessage &message)
+ \fn template <typename T> QDBusReply<T>::operator=(const QDBusMessage &reply)
- Makes this object contain the reply specified by message \a
- message. If \a message is an error message, this function will
+ Makes this object contain the \a reply message. If \a reply
+ is an error message, this function will
copy the error code and message into this object
- If \a message is a standard reply message and contains at least
+ If \a reply is a standard reply message and contains at least
one parameter, it will be copied into this object, as long as it
is of the correct type. If it's not of the same type as this
QDBusError object, this function will instead set an error code
@@ -127,7 +127,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QDBusReply::operator=(const QDBusPendingCall &pcall)
+ \fn template <typename T> QDBusReply<T>::operator=(const QDBusPendingCall &pcall)
Makes this object contain the reply specified by the pending
asynchronous call \a pcall. If the call is not finished yet, this
@@ -145,7 +145,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn bool QDBusReply::isValid() const
+ \fn template <typename T> bool QDBusReply<T>::isValid() const
Returns \c true if no error occurred; otherwise, returns \c false.
@@ -153,7 +153,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn const QDBusError& QDBusReply::error() const
+ \fn template<typename T> const QDBusError& QDBusReply<T>::error() const
Returns the error code that was returned from the remote function call. If the remote call did
not return an error (i.e., if it succeeded), then the QDBusError object that is returned will
@@ -163,12 +163,12 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn const QDBusError& QDBusReply::error()
+ \fn template <typename T> const QDBusError& QDBusReply<T>::error()
\overload
*/
/*!
- \fn QDBusReply::value() const
+ \fn template <typename T> QDBusReply<T>::value() const
Returns the remote function's calls return value. If the remote call returned with an error,
the return value of this function is undefined and may be undistinguishable from a valid return
value.
@@ -177,7 +177,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QDBusReply::operator Type() const
+ \fn template <typename T> QDBusReply<T>::operator Type() const
Returns the same as value().
This function is not available if the remote call returns \c void.
diff --git a/src/dbus/qdbusreply.h b/src/dbus/qdbusreply.h
index 227615024a..177b6c6e89 100644
--- a/src/dbus/qdbusreply.h
+++ b/src/dbus/qdbusreply.h
@@ -82,10 +82,14 @@ public:
other.waitForFinished();
return *this = other.reply();
}
+#if defined(Q_CLANG_QDOC)
+ inline QDBusReply(const QDBusPendingReply &reply) { }
+#else
inline QDBusReply(const QDBusPendingReply<T> &reply)
{
*this = static_cast<QDBusPendingCall>(reply);
}
+#endif
inline QDBusReply(const QDBusError &dbusError = QDBusError())
: m_error(dbusError), m_data(Type())
@@ -130,7 +134,7 @@ private:
template<> inline QDBusReply<QVariant>&
QDBusReply<QVariant>::operator=(const QDBusMessage &reply)
{
- void *null = Q_NULLPTR;
+ void *null = nullptr;
QVariant data(qMetaTypeId<QDBusVariant>(), null);
qDBusReplyFill(reply, m_error, data);
m_data = qvariant_cast<QDBusVariant>(data).variant();
diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp
index ce55297abb..a2dfb86164 100644
--- a/src/dbus/qdbusserver.cpp
+++ b/src/dbus/qdbusserver.cpp
@@ -116,7 +116,7 @@ QDBusServer::~QDBusServer()
QDBusConnectionManager::instance()->removeConnection(name);
d->serverConnectionNames.clear();
}
- d->serverObject = Q_NULLPTR;
+ d->serverObject = nullptr;
d->ref.store(0);
d->deleteLater();
}
diff --git a/src/dbus/qdbusserver.h b/src/dbus/qdbusserver.h
index ac4dfcb67f..668b8705b1 100644
--- a/src/dbus/qdbusserver.h
+++ b/src/dbus/qdbusserver.h
@@ -57,8 +57,8 @@ class Q_DBUS_EXPORT QDBusServer: public QObject
{
Q_OBJECT
public:
- explicit QDBusServer(const QString &address, QObject *parent = Q_NULLPTR);
- explicit QDBusServer(QObject *parent = Q_NULLPTR);
+ explicit QDBusServer(const QString &address, QObject *parent = nullptr);
+ explicit QDBusServer(QObject *parent = nullptr);
virtual ~QDBusServer();
bool isConnected() const;
diff --git a/src/dbus/qdbusservicewatcher.h b/src/dbus/qdbusservicewatcher.h
index 77573beb5d..2c45c85cb9 100644
--- a/src/dbus/qdbusservicewatcher.h
+++ b/src/dbus/qdbusservicewatcher.h
@@ -64,9 +64,9 @@ public:
Q_DECLARE_FLAGS(WatchMode, WatchModeFlag)
Q_FLAG(WatchMode)
- explicit QDBusServiceWatcher(QObject *parent = Q_NULLPTR);
+ explicit QDBusServiceWatcher(QObject *parent = nullptr);
QDBusServiceWatcher(const QString &service, const QDBusConnection &connection,
- WatchMode watchMode = WatchForOwnerChange, QObject *parent = Q_NULLPTR);
+ WatchMode watchMode = WatchForOwnerChange, QObject *parent = nullptr);
~QDBusServiceWatcher();
QStringList watchedServices() const;
diff --git a/src/dbus/qdbusthreaddebug_p.h b/src/dbus/qdbusthreaddebug_p.h
index 96f389fa49..ad0984e26c 100644
--- a/src/dbus/qdbusthreaddebug_p.h
+++ b/src/dbus/qdbusthreaddebug_p.h
@@ -95,17 +95,6 @@ enum ThreadAction {
PendingCallBlockAction = 28,
SendMessageAction = 29,
HuntAndEmitAction = 30,
-
- AddTimeoutAction = 50,
- RealAddTimeoutAction = 51,
- RemoveTimeoutAction = 52,
- KillTimerAction = 58,
- TimerEventAction = 59,
- AddWatchAction = 60,
- RemoveWatchAction = 61,
- ToggleWatchAction = 62,
- SocketReadAction = 63,
- SocketWriteAction = 64
};
struct QDBusLockerBase
@@ -176,35 +165,6 @@ struct QDBusWriteLocker: QDBusLockerBase
}
};
-struct QDBusMutexLocker: QDBusLockerBase
-{
- QDBusConnectionPrivate *self;
- QMutex *mutex;
- ThreadAction action;
- inline QDBusMutexLocker(ThreadAction a, QDBusConnectionPrivate *s,
- QMutex *m)
- : self(s), mutex(m), action(a)
- {
- reportThreadAction(action, BeforeLock, self);
- mutex->lock();
- reportThreadAction(action, AfterLock, self);
- }
-
- inline ~QDBusMutexLocker()
- {
- reportThreadAction(action, BeforeUnlock, self);
- mutex->unlock();
- reportThreadAction(action, AfterUnlock, self);
- }
-};
-
-struct QDBusDispatchLocker: QDBusMutexLocker
-{
- inline QDBusDispatchLocker(ThreadAction a, QDBusConnectionPrivate *s)
- : QDBusMutexLocker(a, s, &s->dispatchLock)
- { }
-};
-
#if QDBUS_THREAD_DEBUG
# define SEM_ACQUIRE(action, sem) \
do { \
diff --git a/src/dbus/qdbusvirtualobject.h b/src/dbus/qdbusvirtualobject.h
index 1a96d900b4..b69e21b378 100644
--- a/src/dbus/qdbusvirtualobject.h
+++ b/src/dbus/qdbusvirtualobject.h
@@ -56,7 +56,7 @@ class Q_DBUS_EXPORT QDBusVirtualObject : public QObject
{
Q_OBJECT
public:
- explicit QDBusVirtualObject(QObject *parent = Q_NULLPTR);
+ explicit QDBusVirtualObject(QObject *parent = nullptr);
virtual ~QDBusVirtualObject();
virtual QString introspect(const QString &path) const = 0;
diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp
index 2db4d46874..d60a21606b 100644
--- a/src/gui/accessible/qaccessible.cpp
+++ b/src/gui/accessible/qaccessible.cpp
@@ -1578,7 +1578,7 @@ QAccessibleTextCursorEvent::~QAccessibleTextCursorEvent()
/*!
- \fn QAccessibleTextCursorEvent(QAccessibleInterface *iface, int cursorPos)
+ \fn QAccessibleTextCursorEvent::QAccessibleTextCursorEvent(QAccessibleInterface *iface, int cursorPos)
Create a new QAccessibleTextCursorEvent for \a iface,
The \a cursorPos is the new cursor position.
@@ -1761,7 +1761,6 @@ QAccessibleTextSelectionEvent::~QAccessibleTextSelectionEvent()
/*!
Returns the QAccessibleInterface associated with the event.
- The caller of this function takes ownership of the returned interface.
*/
QAccessibleInterface *QAccessibleEvent::accessibleInterface() const
{
diff --git a/src/gui/accessible/qaccessible.h b/src/gui/accessible/qaccessible.h
index 27756d764d..1309f17efd 100644
--- a/src/gui/accessible/qaccessible.h
+++ b/src/gui/accessible/qaccessible.h
@@ -511,7 +511,7 @@ public:
virtual void virtual_hook(int id, void *data);
virtual void *interface_cast(QAccessible::InterfaceType)
- { return Q_NULLPTR; }
+ { return nullptr; }
protected:
friend class QAccessibleCache;
@@ -682,7 +682,7 @@ public:
}
inline QAccessibleEvent(QAccessibleInterface *iface, QAccessible::Event typ)
- : m_type(typ), m_object(Q_NULLPTR)
+ : m_type(typ), m_object(nullptr)
{
Q_ASSERT(iface);
Q_ASSERT(m_type != QAccessible::ValueChanged);
diff --git a/src/gui/accessible/qaccessiblebridge.h b/src/gui/accessible/qaccessiblebridge.h
index 7429716e65..168889135b 100644
--- a/src/gui/accessible/qaccessiblebridge.h
+++ b/src/gui/accessible/qaccessiblebridge.h
@@ -66,7 +66,7 @@ class Q_GUI_EXPORT QAccessibleBridgePlugin : public QObject
{
Q_OBJECT
public:
- explicit QAccessibleBridgePlugin(QObject *parent = Q_NULLPTR);
+ explicit QAccessibleBridgePlugin(QObject *parent = nullptr);
~QAccessibleBridgePlugin();
virtual QAccessibleBridge *create(const QString &key) = 0;
diff --git a/src/gui/accessible/qaccessiblecache.cpp b/src/gui/accessible/qaccessiblecache.cpp
index 097634c0a3..f4242036ce 100644
--- a/src/gui/accessible/qaccessiblecache.cpp
+++ b/src/gui/accessible/qaccessiblecache.cpp
@@ -54,7 +54,7 @@ static QAccessibleCache *accessibleCache = nullptr;
static void cleanupAccessibleCache()
{
delete accessibleCache;
- accessibleCache = Q_NULLPTR;
+ accessibleCache = nullptr;
}
QAccessibleCache *QAccessibleCache::instance()
diff --git a/src/gui/accessible/qaccessibleobject.h b/src/gui/accessible/qaccessibleobject.h
index dd69dcb081..81479c32ab 100644
--- a/src/gui/accessible/qaccessibleobject.h
+++ b/src/gui/accessible/qaccessibleobject.h
@@ -56,13 +56,13 @@ class Q_GUI_EXPORT QAccessibleObject : public QAccessibleInterface
public:
explicit QAccessibleObject(QObject *object);
- bool isValid() const Q_DECL_OVERRIDE;
- QObject *object() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
+ QObject *object() const override;
// properties
- QRect rect() const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
+ QRect rect() const override;
+ void setText(QAccessible::Text t, const QString &text) override;
+ QAccessibleInterface *childAt(int x, int y) const override;
protected:
virtual ~QAccessibleObject();
@@ -77,20 +77,20 @@ class Q_GUI_EXPORT QAccessibleApplication : public QAccessibleObject
public:
QAccessibleApplication();
- QWindow *window() const Q_DECL_OVERRIDE;
+ QWindow *window() const override;
// relations
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface*) const Q_DECL_OVERRIDE;
- QAccessibleInterface *focusChild() const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface*) const override;
+ QAccessibleInterface *focusChild() const override;
// navigation
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *parent() const override;
+ QAccessibleInterface *child(int index) const override;
// properties and state
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ QAccessible::Role role() const override;
+ QAccessible::State state() const override;
};
#endif // QT_NO_ACCESSIBILITY
diff --git a/src/gui/accessible/qaccessibleplugin.h b/src/gui/accessible/qaccessibleplugin.h
index 09d4c542d3..68e6a839d8 100644
--- a/src/gui/accessible/qaccessibleplugin.h
+++ b/src/gui/accessible/qaccessibleplugin.h
@@ -60,7 +60,7 @@ class Q_GUI_EXPORT QAccessiblePlugin : public QObject
{
Q_OBJECT
public:
- explicit QAccessiblePlugin(QObject *parent = Q_NULLPTR);
+ explicit QAccessiblePlugin(QObject *parent = nullptr);
~QAccessiblePlugin();
virtual QAccessibleInterface *create(const QString &key, QObject *object) = 0;
diff --git a/src/gui/configure.json b/src/gui/configure.json
index dab66fafb4..27e913877f 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -1,7 +1,8 @@
{
"module": "gui",
"depends": [
- "core"
+ "core",
+ "network"
],
"testDir": "../../config.tests",
@@ -201,7 +202,7 @@
"test": {
"include": "harfbuzz/hb.h",
"tail": [
- "#if !HB_VERSION_ATLEAST(0, 9, 42)",
+ "#if !HB_VERSION_ATLEAST(1, 6, 0)",
"# error This version of harfbuzz is too old.",
"#endif"
],
@@ -390,6 +391,30 @@
"-lts"
]
},
+ "v4l2": {
+ "label": "V4L2",
+ "test": {
+ "include": [
+ "cstddef"
+ ],
+ "tail": [
+ "extern \"C\" {",
+ "#include <mediactl/mediactl.h>",
+ "#include <mediactl/v4l2subdev.h>",
+ "}"
+ ],
+ "main": [
+ "v4l2_format fmt;",
+ "media_pad *pad = nullptr;",
+ "media_device *device = media_device_new(\"/dev/media\");",
+ "v4l2_subdev_set_format(nullptr, nullptr, 0, V4L2_SUBDEV_FORMAT_ACTIVE);"
+ ]
+ },
+ "sources": [
+ { "type": "pkgConfig", "args": "libv4l2 libmediactl" },
+ "-lmediactl -lv4l2 -lv4l2subdev"
+ ]
+ },
"vulkan": {
"label": "Vulkan",
"test": "qpa/vulkan",
@@ -956,7 +981,8 @@
},
"fontconfig": {
"label": "Fontconfig",
- "condition": "!config.win32 && !config.darwin && features.system-freetype && libs.fontconfig",
+ "autoDetect": "!config.darwin",
+ "condition": "!config.win32 && features.system-freetype && libs.fontconfig",
"output": [ "privateFeature", "feature" ]
},
"gbm": {
@@ -1020,10 +1046,19 @@
"condition": "tests.linuxfb && features.regularexpression",
"output": [ "privateFeature" ]
},
+ "vsp2": {
+ "label": "VSP2",
+ "condition": "libs.v4l2",
+ "autoDetect": false,
+ "output": [ "privateFeature" ]
+ },
"vnc": {
"label": "VNC",
"section": "Platform plugins",
- "condition": "config.unix && !config.android && !config.darwin && features.regularexpression",
+ "condition": [
+ "config.unix && !config.android && !config.darwin",
+ "features.regularexpression && features.network"
+ ],
"output": [ "privateFeature" ]
},
"mirclient": {
@@ -1137,6 +1172,11 @@
"condition": "features.eglfs && features.gbm && features.kms",
"output": [ "privateFeature" ]
},
+ "eglfs_vsp2": {
+ "label": "EGLFS VSP2",
+ "condition": "features.eglfs && features.gbm && features.kms && features.vsp2",
+ "output": [ "privateFeature" ]
+ },
"eglfs_mali": {
"label": "EGLFS Mali",
"condition": "features.eglfs && (tests.egl-mali || tests.egl-mali-2)",
@@ -1227,6 +1267,12 @@
"condition": "libs.tslib",
"output": [ "privateFeature" ]
},
+ "tuiotouch": {
+ "label": "TuioTouch",
+ "purpose": "Provides the TuioTouch input plugin.",
+ "condition": "features.network && features.udpsocket",
+ "output": [ "privateFeature" ]
+ },
"xcb": {
"label": "XCB",
"section": "Platform plugins",
@@ -1317,6 +1363,7 @@
},
"xlib": {
"label": "XLib",
+ "autoDetect": "!config.darwin || features.xcb",
"condition": "tests.xlib",
"output": [ "privateFeature" ]
},
@@ -1540,6 +1587,13 @@ XKB configuration data. This is required for keyboard input support."
},
{
"type": "note",
+ "condition": "features.xcb && config.darwin",
+ "message": "XCB support on macOS is minimal and untested. Some features will
+not work properly or at all (e.g. OpenGL, desktop services or accessibility),
+or may depend on your system and XQuartz setup."
+ },
+ {
+ "type": "note",
"condition": "features.accessibility && features.xcb && !features.accessibility-atspi-bridge",
"message": "Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing."
},
@@ -1648,7 +1702,7 @@ QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your pla
"section": "EGLFS details",
"condition": "features.eglfs",
"entries": [
- "eglfs_openwfd", "eglfs_viv", "eglfs_viv_wl", "eglfs_rcar", "eglfs_egldevice", "eglfs_gbm", "eglfs_mali", "eglfs_brcm", "egl_x11"
+ "eglfs_openwfd", "eglfs_viv", "eglfs_viv_wl", "eglfs_rcar", "eglfs_egldevice", "eglfs_gbm", "eglfs_vsp2", "eglfs_mali", "eglfs_brcm", "egl_x11"
]
},
"linuxfb", "vnc", "mirclient",
diff --git a/src/gui/doc/snippets/code/src_gui_image_qicon.cpp b/src/gui/doc/snippets/code/src_gui_image_qicon.cpp
index f472494e4a..faad6574a7 100644
--- a/src/gui/doc/snippets/code/src_gui_image_qicon.cpp
+++ b/src/gui/doc/snippets/code/src_gui_image_qicon.cpp
@@ -79,3 +79,6 @@ void MyWidget::drawIcon(QPainter *painter, QPoint pos)
QIcon undoicon = QIcon::fromTheme("edit-undo", QIcon(":/undo.png"));
//! [4]
+//! [5]
+ QIcon::setFallbackSearchPaths(QIcon::fallbackSearchPaths() << "my/search/path");
+//! [5]
diff --git a/src/gui/doc/snippets/code/src_gui_text_qfont.cpp b/src/gui/doc/snippets/code/src_gui_text_qfont.cpp
index 82d8525ded..1901ca9b10 100644
--- a/src/gui/doc/snippets/code/src_gui_text_qfont.cpp
+++ b/src/gui/doc/snippets/code/src_gui_text_qfont.cpp
@@ -72,6 +72,6 @@ QString family = info.family();
//! [4]
QFontMetrics fm(f1);
-int textWidthInPixels = fm.width("How many pixels wide is this text?");
+int textWidthInPixels = fm.horizontalAdvance("How many pixels wide is this text?");
int textHeightInPixels = fm.height();
//! [4]
diff --git a/src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp b/src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp
index 6cffa4f611..6b478d3297 100644
--- a/src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp
+++ b/src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp
@@ -51,7 +51,7 @@
//! [0]
QFont font("times", 24);
QFontMetrics fm(font);
-int pixelsWide = fm.width("What's the width of this text?");
+int pixelsWide = fm.horizontalAdvance("What's the width of this text?");
int pixelsHigh = fm.height();
//! [0]
@@ -59,6 +59,6 @@ int pixelsHigh = fm.height();
//! [1]
QFont font("times", 24);
QFontMetricsF fm(font);
-qreal pixelsWide = fm.width("What's the width of this text?");
+qreal pixelsWide = fm.horizontalAdvance("What's the width of this text?");
qreal pixelsHigh = fm.height();
//! [1]
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index f8cec00b82..759d6f3cbf 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -95,3 +95,6 @@ qtConfig(angle) {
qtConfig(egl): CMAKE_EGL_INCDIRS = $$cmakePortablePaths($$QMAKE_INCDIR_EGL)
QMAKE_DYNAMIC_LIST_FILE = $$PWD/QtGui.dynlist
+
+TRACEPOINT_PROVIDER = $$PWD/qtgui.tracepoints
+CONFIG += qt_tracepoints
diff --git a/src/gui/image/qbitmap.h b/src/gui/image/qbitmap.h
index def59b3f89..6a8c8b3457 100644
--- a/src/gui/image/qbitmap.h
+++ b/src/gui/image/qbitmap.h
@@ -55,7 +55,7 @@ public:
QBitmap(const QPixmap &);
QBitmap(int w, int h);
explicit QBitmap(const QSize &);
- explicit QBitmap(const QString &fileName, const char *format = Q_NULLPTR);
+ explicit QBitmap(const QString &fileName, const char *format = nullptr);
// ### Qt 6: don't inherit QPixmap
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QBitmap(const QBitmap &other) : QPixmap(other) {}
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index 9b2e96d4b0..32fa9e75ac 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -1158,6 +1158,36 @@ QStringList QIcon::themeSearchPaths()
}
/*!
+ \since 5.11
+
+ Returns the fallback search paths for icons.
+
+ The default value will depend on the platform.
+
+ \sa setFallbackSearchPaths(), themeSearchPaths()
+*/
+QStringList QIcon::fallbackSearchPaths()
+{
+ return QIconLoader::instance()->fallbackSearchPaths();
+}
+
+/*!
+ \since 5.11
+
+ Sets the fallback search paths for icons to \a paths.
+
+ \note To add some path without replacing existing ones:
+
+ \snippet code/src_gui_image_qicon.cpp 5
+
+ \sa fallbackSearchPaths(), setThemeSearchPaths()
+*/
+void QIcon::setFallbackSearchPaths(const QStringList &paths)
+{
+ QIconLoader::instance()->setFallbackSearchPaths(paths);
+}
+
+/*!
\since 4.6
Sets the current icon theme to \a name.
@@ -1216,7 +1246,10 @@ QString QIcon::themeName()
the lookup. These caches can be generated using gtk-update-icon-cache:
\l{https://developer.gnome.org/gtk3/stable/gtk-update-icon-cache.html}.
- \sa themeName(), setThemeName(), themeSearchPaths()
+ \note If an icon can't be found in the current theme, then it will be
+ searched in fallbackSearchPaths() as an unthemed icon.
+
+ \sa themeName(), setThemeName(), themeSearchPaths(), fallbackSearchPaths()
*/
QIcon QIcon::fromTheme(const QString &name)
{
diff --git a/src/gui/image/qicon.h b/src/gui/image/qicon.h
index 40d3e92af9..653ba6fda4 100644
--- a/src/gui/image/qicon.h
+++ b/src/gui/image/qicon.h
@@ -63,7 +63,7 @@ public:
#ifdef Q_COMPILER_RVALUE_REFS
QIcon(QIcon &&other) Q_DECL_NOEXCEPT
: d(other.d)
- { other.d = Q_NULLPTR; }
+ { other.d = nullptr; }
#endif
explicit QIcon(const QString &fileName); // file or resource name
explicit QIcon(QIconEngine *engine);
@@ -118,6 +118,9 @@ public:
static QStringList themeSearchPaths();
static void setThemeSearchPaths(const QStringList &searchpath);
+ static QStringList fallbackSearchPaths();
+ static void setFallbackSearchPaths(const QStringList &paths);
+
static QString themeName();
static void setThemeName(const QString &path);
@@ -147,7 +150,7 @@ Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QIcon &);
#endif
Q_GUI_EXPORT QString qt_findAtNxFile(const QString &baseFileName, qreal targetDevicePixelRatio,
- qreal *sourceDevicePixelRatio = Q_NULLPTR);
+ qreal *sourceDevicePixelRatio = nullptr);
QT_END_NAMESPACE
diff --git a/src/gui/image/qicon_p.h b/src/gui/image/qicon_p.h
index aa358e88af..e384ff9e49 100644
--- a/src/gui/image/qicon_p.h
+++ b/src/gui/image/qicon_p.h
@@ -112,18 +112,18 @@ public:
QPixmapIconEngine();
QPixmapIconEngine(const QPixmapIconEngine &);
~QPixmapIconEngine();
- void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
- QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override;
+ QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
QPixmapIconEngineEntry *bestMatch(const QSize &size, QIcon::Mode mode, QIcon::State state, bool sizeOnly);
- QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
- void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
- void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
-
- QString key() const Q_DECL_OVERRIDE;
- QIconEngine *clone() const Q_DECL_OVERRIDE;
- bool read(QDataStream &in) Q_DECL_OVERRIDE;
- bool write(QDataStream &out) const Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
+ void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state) override;
+ void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state) override;
+
+ QString key() const override;
+ QIconEngine *clone() const override;
+ bool read(QDataStream &in) override;
+ bool write(QDataStream &out) const override;
+ void virtual_hook(int id, void *data) override;
private:
QPixmapIconEngineEntry *tryMatch(const QSize &size, QIcon::Mode mode, QIcon::State state);
diff --git a/src/gui/image/qiconengineplugin.h b/src/gui/image/qiconengineplugin.h
index 7a01d3731c..f2a1c0107a 100644
--- a/src/gui/image/qiconengineplugin.h
+++ b/src/gui/image/qiconengineplugin.h
@@ -55,7 +55,7 @@ class Q_GUI_EXPORT QIconEnginePlugin : public QObject
{
Q_OBJECT
public:
- QIconEnginePlugin(QObject *parent = Q_NULLPTR);
+ QIconEnginePlugin(QObject *parent = nullptr);
~QIconEnginePlugin();
virtual QIconEngine *create(const QString &filename = QString()) = 0;
diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp
index 3cb6f46bd6..1ea4f1340b 100644
--- a/src/gui/image/qiconloader.cpp
+++ b/src/gui/image/qiconloader.cpp
@@ -95,6 +95,16 @@ static inline QStringList systemIconSearchPaths()
return QStringList();
}
+static inline QStringList systemFallbackSearchPaths()
+{
+ if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) {
+ const QVariant themeHint = theme->themeHint(QPlatformTheme::IconFallbackSearchPaths);
+ if (themeHint.isValid())
+ return themeHint.toStringList();
+ }
+ return QStringList();
+}
+
extern QFactoryLoader *qt_iconEngineFactoryLoader(); // qicon.cpp
void QIconLoader::ensureInitialized()
@@ -158,6 +168,20 @@ QStringList QIconLoader::themeSearchPaths() const
return m_iconDirs;
}
+void QIconLoader::setFallbackSearchPaths(const QStringList &searchPaths)
+{
+ m_fallbackDirs = searchPaths;
+ invalidateKey();
+}
+
+QStringList QIconLoader::fallbackSearchPaths() const
+{
+ if (m_fallbackDirs.isEmpty()) {
+ m_fallbackDirs = systemFallbackSearchPaths();
+ }
+ return m_fallbackDirs;
+}
+
/*!
\internal
Helper class that reads and looks up into the icon-theme.cache generated with
@@ -481,11 +505,54 @@ QThemeIconInfo QIconLoader::findIconHelper(const QString &themeName,
return info;
}
+QThemeIconInfo QIconLoader::lookupFallbackIcon(const QString &iconName) const
+{
+ QThemeIconInfo info;
+
+ const QString pngIconName = iconName + QLatin1String(".png");
+ const QString xpmIconName = iconName + QLatin1String(".xpm");
+ const QString svgIconName = iconName + QLatin1String(".svg");
+
+ const auto searchPaths = QIcon::fallbackSearchPaths();
+ for (const QString &iconDir: searchPaths) {
+ QDir currentDir(iconDir);
+ if (currentDir.exists(pngIconName)) {
+ PixmapEntry *iconEntry = new PixmapEntry;
+ iconEntry->dir.type = QIconDirInfo::Fallback;
+ iconEntry->filename = currentDir.filePath(pngIconName);
+ info.entries.append(iconEntry);
+ break;
+ } else if (currentDir.exists(xpmIconName)) {
+ PixmapEntry *iconEntry = new PixmapEntry;
+ iconEntry->dir.type = QIconDirInfo::Fallback;
+ iconEntry->filename = currentDir.filePath(xpmIconName);
+ info.entries.append(iconEntry);
+ break;
+ } else if (m_supportsSvg &&
+ currentDir.exists(svgIconName)) {
+ ScalableEntry *iconEntry = new ScalableEntry;
+ iconEntry->dir.type = QIconDirInfo::Fallback;
+ iconEntry->filename = currentDir.filePath(svgIconName);
+ info.entries.append(iconEntry);
+ break;
+ }
+ }
+
+ if (!info.entries.isEmpty())
+ info.iconName = iconName;
+
+ return info;
+}
+
QThemeIconInfo QIconLoader::loadIcon(const QString &name) const
{
if (!themeName().isEmpty()) {
QStringList visited;
- return findIconHelper(themeName(), name, visited);
+ const QThemeIconInfo iconInfo = findIconHelper(themeName(), name, visited);
+ if (!iconInfo.entries.isEmpty())
+ return iconInfo;
+
+ return lookupFallbackIcon(name);
}
return QThemeIconInfo();
@@ -573,6 +640,8 @@ static bool directoryMatchesSize(const QIconDirInfo &dir, int iconsize, int icon
} else if (dir.type == QIconDirInfo::Threshold) {
return iconsize >= dir.size - dir.threshold &&
iconsize <= dir.size + dir.threshold;
+ } else if (dir.type == QIconDirInfo::Fallback) {
+ return true;
}
Q_ASSERT(1); // Not a valid value
@@ -603,6 +672,8 @@ static int directorySizeDistance(const QIconDirInfo &dir, int iconsize, int icon
else if (scaledIconSize > (dir.size + dir.threshold) * dir.scale)
return scaledIconSize - dir.maxSize * dir.scale;
else return 0;
+ } else if (dir.type == QIconDirInfo::Fallback) {
+ return 0;
}
Q_ASSERT(1); // Not a valid value
@@ -657,9 +728,11 @@ QSize QIconLoaderEngine::actualSize(const QSize &size, QIcon::Mode mode,
QIconLoaderEngineEntry *entry = entryForSize(m_info, size);
if (entry) {
const QIconDirInfo &dir = entry->dir;
- if (dir.type == QIconDirInfo::Scalable)
+ if (dir.type == QIconDirInfo::Scalable) {
return size;
- else {
+ } else if (dir.type == QIconDirInfo::Fallback) {
+ return QIcon(entry->filename).actualSize(size, mode, state);
+ } else {
int result = qMin<int>(dir.size, qMin(size.width(), size.height()));
return QSize(result, result);
}
@@ -745,8 +818,13 @@ void QIconLoaderEngine::virtual_hook(int id, void *data)
// Gets all sizes from the DirectoryInfo entries
for (int i = 0; i < N; ++i) {
- int size = m_info.entries.at(i)->dir.size;
- sizes.append(QSize(size, size));
+ const QIconLoaderEngineEntry *entry = m_info.entries.at(i);
+ if (entry->dir.type == QIconDirInfo::Fallback) {
+ sizes.append(QIcon(entry->filename).availableSizes());
+ } else {
+ int size = entry->dir.size;
+ sizes.append(QSize(size, size));
+ }
}
arg.sizes.swap(sizes); // commit
}
diff --git a/src/gui/image/qiconloader_p.h b/src/gui/image/qiconloader_p.h
index 9398bca585..746e871fb1 100644
--- a/src/gui/image/qiconloader_p.h
+++ b/src/gui/image/qiconloader_p.h
@@ -69,7 +69,7 @@ class QIconLoader;
struct QIconDirInfo
{
- enum Type { Fixed, Scalable, Threshold };
+ enum Type { Fixed, Scalable, Threshold, Fallback };
QIconDirInfo(const QString &_path = QString()) :
path(_path),
size(0),
@@ -101,13 +101,13 @@ public:
struct ScalableEntry : public QIconLoaderEngineEntry
{
- QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
QIcon svgIcon;
};
struct PixmapEntry : public QIconLoaderEngineEntry
{
- QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
QPixmap basePixmap;
};
@@ -125,20 +125,20 @@ public:
QIconLoaderEngine(const QString& iconName = QString());
~QIconLoaderEngine();
- void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
- QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
- QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
- QIconEngine *clone() const Q_DECL_OVERRIDE;
- bool read(QDataStream &in) Q_DECL_OVERRIDE;
- bool write(QDataStream &out) const Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override;
+ QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
+ QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) override;
+ QIconEngine *clone() const override;
+ bool read(QDataStream &in) override;
+ bool write(QDataStream &out) const override;
Q_GUI_EXPORT static QIconLoaderEngineEntry *entryForSize(const QThemeIconInfo &info, const QSize &size, int scale = 1);
private:
- QString key() const Q_DECL_OVERRIDE;
+ QString key() const override;
bool hasIcon() const;
void ensureLoaded();
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ void virtual_hook(int id, void *data) override;
QIconLoaderEngine(const QIconLoaderEngine &other);
QThemeIconInfo m_info;
@@ -180,6 +180,8 @@ public:
QIconTheme theme() { return themeList.value(themeName()); }
void setThemeSearchPath(const QStringList &searchPaths);
QStringList themeSearchPaths() const;
+ void setFallbackSearchPaths(const QStringList &searchPaths);
+ QStringList fallbackSearchPaths() const;
QIconDirInfo dirInfo(int dirindex);
static QIconLoader *instance();
void updateSystemTheme();
@@ -191,6 +193,8 @@ private:
QThemeIconInfo findIconHelper(const QString &themeName,
const QString &iconName,
QStringList &visited) const;
+ QThemeIconInfo lookupFallbackIcon(const QString &iconName) const;
+
uint m_themeKey;
bool m_supportsSvg;
bool m_initialized;
@@ -199,6 +203,7 @@ private:
mutable QString m_systemTheme;
mutable QStringList m_iconDirs;
mutable QHash <QString, QIconTheme> themeList;
+ mutable QStringList m_fallbackDirs;
};
QT_END_NAMESPACE
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 7999ce6bbe..7fcae12cbd 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -1976,7 +1976,8 @@ QImage::Format QImage::format() const
}
/*!
- \fn QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) const
+ \fn QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) const &
+ \fn QImage QImage::convertToFormat(Format format, Qt::ImageConversionFlags flags) &&
Returns a copy of the image in the given \a format.
@@ -2134,8 +2135,8 @@ QImage QImage::convertToFormat(Format format, const QVector<QRgb> &colorTable, Q
/*!
\since 5.9
- Changes the \a format of the image without changing the data. Only
- works between formats of the same depth.
+ Changes the format of the image to \a format without changing the
+ data. Only works between formats of the same depth.
Returns \c true if successful.
@@ -2988,7 +2989,9 @@ QImage QImage::createMaskFromColor(QRgb color, Qt::MaskMode mode) const
}
/*!
- \fn QImage QImage::mirrored(bool horizontal = false, bool vertical = true) const
+ \fn QImage QImage::mirrored(bool horizontal = false, bool vertical = true) const &
+ \fn QImage QImage::mirrored(bool horizontal = false, bool vertical = true) &&
+
Returns a mirror of the image, mirrored in the horizontal and/or
the vertical direction depending on whether \a horizontal and \a
vertical are set to true or false.
@@ -3193,7 +3196,9 @@ void QImage::mirrored_inplace(bool horizontal, bool vertical)
}
/*!
- \fn QImage QImage::rgbSwapped() const
+ \fn QImage QImage::rgbSwapped() const &
+ \fn QImage QImage::rgbSwapped() &&
+
Returns a QImage in which the values of the red and blue
components of all pixels have been swapped, effectively converting
an RGB image to an BGR image.
@@ -3262,14 +3267,31 @@ QImage QImage::rgbSwapped_helper() const
res.d->colortable[i] = QRgb(((c << 16) & 0xff0000) | ((c >> 16) & 0xff) | (c & 0xff00ff00));
}
break;
- case Format_RGB32:
- case Format_ARGB32:
- case Format_ARGB32_Premultiplied:
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
case Format_RGBX8888:
case Format_RGBA8888:
case Format_RGBA8888_Premultiplied:
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ res = QImage(d->width, d->height, d->format);
+ QIMAGE_SANITYCHECK_MEMORY(res);
+ for (int i = 0; i < d->height; i++) {
+ uint *q = (uint*)res.scanLine(i);
+ const uint *p = (const uint*)constScanLine(i);
+ const uint *end = p + d->width;
+ while (p < end) {
+ uint c = *p;
+ *q = ((c << 16) & 0xff000000) | ((c >> 16) & 0xff00) | (c & 0x00ff00ff);
+ p++;
+ q++;
+ }
+ }
+ break;
+#else
+ // On little-endian rgba8888 is abgr32 and can use same rgb-swap as argb32
+ Q_FALLTHROUGH();
#endif
+ case Format_RGB32:
+ case Format_ARGB32:
+ case Format_ARGB32_Premultiplied:
res = QImage(d->width, d->height, d->format);
QIMAGE_SANITYCHECK_MEMORY(res);
for (int i = 0; i < d->height; i++) {
@@ -3353,14 +3375,27 @@ void QImage::rgbSwapped_inplace()
d->colortable[i] = QRgb(((c << 16) & 0xff0000) | ((c >> 16) & 0xff) | (c & 0xff00ff00));
}
break;
- case Format_RGB32:
- case Format_ARGB32:
- case Format_ARGB32_Premultiplied:
-#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
case Format_RGBX8888:
case Format_RGBA8888:
case Format_RGBA8888_Premultiplied:
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ for (int i = 0; i < d->height; i++) {
+ uint *p = (uint*)scanLine(i);
+ uint *end = p + d->width;
+ while (p < end) {
+ uint c = *p;
+ *p = ((c << 16) & 0xff000000) | ((c >> 16) & 0xff00) | (c & 0x00ff00ff);
+ p++;
+ }
+ }
+ break;
+#else
+ // On little-endian rgba8888 is abgr32 and can use same rgb-swap as argb32
+ Q_FALLTHROUGH();
#endif
+ case Format_RGB32:
+ case Format_ARGB32:
+ case Format_ARGB32_Premultiplied:
for (int i = 0; i < d->height; i++) {
uint *p = (uint*)scanLine(i);
uint *end = p + d->width;
@@ -4779,8 +4814,8 @@ bool QImageData::convertInPlace(QImage::Format newFormat, Qt::ImageConversionFla
QDebug operator<<(QDebug dbg, const QImage &i)
{
QDebugStateSaver saver(dbg);
- dbg.resetFormat();
dbg.nospace();
+ dbg.noquote();
dbg << "QImage(";
if (i.isNull()) {
dbg << "null";
@@ -4788,8 +4823,15 @@ QDebug operator<<(QDebug dbg, const QImage &i)
dbg << i.size() << ",format=" << i.format() << ",depth=" << i.depth();
if (i.colorCount())
dbg << ",colorCount=" << i.colorCount();
+ const int bytesPerLine = i.bytesPerLine();
dbg << ",devicePixelRatio=" << i.devicePixelRatio()
- << ",bytesPerLine=" << i.bytesPerLine() << ",sizeInBytes=" << i.sizeInBytes();
+ << ",bytesPerLine=" << bytesPerLine << ",sizeInBytes=" << i.sizeInBytes();
+ if (dbg.verbosity() > 2 && i.height() > 0) {
+ const int outputLength = qMin(bytesPerLine, 24);
+ dbg << ",line0="
+ << QByteArray(reinterpret_cast<const char *>(i.scanLine(0)), outputLength).toHex()
+ << "...";
+ }
}
dbg << ')';
return dbg;
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index 8112b8e8fd..9b76b62f24 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -136,20 +136,20 @@ public:
QImage() Q_DECL_NOEXCEPT;
QImage(const QSize &size, Format format);
QImage(int width, int height, Format format);
- QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR);
- QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR);
- QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR);
- QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR);
+ QImage(uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
+ QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
+ QImage(uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
+ QImage(const uchar *data, int width, int height, int bytesPerLine, Format format, QImageCleanupFunction cleanupFunction = nullptr, void *cleanupInfo = nullptr);
#ifndef QT_NO_IMAGEFORMAT_XPM
explicit QImage(const char * const xpm[]);
#endif
- explicit QImage(const QString &fileName, const char *format = Q_NULLPTR);
+ explicit QImage(const QString &fileName, const char *format = nullptr);
QImage(const QImage &);
#ifdef Q_COMPILER_RVALUE_REFS
inline QImage(QImage &&other) Q_DECL_NOEXCEPT
- : QPaintDevice(), d(Q_NULLPTR)
+ : QPaintDevice(), d(nullptr)
{ qSwap(d, other.d); }
#endif
~QImage();
@@ -164,7 +164,7 @@ public:
bool isNull() const;
- int devType() const Q_DECL_OVERRIDE;
+ int devType() const override;
bool operator==(const QImage &) const;
bool operator!=(const QImage &) const;
@@ -294,16 +294,16 @@ public:
bool load(QIODevice *device, const char* format);
- bool load(const QString &fileName, const char *format = Q_NULLPTR);
- bool loadFromData(const uchar *buf, int len, const char *format = Q_NULLPTR);
- inline bool loadFromData(const QByteArray &data, const char *aformat = Q_NULLPTR)
+ bool load(const QString &fileName, const char *format = nullptr);
+ bool loadFromData(const uchar *buf, int len, const char *format = nullptr);
+ inline bool loadFromData(const QByteArray &data, const char *aformat = nullptr)
{ return loadFromData(reinterpret_cast<const uchar *>(data.constData()), data.size(), aformat); }
- bool save(const QString &fileName, const char *format = Q_NULLPTR, int quality = -1) const;
- bool save(QIODevice *device, const char *format = Q_NULLPTR, int quality = -1) const;
+ bool save(const QString &fileName, const char *format = nullptr, int quality = -1) const;
+ bool save(QIODevice *device, const char *format = nullptr, int quality = -1) const;
- static QImage fromData(const uchar *data, int size, const char *format = Q_NULLPTR);
- inline static QImage fromData(const QByteArray &data, const char *format = Q_NULLPTR)
+ static QImage fromData(const uchar *data, int size, const char *format = nullptr);
+ inline static QImage fromData(const QByteArray &data, const char *format = nullptr)
{ return fromData(reinterpret_cast<const uchar *>(data.constData()), data.size(), format); }
#if QT_DEPRECATED_SINCE(5, 0)
@@ -311,7 +311,7 @@ public:
#endif
qint64 cacheKey() const;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
// Auxiliary data
int dotsPerMeterX() const;
@@ -335,7 +335,7 @@ public:
#endif
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED inline QString text(const char *key, const char *lang = Q_NULLPTR) const;
+ QT_DEPRECATED inline QString text(const char *key, const char *lang = nullptr) const;
QT_DEPRECATED inline QList<QImageTextKeyLang> textList() const;
QT_DEPRECATED inline QStringList textLanguages() const;
QT_DEPRECATED inline QString text(const QImageTextKeyLang&) const;
@@ -349,7 +349,7 @@ public:
#endif
protected:
- virtual int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ virtual int metric(PaintDeviceMetric metric) const override;
QImage mirrored_helper(bool horizontal, bool vertical) const;
QImage rgbSwapped_helper() const;
void mirrored_inplace(bool horizontal, bool vertical);
diff --git a/src/gui/image/qimageiohandler.h b/src/gui/image/qimageiohandler.h
index baf9853259..35984dd6a5 100644
--- a/src/gui/image/qimageiohandler.h
+++ b/src/gui/image/qimageiohandler.h
@@ -140,7 +140,7 @@ class Q_GUI_EXPORT QImageIOPlugin : public QObject
{
Q_OBJECT
public:
- explicit QImageIOPlugin(QObject *parent = Q_NULLPTR);
+ explicit QImageIOPlugin(QObject *parent = nullptr);
virtual ~QImageIOPlugin();
enum Capability {
diff --git a/src/gui/image/qmovie.h b/src/gui/image/qmovie.h
index ca559d491b..e13c528894 100644
--- a/src/gui/image/qmovie.h
+++ b/src/gui/image/qmovie.h
@@ -79,9 +79,9 @@ public:
};
Q_ENUM(CacheMode)
- explicit QMovie(QObject *parent = Q_NULLPTR);
- explicit QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent = Q_NULLPTR);
- explicit QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent = Q_NULLPTR);
+ explicit QMovie(QObject *parent = nullptr);
+ explicit QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent = nullptr);
+ explicit QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent = nullptr);
~QMovie();
static QList<QByteArray> supportedFormats();
diff --git a/src/gui/image/qpaintengine_pic_p.h b/src/gui/image/qpaintengine_pic_p.h
index 7c690c1498..c3044796ad 100644
--- a/src/gui/image/qpaintengine_pic_p.h
+++ b/src/gui/image/qpaintengine_pic_p.h
@@ -68,10 +68,10 @@ public:
QPicturePaintEngine();
~QPicturePaintEngine();
- bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
- bool end() Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *pdev) override;
+ bool end() override;
- void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
+ void updateState(const QPaintEngineState &state) override;
void updatePen(const QPen &pen);
void updateBrush(const QBrush &brush);
@@ -86,18 +86,18 @@ public:
void updateClipEnabled(bool enabled);
void updateOpacity(qreal opacity);
- void drawEllipse(const QRectF &rect) Q_DECL_OVERRIDE;
- void drawPath(const QPainterPath &path) Q_DECL_OVERRIDE;
- void drawPolygon(const QPointF *points, int numPoints, PolygonDrawMode mode) Q_DECL_OVERRIDE;
+ void drawEllipse(const QRectF &rect) override;
+ void drawPath(const QPainterPath &path) override;
+ void drawPolygon(const QPointF *points, int numPoints, PolygonDrawMode mode) override;
using QPaintEngine::drawPolygon;
- void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
- void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) Q_DECL_OVERRIDE;
+ void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
+ void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) override;
void drawImage(const QRectF &r, const QImage &image, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- void drawTextItem(const QPointF &p, const QTextItem &ti) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ void drawTextItem(const QPointF &p, const QTextItem &ti) override;
- Type type() const Q_DECL_OVERRIDE { return Picture; }
+ Type type() const override { return Picture; }
protected:
QPicturePaintEngine(QPaintEnginePrivate &dptr);
diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp
index bf628e7571..7aa221948e 100644
--- a/src/gui/image/qpicture.cpp
+++ b/src/gui/image/qpicture.cpp
@@ -456,8 +456,8 @@ public:
QFakeDevice() { dpi_x = qt_defaultDpiX(); dpi_y = qt_defaultDpiY(); }
void setDpiX(int dpi) { dpi_x = dpi; }
void setDpiY(int dpi) { dpi_y = dpi; }
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE { return 0; }
- int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE
+ QPaintEngine *paintEngine() const override { return 0; }
+ int metric(PaintDeviceMetric m) const override
{
switch(m) {
case PdmPhysicalDpiX:
diff --git a/src/gui/image/qpicture.h b/src/gui/image/qpicture.h
index db2b767efe..ec7b4bd7e3 100644
--- a/src/gui/image/qpicture.h
+++ b/src/gui/image/qpicture.h
@@ -62,17 +62,17 @@ public:
bool isNull() const;
- int devType() const Q_DECL_OVERRIDE;
+ int devType() const override;
uint size() const;
const char* data() const;
virtual void setData(const char* data, uint size);
bool play(QPainter *p);
- bool load(QIODevice *dev, const char *format = Q_NULLPTR);
- bool load(const QString &fileName, const char *format = Q_NULLPTR);
- bool save(QIODevice *dev, const char *format = Q_NULLPTR);
- bool save(const QString &fileName, const char *format = Q_NULLPTR);
+ bool load(QIODevice *dev, const char *format = nullptr);
+ bool load(const QString &fileName, const char *format = nullptr);
+ bool save(QIODevice *dev, const char *format = nullptr);
+ bool save(const QString &fileName, const char *format = nullptr);
QRect boundingRect() const;
void setBoundingRect(const QRect &r);
@@ -98,12 +98,12 @@ public:
static QT_DEPRECATED QStringList outputFormatList();
#endif // QT_DEPRECATED_SINCE(5, 10)
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
protected:
QPicture(QPicturePrivate &data);
- int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric m) const override;
private:
bool exec(QPainter *p, QDataStream &ds, int i);
diff --git a/src/gui/image/qpictureformatplugin.h b/src/gui/image/qpictureformatplugin.h
index 32195687c7..3f59c04d79 100644
--- a/src/gui/image/qpictureformatplugin.h
+++ b/src/gui/image/qpictureformatplugin.h
@@ -60,7 +60,7 @@ class Q_GUI_EXPORT QPictureFormatPlugin : public QObject
{
Q_OBJECT
public:
- explicit QPictureFormatPlugin(QObject *parent = Q_NULLPTR);
+ explicit QPictureFormatPlugin(QObject *parent = nullptr);
~QPictureFormatPlugin();
virtual bool loadPicture(const QString &format, const QString &filename, QPicture *pic);
diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h
index d651b57fd5..55cca7a766 100644
--- a/src/gui/image/qpixmap.h
+++ b/src/gui/image/qpixmap.h
@@ -65,7 +65,7 @@ public:
explicit QPixmap(QPlatformPixmap *data);
QPixmap(int w, int h);
explicit QPixmap(const QSize &);
- QPixmap(const QString& fileName, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor);
+ QPixmap(const QString& fileName, const char *format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor);
#ifndef QT_NO_IMAGEFORMAT_XPM
explicit QPixmap(const char * const xpm[]);
#endif
@@ -83,7 +83,7 @@ public:
operator QVariant() const;
bool isNull() const;
- int devType() const Q_DECL_OVERRIDE;
+ int devType() const override;
int width() const;
int height() const;
@@ -138,19 +138,19 @@ public:
}
#endif
- bool load(const QString& fileName, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor);
- bool loadFromData(const uchar *buf, uint len, const char* format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor);
- inline bool loadFromData(const QByteArray &data, const char* format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor);
- bool save(const QString& fileName, const char* format = Q_NULLPTR, int quality = -1) const;
- bool save(QIODevice* device, const char* format = Q_NULLPTR, int quality = -1) const;
+ bool load(const QString& fileName, const char *format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor);
+ bool loadFromData(const uchar *buf, uint len, const char* format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor);
+ inline bool loadFromData(const QByteArray &data, const char* format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor);
+ bool save(const QString& fileName, const char* format = nullptr, int quality = -1) const;
+ bool save(QIODevice* device, const char* format = nullptr, int quality = -1) const;
bool convertFromImage(const QImage &img, Qt::ImageConversionFlags flags = Qt::AutoColor);
inline QPixmap copy(int x, int y, int width, int height) const;
QPixmap copy(const QRect &rect = QRect()) const;
- inline void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed = Q_NULLPTR);
- void scroll(int dx, int dy, const QRect &rect, QRegion *exposed = Q_NULLPTR);
+ inline void scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed = nullptr);
+ void scroll(int dx, int dy, const QRect &rect, QRegion *exposed = nullptr);
#if QT_DEPRECATED_SINCE(5, 0)
QT_DEPRECATED inline int serialNumber() const { return cacheKey() >> 32; }
@@ -162,7 +162,7 @@ public:
bool isQBitmap() const;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
inline bool operator!() const { return isNull(); }
@@ -172,7 +172,7 @@ public:
#endif
protected:
- int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric) const override;
static QPixmap fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor);
private:
diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h
index 9889cfb8ec..d70cbcdcc3 100644
--- a/src/gui/image/qpixmap_blitter_p.h
+++ b/src/gui/image/qpixmap_blitter_p.h
@@ -69,17 +69,17 @@ public:
QBlittable *blittable() const;
void setBlittable(QBlittable *blittable);
- void resize(int width, int height) Q_DECL_OVERRIDE;
- int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- void fill(const QColor &color) Q_DECL_OVERRIDE;
- QImage *buffer() Q_DECL_OVERRIDE;
- QImage toImage() const Q_DECL_OVERRIDE;
- bool hasAlphaChannel() const Q_DECL_OVERRIDE;
- void fromImage(const QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
- void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE;
-
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ void resize(int width, int height) override;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const override;
+ void fill(const QColor &color) override;
+ QImage *buffer() override;
+ QImage toImage() const override;
+ bool hasAlphaChannel() const override;
+ void fromImage(const QImage &image, Qt::ImageConversionFlags flags) override;
+ qreal devicePixelRatio() const override;
+ void setDevicePixelRatio(qreal scaleFactor) override;
+
+ QPaintEngine *paintEngine() const override;
void markRasterOverlay(const QRectF &);
void markRasterOverlay(const QPointF &, const QTextItem &);
diff --git a/src/gui/image/qpixmap_raster_p.h b/src/gui/image/qpixmap_raster_p.h
index 6ea965a324..cff962181a 100644
--- a/src/gui/image/qpixmap_raster_p.h
+++ b/src/gui/image/qpixmap_raster_p.h
@@ -63,28 +63,28 @@ public:
QRasterPlatformPixmap(PixelType type);
~QRasterPlatformPixmap();
- QPlatformPixmap *createCompatiblePlatformPixmap() const Q_DECL_OVERRIDE;
-
- void resize(int width, int height) Q_DECL_OVERRIDE;
- bool fromData(const uchar *buffer, uint len, const char *format, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
- void fromImage(const QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
- void fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
- void fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
-
- void copy(const QPlatformPixmap *data, const QRect &rect) Q_DECL_OVERRIDE;
- bool scroll(int dx, int dy, const QRect &rect) Q_DECL_OVERRIDE;
- void fill(const QColor &color) Q_DECL_OVERRIDE;
- bool hasAlphaChannel() const Q_DECL_OVERRIDE;
- QImage toImage() const Q_DECL_OVERRIDE;
- QImage toImage(const QRect &rect) const Q_DECL_OVERRIDE;
- QPaintEngine* paintEngine() const Q_DECL_OVERRIDE;
- QImage* buffer() Q_DECL_OVERRIDE;
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
- void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE;
+ QPlatformPixmap *createCompatiblePlatformPixmap() const override;
+
+ void resize(int width, int height) override;
+ bool fromData(const uchar *buffer, uint len, const char *format, Qt::ImageConversionFlags flags) override;
+ void fromImage(const QImage &image, Qt::ImageConversionFlags flags) override;
+ void fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags) override;
+ void fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags) override;
+
+ void copy(const QPlatformPixmap *data, const QRect &rect) override;
+ bool scroll(int dx, int dy, const QRect &rect) override;
+ void fill(const QColor &color) override;
+ bool hasAlphaChannel() const override;
+ QImage toImage() const override;
+ QImage toImage(const QRect &rect) const override;
+ QPaintEngine* paintEngine() const override;
+ QImage* buffer() override;
+ qreal devicePixelRatio() const override;
+ void setDevicePixelRatio(qreal scaleFactor) override;
protected:
- int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const override;
void createPixmapForImage(QImage sourceImage, Qt::ImageConversionFlags flags);
void setImage(const QImage &image);
QImage image;
diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp
index 742aa31ba9..4b8b1203d6 100644
--- a/src/gui/image/qpixmapcache.cpp
+++ b/src/gui/image/qpixmapcache.cpp
@@ -193,7 +193,7 @@ public:
QPMCache();
~QPMCache();
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
bool insert(const QString& key, const QPixmap &pixmap, int cost);
QPixmapCache::Key insert(const QPixmap &pixmap, int cost);
bool replace(const QPixmapCache::Key &key, const QPixmap &pixmap, int cost);
diff --git a/src/gui/image/qpixmapcache.h b/src/gui/image/qpixmapcache.h
index 856b82f559..ea10ab1b76 100644
--- a/src/gui/image/qpixmapcache.h
+++ b/src/gui/image/qpixmapcache.h
@@ -56,7 +56,7 @@ public:
Key();
Key(const Key &other);
#ifdef Q_COMPILER_RVALUE_REFS
- Key(Key &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; }
+ Key(Key &&other) Q_DECL_NOTHROW : d(other.d) { other.d = nullptr; }
Key &operator =(Key &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
~Key();
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index 07e372b1ae..d1e0604caf 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -185,6 +185,72 @@ void QStandardItemPrivate::childDeleted(QStandardItem *child)
emit model->dataChanged(modelIndex, modelIndex);
}
+namespace {
+
+ struct ByNormalizedRole
+ {
+ static int normalizedRole(int role)
+ {
+ return role == Qt::EditRole ? Qt::DisplayRole : role;
+ }
+
+ bool operator()(const QStandardItemData& standardItemData, const std::pair<const int &, const QVariant&>& roleMapIt) const
+ {
+ return standardItemData.role < normalizedRole(roleMapIt.first);
+ }
+ bool operator()(const std::pair<const int&, const QVariant &>& roleMapIt, const QStandardItemData& standardItemData) const
+ {
+ return normalizedRole(roleMapIt.first) < standardItemData.role;
+ }
+
+ };
+
+ /*
+ Based on std::transform with a twist. The inputs are iterators of <int, QVariant> pair.
+ The variant is checked for validity and if not valid, that element is not taken into account
+ which means that the resulting output might be shorter than the input.
+ */
+ template<class Input, class OutputIt>
+ OutputIt roleMapStandardItemDataTransform(Input first1, Input last1, OutputIt d_first)
+ {
+ while (first1 != last1) {
+ if ((*first1).second.isValid())
+ *d_first++ = QStandardItemData(*first1);
+ ++first1;
+ }
+ return d_first;
+ }
+
+
+ /*
+ Based on std::set_union with a twist. The idea is to create a union of both inputs
+ with an additional constraint: if an input contains an invalid variant, it means
+ that this one should not be taken into account for generating the output.
+ */
+ template<class Input1, class Input2,
+ class OutputIt, class Compare>
+ OutputIt roleMapStandardItemDataUnion(Input1 first1, Input1 last1,
+ Input2 first2, Input2 last2,
+ OutputIt d_first, Compare comp)
+ {
+ for (; first1 != last1; ++d_first) {
+ if (first2 == last2) {
+ return roleMapStandardItemDataTransform(first1, last1, d_first);
+ }
+ if (comp(*first2, *first1)) {
+ *d_first = *first2++;
+ } else {
+ if ((*first1).second.isValid())
+ *d_first = QStandardItemData(*first1);
+ if (!comp(*first1, *first2))
+ ++first2;
+ ++first1;
+ }
+ }
+ return std::copy(first2, last2, d_first);
+ }
+}
+
/*!
\internal
*/
@@ -192,21 +258,44 @@ void QStandardItemPrivate::setItemData(const QMap<int, QVariant> &roles)
{
Q_Q(QStandardItem);
- //let's build the vector of new values
+ auto byRole = [](const QStandardItemData& item1, const QStandardItemData& item2) {
+ return item1.role < item2.role;
+ };
+
+ std::sort(values.begin(), values.end(), byRole);
+
+ /*
+ Create a vector of QStandardItemData that will contain the original values
+ if the matching role is not contained in roles, the new value if it is and
+ if the new value is an invalid QVariant, it will be removed.
+ */
QVector<QStandardItemData> newValues;
- for (auto it = roles.begin(), end = roles.end(); it != end; ++it) {
- const QVariant &value = it.value();
- if (value.isValid()) {
- int role = it.key();
- role = (role == Qt::EditRole) ? Qt::DisplayRole : role;
- newValues.append(QStandardItemData(role, value));
- }
- }
+ newValues.reserve(values.size());
+ roleMapStandardItemDataUnion(roles.keyValueBegin(),
+ roles.keyValueEnd(),
+ values.cbegin(), values.cend(),
+ std::back_inserter(newValues), ByNormalizedRole());
- if (values!=newValues) {
+ if (newValues != values) {
values.swap(newValues);
- if (model)
- model->d_func()->itemChanged(q);
+ if (model) {
+ QVector<int> roleKeys;
+ roleKeys.reserve(roles.size() + 1);
+ bool hasEditRole = false;
+ bool hasDisplayRole = false;
+ for (auto it = roles.keyBegin(); it != roles.keyEnd(); ++it) {
+ roleKeys.push_back(*it);
+ if (*it == Qt::EditRole)
+ hasEditRole = true;
+ else if (*it == Qt::DisplayRole)
+ hasDisplayRole = true;
+ }
+ if (hasEditRole && !hasDisplayRole)
+ roleKeys.push_back(Qt::DisplayRole);
+ else if (!hasEditRole && hasDisplayRole)
+ roleKeys.push_back(Qt::EditRole);
+ model->d_func()->itemChanged(q, roleKeys);
+ }
}
}
@@ -481,7 +570,7 @@ bool QStandardItemPrivate::insertColumns(int column, int count, const QList<QSta
/*!
\internal
*/
-void QStandardItemModelPrivate::itemChanged(QStandardItem *item)
+void QStandardItemModelPrivate::itemChanged(QStandardItem *item, const QVector<int> &roles)
{
Q_Q(QStandardItemModel);
Q_ASSERT(item);
@@ -497,8 +586,8 @@ void QStandardItemModelPrivate::itemChanged(QStandardItem *item)
}
} else {
// Normal item
- QModelIndex index = q->indexFromItem(item);
- emit q->dataChanged(index, index);
+ const QModelIndex index = q->indexFromItem(item);
+ emit q->dataChanged(index, index, roles);
}
}
@@ -812,6 +901,9 @@ void QStandardItem::setData(const QVariant &value, int role)
{
Q_D(QStandardItem);
role = (role == Qt::EditRole) ? Qt::DisplayRole : role;
+ const QVector<int> roles((role == Qt::DisplayRole) ?
+ QVector<int>({Qt::DisplayRole, Qt::EditRole}) :
+ QVector<int>({role}));
QVector<QStandardItemData>::iterator it;
for (it = d->values.begin(); it != d->values.end(); ++it) {
if ((*it).role == role) {
@@ -823,13 +915,13 @@ void QStandardItem::setData(const QVariant &value, int role)
d->values.erase(it);
}
if (d->model)
- d->model->d_func()->itemChanged(this);
+ d->model->d_func()->itemChanged(this, roles);
return;
}
}
d->values.append(QStandardItemData(role, value));
if (d->model)
- d->model->d_func()->itemChanged(this);
+ d->model->d_func()->itemChanged(this, roles);
}
/*!
diff --git a/src/gui/itemmodels/qstandarditemmodel.h b/src/gui/itemmodels/qstandarditemmodel.h
index 73107b827c..d8f06b629a 100644
--- a/src/gui/itemmodels/qstandarditemmodel.h
+++ b/src/gui/itemmodels/qstandarditemmodel.h
@@ -327,45 +327,45 @@ class Q_GUI_EXPORT QStandardItemModel : public QAbstractItemModel
Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole)
public:
- explicit QStandardItemModel(QObject *parent = Q_NULLPTR);
- QStandardItemModel(int rows, int columns, QObject *parent = Q_NULLPTR);
+ explicit QStandardItemModel(QObject *parent = nullptr);
+ QStandardItemModel(int rows, int columns, QObject *parent = nullptr);
~QStandardItemModel();
void setItemRoleNames(const QHash<int,QByteArray> &roleNames);
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
- int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
// Qt 6: Remove
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
QVariant headerData(int section, Qt::Orientation orientation,
- int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ int role = Qt::DisplayRole) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
- int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ int role = Qt::EditRole) override;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ Qt::DropActions supportedDropActions() const override;
- QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
- bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) Q_DECL_OVERRIDE;
+ QMap<int, QVariant> itemData(const QModelIndex &index) const override;
+ bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override;
void clear();
using QObject::parent;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
QStandardItem *itemFromIndex(const QModelIndex &index) const;
QModelIndex indexFromItem(const QStandardItem *item) const;
@@ -414,15 +414,16 @@ public:
int sortRole() const;
void setSortRole(int role);
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
- bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ QStringList mimeTypes() const override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
+ bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
Q_SIGNALS:
+ // ### Qt 6: add changed roles
void itemChanged(QStandardItem *item);
protected:
- QStandardItemModel(QStandardItemModelPrivate &dd, QObject *parent = Q_NULLPTR);
+ QStandardItemModel(QStandardItemModelPrivate &dd, QObject *parent = nullptr);
private:
friend class QStandardItemPrivate;
diff --git a/src/gui/itemmodels/qstandarditemmodel_p.h b/src/gui/itemmodels/qstandarditemmodel_p.h
index 516cce8613..bd28ec3029 100644
--- a/src/gui/itemmodels/qstandarditemmodel_p.h
+++ b/src/gui/itemmodels/qstandarditemmodel_p.h
@@ -61,6 +61,7 @@
#include <QtCore/qstack.h>
#include <QtCore/qvariant.h>
#include <QtCore/qvector.h>
+#include <QtCore/qdebug.h>
QT_BEGIN_NAMESPACE
@@ -69,6 +70,7 @@ class QStandardItemData
public:
inline QStandardItemData() : role(-1) {}
inline QStandardItemData(int r, const QVariant &v) : role(r), value(v) {}
+ inline QStandardItemData(const std::pair<const int&, const QVariant&> &p) : role(p.first), value(p.second) {}
int role;
QVariant value;
inline bool operator==(const QStandardItemData &other) const { return role == other.role && value == other.value; }
@@ -91,6 +93,15 @@ inline QDataStream &operator<<(QDataStream &out, const QStandardItemData &data)
return out;
}
+inline QDebug &operator<<(QDebug &debug, const QStandardItemData &data)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace() << data.role
+ << " "
+ << data.value;
+ return debug.space();
+}
+
#endif // QT_NO_DATASTREAM
class QStandardItemPrivate
@@ -189,7 +200,7 @@ public:
}
void sort(QStandardItem *parent, int column, Qt::SortOrder order);
- void itemChanged(QStandardItem *item);
+ void itemChanged(QStandardItem *item, const QVector<int> &roles = QVector<int>());
void rowsAboutToBeInserted(QStandardItem *parent, int start, int end);
void columnsAboutToBeInserted(QStandardItem *parent, int start, int end);
void rowsAboutToBeRemoved(QStandardItem *parent, int start, int end);
diff --git a/src/gui/kernel/qcursor.cpp b/src/gui/kernel/qcursor.cpp
index 8ae9085d9f..bb81ca109a 100644
--- a/src/gui/kernel/qcursor.cpp
+++ b/src/gui/kernel/qcursor.cpp
@@ -172,6 +172,12 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \fn void QCursor::swap(QCursor &other)
+
+ Swaps this cursor with the \a other cursor.
+ */
+
+/*!
\fn QPoint QCursor::pos(const QScreen *screen)
Returns the position of the cursor (hot spot) of the \a screen
diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h
index ccce3d84ef..d62ee7a053 100644
--- a/src/gui/kernel/qcursor.h
+++ b/src/gui/kernel/qcursor.h
@@ -87,7 +87,7 @@ public:
~QCursor();
QCursor &operator=(const QCursor &cursor);
#ifdef Q_COMPILER_RVALUE_REFS
- QCursor(QCursor &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; }
+ QCursor(QCursor &&other) Q_DECL_NOTHROW : d(other.d) { other.d = nullptr; }
inline QCursor &operator=(QCursor &&other) Q_DECL_NOTHROW
{ swap(other); return *this; }
#endif
diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h
index eaf6c74fd4..e7d83cbbaf 100644
--- a/src/gui/kernel/qdnd_p.h
+++ b/src/gui/kernel/qdnd_p.h
@@ -77,8 +77,8 @@ public:
QInternalMimeData();
~QInternalMimeData();
- bool hasFormat(const QString &mimeType) const Q_DECL_OVERRIDE;
- QStringList formats() const Q_DECL_OVERRIDE;
+ bool hasFormat(const QString &mimeType) const override;
+ QStringList formats() const override;
static bool canReadData(const QString &mimeType);
@@ -87,7 +87,7 @@ public:
static QByteArray renderDataHelper(const QString &mimeType, const QMimeData *data);
protected:
- QVariant retrieveData(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE;
+ QVariant retrieveData(const QString &mimeType, QVariant::Type type) const override;
virtual bool hasFormat_sys(const QString &mimeType) const = 0;
virtual QStringList formats_sys() const = 0;
diff --git a/src/gui/kernel/qdrag.cpp b/src/gui/kernel/qdrag.cpp
index 0aadac2c62..982c9e7659 100644
--- a/src/gui/kernel/qdrag.cpp
+++ b/src/gui/kernel/qdrag.cpp
@@ -319,14 +319,13 @@ Qt::DropAction QDrag::start(Qt::DropActions request)
to override the default native cursors. To revert to using the
native cursor for \a action pass in a null QPixmap as \a cursor.
- The \a action can only be CopyAction, MoveAction or LinkAction.
- All other values of DropAction are ignored.
+ Note: setting the drag cursor for IgnoreAction may not work on
+ all platforms. X11 and macOS has been tested to work. Windows
+ does not support it.
*/
void QDrag::setDragCursor(const QPixmap &cursor, Qt::DropAction action)
{
Q_D(QDrag);
- if (action != Qt::CopyAction && action != Qt::MoveAction && action != Qt::LinkAction)
- return;
if (cursor.isNull())
d->customCursors.remove(action);
else
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 139b36ef71..50d9bbb2cc 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -694,6 +694,13 @@ QHoverEvent::~QHoverEvent()
*/
/*!
+ \enum QWheelEvent::anonymous
+ \internal
+
+ \value DefaultDeltasPerStep Defaqult deltas per step
+*/
+
+/*!
\fn Qt::MouseButtons QWheelEvent::buttons() const
Returns the mouse state when the event occurred.
@@ -2400,8 +2407,9 @@ QVariant QInputMethodQueryEvent::value(Qt::InputMethodQuery query) const
The \a tangentialPressure parameter contins the tangential pressure of an air
brush. If the device does not support tangential pressure, pass 0 here.
- \a rotation contains the device's rotation in degrees. 4D mice and the Wacom
- Art Pen support rotation. If the device does not support rotation, pass 0 here.
+ \a rotation contains the device's rotation in degrees.
+ 4D mice, the Wacom Art Pen, and the Apple Pencil support rotation.
+ If the device does not support rotation, pass 0 here.
The \a button that caused the event is given as a value from the
\l Qt::MouseButton enum. If the event \a type is not \l TabletPress or
@@ -2542,10 +2550,12 @@ Qt::MouseButtons QTabletEvent::buttons() const
/*!
\fn qreal QTabletEvent::rotation() const
- Returns the rotation of the current device in degress. This is usually
- given by a 4D Mouse. If the device does not support rotation this value is
- always 0.0.
-
+ Returns the rotation of the current tool in degrees, where zero means the
+ tip of the stylus is pointing towards the top of the tablet, a positive
+ value means it's turned to the right, and a negative value means it's
+ turned to the left. This can be given by a 4D Mouse or a rotation-capable
+ stylus (such as the Wacom Art Pen or the Apple Pencil). If the device does
+ not support rotation, this value is always 0.0.
*/
/*!
@@ -3751,14 +3761,25 @@ static inline void formatInputMethodEvent(QDebug d, const QInputMethodEvent *e)
static inline void formatInputMethodQueryEvent(QDebug d, const QInputMethodQueryEvent *e)
{
+ QDebugStateSaver saver(d);
+ d.noquote();
const Qt::InputMethodQueries queries = e->queries();
d << "QInputMethodQueryEvent(queries=" << showbase << hex << int(queries)
<< noshowbase << dec << ", {";
- for (unsigned mask = 1; mask <= Qt::ImTextAfterCursor; mask<<=1) {
+ for (unsigned mask = 1; mask <= Qt::ImInputItemClipRectangle; mask<<=1) {
if (queries & mask) {
- const QVariant value = e->value(static_cast<Qt::InputMethodQuery>(mask));
- if (value.isValid())
- d << '[' << showbase << hex << mask << noshowbase << dec << '=' << value << "],";
+ const Qt::InputMethodQuery query = static_cast<Qt::InputMethodQuery>(mask);
+ const QVariant value = e->value(query);
+ if (value.isValid()) {
+ d << '[';
+ QtDebugUtils::formatQEnum(d, query);
+ d << '=';
+ if (query == Qt::ImHints)
+ QtDebugUtils::formatQFlags(d, Qt::InputMethodHints(value.toInt()));
+ else
+ d << value.toString();
+ d << "],";
+ }
}
}
d << "})";
@@ -4506,7 +4527,7 @@ QTouchEvent::TouchPoint::TouchPoint(int id)
{ }
/*!
- \fn TouchPoint::TouchPoint(const TouchPoint &other)
+ \fn QTouchEvent::TouchPoint::TouchPoint(const QTouchEvent::TouchPoint &other)
\internal
Constructs a copy of \a other.
@@ -5048,12 +5069,12 @@ void QTouchEvent::TouchPoint::setFlags(InfoFlags flags)
}
/*!
- \fn TouchPoint &TouchPoint::operator=(const TouchPoint &other)
+ \fn QTouchEvent::TouchPoint &QTouchEvent::TouchPoint::operator=(const QTouchEvent::TouchPoint &other)
\internal
*/
/*!
- \fn TouchPoint &TouchPoint::operator=(TouchPoint &&other)
+ \fn QTouchEvent::TouchPoint &QTouchEvent::TouchPoint::operator=(QTouchEvent::TouchPoint &&other)
\internal
*/
/*!
diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h
index 372b5f0896..d95da40368 100644
--- a/src/gui/kernel/qevent.h
+++ b/src/gui/kernel/qevent.h
@@ -724,7 +724,7 @@ class Q_GUI_EXPORT QActionEvent : public QEvent
{
QAction *act, *bef;
public:
- QActionEvent(int type, QAction *action, QAction *before = Q_NULLPTR);
+ QActionEvent(int type, QAction *action, QAction *before = nullptr);
~QActionEvent();
inline QAction *action() const { return act; }
@@ -852,7 +852,7 @@ public:
TouchPoint(const TouchPoint &other);
#ifdef Q_COMPILER_RVALUE_REFS
TouchPoint(TouchPoint &&other) Q_DECL_NOEXCEPT
- : d(Q_NULLPTR)
+ : d(nullptr)
{ qSwap(d, other.d); }
TouchPoint &operator=(TouchPoint &&other) Q_DECL_NOEXCEPT
{ qSwap(d, other.d); return *this; }
@@ -940,7 +940,7 @@ public:
#endif
explicit QTouchEvent(QEvent::Type eventType,
- QTouchDevice *device = Q_NULLPTR,
+ QTouchDevice *device = nullptr,
Qt::KeyboardModifiers modifiers = Qt::NoModifier,
Qt::TouchPointStates touchPointStates = Qt::TouchPointStates(),
const QList<QTouchEvent::TouchPoint> &touchPoints = QList<QTouchEvent::TouchPoint>());
diff --git a/src/gui/kernel/qgenericplugin.h b/src/gui/kernel/qgenericplugin.h
index e8aa2e6f32..69b4f29854 100644
--- a/src/gui/kernel/qgenericplugin.h
+++ b/src/gui/kernel/qgenericplugin.h
@@ -52,7 +52,7 @@ class Q_GUI_EXPORT QGenericPlugin : public QObject
{
Q_OBJECT
public:
- explicit QGenericPlugin(QObject *parent = Q_NULLPTR);
+ explicit QGenericPlugin(QObject *parent = nullptr);
~QGenericPlugin();
virtual QObject* create(const QString& name, const QString &spec) = 0;
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index daa405f309..f7da94d111 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -53,6 +53,7 @@
#include <qpa/qplatformdrag.h>
#include <QtCore/QAbstractEventDispatcher>
+#include <QtCore/QStandardPaths>
#include <QtCore/QVariant>
#include <QtCore/private/qcoreapplication_p.h>
#include <QtCore/private/qabstracteventdispatcher_p.h>
@@ -110,6 +111,8 @@
# include <QtCore/QLibraryInfo>
#endif // Q_OS_WIN
+#include <qtgui_tracepoints_p.h>
+
#include <ctype.h>
QT_BEGIN_NAMESPACE
@@ -190,7 +193,7 @@ QWindow *QGuiApplicationPrivate::focus_window = 0;
static QBasicMutex applicationFontMutex;
QFont *QGuiApplicationPrivate::app_font = 0;
-QStyleHints *QGuiApplicationPrivate::styleHints = Q_NULLPTR;
+QStyleHints *QGuiApplicationPrivate::styleHints = nullptr;
bool QGuiApplicationPrivate::obey_desktop_settings = true;
QInputDeviceManager *QGuiApplicationPrivate::m_inputDeviceManager = 0;
@@ -244,6 +247,15 @@ static inline void clearFontUnlocked()
QGuiApplicationPrivate::app_font = 0;
}
+static bool checkRunningUnderFlatpak()
+{
+#if QT_CONFIG(dbus)
+ return !QStandardPaths::locate(QStandardPaths::RuntimeLocation, QLatin1String("flatpak-info")).isEmpty();
+#else
+ return false;
+#endif // QT_CONFIG(dbus)
+}
+
// Using aggregate initialization instead of ctor so we can have a POD global static
#define Q_WINDOW_GEOMETRY_SPECIFICATION_INITIALIZER { Qt::TopLeftCorner, -1, -1, -1, -1 }
@@ -748,7 +760,7 @@ QString QGuiApplication::desktopFileName()
*/
QWindow *QGuiApplication::modalWindow()
{
- CHECK_QAPP_INSTANCE(Q_NULLPTR)
+ CHECK_QAPP_INSTANCE(nullptr)
if (QGuiApplicationPrivate::self->modalWindowList.isEmpty())
return 0;
return QGuiApplicationPrivate::self->modalWindowList.first();
@@ -1140,8 +1152,14 @@ static void init_platform(const QString &pluginArgument, const QString &platform
if (Q_UNLIKELY(!QGuiApplicationPrivate::platform_integration)) {
QStringList keys = QPlatformIntegrationFactory::keys(platformPluginPath);
- QString fatalMessage
- = QStringLiteral("This application failed to start because it could not find or load the Qt platform plugin \"%1\"\nin \"%2\".\n\n").arg(name, QDir::toNativeSeparators(platformPluginPath));
+ QString fatalMessage;
+ if (keys.contains(name)) {
+ fatalMessage = QStringLiteral("This application failed to start because it could not load the Qt platform plugin \"%2\"\nin \"%3\", even though it was found. ").arg(name, QDir::toNativeSeparators(platformPluginPath));
+ fatalMessage += QStringLiteral("This is usually due to missing dependencies, which you can verify by setting the env variable QT_DEBUG_PLUGINS to 1.\n\n");
+ } else {
+ fatalMessage = QStringLiteral("This application failed to start because it could not find the Qt platform plugin \"%2\"\nin \"%3\".\n\n").arg(name, QDir::toNativeSeparators(platformPluginPath));
+ }
+
if (!keys.isEmpty()) {
fatalMessage += QStringLiteral("Available platform plugins are: %1.\n\n").arg(
keys.join(QLatin1String(", ")));
@@ -1173,16 +1191,21 @@ static void init_platform(const QString &pluginArgument, const QString &platform
if (!platformThemeName.isEmpty())
themeNames.append(platformThemeName);
- // 2) Ask the platform integration for a list of theme names
+ // 2) Special case - check whether we are in sandbox to use flatpak platform theme for portals support
+ if (checkRunningUnderFlatpak()) {
+ themeNames.append(QStringLiteral("flatpak"));
+ }
+
+ // 3) Ask the platform integration for a list of theme names
themeNames += QGuiApplicationPrivate::platform_integration->themeNames();
- // 3) Look for a theme plugin.
+ // 4) Look for a theme plugin.
for (const QString &themeName : qAsConst(themeNames)) {
QGuiApplicationPrivate::platform_theme = QPlatformThemeFactory::create(themeName, platformPluginPath);
if (QGuiApplicationPrivate::platform_theme)
break;
}
- // 4) If no theme plugin was found ask the platform integration to
+ // 5) If no theme plugin was found ask the platform integration to
// create a theme
if (!QGuiApplicationPrivate::platform_theme) {
for (const QString &themeName : qAsConst(themeNames)) {
@@ -1193,7 +1216,7 @@ static void init_platform(const QString &pluginArgument, const QString &platform
// No error message; not having a theme plugin is allowed.
}
- // 5) Fall back on the built-in "null" platform theme.
+ // 6) Fall back on the built-in "null" platform theme.
if (!QGuiApplicationPrivate::platform_theme)
QGuiApplicationPrivate::platform_theme = new QPlatformTheme;
@@ -1339,6 +1362,8 @@ void QGuiApplicationPrivate::eventDispatcherReady()
void QGuiApplicationPrivate::init()
{
+ Q_TRACE(qguiapplicationprivate_init_entry);
+
#if defined(Q_OS_MACOS)
QMacAutoReleasePool pool;
#endif
@@ -1501,6 +1526,8 @@ void QGuiApplicationPrivate::init()
if (!QGuiApplicationPrivate::displayName)
QObject::connect(q, &QGuiApplication::applicationNameChanged,
q, &QGuiApplication::applicationDisplayNameChanged);
+
+ Q_TRACE(qguiapplicationprivate_init_exit);
}
extern void qt_cleanupFontDatabase();
@@ -1527,7 +1554,7 @@ QGuiApplicationPrivate::~QGuiApplicationPrivate()
cleanupThreadData();
delete QGuiApplicationPrivate::styleHints;
- QGuiApplicationPrivate::styleHints = Q_NULLPTR;
+ QGuiApplicationPrivate::styleHints = nullptr;
delete inputMethod;
qt_cleanupFontDatabase();
@@ -1650,10 +1677,10 @@ QFunctionPointer QGuiApplication::platformFunction(const QByteArray &function)
QPlatformIntegration *pi = QGuiApplicationPrivate::platformIntegration();
if (!pi) {
qWarning("QGuiApplication::platformFunction(): Must construct a QGuiApplication before accessing a platform function");
- return Q_NULLPTR;
+ return nullptr;
}
- return pi->nativeInterface() ? pi->nativeInterface()->platformFunction(function) : Q_NULLPTR;
+ return pi->nativeInterface() ? pi->nativeInterface()->platformFunction(function) : nullptr;
}
/*!
@@ -1735,8 +1762,9 @@ bool QGuiApplicationPrivate::processNativeEvent(QWindow *window, const QByteArra
void QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e)
{
+ Q_TRACE(qguiapplicationprivate_processwsevents_entry, e->type);
+
switch(e->type) {
- case QWindowSystemInterfacePrivate::FrameStrutMouse:
case QWindowSystemInterfacePrivate::Mouse:
QGuiApplicationPrivate::processMouseEvent(static_cast<QWindowSystemInterfacePrivate::MouseEvent *>(e));
break;
@@ -1844,31 +1872,115 @@ void QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePriv
qWarning() << "Unknown user input event type:" << e->type;
break;
}
+
+ Q_TRACE(qguiapplicationprivate_processwsevents_exit, e->type);
}
+/*! \internal
+
+ History is silent on why Qt splits mouse events that change position and
+ button state at the same time. We believe that this was done to emulate mouse
+ behavior on touch screens. If mouse tracking is enabled, we will get move
+ events before the button is pressed. A touch panel does not generally give
+ move events when not pressed, so without event splitting code path we would
+ only see a press in a new location without any intervening moves. This could
+ confuse code that is written for a real mouse. The same is true for mouse
+ release events that change position, see tst_QWidget::touchEventSynthesizedMouseEvent()
+ and tst_QWindow::generatedMouseMove() auto tests.
+*/
void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e)
{
- QEvent::Type type;
- Qt::MouseButtons stateChange = e->buttons ^ mouse_buttons;
- if (e->globalPos != QGuiApplicationPrivate::lastCursorPosition && (stateChange != Qt::NoButton)) {
- // A mouse event should not change both position and buttons at the same time. Instead we
- // should first send a move event followed by a button changed event. Since this is not the case
- // with the current event, we split it in two.
- QWindowSystemInterfacePrivate::MouseEvent mouseButtonEvent(
- e->window.data(), e->timestamp, e->type, e->localPos, e->globalPos, e->buttons, e->modifiers, e->source);
- if (e->flags & QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic)
- mouseButtonEvent.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
- e->buttons = mouse_buttons;
- processMouseEvent(e);
- processMouseEvent(&mouseButtonEvent);
- return;
+ QEvent::Type type = QEvent::None;
+ Qt::MouseButton button = Qt::NoButton;
+ QWindow *window = e->window.data();
+ bool positionChanged = QGuiApplicationPrivate::lastCursorPosition != e->globalPos;
+ bool mouseMove = false;
+ bool mousePress = false;
+
+ if (e->enhancedMouseEvent()) {
+ type = e->buttonType;
+ button = e->button;
+
+ if (type == QEvent::NonClientAreaMouseMove || type == QEvent::MouseMove)
+ mouseMove = true;
+ else if (type == QEvent::NonClientAreaMouseButtonPress || type == QEvent::MouseButtonPress)
+ mousePress = true;
+
+ if (!mouseMove && positionChanged) {
+ QWindowSystemInterfacePrivate::MouseEvent moveEvent(window, e->timestamp,
+ e->localPos, e->globalPos, e->buttons ^ button, e->modifiers, Qt::NoButton,
+ e->nonClientArea ? QEvent::NonClientAreaMouseMove : QEvent::MouseMove,
+ e->source, e->nonClientArea);
+ if (e->synthetic())
+ moveEvent.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
+ processMouseEvent(&moveEvent); // mouse move excluding state change
+ processMouseEvent(e); // the original mouse event
+ return;
+ }
+ } else {
+ Qt::MouseButtons stateChange = e->buttons ^ mouse_buttons;
+ if (positionChanged && (stateChange != Qt::NoButton)) {
+ QWindowSystemInterfacePrivate::MouseEvent moveEvent(window, e->timestamp, e->localPos,
+ e->globalPos, mouse_buttons, e->modifiers, Qt::NoButton, QEvent::None, e->source,
+ e->nonClientArea);
+ if (e->synthetic())
+ moveEvent.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
+ processMouseEvent(&moveEvent); // mouse move excluding state change
+ processMouseEvent(e); // the original mouse event
+ return;
+ }
+
+ // In the compatibility path we deduce event type and button that caused the event
+ if (positionChanged) {
+ mouseMove = true;
+ type = e->nonClientArea ? QEvent::NonClientAreaMouseMove : QEvent::MouseMove;
+ } else {
+ // Check to see if a new button has been pressed/released.
+ for (uint mask = Qt::LeftButton; mask <= Qt::MaxMouseButton; mask <<= 1) {
+ if (stateChange & mask) {
+ button = Qt::MouseButton(mask);
+ break;
+ }
+ }
+ if (button == Qt::NoButton) {
+ // Ignore mouse events that don't change the current state. This shouldn't
+ // really happen, getting here can only mean that the stored button state
+ // is out of sync with the actual physical button state.
+ return;
+ }
+ if (button & e->buttons) {
+ mousePress = true;
+ type = e->nonClientArea ? QEvent::NonClientAreaMouseButtonPress
+ : QEvent::MouseButtonPress;
+ } else {
+ type = e->nonClientArea ? QEvent::NonClientAreaMouseButtonRelease
+ : QEvent::MouseButtonRelease;
+ }
+ }
}
- QWindow *window = e->window.data();
modifier_buttons = e->modifiers;
-
QPointF localPoint = e->localPos;
QPointF globalPoint = e->globalPos;
+ bool doubleClick = false;
+
+ if (mouseMove) {
+ QGuiApplicationPrivate::lastCursorPosition = globalPoint;
+ if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance||
+ qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance)
+ mousePressButton = Qt::NoButton;
+ } else {
+ mouse_buttons = e->buttons;
+ if (mousePress) {
+ ulong doubleClickInterval = static_cast<ulong>(QGuiApplication::styleHints()->mouseDoubleClickInterval());
+ doubleClick = e->timestamp - mousePressTime < doubleClickInterval && button == mousePressButton;
+ mousePressTime = e->timestamp;
+ mousePressButton = button;
+ const QPoint point = QGuiApplicationPrivate::lastCursorPosition.toPoint();
+ mousePressX = point.x();
+ mousePressY = point.y();
+ }
+ }
if (e->nullWindow()) {
window = QGuiApplication::topLevelAt(globalPoint.toPoint());
@@ -1889,44 +2001,6 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
}
}
- Qt::MouseButton button = Qt::NoButton;
- bool doubleClick = false;
- const bool frameStrut = e->type == QWindowSystemInterfacePrivate::FrameStrutMouse;
-
- if (QGuiApplicationPrivate::lastCursorPosition != globalPoint) {
- type = frameStrut ? QEvent::NonClientAreaMouseMove : QEvent::MouseMove;
- QGuiApplicationPrivate::lastCursorPosition = globalPoint;
- if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance||
- qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance)
- mousePressButton = Qt::NoButton;
- } else { // Check to see if a new button has been pressed/released.
- for (int check = Qt::LeftButton;
- check <= int(Qt::MaxMouseButton);
- check = check << 1) {
- if (check & stateChange) {
- button = Qt::MouseButton(check);
- break;
- }
- }
- if (button == Qt::NoButton) {
- // Ignore mouse events that don't change the current state.
- return;
- }
- mouse_buttons = e->buttons;
- if (button & e->buttons) {
- ulong doubleClickInterval = static_cast<ulong>(QGuiApplication::styleHints()->mouseDoubleClickInterval());
- doubleClick = e->timestamp - mousePressTime < doubleClickInterval && button == mousePressButton;
- type = frameStrut ? QEvent::NonClientAreaMouseButtonPress : QEvent::MouseButtonPress;
- mousePressTime = e->timestamp;
- mousePressButton = button;
- const QPoint point = QGuiApplicationPrivate::lastCursorPosition.toPoint();
- mousePressX = point.x();
- mousePressY = point.y();
- } else {
- type = frameStrut ? QEvent::NonClientAreaMouseButtonRelease : QEvent::MouseButtonRelease;
- }
- }
-
if (!window)
return;
@@ -1937,14 +2011,14 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
const QPointF nativeLocalPoint = QHighDpi::toNativePixels(localPoint, screen);
const QPointF nativeGlobalPoint = QHighDpi::toNativePixels(globalPoint, screen);
QMouseEvent ev(type, nativeLocalPoint, nativeLocalPoint, nativeGlobalPoint,
- button, mouse_buttons, e->modifiers, e->source);
+ button, e->buttons, e->modifiers, e->source);
ev.setTimestamp(e->timestamp);
cursor->pointerEvent(ev);
}
}
#endif
- QMouseEvent ev(type, localPoint, localPoint, globalPoint, button, mouse_buttons, e->modifiers, e->source);
+ QMouseEvent ev(type, localPoint, localPoint, globalPoint, button, e->buttons, e->modifiers, e->source);
ev.setTimestamp(e->timestamp);
if (window->d_func()->blockedByModalWindow && !qApp->d_func()->popupActive()) {
@@ -1960,7 +2034,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
QGuiApplication::sendSpontaneousEvent(window, &ev);
e->eventAccepted = ev.isAccepted();
if (!e->synthetic() && !ev.isAccepted()
- && !frameStrut
+ && !e->nonClientArea
&& qApp->testAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents)) {
if (!m_fakeTouchDevice) {
m_fakeTouchDevice = new QTouchDevice;
@@ -1978,7 +2052,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
point.state = Qt::TouchPointPressed;
} else if (type == QEvent::MouseButtonRelease && button == Qt::LeftButton) {
point.state = Qt::TouchPointReleased;
- } else if (type == QEvent::MouseMove && (mouse_buttons & Qt::LeftButton)) {
+ } else if (type == QEvent::MouseMove && (e->buttons & Qt::LeftButton)) {
point.state = Qt::TouchPointMoved;
} else {
return;
@@ -1997,9 +2071,9 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
if (doubleClick) {
mousePressButton = Qt::NoButton;
if (!e->window.isNull() || e->nullWindow()) { // QTBUG-36364, check if window closed in response to press
- const QEvent::Type doubleClickType = frameStrut ? QEvent::NonClientAreaMouseButtonDblClick : QEvent::MouseButtonDblClick;
+ const QEvent::Type doubleClickType = e->nonClientArea ? QEvent::NonClientAreaMouseButtonDblClick : QEvent::MouseButtonDblClick;
QMouseEvent dblClickEvent(doubleClickType, localPoint, localPoint, globalPoint,
- button, mouse_buttons, e->modifiers, e->source);
+ button, e->buttons, e->modifiers, e->source);
dblClickEvent.setTimestamp(e->timestamp);
QGuiApplication::sendSpontaneousEvent(window, &dblClickEvent);
}
@@ -2209,6 +2283,8 @@ void QGuiApplicationPrivate::processWindowStateChangedEvent(QWindowSystemInterfa
void QGuiApplicationPrivate::processWindowScreenChangedEvent(QWindowSystemInterfacePrivate::WindowScreenChangedEvent *wse)
{
if (QWindow *window = wse->window.data()) {
+ if (window->screen() == wse->screen.data())
+ return;
if (window->isTopLevel()) {
if (QScreen *screen = wse->screen.data())
window->d_func()->setTopLevelScreen(screen, false /* recreate */);
@@ -2363,7 +2439,7 @@ void QGuiApplicationPrivate::processTabletEvent(QWindowSystemInterfacePrivate::T
localValid = false;
}
if (type == QEvent::TabletRelease)
- pointData.target = Q_NULLPTR;
+ pointData.target = nullptr;
if (!window)
return;
}
@@ -2380,20 +2456,30 @@ void QGuiApplicationPrivate::processTabletEvent(QWindowSystemInterfacePrivate::T
break;
}
}
- QTabletEvent ev(type, local, e->global,
- e->device, e->pointerType, e->pressure, e->xTilt, e->yTilt,
- e->tangentialPressure, e->rotation, e->z,
- e->modifiers, e->uid, button, e->buttons);
- ev.setAccepted(false);
- ev.setTimestamp(e->timestamp);
- QGuiApplication::sendSpontaneousEvent(window, &ev);
+ QTabletEvent tabletEvent(type, local, e->global,
+ e->device, e->pointerType, e->pressure, e->xTilt, e->yTilt,
+ e->tangentialPressure, e->rotation, e->z,
+ e->modifiers, e->uid, button, e->buttons);
+ tabletEvent.setAccepted(false);
+ tabletEvent.setTimestamp(e->timestamp);
+ QGuiApplication::sendSpontaneousEvent(window, &tabletEvent);
pointData.state = e->buttons;
- if (!ev.isAccepted() && !QWindowSystemInterfacePrivate::TabletEvent::platformSynthesizesMouse
- && qApp->testAttribute(Qt::AA_SynthesizeMouseForUnhandledTabletEvents)) {
- QWindowSystemInterfacePrivate::MouseEvent fake(window, e->timestamp, e->local, e->global,
- e->buttons, e->modifiers, Qt::MouseEventSynthesizedByQt);
- fake.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
- processMouseEvent(&fake);
+ if (!tabletEvent.isAccepted()
+ && !QWindowSystemInterfacePrivate::TabletEvent::platformSynthesizesMouse
+ && qApp->testAttribute(Qt::AA_SynthesizeMouseForUnhandledTabletEvents)) {
+
+ const QEvent::Type mouseType = [&]() {
+ switch (type) {
+ case QEvent::TabletPress: return QEvent::MouseButtonPress;
+ case QEvent::TabletMove: return QEvent::MouseMove;
+ case QEvent::TabletRelease: return QEvent::MouseButtonRelease;
+ default: Q_UNREACHABLE();
+ }
+ }();
+ QWindowSystemInterfacePrivate::MouseEvent mouseEvent(window, e->timestamp, e->local,
+ e->global, e->buttons, e->modifiers, button, mouseType, Qt::MouseEventSynthesizedByQt);
+ mouseEvent.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
+ processMouseEvent(&mouseEvent);
}
#else
Q_UNUSED(e)
@@ -2499,7 +2585,7 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
++it;
}
for (QSet<QWindow *>::const_iterator winIt = windowsNeedingCancel.constBegin(),
- winItEnd = windowsNeedingCancel.constEnd(); winIt != winItEnd; ++winIt) {
+ winItEnd = windowsNeedingCancel.constEnd(); winIt != winItEnd; ++winIt) {
touchEvent.setWindow(*winIt);
QGuiApplication::sendSpontaneousEvent(*winIt, &touchEvent);
}
@@ -2512,8 +2598,10 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
e->timestamp,
synthIt->pos,
synthIt->screenPos,
- mouse_buttons & ~Qt::LeftButton,
+ Qt::NoButton,
e->modifiers,
+ Qt::LeftButton,
+ QEvent::MouseButtonRelease,
Qt::MouseEventSynthesizedByQt);
fake.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
processMouseEvent(&fake);
@@ -2710,25 +2798,41 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
if (!e->synthetic() && !touchEvent.isAccepted() && qApp->testAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents)) {
// exclude devices which generate their own mouse events
if (!(touchEvent.device()->capabilities() & QTouchDevice::MouseEmulation)) {
- Qt::MouseButtons b = eventType == QEvent::TouchEnd ? Qt::NoButton : Qt::LeftButton;
- if (b == Qt::NoButton)
+
+ if (eventType == QEvent::TouchEnd)
self->synthesizedMousePoints.clear();
const QList<QTouchEvent::TouchPoint> &touchPoints = touchEvent.touchPoints();
if (eventType == QEvent::TouchBegin)
m_fakeMouseSourcePointId = touchPoints.first().id();
+ const QEvent::Type mouseType = [&]() {
+ switch (eventType) {
+ case QEvent::TouchBegin: return QEvent::MouseButtonPress;
+ case QEvent::TouchUpdate: return QEvent::MouseMove;
+ case QEvent::TouchEnd: return QEvent::MouseButtonRelease;
+ default: Q_UNREACHABLE();
+ }
+ }();
+
+ Qt::MouseButton button = mouseType == QEvent::MouseMove ? Qt::NoButton : Qt::LeftButton;
+ Qt::MouseButtons buttons = mouseType == QEvent::MouseButtonRelease ? Qt::NoButton : Qt::LeftButton;
+
for (int i = 0; i < touchPoints.count(); ++i) {
const QTouchEvent::TouchPoint &touchPoint = touchPoints.at(i);
if (touchPoint.id() == m_fakeMouseSourcePointId) {
- if (b != Qt::NoButton)
+ if (eventType != QEvent::TouchEnd)
self->synthesizedMousePoints.insert(w, SynthesizedMouseData(
touchPoint.pos(), touchPoint.screenPos(), w));
+ // All touch events that are not accepted by the application will be translated to
+ // left mouse button events instead (see AA_SynthesizeMouseForUnhandledTouchEvents docs).
QWindowSystemInterfacePrivate::MouseEvent fake(w, e->timestamp,
touchPoint.pos(),
touchPoint.screenPos(),
- b | (mouse_buttons & ~Qt::LeftButton),
+ buttons,
e->modifiers,
+ button,
+ mouseType,
Qt::MouseEventSynthesizedByQt);
fake.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
processMouseEvent(&fake);
@@ -3018,6 +3122,15 @@ void QGuiApplicationPrivate::applyWindowGeometrySpecificationTo(QWindow *window)
}
/*!
+ \since 5.11
+ \fn void QGuiApplication::fontChanged(const QFont &font)
+
+ This signal is emitted when the \a font of the application changes.
+
+ \sa font()
+*/
+
+/*!
Returns the default application font.
\sa setFont()
@@ -3038,11 +3151,16 @@ QFont QGuiApplication::font()
void QGuiApplication::setFont(const QFont &font)
{
QMutexLocker locker(&applicationFontMutex);
+ const bool emitChange = !QGuiApplicationPrivate::app_font
+ || (*QGuiApplicationPrivate::app_font != font);
if (!QGuiApplicationPrivate::app_font)
QGuiApplicationPrivate::app_font = new QFont(font);
else
*QGuiApplicationPrivate::app_font = font;
applicationResourceFlags |= ApplicationFontExplicitlySet;
+
+ if (emitChange && qGuiApp)
+ emit qGuiApp->fontChanged(*QGuiApplicationPrivate::app_font);
}
/*!
@@ -3341,7 +3459,7 @@ void QGuiApplication::setFallbackSessionManagementEnabled(bool enabled)
You should never exit the application within this signal. Instead, the
session manager may or may not do this afterwards, depending on the
- context. Futhermore, most session managers will very likely request a saved
+ context. Furthermore, most session managers will very likely request a saved
state immediately after the application has been started. This permits the
session manager to learn about the application's restart policy.
@@ -3520,7 +3638,7 @@ Qt::LayoutDirection QGuiApplication::layoutDirection()
#ifndef QT_NO_CURSOR
QCursor *QGuiApplication::overrideCursor()
{
- CHECK_QAPP_INSTANCE(Q_NULLPTR)
+ CHECK_QAPP_INSTANCE(nullptr)
return qGuiApp->d_func()->cursor_list.isEmpty() ? 0 : &qGuiApp->d_func()->cursor_list.first();
}
@@ -3719,7 +3837,7 @@ bool QGuiApplication::desktopSettingsAware()
*/
QInputMethod *QGuiApplication::inputMethod()
{
- CHECK_QAPP_INSTANCE(Q_NULLPTR)
+ CHECK_QAPP_INSTANCE(nullptr)
if (!qGuiApp->d_func()->inputMethod)
qGuiApp->d_func()->inputMethod = new QInputMethod();
return qGuiApp->d_func()->inputMethod;
diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h
index e130553b9d..02dffef0fe 100644
--- a/src/gui/kernel/qguiapplication.h
+++ b/src/gui/kernel/qguiapplication.h
@@ -157,7 +157,7 @@ public:
static Qt::ApplicationState applicationState();
static int exec();
- bool notify(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool notify(QObject *, QEvent *) override;
#ifndef QT_NO_SESSIONMANAGER
// session management
@@ -187,10 +187,11 @@ Q_SIGNALS:
#endif
void paletteChanged(const QPalette &pal);
void applicationDisplayNameChanged();
+ void fontChanged(const QFont &font);
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
- bool compressEvent(QEvent *, QObject *receiver, QPostEventList *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
+ bool compressEvent(QEvent *, QObject *receiver, QPostEventList *) override;
QGuiApplication(QGuiApplicationPrivate &p);
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index becaa7ceb3..75cbc7abde 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -85,13 +85,13 @@ public:
void init();
void createPlatformIntegration();
- void createEventDispatcher() Q_DECL_OVERRIDE;
- void eventDispatcherReady() Q_DECL_OVERRIDE;
+ void createEventDispatcher() override;
+ void eventDispatcherReady() override;
virtual void notifyLayoutDirectionChange();
virtual void notifyActiveWindowChange(QWindow *previous);
- virtual bool shouldQuit() Q_DECL_OVERRIDE;
+ virtual bool shouldQuit() override;
bool shouldQuitInternal(const QWindowList &processedWindows);
virtual bool tryCloseAllWindows();
@@ -215,7 +215,7 @@ public:
static bool highDpiScalingUpdated;
struct TabletPointData {
- TabletPointData(qint64 devId = 0) : deviceId(devId), state(Qt::NoButton), target(Q_NULLPTR) {}
+ TabletPointData(qint64 devId = 0) : deviceId(devId), state(Qt::NoButton), target(nullptr) {}
qint64 deviceId;
Qt::MouseButtons state;
QWindow *target;
diff --git a/src/gui/kernel/qhighdpiscaling.cpp b/src/gui/kernel/qhighdpiscaling.cpp
index 078f185d08..8689f9f3b1 100644
--- a/src/gui/kernel/qhighdpiscaling.cpp
+++ b/src/gui/kernel/qhighdpiscaling.cpp
@@ -129,7 +129,7 @@ static inline qreal initialGlobalScaleFactor()
Note that the functions in this file do not work with the OS scale factor
directly and are limited to converting between device independent and native
- pixels. The OS scale factor is accunted for by QWindow::devicePixelRatio()
+ pixels. The OS scale factor is accounted for by QWindow::devicePixelRatio()
and similar functions.
Configuration Examples:
@@ -168,7 +168,7 @@ static inline qreal initialGlobalScaleFactor()
1) A global scale factor
The QT_SCALE_FACTOR environment variable can be used to set
- a global scale factor for all windows in the processs. This
+ a global scale factor for all windows in the process. This
is useful for testing and debugging (you can simulate any
devicePixelRatio without needing access to special hardware),
and perhaps also for targeting a specific application to
@@ -204,7 +204,7 @@ static inline qreal initialGlobalScaleFactor()
T fromNativePixels(T, QWindow*)
The following classes in QtGui use native pixels, for the convenience of the
- plataform plugins:
+ platform plugins:
QPlatformWindow
QPlatformScreen
QWindowSystemInterface (API only - Events are in device independent pixels)
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index 71ecc46cb6..9a9677b476 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -42,7 +42,7 @@
#include <qpa/qplatformtheme.h>
#include "private/qguiapplication_p.h"
-#ifndef QT_NO_SHORTCUT
+#if !defined(QT_NO_SHORTCUT) || defined(Q_CLANG_QDOC)
#include "qdebug.h"
#include <QtCore/qhashfunctions.h>
@@ -62,7 +62,7 @@
QT_BEGIN_NAMESPACE
-#if defined(Q_OS_MACX)
+#if defined(Q_OS_MACOS) || defined(Q_CLANG_QDOC)
static bool qt_sequence_no_mnemonics = true;
struct MacSpecialKey {
int key;
diff --git a/src/gui/kernel/qkeysequence.h b/src/gui/kernel/qkeysequence.h
index 6bdfd84ca3..65f3a93d9c 100644
--- a/src/gui/kernel/qkeysequence.h
+++ b/src/gui/kernel/qkeysequence.h
@@ -47,19 +47,19 @@
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_SHORTCUT
+#if !defined(QT_NO_SHORTCUT) || defined(Q_CLANG_QDOC)
class QKeySequence;
/*****************************************************************************
QKeySequence stream functions
*****************************************************************************/
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || defined(Q_CLANG_QDOC)
Q_GUI_EXPORT QDataStream &operator<<(QDataStream &in, const QKeySequence &ks);
Q_GUI_EXPORT QDataStream &operator>>(QDataStream &out, QKeySequence &ks);
#endif
-#ifdef Q_QDOC
+#if defined(Q_CLANG_QDOC)
void qt_set_sequence_auto_mnemonic(bool b);
#endif
@@ -225,7 +225,7 @@ public:
Q_DECLARE_SHARED(QKeySequence)
-#ifndef QT_NO_DEBUG_STREAM
+#if !defined(QT_NO_DEBUG_STREAM) || defined(Q_CLANG_QDOC)
Q_GUI_EXPORT QDebug operator<<(QDebug, const QKeySequence &);
#endif
diff --git a/src/gui/kernel/qoffscreensurface.h b/src/gui/kernel/qoffscreensurface.h
index 3295ae0d40..9d4839cb25 100644
--- a/src/gui/kernel/qoffscreensurface.h
+++ b/src/gui/kernel/qoffscreensurface.h
@@ -59,10 +59,10 @@ class Q_GUI_EXPORT QOffscreenSurface : public QObject, public QSurface
public:
// ### Qt 6: merge overloads
explicit QOffscreenSurface(QScreen *screen, QObject *parent);
- explicit QOffscreenSurface(QScreen *screen = Q_NULLPTR);
+ explicit QOffscreenSurface(QScreen *screen = nullptr);
virtual ~QOffscreenSurface();
- SurfaceType surfaceType() const Q_DECL_OVERRIDE;
+ SurfaceType surfaceType() const override;
void create();
void destroy();
@@ -70,10 +70,10 @@ public:
bool isValid() const;
void setFormat(const QSurfaceFormat &format);
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override;
QSurfaceFormat requestedFormat() const;
- QSize size() const Q_DECL_OVERRIDE;
+ QSize size() const override;
QScreen *screen() const;
void setScreen(QScreen *screen);
@@ -91,7 +91,7 @@ private Q_SLOTS:
private:
- QPlatformSurface *surfaceHandle() const Q_DECL_OVERRIDE;
+ QPlatformSurface *surfaceHandle() const override;
Q_DISABLE_COPY(QOffscreenSurface)
};
diff --git a/src/gui/kernel/qopenglcontext.h b/src/gui/kernel/qopenglcontext.h
index 07153db84e..9cfaa52f17 100644
--- a/src/gui/kernel/qopenglcontext.h
+++ b/src/gui/kernel/qopenglcontext.h
@@ -151,7 +151,7 @@ class Q_GUI_EXPORT QOpenGLContext : public QObject
Q_OBJECT
Q_DECLARE_PRIVATE(QOpenGLContext)
public:
- explicit QOpenGLContext(QObject *parent = Q_NULLPTR);
+ explicit QOpenGLContext(QObject *parent = nullptr);
~QOpenGLContext();
void setFormat(const QSurfaceFormat &format);
diff --git a/src/gui/kernel/qopenglcontext_p.h b/src/gui/kernel/qopenglcontext_p.h
index 9f9b4352fc..4f2f951d61 100644
--- a/src/gui/kernel/qopenglcontext_p.h
+++ b/src/gui/kernel/qopenglcontext_p.h
@@ -114,12 +114,12 @@ public:
GLuint id() const { return m_id; }
protected:
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
m_id = 0;
}
- void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE;
+ void freeResource(QOpenGLContext *context) override;
private:
GLuint m_id;
@@ -213,7 +213,7 @@ public:
, workaround_missingPrecisionQualifiers(false)
, active_engine(0)
, qgl_current_fbo_invalid(false)
- , qgl_current_fbo(Q_NULLPTR)
+ , qgl_current_fbo(nullptr)
, defaultFboRedirect(0)
{
requestedFormat = QSurfaceFormat::defaultFormat();
@@ -266,7 +266,7 @@ public:
static QOpenGLContextPrivate *get(QOpenGLContext *context)
{
- return context ? context->d_func() : Q_NULLPTR;
+ return context ? context->d_func() : nullptr;
}
#if !defined(QT_NO_DEBUG)
diff --git a/src/gui/kernel/qopenglwindow.cpp b/src/gui/kernel/qopenglwindow.cpp
index 5170c7ab63..cf3d712421 100644
--- a/src/gui/kernel/qopenglwindow.cpp
+++ b/src/gui/kernel/qopenglwindow.cpp
@@ -163,7 +163,7 @@ class QOpenGLWindowPaintDevice : public QOpenGLPaintDevice
{
public:
QOpenGLWindowPaintDevice(QOpenGLWindow *window) : m_window(window) { }
- void ensureActiveTarget() Q_DECL_OVERRIDE;
+ void ensureActiveTarget() override;
QOpenGLWindow *m_window;
};
@@ -188,9 +188,9 @@ public:
void bindFBO();
void initialize();
- void beginPaint(const QRegion &region) Q_DECL_OVERRIDE;
- void endPaint() Q_DECL_OVERRIDE;
- void flush(const QRegion &region) Q_DECL_OVERRIDE;
+ void beginPaint(const QRegion &region) override;
+ void endPaint() override;
+ void flush(const QRegion &region) override;
QOpenGLWindow::UpdateBehavior updateBehavior;
bool hasFboBlit;
@@ -344,7 +344,7 @@ void QOpenGLWindowPaintDevice::ensureActiveTarget()
\sa QOpenGLWindow::UpdateBehavior
*/
QOpenGLWindow::QOpenGLWindow(QOpenGLWindow::UpdateBehavior updateBehavior, QWindow *parent)
- : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(Q_NULLPTR, updateBehavior)), parent)
+ : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(nullptr, updateBehavior)), parent)
{
setSurfaceType(QSurface::OpenGLSurface);
}
diff --git a/src/gui/kernel/qopenglwindow.h b/src/gui/kernel/qopenglwindow.h
index fe236f9538..7b3bf004a3 100644
--- a/src/gui/kernel/qopenglwindow.h
+++ b/src/gui/kernel/qopenglwindow.h
@@ -64,8 +64,8 @@ public:
PartialUpdateBlend
};
- explicit QOpenGLWindow(UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = Q_NULLPTR);
- explicit QOpenGLWindow(QOpenGLContext *shareContext, UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = Q_NULLPTR);
+ explicit QOpenGLWindow(UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = nullptr);
+ explicit QOpenGLWindow(QOpenGLContext *shareContext, UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = nullptr);
~QOpenGLWindow();
UpdateBehavior updateBehavior() const;
@@ -91,10 +91,10 @@ protected:
virtual void paintUnderGL();
virtual void paintOverGL();
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- QPaintDevice *redirected(QPoint *) const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ int metric(PaintDeviceMetric metric) const override;
+ QPaintDevice *redirected(QPoint *) const override;
private:
Q_DISABLE_COPY(QOpenGLWindow)
diff --git a/src/gui/kernel/qpaintdevicewindow.h b/src/gui/kernel/qpaintdevicewindow.h
index 81b41dcdd5..3be078132f 100644
--- a/src/gui/kernel/qpaintdevicewindow.h
+++ b/src/gui/kernel/qpaintdevicewindow.h
@@ -68,14 +68,14 @@ public Q_SLOTS:
protected:
virtual void paintEvent(QPaintEvent *event);
- int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- void exposeEvent(QExposeEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric metric) const override;
+ void exposeEvent(QExposeEvent *) override;
+ bool event(QEvent *event) override;
QPaintDeviceWindow(QPaintDeviceWindowPrivate &dd, QWindow *parent);
private:
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
Q_DISABLE_COPY(QPaintDeviceWindow)
};
diff --git a/src/gui/kernel/qpalette.h b/src/gui/kernel/qpalette.h
index d04fb1f0c5..71f3d0c3b8 100644
--- a/src/gui/kernel/qpalette.h
+++ b/src/gui/kernel/qpalette.h
@@ -70,7 +70,7 @@ public:
#ifdef Q_COMPILER_RVALUE_REFS
QPalette(QPalette &&other) Q_DECL_NOTHROW
: d(other.d), data(other.data)
- { other.d = Q_NULLPTR; }
+ { other.d = nullptr; }
inline QPalette &operator=(QPalette &&other) Q_DECL_NOEXCEPT
{
for_faster_swapping_dont_use = other.for_faster_swapping_dont_use;
diff --git a/src/gui/kernel/qplatformcursor.cpp b/src/gui/kernel/qplatformcursor.cpp
index e6cf6a8216..df78e7d896 100644
--- a/src/gui/kernel/qplatformcursor.cpp
+++ b/src/gui/kernel/qplatformcursor.cpp
@@ -128,7 +128,7 @@ void QPlatformCursor::setPos(const QPoint &pos)
qWarning("This plugin does not support QCursor::setPos()"
"; emulating movement within the application.");
}
- QWindowSystemInterface::handleMouseEvent(0, pos, pos, Qt::NoButton);
+ QWindowSystemInterface::handleMouseEvent(0, pos, pos, Qt::NoButton, Qt::NoButton, QEvent::MouseMove);
}
// End of display and pointer event handling code
diff --git a/src/gui/kernel/qplatformdialoghelper.cpp b/src/gui/kernel/qplatformdialoghelper.cpp
index ad134ebe7f..fbadb48f70 100644
--- a/src/gui/kernel/qplatformdialoghelper.cpp
+++ b/src/gui/kernel/qplatformdialoghelper.cpp
@@ -297,6 +297,7 @@ void QColorDialogStaticData::writeSettings() const
{
#ifndef QT_NO_SETTINGS
if (customSet) {
+ const_cast<QColorDialogStaticData*>(this)->customSet = false;
QSettings settings(QSettings::UserScope, QStringLiteral("QtProject"));
for (int i = 0; i < int(CustomColorCount); ++i)
settings.setValue(QLatin1String("Qt/customColors/") + QString::number(i), customRgb[i]);
diff --git a/src/gui/kernel/qplatformgraphicsbuffer.cpp b/src/gui/kernel/qplatformgraphicsbuffer.cpp
index d42231e958..cc01efd6db 100644
--- a/src/gui/kernel/qplatformgraphicsbuffer.cpp
+++ b/src/gui/kernel/qplatformgraphicsbuffer.cpp
@@ -217,7 +217,7 @@ void QPlatformGraphicsBuffer::unlock()
the memory returned when not having a SWWriteAccess.
*/
const uchar *QPlatformGraphicsBuffer::data() const
-{ return Q_NULLPTR; }
+{ return nullptr; }
/*!
Accessor for the bytes of the buffer. This function needs to be called on a
@@ -226,7 +226,7 @@ const uchar *QPlatformGraphicsBuffer::data() const
*/
uchar *QPlatformGraphicsBuffer::data()
{
- return Q_NULLPTR;
+ return nullptr;
}
/*!
diff --git a/src/gui/kernel/qplatformgraphicsbufferhelper.h b/src/gui/kernel/qplatformgraphicsbufferhelper.h
index 5b7daff65a..6307f54a3e 100644
--- a/src/gui/kernel/qplatformgraphicsbufferhelper.h
+++ b/src/gui/kernel/qplatformgraphicsbufferhelper.h
@@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE
namespace QPlatformGraphicsBufferHelper {
bool lockAndBindToTexture(QPlatformGraphicsBuffer *graphicsBuffer, bool *swizzleRandB, bool *premultipliedB, const QRect &rect = QRect());
- bool bindSWToTexture(const QPlatformGraphicsBuffer *graphicsBuffer, bool *swizzleRandB = Q_NULLPTR, bool *premultipliedB = Q_NULLPTR, const QRect &rect = QRect());
+ bool bindSWToTexture(const QPlatformGraphicsBuffer *graphicsBuffer, bool *swizzleRandB = nullptr, bool *premultipliedB = nullptr, const QRect &rect = QRect());
}
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp
index 873ec3a33b..448d670209 100644
--- a/src/gui/kernel/qplatformintegration.cpp
+++ b/src/gui/kernel/qplatformintegration.cpp
@@ -418,6 +418,8 @@ QVariant QPlatformIntegration::styleHint(StyleHint hint) const
return QPlatformTheme::defaultThemeHint(QPlatformTheme::UiEffects);
case WheelScrollLines:
return QPlatformTheme::defaultThemeHint(QPlatformTheme::WheelScrollLines);
+ case MouseQuickSelectionThreshold:
+ return QPlatformTheme::defaultThemeHint(QPlatformTheme::MouseQuickSelectionThreshold);
}
return 0;
@@ -629,7 +631,7 @@ void QPlatformIntegration::setApplicationIcon(const QIcon &icon) const
Q_UNUSED(icon);
}
-#if QT_CONFIG(vulkan)
+#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
/*!
Factory function for QPlatformVulkanInstance. The \a instance parameter is a
diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h
index eeaa7574f7..37884e1f78 100644
--- a/src/gui/kernel/qplatformintegration.h
+++ b/src/gui/kernel/qplatformintegration.h
@@ -164,6 +164,7 @@ public:
UiEffects,
WheelScrollLines,
ShowShortcutsInContextMenus,
+ MouseQuickSelectionThreshold
};
virtual QVariant styleHint(StyleHint hint) const;
@@ -192,7 +193,7 @@ public:
virtual void beep() const;
-#if QT_CONFIG(vulkan)
+#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
virtual QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const;
#endif
diff --git a/src/gui/kernel/qplatformnativeinterface.cpp b/src/gui/kernel/qplatformnativeinterface.cpp
index 6614d45b12..b24541d3ec 100644
--- a/src/gui/kernel/qplatformnativeinterface.cpp
+++ b/src/gui/kernel/qplatformnativeinterface.cpp
@@ -92,7 +92,7 @@ void *QPlatformNativeInterface::nativeResourceForCursor(const QByteArray &resour
{
Q_UNUSED(resource);
Q_UNUSED(cursor);
- return Q_NULLPTR;
+ return nullptr;
}
#endif // !QT_NO_CURSOR
@@ -129,7 +129,7 @@ QPlatformNativeInterface::NativeResourceForBackingStoreFunction QPlatformNativeI
QFunctionPointer QPlatformNativeInterface::platformFunction(const QByteArray &function) const
{
Q_UNUSED(function);
- return Q_NULLPTR;
+ return nullptr;
}
/*!
diff --git a/src/gui/kernel/qplatformoffscreensurface.cpp b/src/gui/kernel/qplatformoffscreensurface.cpp
index 9d35b37c6a..c2952e166c 100644
--- a/src/gui/kernel/qplatformoffscreensurface.cpp
+++ b/src/gui/kernel/qplatformoffscreensurface.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
diff --git a/src/gui/kernel/qplatformoffscreensurface.h b/src/gui/kernel/qplatformoffscreensurface.h
index be15a98e28..cef0fab7e1 100644
--- a/src/gui/kernel/qplatformoffscreensurface.h
+++ b/src/gui/kernel/qplatformoffscreensurface.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@@ -68,7 +68,7 @@ public:
QOffscreenSurface *offscreenSurface() const;
- QPlatformScreen *screen() const;
+ QPlatformScreen *screen() const override;
virtual QSurfaceFormat format() const override;
virtual bool isValid() const;
diff --git a/src/gui/kernel/qplatformsurface.h b/src/gui/kernel/qplatformsurface.h
index 5a1e4fe82d..76e8767a05 100644
--- a/src/gui/kernel/qplatformsurface.h
+++ b/src/gui/kernel/qplatformsurface.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@@ -56,6 +56,7 @@
QT_BEGIN_NAMESPACE
+class QPlatformScreen;
class Q_GUI_EXPORT QPlatformSurface
{
@@ -64,6 +65,7 @@ public:
virtual QSurfaceFormat format() const = 0;
QSurface *surface() const;
+ virtual QPlatformScreen *screen() const = 0;
private:
explicit QPlatformSurface(QSurface *surface);
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index cd3966fb47..277d976dde 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -516,6 +516,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
return QVariant(QString());
case QPlatformTheme::IconThemeSearchPaths:
return QVariant(QStringList());
+ case QPlatformTheme::IconFallbackSearchPaths:
+ return QVariant(QStringList());
case QPlatformTheme::StyleNames:
return QVariant(QStringList());
case QPlatformTheme::ShowShortcutsInContextMenus:
@@ -557,6 +559,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
dist = defaultThemeHint(MouseDoubleClickDistance).toInt(&ok) * 2;
return QVariant(ok ? dist : 10);
}
+ case MouseQuickSelectionThreshold:
+ return QVariant(10);
}
return QVariant();
}
@@ -747,8 +751,7 @@ QString QPlatformTheme::removeMnemonics(const QString &original)
int currPos = 0;
int l = original.length();
while (l) {
- if (original.at(currPos) == QLatin1Char('&')
- && (l == 1 || original.at(currPos + 1) != QLatin1Char('&'))) {
+ if (original.at(currPos) == QLatin1Char('&')) {
++currPos;
--l;
if (l == 0)
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index f4ff418db6..1d6049a98d 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -116,7 +116,9 @@ public:
MouseDoubleClickDistance,
WheelScrollLines,
TouchDoubleTapDistance,
- ShowShortcutsInContextMenus
+ ShowShortcutsInContextMenus,
+ IconFallbackSearchPaths,
+ MouseQuickSelectionThreshold
};
enum DialogType {
diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp
index 7a4be7b8a8..a66420c364 100644
--- a/src/gui/kernel/qplatformwindow.cpp
+++ b/src/gui/kernel/qplatformwindow.cpp
@@ -104,7 +104,7 @@ QPlatformWindow *QPlatformWindow::parent() const
QPlatformScreen *QPlatformWindow::screen() const
{
QScreen *scr = window()->screen();
- return scr ? scr->handle() : Q_NULLPTR;
+ return scr ? scr->handle() : nullptr;
}
/*!
@@ -475,6 +475,25 @@ bool QPlatformWindow::startSystemResize(const QPoint &pos, Qt::Corner corner)
}
/*!
+ Reimplement this method to start a system move operation if
+ the system supports it and return true to indicate success.
+
+ The \a pos is a position of MouseButtonPress event or TouchBegin
+ event from a sequence of mouse events that triggered the movement.
+ It must be specified in window coordinates.
+
+ The default implementation is empty and does nothing with \a pos.
+
+ \since 5.11
+*/
+
+bool QPlatformWindow::startSystemMove(const QPoint &pos)
+{
+ Q_UNUSED(pos)
+ return false;
+}
+
+/*!
Reimplement this method to set whether frame strut events
should be sent to \a enabled.
diff --git a/src/gui/kernel/qplatformwindow.h b/src/gui/kernel/qplatformwindow.h
index cf5f38d249..84dff681d5 100644
--- a/src/gui/kernel/qplatformwindow.h
+++ b/src/gui/kernel/qplatformwindow.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
@@ -79,7 +79,7 @@ public:
QWindow *window() const;
QPlatformWindow *parent() const;
- QPlatformScreen *screen() const;
+ QPlatformScreen *screen() const override;
virtual QSurfaceFormat format() const override;
@@ -129,6 +129,7 @@ public:
virtual void windowEvent(QEvent *event);
virtual bool startSystemResize(const QPoint &pos, Qt::Corner corner);
+ virtual bool startSystemMove(const QPoint &pos);
virtual void setFrameStrutEventsEnabled(bool enabled);
virtual bool frameStrutEventsEnabled() const;
diff --git a/src/gui/kernel/qrasterwindow.cpp b/src/gui/kernel/qrasterwindow.cpp
index 73871e0f39..d06fee62cf 100644
--- a/src/gui/kernel/qrasterwindow.cpp
+++ b/src/gui/kernel/qrasterwindow.cpp
@@ -70,7 +70,7 @@ class QRasterWindowPrivate : public QPaintDeviceWindowPrivate
{
Q_DECLARE_PUBLIC(QRasterWindow)
public:
- void beginPaint(const QRegion &region) Q_DECL_OVERRIDE
+ void beginPaint(const QRegion &region) override
{
Q_Q(QRasterWindow);
const QSize size = q->size();
@@ -81,12 +81,12 @@ public:
backingstore->beginPaint(region);
}
- void endPaint() Q_DECL_OVERRIDE
+ void endPaint() override
{
backingstore->endPaint();
}
- void flush(const QRegion &region) Q_DECL_OVERRIDE
+ void flush(const QRegion &region) override
{
Q_Q(QRasterWindow);
backingstore->flush(region, q);
diff --git a/src/gui/kernel/qrasterwindow.h b/src/gui/kernel/qrasterwindow.h
index 9b29183ad6..9fe01c076b 100644
--- a/src/gui/kernel/qrasterwindow.h
+++ b/src/gui/kernel/qrasterwindow.h
@@ -53,12 +53,12 @@ class Q_GUI_EXPORT QRasterWindow : public QPaintDeviceWindow
Q_DECLARE_PRIVATE(QRasterWindow)
public:
- explicit QRasterWindow(QWindow *parent = Q_NULLPTR);
+ explicit QRasterWindow(QWindow *parent = nullptr);
~QRasterWindow();
protected:
- int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- QPaintDevice *redirected(QPoint *) const Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric metric) const override;
+ QPaintDevice *redirected(QPoint *) const override;
private:
Q_DISABLE_COPY(QRasterWindow)
diff --git a/src/gui/kernel/qshapedpixmapdndwindow_p.h b/src/gui/kernel/qshapedpixmapdndwindow_p.h
index 2c25ca7c76..477938867c 100644
--- a/src/gui/kernel/qshapedpixmapdndwindow_p.h
+++ b/src/gui/kernel/qshapedpixmapdndwindow_p.h
@@ -71,7 +71,7 @@ public:
void updateGeometry(const QPoint &pos);
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
private:
QPixmap m_pixmap;
diff --git a/src/gui/kernel/qsimpledrag_p.h b/src/gui/kernel/qsimpledrag_p.h
index eb78cd27ad..e56c7bf306 100644
--- a/src/gui/kernel/qsimpledrag_p.h
+++ b/src/gui/kernel/qsimpledrag_p.h
@@ -72,10 +72,10 @@ class Q_GUI_EXPORT QBasicDrag : public QPlatformDrag, public QObject
public:
virtual ~QBasicDrag();
- virtual Qt::DropAction drag(QDrag *drag) Q_DECL_OVERRIDE;
- void cancelDrag() Q_DECL_OVERRIDE;
+ virtual Qt::DropAction drag(QDrag *drag) override;
+ void cancelDrag() override;
- virtual bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
+ virtual bool eventFilter(QObject *o, QEvent *e) override;
protected:
QBasicDrag();
@@ -130,10 +130,10 @@ public:
QSimpleDrag();
protected:
- virtual void startDrag() Q_DECL_OVERRIDE;
- virtual void cancel() Q_DECL_OVERRIDE;
- virtual void move(const QPoint &globalPos) Q_DECL_OVERRIDE;
- virtual void drop(const QPoint &globalPos) Q_DECL_OVERRIDE;
+ virtual void startDrag() override;
+ virtual void cancel() override;
+ virtual void move(const QPoint &globalPos) override;
+ virtual void drop(const QPoint &globalPos) override;
};
#endif // QT_NO_DRAGANDDROP
diff --git a/src/gui/kernel/qstylehints.cpp b/src/gui/kernel/qstylehints.cpp
index 0850228ee5..b2d968c046 100644
--- a/src/gui/kernel/qstylehints.cpp
+++ b/src/gui/kernel/qstylehints.cpp
@@ -79,6 +79,7 @@ public:
, m_tabFocusBehavior(-1)
, m_uiEffects(-1)
, m_wheelScrollLines(-1)
+ , m_mouseQuickSelectionThreshold(-1)
{}
int m_mouseDoubleClickInterval;
@@ -90,6 +91,7 @@ public:
int m_tabFocusBehavior;
int m_uiEffects;
int m_wheelScrollLines;
+ int m_mouseQuickSelectionThreshold;
};
/*!
@@ -537,4 +539,38 @@ void QStyleHints::setWheelScrollLines(int scrollLines)
emit wheelScrollLinesChanged(scrollLines);
}
+/*!
+ Sets the mouse quick selection threshold.
+ \internal
+ \sa mouseQuickSelectionThreshold()
+ \since 5.11
+*/
+void QStyleHints::setMouseQuickSelectionThreshold(int threshold)
+{
+ Q_D(QStyleHints);
+ if (d->m_mouseQuickSelectionThreshold == threshold)
+ return;
+ d->m_mouseQuickSelectionThreshold = threshold;
+ emit mouseDoubleClickIntervalChanged(threshold);
+}
+
+/*!
+ \property QStyleHints::mouseQuickSelectionThreshold
+ \brief Quick selection mouse threshold in QLineEdit.
+
+ This property defines how much the mouse cursor should be moved along the y axis
+ to trigger a quick selection during a normal QLineEdit text selection.
+
+ If the property value is less than or equal to 0, the quick selection feature is disabled.
+
+ \since 5.11
+*/
+int QStyleHints::mouseQuickSelectionThreshold() const
+{
+ Q_D(const QStyleHints);
+ if (d->m_mouseQuickSelectionThreshold >= 0)
+ return d->m_mouseQuickSelectionThreshold;
+ return themeableHint(QPlatformTheme::MouseQuickSelectionThreshold, QPlatformIntegration::MouseQuickSelectionThreshold).toInt();
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qstylehints.h b/src/gui/kernel/qstylehints.h
index 2c2e048b15..7b0683e9b1 100644
--- a/src/gui/kernel/qstylehints.h
+++ b/src/gui/kernel/qstylehints.h
@@ -73,6 +73,7 @@ class Q_GUI_EXPORT QStyleHints : public QObject
Q_PROPERTY(bool singleClickActivation READ singleClickActivation STORED false CONSTANT FINAL)
Q_PROPERTY(bool useHoverEffects READ useHoverEffects WRITE setUseHoverEffects NOTIFY useHoverEffectsChanged FINAL)
Q_PROPERTY(int wheelScrollLines READ wheelScrollLines NOTIFY wheelScrollLinesChanged FINAL)
+ Q_PROPERTY(int mouseQuickSelectionThreshold READ mouseQuickSelectionThreshold WRITE setMouseQuickSelectionThreshold NOTIFY mouseQuickSelectionThresholdChanged FINAL)
public:
void setMouseDoubleClickInterval(int mouseDoubleClickInterval);
@@ -104,6 +105,8 @@ public:
void setUseHoverEffects(bool useHoverEffects);
int wheelScrollLines() const;
void setWheelScrollLines(int scrollLines);
+ void setMouseQuickSelectionThreshold(int threshold);
+ int mouseQuickSelectionThreshold() const;
Q_SIGNALS:
void cursorFlashTimeChanged(int cursorFlashTime);
@@ -115,6 +118,7 @@ Q_SIGNALS:
void tabFocusBehaviorChanged(Qt::TabFocusBehavior tabFocusBehavior);
void useHoverEffectsChanged(bool useHoverEffects);
void wheelScrollLinesChanged(int scrollLines);
+ void mouseQuickSelectionThresholdChanged(int threshold);
private:
friend class QGuiApplication;
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 3e5777ad49..2c7e061bcf 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -2841,7 +2841,7 @@ QDebug operator<<(QDebug debug, const QWindow *window)
}
#endif // !QT_NO_DEBUG_STREAM
-#if QT_CONFIG(vulkan)
+#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
/*!
Associates this window with the specified Vulkan \a instance.
diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h
index 44ff054fa3..439e62d0bd 100644
--- a/src/gui/kernel/qwindow.h
+++ b/src/gui/kernel/qwindow.h
@@ -88,7 +88,7 @@ class QWindowContainer;
#ifndef QT_NO_DEBUG_STREAM
class QDebug;
#endif
-#if QT_CONFIG(vulkan)
+#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
class QVulkanInstance;
#endif
@@ -141,12 +141,12 @@ public:
};
Q_ENUM(AncestorMode)
- explicit QWindow(QScreen *screen = Q_NULLPTR);
+ explicit QWindow(QScreen *screen = nullptr);
explicit QWindow(QWindow *parent);
virtual ~QWindow();
void setSurfaceType(SurfaceType surfaceType);
- SurfaceType surfaceType() const Q_DECL_OVERRIDE;
+ SurfaceType surfaceType() const override;
bool isVisible() const;
@@ -168,7 +168,7 @@ public:
void setModality(Qt::WindowModality modality);
void setFormat(const QSurfaceFormat &format);
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override;
QSurfaceFormat requestedFormat() const;
void setFlags(Qt::WindowFlags flags);
@@ -231,7 +231,7 @@ public:
inline int x() const { return geometry().x(); }
inline int y() const { return geometry().y(); }
- QSize size() const Q_DECL_OVERRIDE { return geometry().size(); }
+ QSize size() const override { return geometry().size(); }
inline QPoint position() const { return geometry().topLeft(); }
void setPosition(const QPoint &pt);
@@ -270,7 +270,7 @@ public:
static QWindow *fromWinId(WId id);
-#if QT_CONFIG(vulkan)
+#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
void setVulkanInstance(QVulkanInstance *instance);
QVulkanInstance *vulkanInstance() const;
#endif
@@ -347,7 +347,7 @@ protected:
virtual void hideEvent(QHideEvent *);
// TODO Qt 6 - add closeEvent virtual handler
- virtual bool event(QEvent *) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *) override;
virtual void keyPressEvent(QKeyEvent *);
virtual void keyReleaseEvent(QKeyEvent *);
virtual void mousePressEvent(QMouseEvent *);
@@ -367,7 +367,7 @@ protected:
private:
Q_PRIVATE_SLOT(d_func(), void _q_clearAlert())
- QPlatformSurface *surfaceHandle() const Q_DECL_OVERRIDE;
+ QPlatformSurface *surfaceHandle() const override;
Q_DISABLE_COPY(QWindow)
@@ -378,14 +378,15 @@ private:
};
#ifndef Q_QDOC
+// should these be seen by clang-qdoc?
template <> inline QWindow *qobject_cast<QWindow*>(QObject *o)
{
- if (!o || !o->isWindowType()) return Q_NULLPTR;
+ if (!o || !o->isWindowType()) return nullptr;
return static_cast<QWindow*>(o);
}
template <> inline const QWindow *qobject_cast<const QWindow*>(const QObject *o)
{
- if (!o || !o->isWindowType()) return Q_NULLPTR;
+ if (!o || !o->isWindowType()) return nullptr;
return static_cast<const QWindow*>(o);
}
#endif // !Q_QDOC
diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp
index 0a30fb78dc..318a280a40 100644
--- a/src/gui/kernel/qwindowsysteminterface.cpp
+++ b/src/gui/kernel/qwindowsysteminterface.cpp
@@ -349,35 +349,79 @@ void QWindowSystemInterface::handleCloseEvent(QWindow *window, bool *accepted)
\a w == 0 means that the event is in global coords only, \a local will be ignored in this case
*/
+#if QT_DEPRECATED_SINCE(5, 11)
QT_DEFINE_QPA_EVENT_HANDLER(void, handleMouseEvent, QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods, Qt::MouseEventSource source)
{
- unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
- handleMouseEvent<Delivery>(window, time, local, global, b, mods, source);
+ handleMouseEvent<Delivery>(window, local, global, b, Qt::NoButton, QEvent::None, mods, source);
}
QT_DEFINE_QPA_EVENT_HANDLER(void, handleMouseEvent, QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods, Qt::MouseEventSource source)
{
- QWindowSystemInterfacePrivate::MouseEvent * e =
- new QWindowSystemInterfacePrivate::MouseEvent(window, timestamp, QHighDpi::fromNativeLocalPosition(local, window), QHighDpi::fromNativePixels(global, window), b, mods, source);
- QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
+ handleMouseEvent<Delivery>(window, timestamp, local, global, b, Qt::NoButton, QEvent::None, mods, source);
}
void QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods, Qt::MouseEventSource source)
{
- const unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
- handleFrameStrutMouseEvent(window, time, local, global, b, mods, source);
+ handleFrameStrutMouseEvent(window, local, global, b, Qt::NoButton, QEvent::None, mods, source);
}
void QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods, Qt::MouseEventSource source)
{
- QWindowSystemInterfacePrivate::MouseEvent * e =
- new QWindowSystemInterfacePrivate::MouseEvent(window, timestamp,
- QWindowSystemInterfacePrivate::FrameStrutMouse,
- QHighDpi::fromNativeLocalPosition(local, window), QHighDpi::fromNativePixels(global, window), b, mods, source);
+ handleFrameStrutMouseEvent(window, timestamp, local, global, b, Qt::NoButton, QEvent::None, mods, source);
+}
+#endif // QT_DEPRECATED_SINCE(5, 11)
+
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleMouseEvent, QWindow *window,
+ const QPointF &local, const QPointF &global, Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type, Qt::KeyboardModifiers mods,
+ Qt::MouseEventSource source)
+{
+ unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
+ handleMouseEvent<Delivery>(window, time, local, global, state, button, type, mods, source);
+}
+
+QT_DEFINE_QPA_EVENT_HANDLER(void, handleMouseEvent, QWindow *window, ulong timestamp,
+ const QPointF &local, const QPointF &global, Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type, Qt::KeyboardModifiers mods,
+ Qt::MouseEventSource source)
+{
+ auto localPos = QHighDpi::fromNativeLocalPosition(local, window);
+ auto globalPos = QHighDpi::fromNativePixels(global, window);
+
+ QWindowSystemInterfacePrivate::MouseEvent *e =
+ new QWindowSystemInterfacePrivate::MouseEvent(window, timestamp, localPos, globalPos,
+ state, mods, button, type, source);
+ QWindowSystemInterfacePrivate::handleWindowSystemEvent<Delivery>(e);
+}
+
+void QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window,
+ const QPointF &local, const QPointF &global,
+ Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type,
+ Qt::KeyboardModifiers mods,
+ Qt::MouseEventSource source)
+{
+ const unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
+ handleFrameStrutMouseEvent(window, time, local, global, state, button, type, mods, source);
+}
+
+void QWindowSystemInterface::handleFrameStrutMouseEvent(QWindow *window, ulong timestamp,
+ const QPointF &local, const QPointF &global,
+ Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type,
+ Qt::KeyboardModifiers mods,
+ Qt::MouseEventSource source)
+{
+ auto localPos = QHighDpi::fromNativeLocalPosition(local, window);
+ auto globalPos = QHighDpi::fromNativePixels(global, window);
+
+ QWindowSystemInterfacePrivate::MouseEvent *e =
+ new QWindowSystemInterfacePrivate::MouseEvent(window, timestamp, localPos, globalPos,
+ state, mods, button, type, source, true);
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
}
@@ -1015,11 +1059,26 @@ bool QWindowSystemInterface::nonUserInputEventsQueued()
// The following functions are used by testlib, and need to be synchronous to avoid
// race conditions with plugins delivering native events from secondary threads.
+// FIXME: It seems unnecessary to export these wrapper functions, when qtestlib could access
+// QWindowSystemInterface directly (by adding dependency to gui-private), see QTBUG-63146.
+
+Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global,
+ Qt::MouseButtons state, Qt::MouseButton button,
+ QEvent::Type type, Qt::KeyboardModifiers mods, int timestamp)
+{
+ const qreal factor = QHighDpiScaling::factor(window);
+ QWindowSystemInterface::handleMouseEvent<QWindowSystemInterface::SynchronousDelivery>(window,
+ timestamp, local * factor, global * factor, state, button, type, mods);
+}
-Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b, Qt::KeyboardModifiers mods, int timestamp)
+// Wrapper for compatibility with Qt < 5.11
+// ### Qt6: Remove
+Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global,
+ Qt::MouseButtons b, Qt::KeyboardModifiers mods, int timestamp)
{
const qreal factor = QHighDpiScaling::factor(window);
- QWindowSystemInterface::handleMouseEvent<QWindowSystemInterface::SynchronousDelivery>(window, timestamp, local * factor, global * factor, b, mods);
+ QWindowSystemInterface::handleMouseEvent<QWindowSystemInterface::SynchronousDelivery>(window,
+ timestamp, local * factor, global * factor, b, Qt::NoButton, QEvent::None, mods);
}
// Wrapper for compatibility with Qt < 5.6
diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h
index bd6416cc95..b22495f9d0 100644
--- a/src/gui/kernel/qwindowsysteminterface.h
+++ b/src/gui/kernel/qwindowsysteminterface.h
@@ -76,20 +76,47 @@ public:
struct AsynchronousDelivery {};
struct DefaultDelivery {};
+#if QT_DEPRECATED_SINCE(5, 11)
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
- static void handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
+ QT_DEPRECATED static void handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods = Qt::NoModifier,
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
- static void handleMouseEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
+ QT_DEPRECATED static void handleMouseEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods = Qt::NoModifier,
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
- static void handleFrameStrutMouseEvent(QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
+
+ QT_DEPRECATED static void handleFrameStrutMouseEvent(QWindow *window, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods = Qt::NoModifier,
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
- static void handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
+ QT_DEPRECATED static void handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointF &local, const QPointF &global, Qt::MouseButtons b,
Qt::KeyboardModifiers mods = Qt::NoModifier,
Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+#endif
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
+ static void handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global,
+ Qt::MouseButtons state, Qt::MouseButton button, QEvent::Type type,
+ Qt::KeyboardModifiers mods = Qt::NoModifier,
+ Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+ template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
+ static void handleMouseEvent(QWindow *window, ulong timestamp, const QPointF &local,
+ const QPointF &global, Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type,
+ Qt::KeyboardModifiers mods = Qt::NoModifier,
+ Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+
+ static void handleFrameStrutMouseEvent(QWindow *window, const QPointF &local,
+ const QPointF &global, Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type,
+ Qt::KeyboardModifiers mods = Qt::NoModifier,
+ Qt::MouseEventSource source =
+ Qt::MouseEventNotSynthesized);
+ static void handleFrameStrutMouseEvent(QWindow *window, ulong timestamp, const QPointF &local,
+ const QPointF &global, Qt::MouseButtons state,
+ Qt::MouseButton button, QEvent::Type type,
+ Qt::KeyboardModifiers mods = Qt::NoModifier,
+ Qt::MouseEventSource source =
+ Qt::MouseEventNotSynthesized);
static bool handleShortcutEvent(QWindow *window, ulong timestamp, int k, Qt::KeyboardModifiers mods, quint32 nativeScanCode,
quint32 nativeVirtualKey, quint32 nativeModifiers, const QString & text = QString(), bool autorep = false, ushort count = 1);
@@ -166,7 +193,7 @@ public:
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleExposeEvent(QWindow *window, const QRegion &region);
- static void handleCloseEvent(QWindow *window, bool *accepted = Q_NULLPTR);
+ static void handleCloseEvent(QWindow *window, bool *accepted = nullptr);
template<typename Delivery = QWindowSystemInterface::DefaultDelivery>
static void handleEnterEvent(QWindow *window, const QPointF &local = QPointF(), const QPointF& global = QPointF());
diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h
index f781d6e3b8..c3fb19d21a 100644
--- a/src/gui/kernel/qwindowsysteminterface_p.h
+++ b/src/gui/kernel/qwindowsysteminterface_p.h
@@ -75,7 +75,7 @@ public:
ActivatedWindow = 0x05,
WindowStateChanged = 0x06,
Mouse = UserInputEvent | 0x07,
- FrameStrutMouse = UserInputEvent | 0x08,
+ FrameStrutMouse = UserInputEvent | 0x08, // ### Qt6 remove
Wheel = UserInputEvent | 0x09,
Key = UserInputEvent | 0x0a,
Touch = UserInputEvent | 0x0b,
@@ -235,18 +235,27 @@ public:
class MouseEvent : public InputEvent {
public:
- MouseEvent(QWindow * w, ulong time, const QPointF &local, const QPointF &global,
- Qt::MouseButtons b, Qt::KeyboardModifiers mods,
- Qt::MouseEventSource src = Qt::MouseEventNotSynthesized)
- : InputEvent(w, time, Mouse, mods), localPos(local), globalPos(global), buttons(b), source(src) { }
- MouseEvent(QWindow * w, ulong time, EventType t, const QPointF &local, const QPointF &global,
- Qt::MouseButtons b, Qt::KeyboardModifiers mods,
- Qt::MouseEventSource src = Qt::MouseEventNotSynthesized)
- : InputEvent(w, time, t, mods), localPos(local), globalPos(global), buttons(b), source(src) { }
+ MouseEvent(QWindow *w, ulong time, const QPointF &local, const QPointF &global,
+ Qt::MouseButtons state, Qt::KeyboardModifiers mods,
+ Qt::MouseButton b, QEvent::Type type,
+ Qt::MouseEventSource src = Qt::MouseEventNotSynthesized, bool frame = false)
+ : InputEvent(w, time, Mouse, mods), localPos(local), globalPos(global), buttons(state),
+ source(src), nonClientArea(frame), button(b), buttonType(type) { }
+
+ // ### In Qt6 this method can be removed as there won't be need for compatibility code path
+ bool enhancedMouseEvent() const
+ {
+ static const bool disableEnhanced = qEnvironmentVariableIsSet("QT_QPA_DISABLE_ENHANCED_MOUSE");
+ return !disableEnhanced && buttonType != QEvent::None;
+ }
+
QPointF localPos;
QPointF globalPos;
Qt::MouseButtons buttons;
Qt::MouseEventSource source;
+ bool nonClientArea;
+ Qt::MouseButton button;
+ QEvent::Type buttonType;
};
class WheelEvent : public InputEvent {
@@ -523,7 +532,7 @@ public:
static QList<QTouchEvent::TouchPoint>
fromNativeTouchPoints(const QList<QWindowSystemInterface::TouchPoint> &points,
- const QWindow *window, quint8 deviceId, QEvent::Type *type = Q_NULLPTR);
+ const QWindow *window, quint8 deviceId, QEvent::Type *type = nullptr);
static QList<QWindowSystemInterface::TouchPoint>
toNativeTouchPoints(const QList<QTouchEvent::TouchPoint>& pointList,
const QWindow *window);
diff --git a/src/gui/math3d/qgenericmatrix.cpp b/src/gui/math3d/qgenericmatrix.cpp
index 95312bcbe4..b144d132d0 100644
--- a/src/gui/math3d/qgenericmatrix.cpp
+++ b/src/gui/math3d/qgenericmatrix.cpp
@@ -61,13 +61,13 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix::QGenericMatrix()
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>::QGenericMatrix()
Constructs a NxM identity matrix.
*/
/*!
- \fn QGenericMatrix::QGenericMatrix(Qt::Initialization)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>::QGenericMatrix(Qt::Initialization)
\since 5.5
\internal
@@ -75,7 +75,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix::QGenericMatrix(const T *values)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>::QGenericMatrix(const T *values)
Constructs a matrix from the given N * M floating-point \a values.
The contents of the array \a values is assumed to be in
@@ -85,21 +85,21 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn const T& QGenericMatrix::operator()(int row, int column) const
+ \fn template <int N, int M, typename T> const T& QGenericMatrix<N, M, T>::operator()(int row, int column) const
Returns a constant reference to the element at position
(\a row, \a column) in this matrix.
*/
/*!
- \fn T& QGenericMatrix::operator()(int row, int column)
+ \fn template <int N, int M, typename T> T& QGenericMatrix<N, M, T>::operator()(int row, int column)
Returns a reference to the element at position (\a row, \a column)
in this matrix so that the element can be assigned to.
*/
/*!
- \fn bool QGenericMatrix::isIdentity() const
+ \fn template <int N, int M, typename T> bool QGenericMatrix<N, M, T>::isIdentity() const
Returns \c true if this matrix is the identity; false otherwise.
@@ -107,7 +107,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn void QGenericMatrix::setToIdentity()
+ \fn template <int N, int M, typename T> void QGenericMatrix<N, M, T>::setToIdentity()
Sets this matrix to the identity.
@@ -115,77 +115,77 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn void QGenericMatrix::fill(T value)
+ \fn template <int N, int M, typename T> void QGenericMatrix<N, M, T>::fill(T value)
Fills all elements of this matrix with \a value.
*/
/*!
- \fn QGenericMatrix<M, N> QGenericMatrix::transposed() const
+ \fn template <int N, int M, typename T> QGenericMatrix<M, N> QGenericMatrix<N, M, T>::transposed() const
Returns this matrix, transposed about its diagonal.
*/
/*!
- \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator+=(const QGenericMatrix<N, M, T>& other)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator+=(const QGenericMatrix<N, M, T>& other)
Adds the contents of \a other to this matrix.
*/
/*!
- \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator-=(const QGenericMatrix<N, M, T>& other)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator-=(const QGenericMatrix<N, M, T>& other)
Subtracts the contents of \a other from this matrix.
*/
/*!
- \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator*=(T factor)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator*=(T factor)
Multiplies all elements of this matrix by \a factor.
*/
/*!
- \fn QGenericMatrix<N, M, T>& QGenericMatrix::operator/=(T divisor)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T>& QGenericMatrix<N, M, T>::operator/=(T divisor)
Divides all elements of this matrix by \a divisor.
*/
/*!
- \fn bool QGenericMatrix::operator==(const QGenericMatrix<N, M, T>& other) const
+ \fn template <int N, int M, typename T> bool QGenericMatrix<N, M, T>::operator==(const QGenericMatrix<N, M, T>& other) const
Returns \c true if this matrix is identical to \a other; false otherwise.
*/
/*!
- \fn bool QGenericMatrix::operator!=(const QGenericMatrix<N, M, T>& other) const
+ \fn template <int N, int M, typename T> bool QGenericMatrix<N, M, T>::operator!=(const QGenericMatrix<N, M, T>& other) const
Returns \c true if this matrix is not identical to \a other; false otherwise.
*/
/*!
- \fn QGenericMatrix<N, M, T> operator+(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T> operator+(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
\relates QGenericMatrix
Returns the sum of \a m1 and \a m2.
*/
/*!
- \fn QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& m1, const QGenericMatrix<N, M, T>& m2)
\relates QGenericMatrix
Returns the difference of \a m1 and \a m2.
*/
/*!
- \fn QGenericMatrix<M1, M2, T> operator*(const QGenericMatrix<N, M2, T>& m1, const QGenericMatrix<M1, N, T>& m2)
+ \fn template<int NN, int M1, int M2, typename TT> QGenericMatrix<M1, M2, TT> operator*(const QGenericMatrix<NN, M2, TT>& m1, const QGenericMatrix<M1, NN, TT>& m2)
\relates QGenericMatrix
- Returns the product of the NxM2 matrix \a m1 and the M1xN matrix \a m2
+ Returns the product of the NNxM2 matrix \a m1 and the M1xNN matrix \a m2
to produce a M1xM2 matrix result.
*/
/*!
- \fn QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& matrix)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T> operator-(const QGenericMatrix<N, M, T>& matrix)
\overload
\relates QGenericMatrix
@@ -193,35 +193,35 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QGenericMatrix<N, M, T> operator*(T factor, const QGenericMatrix<N, M, T>& matrix)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T> operator*(T factor, const QGenericMatrix<N, M, T>& matrix)
\relates QGenericMatrix
Returns the result of multiplying all elements of \a matrix by \a factor.
*/
/*!
- \fn QGenericMatrix<N, M, T> operator*(const QGenericMatrix<N, M, T>& matrix, T factor)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T> operator*(const QGenericMatrix<N, M, T>& matrix, T factor)
\relates QGenericMatrix
Returns the result of multiplying all elements of \a matrix by \a factor.
*/
/*!
- \fn QGenericMatrix<N, M, T> operator/(const QGenericMatrix<N, M, T>& matrix, T divisor)
+ \fn template <int N, int M, typename T> QGenericMatrix<N, M, T> operator/(const QGenericMatrix<N, M, T>& matrix, T divisor)
\relates QGenericMatrix
Returns the result of dividing all elements of \a matrix by \a divisor.
*/
/*!
- \fn void QGenericMatrix::copyDataTo(T *values) const
+ \fn template <int N, int M, typename T> void QGenericMatrix<N, M, T>::copyDataTo(T *values) const
Retrieves the N * M items in this matrix and copies them to \a values
in row-major order.
*/
/*!
- \fn T *QGenericMatrix::data()
+ \fn template <int N, int M, typename T> T *QGenericMatrix<N, M, T>::data()
Returns a pointer to the raw data of this matrix.
@@ -229,7 +229,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn const T *QGenericMatrix::data() const
+ \fn template <int N, int M, typename T> const T *QGenericMatrix<N, M, T>::data() const
Returns a constant pointer to the raw data of this matrix.
@@ -237,7 +237,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn const T *QGenericMatrix::constData() const
+ \fn template <int N, int M, typename T> const T *QGenericMatrix<N, M, T>::constData() const
Returns a constant pointer to the raw data of this matrix.
@@ -247,7 +247,7 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_DATASTREAM
/*!
- \fn QDataStream &operator<<(QDataStream &stream, const QGenericMatrix<N, M, T> &matrix)
+ \fn template <int N, int M, typename T> QDataStream &operator<<(QDataStream &stream, const QGenericMatrix<N, M, T> &matrix)
\relates QGenericMatrix
Writes the given \a matrix to the given \a stream and returns a
@@ -257,7 +257,7 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn QDataStream &operator>>(QDataStream &stream, QGenericMatrix<N, M, T> &matrix)
+ \fn template <int N, int M, typename T> QDataStream &operator>>(QDataStream &stream, QGenericMatrix<N, M, T> &matrix)
\relates QGenericMatrix
Reads a NxM matrix from the given \a stream into the given \a matrix
diff --git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp
index d016f07522..045fa210c4 100644
--- a/src/gui/math3d/qmatrix4x4.cpp
+++ b/src/gui/math3d/qmatrix4x4.cpp
@@ -126,7 +126,7 @@ QMatrix4x4::QMatrix4x4(const float *values)
*/
/*!
- \fn QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, float>& matrix)
+ \fn template <int N, int M> QMatrix4x4::QMatrix4x4(const QGenericMatrix<N, M, float>& matrix)
Constructs a 4x4 matrix from the left-most 4 columns and top-most
4 rows of \a matrix. If \a matrix has less than 4 columns or rows,
@@ -146,7 +146,7 @@ QMatrix4x4::QMatrix4x4(const float *values)
*/
/*!
- \fn QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, float>& matrix)
+ \fn template <int N, int M> QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, float>& matrix)
\relates QMatrix4x4
\obsolete
diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h
index 97df11a8bd..69c3510659 100644
--- a/src/gui/math3d/qmatrix4x4.h
+++ b/src/gui/math3d/qmatrix4x4.h
@@ -93,7 +93,7 @@ public:
inline void fill(float value);
double determinant() const;
- QMatrix4x4 inverted(bool *invertible = Q_NULLPTR) const;
+ QMatrix4x4 inverted(bool *invertible = nullptr) const;
QMatrix4x4 transposed() const;
QMatrix3x3 normalMatrix() const;
diff --git a/src/gui/opengl/qopengl.cpp b/src/gui/opengl/qopengl.cpp
index 7e663d48bb..3a476978e7 100644
--- a/src/gui/opengl/qopengl.cpp
+++ b/src/gui/opengl/qopengl.cpp
@@ -143,7 +143,7 @@ typedef QJsonArray::ConstIterator JsonArrayConstIt;
static inline bool contains(const QJsonArray &haystack, unsigned needle)
{
for (JsonArrayConstIt it = haystack.constBegin(), cend = haystack.constEnd(); it != cend; ++it) {
- if (needle == it->toString().toUInt(Q_NULLPTR, /* base */ 0))
+ if (needle == it->toString().toUInt(nullptr, /* base */ 0))
return true;
}
return false;
@@ -331,7 +331,7 @@ static bool matches(const QJsonObject &object,
const QJsonValue vendorV = object.value(QLatin1String("vendor_id"));
if (vendorV.isString()) {
- if (gpu.vendorId != vendorV.toString().toUInt(Q_NULLPTR, /* base */ 0))
+ if (gpu.vendorId != vendorV.toString().toUInt(nullptr, /* base */ 0))
return false;
} else {
if (object.contains(QLatin1String("gl_vendor"))) {
diff --git a/src/gui/opengl/qopengl.h b/src/gui/opengl/qopengl.h
index f6c350ba0b..b4657fa118 100644
--- a/src/gui/opengl/qopengl.h
+++ b/src/gui/opengl/qopengl.h
@@ -235,10 +235,6 @@ typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#endif /* __arch64__ */
#endif /* __STDC__ */
-#elif defined( __VMS ) || defined(__sgi)
-#include <inttypes.h>
-#elif defined(__SCO__) || defined(__USLC__)
-#include <stdint.h>
#elif defined(__UNIXOS2__) || defined(__SOL64__)
typedef long int int32_t;
typedef long long int int64_t;
diff --git a/src/gui/opengl/qopenglbuffer.h b/src/gui/opengl/qopenglbuffer.h
index f2dfec3bb4..a810783731 100644
--- a/src/gui/opengl/qopenglbuffer.h
+++ b/src/gui/opengl/qopenglbuffer.h
@@ -124,7 +124,7 @@ public:
void write(int offset, const void *data, int count);
void allocate(const void *data, int count);
- inline void allocate(int count) { allocate(Q_NULLPTR, count); }
+ inline void allocate(int count) { allocate(nullptr, count); }
void *map(QOpenGLBuffer::Access access);
void *mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access);
diff --git a/src/gui/opengl/qopengldebug.h b/src/gui/opengl/qopengldebug.h
index 6b10c36291..556ec175e1 100644
--- a/src/gui/opengl/qopengldebug.h
+++ b/src/gui/opengl/qopengldebug.h
@@ -167,7 +167,7 @@ public:
};
Q_ENUM(LoggingMode)
- explicit QOpenGLDebugLogger(QObject *parent = Q_NULLPTR);
+ explicit QOpenGLDebugLogger(QObject *parent = nullptr);
~QOpenGLDebugLogger();
bool initialize();
diff --git a/src/gui/opengl/qopenglengineshadermanager.cpp b/src/gui/opengl/qopenglengineshadermanager.cpp
index 3a94fa8805..2f7afa4a66 100644
--- a/src/gui/opengl/qopenglengineshadermanager.cpp
+++ b/src/gui/opengl/qopenglengineshadermanager.cpp
@@ -69,13 +69,13 @@ public:
delete m_shaders;
}
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
delete m_shaders;
m_shaders = 0;
}
- void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *) override
{
}
diff --git a/src/gui/opengl/qopenglext.h b/src/gui/opengl/qopenglext.h
index b8b0c31f31..856adb679e 100644
--- a/src/gui/opengl/qopenglext.h
+++ b/src/gui/opengl/qopenglext.h
@@ -1405,10 +1405,6 @@ typedef long long int int64_t;
typedef unsigned long long int uint64_t;
#endif /* __arch64__ */
#endif /* __STDC__ */
-#elif defined( __VMS ) || defined(__sgi)
-#include <inttypes.h>
-#elif defined(__SCO__) || defined(__USLC__)
-#include <stdint.h>
#elif defined(__UNIXOS2__) || defined(__SOL64__)
typedef long int int32_t;
typedef long long int int64_t;
diff --git a/src/gui/opengl/qopenglextrafunctions.h b/src/gui/opengl/qopenglextrafunctions.h
index 81716fb8d3..a68e269065 100644
--- a/src/gui/opengl/qopenglextrafunctions.h
+++ b/src/gui/opengl/qopenglextrafunctions.h
@@ -511,7 +511,7 @@ public:
void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
private:
- static bool isInitialized(const QOpenGLExtraFunctionsPrivate *d) { return d != Q_NULLPTR; }
+ static bool isInitialized(const QOpenGLExtraFunctionsPrivate *d) { return d != nullptr; }
};
diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp
index b56bcd0866..469f019a1c 100644
--- a/src/gui/opengl/qopenglframebufferobject.cpp
+++ b/src/gui/opengl/qopenglframebufferobject.cpp
@@ -816,7 +816,7 @@ static inline GLenum effectiveInternalFormat(GLenum internalFormat)
return internalFormat;
}
-/*! \fn QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target)
+/*!
Constructs an OpenGL framebuffer object and binds a 2D OpenGL texture
to the buffer of the size \a size. The texture is bound to the
@@ -847,7 +847,7 @@ QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum tar
d->init(this, size, NoAttachment, target, effectiveInternalFormat(0));
}
-/*! \overload
+/*!
Constructs an OpenGL framebuffer object and binds a 2D OpenGL texture
to the buffer of the given \a width and \a height.
@@ -859,7 +859,7 @@ QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum
{
}
-/*! \overload
+/*!
Constructs an OpenGL framebuffer object of the given \a size based on the
supplied \a format.
@@ -873,7 +873,7 @@ QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpe
format.samples(), format.mipmap());
}
-/*! \overload
+/*!
Constructs an OpenGL framebuffer object of the given \a width and \a height
based on the supplied \a format.
@@ -884,7 +884,7 @@ QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const
{
}
-/*! \overload
+/*!
Constructs an OpenGL framebuffer object and binds a texture to the
buffer of the given \a width and \a height.
@@ -905,7 +905,7 @@ QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, Attach
d->init(this, QSize(width, height), attachment, target, effectiveInternalFormat(internalFormat));
}
-/*! \overload
+/*!
Constructs an OpenGL framebuffer object and binds a texture to the
buffer of the given \a size.
@@ -927,7 +927,6 @@ QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, Attachment
}
/*!
- \fn QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
Destroys the framebuffer object and frees any allocated resources.
*/
@@ -953,7 +952,7 @@ QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
QOpenGLContextPrivate *contextPrv = QOpenGLContextPrivate::get(QOpenGLContext::currentContext());
if (contextPrv && contextPrv->qgl_current_fbo == this) {
contextPrv->qgl_current_fbo_invalid = true;
- contextPrv->qgl_current_fbo = Q_NULLPTR;
+ contextPrv->qgl_current_fbo = nullptr;
}
}
@@ -1116,7 +1115,7 @@ bool QOpenGLFramebufferObject::release()
QOpenGLContextPrivate *contextPrv = QOpenGLContextPrivate::get(current);
contextPrv->qgl_current_fbo_invalid = true;
- contextPrv->qgl_current_fbo = Q_NULLPTR;
+ contextPrv->qgl_current_fbo = nullptr;
}
return true;
@@ -1472,7 +1471,7 @@ bool QOpenGLFramebufferObject::bindDefault()
if (ctx) {
ctx->functions()->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject());
QOpenGLContextPrivate::get(ctx)->qgl_current_fbo_invalid = true;
- QOpenGLContextPrivate::get(ctx)->qgl_current_fbo = Q_NULLPTR;
+ QOpenGLContextPrivate::get(ctx)->qgl_current_fbo = nullptr;
}
#ifdef QT_DEBUG
else
diff --git a/src/gui/opengl/qopenglframebufferobject.h b/src/gui/opengl/qopenglframebufferobject.h
index b9e61e9ee4..161054d1bf 100644
--- a/src/gui/opengl/qopenglframebufferobject.h
+++ b/src/gui/opengl/qopenglframebufferobject.h
@@ -49,8 +49,18 @@
#include <QtCore/qscopedpointer.h>
-QT_BEGIN_NAMESPACE
+#if defined(Q_CLANG_QDOC)
+#undef GLuint
+typedef unsigned int GLuint;
+#undef GLenum
+typedef unsigned int GLenum;
+#undef GL_TEXTURE_2D
+#define GL_TEXTURE_2D 0x0DE1
+#undef GLbitfield
+typedef unsigned int GLbitfield;
+#endif
+QT_BEGIN_NAMESPACE
class QOpenGLFramebufferObjectPrivate;
class QOpenGLFramebufferObjectFormat;
diff --git a/src/gui/opengl/qopenglfunctions.cpp b/src/gui/opengl/qopenglfunctions.cpp
index f2bc357c3a..ff044a91da 100644
--- a/src/gui/opengl/qopenglfunctions.cpp
+++ b/src/gui/opengl/qopenglfunctions.cpp
@@ -216,13 +216,13 @@ struct QOpenGLFunctionsPrivateEx : public QOpenGLExtensionsPrivate, public QOpen
, m_extensions(-1)
{}
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
m_features = -1;
m_extensions = -1;
}
- void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *) override
{
// no gl resources to free
}
@@ -2584,7 +2584,7 @@ QT_OPENGL_IMPLEMENT(QOpenGLFunctionsPrivate, QT_OPENGL_FUNCTIONS)
*/
/*!
- \fn void QOpenGLExtraFunctions::glEndTransformFeedback(void)
+ \fn void QOpenGLExtraFunctions::glEndTransformFeedback()
Convenience function that calls glEndTransformFeedback().
@@ -3091,7 +3091,7 @@ QT_OPENGL_IMPLEMENT(QOpenGLFunctionsPrivate, QT_OPENGL_FUNCTIONS)
*/
/*!
- \fn void QOpenGLExtraFunctions::glPauseTransformFeedback(void)
+ \fn void QOpenGLExtraFunctions::glPauseTransformFeedback()
Convenience function that calls glPauseTransformFeedback().
@@ -3156,7 +3156,7 @@ QT_OPENGL_IMPLEMENT(QOpenGLFunctionsPrivate, QT_OPENGL_FUNCTIONS)
*/
/*!
- \fn void QOpenGLExtraFunctions::glResumeTransformFeedback(void)
+ \fn void QOpenGLExtraFunctions::glResumeTransformFeedback()
Convenience function that calls glResumeTransformFeedback().
diff --git a/src/gui/opengl/qopenglfunctions.h b/src/gui/opengl/qopenglfunctions.h
index 0a5de2c9af..1a43f13d9b 100644
--- a/src/gui/opengl/qopenglfunctions.h
+++ b/src/gui/opengl/qopenglfunctions.h
@@ -227,6 +227,31 @@ struct QOpenGLFunctionsPrivate;
#undef glTexLevelParameteriv
+#if defined(Q_CLANG_QDOC)
+#undef GLint
+typedef int GLint;
+#undef GLsizei
+typedef int GLsizei;
+#undef GLuint
+typedef unsigned int GLuint;
+#undef GLubyte
+typedef unsigned int GLubyte;
+#undef GLenum
+typedef unsigned int GLenum;
+#undef GLbitfield
+typedef unsigned int GLbitfield;
+#undef GLfloat
+typedef float GLfloat;
+#undef GLclampf
+typedef float GLclampf;
+#undef GLboolean
+typedef bool GLboolean;
+#undef GLvoid
+typedef void GLvoid;
+#undef GLchar
+typedef char GLchar;
+#endif
+
class Q_GUI_EXPORT QOpenGLFunctions
{
public:
@@ -413,7 +438,7 @@ public:
protected:
QOpenGLFunctionsPrivate *d_ptr;
- static bool isInitialized(const QOpenGLFunctionsPrivate *d) { return d != Q_NULLPTR; }
+ static bool isInitialized(const QOpenGLFunctionsPrivate *d) { return d != nullptr; }
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLFunctions::OpenGLFeatures)
diff --git a/src/gui/opengl/qopenglfunctions_1_0.h b/src/gui/opengl/qopenglfunctions_1_0.h
index 8284604086..cddb7251ed 100644
--- a/src/gui/opengl/qopenglfunctions_1_0.h
+++ b/src/gui/opengl/qopenglfunctions_1_0.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_1_0();
~QOpenGLFunctions_1_0();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_1_1.h b/src/gui/opengl/qopenglfunctions_1_1.h
index 052d3e93bd..8a9f16ec4c 100644
--- a/src/gui/opengl/qopenglfunctions_1_1.h
+++ b/src/gui/opengl/qopenglfunctions_1_1.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_1_1();
~QOpenGLFunctions_1_1();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_1_2.h b/src/gui/opengl/qopenglfunctions_1_2.h
index 6b36500a79..7daca0923d 100644
--- a/src/gui/opengl/qopenglfunctions_1_2.h
+++ b/src/gui/opengl/qopenglfunctions_1_2.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_1_2();
~QOpenGLFunctions_1_2();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_1_3.h b/src/gui/opengl/qopenglfunctions_1_3.h
index 3ed5851d5d..b527b57946 100644
--- a/src/gui/opengl/qopenglfunctions_1_3.h
+++ b/src/gui/opengl/qopenglfunctions_1_3.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_1_3();
~QOpenGLFunctions_1_3();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_1_4.h b/src/gui/opengl/qopenglfunctions_1_4.h
index 849fad6744..1f3f5a9c0a 100644
--- a/src/gui/opengl/qopenglfunctions_1_4.h
+++ b/src/gui/opengl/qopenglfunctions_1_4.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_1_4();
~QOpenGLFunctions_1_4();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_1_5.h b/src/gui/opengl/qopenglfunctions_1_5.h
index 18914a8957..d2f5311211 100644
--- a/src/gui/opengl/qopenglfunctions_1_5.h
+++ b/src/gui/opengl/qopenglfunctions_1_5.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_1_5();
~QOpenGLFunctions_1_5();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_2_0.cpp b/src/gui/opengl/qopenglfunctions_2_0.cpp
index c175b13c5b..212723aa00 100644
--- a/src/gui/opengl/qopenglfunctions_2_0.cpp
+++ b/src/gui/opengl/qopenglfunctions_2_0.cpp
@@ -79,7 +79,7 @@ QOpenGLFunctions_2_0::QOpenGLFunctions_2_0()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_2_0.h b/src/gui/opengl/qopenglfunctions_2_0.h
index 74a91e0ff0..556597a9b3 100644
--- a/src/gui/opengl/qopenglfunctions_2_0.h
+++ b/src/gui/opengl/qopenglfunctions_2_0.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_2_0();
~QOpenGLFunctions_2_0();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_2_1.cpp b/src/gui/opengl/qopenglfunctions_2_1.cpp
index 4e77efd121..b8b255014c 100644
--- a/src/gui/opengl/qopenglfunctions_2_1.cpp
+++ b/src/gui/opengl/qopenglfunctions_2_1.cpp
@@ -80,7 +80,7 @@ QOpenGLFunctions_2_1::QOpenGLFunctions_2_1()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_2_1.h b/src/gui/opengl/qopenglfunctions_2_1.h
index e9212640f7..f053222c71 100644
--- a/src/gui/opengl/qopenglfunctions_2_1.h
+++ b/src/gui/opengl/qopenglfunctions_2_1.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_2_1();
~QOpenGLFunctions_2_1();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_3_0.cpp b/src/gui/opengl/qopenglfunctions_3_0.cpp
index 09e3ad09ef..4972c03b1e 100644
--- a/src/gui/opengl/qopenglfunctions_3_0.cpp
+++ b/src/gui/opengl/qopenglfunctions_3_0.cpp
@@ -81,8 +81,8 @@ QOpenGLFunctions_3_0::QOpenGLFunctions_3_0()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
- , m_reserved_3_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
+ , m_reserved_3_0_Deprecated(nullptr)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_3_0.h b/src/gui/opengl/qopenglfunctions_3_0.h
index 1082d869d1..c592050c24 100644
--- a/src/gui/opengl/qopenglfunctions_3_0.h
+++ b/src/gui/opengl/qopenglfunctions_3_0.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_3_0();
~QOpenGLFunctions_3_0();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_3_1.h b/src/gui/opengl/qopenglfunctions_3_1.h
index 2691dd29e7..3a8d3891f3 100644
--- a/src/gui/opengl/qopenglfunctions_3_1.h
+++ b/src/gui/opengl/qopenglfunctions_3_1.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_3_1();
~QOpenGLFunctions_3_1();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_3_2_compatibility.cpp b/src/gui/opengl/qopenglfunctions_3_2_compatibility.cpp
index b90a123bfe..709f65edf8 100644
--- a/src/gui/opengl/qopenglfunctions_3_2_compatibility.cpp
+++ b/src/gui/opengl/qopenglfunctions_3_2_compatibility.cpp
@@ -83,8 +83,8 @@ QOpenGLFunctions_3_2_Compatibility::QOpenGLFunctions_3_2_Compatibility()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
- , m_reserved_3_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
+ , m_reserved_3_0_Deprecated(nullptr)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_3_2_compatibility.h b/src/gui/opengl/qopenglfunctions_3_2_compatibility.h
index 9f34190721..391e725953 100644
--- a/src/gui/opengl/qopenglfunctions_3_2_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_3_2_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_3_2_Compatibility();
~QOpenGLFunctions_3_2_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_3_2_core.h b/src/gui/opengl/qopenglfunctions_3_2_core.h
index 2d5ee14bee..1eafb6f441 100644
--- a/src/gui/opengl/qopenglfunctions_3_2_core.h
+++ b/src/gui/opengl/qopenglfunctions_3_2_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_3_2_Core();
~QOpenGLFunctions_3_2_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_3_3_compatibility.cpp b/src/gui/opengl/qopenglfunctions_3_3_compatibility.cpp
index c585f0fc7c..b034391c86 100644
--- a/src/gui/opengl/qopenglfunctions_3_3_compatibility.cpp
+++ b/src/gui/opengl/qopenglfunctions_3_3_compatibility.cpp
@@ -84,7 +84,7 @@ QOpenGLFunctions_3_3_Compatibility::QOpenGLFunctions_3_3_Compatibility()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
, d_3_3_Deprecated(0)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_3_3_compatibility.h b/src/gui/opengl/qopenglfunctions_3_3_compatibility.h
index a5c0cab63c..185dd5aab4 100644
--- a/src/gui/opengl/qopenglfunctions_3_3_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_3_3_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_3_3_Compatibility();
~QOpenGLFunctions_3_3_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_3_3_core.h b/src/gui/opengl/qopenglfunctions_3_3_core.h
index 4f0132d959..47d54d717e 100644
--- a/src/gui/opengl/qopenglfunctions_3_3_core.h
+++ b/src/gui/opengl/qopenglfunctions_3_3_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_3_3_Core();
~QOpenGLFunctions_3_3_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_0_compatibility.cpp b/src/gui/opengl/qopenglfunctions_4_0_compatibility.cpp
index b5c423ef0c..4fe4526efc 100644
--- a/src/gui/opengl/qopenglfunctions_4_0_compatibility.cpp
+++ b/src/gui/opengl/qopenglfunctions_4_0_compatibility.cpp
@@ -85,7 +85,7 @@ QOpenGLFunctions_4_0_Compatibility::QOpenGLFunctions_4_0_Compatibility()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
, d_3_3_Deprecated(0)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_4_0_compatibility.h b/src/gui/opengl/qopenglfunctions_4_0_compatibility.h
index 1fa5e8a361..c0e42443d3 100644
--- a/src/gui/opengl/qopenglfunctions_4_0_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_4_0_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_0_Compatibility();
~QOpenGLFunctions_4_0_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_0_core.h b/src/gui/opengl/qopenglfunctions_4_0_core.h
index 8fd2af2d04..6cb55e86f7 100644
--- a/src/gui/opengl/qopenglfunctions_4_0_core.h
+++ b/src/gui/opengl/qopenglfunctions_4_0_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_0_Core();
~QOpenGLFunctions_4_0_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_1_compatibility.cpp b/src/gui/opengl/qopenglfunctions_4_1_compatibility.cpp
index 72c60c74b7..41ecb4672a 100644
--- a/src/gui/opengl/qopenglfunctions_4_1_compatibility.cpp
+++ b/src/gui/opengl/qopenglfunctions_4_1_compatibility.cpp
@@ -86,7 +86,7 @@ QOpenGLFunctions_4_1_Compatibility::QOpenGLFunctions_4_1_Compatibility()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
, d_3_3_Deprecated(0)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_4_1_compatibility.h b/src/gui/opengl/qopenglfunctions_4_1_compatibility.h
index a284f8e6d3..bee169b50c 100644
--- a/src/gui/opengl/qopenglfunctions_4_1_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_4_1_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_1_Compatibility();
~QOpenGLFunctions_4_1_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_1_core.h b/src/gui/opengl/qopenglfunctions_4_1_core.h
index d35db3c839..3a4fd0743b 100644
--- a/src/gui/opengl/qopenglfunctions_4_1_core.h
+++ b/src/gui/opengl/qopenglfunctions_4_1_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_1_Core();
~QOpenGLFunctions_4_1_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_2_compatibility.cpp b/src/gui/opengl/qopenglfunctions_4_2_compatibility.cpp
index 8398ef0948..fcc049c67b 100644
--- a/src/gui/opengl/qopenglfunctions_4_2_compatibility.cpp
+++ b/src/gui/opengl/qopenglfunctions_4_2_compatibility.cpp
@@ -87,7 +87,7 @@ QOpenGLFunctions_4_2_Compatibility::QOpenGLFunctions_4_2_Compatibility()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
, d_3_3_Deprecated(0)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_4_2_compatibility.h b/src/gui/opengl/qopenglfunctions_4_2_compatibility.h
index 7b45859984..6726d5fc44 100644
--- a/src/gui/opengl/qopenglfunctions_4_2_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_4_2_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_2_Compatibility();
~QOpenGLFunctions_4_2_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_2_core.h b/src/gui/opengl/qopenglfunctions_4_2_core.h
index 80bb33e7d8..a921329741 100644
--- a/src/gui/opengl/qopenglfunctions_4_2_core.h
+++ b/src/gui/opengl/qopenglfunctions_4_2_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_2_Core();
~QOpenGLFunctions_4_2_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_3_compatibility.cpp b/src/gui/opengl/qopenglfunctions_4_3_compatibility.cpp
index 19e67c6331..131ebc810f 100644
--- a/src/gui/opengl/qopenglfunctions_4_3_compatibility.cpp
+++ b/src/gui/opengl/qopenglfunctions_4_3_compatibility.cpp
@@ -88,7 +88,7 @@ QOpenGLFunctions_4_3_Compatibility::QOpenGLFunctions_4_3_Compatibility()
, d_1_2_Deprecated(0)
, d_1_3_Deprecated(0)
, d_1_4_Deprecated(0)
- , m_reserved_2_0_Deprecated(Q_NULLPTR)
+ , m_reserved_2_0_Deprecated(nullptr)
, d_3_3_Deprecated(0)
{
}
diff --git a/src/gui/opengl/qopenglfunctions_4_3_compatibility.h b/src/gui/opengl/qopenglfunctions_4_3_compatibility.h
index 515467a38d..b9d4eb1d6f 100644
--- a/src/gui/opengl/qopenglfunctions_4_3_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_4_3_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_3_Compatibility();
~QOpenGLFunctions_4_3_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_3_core.h b/src/gui/opengl/qopenglfunctions_4_3_core.h
index 4a700c36d7..da552d64af 100644
--- a/src/gui/opengl/qopenglfunctions_4_3_core.h
+++ b/src/gui/opengl/qopenglfunctions_4_3_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_3_Core();
~QOpenGLFunctions_4_3_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_4_compatibility.h b/src/gui/opengl/qopenglfunctions_4_4_compatibility.h
index f2d640cdaf..7a05bd802d 100644
--- a/src/gui/opengl/qopenglfunctions_4_4_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_4_4_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_4_Compatibility();
~QOpenGLFunctions_4_4_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_4_core.h b/src/gui/opengl/qopenglfunctions_4_4_core.h
index bcb7383a9e..6b29a9659b 100644
--- a/src/gui/opengl/qopenglfunctions_4_4_core.h
+++ b/src/gui/opengl/qopenglfunctions_4_4_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_4_Core();
~QOpenGLFunctions_4_4_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_5_compatibility.h b/src/gui/opengl/qopenglfunctions_4_5_compatibility.h
index b164538686..7a97085a85 100644
--- a/src/gui/opengl/qopenglfunctions_4_5_compatibility.h
+++ b/src/gui/opengl/qopenglfunctions_4_5_compatibility.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_5_Compatibility();
~QOpenGLFunctions_4_5_Compatibility();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_4_5_core.h b/src/gui/opengl/qopenglfunctions_4_5_core.h
index 0940d8cf61..bb1b17f7b1 100644
--- a/src/gui/opengl/qopenglfunctions_4_5_core.h
+++ b/src/gui/opengl/qopenglfunctions_4_5_core.h
@@ -65,7 +65,7 @@ public:
QOpenGLFunctions_4_5_Core();
~QOpenGLFunctions_4_5_Core();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL 1.0 core functions
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
diff --git a/src/gui/opengl/qopenglfunctions_es2.h b/src/gui/opengl/qopenglfunctions_es2.h
index 3b7d2806ea..851eb5951b 100644
--- a/src/gui/opengl/qopenglfunctions_es2.h
+++ b/src/gui/opengl/qopenglfunctions_es2.h
@@ -57,7 +57,7 @@ public:
QOpenGLFunctions_ES2();
~QOpenGLFunctions_ES2();
- bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;
+ bool initializeOpenGLFunctions() override;
// OpenGL ES2 core functions
void glActiveTexture(GLenum texture);
diff --git a/src/gui/opengl/qopenglgradientcache_p.h b/src/gui/opengl/qopenglgradientcache_p.h
index a2ed85c061..cbdbbb0c54 100644
--- a/src/gui/opengl/qopenglgradientcache_p.h
+++ b/src/gui/opengl/qopenglgradientcache_p.h
@@ -85,8 +85,8 @@ public:
GLuint getBuffer(const QGradient &gradient, qreal opacity);
inline int paletteSize() const { return 1024; }
- void invalidateResource() Q_DECL_OVERRIDE;
- void freeResource(QOpenGLContext *ctx) Q_DECL_OVERRIDE;
+ void invalidateResource() override;
+ void freeResource(QOpenGLContext *ctx) override;
private:
inline int maxCacheSize() const { return 60; }
diff --git a/src/gui/opengl/qopenglpaintdevice.cpp b/src/gui/opengl/qopenglpaintdevice.cpp
index e539ee0e31..3a0c02feb0 100644
--- a/src/gui/opengl/qopenglpaintdevice.cpp
+++ b/src/gui/opengl/qopenglpaintdevice.cpp
@@ -96,7 +96,7 @@ QT_BEGIN_NAMESPACE
When intermixing QPainter and OpenGL, it is important to notify
QPainter that the OpenGL state may have been cluttered so it can
- restore its internal state. This is acheived by calling \l
+ restore its internal state. This is achieved by calling \l
QPainter::beginNativePainting() before starting the OpenGL
rendering and calling \l QPainter::endNativePainting() after
finishing.
diff --git a/src/gui/opengl/qopenglpaintengine_p.h b/src/gui/opengl/qopenglpaintengine_p.h
index 679b3c0557..0541ce6168 100644
--- a/src/gui/opengl/qopenglpaintengine_p.h
+++ b/src/gui/opengl/qopenglpaintengine_p.h
@@ -116,37 +116,37 @@ public:
QOpenGL2PaintEngineEx();
~QOpenGL2PaintEngineEx();
- bool begin(QPaintDevice *device) Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *device) override;
void ensureActive();
- bool end() Q_DECL_OVERRIDE;
-
- virtual void clipEnabledChanged() Q_DECL_OVERRIDE;
- virtual void penChanged() Q_DECL_OVERRIDE;
- virtual void brushChanged() Q_DECL_OVERRIDE;
- virtual void brushOriginChanged() Q_DECL_OVERRIDE;
- virtual void opacityChanged() Q_DECL_OVERRIDE;
- virtual void compositionModeChanged() Q_DECL_OVERRIDE;
- virtual void renderHintsChanged() Q_DECL_OVERRIDE;
- virtual void transformChanged() Q_DECL_OVERRIDE;
-
- virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
+ bool end() override;
+
+ virtual void clipEnabledChanged() override;
+ virtual void penChanged() override;
+ virtual void brushChanged() override;
+ virtual void brushOriginChanged() override;
+ virtual void opacityChanged() override;
+ virtual void compositionModeChanged() override;
+ virtual void renderHintsChanged() override;
+ virtual void transformChanged() override;
+
+ virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
virtual void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap,
- QPainter::PixmapFragmentHints hints) Q_DECL_OVERRIDE;
+ QPainter::PixmapFragmentHints hints) override;
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- virtual void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
- virtual void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
- virtual void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
- virtual void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ virtual void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
+ virtual void fill(const QVectorPath &path, const QBrush &brush) override;
+ virtual void stroke(const QVectorPath &path, const QPen &pen) override;
+ virtual void clip(const QVectorPath &path, Qt::ClipOperation op) override;
- virtual void drawStaticTextItem(QStaticTextItem *textItem) Q_DECL_OVERRIDE;
+ virtual void drawStaticTextItem(QStaticTextItem *textItem) override;
bool drawTexture(const QRectF &r, GLuint textureId, const QSize &size, const QRectF &sr);
- Type type() const Q_DECL_OVERRIDE { return OpenGL2; }
+ Type type() const override { return OpenGL2; }
- virtual void setState(QPainterState *s) Q_DECL_OVERRIDE;
- virtual QPainterState *createState(QPainterState *orig) const Q_DECL_OVERRIDE;
+ virtual void setState(QPainterState *s) override;
+ virtual QPainterState *createState(QPainterState *orig) const override;
inline QOpenGL2PaintEngineState *state() {
return static_cast<QOpenGL2PaintEngineState *>(QPaintEngineEx::state());
}
@@ -154,16 +154,16 @@ public:
return static_cast<const QOpenGL2PaintEngineState *>(QPaintEngineEx::state());
}
- void beginNativePainting() Q_DECL_OVERRIDE;
- void endNativePainting() Q_DECL_OVERRIDE;
+ void beginNativePainting() override;
+ void endNativePainting() override;
void invalidateState();
void setRenderTextActive(bool);
bool isNativePaintingActive() const;
- bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE { return false; }
- bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE;
+ bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const override { return false; }
+ bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const override;
private:
Q_DISABLE_COPY(QOpenGL2PaintEngineEx)
@@ -265,7 +265,7 @@ public:
void updateClipScissorTest();
void setScissor(const QRect &rect);
void regenerateClip();
- void systemStateChanged() Q_DECL_OVERRIDE;
+ void systemStateChanged() override;
void setVertexAttribArrayEnabled(int arrayIndex, bool enabled = true);
void syncGlState();
diff --git a/src/gui/opengl/qopenglshaderprogram.cpp b/src/gui/opengl/qopenglshaderprogram.cpp
index cc8af16bfe..b044397f8e 100644
--- a/src/gui/opengl/qopenglshaderprogram.cpp
+++ b/src/gui/opengl/qopenglshaderprogram.cpp
@@ -562,7 +562,7 @@ static QVersionDirectivePosition findVersionDirectivePosition(const char *source
break;
}
state = Normal;
- // fall through
+ Q_FALLTHROUGH();
case Normal:
if (*c == '/')
state = CommentStarting;
diff --git a/src/gui/opengl/qopenglshaderprogram.h b/src/gui/opengl/qopenglshaderprogram.h
index fd4d82ecf9..84eb8d6956 100644
--- a/src/gui/opengl/qopenglshaderprogram.h
+++ b/src/gui/opengl/qopenglshaderprogram.h
@@ -79,7 +79,7 @@ public:
};
Q_DECLARE_FLAGS(ShaderType, ShaderTypeBit)
- explicit QOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent = Q_NULLPTR);
+ explicit QOpenGLShader(QOpenGLShader::ShaderType type, QObject *parent = nullptr);
virtual ~QOpenGLShader();
QOpenGLShader::ShaderType shaderType() const;
@@ -96,7 +96,7 @@ public:
GLuint shaderId() const;
- static bool hasOpenGLShaders(ShaderType type, QOpenGLContext *context = Q_NULLPTR);
+ static bool hasOpenGLShaders(ShaderType type, QOpenGLContext *context = nullptr);
private:
friend class QOpenGLShaderProgram;
@@ -114,7 +114,7 @@ class Q_GUI_EXPORT QOpenGLShaderProgram : public QObject
{
Q_OBJECT
public:
- explicit QOpenGLShaderProgram(QObject *parent = Q_NULLPTR);
+ explicit QOpenGLShaderProgram(QObject *parent = nullptr);
virtual ~QOpenGLShaderProgram();
bool addShader(QOpenGLShader *shader);
@@ -306,7 +306,7 @@ public:
void setUniformValueArray(const char *name, const QMatrix4x3 *values, int count);
void setUniformValueArray(const char *name, const QMatrix4x4 *values, int count);
- static bool hasOpenGLShaderPrograms(QOpenGLContext *context = Q_NULLPTR);
+ static bool hasOpenGLShaderPrograms(QOpenGLContext *context = nullptr);
private Q_SLOTS:
void shaderDestroyed();
diff --git a/src/gui/opengl/qopengltexture.cpp b/src/gui/opengl/qopengltexture.cpp
index 3563f1b5d3..b825b56d45 100644
--- a/src/gui/opengl/qopengltexture.cpp
+++ b/src/gui/opengl/qopengltexture.cpp
@@ -778,6 +778,8 @@ static QOpenGLTexture::PixelFormat pixelFormatCompatibleWithInternalFormat(QOpen
return QOpenGLTexture::Alpha;
case QOpenGLTexture::RGBFormat:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBAFormat:
return QOpenGLTexture::RGBA;
diff --git a/src/gui/opengl/qopengltexture.h b/src/gui/opengl/qopengltexture.h
index 12d9b91603..c0c5283374 100644
--- a/src/gui/opengl/qopengltexture.h
+++ b/src/gui/opengl/qopengltexture.h
@@ -459,60 +459,60 @@ public:
#if QT_DEPRECATED_SINCE(5, 3)
QT_DEPRECATED void setData(int mipLevel, int layer, CubeMapFace cubeFace,
PixelFormat sourceFormat, PixelType sourceType,
- void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
QT_DEPRECATED void setData(int mipLevel, int layer,
PixelFormat sourceFormat, PixelType sourceType,
- void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
QT_DEPRECATED void setData(int mipLevel,
PixelFormat sourceFormat, PixelType sourceType,
- void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
QT_DEPRECATED void setData(PixelFormat sourceFormat, PixelType sourceType,
- void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
#endif // QT_DEPRECATED_SINCE(5, 3)
void setData(int mipLevel, int layer, CubeMapFace cubeFace,
PixelFormat sourceFormat, PixelType sourceType,
- const void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
void setData(int mipLevel, int layer, int layerCount, CubeMapFace cubeFace,
PixelFormat sourceFormat, PixelType sourceType,
- const void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
void setData(int mipLevel, int layer,
PixelFormat sourceFormat, PixelType sourceType,
- const void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
void setData(int mipLevel,
PixelFormat sourceFormat, PixelType sourceType,
- const void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
void setData(PixelFormat sourceFormat, PixelType sourceType,
- const void *data, const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const void *data, const QOpenGLPixelTransferOptions * const options = nullptr);
// Compressed data upload
// ### Qt 6: remove the non-const void * overloads
#if QT_DEPRECATED_SINCE(5, 3)
QT_DEPRECATED void setCompressedData(int mipLevel, int layer, CubeMapFace cubeFace,
int dataSize, void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
QT_DEPRECATED void setCompressedData(int mipLevel, int layer,
int dataSize, void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
QT_DEPRECATED void setCompressedData(int mipLevel, int dataSize, void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
QT_DEPRECATED void setCompressedData(int dataSize, void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
#endif // QT_DEPRECATED_SINCE(5, 3)
void setCompressedData(int mipLevel, int layer, CubeMapFace cubeFace,
int dataSize, const void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
void setCompressedData(int mipLevel, int layer, int layerCount, CubeMapFace cubeFace,
int dataSize, const void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
void setCompressedData(int mipLevel, int layer,
int dataSize, const void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
void setCompressedData(int mipLevel, int dataSize, const void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
void setCompressedData(int dataSize, const void *data,
- const QOpenGLPixelTransferOptions * const options = Q_NULLPTR);
+ const QOpenGLPixelTransferOptions * const options = nullptr);
// Helpful overloads for setData
void setData(const QImage& image, MipMapGeneration genMipMaps = GenerateMipMaps);
diff --git a/src/gui/opengl/qopengltexturecache_p.h b/src/gui/opengl/qopengltexturecache_p.h
index 4a438c8d95..b9d7df91e3 100644
--- a/src/gui/opengl/qopengltexturecache_p.h
+++ b/src/gui/opengl/qopengltexturecache_p.h
@@ -82,8 +82,8 @@ public:
void invalidate(qint64 key);
- void invalidateResource() Q_DECL_OVERRIDE;
- void freeResource(QOpenGLContext *ctx) Q_DECL_OVERRIDE;
+ void invalidateResource() override;
+ void freeResource(QOpenGLContext *ctx) override;
private:
GLuint bindTexture(QOpenGLContext *context, qint64 key, const QImage &image, QOpenGLTextureCache::BindOptions options);
diff --git a/src/gui/opengl/qopengltextureglyphcache_p.h b/src/gui/opengl/qopengltextureglyphcache_p.h
index 6a1550dbed..0b7b5f6082 100644
--- a/src/gui/opengl/qopengltextureglyphcache_p.h
+++ b/src/gui/opengl/qopengltextureglyphcache_p.h
@@ -81,7 +81,7 @@ public:
#endif
}
- void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *context) override
{
QOpenGLContext *ctx = context;
#ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG
@@ -93,7 +93,7 @@ public:
ctx->functions()->glDeleteTextures(1, &m_texture);
}
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
m_texture = 0;
m_fbo = 0;
@@ -113,12 +113,12 @@ public:
QOpenGLTextureGlyphCache(QFontEngine::GlyphFormat glyphFormat, const QTransform &matrix);
~QOpenGLTextureGlyphCache();
- virtual void createTextureData(int width, int height) Q_DECL_OVERRIDE;
- virtual void resizeTextureData(int width, int height) Q_DECL_OVERRIDE;
- virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
- virtual int glyphPadding() const Q_DECL_OVERRIDE;
- virtual int maxTextureWidth() const Q_DECL_OVERRIDE;
- virtual int maxTextureHeight() const Q_DECL_OVERRIDE;
+ virtual void createTextureData(int width, int height) override;
+ virtual void resizeTextureData(int width, int height) override;
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) override;
+ virtual int glyphPadding() const override;
+ virtual int maxTextureWidth() const override;
+ virtual int maxTextureHeight() const override;
inline GLuint texture() const {
QOpenGLTextureGlyphCache *that = const_cast<QOpenGLTextureGlyphCache *>(this);
diff --git a/src/gui/opengl/qopengltimerquery.h b/src/gui/opengl/qopengltimerquery.h
index 7b9ab850e2..27da74a3fb 100644
--- a/src/gui/opengl/qopengltimerquery.h
+++ b/src/gui/opengl/qopengltimerquery.h
@@ -56,7 +56,7 @@ class Q_GUI_EXPORT QOpenGLTimerQuery : public QObject
Q_OBJECT
public:
- explicit QOpenGLTimerQuery(QObject *parent = Q_NULLPTR);
+ explicit QOpenGLTimerQuery(QObject *parent = nullptr);
~QOpenGLTimerQuery();
bool create();
@@ -84,7 +84,7 @@ class Q_GUI_EXPORT QOpenGLTimeMonitor : public QObject
Q_OBJECT
public:
- explicit QOpenGLTimeMonitor(QObject *parent = Q_NULLPTR);
+ explicit QOpenGLTimeMonitor(QObject *parent = nullptr);
~QOpenGLTimeMonitor();
void setSampleCount(int sampleCount);
diff --git a/src/gui/opengl/qopenglversionfunctions.h b/src/gui/opengl/qopenglversionfunctions.h
index 63209cf392..3af1ed0466 100644
--- a/src/gui/opengl/qopenglversionfunctions.h
+++ b/src/gui/opengl/qopenglversionfunctions.h
@@ -193,7 +193,7 @@ class QAbstractOpenGLFunctionsPrivate
{
public:
QAbstractOpenGLFunctionsPrivate()
- : owningContext(Q_NULLPTR),
+ : owningContext(nullptr),
initialized(false)
{}
diff --git a/src/gui/opengl/qopenglvertexarrayobject.h b/src/gui/opengl/qopenglvertexarrayobject.h
index a8153ea40b..b81ae6a2a9 100644
--- a/src/gui/opengl/qopenglvertexarrayobject.h
+++ b/src/gui/opengl/qopenglvertexarrayobject.h
@@ -56,7 +56,7 @@ class Q_GUI_EXPORT QOpenGLVertexArrayObject : public QObject
Q_OBJECT
public:
- explicit QOpenGLVertexArrayObject(QObject* parent = Q_NULLPTR);
+ explicit QOpenGLVertexArrayObject(QObject* parent = nullptr);
~QOpenGLVertexArrayObject();
bool create();
diff --git a/src/gui/opengl/qopenglvertexarrayobject_p.h b/src/gui/opengl/qopenglvertexarrayobject_p.h
index 937921765b..fd3a6f0f89 100644
--- a/src/gui/opengl/qopenglvertexarrayobject_p.h
+++ b/src/gui/opengl/qopenglvertexarrayobject_p.h
@@ -70,10 +70,10 @@ class QOpenGLVertexArrayObjectHelper
public:
explicit inline QOpenGLVertexArrayObjectHelper(QOpenGLContext *context)
- : GenVertexArrays(Q_NULLPTR)
- , DeleteVertexArrays(Q_NULLPTR)
- , BindVertexArray(Q_NULLPTR)
- , IsVertexArray(Q_NULLPTR)
+ : GenVertexArrays(nullptr)
+ , DeleteVertexArrays(nullptr)
+ , BindVertexArray(nullptr)
+ , IsVertexArray(nullptr)
{
qtInitializeVertexArrayObjectHelper(this, context);
}
diff --git a/src/gui/painting/qcolor.h b/src/gui/painting/qcolor.h
index 0c5ebcbda9..f7a9e9db59 100644
--- a/src/gui/painting/qcolor.h
+++ b/src/gui/painting/qcolor.h
@@ -129,10 +129,10 @@ public:
void setGreenF(qreal green);
void setBlueF(qreal blue);
- void getRgb(int *r, int *g, int *b, int *a = Q_NULLPTR) const;
+ void getRgb(int *r, int *g, int *b, int *a = nullptr) const;
void setRgb(int r, int g, int b, int a = 255);
- void getRgbF(qreal *r, qreal *g, qreal *b, qreal *a = Q_NULLPTR) const;
+ void getRgbF(qreal *r, qreal *g, qreal *b, qreal *a = nullptr) const;
void setRgbF(qreal r, qreal g, qreal b, qreal a = 1.0);
QRgba64 rgba64() const Q_DECL_NOTHROW;
@@ -156,10 +156,10 @@ public:
qreal hsvSaturationF() const Q_DECL_NOTHROW;
qreal valueF() const Q_DECL_NOTHROW;
- void getHsv(int *h, int *s, int *v, int *a = Q_NULLPTR) const;
+ void getHsv(int *h, int *s, int *v, int *a = nullptr) const;
void setHsv(int h, int s, int v, int a = 255);
- void getHsvF(qreal *h, qreal *s, qreal *v, qreal *a = Q_NULLPTR) const;
+ void getHsvF(qreal *h, qreal *s, qreal *v, qreal *a = nullptr) const;
void setHsvF(qreal h, qreal s, qreal v, qreal a = 1.0);
int cyan() const Q_DECL_NOTHROW;
@@ -172,10 +172,10 @@ public:
qreal yellowF() const Q_DECL_NOTHROW;
qreal blackF() const Q_DECL_NOTHROW;
- void getCmyk(int *c, int *m, int *y, int *k, int *a = Q_NULLPTR);
+ void getCmyk(int *c, int *m, int *y, int *k, int *a = nullptr);
void setCmyk(int c, int m, int y, int k, int a = 255);
- void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a = Q_NULLPTR);
+ void getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a = nullptr);
void setCmykF(qreal c, qreal m, qreal y, qreal k, qreal a = 1.0);
int hslHue() const Q_DECL_NOTHROW; // 0 <= hue < 360
@@ -186,10 +186,10 @@ public:
qreal hslSaturationF() const Q_DECL_NOTHROW;
qreal lightnessF() const Q_DECL_NOTHROW;
- void getHsl(int *h, int *s, int *l, int *a = Q_NULLPTR) const;
+ void getHsl(int *h, int *s, int *l, int *a = nullptr) const;
void setHsl(int h, int s, int l, int a = 255);
- void getHslF(qreal *h, qreal *s, qreal *l, qreal *a = Q_NULLPTR) const;
+ void getHslF(qreal *h, qreal *s, qreal *l, qreal *a = nullptr) const;
void setHslF(qreal h, qreal s, qreal l, qreal a = 1.0);
QColor toRgb() const Q_DECL_NOTHROW;
diff --git a/src/gui/painting/qcompositionfunctions.cpp b/src/gui/painting/qcompositionfunctions.cpp
index ee05f810f1..339a9749b8 100644
--- a/src/gui/painting/qcompositionfunctions.cpp
+++ b/src/gui/painting/qcompositionfunctions.cpp
@@ -38,16 +38,11 @@
****************************************************************************/
#include <qglobal.h>
-#include <private/qdrawhelper_p.h>
-#include <private/qrgba64_p.h>
+#include "qdrawhelper_p.h"
+#include "qrgba64_p.h"
QT_BEGIN_NAMESPACE
-# define PRELOAD_INIT(x)
-# define PRELOAD_INIT2(x,y)
-# define PRELOAD_COND(x)
-# define PRELOAD_COND2(x,y)
-
/* The constant alpha factor describes an alpha factor that gets applied
to the result of the composition operation combining it with the destination.
@@ -69,24 +64,6 @@ QT_BEGIN_NAMESPACE
where the source is an array of pixels.
*/
-/*
- result = 0
- d = d * cia
-*/
-#define comp_func_Clear_impl(dest, length, const_alpha)\
-{\
- if (const_alpha == 255) {\
- QT_MEMFILL_UINT(dest, length, 0);\
- } else {\
- int ialpha = 255 - const_alpha;\
- PRELOAD_INIT(dest)\
- for (int i = 0; i < length; ++i) {\
- PRELOAD_COND(dest)\
- dest[i] = BYTE_MUL(dest[i], ialpha);\
- }\
- }\
-}
-
#if defined __SSE2__
# define LOAD(ptr) _mm_loadl_epi64(reinterpret_cast<const __m128i *>(ptr))
#ifdef Q_PROCESSOR_X86_64
@@ -117,38 +94,41 @@ QT_BEGIN_NAMESPACE
# define INVALPHA(c) (65535 - ALPHA(c))
#endif
+
+/*
+ result = 0
+ d = d * cia
+*/
void QT_FASTCALL comp_func_solid_Clear(uint *dest, int length, uint, uint const_alpha)
{
- comp_func_Clear_impl(dest, length, const_alpha);
+ if (const_alpha == 255) {
+ qt_memfill32(dest, 0, length);
+ } else {
+ uint ialpha = 255 - const_alpha;
+ for (int i = 0; i < length; ++i)
+ dest[i] = BYTE_MUL(dest[i], ialpha);
+ }
}
void QT_FASTCALL comp_func_solid_Clear_rgb64(QRgba64 *dest, int length, QRgba64, uint const_alpha)
{
- if (const_alpha == 255)
+ if (const_alpha == 255) {
qt_memfill64((quint64*)dest, 0, length);
- else {
- int ialpha = 255 - const_alpha;
- for (int i = 0; i < length; ++i) {
+ } else {
+ uint ialpha = 255 - const_alpha;
+ for (int i = 0; i < length; ++i)
STORE(&dest[i], multiplyAlpha255(LOAD(&dest[i]), ialpha));
- }
}
}
void QT_FASTCALL comp_func_Clear(uint *dest, const uint *, int length, uint const_alpha)
{
- comp_func_Clear_impl(dest, length, const_alpha);
+ comp_func_solid_Clear(dest, length, 0, const_alpha);
}
void QT_FASTCALL comp_func_Clear_rgb64(QRgba64 *dest, const QRgba64 *, int length, uint const_alpha)
{
- if (const_alpha == 255)
- qt_memfill64((quint64*)dest, 0, length);
- else {
- int ialpha = 255 - const_alpha;
- for (int i = 0; i < length; ++i) {
- STORE(&dest[i], multiplyAlpha255(LOAD(&dest[i]), ialpha));
- }
- }
+ comp_func_solid_Clear_rgb64(dest, length, QRgba64(), const_alpha);
}
/*
@@ -158,13 +138,11 @@ void QT_FASTCALL comp_func_Clear_rgb64(QRgba64 *dest, const QRgba64 *, int lengt
void QT_FASTCALL comp_func_solid_Source(uint *dest, int length, uint color, uint const_alpha)
{
if (const_alpha == 255) {
- QT_MEMFILL_UINT(dest, length, color);
+ qt_memfill32(dest, color, length);
} else {
- int ialpha = 255 - const_alpha;
+ uint ialpha = 255 - const_alpha;
color = BYTE_MUL(color, const_alpha);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = color + BYTE_MUL(dest[i], ialpha);
}
}
@@ -175,7 +153,7 @@ void QT_FASTCALL comp_func_solid_Source_rgb64(QRgba64 *dest, int length, QRgba64
if (const_alpha == 255)
qt_memfill64((quint64*)dest, color, length);
else {
- int ialpha = 255 - const_alpha;
+ uint ialpha = 255 - const_alpha;
auto c = multiplyAlpha255(CONVERT(color), const_alpha);
for (int i = 0; i < length; ++i) {
STORE(&dest[i], ADD(c, multiplyAlpha255(LOAD(&dest[i]), ialpha)));
@@ -186,12 +164,10 @@ void QT_FASTCALL comp_func_solid_Source_rgb64(QRgba64 *dest, int length, QRgba64
void QT_FASTCALL comp_func_Source(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
if (const_alpha == 255) {
- ::memcpy(dest, src, length * sizeof(uint));
+ ::memcpy(dest, src, size_t(length) * sizeof(uint));
} else {
- int ialpha = 255 - const_alpha;
- PRELOAD_INIT2(dest, src)
+ uint ialpha = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
dest[i] = INTERPOLATE_PIXEL_255(src[i], const_alpha, dest[i], ialpha);
}
}
@@ -200,9 +176,9 @@ void QT_FASTCALL comp_func_Source(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL
void QT_FASTCALL comp_func_Source_rgb64(QRgba64 *Q_DECL_RESTRICT dest, const QRgba64 *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
if (const_alpha == 255)
- ::memcpy(dest, src, length * sizeof(quint64));
+ ::memcpy(dest, src, size_t(length) * sizeof(quint64));
else {
- int ialpha = 255 - const_alpha;
+ uint ialpha = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
STORE(&dest[i], interpolate255(LOAD(&src[i]), const_alpha, LOAD(&dest[i]), ialpha));
}
@@ -234,13 +210,11 @@ void QT_FASTCALL comp_func_Destination_rgb64(QRgba64 *, const QRgba64 *, int, ui
void QT_FASTCALL comp_func_solid_SourceOver(uint *dest, int length, uint color, uint const_alpha)
{
if ((const_alpha & qAlpha(color)) == 255) {
- QT_MEMFILL_UINT(dest, length, color);
+ qt_memfill32(dest, color, length);
} else {
if (const_alpha != 255)
color = BYTE_MUL(color, const_alpha);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = color + BYTE_MUL(dest[i], qAlpha(~color));
}
}
@@ -263,10 +237,8 @@ void QT_FASTCALL comp_func_solid_SourceOver_rgb64(QRgba64 *dest, int length, QRg
void QT_FASTCALL comp_func_SourceOver(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = src[i];
if (s >= 0xff000000)
dest[i] = s;
@@ -275,7 +247,6 @@ void QT_FASTCALL comp_func_SourceOver(uint *Q_DECL_RESTRICT dest, const uint *Q_
}
} else {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = BYTE_MUL(src[i], const_alpha);
dest[i] = s + BYTE_MUL(dest[i], qAlpha(~s));
}
@@ -309,9 +280,7 @@ void QT_FASTCALL comp_func_solid_DestinationOver(uint *dest, int length, uint co
{
if (const_alpha != 255)
color = BYTE_MUL(color, const_alpha);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
dest[i] = d + BYTE_MUL(color, qAlpha(~d));
}
@@ -330,16 +299,13 @@ void QT_FASTCALL comp_func_solid_DestinationOver_rgb64(QRgba64 *dest, int length
void QT_FASTCALL comp_func_DestinationOver(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
dest[i] = d + BYTE_MUL(src[i], qAlpha(~d));
}
} else {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = BYTE_MUL(src[i], const_alpha);
dest[i] = d + BYTE_MUL(s, qAlpha(~d));
@@ -369,17 +335,14 @@ void QT_FASTCALL comp_func_DestinationOver_rgb64(QRgba64 *Q_DECL_RESTRICT dest,
*/
void QT_FASTCALL comp_func_solid_SourceIn(uint *dest, int length, uint color, uint const_alpha)
{
- PRELOAD_INIT(dest)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = BYTE_MUL(color, qAlpha(dest[i]));
}
} else {
color = BYTE_MUL(color, const_alpha);
uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(d), d, cia);
}
@@ -389,32 +352,30 @@ void QT_FASTCALL comp_func_solid_SourceIn(uint *dest, int length, uint color, ui
void QT_FASTCALL comp_func_solid_SourceIn_rgb64(QRgba64 *dest, int length, QRgba64 color, uint const_alpha)
{
if (const_alpha == 255) {
+ auto c = CONVERT(color);
for (int i = 0; i < length; ++i) {
- dest[i] = multiplyAlpha65535(color, dest[i].alpha());
+ STORE(&dest[i], multiplyAlpha65535(c, dest[i].alpha()));
}
} else {
uint ca = const_alpha * 257;
- uint cia = 65535 - ca;
- color = multiplyAlpha65535(color, ca);
+ auto cia = CONST(65535 - ca);
+ auto c = multiplyAlpha65535(CONVERT(color), ca);
for (int i = 0; i < length; ++i) {
- QRgba64 d = dest[i];
- dest[i] = interpolate65535(color, d.alpha(), d, cia);
+ auto d = LOAD(&dest[i]);
+ STORE(&dest[i], interpolate65535(c, ALPHA(d), d, cia));
}
}
}
void QT_FASTCALL comp_func_SourceIn(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
dest[i] = BYTE_MUL(src[i], qAlpha(dest[i]));
}
} else {
uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = BYTE_MUL(src[i], const_alpha);
dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(d), d, cia);
@@ -450,9 +411,7 @@ void QT_FASTCALL comp_func_solid_DestinationIn(uint *dest, int length, uint colo
if (const_alpha != 255) {
a = BYTE_MUL(a, const_alpha) + 255 - const_alpha;
}
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = BYTE_MUL(dest[i], a);
}
}
@@ -470,16 +429,13 @@ void QT_FASTCALL comp_func_solid_DestinationIn_rgb64(QRgba64 *dest, int length,
void QT_FASTCALL comp_func_DestinationIn(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
dest[i] = BYTE_MUL(dest[i], qAlpha(src[i]));
}
} else {
- int cia = 255 - const_alpha;
+ uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint a = BYTE_MUL(qAlpha(src[i]), const_alpha) + cia;
dest[i] = BYTE_MUL(dest[i], a);
}
@@ -490,14 +446,14 @@ void QT_FASTCALL comp_func_DestinationIn_rgb64(QRgba64 *Q_DECL_RESTRICT dest, co
{
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- dest[i] = multiplyAlpha65535(dest[i], src[i].alpha());
+ STORE(&dest[i], multiplyAlpha65535(LOAD(&dest[i]), src[i].alpha()));
}
} else {
uint ca = const_alpha * 257;
uint cia = 65535 - ca;
for (int i = 0; i < length; ++i) {
uint a = qt_div_65535(src[i].alpha() * ca) + cia;
- dest[i] = multiplyAlpha65535(dest[i], a);
+ STORE(&dest[i], multiplyAlpha65535(LOAD(&dest[i]), a));
}
}
}
@@ -509,17 +465,14 @@ void QT_FASTCALL comp_func_DestinationIn_rgb64(QRgba64 *Q_DECL_RESTRICT dest, co
void QT_FASTCALL comp_func_solid_SourceOut(uint *dest, int length, uint color, uint const_alpha)
{
- PRELOAD_INIT(dest)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = BYTE_MUL(color, qAlpha(~dest[i]));
}
} else {
color = BYTE_MUL(color, const_alpha);
- int cia = 255 - const_alpha;
+ uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(~d), d, cia);
}
@@ -545,16 +498,13 @@ void QT_FASTCALL comp_func_solid_SourceOut_rgb64(QRgba64 *dest, int length, QRgb
void QT_FASTCALL comp_func_SourceOut(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
dest[i] = BYTE_MUL(src[i], qAlpha(~dest[i]));
}
} else {
- int cia = 255 - const_alpha;
+ uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = BYTE_MUL(src[i], const_alpha);
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(~d), d, cia);
@@ -589,9 +539,7 @@ void QT_FASTCALL comp_func_solid_DestinationOut(uint *dest, int length, uint col
uint a = qAlpha(~color);
if (const_alpha != 255)
a = BYTE_MUL(a, const_alpha) + 255 - const_alpha;
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = BYTE_MUL(dest[i], a);
}
}
@@ -609,16 +557,13 @@ void QT_FASTCALL comp_func_solid_DestinationOut_rgb64(QRgba64 *dest, int length,
void QT_FASTCALL comp_func_DestinationOut(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
dest[i] = BYTE_MUL(dest[i], qAlpha(~src[i]));
}
} else {
- int cia = 255 - const_alpha;
+ uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint sia = BYTE_MUL(qAlpha(~src[i]), const_alpha) + cia;
dest[i] = BYTE_MUL(dest[i], sia);
}
@@ -653,9 +598,7 @@ void QT_FASTCALL comp_func_solid_SourceAtop(uint *dest, int length, uint color,
color = BYTE_MUL(color, const_alpha);
}
uint sia = qAlpha(~color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(dest[i]), dest[i], sia);
}
}
@@ -672,17 +615,14 @@ void QT_FASTCALL comp_func_solid_SourceAtop_rgb64(QRgba64 *dest, int length, QRg
void QT_FASTCALL comp_func_SourceAtop(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = src[i];
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(d), d, qAlpha(~s));
}
} else {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = BYTE_MUL(src[i], const_alpha);
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(d), d, qAlpha(~s));
@@ -719,9 +659,7 @@ void QT_FASTCALL comp_func_solid_DestinationAtop(uint *dest, int length, uint co
color = BYTE_MUL(color, const_alpha);
a = qAlpha(color) + 255 - const_alpha;
}
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(d, a, color, qAlpha(~d));
}
@@ -742,18 +680,15 @@ void QT_FASTCALL comp_func_solid_DestinationAtop_rgb64(QRgba64 *dest, int length
void QT_FASTCALL comp_func_DestinationAtop(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = src[i];
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(d, qAlpha(s), s, qAlpha(~d));
}
} else {
- int cia = 255 - const_alpha;
+ uint cia = 255 - const_alpha;
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint s = BYTE_MUL(src[i], const_alpha);
uint d = dest[i];
uint a = qAlpha(s) + cia;
@@ -771,8 +706,8 @@ void QT_FASTCALL comp_func_DestinationAtop_rgb64(QRgba64 *Q_DECL_RESTRICT dest,
dest[i] = interpolate65535(d, s.alpha(), s, 65535 - d.alpha());
}
} else {
- int ca = const_alpha * 257;
- int cia = 65535 - ca;
+ uint ca = const_alpha * 257;
+ uint cia = 65535 - ca;
for (int i = 0; i < length; ++i) {
QRgba64 s = multiplyAlpha65535(src[i], ca);
QRgba64 d = dest[i];
@@ -794,9 +729,7 @@ void QT_FASTCALL comp_func_solid_XOR(uint *dest, int length, uint color, uint co
color = BYTE_MUL(color, const_alpha);
uint sia = qAlpha(~color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
dest[i] = INTERPOLATE_PIXEL_255(color, qAlpha(~d), d, sia);
}
@@ -806,26 +739,24 @@ void QT_FASTCALL comp_func_solid_XOR_rgb64(QRgba64 *dest, int length, QRgba64 co
{
if (const_alpha != 255)
color = multiplyAlpha255(color, const_alpha);
- uint sia = 65535 - color.alpha();
+ auto s = CONVERT(color);
+ auto sia = CONST(65535 - color.alpha());
for (int i = 0; i < length; ++i) {
- QRgba64 d = dest[i];
- dest[i] = interpolate65535(color, 65535 - d.alpha(), d, sia);
+ auto d = LOAD(&dest[i]);
+ STORE(&dest[i], interpolate65535(s, INVALPHA(d), d, sia));
}
}
void QT_FASTCALL comp_func_XOR(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, uint const_alpha)
{
- PRELOAD_INIT2(dest, src)
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(~d), d, qAlpha(~s));
}
} else {
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = BYTE_MUL(src[i], const_alpha);
dest[i] = INTERPOLATE_PIXEL_255(s, qAlpha(~d), d, qAlpha(~s));
@@ -837,15 +768,15 @@ void QT_FASTCALL comp_func_XOR_rgb64(QRgba64 *Q_DECL_RESTRICT dest, const QRgba6
{
if (const_alpha == 255) {
for (int i = 0; i < length; ++i) {
- QRgba64 d = dest[i];
- QRgba64 s = src[i];
- dest[i] = interpolate65535(s, 65535 - d.alpha(), d, 65535 - s.alpha());
+ auto d = LOAD(&dest[i]);
+ auto s = LOAD(&src[i]);
+ STORE(&dest[i], interpolate65535(s, INVALPHA(d), d, INVALPHA(s)));
}
} else {
for (int i = 0; i < length; ++i) {
- QRgba64 d = dest[i];
- QRgba64 s = multiplyAlpha255(src[i], const_alpha);
- dest[i] = interpolate65535(s, 65535 - d.alpha(), d, 65535 - s.alpha());
+ auto d = LOAD(&dest[i]);
+ auto s = multiplyAlpha255(LOAD(&src[i]), const_alpha);
+ STORE(&dest[i], interpolate65535(s, INVALPHA(d), d, INVALPHA(s)));
}
}
}
@@ -901,9 +832,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Plus_impl(uint *dest, int
{
uint s = color;
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
d = comp_func_Plus_one_pixel(d, s);
coverage.store(&dest[i], d);
@@ -940,9 +869,7 @@ void QT_FASTCALL comp_func_solid_Plus_rgb64(QRgba64 *dest, int length, QRgba64 c
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Plus_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1001,9 +928,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Multiply_impl(uint *dest,
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1060,9 +985,7 @@ void QT_FASTCALL comp_func_solid_Multiply_rgb64(QRgba64 *dest, int length, QRgba
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Multiply_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1129,9 +1052,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Screen_impl(uint *dest, i
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1188,9 +1109,7 @@ void QT_FASTCALL comp_func_solid_Screen_rgb64(QRgba64 *dest, int length, QRgba64
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Screen_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1277,9 +1196,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Overlay_impl(uint *dest,
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1336,9 +1253,7 @@ void QT_FASTCALL comp_func_solid_Overlay_rgb64(QRgba64 *dest, int length, QRgba6
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Overlay_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1415,9 +1330,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Darken_impl(uint *dest, i
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1474,9 +1387,7 @@ void QT_FASTCALL comp_func_solid_Darken_rgb64(QRgba64 *dest, int length, QRgba64
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Darken_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1553,9 +1464,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Lighten_impl(uint *dest,
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1612,9 +1521,7 @@ void QT_FASTCALL comp_func_solid_Lighten_rgb64(QRgba64 *dest, int length, QRgba6
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Lighten_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1709,9 +1616,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_ColorDodge_impl(uint *des
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1768,9 +1673,7 @@ void QT_FASTCALL comp_func_solid_ColorDodge_rgb64(QRgba64 *dest, int length, QRg
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_ColorDodge_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -1865,9 +1768,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_ColorBurn_impl(uint *dest
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -1924,9 +1825,7 @@ void QT_FASTCALL comp_func_solid_ColorBurn_rgb64(QRgba64 *dest, int length, QRgb
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_ColorBurn_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -2015,9 +1914,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_HardLight_impl(uint *dest
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -2074,9 +1971,7 @@ void QT_FASTCALL comp_func_solid_HardLight_rgb64(QRgba64 *dest, int length, QRgb
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_HardLight_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -2178,9 +2073,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_SoftLight_impl(uint *dest
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -2237,9 +2130,7 @@ void QT_FASTCALL comp_func_solid_SoftLight_rgb64(QRgba64 *dest, int length, QRgb
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_SoftLight_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -2316,9 +2207,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_solid_Difference_impl(uint *des
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -2375,9 +2264,7 @@ void QT_FASTCALL comp_func_solid_Difference_rgb64(QRgba64 *dest, int length, QRg
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Difference_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
@@ -2443,9 +2330,7 @@ Q_STATIC_TEMPLATE_FUNCTION inline void QT_FASTCALL comp_func_solid_Exclusion_imp
int sg = qGreen(color);
int sb = qBlue(color);
- PRELOAD_INIT(dest)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND(dest)
uint d = dest[i];
int da = qAlpha(d);
@@ -2503,9 +2388,7 @@ void QT_FASTCALL comp_func_solid_Exclusion_rgb64(QRgba64 *dest, int length, QRgb
template <typename T>
Q_STATIC_TEMPLATE_FUNCTION inline void comp_func_Exclusion_impl(uint *Q_DECL_RESTRICT dest, const uint *Q_DECL_RESTRICT src, int length, const T &coverage)
{
- PRELOAD_INIT2(dest, src)
for (int i = 0; i < length; ++i) {
- PRELOAD_COND2(dest, src)
uint d = dest[i];
uint s = src[i];
diff --git a/src/gui/painting/qcoregraphics.mm b/src/gui/painting/qcoregraphics.mm
index e1601d87dc..2249859c43 100644
--- a/src/gui/painting/qcoregraphics.mm
+++ b/src/gui/painting/qcoregraphics.mm
@@ -293,103 +293,6 @@ QBrush qt_mac_toQBrush(const NSColor *color, QPalette::ColorGroup colorGroup)
}
#endif
-// ---------------------- Color Management ----------------------
-
-static CGColorSpaceRef m_genericColorSpace = 0;
-static QHash<uint32_t, CGColorSpaceRef> m_displayColorSpaceHash;
-static bool m_postRoutineRegistered = false;
-
-static void qt_mac_cleanUpMacColorSpaces()
-{
- if (m_genericColorSpace) {
- CFRelease(m_genericColorSpace);
- m_genericColorSpace = 0;
- }
- QHash<uint32_t, CGColorSpaceRef>::const_iterator it = m_displayColorSpaceHash.constBegin();
- while (it != m_displayColorSpaceHash.constEnd()) {
- if (it.value())
- CFRelease(it.value());
- ++it;
- }
- m_displayColorSpaceHash.clear();
-}
-
-static CGColorSpaceRef qt_mac_displayColorSpace(const QWindow *window)
-{
- CGColorSpaceRef colorSpace = 0;
- uint32_t displayID = 0;
-
-#ifdef Q_OS_MACOS
- if (window == 0) {
- displayID = CGMainDisplayID();
- } else {
- displayID = CGMainDisplayID();
- /*
- ### get correct display
- const QRect &qrect = window->geometry();
- CGRect rect = CGRectMake(qrect.x(), qrect.y(), qrect.width(), qrect.height());
- CGDisplayCount throwAway;
- CGDisplayErr dErr = CGGetDisplaysWithRect(rect, 1, &displayID, &throwAway);
- if (dErr != kCGErrorSuccess)
- return macDisplayColorSpace(0); // fall back on main display
- */
- }
- if ((colorSpace = m_displayColorSpaceHash.value(displayID)))
- return colorSpace;
-
- colorSpace = CGDisplayCopyColorSpace(displayID);
-#else
- Q_UNUSED(window);
-#endif
-
- if (colorSpace == 0)
- colorSpace = CGColorSpaceCreateDeviceRGB();
-
- m_displayColorSpaceHash.insert(displayID, colorSpace);
- if (!m_postRoutineRegistered) {
- m_postRoutineRegistered = true;
- qAddPostRoutine(qt_mac_cleanUpMacColorSpaces);
- }
- return colorSpace;
-}
-
-CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice)
-{
- Q_UNUSED(paintDevice);
-
- // FIXME: Move logic into each paint device once Qt has support for color spaces
- return qt_mac_displayColorSpace(0);
-
- // The following code seems to take care of QWidget, but in reality doesn't, as
- // qt_mac_displayColorSpace ignores the argument and always uses the main display.
-#if 0
- bool isWidget = (paintDevice->devType() == QInternal::Widget);
- return qt_mac_displayColorSpace(isWidget ? static_cast<const QWidget *>(paintDevice)->window() : 0);
-#endif
-}
-
-CGColorSpaceRef qt_mac_genericColorSpace()
-{
-#if 0
- if (!m_genericColorSpace) {
- if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4) {
- m_genericColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
- } else
- {
- m_genericColorSpace = CGColorSpaceCreateDeviceRGB();
- }
- if (!m_postRoutineRegistered) {
- m_postRoutineRegistered = true;
- qAddPostRoutine(QCoreGraphicsPaintEngine::cleanUpMacColorSpaces);
- }
- }
- return m_genericColorSpace;
-#else
- // Just return the main display colorspace for the moment.
- return qt_mac_displayColorSpace(0);
-#endif
-}
-
// ---------------------- Geometry Helpers ----------------------
void qt_mac_clip_cg(CGContextRef hd, const QRegion &rgn, CGAffineTransform *orig_xform)
@@ -459,12 +362,13 @@ QMacCGContext::QMacCGContext(QPaintDevice *paintDevice) : context(0)
if (!image)
return; // Context type not supported.
- CGColorSpaceRef colorspace = qt_mac_colorSpaceForDeviceType(paintDevice);
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
uint flags = kCGImageAlphaPremultipliedFirst;
flags |= kCGBitmapByteOrder32Host;
context = CGBitmapContextCreate(image->bits(), image->width(), image->height(),
- 8, image->bytesPerLine(), colorspace, flags);
+ 8, image->bytesPerLine(), colorSpace, flags);
+ CFRelease(colorSpace);
CGContextTranslateCTM(context, 0, image->height());
const qreal devicePixelRatio = paintDevice->devicePixelRatioF();
CGContextScaleCTM(context, devicePixelRatio, devicePixelRatio);
@@ -492,7 +396,7 @@ QMacCGContext::QMacCGContext(QPainter *painter) : context(0)
devType == QInternal::Pixmap ||
devType == QInternal::Image)) {
- CGColorSpaceRef colorspace = qt_mac_colorSpaceForDeviceType(paintEngine->paintDevice());
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
uint flags = kCGImageAlphaPremultipliedFirst;
#ifdef kCGBitmapByteOrder32Host //only needed because CGImage.h added symbols in the minor version
flags |= kCGBitmapByteOrder32Host;
@@ -500,7 +404,8 @@ QMacCGContext::QMacCGContext(QPainter *painter) : context(0)
const QImage *image = static_cast<const QImage *>(paintEngine->paintDevice());
context = CGBitmapContextCreate((void *)image->bits(), image->width(), image->height(),
- 8, image->bytesPerLine(), colorspace, flags);
+ 8, image->bytesPerLine(), colorSpace, flags);
+ CFRelease(colorSpace);
// Invert y axis
CGContextTranslateCTM(context, 0, image->height());
diff --git a/src/gui/painting/qcoregraphics_p.h b/src/gui/painting/qcoregraphics_p.h
index 6b6a1e800e..de721c94aa 100644
--- a/src/gui/painting/qcoregraphics_p.h
+++ b/src/gui/painting/qcoregraphics_p.h
@@ -75,9 +75,6 @@ Q_GUI_EXPORT QImage qt_mac_toQImage(CGImageRef image);
Q_GUI_EXPORT void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage);
-Q_GUI_EXPORT CGColorSpaceRef qt_mac_genericColorSpace();
-Q_GUI_EXPORT CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice);
-
Q_GUI_EXPORT void qt_mac_clip_cg(CGContextRef hd, const QRegion &rgn, CGAffineTransform *orig_xform);
#ifdef HAVE_APPKIT
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 6bfdc940ac..23c8e42ded 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -174,29 +174,31 @@ template<QImage::Format Format>
static const uint *QT_FASTCALL convertToRGB32(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *)
{
- Q_CONSTEXPR uint redMask = ((1 << redWidth<Format>()) - 1);
- Q_CONSTEXPR uint greenMask = ((1 << greenWidth<Format>()) - 1);
- Q_CONSTEXPR uint blueMask = ((1 << blueWidth<Format>()) - 1);
+ auto conversion = [](uint s) {
+ // MSVC needs these constexpr defined in here otherwise it will create a capture.
+ Q_CONSTEXPR uint redMask = ((1 << redWidth<Format>()) - 1);
+ Q_CONSTEXPR uint greenMask = ((1 << greenWidth<Format>()) - 1);
+ Q_CONSTEXPR uint blueMask = ((1 << blueWidth<Format>()) - 1);
- Q_CONSTEXPR uchar redLeftShift = 8 - redWidth<Format>();
- Q_CONSTEXPR uchar greenLeftShift = 8 - greenWidth<Format>();
- Q_CONSTEXPR uchar blueLeftShift = 8 - blueWidth<Format>();
+ Q_CONSTEXPR uchar redLeftShift = 8 - redWidth<Format>();
+ Q_CONSTEXPR uchar greenLeftShift = 8 - greenWidth<Format>();
+ Q_CONSTEXPR uchar blueLeftShift = 8 - blueWidth<Format>();
- Q_CONSTEXPR uchar redRightShift = 2 * redWidth<Format>() - 8;
- Q_CONSTEXPR uchar greenRightShift = 2 * greenWidth<Format>() - 8;
- Q_CONSTEXPR uchar blueRightShift = 2 * blueWidth<Format>() - 8;
+ Q_CONSTEXPR uchar redRightShift = 2 * redWidth<Format>() - 8;
+ Q_CONSTEXPR uchar greenRightShift = 2 * greenWidth<Format>() - 8;
+ Q_CONSTEXPR uchar blueRightShift = 2 * blueWidth<Format>() - 8;
- for (int i = 0; i < count; ++i) {
- uint red = (src[i] >> redShift<Format>()) & redMask;
- uint green = (src[i] >> greenShift<Format>()) & greenMask;
- uint blue = (src[i] >> blueShift<Format>()) & blueMask;
+ uint red = (s >> redShift<Format>()) & redMask;
+ uint green = (s >> greenShift<Format>()) & greenMask;
+ uint blue = (s >> blueShift<Format>()) & blueMask;
red = ((red << redLeftShift) | (red >> redRightShift)) << 16;
green = ((green << greenLeftShift) | (green >> greenRightShift)) << 8;
blue = (blue << blueLeftShift) | (blue >> blueRightShift);
- buffer[i] = 0xff000000 | red | green | blue;
- }
+ return 0xff000000 | red | green | blue;
+ };
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion);
return buffer;
}
@@ -348,21 +350,21 @@ static const uint *QT_FASTCALL convertRGBFromARGB32PM(uint *buffer, const uint *
// RGB32 -> RGB888 is not a precision loss.
if (!dither || (rWidth == 8 && gWidth == 8 && bWidth == 8)) {
- Q_CONSTEXPR uint rMask = (1 << rWidth) - 1;
- Q_CONSTEXPR uint gMask = (1 << gWidth) - 1;
- Q_CONSTEXPR uint bMask = (1 << bWidth) - 1;
+ auto conversion = [](uint s) {
+ const uint c = fromRGB ? s : qUnpremultiply(s);
+ Q_CONSTEXPR uint rMask = (1 << redWidth<Format>()) - 1;
+ Q_CONSTEXPR uint gMask = (1 << greenWidth<Format>()) - 1;
+ Q_CONSTEXPR uint bMask = (1 << blueWidth<Format>()) - 1;
+ Q_CONSTEXPR uchar rRightShift = 24 - redWidth<Format>();
+ Q_CONSTEXPR uchar gRightShift = 16 - greenWidth<Format>();
+ Q_CONSTEXPR uchar bRightShift = 8 - blueWidth<Format>();
- Q_CONSTEXPR uchar rRightShift = 24 - rWidth;
- Q_CONSTEXPR uchar gRightShift = 16 - gWidth;
- Q_CONSTEXPR uchar bRightShift = 8 - bWidth;
-
- for (int i = 0; i < count; ++i) {
- const uint c = fromRGB ? src[i] : qUnpremultiply(src[i]);
const uint r = ((c >> rRightShift) & rMask) << redShift<Format>();
const uint g = ((c >> gRightShift) & gMask) << greenShift<Format>();
const uint b = ((c >> bRightShift) & bMask) << blueShift<Format>();
- buffer[i] = r | g | b;
- }
+ return r | g | b;
+ };
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion);
} else {
// We do ordered dither by using a rounding conversion, but instead of
// adding half of input precision, we add the adjusted result from the
@@ -394,32 +396,32 @@ template<QImage::Format Format, bool fromRGB>
static const uint *QT_FASTCALL convertARGBPMFromARGB32PM(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *dither)
{
- Q_CONSTEXPR uchar aWidth = alphaWidth<Format>();
- Q_CONSTEXPR uchar rWidth = redWidth<Format>();
- Q_CONSTEXPR uchar gWidth = greenWidth<Format>();
- Q_CONSTEXPR uchar bWidth = blueWidth<Format>();
-
if (!dither) {
- Q_CONSTEXPR uint aMask = (1 << aWidth) - 1;
- Q_CONSTEXPR uint rMask = (1 << rWidth) - 1;
- Q_CONSTEXPR uint gMask = (1 << gWidth) - 1;
- Q_CONSTEXPR uint bMask = (1 << bWidth) - 1;
-
- Q_CONSTEXPR uchar aRightShift = 32 - aWidth;
- Q_CONSTEXPR uchar rRightShift = 24 - rWidth;
- Q_CONSTEXPR uchar gRightShift = 16 - gWidth;
- Q_CONSTEXPR uchar bRightShift = 8 - bWidth;
-
- Q_CONSTEXPR uint aOpaque = aMask << alphaShift<Format>();
- for (int i = 0; i < count; ++i) {
- const uint c = src[i];
+ auto conversion = [](uint c) {
+ Q_CONSTEXPR uint aMask = (1 << alphaWidth<Format>()) - 1;
+ Q_CONSTEXPR uint rMask = (1 << redWidth<Format>()) - 1;
+ Q_CONSTEXPR uint gMask = (1 << greenWidth<Format>()) - 1;
+ Q_CONSTEXPR uint bMask = (1 << blueWidth<Format>()) - 1;
+
+ Q_CONSTEXPR uchar aRightShift = 32 - alphaWidth<Format>();
+ Q_CONSTEXPR uchar rRightShift = 24 - redWidth<Format>();
+ Q_CONSTEXPR uchar gRightShift = 16 - greenWidth<Format>();
+ Q_CONSTEXPR uchar bRightShift = 8 - blueWidth<Format>();
+
+ Q_CONSTEXPR uint aOpaque = aMask << alphaShift<Format>();
const uint a = fromRGB ? aOpaque : (((c >> aRightShift) & aMask) << alphaShift<Format>());
const uint r = ((c >> rRightShift) & rMask) << redShift<Format>();
const uint g = ((c >> gRightShift) & gMask) << greenShift<Format>();
const uint b = ((c >> bRightShift) & bMask) << blueShift<Format>();
- buffer[i] = a | r | g | b;
- }
+ return a | r | g | b;
+ };
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion);
} else {
+ Q_CONSTEXPR uchar aWidth = alphaWidth<Format>();
+ Q_CONSTEXPR uchar rWidth = redWidth<Format>();
+ Q_CONSTEXPR uchar gWidth = greenWidth<Format>();
+ Q_CONSTEXPR uchar bWidth = blueWidth<Format>();
+
const uint *bayer_line = qt_bayer_matrix[dither->y & 15];
for (int i = 0; i < count; ++i) {
const uint c = src[i];
@@ -514,8 +516,7 @@ static const uint *QT_FASTCALL convertARGB32ToARGB32PM(uint *buffer, const uint
static const uint *QT_FASTCALL convertRGBA8888PMToARGB32PM(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = RGBA2ARGB(src[i]);
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, RGBA2ARGB);
return buffer;
}
@@ -568,8 +569,7 @@ static const uint *QT_FASTCALL convertARGB32FromARGB32PM(uint *buffer, const uin
static const uint *QT_FASTCALL convertRGBA8888PMFromARGB32PM(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = ARGB2RGBA(src[i]);
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, ARGB2RGBA);
return buffer;
}
@@ -695,8 +695,7 @@ static const uint *QT_FASTCALL convertRGBA8888FromARGB32PM(uint *buffer, const u
static const uint *QT_FASTCALL convertRGBXFromRGB32(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = ARGB2RGBA(0xff000000 | src[i]);
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, [](uint c) { return ARGB2RGBA(0xff000000 | c); });
return buffer;
}
@@ -713,8 +712,7 @@ static const uint *QT_FASTCALL convertA2RGB30PMToARGB32PM(uint *buffer, const ui
const QVector<QRgb> *, QDitherInfo *dither)
{
if (!dither) {
- for (int i = 0; i < count; ++i)
- buffer[i] = qConvertA2rgb30ToArgb32<PixelOrder>(src[i]);
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, qConvertA2rgb30ToArgb32<PixelOrder>);
} else {
for (int i = 0; i < count; ++i) {
const uint c = src[i];
@@ -796,8 +794,7 @@ template<QtPixelOrder PixelOrder>
static const uint *QT_FASTCALL convertA2RGB30PMFromARGB32PM(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = qConvertArgb32ToA2rgb30<PixelOrder>(src[i]);
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, qConvertArgb32ToA2rgb30<PixelOrder>);
return buffer;
}
@@ -814,8 +811,7 @@ template<QtPixelOrder PixelOrder>
static const uint *QT_FASTCALL convertRGB30FromARGB32PM(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = qConvertRgb32ToRgb30<PixelOrder>(qUnpremultiply(src[i]));
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, qConvertRgb32ToRgb30<PixelOrder>);
return buffer;
}
@@ -6399,12 +6395,19 @@ static void qInitDrawhelperFunctions()
qBlendFunctions[QImage::Format_RGBX8888][QImage::Format_RGBA8888_Premultiplied] = qt_blend_argb32_on_argb32_avx2;
qBlendFunctions[QImage::Format_RGBA8888_Premultiplied][QImage::Format_RGBA8888_Premultiplied] = qt_blend_argb32_on_argb32_avx2;
+ extern void QT_FASTCALL comp_func_Source_avx2(uint *destPixels, const uint *srcPixels, int length, uint const_alpha);
+ extern void QT_FASTCALL comp_func_Source_rgb64_avx2(QRgba64 *destPixels, const QRgba64 *srcPixels, int length, uint const_alpha);
extern void QT_FASTCALL comp_func_SourceOver_avx2(uint *destPixels, const uint *srcPixels, int length, uint const_alpha);
+ extern void QT_FASTCALL comp_func_SourceOver_rgb64_avx2(QRgba64 *destPixels, const QRgba64 *srcPixels, int length, uint const_alpha);
extern void QT_FASTCALL comp_func_solid_SourceOver_avx2(uint *destPixels, int length, uint color, uint const_alpha);
- extern void QT_FASTCALL comp_func_Source_avx2(uint *destPixels, const uint *srcPixels, int length, uint const_alpha);
+ extern void QT_FASTCALL comp_func_solid_SourceOver_rgb64_avx2(QRgba64 *destPixels, int length, QRgba64 color, uint const_alpha);
+
+ qt_functionForMode_C[QPainter::CompositionMode_Source] = comp_func_Source_avx2;
+ qt_functionForMode64_C[QPainter::CompositionMode_Source] = comp_func_Source_rgb64_avx2;
qt_functionForMode_C[QPainter::CompositionMode_SourceOver] = comp_func_SourceOver_avx2;
+ qt_functionForMode64_C[QPainter::CompositionMode_SourceOver] = comp_func_SourceOver_rgb64_avx2;
qt_functionForModeSolid_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_avx2;
- qt_functionForMode_C[QPainter::CompositionMode_Source] = comp_func_Source_avx2;
+ qt_functionForModeSolid64_C[QPainter::CompositionMode_SourceOver] = comp_func_solid_SourceOver_rgb64_avx2;
extern void QT_FASTCALL fetchTransformedBilinearARGB32PM_simple_upscale_helper_avx2(uint *b, uint *end, const QTextureData &image,
int &fx, int &fy, int fdx, int /*fdy*/);
@@ -6444,7 +6447,7 @@ static void qInitDrawhelperFunctions()
sourceFetchUntransformed[QImage::Format_RGB888] = qt_fetchUntransformed_888_neon;
-#if defined(Q_PROCESSOR_ARM_64) && Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
extern const uint *QT_FASTCALL convertARGB32ToARGB32PM_neon(uint *buffer, const uint *src, int count,
const QVector<QRgb> *, QDitherInfo *);
extern const uint *QT_FASTCALL convertRGBA8888ToARGB32PM_neon(uint *buffer, const uint *src, int count,
diff --git a/src/gui/painting/qdrawhelper_avx2.cpp b/src/gui/painting/qdrawhelper_avx2.cpp
index 2619539788..3a70524a9d 100644
--- a/src/gui/painting/qdrawhelper_avx2.cpp
+++ b/src/gui/painting/qdrawhelper_avx2.cpp
@@ -39,6 +39,7 @@
#include "qdrawhelper_p.h"
#include "qdrawingprimitive_sse2_p.h"
+#include "qrgba64_p.h"
#if defined(QT_COMPILER_SUPPORTS_AVX2)
@@ -73,6 +74,25 @@ inline static void BYTE_MUL_AVX2(__m256i &pixelVector, const __m256i &alphaChann
pixelVector = _mm256_or_si256(pixelVectorAG, pixelVectorRB);
}
+inline static void BYTE_MUL_RGB64_AVX2(__m256i &pixelVector, const __m256i &alphaChannel, const __m256i &colorMask, const __m256i &half)
+{
+ __m256i pixelVectorAG = _mm256_srli_epi32(pixelVector, 16);
+ __m256i pixelVectorRB = _mm256_and_si256(pixelVector, colorMask);
+
+ pixelVectorAG = _mm256_mullo_epi32(pixelVectorAG, alphaChannel);
+ pixelVectorRB = _mm256_mullo_epi32(pixelVectorRB, alphaChannel);
+
+ pixelVectorRB = _mm256_add_epi32(pixelVectorRB, _mm256_srli_epi32(pixelVectorRB, 16));
+ pixelVectorAG = _mm256_add_epi32(pixelVectorAG, _mm256_srli_epi32(pixelVectorAG, 16));
+ pixelVectorRB = _mm256_add_epi32(pixelVectorRB, half);
+ pixelVectorAG = _mm256_add_epi32(pixelVectorAG, half);
+
+ pixelVectorRB = _mm256_srli_epi32(pixelVectorRB, 16);
+ pixelVectorAG = _mm256_andnot_si256(colorMask, pixelVectorAG);
+
+ pixelVector = _mm256_or_si256(pixelVectorAG, pixelVectorRB);
+}
+
// See INTERPOLATE_PIXEL_255_SSE2 for details.
inline static void INTERPOLATE_PIXEL_255_AVX2(const __m256i &srcVector, __m256i &dstVector, const __m256i &alphaChannel, const __m256i &oneMinusAlphaChannel, const __m256i &colorMask, const __m256i &half)
{
@@ -96,6 +116,29 @@ inline static void INTERPOLATE_PIXEL_255_AVX2(const __m256i &srcVector, __m256i
dstVector = _mm256_or_si256(finalAG, finalRB);
}
+inline static void INTERPOLATE_PIXEL_RGB64_AVX2(const __m256i &srcVector, __m256i &dstVector, const __m256i &alphaChannel, const __m256i &oneMinusAlphaChannel, const __m256i &colorMask, const __m256i &half)
+{
+ const __m256i srcVectorAG = _mm256_srli_epi32(srcVector, 16);
+ const __m256i dstVectorAG = _mm256_srli_epi32(dstVector, 16);
+ const __m256i srcVectorRB = _mm256_and_si256(srcVector, colorMask);
+ const __m256i dstVectorRB = _mm256_and_si256(dstVector, colorMask);
+ const __m256i srcVectorAGalpha = _mm256_mullo_epi32(srcVectorAG, alphaChannel);
+ const __m256i srcVectorRBalpha = _mm256_mullo_epi32(srcVectorRB, alphaChannel);
+ const __m256i dstVectorAGoneMinusAlpha = _mm256_mullo_epi32(dstVectorAG, oneMinusAlphaChannel);
+ const __m256i dstVectorRBoneMinusAlpha = _mm256_mullo_epi32(dstVectorRB, oneMinusAlphaChannel);
+ __m256i finalAG = _mm256_add_epi32(srcVectorAGalpha, dstVectorAGoneMinusAlpha);
+ __m256i finalRB = _mm256_add_epi32(srcVectorRBalpha, dstVectorRBoneMinusAlpha);
+ finalAG = _mm256_add_epi32(finalAG, _mm256_srli_epi32(finalAG, 16));
+ finalRB = _mm256_add_epi32(finalRB, _mm256_srli_epi32(finalRB, 16));
+ finalAG = _mm256_add_epi32(finalAG, half);
+ finalRB = _mm256_add_epi32(finalRB, half);
+ finalAG = _mm256_andnot_si256(colorMask, finalAG);
+ finalRB = _mm256_srli_epi32(finalRB, 16);
+
+ dstVector = _mm256_or_si256(finalAG, finalRB);
+}
+
+
// See BLEND_SOURCE_OVER_ARGB32_SSE2 for details.
inline static void BLEND_SOURCE_OVER_ARGB32_AVX2(quint32 *dst, const quint32 *src, const int length)
{
@@ -288,6 +331,64 @@ void QT_FASTCALL comp_func_SourceOver_avx2(uint *destPixels, const uint *srcPixe
BLEND_SOURCE_OVER_ARGB32_WITH_CONST_ALPHA_AVX2(dst, src, length, const_alpha);
}
+void QT_FASTCALL comp_func_SourceOver_rgb64_avx2(QRgba64 *dst, const QRgba64 *src, int length, uint const_alpha)
+{
+ Q_ASSERT(const_alpha < 256); // const_alpha is in [0-255]
+ const __m256i half = _mm256_set1_epi32(0x8000);
+ const __m256i one = _mm256_set1_epi32(0xffff);
+ const __m256i colorMask = _mm256_set1_epi32(0x0000ffff);
+ __m256i alphaMask = _mm256_set1_epi32(0xff000000);
+ alphaMask = _mm256_unpacklo_epi8(alphaMask, alphaMask);
+ const __m256i alphaShuffleMask = _mm256_set_epi8(char(0xff),char(0xff),15,14,char(0xff),char(0xff),15,14,char(0xff),char(0xff),7,6,char(0xff),char(0xff),7,6,
+ char(0xff),char(0xff),15,14,char(0xff),char(0xff),15,14,char(0xff),char(0xff),7,6,char(0xff),char(0xff),7,6);
+
+ if (const_alpha == 255) {
+ int x = 0;
+ for (; x < length && (quintptr(dst + x) & 31); ++x)
+ blend_pixel(dst[x], src[x]);
+ for (; x < length - 3; x += 4) {
+ const __m256i srcVector = _mm256_lddqu_si256((const __m256i *)&src[x]);
+ if (!_mm256_testz_si256(srcVector, alphaMask)) {
+ // Not all transparent
+ if (_mm256_testc_si256(srcVector, alphaMask)) {
+ // All opaque
+ _mm256_store_si256((__m256i *)&dst[x], srcVector);
+ } else {
+ __m256i alphaChannel = _mm256_shuffle_epi8(srcVector, alphaShuffleMask);
+ alphaChannel = _mm256_sub_epi32(one, alphaChannel);
+ __m256i dstVector = _mm256_load_si256((__m256i *)&dst[x]);
+ BYTE_MUL_RGB64_AVX2(dstVector, alphaChannel, colorMask, half);
+ dstVector = _mm256_add_epi16(dstVector, srcVector);
+ _mm256_store_si256((__m256i *)&dst[x], dstVector);
+ }
+ }
+ }
+ SIMD_EPILOGUE(x, length, 3)
+ blend_pixel(dst[x], src[x]);
+ } else {
+ const __m256i constAlphaVector = _mm256_set1_epi32(const_alpha | (const_alpha << 8));
+ int x = 0;
+ for (; x < length && (quintptr(dst + x) & 31); ++x)
+ blend_pixel(dst[x], src[x], const_alpha);
+ for (; x < length - 3; x += 4) {
+ __m256i srcVector = _mm256_lddqu_si256((const __m256i *)&src[x]);
+ if (!_mm256_testz_si256(srcVector, alphaMask)) {
+ // Not all transparent
+ BYTE_MUL_RGB64_AVX2(srcVector, constAlphaVector, colorMask, half);
+
+ __m256i alphaChannel = _mm256_shuffle_epi8(srcVector, alphaShuffleMask);
+ alphaChannel = _mm256_sub_epi32(one, alphaChannel);
+ __m256i dstVector = _mm256_load_si256((__m256i *)&dst[x]);
+ BYTE_MUL_RGB64_AVX2(dstVector, alphaChannel, colorMask, half);
+ dstVector = _mm256_add_epi16(dstVector, srcVector);
+ _mm256_store_si256((__m256i *)&dst[x], dstVector);
+ }
+ }
+ SIMD_EPILOGUE(x, length, 3)
+ blend_pixel(dst[x], src[x], const_alpha);
+ }
+}
+
void QT_FASTCALL comp_func_Source_avx2(uint *dst, const uint *src, int length, uint const_alpha)
{
if (const_alpha == 255) {
@@ -319,6 +420,39 @@ void QT_FASTCALL comp_func_Source_avx2(uint *dst, const uint *src, int length, u
}
}
+void QT_FASTCALL comp_func_Source_rgb64_avx2(QRgba64 *dst, const QRgba64 *src, int length, uint const_alpha)
+{
+ Q_ASSERT(const_alpha < 256); // const_alpha is in [0-255]
+ if (const_alpha == 255) {
+ ::memcpy(dst, src, length * sizeof(QRgba64));
+ } else {
+ const uint ca = const_alpha | (const_alpha << 8); // adjust to [0-65535]
+ const uint cia = 65535 - ca;
+
+ int x = 0;
+
+ // 1) prologue, align on 32 bytes
+ for (; x < length && (quintptr(dst + x) & 31); ++x)
+ dst[x] = interpolate65535(src[x], ca, dst[x], cia);
+
+ // 2) interpolate pixels with AVX2
+ const __m256i half = _mm256_set1_epi32(0x8000);
+ const __m256i colorMask = _mm256_set1_epi32(0x0000ffff);
+ const __m256i constAlphaVector = _mm256_set1_epi32(ca);
+ const __m256i oneMinusConstAlpha = _mm256_set1_epi32(cia);
+ for (; x < length - 3; x += 4) {
+ const __m256i srcVector = _mm256_lddqu_si256((const __m256i *)&src[x]);
+ __m256i dstVector = _mm256_load_si256((__m256i *)&dst[x]);
+ INTERPOLATE_PIXEL_RGB64_AVX2(srcVector, dstVector, constAlphaVector, oneMinusConstAlpha, colorMask, half);
+ _mm256_store_si256((__m256i *)&dst[x], dstVector);
+ }
+
+ // 3) Epilogue
+ SIMD_EPILOGUE(x, length, 3)
+ dst[x] = interpolate65535(src[x], ca, dst[x], cia);
+ }
+}
+
void QT_FASTCALL comp_func_solid_SourceOver_avx2(uint *destPixels, int length, uint color, uint const_alpha)
{
if ((const_alpha & qAlpha(color)) == 255) {
@@ -350,6 +484,37 @@ void QT_FASTCALL comp_func_solid_SourceOver_avx2(uint *destPixels, int length, u
}
}
+void QT_FASTCALL comp_func_solid_SourceOver_rgb64_avx2(QRgba64 *destPixels, int length, QRgba64 color, uint const_alpha)
+{
+ Q_ASSERT(const_alpha < 256); // const_alpha is in [0-255]
+ if (const_alpha == 255 && color.isOpaque()) {
+ qt_memfill64((quint64*)destPixels, color, length);
+ } else {
+ if (const_alpha != 255)
+ color = multiplyAlpha255(color, const_alpha);
+
+ const uint minusAlphaOfColor = 65535 - color.alpha();
+ int x = 0;
+ quint64 *dst = (quint64 *) destPixels;
+ const __m256i colorVector = _mm256_set1_epi64x(color);
+ const __m256i colorMask = _mm256_set1_epi32(0x0000ffff);
+ const __m256i half = _mm256_set1_epi32(0x8000);
+ const __m256i minusAlphaOfColorVector = _mm256_set1_epi32(minusAlphaOfColor);
+
+ for (; x < length && (quintptr(dst + x) & 31); ++x)
+ destPixels[x] = color + multiplyAlpha65535(destPixels[x], minusAlphaOfColor);
+
+ for (; x < length - 3; x += 4) {
+ __m256i dstVector = _mm256_load_si256((__m256i *)&dst[x]);
+ BYTE_MUL_RGB64_AVX2(dstVector, minusAlphaOfColorVector, colorMask, half);
+ dstVector = _mm256_add_epi16(colorVector, dstVector);
+ _mm256_store_si256((__m256i *)&dst[x], dstVector);
+ }
+ SIMD_EPILOGUE(x, length, 3)
+ destPixels[x] = color + multiplyAlpha65535(destPixels[x], minusAlphaOfColor);
+ }
+}
+
#define interpolate_4_pixels_16_avx2(tlr1, tlr2, blr1, blr2, distx, disty, colorMask, v_256, b) \
{ \
/* Correct for later unpack */ \
diff --git a/src/gui/painting/qdrawhelper_neon.cpp b/src/gui/painting/qdrawhelper_neon.cpp
index 4cbac009d8..e126f4b670 100644
--- a/src/gui/painting/qdrawhelper_neon.cpp
+++ b/src/gui/painting/qdrawhelper_neon.cpp
@@ -1080,23 +1080,41 @@ const uint * QT_FASTCALL qt_fetchUntransformed_888_neon(uint *buffer, const Oper
return buffer;
}
-#if defined(Q_PROCESSOR_ARM_64) && Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
template<bool RGBA>
static inline void convertARGBToARGB32PM_neon(uint *buffer, const uint *src, int count)
{
int i = 0;
+#if defined(Q_PROCESSOR_ARM_64)
const uint8x16_t rgbaMask = { 2, 1, 0, 3, 6, 5, 4, 7, 10, 9, 8, 11, 14, 13, 12, 15};
+#else
+ const uint8x8_t rgbaMask = { 2, 1, 0, 3, 6, 5, 4, 7 };
+#endif
const uint8x8_t shuffleMask = { 3, 3, 3, 3, 7, 7, 7, 7};
const uint32x4_t blendMask = vdupq_n_u32(0xff000000);
for (; i < count - 3; i += 4) {
uint32x4_t srcVector = vld1q_u32(src + i);
uint32x4_t alphaVector = vshrq_n_u32(srcVector, 24);
+#if defined(Q_PROCESSOR_ARM_64)
uint32_t alphaSum = vaddvq_u32(alphaVector);
+#else
+ // no vaddvq_u32
+ uint32x2_t tmp = vpadd_u32(vget_low_u32(alphaVector), vget_high_u32(alphaVector));
+ uint32_t alphaSum = vget_lane_u32(vpadd_u32(tmp, tmp), 0);
+#endif
if (alphaSum) {
if (alphaSum != 255 * 4) {
- if (RGBA)
+ if (RGBA) {
+#if defined(Q_PROCESSOR_ARM_64)
srcVector = vreinterpretq_u32_u8(vqtbl1q_u8(vreinterpretq_u8_u32(srcVector), rgbaMask));
+#else
+ // no vqtbl1q_u8
+ const uint8x8_t low = vtbl1_u8(vreinterpret_u8_u32(vget_low_u32(srcVector)), rgbaMask);
+ const uint8x8_t high = vtbl1_u8(vreinterpret_u8_u32(vget_high_u32(srcVector)), rgbaMask);
+ srcVector = vcombine_u32(vreinterpret_u32_u8(low), vreinterpret_u32_u8(high));
+#endif
+ }
const uint8x8_t s1 = vreinterpret_u8_u32(vget_low_u32(srcVector));
const uint8x8_t s2 = vreinterpret_u8_u32(vget_high_u32(srcVector));
const uint8x8_t alpha1 = vtbl1_u8(s1, shuffleMask);
@@ -1110,10 +1128,19 @@ static inline void convertARGBToARGB32PM_neon(uint *buffer, const uint *src, int
const uint32x4_t d = vbslq_u32(blendMask, srcVector, vreinterpretq_u32_u8(vcombine_u8(d1, d2)));
vst1q_u32(buffer + i, d);
} else {
- if (RGBA)
- vst1q_u32(buffer + i, vreinterpretq_u32_u8(vqtbl1q_u8(vreinterpretq_u8_u32(srcVector), rgbaMask)));
- else if (buffer != src)
+ if (RGBA) {
+#if defined(Q_PROCESSOR_ARM_64)
+ srcVector = vreinterpretq_u32_u8(vqtbl1q_u8(vreinterpretq_u8_u32(srcVector), rgbaMask));
+#else
+ // no vqtbl1q_u8
+ const uint8x8_t low = vtbl1_u8(vreinterpret_u8_u32(vget_low_u32(srcVector)), rgbaMask);
+ const uint8x8_t high = vtbl1_u8(vreinterpret_u8_u32(vget_high_u32(srcVector)), rgbaMask);
+ srcVector = vcombine_u32(vreinterpret_u32_u8(low), vreinterpret_u32_u8(high));
+#endif
+ vst1q_u32(buffer + i, srcVector);
+ } else if (buffer != src) {
vst1q_u32(buffer + i, srcVector);
+ }
}
} else {
vst1q_u32(buffer + i, vdupq_n_u32(0));
@@ -1139,7 +1166,8 @@ const uint *QT_FASTCALL convertRGBA8888ToARGB32PM_neon(uint *buffer, const uint
convertARGBToARGB32PM_neon<true>(buffer, src, count);
return buffer;
}
-#endif
+
+#endif // Q_BYTE_ORDER == Q_LITTLE_ENDIAN
QT_END_NAMESPACE
diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h
index df9f762314..ebf215a3eb 100644
--- a/src/gui/painting/qdrawhelper_p.h
+++ b/src/gui/painting/qdrawhelper_p.h
@@ -1104,22 +1104,30 @@ inline int qBlue565(quint16 rgb) {
return (b << 3) | (b >> 2);
}
+// We manually unalias the variables to make sure the compiler
+// fully optimizes both aliased and unaliased cases.
+#define UNALIASED_CONVERSION_LOOP(buffer, src, count, conversion) \
+ if (src == buffer) { \
+ for (int i = 0; i < count; ++i) \
+ buffer[i] = conversion(buffer[i]); \
+ } else { \
+ for (int i = 0; i < count; ++i) \
+ buffer[i] = conversion(src[i]); \
+ }
+
static Q_ALWAYS_INLINE const uint *qt_convertARGB32ToARGB32PM(uint *buffer, const uint *src, int count)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = qPremultiply(src[i]);
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, qPremultiply);
return buffer;
}
static Q_ALWAYS_INLINE const uint *qt_convertRGBA8888ToARGB32PM(uint *buffer, const uint *src, int count)
{
- for (int i = 0; i < count; ++i)
- buffer[i] = qPremultiply(RGBA2ARGB(src[i]));
+ UNALIASED_CONVERSION_LOOP(buffer, src, count, [](uint s) { return qPremultiply(RGBA2ARGB(s));});
return buffer;
}
-
const uint qt_bayer_matrix[16][16] = {
{ 0x1, 0xc0, 0x30, 0xf0, 0xc, 0xcc, 0x3c, 0xfc,
0x3, 0xc3, 0x33, 0xf3, 0xf, 0xcf, 0x3f, 0xff},
@@ -1160,23 +1168,23 @@ const uint qt_bayer_matrix[16][16] = {
#if Q_PROCESSOR_WORDSIZE == 8 // 64-bit versions
-#define AMIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask)))
-#define MIX(mask) (qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask)))
+#define AMIX(mask) (qMin(((quint64(s)&mask) + (quint64(d)&mask)), quint64(mask)))
+#define MIX(mask) (qMin(((quint64(s)&mask) + (quint64(d)&mask)), quint64(mask)))
#else // 32 bits
// The mask for alpha can overflow over 32 bits
-#define AMIX(mask) quint32(qMin(((qint64(s)&mask) + (qint64(d)&mask)), qint64(mask)))
+#define AMIX(mask) quint32(qMin(((quint64(s)&mask) + (quint64(d)&mask)), quint64(mask)))
#define MIX(mask) (qMin(((quint32(s)&mask) + (quint32(d)&mask)), quint32(mask)))
#endif
-inline int comp_func_Plus_one_pixel_const_alpha(uint d, const uint s, const uint const_alpha, const uint one_minus_const_alpha)
+inline uint comp_func_Plus_one_pixel_const_alpha(uint d, const uint s, const uint const_alpha, const uint one_minus_const_alpha)
{
- const int result = (AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK));
+ const uint result = uint(AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK));
return INTERPOLATE_PIXEL_255(result, const_alpha, d, one_minus_const_alpha);
}
-inline int comp_func_Plus_one_pixel(uint d, const uint s)
+inline uint comp_func_Plus_one_pixel(uint d, const uint s)
{
- const int result = (AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK));
+ const uint result = uint(AMIX(AMASK) | MIX(RMASK) | MIX(GMASK) | MIX(BMASK));
return result;
}
diff --git a/src/gui/painting/qmatrix.h b/src/gui/painting/qmatrix.h
index dafb746bc6..d8a4fcfb1c 100644
--- a/src/gui/painting/qmatrix.h
+++ b/src/gui/painting/qmatrix.h
@@ -108,7 +108,7 @@ public:
bool isInvertible() const { return !qFuzzyIsNull(_m11*_m22 - _m12*_m21); }
qreal determinant() const { return _m11*_m22 - _m12*_m21; }
- Q_REQUIRED_RESULT QMatrix inverted(bool *invertible = Q_NULLPTR) const;
+ Q_REQUIRED_RESULT QMatrix inverted(bool *invertible = nullptr) const;
bool operator==(const QMatrix &) const;
bool operator!=(const QMatrix &) const;
diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h
index 40f5347b26..fb5dfe2318 100644
--- a/src/gui/painting/qpaintengine_blitter_p.h
+++ b/src/gui/painting/qpaintengine_blitter_p.h
@@ -67,48 +67,48 @@ class Q_GUI_EXPORT QBlitterPaintEngine : public QRasterPaintEngine
public:
QBlitterPaintEngine(QBlittablePlatformPixmap *p);
- virtual QPaintEngine::Type type() const Q_DECL_OVERRIDE
+ virtual QPaintEngine::Type type() const override
{ return Blitter; }
- virtual bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
- virtual bool end() Q_DECL_OVERRIDE;
+ virtual bool begin(QPaintDevice *pdev) override;
+ virtual bool end() override;
// Call down into QBlittable
- void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
- void fillRect(const QRectF &rect, const QBrush &brush) Q_DECL_OVERRIDE;
- void fillRect(const QRectF &rect, const QColor &color) Q_DECL_OVERRIDE;
- void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE;
- void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
- void drawPixmap(const QPointF &p, const QPixmap &pm) Q_DECL_OVERRIDE;
- void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
+ void fill(const QVectorPath &path, const QBrush &brush) override;
+ void fillRect(const QRectF &rect, const QBrush &brush) override;
+ void fillRect(const QRectF &rect, const QColor &color) override;
+ void drawRects(const QRect *rects, int rectCount) override;
+ void drawRects(const QRectF *rects, int rectCount) override;
+ void drawPixmap(const QPointF &p, const QPixmap &pm) override;
+ void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
// State tracking
- void setState(QPainterState *s) Q_DECL_OVERRIDE;
- virtual void clipEnabledChanged() Q_DECL_OVERRIDE;
- virtual void penChanged() Q_DECL_OVERRIDE;
- virtual void brushChanged() Q_DECL_OVERRIDE;
- virtual void opacityChanged() Q_DECL_OVERRIDE;
- virtual void compositionModeChanged() Q_DECL_OVERRIDE;
- virtual void renderHintsChanged() Q_DECL_OVERRIDE;
- virtual void transformChanged() Q_DECL_OVERRIDE;
+ void setState(QPainterState *s) override;
+ virtual void clipEnabledChanged() override;
+ virtual void penChanged() override;
+ virtual void brushChanged() override;
+ virtual void opacityChanged() override;
+ virtual void compositionModeChanged() override;
+ virtual void renderHintsChanged() override;
+ virtual void transformChanged() override;
// Override to lock the QBlittable before using raster
- void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- void fillPath(const QPainterPath &path, QSpanData *fillData) Q_DECL_OVERRIDE;
- void fillPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- void drawEllipse(const QRectF &rect) Q_DECL_OVERRIDE;
- void drawImage(const QPointF &p, const QImage &img) Q_DECL_OVERRIDE;
+ void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override;
+ void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) override;
+ void fillPath(const QPainterPath &path, QSpanData *fillData) override;
+ void fillPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override;
+ void drawEllipse(const QRectF &rect) override;
+ void drawImage(const QPointF &p, const QImage &img) override;
void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr) Q_DECL_OVERRIDE;
- void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
- void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
- void drawPoints(const QPoint *points, int pointCount) Q_DECL_OVERRIDE;
- void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
- void drawStaticTextItem(QStaticTextItem *) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr) override;
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
+ void drawPoints(const QPointF *points, int pointCount) override;
+ void drawPoints(const QPoint *points, int pointCount) override;
+ void stroke(const QVectorPath &path, const QPen &pen) override;
+ void drawStaticTextItem(QStaticTextItem *) override;
bool drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions,
- QFontEngine *fontEngine) Q_DECL_OVERRIDE;
+ QFontEngine *fontEngine) override;
};
QT_END_NAMESPACE
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 1637a933b1..0e3163eefb 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -3782,8 +3782,8 @@ void QClipData::initialize()
}
} else if (hasRegionClip) {
- const QVector<QRect> rects = clipRegion.rects();
- const int numRects = rects.size();
+ const auto rects = clipRegion.begin();
+ const int numRects = clipRegion.rectCount();
{ // resize
const int maxSpans = (ymax - ymin) * numRects;
@@ -3797,8 +3797,8 @@ void QClipData::initialize()
int firstInBand = 0;
count = 0;
while (firstInBand < numRects) {
- const int currMinY = rects.at(firstInBand).y();
- const int currMaxY = currMinY + rects.at(firstInBand).height();
+ const int currMinY = rects[firstInBand].y();
+ const int currMaxY = currMinY + rects[firstInBand].height();
while (y < currMinY) {
m_clipLines[y].spans = 0;
@@ -3807,7 +3807,7 @@ void QClipData::initialize()
}
int lastInBand = firstInBand;
- while (lastInBand + 1 < numRects && rects.at(lastInBand+1).top() == y)
+ while (lastInBand + 1 < numRects && rects[lastInBand+1].top() == y)
++lastInBand;
while (y < currMaxY) {
@@ -3816,7 +3816,7 @@ void QClipData::initialize()
m_clipLines[y].count = lastInBand - firstInBand + 1;
for (int r = firstInBand; r <= lastInBand; ++r) {
- const QRect &currRect = rects.at(r);
+ const QRect &currRect = rects[r];
QSpan *span = m_spans + count;
span->x = currRect.x();
span->len = currRect.width();
diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h
index e2e0f821e3..8c6f668d9d 100644
--- a/src/gui/painting/qpaintengine_raster_p.h
+++ b/src/gui/painting/qpaintengine_raster_p.h
@@ -135,20 +135,20 @@ public:
QRasterPaintEngine(QPaintDevice *device);
~QRasterPaintEngine();
- bool begin(QPaintDevice *device) Q_DECL_OVERRIDE;
- bool end() Q_DECL_OVERRIDE;
-
- void penChanged() Q_DECL_OVERRIDE;
- void brushChanged() Q_DECL_OVERRIDE;
- void brushOriginChanged() Q_DECL_OVERRIDE;
- void opacityChanged() Q_DECL_OVERRIDE;
- void compositionModeChanged() Q_DECL_OVERRIDE;
- void renderHintsChanged() Q_DECL_OVERRIDE;
- void transformChanged() Q_DECL_OVERRIDE;
- void clipEnabledChanged() Q_DECL_OVERRIDE;
-
- void setState(QPainterState *s) Q_DECL_OVERRIDE;
- QPainterState *createState(QPainterState *orig) const Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *device) override;
+ bool end() override;
+
+ void penChanged() override;
+ void brushChanged() override;
+ void brushOriginChanged() override;
+ void opacityChanged() override;
+ void compositionModeChanged() override;
+ void renderHintsChanged() override;
+ void transformChanged() override;
+ void clipEnabledChanged() override;
+
+ void setState(QPainterState *s) override;
+ QPainterState *createState(QPainterState *orig) const override;
inline QRasterPaintEngineState *state() {
return static_cast<QRasterPaintEngineState *>(QPaintEngineEx::state());
}
@@ -164,40 +164,40 @@ public:
virtual void fillPath(const QPainterPath &path, QSpanData *fillData);
virtual void fillPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
- void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
+ void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override;
+ void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) override;
- void drawEllipse(const QRectF &rect) Q_DECL_OVERRIDE;
+ void drawEllipse(const QRectF &rect) override;
- void fillRect(const QRectF &rect, const QBrush &brush) Q_DECL_OVERRIDE;
- void fillRect(const QRectF &rect, const QColor &color) Q_DECL_OVERRIDE;
+ void fillRect(const QRectF &rect, const QBrush &brush) override;
+ void fillRect(const QRectF &rect, const QColor &color) override;
- void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE;
- void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
+ void drawRects(const QRect *rects, int rectCount) override;
+ void drawRects(const QRectF *rects, int rectCount) override;
- void drawPixmap(const QPointF &p, const QPixmap &pm) Q_DECL_OVERRIDE;
- void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
- void drawImage(const QPointF &p, const QImage &img) Q_DECL_OVERRIDE;
+ void drawPixmap(const QPointF &p, const QPixmap &pm) override;
+ void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
+ void drawImage(const QPointF &p, const QImage &img) override;
void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr) Q_DECL_OVERRIDE;
- void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr) override;
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
- void drawLines(const QLine *line, int lineCount) Q_DECL_OVERRIDE;
- void drawLines(const QLineF *line, int lineCount) Q_DECL_OVERRIDE;
+ void drawLines(const QLine *line, int lineCount) override;
+ void drawLines(const QLineF *line, int lineCount) override;
- void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
- void drawPoints(const QPoint *points, int pointCount) Q_DECL_OVERRIDE;
+ void drawPoints(const QPointF *points, int pointCount) override;
+ void drawPoints(const QPoint *points, int pointCount) override;
- void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
- void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
+ void stroke(const QVectorPath &path, const QPen &pen) override;
+ void fill(const QVectorPath &path, const QBrush &brush) override;
- void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE;
- void clip(const QRect &rect, Qt::ClipOperation op) Q_DECL_OVERRIDE;
- void clip(const QRegion &region, Qt::ClipOperation op) Q_DECL_OVERRIDE;
+ void clip(const QVectorPath &path, Qt::ClipOperation op) override;
+ void clip(const QRect &rect, Qt::ClipOperation op) override;
+ void clip(const QRegion &region, Qt::ClipOperation op) override;
inline const QClipData *clipData() const;
- void drawStaticTextItem(QStaticTextItem *textItem) Q_DECL_OVERRIDE;
+ void drawStaticTextItem(QStaticTextItem *textItem) override;
virtual bool drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFixedPoint *positions,
QFontEngine *fontEngine);
@@ -227,12 +227,12 @@ public:
QRasterBuffer *rasterBuffer();
void alphaPenBlt(const void* src, int bpl, int depth, int rx,int ry,int w,int h, bool useGammaCorrection);
- Type type() const Q_DECL_OVERRIDE { return Raster; }
+ Type type() const override { return Raster; }
- QPoint coordinateOffset() const Q_DECL_OVERRIDE;
+ QPoint coordinateOffset() const override;
- bool requiresPretransformedGlyphPositions(QFontEngine *fontEngine, const QTransform &m) const Q_DECL_OVERRIDE;
- bool shouldDrawCachedGlyphs(QFontEngine *fontEngine, const QTransform &m) const Q_DECL_OVERRIDE;
+ bool requiresPretransformedGlyphPositions(QFontEngine *fontEngine, const QTransform &m) const override;
+ bool shouldDrawCachedGlyphs(QFontEngine *fontEngine, const QTransform &m) const override;
protected:
QRasterPaintEngine(QRasterPaintEnginePrivate &d, QPaintDevice *);
diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
index 812cb8c02d..0643a7cbb6 100644
--- a/src/gui/painting/qpaintengineex.cpp
+++ b/src/gui/painting/qpaintengineex.cpp
@@ -619,18 +619,17 @@ void QPaintEngineEx::clip(const QRect &r, Qt::ClipOperation op)
void QPaintEngineEx::clip(const QRegion &region, Qt::ClipOperation op)
{
- if (region.rectCount() == 1)
- clip(region.boundingRect(), op);
-
- QVector<QRect> rects = region.rects();
- if (rects.size() <= 32) {
+ const auto rectsInRegion = region.rectCount();
+ if (rectsInRegion == 1) {
+ clip(*region.begin(), op);
+ } else if (rectsInRegion <= 32) {
qreal pts[2*32*4];
int pos = 0;
- for (QVector<QRect>::const_iterator i = rects.constBegin(); i != rects.constEnd(); ++i) {
- qreal x1 = i->x();
- qreal y1 = i->y();
- qreal x2 = i->x() + i->width();
- qreal y2 = i->y() + i->height();
+ for (QRect r : region) {
+ qreal x1 = r.x();
+ qreal y1 = r.y();
+ qreal x2 = r.x() + r.width();
+ qreal y2 = r.y() + r.height();
pts[pos++] = x1;
pts[pos++] = y1;
@@ -644,19 +643,19 @@ void QPaintEngineEx::clip(const QRegion &region, Qt::ClipOperation op)
pts[pos++] = x1;
pts[pos++] = y2;
}
- QVectorPath vp(pts, rects.size() * 4, qpaintengineex_rect4_types_32);
+ QVectorPath vp(pts, rectsInRegion * 4, qpaintengineex_rect4_types_32);
clip(vp, op);
} else {
- QVarLengthArray<qreal> pts(rects.size() * 2 * 4);
- QVarLengthArray<QPainterPath::ElementType> types(rects.size() * 4);
+ QVarLengthArray<qreal> pts(rectsInRegion * 2 * 4);
+ QVarLengthArray<QPainterPath::ElementType> types(rectsInRegion * 4);
int ppos = 0;
int tpos = 0;
- for (QVector<QRect>::const_iterator i = rects.constBegin(); i != rects.constEnd(); ++i) {
- qreal x1 = i->x();
- qreal y1 = i->y();
- qreal x2 = i->x() + i->width();
- qreal y2 = i->y() + i->height();
+ for (QRect r : region) {
+ qreal x1 = r.x();
+ qreal y1 = r.y();
+ qreal x2 = r.x() + r.width();
+ qreal y2 = r.y() + r.height();
pts[ppos++] = x1;
pts[ppos++] = y1;
@@ -676,7 +675,7 @@ void QPaintEngineEx::clip(const QRegion &region, Qt::ClipOperation op)
types[tpos++] = QPainterPath::LineToElement;
}
- QVectorPath vp(pts.data(), rects.size() * 4, types.data());
+ QVectorPath vp(pts.data(), rectsInRegion * 4, types.data());
clip(vp, op);
}
diff --git a/src/gui/painting/qpaintengineex_p.h b/src/gui/painting/qpaintengineex_p.h
index 7c2c98140f..b2f8b64029 100644
--- a/src/gui/painting/qpaintengineex_p.h
+++ b/src/gui/painting/qpaintengineex_p.h
@@ -103,36 +103,36 @@ public:
virtual void drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, Qt::SizeMode mode);
- virtual void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE;
- virtual void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
+ virtual void drawRects(const QRect *rects, int rectCount) override;
+ virtual void drawRects(const QRectF *rects, int rectCount) override;
- virtual void drawLines(const QLine *lines, int lineCount) Q_DECL_OVERRIDE;
- virtual void drawLines(const QLineF *lines, int lineCount) Q_DECL_OVERRIDE;
+ virtual void drawLines(const QLine *lines, int lineCount) override;
+ virtual void drawLines(const QLineF *lines, int lineCount) override;
- virtual void drawEllipse(const QRectF &r) Q_DECL_OVERRIDE;
- virtual void drawEllipse(const QRect &r) Q_DECL_OVERRIDE;
+ virtual void drawEllipse(const QRectF &r) override;
+ virtual void drawEllipse(const QRect &r) override;
- virtual void drawPath(const QPainterPath &path) Q_DECL_OVERRIDE;
+ virtual void drawPath(const QPainterPath &path) override;
- virtual void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
- virtual void drawPoints(const QPoint *points, int pointCount) Q_DECL_OVERRIDE;
+ virtual void drawPoints(const QPointF *points, int pointCount) override;
+ virtual void drawPoints(const QPoint *points, int pointCount) override;
- virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
+ virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override;
+ virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) override;
- virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE = 0;
+ virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override = 0;
virtual void drawPixmap(const QPointF &pos, const QPixmap &pm);
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE = 0;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override = 0;
virtual void drawImage(const QPointF &pos, const QImage &image);
- virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) Q_DECL_OVERRIDE;
+ virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) override;
virtual void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap,
QFlags<QPainter::PixmapFragmentHint> hints);
- virtual void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
+ virtual void updateState(const QPaintEngineState &state) override;
virtual void drawStaticTextItem(QStaticTextItem *);
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 6e84a3f384..ec1b4c1310 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -4256,7 +4256,7 @@ void QPainter::drawEllipse(const QRectF &r)
}
/*!
- \fn QPainter::drawEllipse(const QRect &rectangle)
+ \fn void QPainter::drawEllipse(const QRect &rectangle)
\overload
@@ -4298,7 +4298,7 @@ void QPainter::drawEllipse(const QRect &r)
}
/*!
- \fn QPainter::drawEllipse(int x, int y, int width, int height)
+ \fn void QPainter::drawEllipse(int x, int y, int width, int height)
\overload
@@ -4309,7 +4309,7 @@ void QPainter::drawEllipse(const QRect &r)
/*!
\since 4.4
- \fn QPainter::drawEllipse(const QPointF &center, qreal rx, qreal ry)
+ \fn void QPainter::drawEllipse(const QPointF &center, qreal rx, qreal ry)
\overload
@@ -4319,7 +4319,7 @@ void QPainter::drawEllipse(const QRect &r)
/*!
\since 4.4
- \fn QPainter::drawEllipse(const QPoint &center, int rx, int ry)
+ \fn void QPainter::drawEllipse(const QPoint &center, int rx, int ry)
\overload
@@ -5744,7 +5744,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText
if (d->extended == 0
|| !d->state->matrix.isAffine()
|| !fe->supportsTransformation(d->state->matrix)) {
- staticText_d->paintText(topLeftPosition, this);
+ staticText_d->paintText(topLeftPosition, this, pen().color());
return;
}
@@ -5816,11 +5816,16 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText
QPen oldPen = d->state->pen;
QColor currentColor = oldPen.color();
+ static const QColor bodyIndicator(0, 0, 0, 0);
for (int i=0; i<staticText_d->itemCount; ++i) {
QStaticTextItem *item = staticText_d->items + i;
- if (item->color.isValid() && currentColor != item->color) {
- setPen(item->color);
- currentColor = item->color;
+ if (item->color.isValid() && currentColor != item->color
+ && item->color != bodyIndicator) {
+ setPen(item->color);
+ currentColor = item->color;
+ } else if (item->color == bodyIndicator) {
+ setPen(oldPen);
+ currentColor = oldPen.color();
}
d->extended->drawStaticTextItem(item);
@@ -5850,7 +5855,7 @@ void QPainter::drawText(const QPointF &p, const QString &str, int tf, int justif
if (!d->engine || str.isEmpty() || pen().style() == Qt::NoPen)
return;
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#if QT_DEPRECATED_SINCE(5, 11) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
if (tf & Qt::TextBypassShaping) {
// Skip complex shaping, shape using glyph advances only
int len = str.length();
@@ -6737,7 +6742,7 @@ void QPainter::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPo
}
/*!
- \fn QPainter::drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap,
+ \fn void QPainter::drawTiledPixmap(const QRect &rectangle, const QPixmap &pixmap,
const QPoint &position = QPoint())
\overload
@@ -7478,7 +7483,7 @@ start_lengthVariant:
if (!expandtabs) {
text[offset] = QLatin1Char(' ');
} else if (!tabarraylen && !tabstops) {
- tabstops = qRound(fm.width(QLatin1Char('x'))*8);
+ tabstops = qRound(fm.horizontalAdvance(QLatin1Char('x'))*8);
}
} else if (chr == QChar(ushort(0x9c))) {
// string with multiple length variants
diff --git a/src/gui/painting/qpainter.h b/src/gui/painting/qpainter.h
index 64d15d5296..12a9c720a8 100644
--- a/src/gui/painting/qpainter.h
+++ b/src/gui/painting/qpainter.h
@@ -416,9 +416,9 @@ public:
void drawText(const QPointF &p, const QString &str, int tf, int justificationPadding);
- void drawText(const QRectF &r, int flags, const QString &text, QRectF *br = Q_NULLPTR);
- void drawText(const QRect &r, int flags, const QString &text, QRect *br = Q_NULLPTR);
- inline void drawText(int x, int y, int w, int h, int flags, const QString &text, QRect *br = Q_NULLPTR);
+ void drawText(const QRectF &r, int flags, const QString &text, QRectF *br = nullptr);
+ void drawText(const QRect &r, int flags, const QString &text, QRect *br = nullptr);
+ inline void drawText(int x, int y, int w, int h, int flags, const QString &text, QRect *br = nullptr);
void drawText(const QRectF &r, const QString &text, const QTextOption &o = QTextOption());
@@ -461,7 +461,7 @@ public:
static void setRedirected(const QPaintDevice *device, QPaintDevice *replacement,
const QPoint& offset = QPoint());
- static QPaintDevice *redirected(const QPaintDevice *device, QPoint *offset = Q_NULLPTR);
+ static QPaintDevice *redirected(const QPaintDevice *device, QPoint *offset = nullptr);
static void restoreRedirected(const QPaintDevice *device);
void beginNativePainting();
diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h
index f5bb4e17a8..5a909f2ede 100644
--- a/src/gui/painting/qpdf_p.h
+++ b/src/gui/painting/qpdf_p.h
@@ -186,28 +186,28 @@ public:
void setPdfVersion(PdfVersion version);
// reimplementations QPaintEngine
- bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
- bool end() Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *pdev) override;
+ bool end() override;
- void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
- void drawLines(const QLineF *lines, int lineCount) Q_DECL_OVERRIDE;
- void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
- void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- void drawPath (const QPainterPath & path) Q_DECL_OVERRIDE;
+ void drawPoints(const QPointF *points, int pointCount) override;
+ void drawLines(const QLineF *lines, int lineCount) override;
+ void drawRects(const QRectF *rects, int rectCount) override;
+ void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override;
+ void drawPath (const QPainterPath & path) override;
- void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
- void drawPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QRectF & sr) Q_DECL_OVERRIDE;
+ void drawPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QRectF & sr) override;
void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- void drawTiledPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QPointF & point) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ void drawTiledPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QPointF & point) override;
void drawHyperlink(const QRectF &r, const QUrl &url);
- void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
+ void updateState(const QPaintEngineState &state) override;
int metric(QPaintDevice::PaintDeviceMetric metricType) const;
- Type type() const Q_DECL_OVERRIDE;
+ Type type() const override;
// end reimplementations QPaintEngine
// Printer stuff...
diff --git a/src/gui/painting/qpdfwriter.cpp b/src/gui/painting/qpdfwriter.cpp
index 5af465edeb..2f24c7efcb 100644
--- a/src/gui/painting/qpdfwriter.cpp
+++ b/src/gui/painting/qpdfwriter.cpp
@@ -79,7 +79,7 @@ public:
virtual ~QPdfPagedPaintDevicePrivate()
{}
- bool setPageLayout(const QPageLayout &newPageLayout) Q_DECL_OVERRIDE
+ bool setPageLayout(const QPageLayout &newPageLayout) override
{
// Try to set the paint engine page layout
pd->engine->setPageLayout(newPageLayout);
@@ -88,7 +88,7 @@ public:
return m_pageLayout.isEquivalentTo(newPageLayout);
}
- bool setPageSize(const QPageSize &pageSize) Q_DECL_OVERRIDE
+ bool setPageSize(const QPageSize &pageSize) override
{
// Try to set the paint engine page size
pd->engine->setPageSize(pageSize);
@@ -97,7 +97,7 @@ public:
return m_pageLayout.pageSize().isEquivalentTo(pageSize);
}
- bool setPageOrientation(QPageLayout::Orientation orientation) Q_DECL_OVERRIDE
+ bool setPageOrientation(QPageLayout::Orientation orientation) override
{
// Set the print engine value
pd->engine->setPageOrientation(orientation);
@@ -106,12 +106,12 @@ public:
return m_pageLayout.orientation() == orientation;
}
- bool setPageMargins(const QMarginsF &margins) Q_DECL_OVERRIDE
+ bool setPageMargins(const QMarginsF &margins) override
{
return setPageMargins(margins, pageLayout().units());
}
- bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units) Q_DECL_OVERRIDE
+ bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units) override
{
// Try to set engine margins
pd->engine->setPageMargins(margins, units);
@@ -120,7 +120,7 @@ public:
return m_pageLayout.margins() == margins && m_pageLayout.units() == units;
}
- QPageLayout pageLayout() const Q_DECL_OVERRIDE
+ QPageLayout pageLayout() const override
{
return pd->engine->pageLayout();
}
diff --git a/src/gui/painting/qpen.h b/src/gui/painting/qpen.h
index d8d99ba800..03abfb3d7d 100644
--- a/src/gui/painting/qpen.h
+++ b/src/gui/painting/qpen.h
@@ -72,7 +72,7 @@ public:
QPen &operator=(const QPen &pen) Q_DECL_NOTHROW;
#ifdef Q_COMPILER_RVALUE_REFS
QPen(QPen &&other) Q_DECL_NOTHROW
- : d(other.d) { other.d = Q_NULLPTR; }
+ : d(other.d) { other.d = nullptr; }
QPen &operator=(QPen &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp
index 8ab22beb31..09c23fdfa1 100644
--- a/src/gui/painting/qplatformbackingstore.cpp
+++ b/src/gui/painting/qplatformbackingstore.cpp
@@ -704,7 +704,7 @@ void QPlatformBackingStore::endPaint()
*/
QPlatformGraphicsBuffer *QPlatformBackingStore::graphicsBuffer() const
{
- return Q_NULLPTR;
+ return nullptr;
}
/*!
diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp
index 3fb6f925b3..77718ce747 100644
--- a/src/gui/painting/qregion.cpp
+++ b/src/gui/painting/qregion.cpp
@@ -81,8 +81,9 @@ QT_BEGIN_NAMESPACE
contains() a QPoint or QRect. The bounding rectangle can be found
with boundingRect().
- Iteration over the region (with begin(), end()) gives a decomposition of
- the region into rectangles. The same sequence of rectangles is returned by rects().
+ Iteration over the region (with begin(), end(), or C++11
+ ranged-for loops) gives a decomposition of the region into
+ rectangles.
Example of using complex regions:
\snippet code/src_gui_painting_qregion.cpp 0
@@ -447,19 +448,20 @@ QDebug operator<<(QDebug s, const QRegion &r)
} else if (r.isEmpty()) {
s << "empty";
} else {
- const QVector<QRect> rects = r.rects();
- const int count = rects.size();
+ const int count = r.rectCount();
if (count > 1)
s << "size=" << count << ", bounds=(";
QtDebugUtils::formatQRect(s, r.boundingRect());
if (count > 1) {
s << ") - [";
- for (int i = 0; i < count; ++i) {
- if (i)
+ bool first = true;
+ for (const QRect &rect : r) {
+ if (!first)
s << ", ";
s << '(';
- QtDebugUtils::formatQRect(s, rects.at(i));
+ QtDebugUtils::formatQRect(s, rect);
s << ')';
+ first = false;
}
s << ']';
}
@@ -740,7 +742,7 @@ bool QRegion::intersects(const QRegion &region) const
#if !defined (Q_OS_UNIX) && !defined (Q_OS_WIN) || defined(Q_CLANG_QDOC)
-/*!
+/*
\overload
\since 4.4
*/
@@ -754,7 +756,8 @@ QRegion QRegion::intersect(const QRect &r) const
\fn int QRegion::rectCount() const
\since 4.6
- Returns the number of rectangles that will be returned in rects().
+ Returns the number of rectangles that this region is composed of.
+ Same as \c{end() - begin()}.
*/
/*!
@@ -916,20 +919,28 @@ QRegion QRegion::intersect(const QRect &r) const
gives a rectangle that is QRect::isNull().
*/
+#if QT_DEPRECATED_SINCE(5, 11)
/*!
\fn QVector<QRect> QRegion::rects() const
+ \obsolete
+
+ Use begin() and end() instead.
Returns an array of non-overlapping rectangles that make up the
region.
The union of all the rectangles is equal to the original region.
*/
+#endif
/*!
\typedef QRegion::const_iterator
\since 5.8
- An iterator over the QRects that make up the region.
+ An iterator over the non-overlapping rectangles that make up the
+ region.
+
+ The union of all the rectangles is equal to the original region.
QRegion does not offer mutable iterators.
@@ -940,7 +951,10 @@ QRegion QRegion::intersect(const QRect &r) const
\typedef QRegion::const_reverse_iterator
\since 5.8
- A reverse iterator over the QRects that make up the region.
+ A reverse iterator over the non-overlapping rectangles that make up the
+ region.
+
+ The union of all the rectangles is equal to the original region.
QRegion does not offer mutable iterators.
@@ -952,8 +966,9 @@ QRegion QRegion::intersect(const QRect &r) const
\since 5.8
Returns a const_iterator pointing to the beginning of the range of
- rectangles that make up this range, in the order in which rects()
- returns them.
+ non-overlapping rectangles that make up the region.
+
+ The union of all the rectangles is equal to the original region.
\sa rbegin(), cbegin(), end()
*/
@@ -969,9 +984,10 @@ QRegion QRegion::intersect(const QRect &r) const
\fn QRegion::end() const
\since 5.8
- Returns a const_iterator pointing to one past the end of the range of
- rectangles that make up this range, in the order in which rects()
- returns them.
+ Returns a const_iterator pointing to one past the end of
+ non-overlapping rectangles that make up the region.
+
+ The union of all the rectangles is equal to the original region.
\sa rend(), cend(), begin()
*/
@@ -987,9 +1003,10 @@ QRegion QRegion::intersect(const QRect &r) const
\fn QRegion::rbegin() const
\since 5.8
- Returns a const_reverse_iterator pointing to the beginning of the range of
- rectangles that make up this range, in the reverse order in which rects()
- returns them.
+ Returns a const_reverse_iterator pointing to the beginning of the
+ range of non-overlapping rectangles that make up the region.
+
+ The union of all the rectangles is equal to the original region.
\sa begin(), crbegin(), rend()
*/
@@ -1005,9 +1022,10 @@ QRegion QRegion::intersect(const QRect &r) const
\fn QRegion::rend() const
\since 5.8
- Returns a const_reverse_iterator pointing to one past the end of the range of
- rectangles that make up this range, in the reverse order in which rects()
- returns them.
+ Returns a const_reverse_iterator pointing to one past the end of
+ the range of non-overlapping rectangles that make up the region.
+
+ The union of all the rectangles is equal to the original region.
\sa end(), crend(), rbegin()
*/
@@ -2281,7 +2299,14 @@ static void miRegionOp(QRegionPrivate &dest,
dest.vectorize();
- QVector<QRect> oldRects = dest.rects;
+ /*
+ * The following calls are going to detach dest.rects. Since dest might be
+ * aliasing *reg1 and/or *reg2, and we could have active iterators on
+ * reg1->rects and reg2->rects (if the regions have more than 1 rectangle),
+ * take a copy of dest.rects to keep those iteractors valid.
+ */
+ const QVector<QRect> destRectsCopy = dest.rects;
+ Q_UNUSED(destRectsCopy);
dest.numRects = 0;
@@ -3613,7 +3638,7 @@ static void PtsToRegion(int numFullPtBlocks, int iCurPtBlock,
}
if (rowSize) {
- QPoint *next = i ? &pts[2] : (numFullPtBlocks && iCurPtBlock ? CurPtBlock->next->pts : Q_NULLPTR);
+ QPoint *next = i ? &pts[2] : (numFullPtBlocks && iCurPtBlock ? CurPtBlock->next->pts : nullptr);
if (!next || next->y() != pts[0].y()) {
flushRow(row.data(), pts[0].y(), rowSize, reg, &lastRow, &extendTo, &needsExtend);
@@ -4340,6 +4365,7 @@ bool qt_region_strictContains(const QRegion &region, const QRect &rect)
&& rect.top() >= r1.top() && rect.bottom() <= r1.bottom());
}
+#if QT_DEPRECATED_SINCE(5, 11)
QVector<QRect> QRegion::rects() const
{
if (d->qt_rgn) {
@@ -4351,6 +4377,7 @@ QVector<QRect> QRegion::rects() const
return QVector<QRect>();
}
}
+#endif
QRegion::const_iterator QRegion::begin() const Q_DECL_NOTHROW
{
diff --git a/src/gui/painting/qregion.h b/src/gui/painting/qregion.h
index 8dd7649447..9fe6ed5675 100644
--- a/src/gui/painting/qregion.h
+++ b/src/gui/painting/qregion.h
@@ -122,7 +122,10 @@ public:
bool intersects(const QRect &r) const;
QRect boundingRect() const Q_DECL_NOTHROW;
+#if QT_DEPRECATED_SINCE(5, 11)
+ QT_DEPRECATED_X("Use begin()/end() instead")
QVector<QRect> rects() const;
+#endif
void setRects(const QRect *rect, int num);
int rectCount() const Q_DECL_NOTHROW;
#ifdef Q_COMPILER_MANGLES_RETURN_TYPE
diff --git a/src/gui/painting/qrgba64.qdoc b/src/gui/painting/qrgba64.qdoc
index 064f018210..26c78a5dcd 100644
--- a/src/gui/painting/qrgba64.qdoc
+++ b/src/gui/painting/qrgba64.qdoc
@@ -105,7 +105,7 @@
*/
/*!
- \fn QRgba64::setRed(quint16 red)
+ \fn void QRgba64::setRed(quint16 red)
Sets the red color component of this color to \a red.
@@ -121,7 +121,7 @@
*/
/*!
- \fn QRgba64::setGreen(quint16 green)
+ \fn void QRgba64::setGreen(quint16 green)
Sets the green color component of this color to \a green.
@@ -137,7 +137,7 @@
*/
/*!
- \fn QRgba64::setBlue(quint16 blue)
+ \fn void QRgba64::setBlue(quint16 blue)
Sets the blue color component of this color to \a blue.
@@ -153,7 +153,7 @@
*/
/*!
- \fn QRgba64::setAlpha(quint16 alpha)
+ \fn void QRgba64::setAlpha(quint16 alpha)
Sets the alpha of this color to \a alpha.
diff --git a/src/gui/painting/qrgba64_p.h b/src/gui/painting/qrgba64_p.h
index 7776a5b08a..adceda2210 100644
--- a/src/gui/painting/qrgba64_p.h
+++ b/src/gui/painting/qrgba64_p.h
@@ -299,6 +299,21 @@ inline QRgba64 rgbBlend(QRgba64 d, QRgba64 s, uint rgbAlpha)
return blend;
}
+static Q_ALWAYS_INLINE void blend_pixel(QRgba64 &dst, QRgba64 src)
+{
+ if (src.isOpaque())
+ dst = src;
+ else if (!src.isTransparent())
+ dst = src + multiplyAlpha65535(dst, 65535 - src.alpha());
+}
+
+static Q_ALWAYS_INLINE void blend_pixel(QRgba64 &dst, QRgba64 src, const int const_alpha)
+{
+ if (!src.isTransparent()) {
+ src = multiplyAlpha255(src, const_alpha);
+ dst = src + multiplyAlpha65535(dst, 65535 - src.alpha());
+ }
+}
QT_END_NAMESPACE
diff --git a/src/gui/painting/qt_mips_asm_dsp_p.h b/src/gui/painting/qt_mips_asm_dsp_p.h
index 1393a35667..172910ea1c 100644
--- a/src/gui/painting/qt_mips_asm_dsp_p.h
+++ b/src/gui/painting/qt_mips_asm_dsp_p.h
@@ -55,6 +55,7 @@
#pragma qt_sync_stop_processing
#endif
+#ifndef Q_CLANG_QDOC
#define zero $0
#define AT $1
#define v0 $2
@@ -88,6 +89,7 @@
#define fp $30
#define s8 $30
#define ra $31
+#endif
/*
* LEAF_MIPS32R2 - declare leaf_mips32r2 routine
diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h
index 25253b496a..3da28872b1 100644
--- a/src/gui/painting/qtextureglyphcache_p.h
+++ b/src/gui/painting/qtextureglyphcache_p.h
@@ -169,9 +169,9 @@ public:
: QTextureGlyphCache(format, matrix) { }
~QImageTextureGlyphCache();
- virtual void createTextureData(int width, int height) Q_DECL_OVERRIDE;
- virtual void resizeTextureData(int width, int height) Q_DECL_OVERRIDE;
- virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
+ virtual void createTextureData(int width, int height) override;
+ virtual void resizeTextureData(int width, int height) override;
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) override;
inline const QImage &image() const { return m_image; }
diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp
index 7f06915444..7a53c44bc4 100644
--- a/src/gui/painting/qtransform.cpp
+++ b/src/gui/painting/qtransform.cpp
@@ -265,7 +265,7 @@ QTransform::QTransform()
, m_13(0), m_23(0), m_33(1)
, m_type(TxNone)
, m_dirty(TxNone)
- , d(Q_NULLPTR)
+ , d(nullptr)
{
}
@@ -284,7 +284,7 @@ QTransform::QTransform(qreal h11, qreal h12, qreal h13,
, m_13(h13), m_23(h23), m_33(h33)
, m_type(TxNone)
, m_dirty(TxProject)
- , d(Q_NULLPTR)
+ , d(nullptr)
{
}
@@ -301,7 +301,7 @@ QTransform::QTransform(qreal h11, qreal h12, qreal h21,
, m_13(0), m_23(0), m_33(1)
, m_type(TxNone)
, m_dirty(TxShear)
- , d(Q_NULLPTR)
+ , d(nullptr)
{
}
@@ -317,7 +317,7 @@ QTransform::QTransform(const QMatrix &mtx)
m_13(0), m_23(0), m_33(1)
, m_type(TxNone)
, m_dirty(TxShear)
- , d(Q_NULLPTR)
+ , d(nullptr)
{
}
diff --git a/src/gui/painting/qtransform.h b/src/gui/painting/qtransform.h
index efb0fd7e83..63c4a241c1 100644
--- a/src/gui/painting/qtransform.h
+++ b/src/gui/painting/qtransform.h
@@ -116,7 +116,7 @@ public:
qreal m21, qreal m22, qreal m23,
qreal m31, qreal m32, qreal m33);
- Q_REQUIRED_RESULT QTransform inverted(bool *invertible = Q_NULLPTR) const;
+ Q_REQUIRED_RESULT QTransform inverted(bool *invertible = nullptr) const;
Q_REQUIRED_RESULT QTransform adjoint() const;
Q_REQUIRED_RESULT QTransform transposed() const;
@@ -173,7 +173,7 @@ private:
, m_13(h13), m_23(h23), m_33(h33)
, m_type(TxNone)
, m_dirty(TxProject)
- , d(Q_NULLPTR)
+ , d(nullptr)
{
}
inline QTransform(bool)
@@ -181,7 +181,7 @@ private:
, m_13(0), m_23(0), m_33(1)
, m_type(TxNone)
, m_dirty(TxNone)
- , d(Q_NULLPTR)
+ , d(nullptr)
{
}
inline TransformationType inline_type() const;
diff --git a/src/gui/painting/qtriangulatingstroker.cpp b/src/gui/painting/qtriangulatingstroker.cpp
index 3f7b01ddbe..b1b07f9699 100644
--- a/src/gui/painting/qtriangulatingstroker.cpp
+++ b/src/gui/painting/qtriangulatingstroker.cpp
@@ -261,7 +261,7 @@ void QTriangulatingStroker::moveTo(const qreal *pts)
normalVector(m_cx, m_cy, x2, y2, &m_nvx, &m_nvy);
- // To acheive jumps we insert zero-area tringles. This is done by
+ // To achieve jumps we insert zero-area tringles. This is done by
// adding two identical points in both the end of previous strip
// and beginning of next strip
bool invisibleJump = m_vertices.size();
diff --git a/src/gui/qtgui.tracepoints b/src/gui/qtgui.tracepoints
new file mode 100644
index 0000000000..aa8a8ede57
--- /dev/null
+++ b/src/gui/qtgui.tracepoints
@@ -0,0 +1,8 @@
+qfontdatabase_addapplicationfont(const QString &filename)
+qfontdatabase_load(const QString &family, int pointSize)
+qfontdatabase_loadengine(const QString &family, int pointSize)
+qfontdatabaseprivate_addappfont(const QString &fileName)
+qguiapplicationprivate_init_entry()
+qguiapplicationprivate_init_exit()
+qguiapplicationprivate_processwsevents_entry(int type)
+qguiapplicationprivate_processwsevents_exit(int type)
diff --git a/src/gui/text/qabstracttextdocumentlayout.h b/src/gui/text/qabstracttextdocumentlayout.h
index 438ad6e70b..8fea27f772 100644
--- a/src/gui/text/qabstracttextdocumentlayout.h
+++ b/src/gui/text/qabstracttextdocumentlayout.h
@@ -100,7 +100,7 @@ public:
QTextDocument *document() const;
void registerHandler(int objectType, QObject *component);
- void unregisterHandler(int objectType, QObject *component = Q_NULLPTR);
+ void unregisterHandler(int objectType, QObject *component = nullptr);
QTextObjectInterface *handlerForObject(int objectType) const;
Q_SIGNALS:
diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp
index 438cd3de3a..220e89a0c4 100644
--- a/src/gui/text/qfont.cpp
+++ b/src/gui/text/qfont.cpp
@@ -2849,7 +2849,7 @@ QFontEngine *QFontCache::findEngine(const Key &key)
end = engineCache.end();
if (it == end) return 0;
- Q_ASSERT(it.value().data != Q_NULLPTR);
+ Q_ASSERT(it.value().data != nullptr);
Q_ASSERT(key.multi == (it.value().data->type() == QFontEngine::Multi));
// found... update the hitcount and timestamp
@@ -2872,7 +2872,7 @@ void QFontCache::updateHitCountAndTimeStamp(Engine &value)
void QFontCache::insertEngine(const Key &key, QFontEngine *engine, bool insertMulti)
{
- Q_ASSERT(engine != Q_NULLPTR);
+ Q_ASSERT(engine != nullptr);
Q_ASSERT(key.multi == (engine->type() == QFontEngine::Multi));
#ifdef QFONTCACHE_DEBUG
diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h
index 9e5d0b4329..350ba7ce3c 100644
--- a/src/gui/text/qfont_p.h
+++ b/src/gui/text/qfont_p.h
@@ -282,7 +282,7 @@ public:
private:
void increaseCost(uint cost);
void decreaseCost(uint cost);
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *event) override;
void decreaseCache();
static const uint min_cost;
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 33dc27983a..404a722e29 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -74,6 +74,7 @@
# define FM_DEBUG if (false) qDebug
#endif
+#include <qtgui_tracepoints_p.h>
QT_BEGIN_NAMESPACE
@@ -804,6 +805,13 @@ QString qt_resolveFontFamilyAlias(const QString &alias)
return alias;
}
+/*!
+ Returns a list of alternative fonts for the specified \a family and
+ \a style and \a script using the \a styleHint given.
+
+ Default implementation returns a list of fonts for which \a style and \a script support
+ has been reported during the font database population.
+*/
QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
{
Q_UNUSED(family);
@@ -1002,6 +1010,8 @@ QFontEngine *loadEngine(int script, const QFontDef &request,
QFontEngine *engine = loadSingleEngine(script, request, family, foundry, style, size);
if (engine && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) {
+ Q_TRACE(qfontdatabase_loadengine, request.family, request.pointSize);
+
QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script));
if (!request.fallBackFamilies.isEmpty()) {
@@ -2432,6 +2442,8 @@ int QFontDatabasePrivate::addAppFont(const QByteArray &fontData, const QString &
font.data = fontData;
font.fileName = fileName;
+ Q_TRACE(qfontdatabaseprivate_addappfont, fileName);
+
int i;
for (i = 0; i < applicationFonts.count(); ++i)
if (applicationFonts.at(i).families.isEmpty())
@@ -2487,6 +2499,9 @@ int QFontDatabase::addApplicationFont(const QString &fileName)
QFile f(fileName);
if (!f.open(QIODevice::ReadOnly))
return -1;
+
+ Q_TRACE(qfontdatabase_addapplicationfont, fileName);
+
data = f.readAll();
}
QMutexLocker locker(fontDatabaseMutex());
@@ -2685,7 +2700,15 @@ QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script)
index = match(multi ? QChar::Script_Common : script, request, family_name, foundry_name, &desc, blackListed);
}
if (index >= 0) {
- engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size);
+ QFontDef fontDef = request;
+
+ // Don't pass empty family names to the platform font database, since it will then invoke its own matching
+ // and we will be out of sync with the matched font.
+ if (fontDef.family.isEmpty())
+ fontDef.family = desc.family->name;
+
+ engine = loadEngine(script, fontDef, desc.family, desc.foundry, desc.style, desc.size);
+
if (engine)
initFontDef(desc, request, &engine->fontDef, multi);
else
@@ -2775,7 +2798,9 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
if (d->engineData->engines[script])
return;
- QFontEngine *fe = Q_NULLPTR;
+ QFontEngine *fe = nullptr;
+
+ Q_TRACE(qfontdatabase_load, req.family, req.pointSize);
req.fallBackFamilies = fallBackFamilies;
if (!req.fallBackFamilies.isEmpty())
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index 33df020a6c..3b64ee0136 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -992,13 +992,12 @@ void QFontEngine::removeGlyphFromCache(glyph_t)
QFontEngine::Properties QFontEngine::properties() const
{
Properties p;
- QByteArray psname = QFontEngine::convertToPostscriptFontFamilyName(fontDef.family.toUtf8());
- psname += '-';
- psname += QByteArray::number(fontDef.style);
- psname += '-';
- psname += QByteArray::number(fontDef.weight);
-
- p.postscriptName = psname;
+ p.postscriptName
+ = QFontEngine::convertToPostscriptFontFamilyName(fontDef.family.toUtf8())
+ + '-'
+ + QByteArray::number(fontDef.style)
+ + '-'
+ + QByteArray::number(fontDef.weight);
p.ascent = ascent();
p.descent = descent();
p.leading = leading();
@@ -1080,7 +1079,7 @@ QFontEngineGlyphCache *QFontEngine::glyphCache(const void *context, GlyphFormat
{
const QHash<const void*, GlyphCaches>::const_iterator caches = m_glyphCaches.constFind(context);
if (caches == m_glyphCaches.cend())
- return Q_NULLPTR;
+ return nullptr;
for (GlyphCaches::const_iterator it = caches->begin(), end = caches->end(); it != end; ++it) {
QFontEngineGlyphCache *cache = it->cache.data();
@@ -1088,7 +1087,7 @@ QFontEngineGlyphCache *QFontEngine::glyphCache(const void *context, GlyphFormat
return cache;
}
- return Q_NULLPTR;
+ return nullptr;
}
static inline QFixed kerning(int left, int right, const QFontEngine::KernPair *pairs, int numPairs)
@@ -1234,7 +1233,7 @@ int QFontEngine::glyphCount() const
Qt::HANDLE QFontEngine::handle() const
{
- return Q_NULLPTR;
+ return nullptr;
}
const uchar *QFontEngine::getCMap(const uchar *table, uint tableSize, bool *isSymbolFont, int *cmapSize)
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 1ae2e86a93..a411e9ce4c 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -411,27 +411,27 @@ public:
QFontEngineBox(int size);
~QFontEngineBox();
- virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
- virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
+ virtual glyph_t glyphIndex(uint ucs4) const override;
+ virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override;
+ virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const override;
void draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &si);
- virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) override;
- virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- virtual glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
- virtual QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
+ virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ virtual glyph_metrics_t boundingBox(glyph_t glyph) override;
+ virtual QFontEngine *cloneWithSize(qreal pixelSize) const override;
- virtual QFixed ascent() const Q_DECL_OVERRIDE;
- virtual QFixed capHeight() const Q_DECL_OVERRIDE;
- virtual QFixed descent() const Q_DECL_OVERRIDE;
- virtual QFixed leading() const Q_DECL_OVERRIDE;
- virtual qreal maxCharWidth() const Q_DECL_OVERRIDE;
- virtual qreal minLeftBearing() const Q_DECL_OVERRIDE { return 0; }
- virtual qreal minRightBearing() const Q_DECL_OVERRIDE { return 0; }
- virtual QImage alphaMapForGlyph(glyph_t) Q_DECL_OVERRIDE;
+ virtual QFixed ascent() const override;
+ virtual QFixed capHeight() const override;
+ virtual QFixed descent() const override;
+ virtual QFixed leading() const override;
+ virtual qreal maxCharWidth() const override;
+ virtual qreal minLeftBearing() const override { return 0; }
+ virtual qreal minRightBearing() const override { return 0; }
+ virtual QImage alphaMapForGlyph(glyph_t) override;
- virtual bool canRender(const QChar *string, int len) const Q_DECL_OVERRIDE;
+ virtual bool canRender(const QChar *string, int len) const override;
inline int size() const { return _size; }
@@ -449,36 +449,36 @@ public:
explicit QFontEngineMulti(QFontEngine *engine, int script, const QStringList &fallbackFamilies = QStringList());
~QFontEngineMulti();
- virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
- virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
-
- virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- virtual glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
-
- virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
- virtual void doKerning(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
- virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
- virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0) Q_DECL_OVERRIDE;
-
- virtual QFixed ascent() const Q_DECL_OVERRIDE;
- virtual QFixed capHeight() const Q_DECL_OVERRIDE;
- virtual QFixed descent() const Q_DECL_OVERRIDE;
- virtual QFixed leading() const Q_DECL_OVERRIDE;
- virtual QFixed xHeight() const Q_DECL_OVERRIDE;
- virtual QFixed averageCharWidth() const Q_DECL_OVERRIDE;
- virtual QImage alphaMapForGlyph(glyph_t) Q_DECL_OVERRIDE;
- virtual QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
- virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t) Q_DECL_OVERRIDE;
- virtual QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
-
- virtual QFixed lineThickness() const Q_DECL_OVERRIDE;
- virtual QFixed underlinePosition() const Q_DECL_OVERRIDE;
- virtual qreal maxCharWidth() const Q_DECL_OVERRIDE;
- virtual qreal minLeftBearing() const Q_DECL_OVERRIDE;
- virtual qreal minRightBearing() const Q_DECL_OVERRIDE;
-
- virtual bool canRender(const QChar *string, int len) const Q_DECL_OVERRIDE;
+ virtual glyph_t glyphIndex(uint ucs4) const override;
+ virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override;
+
+ virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ virtual glyph_metrics_t boundingBox(glyph_t glyph) override;
+
+ virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const override;
+ virtual void doKerning(QGlyphLayout *, ShaperFlags) const override;
+ virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags) override;
+ virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0) override;
+
+ virtual QFixed ascent() const override;
+ virtual QFixed capHeight() const override;
+ virtual QFixed descent() const override;
+ virtual QFixed leading() const override;
+ virtual QFixed xHeight() const override;
+ virtual QFixed averageCharWidth() const override;
+ virtual QImage alphaMapForGlyph(glyph_t) override;
+ virtual QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition) override;
+ virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t) override;
+ virtual QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
+
+ virtual QFixed lineThickness() const override;
+ virtual QFixed underlinePosition() const override;
+ virtual qreal maxCharWidth() const override;
+ virtual qreal minLeftBearing() const override;
+ virtual qreal minRightBearing() const override;
+
+ virtual bool canRender(const QChar *string, int len) const override;
inline int fallbackFamilyCount() const { return m_fallbackFamilies.size(); }
inline QString fallbackFamilyAt(int at) const { return m_fallbackFamilies.at(at); }
diff --git a/src/gui/text/qfontengine_qpf2_p.h b/src/gui/text/qfontengine_qpf2_p.h
index e5c38ffbaf..b2dc620ad1 100644
--- a/src/gui/text/qfontengine_qpf2_p.h
+++ b/src/gui/text/qfontengine_qpf2_p.h
@@ -158,30 +158,30 @@ public:
QFontEngineQPF2(const QFontDef &def, const QByteArray &data);
~QFontEngineQPF2();
- FaceId faceId() const Q_DECL_OVERRIDE { return face_id; }
- bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
-
- virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
- bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
-
- void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
- QImage alphaMapForGlyph(glyph_t t) Q_DECL_OVERRIDE;
-
- glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
-
- QFixed ascent() const Q_DECL_OVERRIDE;
- QFixed capHeight() const Q_DECL_OVERRIDE;
- QFixed descent() const Q_DECL_OVERRIDE;
- QFixed leading() const Q_DECL_OVERRIDE;
- qreal maxCharWidth() const Q_DECL_OVERRIDE;
- qreal minLeftBearing() const Q_DECL_OVERRIDE;
- qreal minRightBearing() const Q_DECL_OVERRIDE;
- QFixed underlinePosition() const Q_DECL_OVERRIDE;
- QFixed lineThickness() const Q_DECL_OVERRIDE;
-
- virtual int glyphCount() const Q_DECL_OVERRIDE { return glyphMapEntries; }
+ FaceId faceId() const override { return face_id; }
+ bool getSfntTableData(uint tag, uchar *buffer, uint *length) const override;
+
+ virtual glyph_t glyphIndex(uint ucs4) const override;
+ bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override;
+ void recalcAdvances(QGlyphLayout *, ShaperFlags) const override;
+
+ void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) override;
+ QImage alphaMapForGlyph(glyph_t t) override;
+
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ glyph_metrics_t boundingBox(glyph_t glyph) override;
+
+ QFixed ascent() const override;
+ QFixed capHeight() const override;
+ QFixed descent() const override;
+ QFixed leading() const override;
+ qreal maxCharWidth() const override;
+ qreal minLeftBearing() const override;
+ qreal minRightBearing() const override;
+ QFixed underlinePosition() const override;
+ QFixed lineThickness() const override;
+
+ virtual int glyphCount() const override { return glyphMapEntries; }
bool isValid() const;
diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp
index 5675d6921d..407559ad51 100644
--- a/src/gui/text/qfontmetrics.cpp
+++ b/src/gui/text/qfontmetrics.cpp
@@ -452,7 +452,7 @@ bool QFontMetrics::inFontUcs4(uint ucs4) const
value is negative if the pixels of the character extend to the
left of the logical origin.
- See width(QChar) for a graphical description of this metric.
+ See width() for a graphical description of this metric.
\sa rightBearing(), minLeftBearing(), width()
*/
@@ -510,6 +510,7 @@ int QFontMetrics::rightBearing(QChar ch) const
return qRound(rb);
}
+#if QT_DEPRECATED_SINCE(5, 11)
/*!
Returns the width in pixels of the first \a len characters of \a
text. If \a len is negative (the default), the entire string is
@@ -520,11 +521,13 @@ int QFontMetrics::rightBearing(QChar ch) const
string will cover whereas width() returns the distance to where
the next string should be drawn.
+ \deprecated in Qt 5.11. Use horizontalAdvance() instead.
+
\sa boundingRect()
*/
int QFontMetrics::width(const QString &text, int len) const
{
- return width(text, len, 0);
+ return horizontalAdvance(text, len);
}
/*!
@@ -532,17 +535,17 @@ int QFontMetrics::width(const QString &text, int len) const
*/
int QFontMetrics::width(const QString &text, int len, int flags) const
{
- int pos = text.indexOf(QLatin1Char('\x9c'));
- if (pos != -1) {
- len = (len < 0) ? pos : qMin(pos, len);
- } else if (len < 0) {
- len = text.length();
- }
- if (len == 0)
- return 0;
-
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#if QT_DEPRECATED_SINCE(5, 11) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
if (flags & Qt::TextBypassShaping) {
+ int pos = text.indexOf(QLatin1Char('\x9c'));
+ if (pos != -1) {
+ len = (len < 0) ? pos : qMin(pos, len);
+ } else if (len < 0) {
+ len = text.length();
+ }
+ if (len == 0)
+ return 0;
+
// Skip complex shaping, only use advances
int numGlyphs = len;
QVarLengthGlyphLayoutArray glyphs(numGlyphs);
@@ -555,10 +558,11 @@ int QFontMetrics::width(const QString &text, int len, int flags) const
width += glyphs.advances[i];
return qRound(width);
}
+#else
+ Q_UNUSED(flags)
#endif
- QStackTextEngine layout(text, QFont(d.data()));
- return qRound(layout.width(0, len));
+ return horizontalAdvance(text, len);
}
/*!
@@ -577,6 +581,8 @@ int QFontMetrics::width(const QString &text, int len, int flags) const
in this particular font are both negative, while the bearings of
"o" are both positive.
+ \deprecated in Qt 5.11. Use horizontalAdvance() instead.
+
\warning This function will produce incorrect results for Arabic
characters or non-spacing marks in the middle of a string, as the
glyph shaping and positioning of marks that happens when
@@ -587,6 +593,65 @@ int QFontMetrics::width(const QString &text, int len, int flags) const
*/
int QFontMetrics::width(QChar ch) const
{
+ return horizontalAdvance(ch);
+}
+#endif // QT_DEPRECATED_SINCE(5, 11)
+
+/*!
+ Returns the horizontal advance in pixels of the first \a len characters of \a
+ text. If \a len is negative (the default), the entire string is
+ used.
+
+ This is the distance appropriate for drawing a subsequent character
+ after \a text.
+
+ \since 5.11
+
+ \sa boundingRect()
+*/
+int QFontMetrics::horizontalAdvance(const QString &text, int len) const
+{
+ int pos = text.indexOf(QLatin1Char('\x9c'));
+ if (pos != -1) {
+ len = (len < 0) ? pos : qMin(pos, len);
+ } else if (len < 0) {
+ len = text.length();
+ }
+ if (len == 0)
+ return 0;
+
+ QStackTextEngine layout(text, QFont(d.data()));
+ return qRound(layout.width(0, len));
+}
+
+/*!
+ \overload
+
+ \image bearings.png Bearings
+
+ Returns the horizontal advance of character \a ch in pixels. This is a
+ distance appropriate for drawing a subsequent character after \a
+ ch.
+
+ Some of the metrics are described in the image. The
+ central dark rectangles cover the logical horizontalAdvance() of each
+ character. The outer pale rectangles cover the leftBearing() and
+ rightBearing() of each character. Notice that the bearings of "f"
+ in this particular font are both negative, while the bearings of
+ "o" are both positive.
+
+ \warning This function will produce incorrect results for Arabic
+ characters or non-spacing marks in the middle of a string, as the
+ glyph shaping and positioning of marks that happens when
+ processing strings cannot be taken into account. When implementing
+ an interactive text control, use QTextLayout instead.
+
+ \since 5.11
+
+ \sa boundingRect()
+*/
+int QFontMetrics::horizontalAdvance(QChar ch) const
+{
if (QChar::category(ch.unicode()) == QChar::Mark_NonSpacing)
return 0;
@@ -677,7 +742,7 @@ int QFontMetrics::charWidth(const QString &text, int pos) const
rectangle might be different than what the width() method returns.
If you want to know the advance width of the string (to lay out
- a set of strings next to each other), use width() instead.
+ a set of strings next to each other), use horizontalAdvance() instead.
Newline characters are processed as normal characters, \e not as
linebreaks.
@@ -711,7 +776,7 @@ QRect QFontMetrics::boundingRect(const QString &text) const
base line.
\warning The width of the returned rectangle is not the advance width
- of the character. Use boundingRect(const QString &) or width() instead.
+ of the character. Use boundingRect(const QString &) or horizontalAdvance() instead.
\sa width()
*/
@@ -846,7 +911,7 @@ QSize QFontMetrics::size(int flags, const QString &text, int tabStops, int *tabA
rectangle might be different than what the width() method returns.
If you want to know the advance width of the string (to lay out
- a set of strings next to each other), use width() instead.
+ a set of strings next to each other), use horizontalAdvance() instead.
Newline characters are processed as normal characters, \e not as
linebreaks.
@@ -1337,7 +1402,7 @@ bool QFontMetricsF::inFontUcs4(uint ucs4) const
value is negative if the pixels of the character extend to the
left of the logical origin.
- See width(QChar) for a graphical description of this metric.
+ See width() for a graphical description of this metric.
\sa rightBearing(), minLeftBearing(), width()
*/
@@ -1396,6 +1461,7 @@ qreal QFontMetricsF::rightBearing(QChar ch) const
}
+#if QT_DEPRECATED_SINCE(5, 11)
/*!
Returns the width in pixels of the characters in the given \a text.
@@ -1404,16 +1470,73 @@ qreal QFontMetricsF::rightBearing(QChar ch) const
describing the pixels this string will cover whereas width()
returns the distance to where the next string should be drawn.
+ \deprecated in Qt 5.11. Use horizontalAdvance() instead.
+
\sa boundingRect()
*/
qreal QFontMetricsF::width(const QString &text) const
{
+ return horizontalAdvance(text);
+}
+
+/*!
+ \overload
+
+ \image bearings.png Bearings
+
+ Returns the logical width of character \a ch in pixels. This is a
+ distance appropriate for drawing a subsequent character after \a
+ ch.
+
+ Some of the metrics are described in the image to the right. The
+ central dark rectangles cover the logical width() of each
+ character. The outer pale rectangles cover the leftBearing() and
+ rightBearing() of each character. Notice that the bearings of "f"
+ in this particular font are both negative, while the bearings of
+ "o" are both positive.
+
+ \deprecated in Qt 5.11. Use horizontalAdvance() instead.
+
+ \warning This function will produce incorrect results for Arabic
+ characters or non-spacing marks in the middle of a string, as the
+ glyph shaping and positioning of marks that happens when
+ processing strings cannot be taken into account. When implementing
+ an interactive text control, use QTextLayout instead.
+
+ \sa boundingRect()
+*/
+qreal QFontMetricsF::width(QChar ch) const
+{
+ return horizontalAdvance(ch);
+}
+#endif
+
+/*!
+ Returns the horizontal advance in pixels of the first \a length characters of \a
+ text. If \a length is negative (the default), the entire string is
+ used.
+
+ The advance is the distance appropriate for drawing a subsequent
+ character after \a text.
+
+ \since 5.11
+
+ \sa boundingRect()
+*/
+qreal QFontMetricsF::horizontalAdvance(const QString &text, int length) const
+{
int pos = text.indexOf(QLatin1Char('\x9c'));
- int len = (pos != -1) ? pos : text.length();
+ if (pos != -1)
+ length = (length < 0) ? pos : qMin(pos, length);
+ else if (length < 0)
+ length = text.length();
+
+ if (length == 0)
+ return 0;
QStackTextEngine layout(text, QFont(d.data()));
layout.itemize();
- return layout.width(0, len).toReal();
+ return layout.width(0, length).toReal();
}
/*!
@@ -1421,7 +1544,7 @@ qreal QFontMetricsF::width(const QString &text) const
\image bearings.png Bearings
- Returns the logical width of character \a ch in pixels. This is a
+ Returns the horizontal advance of character \a ch in pixels. This is a
distance appropriate for drawing a subsequent character after \a
ch.
@@ -1438,9 +1561,11 @@ qreal QFontMetricsF::width(const QString &text) const
processing strings cannot be taken into account. When implementing
an interactive text control, use QTextLayout instead.
+ \since 5.11
+
\sa boundingRect()
*/
-qreal QFontMetricsF::width(QChar ch) const
+qreal QFontMetricsF::horizontalAdvance(QChar ch) const
{
if (ch.category() == QChar::Mark_NonSpacing)
return 0.;
@@ -1467,6 +1592,7 @@ qreal QFontMetricsF::width(QChar ch) const
return advance.toReal();
}
+
/*!
Returns the bounding rectangle of the characters in the string
specified by \a text. The bounding rectangle always covers at least
@@ -1477,7 +1603,7 @@ qreal QFontMetricsF::width(QChar ch) const
rectangle might be different than what the width() method returns.
If you want to know the advance width of the string (to lay out
- a set of strings next to each other), use width() instead.
+ a set of strings next to each other), use horizontalAdvance() instead.
Newline characters are processed as normal characters, \e not as
linebreaks.
@@ -1650,7 +1776,7 @@ QSizeF QFontMetricsF::size(int flags, const QString &text, int tabStops, int *ta
rectangle might be different than what the width() method returns.
If you want to know the advance width of the string (to lay out
- a set of strings next to each other), use width() instead.
+ a set of strings next to each other), use horizontalAdvance() instead.
Newline characters are processed as normal characters, \e not as
linebreaks.
diff --git a/src/gui/text/qfontmetrics.h b/src/gui/text/qfontmetrics.h
index 3eac309092..b6167a1d47 100644
--- a/src/gui/text/qfontmetrics.h
+++ b/src/gui/text/qfontmetrics.h
@@ -90,10 +90,16 @@ public:
int leftBearing(QChar) const;
int rightBearing(QChar) const;
+
+#if QT_DEPRECATED_SINCE(5, 11)
int width(const QString &, int len = -1) const;
int width(const QString &, int len, int flags) const;
-
int width(QChar) const;
+#endif
+
+ int horizontalAdvance(const QString &, int len = -1) const;
+ int horizontalAdvance(QChar) const;
+
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
QT_DEPRECATED int charWidth(const QString &str, int pos) const;
#endif
@@ -101,11 +107,11 @@ public:
QRect boundingRect(QChar) const;
QRect boundingRect(const QString &text) const;
- QRect boundingRect(const QRect &r, int flags, const QString &text, int tabstops = 0, int *tabarray = Q_NULLPTR) const;
+ QRect boundingRect(const QRect &r, int flags, const QString &text, int tabstops = 0, int *tabarray = nullptr) const;
inline QRect boundingRect(int x, int y, int w, int h, int flags, const QString &text,
- int tabstops = 0, int *tabarray = Q_NULLPTR) const
+ int tabstops = 0, int *tabarray = nullptr) const
{ return boundingRect(QRect(x, y, w, h), flags, text, tabstops, tabarray); }
- QSize size(int flags, const QString& str, int tabstops = 0, int *tabarray = Q_NULLPTR) const;
+ QSize size(int flags, const QString& str, int tabstops = 0, int *tabarray = nullptr) const;
QRect tightBoundingRect(const QString &text) const;
@@ -164,14 +170,19 @@ public:
qreal leftBearing(QChar) const;
qreal rightBearing(QChar) const;
- qreal width(const QString &string) const;
+#if QT_DEPRECATED_SINCE(5, 11)
+ qreal width(const QString &string) const;
qreal width(QChar) const;
+#endif
+
+ qreal horizontalAdvance(const QString &string, int length = -1) const;
+ qreal horizontalAdvance(QChar) const;
QRectF boundingRect(const QString &string) const;
QRectF boundingRect(QChar) const;
- QRectF boundingRect(const QRectF &r, int flags, const QString& string, int tabstops = 0, int *tabarray = Q_NULLPTR) const;
- QSizeF size(int flags, const QString& str, int tabstops = 0, int *tabarray = Q_NULLPTR) const;
+ QRectF boundingRect(const QRectF &r, int flags, const QString& string, int tabstops = 0, int *tabarray = nullptr) const;
+ QSizeF size(int flags, const QString& str, int tabstops = 0, int *tabarray = nullptr) const;
QRectF tightBoundingRect(const QString &text) const;
diff --git a/src/gui/text/qharfbuzzng.cpp b/src/gui/text/qharfbuzzng.cpp
index 6aca660205..36bd81c76b 100644
--- a/src/gui/text/qharfbuzzng.cpp
+++ b/src/gui/text/qharfbuzzng.cpp
@@ -202,7 +202,21 @@ static const hb_script_t _qtscript_to_hbscript[] = {
HB_SCRIPT_HATRAN,
HB_SCRIPT_MULTANI,
HB_SCRIPT_OLD_HUNGARIAN,
- HB_SCRIPT_SIGNWRITING
+ HB_SCRIPT_SIGNWRITING,
+
+ // Unicode 9.0 additions
+ HB_SCRIPT_ADLAM,
+ HB_SCRIPT_BHAIKSUKI,
+ HB_SCRIPT_MARCHEN,
+ HB_SCRIPT_NEWA,
+ HB_SCRIPT_OSAGE,
+ HB_SCRIPT_TANGUT,
+
+ // Unicode 10.0 additions
+ HB_SCRIPT_MASARAM_GONDI,
+ HB_SCRIPT_NUSHU,
+ HB_SCRIPT_SOYOMBO,
+ HB_SCRIPT_ZANABAZAR_SQUARE
};
Q_STATIC_ASSERT(QChar::ScriptCount == sizeof(_qtscript_to_hbscript) / sizeof(_qtscript_to_hbscript[0]));
@@ -422,7 +436,6 @@ hb_unicode_funcs_t *hb_qt_get_unicode_funcs()
// Font routines
-#if HB_VERSION_ATLEAST(1, 1, 3)
static hb_bool_t
_hb_qt_get_font_h_extents(hb_font_t * /*font*/, void *font_data,
hb_font_extents_t *metrics,
@@ -437,9 +450,7 @@ _hb_qt_get_font_h_extents(hb_font_t * /*font*/, void *font_data,
return true;
}
-#endif
-#if HB_VERSION_ATLEAST(1, 2, 3)
static hb_bool_t
_hb_qt_font_get_nominal_glyph(hb_font_t * /*font*/, void *font_data,
hb_codepoint_t unicode,
@@ -453,7 +464,6 @@ _hb_qt_font_get_nominal_glyph(hb_font_t * /*font*/, void *font_data,
return *glyph != 0;
}
-#endif
static hb_bool_t
_hb_qt_font_get_variation_glyph(hb_font_t * /*font*/, void *font_data,
@@ -490,17 +500,6 @@ _hb_qt_font_get_glyph_h_advance(hb_font_t *font, void *font_data,
return advance.value();
}
-#if !HB_VERSION_ATLEAST(1, 1, 2)
-static hb_bool_t
-_hb_qt_font_get_glyph_h_origin(hb_font_t * /*font*/, void * /*font_data*/,
- hb_codepoint_t /*glyph*/,
- hb_position_t * /*x*/, hb_position_t * /*y*/,
- void * /*user_data*/)
-{
- return true; // we always work in the horizontal coordinates
-}
-#endif
-
static hb_position_t
_hb_qt_font_get_glyph_h_kerning(hb_font_t *font, void *font_data,
hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
@@ -581,19 +580,10 @@ struct _hb_qt_font_funcs_t {
{
funcs = hb_font_funcs_create();
-#if HB_VERSION_ATLEAST(1, 1, 3)
hb_font_funcs_set_font_h_extents_func(funcs, _hb_qt_get_font_h_extents, NULL, NULL);
-#endif
-#if HB_VERSION_ATLEAST(1, 2, 3)
hb_font_funcs_set_nominal_glyph_func(funcs, _hb_qt_font_get_nominal_glyph, NULL, NULL);
hb_font_funcs_set_variation_glyph_func(funcs, _hb_qt_font_get_variation_glyph, NULL, NULL);
-#else
- hb_font_funcs_set_glyph_func(funcs, _hb_qt_font_get_variation_glyph, NULL, NULL);
-#endif
hb_font_funcs_set_glyph_h_advance_func(funcs, _hb_qt_font_get_glyph_h_advance, NULL, NULL);
-#if !HB_VERSION_ATLEAST(1, 1, 2)
- hb_font_funcs_set_glyph_h_origin_func(funcs, _hb_qt_font_get_glyph_h_origin, NULL, NULL);
-#endif
hb_font_funcs_set_glyph_h_kerning_func(funcs, _hb_qt_font_get_glyph_h_kerning, NULL, NULL);
hb_font_funcs_set_glyph_extents_func(funcs, _hb_qt_font_get_glyph_extents, NULL, NULL);
hb_font_funcs_set_glyph_contour_point_func(funcs, _hb_qt_font_get_glyph_contour_point, NULL, NULL);
diff --git a/src/gui/text/qplatformfontdatabase.cpp b/src/gui/text/qplatformfontdatabase.cpp
index 4ad826e87b..d89805d18e 100644
--- a/src/gui/text/qplatformfontdatabase.cpp
+++ b/src/gui/text/qplatformfontdatabase.cpp
@@ -62,8 +62,6 @@ void qt_registerFontFamily(const QString &familyName);
void qt_registerAliasToFontFamily(const QString &familyName, const QString &alias);
/*!
- \fn void QPlatformFontDatabase::registerQPF2Font(const QByteArray &dataArray, void *handle)
-
Registers the pre-rendered QPF2 font contained in the given \a dataArray.
\sa registerFont()
@@ -373,17 +371,6 @@ QFontEngine *QPlatformFontDatabase::fontEngine(const QByteArray &fontData, qreal
}
/*!
- \fn QStringList QPlatformFontDatabase::fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const
-
- Returns a list of alternative fonts for the specified \a family and
- \a style and \a script using the \a styleHint given.
-
- Default implementation returns a list of fonts for which \a style and \a script support
- has been reported during the font database population.
-*/
-// implemented in qfontdatabase.cpp
-
-/*!
Adds an application font described by the font contained supplied \a fontData
or using the font contained in the file referenced by \a fileName. Returns
a list of family names, or an empty list if the font could not be added.
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index dbc2e6e558..2f90754274 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -435,11 +435,11 @@ namespace {
public:
DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations)
: m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations),
- m_untransformedCoordinates(untransformedCoordinates), m_currentColor(Qt::black)
+ m_untransformedCoordinates(untransformedCoordinates), m_currentColor(0, 0, 0, 0)
{
}
- virtual void updateState(const QPaintEngineState &newState) Q_DECL_OVERRIDE
+ virtual void updateState(const QPaintEngineState &newState) override
{
if (newState.state() & QPaintEngine::DirtyPen
&& newState.pen().color() != m_currentColor) {
@@ -448,7 +448,7 @@ namespace {
}
}
- virtual void drawTextItem(const QPointF &position, const QTextItem &textItem) Q_DECL_OVERRIDE
+ virtual void drawTextItem(const QPointF &position, const QTextItem &textItem) override
{
const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
@@ -484,15 +484,15 @@ namespace {
m_items.append(currentItem);
}
- virtual void drawPolygon(const QPointF *, int , PolygonDrawMode ) Q_DECL_OVERRIDE
+ virtual void drawPolygon(const QPointF *, int , PolygonDrawMode ) override
{
/* intentionally empty */
}
- virtual bool begin(QPaintDevice *) Q_DECL_OVERRIDE { return true; }
- virtual bool end() Q_DECL_OVERRIDE { return true; }
- virtual void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) Q_DECL_OVERRIDE {}
- virtual Type type() const Q_DECL_OVERRIDE
+ virtual bool begin(QPaintDevice *) override { return true; }
+ virtual bool end() override { return true; }
+ virtual void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) override {}
+ virtual Type type() const override
{
return User;
}
@@ -537,7 +537,7 @@ namespace {
delete m_paintEngine;
}
- int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE
+ int metric(PaintDeviceMetric m) const override
{
int val;
switch (m) {
@@ -574,7 +574,7 @@ namespace {
return val;
}
- virtual QPaintEngine *paintEngine() const Q_DECL_OVERRIDE
+ virtual QPaintEngine *paintEngine() const override
{
return m_paintEngine;
}
@@ -599,7 +599,7 @@ namespace {
};
}
-void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p)
+void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p, const QColor &pen)
{
bool preferRichText = textFormat == Qt::RichText
|| (textFormat == Qt::AutoText && Qt::mightBeRichText(text));
@@ -631,15 +631,16 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p)
textLayout.endLayout();
actualSize = textLayout.boundingRect().size();
+ p->setPen(pen);
textLayout.draw(p, topLeftPosition);
} else {
QTextDocument document;
#ifndef QT_NO_CSSPARSER
- QColor color = p->pen().color();
- document.setDefaultStyleSheet(QString::fromLatin1("body { color: #%1%2%3 }")
- .arg(QString::number(color.red(), 16), 2, QLatin1Char('0'))
- .arg(QString::number(color.green(), 16), 2, QLatin1Char('0'))
- .arg(QString::number(color.blue(), 16), 2, QLatin1Char('0')));
+ document.setDefaultStyleSheet(QString::fromLatin1("body { color: rgba(%1, %2, %3, %4%) }")
+ .arg(QString::number(pen.red()))
+ .arg(QString::number(pen.green()))
+ .arg(QString::number(pen.blue()))
+ .arg(QString::number(pen.alpha())));
#endif
document.setDefaultFont(font);
document.setDocumentMargin(0.0);
@@ -657,13 +658,10 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p)
p->save();
p->translate(topLeftPosition);
QAbstractTextDocumentLayout::PaintContext ctx;
- ctx.palette.setColor(QPalette::Text, p->pen().color());
+ ctx.palette.setColor(QPalette::Text, pen);
document.documentLayout()->draw(p, ctx);
p->restore();
- if (textWidth >= 0.0)
- document.adjustSize(); // Find optimal size
-
actualSize = document.size();
}
}
@@ -682,7 +680,7 @@ void QStaticTextPrivate::init()
painter.setFont(font);
painter.setTransform(matrix);
- paintText(QPointF(0, 0), &painter);
+ paintText(QPointF(0, 0), &painter, QColor(0, 0, 0, 0));
}
QVector<QStaticTextItem> deviceItems = device.items();
diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h
index dda566a22b..c4023488ff 100644
--- a/src/gui/text/qstatictext_p.h
+++ b/src/gui/text/qstatictext_p.h
@@ -131,7 +131,7 @@ public:
~QStaticTextPrivate();
void init();
- void paintText(const QPointF &pos, QPainter *p);
+ void paintText(const QPointF &pos, QPainter *p, const QColor &pen);
void invalidate()
{
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index db0650d154..d95932f4db 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -73,17 +73,6 @@ QT_BEGIN_NAMESPACE
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION unsigned int qt_int_sqrt(unsigned int n);
-/*!
- Returns \c true if the string \a text is likely to be rich text;
- otherwise returns \c false.
-
- This function uses a fast and therefore simple heuristic. It
- mainly checks whether there is something that looks like a tag
- before the first line break. Although the result may be correct
- for common cases, there is no guarantee.
-
- This function is defined in the \c <QTextDocument> header file.
-*/
bool Qt::mightBeRichText(const QString& text)
{
if (text.isEmpty())
@@ -142,17 +131,6 @@ bool Qt::mightBeRichText(const QString& text)
return false;
}
-
-/*!
- Converts the plain text string \a plain to an HTML-formatted
- paragraph while preserving most of its look.
-
- \a mode defines how whitespace is handled.
-
- This function is defined in the \c <QTextDocument> header file.
-
- \sa escape(), mightBeRichText()
-*/
QString Qt::convertFromPlainText(const QString &plain, Qt::WhiteSpaceMode mode)
{
int col = 0;
@@ -202,11 +180,6 @@ QString Qt::convertFromPlainText(const QString &plain, Qt::WhiteSpaceMode mode)
}
#ifndef QT_NO_TEXTCODEC
-/*!
- \internal
-
- This function is defined in the \c <QTextDocument> header file.
-*/
QTextCodec *Qt::codecForHtml(const QByteArray &ba)
{
return QTextCodec::codecForHtml(ba);
@@ -805,7 +778,7 @@ void QTextDocument::adjustSize()
// Pull this private function in from qglobal.cpp
QFont f = defaultFont();
QFontMetrics fm(f);
- int mw = fm.width(QLatin1Char('x')) * 80;
+ int mw = fm.horizontalAdvance(QLatin1Char('x')) * 80;
int w = mw;
setTextWidth(w);
QSizeF size = documentLayout()->documentSize();
@@ -970,7 +943,7 @@ QString QTextDocument::defaultStyleSheet() const
/*!
- \fn QTextDocument::undoAvailable(bool available);
+ \fn void QTextDocument::undoAvailable(bool available);
This signal is emitted whenever undo operations become available
(\a available is true) or unavailable (\a available is false).
@@ -982,14 +955,14 @@ QString QTextDocument::defaultStyleSheet() const
*/
/*!
- \fn QTextDocument::redoAvailable(bool available);
+ \fn void QTextDocument::redoAvailable(bool available);
This signal is emitted whenever redo operations become available
(\a available is true) or unavailable (\a available is false).
*/
/*!
- \fn QTextDocument::cursorPositionChanged(const QTextCursor &cursor);
+ \fn void QTextDocument::cursorPositionChanged(const QTextCursor &cursor);
This signal is emitted whenever the position of a cursor changed
due to an editing operation. The cursor that changed is passed in
@@ -999,7 +972,7 @@ QString QTextDocument::defaultStyleSheet() const
*/
/*!
- \fn QTextDocument::blockCountChanged(int newBlockCount);
+ \fn void QTextDocument::blockCountChanged(int newBlockCount);
\since 4.3
This signal is emitted when the total number of text blocks in the
@@ -1008,7 +981,7 @@ QString QTextDocument::defaultStyleSheet() const
*/
/*!
- \fn QTextDocument::documentLayoutChanged();
+ \fn void QTextDocument::documentLayoutChanged();
\since 4.4
This signal is emitted when a new document layout is set.
@@ -1841,7 +1814,7 @@ QFont QTextDocument::defaultFont() const
}
/*!
- \fn QTextDocument::modificationChanged(bool changed)
+ \fn void QTextDocument::modificationChanged(bool changed)
This signal is emitted whenever the content of the document
changes in a way that affects the modification state. If \a
@@ -1898,7 +1871,7 @@ static void printPage(int index, QPainter *painter, const QTextDocument *doc, co
painter->setFont(QFont(doc->defaultFont()));
const QString pageString = QString::number(index);
- painter->drawText(qRound(pageNumberPos.x() - painter->fontMetrics().width(pageString)),
+ painter->drawText(qRound(pageNumberPos.x() - painter->fontMetrics().horizontalAdvance(pageString)),
qRound(pageNumberPos.y() + view.top()),
pageString);
}
diff --git a/src/gui/text/qtextdocument.h b/src/gui/text/qtextdocument.h
index c2761a39b9..c847d3ce88 100644
--- a/src/gui/text/qtextdocument.h
+++ b/src/gui/text/qtextdocument.h
@@ -70,6 +70,7 @@ class QTextCursor;
template<typename T> class QVector;
+#ifndef Q_CLANG_QDOC
namespace Qt
{
Q_GUI_EXPORT bool mightBeRichText(const QString&);
@@ -79,6 +80,7 @@ namespace Qt
Q_GUI_EXPORT QTextCodec *codecForHtml(const QByteArray &ba);
#endif
}
+#endif
class Q_GUI_EXPORT QAbstractUndoItem
{
@@ -116,11 +118,11 @@ class Q_GUI_EXPORT QTextDocument : public QObject
Q_PROPERTY(QUrl baseUrl READ baseUrl WRITE setBaseUrl NOTIFY baseUrlChanged)
public:
- explicit QTextDocument(QObject *parent = Q_NULLPTR);
- explicit QTextDocument(const QString &text, QObject *parent = Q_NULLPTR);
+ explicit QTextDocument(QObject *parent = nullptr);
+ explicit QTextDocument(const QString &text, QObject *parent = nullptr);
~QTextDocument();
- QTextDocument *clone(QObject *parent = Q_NULLPTR) const;
+ QTextDocument *clone(QObject *parent = nullptr) const;
bool isEmpty() const;
virtual void clear();
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp
index e9194e73ff..9877a23fa6 100644
--- a/src/gui/text/qtextdocumentlayout.cpp
+++ b/src/gui/text/qtextdocumentlayout.cpp
@@ -1427,7 +1427,7 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
case QTextListFormat::ListLowerRoman:
case QTextListFormat::ListUpperRoman:
itemText = static_cast<QTextList *>(object)->itemText(bl);
- size.setWidth(fontMetrics.width(itemText));
+ size.setWidth(fontMetrics.horizontalAdvance(itemText));
size.setHeight(fontMetrics.height());
break;
@@ -1445,7 +1445,7 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
QRectF r(pos, size);
- qreal xoff = fontMetrics.width(QLatin1Char(' '));
+ qreal xoff = fontMetrics.horizontalAdvance(QLatin1Char(' '));
if (dir == Qt::LeftToRight)
xoff = -xoff - size.width();
r.translate( xoff, (fontMetrics.height() / 2) - (size.height() / 2));
@@ -2613,7 +2613,7 @@ void QTextDocumentLayoutPrivate::layoutBlock(const QTextBlock &bl, int blockPosi
QFixed extraMargin;
if (docPrivate->defaultTextOption.flags() & QTextOption::AddSpaceForLineAndParagraphSeparators) {
QFontMetricsF fm(bl.charFormat().font());
- extraMargin = QFixed::fromReal(fm.width(QChar(QChar(0x21B5))));
+ extraMargin = QFixed::fromReal(fm.horizontalAdvance(QChar(QChar(0x21B5))));
}
const QFixed indent = this->blockIndent(blockFormat);
diff --git a/src/gui/text/qtextdocumentlayout_p.h b/src/gui/text/qtextdocumentlayout_p.h
index 710c49628e..2054ebaa35 100644
--- a/src/gui/text/qtextdocumentlayout_p.h
+++ b/src/gui/text/qtextdocumentlayout_p.h
@@ -73,11 +73,11 @@ public:
explicit QTextDocumentLayout(QTextDocument *doc);
// from the abstract layout
- void draw(QPainter *painter, const PaintContext &context) Q_DECL_OVERRIDE;
- int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const Q_DECL_OVERRIDE;
+ void draw(QPainter *painter, const PaintContext &context) override;
+ int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const override;
- int pageCount() const Q_DECL_OVERRIDE;
- QSizeF documentSize() const Q_DECL_OVERRIDE;
+ int pageCount() const override;
+ QSizeF documentSize() const override;
void setCursorWidth(int width);
int cursorWidth() const;
@@ -88,8 +88,8 @@ public:
// internal for QTextEdit's NoWrap mode
void setViewport(const QRectF &viewport);
- virtual QRectF frameBoundingRect(QTextFrame *frame) const Q_DECL_OVERRIDE;
- virtual QRectF blockBoundingRect(const QTextBlock &block) const Q_DECL_OVERRIDE;
+ virtual QRectF frameBoundingRect(QTextFrame *frame) const override;
+ virtual QRectF blockBoundingRect(const QTextBlock &block) const override;
QRectF tableBoundingRect(QTextTable *table) const;
QRectF tableCellBoundingRect(QTextTable *table, const QTextTableCell &cell) const;
@@ -104,12 +104,12 @@ public:
bool contentHasAlignment() const;
protected:
- void documentChanged(int from, int oldLength, int length) Q_DECL_OVERRIDE;
- void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
- void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
+ void documentChanged(int from, int oldLength, int length) override;
+ void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) override;
+ void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) override;
void drawInlineObject(QPainter *p, const QRectF &rect, QTextInlineObject item,
- int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
- virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ int posInDocument, const QTextFormat &format) override;
+ virtual void timerEvent(QTimerEvent *e) override;
private:
QRectF doLayout(int from, int oldLength, int length);
void layoutFinished();
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index faddb3552d..c88daed8d8 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1242,7 +1242,7 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
{ HB_TAG('h','l','i','g'), !dontLigate, 0, uint(-1) } };
const int num_features = dontLigate ? 5 : 1;
- const char *const *shaper_list = Q_NULLPTR;
+ const char *const *shaper_list = nullptr;
#if defined(Q_OS_DARWIN)
// What's behind QFontEngine::FaceData::user_data isn't compatible between different font engines
// - specifically functions in hb-coretext.cc would run into undefined behavior with data
@@ -1252,7 +1252,7 @@ int QTextEngine::shapeTextWithHarfbuzzNG(const QScriptItem &si,
"graphite2",
"ot",
"fallback",
- Q_NULLPTR
+ nullptr
};
shaper_list = s_shaper_list_without_coretext;
}
@@ -3510,19 +3510,31 @@ QStackTextEngine::QStackTextEngine(const QString &string, const QFont &f)
}
QTextItemInt::QTextItemInt(const QScriptItem &si, QFont *font, const QTextCharFormat &format)
- : justified(false), underlineStyle(QTextCharFormat::NoUnderline), charFormat(format),
- num_chars(0), chars(0), logClusters(0), f(0), fontEngine(0)
+ : justified(false),
+ underlineStyle(QTextCharFormat::NoUnderline),
+ charFormat(format),
+ num_chars(0),
+ chars(nullptr),
+ logClusters(nullptr),
+ f(font),
+ fontEngine(font->d->engineForScript(si.analysis.script))
{
- f = font;
- fontEngine = f->d->engineForScript(si.analysis.script);
Q_ASSERT(fontEngine);
initWithScriptItem(si);
}
QTextItemInt::QTextItemInt(const QGlyphLayout &g, QFont *font, const QChar *chars_, int numChars, QFontEngine *fe, const QTextCharFormat &format)
- : flags(0), justified(false), underlineStyle(QTextCharFormat::NoUnderline), charFormat(format),
- num_chars(numChars), chars(chars_), logClusters(0), f(font), glyphs(g), fontEngine(fe)
+ : flags(0),
+ justified(false),
+ underlineStyle(QTextCharFormat::NoUnderline),
+ charFormat(format),
+ num_chars(numChars),
+ chars(chars_),
+ logClusters(nullptr),
+ f(font),
+ glyphs(g),
+ fontEngine(fe)
{
}
diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp
index 8fe474af2c..08106db6ce 100644
--- a/src/gui/text/qtextformat.cpp
+++ b/src/gui/text/qtextformat.cpp
@@ -201,8 +201,10 @@ public:
inline void insertProperty(qint32 key, const QVariant &value)
{
hashDirty = true;
- if (key >= QTextFormat::FirstFontProperty && key <= QTextFormat::LastFontProperty)
+ if ((key >= QTextFormat::FirstFontProperty && key <= QTextFormat::LastFontProperty)
+ || key == QTextFormat::FontLetterSpacingType) {
fontDirty = true;
+ }
for (int i = 0; i < props.count(); ++i)
if (props.at(i).key == key) {
props[i].value = value;
@@ -216,8 +218,10 @@ public:
for (int i = 0; i < props.count(); ++i)
if (props.at(i).key == key) {
hashDirty = true;
- if (key >= QTextFormat::FirstFontProperty && key <= QTextFormat::LastFontProperty)
+ if ((key >= QTextFormat::FirstFontProperty && key <= QTextFormat::LastFontProperty)
+ || key == QTextFormat::FontLetterSpacingType) {
fontDirty = true;
+ }
props.remove(i);
return;
}
@@ -2584,13 +2588,13 @@ QTextFrameFormat::QTextFrameFormat(const QTextFormat &fmt)
}
/*!
- \fn QTextFrameFormat::isValid() const
+ \fn bool QTextFrameFormat::isValid() const
Returns \c true if the format description is valid; otherwise returns \c false.
*/
/*!
- \fn QTextFrameFormat::setPosition(Position policy)
+ \fn void QTextFrameFormat::setPosition(Position policy)
Sets the \a policy for positioning frames with this frame format.
@@ -2603,7 +2607,7 @@ QTextFrameFormat::QTextFrameFormat(const QTextFormat &fmt)
*/
/*!
- \fn QTextFrameFormat::setBorder(qreal width)
+ \fn void QTextFrameFormat::setBorder(qreal width)
Sets the \a width (in pixels) of the frame's border.
*/
@@ -2615,7 +2619,7 @@ QTextFrameFormat::QTextFrameFormat(const QTextFormat &fmt)
*/
/*!
- \fn QTextFrameFormat::setBorderBrush(const QBrush &brush)
+ \fn void QTextFrameFormat::setBorderBrush(const QBrush &brush)
\since 4.3
Sets the \a brush used for the frame's border.
@@ -2629,7 +2633,7 @@ QTextFrameFormat::QTextFrameFormat(const QTextFormat &fmt)
*/
/*!
- \fn QTextFrameFormat::setBorderStyle(BorderStyle style)
+ \fn void QTextFrameFormat::setBorderStyle(BorderStyle style)
\since 4.3
Sets the \a style of the frame's border.
@@ -2643,7 +2647,7 @@ QTextFrameFormat::QTextFrameFormat(const QTextFormat &fmt)
*/
/*!
- \fn QTextFrameFormat::setMargin(qreal margin)
+ \fn void QTextFrameFormat::setMargin(qreal margin)
Sets the frame's \a margin in pixels.
This method also sets the left, right, top and bottom margins
@@ -2667,7 +2671,7 @@ void QTextFrameFormat::setMargin(qreal amargin)
*/
/*!
- \fn QTextFrameFormat::setTopMargin(qreal margin)
+ \fn void QTextFrameFormat::setTopMargin(qreal margin)
\since 4.3
Sets the frame's top \a margin in pixels.
@@ -2687,7 +2691,7 @@ qreal QTextFrameFormat::topMargin() const
}
/*!
- \fn QTextFrameFormat::setBottomMargin(qreal margin)
+ \fn void QTextFrameFormat::setBottomMargin(qreal margin)
\since 4.3
Sets the frame's bottom \a margin in pixels.
@@ -2707,7 +2711,7 @@ qreal QTextFrameFormat::bottomMargin() const
}
/*!
- \fn QTextFrameFormat::setLeftMargin(qreal margin)
+ \fn void QTextFrameFormat::setLeftMargin(qreal margin)
\since 4.3
Sets the frame's left \a margin in pixels.
@@ -2727,7 +2731,7 @@ qreal QTextFrameFormat::leftMargin() const
}
/*!
- \fn QTextFrameFormat::setRightMargin(qreal margin)
+ \fn void QTextFrameFormat::setRightMargin(qreal margin)
\since 4.3
Sets the frame's right \a margin in pixels.
@@ -2747,7 +2751,7 @@ qreal QTextFrameFormat::rightMargin() const
}
/*!
- \fn QTextFrameFormat::setPadding(qreal width)
+ \fn void QTextFrameFormat::setPadding(qreal width)
Sets the \a width of the frame's internal padding in pixels.
*/
@@ -2759,7 +2763,7 @@ qreal QTextFrameFormat::rightMargin() const
*/
/*!
- \fn QTextFrameFormat::setWidth(const QTextLength &width)
+ \fn void QTextFrameFormat::setWidth(const QTextLength &width)
Sets the frame's border rectangle's \a width.
@@ -2767,7 +2771,7 @@ qreal QTextFrameFormat::rightMargin() const
*/
/*!
- \fn QTextFrameFormat::setWidth(qreal width)
+ \fn void QTextFrameFormat::setWidth(qreal width)
\overload
Convenience method that sets the width of the frame's border
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index be10efad8d..9154182df1 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -1708,14 +1708,14 @@ public:
inline QTextHtmlStyleSelector(const QTextHtmlParser *parser)
: parser(parser) { nameCaseSensitivity = Qt::CaseInsensitive; }
- virtual QStringList nodeNames(NodePtr node) const Q_DECL_OVERRIDE;
- virtual QString attribute(NodePtr node, const QString &name) const Q_DECL_OVERRIDE;
- virtual bool hasAttributes(NodePtr node) const Q_DECL_OVERRIDE;
- virtual bool isNullNode(NodePtr node) const Q_DECL_OVERRIDE;
- virtual NodePtr parentNode(NodePtr node) const Q_DECL_OVERRIDE;
- virtual NodePtr previousSiblingNode(NodePtr node) const Q_DECL_OVERRIDE;
- virtual NodePtr duplicateNode(NodePtr node) const Q_DECL_OVERRIDE;
- virtual void freeNode(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual QStringList nodeNames(NodePtr node) const override;
+ virtual QString attribute(NodePtr node, const QString &name) const override;
+ virtual bool hasAttributes(NodePtr node) const override;
+ virtual bool isNullNode(NodePtr node) const override;
+ virtual NodePtr parentNode(NodePtr node) const override;
+ virtual NodePtr previousSiblingNode(NodePtr node) const override;
+ virtual NodePtr duplicateNode(NodePtr node) const override;
+ virtual void freeNode(NodePtr node) const override;
private:
const QTextHtmlParser *parser;
diff --git a/src/gui/text/qtextimagehandler_p.h b/src/gui/text/qtextimagehandler_p.h
index a22c91ecbf..339ef0af4f 100644
--- a/src/gui/text/qtextimagehandler_p.h
+++ b/src/gui/text/qtextimagehandler_p.h
@@ -67,8 +67,8 @@ class Q_GUI_EXPORT QTextImageHandler : public QObject,
public:
explicit QTextImageHandler(QObject *parent = 0);
- virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
- virtual void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
+ virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) override;
+ virtual void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) override;
QImage image(QTextDocument *doc, const QTextImageFormat &imageFormat);
};
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 066f258ea3..87f73e1e83 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -93,14 +93,14 @@ QT_BEGIN_NAMESPACE
Specifies the format to apply.
*/
-/*! \fn bool operator==(const FormatRange &lhs, const FormatRange &rhs)
+/*! \fn bool operator==(const QTextLayout::FormatRange &lhs, const QTextLayout::FormatRange &rhs)
\relates QTextLayout::FormatRange
Returns true if the \c {start}, \c {length}, and \c {format} fields
in \a lhs and \a rhs contain the same values respectively.
*/
-/*! \fn bool operator!=(const FormatRange &lhs, const FormatRange &rhs)
+/*! \fn bool operator!=(const QTextLayout::FormatRange &lhs, const QTextLayout::FormatRange &rhs)
\relates QTextLayout::FormatRange
Returns true if any of the \c {start}, \c {length}, or \c {format} fields
@@ -2453,7 +2453,7 @@ void QTextLine::draw(QPainter *p, const QPointF &pos, const QTextLayout::FormatR
const qreal lineHeight = line.height().toReal();
QRectF r(pos.x() + line.x.toReal(), pos.y() + line.y.toReal(),
- lineHeight / 2, QFontMetrics(eng->font()).width(QLatin1Char(' ')));
+ lineHeight / 2, QFontMetrics(eng->font()).horizontalAdvance(QLatin1Char(' ')));
setPenAndDrawBackground(p, QPen(), selection->format, r);
p->setPen(pen);
}
@@ -2540,7 +2540,7 @@ void QTextLine::draw(QPainter *p, const QPointF &pos, const QTextLayout::FormatR
QPainterPrivate::get(p)->drawTextItem(QPointF(iterator.x.toReal(), y.toReal()), gf, eng);
if (eng->option.flags() & QTextOption::ShowTabsAndSpaces) {
QChar visualTab(0x2192);
- int w = QFontMetrics(f).width(visualTab);
+ int w = QFontMetrics(f).horizontalAdvance(visualTab);
qreal x = iterator.itemWidth.toReal() - w; // Right-aligned
if (x < 0)
p->setClipRect(QRectF(iterator.x.toReal(), line.y.toReal(),
diff --git a/src/gui/text/qtextlayout.h b/src/gui/text/qtextlayout.h
index 980a099b05..67bc75a6b8 100644
--- a/src/gui/text/qtextlayout.h
+++ b/src/gui/text/qtextlayout.h
@@ -69,7 +69,7 @@ class Q_GUI_EXPORT QTextInlineObject
{
public:
QTextInlineObject(int i, QTextEngine *e) : itm(i), eng(e) {}
- inline QTextInlineObject() : itm(0), eng(Q_NULLPTR) {}
+ inline QTextInlineObject() : itm(0), eng(nullptr) {}
inline bool isValid() const { return eng; }
QRectF rect() const;
@@ -107,7 +107,7 @@ public:
// does itemization
QTextLayout();
QTextLayout(const QString& text);
- QTextLayout(const QString& text, const QFont &font, QPaintDevice *paintdevice = Q_NULLPTR);
+ QTextLayout(const QString& text, const QFont &font, QPaintDevice *paintdevice = nullptr);
QTextLayout(const QTextBlock &b);
~QTextLayout();
@@ -210,7 +210,7 @@ Q_DECLARE_TYPEINFO(QTextLayout::FormatRange, Q_RELOCATABLE_TYPE);
class Q_GUI_EXPORT QTextLine
{
public:
- inline QTextLine() : index(0), eng(Q_NULLPTR) {}
+ inline QTextLine() : index(0), eng(nullptr) {}
inline bool isValid() const { return eng; }
QRectF rect() const;
@@ -255,7 +255,7 @@ public:
int lineNumber() const { return index; }
- void draw(QPainter *p, const QPointF &point, const QTextLayout::FormatRange *selection = Q_NULLPTR) const;
+ void draw(QPainter *p, const QPointF &point, const QTextLayout::FormatRange *selection = nullptr) const;
#if !defined(QT_NO_RAWFONT)
QList<QGlyphRun> glyphRuns(int from = -1, int length = -1) const;
diff --git a/src/gui/text/qtextobject.h b/src/gui/text/qtextobject.h
index 4cc2535b58..067f8473ea 100644
--- a/src/gui/text/qtextobject.h
+++ b/src/gui/text/qtextobject.h
@@ -203,7 +203,7 @@ class Q_GUI_EXPORT QTextBlock
friend class QSyntaxHighlighter;
public:
inline QTextBlock(QTextDocumentPrivate *priv, int b) : p(priv), n(b) {}
- inline QTextBlock() : p(Q_NULLPTR), n(0) {}
+ inline QTextBlock() : p(nullptr), n(0) {}
inline QTextBlock(const QTextBlock &o) : p(o.p), n(o.n) {}
inline QTextBlock &operator=(const QTextBlock &o) { p = o.p; n = o.n; return *this; }
@@ -260,7 +260,7 @@ public:
friend class QTextBlock;
iterator(const QTextDocumentPrivate *priv, int begin, int end, int f) : p(priv), b(begin), e(end), n(f) {}
public:
- iterator() : p(Q_NULLPTR), b(0), e(0), n(0) {}
+ iterator() : p(nullptr), b(0), e(0), n(0) {}
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
iterator(const iterator &o) : p(o.p), b(o.b), e(o.e), n(o.n) {}
#endif
@@ -304,7 +304,7 @@ class Q_GUI_EXPORT QTextFragment
{
public:
inline QTextFragment(const QTextDocumentPrivate *priv, int f, int fe) : p(priv), n(f), ne(fe) {}
- inline QTextFragment() : p(Q_NULLPTR), n(0), ne(0) {}
+ inline QTextFragment() : p(nullptr), n(0), ne(0) {}
inline QTextFragment(const QTextFragment &o) : p(o.p), n(o.n), ne(o.ne) {}
inline QTextFragment &operator=(const QTextFragment &o) { p = o.p; n = o.n; ne = o.ne; return *this; }
diff --git a/src/gui/text/qtextodfwriter.cpp b/src/gui/text/qtextodfwriter.cpp
index 3dd19a6eda..30f5bc1051 100644
--- a/src/gui/text/qtextodfwriter.cpp
+++ b/src/gui/text/qtextodfwriter.cpp
@@ -94,7 +94,7 @@ public:
if (contentStream)
contentStream->close();
}
- virtual void addFile(const QString &, const QString &, const QByteArray &) Q_DECL_OVERRIDE
+ virtual void addFile(const QString &, const QString &, const QByteArray &) override
{
// we ignore this...
}
@@ -137,7 +137,7 @@ public:
zip.close();
}
- virtual void addFile(const QString &fileName, const QString &mimeType, const QByteArray &bytes) Q_DECL_OVERRIDE
+ virtual void addFile(const QString &fileName, const QString &mimeType, const QByteArray &bytes) override
{
zip.addFile(fileName, bytes);
addFile(fileName, mimeType);
diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp
index 2a16f50f33..a3fa0e7351 100644
--- a/src/gui/text/qtextoption.cpp
+++ b/src/gui/text/qtextoption.cpp
@@ -165,7 +165,7 @@ void QTextOption::setTabArray(const QList<qreal> &tabStops)
Sets the tab positions for the text layout to those specified by
\a tabStops.
- \sa tabStops()
+ \sa tabStop()
*/
void QTextOption::setTabs(const QList<QTextOption::Tab> &tabStops)
{
@@ -404,24 +404,24 @@ QList<QTextOption::Tab> QTextOption::tabs() const
*/
/*!
- \variable Tab::type
+ \variable QTextOption::Tab::type
Determine which type is used.
In a paragraph that has layoutDirection() RightToLeft the type LeftTab will
be interpreted to be a RightTab and vice versa.
*/
/*!
- \variable Tab::delimiter
+ \variable QTextOption::Tab::delimiter
If type is DelimitorTab; tab until this char is found in the text.
*/
/*!
- \fn Tab::Tab()
+ \fn QTextOption::Tab::Tab()
Creates a default left tab with position 80.
*/
/*!
- \fn Tab::Tab(qreal pos, TabType tabType, QChar delim = QChar())
+ \fn QTextOption::Tab::Tab(qreal pos, TabType tabType, QChar delim = QChar())
Creates a tab with the given position, tab type, and delimiter
(\a pos, \a tabType, \a delim).
@@ -432,27 +432,20 @@ QList<QTextOption::Tab> QTextOption::tabs() const
*/
/*!
- \fn bool Tab::operator==(const Tab &other) const
+ \fn bool QTextOption::Tab::operator==(const QTextOption::Tab &other) const
Returns \c true if tab \a other is equal to this tab;
otherwise returns \c false.
*/
/*!
- \fn bool Tab::operator!=(const Tab &other) const
+ \fn bool QTextOption::Tab::operator!=(const QTextOption::Tab &other) const
Returns \c true if tab \a other is not equal to this tab;
otherwise returns \c false.
*/
/*!
- \fn void setTabs(const QList<Tab> &tabStops)
- Set the Tab properties to \a tabStops.
-
- \sa tabStopDistance(), tabs()
-*/
-
-/*!
\since 4.4
\fn QList<QTextOption::Tab> QTextOption::tabs() const
Returns a list of tab positions defined for the text layout.
diff --git a/src/gui/text/qtexttable.h b/src/gui/text/qtexttable.h
index ee8e974396..156b091b05 100644
--- a/src/gui/text/qtexttable.h
+++ b/src/gui/text/qtexttable.h
@@ -54,7 +54,7 @@ class QTextTablePrivate;
class Q_GUI_EXPORT QTextTableCell
{
public:
- QTextTableCell() : table(Q_NULLPTR) {}
+ QTextTableCell() : table(nullptr) {}
~QTextTableCell() {}
QTextTableCell(const QTextTableCell &o) : table(o.table), fragment(o.fragment) {}
QTextTableCell &operator=(const QTextTableCell &o)
@@ -69,7 +69,7 @@ public:
int rowSpan() const;
int columnSpan() const;
- inline bool isValid() const { return table != Q_NULLPTR; }
+ inline bool isValid() const { return table != nullptr; }
QTextCursor firstCursorPosition() const;
QTextCursor lastCursorPosition() const;
diff --git a/src/gui/text/qtexttable_p.h b/src/gui/text/qtexttable_p.h
index 848537272d..c969e1d5bc 100644
--- a/src/gui/text/qtexttable_p.h
+++ b/src/gui/text/qtexttable_p.h
@@ -65,8 +65,8 @@ public:
~QTextTablePrivate();
static QTextTable *createTable(QTextDocumentPrivate *, int pos, int rows, int cols, const QTextTableFormat &tableFormat);
- void fragmentAdded(QChar type, uint fragment) Q_DECL_OVERRIDE;
- void fragmentRemoved(QChar type, uint fragment) Q_DECL_OVERRIDE;
+ void fragmentAdded(QChar type, uint fragment) override;
+ void fragmentRemoved(QChar type, uint fragment) override;
void update() const;
diff --git a/src/gui/util/qvalidator.h b/src/gui/util/qvalidator.h
index eba4b54672..ad23092537 100644
--- a/src/gui/util/qvalidator.h
+++ b/src/gui/util/qvalidator.h
@@ -59,7 +59,7 @@ class Q_GUI_EXPORT QValidator : public QObject
{
Q_OBJECT
public:
- explicit QValidator(QObject * parent = Q_NULLPTR);
+ explicit QValidator(QObject * parent = nullptr);
~QValidator();
enum State {
@@ -93,12 +93,12 @@ class Q_GUI_EXPORT QIntValidator : public QValidator
Q_PROPERTY(int top READ top WRITE setTop NOTIFY topChanged)
public:
- explicit QIntValidator(QObject * parent = Q_NULLPTR);
- QIntValidator(int bottom, int top, QObject *parent = Q_NULLPTR);
+ explicit QIntValidator(QObject * parent = nullptr);
+ QIntValidator(int bottom, int top, QObject *parent = nullptr);
~QIntValidator();
- QValidator::State validate(QString &, int &) const Q_DECL_OVERRIDE;
- void fixup(QString &input) const Q_DECL_OVERRIDE;
+ QValidator::State validate(QString &, int &) const override;
+ void fixup(QString &input) const override;
void setBottom(int);
void setTop(int);
@@ -130,8 +130,8 @@ class Q_GUI_EXPORT QDoubleValidator : public QValidator
Q_PROPERTY(Notation notation READ notation WRITE setNotation NOTIFY notationChanged)
public:
- explicit QDoubleValidator(QObject * parent = Q_NULLPTR);
- QDoubleValidator(double bottom, double top, int decimals, QObject *parent = Q_NULLPTR);
+ explicit QDoubleValidator(QObject * parent = nullptr);
+ QDoubleValidator(double bottom, double top, int decimals, QObject *parent = nullptr);
~QDoubleValidator();
enum Notation {
@@ -139,7 +139,7 @@ public:
ScientificNotation
};
Q_ENUM(Notation)
- QValidator::State validate(QString &, int &) const Q_DECL_OVERRIDE;
+ QValidator::State validate(QString &, int &) const override;
virtual void setRange(double bottom, double top, int decimals = 0);
void setBottom(double);
@@ -174,11 +174,11 @@ class Q_GUI_EXPORT QRegExpValidator : public QValidator
Q_PROPERTY(QRegExp regExp READ regExp WRITE setRegExp NOTIFY regExpChanged)
public:
- explicit QRegExpValidator(QObject *parent = Q_NULLPTR);
- explicit QRegExpValidator(const QRegExp& rx, QObject *parent = Q_NULLPTR);
+ explicit QRegExpValidator(QObject *parent = nullptr);
+ explicit QRegExpValidator(const QRegExp& rx, QObject *parent = nullptr);
~QRegExpValidator();
- virtual QValidator::State validate(QString& input, int& pos) const Q_DECL_OVERRIDE;
+ virtual QValidator::State validate(QString& input, int& pos) const override;
void setRegExp(const QRegExp& rx);
const QRegExp& regExp() const { return r; }
@@ -204,11 +204,11 @@ class Q_GUI_EXPORT QRegularExpressionValidator : public QValidator
Q_PROPERTY(QRegularExpression regularExpression READ regularExpression WRITE setRegularExpression NOTIFY regularExpressionChanged)
public:
- explicit QRegularExpressionValidator(QObject *parent = Q_NULLPTR);
- explicit QRegularExpressionValidator(const QRegularExpression &re, QObject *parent = Q_NULLPTR);
+ explicit QRegularExpressionValidator(QObject *parent = nullptr);
+ explicit QRegularExpressionValidator(const QRegularExpression &re, QObject *parent = nullptr);
~QRegularExpressionValidator();
- virtual QValidator::State validate(QString &input, int &pos) const Q_DECL_OVERRIDE;
+ virtual QValidator::State validate(QString &input, int &pos) const override;
QRegularExpression regularExpression() const;
diff --git a/src/gui/vulkan/qplatformvulkaninstance.h b/src/gui/vulkan/qplatformvulkaninstance.h
index 9470e2d0b4..9f34803f7b 100644
--- a/src/gui/vulkan/qplatformvulkaninstance.h
+++ b/src/gui/vulkan/qplatformvulkaninstance.h
@@ -88,4 +88,65 @@ QT_END_NAMESPACE
#endif // QT_CONFIG(vulkan)
+#if defined(Q_CLANG_QDOC)
+/*
+ The following include file did not exist for clang-qdoc running
+ in macOS, but the classes are documented in qvulkanfunctions.cpp.
+ clang-qdoc must parse the class declarations in an include file,
+ or else it can't find a place to put the documentation for the
+ classes. Apparently these classes are created at build time if
+ Vulkan is present.
+ */
+#ifndef QVULKANFUNCTIONS_H
+#define QVULKANFUNCTIONS_H
+
+#include <QtGui/qtguiglobal.h>
+
+#if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
+
+#ifndef VK_NO_PROTOTYPES
+#define VK_NO_PROTOTYPES
+#endif
+#include <vulkan/vulkan.h>
+
+#include <QtCore/qscopedpointer.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVulkanInstance;
+class QVulkanFunctionsPrivate;
+class QVulkanDeviceFunctionsPrivate;
+
+class Q_GUI_EXPORT QVulkanFunctions
+{
+public:
+ ~QVulkanFunctions();
+
+private:
+ Q_DISABLE_COPY(QVulkanFunctions)
+ QVulkanFunctions(QVulkanInstance *inst);
+
+ QScopedPointer<QVulkanFunctionsPrivate> d_ptr;
+ friend class QVulkanInstance;
+};
+
+class Q_GUI_EXPORT QVulkanDeviceFunctions
+{
+public:
+ ~QVulkanDeviceFunctions();
+
+private:
+ Q_DISABLE_COPY(QVulkanDeviceFunctions)
+ QVulkanDeviceFunctions(QVulkanInstance *inst, VkDevice device);
+
+ QScopedPointer<QVulkanDeviceFunctionsPrivate> d_ptr;
+ friend class QVulkanInstance;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC)
+#endif // QVULKANFUNCTIONS_H;
+#endif // Q_CLANG_QDOC
+
#endif // QPLATFORMVULKANINSTANCE_H
diff --git a/src/gui/vulkan/qvulkaninstance.cpp b/src/gui/vulkan/qvulkaninstance.cpp
index 2e03be8151..8236d9625a 100644
--- a/src/gui/vulkan/qvulkaninstance.cpp
+++ b/src/gui/vulkan/qvulkaninstance.cpp
@@ -504,13 +504,13 @@ QVulkanInstance::~QVulkanInstance()
*/
/*!
- \fn bool QVulkanInfoVector::contains(const QByteArray &name) const
+ \fn template<typename T> bool QVulkanInfoVector<T>::contains(const QByteArray &name) const
\return true if the vector contains a layer or extension with the given \a name.
*/
/*!
- \fn bool QVulkanInfoVector::contains(const QByteArray &name, int minVersion) const
+ \fn template<typename T> bool QVulkanInfoVector<T>::contains(const QByteArray &name, int minVersion) const
\return true if the vector contains a layer or extension with the given
\a name and a version same as or newer than \a minVersion.
diff --git a/src/network/access/access.pri b/src/network/access/access.pri
index e8669dcec8..1d6a04a424 100644
--- a/src/network/access/access.pri
+++ b/src/network/access/access.pri
@@ -1,14 +1,6 @@
# Qt network access module
HEADERS += \
- access/qhttpnetworkheader_p.h \
- access/qhttpnetworkrequest_p.h \
- access/qhttpnetworkreply_p.h \
- access/qhttpnetworkconnection_p.h \
- access/qhttpnetworkconnectionchannel_p.h \
- access/qabstractprotocolhandler_p.h \
- access/qhttpprotocolhandler_p.h \
- access/qspdyprotocolhandler_p.h \
access/qnetworkaccessauthenticationmanager_p.h \
access/qnetworkaccessmanager.h \
access/qnetworkaccessmanager_p.h \
@@ -27,28 +19,15 @@ HEADERS += \
access/qnetworkreply_p.h \
access/qnetworkreplyimpl_p.h \
access/qnetworkreplydataimpl_p.h \
- access/qnetworkreplyhttpimpl_p.h \
access/qnetworkreplyfileimpl_p.h \
access/qabstractnetworkcache_p.h \
access/qabstractnetworkcache.h \
- access/qhttpthreaddelegate_p.h \
- access/qhttpmultipart.h \
- access/qhttpmultipart_p.h \
access/qnetworkfile_p.h \
- access/qhttp2protocolhandler_p.h \
access/qhsts_p.h \
access/qhstspolicy.h \
access/qhstsstore_p.h
SOURCES += \
- access/qhttpnetworkheader.cpp \
- access/qhttpnetworkrequest.cpp \
- access/qhttpnetworkreply.cpp \
- access/qhttpnetworkconnection.cpp \
- access/qhttpnetworkconnectionchannel.cpp \
- access/qabstractprotocolhandler.cpp \
- access/qhttpprotocolhandler.cpp \
- access/qspdyprotocolhandler.cpp \
access/qnetworkaccessauthenticationmanager.cpp \
access/qnetworkaccessmanager.cpp \
access/qnetworkaccesscache.cpp \
@@ -62,13 +41,9 @@ SOURCES += \
access/qnetworkreply.cpp \
access/qnetworkreplyimpl.cpp \
access/qnetworkreplydataimpl.cpp \
- access/qnetworkreplyhttpimpl.cpp \
access/qnetworkreplyfileimpl.cpp \
access/qabstractnetworkcache.cpp \
- access/qhttpthreaddelegate.cpp \
- access/qhttpmultipart.cpp \
access/qnetworkfile.cpp \
- access/qhttp2protocolhandler.cpp \
access/qhsts.cpp \
access/qhstspolicy.cpp \
access/qhstsstore.cpp
@@ -94,4 +69,36 @@ qtConfig(networkdiskcache) {
mac: LIBS_PRIVATE += -framework Security
include($$PWD/../../3rdparty/zlib_dependency.pri)
-include($$PWD/http2/http2.pri)
+
+qtConfig(http) {
+ include($$PWD/http2/http2.pri)
+
+ SOURCES += \
+ access/qabstractprotocolhandler.cpp \
+ access/qhttp2protocolhandler.cpp \
+ access/qhttpmultipart.cpp \
+ access/qhttpnetworkconnection.cpp \
+ access/qhttpnetworkconnectionchannel.cpp \
+ access/qhttpnetworkheader.cpp \
+ access/qhttpnetworkreply.cpp \
+ access/qhttpnetworkrequest.cpp \
+ access/qhttpprotocolhandler.cpp \
+ access/qhttpthreaddelegate.cpp \
+ access/qnetworkreplyhttpimpl.cpp \
+ access/qspdyprotocolhandler.cpp
+
+ HEADERS += \
+ access/qabstractprotocolhandler_p.h \
+ access/qhttp2protocolhandler_p.h \
+ access/qhttpmultipart.h \
+ access/qhttpmultipart_p.h \
+ access/qhttpnetworkconnection_p.h \
+ access/qhttpnetworkconnectionchannel_p.h \
+ access/qhttpnetworkheader_p.h \
+ access/qhttpnetworkreply_p.h \
+ access/qhttpnetworkrequest_p.h \
+ access/qhttpprotocolhandler_p.h \
+ access/qhttpthreaddelegate_p.h \
+ access/qnetworkreplyhttpimpl_p.h \
+ access/qspdyprotocolhandler_p.h
+}
diff --git a/src/network/access/http2/hpack.cpp b/src/network/access/http2/hpack.cpp
index 95e6f9051b..2d324d5092 100644
--- a/src/network/access/http2/hpack.cpp
+++ b/src/network/access/http2/hpack.cpp
@@ -67,18 +67,6 @@ HeaderSize header_size(const HttpHeader &header)
struct BitPattern
{
- BitPattern()
- : value(),
- bitLength()
- {
- }
-
- BitPattern(uchar v, uchar len)
- : value(v),
- bitLength(len)
- {
- }
-
uchar value;
uchar bitLength;
};
@@ -102,11 +90,11 @@ using StreamError = BitIStream::Error;
// It's always 1 or 0 actually, but the number of bits to extract
// from the input stream - differs.
-const BitPattern Indexed(1, 1);
-const BitPattern LiteralIncrementalIndexing(1, 2);
-const BitPattern LiteralNoIndexing(0, 4);
-const BitPattern LiteralNeverIndexing(1, 4);
-const BitPattern SizeUpdate(1, 3);
+const BitPattern Indexed = {1, 1};
+const BitPattern LiteralIncrementalIndexing = {1, 2};
+const BitPattern LiteralNoIndexing = {0, 4};
+const BitPattern LiteralNeverIndexing = {1, 4};
+const BitPattern SizeUpdate = {1, 3};
bool is_literal_field(const BitPattern &pattern)
{
diff --git a/src/network/access/http2/http2streams_p.h b/src/network/access/http2/http2streams_p.h
index 8465486ae8..0be6b3b253 100644
--- a/src/network/access/http2/http2streams_p.h
+++ b/src/network/access/http2/http2streams_p.h
@@ -62,6 +62,8 @@
#include <vector>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
class QNonContiguousByteDevice;
diff --git a/src/network/access/http2/huffman_p.h b/src/network/access/http2/huffman_p.h
index 7195661664..c5324d42b1 100644
--- a/src/network/access/http2/huffman_p.h
+++ b/src/network/access/http2/huffman_p.h
@@ -62,19 +62,6 @@ namespace HPack
struct CodeEntry
{
- CodeEntry() : byteValue(),
- huffmanCode(),
- bitLength()
- {
- }
-
- CodeEntry(quint32 val, quint32 code, quint32 len)
- : byteValue(val),
- huffmanCode(code),
- bitLength(len)
- {
- }
-
quint32 byteValue;
quint32 huffmanCode;
quint32 bitLength;
diff --git a/src/network/access/qabstractnetworkcache.h b/src/network/access/qabstractnetworkcache.h
index 33b0bc4ce3..678bae2d6e 100644
--- a/src/network/access/qabstractnetworkcache.h
+++ b/src/network/access/qabstractnetworkcache.h
@@ -131,7 +131,7 @@ public Q_SLOTS:
virtual void clear() = 0;
protected:
- explicit QAbstractNetworkCache(QObject *parent = Q_NULLPTR);
+ explicit QAbstractNetworkCache(QObject *parent = nullptr);
QAbstractNetworkCache(QAbstractNetworkCachePrivate &dd, QObject *parent);
private:
diff --git a/src/network/access/qabstractprotocolhandler.cpp b/src/network/access/qabstractprotocolhandler.cpp
index d408f3b37a..f15dfe6899 100644
--- a/src/network/access/qabstractprotocolhandler.cpp
+++ b/src/network/access/qabstractprotocolhandler.cpp
@@ -40,8 +40,6 @@
#include <private/qabstractprotocolhandler_p.h>
#include <private/qhttpnetworkconnectionchannel_p.h>
-#ifndef QT_NO_HTTP
-
QT_BEGIN_NAMESPACE
QAbstractProtocolHandler::QAbstractProtocolHandler(QHttpNetworkConnectionChannel *channel)
@@ -62,5 +60,3 @@ void QAbstractProtocolHandler::setReply(QHttpNetworkReply *reply)
}
QT_END_NAMESPACE
-
-#endif // QT_NO_HTTP
diff --git a/src/network/access/qabstractprotocolhandler_p.h b/src/network/access/qabstractprotocolhandler_p.h
index 30814d6737..04a07734dd 100644
--- a/src/network/access/qabstractprotocolhandler_p.h
+++ b/src/network/access/qabstractprotocolhandler_p.h
@@ -53,7 +53,7 @@
#include <QtNetwork/private/qtnetworkglobal_p.h>
-#ifndef QT_NO_HTTP
+QT_REQUIRE_CONFIG(http);
QT_BEGIN_NAMESPACE
@@ -81,6 +81,4 @@ protected:
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
#endif // QABSTRACTPROTOCOLHANDLER_H
diff --git a/src/network/access/qhsts.cpp b/src/network/access/qhsts.cpp
index 6a731afc2f..43a8a3663e 100644
--- a/src/network/access/qhsts.cpp
+++ b/src/network/access/qhsts.cpp
@@ -136,7 +136,7 @@ void QHstsCache::updateKnownHost(const QString &host, const QDateTime &expires,
return;
}
- knownHosts.insert(pos, hostName, newPolicy);
+ knownHosts.insert(pos, {hostName, newPolicy});
if (hstsStore)
hstsStore->addToObserved(newPolicy);
return;
@@ -144,8 +144,8 @@ void QHstsCache::updateKnownHost(const QString &host, const QDateTime &expires,
if (newPolicy.isExpired())
knownHosts.erase(pos);
- else if (*pos != newPolicy)
- *pos = std::move(newPolicy);
+ else if (pos->second != newPolicy)
+ pos->second = std::move(newPolicy);
else
return;
@@ -185,13 +185,13 @@ bool QHstsCache::isKnownHost(const QUrl &url) const
while (nameToTest.fragment.size()) {
auto const pos = knownHosts.find(nameToTest);
if (pos != knownHosts.end()) {
- if (pos.value().isExpired()) {
+ if (pos->second.isExpired()) {
knownHosts.erase(pos);
if (hstsStore) {
// Inform our store that this policy has expired.
- hstsStore->addToObserved(pos.value());
+ hstsStore->addToObserved(pos->second);
}
- } else if (!superDomainMatch || pos.value().includesSubDomains()) {
+ } else if (!superDomainMatch || pos->second.includesSubDomains()) {
return true;
}
}
@@ -215,9 +215,9 @@ void QHstsCache::clear()
QVector<QHstsPolicy> QHstsCache::policies() const
{
QVector<QHstsPolicy> values;
- values.reserve(knownHosts.size());
+ values.reserve(int(knownHosts.size()));
for (const auto &host : knownHosts)
- values << host;
+ values << host.second;
return values;
}
diff --git a/src/network/access/qhsts_p.h b/src/network/access/qhsts_p.h
index 2feb73b446..bc8708341d 100644
--- a/src/network/access/qhsts_p.h
+++ b/src/network/access/qhsts_p.h
@@ -61,7 +61,8 @@
#include <QtCore/qglobal.h>
#include <QtCore/qpair.h>
#include <QtCore/qurl.h>
-#include <QtCore/qmap.h>
+
+#include <map>
QT_BEGIN_NAMESPACE
@@ -117,7 +118,7 @@ private:
QStringRef fragment;
};
- mutable QMap<HostName, QHstsPolicy> knownHosts;
+ mutable std::map<HostName, QHstsPolicy> knownHosts;
QHstsStore *hstsStore = nullptr;
};
diff --git a/src/network/access/qhstspolicy.cpp b/src/network/access/qhstspolicy.cpp
index ab4695480b..46c9c22510 100644
--- a/src/network/access/qhstspolicy.cpp
+++ b/src/network/access/qhstspolicy.cpp
@@ -103,9 +103,15 @@ QHstsPolicy::QHstsPolicy() : d(new QHstsPolicyPrivate)
}
/*!
- Constructs QHstsPolicy with \a expiry (in UTC):
- - \a host data is interpreted according to \a mode;
- - \a flags selects options to apply to this policy.
+ \enum QHstsPolicy::PolicyFlag
+
+ \value IncludeSubDomains Indicates whether a policy must include subdomains
+*/
+
+/*!
+ Constructs QHstsPolicy with \a expiry (in UTC); \a flags is a value indicating
+ whether this policy must also include subdomains, \a host data is interpreted
+ according to \a mode.
\sa QUrl::setHost(), QUrl::ParsingMode, QHstsPolicy::PolicyFlag
*/
@@ -213,4 +219,10 @@ bool QHstsPolicy::isExpired() const
return !d->expiry.isValid() || d->expiry <= QDateTime::currentDateTimeUtc();
}
+/*!
+ \fn void QHstsPolicy::swap(QHstsPolicy &other)
+
+ Swaps this policy with the \a other policy.
+*/
+
QT_END_NAMESPACE
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 42f1343c52..0cdcee6b59 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -40,8 +40,6 @@
#include "qhttpnetworkconnection_p.h"
#include "qhttp2protocolhandler_p.h"
-#if !defined(QT_NO_HTTP)
-
#include "http2/bitstreams_p.h"
#include <private/qnoncontiguousbytedevice_p.h>
@@ -88,7 +86,8 @@ HPack::HttpHeader build_headers(const QHttpNetworkRequest &request, quint32 maxH
if (size.second > maxHeaderListSize)
return HttpHeader(); // Bad, we cannot send this request ...
- for (const auto &field : request.header()) {
+ const auto requestHeader = request.header();
+ for (const auto &field : requestHeader) {
const HeaderSize delta = entry_size(field.first, field.second);
if (!delta.first) // Overflow???
break;
@@ -1511,5 +1510,3 @@ void QHttp2ProtocolHandler::closeSession()
}
QT_END_NAMESPACE
-
-#endif // !defined(QT_NO_HTTP)
diff --git a/src/network/access/qhttp2protocolhandler_p.h b/src/network/access/qhttp2protocolhandler_p.h
index dd209bd0ef..9165808302 100644
--- a/src/network/access/qhttp2protocolhandler_p.h
+++ b/src/network/access/qhttp2protocolhandler_p.h
@@ -55,8 +55,6 @@
#include <private/qabstractprotocolhandler_p.h>
#include <private/qhttpnetworkrequest_p.h>
-#if !defined(QT_NO_HTTP)
-
#include <private/http2protocol_p.h>
#include <private/http2streams_p.h>
#include <private/http2frames_p.h>
@@ -75,6 +73,8 @@
#include <deque>
#include <set>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
class QHttp2ProtocolHandler : public QObject, public QAbstractProtocolHandler
@@ -228,6 +228,4 @@ private:
QT_END_NAMESPACE
-#endif // !defined(QT_NO_HTTP)
-
#endif
diff --git a/src/network/access/qhttpmultipart.h b/src/network/access/qhttpmultipart.h
index 6d4531b099..78585a704d 100644
--- a/src/network/access/qhttpmultipart.h
+++ b/src/network/access/qhttpmultipart.h
@@ -46,6 +46,8 @@
#include <QtCore/QIODevice>
#include <QtNetwork/QNetworkRequest>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
@@ -98,8 +100,8 @@ public:
AlternativeType
};
- explicit QHttpMultiPart(QObject *parent = Q_NULLPTR);
- explicit QHttpMultiPart(ContentType contentType, QObject *parent = Q_NULLPTR);
+ explicit QHttpMultiPart(QObject *parent = nullptr);
+ explicit QHttpMultiPart(ContentType contentType, QObject *parent = nullptr);
~QHttpMultiPart();
void append(const QHttpPart &httpPart);
diff --git a/src/network/access/qhttpmultipart_p.h b/src/network/access/qhttpmultipart_p.h
index a03df9cb13..363e0b346c 100644
--- a/src/network/access/qhttpmultipart_p.h
+++ b/src/network/access/qhttpmultipart_p.h
@@ -56,6 +56,8 @@
#include "qnetworkrequest_p.h" // for deriving QHttpPartPrivate from QNetworkHeadersPrivate
#include "private/qobject_p.h"
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
@@ -124,30 +126,30 @@ public:
~QHttpMultiPartIODevice() {
}
- virtual bool atEnd() const Q_DECL_OVERRIDE {
+ virtual bool atEnd() const override {
return readPointer == size();
}
- virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE {
+ virtual qint64 bytesAvailable() const override {
return size() - readPointer;
}
- virtual void close() Q_DECL_OVERRIDE {
+ virtual void close() override {
readPointer = 0;
partOffsets.clear();
deviceSize = -1;
QIODevice::close();
}
- virtual qint64 bytesToWrite() const Q_DECL_OVERRIDE {
+ virtual qint64 bytesToWrite() const override {
return 0;
}
- virtual qint64 size() const Q_DECL_OVERRIDE;
- virtual bool isSequential() const Q_DECL_OVERRIDE;
- virtual bool reset() Q_DECL_OVERRIDE;
- virtual qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
- virtual qint64 writeData(const char *data, qint64 maxSize) Q_DECL_OVERRIDE;
+ virtual qint64 size() const override;
+ virtual bool isSequential() const override;
+ virtual bool reset() override;
+ virtual qint64 readData(char *data, qint64 maxSize) override;
+ virtual qint64 writeData(const char *data, qint64 maxSize) override;
QHttpMultiPartPrivate *multiPart;
qint64 readPointer;
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 5194a2b1c5..0e2c257952 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -53,8 +53,6 @@
#include <qpair.h>
#include <qdebug.h>
-#ifndef QT_NO_HTTP
-
#ifndef QT_NO_SSL
# include <private/qsslsocket_p.h>
# include <QtNetwork/qsslkey.h>
@@ -83,10 +81,11 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host
networkLayerState(Unknown),
hostName(hostName), port(port), encrypt(encrypt), delayIpv4(true)
, activeChannelCount(type == QHttpNetworkConnection::ConnectionTypeHTTP2
+ || type == QHttpNetworkConnection::ConnectionTypeHTTP2Direct
#ifndef QT_NO_SSL
- || type == QHttpNetworkConnection::ConnectionTypeSPDY
+ || type == QHttpNetworkConnection::ConnectionTypeSPDY
#endif
- ? 1 : defaultHttpChannelCount)
+ ? 1 : defaultHttpChannelCount)
, channelCount(defaultHttpChannelCount)
#ifndef QT_NO_NETWORKPROXY
, networkProxy(QNetworkProxy::NoProxy)
@@ -122,7 +121,7 @@ QHttpNetworkConnectionPrivate::~QHttpNetworkConnectionPrivate()
{
for (int i = 0; i < channelCount; ++i) {
if (channels[i].socket) {
- QObject::disconnect(channels[i].socket, Q_NULLPTR, &channels[i], Q_NULLPTR);
+ QObject::disconnect(channels[i].socket, nullptr, &channels[i], nullptr);
channels[i].socket->close();
delete channels[i].socket;
}
@@ -647,8 +646,8 @@ QHttpNetworkReply* QHttpNetworkConnectionPrivate::queueRequest(const QHttpNetwor
#ifndef Q_OS_WINRT
// For Happy Eyeballs the networkLayerState is set to Unknown
- // untill we have started the first connection attempt. So no
- // request will be started untill we know if IPv4 or IPv6
+ // until we have started the first connection attempt. So no
+ // request will be started until we know if IPv4 or IPv6
// should be used.
if (networkLayerState == Unknown || networkLayerState == HostLookupPending) {
startHostInfoLookup();
@@ -1065,6 +1064,7 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest()
}
break;
}
+ case QHttpNetworkConnection::ConnectionTypeHTTP2Direct:
case QHttpNetworkConnection::ConnectionTypeHTTP2:
case QHttpNetworkConnection::ConnectionTypeSPDY: {
if (channels[0].spdyRequestsToSend.isEmpty() && channels[0].switchedToHttp2)
@@ -1554,5 +1554,3 @@ void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpN
QT_END_NAMESPACE
#include "moc_qhttpnetworkconnection_p.cpp"
-
-#endif // QT_NO_HTTP
diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h
index d3450417aa..91827a6eb1 100644
--- a/src/network/access/qhttpnetworkconnection_p.h
+++ b/src/network/access/qhttpnetworkconnection_p.h
@@ -71,7 +71,7 @@
#include <private/qhttpnetworkconnectionchannel_p.h>
-#ifndef QT_NO_HTTP
+QT_REQUIRE_CONFIG(http);
QT_BEGIN_NAMESPACE
@@ -94,7 +94,8 @@ public:
enum ConnectionType {
ConnectionTypeHTTP,
ConnectionTypeSPDY,
- ConnectionTypeHTTP2
+ ConnectionTypeHTTP2,
+ ConnectionTypeHTTP2Direct
};
#ifndef QT_NO_BEARERMANAGEMENT
@@ -295,6 +296,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
#endif
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 094a48a603..0ac14c78f6 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -45,8 +45,6 @@
#include <qpair.h>
#include <qdebug.h>
-#ifndef QT_NO_HTTP
-
#include <private/qhttp2protocolhandler_p.h>
#include <private/qhttpprotocolhandler_p.h>
#include <private/qspdyprotocolhandler_p.h>
@@ -438,6 +436,10 @@ void QHttpNetworkConnectionChannel::allDone()
return;
}
+ // For clear text HTTP/2 we tried to upgrade from HTTP/1.1 to HTTP/2; for
+ // ConnectionTypeHTTP2Direct we can never be here in case of failure
+ // (after an attempt to read HTTP/1.1 as HTTP/2 frames) or we have a normal
+ // HTTP/2 response and thus can skip this test:
if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2
&& !ssl && !switchedToHttp2) {
if (Http2::is_protocol_upgraded(*reply)) {
@@ -891,6 +893,14 @@ void QHttpNetworkConnectionChannel::_q_connected()
connection->setSslContext(socketSslContext);
}
#endif
+ } else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) {
+ state = QHttpNetworkConnectionChannel::IdleState;
+ protocolHandler.reset(new QHttp2ProtocolHandler(this));
+ if (spdyRequestsToSend.count() > 0) {
+ // In case our peer has sent us its settings (window size, max concurrent streams etc.)
+ // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection).
+ QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
+ }
} else {
state = QHttpNetworkConnectionChannel::IdleState;
const bool tryProtocolUpgrade = connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2;
@@ -1125,7 +1135,10 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
QSslSocket *sslSocket = qobject_cast<QSslSocket *>(socket);
Q_ASSERT(sslSocket);
- if (!protocolHandler) {
+ if (!protocolHandler && connection->connectionType() != QHttpNetworkConnection::ConnectionTypeHTTP2Direct) {
+ // ConnectionTypeHTTP2Direct does not rely on ALPN/NPN to negotiate HTTP/2,
+ // after establishing a secure connection we immediately start sending
+ // HTTP/2 frames.
switch (sslSocket->sslConfiguration().nextProtocolNegotiationStatus()) {
case QSslConfiguration::NextProtocolNegotiationNegotiated:
case QSslConfiguration::NextProtocolNegotiationUnsupported: {
@@ -1191,7 +1204,8 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
emitFinishedWithError(QNetworkReply::SslHandshakeFailedError,
"detected unknown Next Protocol Negotiation protocol");
}
- } else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2) {
+ } else if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2
+ || connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) {
// We have to reset QHttp2ProtocolHandler's state machine, it's a new
// connection and the handler's state is unique per connection.
protocolHandler.reset(new QHttp2ProtocolHandler(this));
@@ -1203,10 +1217,12 @@ void QHttpNetworkConnectionChannel::_q_encrypted()
pendingEncrypt = false;
if (connection->connectionType() == QHttpNetworkConnection::ConnectionTypeSPDY ||
- connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2) {
+ connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2 ||
+ connection->connectionType() == QHttpNetworkConnection::ConnectionTypeHTTP2Direct) {
// we call setSpdyWasUsed(true) on the replies in the SPDY handler when the request is sent
if (spdyRequestsToSend.count() > 0) {
- // wait for data from the server first (e.g. initial window, max concurrent requests)
+ // In case our peer has sent us its settings (window size, max concurrent streams etc.)
+ // let's give _q_receiveReply a chance to read them first ('invokeMethod', QueuedConnection).
QMetaObject::invokeMethod(connection, "_q_startNextRequest", Qt::QueuedConnection);
}
} else { // HTTP
@@ -1303,5 +1319,3 @@ void QHttpNetworkConnectionChannel::setConnection(QHttpNetworkConnection *c)
QT_END_NAMESPACE
#include "moc_qhttpnetworkconnectionchannel_p.cpp"
-
-#endif // QT_NO_HTTP
diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h
index 844a7d5d15..e9cdae5653 100644
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h
@@ -68,8 +68,6 @@
#include <private/qhttpnetworkconnection_p.h>
#include <private/qabstractprotocolhandler_p.h>
-#ifndef QT_NO_HTTP
-
#ifndef QT_NO_SSL
# include <QtNetwork/qsslsocket.h>
# include <QtNetwork/qsslerror.h>
@@ -80,6 +78,8 @@
#include <QtCore/qscopedpointer.h>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
class QHttpNetworkRequest;
@@ -216,6 +216,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
#endif
diff --git a/src/network/access/qhttpnetworkheader.cpp b/src/network/access/qhttpnetworkheader.cpp
index 85d68bf88d..3326f89d2f 100644
--- a/src/network/access/qhttpnetworkheader.cpp
+++ b/src/network/access/qhttpnetworkheader.cpp
@@ -41,8 +41,6 @@
#include <algorithm>
-#ifndef QT_NO_HTTP
-
QT_BEGIN_NAMESPACE
QHttpNetworkHeaderPrivate::QHttpNetworkHeaderPrivate(const QUrl &newUrl)
@@ -126,5 +124,3 @@ bool QHttpNetworkHeaderPrivate::operator==(const QHttpNetworkHeaderPrivate &othe
QT_END_NAMESPACE
-
-#endif
diff --git a/src/network/access/qhttpnetworkheader_p.h b/src/network/access/qhttpnetworkheader_p.h
index 506486a52b..3adb0ed7f1 100644
--- a/src/network/access/qhttpnetworkheader_p.h
+++ b/src/network/access/qhttpnetworkheader_p.h
@@ -53,11 +53,11 @@
#include <QtNetwork/private/qtnetworkglobal_p.h>
-#ifndef QT_NO_HTTP
-
#include <qshareddata.h>
#include <qurl.h>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
class Q_AUTOTEST_EXPORT QHttpNetworkHeader
@@ -100,10 +100,6 @@ public:
QT_END_NAMESPACE
-
-#endif // QT_NO_HTTP
-
-
#endif // QHTTPNETWORKHEADER_H
diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp
index 778ba821e8..a657346958 100644
--- a/src/network/access/qhttpnetworkreply.cpp
+++ b/src/network/access/qhttpnetworkreply.cpp
@@ -40,8 +40,6 @@
#include "qhttpnetworkreply_p.h"
#include "qhttpnetworkconnection_p.h"
-#ifndef QT_NO_HTTP
-
#ifndef QT_NO_SSL
# include <QtNetwork/qsslkey.h>
# include <QtNetwork/qsslcipher.h>
@@ -1035,5 +1033,3 @@ void QHttpNetworkReply::ignoreSslErrors(const QList<QSslError> &errors)
QT_END_NAMESPACE
-
-#endif // QT_NO_HTTP
diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h
index faab03f056..863e21ea3e 100644
--- a/src/network/access/qhttpnetworkreply_p.h
+++ b/src/network/access/qhttpnetworkreply_p.h
@@ -53,8 +53,6 @@
#include <QtNetwork/private/qtnetworkglobal_p.h>
-#ifndef QT_NO_HTTP
-
#include <qplatformdefs.h>
#ifndef QT_NO_COMPRESS
@@ -77,6 +75,8 @@ struct z_stream_s;
#include <private/qringbuffer_p.h>
#include <private/qbytedata_p.h>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
class QHttpNetworkConnection;
@@ -92,18 +92,18 @@ public:
explicit QHttpNetworkReply(const QUrl &url = QUrl(), QObject *parent = 0);
virtual ~QHttpNetworkReply();
- QUrl url() const Q_DECL_OVERRIDE;
- void setUrl(const QUrl &url) Q_DECL_OVERRIDE;
+ QUrl url() const override;
+ void setUrl(const QUrl &url) override;
- int majorVersion() const Q_DECL_OVERRIDE;
- int minorVersion() const Q_DECL_OVERRIDE;
+ int majorVersion() const override;
+ int minorVersion() const override;
- qint64 contentLength() const Q_DECL_OVERRIDE;
- void setContentLength(qint64 length) Q_DECL_OVERRIDE;
+ qint64 contentLength() const override;
+ void setContentLength(qint64 length) override;
- QList<QPair<QByteArray, QByteArray> > header() const Q_DECL_OVERRIDE;
- QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const Q_DECL_OVERRIDE;
- void setHeaderField(const QByteArray &name, const QByteArray &data) Q_DECL_OVERRIDE;
+ QList<QPair<QByteArray, QByteArray> > header() const override;
+ QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const override;
+ void setHeaderField(const QByteArray &name, const QByteArray &data) override;
void parseHeader(const QByteArray &header); // mainly for testing
QHttpNetworkRequest request() const;
@@ -285,7 +285,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
-
#endif // QHTTPNETWORKREPLY_H
diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp
index ac87a36482..cf4be3df95 100644
--- a/src/network/access/qhttpnetworkrequest.cpp
+++ b/src/network/access/qhttpnetworkrequest.cpp
@@ -40,15 +40,13 @@
#include "qhttpnetworkrequest_p.h"
#include "private/qnoncontiguousbytedevice_p.h"
-#ifndef QT_NO_HTTP
-
QT_BEGIN_NAMESPACE
QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Operation op,
QHttpNetworkRequest::Priority pri, const QUrl &newUrl)
: QHttpNetworkHeaderPrivate(newUrl), operation(op), priority(pri), uploadByteDevice(0),
autoDecompress(false), pipeliningAllowed(false), spdyAllowed(false), http2Allowed(false),
- withCredentials(true), preConnect(false), redirectCount(0),
+ http2Direct(false), withCredentials(true), preConnect(false), redirectCount(0),
redirectPolicy(QNetworkRequest::ManualRedirectPolicy)
{
}
@@ -63,6 +61,7 @@ QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(const QHttpNetworkRequest
pipeliningAllowed(other.pipeliningAllowed),
spdyAllowed(other.spdyAllowed),
http2Allowed(other.http2Allowed),
+ http2Direct(other.http2Direct),
withCredentials(other.withCredentials),
ssl(other.ssl),
preConnect(other.preConnect),
@@ -85,6 +84,7 @@ bool QHttpNetworkRequestPrivate::operator==(const QHttpNetworkRequestPrivate &ot
&& (pipeliningAllowed == other.pipeliningAllowed)
&& (spdyAllowed == other.spdyAllowed)
&& (http2Allowed == other.http2Allowed)
+ && (http2Direct == other.http2Direct)
// we do not clear the customVerb in setOperation
&& (operation != QHttpNetworkRequest::Custom || (customVerb == other.customVerb))
&& (withCredentials == other.withCredentials)
@@ -355,6 +355,16 @@ void QHttpNetworkRequest::setHTTP2Allowed(bool b)
d->http2Allowed = b;
}
+bool QHttpNetworkRequest::isHTTP2Direct() const
+{
+ return d->http2Direct;
+}
+
+void QHttpNetworkRequest::setHTTP2Direct(bool b)
+{
+ d->http2Direct = b;
+}
+
bool QHttpNetworkRequest::withCredentials() const
{
return d->withCredentials;
@@ -388,5 +398,3 @@ int QHttpNetworkRequest::minorVersion() const
QT_END_NAMESPACE
-#endif
-
diff --git a/src/network/access/qhttpnetworkrequest_p.h b/src/network/access/qhttpnetworkrequest_p.h
index f9f991977f..bc797537ae 100644
--- a/src/network/access/qhttpnetworkrequest_p.h
+++ b/src/network/access/qhttpnetworkrequest_p.h
@@ -52,12 +52,12 @@
//
#include <QtNetwork/private/qtnetworkglobal_p.h>
-#ifndef QT_NO_HTTP
-
#include <private/qhttpnetworkheader_p.h>
#include <QtNetwork/qnetworkrequest.h>
#include <qmetatype.h>
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
class QNonContiguousByteDevice;
@@ -90,18 +90,18 @@ public:
QHttpNetworkRequest &operator=(const QHttpNetworkRequest &other);
bool operator==(const QHttpNetworkRequest &other) const;
- QUrl url() const Q_DECL_OVERRIDE;
- void setUrl(const QUrl &url) Q_DECL_OVERRIDE;
+ QUrl url() const override;
+ void setUrl(const QUrl &url) override;
- int majorVersion() const Q_DECL_OVERRIDE;
- int minorVersion() const Q_DECL_OVERRIDE;
+ int majorVersion() const override;
+ int minorVersion() const override;
- qint64 contentLength() const Q_DECL_OVERRIDE;
- void setContentLength(qint64 length) Q_DECL_OVERRIDE;
+ qint64 contentLength() const override;
+ void setContentLength(qint64 length) override;
- QList<QPair<QByteArray, QByteArray> > header() const Q_DECL_OVERRIDE;
- QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const Q_DECL_OVERRIDE;
- void setHeaderField(const QByteArray &name, const QByteArray &data) Q_DECL_OVERRIDE;
+ QList<QPair<QByteArray, QByteArray> > header() const override;
+ QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const override;
+ void setHeaderField(const QByteArray &name, const QByteArray &data) override;
void prependHeaderField(const QByteArray &name, const QByteArray &data);
Operation operation() const;
@@ -122,6 +122,9 @@ public:
bool isHTTP2Allowed() const;
void setHTTP2Allowed(bool b);
+ bool isHTTP2Direct() const;
+ void setHTTP2Direct(bool b);
+
bool withCredentials() const;
void setWithCredentials(bool b);
@@ -173,6 +176,7 @@ public:
bool pipeliningAllowed;
bool spdyAllowed;
bool http2Allowed;
+ bool http2Direct;
bool withCredentials;
bool ssl;
bool preConnect;
@@ -185,7 +189,4 @@ QT_END_NAMESPACE
Q_DECLARE_METATYPE(QHttpNetworkRequest)
-#endif // QT_NO_HTTP
-
-
#endif // QHTTPNETWORKREQUEST_H
diff --git a/src/network/access/qhttpprotocolhandler.cpp b/src/network/access/qhttpprotocolhandler.cpp
index 37e8b9bed8..edcbdcbe0e 100644
--- a/src/network/access/qhttpprotocolhandler.cpp
+++ b/src/network/access/qhttpprotocolhandler.cpp
@@ -42,8 +42,6 @@
#include <private/qnoncontiguousbytedevice_p.h>
#include <private/qhttpnetworkconnectionchannel_p.h>
-#ifndef QT_NO_HTTP
-
QT_BEGIN_NAMESPACE
QHttpProtocolHandler::QHttpProtocolHandler(QHttpNetworkConnectionChannel *channel)
@@ -437,5 +435,3 @@ bool QHttpProtocolHandler::sendRequest()
}
QT_END_NAMESPACE
-
-#endif // QT_NO_HTTP
diff --git a/src/network/access/qhttpprotocolhandler_p.h b/src/network/access/qhttpprotocolhandler_p.h
index 863b988be3..8e766604bb 100644
--- a/src/network/access/qhttpprotocolhandler_p.h
+++ b/src/network/access/qhttpprotocolhandler_p.h
@@ -55,7 +55,7 @@
#include <QtNetwork/private/qtnetworkglobal_p.h>
#include <private/qabstractprotocolhandler_p.h>
-#ifndef QT_NO_HTTP
+QT_REQUIRE_CONFIG(http);
QT_BEGIN_NAMESPACE
@@ -64,13 +64,11 @@ public:
QHttpProtocolHandler(QHttpNetworkConnectionChannel *channel);
private:
- virtual void _q_receiveReply() Q_DECL_OVERRIDE;
- virtual void _q_readyRead() Q_DECL_OVERRIDE;
- virtual bool sendRequest() Q_DECL_OVERRIDE;
+ virtual void _q_receiveReply() override;
+ virtual void _q_readyRead() override;
+ virtual bool sendRequest() override;
};
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
#endif
diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp
index 3204f8da33..0e97acdd9d 100644
--- a/src/network/access/qhttpthreaddelegate.cpp
+++ b/src/network/access/qhttpthreaddelegate.cpp
@@ -50,8 +50,6 @@
#include "private/qnetworkaccesscache_p.h"
#include "private/qnoncontiguousbytedevice_p.h"
-#ifndef QT_NO_HTTP
-
QT_BEGIN_NAMESPACE
static QNetworkReply::NetworkError statusCodeFromHttp(int httpStatusCode, const QUrl &url)
@@ -197,7 +195,7 @@ public:
setShareable(true);
}
- virtual void dispose() Q_DECL_OVERRIDE
+ virtual void dispose() override
{
#if 0 // sample code; do this right with the API
Q_ASSERT(!isWorking());
@@ -292,11 +290,17 @@ void QHttpThreadDelegate::startRequest()
QHttpNetworkConnection::ConnectionType connectionType
= httpRequest.isHTTP2Allowed() ? QHttpNetworkConnection::ConnectionTypeHTTP2
: QHttpNetworkConnection::ConnectionTypeHTTP;
+ if (httpRequest.isHTTP2Direct()) {
+ Q_ASSERT(!httpRequest.isHTTP2Allowed());
+ connectionType = QHttpNetworkConnection::ConnectionTypeHTTP2Direct;
+ }
+
#ifndef QT_NO_SSL
if (ssl && !incomingSslConfiguration.data())
incomingSslConfiguration.reset(new QSslConfiguration);
if (httpRequest.isHTTP2Allowed() && ssl) {
+ // With HTTP2Direct we do not try any protocol negotiation.
QList<QByteArray> protocols;
protocols << QSslConfiguration::ALPNProtocolHTTP2
<< QSslConfiguration::NextProtocolHttp1_1;
@@ -762,6 +766,4 @@ void QHttpThreadDelegate::synchronousProxyAuthenticationRequiredSlot(const QNet
#endif
-#endif // QT_NO_HTTP
-
QT_END_NAMESPACE
diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h
index da115d6710..019a8b8b74 100644
--- a/src/network/access/qhttpthreaddelegate_p.h
+++ b/src/network/access/qhttpthreaddelegate_p.h
@@ -68,7 +68,7 @@
#include "qnetworkaccessauthenticationmanager_p.h"
#include <QtNetwork/private/http2protocol_p.h>
-#ifndef QT_NO_HTTP
+QT_REQUIRE_CONFIG(http);
QT_BEGIN_NAMESPACE
@@ -218,12 +218,12 @@ public:
{
}
- qint64 pos() const Q_DECL_OVERRIDE
+ qint64 pos() const override
{
return m_pos;
}
- const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE
+ const char* readPointer(qint64 maximumLength, qint64 &len) override
{
if (m_amount > 0) {
len = m_amount;
@@ -243,7 +243,7 @@ public:
return 0;
}
- bool advanceReadPointer(qint64 a) Q_DECL_OVERRIDE
+ bool advanceReadPointer(qint64 a) override
{
if (m_data == 0)
return false;
@@ -258,7 +258,7 @@ public:
return true;
}
- bool atEnd() const Q_DECL_OVERRIDE
+ bool atEnd() const override
{
if (m_amount > 0)
return false;
@@ -266,7 +266,7 @@ public:
return m_atEnd;
}
- bool reset() Q_DECL_OVERRIDE
+ bool reset() override
{
m_amount = 0;
m_data = 0;
@@ -288,7 +288,7 @@ public:
return b;
}
- qint64 size() const Q_DECL_OVERRIDE
+ qint64 size() const override
{
return m_size;
}
@@ -327,6 +327,4 @@ signals:
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
#endif // QHTTPTHREADDELEGATE_H
diff --git a/src/network/access/qnetworkaccessauthenticationmanager.cpp b/src/network/access/qnetworkaccessauthenticationmanager.cpp
index 2b07833cda..b661cc45b3 100644
--- a/src/network/access/qnetworkaccessauthenticationmanager.cpp
+++ b/src/network/access/qnetworkaccessauthenticationmanager.cpp
@@ -95,7 +95,7 @@ public:
}
}
- virtual void dispose() Q_DECL_OVERRIDE { delete this; }
+ virtual void dispose() override { delete this; }
};
#ifndef QT_NO_NETWORKPROXY
diff --git a/src/network/access/qnetworkaccesscache_p.h b/src/network/access/qnetworkaccesscache_p.h
index 3732b5cbb4..69ea649a8a 100644
--- a/src/network/access/qnetworkaccesscache_p.h
+++ b/src/network/access/qnetworkaccesscache_p.h
@@ -106,7 +106,7 @@ signals:
void entryReady(QNetworkAccessCache::CacheableObject *);
protected:
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
private:
// idea copied from qcache.h
diff --git a/src/network/access/qnetworkaccesscachebackend_p.h b/src/network/access/qnetworkaccesscachebackend_p.h
index 8db1a6b1d5..dfb0ce84d9 100644
--- a/src/network/access/qnetworkaccesscachebackend_p.h
+++ b/src/network/access/qnetworkaccesscachebackend_p.h
@@ -65,12 +65,12 @@ public:
QNetworkAccessCacheBackend();
~QNetworkAccessCacheBackend();
- void open() Q_DECL_OVERRIDE;
- void closeDownstreamChannel() Q_DECL_OVERRIDE;
+ void open() override;
+ void closeDownstreamChannel() override;
void closeUpstreamChannel();
void upstreamReadyRead();
- void downstreamReadyWrite() Q_DECL_OVERRIDE;
+ void downstreamReadyWrite() override;
private:
bool sendCacheContents();
diff --git a/src/network/access/qnetworkaccessdebugpipebackend_p.h b/src/network/access/qnetworkaccessdebugpipebackend_p.h
index 1d1af61dbd..d9a7aabdad 100644
--- a/src/network/access/qnetworkaccessdebugpipebackend_p.h
+++ b/src/network/access/qnetworkaccessdebugpipebackend_p.h
@@ -68,10 +68,10 @@ public:
QNetworkAccessDebugPipeBackend();
virtual ~QNetworkAccessDebugPipeBackend();
- virtual void open() Q_DECL_OVERRIDE;
- virtual void closeDownstreamChannel() Q_DECL_OVERRIDE;
+ virtual void open() override;
+ virtual void closeDownstreamChannel() override;
- virtual void downstreamReadyWrite() Q_DECL_OVERRIDE;
+ virtual void downstreamReadyWrite() override;
protected:
void pushFromSocketToDownstream();
@@ -101,9 +101,9 @@ private:
class QNetworkAccessDebugPipeBackendFactory: public QNetworkAccessBackendFactory
{
public:
- virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE;
+ virtual QStringList supportedSchemes() const override;
virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op,
- const QNetworkRequest &request) const Q_DECL_OVERRIDE;
+ const QNetworkRequest &request) const override;
};
#endif // QT_BUILD_INTERNAL
diff --git a/src/network/access/qnetworkaccessfilebackend_p.h b/src/network/access/qnetworkaccessfilebackend_p.h
index 081ff2b9e7..2c01fb1121 100644
--- a/src/network/access/qnetworkaccessfilebackend_p.h
+++ b/src/network/access/qnetworkaccessfilebackend_p.h
@@ -66,10 +66,10 @@ public:
QNetworkAccessFileBackend();
virtual ~QNetworkAccessFileBackend();
- virtual void open() Q_DECL_OVERRIDE;
- virtual void closeDownstreamChannel() Q_DECL_OVERRIDE;
+ virtual void open() override;
+ virtual void closeDownstreamChannel() override;
- virtual void downstreamReadyWrite() Q_DECL_OVERRIDE;
+ virtual void downstreamReadyWrite() override;
public slots:
void uploadReadyReadSlot();
@@ -87,9 +87,9 @@ private:
class QNetworkAccessFileBackendFactory: public QNetworkAccessBackendFactory
{
public:
- virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE;
+ virtual QStringList supportedSchemes() const override;
virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op,
- const QNetworkRequest &request) const Q_DECL_OVERRIDE;
+ const QNetworkRequest &request) const override;
};
QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp
index 0df2569e87..c5404e4221 100644
--- a/src/network/access/qnetworkaccessftpbackend.cpp
+++ b/src/network/access/qnetworkaccessftpbackend.cpp
@@ -94,7 +94,7 @@ public:
setShareable(false);
}
- void dispose() Q_DECL_OVERRIDE
+ void dispose() override
{
connect(this, SIGNAL(done(bool)), this, SLOT(deleteLater()));
close();
diff --git a/src/network/access/qnetworkaccessftpbackend_p.h b/src/network/access/qnetworkaccessftpbackend_p.h
index 0f26d05327..4bd082fb67 100644
--- a/src/network/access/qnetworkaccessftpbackend_p.h
+++ b/src/network/access/qnetworkaccessftpbackend_p.h
@@ -84,10 +84,10 @@ public:
QNetworkAccessFtpBackend();
virtual ~QNetworkAccessFtpBackend();
- virtual void open() Q_DECL_OVERRIDE;
- virtual void closeDownstreamChannel() Q_DECL_OVERRIDE;
+ virtual void open() override;
+ virtual void closeDownstreamChannel() override;
- virtual void downstreamReadyWrite() Q_DECL_OVERRIDE;
+ virtual void downstreamReadyWrite() override;
enum CacheCleanupMode {
ReleaseCachedConnection,
@@ -115,9 +115,9 @@ private:
class QNetworkAccessFtpBackendFactory: public QNetworkAccessBackendFactory
{
public:
- virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE;
+ virtual QStringList supportedSchemes() const override;
virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op,
- const QNetworkRequest &request) const Q_DECL_OVERRIDE;
+ const QNetworkRequest &request) const override;
};
QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index d5a0261f43..07644b869f 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -66,10 +66,12 @@
#include "QtNetwork/private/qauthenticator_p.h"
#include "QtNetwork/qsslconfiguration.h"
#include "QtNetwork/qnetworkconfigmanager.h"
-#include "QtNetwork/qhttpmultipart.h"
-#include "qhttpmultipart_p.h"
+#if QT_CONFIG(http)
+#include "qhttpmultipart.h"
+#include "qhttpmultipart_p.h"
#include "qnetworkreplyhttpimpl_p.h"
+#endif
#include "qthread.h"
@@ -469,7 +471,7 @@ QNetworkAccessManager::QNetworkAccessManager(QObject *parent)
qRegisterMetaType<QSslPreSharedKeyAuthenticator *>();
#endif
qRegisterMetaType<QList<QPair<QByteArray,QByteArray> > >();
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
qRegisterMetaType<QHttpNetworkRequest>();
#endif
qRegisterMetaType<QNetworkReply::NetworkError>();
@@ -779,7 +781,9 @@ bool QNetworkAccessManager::isStrictTransportSecurityStoreEnabled() const
/*!
\since 5.9
- Adds HTTP Strict Transport Security policies contained in \a knownHosts into HSTS cache.
+ Adds HTTP Strict Transport Security policies into HSTS cache.
+ \a knownHosts contains the known hosts that have QHstsPolicy
+ information.
\note An expired policy will remove a known host from the cache, if previously
present.
@@ -877,6 +881,7 @@ QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const
return reply;
}
+#if QT_CONFIG(http)
/*!
\since 4.8
@@ -916,6 +921,7 @@ QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QHttpM
QNetworkReply *reply = put(newRequest, device);
return reply;
}
+#endif // QT_CONFIG(http)
/*!
Uploads the contents of \a data to the destination \a request and
@@ -1283,6 +1289,7 @@ QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &r
return reply;
}
+#if QT_CONFIG(http)
/*!
\since 5.8
@@ -1304,6 +1311,7 @@ QNetworkReply *QNetworkAccessManager::sendCustomRequest(const QNetworkRequest &r
QNetworkReply *reply = sendCustomRequest(newRequest, verb, device);
return reply;
}
+#endif // QT_CONFIG(http)
/*!
Returns a new QNetworkReply object to handle the operation \a op
@@ -1416,7 +1424,7 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
}
}
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
// Since Qt 5 we use the new QNetworkReplyHttpImpl
if (scheme == QLatin1String("http") || scheme == QLatin1String("preconnect-http")
#ifndef QT_NO_SSL
@@ -1448,7 +1456,7 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
#endif
return reply;
}
-#endif // QT_NO_HTTP
+#endif // QT_CONFIG(http)
// first step: create the reply
QNetworkReplyImpl *reply = new QNetworkReplyImpl(this);
@@ -1524,7 +1532,7 @@ QStringList QNetworkAccessManager::supportedSchemesImplementation() const
QStringList schemes = d->backendSupportedSchemes();
// Those ones don't exist in backends
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
schemes << QStringLiteral("http");
#ifndef QT_NO_SSL
if (QSslSocket::supportsSsl())
@@ -1991,6 +1999,7 @@ void QNetworkAccessManagerPrivate::_q_networkSessionFailed(QNetworkSession::Sess
#endif // QT_NO_BEARERMANAGEMENT
+#if QT_CONFIG(http)
QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart)
{
// copy the request, we probably need to add some headers
@@ -2038,6 +2047,7 @@ QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkReq
return newRequest;
}
+#endif // QT_CONFIG(http)
QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkaccessmanager.h b/src/network/access/qnetworkaccessmanager.h
index 4806ec0475..a0ce3eddcd 100644
--- a/src/network/access/qnetworkaccessmanager.h
+++ b/src/network/access/qnetworkaccessmanager.h
@@ -100,7 +100,7 @@ public:
Q_ENUM(NetworkAccessibility)
#endif
- explicit QNetworkAccessManager(QObject *parent = Q_NULLPTR);
+ explicit QNetworkAccessManager(QObject *parent = nullptr);
~QNetworkAccessManager();
// ### Qt 6: turn into virtual
@@ -134,14 +134,17 @@ public:
QNetworkReply *get(const QNetworkRequest &request);
QNetworkReply *post(const QNetworkRequest &request, QIODevice *data);
QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data);
- QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);
QNetworkReply *put(const QNetworkRequest &request, QIODevice *data);
QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data);
- QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);
QNetworkReply *deleteResource(const QNetworkRequest &request);
- QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = Q_NULLPTR);
+ QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr);
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data);
+
+#if QT_CONFIG(http)
+ QNetworkReply *post(const QNetworkRequest &request, QHttpMultiPart *multiPart);
+ QNetworkReply *put(const QNetworkRequest &request, QHttpMultiPart *multiPart);
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QHttpMultiPart *multiPart);
+#endif
#ifndef QT_NO_BEARERMANAGEMENT
void setConfiguration(const QNetworkConfiguration &config);
@@ -181,7 +184,7 @@ Q_SIGNALS:
protected:
virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &request,
- QIODevice *outgoingData = Q_NULLPTR);
+ QIODevice *outgoingData = nullptr);
protected Q_SLOTS:
QStringList supportedSchemesImplementation() const;
diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h
index e5257251a4..428110e8bc 100644
--- a/src/network/access/qnetworkaccessmanager_p.h
+++ b/src/network/access/qnetworkaccessmanager_p.h
@@ -164,7 +164,9 @@ public:
#endif
+#if QT_CONFIG(http)
QNetworkRequest prepareMultipart(const QNetworkRequest &request, QHttpMultiPart *multiPart);
+#endif
// this is the cache for storing downloaded files
QAbstractNetworkCache *networkCache;
diff --git a/src/network/access/qnetworkcookiejar.h b/src/network/access/qnetworkcookiejar.h
index f9c1549e20..c3b2200443 100644
--- a/src/network/access/qnetworkcookiejar.h
+++ b/src/network/access/qnetworkcookiejar.h
@@ -54,7 +54,7 @@ class Q_NETWORK_EXPORT QNetworkCookieJar: public QObject
{
Q_OBJECT
public:
- explicit QNetworkCookieJar(QObject *parent = Q_NULLPTR);
+ explicit QNetworkCookieJar(QObject *parent = nullptr);
virtual ~QNetworkCookieJar();
virtual QList<QNetworkCookie> cookiesForUrl(const QUrl &url) const;
diff --git a/src/network/access/qnetworkdiskcache.h b/src/network/access/qnetworkdiskcache.h
index 0e9258f6de..ff7d3192e8 100644
--- a/src/network/access/qnetworkdiskcache.h
+++ b/src/network/access/qnetworkdiskcache.h
@@ -53,7 +53,7 @@ class Q_NETWORK_EXPORT QNetworkDiskCache : public QAbstractNetworkCache
Q_OBJECT
public:
- explicit QNetworkDiskCache(QObject *parent = Q_NULLPTR);
+ explicit QNetworkDiskCache(QObject *parent = nullptr);
~QNetworkDiskCache();
QString cacheDirectory() const;
@@ -62,18 +62,18 @@ public:
qint64 maximumCacheSize() const;
void setMaximumCacheSize(qint64 size);
- qint64 cacheSize() const Q_DECL_OVERRIDE;
- QNetworkCacheMetaData metaData(const QUrl &url) Q_DECL_OVERRIDE;
- void updateMetaData(const QNetworkCacheMetaData &metaData) Q_DECL_OVERRIDE;
- QIODevice *data(const QUrl &url) Q_DECL_OVERRIDE;
- bool remove(const QUrl &url) Q_DECL_OVERRIDE;
- QIODevice *prepare(const QNetworkCacheMetaData &metaData) Q_DECL_OVERRIDE;
- void insert(QIODevice *device) Q_DECL_OVERRIDE;
+ qint64 cacheSize() const override;
+ QNetworkCacheMetaData metaData(const QUrl &url) override;
+ void updateMetaData(const QNetworkCacheMetaData &metaData) override;
+ QIODevice *data(const QUrl &url) override;
+ bool remove(const QUrl &url) override;
+ QIODevice *prepare(const QNetworkCacheMetaData &metaData) override;
+ void insert(QIODevice *device) override;
QNetworkCacheMetaData fileMetaData(const QString &fileName) const;
public Q_SLOTS:
- void clear() Q_DECL_OVERRIDE;
+ void clear() override;
protected:
virtual qint64 expire();
diff --git a/src/network/access/qnetworkfile_p.h b/src/network/access/qnetworkfile_p.h
index dd56b24bd8..e788308d82 100644
--- a/src/network/access/qnetworkfile_p.h
+++ b/src/network/access/qnetworkfile_p.h
@@ -67,7 +67,7 @@ public:
public Q_SLOTS:
void open();
- void close() Q_DECL_OVERRIDE;
+ void close() override;
Q_SIGNALS:
void finished(bool ok);
diff --git a/src/network/access/qnetworkreply.h b/src/network/access/qnetworkreply.h
index d858e07d84..63c2752caf 100644
--- a/src/network/access/qnetworkreply.h
+++ b/src/network/access/qnetworkreply.h
@@ -114,8 +114,8 @@ public:
~QNetworkReply();
// reimplemented from QIODevice
- virtual void close() Q_DECL_OVERRIDE;
- virtual bool isSequential() const Q_DECL_OVERRIDE;
+ virtual void close() override;
+ virtual bool isSequential() const override;
// like QAbstractSocket:
qint64 readBufferSize() const;
@@ -169,9 +169,9 @@ Q_SIGNALS:
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
protected:
- explicit QNetworkReply(QObject *parent = Q_NULLPTR);
+ explicit QNetworkReply(QObject *parent = nullptr);
QNetworkReply(QNetworkReplyPrivate &dd, QObject *parent);
- virtual qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ virtual qint64 writeData(const char *data, qint64 len) override;
void setOperation(QNetworkAccessManager::Operation operation);
void setRequest(const QNetworkRequest &request);
diff --git a/src/network/access/qnetworkreplydataimpl_p.h b/src/network/access/qnetworkreplydataimpl_p.h
index c8b44d7539..81d2110d69 100644
--- a/src/network/access/qnetworkreplydataimpl_p.h
+++ b/src/network/access/qnetworkreplydataimpl_p.h
@@ -67,15 +67,15 @@ class QNetworkReplyDataImpl: public QNetworkReply
public:
QNetworkReplyDataImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op);
~QNetworkReplyDataImpl();
- virtual void abort() Q_DECL_OVERRIDE;
+ virtual void abort() override;
// reimplemented from QNetworkReply
- virtual void close() Q_DECL_OVERRIDE;
- virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- virtual bool isSequential () const Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
+ virtual void close() override;
+ virtual qint64 bytesAvailable() const override;
+ virtual bool isSequential () const override;
+ qint64 size() const override;
- virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ virtual qint64 readData(char *data, qint64 maxlen) override;
Q_DECLARE_PRIVATE(QNetworkReplyDataImpl)
};
diff --git a/src/network/access/qnetworkreplyfileimpl_p.h b/src/network/access/qnetworkreplyfileimpl_p.h
index d6af66152e..55aece0bed 100644
--- a/src/network/access/qnetworkreplyfileimpl_p.h
+++ b/src/network/access/qnetworkreplyfileimpl_p.h
@@ -67,15 +67,15 @@ class QNetworkReplyFileImpl: public QNetworkReply
public:
QNetworkReplyFileImpl(QNetworkAccessManager *manager, const QNetworkRequest &req, const QNetworkAccessManager::Operation op);
~QNetworkReplyFileImpl();
- virtual void abort() Q_DECL_OVERRIDE;
+ virtual void abort() override;
// reimplemented from QNetworkReply
- virtual void close() Q_DECL_OVERRIDE;
- virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- virtual bool isSequential () const Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
+ virtual void close() override;
+ virtual qint64 bytesAvailable() const override;
+ virtual bool isSequential () const override;
+ qint64 size() const override;
- virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ virtual qint64 readData(char *data, qint64 maxlen) override;
private Q_SLOTS:
void fileOpenFinished(bool isOpen);
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp
index 382da0db5a..96016453c2 100644
--- a/src/network/access/qnetworkreplyhttpimpl.cpp
+++ b/src/network/access/qnetworkreplyhttpimpl.cpp
@@ -60,8 +60,6 @@
#include "qnetworkcookiejar.h"
-#ifndef QT_NO_HTTP
-
#include <string.h> // for strchr
QT_BEGIN_NAMESPACE
@@ -773,6 +771,12 @@ void QNetworkReplyHttpImplPrivate::postRequest(const QNetworkRequest &newHttpReq
if (request.attribute(QNetworkRequest::HTTP2AllowedAttribute).toBool())
httpRequest.setHTTP2Allowed(true);
+ if (request.attribute(QNetworkRequest::Http2DirectAttribute).toBool()) {
+ // Intentionally mutually exclusive - cannot be both direct and 'allowed'
+ httpRequest.setHTTP2Direct(true);
+ httpRequest.setHTTP2Allowed(false);
+ }
+
if (static_cast<QNetworkRequest::LoadControl>
(newHttpRequest.attribute(QNetworkRequest::AuthenticationReuseAttribute,
QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Manual)
@@ -1288,7 +1292,9 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData(const QList<QPair<QByte
q->setAttribute(QNetworkRequest::HttpPipeliningWasUsedAttribute, pu);
const QVariant http2Allowed = request.attribute(QNetworkRequest::HTTP2AllowedAttribute);
- if (http2Allowed.isValid() && http2Allowed.toBool()) {
+ const QVariant http2Direct = request.attribute(QNetworkRequest::Http2DirectAttribute);
+ if ((http2Allowed.isValid() && http2Allowed.toBool())
+ || (http2Direct.isValid() && http2Direct.toBool())) {
q->setAttribute(QNetworkRequest::HTTP2WasUsedAttribute, spdyWasUsed);
q->setAttribute(QNetworkRequest::SpdyWasUsedAttribute, false);
} else {
@@ -2375,5 +2381,3 @@ void QNetworkReplyHttpImplPrivate::completeCacheSave()
}
QT_END_NAMESPACE
-
-#endif // QT_NO_HTTP
diff --git a/src/network/access/qnetworkreplyhttpimpl_p.h b/src/network/access/qnetworkreplyhttpimpl_p.h
index 9d47f65ce7..f5f01d0811 100644
--- a/src/network/access/qnetworkreplyhttpimpl_p.h
+++ b/src/network/access/qnetworkreplyhttpimpl_p.h
@@ -72,7 +72,7 @@
#include <QtNetwork/QSslConfiguration>
#endif
-#ifndef QT_NO_HTTP
+QT_REQUIRE_CONFIG(http);
QT_BEGIN_NAMESPACE
@@ -86,14 +86,14 @@ public:
QNetworkReplyHttpImpl(QNetworkAccessManager* const, const QNetworkRequest&, QNetworkAccessManager::Operation&, QIODevice* outgoingData);
virtual ~QNetworkReplyHttpImpl();
- void close() Q_DECL_OVERRIDE;
- void abort() Q_DECL_OVERRIDE;
- qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- bool isSequential () const Q_DECL_OVERRIDE;
- qint64 size() const Q_DECL_OVERRIDE;
- qint64 readData(char*, qint64) Q_DECL_OVERRIDE;
- void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE;
- bool canReadLine () const Q_DECL_OVERRIDE;
+ void close() override;
+ void abort() override;
+ qint64 bytesAvailable() const override;
+ bool isSequential () const override;
+ qint64 size() const override;
+ qint64 readData(char*, qint64) override;
+ void setReadBufferSize(qint64 size) override;
+ bool canReadLine () const override;
Q_DECLARE_PRIVATE(QNetworkReplyHttpImpl)
Q_PRIVATE_SLOT(d_func(), void _q_startOperation())
@@ -141,10 +141,10 @@ public:
#ifndef QT_NO_SSL
protected:
- void ignoreSslErrors() Q_DECL_OVERRIDE;
- void ignoreSslErrorsImplementation(const QList<QSslError> &errors) Q_DECL_OVERRIDE;
- void setSslConfigurationImplementation(const QSslConfiguration &configuration) Q_DECL_OVERRIDE;
- void sslConfigurationImplementation(QSslConfiguration &configuration) const Q_DECL_OVERRIDE;
+ void ignoreSslErrors() override;
+ void ignoreSslErrorsImplementation(const QList<QSslError> &errors) override;
+ void setSslConfigurationImplementation(const QSslConfiguration &configuration) override;
+ void sslConfigurationImplementation(QSslConfiguration &configuration) const override;
#endif
signals:
@@ -315,6 +315,4 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_HTTP
-
#endif
diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h
index 7cd99392d3..f4e8284ab6 100644
--- a/src/network/access/qnetworkreplyimpl_p.h
+++ b/src/network/access/qnetworkreplyimpl_p.h
@@ -76,15 +76,15 @@ class QNetworkReplyImpl: public QNetworkReply
public:
QNetworkReplyImpl(QObject *parent = 0);
~QNetworkReplyImpl();
- virtual void abort() Q_DECL_OVERRIDE;
+ virtual void abort() override;
// reimplemented from QNetworkReply / QIODevice
- virtual void close() Q_DECL_OVERRIDE;
- virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- virtual void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE;
+ virtual void close() override;
+ virtual qint64 bytesAvailable() const override;
+ virtual void setReadBufferSize(qint64 size) override;
- virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- virtual bool event(QEvent *) Q_DECL_OVERRIDE;
+ virtual qint64 readData(char *data, qint64 maxlen) override;
+ virtual bool event(QEvent *) override;
Q_DECLARE_PRIVATE(QNetworkReplyImpl)
Q_PRIVATE_SLOT(d_func(), void _q_startOperation())
@@ -101,10 +101,10 @@ public:
#ifndef QT_NO_SSL
protected:
- void sslConfigurationImplementation(QSslConfiguration &configuration) const Q_DECL_OVERRIDE;
- void setSslConfigurationImplementation(const QSslConfiguration &configuration) Q_DECL_OVERRIDE;
- virtual void ignoreSslErrors() Q_DECL_OVERRIDE;
- virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors) Q_DECL_OVERRIDE;
+ void sslConfigurationImplementation(QSslConfiguration &configuration) const override;
+ void setSslConfigurationImplementation(const QSslConfiguration &configuration) override;
+ virtual void ignoreSslErrors() override;
+ virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors) override;
#endif
};
@@ -219,9 +219,9 @@ public:
QNetworkAccessManager::Operation op);
~QDisabledNetworkReply();
- void abort() Q_DECL_OVERRIDE { }
+ void abort() override { }
protected:
- qint64 readData(char *, qint64) Q_DECL_OVERRIDE { return -1; }
+ qint64 readData(char *, qint64) override { return -1; }
};
#endif
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp
index 60701d45be..1d7c5bec51 100644
--- a/src/network/access/qnetworkrequest.cpp
+++ b/src/network/access/qnetworkrequest.cpp
@@ -298,6 +298,20 @@ QT_BEGIN_NAMESPACE
This attribute obsoletes FollowRedirectsAttribute.
(This value was introduced in 5.9.)
+ \value Http2DirectAttribute
+ Requests only, type: QMetaType::Bool (default: false)
+ If set, this attribute will force QNetworkAccessManager to use
+ HTTP/2 protocol without initial HTTP/2 protocol negotiation.
+ Use of this attribute implies prior knowledge that a particular
+ server supports HTTP/2. The attribute works with SSL or 'cleartext'
+ HTTP/2. If a server turns out to not support HTTP/2, when HTTP/2 direct
+ was specified, QNetworkAccessManager gives up, without attempting to
+ fall back to HTTP/1.1. If both HTTP2AllowedAttribute and
+ Http2DirectAttribute are set, Http2DirectAttribute takes priority.
+ (This value was introduced in 5.11.)
+
+ \omitvalue ResourceTypeAttribute
+
\value User
Special type. Additional information can be passed in
QVariants with types ranging from User to UserMax. The default
diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h
index 68d4ae6d6b..e104c139d9 100644
--- a/src/network/access/qnetworkrequest.h
+++ b/src/network/access/qnetworkrequest.h
@@ -92,6 +92,8 @@ public:
HTTP2WasUsedAttribute,
OriginalContentLengthAttribute,
RedirectPolicyAttribute,
+ Http2DirectAttribute,
+ ResourceTypeAttribute, // internal
User = 1000,
UserMax = 32767
diff --git a/src/network/access/qspdyprotocolhandler.cpp b/src/network/access/qspdyprotocolhandler.cpp
index 445a2a1c29..403c01e974 100644
--- a/src/network/access/qspdyprotocolhandler.cpp
+++ b/src/network/access/qspdyprotocolhandler.cpp
@@ -43,7 +43,7 @@
#include <private/qhttpnetworkconnectionchannel_p.h>
#include <QtCore/QtEndian>
-#if !defined(QT_NO_HTTP) && !defined(QT_NO_SSL)
+#if !defined(QT_NO_SSL)
QT_BEGIN_NAMESPACE
@@ -1294,4 +1294,4 @@ qint32 QSpdyProtocolHandler::generateNextStreamID()
QT_END_NAMESPACE
-#endif // !defined(QT_NO_HTTP) && !defined(QT_NO_SSL)
+#endif // !defined(QT_NO_SSL)
diff --git a/src/network/access/qspdyprotocolhandler_p.h b/src/network/access/qspdyprotocolhandler_p.h
index 0a18505b23..dd93a9aba2 100644
--- a/src/network/access/qspdyprotocolhandler_p.h
+++ b/src/network/access/qspdyprotocolhandler_p.h
@@ -58,7 +58,9 @@
#include <zlib.h>
-#if !defined(QT_NO_HTTP) && !defined(QT_NO_SSL)
+QT_REQUIRE_CONFIG(http);
+
+#if !defined(QT_NO_SSL)
QT_BEGIN_NAMESPACE
@@ -101,9 +103,9 @@ public:
Q_DECLARE_FLAGS(SETTINGS_ID_Flags, SETTINGS_ID_Flag)
- virtual void _q_receiveReply() Q_DECL_OVERRIDE;
- virtual void _q_readyRead() Q_DECL_OVERRIDE;
- virtual bool sendRequest() Q_DECL_OVERRIDE;
+ virtual void _q_receiveReply() override;
+ virtual void _q_readyRead() override;
+ virtual bool sendRequest() override;
private slots:
void _q_uploadDataReadyRead();
@@ -223,6 +225,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QSpdyProtocolHandler::SETTINGS_ID_Flags)
QT_END_NAMESPACE
-#endif // !defined(QT_NO_HTTP) && !defined(QT_NO_SSL)
+#endif // !defined(QT_NO_SSL)
#endif // QSPDYPROTOCOLHANDLER_H
diff --git a/src/network/bearer/qnetworkconfigmanager.h b/src/network/bearer/qnetworkconfigmanager.h
index da248bc7d0..e8866999c7 100644
--- a/src/network/bearer/qnetworkconfigmanager.h
+++ b/src/network/bearer/qnetworkconfigmanager.h
@@ -66,7 +66,7 @@ public:
Q_DECLARE_FLAGS(Capabilities, Capability)
- explicit QNetworkConfigurationManager(QObject *parent = Q_NULLPTR);
+ explicit QNetworkConfigurationManager(QObject *parent = nullptr);
virtual ~QNetworkConfigurationManager();
QNetworkConfigurationManager::Capabilities capabilities() const;
diff --git a/src/network/bearer/qnetworksession.h b/src/network/bearer/qnetworksession.h
index d96b8915eb..1b5ae9098b 100644
--- a/src/network/bearer/qnetworksession.h
+++ b/src/network/bearer/qnetworksession.h
@@ -87,7 +87,7 @@ public:
Q_DECLARE_FLAGS(UsagePolicies, UsagePolicy)
- explicit QNetworkSession(const QNetworkConfiguration &connConfig, QObject *parent = Q_NULLPTR);
+ explicit QNetworkSession(const QNetworkConfiguration &connConfig, QObject *parent = nullptr);
virtual ~QNetworkSession();
bool isOpen() const;
@@ -131,8 +131,8 @@ Q_SIGNALS:
void usagePoliciesChanged(QNetworkSession::UsagePolicies usagePolicies);
protected:
- virtual void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
- virtual void disconnectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
+ virtual void connectNotify(const QMetaMethod &signal) override;
+ virtual void disconnectNotify(const QMetaMethod &signal) override;
private:
Q_DISABLE_COPY(QNetworkSession)
diff --git a/src/network/configure.json b/src/network/configure.json
index 2f446becf1..89bb1efffa 100644
--- a/src/network/configure.json
+++ b/src/network/configure.json
@@ -108,6 +108,24 @@
},
"use": "network"
},
+ "linux-netlink": {
+ "label": "Linux AF_NETLINK sockets",
+ "type": "compile",
+ "test": {
+ "include": [ "asm/types.h", "linux/netlink.h", "linux/rtnetlink.h", "sys/socket.h" ],
+ "main": [
+ "struct rtattr rta = { };",
+ "struct ifinfomsg ifi = {};",
+ "struct ifaddrmsg ifa = {};",
+ "struct ifa_cacheinfo ci;",
+ "ci.ifa_prefered = ci.ifa_valid = 0;",
+ "(void)RTM_NEWLINK; (void)RTM_NEWADDR;",
+ "(void)IFLA_ADDRESS; (void)IFLA_IFNAME;",
+ "(void)IFA_ADDRESS; (void)IFA_LABEL; (void)IFA_CACHEINFO;",
+ "(void)(IFA_F_SECONDARY | IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR);"
+ ]
+ }
+ },
"sctp": {
"label": "SCTP support",
"type": "compile",
@@ -153,6 +171,11 @@
"condition": "libs.libproxy",
"output": [ "privateFeature" ]
},
+ "linux-netlink": {
+ "label": "Linux AF_NETLINK",
+ "condition": "config.linux && tests.linux-netlink",
+ "output": [ "privateFeature" ]
+ },
"openssl": {
"label": "OpenSSL",
"enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
@@ -262,6 +285,12 @@
"section": "Networking",
"condition": "features.temporaryfile",
"output": [ "publicFeature", "feature" ]
+ },
+ "dnslookup": {
+ "label": "QDnsLookup",
+ "purpose": "Provides API for DNS lookups.",
+ "section": "Networking",
+ "output": [ "publicFeature" ]
}
},
@@ -302,6 +331,11 @@ For example:
"getifaddrs", "ipv6ifname", "libproxy",
{
"type": "feature",
+ "args": "linux-netlink",
+ "condition": "config.linux"
+ },
+ {
+ "type": "feature",
"args": "securetransport",
"condition": "config.darwin"
},
diff --git a/src/network/kernel/kernel.pri b/src/network/kernel/kernel.pri
index b822a70e88..11b80d59d5 100644
--- a/src/network/kernel/kernel.pri
+++ b/src/network/kernel/kernel.pri
@@ -7,8 +7,6 @@ HEADERS += kernel/qtnetworkglobal.h \
kernel/qtnetworkglobal_p.h \
kernel/qauthenticator.h \
kernel/qauthenticator_p.h \
- kernel/qdnslookup.h \
- kernel/qdnslookup_p.h \
kernel/qhostaddress.h \
kernel/qhostaddress_p.h \
kernel/qhostinfo.h \
@@ -17,10 +15,10 @@ HEADERS += kernel/qtnetworkglobal.h \
kernel/qnetworkdatagram_p.h \
kernel/qnetworkinterface.h \
kernel/qnetworkinterface_p.h \
+ kernel/qnetworkinterface_unix_p.h \
kernel/qnetworkproxy.h
SOURCES += kernel/qauthenticator.cpp \
- kernel/qdnslookup.cpp \
kernel/qhostaddress.cpp \
kernel/qhostinfo.cpp \
kernel/qnetworkdatagram.cpp \
@@ -32,12 +30,22 @@ qtConfig(ftp) {
SOURCES += kernel/qurlinfo.cpp
}
+qtConfig(dnslookup) {
+ HEADERS += kernel/qdnslookup.h \
+ kernel/qdnslookup_p.h
+
+ SOURCES += kernel/qdnslookup.cpp
+}
+
unix {
- !integrity: SOURCES += kernel/qdnslookup_unix.cpp
- SOURCES += kernel/qhostinfo_unix.cpp kernel/qnetworkinterface_unix.cpp
+ !integrity:qtConfig(dnslookup): SOURCES += kernel/qdnslookup_unix.cpp
+ SOURCES += kernel/qhostinfo_unix.cpp
+
+ qtConfig(linux-netlink): SOURCES += kernel/qnetworkinterface_linux.cpp
+ else: SOURCES += kernel/qnetworkinterface_unix.cpp
}
-android {
+android:qtConfig(dnslookup) {
SOURCES -= kernel/qdnslookup_unix.cpp
SOURCES += kernel/qdnslookup_android.cpp
}
@@ -46,12 +54,12 @@ win32: {
SOURCES += kernel/qhostinfo_win.cpp
!winrt {
- SOURCES += kernel/qdnslookup_win.cpp \
- kernel/qnetworkinterface_win.cpp
+ SOURCES += kernel/qnetworkinterface_win.cpp
+ qtConfig(dnslookup): SOURCES += kernel/qdnslookup_win.cpp
LIBS_PRIVATE += -ldnsapi -liphlpapi
} else {
- SOURCES += kernel/qdnslookup_winrt.cpp \
- kernel/qnetworkinterface_winrt.cpp
+ SOURCES += kernel/qnetworkinterface_winrt.cpp
+ qtConfig(dnslookup): SOURCES += kernel/qdnslookup_winrt.cpp
}
}
@@ -60,6 +68,7 @@ mac {
!uikit: LIBS_PRIVATE += -framework CoreServices -framework SystemConfiguration
}
+uikit:HEADERS += kernel/qnetworkinterface_uikit_p.h
osx:SOURCES += kernel/qnetworkproxy_mac.cpp
else:win32:!winrt: SOURCES += kernel/qnetworkproxy_win.cpp
else: qtConfig(libproxy) {
diff --git a/src/network/kernel/qdnslookup.h b/src/network/kernel/qdnslookup.h
index ead5e650f5..eebd0abe66 100644
--- a/src/network/kernel/qdnslookup.h
+++ b/src/network/kernel/qdnslookup.h
@@ -47,6 +47,8 @@
#include <QtCore/qsharedpointer.h>
#include <QtCore/qstring.h>
+QT_REQUIRE_CONFIG(dnslookup);
+
QT_BEGIN_NAMESPACE
class QHostAddress;
@@ -218,9 +220,9 @@ public:
};
Q_ENUM(Type)
- explicit QDnsLookup(QObject *parent = Q_NULLPTR);
- QDnsLookup(Type type, const QString &name, QObject *parent = Q_NULLPTR);
- QDnsLookup(Type type, const QString &name, const QHostAddress &nameserver, QObject *parent = Q_NULLPTR);
+ explicit QDnsLookup(QObject *parent = nullptr);
+ QDnsLookup(Type type, const QString &name, QObject *parent = nullptr);
+ QDnsLookup(Type type, const QString &name, const QHostAddress &nameserver, QObject *parent = nullptr);
~QDnsLookup();
Error error() const;
diff --git a/src/network/kernel/qdnslookup_p.h b/src/network/kernel/qdnslookup_p.h
index d070286383..4584396efe 100644
--- a/src/network/kernel/qdnslookup_p.h
+++ b/src/network/kernel/qdnslookup_p.h
@@ -60,6 +60,8 @@
#include "QtNetwork/qhostaddress.h"
#include "private/qobject_p.h"
+QT_REQUIRE_CONFIG(dnslookup);
+
QT_BEGIN_NAMESPACE
//#define QDNSLOOKUP_DEBUG
@@ -118,7 +120,7 @@ public:
, requestName(name)
, nameserver(nameserver)
{ }
- void run() Q_DECL_OVERRIDE;
+ void run() override;
signals:
void finished(const QDnsLookupReply &reply);
diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp
index a1adc61c4c..63056a525b 100644
--- a/src/network/kernel/qhostaddress.cpp
+++ b/src/network/kernel/qhostaddress.cpp
@@ -64,32 +64,6 @@
QT_BEGIN_NAMESPACE
-
-class QHostAddressPrivate : public QSharedData
-{
-public:
- QHostAddressPrivate();
-
- void setAddress(quint32 a_ = 0);
- void setAddress(const quint8 *a_);
- void setAddress(const Q_IPV6ADDR &a_);
-
- bool parse(const QString &ipString);
- void clear();
-
- QString scopeId;
-
- union {
- Q_IPV6ADDR a6; // IPv6 address
- struct { quint64 c[2]; } a6_64;
- struct { quint32 c[4]; } a6_32;
- };
- quint32 a; // IPv4 address
- qint8 protocol;
-
- friend class QHostAddress;
-};
-
QHostAddressPrivate::QHostAddressPrivate()
: a(0), protocol(QAbstractSocket::UnknownNetworkLayerProtocol)
{
@@ -205,6 +179,75 @@ void QHostAddressPrivate::clear()
memset(&a6, 0, sizeof(a6));
}
+AddressClassification QHostAddressPrivate::classify() const
+{
+ if (a) {
+ // This is an IPv4 address or an IPv6 v4-mapped address includes all
+ // IPv6 v4-compat addresses, except for ::ffff:0.0.0.0 (because `a' is
+ // zero). See setAddress(quint8*) below, which calls convertToIpv4(),
+ // for details.
+ // Source: RFC 5735
+ if ((a & 0xff000000U) == 0x7f000000U) // 127.0.0.0/8
+ return LoopbackAddress;
+ if ((a & 0xf0000000U) == 0xe0000000U) // 224.0.0.0/4
+ return MulticastAddress;
+ if ((a & 0xffff0000U) == 0xa9fe0000U) // 169.254.0.0/16
+ return LinkLocalAddress;
+ if ((a & 0xff000000U) == 0) // 0.0.0.0/8 except 0.0.0.0 (handled below)
+ return LocalNetAddress;
+ if ((a & 0xf0000000U) == 0xf0000000U) { // 240.0.0.0/4
+ if (a == 0xffffffffU) // 255.255.255.255
+ return BroadcastAddress;
+ return UnknownAddress;
+ }
+
+ // Not testing for PrivateNetworkAddress and TestNetworkAddress
+ // since we don't need them yet.
+ return GlobalAddress;
+ }
+
+ // As `a' is zero, this address is either ::ffff:0.0.0.0 or a non-v4-mapped IPv6 address.
+ // Source: https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml
+ if (a6_64.c[0]) {
+ quint32 high16 = qFromBigEndian(a6_32.c[0]) >> 16;
+ switch (high16 >> 8) {
+ case 0xff: // ff00::/8
+ return MulticastAddress;
+ case 0xfe:
+ switch (high16 & 0xffc0) {
+ case 0xfec0: // fec0::/10
+ return SiteLocalAddress;
+
+ case 0xfe80: // fe80::/10
+ return LinkLocalAddress;
+
+ default: // fe00::/9
+ return UnknownAddress;
+ }
+ case 0xfd: // fc00::/7
+ case 0xfc:
+ return UniqueLocalAddress;
+ default:
+ return GlobalAddress;
+ }
+ }
+
+ quint64 low64 = qFromBigEndian(a6_64.c[1]);
+ if (low64 == 1) // ::1
+ return LoopbackAddress;
+ if (low64 >> 32 == 0xffff) { // ::ffff:0.0.0.0/96
+ Q_ASSERT(quint32(low64) == 0);
+ return LocalNetAddress;
+ }
+ if (low64) // not ::
+ return GlobalAddress;
+
+ if (protocol == QAbstractSocket::UnknownNetworkLayerProtocol)
+ return UnknownAddress;
+
+ // only :: and 0.0.0.0 remain now
+ return LocalNetAddress;
+}
bool QNetmask::setAddress(const QHostAddress &address)
{
@@ -685,7 +728,7 @@ void QHostAddress::setAddress(SpecialAddress address)
*/
quint32 QHostAddress::toIPv4Address() const
{
- return toIPv4Address(Q_NULLPTR);
+ return toIPv4Address(nullptr);
}
/*!
@@ -1154,21 +1197,91 @@ QPair<QHostAddress, int> QHostAddress::parseSubnet(const QString &subnet)
*/
bool QHostAddress::isLoopback() const
{
- if ((d->a & 0xFF000000) == 0x7F000000)
- return true; // v4 range (including IPv6 wrapped IPv4 addresses)
- if (d->protocol == QAbstractSocket::IPv6Protocol) {
-#ifdef __SSE2__
- const __m128i loopback = _mm_setr_epi8(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
- __m128i ipv6 = _mm_loadu_si128((const __m128i *)d->a6.c);
- __m128i cmp = _mm_cmpeq_epi8(ipv6, loopback);
- return _mm_movemask_epi8(cmp) == 0xffff;
-#else
- if (d->a6_64.c[0] != 0 || qFromBigEndian(d->a6_64.c[1]) != 1)
- return false;
-#endif
- return true;
- }
- return false;
+ return d->classify() == LoopbackAddress;
+}
+
+/*!
+ \since 5.11
+
+ Returns \c true if the address is an IPv4 or IPv6 global address, \c false
+ otherwise. A global address is an address that is not reserved for
+ special purposes (like loopback or multicast) or future purposes.
+
+ Note that IPv6 unique local unicast addresses are considered global
+ addresses (see isUniqueLocalUnicast()), as are IPv4 addresses reserved for
+ local networks by \l {https://tools.ietf.org/html/rfc1918}{RFC 1918}.
+
+ Also note that IPv6 site-local addresses are deprecated and should be
+ considered as global in new applications. This function returns true for
+ site-local addresses too.
+
+ \sa isLoopback(), isSiteLocal(), isUniqueLocalUnicast()
+*/
+bool QHostAddress::isGlobal() const
+{
+ return d->classify() & GlobalAddress; // GlobalAddress is a bit
+}
+
+/*!
+ \since 5.11
+
+ Returns \c true if the address is an IPv4 or IPv6 link-local address, \c
+ false otherwise.
+
+ An IPv4 link-local address is an address in the network 169.254.0.0/16. An
+ IPv6 link-local address is one in the network fe80::/10. See the
+ \l{https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml}{IANA
+ IPv6 Address Space} registry for more information.
+
+ \sa isLoopback(), isGlobal(), isMulticast(), isSiteLocal(), isUniqueLocalUnicast()
+*/
+bool QHostAddress::isLinkLocal() const
+{
+ return d->classify() == LinkLocalAddress;
+}
+
+/*!
+ \since 5.11
+
+ Returns \c true if the address is an IPv6 site-local address, \c
+ false otherwise.
+
+ An IPv6 site-local address is one in the network fec0::/10. See the
+ \l{https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml}{IANA
+ IPv6 Address Space} registry for more information.
+
+ IPv6 site-local addresses are deprecated and should not be depended upon in
+ new applications. New applications should not depend on this function and
+ should consider site-local addresses the same as global (which is why
+ isGlobal() also returns true). Site-local addresses were replaced by Unique
+ Local Addresses (ULA).
+
+ \sa isLoopback(), isGlobal(), isMulticast(), isLinkLocal(), isUniqueLocalUnicast()
+*/
+bool QHostAddress::isSiteLocal() const
+{
+ return d->classify() == SiteLocalAddress;
+}
+
+/*!
+ \since 5.11
+
+ Returns \c true if the address is an IPv6 unique local unicast address, \c
+ false otherwise.
+
+ An IPv6 unique local unicast address is one in the network fc00::/7. See the
+ \l{https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml}
+ {IANA IPv6 Address Space} registry for more information.
+
+ Note that Unique local unicast addresses count as global addresses too. RFC
+ 4193 says that, in practice, "applications may treat these addresses like
+ global scoped addresses." Only routers need care about the distinction.
+
+ \sa isLoopback(), isGlobal(), isMulticast(), isLinkLocal(), isUniqueLocalUnicast()
+*/
+bool QHostAddress::isUniqueLocalUnicast() const
+{
+ return d->classify() == UniqueLocalAddress;
}
/*!
@@ -1176,14 +1289,29 @@ bool QHostAddress::isLoopback() const
Returns \c true if the address is an IPv4 or IPv6 multicast address, \c
false otherwise.
+
+ \sa isLoopback(), isGlobal(), isLinkLocal(), isSiteLocal(), isUniqueLocalUnicast()
*/
bool QHostAddress::isMulticast() const
{
- if ((d->a & 0xF0000000) == 0xE0000000)
- return true; // 224.0.0.0-239.255.255.255 (including v4-mapped IPv6 addresses)
- if (d->protocol == QAbstractSocket::IPv6Protocol)
- return d->a6.c[0] == 0xff;
- return false;
+ return d->classify() == MulticastAddress;
+}
+
+/*!
+ \since 5.11
+
+ Returns \c true if the address is the IPv4 broadcast address, \c false
+ otherwise. The IPv4 broadcast address is 255.255.255.255.
+
+ Note that this function does not return true for an IPv4 network's local
+ broadcast address. For that, please use \l QNetworkInterface to obtain the
+ broadcast addresses of the local machine.
+
+ \sa isLoopback(), isGlobal(), isMulticast(), isLinkLocal(), isUniqueLocalUnicast()
+*/
+bool QHostAddress::isBroadcast() const
+{
+ return d->classify() == BroadcastAddress;
}
#ifndef QT_NO_DEBUG_STREAM
@@ -1210,8 +1338,8 @@ uint qHash(const QHostAddress &key, uint seed) Q_DECL_NOTHROW
}
/*!
+ \fn bool operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
\relates QHostAddress
- \fn operator==(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
Returns \c true if special address \a lhs is the same as host address \a rhs;
otherwise returns \c false.
@@ -1220,9 +1348,9 @@ uint qHash(const QHostAddress &key, uint seed) Q_DECL_NOTHROW
*/
/*!
+ \fn bool operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
\relates QHostAddress
\since 5.9
- \fn operator!=(QHostAddress::SpecialAddress lhs, const QHostAddress &rhs)
Returns \c false if special address \a lhs is the same as host address \a rhs;
otherwise returns \c true.
diff --git a/src/network/kernel/qhostaddress.h b/src/network/kernel/qhostaddress.h
index fdbdbfc72c..00555f3d8e 100644
--- a/src/network/kernel/qhostaddress.h
+++ b/src/network/kernel/qhostaddress.h
@@ -148,12 +148,18 @@ public:
bool isInSubnet(const QPair<QHostAddress, int> &subnet) const;
bool isLoopback() const;
+ bool isGlobal() const;
+ bool isLinkLocal() const;
+ bool isSiteLocal() const;
+ bool isUniqueLocalUnicast() const;
bool isMulticast() const;
+ bool isBroadcast() const;
static QPair<QHostAddress, int> parseSubnet(const QString &subnet);
friend Q_NETWORK_EXPORT uint qHash(const QHostAddress &key, uint seed) Q_DECL_NOTHROW;
protected:
+ friend class QHostAddressPrivate;
QExplicitlySharedDataPointer<QHostAddressPrivate> d;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QHostAddress::ConversionMode)
diff --git a/src/network/kernel/qhostaddress_p.h b/src/network/kernel/qhostaddress_p.h
index 5106760ed9..4dc2989011 100644
--- a/src/network/kernel/qhostaddress_p.h
+++ b/src/network/kernel/qhostaddress_p.h
@@ -57,6 +57,22 @@
QT_BEGIN_NAMESPACE
+enum AddressClassification {
+ LoopbackAddress = 1,
+ LocalNetAddress, // RFC 1122
+ LinkLocalAddress, // RFC 4291 (v6), RFC 3927 (v4)
+ MulticastAddress, // RFC 4291 (v6), RFC 3171 (v4)
+ BroadcastAddress, // RFC 919, 922
+
+ GlobalAddress = 16,
+ TestNetworkAddress, // RFC 3849 (v6), RFC 5737 (v4),
+ PrivateNetworkAddress, // RFC 1918
+ UniqueLocalAddress, // RFC 4193
+ SiteLocalAddress, // RFC 4291 (deprecated by RFC 3879, should be treated as global)
+
+ UnknownAddress = 0 // unclassified or reserved
+};
+
class QNetmask
{
// stores 0-32 for IPv4, 0-128 for IPv6, or 255 for invalid
@@ -85,6 +101,35 @@ public:
{ return n1.length == n2.length; }
};
+class QHostAddressPrivate : public QSharedData
+{
+public:
+ QHostAddressPrivate();
+
+ void setAddress(quint32 a_ = 0);
+ void setAddress(const quint8 *a_);
+ void setAddress(const Q_IPV6ADDR &a_);
+
+ bool parse(const QString &ipString);
+ void clear();
+
+ QString scopeId;
+
+ union {
+ Q_IPV6ADDR a6; // IPv6 address
+ struct { quint64 c[2]; } a6_64;
+ struct { quint32 c[4]; } a6_32;
+ };
+ quint32 a; // IPv4 address
+ qint8 protocol;
+
+ AddressClassification classify() const;
+ static AddressClassification classify(const QHostAddress &address)
+ { return address.d->classify(); }
+
+ friend class QHostAddress;
+};
+
QT_END_NAMESPACE
#endif
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index 0156e22d41..4682070712 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -300,7 +300,7 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver,
*/
/*!
- \fn int QHostInfo::lookupHost(const QString &name, const QObject *receiver, PointerToMemberFunction function)
+ \fn template<typename PointerToMemberFunction> int QHostInfo::lookupHost(const QString &name, const QObject *receiver, PointerToMemberFunction function)
\since 5.9
@@ -319,7 +319,7 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver,
*/
/*!
- \fn int QHostInfo::lookupHost(const QString &name, Functor functor)
+ \fn template<typename Functor> int QHostInfo::lookupHost(const QString &name, Functor functor)
\since 5.9
@@ -337,7 +337,7 @@ int QHostInfo::lookupHost(const QString &name, QObject *receiver,
*/
/*!
- \fn int QHostInfo::lookupHost(const QString &name, const QObject *context, Functor functor)
+ \fn template<typename Functor> int QHostInfo::lookupHost(const QString &name, const QObject *context, Functor functor)
\since 5.9
diff --git a/src/network/kernel/qhostinfo.h b/src/network/kernel/qhostinfo.h
index c5727bb6eb..75917a02a3 100644
--- a/src/network/kernel/qhostinfo.h
+++ b/src/network/kernel/qhostinfo.h
@@ -90,7 +90,7 @@ public:
static QString localHostName();
static QString localDomainName();
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
template<typename PointerToMemberFunction>
static int QHostInfo::lookupHost(const QString &name, const QObject *receiver,
PointerToMemberFunction function);
diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h
index b4af938353..82cf34719f 100644
--- a/src/network/kernel/qhostinfo_p.h
+++ b/src/network/kernel/qhostinfo_p.h
@@ -194,7 +194,7 @@ public:
QHostInfoRunnable(const QString &hn, int i);
QHostInfoRunnable(const QString &hn, int i, const QObject *receiver,
QtPrivate::QSlotObjectBase *slotObj);
- void run() Q_DECL_OVERRIDE;
+ void run() override;
QString toBeLookedUp;
int id;
@@ -225,7 +225,7 @@ public:
QHostInfoLookupManager();
~QHostInfoLookupManager();
- void clear() Q_DECL_OVERRIDE;
+ void clear() override;
void work();
// called from QHostInfo
diff --git a/src/network/kernel/qhostinfo_unix.cpp b/src/network/kernel/qhostinfo_unix.cpp
index 8d2cffc304..d22608e22f 100644
--- a/src/network/kernel/qhostinfo_unix.cpp
+++ b/src/network/kernel/qhostinfo_unix.cpp
@@ -79,6 +79,11 @@ QT_BEGIN_NAMESPACE
# define Q_ADDRCONFIG AI_ADDRCONFIG
#endif
+enum LibResolvFeature {
+ NeedResInit,
+ NeedResNInit
+};
+
typedef struct __res_state *res_state_ptr;
typedef int (*res_init_proto)(void);
@@ -89,9 +94,29 @@ typedef void (*res_nclose_proto)(res_state_ptr);
static res_nclose_proto local_res_nclose = 0;
static res_state_ptr local_res = 0;
-static bool resolveLibraryInternal()
-{
#if QT_CONFIG(library) && !defined(Q_OS_QNX)
+namespace {
+struct LibResolv
+{
+ enum {
+#ifdef RES_NORELOAD
+ // If RES_NORELOAD is defined, then the libc is capable of watching
+ // /etc/resolv.conf for changes and reloading as necessary. So accept
+ // whatever is configured.
+ ReinitNecessary = false
+#else
+ ReinitNecessary = true
+#endif
+ };
+
+ QLibrary lib;
+ LibResolv();
+ ~LibResolv() { lib.unload(); }
+};
+}
+
+LibResolv::LibResolv()
+{
QLibrary lib;
#ifdef LIBRESOLV_SO
lib.setFileName(QStringLiteral(LIBRESOLV_SO));
@@ -100,32 +125,45 @@ static bool resolveLibraryInternal()
{
lib.setFileName(QLatin1String("resolv"));
if (!lib.load())
- return false;
+ return;
}
- local_res_init = res_init_proto(lib.resolve("__res_init"));
- if (!local_res_init)
- local_res_init = res_init_proto(lib.resolve("res_init"));
-
+ // res_ninit is required for localDomainName()
local_res_ninit = res_ninit_proto(lib.resolve("__res_ninit"));
if (!local_res_ninit)
local_res_ninit = res_ninit_proto(lib.resolve("res_ninit"));
-
- if (!local_res_ninit) {
- // if we can't get a thread-safe context, we have to use the global _res state
- local_res = res_state_ptr(lib.resolve("_res"));
- } else {
+ if (local_res_ninit) {
+ // we must now find res_nclose
local_res_nclose = res_nclose_proto(lib.resolve("res_nclose"));
if (!local_res_nclose)
local_res_nclose = res_nclose_proto(lib.resolve("__res_nclose"));
if (!local_res_nclose)
- local_res_ninit = 0;
+ local_res_ninit = nullptr;
}
-#endif
- return true;
+ if (ReinitNecessary || !local_res_ninit) {
+ local_res_init = res_init_proto(lib.resolve("__res_init"));
+ if (!local_res_init)
+ local_res_init = res_init_proto(lib.resolve("res_init"));
+
+ if (local_res_init && !local_res_ninit) {
+ // if we can't get a thread-safe context, we have to use the global _res state
+ local_res = res_state_ptr(lib.resolve("_res"));
+ }
+ }
+}
+Q_GLOBAL_STATIC(LibResolv, libResolv)
+
+static void resolveLibrary(LibResolvFeature f)
+{
+ if (LibResolv::ReinitNecessary || f == NeedResNInit)
+ libResolv();
+}
+#else // QT_CONFIG(library) || Q_OS_QNX
+static void resolveLibrary(LibResolvFeature)
+{
}
-Q_GLOBAL_STATIC_WITH_ARGS(bool, resolveLibrary, (resolveLibraryInternal()))
+#endif // QT_CONFIG(library) || Q_OS_QNX
QHostInfo QHostInfoAgent::fromName(const QString &hostName)
{
@@ -137,7 +175,7 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName)
#endif
// Load res_init on demand.
- resolveLibrary();
+ resolveLibrary(NeedResInit);
// If res_init is available, poll it.
if (local_res_init)
@@ -275,7 +313,7 @@ QHostInfo QHostInfoAgent::fromName(const QString &hostName)
QString QHostInfo::localDomainName()
{
#if !defined(Q_OS_VXWORKS) && !defined(Q_OS_ANDROID)
- resolveLibrary();
+ resolveLibrary(NeedResNInit);
if (local_res_ninit) {
// using thread-safe version
res_state_ptr state = res_state_ptr(malloc(sizeof(*state)));
diff --git a/src/network/kernel/qnetworkdatagram.cpp b/src/network/kernel/qnetworkdatagram.cpp
index d167190684..50421fa7f5 100644
--- a/src/network/kernel/qnetworkdatagram.cpp
+++ b/src/network/kernel/qnetworkdatagram.cpp
@@ -442,10 +442,11 @@ void QNetworkDatagram::setData(const QByteArray &data)
}
/*!
- \fn QNetworkDatagram QNetworkDatagram::makeReply(const QByteArray &data) const
+ \fn QNetworkDatagram QNetworkDatagram::makeReply(const QByteArray &payload) const &
+ \fn QNetworkDatagram QNetworkDatagram::makeReply(const QByteArray &payload) &&
Creates a new QNetworkDatagram representing a reply to this incoming datagram
- and sets the payload data to \a data. This function is a very convenient
+ and sets the payload data to \a payload. This function is a very convenient
way of responding to a datagram back to the original sender.
Example:
@@ -495,6 +496,7 @@ void QNetworkDatagram::setData(const QByteArray &data)
\endcode
*/
+
static bool isNonMulticast(const QHostAddress &addr)
{
// is it a multicast address?
@@ -528,6 +530,11 @@ void QNetworkDatagram::destroy(QNetworkDatagramPrivate *d)
delete d;
}
+/*! \fn void QNetworkDatagram::swap(QNetworkDatagram &other)
+ Swaps this instance with \a other.
+*/
+
+
QT_END_NAMESPACE
#endif // QT_NO_UDPSOCKET
diff --git a/src/network/kernel/qnetworkdatagram.h b/src/network/kernel/qnetworkdatagram.h
index fa994d6170..1acb44a1e0 100644
--- a/src/network/kernel/qnetworkdatagram.h
+++ b/src/network/kernel/qnetworkdatagram.h
@@ -63,7 +63,7 @@ public:
QNetworkDatagram(QNetworkDatagram &&other) Q_DECL_NOTHROW
: d(other.d)
- { other.d = Q_NULLPTR; }
+ { other.d = nullptr; }
QNetworkDatagram &operator=(QNetworkDatagram &&other) Q_DECL_NOTHROW
{ swap(other); return *this; }
@@ -91,7 +91,7 @@ public:
QByteArray data() const;
void setData(const QByteArray &data);
-#ifdef Q_COMPILER_REF_QUALIFIERS
+#if defined(Q_COMPILER_REF_QUALIFIERS) || defined(Q_CLANG_QDOC)
QNetworkDatagram makeReply(const QByteArray &payload) const &
{ return makeReply_helper(payload); }
QNetworkDatagram makeReply(const QByteArray &payload) &&
diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp
index 3857ff87b9..70674e9adf 100644
--- a/src/network/kernel/qnetworkinterface.cpp
+++ b/src/network/kernel/qnetworkinterface.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2017 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtNetwork module of the Qt Toolkit.
@@ -59,19 +59,15 @@ static QList<QNetworkInterfacePrivate *> postProcess(QList<QNetworkInterfacePriv
// The math is:
// broadcast = IP | ~netmask
- QList<QNetworkInterfacePrivate *>::Iterator it = list.begin();
- const QList<QNetworkInterfacePrivate *>::Iterator end = list.end();
- for ( ; it != end; ++it) {
- QList<QNetworkAddressEntry>::Iterator addr_it = (*it)->addressEntries.begin();
- const QList<QNetworkAddressEntry>::Iterator addr_end = (*it)->addressEntries.end();
- for ( ; addr_it != addr_end; ++addr_it) {
- if (addr_it->ip().protocol() != QAbstractSocket::IPv4Protocol)
+ for (QNetworkInterfacePrivate *interface : list) {
+ for (QNetworkAddressEntry &address : interface->addressEntries) {
+ if (address.ip().protocol() != QAbstractSocket::IPv4Protocol)
continue;
- if (!addr_it->netmask().isNull() && addr_it->broadcast().isNull()) {
- QHostAddress bcast = addr_it->ip();
- bcast = QHostAddress(bcast.toIPv4Address() | ~addr_it->netmask().toIPv4Address());
- addr_it->setBroadcast(bcast);
+ if (!address.netmask().isNull() && address.broadcast().isNull()) {
+ QHostAddress bcast = address.ip();
+ bcast = QHostAddress(bcast.toIPv4Address() | ~address.netmask().toIPv4Address());
+ address.setBroadcast(bcast);
}
}
}
@@ -91,17 +87,16 @@ QNetworkInterfaceManager::~QNetworkInterfaceManager()
QSharedDataPointer<QNetworkInterfacePrivate> QNetworkInterfaceManager::interfaceFromName(const QString &name)
{
- QList<QSharedDataPointer<QNetworkInterfacePrivate> > interfaceList = allInterfaces();
- QList<QSharedDataPointer<QNetworkInterfacePrivate> >::ConstIterator it = interfaceList.constBegin();
+ const auto interfaceList = allInterfaces();
bool ok;
uint index = name.toUInt(&ok);
- for ( ; it != interfaceList.constEnd(); ++it) {
- if (ok && (*it)->index == int(index))
- return *it;
- else if ((*it)->name == name)
- return *it;
+ for (const auto &interface : interfaceList) {
+ if (ok && interface->index == int(index))
+ return interface;
+ else if (interface->name == name)
+ return interface;
}
return empty;
@@ -109,11 +104,11 @@ QSharedDataPointer<QNetworkInterfacePrivate> QNetworkInterfaceManager::interface
QSharedDataPointer<QNetworkInterfacePrivate> QNetworkInterfaceManager::interfaceFromIndex(int index)
{
- QList<QSharedDataPointer<QNetworkInterfacePrivate> > interfaceList = allInterfaces();
- QList<QSharedDataPointer<QNetworkInterfacePrivate> >::ConstIterator it = interfaceList.constBegin();
- for ( ; it != interfaceList.constEnd(); ++it)
- if ((*it)->index == index)
- return *it;
+ const auto interfaceList = allInterfaces();
+ for (const auto &interface : interfaceList) {
+ if (interface->index == index)
+ return interface;
+ }
return empty;
}
@@ -124,8 +119,15 @@ QList<QSharedDataPointer<QNetworkInterfacePrivate> > QNetworkInterfaceManager::a
QList<QSharedDataPointer<QNetworkInterfacePrivate> > result;
result.reserve(list.size());
- for (QNetworkInterfacePrivate *ptr : list)
+ for (QNetworkInterfacePrivate *ptr : list) {
+ if ((ptr->flags & QNetworkInterface::IsUp) == 0) {
+ // if the network interface isn't UP, the addresses are ineligible for DNS
+ for (auto &addr : ptr->addressEntries)
+ addr.setDnsEligibility(QNetworkAddressEntry::DnsIneligible);
+ }
+
result << QSharedDataPointer<QNetworkInterfacePrivate>(ptr);
+ }
return result;
}
@@ -164,6 +166,32 @@ QString QNetworkInterfacePrivate::makeHwAddress(int len, uchar *data)
*/
/*!
+ \enum QNetworkAddressEntry::DnsEligibilityStatus
+ \since 5.11
+
+ This enum indicates whether a given host address is eligible to be
+ published in the Domain Name System (DNS) or other similar name resolution
+ mechanisms. In general, an address is suitable for publication if it is an
+ address this machine will be reached at for an indeterminate amount of
+ time, though it need not be permanent. For example, addresses obtained via
+ DHCP are often eligible, but cryptographically-generated temporary IPv6
+ addresses are not.
+
+ \value DnsEligibilityUnknown Qt and the operating system could not determine
+ whether this address should be published or not.
+ The application may need to apply further
+ heuristics if it cannot find any eligible
+ addresses.
+ \value DnsEligible This address is eligible for publication in DNS.
+ \value DnsIneligible This address should not be published in DNS and
+ should not be transmitted to other parties,
+ except maybe as the source address of an outgoing
+ packet.
+
+ \sa dnsEligibility(), setDnsEligibility()
+*/
+
+/*!
Constructs an empty QNetworkAddressEntry object.
*/
QNetworkAddressEntry::QNetworkAddressEntry()
@@ -218,6 +246,39 @@ bool QNetworkAddressEntry::operator==(const QNetworkAddressEntry &other) const
}
/*!
+ \since 5.11
+
+ Returns whether this address is eligible for publication in the Domain Name
+ System (DNS) or similar name resolution mechanisms.
+
+ In general, an address is suitable for publication if it is an address this
+ machine will be reached at for an indeterminate amount of time, though it
+ need not be permanent. For example, addresses obtained via DHCP are often
+ eligible, but cryptographically-generated temporary IPv6 addresses are not.
+
+ On some systems, QNetworkInterface will need to heuristically determine
+ which addresses are eligible.
+
+ \sa isLifetimeKnown(), isPermanent(), setDnsEligibility()
+*/
+QNetworkAddressEntry::DnsEligibilityStatus QNetworkAddressEntry::dnsEligibility() const
+{
+ return d->dnsEligibility;
+}
+
+/*!
+ \since 5.11
+
+ Sets the DNS eligibility flag for this address to \a status.
+
+ \sa dnsEligibility()
+*/
+void QNetworkAddressEntry::setDnsEligibility(DnsEligibilityStatus status)
+{
+ d->dnsEligibility = status;
+}
+
+/*!
\fn bool QNetworkAddressEntry::operator!=(const QNetworkAddressEntry &other) const
Returns \c true if this network address entry is different from \a
@@ -340,6 +401,122 @@ void QNetworkAddressEntry::setBroadcast(const QHostAddress &newBroadcast)
}
/*!
+ \since 5.11
+
+ Returns \c true if the address lifetime is known, \c false if not. If the
+ lifetime is not known, both preferredLifetime() and validityLifetime() will
+ return QDeadlineTimer::Forever.
+
+ \sa preferredLifetime(), validityLifetime(), setAddressLifetime(), clearAddressLifetime()
+*/
+bool QNetworkAddressEntry::isLifetimeKnown() const
+{
+ return d->lifetimeKnown;
+}
+
+/*!
+ \since 5.11
+
+ Returns the deadline when this address becomes deprecated (no longer
+ preferred), if known. If the address lifetime is not known (see
+ isLifetimeKnown()), this function always returns QDeadlineTimer::Forever.
+
+ While an address is preferred, it may be used by the operating system as
+ the source address for new, outgoing packets. After it becomes deprecated,
+ it will remain valid for incoming packets for a while longer until finally
+ removed (see validityLifetime()).
+
+ \sa validityLifetime(), isLifetimeKnown(), setAddressLifetime(), clearAddressLifetime()
+*/
+QDeadlineTimer QNetworkAddressEntry::preferredLifetime() const
+{
+ return d->preferredLifetime;
+}
+
+/*!
+ \since 5.11
+
+ Returns the deadline when this address becomes invalid and will be removed
+ from the networking stack, if known. If the address lifetime is not known
+ (see isLifetimeKnown()), this function always returns
+ QDeadlineTimer::Forever.
+
+ While an address is valid, it will be accepted by the operating system as a
+ valid destination address for this machine. Whether it is used as a source
+ address for new, outgoing packets is controlled by, among other rules, the
+ preferred lifetime (see preferredLifetime()).
+
+ \sa preferredLifetime(), isLifetimeKnown(), setAddressLifetime(), clearAddressLifetime()
+*/
+QDeadlineTimer QNetworkAddressEntry::validityLifetime() const
+{
+ return d->validityLifetime;
+}
+
+/*!
+ \since 5.11
+
+ Sets both the preferred and valid lifetimes for this address to the \a
+ preferred and \a validity deadlines, respectively. After this call,
+ isLifetimeKnown() will return \c true, even if both parameters are
+ QDeadlineTimer::Forever.
+
+ \sa preferredLifetime(), validityLifetime(), isLifetimeKnown(), clearAddressLifetime()
+*/
+void QNetworkAddressEntry::setAddressLifetime(QDeadlineTimer preferred, QDeadlineTimer validity)
+{
+ d->preferredLifetime = preferred;
+ d->validityLifetime = validity;
+ d->lifetimeKnown = true;
+}
+
+/*!
+ \since 5.11
+
+ Resets both the preferred and valid lifetimes for this address. After this
+ call, isLifetimeKnown() will return \c false.
+
+ \sa preferredLifetime(), validityLifetime(), isLifetimeKnown(), setAddressLifetime()
+*/
+void QNetworkAddressEntry::clearAddressLifetime()
+{
+ d->preferredLifetime = QDeadlineTimer::Forever;
+ d->validityLifetime = QDeadlineTimer::Forever;
+ d->lifetimeKnown = false;
+}
+
+/*!
+ \since 5.11
+
+ Returns \c true if this address is permanent on this interface, \c false if
+ it's temporary. A permenant address is one which has no expiration time and
+ is often static (manually configured).
+
+ If this information could not be determined, this function returns \c true.
+
+ \note Depending on the operating system and the networking configuration
+ tool, it is possible for a temporary address to be interpreted as
+ permanent, if the tool did not inform the details correctly to the
+ operating system.
+
+ \sa isLifetimeKnown(), validityLifetime(), isTemporary()
+*/
+bool QNetworkAddressEntry::isPermanent() const
+{
+ return d->validityLifetime.isForever();
+}
+
+/*!
+ \fn bool QNetworkAddressEntry::isTemporary() const
+ \since 5.11
+
+ Returns \c true if this address is temporary on this interface, \c false if
+ it's permanent.
+
+ \sa isLifetimeKnown(), validityLifetime(), isPermanent()
+*/
+
+/*!
\class QNetworkInterface
\brief The QNetworkInterface class provides a listing of the host's IP
addresses and network interfaces.
@@ -396,6 +573,57 @@ void QNetworkAddressEntry::setBroadcast(const QHostAddress &newBroadcast)
*/
/*!
+ \enum QNetworkInterface::InterfaceType
+
+ Specifies the type of hardware (PHY layer, OSI level 1) this interface is,
+ if it could be determined. Interface types that are not among those listed
+ below will generally be listed as Unknown, though future versions of Qt may
+ add new enumeration values.
+
+ The possible values are:
+
+ \value Unknown The interface type could not be determined or is not
+ one of the other listed types.
+ \value Loopback The virtual loopback interface, which is assigned
+ the loopback IP addresses (127.0.0.1, ::1).
+ \value Virtual A type of interface determined to be virtual, but
+ not any of the other possible types. For example,
+ tunnel interfaces are (currently) detected as
+ virtual ones.
+ \value Ethernet IEEE 802.3 Ethernet interfaces, though on many
+ systems other types of IEEE 802 interfaces may also
+ be detected as Ethernet (especially Wi-Fi).
+ \value Wifi IEEE 802.11 Wi-Fi interfaces. Note that on some
+ systems, QNetworkInterface may be unable to
+ distinguish regular Ethernet from Wi-Fi and will
+ not return this enum value.
+ \value Ieee80211 An alias for WiFi.
+ \value CanBus ISO 11898 Controller Area Network bus interfaces,
+ usually found on automotive systems.
+ \value Fddi ANSI X3T12 Fiber Distributed Data Interface, a local area
+ network over optical fibers.
+ \value Ppp Point-to-Point Protocol interfaces, establishing a
+ direct connection between two nodes over a lower
+ transport layer (often serial over radio or physical
+ line).
+ \value Slip Serial Line Internet Protocol interfaces.
+ \value Phonet Interfaces using the Linux Phonet socket family, for
+ communication with cellular modems. See the
+ \l {https://www.kernel.org/doc/Documentation/networking/phonet.txt}{Linux kernel documentation}
+ for more information.
+ \value Ieee802154 IEEE 802.15.4 Personal Area Network interfaces, other
+ than 6LoWPAN (see below).
+ \value SixLoWPAN 6LoWPAN (IPv6 over Low-power Wireless Personal Area
+ Networks) interfaces, which operate on IEEE 802.15.4
+ PHY, but have specific header compression schemes
+ for IPv6 and UDP. This type of interface is often
+ used for mesh networking.
+ \value Ieee80216 IEEE 802.16 Wireless Metropolitan Area Network, also
+ known under the commercial name "WiMAX".
+ \value Ieee1394 IEEE 1394 interfaces (a.k.a. "FireWire").
+*/
+
+/*!
Constructs an empty network interface object.
*/
QNetworkInterface::QNetworkInterface()
@@ -461,6 +689,29 @@ int QNetworkInterface::index() const
}
/*!
+ \since 5.11
+
+ Returns the maximum transmission unit on this interface, if known, or 0
+ otherwise.
+
+ The maximum transmission unit is the largest packet that may be sent on
+ this interface without incurring link-level fragmentation. Applications may
+ use this value to calculate the size of the payload that will fit an
+ unfragmented UDP datagram. Remember to subtract the sizes of headers used
+ in your communication over the interface, e.g. TCP (20 bytes) or UDP (12),
+ IPv4 (20) or IPv6 (40, absent some form of header compression), when
+ computing how big a payload you can transmit. Also note that the MTU along
+ the full path (the Path MTU) to the destination may be smaller than the
+ interface's MTU.
+
+ \sa QUdpSocket
+*/
+int QNetworkInterface::maxTransmissionUnit() const
+{
+ return d ? d->mtu : 0;
+}
+
+/*!
Returns the name of this network interface. On Unix systems, this
is a string containing the type of the interface and optionally a
sequence number, such as "eth0", "lo" or "pcn0". On Windows, it's
@@ -499,6 +750,19 @@ QNetworkInterface::InterfaceFlags QNetworkInterface::flags() const
}
/*!
+ \since 5.11
+
+ Returns the type of this interface, if it could be determined. If it could
+ not be determined, this function returns QNetworkInterface::Unknown.
+
+ \sa hardwareAddress()
+*/
+QNetworkInterface::InterfaceType QNetworkInterface::type() const
+{
+ return d ? d->type : Unknown;
+}
+
+/*!
Returns the low-level hardware address for this interface. On
Ethernet interfaces, this will be a MAC address in string
representation, separated by colons.
@@ -506,6 +770,8 @@ QNetworkInterface::InterfaceFlags QNetworkInterface::flags() const
Other interface types may have other types of hardware
addresses. Implementations should not depend on this function
returning a valid MAC address.
+
+ \sa type()
*/
QString QNetworkInterface::hardwareAddress() const
{
@@ -691,4 +957,6 @@ QDebug operator<<(QDebug debug, const QNetworkInterface &networkInterface)
QT_END_NAMESPACE
+#include "moc_qnetworkinterface.cpp"
+
#endif // QT_NO_NETWORKINTERFACE
diff --git a/src/network/kernel/qnetworkinterface.h b/src/network/kernel/qnetworkinterface.h
index c31621c3cb..f7ef192dc0 100644
--- a/src/network/kernel/qnetworkinterface.h
+++ b/src/network/kernel/qnetworkinterface.h
@@ -49,13 +49,19 @@
QT_BEGIN_NAMESPACE
-
+class QDeadlineTimer;
template<typename T> class QList;
class QNetworkAddressEntryPrivate;
class Q_NETWORK_EXPORT QNetworkAddressEntry
{
public:
+ enum DnsEligibilityStatus : qint8 {
+ DnsEligibilityUnknown = -1,
+ DnsIneligible = 0,
+ DnsEligible = 1
+ };
+
QNetworkAddressEntry();
QNetworkAddressEntry(const QNetworkAddressEntry &other);
#ifdef Q_COMPILER_RVALUE_REFS
@@ -70,6 +76,9 @@ public:
inline bool operator!=(const QNetworkAddressEntry &other) const
{ return !(*this == other); }
+ DnsEligibilityStatus dnsEligibility() const;
+ void setDnsEligibility(DnsEligibilityStatus status);
+
QHostAddress ip() const;
void setIp(const QHostAddress &newIp);
@@ -81,6 +90,14 @@ public:
QHostAddress broadcast() const;
void setBroadcast(const QHostAddress &newBroadcast);
+ bool isLifetimeKnown() const;
+ QDeadlineTimer preferredLifetime() const;
+ QDeadlineTimer validityLifetime() const;
+ void setAddressLifetime(QDeadlineTimer preferred, QDeadlineTimer validity);
+ void clearAddressLifetime();
+ bool isPermanent() const;
+ bool isTemporary() const { return !isPermanent(); }
+
private:
QScopedPointer<QNetworkAddressEntryPrivate> d;
};
@@ -90,6 +107,7 @@ Q_DECLARE_SHARED(QNetworkAddressEntry)
class QNetworkInterfacePrivate;
class Q_NETWORK_EXPORT QNetworkInterface
{
+ Q_GADGET
public:
enum InterfaceFlag {
IsUp = 0x1,
@@ -100,6 +118,27 @@ public:
CanMulticast = 0x20
};
Q_DECLARE_FLAGS(InterfaceFlags, InterfaceFlag)
+ Q_FLAG(InterfaceFlags)
+
+ enum InterfaceType {
+ Loopback = 1,
+ Virtual,
+ Ethernet,
+ Slip,
+ CanBus,
+ Ppp,
+ Fddi,
+ Wifi,
+ Ieee80211 = Wifi, // alias
+ Phonet,
+ Ieee802154,
+ SixLoWPAN, // 6LoWPAN, but we can't start with a digit
+ Ieee80216,
+ Ieee1394,
+
+ Unknown = 0
+ };
+ Q_ENUM(InterfaceType)
QNetworkInterface();
QNetworkInterface(const QNetworkInterface &other);
@@ -114,9 +153,11 @@ public:
bool isValid() const;
int index() const;
+ int maxTransmissionUnit() const;
QString name() const;
QString humanReadableName() const;
InterfaceFlags flags() const;
+ InterfaceType type() const;
QString hardwareAddress() const;
QList<QNetworkAddressEntry> addressEntries() const;
diff --git a/src/network/kernel/qnetworkinterface_linux.cpp b/src/network/kernel/qnetworkinterface_linux.cpp
new file mode 100644
index 0000000000..01b2811070
--- /dev/null
+++ b/src/network/kernel/qnetworkinterface_linux.cpp
@@ -0,0 +1,443 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Intel Corporation.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qnetworkinterface.h"
+#include "qnetworkinterface_p.h"
+#include "qnetworkinterface_unix_p.h"
+
+#include <qendian.h>
+#include <qobjectdefs.h>
+#include <qvarlengtharray.h>
+
+// accordding to rtnetlink(7)
+#include <asm/types.h>
+#include <linux/if.h>
+#include <linux/if_arp.h>
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+#include <linux/wireless.h>
+#include <sys/socket.h>
+
+/* in case these aren't defined in linux/if_arp.h (added since 2.6.28) */
+#define ARPHRD_PHONET 820 /* v2.6.29: PhoNet media type */
+#define ARPHRD_PHONET_PIPE 821 /* v2.6.29: PhoNet pipe header */
+#define ARPHRD_IEEE802154 804 /* v2.6.31 */
+#define ARPHRD_6LOWPAN 825 /* v3.14: IPv6 over LoWPAN */
+
+QT_BEGIN_NAMESPACE
+
+enum {
+ BufferSize = 8192
+};
+
+static QNetworkInterface::InterfaceType probeIfType(int socket, struct ifreq *req, short arptype)
+{
+ switch (ushort(arptype)) {
+ case ARPHRD_LOOPBACK:
+ return QNetworkInterface::Loopback;
+
+ case ARPHRD_ETHER:
+ // check if it's a WiFi interface
+ if (qt_safe_ioctl(socket, SIOCGIWMODE, req) >= 0)
+ return QNetworkInterface::Wifi;
+ return QNetworkInterface::Ethernet;
+
+ case ARPHRD_SLIP:
+ case ARPHRD_CSLIP:
+ case ARPHRD_SLIP6:
+ case ARPHRD_CSLIP6:
+ return QNetworkInterface::Slip;
+
+ case ARPHRD_CAN:
+ return QNetworkInterface::CanBus;
+
+ case ARPHRD_PPP:
+ return QNetworkInterface::Ppp;
+
+ case ARPHRD_FDDI:
+ return QNetworkInterface::Fddi;
+
+ case ARPHRD_IEEE80211:
+ case ARPHRD_IEEE80211_PRISM:
+ case ARPHRD_IEEE80211_RADIOTAP:
+ return QNetworkInterface::Ieee80211;
+
+ case ARPHRD_IEEE802154:
+ return QNetworkInterface::Ieee802154;
+
+ case ARPHRD_PHONET:
+ case ARPHRD_PHONET_PIPE:
+ return QNetworkInterface::Phonet;
+
+ case ARPHRD_6LOWPAN:
+ return QNetworkInterface::SixLoWPAN;
+
+ case ARPHRD_TUNNEL:
+ case ARPHRD_TUNNEL6:
+ case ARPHRD_NONE:
+ case ARPHRD_VOID:
+ return QNetworkInterface::Virtual;
+ }
+ return QNetworkInterface::Unknown;
+}
+
+
+namespace {
+struct NetlinkSocket
+{
+ int sock;
+ NetlinkSocket(int bufferSize)
+ {
+ sock = qt_safe_socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
+ if (Q_UNLIKELY(sock == -1))
+ qErrnoWarning("Could not create AF_NETLINK socket");
+
+ // set buffer length
+ socklen_t len = sizeof(bufferSize);
+ setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &bufferSize, len);
+ }
+
+ ~NetlinkSocket()
+ {
+ if (sock != -1)
+ qt_safe_close(sock);
+ }
+
+ operator int() const { return sock; }
+};
+
+template <typename Lambda> struct ProcessNetlinkRequest
+{
+ using FunctionTraits = QtPrivate::FunctionPointer<decltype(&Lambda::operator())>;
+ using FirstArgument = typename FunctionTraits::Arguments::Car;
+
+ static int expectedTypeForRequest(int rtype)
+ {
+ Q_STATIC_ASSERT(RTM_NEWADDR == RTM_GETADDR - 2);
+ Q_STATIC_ASSERT(RTM_NEWLINK == RTM_GETLINK - 2);
+ Q_ASSERT(rtype == RTM_GETADDR || rtype == RTM_GETLINK);
+ return rtype - 2;
+ }
+
+ void operator()(int sock, nlmsghdr *hdr, char *buf, size_t bufsize, Lambda &&func)
+ {
+ // send the request
+ if (send(sock, hdr, hdr->nlmsg_len, 0) != ssize_t(hdr->nlmsg_len))
+ return;
+
+ // receive and parse the request
+ int expectedType = expectedTypeForRequest(hdr->nlmsg_type);
+ const bool isDump = hdr->nlmsg_flags & NLM_F_DUMP;
+ forever {
+ qsizetype len = recv(sock, buf, bufsize, 0);
+ hdr = reinterpret_cast<struct nlmsghdr *>(buf);
+ if (!NLMSG_OK(hdr, len))
+ return;
+
+ auto arg = reinterpret_cast<FirstArgument>(NLMSG_DATA(hdr));
+ size_t payloadLen = NLMSG_PAYLOAD(hdr, 0);
+
+ // is this a multipart message?
+ Q_ASSERT(isDump == !!(hdr->nlmsg_flags & NLM_F_MULTI));
+ if (!isDump) {
+ // no, single message
+ if (hdr->nlmsg_type == expectedType && payloadLen >= sizeof(FirstArgument))
+ return void(func(arg, payloadLen));
+ } else {
+ // multipart, parse until done
+ do {
+ if (hdr->nlmsg_type == NLMSG_DONE)
+ return;
+ if (hdr->nlmsg_type != expectedType || payloadLen < sizeof(FirstArgument))
+ break;
+ func(arg, payloadLen);
+
+ // NLMSG_NEXT also updates the len variable
+ hdr = NLMSG_NEXT(hdr, len);
+ arg = reinterpret_cast<FirstArgument>(NLMSG_DATA(hdr));
+ payloadLen = NLMSG_PAYLOAD(hdr, 0);
+ } while (NLMSG_OK(hdr, len));
+
+ if (len == 0)
+ continue; // get new datagram
+ }
+
+#ifndef QT_NO_DEBUG
+ if (NLMSG_OK(hdr, len))
+ qWarning("QNetworkInterface/AF_NETLINK: received unknown packet type (%d) or too short (%u)",
+ hdr->nlmsg_type, hdr->nlmsg_len);
+ else
+ qWarning("QNetworkInterface/AF_NETLINK: received invalid packet with size %d", int(len));
+#endif
+ return;
+ }
+ }
+};
+
+template <typename Lambda>
+void processNetlinkRequest(int sock, struct nlmsghdr *hdr, char *buf, size_t bufsize, Lambda &&l)
+{
+ ProcessNetlinkRequest<Lambda>()(sock, hdr, buf, bufsize, std::forward<Lambda>(l));
+}
+}
+
+uint QNetworkInterfaceManager::interfaceIndexFromName(const QString &name)
+{
+ uint index = 0;
+ if (name.length() >= IFNAMSIZ)
+ return index;
+
+ int socket = qt_safe_socket(AF_INET, SOCK_DGRAM, 0);
+ if (socket >= 0) {
+ struct ifreq req;
+ req.ifr_ifindex = 0;
+ strcpy(req.ifr_name, name.toLatin1().constData());
+
+ if (qt_safe_ioctl(socket, SIOCGIFINDEX, &req) >= 0)
+ index = req.ifr_ifindex;
+ qt_safe_close(socket);
+ }
+ return index;
+}
+
+QString QNetworkInterfaceManager::interfaceNameFromIndex(uint index)
+{
+ int socket = qt_safe_socket(AF_INET, SOCK_DGRAM, 0);
+ if (socket >= 0) {
+ struct ifreq req;
+ req.ifr_ifindex = index;
+
+ if (qt_safe_ioctl(socket, SIOCGIFNAME, &req) >= 0) {
+ qt_safe_close(socket);
+ return QString::fromLatin1(req.ifr_name);
+ }
+ qt_safe_close(socket);
+ }
+ return QString();
+}
+
+static QList<QNetworkInterfacePrivate *> getInterfaces(int sock, char *buf)
+{
+ QList<QNetworkInterfacePrivate *> result;
+ struct ifreq req;
+
+ // request all links
+ struct {
+ struct nlmsghdr req;
+ struct ifinfomsg ifi;
+ } ifi_req;
+ memset(&ifi_req, 0, sizeof(ifi_req));
+
+ ifi_req.req.nlmsg_len = sizeof(ifi_req);
+ ifi_req.req.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+ ifi_req.req.nlmsg_type = RTM_GETLINK;
+
+ // parse the interfaces
+ processNetlinkRequest(sock, &ifi_req.req, buf, BufferSize, [&](ifinfomsg *ifi, size_t len) {
+ auto iface = new QNetworkInterfacePrivate;
+ iface->index = ifi->ifi_index;
+ iface->flags = convertFlags(ifi->ifi_flags);
+
+ // read attributes
+ auto rta = reinterpret_cast<struct rtattr *>(ifi + 1);
+ len -= sizeof(*ifi);
+ for ( ; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
+ int payloadLen = RTA_PAYLOAD(rta);
+ auto payloadPtr = reinterpret_cast<char *>(RTA_DATA(rta));
+
+ switch (rta->rta_type) {
+ case IFLA_ADDRESS: // link-level address
+ iface->hardwareAddress =
+ iface->makeHwAddress(payloadLen, reinterpret_cast<uchar *>(payloadPtr));
+ break;
+
+ case IFLA_IFNAME: // interface name
+ Q_ASSERT(payloadLen <= int(sizeof(req.ifr_name)));
+ memcpy(req.ifr_name, payloadPtr, payloadLen); // including terminating NUL
+ iface->name = QString::fromLatin1(payloadPtr, payloadLen - 1);
+ break;
+
+ case IFLA_MTU:
+ Q_ASSERT(payloadLen == sizeof(int));
+ iface->mtu = *reinterpret_cast<int *>(payloadPtr);
+ break;
+
+ case IFLA_OPERSTATE: // operational state
+ if (*payloadPtr != IF_OPER_UNKNOWN) {
+ // override the flag
+ iface->flags &= ~QNetworkInterface::IsUp;
+ if (*payloadPtr == IF_OPER_UP)
+ iface->flags |= QNetworkInterface::IsUp;
+ }
+ break;
+ }
+ }
+
+ if (Q_UNLIKELY(iface->name.isEmpty())) {
+ qWarning("QNetworkInterface: found interface %d with no name", iface->index);
+ delete iface;
+ } else {
+ iface->type = probeIfType(sock, &req, ifi->ifi_type);
+ result.append(iface);
+ }
+ });
+ return result;
+}
+
+static void getAddresses(int sock, char *buf, QList<QNetworkInterfacePrivate *> &result)
+{
+ // request all addresses
+ struct {
+ struct nlmsghdr req;
+ struct ifaddrmsg ifa;
+ } ifa_req;
+ memset(&ifa_req, 0, sizeof(ifa_req));
+
+ ifa_req.req.nlmsg_len = sizeof(ifa_req);
+ ifa_req.req.nlmsg_flags = NLM_F_REQUEST | NLM_F_DUMP;
+ ifa_req.req.nlmsg_type = RTM_GETADDR;
+ ifa_req.req.nlmsg_seq = 1;
+
+ // parse the addresses
+ processNetlinkRequest(sock, &ifa_req.req, buf, BufferSize, [&](ifaddrmsg *ifa, size_t len) {
+ if (Q_UNLIKELY(ifa->ifa_family != AF_INET && ifa->ifa_family != AF_INET6)) {
+ // unknown address types
+ return;
+ }
+
+ // find the interface this is relevant to
+ QNetworkInterfacePrivate *iface = nullptr;
+ for (auto candidate : qAsConst(result)) {
+ if (candidate->index != int(ifa->ifa_index))
+ continue;
+ iface = candidate;
+ break;
+ }
+
+ if (Q_UNLIKELY(!iface)) {
+ qWarning("QNetworkInterface/AF_NETLINK: found unknown interface with index %d", ifa->ifa_index);
+ return;
+ }
+
+ QNetworkAddressEntry entry;
+ quint32 flags = ifa->ifa_flags; // may be overwritten by IFA_FLAGS
+
+ auto makeAddress = [=](uchar *ptr, int len) {
+ QHostAddress addr;
+ if (ifa->ifa_family == AF_INET) {
+ Q_ASSERT(len == 4);
+ addr.setAddress(qFromBigEndian<quint32>(ptr));
+ } else {
+ Q_ASSERT(len == 16);
+ addr.setAddress(ptr);
+
+ // do we need a scope ID?
+ if (addr.isLinkLocal())
+ addr.setScopeId(iface->name);
+ }
+ return addr;
+ };
+
+ // read attributes
+ auto rta = reinterpret_cast<struct rtattr *>(ifa + 1);
+ len -= sizeof(*ifa);
+ for ( ; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
+ int payloadLen = RTA_PAYLOAD(rta);
+ auto payloadPtr = reinterpret_cast<uchar *>(RTA_DATA(rta));
+
+ switch (rta->rta_type) {
+ case IFA_ADDRESS: // address
+ entry.setIp(makeAddress(payloadPtr, payloadLen));
+ break;
+
+ case IFA_BROADCAST:
+ Q_ASSERT(ifa->ifa_family == AF_INET);
+ entry.setBroadcast(makeAddress(payloadPtr, payloadLen));
+ break;
+
+ case IFA_CACHEINFO:
+ if (size_t(payloadLen) >= sizeof(ifa_cacheinfo)) {
+ auto cacheinfo = reinterpret_cast<ifa_cacheinfo *>(payloadPtr);
+ auto toDeadline = [](quint32 lifetime) -> QDeadlineTimer {
+ if (lifetime == quint32(-1))
+ return QDeadlineTimer::Forever;
+ return QDeadlineTimer(lifetime * 1000);
+ };
+ entry.setAddressLifetime(toDeadline(cacheinfo->ifa_prefered), toDeadline(cacheinfo->ifa_valid));
+ }
+ break;
+
+ case IFA_FLAGS:
+ Q_ASSERT(payloadLen == 4);
+ flags = qFromUnaligned<quint32>(payloadPtr);
+ break;
+ }
+ }
+
+ // now handle flags
+ QNetworkInterfacePrivate::calculateDnsEligibility(&entry,
+ flags & IFA_F_TEMPORARY,
+ flags & IFA_F_DEPRECATED);
+
+
+ if (!entry.ip().isNull()) {
+ entry.setPrefixLength(ifa->ifa_prefixlen);
+ iface->addressEntries.append(entry);
+ }
+ });
+}
+
+QList<QNetworkInterfacePrivate *> QNetworkInterfaceManager::scan()
+{
+ // open netlink socket
+ QList<QNetworkInterfacePrivate *> result;
+ NetlinkSocket sock(BufferSize);
+ if (Q_UNLIKELY(sock == -1))
+ return result;
+
+ QByteArray buffer(BufferSize, Qt::Uninitialized);
+ char *buf = buffer.data();
+
+ result = getInterfaces(sock, buf);
+ getAddresses(sock, buf, result);
+
+ return result;
+}
+
+QT_END_NAMESPACE
diff --git a/src/network/kernel/qnetworkinterface_p.h b/src/network/kernel/qnetworkinterface_p.h
index 51901eeda8..87a46b75fa 100644
--- a/src/network/kernel/qnetworkinterface_p.h
+++ b/src/network/kernel/qnetworkinterface_p.h
@@ -52,7 +52,9 @@
//
#include <QtNetwork/private/qtnetworkglobal_p.h>
+#include <QtNetwork/qnetworkinterface.h>
#include <QtCore/qatomic.h>
+#include <QtCore/qdeadlinetimer.h>
#include <QtCore/qlist.h>
#include <QtCore/qreadwritelock.h>
#include <QtCore/qstring.h>
@@ -69,7 +71,12 @@ class QNetworkAddressEntryPrivate
public:
QHostAddress address;
QHostAddress broadcast;
+ QDeadlineTimer preferredLifetime = QDeadlineTimer::Forever;
+ QDeadlineTimer validityLifetime = QDeadlineTimer::Forever;
+
QNetmask netmask;
+ bool lifetimeKnown = false;
+ QNetworkAddressEntry::DnsEligibilityStatus dnsEligibility = QNetworkAddressEntry::DnsEligibilityUnknown;
};
class QNetworkInterfacePrivate: public QSharedData
@@ -81,7 +88,9 @@ public:
{ }
int index; // interface index, if know
+ int mtu = 0;
QNetworkInterface::InterfaceFlags flags;
+ QNetworkInterface::InterfaceType type = QNetworkInterface::Unknown;
QString name;
QString friendlyName;
@@ -90,6 +99,20 @@ public:
QList<QNetworkAddressEntry> addressEntries;
static QString makeHwAddress(int len, uchar *data);
+ static void calculateDnsEligibility(QNetworkAddressEntry *entry, bool isTemporary,
+ bool isDeprecated)
+ {
+ // this implements an algorithm that yields the same results as Windows
+ // produces, for the same input (as far as I can test)
+ if (isTemporary || isDeprecated)
+ entry->setDnsEligibility(QNetworkAddressEntry::DnsIneligible);
+
+ AddressClassification cl = QHostAddressPrivate::classify(entry->ip());
+ if (cl == LoopbackAddress || cl == LinkLocalAddress)
+ entry->setDnsEligibility(QNetworkAddressEntry::DnsIneligible);
+ else
+ entry->setDnsEligibility(QNetworkAddressEntry::DnsEligible);
+ }
private:
// disallow copying -- avoid detaching
diff --git a/src/network/kernel/qnetworkinterface_uikit_p.h b/src/network/kernel/qnetworkinterface_uikit_p.h
new file mode 100644
index 0000000000..ea40e74f5c
--- /dev/null
+++ b/src/network/kernel/qnetworkinterface_uikit_p.h
@@ -0,0 +1,262 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QNETWORKINTERFACE_UIKIT_P_H
+#define QNETWORKINTERFACE_UIKIT_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+// Platform SDK for iOS, tvOS and watchOS is missing those headers:
+// net/if_media.h, netinet/in_var.h, netinet6/in6_var.h This header is
+// a workaround, it provides missing macros and structs.
+
+// <net/if_media.h>:
+
+/*
+ * Ethernet
+ */
+#define IFM_ETHER 0x00000020
+/*
+ * FDDI
+ */
+#define IFM_FDDI 0x00000060
+/*
+ * IEEE 802.11 Wireless
+ */
+#define IFM_IEEE80211 0x00000080
+/*
+ * Masks
+ */
+#define IFM_NMASK 0x000000e0 /* Network type */
+/*
+ * Macros to extract various bits of information from the media word.
+ */
+#define IFM_TYPE(x) ((x) & IFM_NMASK)
+
+// <netinet6/in6_var.h>:
+
+struct in6_addrlifetime {
+ time_t ia6t_expire; /* valid lifetime expiration time */
+ time_t ia6t_preferred; /* preferred lifetime expiration time */
+ u_int32_t ia6t_vltime; /* valid lifetime */
+ u_int32_t ia6t_pltime; /* prefix lifetime */
+};
+
+/*
+ * IPv6 interface statistics, as defined in RFC2465 Ipv6IfStatsEntry (p12).
+ */
+struct in6_ifstat {
+ u_quad_t ifs6_in_receive; /* # of total input datagram */
+ u_quad_t ifs6_in_hdrerr; /* # of datagrams with invalid hdr */
+ u_quad_t ifs6_in_toobig; /* # of datagrams exceeded MTU */
+ u_quad_t ifs6_in_noroute; /* # of datagrams with no route */
+ u_quad_t ifs6_in_addrerr; /* # of datagrams with invalid dst */
+ u_quad_t ifs6_in_protounknown; /* # of datagrams with unknown proto */
+ /* NOTE: increment on final dst if */
+ u_quad_t ifs6_in_truncated; /* # of truncated datagrams */
+ u_quad_t ifs6_in_discard; /* # of discarded datagrams */
+ /* NOTE: fragment timeout is not here */
+ u_quad_t ifs6_in_deliver; /* # of datagrams delivered to ULP */
+ /* NOTE: increment on final dst if */
+ u_quad_t ifs6_out_forward; /* # of datagrams forwarded */
+ /* NOTE: increment on outgoing if */
+ u_quad_t ifs6_out_request; /* # of outgoing datagrams from ULP */
+ /* NOTE: does not include forwrads */
+ u_quad_t ifs6_out_discard; /* # of discarded datagrams */
+ u_quad_t ifs6_out_fragok; /* # of datagrams fragmented */
+ u_quad_t ifs6_out_fragfail; /* # of datagrams failed on fragment */
+ u_quad_t ifs6_out_fragcreat; /* # of fragment datagrams */
+ /* NOTE: this is # after fragment */
+ u_quad_t ifs6_reass_reqd; /* # of incoming fragmented packets */
+ /* NOTE: increment on final dst if */
+ u_quad_t ifs6_reass_ok; /* # of reassembled packets */
+ /* NOTE: this is # after reass */
+ /* NOTE: increment on final dst if */
+ u_quad_t ifs6_atmfrag_rcvd; /* # of atomic fragments received */
+ u_quad_t ifs6_reass_fail; /* # of reass failures */
+ /* NOTE: may not be packet count */
+ /* NOTE: increment on final dst if */
+ u_quad_t ifs6_in_mcast; /* # of inbound multicast datagrams */
+ u_quad_t ifs6_out_mcast; /* # of outbound multicast datagrams */
+
+ u_quad_t ifs6_cantfoward_icmp6; /* # of ICMPv6 packets received for unreachable dest */
+ u_quad_t ifs6_addr_expiry_cnt; /* # of address expiry events (excluding privacy addresses) */
+ u_quad_t ifs6_pfx_expiry_cnt; /* # of prefix expiry events */
+ u_quad_t ifs6_defrtr_expiry_cnt; /* # of default router expiry events */
+};
+
+/*
+ * ICMPv6 interface statistics, as defined in RFC2466 Ipv6IfIcmpEntry.
+ * XXX: I'm not sure if this file is the right place for this structure...
+ */
+struct icmp6_ifstat {
+ /*
+ * Input statistics
+ */
+ /* ipv6IfIcmpInMsgs, total # of input messages */
+ u_quad_t ifs6_in_msg;
+ /* ipv6IfIcmpInErrors, # of input error messages */
+ u_quad_t ifs6_in_error;
+ /* ipv6IfIcmpInDestUnreachs, # of input dest unreach errors */
+ u_quad_t ifs6_in_dstunreach;
+ /* ipv6IfIcmpInAdminProhibs, # of input admin. prohibited errs */
+ u_quad_t ifs6_in_adminprohib;
+ /* ipv6IfIcmpInTimeExcds, # of input time exceeded errors */
+ u_quad_t ifs6_in_timeexceed;
+ /* ipv6IfIcmpInParmProblems, # of input parameter problem errors */
+ u_quad_t ifs6_in_paramprob;
+ /* ipv6IfIcmpInPktTooBigs, # of input packet too big errors */
+ u_quad_t ifs6_in_pkttoobig;
+ /* ipv6IfIcmpInEchos, # of input echo requests */
+ u_quad_t ifs6_in_echo;
+ /* ipv6IfIcmpInEchoReplies, # of input echo replies */
+ u_quad_t ifs6_in_echoreply;
+ /* ipv6IfIcmpInRouterSolicits, # of input router solicitations */
+ u_quad_t ifs6_in_routersolicit;
+ /* ipv6IfIcmpInRouterAdvertisements, # of input router advertisements */
+ u_quad_t ifs6_in_routeradvert;
+ /* ipv6IfIcmpInNeighborSolicits, # of input neighbor solicitations */
+ u_quad_t ifs6_in_neighborsolicit;
+ /* ipv6IfIcmpInNeighborAdvertisements, # of input neighbor advs. */
+ u_quad_t ifs6_in_neighboradvert;
+ /* ipv6IfIcmpInRedirects, # of input redirects */
+ u_quad_t ifs6_in_redirect;
+ /* ipv6IfIcmpInGroupMembQueries, # of input MLD queries */
+ u_quad_t ifs6_in_mldquery;
+ /* ipv6IfIcmpInGroupMembResponses, # of input MLD reports */
+ u_quad_t ifs6_in_mldreport;
+ /* ipv6IfIcmpInGroupMembReductions, # of input MLD done */
+ u_quad_t ifs6_in_mlddone;
+
+ /*
+ * Output statistics. We should solve unresolved routing problem...
+ */
+ /* ipv6IfIcmpOutMsgs, total # of output messages */
+ u_quad_t ifs6_out_msg;
+ /* ipv6IfIcmpOutErrors, # of output error messages */
+ u_quad_t ifs6_out_error;
+ /* ipv6IfIcmpOutDestUnreachs, # of output dest unreach errors */
+ u_quad_t ifs6_out_dstunreach;
+ /* ipv6IfIcmpOutAdminProhibs, # of output admin. prohibited errs */
+ u_quad_t ifs6_out_adminprohib;
+ /* ipv6IfIcmpOutTimeExcds, # of output time exceeded errors */
+ u_quad_t ifs6_out_timeexceed;
+ /* ipv6IfIcmpOutParmProblems, # of output parameter problem errors */
+ u_quad_t ifs6_out_paramprob;
+ /* ipv6IfIcmpOutPktTooBigs, # of output packet too big errors */
+ u_quad_t ifs6_out_pkttoobig;
+ /* ipv6IfIcmpOutEchos, # of output echo requests */
+ u_quad_t ifs6_out_echo;
+ /* ipv6IfIcmpOutEchoReplies, # of output echo replies */
+ u_quad_t ifs6_out_echoreply;
+ /* ipv6IfIcmpOutRouterSolicits, # of output router solicitations */
+ u_quad_t ifs6_out_routersolicit;
+ /* ipv6IfIcmpOutRouterAdvertisements, # of output router advs. */
+ u_quad_t ifs6_out_routeradvert;
+ /* ipv6IfIcmpOutNeighborSolicits, # of output neighbor solicitations */
+ u_quad_t ifs6_out_neighborsolicit;
+ /* ipv6IfIcmpOutNeighborAdvertisements, # of output neighbor advs. */
+ u_quad_t ifs6_out_neighboradvert;
+ /* ipv6IfIcmpOutRedirects, # of output redirects */
+ u_quad_t ifs6_out_redirect;
+ /* ipv6IfIcmpOutGroupMembQueries, # of output MLD queries */
+ u_quad_t ifs6_out_mldquery;
+ /* ipv6IfIcmpOutGroupMembResponses, # of output MLD reports */
+ u_quad_t ifs6_out_mldreport;
+ /* ipv6IfIcmpOutGroupMembReductions, # of output MLD done */
+ u_quad_t ifs6_out_mlddone;
+};
+
+#define SCOPE6_ID_MAX 16
+
+struct in6_ifreq {
+ char ifr_name[IFNAMSIZ];
+ union {
+ struct sockaddr_in6 ifru_addr;
+ struct sockaddr_in6 ifru_dstaddr;
+ int ifru_flags;
+ int ifru_flags6;
+ int ifru_metric;
+ int ifru_intval;
+ caddr_t ifru_data;
+ struct in6_addrlifetime ifru_lifetime;
+ struct in6_ifstat ifru_stat;
+ struct icmp6_ifstat ifru_icmp6stat;
+ u_int32_t ifru_scope_id[SCOPE6_ID_MAX];
+ } ifr_ifru;
+};
+
+#define IN6_IFF_TEMPORARY 0x0080 /* temporary (anonymous) address. */
+#define IN6_IFF_DEPRECATED 0x0010 /* deprecated address */
+
+#define SIOCGIFAFLAG_IN6 _IOWR('i', 73, struct in6_ifreq)
+#define SIOCGIFALIFETIME_IN6 _IOWR('i', 81, struct in6_ifreq)
+
+// The definition below is ONLY a temporary workaround to unblock
+// integrations on CI. MUST be removed ASAP, as soon as SDK is
+// updated. Currently, we have WatchOS SDK 3.2 and it's missing
+// net/if_types.h (unlike SDK 4.0, which has it). Alas, we have to
+// work this around. We only define constants that we use in code.
+
+#if !QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, __IPHONE_NA, __TVOS_NA, __WATCHOS_4_0)
+
+#define QT_WATCHOS_OUTDATED_SDK_WORKAROUND
+
+#define IFT_PPP 0x17 /* RFC 1331 */
+#define IFT_LOOP 0x18 /* loopback */
+#define IFT_SLIP 0x1c /* IP over generic TTY */
+
+#define IFT_GIF 0x37 /*0xf0*/
+#define IFT_STF 0x39 /*0xf3*/
+
+#define IFT_IEEE1394 0x90 /* IEEE1394 High Performance SerialBus*/
+
+#endif // WatchOS SDK below 4.0
+
+#endif // QNETWORKINTERFACE_UIKIT_P_H
+
diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp
index afa6b4296e..d69fc47667 100644
--- a/src/network/kernel/qnetworkinterface_unix.cpp
+++ b/src/network/kernel/qnetworkinterface_unix.cpp
@@ -41,30 +41,19 @@
#include "qset.h"
#include "qnetworkinterface.h"
#include "qnetworkinterface_p.h"
+#include "qnetworkinterface_unix_p.h"
#include "qalgorithms.h"
-#include "private/qnet_unix_p.h"
#ifndef QT_NO_NETWORKINTERFACE
-#define IP_MULTICAST // make AIX happy and define IFF_MULTICAST
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#ifdef Q_OS_SOLARIS
-# include <sys/sockio.h>
+#if defined(QT_NO_CLOCK_MONOTONIC)
+# include "qdatetime.h"
#endif
-#include <net/if.h>
#if defined(QT_LINUXBASE)
# define QT_NO_GETIFADDRS
#endif
-#ifdef Q_OS_HAIKU
-# include <sys/sockio.h>
-# define IFF_RUNNING 0x0001
-#endif
-
#ifndef QT_NO_GETIFADDRS
# include <ifaddrs.h>
#endif
@@ -103,23 +92,6 @@ static QHostAddress addressFromSockaddr(sockaddr *sa, int ifindex = 0, const QSt
}
-static QNetworkInterface::InterfaceFlags convertFlags(uint rawFlags)
-{
- QNetworkInterface::InterfaceFlags flags = 0;
- flags |= (rawFlags & IFF_UP) ? QNetworkInterface::IsUp : QNetworkInterface::InterfaceFlag(0);
- flags |= (rawFlags & IFF_RUNNING) ? QNetworkInterface::IsRunning : QNetworkInterface::InterfaceFlag(0);
- flags |= (rawFlags & IFF_BROADCAST) ? QNetworkInterface::CanBroadcast : QNetworkInterface::InterfaceFlag(0);
- flags |= (rawFlags & IFF_LOOPBACK) ? QNetworkInterface::IsLoopBack : QNetworkInterface::InterfaceFlag(0);
-#ifdef IFF_POINTOPOINT //cygwin doesn't define IFF_POINTOPOINT
- flags |= (rawFlags & IFF_POINTOPOINT) ? QNetworkInterface::IsPointToPoint : QNetworkInterface::InterfaceFlag(0);
-#endif
-
-#ifdef IFF_MULTICAST
- flags |= (rawFlags & IFF_MULTICAST) ? QNetworkInterface::CanMulticast : QNetworkInterface::InterfaceFlag(0);
-#endif
- return flags;
-}
-
uint QNetworkInterfaceManager::interfaceIndexFromName(const QString &name)
{
#ifndef QT_NO_IPV6IFNAME
@@ -167,6 +139,15 @@ QString QNetworkInterfaceManager::interfaceNameFromIndex(uint index)
return QString::number(uint(index));
}
+static int getMtu(int socket, struct ifreq *req)
+{
+#ifdef SIOCGIFMTU
+ if (qt_safe_ioctl(socket, SIOCGIFMTU, req) == 0)
+ return req->ifr_mtu;
+#endif
+ return 0;
+}
+
#ifdef QT_NO_GETIFADDRS
// getifaddrs not available
@@ -306,6 +287,7 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
if (qt_safe_ioctl(socket, SIOCGIFFLAGS, &req) >= 0) {
iface->flags = convertFlags(req.ifr_flags);
}
+ iface->mtu = getMtu(socket, &req);
#ifdef SIOCGIFHWADDR
// Get the HW address
@@ -359,6 +341,7 @@ QT_END_INCLUDE_NAMESPACE
static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
{
+ Q_UNUSED(getMtu)
QList<QNetworkInterfacePrivate *> interfaces;
QSet<QString> seenInterfaces;
QVarLengthArray<int, 16> seenIndexes; // faster than QSet<int>
@@ -413,14 +396,96 @@ static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
return interfaces;
}
+static void getAddressExtraInfo(QNetworkAddressEntry *entry, struct sockaddr *sa, const char *ifname)
+{
+ Q_UNUSED(entry);
+ Q_UNUSED(sa);
+ Q_UNUSED(ifname)
+}
+
# elif defined(Q_OS_BSD4)
QT_BEGIN_INCLUDE_NAMESPACE
# include <net/if_dl.h>
+#if defined(QT_PLATFORM_UIKIT)
+# include "qnetworkinterface_uikit_p.h"
+#if !defined(QT_WATCHOS_OUTDATED_SDK_WORKAROUND)
+// TODO: remove it as soon as SDK is updated on CI!!!
+# include <net/if_types.h>
+#endif
+#else
+# include <net/if_media.h>
+# include <net/if_types.h>
+# include <netinet/in_var.h>
+#endif // QT_PLATFORM_UIKIT
QT_END_INCLUDE_NAMESPACE
+static int openSocket(int &socket)
+{
+ if (socket == -1)
+ socket = qt_safe_socket(AF_INET, SOCK_DGRAM, 0);
+ return socket;
+}
+
+static QNetworkInterface::InterfaceType probeIfType(int socket, int iftype, struct ifmediareq *req)
+{
+ // Determine the interface type.
+
+ // On Darwin, these are #defines, but on FreeBSD they're just an
+ // enum, so we can't #ifdef them. Use the authoritative list from
+ // https://www.iana.org/assignments/smi-numbers/smi-numbers.xhtml#smi-numbers-5
+ switch (iftype) {
+ case IFT_PPP:
+ return QNetworkInterface::Ppp;
+
+ case IFT_LOOP:
+ return QNetworkInterface::Loopback;
+
+ case IFT_SLIP:
+ return QNetworkInterface::Slip;
+
+ case 0x47: // IFT_IEEE80211
+ return QNetworkInterface::Ieee80211;
+
+ case IFT_IEEE1394:
+ return QNetworkInterface::Ieee1394;
+
+ case IFT_GIF:
+ case IFT_STF:
+ return QNetworkInterface::Virtual;
+ }
+
+ // For the remainder (including Ethernet), let's try SIOGIFMEDIA
+ req->ifm_count = 0;
+ if (qt_safe_ioctl(socket, SIOCGIFMEDIA, req) == 0) {
+ // see https://man.openbsd.org/ifmedia.4
+
+ switch (IFM_TYPE(req->ifm_current)) {
+ case IFM_ETHER:
+ return QNetworkInterface::Ethernet;
+
+ case IFM_FDDI:
+ return QNetworkInterface::Fddi;
+
+ case IFM_IEEE80211:
+ return QNetworkInterface::Ieee80211;
+ }
+ }
+
+ return QNetworkInterface::Unknown;
+}
+
static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
{
QList<QNetworkInterfacePrivate *> interfaces;
+ union {
+ struct ifmediareq mediareq;
+ struct ifreq req;
+ };
+ int socket = -1;
+
+ // ensure both structs start with the name field, of size IFNAMESIZ
+ Q_STATIC_ASSERT(sizeof(mediareq.ifm_name) == sizeof(req.ifr_name));
+ Q_ASSERT(&mediareq.ifm_name == &req.ifr_name);
// on NetBSD we use AF_LINK and sockaddr_dl
// scan the list for that family
@@ -434,15 +499,73 @@ static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
iface->name = QString::fromLatin1(ptr->ifa_name);
iface->flags = convertFlags(ptr->ifa_flags);
iface->hardwareAddress = iface->makeHwAddress(sdl->sdl_alen, (uchar*)LLADDR(sdl));
+
+ strlcpy(mediareq.ifm_name, ptr->ifa_name, sizeof(mediareq.ifm_name));
+ iface->type = probeIfType(openSocket(socket), sdl->sdl_type, &mediareq);
+ iface->mtu = getMtu(socket, &req);
}
+ if (socket != -1)
+ qt_safe_close(socket);
return interfaces;
}
+static void getAddressExtraInfo(QNetworkAddressEntry *entry, struct sockaddr *sa, const char *ifname)
+{
+ // get IPv6 address lifetimes
+ if (sa->sa_family != AF_INET6)
+ return;
+
+ struct in6_ifreq ifr;
+
+ int s6 = qt_safe_socket(AF_INET6, SOCK_DGRAM, 0);
+ if (Q_UNLIKELY(s6 < 0)) {
+ qErrnoWarning("QNetworkInterface: could not create IPv6 socket");
+ return;
+ }
+
+ strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+
+ // get flags
+ ifr.ifr_addr = *reinterpret_cast<struct sockaddr_in6 *>(sa);
+ if (qt_safe_ioctl(s6, SIOCGIFAFLAG_IN6, &ifr) < 0) {
+ qt_safe_close(s6);
+ return;
+ }
+ int flags = ifr.ifr_ifru.ifru_flags6;
+ QNetworkInterfacePrivate::calculateDnsEligibility(entry,
+ flags & IN6_IFF_TEMPORARY,
+ flags & IN6_IFF_DEPRECATED);
+
+ // get lifetimes
+ ifr.ifr_addr = *reinterpret_cast<struct sockaddr_in6 *>(sa);
+ if (qt_safe_ioctl(s6, SIOCGIFALIFETIME_IN6, &ifr) < 0) {
+ qt_safe_close(s6);
+ return;
+ }
+ qt_safe_close(s6);
+
+ auto toDeadline = [](time_t when) {
+ QDeadlineTimer deadline = QDeadlineTimer::Forever;
+ if (when) {
+#if defined(QT_NO_CLOCK_MONOTONIC)
+ // no monotonic clock
+ deadline.setPreciseRemainingTime(when - QDateTime::currentSecsSinceEpoch());
+#else
+ deadline.setPreciseDeadline(when);
+#endif
+ }
+ return deadline;
+ };
+ entry->setAddressLifetime(toDeadline(ifr.ifr_ifru.ifru_lifetime.ia6t_preferred),
+ toDeadline(ifr.ifr_ifru.ifru_lifetime.ia6t_expire));
+}
+
# else // Generic version
static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
{
+ Q_UNUSED(getMtu)
QList<QNetworkInterfacePrivate *> interfaces;
// make sure there's one entry for each interface
@@ -470,9 +593,14 @@ static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
return interfaces;
}
+static void getAddressExtraInfo(QNetworkAddressEntry *entry, struct sockaddr *sa, const char *ifname)
+{
+ Q_UNUSED(entry);
+ Q_UNUSED(sa);
+ Q_UNUSED(ifname)
+}
# endif
-
static QList<QNetworkInterfacePrivate *> interfaceListing()
{
QList<QNetworkInterfacePrivate *> interfaces;
@@ -521,6 +649,7 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
entry.setNetmask(addressFromSockaddr(ptr->ifa_netmask, iface->index, iface->name));
if (iface->flags & QNetworkInterface::CanBroadcast)
entry.setBroadcast(addressFromSockaddr(ptr->ifa_broadaddr, iface->index, iface->name));
+ getAddressExtraInfo(&entry, ptr->ifa_addr, name.latin1());
iface->addressEntries << entry;
}
diff --git a/src/network/kernel/qnetworkinterface_unix_p.h b/src/network/kernel/qnetworkinterface_unix_p.h
new file mode 100644
index 0000000000..c085194e3c
--- /dev/null
+++ b/src/network/kernel/qnetworkinterface_unix_p.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2017 Intel Corporation.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QNETWORKINTERFACE_UNIX_P_H
+#define QNETWORKINTERFACE_UNIX_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qnetworkinterface_p.h"
+#include "private/qnet_unix_p.h"
+
+#ifndef QT_NO_NETWORKINTERFACE
+
+#define IP_MULTICAST // make AIX happy and define IFF_MULTICAST
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#ifdef Q_OS_SOLARIS
+# include <sys/sockio.h>
+#endif
+#ifdef Q_OS_HAIKU
+# include <sys/sockio.h>
+# define IFF_RUNNING 0x0001
+#endif
+#if QT_CONFIG(linux_netlink)
+// Same as net/if.h but contains other things we need in
+// qnetworkinterface_linux.cpp.
+# include <linux/if.h>
+#else
+# include <net/if.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+static QNetworkInterface::InterfaceFlags convertFlags(uint rawFlags)
+{
+ QNetworkInterface::InterfaceFlags flags = 0;
+ flags |= (rawFlags & IFF_UP) ? QNetworkInterface::IsUp : QNetworkInterface::InterfaceFlag(0);
+ flags |= (rawFlags & IFF_RUNNING) ? QNetworkInterface::IsRunning : QNetworkInterface::InterfaceFlag(0);
+ flags |= (rawFlags & IFF_BROADCAST) ? QNetworkInterface::CanBroadcast : QNetworkInterface::InterfaceFlag(0);
+ flags |= (rawFlags & IFF_LOOPBACK) ? QNetworkInterface::IsLoopBack : QNetworkInterface::InterfaceFlag(0);
+#ifdef IFF_POINTOPOINT //cygwin doesn't define IFF_POINTOPOINT
+ flags |= (rawFlags & IFF_POINTOPOINT) ? QNetworkInterface::IsPointToPoint : QNetworkInterface::InterfaceFlag(0);
+#endif
+
+#ifdef IFF_MULTICAST
+ flags |= (rawFlags & IFF_MULTICAST) ? QNetworkInterface::CanMulticast : QNetworkInterface::InterfaceFlag(0);
+#endif
+ return flags;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_NETWORKINTERFACE
+
+#endif // QNETWORKINTERFACE_UNIX_P_H
diff --git a/src/network/kernel/qnetworkinterface_win.cpp b/src/network/kernel/qnetworkinterface_win.cpp
index 64c3fa6f83..150553f673 100644
--- a/src/network/kernel/qnetworkinterface_win.cpp
+++ b/src/network/kernel/qnetworkinterface_win.cpp
@@ -62,6 +62,10 @@
#include <qt_windows.h>
+// In case these aren't defined
+#define IF_TYPE_IEEE80216_WMAN 237
+#define IF_TYPE_IEEE802154 259
+
QT_BEGIN_NAMESPACE
static QHostAddress addressFromSockaddr(sockaddr *sa)
@@ -147,6 +151,7 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
else if (ptr->IfIndex != 0)
iface->index = ptr->IfIndex;
+ iface->mtu = qMin<qint64>(ptr->Mtu, INT_MAX);
iface->flags = QNetworkInterface::CanBroadcast;
if (ptr->OperStatus == IfOperStatusUp)
iface->flags |= QNetworkInterface::IsUp | QNetworkInterface::IsRunning;
@@ -155,6 +160,45 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
if (ptr->IfType == IF_TYPE_PPP)
iface->flags |= QNetworkInterface::IsPointToPoint;
+ switch (ptr->IfType) {
+ case IF_TYPE_ETHERNET_CSMACD:
+ iface->type = QNetworkInterface::Ethernet;
+ break;
+
+ case IF_TYPE_FDDI:
+ iface->type = QNetworkInterface::Fddi;
+ break;
+
+ case IF_TYPE_PPP:
+ iface->type = QNetworkInterface::Ppp;
+ break;
+
+ case IF_TYPE_SLIP:
+ iface->type = QNetworkInterface::Slip;
+ break;
+
+ case IF_TYPE_SOFTWARE_LOOPBACK:
+ iface->type = QNetworkInterface::Loopback;
+ iface->flags |= QNetworkInterface::IsLoopBack;
+ break;
+
+ case IF_TYPE_IEEE80211:
+ iface->type = QNetworkInterface::Ieee80211;
+ break;
+
+ case IF_TYPE_IEEE1394:
+ iface->type = QNetworkInterface::Ieee1394;
+ break;
+
+ case IF_TYPE_IEEE80216_WMAN:
+ iface->type = QNetworkInterface::Ieee80216;
+ break;
+
+ case IF_TYPE_IEEE802154:
+ iface->type = QNetworkInterface::Ieee802154;
+ break;
+ }
+
// use ConvertInterfaceLuidToNameW because that returns a friendlier name, though not
// as "friendly" as FriendlyName below
WCHAR buf[IF_MAX_STRING_SIZE + 1];
@@ -167,9 +211,6 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
if (ptr->PhysicalAddressLength)
iface->hardwareAddress = iface->makeHwAddress(ptr->PhysicalAddressLength,
ptr->PhysicalAddress);
- else
- // loopback if it has no address
- iface->flags |= QNetworkInterface::IsLoopBack;
// parse the IP (unicast) addresses
for (PIP_ADAPTER_UNICAST_ADDRESS addr = ptr->FirstUnicastAddress; addr; addr = addr->Next) {
@@ -182,6 +223,17 @@ static QList<QNetworkInterfacePrivate *> interfaceListing()
QNetworkAddressEntry entry;
entry.setIp(addressFromSockaddr(addr->Address.lpSockaddr));
entry.setPrefixLength(addr->OnLinkPrefixLength);
+
+ auto toDeadline = [](ULONG lifetime) -> QDeadlineTimer {
+ if (lifetime == 0xffffffffUL)
+ return QDeadlineTimer::Forever;
+ return QDeadlineTimer(lifetime * 1000);
+ };
+ entry.setAddressLifetime(toDeadline(addr->ValidLifetime), toDeadline(addr->PreferredLifetime));
+ entry.setDnsEligibility(addr->Flags & IP_ADAPTER_ADDRESS_DNS_ELIGIBLE ?
+ QNetworkAddressEntry::DnsEligible :
+ QNetworkAddressEntry::DnsIneligible);
+
iface->addressEntries << entry;
}
}
diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp
index 6b53b4b58e..3646a9526a 100644
--- a/src/network/kernel/qnetworkproxy.cpp
+++ b/src/network/kernel/qnetworkproxy.cpp
@@ -230,7 +230,11 @@
#if QT_CONFIG(socks5)
#include "private/qsocks5socketengine_p.h"
#endif
+
+#if QT_CONFIG(http)
#include "private/qhttpsocketengine_p.h"
+#endif
+
#include "qauthenticator.h"
#include "qdebug.h"
#include "qmutex.h"
@@ -256,7 +260,7 @@ public:
#if QT_CONFIG(socks5)
, socks5SocketEngineHandler(0)
#endif
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
, httpSocketEngineHandler(0)
#endif
#ifdef QT_USE_SYSTEM_PROXIES
@@ -268,7 +272,7 @@ public:
#if QT_CONFIG(socks5)
socks5SocketEngineHandler = new QSocks5SocketEngineHandler();
#endif
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
httpSocketEngineHandler = new QHttpSocketEngineHandler();
#endif
}
@@ -280,7 +284,7 @@ public:
#if QT_CONFIG(socks5)
delete socks5SocketEngineHandler;
#endif
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
delete httpSocketEngineHandler;
#endif
}
@@ -340,7 +344,7 @@ private:
#if QT_CONFIG(socks5)
QSocks5SocketEngineHandler *socks5SocketEngineHandler;
#endif
-#ifndef QT_NO_HTTP
+#if QT_CONFIG(http)
QHttpSocketEngineHandler *httpSocketEngineHandler;
#endif
bool useSystemProxies;
diff --git a/src/network/network.pro b/src/network/network.pro
index eaf6d599da..9082439f1c 100644
--- a/src/network/network.pro
+++ b/src/network/network.pro
@@ -24,8 +24,6 @@ QMAKE_LIBS += $$QMAKE_LIBS_NETWORK
qtConfig(bearermanagement) {
ANDROID_BUNDLED_JAR_DEPENDENCIES = \
- jar/QtAndroidBearer-bundled.jar
- ANDROID_JAR_DEPENDENCIES = \
jar/QtAndroidBearer.jar
ANDROID_LIB_DEPENDENCIES = \
plugins/bearer/libqandroidbearer.so
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp
index ec88851589..13e10e4102 100644
--- a/src/network/socket/qabstractsocket.cpp
+++ b/src/network/socket/qabstractsocket.cpp
@@ -387,6 +387,11 @@
(see \l{QAbstractSocket::}{setReadBufferSize()}).
This enum value has been introduced in Qt 5.3.
+ \value PathMtuSocketOption Retrieves the Path Maximum Transmission Unit
+ (PMTU) value currently known by the IP stack, if any. Some IP stacks also
+ allow setting the MTU for transmission.
+ This enum value was introduced in Qt 5.11.
+
Possible values for \e{TypeOfServiceOption} are:
\table
@@ -1354,15 +1359,29 @@ void QAbstractSocketPrivate::fetchConnectionParameters()
}
state = QAbstractSocket::ConnectedState;
- emit q->stateChanged(state);
- emit q->connected();
-
#if defined(QABSTRACTSOCKET_DEBUG)
qDebug("QAbstractSocketPrivate::fetchConnectionParameters() connection to %s:%i established",
host.toString().toLatin1().constData(), port);
#endif
+ emit q->stateChanged(state);
+ emit q->connected();
}
+/*! \internal
+*/
+qint64 QAbstractSocketPrivate::skip(qint64 maxSize)
+{
+ // if we're not connected, return -1 indicating EOF
+ if (!socketEngine || !socketEngine->isValid() || state != QAbstractSocket::ConnectedState)
+ return -1;
+
+ // Caller, QIODevice::skip(), has ensured buffer is empty. So, wait
+ // for more data in buffered mode.
+ if (isBuffered)
+ return 0;
+
+ return QIODevicePrivate::skip(maxSize);
+}
void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket)
{
@@ -2013,6 +2032,10 @@ void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, cons
case ReceiveBufferSizeSocketOption:
d_func()->socketEngine->setOption(QAbstractSocketEngine::ReceiveBufferSocketOption, value.toInt());
break;
+
+ case PathMtuSocketOption:
+ d_func()->socketEngine->setOption(QAbstractSocketEngine::PathMtuInformation, value.toInt());
+ break;
}
}
@@ -2055,6 +2078,10 @@ QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option)
case ReceiveBufferSizeSocketOption:
ret = d_func()->socketEngine->option(QAbstractSocketEngine::ReceiveBufferSocketOption);
break;
+
+ case PathMtuSocketOption:
+ ret = d_func()->socketEngine->option(QAbstractSocketEngine::PathMtuInformation);
+ break;
}
if (ret == -1)
return QVariant();
diff --git a/src/network/socket/qabstractsocket.h b/src/network/socket/qabstractsocket.h
index 875609aa28..6d5e57ac52 100644
--- a/src/network/socket/qabstractsocket.h
+++ b/src/network/socket/qabstractsocket.h
@@ -120,7 +120,8 @@ public:
MulticastLoopbackOption, // IP_MULTICAST_LOOPBACK
TypeOfServiceOption, //IP_TOS
SendBufferSizeSocketOption, //SO_SNDBUF
- ReceiveBufferSizeSocketOption //SO_RCVBUF
+ ReceiveBufferSizeSocketOption, //SO_RCVBUF
+ PathMtuSocketOption // IP_MTU
};
Q_ENUM(SocketOption)
enum BindFlag {
@@ -154,10 +155,10 @@ public:
bool isValid() const;
- qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ qint64 bytesAvailable() const override;
+ qint64 bytesToWrite() const override;
- bool canReadLine() const Q_DECL_OVERRIDE; // ### Qt6: remove me
+ bool canReadLine() const override; // ### Qt6: remove me
quint16 localPort() const;
QHostAddress localAddress() const;
@@ -182,15 +183,15 @@ public:
SocketError error() const;
// from QIODevice
- void close() Q_DECL_OVERRIDE;
- bool isSequential() const Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE; // ### Qt6: remove me
+ void close() override;
+ bool isSequential() const override;
+ bool atEnd() const override; // ### Qt6: remove me
bool flush();
// for synchronous access
virtual bool waitForConnected(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
- bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForReadyRead(int msecs = 30000) override;
+ bool waitForBytesWritten(int msecs = 30000) override;
virtual bool waitForDisconnected(int msecs = 30000);
#ifndef QT_NO_NETWORKPROXY
@@ -209,9 +210,9 @@ Q_SIGNALS:
#endif
protected:
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 readLineData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 readData(char *data, qint64 maxlen) override;
+ qint64 readLineData(char *data, qint64 maxlen) override;
+ qint64 writeData(const char *data, qint64 len) override;
void setSocketState(SocketState state);
void setSocketError(SocketError socketError);
@@ -221,7 +222,7 @@ protected:
void setPeerAddress(const QHostAddress &address);
void setPeerName(const QString &name);
- QAbstractSocket(SocketType socketType, QAbstractSocketPrivate &dd, QObject *parent = Q_NULLPTR);
+ QAbstractSocket(SocketType socketType, QAbstractSocketPrivate &dd, QObject *parent = nullptr);
private:
Q_DECLARE_PRIVATE(QAbstractSocket)
diff --git a/src/network/socket/qabstractsocket_p.h b/src/network/socket/qabstractsocket_p.h
index 3873b50864..066a35ff85 100644
--- a/src/network/socket/qabstractsocket_p.h
+++ b/src/network/socket/qabstractsocket_p.h
@@ -71,6 +71,9 @@ public:
QAbstractSocketPrivate();
virtual ~QAbstractSocketPrivate();
+ // from QIODevicePrivate
+ qint64 skip(qint64 maxSize) override;
+
// from QAbstractSocketEngineReceiver
inline void readNotification() override { canReadNotification(); }
inline void writeNotification() override { canWriteNotification(); }
diff --git a/src/network/socket/qabstractsocketengine_p.h b/src/network/socket/qabstractsocketengine_p.h
index 0cb519ce90..b15dd73c96 100644
--- a/src/network/socket/qabstractsocketengine_p.h
+++ b/src/network/socket/qabstractsocketengine_p.h
@@ -105,7 +105,8 @@ public:
TypeOfServiceOption,
ReceivePacketInformation,
ReceiveHopLimit,
- MaxStreamsSocketOption
+ MaxStreamsSocketOption,
+ PathMtuInformation
};
enum PacketHeaderOption {
diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp
index 899c02fba6..b543ea7981 100644
--- a/src/network/socket/qhttpsocketengine.cpp
+++ b/src/network/socket/qhttpsocketengine.cpp
@@ -46,7 +46,7 @@
#include "qelapsedtimer.h"
#include "qnetworkinterface.h"
-#if !defined(QT_NO_NETWORKPROXY) && !defined(QT_NO_HTTP)
+#if !defined(QT_NO_NETWORKPROXY)
#include <qdebug.h>
QT_BEGIN_NAMESPACE
@@ -572,18 +572,13 @@ void QHttpSocketEngine::slotSocketReadNotification()
}
if (d->state == ReadResponseContent) {
- char dummybuffer[4096];
- while (d->pendingResponseData) {
- int read = d->socket->read(dummybuffer, qMin(sizeof(dummybuffer), (size_t)d->pendingResponseData));
- if (read == 0)
- return;
- if (read == -1) {
- d->socket->disconnectFromHost();
- emitWriteNotification();
- return;
- }
- d->pendingResponseData -= read;
+ qint64 skipped = d->socket->skip(d->pendingResponseData);
+ if (skipped == -1) {
+ d->socket->disconnectFromHost();
+ emitWriteNotification();
+ return;
}
+ d->pendingResponseData -= uint(skipped);
if (d->pendingResponseData > 0)
return;
if (d->reply->d_func()->statusCode == 407)
@@ -871,4 +866,4 @@ QAbstractSocketEngine *QHttpSocketEngineHandler::createSocketEngine(qintptr, QOb
QT_END_NAMESPACE
-#endif
+#endif // !QT_NO_NETWORKPROXY
diff --git a/src/network/socket/qhttpsocketengine_p.h b/src/network/socket/qhttpsocketengine_p.h
index 07815a7e51..cb7798694a 100644
--- a/src/network/socket/qhttpsocketengine_p.h
+++ b/src/network/socket/qhttpsocketengine_p.h
@@ -57,9 +57,11 @@
#include "qnetworkproxy.h"
#include "private/qauthenticator_p.h"
+QT_REQUIRE_CONFIG(http);
+
QT_BEGIN_NAMESPACE
-#if !defined(QT_NO_NETWORKPROXY) && !defined(QT_NO_HTTP)
+#if !defined(QT_NO_NETWORKPROXY)
class QTcpSocket;
class QHttpNetworkReply;
@@ -80,62 +82,62 @@ public:
QHttpSocketEngine(QObject *parent = 0);
~QHttpSocketEngine();
- bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) Q_DECL_OVERRIDE;
- bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) Q_DECL_OVERRIDE;
+ bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) override;
+ bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) override;
void setProxy(const QNetworkProxy &networkProxy);
- qintptr socketDescriptor() const Q_DECL_OVERRIDE;
+ qintptr socketDescriptor() const override;
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
bool connectInternal();
- bool connectToHost(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
- bool connectToHostByName(const QString &name, quint16 port) Q_DECL_OVERRIDE;
- bool bind(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
- bool listen() Q_DECL_OVERRIDE;
- int accept() Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
+ bool connectToHost(const QHostAddress &address, quint16 port) override;
+ bool connectToHostByName(const QString &name, quint16 port) override;
+ bool bind(const QHostAddress &address, quint16 port) override;
+ bool listen() override;
+ int accept() override;
+ void close() override;
- qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ qint64 bytesAvailable() const override;
- qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 read(char *data, qint64 maxlen) override;
+ qint64 write(const char *data, qint64 len) override;
#ifndef QT_NO_UDPSOCKET
#ifndef QT_NO_NETWORKINTERFACE
bool joinMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface) Q_DECL_OVERRIDE;
+ const QNetworkInterface &interface) override;
bool leaveMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface) Q_DECL_OVERRIDE;
- QNetworkInterface multicastInterface() const Q_DECL_OVERRIDE;
- bool setMulticastInterface(const QNetworkInterface &iface) Q_DECL_OVERRIDE;
+ const QNetworkInterface &interface) override;
+ QNetworkInterface multicastInterface() const override;
+ bool setMulticastInterface(const QNetworkInterface &iface) override;
#endif // QT_NO_NETWORKINTERFACE
- bool hasPendingDatagrams() const Q_DECL_OVERRIDE;
- qint64 pendingDatagramSize() const Q_DECL_OVERRIDE;
+ bool hasPendingDatagrams() const override;
+ qint64 pendingDatagramSize() const override;
#endif // QT_NO_UDPSOCKET
qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader *,
- PacketHeaderOptions) Q_DECL_OVERRIDE;
- qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) Q_DECL_OVERRIDE;
- qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ PacketHeaderOptions) override;
+ qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) override;
+ qint64 bytesToWrite() const override;
- int option(SocketOption option) const Q_DECL_OVERRIDE;
- bool setOption(SocketOption option, int value) Q_DECL_OVERRIDE;
+ int option(SocketOption option) const override;
+ bool setOption(SocketOption option, int value) override;
- bool waitForRead(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
- bool waitForWrite(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ bool waitForRead(int msecs = 30000, bool *timedOut = 0) override;
+ bool waitForWrite(int msecs = 30000, bool *timedOut = 0) override;
bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
bool checkRead, bool checkWrite,
- int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ int msecs = 30000, bool *timedOut = 0) override;
- bool isReadNotificationEnabled() const Q_DECL_OVERRIDE;
- void setReadNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
- bool isWriteNotificationEnabled() const Q_DECL_OVERRIDE;
- void setWriteNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
- bool isExceptionNotificationEnabled() const Q_DECL_OVERRIDE;
- void setExceptionNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isReadNotificationEnabled() const override;
+ void setReadNotificationEnabled(bool enable) override;
+ bool isWriteNotificationEnabled() const override;
+ void setWriteNotificationEnabled(bool enable) override;
+ bool isExceptionNotificationEnabled() const override;
+ void setExceptionNotificationEnabled(bool enable) override;
public slots:
void slotSocketConnected();
@@ -190,8 +192,8 @@ class Q_AUTOTEST_EXPORT QHttpSocketEngineHandler : public QSocketEngineHandler
{
public:
virtual QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType,
- const QNetworkProxy &, QObject *parent) Q_DECL_OVERRIDE;
- virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescripter, QObject *parent) Q_DECL_OVERRIDE;
+ const QNetworkProxy &, QObject *parent) override;
+ virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescripter, QObject *parent) override;
};
#endif
diff --git a/src/network/socket/qlocalserver.h b/src/network/socket/qlocalserver.h
index 454ac30c9b..211aa94d85 100644
--- a/src/network/socket/qlocalserver.h
+++ b/src/network/socket/qlocalserver.h
@@ -71,7 +71,7 @@ public:
Q_DECLARE_FLAGS(SocketOptions, SocketOption)
Q_FLAG(SocketOptions)
- explicit QLocalServer(QObject *parent = Q_NULLPTR);
+ explicit QLocalServer(QObject *parent = nullptr);
~QLocalServer();
void close();
@@ -87,7 +87,7 @@ public:
static bool removeServer(const QString &name);
QAbstractSocket::SocketError serverError() const;
void setMaxPendingConnections(int numConnections);
- bool waitForNewConnection(int msec = 0, bool *timedOut = Q_NULLPTR);
+ bool waitForNewConnection(int msec = 0, bool *timedOut = nullptr);
void setSocketOptions(SocketOptions options);
SocketOptions socketOptions() const;
diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp
index 516fac681c..9547ec5b88 100644
--- a/src/network/socket/qlocalserver_unix.cpp
+++ b/src/network/socket/qlocalserver_unix.cpp
@@ -297,7 +297,7 @@ void QLocalServerPrivate::waitForNewConnection(int msec, bool *timedOut)
}
errno = EBADF;
- // FALLTHROUGH
+ Q_FALLTHROUGH();
case -1:
setError(QLatin1String("QLocalServer::waitForNewConnection"));
closeServer();
diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h
index 9905d3a86c..1876a6ac0d 100644
--- a/src/network/socket/qlocalsocket.h
+++ b/src/network/socket/qlocalsocket.h
@@ -79,7 +79,7 @@ public:
ClosingState = QAbstractSocket::ClosingState
};
- QLocalSocket(QObject *parent = Q_NULLPTR);
+ QLocalSocket(QObject *parent = nullptr);
~QLocalSocket();
void connectToServer(OpenMode openMode = ReadWrite);
@@ -91,12 +91,12 @@ public:
QString fullServerName() const;
void abort();
- virtual bool isSequential() const Q_DECL_OVERRIDE;
- virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- virtual qint64 bytesToWrite() const Q_DECL_OVERRIDE;
- virtual bool canReadLine() const Q_DECL_OVERRIDE;
- virtual bool open(OpenMode openMode = ReadWrite) Q_DECL_OVERRIDE;
- virtual void close() Q_DECL_OVERRIDE;
+ virtual bool isSequential() const override;
+ virtual qint64 bytesAvailable() const override;
+ virtual qint64 bytesToWrite() const override;
+ virtual bool canReadLine() const override;
+ virtual bool open(OpenMode openMode = ReadWrite) override;
+ virtual void close() override;
LocalSocketError error() const;
bool flush();
bool isValid() const;
@@ -109,10 +109,10 @@ public:
qintptr socketDescriptor() const;
LocalSocketState state() const;
- bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForBytesWritten(int msecs = 30000) override;
bool waitForConnected(int msecs = 30000);
bool waitForDisconnected(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForReadyRead(int msecs = 30000) override;
Q_SIGNALS:
void connected();
@@ -121,8 +121,8 @@ Q_SIGNALS:
void stateChanged(QLocalSocket::LocalSocketState socketState);
protected:
- virtual qint64 readData(char*, qint64) Q_DECL_OVERRIDE;
- virtual qint64 writeData(const char*, qint64) Q_DECL_OVERRIDE;
+ virtual qint64 readData(char*, qint64) override;
+ virtual qint64 writeData(const char*, qint64) override;
private:
Q_DISABLE_COPY(QLocalSocket)
diff --git a/src/network/socket/qlocalsocket_p.h b/src/network/socket/qlocalsocket_p.h
index eb59af5577..8b72da397f 100644
--- a/src/network/socket/qlocalsocket_p.h
+++ b/src/network/socket/qlocalsocket_p.h
@@ -120,6 +120,7 @@ public:
void init();
#if defined(QT_LOCALSOCKET_TCP)
+ qint64 skip(qint64 maxSize) override;
QLocalUnixSocket* tcpSocket;
bool ownsTcpSocket;
void setSocket(QLocalUnixSocket*);
@@ -139,6 +140,7 @@ public:
QWindowsPipeReader *pipeReader;
QLocalSocket::LocalSocketError error;
#else
+ qint64 skip(qint64 maxSize) override;
QLocalUnixSocket unixSocket;
QString generateErrorString(QLocalSocket::LocalSocketError, const QString &function) const;
void errorOccurred(QLocalSocket::LocalSocketError, const QString &function);
diff --git a/src/network/socket/qlocalsocket_tcp.cpp b/src/network/socket/qlocalsocket_tcp.cpp
index 379cdd096d..41e5b47627 100644
--- a/src/network/socket/qlocalsocket_tcp.cpp
+++ b/src/network/socket/qlocalsocket_tcp.cpp
@@ -83,6 +83,11 @@ void QLocalSocketPrivate::setSocket(QLocalUnixSocket* socket)
tcpSocket->setParent(q);
}
+qint64 QLocalSocketPrivate::skip(qint64 maxSize)
+{
+ return tcpSocket->skip(maxSize);
+}
+
void QLocalSocketPrivate::_q_error(QAbstractSocket::SocketError socketError)
{
Q_Q(QLocalSocket);
diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp
index c1d79e8137..d1df26d9f1 100644
--- a/src/network/socket/qlocalsocket_unix.cpp
+++ b/src/network/socket/qlocalsocket_unix.cpp
@@ -88,6 +88,11 @@ void QLocalSocketPrivate::init()
unixSocket.setParent(q);
}
+qint64 QLocalSocketPrivate::skip(qint64 maxSize)
+{
+ return unixSocket.skip(maxSize);
+}
+
void QLocalSocketPrivate::_q_error(QAbstractSocket::SocketError socketError)
{
Q_Q(QLocalSocket);
diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp
index 491f52f862..8947a7ee8a 100644
--- a/src/network/socket/qnativesocketengine.cpp
+++ b/src/network/socket/qnativesocketengine.cpp
@@ -1163,7 +1163,7 @@ bool QNativeSocketEngine::waitForReadOrWrite(bool *readyToRead, bool *readyToWri
}
#if 0 // currently unused
-/*!
+/*
Returns the size of the operating system's socket receive
buffer. Depending on the operating system, this size may be
different from what has been set earlier with
@@ -1175,7 +1175,7 @@ qint64 QNativeSocketEngine::receiveBufferSize() const
return option(ReceiveBufferSocketOption);
}
-/*!
+/*
Sets the size of the operating system receive buffer to \a size.
For clients, this should be set before connectToHost() is called;
@@ -1196,7 +1196,7 @@ void QNativeSocketEngine::setReceiveBufferSize(qint64 size)
setOption(ReceiveBufferSocketOption, size);
}
-/*!
+/*
Returns the size of the operating system send buffer. Depending on
the operating system, this size may be different from what has
been set earlier with setSendBufferSize().
@@ -1207,7 +1207,7 @@ qint64 QNativeSocketEngine::sendBufferSize() const
return option(SendBufferSocketOption);
}
-/*!
+/*
Sets the size of the operating system send buffer to \a size.
The operating system send buffer size effectively limits how much
diff --git a/src/network/socket/qnativesocketengine_p.h b/src/network/socket/qnativesocketengine_p.h
index d488ce150c..aa61b74823 100644
--- a/src/network/socket/qnativesocketengine_p.h
+++ b/src/network/socket/qnativesocketengine_p.h
@@ -128,43 +128,43 @@ public:
QNativeSocketEngine(QObject *parent = 0);
~QNativeSocketEngine();
- bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) Q_DECL_OVERRIDE;
- bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) Q_DECL_OVERRIDE;
+ bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) override;
+ bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) override;
- qintptr socketDescriptor() const Q_DECL_OVERRIDE;
+ qintptr socketDescriptor() const override;
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
- bool connectToHost(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
- bool connectToHostByName(const QString &name, quint16 port) Q_DECL_OVERRIDE;
- bool bind(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
- bool listen() Q_DECL_OVERRIDE;
- int accept() Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
+ bool connectToHost(const QHostAddress &address, quint16 port) override;
+ bool connectToHostByName(const QString &name, quint16 port) override;
+ bool bind(const QHostAddress &address, quint16 port) override;
+ bool listen() override;
+ int accept() override;
+ void close() override;
- qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ qint64 bytesAvailable() const override;
- qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 read(char *data, qint64 maxlen) override;
+ qint64 write(const char *data, qint64 len) override;
#ifndef QT_NO_UDPSOCKET
#ifndef QT_NO_NETWORKINTERFACE
bool joinMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &iface) Q_DECL_OVERRIDE;
+ const QNetworkInterface &iface) override;
bool leaveMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &iface) Q_DECL_OVERRIDE;
- QNetworkInterface multicastInterface() const Q_DECL_OVERRIDE;
- bool setMulticastInterface(const QNetworkInterface &iface) Q_DECL_OVERRIDE;
+ const QNetworkInterface &iface) override;
+ QNetworkInterface multicastInterface() const override;
+ bool setMulticastInterface(const QNetworkInterface &iface) override;
#endif
- bool hasPendingDatagrams() const Q_DECL_OVERRIDE;
- qint64 pendingDatagramSize() const Q_DECL_OVERRIDE;
+ bool hasPendingDatagrams() const override;
+ qint64 pendingDatagramSize() const override;
#endif // QT_NO_UDPSOCKET
qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader * = 0,
- PacketHeaderOptions = WantNone) Q_DECL_OVERRIDE;
- qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) Q_DECL_OVERRIDE;
- qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ PacketHeaderOptions = WantNone) override;
+ qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) override;
+ qint64 bytesToWrite() const override;
#if 0 // currently unused
qint64 receiveBufferSize() const;
@@ -174,21 +174,21 @@ public:
void setSendBufferSize(qint64 bufferSize);
#endif
- int option(SocketOption option) const Q_DECL_OVERRIDE;
- bool setOption(SocketOption option, int value) Q_DECL_OVERRIDE;
+ int option(SocketOption option) const override;
+ bool setOption(SocketOption option, int value) override;
- bool waitForRead(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
- bool waitForWrite(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ bool waitForRead(int msecs = 30000, bool *timedOut = 0) override;
+ bool waitForWrite(int msecs = 30000, bool *timedOut = 0) override;
bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
bool checkRead, bool checkWrite,
- int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
-
- bool isReadNotificationEnabled() const Q_DECL_OVERRIDE;
- void setReadNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
- bool isWriteNotificationEnabled() const Q_DECL_OVERRIDE;
- void setWriteNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
- bool isExceptionNotificationEnabled() const Q_DECL_OVERRIDE;
- void setExceptionNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ int msecs = 30000, bool *timedOut = 0) override;
+
+ bool isReadNotificationEnabled() const override;
+ void setReadNotificationEnabled(bool enable) override;
+ bool isWriteNotificationEnabled() const override;
+ void setWriteNotificationEnabled(bool enable) override;
+ bool isExceptionNotificationEnabled() const override;
+ void setExceptionNotificationEnabled(bool enable) override;
public Q_SLOTS:
// non-virtual override;
diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp
index cb0a521360..b380b0f7d6 100644
--- a/src/network/socket/qnativesocketengine_unix.cpp
+++ b/src/network/socket/qnativesocketengine_unix.cpp
@@ -226,6 +226,20 @@ static void convertToLevelAndOption(QNativeSocketEngine::SocketOption opt,
#endif
}
break;
+
+ case QNativeSocketEngine::PathMtuInformation:
+ if (socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) {
+#ifdef IPV6_MTU
+ level = IPPROTO_IPV6;
+ n = IPV6_MTU;
+#endif
+ } else {
+#ifdef IP_MTU
+ level = IPPROTO_IP;
+ n = IP_MTU;
+#endif
+ }
+ break;
}
}
@@ -331,6 +345,20 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co
return -1;
}
+ case QNativeSocketEngine::PathMtuInformation:
+#if defined(IPV6_PATHMTU) && !defined(IPV6_MTU)
+ // Prefer IPV6_MTU (handled by convertToLevelAndOption), if available
+ // (Linux); fall back to IPV6_PATHMTU otherwise (FreeBSD):
+ if (socketProtocol == QAbstractSocket::IPv6Protocol) {
+ ip6_mtuinfo mtuinfo;
+ QT_SOCKOPTLEN_T len = sizeof(mtuinfo);
+ if (::getsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_PATHMTU, &mtuinfo, &len) == 0)
+ return int(mtuinfo.ip6m_mtu);
+ return -1;
+ }
+#endif
+ break;
+
default:
break;
}
@@ -420,6 +448,8 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt
}
#endif
+ if (n == -1)
+ return false;
return ::setsockopt(socketDescriptor, level, n, (char *) &v, sizeof(v)) == 0;
}
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp
index 6a091209be..c303f01648 100644
--- a/src/network/socket/qnativesocketengine_win.cpp
+++ b/src/network/socket/qnativesocketengine_win.cpp
@@ -209,7 +209,7 @@ static inline void qt_socket_getPortAndAddress(SOCKET socketDescriptor, const qt
static void convertToLevelAndOption(QNativeSocketEngine::SocketOption opt,
QAbstractSocket::NetworkLayerProtocol socketProtocol, int &level, int &n)
{
- n = 0;
+ n = -1;
level = SOL_SOCKET; // default
switch (opt) {
@@ -281,6 +281,9 @@ static void convertToLevelAndOption(QNativeSocketEngine::SocketOption opt,
n = IP_HOPLIMIT;
}
break;
+
+ case QAbstractSocketEngine::PathMtuInformation:
+ break; // not supported on Windows
}
}
@@ -471,9 +474,11 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co
QT_SOCKOPTLEN_T len = sizeof(v);
convertToLevelAndOption(opt, socketProtocol, level, n);
- if (getsockopt(socketDescriptor, level, n, (char *) &v, &len) == 0)
- return v;
- WS_ERROR_DEBUG(WSAGetLastError());
+ if (n != -1) {
+ if (getsockopt(socketDescriptor, level, n, (char *) &v, &len) == 0)
+ return v;
+ WS_ERROR_DEBUG(WSAGetLastError());
+ }
return -1;
}
@@ -491,9 +496,7 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt
switch (opt) {
case QNativeSocketEngine::SendBufferSocketOption:
// see QTBUG-30478 SO_SNDBUF should not be used on Vista or later
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
- return false;
- break;
+ return false;
case QNativeSocketEngine::NonBlockingSocketOption:
{
unsigned long buf = v;
@@ -516,6 +519,8 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt
int n, level;
convertToLevelAndOption(opt, socketProtocol, level, n);
+ if (n == -1)
+ return false;
if (::setsockopt(socketDescriptor, level, n, (char*)&v, sizeof(v)) != 0) {
WS_ERROR_DEBUG(WSAGetLastError());
return false;
@@ -571,7 +576,6 @@ bool QNativeSocketEnginePrivate::fetchConnectionParameters()
DWORD ipv6only = 0;
QT_SOCKOPTLEN_T optlen = sizeof(ipv6only);
if (localAddress == QHostAddress::AnyIPv6
- && QSysInfo::windowsVersion() >= QSysInfo::WV_6_0
&& !getsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&ipv6only, &optlen )) {
if (!ipv6only) {
socketProtocol = QAbstractSocket::AnyIPProtocol;
@@ -632,10 +636,8 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin
if ((socketProtocol == QAbstractSocket::IPv6Protocol || socketProtocol == QAbstractSocket::AnyIPProtocol) && address.toIPv4Address()) {
//IPV6_V6ONLY option must be cleared to connect to a V4 mapped address
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_6_0) {
- DWORD ipv6only = 0;
- ipv6only = ::setsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&ipv6only, sizeof(ipv6only) );
- }
+ DWORD ipv6only = 0;
+ ipv6only = ::setsockopt(socketDescriptor, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&ipv6only, sizeof(ipv6only) );
}
forever {
diff --git a/src/network/socket/qnativesocketengine_winrt.cpp b/src/network/socket/qnativesocketengine_winrt.cpp
index b7d7042923..9df5f0c500 100644
--- a/src/network/socket/qnativesocketengine_winrt.cpp
+++ b/src/network/socket/qnativesocketengine_winrt.cpp
@@ -1340,7 +1340,7 @@ QNativeSocketEnginePrivate::QNativeSocketEnginePrivate()
, closingDown(false)
, socketDescriptor(-1)
, worker(new SocketEngineWorker(this))
- , sslSocket(Q_NULLPTR)
+ , sslSocket(nullptr)
, connectionToken( { -1 } )
{
}
@@ -1514,6 +1514,7 @@ int QNativeSocketEnginePrivate::option(QAbstractSocketEngine::SocketOption opt)
case QAbstractSocketEngine::MulticastLoopbackOption:
case QAbstractSocketEngine::TypeOfServiceOption:
case QAbstractSocketEngine::MaxStreamsSocketOption:
+ case QAbstractSocketEngine::PathMtuInformation:
default:
return -1;
}
@@ -1573,6 +1574,7 @@ bool QNativeSocketEnginePrivate::setOption(QAbstractSocketEngine::SocketOption o
case QAbstractSocketEngine::MulticastLoopbackOption:
case QAbstractSocketEngine::TypeOfServiceOption:
case QAbstractSocketEngine::MaxStreamsSocketOption:
+ case QAbstractSocketEngine::PathMtuInformation:
default:
return false;
}
diff --git a/src/network/socket/qnet_unix_p.h b/src/network/socket/qnet_unix_p.h
index 5359872f96..e038352352 100644
--- a/src/network/socket/qnet_unix_p.h
+++ b/src/network/socket/qnet_unix_p.h
@@ -78,7 +78,6 @@ QT_BEGIN_NAMESPACE
# define QT_SOCKOPTLEN_T QT_SOCKLEN_T
#endif
-// UnixWare 7 redefines socket -> _socket
static inline int qt_safe_socket(int domain, int type, int protocol, int flags = 0)
{
Q_ASSERT((flags & ~O_NONBLOCK) == 0);
@@ -105,7 +104,6 @@ static inline int qt_safe_socket(int domain, int type, int protocol, int flags =
#endif
}
-// Tru64 redefines accept -> _accept with _XOPEN_SOURCE_EXTENDED
static inline int qt_safe_accept(int s, struct sockaddr *addr, QT_SOCKLEN_T *addrlen, int flags = 0)
{
Q_ASSERT((flags & ~O_NONBLOCK) == 0);
@@ -137,7 +135,6 @@ static inline int qt_safe_accept(int s, struct sockaddr *addr, QT_SOCKLEN_T *add
#endif
}
-// UnixWare 7 redefines listen -> _listen
static inline int qt_safe_listen(int s, int backlog)
{
return ::listen(s, backlog);
diff --git a/src/network/socket/qsctpserver.h b/src/network/socket/qsctpserver.h
index 1afdab28a0..b678ba053d 100644
--- a/src/network/socket/qsctpserver.h
+++ b/src/network/socket/qsctpserver.h
@@ -63,7 +63,7 @@ public:
QSctpSocket *nextPendingDatagramConnection();
protected:
- void incomingConnection(qintptr handle) Q_DECL_OVERRIDE;
+ void incomingConnection(qintptr handle) override;
private:
Q_DISABLE_COPY(QSctpServer)
diff --git a/src/network/socket/qsctpserver_p.h b/src/network/socket/qsctpserver_p.h
index 274939fc3d..8816cc150e 100644
--- a/src/network/socket/qsctpserver_p.h
+++ b/src/network/socket/qsctpserver_p.h
@@ -66,7 +66,7 @@ public:
int maximumChannelCount;
- void configureCreatedSocket() Q_DECL_OVERRIDE;
+ void configureCreatedSocket() override;
};
#endif // QT_NO_SCTP
diff --git a/src/network/socket/qsctpsocket.h b/src/network/socket/qsctpsocket.h
index 9bed1890ff..5288da6129 100644
--- a/src/network/socket/qsctpsocket.h
+++ b/src/network/socket/qsctpsocket.h
@@ -56,8 +56,8 @@ public:
explicit QSctpSocket(QObject *parent = nullptr);
virtual ~QSctpSocket();
- void close() Q_DECL_OVERRIDE;
- void disconnectFromHost() Q_DECL_OVERRIDE;
+ void close() override;
+ void disconnectFromHost() override;
void setMaximumChannelCount(int count);
int maximumChannelCount() const;
@@ -67,8 +67,8 @@ public:
bool writeDatagram(const QNetworkDatagram &datagram);
protected:
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 readLineData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 readData(char *data, qint64 maxlen) override;
+ qint64 readLineData(char *data, qint64 maxlen) override;
private:
Q_DISABLE_COPY(QSctpSocket)
diff --git a/src/network/socket/qsctpsocket_p.h b/src/network/socket/qsctpsocket_p.h
index 3f765ebed9..8f9413cb47 100644
--- a/src/network/socket/qsctpsocket_p.h
+++ b/src/network/socket/qsctpsocket_p.h
@@ -70,8 +70,8 @@ public:
QSctpSocketPrivate();
virtual ~QSctpSocketPrivate();
- bool canReadNotification() Q_DECL_OVERRIDE;
- bool writeToSocket() Q_DECL_OVERRIDE;
+ bool canReadNotification() override;
+ bool writeToSocket() override;
QByteArray incomingDatagram;
int maximumChannelCount;
@@ -80,7 +80,7 @@ public:
QVector<IpHeaderList> readHeaders;
QVector<IpHeaderList> writeHeaders;
- void configureCreatedSocket() Q_DECL_OVERRIDE;
+ void configureCreatedSocket() override;
};
#endif // QT_NO_SCTP
diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp
index fa5f198bf2..a07ea65046 100644
--- a/src/network/socket/qsocks5socketengine.cpp
+++ b/src/network/socket/qsocks5socketengine.cpp
@@ -320,7 +320,7 @@ public:
QSocks5BindData *retrieve(qintptr socketDescriptor);
protected:
- void timerEvent(QTimerEvent * event) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent * event) override;
QMutex mutex;
int sweepTimerId;
diff --git a/src/network/socket/qsocks5socketengine_p.h b/src/network/socket/qsocks5socketengine_p.h
index b248554ae5..1942eff4ca 100644
--- a/src/network/socket/qsocks5socketengine_p.h
+++ b/src/network/socket/qsocks5socketengine_p.h
@@ -68,62 +68,62 @@ public:
QSocks5SocketEngine(QObject *parent = 0);
~QSocks5SocketEngine();
- bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) Q_DECL_OVERRIDE;
- bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) Q_DECL_OVERRIDE;
+ bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) override;
+ bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) override;
void setProxy(const QNetworkProxy &networkProxy);
- qintptr socketDescriptor() const Q_DECL_OVERRIDE;
+ qintptr socketDescriptor() const override;
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
bool connectInternal();
- bool connectToHost(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
- bool connectToHostByName(const QString &name, quint16 port) Q_DECL_OVERRIDE;
- bool bind(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
- bool listen() Q_DECL_OVERRIDE;
- int accept() Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
+ bool connectToHost(const QHostAddress &address, quint16 port) override;
+ bool connectToHostByName(const QString &name, quint16 port) override;
+ bool bind(const QHostAddress &address, quint16 port) override;
+ bool listen() override;
+ int accept() override;
+ void close() override;
- qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ qint64 bytesAvailable() const override;
- qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 read(char *data, qint64 maxlen) override;
+ qint64 write(const char *data, qint64 len) override;
#ifndef QT_NO_UDPSOCKET
#ifndef QT_NO_NETWORKINTERFACE
bool joinMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface) Q_DECL_OVERRIDE;
+ const QNetworkInterface &interface) override;
bool leaveMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface) Q_DECL_OVERRIDE;
- QNetworkInterface multicastInterface() const Q_DECL_OVERRIDE;
- bool setMulticastInterface(const QNetworkInterface &iface) Q_DECL_OVERRIDE;
+ const QNetworkInterface &interface) override;
+ QNetworkInterface multicastInterface() const override;
+ bool setMulticastInterface(const QNetworkInterface &iface) override;
#endif // QT_NO_NETWORKINTERFACE
- bool hasPendingDatagrams() const Q_DECL_OVERRIDE;
- qint64 pendingDatagramSize() const Q_DECL_OVERRIDE;
+ bool hasPendingDatagrams() const override;
+ qint64 pendingDatagramSize() const override;
#endif // QT_NO_UDPSOCKET
qint64 readDatagram(char *data, qint64 maxlen, QIpPacketHeader * = 0,
- PacketHeaderOptions = WantNone) Q_DECL_OVERRIDE;
- qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) Q_DECL_OVERRIDE;
- qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ PacketHeaderOptions = WantNone) override;
+ qint64 writeDatagram(const char *data, qint64 len, const QIpPacketHeader &) override;
+ qint64 bytesToWrite() const override;
- int option(SocketOption option) const Q_DECL_OVERRIDE;
- bool setOption(SocketOption option, int value) Q_DECL_OVERRIDE;
+ int option(SocketOption option) const override;
+ bool setOption(SocketOption option, int value) override;
- bool waitForRead(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
- bool waitForWrite(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ bool waitForRead(int msecs = 30000, bool *timedOut = 0) override;
+ bool waitForWrite(int msecs = 30000, bool *timedOut = 0) override;
bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
bool checkRead, bool checkWrite,
- int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ int msecs = 30000, bool *timedOut = 0) override;
- bool isReadNotificationEnabled() const Q_DECL_OVERRIDE;
- void setReadNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
- bool isWriteNotificationEnabled() const Q_DECL_OVERRIDE;
- void setWriteNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
- bool isExceptionNotificationEnabled() const Q_DECL_OVERRIDE;
- void setExceptionNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isReadNotificationEnabled() const override;
+ void setReadNotificationEnabled(bool enable) override;
+ bool isWriteNotificationEnabled() const override;
+ void setWriteNotificationEnabled(bool enable) override;
+ bool isExceptionNotificationEnabled() const override;
+ void setExceptionNotificationEnabled(bool enable) override;
private:
Q_DECLARE_PRIVATE(QSocks5SocketEngine)
@@ -166,11 +166,11 @@ class QSocks5PasswordAuthenticator : public QSocks5Authenticator
{
public:
QSocks5PasswordAuthenticator(const QString &userName, const QString &password);
- char methodId() Q_DECL_OVERRIDE;
- bool beginAuthenticate(QTcpSocket *socket, bool *completed) Q_DECL_OVERRIDE;
- bool continueAuthenticate(QTcpSocket *socket, bool *completed) Q_DECL_OVERRIDE;
+ char methodId() override;
+ bool beginAuthenticate(QTcpSocket *socket, bool *completed) override;
+ bool continueAuthenticate(QTcpSocket *socket, bool *completed) override;
- QString errorString() Q_DECL_OVERRIDE;
+ QString errorString() override;
private:
QString userName;
@@ -287,8 +287,8 @@ class Q_AUTOTEST_EXPORT QSocks5SocketEngineHandler : public QSocketEngineHandler
{
public:
virtual QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType,
- const QNetworkProxy &, QObject *parent) Q_DECL_OVERRIDE;
- virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent) Q_DECL_OVERRIDE;
+ const QNetworkProxy &, QObject *parent) override;
+ virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent) override;
};
QT_END_NAMESPACE
diff --git a/src/network/socket/qtcpserver.h b/src/network/socket/qtcpserver.h
index 192cbce54c..37df12919f 100644
--- a/src/network/socket/qtcpserver.h
+++ b/src/network/socket/qtcpserver.h
@@ -58,7 +58,7 @@ class Q_NETWORK_EXPORT QTcpServer : public QObject
{
Q_OBJECT
public:
- explicit QTcpServer(QObject *parent = Q_NULLPTR);
+ explicit QTcpServer(QObject *parent = nullptr);
virtual ~QTcpServer();
bool listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0);
@@ -75,7 +75,7 @@ public:
qintptr socketDescriptor() const;
bool setSocketDescriptor(qintptr socketDescriptor);
- bool waitForNewConnection(int msec = 0, bool *timedOut = Q_NULLPTR);
+ bool waitForNewConnection(int msec = 0, bool *timedOut = nullptr);
virtual bool hasPendingConnections() const;
virtual QTcpSocket *nextPendingConnection();
@@ -95,7 +95,7 @@ protected:
void addPendingConnection(QTcpSocket* socket);
QTcpServer(QAbstractSocket::SocketType socketType, QTcpServerPrivate &dd,
- QObject *parent = Q_NULLPTR);
+ QObject *parent = nullptr);
Q_SIGNALS:
void newConnection();
diff --git a/src/network/socket/qtcpserver_p.h b/src/network/socket/qtcpserver_p.h
index b7fae4c105..6ee8c5f0b1 100644
--- a/src/network/socket/qtcpserver_p.h
+++ b/src/network/socket/qtcpserver_p.h
@@ -93,13 +93,13 @@ public:
virtual void configureCreatedSocket();
// from QAbstractSocketEngineReceiver
- void readNotification() Q_DECL_OVERRIDE;
- void closeNotification() Q_DECL_OVERRIDE { readNotification(); }
- void writeNotification() Q_DECL_OVERRIDE {}
- void exceptionNotification() Q_DECL_OVERRIDE {}
- void connectionNotification() Q_DECL_OVERRIDE {}
+ void readNotification() override;
+ void closeNotification() override { readNotification(); }
+ void writeNotification() override {}
+ void exceptionNotification() override {}
+ void connectionNotification() override {}
#ifndef QT_NO_NETWORKPROXY
- void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *) Q_DECL_OVERRIDE {}
+ void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *) override {}
#endif
};
diff --git a/src/network/socket/qtcpsocket.h b/src/network/socket/qtcpsocket.h
index 3c3e3b69fd..b2c8bcc884 100644
--- a/src/network/socket/qtcpsocket.h
+++ b/src/network/socket/qtcpsocket.h
@@ -53,13 +53,13 @@ class Q_NETWORK_EXPORT QTcpSocket : public QAbstractSocket
{
Q_OBJECT
public:
- explicit QTcpSocket(QObject *parent = Q_NULLPTR);
+ explicit QTcpSocket(QObject *parent = nullptr);
virtual ~QTcpSocket();
protected:
- QTcpSocket(QTcpSocketPrivate &dd, QObject *parent = Q_NULLPTR);
+ QTcpSocket(QTcpSocketPrivate &dd, QObject *parent = nullptr);
QTcpSocket(QAbstractSocket::SocketType socketType, QTcpSocketPrivate &dd,
- QObject *parent = Q_NULLPTR);
+ QObject *parent = nullptr);
private:
Q_DISABLE_COPY(QTcpSocket)
diff --git a/src/network/socket/qudpsocket.h b/src/network/socket/qudpsocket.h
index 6ef10e2edb..ce4429d1cd 100644
--- a/src/network/socket/qudpsocket.h
+++ b/src/network/socket/qudpsocket.h
@@ -57,7 +57,7 @@ class Q_NETWORK_EXPORT QUdpSocket : public QAbstractSocket
{
Q_OBJECT
public:
- explicit QUdpSocket(QObject *parent = Q_NULLPTR);
+ explicit QUdpSocket(QObject *parent = nullptr);
virtual ~QUdpSocket();
#ifndef QT_NO_NETWORKINTERFACE
@@ -75,7 +75,7 @@ public:
bool hasPendingDatagrams() const;
qint64 pendingDatagramSize() const;
QNetworkDatagram receiveDatagram(qint64 maxSize = -1);
- qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *host = Q_NULLPTR, quint16 *port = Q_NULLPTR);
+ qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *host = nullptr, quint16 *port = nullptr);
qint64 writeDatagram(const QNetworkDatagram &datagram);
qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &host, quint16 port);
diff --git a/src/network/socket/socket.pri b/src/network/socket/socket.pri
index b2ee1a8054..a8a37492b7 100644
--- a/src/network/socket/socket.pri
+++ b/src/network/socket/socket.pri
@@ -1,7 +1,6 @@
# Qt network socket
HEADERS += socket/qabstractsocketengine_p.h \
- socket/qhttpsocketengine_p.h \
socket/qabstractsocket.h \
socket/qabstractsocket_p.h \
socket/qtcpsocket.h \
@@ -11,7 +10,6 @@ HEADERS += socket/qabstractsocketengine_p.h \
socket/qtcpserver_p.h
SOURCES += socket/qabstractsocketengine.cpp \
- socket/qhttpsocketengine.cpp \
socket/qabstractsocket.cpp \
socket/qtcpsocket.cpp \
socket/qudpsocket.cpp \
@@ -26,6 +24,13 @@ qtConfig(socks5) {
socket/qsocks5socketengine.cpp
}
+qtConfig(http) {
+ HEADERS += \
+ socket/qhttpsocketengine_p.h
+ SOURCES += \
+ socket/qhttpsocketengine.cpp
+}
+
# SCTP support.
qtConfig(sctp) {
diff --git a/src/network/ssl/qsslcertificate.h b/src/network/ssl/qsslcertificate.h
index 8b051a5c88..6cd66fd20f 100644
--- a/src/network/ssl/qsslcertificate.h
+++ b/src/network/ssl/qsslcertificate.h
@@ -154,7 +154,7 @@ public:
static bool importPkcs12(QIODevice *device,
QSslKey *key, QSslCertificate *cert,
- QList<QSslCertificate> *caCertificates = Q_NULLPTR,
+ QList<QSslCertificate> *caCertificates = nullptr,
const QByteArray &passPhrase=QByteArray());
Qt::HANDLE handle() const;
diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp
index 75a880f115..cbbbac85fe 100644
--- a/src/network/ssl/qsslconfiguration.cpp
+++ b/src/network/ssl/qsslconfiguration.cpp
@@ -221,6 +221,7 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const
d->peerVerifyMode == other.d->peerVerifyMode &&
d->peerVerifyDepth == other.d->peerVerifyDepth &&
d->allowRootCertOnDemandLoading == other.d->allowRootCertOnDemandLoading &&
+ d->backendConfig == other.d->backendConfig &&
d->sslOptions == other.d->sslOptions &&
d->sslSession == other.d->sslSession &&
d->sslSessionTicketLifeTimeHint == other.d->sslSessionTicketLifeTimeHint &&
@@ -263,6 +264,7 @@ bool QSslConfiguration::isNull() const
d->privateKey.isNull() &&
d->peerCertificate.isNull() &&
d->peerCertificateChain.count() == 0 &&
+ d->backendConfig.isEmpty() &&
d->sslOptions == QSslConfigurationPrivate::defaultSslOptions &&
d->sslSession.isNull() &&
d->sslSessionTicketLifeTimeHint == -1 &&
@@ -870,6 +872,60 @@ void QSslConfiguration::setDiffieHellmanParameters(const QSslDiffieHellmanParame
}
/*!
+ \since 5.11
+
+ Returns the backend-specific configuration.
+
+ Only options set by addBackendConfig() or setBackendConfig() will be
+ returned. The internal standard configuration of the backend is not reported.
+
+ \sa setBackendConfigOption(), setBackendConfig()
+ */
+QMap<QByteArray, QVariant> QSslConfiguration::backendConfig() const
+{
+ return d->backendConfig;
+}
+
+/*!
+ \since 5.11
+
+ Sets an option in the backend-specific configuration.
+
+ Options supported by the OpenSSL (>= 1.0.2) backend are available in the \l
+ {https://www.openssl.org/docs/manmaster/man3/SSL_CONF_cmd.html#SUPPORTED-CONFIGURATION-FILE-COMMANDS}
+ {supported configuration file commands} documentation. The expected type for
+ the \a value parameter is a QByteArray for all options. The \l
+ {https://www.openssl.org/docs/manmaster/man3/SSL_CONF_cmd.html#EXAMPLES}{examples}
+ show how to use some of the options.
+
+ \note The backend-specific configuration will be applied after the general
+ configuration. Using the backend-specific configuration to set a general
+ configuration option again will overwrite the general configuration option.
+
+ \sa backendConfig(), setBackendConfig()
+ */
+void QSslConfiguration::setBackendConfigOption(const QByteArray &name, const QVariant &value)
+{
+ d->backendConfig[name] = value;
+}
+
+/*!
+ \since 5.11
+
+ Sets or clears the backend-specific configuration.
+
+ Without a \a backendConfig parameter this function will clear the
+ backend-specific configuration. More information about the supported
+ options is available in the documentation of addBackendConfig().
+
+ \sa backendConfig(), setBackendConfigOption()
+ */
+void QSslConfiguration::setBackendConfig(const QMap<QByteArray, QVariant> &backendConfig)
+{
+ d->backendConfig = backendConfig;
+}
+
+/*!
\since 5.3
This function returns the protocol negotiated with the server
diff --git a/src/network/ssl/qsslconfiguration.h b/src/network/ssl/qsslconfiguration.h
index 1c57bebd65..b3264126dd 100644
--- a/src/network/ssl/qsslconfiguration.h
+++ b/src/network/ssl/qsslconfiguration.h
@@ -57,6 +57,7 @@
#define QSSLCONFIGURATION_H
#include <QtNetwork/qtnetworkglobal.h>
+#include <QtCore/qmap.h>
#include <QtCore/qshareddata.h>
#include <QtNetwork/qsslsocket.h>
#include <QtNetwork/qssl.h>
@@ -149,6 +150,10 @@ public:
QSslDiffieHellmanParameters diffieHellmanParameters() const;
void setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams);
+ QMap<QByteArray, QVariant> backendConfig() const;
+ void setBackendConfigOption(const QByteArray &name, const QVariant &value);
+ void setBackendConfig(const QMap<QByteArray, QVariant> &backendConfig = QMap<QByteArray, QVariant>());
+
static QSslConfiguration defaultConfiguration();
static void setDefaultConfiguration(const QSslConfiguration &configuration);
diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h
index 6adf2c9b54..38a98239db 100644
--- a/src/network/ssl/qsslconfiguration_p.h
+++ b/src/network/ssl/qsslconfiguration_p.h
@@ -67,6 +67,7 @@
// We mean it.
//
+#include <QtCore/qmap.h>
#include <QtNetwork/private/qtnetworkglobal_p.h>
#include "qsslconfiguration.h"
#include "qlist.h"
@@ -123,6 +124,8 @@ public:
QSslDiffieHellmanParameters dhParams;
+ QMap<QByteArray, QVariant> backendConfig;
+
QByteArray sslSession;
int sslSessionTicketLifeTimeHint;
diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
index cef503710c..386c280659 100644
--- a/src/network/ssl/qsslcontext_openssl.cpp
+++ b/src/network/ssl/qsslcontext_openssl.cpp
@@ -49,6 +49,11 @@
QT_BEGIN_NAMESPACE
+static inline QString msgErrorSettingBackendConfig(const QString &why)
+{
+ return QSslSocket::tr("Error when setting the OpenSSL configuration (%1)").arg(why);
+}
+
QSslContext::QSslContext()
: ctx(0),
pkey(0),
@@ -237,4 +242,70 @@ QString QSslContext::errorString() const
return errorStr;
}
+// static
+void QSslContext::applyBackendConfig(QSslContext *sslContext)
+{
+ if (sslContext->sslConfiguration.backendConfig().isEmpty())
+ return;
+
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+ if (QSslSocket::sslLibraryVersionNumber() >= 0x10002000L) {
+ QSharedPointer<SSL_CONF_CTX> cctx(q_SSL_CONF_CTX_new(), &q_SSL_CONF_CTX_free);
+ if (cctx) {
+ q_SSL_CONF_CTX_set_ssl_ctx(cctx.data(), sslContext->ctx);
+ q_SSL_CONF_CTX_set_flags(cctx.data(), SSL_CONF_FLAG_FILE);
+
+ const auto &backendConfig = sslContext->sslConfiguration.backendConfig();
+ for (auto i = backendConfig.constBegin(); i != backendConfig.constEnd(); ++i) {
+ if (!i.value().canConvert(QMetaType::QByteArray)) {
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ sslContext->errorStr = msgErrorSettingBackendConfig(
+ QSslSocket::tr("Expecting QByteArray for %1").arg(
+ QString::fromUtf8(i.key())));
+ return;
+ }
+
+ const QByteArray &value = i.value().toByteArray();
+ const int result = q_SSL_CONF_cmd(cctx.data(), i.key().constData(), value.constData());
+ if (result == 2)
+ continue;
+
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ switch (result) {
+ case 0:
+ sslContext->errorStr = msgErrorSettingBackendConfig(
+ QSslSocket::tr("An error occurred attempting to set %1 to %2").arg(
+ QString::fromUtf8(i.key()), QString::fromUtf8(value)));
+ return;
+ case 1:
+ sslContext->errorStr = msgErrorSettingBackendConfig(
+ QSslSocket::tr("Wrong value for %1 (%2)").arg(
+ QString::fromUtf8(i.key()), QString::fromUtf8(value)));
+ return;
+ default:
+ sslContext->errorStr = msgErrorSettingBackendConfig(
+ QSslSocket::tr("Unrecognized command %1 = %2").arg(
+ QString::fromUtf8(i.key()), QString::fromUtf8(value)));
+ return;
+ }
+ }
+
+ if (q_SSL_CONF_CTX_finish(cctx.data()) == 0) {
+ sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_finish() failed"));
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ }
+ } else {
+ sslContext->errorStr = msgErrorSettingBackendConfig(QSslSocket::tr("SSL_CONF_CTX_new() failed"));
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ }
+ } else
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
+ {
+ // specific algorithms requested, but not possible to set
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ sslContext->errorStr = msgErrorSettingBackendConfig(
+ QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/network/ssl/qsslcontext_openssl11.cpp b/src/network/ssl/qsslcontext_openssl11.cpp
index 787b6ae3f5..7be7be46b8 100644
--- a/src/network/ssl/qsslcontext_openssl11.cpp
+++ b/src/network/ssl/qsslcontext_openssl11.cpp
@@ -260,6 +260,7 @@ init_context:
#ifdef OPENSSL_NO_EC
sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version with disabled elliptic curves"));
sslContext->errorCode = QSslError::UnspecifiedError;
+ return;
#else
// Set the curves to be used.
std::vector<int> curves;
@@ -269,9 +270,12 @@ init_context:
if (!q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_SET_CURVES, long(curves.size()), &curves[0])) {
sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
sslContext->errorCode = QSslError::UnspecifiedError;
+ return;
}
#endif
}
+
+ applyBackendConfig(sslContext);
}
QT_END_NAMESPACE
diff --git a/src/network/ssl/qsslcontext_openssl_p.h b/src/network/ssl/qsslcontext_openssl_p.h
index 06a31af5e5..48beebf134 100644
--- a/src/network/ssl/qsslcontext_openssl_p.h
+++ b/src/network/ssl/qsslcontext_openssl_p.h
@@ -107,6 +107,7 @@ protected:
private:
static void initSslContext(QSslContext* sslContext, QSslSocket::SslMode mode, const QSslConfiguration &configuration,
bool allowRootCertOnDemandLoading);
+ static void applyBackendConfig(QSslContext *sslContext);
private:
SSL_CTX* ctx;
diff --git a/src/network/ssl/qsslcontext_opensslpre11.cpp b/src/network/ssl/qsslcontext_opensslpre11.cpp
index 9c01c2f2dc..eea821804f 100644
--- a/src/network/ssl/qsslcontext_opensslpre11.cpp
+++ b/src/network/ssl/qsslcontext_opensslpre11.cpp
@@ -340,6 +340,7 @@ init_context:
const_cast<int *>(reinterpret_cast<const int *>(qcurves.data())))) {
sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
sslContext->errorCode = QSslError::UnspecifiedError;
+ return;
}
} else
#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
@@ -347,8 +348,11 @@ init_context:
// specific curves requested, but not possible to set -> error
sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
sslContext->errorCode = QSslError::UnspecifiedError;
+ return;
}
}
+
+ applyBackendConfig(sslContext);
}
QT_END_NAMESPACE
diff --git a/src/network/ssl/qssldiffiehellmanparameters.cpp b/src/network/ssl/qssldiffiehellmanparameters.cpp
index cb6c474861..7fbcff2861 100644
--- a/src/network/ssl/qssldiffiehellmanparameters.cpp
+++ b/src/network/ssl/qssldiffiehellmanparameters.cpp
@@ -161,7 +161,7 @@ QSslDiffieHellmanParameters::QSslDiffieHellmanParameters(const QSslDiffieHellman
}
/*!
- \fn QSslDiffieHellmanParameters(QSslDiffieHellmanParameters &&other)
+ \fn QSslDiffieHellmanParameters::QSslDiffieHellmanParameters(QSslDiffieHellmanParameters &&other)
Move-constructs from \a other.
diff --git a/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp b/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
index 5ebad822f1..00e9be91d8 100644
--- a/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
+++ b/src/network/ssl/qssldiffiehellmanparameters_openssl.cpp
@@ -161,12 +161,12 @@ void QSslDiffieHellmanParametersPrivate::decodePem(const QByteArray &pem)
return;
}
- DH *dh = Q_NULLPTR;
+ DH *dh = nullptr;
q_PEM_read_bio_DHparams(bio, &dh, 0, 0);
if (dh) {
if (isSafeDH(dh)) {
- char *buf = Q_NULLPTR;
+ char *buf = nullptr;
int len = q_i2d_DHparams(dh, reinterpret_cast<unsigned char **>(&buf));
if (len > 0)
derData = QByteArray(buf, len);
diff --git a/src/network/ssl/qsslkey_qt.cpp b/src/network/ssl/qsslkey_qt.cpp
index fd76d3353a..a85fed21ed 100644
--- a/src/network/ssl/qsslkey_qt.cpp
+++ b/src/network/ssl/qsslkey_qt.cpp
@@ -43,6 +43,7 @@
#include <QtCore/qdatastream.h>
#include <QtCore/qcryptographichash.h>
+#include <QtCore/qrandom.h>
QT_USE_NAMESPACE
@@ -286,10 +287,8 @@ QByteArray QSslKeyPrivate::toPem(const QByteArray &passPhrase) const
if (type == QSsl::PrivateKey && !passPhrase.isEmpty()) {
// ### use a cryptographically secure random number generator
- QByteArray iv;
- iv.resize(8);
- for (int i = 0; i < iv.size(); ++i)
- iv[i] = (qrand() & 0xff);
+ quint64 random = QRandomGenerator::system()->generate64();
+ QByteArray iv = QByteArray::fromRawData(reinterpret_cast<const char *>(&random), sizeof(random));
Cipher cipher = DesEde3Cbc;
const QByteArray key = deriveKey(cipher, passPhrase, iv);
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index adff568f5b..833d676192 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -215,7 +215,7 @@
*/
/*!
- \fn QSslSocket::encrypted()
+ \fn void QSslSocket::encrypted()
This signal is emitted when QSslSocket enters encrypted mode. After this
signal has been emitted, QSslSocket::isEncrypted() will return true, and
@@ -225,7 +225,7 @@
*/
/*!
- \fn QSslSocket::modeChanged(QSslSocket::SslMode mode)
+ \fn void QSslSocket::modeChanged(QSslSocket::SslMode mode)
This signal is emitted when QSslSocket changes from \l
QSslSocket::UnencryptedMode to either \l QSslSocket::SslClientMode or \l
@@ -235,7 +235,7 @@
*/
/*!
- \fn QSslSocket::encryptedBytesWritten(qint64 written)
+ \fn void QSslSocket::encryptedBytesWritten(qint64 written)
\since 4.4
This signal is emitted when QSslSocket writes its encrypted data to the
@@ -922,6 +922,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
d->configuration.peerVerifyDepth = configuration.peerVerifyDepth();
d->configuration.peerVerifyMode = configuration.peerVerifyMode();
d->configuration.protocol = configuration.protocol();
+ d->configuration.backendConfig = configuration.backendConfig();
d->configuration.sslOptions = configuration.d->sslOptions;
d->configuration.sslSession = configuration.sessionTicket();
d->configuration.sslSessionTicketLifeTimeHint = configuration.sessionTicketLifeTimeHint();
@@ -2256,6 +2257,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
ptr->peerVerifyDepth = global->peerVerifyDepth;
ptr->sslOptions = global->sslOptions;
ptr->ellipticCurves = global->ellipticCurves;
+ ptr->backendConfig = global->backendConfig;
}
/*!
@@ -2659,6 +2661,20 @@ QByteArray QSslSocketPrivate::peek(qint64 maxSize)
/*!
\internal
*/
+qint64 QSslSocketPrivate::skip(qint64 maxSize)
+{
+ if (mode == QSslSocket::UnencryptedMode && !autoStartHandshake)
+ return plainSocket->skip(maxSize);
+
+ // In encrypted mode, the SSL backend writes decrypted data directly into the
+ // QIODevice's read buffer. As this buffer is always emptied by the caller,
+ // we need to wait for more incoming data.
+ return (state == QAbstractSocket::ConnectedState) ? Q_INT64_C(0) : Q_INT64_C(-1);
+}
+
+/*!
+ \internal
+*/
bool QSslSocketPrivate::flush()
{
#ifdef QSSLSOCKET_DEBUG
diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h
index 39e70bccda..c66ebdde54 100644
--- a/src/network/ssl/qsslsocket.h
+++ b/src/network/ssl/qsslsocket.h
@@ -79,22 +79,22 @@ public:
AutoVerifyPeer
};
- explicit QSslSocket(QObject *parent = Q_NULLPTR);
+ explicit QSslSocket(QObject *parent = nullptr);
~QSslSocket();
- void resume() Q_DECL_OVERRIDE; // to continue after proxy authentication required, SSL errors etc.
+ void resume() override; // to continue after proxy authentication required, SSL errors etc.
// Autostarting the SSL client handshake.
void connectToHostEncrypted(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
bool setSocketDescriptor(qintptr socketDescriptor, SocketState state = ConnectedState,
- OpenMode openMode = ReadWrite) Q_DECL_OVERRIDE;
+ OpenMode openMode = ReadWrite) override;
using QAbstractSocket::connectToHost;
- void connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) Q_DECL_OVERRIDE;
- void disconnectFromHost() Q_DECL_OVERRIDE;
+ void connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) override;
+ void disconnectFromHost() override;
- virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) Q_DECL_OVERRIDE;
- virtual QVariant socketOption(QAbstractSocket::SocketOption option) Q_DECL_OVERRIDE;
+ virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) override;
+ virtual QVariant socketOption(QAbstractSocket::SocketOption option) override;
SslMode mode() const;
bool isEncrypted() const;
@@ -112,16 +112,16 @@ public:
void setPeerVerifyName(const QString &hostName);
// From QIODevice
- qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- qint64 bytesToWrite() const Q_DECL_OVERRIDE;
- bool canReadLine() const Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- bool atEnd() const Q_DECL_OVERRIDE;
+ qint64 bytesAvailable() const override;
+ qint64 bytesToWrite() const override;
+ bool canReadLine() const override;
+ void close() override;
+ bool atEnd() const override;
bool flush(); // ### Qt6: remove me (implementation moved to private flush())
void abort();
// From QAbstractSocket:
- void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE;
+ void setReadBufferSize(qint64 size) override;
// Similar to QIODevice's:
qint64 encryptedBytesAvailable() const;
@@ -179,11 +179,11 @@ public:
QT_DEPRECATED_X("Use QSslConfiguration::systemCaCertificates()") static QList<QSslCertificate> systemCaCertificates();
#endif // QT_DEPRECATED_SINCE(5, 5)
- bool waitForConnected(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForConnected(int msecs = 30000) override;
bool waitForEncrypted(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
- bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
- bool waitForDisconnected(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForReadyRead(int msecs = 30000) override;
+ bool waitForBytesWritten(int msecs = 30000) override;
+ bool waitForDisconnected(int msecs = 30000) override;
QList<QSslError> sslErrors() const;
@@ -209,8 +209,8 @@ Q_SIGNALS:
void preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator);
protected:
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 readData(char *data, qint64 maxlen) override;
+ qint64 writeData(const char *data, qint64 len) override;
private:
Q_DECLARE_PRIVATE(QSslSocket)
diff --git a/src/network/ssl/qsslsocket_mac.cpp b/src/network/ssl/qsslsocket_mac.cpp
index 5312464964..046b432252 100644
--- a/src/network/ssl/qsslsocket_mac.cpp
+++ b/src/network/ssl/qsslsocket_mac.cpp
@@ -49,6 +49,7 @@
#include <QtCore/qmessageauthenticationcode.h>
#include <QtCore/qoperatingsystemversion.h>
#include <QtCore/qcryptographichash.h>
+#include <QtCore/qsystemdetection.h>
#include <QtCore/qdatastream.h>
#include <QtCore/qsysinfo.h>
#include <QtCore/qvector.h>
@@ -161,14 +162,15 @@ EphemeralSecKeychain::~EphemeralSecKeychain()
}
#endif // Q_OS_MACOS
-}
+
+} // unnamed namespace
static SSLContextRef qt_createSecureTransportContext(QSslSocket::SslMode mode)
{
const bool isServer = mode == QSslSocket::SslServerMode;
const SSLProtocolSide side = isServer ? kSSLServerSide : kSSLClientSide;
// We never use kSSLDatagramType, so it's kSSLStreamType unconditionally.
- SSLContextRef context = SSLCreateContext(Q_NULLPTR, side, kSSLStreamType);
+ SSLContextRef context = SSLCreateContext(nullptr, side, kSSLStreamType);
if (!context)
qCWarning(lcSsl) << "SSLCreateContext failed";
return context;
@@ -357,7 +359,7 @@ void QSslSocketPrivate::resetDefaultEllipticCurves()
}
QSslSocketBackendPrivate::QSslSocketBackendPrivate()
- : context(Q_NULLPTR)
+ : context(nullptr)
{
}
@@ -373,6 +375,43 @@ void QSslSocketBackendPrivate::continueHandshake()
#endif
Q_Q(QSslSocket);
connectionEncrypted = true;
+
+#if QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, __IPHONE_11_0, __TVOS_11_0, __WATCHOS_4_0)
+ // Unlike OpenSSL, Secure Transport does not allow to negotiate protocols via
+ // a callback during handshake. We can only set our list of preferred protocols
+ // (and send it during handshake) and then receive what our peer has sent to us.
+ // And here we can finally try to find a match (if any).
+ if (__builtin_available(iOS 11.0, tvOS 11.0, watchOS 4.0, *)) {
+ const auto &requestedProtocols = configuration.nextAllowedProtocols;
+ if (const int requestedCount = requestedProtocols.size()) {
+ configuration.nextProtocolNegotiationStatus = QSslConfiguration::NextProtocolNegotiationNone;
+ configuration.nextNegotiatedProtocol.clear();
+
+ QCFType<CFArrayRef> cfArray;
+ const OSStatus result = SSLCopyALPNProtocols(context, &cfArray);
+ if (result == errSecSuccess && cfArray && CFArrayGetCount(cfArray)) {
+ const int size = CFArrayGetCount(cfArray);
+ QVector<QString> peerProtocols(size);
+ for (int i = 0; i < size; ++i)
+ peerProtocols[i] = QString::fromCFString((CFStringRef)CFArrayGetValueAtIndex(cfArray, i));
+
+ for (int i = 0; i < requestedCount; ++i) {
+ const auto requestedName = QString::fromLatin1(requestedProtocols[i]);
+ for (int j = 0; j < size; ++j) {
+ if (requestedName == peerProtocols[j]) {
+ configuration.nextNegotiatedProtocol = requestedName.toLatin1();
+ configuration.nextProtocolNegotiationStatus = QSslConfiguration::NextProtocolNegotiationNegotiated;
+ break;
+ }
+ }
+ if (configuration.nextProtocolNegotiationStatus == QSslConfiguration::NextProtocolNegotiationNegotiated)
+ break;
+ }
+ }
+ }
+ }
+#endif // QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE
+
emit q->encrypted();
if (autoStartHandshake && pendingClose) {
pendingClose = false;
@@ -839,6 +878,29 @@ bool QSslSocketBackendPrivate::initSslContext()
return false;
}
+#if QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_NA, __IPHONE_11_0, __TVOS_11_0, __WATCHOS_4_0)
+ if (__builtin_available(iOS 11.0, tvOS 11.0, watchOS 4.0, *)) {
+ const auto protocolNames = configuration.nextAllowedProtocols;
+ QCFType<CFMutableArrayRef> cfNames(CFArrayCreateMutable(nullptr, 0, &kCFTypeArrayCallBacks));
+ if (cfNames) {
+ for (const QByteArray &name : protocolNames) {
+ QCFString cfName(QString::fromLatin1(name).toCFString());
+ CFArrayAppendValue(cfNames, cfName);
+ }
+
+ if (CFArrayGetCount(cfNames)) {
+ // Up to the application layer to check that negotiation
+ // failed, and handle this non-TLS error, we do not handle
+ // the result of this call as an error:
+ if (SSLSetALPNProtocols(context, cfNames) != errSecSuccess)
+ qCWarning(lcSsl) << "SSLSetALPNProtocols failed - too long protocol names?";
+ }
+ } else {
+ qCWarning(lcSsl) << "failed to allocate ALPN names array";
+ }
+ }
+#endif // QT_DARWIN_PLATFORM_SDK_EQUAL_OR_ABOVE
+
if (mode == QSslSocket::SslClientMode) {
// enable Server Name Indication (SNI)
QString tlsHostName(verificationPeerName.isEmpty() ? q->peerName() : verificationPeerName);
@@ -886,7 +948,7 @@ bool QSslSocketBackendPrivate::initSslContext()
void QSslSocketBackendPrivate::destroySslContext()
{
- context.reset(Q_NULLPTR);
+ context.reset(nullptr);
}
static QByteArray _q_makePkcs12(const QList<QSslCertificate> &certs, const QSslKey &key, const QString &passPhrase);
diff --git a/src/network/ssl/qsslsocket_mac_p.h b/src/network/ssl/qsslsocket_mac_p.h
index 9e1d18981e..34e30ebb16 100644
--- a/src/network/ssl/qsslsocket_mac_p.h
+++ b/src/network/ssl/qsslsocket_mac_p.h
@@ -86,14 +86,14 @@ public:
virtual ~QSslSocketBackendPrivate();
// Final-overriders (QSslSocketPrivate):
- void continueHandshake() Q_DECL_OVERRIDE;
- void disconnected() Q_DECL_OVERRIDE;
- void disconnectFromHost() Q_DECL_OVERRIDE;
- QSslCipher sessionCipher() const Q_DECL_OVERRIDE;
- QSsl::SslProtocol sessionProtocol() const Q_DECL_OVERRIDE;
- void startClientEncryption() Q_DECL_OVERRIDE;
- void startServerEncryption() Q_DECL_OVERRIDE;
- void transmit() Q_DECL_OVERRIDE;
+ void continueHandshake() override;
+ void disconnected() override;
+ void disconnectFromHost() override;
+ QSslCipher sessionCipher() const override;
+ QSsl::SslProtocol sessionProtocol() const override;
+ void startClientEncryption() override;
+ void startServerEncryption() override;
+ void transmit() override;
static QList<QSslError> verify(QList<QSslCertificate> certificateChain,
const QString &hostName);
diff --git a/src/network/ssl/qsslsocket_openssl11.cpp b/src/network/ssl/qsslsocket_openssl11.cpp
index b6d18943a5..96626b6a0f 100644
--- a/src/network/ssl/qsslsocket_openssl11.cpp
+++ b/src/network/ssl/qsslsocket_openssl11.cpp
@@ -73,9 +73,6 @@ QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_opensslInitMutex, (QMutex::Recursive))
-/*!
- \internal
-*/
void QSslSocketPrivate::deinitialize()
{
// This function exists only for compatibility with the pre-11 code,
diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h
index 7f9e884045..2a800cdc34 100644
--- a/src/network/ssl/qsslsocket_openssl_p.h
+++ b/src/network/ssl/qsslsocket_openssl_p.h
@@ -132,22 +132,22 @@ public:
#endif
// Platform specific functions
- void startClientEncryption() Q_DECL_OVERRIDE;
- void startServerEncryption() Q_DECL_OVERRIDE;
- void transmit() Q_DECL_OVERRIDE;
+ void startClientEncryption() override;
+ void startServerEncryption() override;
+ void transmit() override;
bool startHandshake();
- void disconnectFromHost() Q_DECL_OVERRIDE;
- void disconnected() Q_DECL_OVERRIDE;
- QSslCipher sessionCipher() const Q_DECL_OVERRIDE;
- QSsl::SslProtocol sessionProtocol() const Q_DECL_OVERRIDE;
- void continueHandshake() Q_DECL_OVERRIDE;
+ void disconnectFromHost() override;
+ void disconnected() override;
+ QSslCipher sessionCipher() const override;
+ QSsl::SslProtocol sessionProtocol() const override;
+ void continueHandshake() override;
bool checkSslErrors();
void storePeerCertificates();
unsigned int tlsPskClientCallback(const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len);
unsigned int tlsPskServerCallback(const char *identity, unsigned char *psk, unsigned int max_psk_len);
#ifdef Q_OS_WIN
void fetchCaRootForCert(const QSslCertificate &cert);
- void _q_caRootLoaded(QSslCertificate,QSslCertificate) Q_DECL_OVERRIDE;
+ void _q_caRootLoaded(QSslCertificate,QSslCertificate) override;
#endif
Q_AUTOTEST_EXPORT static long setupOpenSslOptions(QSsl::SslProtocol protocol, QSsl::SslOptions sslOptions);
diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
index 3a236a1300..9bb67771fd 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
+++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
@@ -402,6 +402,14 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a, EVP_PKEY *b, b, return -
DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *b, b, return -1, return)
DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, b, int c, c, return -1, return)
DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return 0, return)
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return 0, return);
+DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return);
+DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b, return, return);
+DEFINEFUNC2(unsigned int, SSL_CONF_CTX_set_flags, SSL_CONF_CTX *a, a, unsigned int b, b, return 0, return);
+DEFINEFUNC(int, SSL_CONF_CTX_finish, SSL_CONF_CTX *a, a, return 0, return);
+DEFINEFUNC3(int, SSL_CONF_cmd, SSL_CONF_CTX *a, a, const char *b, b, const char *c, c, return 0, return);
+#endif
DEFINEFUNC(void, SSL_free, SSL *a, a, return, DUMMYARG)
DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return 0, return)
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
@@ -1017,7 +1025,7 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(EC_GROUP_get_degree)
#endif
RESOLVEFUNC(BN_num_bits)
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#if QT_CONFIG(opensslv11)
RESOLVEFUNC(BN_is_word)
#endif
RESOLVEFUNC(BN_mod_word)
@@ -1105,6 +1113,14 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey)
RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
RESOLVEFUNC(SSL_CTX_get_cert_store);
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+ RESOLVEFUNC(SSL_CONF_CTX_new);
+ RESOLVEFUNC(SSL_CONF_CTX_free);
+ RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx);
+ RESOLVEFUNC(SSL_CONF_CTX_set_flags);
+ RESOLVEFUNC(SSL_CONF_CTX_finish);
+ RESOLVEFUNC(SSL_CONF_cmd);
+#endif
RESOLVEFUNC(SSL_accept)
RESOLVEFUNC(SSL_clear)
RESOLVEFUNC(SSL_connect)
diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
index 796bf2d4f5..be67f38b64 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -232,9 +232,10 @@ BIO *q_BIO_new_mem_buf(void *a, int b);
int q_BIO_read(BIO *a, void *b, int c);
Q_AUTOTEST_EXPORT int q_BIO_write(BIO *a, const void *b, int c);
int q_BN_num_bits(const BIGNUM *a);
-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+
+#if QT_CONFIG(opensslv11)
int q_BN_is_word(BIGNUM *a, BN_ULONG w);
-#else
+#else // opensslv11
// BN_is_word is implemented purely as a
// macro in OpenSSL < 1.1. It doesn't
// call any functions.
@@ -245,7 +246,8 @@ int q_BN_is_word(BIGNUM *a, BN_ULONG w);
//
// Users are required to include <openssl/bn.h>.
#define q_BN_is_word BN_is_word
-#endif // OPENSSL_VERSION_NUMBER >= 0x10100000L
+#endif // !opensslv11
+
BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w);
#ifndef OPENSSL_NO_EC
const EC_GROUP* q_EC_KEY_get0_group(const EC_KEY* k);
@@ -350,6 +352,14 @@ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b);
int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c);
X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a);
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+SSL_CONF_CTX *q_SSL_CONF_CTX_new();
+void q_SSL_CONF_CTX_free(SSL_CONF_CTX *a);
+void q_SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *a, SSL_CTX *b);
+unsigned int q_SSL_CONF_CTX_set_flags(SSL_CONF_CTX *a, unsigned int b);
+int q_SSL_CONF_CTX_finish(SSL_CONF_CTX *a);
+int q_SSL_CONF_cmd(SSL_CONF_CTX *a, const char *b, const char *c);
+#endif
void q_SSL_free(SSL *a);
STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a);
#if OPENSSL_VERSION_NUMBER >= 0x10000000L
diff --git a/src/network/ssl/qsslsocket_opensslpre11.cpp b/src/network/ssl/qsslsocket_opensslpre11.cpp
index e51888c5f2..5782df65cc 100644
--- a/src/network/ssl/qsslsocket_opensslpre11.cpp
+++ b/src/network/ssl/qsslsocket_opensslpre11.cpp
@@ -198,9 +198,6 @@ static void q_OpenSSL_add_all_algorithms_safe()
}
-/*!
- \internal
-*/
void QSslSocketPrivate::deinitialize()
{
q_CRYPTO_set_id_callback(0);
@@ -290,8 +287,7 @@ void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
//its own cert bundle rather than the system one.
//Same logic that disables the unix on demand cert loading.
//Unlike unix, we do preload the certificates from the cert store.
- if ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) >= QSysInfo::WV_6_0)
- s_loadRootCertsOnDemand = true;
+ s_loadRootCertsOnDemand = true;
#endif
}
diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h
index 5893417b69..6f34c6c888 100644
--- a/src/network/ssl/qsslsocket_p.h
+++ b/src/network/ssl/qsslsocket_p.h
@@ -170,7 +170,7 @@ public:
static void checkSettingSslContext(QSslSocket*, QSharedPointer<QSslContext>);
static QSharedPointer<QSslContext> sslContext(QSslSocket *socket);
bool isPaused() const;
- bool bind(const QHostAddress &address, quint16, QAbstractSocket::BindMode) Q_DECL_OVERRIDE;
+ bool bind(const QHostAddress &address, quint16, QAbstractSocket::BindMode) override;
void _q_connectedSlot();
void _q_hostFoundSlot();
void _q_disconnectedSlot();
@@ -190,9 +190,10 @@ public:
static QList<QByteArray> unixRootCertDirectories(); // used also by QSslContext
- virtual qint64 peek(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
- virtual QByteArray peek(qint64 maxSize) Q_DECL_OVERRIDE;
- bool flush() Q_DECL_OVERRIDE;
+ virtual qint64 peek(char *data, qint64 maxSize) override;
+ virtual QByteArray peek(qint64 maxSize) override;
+ qint64 skip(qint64 maxSize) override;
+ bool flush() override;
// Platform specific functions
virtual void startClientEncryption() = 0;
diff --git a/src/network/ssl/qsslsocket_winrt.cpp b/src/network/ssl/qsslsocket_winrt.cpp
index 762b393738..f64ae2e020 100644
--- a/src/network/ssl/qsslsocket_winrt.cpp
+++ b/src/network/ssl/qsslsocket_winrt.cpp
@@ -522,7 +522,7 @@ HRESULT QSslSocketBackendPrivate::onSslUpgrade(IAsyncAction *action, AsyncStatus
QList<QSslCertificate> peerCertificateChain;
if (certificate) {
ComPtr<IAsyncOperation<CertificateChain *>> op;
- hr = certificate->BuildChainAsync(Q_NULLPTR, &op);
+ hr = certificate->BuildChainAsync(nullptr, &op);
Q_ASSERT_SUCCEEDED(hr);
ComPtr<ICertificateChain> certificateChain;
hr = QWinRTFunctions::await(op, certificateChain.GetAddressOf());
diff --git a/src/network/ssl/qsslsocket_winrt_p.h b/src/network/ssl/qsslsocket_winrt_p.h
index 1043aeee11..030db6d4fa 100644
--- a/src/network/ssl/qsslsocket_winrt_p.h
+++ b/src/network/ssl/qsslsocket_winrt_p.h
@@ -80,14 +80,14 @@ public:
~QSslSocketBackendPrivate();
// Platform specific functions
- void startClientEncryption() Q_DECL_OVERRIDE;
- void startServerEncryption() Q_DECL_OVERRIDE;
- void transmit() Q_DECL_OVERRIDE;
- void disconnectFromHost() Q_DECL_OVERRIDE;
- void disconnected() Q_DECL_OVERRIDE;
- QSslCipher sessionCipher() const Q_DECL_OVERRIDE;
- QSsl::SslProtocol sessionProtocol() const Q_DECL_OVERRIDE;
- void continueHandshake() Q_DECL_OVERRIDE;
+ void startClientEncryption() override;
+ void startServerEncryption() override;
+ void transmit() override;
+ void disconnectFromHost() override;
+ void disconnected() override;
+ QSslCipher sessionCipher() const override;
+ QSsl::SslProtocol sessionProtocol() const override;
+ void continueHandshake() override;
static QList<QSslCipher> defaultCiphers();
static QList<QSslError> verify(const QList<QSslCertificate> &certificateChain, const QString &hostName);
diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
index ec673e8726..47e8531959 100644
--- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
+++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
@@ -68,13 +68,13 @@ public:
delete m_shaders;
}
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
delete m_shaders;
m_shaders = 0;
}
- void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *) override
{
}
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
index 0f96732278..d1ed621790 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
@@ -108,37 +108,37 @@ public:
QGL2PaintEngineEx();
~QGL2PaintEngineEx();
- bool begin(QPaintDevice *device) Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *device) override;
void ensureActive();
- bool end() Q_DECL_OVERRIDE;
-
- virtual void clipEnabledChanged() Q_DECL_OVERRIDE;
- virtual void penChanged() Q_DECL_OVERRIDE;
- virtual void brushChanged() Q_DECL_OVERRIDE;
- virtual void brushOriginChanged() Q_DECL_OVERRIDE;
- virtual void opacityChanged() Q_DECL_OVERRIDE;
- virtual void compositionModeChanged() Q_DECL_OVERRIDE;
- virtual void renderHintsChanged() Q_DECL_OVERRIDE;
- virtual void transformChanged() Q_DECL_OVERRIDE;
-
- virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
+ bool end() override;
+
+ virtual void clipEnabledChanged() override;
+ virtual void penChanged() override;
+ virtual void brushChanged() override;
+ virtual void brushOriginChanged() override;
+ virtual void opacityChanged() override;
+ virtual void compositionModeChanged() override;
+ virtual void renderHintsChanged() override;
+ virtual void transformChanged() override;
+
+ virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
virtual void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap,
- QPainter::PixmapFragmentHints hints) Q_DECL_OVERRIDE;
+ QPainter::PixmapFragmentHints hints) override;
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- virtual void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
- virtual void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
- virtual void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
- virtual void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ virtual void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
+ virtual void fill(const QVectorPath &path, const QBrush &brush) override;
+ virtual void stroke(const QVectorPath &path, const QPen &pen) override;
+ virtual void clip(const QVectorPath &path, Qt::ClipOperation op) override;
- virtual void drawStaticTextItem(QStaticTextItem *textItem) Q_DECL_OVERRIDE;
+ virtual void drawStaticTextItem(QStaticTextItem *textItem) override;
bool drawTexture(const QRectF &r, GLuint textureId, const QSize &size, const QRectF &sr);
- Type type() const Q_DECL_OVERRIDE { return OpenGL2; }
+ Type type() const override { return OpenGL2; }
- virtual void setState(QPainterState *s) Q_DECL_OVERRIDE;
- virtual QPainterState *createState(QPainterState *orig) const Q_DECL_OVERRIDE;
+ virtual void setState(QPainterState *s) override;
+ virtual QPainterState *createState(QPainterState *orig) const override;
inline QGL2PaintEngineState *state() {
return static_cast<QGL2PaintEngineState *>(QPaintEngineEx::state());
}
@@ -146,16 +146,16 @@ public:
return static_cast<const QGL2PaintEngineState *>(QPaintEngineEx::state());
}
- void beginNativePainting() Q_DECL_OVERRIDE;
- void endNativePainting() Q_DECL_OVERRIDE;
+ void beginNativePainting() override;
+ void endNativePainting() override;
void invalidateState();
void setRenderTextActive(bool);
bool isNativePaintingActive() const;
- bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE { return false; }
- bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE;
+ bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const override { return false; }
+ bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const override;
void setTranslateZ(GLfloat z);
@@ -244,7 +244,7 @@ public:
void updateClipScissorTest();
void setScissor(const QRect &rect);
void regenerateClip();
- void systemStateChanged() Q_DECL_OVERRIDE;
+ void systemStateChanged() override;
static QGLEngineShaderManager* shaderManagerForEngine(QGL2PaintEngineEx *engine) { return engine->d_func()->shaderManager; }
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index 95401d10c1..e76216ef5d 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -79,7 +79,7 @@ struct QGLGlyphTexture : public QOpenGLSharedResource
#endif
}
- void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *context) override
{
const QGLContext *ctx = QGLContext::fromOpenGLContext(context);
#ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG
@@ -93,7 +93,7 @@ struct QGLGlyphTexture : public QOpenGLSharedResource
ctx->contextHandle()->functions()->glDeleteTextures(1, &m_texture);
}
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
m_texture = 0;
m_fbo = 0;
@@ -113,12 +113,12 @@ public:
QGLTextureGlyphCache(QFontEngine::GlyphFormat format, const QTransform &matrix);
~QGLTextureGlyphCache();
- virtual void createTextureData(int width, int height) Q_DECL_OVERRIDE;
- virtual void resizeTextureData(int width, int height) Q_DECL_OVERRIDE;
- virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
- virtual int glyphPadding() const Q_DECL_OVERRIDE;
- virtual int maxTextureWidth() const Q_DECL_OVERRIDE;
- virtual int maxTextureHeight() const Q_DECL_OVERRIDE;
+ virtual void createTextureData(int width, int height) override;
+ virtual void resizeTextureData(int width, int height) override;
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) override;
+ virtual int glyphPadding() const override;
+ virtual int maxTextureWidth() const override;
+ virtual int maxTextureHeight() const override;
inline GLuint texture() const {
QGLTextureGlyphCache *that = const_cast<QGLTextureGlyphCache *>(this);
diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro
index 742be61a50..8b2349ff2f 100644
--- a/src/opengl/opengl.pro
+++ b/src/opengl/opengl.pro
@@ -5,7 +5,6 @@ DEFINES += QT_NO_USING_NAMESPACE QT_NO_FOREACH
msvc:equals(QT_ARCH, i386): QMAKE_LFLAGS += /BASE:0x63000000
solaris-cc*:QMAKE_CXXFLAGS_RELEASE -= -O2
-irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
QMAKE_DOCS = $$PWD/doc/qtopengl.qdocconf
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index a2124974d7..d9f2113c14 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -1292,19 +1292,19 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
switch (versionString[2].toLatin1()) {
case '5':
versionFlags |= QGLFormat::OpenGL_Version_1_5;
- // fall through
+ Q_FALLTHROUGH();
case '4':
versionFlags |= QGLFormat::OpenGL_Version_1_4;
- // fall through
+ Q_FALLTHROUGH();
case '3':
versionFlags |= QGLFormat::OpenGL_Version_1_3;
- // fall through
+ Q_FALLTHROUGH();
case '2':
versionFlags |= QGLFormat::OpenGL_Version_1_2;
- // fall through
+ Q_FALLTHROUGH();
case '1':
versionFlags |= QGLFormat::OpenGL_Version_1_1;
- // fall through
+ Q_FALLTHROUGH();
default:
break;
}
@@ -1329,13 +1329,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
switch (versionString[2].toLatin1()) {
case '3':
versionFlags |= QGLFormat::OpenGL_Version_3_3;
- // fall through
+ Q_FALLTHROUGH();
case '2':
versionFlags |= QGLFormat::OpenGL_Version_3_2;
- // fall through
+ Q_FALLTHROUGH();
case '1':
versionFlags |= QGLFormat::OpenGL_Version_3_1;
- // fall through
+ Q_FALLTHROUGH();
case '0':
break;
default:
@@ -1360,13 +1360,13 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
switch (versionString[2].toLatin1()) {
case '3':
versionFlags |= QGLFormat::OpenGL_Version_4_3;
- // fall through
+ Q_FALLTHROUGH();
case '2':
versionFlags |= QGLFormat::OpenGL_Version_4_2;
- // fall through
+ Q_FALLTHROUGH();
case '1':
versionFlags |= QGLFormat::OpenGL_Version_4_1;
- // fall through
+ Q_FALLTHROUGH();
case '0':
break;
default:
diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h
index ab418c191a..a1ba0485e0 100644
--- a/src/opengl/qgl.h
+++ b/src/opengl/qgl.h
@@ -58,6 +58,12 @@ typedef int GLint;
typedef unsigned int GLuint;
#undef GLenum
typedef unsigned int GLenum;
+#undef GLclampf
+typedef float GLclampf;
+#undef GLsizei
+typedef int GLsizei;
+#undef GLboolean
+typedef bool GLboolean;
#endif
@@ -250,7 +256,7 @@ public:
QGLContext(const QGLFormat& format);
virtual ~QGLContext();
- virtual bool create(const QGLContext* shareContext = Q_NULLPTR);
+ virtual bool create(const QGLContext* shareContext = nullptr);
bool isValid() const;
bool isSharing() const;
void reset();
@@ -318,7 +324,7 @@ public:
QOpenGLContext *contextHandle() const;
protected:
- virtual bool chooseContext(const QGLContext* shareContext = Q_NULLPTR);
+ virtual bool chooseContext(const QGLContext* shareContext = nullptr);
bool deviceIsPixmap() const;
bool windowCreated() const;
@@ -371,12 +377,12 @@ class Q_OPENGL_EXPORT QGLWidget : public QWidget
Q_OBJECT
Q_DECLARE_PRIVATE(QGLWidget)
public:
- explicit QGLWidget(QWidget* parent=Q_NULLPTR,
- const QGLWidget* shareWidget = Q_NULLPTR, Qt::WindowFlags f=Qt::WindowFlags());
- explicit QGLWidget(QGLContext *context, QWidget* parent=Q_NULLPTR,
- const QGLWidget* shareWidget = Q_NULLPTR, Qt::WindowFlags f=Qt::WindowFlags());
- explicit QGLWidget(const QGLFormat& format, QWidget* parent=Q_NULLPTR,
- const QGLWidget* shareWidget = Q_NULLPTR, Qt::WindowFlags f=Qt::WindowFlags());
+ explicit QGLWidget(QWidget* parent=nullptr,
+ const QGLWidget* shareWidget = nullptr, Qt::WindowFlags f=Qt::WindowFlags());
+ explicit QGLWidget(QGLContext *context, QWidget* parent=nullptr,
+ const QGLWidget* shareWidget = nullptr, Qt::WindowFlags f=Qt::WindowFlags());
+ explicit QGLWidget(const QGLFormat& format, QWidget* parent=nullptr,
+ const QGLWidget* shareWidget = nullptr, Qt::WindowFlags f=Qt::WindowFlags());
~QGLWidget();
void qglColor(const QColor& c) const;
@@ -395,7 +401,7 @@ public:
void setFormat(const QGLFormat& format);
QGLContext* context() const;
- void setContext(QGLContext* context, const QGLContext* shareContext = Q_NULLPTR,
+ void setContext(QGLContext* context, const QGLContext* shareContext = nullptr,
bool deleteOldContext = true);
QPixmap renderPixmap(int w = 0, int h = 0, bool useContext = false);
@@ -413,7 +419,7 @@ public:
const QFont & fnt = QFont());
void renderText(double x, double y, double z, const QString & str,
const QFont & fnt = QFont());
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
GLuint bindTexture(const QImage &image, GLenum target, GLint format,
QGLContext::BindOptions options);
@@ -437,7 +443,7 @@ public Q_SLOTS:
virtual void updateOverlayGL();
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
virtual void initializeGL();
virtual void resizeGL(int w, int h);
virtual void paintGL();
@@ -449,16 +455,16 @@ protected:
void setAutoBufferSwap(bool on);
bool autoBufferSwap() const;
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent*) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent*) override;
+ void resizeEvent(QResizeEvent*) override;
virtual void glInit();
virtual void glDraw();
QGLWidget(QGLWidgetPrivate &dd,
const QGLFormat &format = QGLFormat(),
- QWidget *parent = Q_NULLPTR,
- const QGLWidget* shareWidget = Q_NULLPTR,
+ QWidget *parent = nullptr,
+ const QGLWidget* shareWidget = nullptr,
Qt::WindowFlags f = Qt::WindowFlags());
private:
Q_DISABLE_COPY(QGLWidget)
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 9ab5cd36a2..6b4d83888f 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -140,7 +140,7 @@ public:
void initContext(QGLContext *context, const QGLWidget* shareWidget);
bool renderCxPm(QPixmap *pixmap);
void cleanupColormaps();
- void aboutToDestroy() Q_DECL_OVERRIDE {
+ void aboutToDestroy() override {
if (glcx && !parent_changing)
glcx->reset();
}
@@ -488,12 +488,12 @@ public:
}
protected:
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
m_id = 0;
}
- void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *context) override
{
if (m_id) {
freeResource(QGLContext::fromOpenGLContext(context), m_id);
@@ -517,7 +517,7 @@ public:
}
protected:
- void freeResource(QGLContext *ctx, GLuint id) Q_DECL_OVERRIDE
+ void freeResource(QGLContext *ctx, GLuint id) override
{
m_func(ctx, id);
}
diff --git a/src/opengl/qglbuffer.h b/src/opengl/qglbuffer.h
index 454036a938..daf5227c66 100644
--- a/src/opengl/qglbuffer.h
+++ b/src/opengl/qglbuffer.h
@@ -109,7 +109,7 @@ public:
void write(int offset, const void *data, int count);
void allocate(const void *data, int count);
- inline void allocate(int count) { allocate(Q_NULLPTR, count); }
+ inline void allocate(int count) { allocate(nullptr, count); }
void *map(QGLBuffer::Access access);
bool unmap();
diff --git a/src/opengl/qglcolormap.h b/src/opengl/qglcolormap.h
index 199ed82534..772e327e34 100644
--- a/src/opengl/qglcolormap.h
+++ b/src/opengl/qglcolormap.h
@@ -69,7 +69,7 @@ public:
int findNearest(QRgb color) const;
protected:
- Qt::HANDLE handle() { return d ? d->cmapHandle : Q_NULLPTR; }
+ Qt::HANDLE handle() { return d ? d->cmapHandle : nullptr; }
void setHandle(Qt::HANDLE ahandle) { d->cmapHandle = ahandle; }
private:
diff --git a/src/opengl/qglframebufferobject.h b/src/opengl/qglframebufferobject.h
index f4b6d1ddc1..c88063cbb5 100644
--- a/src/opengl/qglframebufferobject.h
+++ b/src/opengl/qglframebufferobject.h
@@ -84,7 +84,7 @@ public:
QImage toImage() const;
Attachment attachment() const;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
GLuint handle() const;
static bool bindDefault();
@@ -101,8 +101,8 @@ public:
GLenum filter = GL_NEAREST);
protected:
- int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- int devType() const Q_DECL_OVERRIDE { return QInternal::FramebufferObject; }
+ int metric(PaintDeviceMetric metric) const override;
+ int devType() const override { return QInternal::FramebufferObject; }
private:
Q_DISABLE_COPY(QGLFramebufferObject)
diff --git a/src/opengl/qglframebufferobject_p.h b/src/opengl/qglframebufferobject_p.h
index d3af1fdbaa..bf5e21cf0b 100644
--- a/src/opengl/qglframebufferobject_p.h
+++ b/src/opengl/qglframebufferobject_p.h
@@ -106,11 +106,11 @@ public:
class QGLFBOGLPaintDevice : public QGLPaintDevice
{
public:
- virtual QPaintEngine* paintEngine() const Q_DECL_OVERRIDE {return fbo->paintEngine();}
- virtual QSize size() const Q_DECL_OVERRIDE {return fbo->size();}
- virtual QGLContext* context() const Q_DECL_OVERRIDE;
- virtual QGLFormat format() const Q_DECL_OVERRIDE {return fboFormat;}
- virtual bool alphaRequested() const Q_DECL_OVERRIDE { return reqAlpha; }
+ virtual QPaintEngine* paintEngine() const override {return fbo->paintEngine();}
+ virtual QSize size() const override {return fbo->size();}
+ virtual QGLContext* context() const override;
+ virtual QGLFormat format() const override {return fboFormat;}
+ virtual bool alphaRequested() const override { return reqAlpha; }
void setFBO(QGLFramebufferObject* f,
QGLFramebufferObject::Attachment attachment);
diff --git a/src/opengl/qglfunctions.cpp b/src/opengl/qglfunctions.cpp
index a1ea1b1e56..07e1194342 100644
--- a/src/opengl/qglfunctions.cpp
+++ b/src/opengl/qglfunctions.cpp
@@ -159,12 +159,12 @@ struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QOpenGLSharedR
delete funcs;
}
- void invalidateResource() Q_DECL_OVERRIDE
+ void invalidateResource() override
{
m_features = -1;
}
- void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
+ void freeResource(QOpenGLContext *) override
{
// no gl resources to free
}
diff --git a/src/opengl/qglfunctions.h b/src/opengl/qglfunctions.h
index 211212125e..d8c5249a1a 100644
--- a/src/opengl/qglfunctions.h
+++ b/src/opengl/qglfunctions.h
@@ -76,7 +76,7 @@ public:
QGLFunctions::OpenGLFeatures openGLFeatures() const;
bool hasOpenGLFeature(QGLFunctions::OpenGLFeature feature) const;
- void initializeGLFunctions(const QGLContext *context = Q_NULLPTR);
+ void initializeGLFunctions(const QGLContext *context = nullptr);
void glActiveTexture(GLenum texture);
void glAttachShader(GLuint program, GLuint shader);
@@ -178,14 +178,14 @@ public:
private:
QGLFunctionsPrivate *d_ptr;
- static bool isInitialized(const QGLFunctionsPrivate *d) { return d != Q_NULLPTR; }
+ static bool isInitialized(const QGLFunctionsPrivate *d) { return d != nullptr; }
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QGLFunctions::OpenGLFeatures)
struct QGLFunctionsPrivate
{
- QGLFunctionsPrivate(const QGLContext *context = Q_NULLPTR);
+ QGLFunctionsPrivate(const QGLContext *context = nullptr);
QOpenGLFunctions *funcs;
};
diff --git a/src/opengl/qglpaintdevice_p.h b/src/opengl/qglpaintdevice_p.h
index 3b34b2d244..bfecdabd53 100644
--- a/src/opengl/qglpaintdevice_p.h
+++ b/src/opengl/qglpaintdevice_p.h
@@ -64,7 +64,7 @@ public:
QGLPaintDevice();
virtual ~QGLPaintDevice();
- int devType() const Q_DECL_OVERRIDE {return QInternal::OpenGL;}
+ int devType() const override {return QInternal::OpenGL;}
virtual void beginPaint();
virtual void ensureActiveTarget();
@@ -80,7 +80,7 @@ public:
static QGLPaintDevice* getDevice(QPaintDevice*);
protected:
- int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const override;
GLuint m_previousFBO;
GLuint m_thisFBO;
};
@@ -93,13 +93,13 @@ class Q_OPENGL_EXPORT QGLWidgetGLPaintDevice : public QGLPaintDevice
public:
QGLWidgetGLPaintDevice();
- virtual QPaintEngine* paintEngine() const Q_DECL_OVERRIDE;
+ virtual QPaintEngine* paintEngine() const override;
// QGLWidgets need to do swapBufers in endPaint:
- virtual void beginPaint() Q_DECL_OVERRIDE;
- virtual void endPaint() Q_DECL_OVERRIDE;
- virtual QSize size() const Q_DECL_OVERRIDE;
- virtual QGLContext* context() const Q_DECL_OVERRIDE;
+ virtual void beginPaint() override;
+ virtual void endPaint() override;
+ virtual QSize size() const override;
+ virtual QGLContext* context() const override;
void setWidget(QGLWidget*);
diff --git a/src/opengl/qglpixelbuffer.h b/src/opengl/qglpixelbuffer.h
index bd30ca2663..f5d7929c35 100644
--- a/src/opengl/qglpixelbuffer.h
+++ b/src/opengl/qglpixelbuffer.h
@@ -53,9 +53,9 @@ class Q_OPENGL_EXPORT QGLPixelBuffer : public QPaintDevice
Q_DECLARE_PRIVATE(QGLPixelBuffer)
public:
QGLPixelBuffer(const QSize &size, const QGLFormat &format = QGLFormat::defaultFormat(),
- QGLWidget *shareWidget = Q_NULLPTR);
+ QGLWidget *shareWidget = nullptr);
QGLPixelBuffer(int width, int height, const QGLFormat &format = QGLFormat::defaultFormat(),
- QGLWidget *shareWidget = Q_NULLPTR);
+ QGLWidget *shareWidget = nullptr);
virtual ~QGLPixelBuffer();
bool isValid() const;
@@ -81,14 +81,14 @@ public:
Qt::HANDLE handle() const;
QImage toImage() const;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
QGLFormat format() const;
static bool hasOpenGLPbuffers();
protected:
- int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- int devType() const Q_DECL_OVERRIDE { return QInternal::Pbuffer; }
+ int metric(PaintDeviceMetric metric) const override;
+ int devType() const override { return QInternal::Pbuffer; }
private:
Q_DISABLE_COPY(QGLPixelBuffer)
diff --git a/src/opengl/qglshaderprogram.h b/src/opengl/qglshaderprogram.h
index f95017d09c..dfdef44b54 100644
--- a/src/opengl/qglshaderprogram.h
+++ b/src/opengl/qglshaderprogram.h
@@ -46,6 +46,17 @@
#include <QtGui/qvector4d.h>
#include <QtGui/qmatrix4x4.h>
+#if defined(Q_CLANG_QDOC)
+#undef GLfloat
+typedef double GLfloat;
+#undef GLint
+typedef int GLint;
+#undef GLuint
+typedef unsigned int GLuint;
+#undef GLenum
+typedef unsigned int GLenum;
+#endif
+
QT_BEGIN_NAMESPACE
@@ -64,8 +75,8 @@ public:
};
Q_DECLARE_FLAGS(ShaderType, ShaderTypeBit)
- explicit QGLShader(QGLShader::ShaderType type, QObject *parent = Q_NULLPTR);
- QGLShader(QGLShader::ShaderType type, const QGLContext *context, QObject *parent = Q_NULLPTR);
+ explicit QGLShader(QGLShader::ShaderType type, QObject *parent = nullptr);
+ QGLShader(QGLShader::ShaderType type, const QGLContext *context, QObject *parent = nullptr);
virtual ~QGLShader();
QGLShader::ShaderType shaderType() const;
@@ -82,7 +93,7 @@ public:
GLuint shaderId() const;
- static bool hasOpenGLShaders(ShaderType type, const QGLContext *context = Q_NULLPTR);
+ static bool hasOpenGLShaders(ShaderType type, const QGLContext *context = nullptr);
private:
friend class QGLShaderProgram;
@@ -100,8 +111,8 @@ class Q_OPENGL_EXPORT QGLShaderProgram : public QObject
{
Q_OBJECT
public:
- explicit QGLShaderProgram(QObject *parent = Q_NULLPTR);
- explicit QGLShaderProgram(const QGLContext *context, QObject *parent = Q_NULLPTR);
+ explicit QGLShaderProgram(QObject *parent = nullptr);
+ explicit QGLShaderProgram(const QGLContext *context, QObject *parent = nullptr);
virtual ~QGLShaderProgram();
bool addShader(QGLShader *shader);
@@ -286,7 +297,7 @@ public:
void setUniformValueArray(const char *name, const QMatrix4x3 *values, int count);
void setUniformValueArray(const char *name, const QMatrix4x4 *values, int count);
- static bool hasOpenGLShaderPrograms(const QGLContext *context = Q_NULLPTR);
+ static bool hasOpenGLShaderPrograms(const QGLContext *context = nullptr);
private Q_SLOTS:
void shaderDestroyed();
diff --git a/src/opengl/qgraphicsshadereffect.cpp b/src/opengl/qgraphicsshadereffect.cpp
index 218f4af866..cf3d307d71 100644
--- a/src/opengl/qgraphicsshadereffect.cpp
+++ b/src/opengl/qgraphicsshadereffect.cpp
@@ -143,7 +143,7 @@ public:
setSource(source);
}
- void setUniforms(QGLShaderProgram *program) Q_DECL_OVERRIDE;
+ void setUniforms(QGLShaderProgram *program) override;
QGraphicsShaderEffect *effect;
};
diff --git a/src/opengl/qgraphicsshadereffect_p.h b/src/opengl/qgraphicsshadereffect_p.h
index d7e0ec51d4..9efcecd25f 100644
--- a/src/opengl/qgraphicsshadereffect_p.h
+++ b/src/opengl/qgraphicsshadereffect_p.h
@@ -74,7 +74,7 @@ public:
void setPixelShaderFragment(const QByteArray& code);
protected:
- void draw(QPainter *painter) Q_DECL_OVERRIDE;
+ void draw(QPainter *painter) override;
void setUniformsDirty();
virtual void setUniforms(QGLShaderProgram *program);
diff --git a/src/openglextensions/qopenglextensions.h b/src/openglextensions/qopenglextensions.h
index 52ebd2fe0f..afbc18f474 100644
--- a/src/openglextensions/qopenglextensions.h
+++ b/src/openglextensions/qopenglextensions.h
@@ -114,7 +114,7 @@ class QOpenGLExtension_3DFX_tbuffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_3DFX_tbuffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTbufferMask3DFX(GLuint mask);
@@ -142,7 +142,7 @@ class QOpenGLExtension_AMD_debug_output : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_debug_output();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLuint glGetDebugMessageLogAMD(GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);
void glDebugMessageCallbackAMD(GLDEBUGPROCAMD callback, GLvoid *userParam);
@@ -191,7 +191,7 @@ class QOpenGLExtension_AMD_draw_buffers_blend : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_draw_buffers_blend();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendEquationSeparateIndexedAMD(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
void glBlendEquationIndexedAMD(GLuint buf, GLenum mode);
@@ -238,7 +238,7 @@ class QOpenGLExtension_AMD_multi_draw_indirect : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_multi_draw_indirect();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiDrawElementsIndirectAMD(GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride);
void glMultiDrawArraysIndirectAMD(GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride);
@@ -272,7 +272,7 @@ class QOpenGLExtension_AMD_name_gen_delete : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_name_gen_delete();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsNameAMD(GLenum identifier, GLuint name);
void glDeleteNamesAMD(GLenum identifier, GLuint num, const GLuint *names);
@@ -321,7 +321,7 @@ class QOpenGLExtension_AMD_performance_monitor : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_performance_monitor();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetPerfMonitorCounterDataAMD(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);
void glEndPerfMonitorAMD(GLuint monitor);
@@ -416,7 +416,7 @@ class QOpenGLExtension_AMD_sample_positions : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_sample_positions();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSetMultisamplefvAMD(GLenum pname, GLuint index, const GLfloat *val);
@@ -441,7 +441,7 @@ class QOpenGLExtension_AMD_sparse_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_sparse_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexStorageSparseAMD(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);
@@ -466,7 +466,7 @@ class QOpenGLExtension_AMD_stencil_operation_extended : public QAbstractOpenGLEx
public:
QOpenGLExtension_AMD_stencil_operation_extended();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glStencilOpValueAMD(GLenum face, GLuint value);
@@ -492,7 +492,7 @@ class QOpenGLExtension_AMD_vertex_shader_tesselator : public QAbstractOpenGLExte
public:
QOpenGLExtension_AMD_vertex_shader_tesselator();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTessellationModeAMD(GLenum mode);
void glTessellationFactorAMD(GLfloat factor);
@@ -528,7 +528,7 @@ class QOpenGLExtension_APPLE_element_array : public QAbstractOpenGLExtension
public:
QOpenGLExtension_APPLE_element_array();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);
void glMultiDrawElementArrayAPPLE(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
@@ -588,7 +588,7 @@ class QOpenGLExtension_APPLE_fence : public QAbstractOpenGLExtension
public:
QOpenGLExtension_APPLE_fence();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFinishObjectAPPLE(GLenum object, GLint name);
GLboolean glTestObjectAPPLE(GLenum object, GLuint name);
@@ -663,7 +663,7 @@ class QOpenGLExtension_APPLE_flush_buffer_range : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_APPLE_flush_buffer_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFlushMappedBufferRangeAPPLE(GLenum target, GLintptr offset, GLsizeiptr size);
void glBufferParameteriAPPLE(GLenum target, GLenum pname, GLint param);
@@ -697,7 +697,7 @@ class QOpenGLExtension_APPLE_object_purgeable : public QAbstractOpenGLExtension
public:
QOpenGLExtension_APPLE_object_purgeable();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetObjectParameterivAPPLE(GLenum objectType, GLuint name, GLenum pname, GLint *params);
GLenum glObjectUnpurgeableAPPLE(GLenum objectType, GLuint name, GLenum option);
@@ -737,7 +737,7 @@ class QOpenGLExtension_APPLE_texture_range : public QAbstractOpenGLExtension
public:
QOpenGLExtension_APPLE_texture_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetTexParameterPointervAPPLE(GLenum target, GLenum pname, GLvoid* *params);
void glTextureRangeAPPLE(GLenum target, GLsizei length, const GLvoid *pointer);
@@ -772,7 +772,7 @@ class QOpenGLExtension_APPLE_vertex_array_object : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_APPLE_vertex_array_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsVertexArrayAPPLE(GLuint array);
void glGenVertexArraysAPPLE(GLsizei n, GLuint *arrays);
@@ -820,7 +820,7 @@ class QOpenGLExtension_APPLE_vertex_array_range : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_APPLE_vertex_array_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexArrayParameteriAPPLE(GLenum pname, GLint param);
void glFlushVertexArrayRangeAPPLE(GLsizei length, GLvoid *pointer);
@@ -865,7 +865,7 @@ class QOpenGLExtension_APPLE_vertex_program_evaluators : public QAbstractOpenGLE
public:
QOpenGLExtension_APPLE_vertex_program_evaluators();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMapVertexAttrib2fAPPLE(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);
void glMapVertexAttrib2dAPPLE(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);
@@ -936,7 +936,7 @@ class QOpenGLExtension_ARB_ES2_compatibility : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_ES2_compatibility();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glClearDepthf(GLfloat dd);
void glDepthRangef(GLfloat n, GLfloat f);
@@ -991,7 +991,7 @@ class QOpenGLExtension_ARB_base_instance : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_base_instance();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawElementsInstancedBaseVertexBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);
void glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);
@@ -1031,7 +1031,7 @@ class QOpenGLExtension_ARB_blend_func_extended : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_blend_func_extended();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLint glGetFragDataIndex(GLuint program, const GLchar *name);
void glBindFragDataLocationIndexed(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);
@@ -1063,7 +1063,7 @@ class QOpenGLExtension_ARB_cl_event : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_cl_event();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLsync glCreateSyncFromCLeventARB(struct _cl_context * context, struct _cl_event * event, GLbitfield flags);
@@ -1089,7 +1089,7 @@ class QOpenGLExtension_ARB_clear_buffer_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_clear_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glClearBufferSubData(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);
void glClearBufferData(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);
@@ -1121,7 +1121,7 @@ class QOpenGLExtension_ARB_color_buffer_float : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_color_buffer_float();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glClampColorARB(GLenum target, GLenum clamp);
@@ -1147,7 +1147,7 @@ class QOpenGLExtension_ARB_compute_shader : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_compute_shader();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDispatchComputeIndirect(GLintptr indirect);
void glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
@@ -1179,7 +1179,7 @@ class QOpenGLExtension_ARB_copy_buffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_copy_buffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
@@ -1204,7 +1204,7 @@ class QOpenGLExtension_ARB_copy_image : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_copy_image();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCopyImageSubData(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
@@ -1232,7 +1232,7 @@ class QOpenGLExtension_ARB_debug_output : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_debug_output();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLuint glGetDebugMessageLogARB(GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);
void glDebugMessageCallbackARB(GLDEBUGPROCARB callback, const GLvoid *userParam);
@@ -1278,7 +1278,7 @@ class QOpenGLExtension_ARB_draw_buffers : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_draw_buffers();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawBuffersARB(GLsizei n, const GLenum *bufs);
@@ -1306,7 +1306,7 @@ class QOpenGLExtension_ARB_draw_buffers_blend : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_draw_buffers_blend();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendFuncSeparateiARB(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
void glBlendFunciARB(GLuint buf, GLenum src, GLenum dst);
@@ -1355,7 +1355,7 @@ class QOpenGLExtension_ARB_draw_elements_base_vertex : public QAbstractOpenGLExt
public:
QOpenGLExtension_ARB_draw_elements_base_vertex();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiDrawElementsBaseVertex(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);
void glDrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);
@@ -1402,7 +1402,7 @@ class QOpenGLExtension_ARB_draw_indirect : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_draw_indirect();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect);
void glDrawArraysIndirect(GLenum mode, const GLvoid *indirect);
@@ -1435,7 +1435,7 @@ class QOpenGLExtension_ARB_draw_instanced : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_draw_instanced();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
void glDrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
@@ -1468,7 +1468,7 @@ class QOpenGLExtension_ARB_framebuffer_no_attachments : public QAbstractOpenGLEx
public:
QOpenGLExtension_ARB_framebuffer_no_attachments();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetFramebufferParameteriv(GLenum target, GLenum pname, GLint *params);
void glFramebufferParameteri(GLenum target, GLenum pname, GLint param);
@@ -1519,7 +1519,7 @@ class QOpenGLExtension_ARB_framebuffer_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_framebuffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
void glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
@@ -1680,7 +1680,7 @@ class QOpenGLExtension_ARB_geometry_shader4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_geometry_shader4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFramebufferTextureFaceARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
void glFramebufferTextureLayerARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
@@ -1728,7 +1728,7 @@ class QOpenGLExtension_ARB_get_program_binary : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_get_program_binary();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramParameteri(GLuint program, GLenum pname, GLint value);
void glProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);
@@ -1784,7 +1784,7 @@ class QOpenGLExtension_ARB_gpu_shader_fp64 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_gpu_shader_fp64();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetUniformdv(GLuint program, GLint location, GLdouble *params);
void glUniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
@@ -1928,7 +1928,7 @@ class QOpenGLExtension_ARB_instanced_arrays : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_instanced_arrays();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexAttribDivisorARB(GLuint index, GLuint divisor);
@@ -1953,7 +1953,7 @@ class QOpenGLExtension_ARB_internalformat_query : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_ARB_internalformat_query();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);
@@ -1978,7 +1978,7 @@ class QOpenGLExtension_ARB_internalformat_query2 : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_ARB_internalformat_query2();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetInternalformati64v(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);
@@ -2008,7 +2008,7 @@ class QOpenGLExtension_ARB_invalidate_subdata : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_invalidate_subdata();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glInvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);
void glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments);
@@ -2069,7 +2069,7 @@ class QOpenGLExtension_ARB_map_buffer_range : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_map_buffer_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length);
GLvoid* glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
@@ -2105,7 +2105,7 @@ class QOpenGLExtension_ARB_matrix_palette : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_matrix_palette();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMatrixIndexPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void glMatrixIndexuivARB(GLint size, const GLuint *indices);
@@ -2159,7 +2159,7 @@ class QOpenGLExtension_ARB_multi_draw_indirect : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_multi_draw_indirect();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);
void glMultiDrawArraysIndirect(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);
@@ -2191,7 +2191,7 @@ class QOpenGLExtension_ARB_multisample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSampleCoverageARB(GLfloat value, GLboolean invert);
@@ -2249,7 +2249,7 @@ class QOpenGLExtension_ARB_multitexture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_multitexture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiTexCoord4svARB(GLenum target, const GLshort *v);
void glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
@@ -2512,7 +2512,7 @@ class QOpenGLExtension_ARB_occlusion_query : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_occlusion_query();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params);
void glGetQueryObjectivARB(GLuint id, GLenum pname, GLint *params);
@@ -2587,7 +2587,7 @@ class QOpenGLExtension_ARB_point_parameters : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_point_parameters();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPointParameterfvARB(GLenum pname, const GLfloat *params);
void glPointParameterfARB(GLenum pname, GLfloat param);
@@ -2624,7 +2624,7 @@ class QOpenGLExtension_ARB_program_interface_query : public QAbstractOpenGLExten
public:
QOpenGLExtension_ARB_program_interface_query();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLint glGetProgramResourceLocationIndex(GLuint program, GLenum programInterface, const GLchar *name);
GLint glGetProgramResourceLocation(GLuint program, GLenum programInterface, const GLchar *name);
@@ -2684,7 +2684,7 @@ class QOpenGLExtension_ARB_provoking_vertex : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_provoking_vertex();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProvokingVertex(GLenum mode);
@@ -2728,7 +2728,7 @@ class QOpenGLExtension_ARB_robustness : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_robustness();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetnUniformdvARB(GLuint program, GLint location, GLsizei bufSize, GLdouble *params);
void glGetnUniformuivARB(GLuint program, GLint location, GLsizei bufSize, GLuint *params);
@@ -2886,7 +2886,7 @@ class QOpenGLExtension_ARB_sample_shading : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_sample_shading();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMinSampleShadingARB(GLfloat value);
@@ -2924,7 +2924,7 @@ class QOpenGLExtension_ARB_sampler_objects : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_sampler_objects();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params);
void glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
@@ -3099,7 +3099,7 @@ class QOpenGLExtension_ARB_separate_shader_objects : public QAbstractOpenGLExten
public:
QOpenGLExtension_ARB_separate_shader_objects();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetProgramPipelineInfoLog(GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
void glValidateProgramPipeline(GLuint pipeline);
@@ -3537,7 +3537,7 @@ class QOpenGLExtension_ARB_shader_atomic_counters : public QAbstractOpenGLExtens
public:
QOpenGLExtension_ARB_shader_atomic_counters();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetActiveAtomicCounterBufferiv(GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);
@@ -3563,7 +3563,7 @@ class QOpenGLExtension_ARB_shader_image_load_store : public QAbstractOpenGLExten
public:
QOpenGLExtension_ARB_shader_image_load_store();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMemoryBarrier(GLbitfield barriers);
void glBindImageTexture(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
@@ -3633,7 +3633,7 @@ class QOpenGLExtension_ARB_shader_objects : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_shader_objects();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetShaderSourceARB(GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
void glGetUniformivARB(GLhandleARB programObj, GLint location, GLint *params);
@@ -3924,7 +3924,7 @@ class QOpenGLExtension_ARB_shader_storage_buffer_object : public QAbstractOpenGL
public:
QOpenGLExtension_ARB_shader_storage_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glShaderStorageBlockBinding(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);
@@ -3956,7 +3956,7 @@ class QOpenGLExtension_ARB_shader_subroutine : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_shader_subroutine();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetProgramStageiv(GLuint program, GLenum shadertype, GLenum pname, GLint *values);
void glGetUniformSubroutineuiv(GLenum shadertype, GLint location, GLuint *params);
@@ -4035,7 +4035,7 @@ class QOpenGLExtension_ARB_shading_language_include : public QAbstractOpenGLExte
public:
QOpenGLExtension_ARB_shading_language_include();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetNamedStringivARB(GLint namelen, const GLchar *name, GLenum pname, GLint *params);
void glGetNamedStringARB(GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);
@@ -4101,7 +4101,7 @@ class QOpenGLExtension_ARB_sync : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_sync();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
void glGetInteger64v(GLenum pname, GLint64 *params);
@@ -4169,7 +4169,7 @@ class QOpenGLExtension_ARB_tessellation_shader : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_tessellation_shader();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPatchParameterfv(GLenum pname, const GLfloat *values);
void glPatchParameteri(GLenum pname, GLint value);
@@ -4201,7 +4201,7 @@ class QOpenGLExtension_ARB_texture_buffer_object : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_ARB_texture_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexBufferARB(GLenum target, GLenum internalformat, GLuint buffer);
@@ -4226,7 +4226,7 @@ class QOpenGLExtension_ARB_texture_buffer_range : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_ARB_texture_buffer_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexBufferRange(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);
@@ -4257,7 +4257,7 @@ class QOpenGLExtension_ARB_texture_compression : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_texture_compression();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetCompressedTexImageARB(GLenum target, GLint level, GLvoid *img);
void glCompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
@@ -4327,7 +4327,7 @@ class QOpenGLExtension_ARB_texture_multisample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_texture_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSampleMaski(GLuint index, GLbitfield mask);
void glGetMultisamplefv(GLenum pname, GLuint index, GLfloat *val);
@@ -4375,7 +4375,7 @@ class QOpenGLExtension_ARB_texture_storage : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_texture_storage();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
void glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
@@ -4415,7 +4415,7 @@ class QOpenGLExtension_ARB_texture_storage_multisample : public QAbstractOpenGLE
public:
QOpenGLExtension_ARB_texture_storage_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexStorage3DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
void glTexStorage2DMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
@@ -4447,7 +4447,7 @@ class QOpenGLExtension_ARB_texture_view : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_texture_view();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTextureView(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);
@@ -4474,7 +4474,7 @@ class QOpenGLExtension_ARB_timer_query : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_timer_query();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64 *params);
void glGetQueryObjecti64v(GLuint id, GLenum pname, GLint64 *params);
@@ -4519,7 +4519,7 @@ class QOpenGLExtension_ARB_transform_feedback2 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_transform_feedback2();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawTransformFeedback(GLenum mode, GLuint id);
void glResumeTransformFeedback();
@@ -4589,7 +4589,7 @@ class QOpenGLExtension_ARB_transform_feedback3 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_transform_feedback3();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetQueryIndexediv(GLenum target, GLuint index, GLenum pname, GLint *params);
void glEndQueryIndexed(GLenum target, GLuint index);
@@ -4636,7 +4636,7 @@ class QOpenGLExtension_ARB_transform_feedback_instanced : public QAbstractOpenGL
public:
QOpenGLExtension_ARB_transform_feedback_instanced();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawTransformFeedbackStreamInstanced(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);
void glDrawTransformFeedbackInstanced(GLenum mode, GLuint id, GLsizei instancecount);
@@ -4671,7 +4671,7 @@ class QOpenGLExtension_ARB_transpose_matrix : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_transpose_matrix();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultTransposeMatrixdARB(const GLdouble *m);
void glMultTransposeMatrixfARB(const GLfloat *m);
@@ -4723,7 +4723,7 @@ class QOpenGLExtension_ARB_uniform_buffer_object : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_ARB_uniform_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glUniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
void glGetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
@@ -4793,7 +4793,7 @@ class QOpenGLExtension_ARB_vertex_array_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_vertex_array_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsVertexArray(GLuint array);
void glGenVertexArrays(GLsizei n, GLuint *arrays);
@@ -4848,7 +4848,7 @@ class QOpenGLExtension_ARB_vertex_attrib_64bit : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_vertex_attrib_64bit();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetVertexAttribLdv(GLuint index, GLenum pname, GLdouble *params);
void glVertexAttribLPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
@@ -4941,7 +4941,7 @@ class QOpenGLExtension_ARB_vertex_attrib_binding : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_ARB_vertex_attrib_binding();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexBindingDivisor(GLuint bindingindex, GLuint divisor);
void glVertexAttribBinding(GLuint attribindex, GLuint bindingindex);
@@ -5010,7 +5010,7 @@ class QOpenGLExtension_ARB_vertex_blend : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_vertex_blend();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexBlendARB(GLint count);
void glWeightPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
@@ -5108,7 +5108,7 @@ class QOpenGLExtension_ARB_vertex_buffer_object : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_ARB_vertex_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetBufferPointervARB(GLenum target, GLenum pname, GLvoid* *params);
void glGetBufferParameterivARB(GLenum target, GLenum pname, GLint *params);
@@ -5264,7 +5264,7 @@ class QOpenGLExtension_ARB_vertex_program : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_vertex_program();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsProgramARB(GLuint program);
void glGetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid* *pointer);
@@ -5718,7 +5718,7 @@ class QOpenGLExtension_ARB_vertex_shader : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_vertex_shader();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLint glGetAttribLocationARB(GLhandleARB programObj, const GLcharARB *name);
void glGetActiveAttribARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
@@ -5794,7 +5794,7 @@ class QOpenGLExtension_ARB_vertex_type_2_10_10_10_rev : public QAbstractOpenGLEx
public:
QOpenGLExtension_ARB_vertex_type_2_10_10_10_rev();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexAttribP4uiv(GLuint index, GLenum type, GLboolean normalized, const GLuint *value);
void glVertexAttribP4ui(GLuint index, GLenum type, GLboolean normalized, GLuint value);
@@ -6087,7 +6087,7 @@ class QOpenGLExtension_ARB_viewport_array : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_viewport_array();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetDoublei_v(GLenum target, GLuint index, GLdouble *data);
void glGetFloati_v(GLenum target, GLuint index, GLfloat *data);
@@ -6190,7 +6190,7 @@ class QOpenGLExtension_ARB_window_pos : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ARB_window_pos();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glWindowPos3svARB(const GLshort *v);
void glWindowPos3sARB(GLshort x, GLshort y, GLshort z);
@@ -6320,7 +6320,7 @@ class QOpenGLExtension_ATI_draw_buffers : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_draw_buffers();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawBuffersATI(GLsizei n, const GLenum *bufs);
@@ -6347,7 +6347,7 @@ class QOpenGLExtension_ATI_element_array : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_element_array();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawRangeElementArrayATI(GLenum mode, GLuint start, GLuint end, GLsizei count);
void glDrawElementArrayATI(GLenum mode, GLsizei count);
@@ -6389,7 +6389,7 @@ class QOpenGLExtension_ATI_envmap_bumpmap : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_envmap_bumpmap();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetTexBumpParameterfvATI(GLenum pname, GLfloat *param);
void glGetTexBumpParameterivATI(GLenum pname, GLint *param);
@@ -6448,7 +6448,7 @@ class QOpenGLExtension_ATI_fragment_shader : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_fragment_shader();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSetFragmentShaderConstantATI(GLuint dst, const GLfloat *value);
void glAlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
@@ -6565,7 +6565,7 @@ class QOpenGLExtension_ATI_map_object_buffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_map_object_buffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glUnmapObjectBufferATI(GLuint buffer);
GLvoid* glMapObjectBufferATI(GLuint buffer);
@@ -6598,7 +6598,7 @@ class QOpenGLExtension_ATI_pn_triangles : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_pn_triangles();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPNTrianglesfATI(GLenum pname, GLfloat param);
void glPNTrianglesiATI(GLenum pname, GLint param);
@@ -6631,7 +6631,7 @@ class QOpenGLExtension_ATI_separate_stencil : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_separate_stencil();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
void glStencilOpSeparateATI(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
@@ -6674,7 +6674,7 @@ class QOpenGLExtension_ATI_vertex_array_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_vertex_array_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetVariantArrayObjectivATI(GLuint id, GLenum pname, GLint *params);
void glGetVariantArrayObjectfvATI(GLuint id, GLenum pname, GLfloat *params);
@@ -6778,7 +6778,7 @@ class QOpenGLExtension_ATI_vertex_attrib_array_object : public QAbstractOpenGLEx
public:
QOpenGLExtension_ATI_vertex_attrib_array_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetVertexAttribArrayObjectivATI(GLuint index, GLenum pname, GLint *params);
void glGetVertexAttribArrayObjectfvATI(GLuint index, GLenum pname, GLfloat *params);
@@ -6861,7 +6861,7 @@ class QOpenGLExtension_ATI_vertex_streams : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ATI_vertex_streams();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexBlendEnvfATI(GLenum pname, GLfloat param);
void glVertexBlendEnviATI(GLenum pname, GLint param);
@@ -7196,7 +7196,7 @@ class QOpenGLExtension_EXT_bindable_uniform : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_bindable_uniform();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLintptr glGetUniformOffsetEXT(GLuint program, GLint location);
GLint glGetUniformBufferSizeEXT(GLuint program, GLint location);
@@ -7235,7 +7235,7 @@ class QOpenGLExtension_EXT_blend_color : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_blend_color();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendColorEXT(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
@@ -7260,7 +7260,7 @@ class QOpenGLExtension_EXT_blend_equation_separate : public QAbstractOpenGLExten
public:
QOpenGLExtension_EXT_blend_equation_separate();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendEquationSeparateEXT(GLenum modeRGB, GLenum modeAlpha);
@@ -7285,7 +7285,7 @@ class QOpenGLExtension_EXT_blend_func_separate : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_blend_func_separate();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
@@ -7310,7 +7310,7 @@ class QOpenGLExtension_EXT_blend_minmax : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_blend_minmax();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendEquationEXT(GLenum mode);
@@ -7336,7 +7336,7 @@ class QOpenGLExtension_EXT_color_subtable : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_color_subtable();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCopyColorSubTableEXT(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
void glColorSubTableEXT(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
@@ -7369,7 +7369,7 @@ class QOpenGLExtension_EXT_compiled_vertex_array : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_EXT_compiled_vertex_array();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glUnlockArraysEXT();
void glLockArraysEXT(GLint first, GLsizei count);
@@ -7413,7 +7413,7 @@ class QOpenGLExtension_EXT_convolution : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_convolution();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSeparableFilter2DEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
void glGetSeparableFilterEXT(GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
@@ -7543,7 +7543,7 @@ class QOpenGLExtension_EXT_coordinate_frame : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_coordinate_frame();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBinormalPointerEXT(GLenum type, GLsizei stride, const GLvoid *pointer);
void glTangentPointerEXT(GLenum type, GLsizei stride, const GLvoid *pointer);
@@ -7719,7 +7719,7 @@ class QOpenGLExtension_EXT_copy_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_copy_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCopyTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
void glCopyTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
@@ -7773,7 +7773,7 @@ class QOpenGLExtension_EXT_cull_vertex : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_cull_vertex();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCullParameterfvEXT(GLenum pname, GLfloat *params);
void glCullParameterdvEXT(GLenum pname, GLdouble *params);
@@ -7805,7 +7805,7 @@ class QOpenGLExtension_EXT_depth_bounds_test : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_depth_bounds_test();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDepthBoundsEXT(GLclampd zmin, GLclampd zmax);
@@ -8051,7 +8051,7 @@ class QOpenGLExtension_EXT_direct_state_access : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_direct_state_access();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramUniformMatrix4x3dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
void glProgramUniformMatrix4x2dvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);
@@ -9628,7 +9628,7 @@ class QOpenGLExtension_EXT_draw_buffers2 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_draw_buffers2();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsEnabledIndexedEXT(GLenum target, GLuint index);
void glDisableIndexedEXT(GLenum target, GLuint index);
@@ -9689,7 +9689,7 @@ class QOpenGLExtension_EXT_draw_instanced : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_draw_instanced();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);
void glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount);
@@ -9721,7 +9721,7 @@ class QOpenGLExtension_EXT_draw_range_elements : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_draw_range_elements();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawRangeElementsEXT(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
@@ -9750,7 +9750,7 @@ class QOpenGLExtension_EXT_fog_coord : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_fog_coord();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *pointer);
void glFogCoorddvEXT(const GLdouble *coord);
@@ -9803,7 +9803,7 @@ class QOpenGLExtension_EXT_framebuffer_blit : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_framebuffer_blit();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
@@ -9828,7 +9828,7 @@ class QOpenGLExtension_EXT_framebuffer_multisample : public QAbstractOpenGLExten
public:
QOpenGLExtension_EXT_framebuffer_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
@@ -9869,7 +9869,7 @@ class QOpenGLExtension_EXT_framebuffer_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_framebuffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGenerateMipmapEXT(GLenum target);
void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params);
@@ -10006,7 +10006,7 @@ class QOpenGLExtension_EXT_geometry_shader4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_geometry_shader4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramParameteriEXT(GLuint program, GLenum pname, GLint value);
@@ -10032,7 +10032,7 @@ class QOpenGLExtension_EXT_gpu_program_parameters : public QAbstractOpenGLExtens
public:
QOpenGLExtension_EXT_gpu_program_parameters();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
void glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params);
@@ -10074,7 +10074,7 @@ class QOpenGLExtension_EXT_gpu_shader4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_gpu_shader4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glUniform4uivEXT(GLint location, GLsizei count, const GLuint *value);
void glUniform3uivEXT(GLint location, GLsizei count, const GLuint *value);
@@ -10178,7 +10178,7 @@ class QOpenGLExtension_EXT_histogram : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_histogram();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glResetMinmaxEXT(GLenum target);
void glResetHistogramEXT(GLenum target);
@@ -10266,7 +10266,7 @@ class QOpenGLExtension_EXT_index_func : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_index_func();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glIndexFuncEXT(GLenum func, GLclampf ref);
@@ -10291,7 +10291,7 @@ class QOpenGLExtension_EXT_index_material : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_index_material();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glIndexMaterialEXT(GLenum face, GLenum mode);
@@ -10318,7 +10318,7 @@ class QOpenGLExtension_EXT_light_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_light_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTextureMaterialEXT(GLenum face, GLenum mode);
void glTextureLightEXT(GLenum pname);
@@ -10358,7 +10358,7 @@ class QOpenGLExtension_EXT_multi_draw_arrays : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_multi_draw_arrays();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
void glMultiDrawArraysEXT(GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);
@@ -10391,7 +10391,7 @@ class QOpenGLExtension_EXT_multisample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSamplePatternEXT(GLenum pattern);
void glSampleMaskEXT(GLclampf value, GLboolean invert);
@@ -10426,7 +10426,7 @@ class QOpenGLExtension_EXT_paletted_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_paletted_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetColorTableParameterfvEXT(GLenum target, GLenum pname, GLfloat *params);
void glGetColorTableParameterivEXT(GLenum target, GLenum pname, GLint *params);
@@ -10477,7 +10477,7 @@ class QOpenGLExtension_EXT_pixel_transform : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_pixel_transform();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetPixelTransformParameterfvEXT(GLenum target, GLenum pname, GLfloat *params);
void glGetPixelTransformParameterivEXT(GLenum target, GLenum pname, GLint *params);
@@ -10538,7 +10538,7 @@ class QOpenGLExtension_EXT_point_parameters : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_point_parameters();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPointParameterfvEXT(GLenum pname, const GLfloat *params);
void glPointParameterfEXT(GLenum pname, GLfloat param);
@@ -10570,7 +10570,7 @@ class QOpenGLExtension_EXT_polygon_offset : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_polygon_offset();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPolygonOffsetEXT(GLfloat factor, GLfloat bias);
@@ -10595,7 +10595,7 @@ class QOpenGLExtension_EXT_provoking_vertex : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_provoking_vertex();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProvokingVertexEXT(GLenum mode);
@@ -10636,7 +10636,7 @@ class QOpenGLExtension_EXT_secondary_color : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_secondary_color();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSecondaryColorPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void glSecondaryColor3usvEXT(const GLushort *v);
@@ -10775,7 +10775,7 @@ class QOpenGLExtension_EXT_separate_shader_objects : public QAbstractOpenGLExten
public:
QOpenGLExtension_EXT_separate_shader_objects();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLuint glCreateShaderProgramEXT(GLenum type, const GLchar *string);
void glActiveProgramEXT(GLuint program);
@@ -10815,7 +10815,7 @@ class QOpenGLExtension_EXT_shader_image_load_store : public QAbstractOpenGLExten
public:
QOpenGLExtension_EXT_shader_image_load_store();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMemoryBarrierEXT(GLbitfield barriers);
void glBindImageTextureEXT(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);
@@ -10847,7 +10847,7 @@ class QOpenGLExtension_EXT_stencil_clear_tag : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_stencil_clear_tag();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glStencilClearTagEXT(GLsizei stencilTagBits, GLuint stencilClearTag);
@@ -10872,7 +10872,7 @@ class QOpenGLExtension_EXT_stencil_two_side : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_stencil_two_side();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glActiveStencilFaceEXT(GLenum face);
@@ -10898,7 +10898,7 @@ class QOpenGLExtension_EXT_subtexture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_subtexture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
void glTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
@@ -10931,7 +10931,7 @@ class QOpenGLExtension_EXT_texture3D : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_texture3D();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
void glTexImage3DEXT(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
@@ -10963,7 +10963,7 @@ class QOpenGLExtension_EXT_texture_buffer_object : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_EXT_texture_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer);
@@ -10993,7 +10993,7 @@ class QOpenGLExtension_EXT_texture_integer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_texture_integer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glClearColorIuiEXT(GLuint red, GLuint green, GLuint blue, GLuint alpha);
void glClearColorIiEXT(GLint red, GLint green, GLint blue, GLint alpha);
@@ -11058,7 +11058,7 @@ class QOpenGLExtension_EXT_texture_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_texture_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPrioritizeTexturesEXT(GLsizei n, const GLuint *textures, const GLclampf *priorities);
GLboolean glIsTextureEXT(GLuint texture);
@@ -11118,7 +11118,7 @@ class QOpenGLExtension_EXT_texture_perturb_normal : public QAbstractOpenGLExtens
public:
QOpenGLExtension_EXT_texture_perturb_normal();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTextureNormalEXT(GLenum mode);
@@ -11144,7 +11144,7 @@ class QOpenGLExtension_EXT_timer_query : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_timer_query();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64EXT *params);
void glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64EXT *params);
@@ -11182,7 +11182,7 @@ class QOpenGLExtension_EXT_transform_feedback : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_transform_feedback();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetTransformFeedbackVaryingEXT(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);
void glTransformFeedbackVaryingsEXT(GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode);
@@ -11257,7 +11257,7 @@ class QOpenGLExtension_EXT_vertex_array : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_vertex_array();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
void glTexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
@@ -11348,7 +11348,7 @@ class QOpenGLExtension_EXT_vertex_attrib_64bit : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_vertex_attrib_64bit();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexArrayVertexAttribLOffsetEXT(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
void glGetVertexAttribLdvEXT(GLuint index, GLenum pname, GLdouble *params);
@@ -11484,7 +11484,7 @@ class QOpenGLExtension_EXT_vertex_shader : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_vertex_shader();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetLocalConstantFloatvEXT(GLuint id, GLenum value, GLfloat *data);
void glGetLocalConstantIntegervEXT(GLuint id, GLenum value, GLint *data);
@@ -11798,7 +11798,7 @@ class QOpenGLExtension_EXT_vertex_weighting : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_vertex_weighting();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexWeightPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void glVertexWeightfvEXT(const GLfloat *weight);
@@ -11837,7 +11837,7 @@ class QOpenGLExtension_EXT_x11_sync_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_x11_sync_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLsync glImportSyncEXT(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);
@@ -11862,7 +11862,7 @@ class QOpenGLExtension_GREMEDY_frame_terminator : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_GREMEDY_frame_terminator();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFrameTerminatorGREMEDY();
@@ -11887,7 +11887,7 @@ class QOpenGLExtension_GREMEDY_string_marker : public QAbstractOpenGLExtension
public:
QOpenGLExtension_GREMEDY_string_marker();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glStringMarkerGREMEDY(GLsizei len, const GLvoid *string);
@@ -11917,7 +11917,7 @@ class QOpenGLExtension_HP_image_transform : public QAbstractOpenGLExtension
public:
QOpenGLExtension_HP_image_transform();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetImageTransformParameterfvHP(GLenum target, GLenum pname, GLfloat *params);
void glGetImageTransformParameterivHP(GLenum target, GLenum pname, GLint *params);
@@ -11978,7 +11978,7 @@ class QOpenGLExtension_IBM_multimode_draw_arrays : public QAbstractOpenGLExtensi
public:
QOpenGLExtension_IBM_multimode_draw_arrays();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiModeDrawElementsIBM(const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);
void glMultiModeDrawArraysIBM(const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
@@ -12017,7 +12017,7 @@ class QOpenGLExtension_IBM_vertex_array_lists : public QAbstractOpenGLExtension
public:
QOpenGLExtension_IBM_vertex_array_lists();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
void glTexCoordPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
@@ -12091,7 +12091,7 @@ class QOpenGLExtension_INGR_blend_func_separate : public QAbstractOpenGLExtensio
public:
QOpenGLExtension_INGR_blend_func_separate();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlendFuncSeparateINGR(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
@@ -12119,7 +12119,7 @@ class QOpenGLExtension_INTEL_parallel_arrays : public QAbstractOpenGLExtension
public:
QOpenGLExtension_INTEL_parallel_arrays();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexCoordPointervINTEL(GLint size, GLenum type, const GLvoid* *pointer);
void glColorPointervINTEL(GLint size, GLenum type, const GLvoid* *pointer);
@@ -12174,7 +12174,7 @@ class QOpenGLExtension_KHR_debug : public QAbstractOpenGLExtension
public:
QOpenGLExtension_KHR_debug();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);
void glObjectPtrLabel(const void *ptr, GLsizei length, const GLchar *label);
@@ -12262,7 +12262,7 @@ class QOpenGLExtension_MESA_resize_buffers : public QAbstractOpenGLExtension
public:
QOpenGLExtension_MESA_resize_buffers();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glResizeBuffersMESA();
@@ -12310,7 +12310,7 @@ class QOpenGLExtension_MESA_window_pos : public QAbstractOpenGLExtension
public:
QOpenGLExtension_MESA_window_pos();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glWindowPos4svMESA(const GLshort *v);
void glWindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w);
@@ -12508,7 +12508,7 @@ class QOpenGLExtension_NV_bindless_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_bindless_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsImageHandleResidentNV(GLuint64 handle);
GLboolean glIsTextureHandleResidentNV(GLuint64 handle);
@@ -12618,7 +12618,7 @@ class QOpenGLExtension_NV_conditional_render : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_conditional_render();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glEndConditionalRenderNV();
void glBeginConditionalRenderNV(GLuint id, GLenum mode);
@@ -12650,7 +12650,7 @@ class QOpenGLExtension_NV_copy_image : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_copy_image();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCopyImageSubDataNV(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);
@@ -12677,7 +12677,7 @@ class QOpenGLExtension_NV_depth_buffer_float : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_depth_buffer_float();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDepthBoundsdNV(GLdouble zmin, GLdouble zmax);
void glClearDepthdNV(GLdouble depth);
@@ -12724,7 +12724,7 @@ class QOpenGLExtension_NV_evaluators : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_evaluators();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glEvalMapsNV(GLenum target, GLenum mode);
void glGetMapAttribParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat *params);
@@ -12807,7 +12807,7 @@ class QOpenGLExtension_NV_explicit_multisample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_explicit_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexRenderbufferNV(GLenum target, GLuint renderbuffer);
void glSampleMaskIndexedNV(GLuint index, GLbitfield mask);
@@ -12852,7 +12852,7 @@ class QOpenGLExtension_NV_fence : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_fence();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSetFenceNV(GLuint fence, GLenum condition);
void glFinishFenceNV(GLuint fence);
@@ -12924,7 +12924,7 @@ class QOpenGLExtension_NV_fragment_program : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_fragment_program();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);
void glGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);
@@ -12984,7 +12984,7 @@ class QOpenGLExtension_NV_framebuffer_multisample_coverage : public QAbstractOpe
public:
QOpenGLExtension_NV_framebuffer_multisample_coverage();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glRenderbufferStorageMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);
@@ -13012,7 +13012,7 @@ class QOpenGLExtension_NV_geometry_program4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_geometry_program4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFramebufferTextureFaceEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);
void glFramebufferTextureLayerEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
@@ -13073,7 +13073,7 @@ class QOpenGLExtension_NV_gpu_program4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_gpu_program4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetProgramEnvParameterIuivNV(GLenum target, GLuint index, GLuint *params);
void glGetProgramEnvParameterIivNV(GLenum target, GLuint index, GLint *params);
@@ -13204,7 +13204,7 @@ class QOpenGLExtension_NV_gpu_program5 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_gpu_program5();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetProgramSubroutineParameteruivNV(GLenum target, GLuint index, GLuint *param);
void glProgramSubroutineParametersuivNV(GLenum target, GLsizei count, const GLuint *params);
@@ -13268,7 +13268,7 @@ class QOpenGLExtension_NV_gpu_shader5 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_gpu_shader5();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramUniform4ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
void glProgramUniform3ui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
@@ -13562,7 +13562,7 @@ class QOpenGLExtension_NV_half_float : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_half_float();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexAttribs4hvNV(GLuint index, GLsizei n, const GLhalfNV *v);
void glVertexAttribs3hvNV(GLuint index, GLsizei n, const GLhalfNV *v);
@@ -13908,7 +13908,7 @@ class QOpenGLExtension_NV_occlusion_query : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_occlusion_query();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetOcclusionQueryuivNV(GLuint id, GLenum pname, GLuint *params);
void glGetOcclusionQueryivNV(GLuint id, GLenum pname, GLint *params);
@@ -13977,7 +13977,7 @@ class QOpenGLExtension_NV_parameter_buffer_object : public QAbstractOpenGLExtens
public:
QOpenGLExtension_NV_parameter_buffer_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramBufferParametersIuivNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params);
void glProgramBufferParametersIivNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params);
@@ -14064,7 +14064,7 @@ class QOpenGLExtension_NV_path_rendering : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_path_rendering();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glPointAlongPathNV(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);
GLfloat glGetPathLengthNV(GLuint path, GLsizei startSegment, GLsizei numSegments);
@@ -14426,7 +14426,7 @@ class QOpenGLExtension_NV_pixel_data_range : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_pixel_data_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFlushPixelDataRangeNV(GLenum target);
void glPixelDataRangeNV(GLenum target, GLsizei length, const GLvoid *pointer);
@@ -14459,7 +14459,7 @@ class QOpenGLExtension_NV_point_sprite : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_point_sprite();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPointParameterivNV(GLenum pname, const GLint *params);
void glPointParameteriNV(GLenum pname, GLint param);
@@ -14496,7 +14496,7 @@ class QOpenGLExtension_NV_present_video : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_present_video();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetVideoui64vNV(GLuint video_slot, GLenum pname, GLuint64EXT *params);
void glGetVideoi64vNV(GLuint video_slot, GLenum pname, GLint64EXT *params);
@@ -14557,7 +14557,7 @@ class QOpenGLExtension_NV_primitive_restart : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_primitive_restart();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPrimitiveRestartIndexNV(GLuint index);
void glPrimitiveRestartNV();
@@ -14601,7 +14601,7 @@ class QOpenGLExtension_NV_register_combiners : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_register_combiners();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetFinalCombinerInputParameterivNV(GLenum variable, GLenum pname, GLint *params);
void glGetFinalCombinerInputParameterfvNV(GLenum variable, GLenum pname, GLfloat *params);
@@ -14711,7 +14711,7 @@ class QOpenGLExtension_NV_register_combiners2 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_register_combiners2();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetCombinerStageParameterfvNV(GLenum stage, GLenum pname, GLfloat *params);
void glCombinerStageParameterfvNV(GLenum stage, GLenum pname, const GLfloat *params);
@@ -14756,7 +14756,7 @@ class QOpenGLExtension_NV_shader_buffer_load : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_shader_buffer_load();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glProgramUniformui64vNV(GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);
void glProgramUniformui64NV(GLuint program, GLint location, GLuint64EXT value);
@@ -14872,7 +14872,7 @@ class QOpenGLExtension_NV_texture_barrier : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_texture_barrier();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTextureBarrierNV();
@@ -14902,7 +14902,7 @@ class QOpenGLExtension_NV_texture_multisample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_texture_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTextureImage3DMultisampleCoverageNV(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);
void glTextureImage2DMultisampleCoverageNV(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);
@@ -14973,7 +14973,7 @@ class QOpenGLExtension_NV_transform_feedback : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_transform_feedback();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTransformFeedbackStreamAttribsNV(GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);
void glGetTransformFeedbackVaryingNV(GLuint program, GLuint index, GLint *location);
@@ -15081,7 +15081,7 @@ class QOpenGLExtension_NV_transform_feedback2 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_transform_feedback2();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawTransformFeedbackNV(GLenum mode, GLuint id);
void glResumeTransformFeedbackNV();
@@ -15157,7 +15157,7 @@ class QOpenGLExtension_NV_vdpau_interop : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_vdpau_interop();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVDPAUUnmapSurfacesNV(GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);
void glVDPAUMapSurfacesNV(GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);
@@ -15246,7 +15246,7 @@ class QOpenGLExtension_NV_vertex_array_range : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_vertex_array_range();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexArrayRangeNV(GLsizei length, const GLvoid *pointer);
void glFlushVertexArrayRangeNV();
@@ -15296,7 +15296,7 @@ class QOpenGLExtension_NV_vertex_attrib_integer_64bit : public QAbstractOpenGLEx
public:
QOpenGLExtension_NV_vertex_attrib_integer_64bit();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexAttribLFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride);
void glGetVertexAttribLui64vNV(GLuint index, GLenum pname, GLuint64EXT *params);
@@ -15458,7 +15458,7 @@ class QOpenGLExtension_NV_vertex_buffer_unified_memory : public QAbstractOpenGLE
public:
QOpenGLExtension_NV_vertex_buffer_unified_memory();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetIntegerui64i_vNV(GLenum value, GLuint index, GLuint64EXT *result);
void glVertexAttribIFormatNV(GLuint index, GLint size, GLenum type, GLsizei stride);
@@ -15623,7 +15623,7 @@ class QOpenGLExtension_NV_vertex_program : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_vertex_program();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVertexAttribs4ubvNV(GLuint index, GLsizei count, const GLubyte *v);
void glVertexAttribs4svNV(GLuint index, GLsizei count, const GLshort *v);
@@ -16111,7 +16111,7 @@ class QOpenGLExtension_NV_vertex_program4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_vertex_program4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetVertexAttribIuivEXT(GLuint index, GLenum pname, GLuint *params);
void glGetVertexAttribIivEXT(GLuint index, GLenum pname, GLint *params);
@@ -16301,7 +16301,7 @@ class QOpenGLExtension_NV_video_capture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_video_capture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glVideoCaptureStreamParameterdvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);
void glVideoCaptureStreamParameterfvNV(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);
@@ -16403,7 +16403,7 @@ class QOpenGLExtension_PGI_misc_hints : public QAbstractOpenGLExtension
public:
QOpenGLExtension_PGI_misc_hints();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glHintPGI(GLenum target, GLint mode);
@@ -16429,7 +16429,7 @@ class QOpenGLExtension_SGIS_detail_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_detail_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetDetailTexFuncSGIS(GLenum target, GLfloat *points);
void glDetailTexFuncSGIS(GLenum target, GLsizei n, const GLfloat *points);
@@ -16462,7 +16462,7 @@ class QOpenGLExtension_SGIS_fog_function : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_fog_function();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetFogFuncSGIS(GLfloat *points);
void glFogFuncSGIS(GLsizei n, const GLfloat *points);
@@ -16495,7 +16495,7 @@ class QOpenGLExtension_SGIS_multisample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSamplePatternSGIS(GLenum pattern);
void glSampleMaskSGIS(GLclampf value, GLboolean invert);
@@ -16532,7 +16532,7 @@ class QOpenGLExtension_SGIS_pixel_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_pixel_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetPixelTexGenParameterfvSGIS(GLenum pname, GLfloat *params);
void glGetPixelTexGenParameterivSGIS(GLenum pname, GLint *params);
@@ -16593,7 +16593,7 @@ class QOpenGLExtension_SGIS_point_parameters : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_point_parameters();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPointParameterfvSGIS(GLenum pname, const GLfloat *params);
void glPointParameterfSGIS(GLenum pname, GLfloat param);
@@ -16626,7 +16626,7 @@ class QOpenGLExtension_SGIS_sharpen_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_sharpen_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetSharpenTexFuncSGIS(GLenum target, GLfloat *points);
void glSharpenTexFuncSGIS(GLenum target, GLsizei n, const GLfloat *points);
@@ -16659,7 +16659,7 @@ class QOpenGLExtension_SGIS_texture4D : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_texture4D();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexSubImage4DSGIS(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);
void glTexImage4DSGIS(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
@@ -16691,7 +16691,7 @@ class QOpenGLExtension_SGIS_texture_color_mask : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_texture_color_mask();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTextureColorMaskSGIS(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
@@ -16717,7 +16717,7 @@ class QOpenGLExtension_SGIS_texture_filter4 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIS_texture_filter4();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexFilterFuncSGIS(GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
void glGetTexFilterFuncSGIS(GLenum target, GLenum filter, GLfloat *weights);
@@ -16754,7 +16754,7 @@ class QOpenGLExtension_SGIX_async : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_async();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLboolean glIsAsyncMarkerSGIX(GLuint marker);
void glDeleteAsyncMarkersSGIX(GLuint marker, GLsizei range);
@@ -16814,7 +16814,7 @@ class QOpenGLExtension_SGIX_flush_raster : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_flush_raster();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFlushRasterSGIX();
@@ -16856,7 +16856,7 @@ class QOpenGLExtension_SGIX_fragment_lighting : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_fragment_lighting();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glLightEnviSGIX(GLenum pname, GLint param);
void glGetFragmentMaterialivSGIX(GLenum face, GLenum pname, GLint *params);
@@ -17000,7 +17000,7 @@ class QOpenGLExtension_SGIX_framezoom : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_framezoom();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFrameZoomSGIX(GLint factor);
@@ -17025,7 +17025,7 @@ class QOpenGLExtension_SGIX_igloo_interface : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_igloo_interface();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glIglooInterfaceSGIX(GLenum pname, const GLvoid *params);
@@ -17055,7 +17055,7 @@ class QOpenGLExtension_SGIX_instruments : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_instruments();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glStopInstrumentsSGIX(GLint marker);
void glStartInstrumentsSGIX();
@@ -17120,7 +17120,7 @@ class QOpenGLExtension_SGIX_list_priority : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_list_priority();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glListParameterivSGIX(GLuint list, GLenum pname, const GLint *params);
void glListParameteriSGIX(GLuint list, GLenum pname, GLint param);
@@ -17180,7 +17180,7 @@ class QOpenGLExtension_SGIX_pixel_texture : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_pixel_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glPixelTexGenSGIX(GLenum mode);
@@ -17208,7 +17208,7 @@ class QOpenGLExtension_SGIX_polynomial_ffd : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_polynomial_ffd();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glLoadIdentityDeformationMapSGIX(GLbitfield mask);
void glDeformSGIX(GLbitfield mask);
@@ -17254,7 +17254,7 @@ class QOpenGLExtension_SGIX_reference_plane : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_reference_plane();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glReferencePlaneSGIX(const GLdouble *equation);
@@ -17282,7 +17282,7 @@ class QOpenGLExtension_SGIX_sprite : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_sprite();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glSpriteParameterivSGIX(GLenum pname, const GLint *params);
void glSpriteParameteriSGIX(GLenum pname, GLint param);
@@ -17328,7 +17328,7 @@ class QOpenGLExtension_SGIX_tag_sample_buffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGIX_tag_sample_buffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTagSampleBufferSGIX();
@@ -17359,7 +17359,7 @@ class QOpenGLExtension_SGI_color_table : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SGI_color_table();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetColorTableParameterivSGI(GLenum target, GLenum pname, GLint *params);
void glGetColorTableParameterfvSGI(GLenum target, GLenum pname, GLfloat *params);
@@ -17426,7 +17426,7 @@ class QOpenGLExtension_SUNX_constant_data : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SUNX_constant_data();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glFinishTextureSUNX();
@@ -17458,7 +17458,7 @@ class QOpenGLExtension_SUN_global_alpha : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SUN_global_alpha();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGlobalAlphaFactoruiSUN(GLuint factor);
void glGlobalAlphaFactorusSUN(GLushort factor);
@@ -17532,7 +17532,7 @@ class QOpenGLExtension_SUN_mesh_array : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SUN_mesh_array();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawMeshArraysSUN(GLenum mode, GLint first, GLsizei count, GLsizei width);
@@ -17563,7 +17563,7 @@ class QOpenGLExtension_SUN_triangle_list : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SUN_triangle_list();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glReplacementCodePointerSUN(GLenum type, GLsizei stride, const GLvoid* *pointer);
void glReplacementCodeubvSUN(const GLubyte *code);
@@ -17669,7 +17669,7 @@ class QOpenGLExtension_SUN_vertex : public QAbstractOpenGLExtension
public:
QOpenGLExtension_SUN_vertex();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN(const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
@@ -17971,7 +17971,7 @@ class QOpenGLExtension_OES_EGL_image : public QAbstractOpenGLExtension
public:
QOpenGLExtension_OES_EGL_image();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glEGLImageTargetTexture2DOES(GLenum target, GLeglImageOES image);
void glEGLImageTargetRenderbufferStorageOES(GLenum target, GLeglImageOES image);
@@ -18004,7 +18004,7 @@ class QOpenGLExtension_OES_get_program_binary : public QAbstractOpenGLExtension
public:
QOpenGLExtension_OES_get_program_binary();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetProgramBinaryOES(GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);
void glProgramBinaryOES(GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length);
@@ -18038,7 +18038,7 @@ class QOpenGLExtension_OES_mapbuffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_OES_mapbuffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void* glMapBufferOES(GLenum target, GLenum access);
GLboolean glUnmapBufferOES(GLenum target);
@@ -18082,7 +18082,7 @@ class QOpenGLExtension_OES_texture_3D : public QAbstractOpenGLExtension
public:
QOpenGLExtension_OES_texture_3D();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexImage3DOES(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels);
void glTexSubImage3DOES(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels);
@@ -18145,7 +18145,7 @@ class QOpenGLExtension_OES_vertex_array_object : public QAbstractOpenGLExtension
public:
QOpenGLExtension_OES_vertex_array_object();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBindVertexArrayOES(GLuint array);
void glDeleteVertexArraysOES(GLsizei n, const GLuint *arrays);
@@ -18201,7 +18201,7 @@ class QOpenGLExtension_AMD_performance_monitor : public QAbstractOpenGLExtension
public:
QOpenGLExtension_AMD_performance_monitor();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize, GLuint *groups);
void glGetPerfMonitorCountersAMD(GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);
@@ -18296,7 +18296,7 @@ class QOpenGLExtension_ANGLE_framebuffer_blit : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ANGLE_framebuffer_blit();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glBlitFramebufferANGLE(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
@@ -18321,7 +18321,7 @@ class QOpenGLExtension_ANGLE_framebuffer_multisample : public QAbstractOpenGLExt
public:
QOpenGLExtension_ANGLE_framebuffer_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
@@ -18348,7 +18348,7 @@ class QOpenGLExtension_ANGLE_instanced_arrays : public QAbstractOpenGLExtension
public:
QOpenGLExtension_ANGLE_instanced_arrays();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawArraysInstancedANGLE(GLenum mode, GLint first, GLsizei count, GLsizei primcount);
void glDrawElementsInstancedANGLE(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount);
@@ -18387,7 +18387,7 @@ class QOpenGLExtension_ANGLE_translated_shader_source : public QAbstractOpenGLEx
public:
QOpenGLExtension_ANGLE_translated_shader_source();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetTranslatedShaderSourceANGLE(GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source);
@@ -18413,7 +18413,7 @@ class QOpenGLExtension_APPLE_framebuffer_multisample : public QAbstractOpenGLExt
public:
QOpenGLExtension_APPLE_framebuffer_multisample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glRenderbufferStorageMultisampleAPPLE(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
void glResolveMultisampleFramebufferAPPLE(void);
@@ -18446,7 +18446,7 @@ class QOpenGLExtension_EXT_debug_label : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_debug_label();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glLabelObjectEXT(GLenum type, GLuint object, GLsizei length, const GLchar *label);
void glGetObjectLabelEXT(GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label);
@@ -18480,7 +18480,7 @@ class QOpenGLExtension_EXT_debug_marker : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_debug_marker();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glInsertEventMarkerEXT(GLsizei length, const GLchar *marker);
void glPushGroupMarkerEXT(GLsizei length, const GLchar *marker);
@@ -18519,7 +18519,7 @@ class QOpenGLExtension_EXT_discard_framebuffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_discard_framebuffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum *attachments);
@@ -18545,7 +18545,7 @@ class QOpenGLExtension_EXT_multisampled_render_to_texture : public QAbstractOpen
public:
QOpenGLExtension_EXT_multisampled_render_to_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
void glFramebufferTexture2DMultisampleEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
@@ -18578,7 +18578,7 @@ class QOpenGLExtension_EXT_multi_draw_arrays : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_multi_draw_arrays();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glMultiDrawArraysEXT(GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
void glMultiDrawElementsEXT(GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
@@ -18616,7 +18616,7 @@ class QOpenGLExtension_EXT_occlusion_query_boolean : public QAbstractOpenGLExten
public:
QOpenGLExtension_EXT_occlusion_query_boolean();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGenQueriesEXT(GLsizei n, GLuint *ids);
void glDeleteQueriesEXT(GLsizei n, const GLuint *ids);
@@ -18686,7 +18686,7 @@ class QOpenGLExtension_EXT_robustness : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_robustness();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
GLenum glGetGraphicsResetStatusEXT(void);
void glReadnPixelsEXT(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data);
@@ -18761,7 +18761,7 @@ class QOpenGLExtension_EXT_separate_shader_objects : public QAbstractOpenGLExten
public:
QOpenGLExtension_EXT_separate_shader_objects();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glUseProgramStagesEXT(GLuint pipeline, GLbitfield stages, GLuint program);
void glActiveShaderProgramEXT(GLuint pipeline, GLuint program);
@@ -18994,7 +18994,7 @@ class QOpenGLExtension_EXT_texture_storage : public QAbstractOpenGLExtension
public:
QOpenGLExtension_EXT_texture_storage();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glTexStorage1DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);
void glTexStorage2DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);
@@ -19055,7 +19055,7 @@ class QOpenGLExtension_IMG_multisampled_render_to_texture : public QAbstractOpen
public:
QOpenGLExtension_IMG_multisampled_render_to_texture();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glRenderbufferStorageMultisampleIMG(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
void glFramebufferTexture2DMultisampleIMG(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples);
@@ -19088,7 +19088,7 @@ class QOpenGLExtension_NV_coverage_sample : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_coverage_sample();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glCoverageMaskNV(GLboolean mask);
void glCoverageOperationNV(GLenum operation);
@@ -19120,7 +19120,7 @@ class QOpenGLExtension_NV_draw_buffers : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_draw_buffers();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDrawBuffersNV(GLsizei n, const GLenum *bufs);
@@ -19151,7 +19151,7 @@ class QOpenGLExtension_NV_fence : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_fence();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glDeleteFencesNV(GLsizei n, const GLuint *fences);
void glGenFencesNV(GLsizei n, GLuint *fences);
@@ -19218,7 +19218,7 @@ class QOpenGLExtension_NV_read_buffer : public QAbstractOpenGLExtension
public:
QOpenGLExtension_NV_read_buffer();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glReadBufferNV(GLenum mode);
@@ -19243,7 +19243,7 @@ class QOpenGLExtension_QCOM_alpha_test : public QAbstractOpenGLExtension
public:
QOpenGLExtension_QCOM_alpha_test();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glAlphaFuncQCOM(GLenum func, GLclampf ref);
@@ -19271,7 +19271,7 @@ class QOpenGLExtension_QCOM_driver_control : public QAbstractOpenGLExtension
public:
QOpenGLExtension_QCOM_driver_control();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glGetDriverControlsQCOM(GLint *num, GLsizei size, GLuint *driverControls);
void glGetDriverControlStringQCOM(GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString);
@@ -19324,7 +19324,7 @@ class QOpenGLExtension_QCOM_extended_get : public QAbstractOpenGLExtension
public:
QOpenGLExtension_QCOM_extended_get();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glExtGetTexturesQCOM(GLuint *textures, GLint maxTextures, GLint *numTextures);
void glExtGetBuffersQCOM(GLuint *buffers, GLint maxBuffers, GLint *numBuffers);
@@ -19401,7 +19401,7 @@ class QOpenGLExtension_QCOM_extended_get2 : public QAbstractOpenGLExtension
public:
QOpenGLExtension_QCOM_extended_get2();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glExtGetShadersQCOM(GLuint *shaders, GLint maxShaders, GLint *numShaders);
void glExtGetProgramsQCOM(GLuint *programs, GLint maxPrograms, GLint *numPrograms);
@@ -19448,7 +19448,7 @@ class QOpenGLExtension_QCOM_tiled_rendering : public QAbstractOpenGLExtension
public:
QOpenGLExtension_QCOM_tiled_rendering();
- bool initializeOpenGLFunctions() Q_DECL_FINAL;
+ bool initializeOpenGLFunctions() final;
void glStartTilingQCOM(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask);
void glEndTilingQCOM(GLbitfield preserveMask);
diff --git a/src/platformheaders/eglfsfunctions/qeglfsfunctions.h b/src/platformheaders/eglfsfunctions/qeglfsfunctions.h
index b2f3b4c872..7165c3cff4 100644
--- a/src/platformheaders/eglfsfunctions/qeglfsfunctions.h
+++ b/src/platformheaders/eglfsfunctions/qeglfsfunctions.h
@@ -57,6 +57,65 @@ public:
if (func)
func(filename);
}
+
+ typedef int (*Vsp2AddLayerType)(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine);
+ static QByteArray vsp2AddLayerTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2AddLayer"); }
+
+ //vsp2 functions are currently internal and preliminary (see qdoc file)
+ static int vsp2AddLayer(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine)
+ {
+ auto func = reinterpret_cast<Vsp2AddLayerType>(QGuiApplication::platformFunction(vsp2AddLayerTypeIdentifier()));
+ if (func)
+ return func(screen, dmabufFd, size, position, drmPixelFormat, bytesPerLine);
+ return 0;
+ }
+
+ typedef bool (*Vsp2RemoveLayerType)(const QScreen *screen, int id);
+ static QByteArray vsp2RemoveLayerTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2RemoveLayer"); }
+
+ static bool vsp2RemoveLayer(const QScreen *screen, int id)
+ {
+ auto func = reinterpret_cast<Vsp2RemoveLayerType>(QGuiApplication::platformFunction(vsp2RemoveLayerTypeIdentifier()));
+ return func && func(screen, id);
+ }
+
+ typedef void (*Vsp2SetLayerBufferType)(const QScreen *screen, int id, int dmabufFd);
+ static QByteArray vsp2SetLayerBufferTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2SetLayerBuffer"); }
+
+ static void vsp2SetLayerBuffer(const QScreen *screen, int id, int dmabufFd)
+ {
+ auto func = reinterpret_cast<Vsp2SetLayerBufferType>(QGuiApplication::platformFunction(vsp2SetLayerBufferTypeIdentifier()));
+ if (func)
+ func(screen, id, dmabufFd);
+ }
+
+ typedef bool (*Vsp2SetLayerPositionType)(const QScreen *screen, int id, const QPoint &position);
+ static QByteArray vsp2SetLayerPositionTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2SetLayerPosition"); }
+
+ static bool vsp2SetLayerPosition(const QScreen *screen, int id, const QPoint &position)
+ {
+ auto func = reinterpret_cast<Vsp2SetLayerPositionType>(QGuiApplication::platformFunction(vsp2SetLayerPositionTypeIdentifier()));
+ return func && func(screen, id, position);
+ }
+
+ typedef bool (*Vsp2SetLayerAlphaType)(const QScreen *screen, int id, qreal alpha);
+ static QByteArray vsp2SetLayerAlphaTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2SetLayerAlpha"); }
+
+ static bool vsp2SetLayerAlpha(const QScreen *screen, int id, qreal alpha)
+ {
+ auto func = reinterpret_cast<Vsp2SetLayerAlphaType>(QGuiApplication::platformFunction(vsp2SetLayerAlphaTypeIdentifier()));
+ return func && func(screen, id, alpha);
+ }
+
+ typedef void (*Vsp2AddBlendListenerType)(const QScreen *screen, void(*callback)());
+ static QByteArray vsp2AddBlendListenerTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2AddBlendListener"); }
+
+ static void vsp2AddBlendListener(const QScreen *screen, void(*callback)())
+ {
+ auto func = reinterpret_cast<Vsp2AddBlendListenerType>(QGuiApplication::platformFunction(vsp2AddBlendListenerTypeIdentifier()));
+ if (func)
+ func(screen, callback);
+ }
};
diff --git a/src/platformheaders/eglfsfunctions/qeglfsfunctions.qdoc b/src/platformheaders/eglfsfunctions/qeglfsfunctions.qdoc
index 6aca88e46e..fc392ac369 100644
--- a/src/platformheaders/eglfsfunctions/qeglfsfunctions.qdoc
+++ b/src/platformheaders/eglfsfunctions/qeglfsfunctions.qdoc
@@ -65,3 +65,78 @@
\c{QT_QPA_EGLFS_DISABLE_INPUT} is set or when building Qt without evdev
support, this function will have no effect.
*/
+
+/*!
+ \fn int QEglFSFunctions::vsp2AddLayer(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine)
+ \internal
+ \preliminary
+*/
+
+/*!
+ \fn bool QEglFSFunctions::vsp2RemoveLayer(const QScreen *screen, int id)
+ \internal
+ \preliminary
+*/
+
+/*!
+ \fn void QEglFSFunctions::vsp2SetLayerBuffer(const QScreen *screen, int id, int dmabufFd)
+ \internal
+ \preliminary
+*/
+
+/*!
+ \fn bool QEglFSFunctions::vsp2SetLayerPosition(const QScreen *screen, int id, const QPoint &position)
+ \internal
+ \preliminary
+*/
+
+/*!
+ \fn void QEglFSFunctions::vsp2AddBlendListener(const QScreen *screen, void(*callback)())
+ \internal
+ \preliminary
+*/
+
+/*!
+ \typedef QEglFSFunctions::Vsp2AddBlendListenerType
+ \internal
+*/
+
+/*!
+ \typedef QEglFSFunctions::Vsp2AddLayerType
+ \internal
+*/
+
+/*!
+ \typedef QEglFSFunctions::Vsp2RemoveLayerType
+ \internal
+*/
+
+/*!
+ \typedef QEglFSFunctions::Vsp2SetLayerBufferType
+ \internal
+*/
+
+/*!
+ \typedef QEglFSFunctions::Vsp2SetLayerPositionType
+ \internal
+*/
+
+/*! \fn QByteArray QEglFSFunctions::vsp2AddBlendListenerTypeIdentifier()
+ \internal
+ */
+
+/*! \fn QByteArray QEglFSFunctions::vsp2AddLayerTypeIdentifier()
+ \internal
+ */
+
+/*! \fn QByteArray QEglFSFunctions::vsp2RemoveLayerTypeIdentifier()
+ \internal
+ */
+
+/*! \fn QByteArray QEglFSFunctions::vsp2SetLayerBufferTypeIdentifier()
+ \internal
+ */
+
+/*! \fn QByteArray QEglFSFunctions::vsp2SetLayerPositionTypeIdentifier()
+ \internal
+ */
diff --git a/src/platformheaders/nativecontexts/qcocoanativecontext.h b/src/platformheaders/nativecontexts/qcocoanativecontext.h
index 16cabe1737..8227485b15 100644
--- a/src/platformheaders/nativecontexts/qcocoanativecontext.h
+++ b/src/platformheaders/nativecontexts/qcocoanativecontext.h
@@ -45,6 +45,10 @@
QT_BEGIN_NAMESPACE
+#if defined(Q_CLANG_QDOC)
+typedef void NSOpenGLContext;
+#endif
+
struct QCocoaNativeContext
{
QCocoaNativeContext()
diff --git a/src/platformheaders/nativecontexts/qeglnativecontext.h b/src/platformheaders/nativecontexts/qeglnativecontext.h
index eae74126fd..d4a0e998da 100644
--- a/src/platformheaders/nativecontexts/qeglnativecontext.h
+++ b/src/platformheaders/nativecontexts/qeglnativecontext.h
@@ -46,6 +46,11 @@
QT_BEGIN_NAMESPACE
+#if defined(Q_CLANG_QDOC)
+typedef int EGLContext;
+typedef int EGLDisplay;
+#endif
+
struct QEGLNativeContext
{
QEGLNativeContext()
diff --git a/src/platformheaders/nativecontexts/qglxnativecontext.h b/src/platformheaders/nativecontexts/qglxnativecontext.h
index 0895261fdd..2b566d127a 100644
--- a/src/platformheaders/nativecontexts/qglxnativecontext.h
+++ b/src/platformheaders/nativecontexts/qglxnativecontext.h
@@ -46,6 +46,13 @@
QT_BEGIN_NAMESPACE
+#if defined(Q_CLANG_QDOC)
+typedef int GLXContext;
+typedef void Display;
+typedef int Window;
+typedef int VisualID;
+#endif
+
struct QGLXNativeContext
{
QGLXNativeContext()
diff --git a/src/platformheaders/nativecontexts/qglxnativecontext.qdoc b/src/platformheaders/nativecontexts/qglxnativecontext.qdoc
index 64b551aeb8..56182534a5 100644
--- a/src/platformheaders/nativecontexts/qglxnativecontext.qdoc
+++ b/src/platformheaders/nativecontexts/qglxnativecontext.qdoc
@@ -77,7 +77,7 @@
*/
/*!
- \fn QGLXNativeContext::QGLXNativeContext(GLXContext ctx, Display *dpy = 0, Window wnd = 0, VisualID vid = 0)
+ \fn QGLXNativeContext::QGLXNativeContext(GLXContext ctx, Display *dpy, Window wnd, VisualID vid)
Constructs a new instance with the provided \a ctx, \a dpy, \a wnd, \a vid handles.
*/
diff --git a/src/platformheaders/nativecontexts/qwglnativecontext.h b/src/platformheaders/nativecontexts/qwglnativecontext.h
index 1c742604e6..24244b285f 100644
--- a/src/platformheaders/nativecontexts/qwglnativecontext.h
+++ b/src/platformheaders/nativecontexts/qwglnativecontext.h
@@ -46,6 +46,11 @@
QT_BEGIN_NAMESPACE
+#if defined(Q_CLANG_QDOC)
+typedef int HGLRC;
+typedef int HWND;
+#endif
+
class QWGLNativeContext
{
public:
diff --git a/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc
index 9061690681..a52bbe061b 100644
--- a/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc
+++ b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc
@@ -124,7 +124,7 @@
*/
/*!
- \fn QByteArray setWindowActivationBehaviorIdentifier()
+ \fn QByteArray QWindowsWindowFunctions::setWindowActivationBehaviorIdentifier()
This function returns a bytearray that can be used to query
QGuiApplication::platformFunction() to retrieve the SetWindowActivationBehaviorType
diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_dummy_p.h b/src/platformsupport/devicediscovery/qdevicediscovery_dummy_p.h
index fea3a06cbd..fe669c8dec 100644
--- a/src/platformsupport/devicediscovery/qdevicediscovery_dummy_p.h
+++ b/src/platformsupport/devicediscovery/qdevicediscovery_dummy_p.h
@@ -61,7 +61,7 @@ class QDeviceDiscoveryDummy : public QDeviceDiscovery
public:
QDeviceDiscoveryDummy(QDeviceTypes types, QObject *parent = 0);
- QStringList scanConnectedDevices() Q_DECL_OVERRIDE;
+ QStringList scanConnectedDevices() override;
};
QT_END_NAMESPACE
diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_static_p.h b/src/platformsupport/devicediscovery/qdevicediscovery_static_p.h
index ab5a9c6f12..93110c3c55 100644
--- a/src/platformsupport/devicediscovery/qdevicediscovery_static_p.h
+++ b/src/platformsupport/devicediscovery/qdevicediscovery_static_p.h
@@ -61,7 +61,7 @@ class QDeviceDiscoveryStatic : public QDeviceDiscovery
public:
QDeviceDiscoveryStatic(QDeviceTypes types, QObject *parent = 0);
- QStringList scanConnectedDevices() Q_DECL_OVERRIDE;
+ QStringList scanConnectedDevices() override;
private:
bool checkDeviceType(const QString &device);
diff --git a/src/platformsupport/devicediscovery/qdevicediscovery_udev_p.h b/src/platformsupport/devicediscovery/qdevicediscovery_udev_p.h
index 3c53ef3f17..28618d0b21 100644
--- a/src/platformsupport/devicediscovery/qdevicediscovery_udev_p.h
+++ b/src/platformsupport/devicediscovery/qdevicediscovery_udev_p.h
@@ -63,7 +63,7 @@ class QDeviceDiscoveryUDev : public QDeviceDiscovery
public:
QDeviceDiscoveryUDev(QDeviceTypes types, struct udev *udev, QObject *parent = 0);
~QDeviceDiscoveryUDev();
- QStringList scanConnectedDevices() Q_DECL_OVERRIDE;
+ QStringList scanConnectedDevices() override;
private slots:
void handleUDevNotification();
diff --git a/src/platformsupport/edid/qedidparser_p.h b/src/platformsupport/edid/qedidparser_p.h
index c5888dc5d7..c436155258 100644
--- a/src/platformsupport/edid/qedidparser_p.h
+++ b/src/platformsupport/edid/qedidparser_p.h
@@ -47,10 +47,12 @@
// W A R N I N G
// -------------
//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
+// We mean it.
+//
QT_BEGIN_NAMESPACE
diff --git a/src/platformsupport/edid/qedidvendortable_p.h b/src/platformsupport/edid/qedidvendortable_p.h
index d09642d649..6ec399df05 100644
--- a/src/platformsupport/edid/qedidvendortable_p.h
+++ b/src/platformsupport/edid/qedidvendortable_p.h
@@ -47,6 +47,17 @@
#ifndef QEDIDVENDORTABLE_P_H
#define QEDIDVENDORTABLE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
QT_BEGIN_NAMESPACE
typedef struct VendorTable {
diff --git a/src/platformsupport/eglconvenience/qeglpbuffer_p.h b/src/platformsupport/eglconvenience/qeglpbuffer_p.h
index 76233967e7..0285e067a6 100644
--- a/src/platformsupport/eglconvenience/qeglpbuffer_p.h
+++ b/src/platformsupport/eglconvenience/qeglpbuffer_p.h
@@ -63,8 +63,8 @@ public:
QEGLPlatformContext::Flags flags = 0);
~QEGLPbuffer();
- QSurfaceFormat format() const Q_DECL_OVERRIDE { return m_format; }
- bool isValid() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override { return m_format; }
+ bool isValid() const override;
EGLSurface pbuffer() const { return m_pbuffer; }
diff --git a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
index 9d41eecd99..d6cbbe4131 100644
--- a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
@@ -72,15 +72,15 @@ public:
Flags flags = 0);
~QEGLPlatformContext();
- void initialize() Q_DECL_OVERRIDE;
- bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
- void doneCurrent() Q_DECL_OVERRIDE;
- void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
- QFunctionPointer getProcAddress(const char *procName) Q_DECL_OVERRIDE;
+ void initialize() override;
+ bool makeCurrent(QPlatformSurface *surface) override;
+ void doneCurrent() override;
+ void swapBuffers(QPlatformSurface *surface) override;
+ QFunctionPointer getProcAddress(const char *procName) override;
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
- bool isSharing() const Q_DECL_OVERRIDE { return m_shareContext != EGL_NO_CONTEXT; }
- bool isValid() const Q_DECL_OVERRIDE { return m_eglContext != EGL_NO_CONTEXT; }
+ QSurfaceFormat format() const override;
+ bool isSharing() const override { return m_shareContext != EGL_NO_CONTEXT; }
+ bool isValid() const override { return m_eglContext != EGL_NO_CONTEXT; }
EGLContext eglContext() const;
EGLDisplay eglDisplay() const;
diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h b/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h
index bed2532856..5930dc68e7 100644
--- a/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h
+++ b/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h
@@ -67,7 +67,7 @@ public:
explicit QPAEventDispatcherGlib(QObject *parent = 0);
~QPAEventDispatcherGlib();
- bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) override;
QEventLoop::ProcessEventsFlags m_flags;
};
diff --git a/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher_p.h b/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher_p.h
index 9a23b5c0bd..4ff047a60e 100644
--- a/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher_p.h
+++ b/src/platformsupport/eventdispatchers/qwindowsguieventdispatcher_p.h
@@ -63,8 +63,8 @@ public:
static const char *windowsMessageName(UINT msg);
- bool QT_ENSURE_STACK_ALIGNED_FOR_SSE processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
- void sendPostedEvents() Q_DECL_OVERRIDE;
+ bool QT_ENSURE_STACK_ALIGNED_FOR_SSE processEvents(QEventLoop::ProcessEventsFlags flags) override;
+ void sendPostedEvents() override;
private:
QEventLoop::ProcessEventsFlags m_flags;
diff --git a/src/platformsupport/fbconvenience/qfbbackingstore.cpp b/src/platformsupport/fbconvenience/qfbbackingstore.cpp
index 2cad3441e4..e2d94406a4 100644
--- a/src/platformsupport/fbconvenience/qfbbackingstore.cpp
+++ b/src/platformsupport/fbconvenience/qfbbackingstore.cpp
@@ -104,9 +104,8 @@ void QFbBackingStore::beginPaint(const QRegion &region)
if (mImage.hasAlphaChannel()) {
QPainter p(&mImage);
p.setCompositionMode(QPainter::CompositionMode_Source);
- const QVector<QRect> rects = region.rects();
- for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it)
- p.fillRect(*it, Qt::transparent);
+ for (const QRect &r : region)
+ p.fillRect(r, Qt::transparent);
}
}
diff --git a/src/platformsupport/fbconvenience/qfbbackingstore_p.h b/src/platformsupport/fbconvenience/qfbbackingstore_p.h
index c8dfe3489c..c4762c9327 100644
--- a/src/platformsupport/fbconvenience/qfbbackingstore_p.h
+++ b/src/platformsupport/fbconvenience/qfbbackingstore_p.h
@@ -66,10 +66,10 @@ public:
QFbBackingStore(QWindow *window);
~QFbBackingStore();
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE { return &mImage; }
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override { return &mImage; }
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
- void resize(const QSize &size, const QRegion &region) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &region) override;
const QImage image();
QImage toImage() const override;
@@ -77,8 +77,8 @@ public:
void lock();
void unlock();
- void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
- void endPaint() Q_DECL_OVERRIDE;
+ void beginPaint(const QRegion &) override;
+ void endPaint() override;
protected:
friend class QFbWindow;
diff --git a/src/platformsupport/fbconvenience/qfbscreen.cpp b/src/platformsupport/fbconvenience/qfbscreen.cpp
index 2b4498157c..c42fd879f8 100644
--- a/src/platformsupport/fbconvenience/qfbscreen.cpp
+++ b/src/platformsupport/fbconvenience/qfbscreen.cpp
@@ -210,10 +210,9 @@ QRegion QFbScreen::doRedraw()
if (!mPainter)
mPainter = new QPainter(&mScreenImage);
- const QVector<QRect> rects = mRepaintRegion.rects();
const QRect screenRect = mGeometry.translated(-screenOffset);
- for (int rectIndex = 0; rectIndex < mRepaintRegion.rectCount(); rectIndex++) {
- const QRect rect = rects[rectIndex].intersected(screenRect);
+ for (QRect rect : mRepaintRegion) {
+ rect = rect.intersected(screenRect);
if (rect.isEmpty())
continue;
diff --git a/src/platformsupport/fbconvenience/qfbscreen_p.h b/src/platformsupport/fbconvenience/qfbscreen_p.h
index 1c27a941cc..eed615de36 100644
--- a/src/platformsupport/fbconvenience/qfbscreen_p.h
+++ b/src/platformsupport/fbconvenience/qfbscreen_p.h
@@ -78,14 +78,14 @@ public:
virtual bool initialize();
- QRect geometry() const Q_DECL_OVERRIDE { return mGeometry; }
- int depth() const Q_DECL_OVERRIDE { return mDepth; }
- QImage::Format format() const Q_DECL_OVERRIDE { return mFormat; }
- QSizeF physicalSize() const Q_DECL_OVERRIDE { return mPhysicalSize; }
- QPlatformCursor *cursor() const Q_DECL_OVERRIDE { return mCursor; }
+ QRect geometry() const override { return mGeometry; }
+ int depth() const override { return mDepth; }
+ QImage::Format format() const override { return mFormat; }
+ QSizeF physicalSize() const override { return mPhysicalSize; }
+ QPlatformCursor *cursor() const override { return mCursor; }
QWindow *topWindow() const;
- QWindow *topLevelAt(const QPoint & p) const Q_DECL_OVERRIDE;
+ QWindow *topLevelAt(const QPoint & p) const override;
// compositor api
virtual void addWindow(QFbWindow *window);
@@ -109,7 +109,7 @@ protected:
virtual QRegion doRedraw();
void initializeCompositor();
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
QFbWindow *windowForId(WId wid) const;
diff --git a/src/platformsupport/fbconvenience/qfbwindow_p.h b/src/platformsupport/fbconvenience/qfbwindow_p.h
index 20bac46c69..76b34ce041 100644
--- a/src/platformsupport/fbconvenience/qfbwindow_p.h
+++ b/src/platformsupport/fbconvenience/qfbwindow_p.h
@@ -64,17 +64,17 @@ public:
QFbWindow(QWindow *window);
~QFbWindow();
- void raise() Q_DECL_OVERRIDE;
- void lower() Q_DECL_OVERRIDE;
+ void raise() override;
+ void lower() override;
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &rect) override;
+ void setVisible(bool visible) override;
- void setWindowState(Qt::WindowStates state) Q_DECL_OVERRIDE;
- void setWindowFlags(Qt::WindowFlags type) Q_DECL_OVERRIDE;
+ void setWindowState(Qt::WindowStates state) override;
+ void setWindowFlags(Qt::WindowFlags type) override;
Qt::WindowFlags windowFlags() const;
- WId winId() const Q_DECL_OVERRIDE { return mWindowId; }
+ WId winId() const override { return mWindowId; }
void setBackingStore(QFbBackingStore *store) { mBackingStore = store; }
QFbBackingStore *backingStore() const { return mBackingStore; }
@@ -83,9 +83,9 @@ public:
virtual void repaint(const QRegion&);
- void propagateSizeHints() Q_DECL_OVERRIDE { }
- bool setKeyboardGrabEnabled(bool) Q_DECL_OVERRIDE { return false; }
- bool setMouseGrabEnabled(bool) Q_DECL_OVERRIDE { return false; }
+ void propagateSizeHints() override { }
+ bool setKeyboardGrabEnabled(bool) override { return false; }
+ bool setMouseGrabEnabled(bool) override { return false; }
protected:
friend class QFbScreen;
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 969a9c17e0..aa8f9a892a 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -250,7 +250,17 @@ static const char specialLanguages[][6] = {
"", // Hatran
"", // Multani
"", // OldHungarian
- "" // SignWriting
+ "", // SignWriting
+ "", // Adlam
+ "", // Bhaiksuki
+ "", // Marchen
+ "", // Newa
+ "", // Osage
+ "", // Tangut
+ "", // MasaramGondi
+ "", // Nushu
+ "", // Soyombo
+ "" // ZanabazarSquare
};
Q_STATIC_ASSERT(sizeof specialLanguages / sizeof *specialLanguages == QChar::ScriptCount);
@@ -428,7 +438,7 @@ static void populateFromPattern(FcPattern *pattern)
if (res == FcResultMatch) {
bool hasLang = false;
#if FC_VERSION >= 20297
- FcChar8 *cap = Q_NULLPTR;
+ FcChar8 *cap = nullptr;
FcResult capRes = FcResultNoMatch;
#endif
for (int j = 1; j < QFontDatabase::WritingSystemsCount; ++j) {
@@ -438,7 +448,7 @@ static void populateFromPattern(FcPattern *pattern)
if (langRes != FcLangDifferentLang) {
#if FC_VERSION >= 20297
if (*capabilityForWritingSystem[j] && requiresOpenType(j)) {
- if (cap == Q_NULLPTR)
+ if (cap == nullptr)
capRes = FcPatternGetString(pattern, FC_CAPABILITY, 0, &cap);
if (capRes == FcResultMatch && strstr(reinterpret_cast<const char *>(cap), capabilityForWritingSystem[j]) == 0)
continue;
@@ -905,7 +915,7 @@ void QFontconfigDatabase::setupFontEngine(QFontEngineFT *engine, const QFontDef
if (services) {
const QList<QByteArray> desktopEnv = services->desktopEnvironment().split(':');
- useXftConf = desktopEnv.contains("GNOME") || desktopEnv.contains("UNITY");
+ useXftConf = desktopEnv.contains("GNOME") || desktopEnv.contains("UNITY") || desktopEnv.contains("XFCE");
}
if (useXftConf && !forcedAntialiasSetting) {
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
index 6a3261de30..a7257c2f98 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
@@ -61,15 +61,15 @@ class QFontEngineFT;
class QFontconfigDatabase : public QFreeTypeFontDatabase
{
public:
- void populateFontDatabase() Q_DECL_OVERRIDE;
- void invalidate() Q_DECL_OVERRIDE;
- QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
- QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
- QString resolveFontFamilyAlias(const QString &family) const Q_DECL_OVERRIDE;
- QFont defaultFont() const Q_DECL_OVERRIDE;
+ void populateFontDatabase() override;
+ void invalidate() override;
+ QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) override;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
+ QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override;
+ QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) override;
+ QString resolveFontFamilyAlias(const QString &family) const override;
+ QFont defaultFont() const override;
private:
void setupFontEngine(QFontEngineFT *engine, const QFontDef &fontDef) const;
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
index 1d2f451722..7f560c2d05 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
@@ -63,7 +63,7 @@ public:
~QFontEngineMultiFontConfig();
- bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const Q_DECL_OVERRIDE;
+ bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const override;
private:
FcPattern* getMatchPatternForFallback(int at) const;
diff --git a/src/platformsupport/fontdatabases/fontdatabases.pro b/src/platformsupport/fontdatabases/fontdatabases.pro
index d2726d08a0..f2bac9ab94 100644
--- a/src/platformsupport/fontdatabases/fontdatabases.pro
+++ b/src/platformsupport/fontdatabases/fontdatabases.pro
@@ -9,25 +9,25 @@ PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
darwin {
include($$PWD/mac/coretext.pri)
-} else {
- qtConfig(freetype) {
- include($$PWD/freetype/freetype.pri)
- }
+}
- unix {
- include($$PWD/genericunix/genericunix.pri)
- qtConfig(fontconfig) {
- include($$PWD/fontconfig/fontconfig.pri)
- }
- }
+qtConfig(freetype) {
+ include($$PWD/freetype/freetype.pri)
+}
- win32:!winrt {
- include($$PWD/windows/windows.pri)
+unix {
+ include($$PWD/genericunix/genericunix.pri)
+ qtConfig(fontconfig) {
+ include($$PWD/fontconfig/fontconfig.pri)
}
+}
- winrt {
- include($$PWD/winrt/winrt.pri)
- }
+win32:!winrt {
+ include($$PWD/windows/windows.pri)
+}
+
+winrt {
+ include($$PWD/winrt/winrt.pri)
}
load(qt_module)
diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp
index 9d6e3038c9..cc0246b64a 100644
--- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp
+++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp
@@ -1535,7 +1535,7 @@ QFontEngineFT::QGlyphSet *QFontEngineFT::loadGlyphSet(const QTransform &matrix)
// FT_Set_Transform only supports scalable fonts
if (!FT_IS_SCALABLE(freetype->face))
- return matrix.type() <= QTransform::TxTranslate ? &defaultGlyphSet : Q_NULLPTR;
+ return matrix.type() <= QTransform::TxTranslate ? &defaultGlyphSet : nullptr;
FT_Matrix m = QTransformToFTMatrix(matrix);
@@ -1967,7 +1967,7 @@ glyph_metrics_t QFontEngineFT::alphaMapBoundingBox(glyph_t glyph, QFixed subPixe
static inline QImage alphaMapFromGlyphData(QFontEngineFT::Glyph *glyph, QFontEngine::GlyphFormat glyphFormat)
{
- if (glyph == Q_NULLPTR || glyph->height == 0 || glyph->width == 0)
+ if (glyph == nullptr || glyph->height == 0 || glyph->width == 0)
return QImage();
QImage::Format format = QImage::Format_Invalid;
@@ -2015,14 +2015,14 @@ QImage *QFontEngineFT::lockedAlphaMapForGlyph(glyph_t glyphIndex, QFixed subPixe
currentlyLockedAlphaMap = alphaMapFromGlyphData(glyph, neededFormat);
- const bool glyphHasGeometry = glyph != Q_NULLPTR && glyph->height != 0 && glyph->width != 0;
+ const bool glyphHasGeometry = glyph != nullptr && glyph->height != 0 && glyph->width != 0;
if (!cacheEnabled && glyph != &emptyGlyph) {
currentlyLockedAlphaMap = currentlyLockedAlphaMap.copy();
delete glyph;
}
if (!glyphHasGeometry)
- return Q_NULLPTR;
+ return nullptr;
if (currentlyLockedAlphaMap.isNull())
return QFontEngine::lockedAlphaMapForGlyph(glyphIndex, subPixelPosition, neededFormat, t, offset);
@@ -2120,7 +2120,7 @@ QImage QFontEngineFT::alphaRGBMapForGlyph(glyph_t g, QFixed subPixelPosition, co
QImage QFontEngineFT::bitmapForGlyph(glyph_t g, QFixed subPixelPosition, const QTransform &t)
{
Glyph *glyph = loadGlyphFor(g, subPixelPosition, defaultFormat, t);
- if (glyph == Q_NULLPTR)
+ if (glyph == nullptr)
return QImage();
QImage img;
diff --git a/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h b/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h
index e98268ae4b..d498b0ac8b 100644
--- a/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h
+++ b/src/platformsupport/fontdatabases/freetype/qfontengine_ft_p.h
@@ -190,68 +190,68 @@ private:
mutable int fast_glyph_count;
};
- QFontEngine::FaceId faceId() const Q_DECL_OVERRIDE;
- QFontEngine::Properties properties() const Q_DECL_OVERRIDE;
- QFixed emSquareSize() const Q_DECL_OVERRIDE;
- bool supportsSubPixelPositions() const Q_DECL_OVERRIDE
+ QFontEngine::FaceId faceId() const override;
+ QFontEngine::Properties properties() const override;
+ QFixed emSquareSize() const override;
+ bool supportsSubPixelPositions() const override
{
return default_hint_style == HintLight ||
default_hint_style == HintNone;
}
- bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
- int synthesized() const Q_DECL_OVERRIDE;
+ bool getSfntTableData(uint tag, uchar *buffer, uint *length) const override;
+ int synthesized() const override;
- QFixed ascent() const Q_DECL_OVERRIDE;
- QFixed capHeight() const Q_DECL_OVERRIDE;
- QFixed descent() const Q_DECL_OVERRIDE;
- QFixed leading() const Q_DECL_OVERRIDE;
- QFixed xHeight() const Q_DECL_OVERRIDE;
- QFixed averageCharWidth() const Q_DECL_OVERRIDE;
+ QFixed ascent() const override;
+ QFixed capHeight() const override;
+ QFixed descent() const override;
+ QFixed leading() const override;
+ QFixed xHeight() const override;
+ QFixed averageCharWidth() const override;
- qreal maxCharWidth() const Q_DECL_OVERRIDE;
- QFixed lineThickness() const Q_DECL_OVERRIDE;
- QFixed underlinePosition() const Q_DECL_OVERRIDE;
+ qreal maxCharWidth() const override;
+ QFixed lineThickness() const override;
+ QFixed underlinePosition() const override;
- glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
- void doKerning(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
+ glyph_t glyphIndex(uint ucs4) const override;
+ void doKerning(QGlyphLayout *, ShaperFlags) const override;
- void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) Q_DECL_OVERRIDE;
+ void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) override;
- bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
+ bool supportsTransformation(const QTransform &transform) const override;
void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
- QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ QPainterPath *path, QTextItem::RenderFlags flags) override;
void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs,
- QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ QPainterPath *path, QTextItem::RenderFlags flags) override;
- bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
+ bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override;
- glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(glyph_t glyph, const QTransform &matrix) Q_DECL_OVERRIDE;
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ glyph_metrics_t boundingBox(glyph_t glyph) override;
+ glyph_metrics_t boundingBox(glyph_t glyph, const QTransform &matrix) override;
- void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- QImage alphaMapForGlyph(glyph_t g) Q_DECL_OVERRIDE { return alphaMapForGlyph(g, 0); }
- QImage alphaMapForGlyph(glyph_t, QFixed) Q_DECL_OVERRIDE;
- QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- QImage bitmapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
+ void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags flags) const override;
+ QImage alphaMapForGlyph(glyph_t g) override { return alphaMapForGlyph(g, 0); }
+ QImage alphaMapForGlyph(glyph_t, QFixed) override;
+ QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) override;
+ QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
+ QImage bitmapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
glyph_metrics_t alphaMapBoundingBox(glyph_t glyph,
QFixed subPixelPosition,
const QTransform &matrix,
- QFontEngine::GlyphFormat format) Q_DECL_OVERRIDE;
+ QFontEngine::GlyphFormat format) override;
QImage *lockedAlphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition,
GlyphFormat neededFormat, const QTransform &t,
- QPoint *offset) Q_DECL_OVERRIDE;
- bool hasInternalCaching() const Q_DECL_OVERRIDE { return cacheEnabled; }
- void unlockAlphaMapForGlyph() Q_DECL_OVERRIDE;
- bool expectsGammaCorrectedBlending() const Q_DECL_OVERRIDE;
+ QPoint *offset) override;
+ bool hasInternalCaching() const override { return cacheEnabled; }
+ void unlockAlphaMapForGlyph() override;
+ bool expectsGammaCorrectedBlending() const override;
- void removeGlyphFromCache(glyph_t glyph) Q_DECL_OVERRIDE;
- int glyphMargin(QFontEngine::GlyphFormat /* format */) Q_DECL_OVERRIDE { return 0; }
+ void removeGlyphFromCache(glyph_t glyph) override;
+ int glyphMargin(QFontEngine::GlyphFormat /* format */) override { return 0; }
- int glyphCount() const Q_DECL_OVERRIDE;
+ int glyphCount() const override;
enum Scaling {
Scaled,
@@ -282,13 +282,13 @@ private:
bool init(FaceId faceId, bool antialias, GlyphFormat format,
QFreetypeFace *freetypeFace);
- int getPointInOutline(glyph_t glyph, int flags, quint32 point, QFixed *xpos, QFixed *ypos, quint32 *nPoints) Q_DECL_OVERRIDE;
+ int getPointInOutline(glyph_t glyph, int flags, quint32 point, QFixed *xpos, QFixed *ypos, quint32 *nPoints) override;
void setQtDefaultHintStyle(QFont::HintingPreference hintingPreference);
- void setDefaultHintStyle(HintStyle style) Q_DECL_OVERRIDE;
+ void setDefaultHintStyle(HintStyle style) override;
- QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
- Qt::HANDLE handle() const Q_DECL_OVERRIDE;
+ QFontEngine *cloneWithSize(qreal pixelSize) const override;
+ Qt::HANDLE handle() const override;
bool initFromFontEngine(const QFontEngineFT *fontEngine);
HintStyle defaultHintStyle() const { return default_hint_style; }
diff --git a/src/platformsupport/fontdatabases/freetype/qfreetypefontdatabase_p.h b/src/platformsupport/fontdatabases/freetype/qfreetypefontdatabase_p.h
index 6d51361400..0b2956b16e 100644
--- a/src/platformsupport/fontdatabases/freetype/qfreetypefontdatabase_p.h
+++ b/src/platformsupport/fontdatabases/freetype/qfreetypefontdatabase_p.h
@@ -66,11 +66,11 @@ struct FontFile
class QFreeTypeFontDatabase : public QPlatformFontDatabase
{
public:
- void populateFontDatabase() Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
- void releaseHandle(void *handle) Q_DECL_OVERRIDE;
+ void populateFontDatabase() override;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
+ QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) override;
+ void releaseHandle(void *handle) override;
static QStringList addTTFile(const QByteArray &fontData, const QByteArray &file);
};
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
index 722a53ac20..5eb5cd8a30 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
@@ -687,9 +687,11 @@ static CTFontUIFontType fontTypeFromTheme(QPlatformTheme::Font f)
return kCTFontUIFontWindowTitle;
case QPlatformTheme::MdiSubWindowTitleFont:
- case QPlatformTheme::DockWidgetTitleFont:
return kCTFontUIFontSystem;
+ case QPlatformTheme::DockWidgetTitleFont:
+ return kCTFontUIFontSmallSystem;
+
case QPlatformTheme::PushButtonFont:
return kCTFontUIFontPushButton;
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
index 7e41e50a04..05f6ed641c 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
@@ -70,18 +70,18 @@ class QCoreTextFontDatabase : public QPlatformFontDatabase
public:
QCoreTextFontDatabase();
~QCoreTextFontDatabase();
- void populateFontDatabase() Q_DECL_OVERRIDE;
+ void populateFontDatabase() override;
bool populateFamilyAliases() override;
- void populateFamily(const QString &familyName) Q_DECL_OVERRIDE;
+ void populateFamily(const QString &familyName) override;
void invalidate() override;
- QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
- void releaseHandle(void *handle) Q_DECL_OVERRIDE;
- bool isPrivateFontFamily(const QString &family) const Q_DECL_OVERRIDE;
- QFont defaultFont() const Q_DECL_OVERRIDE;
- bool fontsAlwaysScalable() const Q_DECL_OVERRIDE;
- QList<int> standardSizes() const Q_DECL_OVERRIDE;
+ QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) override;
+ void releaseHandle(void *handle) override;
+ bool isPrivateFontFamily(const QString &family) const override;
+ QFont defaultFont() const override;
+ bool fontsAlwaysScalable() const override;
+ QList<int> standardSizes() const override;
// For iOS and OS X platform themes
QFont *themeFont(QPlatformTheme::Font) const;
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
index 66baf162d9..25ff69d877 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
@@ -47,28 +47,18 @@
#include <cmath>
-#if defined(Q_OS_OSX) && !QT_OSX_DEPLOYMENT_TARGET_BELOW(__MAC_10_11)
+#if defined(Q_OS_MACOS)
#import <AppKit/AppKit.h>
#endif
-#if defined(QT_PLATFORM_UIKIT) && !QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_8_2)
+#if defined(QT_PLATFORM_UIKIT)
#import <UIKit/UIKit.h>
#endif
// These are available cross platform, exported as kCTFontWeightXXX from CoreText.framework,
// but they are not documented and are not in public headers so are private API and exposed
// only through the NSFontWeightXXX and UIFontWeightXXX aliases in AppKit and UIKit (rdar://26109857)
-#if QT_MAC_DEPLOYMENT_TARGET_BELOW(__MAC_10_11, __IPHONE_8_2)
-#define kCTFontWeightUltraLight -0.8
-#define kCTFontWeightThin -0.6
-#define kCTFontWeightLight -0.4
-#define kCTFontWeightRegular 0
-#define kCTFontWeightMedium 0.23
-#define kCTFontWeightSemibold 0.3
-#define kCTFontWeightBold 0.4
-#define kCTFontWeightHeavy 0.56
-#define kCTFontWeightBlack 0.62
-#elif defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
#define kCTFontWeightUltraLight NSFontWeightUltraLight
#define kCTFontWeightThin NSFontWeightThin
#define kCTFontWeightLight NSFontWeightLight
@@ -192,6 +182,14 @@ public:
: QCoreTextFontEngine(font, def)
, m_fontData(fontData)
{}
+ QFontEngine *cloneWithSize(qreal pixelSize) const
+ {
+ QFontDef newFontDef = fontDef;
+ newFontDef.pixelSize = pixelSize;
+ newFontDef.pointSize = pixelSize * 72.0 / qt_defaultDpi();
+
+ return new QCoreTextRawFontEngine(cgFont, newFontDef, m_fontData);
+ }
QByteArray m_fontData;
};
@@ -665,11 +663,7 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition
if (!im.width() || !im.height())
return im;
-#ifdef Q_OS_OSX
- CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
-#else
- CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
-#endif
+ CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
uint cgflags = isColorGlyph ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst;
#ifdef kCGBitmapByteOrder32Host //only needed because CGImage.h added symbols in the minor version
cgflags |= kCGBitmapByteOrder32Host;
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
index 2986f0aaec..b77aaa27c1 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
@@ -70,53 +70,53 @@ public:
QCoreTextFontEngine(CGFontRef font, const QFontDef &def);
~QCoreTextFontEngine();
- glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
- bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
+ glyph_t glyphIndex(uint ucs4) const override;
+ bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override;
+ void recalcAdvances(QGlyphLayout *, ShaperFlags) const override;
- glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ glyph_metrics_t boundingBox(glyph_t glyph) override;
- QFixed ascent() const Q_DECL_OVERRIDE;
- QFixed capHeight() const Q_DECL_OVERRIDE;
- QFixed descent() const Q_DECL_OVERRIDE;
- QFixed leading() const Q_DECL_OVERRIDE;
- QFixed xHeight() const Q_DECL_OVERRIDE;
- qreal maxCharWidth() const Q_DECL_OVERRIDE;
- QFixed averageCharWidth() const Q_DECL_OVERRIDE;
+ QFixed ascent() const override;
+ QFixed capHeight() const override;
+ QFixed descent() const override;
+ QFixed leading() const override;
+ QFixed xHeight() const override;
+ qreal maxCharWidth() const override;
+ QFixed averageCharWidth() const override;
void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int numGlyphs,
- QPainterPath *path, QTextItem::RenderFlags) Q_DECL_OVERRIDE;
+ QPainterPath *path, QTextItem::RenderFlags) override;
- bool canRender(const QChar *string, int len) const Q_DECL_OVERRIDE;
+ bool canRender(const QChar *string, int len) const override;
- int synthesized() const Q_DECL_OVERRIDE { return synthesisFlags; }
- bool supportsSubPixelPositions() const Q_DECL_OVERRIDE { return true; }
+ int synthesized() const override { return synthesisFlags; }
+ bool supportsSubPixelPositions() const override { return true; }
- QFixed lineThickness() const Q_DECL_OVERRIDE;
- QFixed underlinePosition() const Q_DECL_OVERRIDE;
+ QFixed lineThickness() const override;
+ QFixed underlinePosition() const override;
void draw(CGContextRef ctx, qreal x, qreal y, const QTextItemInt &ti, int paintDeviceHeight);
- FaceId faceId() const Q_DECL_OVERRIDE;
- bool getSfntTableData(uint /*tag*/, uchar * /*buffer*/, uint * /*length*/) const Q_DECL_OVERRIDE;
- void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) Q_DECL_OVERRIDE;
- QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition) Q_DECL_OVERRIDE;
- QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed, const QTransform &matrix, GlyphFormat) Q_DECL_OVERRIDE;
- QImage bitmapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- QFixed emSquareSize() const Q_DECL_OVERRIDE;
- void doKerning(QGlyphLayout *g, ShaperFlags flags) const Q_DECL_OVERRIDE;
+ FaceId faceId() const override;
+ bool getSfntTableData(uint /*tag*/, uchar * /*buffer*/, uint * /*length*/) const override;
+ void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) override;
+ QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition) override;
+ QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) override;
+ QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
+ glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed, const QTransform &matrix, GlyphFormat) override;
+ QImage bitmapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
+ QFixed emSquareSize() const override;
+ void doKerning(QGlyphLayout *g, ShaperFlags flags) const override;
- bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
- bool expectsGammaCorrectedBlending() const Q_DECL_OVERRIDE;
+ bool supportsTransformation(const QTransform &transform) const override;
+ bool expectsGammaCorrectedBlending() const override;
- QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
- Qt::HANDLE handle() const Q_DECL_OVERRIDE;
- int glyphMargin(QFontEngine::GlyphFormat format) Q_DECL_OVERRIDE { Q_UNUSED(format); return 0; }
+ QFontEngine *cloneWithSize(qreal pixelSize) const override;
+ Qt::HANDLE handle() const override;
+ int glyphMargin(QFontEngine::GlyphFormat format) override { Q_UNUSED(format); return 0; }
- QFontEngine::Properties properties() const Q_DECL_OVERRIDE;
+ QFontEngine::Properties properties() const override;
static bool ct_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length);
static QFont::Weight qtWeightFromCFWeight(float value);
@@ -125,7 +125,7 @@ public:
static QFontEngine::GlyphFormat defaultGlyphFormat;
static QCoreTextFontEngine *create(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference);
-private:
+protected:
void init();
QImage imageForGlyph(glyph_t glyph, QFixed subPixelPosition, bool colorful, const QTransform &m);
CTFontRef ctfont;
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
index a0adcd6e2e..aab1ab9889 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp
@@ -76,20 +76,18 @@ typedef HRESULT (WINAPI *DWriteCreateFactoryType)(DWRITE_FACTORY_TYPE, const IID
static inline DWriteCreateFactoryType resolveDWriteCreateFactory()
{
- if (QSysInfo::windowsVersion() < QSysInfo::WV_VISTA)
- return Q_NULLPTR;
QSystemLibrary library(QStringLiteral("dwrite"));
QFunctionPointer result = library.resolve("DWriteCreateFactory");
if (Q_UNLIKELY(!result)) {
qWarning("Unable to load dwrite.dll");
- return Q_NULLPTR;
+ return nullptr;
}
return reinterpret_cast<DWriteCreateFactoryType>(result);
}
static void createDirectWriteFactory(IDWriteFactory **factory)
{
- *factory = Q_NULLPTR;
+ *factory = nullptr;
static const DWriteCreateFactoryType dWriteCreateFactory = resolveDWriteCreateFactory();
if (!dWriteCreateFactory)
@@ -539,7 +537,7 @@ namespace {
class CustomFontFileLoader
{
public:
- CustomFontFileLoader() : m_directWriteFontFileLoader(Q_NULLPTR)
+ CustomFontFileLoader() : m_directWriteFontFileLoader(nullptr)
{
createDirectWriteFactory(&m_directWriteFactory);
@@ -874,8 +872,8 @@ FontNames qt_getCanonicalFontNames(const uchar *table, quint32 bytes)
if ((platform_id == PlatformId_Microsoft
&& (encoding_id == 0 || encoding_id == 1))
- && (language_id & 0x3ff) == MS_LangIdEnglish
- && *idType < Microsoft) {
+ && ((language_id & 0x3ff) == MS_LangIdEnglish
+ || *idType < Microsoft)) {
*id = i;
*idType = Microsoft;
}
@@ -1128,7 +1126,7 @@ static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *t
// NEWTEXTMETRICEX (passed for TT fonts) is a NEWTEXTMETRIC, which according
// to the documentation is identical to a TEXTMETRIC except for the last four
// members, which we don't use anyway
- const FONTSIGNATURE *signature = Q_NULLPTR;
+ const FONTSIGNATURE *signature = nullptr;
if (type & TRUETYPE_FONTTYPE)
signature = &reinterpret_cast<const NEWTEXTMETRICEX *>(textmetric)->ntmFontSig;
addFontToDatabase(familyName, styleName, *logFont, textmetric, signature, type);
@@ -1174,6 +1172,46 @@ static int QT_WIN_CALLBACK populateFontFamilies(const LOGFONT *logFont, const TE
return 1; // continue
}
+void QWindowsFontDatabase::addDefaultEUDCFont()
+{
+ QString path;
+ {
+ HKEY key;
+ if (RegOpenKeyEx(HKEY_CURRENT_USER,
+ L"EUDC\\1252",
+ 0,
+ KEY_READ,
+ &key) != ERROR_SUCCESS) {
+ return;
+ }
+
+ WCHAR value[MAX_PATH];
+ DWORD bufferSize = sizeof(value);
+ ZeroMemory(value, bufferSize);
+
+ if (RegQueryValueEx(key,
+ L"SystemDefaultEUDCFont",
+ nullptr,
+ nullptr,
+ reinterpret_cast<LPBYTE>(value),
+ &bufferSize) == ERROR_SUCCESS) {
+ path = QString::fromWCharArray(value);
+ }
+
+ RegCloseKey(key);
+ }
+
+ if (!path.isEmpty()) {
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly)) {
+ qCWarning(lcQpaFonts) << "Unable to open default EUDC font:" << path;
+ return;
+ }
+
+ m_eudcFonts = addApplicationFont(file.readAll(), path);
+ }
+}
+
void QWindowsFontDatabase::populateFontDatabase()
{
removeApplicationFonts();
@@ -1188,6 +1226,7 @@ void QWindowsFontDatabase::populateFontDatabase()
QString systemDefaultFamily = QWindowsFontDatabase::systemDefaultFont().family();
if (QPlatformFontDatabase::resolveFontFamilyAlias(systemDefaultFamily) == systemDefaultFamily)
QPlatformFontDatabase::registerFontFamily(systemDefaultFamily);
+ addDefaultEUDCFont();
}
typedef QSharedPointer<QWindowsFontEngineData> QWindowsFontEngineDataPtr;
@@ -1585,6 +1624,7 @@ void QWindowsFontDatabase::removeApplicationFonts()
}
}
m_applicationFonts.clear();
+ m_eudcFonts.clear();
}
void QWindowsFontDatabase::releaseHandle(void *handle)
@@ -1719,11 +1759,8 @@ LOGFONT QWindowsFontDatabase::fontDefToLOGFONT(const QFontDef &request, const QS
qual = PROOF_QUALITY;
if (request.styleStrategy & QFont::PreferAntialias) {
- if (QSysInfo::WindowsVersion >= QSysInfo::WV_XP && !(request.styleStrategy & QFont::NoSubpixelAntialias)) {
- qual = CLEARTYPE_QUALITY;
- } else {
- qual = ANTIALIASED_QUALITY;
- }
+ qual = (request.styleStrategy & QFont::NoSubpixelAntialias) == 0
+ ? CLEARTYPE_QUALITY : ANTIALIASED_QUALITY;
} else if (request.styleStrategy & QFont::NoAntialias) {
qual = NONANTIALIASED_QUALITY;
} else if ((request.styleStrategy & QFont::NoSubpixelAntialias) && sharedFontData()->clearTypeEnabled) {
@@ -1849,6 +1886,7 @@ QStringList QWindowsFontDatabase::fallbacksForFamily(const QString &family, QFon
{
QStringList result;
result.append(QWindowsFontDatabase::familyForStyleHint(styleHint));
+ result.append(m_eudcFonts);
result.append(QWindowsFontDatabase::extraTryFontsForFamily(family));
result.append(QPlatformFontDatabase::fallbacksForFamily(family, style, styleHint, script));
@@ -1910,7 +1948,7 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request, const Q
} else {
bool isColorFont = false;
#if defined(QT_USE_DIRECTWRITE2)
- IDWriteFontFace2 *directWriteFontFace2 = Q_NULLPTR;
+ IDWriteFontFace2 *directWriteFontFace2 = nullptr;
if (SUCCEEDED(directWriteFontFace->QueryInterface(__uuidof(IDWriteFontFace2),
reinterpret_cast<void **>(&directWriteFontFace2)))) {
if (directWriteFontFace2->IsColorFont())
@@ -2038,4 +2076,9 @@ QString QWindowsFontDatabase::readRegistryString(HKEY parentHandle, const wchar_
return result;
}
+bool QWindowsFontDatabase::isPrivateFontFamily(const QString &family) const
+{
+ return m_eudcFonts.contains(family) || QPlatformFontDatabase::isPrivateFontFamily(family);
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
index 3f03b30f10..78477de38a 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft.cpp
@@ -144,7 +144,7 @@ static FontKeys &fontKeys()
return result;
}
-static const FontKey *findFontKey(const QString &name, int *indexIn = Q_NULLPTR)
+static const FontKey *findFontKey(const QString &name, int *indexIn = nullptr)
{
const FontKeys &keys = fontKeys();
for (auto it = keys.constBegin(), cend = keys.constEnd(); it != cend; ++it) {
@@ -157,7 +157,7 @@ static const FontKey *findFontKey(const QString &name, int *indexIn = Q_NULLPTR)
}
if (indexIn)
*indexIn = -1;
- return Q_NULLPTR;
+ return nullptr;
}
static bool addFontToDatabase(QString familyName,
@@ -310,7 +310,7 @@ static int QT_WIN_CALLBACK storeFont(const LOGFONT *logFont, const TEXTMETRIC *t
// NEWTEXTMETRICEX (passed for TT fonts) is a NEWTEXTMETRIC, which according
// to the documentation is identical to a TEXTMETRIC except for the last four
// members, which we don't use anyway
- const FONTSIGNATURE *signature = Q_NULLPTR;
+ const FONTSIGNATURE *signature = nullptr;
if (type & TRUETYPE_FONTTYPE)
signature = &reinterpret_cast<const NEWTEXTMETRICEX *>(textmetric)->ntmFontSig;
addFontToDatabase(faceName, styleName, fullName, *logFont, textmetric, signature, type);
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h
index 2df81274ad..c3d201b3a0 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_ft_p.h
@@ -60,18 +60,18 @@ QT_BEGIN_NAMESPACE
class QWindowsFontDatabaseFT : public QFreeTypeFontDatabase
{
public:
- void populateFontDatabase() Q_DECL_OVERRIDE;
- void populateFamily(const QString &familyName) Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
+ void populateFontDatabase() override;
+ void populateFamily(const QString &familyName) override;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize,
- QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
+ QFont::HintingPreference hintingPreference) override;
QStringList fallbacksForFamily(const QString &family, QFont::Style style,
QFont::StyleHint styleHint,
- QChar::Script script) const Q_DECL_OVERRIDE;
+ QChar::Script script) const override;
- QString fontDir() const Q_DECL_OVERRIDE;
- QFont defaultFont() const Q_DECL_OVERRIDE;
+ QString fontDir() const override;
+ QFont defaultFont() const override;
};
QT_END_NAMESPACE
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h
index 15172c09da..30f5beefdf 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h
@@ -95,20 +95,21 @@ public:
QWindowsFontDatabase();
~QWindowsFontDatabase();
- void populateFontDatabase() Q_DECL_OVERRIDE;
- void populateFamily(const QString &familyName) Q_DECL_OVERRIDE;
- QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
- QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
- QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
- void releaseHandle(void *handle) Q_DECL_OVERRIDE;
- QString fontDir() const Q_DECL_OVERRIDE;
-
- QFont defaultFont() const Q_DECL_OVERRIDE { return systemDefaultFont(); }
- bool fontsAlwaysScalable() const Q_DECL_OVERRIDE;
+ void populateFontDatabase() override;
+ void populateFamily(const QString &familyName) override;
+ QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) override;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
+ QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override;
+ QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const override;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) override;
+ void releaseHandle(void *handle) override;
+ QString fontDir() const override;
+
+ QFont defaultFont() const override { return systemDefaultFont(); }
+ bool fontsAlwaysScalable() const override;
void derefUniqueFont(const QString &uniqueFont);
void refUniqueFont(const QString &uniqueFont);
+ bool isPrivateFontFamily(const QString &family) const override;
static QFont systemDefaultFont();
@@ -134,6 +135,7 @@ public:
private:
void removeApplicationFonts();
+ void addDefaultEUDCFont();
struct WinApplicationFont {
HANDLE handle;
@@ -150,6 +152,7 @@ private:
QMap<QString, UniqueFontData> m_uniqueFontData;
static unsigned m_fontOptions;
+ QStringList m_eudcFonts;
};
#ifndef QT_NO_DEBUG_STREAM
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
index a337332b53..584e4db05d 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine.cpp
@@ -1267,31 +1267,36 @@ QFontEngine *QWindowsMultiFontEngine::loadEngine(int at)
lf.lfFaceName[nameSubstituteLength] = 0;
}
- IDWriteFont *directWriteFont = 0;
- HRESULT hr = data->directWriteGdiInterop->CreateFontFromLOGFONT(&lf, &directWriteFont);
- if (FAILED(hr)) {
- qWarning("%s: %s", __FUNCTION__,
- qPrintable(msgDirectWriteFunctionFailed(hr, "CreateFontFromLOGFONT", fam, nameSubstitute)));
+ HFONT hfont = CreateFontIndirect(&lf);
+ if (hfont == nullptr) {
+ qErrnoWarning("%s: CreateFontIndirect failed", __FUNCTION__);
} else {
- Q_ASSERT(directWriteFont);
- IDWriteFontFace *directWriteFontFace = NULL;
- HRESULT hr = directWriteFont->CreateFontFace(&directWriteFontFace);
+ HGDIOBJ oldFont = SelectObject(data->hdc, hfont);
+
+ IDWriteFontFace *directWriteFontFace = nullptr;
+ QWindowsFontEngineDirectWrite *fedw = nullptr;
+ HRESULT hr = data->directWriteGdiInterop->CreateFontFaceFromHdc(data->hdc, &directWriteFontFace);
if (SUCCEEDED(hr)) {
Q_ASSERT(directWriteFontFace);
- QWindowsFontEngineDirectWrite *fedw = new QWindowsFontEngineDirectWrite(directWriteFontFace,
- fontEngine->fontDef.pixelSize,
- data);
+ fedw = new QWindowsFontEngineDirectWrite(directWriteFontFace,
+ fontEngine->fontDef.pixelSize,
+ data);
fedw->fontDef.weight = fontEngine->fontDef.weight;
if (fontEngine->fontDef.style > QFont::StyleNormal)
fedw->fontDef.style = fontEngine->fontDef.style;
fedw->fontDef.family = fam;
fedw->fontDef.hintingPreference = fontEngine->fontDef.hintingPreference;
fedw->fontDef.stretch = fontEngine->fontDef.stretch;
- return fedw;
} else {
qWarning("%s: %s", __FUNCTION__,
qPrintable(msgDirectWriteFunctionFailed(hr, "CreateFontFace", fam, nameSubstitute)));
}
+
+ SelectObject(data->hdc, oldFont);
+ DeleteObject(hfont);
+
+ if (fedw != nullptr)
+ return fedw;
}
}
#endif
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h
index 76b45d7a7b..2ec391c4da 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontengine_p.h
@@ -76,53 +76,53 @@ public:
void initFontInfo(const QFontDef &request,
int dpi);
- QFixed lineThickness() const Q_DECL_OVERRIDE;
- Properties properties() const Q_DECL_OVERRIDE;
- void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) Q_DECL_OVERRIDE;
- FaceId faceId() const Q_DECL_OVERRIDE;
- bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
- int synthesized() const Q_DECL_OVERRIDE;
- QFixed emSquareSize() const Q_DECL_OVERRIDE;
-
- glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
- bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags) const Q_DECL_OVERRIDE;
-
- void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ QFixed lineThickness() const override;
+ Properties properties() const override;
+ void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) override;
+ FaceId faceId() const override;
+ bool getSfntTableData(uint tag, uchar *buffer, uint *length) const override;
+ int synthesized() const override;
+ QFixed emSquareSize() const override;
+
+ glyph_t glyphIndex(uint ucs4) const override;
+ bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override;
+ void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags) const override;
+
+ void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) override;
virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
- QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ QPainterPath *path, QTextItem::RenderFlags flags) override;
HGDIOBJ selectDesignFont() const;
- glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(glyph_t g) Q_DECL_OVERRIDE { return boundingBox(g, QTransform()); }
- glyph_metrics_t boundingBox(glyph_t g, const QTransform &t) Q_DECL_OVERRIDE;
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ glyph_metrics_t boundingBox(glyph_t g) override { return boundingBox(g, QTransform()); }
+ glyph_metrics_t boundingBox(glyph_t g, const QTransform &t) override;
- QFixed ascent() const Q_DECL_OVERRIDE;
- QFixed descent() const Q_DECL_OVERRIDE;
- QFixed leading() const Q_DECL_OVERRIDE;
- QFixed xHeight() const Q_DECL_OVERRIDE;
- QFixed capHeight() const Q_DECL_OVERRIDE;
- QFixed averageCharWidth() const Q_DECL_OVERRIDE;
- qreal maxCharWidth() const Q_DECL_OVERRIDE;
- qreal minLeftBearing() const Q_DECL_OVERRIDE;
- qreal minRightBearing() const Q_DECL_OVERRIDE;
+ QFixed ascent() const override;
+ QFixed descent() const override;
+ QFixed leading() const override;
+ QFixed xHeight() const override;
+ QFixed capHeight() const override;
+ QFixed averageCharWidth() const override;
+ qreal maxCharWidth() const override;
+ qreal minLeftBearing() const override;
+ qreal minRightBearing() const override;
- QImage alphaMapForGlyph(glyph_t t) Q_DECL_OVERRIDE { return alphaMapForGlyph(t, QTransform()); }
- QImage alphaMapForGlyph(glyph_t, const QTransform &xform) Q_DECL_OVERRIDE;
- QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform) Q_DECL_OVERRIDE;
- glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed, const QTransform &matrix, GlyphFormat) Q_DECL_OVERRIDE;
+ QImage alphaMapForGlyph(glyph_t t) override { return alphaMapForGlyph(t, QTransform()); }
+ QImage alphaMapForGlyph(glyph_t, const QTransform &xform) override;
+ QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform) override;
+ glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed, const QTransform &matrix, GlyphFormat) override;
- QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
- Qt::HANDLE handle() const Q_DECL_OVERRIDE;
- bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
+ QFontEngine *cloneWithSize(qreal pixelSize) const override;
+ Qt::HANDLE handle() const override;
+ bool supportsTransformation(const QTransform &transform) const override;
#ifndef Q_CC_MINGW
- void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0) Q_DECL_OVERRIDE;
+ void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0) override;
#endif
- bool hasUnreliableGlyphOutline() const Q_DECL_OVERRIDE;
+ bool hasUnreliableGlyphOutline() const override;
int getGlyphIndexes(const QChar *ch, int numChars, QGlyphLayout *glyphs) const;
void getCMap();
@@ -173,7 +173,7 @@ class QWindowsMultiFontEngine : public QFontEngineMulti
public:
explicit QWindowsMultiFontEngine(QFontEngine *fe, int script);
- QFontEngine *loadEngine(int at) Q_DECL_OVERRIDE;
+ QFontEngine *loadEngine(int at) override;
};
QT_END_NAMESPACE
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
index f07e711048..0e017c3b77 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite.cpp
@@ -282,7 +282,7 @@ static UUID uuidIdWriteLocalFontFileLoader()
QString QWindowsFontEngineDirectWrite::filenameFromFontFile(IDWriteFontFile *fontFile)
{
- IDWriteFontFileLoader *loader = Q_NULLPTR;
+ IDWriteFontFileLoader *loader = nullptr;
HRESULT hr = fontFile->GetLoader(&loader);
if (FAILED(hr)) {
@@ -290,11 +290,11 @@ QString QWindowsFontEngineDirectWrite::filenameFromFontFile(IDWriteFontFile *fon
return QString();
}
- QIdWriteLocalFontFileLoader *localLoader = Q_NULLPTR;
+ QIdWriteLocalFontFileLoader *localLoader = nullptr;
hr = loader->QueryInterface(uuidIdWriteLocalFontFileLoader(),
reinterpret_cast<void **>(&localLoader));
- const void *fontFileReferenceKey = Q_NULLPTR;
+ const void *fontFileReferenceKey = nullptr;
UINT32 fontFileReferenceKeySize = 0;
if (SUCCEEDED(hr)) {
hr = fontFile->GetReferenceKey(&fontFileReferenceKey,
@@ -326,10 +326,10 @@ QString QWindowsFontEngineDirectWrite::filenameFromFontFile(IDWriteFontFile *fon
ret = QString::fromWCharArray(filePath.data());
}
- if (localLoader != Q_NULLPTR)
+ if (localLoader != nullptr)
localLoader->Release();
- if (loader != Q_NULLPTR)
+ if (loader != nullptr)
loader->Release();
return ret;
}
@@ -349,7 +349,7 @@ void QWindowsFontEngineDirectWrite::collectMetrics()
m_lineGap = DESIGN_TO_LOGICAL(metrics.lineGap);
m_underlinePosition = DESIGN_TO_LOGICAL(metrics.underlinePosition);
- IDWriteFontFile *fontFile = Q_NULLPTR;
+ IDWriteFontFile *fontFile = nullptr;
UINT32 numberOfFiles = 1;
if (SUCCEEDED(m_directWriteFontFace->GetFiles(&numberOfFiles, &fontFile))) {
m_faceId.filename = QFile::encodeName(filenameFromFontFile(fontFile));
@@ -713,7 +713,7 @@ QImage QWindowsFontEngineDirectWrite::imageForGlyph(glyph_t t,
#if defined(QT_USE_DIRECTWRITE2)
HRESULT hr = DWRITE_E_NOCOLOR;
IDWriteColorGlyphRunEnumerator *enumerator = 0;
- IDWriteFactory2 *factory2 = Q_NULLPTR;
+ IDWriteFactory2 *factory2 = nullptr;
if (glyphFormat == QFontEngine::Format_ARGB
&& SUCCEEDED(m_fontEngineData->directWriteFactory->QueryInterface(__uuidof(IDWriteFactory2),
reinterpret_cast<void **>(&factory2)))) {
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h
index db4e79e44f..83fdddfa26 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h
+++ b/src/platformsupport/fontdatabases/windows/qwindowsfontenginedirectwrite_p.h
@@ -80,41 +80,41 @@ public:
void initFontInfo(const QFontDef &request, int dpi);
- QFixed lineThickness() const Q_DECL_OVERRIDE;
- QFixed underlinePosition() const Q_DECL_OVERRIDE;
- bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
- QFixed emSquareSize() const Q_DECL_OVERRIDE;
+ QFixed lineThickness() const override;
+ QFixed underlinePosition() const override;
+ bool getSfntTableData(uint tag, uchar *buffer, uint *length) const override;
+ QFixed emSquareSize() const override;
- glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
+ glyph_t glyphIndex(uint ucs4) const override;
bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs,
- ShaperFlags flags) const Q_DECL_OVERRIDE;
- void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags) const Q_DECL_OVERRIDE;
+ ShaperFlags flags) const override;
+ void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags) const override;
void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
- QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ QPainterPath *path, QTextItem::RenderFlags flags) override;
- glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(glyph_t g) Q_DECL_OVERRIDE;
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override;
+ glyph_metrics_t boundingBox(glyph_t g) override;
glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, QFixed,
- const QTransform &matrix, GlyphFormat) Q_DECL_OVERRIDE;
+ const QTransform &matrix, GlyphFormat) override;
- QFixed ascent() const Q_DECL_OVERRIDE;
- QFixed capHeight() const Q_DECL_OVERRIDE;
- QFixed descent() const Q_DECL_OVERRIDE;
- QFixed leading() const Q_DECL_OVERRIDE;
- QFixed xHeight() const Q_DECL_OVERRIDE;
- qreal maxCharWidth() const Q_DECL_OVERRIDE;
- FaceId faceId() const Q_DECL_OVERRIDE;
+ QFixed ascent() const override;
+ QFixed capHeight() const override;
+ QFixed descent() const override;
+ QFixed leading() const override;
+ QFixed xHeight() const override;
+ qreal maxCharWidth() const override;
+ FaceId faceId() const override;
- bool supportsSubPixelPositions() const Q_DECL_OVERRIDE;
+ bool supportsSubPixelPositions() const override;
- QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
- QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform) Q_DECL_OVERRIDE;
- QImage bitmapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
+ QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition) override;
+ QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) override;
+ QImage alphaRGBMapForGlyph(glyph_t t, QFixed subPixelPosition, const QTransform &xform) override;
+ QImage bitmapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) override;
- QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
- Qt::HANDLE handle() const Q_DECL_OVERRIDE;
+ QFontEngine *cloneWithSize(qreal pixelSize) const override;
+ Qt::HANDLE handle() const override;
const QSharedPointer<QWindowsFontEngineData> &fontEngineData() const { return m_fontEngineData; }
diff --git a/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp
index f8fcff952a..b1133dca22 100644
--- a/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp
+++ b/src/platformsupport/fontdatabases/windows/qwindowsnativeimage.cpp
@@ -98,11 +98,13 @@ static inline HBITMAP createDIB(HDC hdc, int width, int height,
bmi.blueMask = 0;
}
- uchar *bits = Q_NULLPTR;
+ uchar *bits = nullptr;
HBITMAP bitmap = CreateDIBSection(hdc, reinterpret_cast<BITMAPINFO *>(&bmi),
DIB_RGB_COLORS, reinterpret_cast<void **>(&bits), 0, 0);
- if (Q_UNLIKELY(!bitmap || !bits))
- qFatal("%s: CreateDIBSection failed.", __FUNCTION__);
+ if (Q_UNLIKELY(!bitmap || !bits)) {
+ qFatal("%s: CreateDIBSection failed (%dx%d, format: %d)", __FUNCTION__,
+ width, height, int(format));
+ }
*bitsIn = bits;
return bitmap;
diff --git a/src/platformsupport/graphics/qrasterbackingstore_p.h b/src/platformsupport/graphics/qrasterbackingstore_p.h
index 2764fd6432..357e861d1d 100644
--- a/src/platformsupport/graphics/qrasterbackingstore_p.h
+++ b/src/platformsupport/graphics/qrasterbackingstore_p.h
@@ -62,12 +62,12 @@ public:
QRasterBackingStore(QWindow *window);
~QRasterBackingStore();
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
- bool scroll(const QRegion &area, int dx, int dy) Q_DECL_OVERRIDE;
- void beginPaint(const QRegion &region) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &staticContents) override;
+ bool scroll(const QRegion &area, int dx, int dy) override;
+ void beginPaint(const QRegion &region) override;
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- QImage toImage() const Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
+ QImage toImage() const override;
protected:
virtual QImage::Format format() const;
diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
index 1046b86ec6..47a65eded8 100644
--- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
+++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
@@ -74,7 +74,7 @@ void QFdContainer::reset() Q_DECL_NOTHROW
}
QEvdevKeyboardHandler::QEvdevKeyboardHandler(const QString &device, QFdContainer &fd, bool disableZap, bool enableCompose, const QString &keymapFile)
- : m_device(device), m_fd(fd.release()), m_notify(Q_NULLPTR),
+ : m_device(device), m_fd(fd.release()), m_notify(nullptr),
m_modifiers(0), m_composing(0), m_dead_unicode(0xffff),
m_no_zap(disableZap), m_do_compose(enableCompose),
m_keymap(0), m_keymap_size(0), m_keycompose(0), m_keycompose_size(0)
@@ -175,7 +175,7 @@ void QEvdevKeyboardHandler::readKeycode()
// by the above error over and over again.
if (errno == ENODEV) {
delete m_notify;
- m_notify = Q_NULLPTR;
+ m_notify = nullptr;
m_fd.reset();
}
return;
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
index 8614de066f..04372ae4d9 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
@@ -184,7 +184,7 @@ void QEvdevMouseHandler::sendMouseEvent()
m_prevInvalid = false;
}
- emit handleMouseEvent(x, y, m_abs, m_buttons);
+ emit handleMouseEvent(x, y, m_abs, m_buttons, m_button, m_eventType);
m_prevx = m_x;
m_prevy = m_y;
@@ -210,7 +210,7 @@ void QEvdevMouseHandler::readMouseData()
// by the above error over and over again.
if (errno == ENODEV) {
delete m_notify;
- m_notify = Q_NULLPTR;
+ m_notify = nullptr;
qt_safe_close(m_fd);
m_fd = -1;
}
@@ -286,6 +286,8 @@ void QEvdevMouseHandler::readMouseData()
case 0x11f: button = Qt::ExtraButton13; break;
}
m_buttons.setFlag(button, data->value);
+ m_button = button;
+ m_eventType = data->value == 0 ? QEvent::MouseButtonRelease : QEvent::MouseButtonPress;
btnChanged = true;
} else if (data->type == EV_SYN && data->code == SYN_REPORT) {
if (btnChanged) {
@@ -293,6 +295,7 @@ void QEvdevMouseHandler::readMouseData()
sendMouseEvent();
pendingMouseEvent = false;
} else if (posChanged) {
+ m_eventType = QEvent::MouseMove;
posChanged = false;
if (m_compression) {
pendingMouseEvent = true;
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
index 6cad4b9173..c7f2b04eb2 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
+++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler_p.h
@@ -54,6 +54,7 @@
#include <QObject>
#include <QString>
#include <QPoint>
+#include <QEvent>
QT_BEGIN_NAMESPACE
@@ -69,7 +70,8 @@ public:
void readMouseData();
signals:
- void handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons);
+ void handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons,
+ Qt::MouseButton button, QEvent::Type type);
void handleWheelEvent(QPoint delta);
private:
@@ -86,6 +88,8 @@ private:
bool m_abs;
bool m_compression;
Qt::MouseButtons m_buttons;
+ Qt::MouseButton m_button;
+ QEvent::Type m_eventType;
int m_jitterLimitSquared;
bool m_prevInvalid;
int m_hardwareWidth;
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
index ba94bcd460..5264736dd6 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
@@ -131,7 +131,8 @@ void QEvdevMouseManager::clampPosition()
m_y = g.bottom() - m_yoffset;
}
-void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons)
+void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons,
+ Qt::MouseButton button, QEvent::Type type)
{
// update current absolute coordinates
if (!abs) {
@@ -147,7 +148,8 @@ void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButto
QPoint pos(m_x + m_xoffset, m_y + m_yoffset);
// Cannot track the keyboard modifiers ourselves here. Instead, report the
// modifiers from the last key event that has been seen by QGuiApplication.
- QWindowSystemInterface::handleMouseEvent(0, pos, pos, buttons, QGuiApplication::keyboardModifiers());
+ Qt::KeyboardModifiers mods = QGuiApplication::keyboardModifiers();
+ QWindowSystemInterface::handleMouseEvent(0, pos, pos, buttons, button, type, mods);
}
void QEvdevMouseManager::handleWheelEvent(QPoint delta)
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h
index 10703655b3..13a8e3dec5 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h
+++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager_p.h
@@ -68,7 +68,8 @@ public:
QEvdevMouseManager(const QString &key, const QString &specification, QObject *parent = 0);
~QEvdevMouseManager();
- void handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons);
+ void handleMouseEvent(int x, int y, bool abs, Qt::MouseButtons buttons,
+ Qt::MouseButton button, QEvent::Type type);
void handleWheelEvent(QPoint delta);
void addMouse(const QString &deviceNode = QString());
diff --git a/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h b/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h
index 8d848d6ebb..66e821117a 100644
--- a/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h
+++ b/src/platformsupport/input/evdevtablet/qevdevtablethandler_p.h
@@ -85,7 +85,7 @@ class QEvdevTabletHandlerThread : public QDaemonThread
public:
explicit QEvdevTabletHandlerThread(const QString &device, const QString &spec, QObject *parent = 0);
~QEvdevTabletHandlerThread();
- void run() Q_DECL_OVERRIDE;
+ void run() override;
QEvdevTabletHandler *handler() { return m_handler; }
private:
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
index c7595cf2b3..7b7649bc5c 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
+++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
@@ -148,7 +148,7 @@ public:
mutable QPointer<QScreen> m_screen;
// Touch filtering and prediction are part of the same thing. The default
- // prediction is 0ms, but sensible results can be acheived by setting it
+ // prediction is 0ms, but sensible results can be achieved by setting it
// to, for instance, 16ms.
// For filtering to work well, the QPA plugin should provide a dead-steady
// implementation of QPlatformWindow::requestUpdate().
@@ -192,9 +192,9 @@ static inline bool testBit(long bit, const long *array)
#endif
QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &device, const QString &spec, QObject *parent)
- : QObject(parent), m_notify(Q_NULLPTR), m_fd(-1), d(Q_NULLPTR), m_device(Q_NULLPTR)
+ : QObject(parent), m_notify(nullptr), m_fd(-1), d(nullptr), m_device(nullptr)
#if QT_CONFIG(mtdev)
- , m_mtdev(Q_NULLPTR)
+ , m_mtdev(nullptr)
#endif
{
setObjectName(QLatin1String("Evdev Touch Handler"));
@@ -427,7 +427,7 @@ err:
qErrnoWarning(errno, "evdevtouch: Could not read from input device");
if (errno == ENODEV) { // device got disconnected -> stop reading
delete m_notify;
- m_notify = Q_NULLPTR;
+ m_notify = nullptr;
QT_CLOSE(m_fd);
m_fd = -1;
@@ -466,7 +466,7 @@ void QEvdevTouchScreenHandler::unregisterTouchDevice()
delete m_device;
}
- m_device = Q_NULLPTR;
+ m_device = nullptr;
}
void QEvdevTouchScreenData::addTouchPoint(const Contact &contact, Qt::TouchPointStates *combinedStates)
@@ -781,13 +781,13 @@ void QEvdevTouchScreenData::reportPoints()
if (m_filtered)
emit q->touchPointsUpdated();
else
- QWindowSystemInterface::handleTouchEvent(Q_NULLPTR, q->touchDevice(), m_touchPoints);
+ QWindowSystemInterface::handleTouchEvent(nullptr, q->touchDevice(), m_touchPoints);
}
QEvdevTouchScreenHandlerThread::QEvdevTouchScreenHandlerThread(const QString &device, const QString &spec, QObject *parent)
- : QDaemonThread(parent), m_device(device), m_spec(spec), m_handler(Q_NULLPTR), m_touchDeviceRegistered(false)
+ : QDaemonThread(parent), m_device(device), m_spec(spec), m_handler(nullptr), m_touchDeviceRegistered(false)
, m_touchUpdatePending(false)
- , m_filterWindow(Q_NULLPTR)
+ , m_filterWindow(nullptr)
, m_touchRate(-1)
{
start();
@@ -812,7 +812,7 @@ void QEvdevTouchScreenHandlerThread::run()
exec();
delete m_handler;
- m_handler = Q_NULLPTR;
+ m_handler = nullptr;
}
bool QEvdevTouchScreenHandlerThread::isTouchDeviceRegistered() const
@@ -953,7 +953,7 @@ void QEvdevTouchScreenHandlerThread::filterAndSendTouchPoints()
m_filteredPoints = filteredPoints;
- QWindowSystemInterface::handleTouchEvent(Q_NULLPTR,
+ QWindowSystemInterface::handleTouchEvent(nullptr,
m_handler->touchDevice(),
points);
}
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h b/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h
index a0b689a89e..56308d0352 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h
+++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler_p.h
@@ -75,7 +75,7 @@ class QEvdevTouchScreenHandler : public QObject
Q_OBJECT
public:
- explicit QEvdevTouchScreenHandler(const QString &device, const QString &spec = QString(), QObject *parent = Q_NULLPTR);
+ explicit QEvdevTouchScreenHandler(const QString &device, const QString &spec = QString(), QObject *parent = nullptr);
~QEvdevTouchScreenHandler();
QTouchDevice *touchDevice() const;
@@ -107,13 +107,13 @@ class QEvdevTouchScreenHandlerThread : public QDaemonThread
{
Q_OBJECT
public:
- explicit QEvdevTouchScreenHandlerThread(const QString &device, const QString &spec, QObject *parent = Q_NULLPTR);
+ explicit QEvdevTouchScreenHandlerThread(const QString &device, const QString &spec, QObject *parent = nullptr);
~QEvdevTouchScreenHandlerThread();
- void run() Q_DECL_OVERRIDE;
+ void run() override;
bool isTouchDeviceRegistered() const;
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) override;
void scheduleTouchPointUpdate();
diff --git a/src/platformsupport/input/integrityhid/qintegrityhidmanager.cpp b/src/platformsupport/input/integrityhid/qintegrityhidmanager.cpp
index 8089a6e38b..e472693077 100644
--- a/src/platformsupport/input/integrityhid/qintegrityhidmanager.cpp
+++ b/src/platformsupport/input/integrityhid/qintegrityhidmanager.cpp
@@ -75,8 +75,8 @@ public:
{
CheckSuccess(gh_hid_close(handle));
};
- void process_event(void) Q_DECL_OVERRIDE;
- void async_wait(void) Q_DECL_OVERRIDE;
+ void process_event(void) override;
+ void async_wait(void) override;
HIDDriver *get_driver(void) { return driver; };
HIDHandle get_handle(void) { return handle; };
private:
@@ -94,8 +94,8 @@ public:
{
qDeleteAll(devices);
};
- void process_event(void) Q_DECL_OVERRIDE;
- void async_wait(void) Q_DECL_OVERRIDE;
+ void process_event(void) override;
+ void async_wait(void) override;
void find_devices(void);
private:
QHash<Value, HIDDeviceHandler *> devices;
diff --git a/src/platformsupport/input/libinput/qlibinputhandler.cpp b/src/platformsupport/input/libinput/qlibinputhandler.cpp
index 733cf7d409..52eaa18f4b 100644
--- a/src/platformsupport/input/libinput/qlibinputhandler.cpp
+++ b/src/platformsupport/input/libinput/qlibinputhandler.cpp
@@ -94,7 +94,7 @@ QLibInputHandler::QLibInputHandler(const QString &key, const QString &spec)
if (Q_UNLIKELY(!m_udev))
qFatal("Failed to get udev context for libinput");
- m_li = libinput_udev_create_context(&liInterface, Q_NULLPTR, m_udev);
+ m_li = libinput_udev_create_context(&liInterface, nullptr, m_udev);
if (Q_UNLIKELY(!m_li))
qFatal("Failed to get libinput context");
@@ -140,7 +140,7 @@ void QLibInputHandler::onReadyRead()
}
libinput_event *ev;
- while ((ev = libinput_get_event(m_li)) != Q_NULLPTR) {
+ while ((ev = libinput_get_event(m_li)) != nullptr) {
processEvent(ev);
libinput_event_destroy(ev);
}
diff --git a/src/platformsupport/input/libinput/qlibinputkeyboard.cpp b/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
index 3722c1ceca..ec01f95947 100644
--- a/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
+++ b/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
@@ -145,7 +145,7 @@ QLibInputKeyboard::QLibInputKeyboard()
qWarning("Failed to create xkb context");
return;
}
- m_keymap = xkb_keymap_new_from_names(m_ctx, Q_NULLPTR, XKB_KEYMAP_COMPILE_NO_FLAGS);
+ m_keymap = xkb_keymap_new_from_names(m_ctx, nullptr, XKB_KEYMAP_COMPILE_NO_FLAGS);
if (!m_keymap) {
qWarning("Failed to compile keymap");
return;
@@ -216,8 +216,7 @@ void QLibInputKeyboard::processKey(libinput_event_keyboard *e)
xkb_state_update_key(m_state, k, pressed ? XKB_KEY_DOWN : XKB_KEY_UP);
QGuiApplicationPrivate::inputDeviceManager()->setKeyboardModifiers(mods, qtkey);
-
- QWindowSystemInterface::handleExtendedKeyEvent(Q_NULLPTR,
+ QWindowSystemInterface::handleExtendedKeyEvent(nullptr,
pressed ? QEvent::KeyPress : QEvent::KeyRelease,
qtkey, mods, k, sym, mods, text);
@@ -243,7 +242,7 @@ void QLibInputKeyboard::processKey(libinput_event_keyboard *e)
#ifndef QT_NO_XKBCOMMON_EVDEV
void QLibInputKeyboard::handleRepeat()
{
- QWindowSystemInterface::handleExtendedKeyEvent(Q_NULLPTR, QEvent::KeyPress,
+ QWindowSystemInterface::handleExtendedKeyEvent(nullptr, QEvent::KeyPress,
m_repeatData.qtkey, m_repeatData.mods,
m_repeatData.nativeScanCode, m_repeatData.virtualKey, m_repeatData.nativeMods,
m_repeatData.unicodeText, true, m_repeatData.repeatCount);
@@ -287,7 +286,7 @@ int QLibInputKeyboard::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers
*modifiers |= Qt::KeypadModifier;
} else if (text.length() == 1 && text.unicode()->unicode() > 0x1f
&& text.unicode()->unicode() != 0x7f
- && !(keysym >= XKB_KEY_dead_grave && keysym <= XKB_KEY_dead_currency)) {
+ && !(keysym >= XKB_KEY_dead_grave && keysym <= XKB_KEY_dead_longsolidusoverlay)) {
code = text.unicode()->toUpper().unicode();
} else {
// any other keys
diff --git a/src/platformsupport/input/libinput/qlibinputpointer.cpp b/src/platformsupport/input/libinput/qlibinputpointer.cpp
index 7ac4dbf6f3..cb08ab53b2 100644
--- a/src/platformsupport/input/libinput/qlibinputpointer.cpp
+++ b/src/platformsupport/input/libinput/qlibinputpointer.cpp
@@ -39,6 +39,7 @@
#include "qlibinputpointer_p.h"
#include <libinput.h>
+#include <QtCore/QEvent>
#include <QtGui/QGuiApplication>
#include <QtGui/QScreen>
#include <QtGui/private/qguiapplication_p.h>
@@ -80,8 +81,10 @@ void QLibInputPointer::processButton(libinput_event_pointer *e)
m_buttons.setFlag(button, pressed);
- QWindowSystemInterface::handleMouseEvent(Q_NULLPTR, m_pos, m_pos, m_buttons,
- QGuiApplicationPrivate::inputDeviceManager()->keyboardModifiers());
+ QEvent::Type type = pressed ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease;
+ Qt::KeyboardModifiers mods = QGuiApplicationPrivate::inputDeviceManager()->keyboardModifiers();
+
+ QWindowSystemInterface::handleMouseEvent(nullptr, m_pos, m_pos, m_buttons, button, type, mods);
}
void QLibInputPointer::processMotion(libinput_event_pointer *e)
@@ -94,8 +97,10 @@ void QLibInputPointer::processMotion(libinput_event_pointer *e)
m_pos.setX(qBound(g.left(), qRound(m_pos.x() + dx), g.right()));
m_pos.setY(qBound(g.top(), qRound(m_pos.y() + dy), g.bottom()));
- QWindowSystemInterface::handleMouseEvent(Q_NULLPTR, m_pos, m_pos, m_buttons,
- QGuiApplicationPrivate::inputDeviceManager()->keyboardModifiers());
+ Qt::KeyboardModifiers mods = QGuiApplicationPrivate::inputDeviceManager()->keyboardModifiers();
+
+ QWindowSystemInterface::handleMouseEvent(nullptr, m_pos, m_pos, m_buttons,
+ Qt::NoButton, QEvent::MouseMove, mods);
}
void QLibInputPointer::processAxis(libinput_event_pointer *e)
diff --git a/src/platformsupport/input/libinput/qlibinputtouch.cpp b/src/platformsupport/input/libinput/qlibinputtouch.cpp
index 42925a18e1..a65bc91c39 100644
--- a/src/platformsupport/input/libinput/qlibinputtouch.cpp
+++ b/src/platformsupport/input/libinput/qlibinputtouch.cpp
@@ -53,7 +53,7 @@ QWindowSystemInterface::TouchPoint *QLibInputTouch::DeviceState::point(int32_t s
if (m_points.at(i).id == id)
return &m_points[i];
- return Q_NULLPTR;
+ return nullptr;
}
QLibInputTouch::DeviceState *QLibInputTouch::deviceState(libinput_event_touch *e)
@@ -150,7 +150,7 @@ void QLibInputTouch::processTouchCancel(libinput_event_touch *e)
{
DeviceState *state = deviceState(e);
if (state->m_touchDevice)
- QWindowSystemInterface::handleTouchCancelEvent(Q_NULLPTR, state->m_touchDevice, QGuiApplication::keyboardModifiers());
+ QWindowSystemInterface::handleTouchCancelEvent(nullptr, state->m_touchDevice, QGuiApplication::keyboardModifiers());
else
qWarning("TouchCancel without registered device");
}
@@ -165,7 +165,7 @@ void QLibInputTouch::processTouchFrame(libinput_event_touch *e)
if (state->m_points.isEmpty())
return;
- QWindowSystemInterface::handleTouchEvent(Q_NULLPTR, state->m_touchDevice, state->m_points,
+ QWindowSystemInterface::handleTouchEvent(nullptr, state->m_touchDevice, state->m_points,
QGuiApplication::keyboardModifiers());
for (int i = 0; i < state->m_points.count(); ++i) {
diff --git a/src/platformsupport/kmsconvenience/qkmsdevice.cpp b/src/platformsupport/kmsconvenience/qkmsdevice.cpp
index a25a1e582f..59db3da776 100644
--- a/src/platformsupport/kmsconvenience/qkmsdevice.cpp
+++ b/src/platformsupport/kmsconvenience/qkmsdevice.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2016 Pelagicore AG
** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
** Contact: https://www.qt.io/licensing/
@@ -47,6 +47,8 @@
#include <QtCore/QFile>
#include <QtCore/QLoggingCategory>
+#include <errno.h>
+
#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
QT_BEGIN_NAMESPACE
@@ -75,7 +77,7 @@ int QKmsDevice::crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr co
for (int j = 0; j < resources->count_crtcs; j++) {
bool isPossible = possibleCrtcs & (1 << j);
- bool isAvailable = !(m_crtc_allocator & 1 << resources->crtcs[j]);
+ bool isAvailable = !(m_crtc_allocator & (1 << j));
if (isPossible && isAvailable)
return j;
@@ -162,22 +164,24 @@ static bool parseModeline(const QByteArray &text, drmModeModeInfoPtr mode)
QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
drmModeConnectorPtr connector,
- VirtualDesktopInfo *vinfo)
+ ScreenInfo *vinfo)
{
+ Q_ASSERT(vinfo);
const QByteArray connectorName = nameForConnector(connector);
const int crtc = crtcForConnector(resources, connector);
if (crtc < 0) {
qWarning() << "No usable crtc/encoder pair for connector" << connectorName;
- return Q_NULLPTR;
+ return nullptr;
}
OutputConfiguration configuration;
QSize configurationSize;
+ int configurationRefresh = 0;
drmModeModeInfo configurationModeline;
auto userConfig = m_screenConfig->outputSettings();
- auto userConnectorConfig = userConfig.value(QString::fromUtf8(connectorName));
+ QVariantMap userConnectorConfig = userConfig.value(QString::fromUtf8(connectorName));
// default to the preferred mode unless overridden in the config
const QByteArray mode = userConnectorConfig.value(QStringLiteral("mode"), QStringLiteral("preferred"))
.toByteArray().toLower();
@@ -187,6 +191,10 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
configuration = OutputConfigPreferred;
} else if (mode == "current") {
configuration = OutputConfigCurrent;
+ } else if (sscanf(mode.constData(), "%dx%d@%d", &configurationSize.rwidth(), &configurationSize.rheight(),
+ &configurationRefresh) == 3)
+ {
+ configuration = OutputConfigMode;
} else if (sscanf(mode.constData(), "%dx%d", &configurationSize.rwidth(), &configurationSize.rheight()) == 2) {
configuration = OutputConfigMode;
} else if (parseModeline(mode, &configurationModeline)) {
@@ -195,31 +203,30 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
qWarning("Invalid mode \"%s\" for output %s", mode.constData(), connectorName.constData());
configuration = OutputConfigPreferred;
}
- if (vinfo) {
- *vinfo = VirtualDesktopInfo();
- vinfo->virtualIndex = userConnectorConfig.value(QStringLiteral("virtualIndex"), INT_MAX).toInt();
- if (userConnectorConfig.contains(QStringLiteral("virtualPos"))) {
- const QByteArray vpos = userConnectorConfig.value(QStringLiteral("virtualPos")).toByteArray();
- const QByteArrayList vposComp = vpos.split(',');
- if (vposComp.count() == 2)
- vinfo->virtualPos = QPoint(vposComp[0].trimmed().toInt(), vposComp[1].trimmed().toInt());
- }
- if (userConnectorConfig.value(QStringLiteral("primary")).toBool())
- vinfo->isPrimary = true;
+
+ *vinfo = ScreenInfo();
+ vinfo->virtualIndex = userConnectorConfig.value(QStringLiteral("virtualIndex"), INT_MAX).toInt();
+ if (userConnectorConfig.contains(QStringLiteral("virtualPos"))) {
+ const QByteArray vpos = userConnectorConfig.value(QStringLiteral("virtualPos")).toByteArray();
+ const QByteArrayList vposComp = vpos.split(',');
+ if (vposComp.count() == 2)
+ vinfo->virtualPos = QPoint(vposComp[0].trimmed().toInt(), vposComp[1].trimmed().toInt());
}
+ if (userConnectorConfig.value(QStringLiteral("primary")).toBool())
+ vinfo->isPrimary = true;
const uint32_t crtc_id = resources->crtcs[crtc];
if (configuration == OutputConfigOff) {
qCDebug(qLcKmsDebug) << "Turning off output" << connectorName;
- drmModeSetCrtc(m_dri_fd, crtc_id, 0, 0, 0, 0, 0, Q_NULLPTR);
- return Q_NULLPTR;
+ drmModeSetCrtc(m_dri_fd, crtc_id, 0, 0, 0, 0, 0, nullptr);
+ return nullptr;
}
// Skip disconnected output
if (configuration == OutputConfigPreferred && connector->connection == DRM_MODE_DISCONNECTED) {
qCDebug(qLcKmsDebug) << "Skipping disconnected output" << connectorName;
- return Q_NULLPTR;
+ return nullptr;
}
// Get the current mode on the current crtc
@@ -230,7 +237,7 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
drmModeFreeEncoder(encoder);
if (!crtc)
- return Q_NULLPTR;
+ return nullptr;
if (crtc->mode_valid)
crtc_mode = crtc->mode;
@@ -240,7 +247,8 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
QList<drmModeModeInfo> modes;
modes.reserve(connector->count_modes);
- qCDebug(qLcKmsDebug) << connectorName << "mode count:" << connector->count_modes;
+ qCDebug(qLcKmsDebug) << connectorName << "mode count:" << connector->count_modes
+ << "crtc index:" << crtc << "crtc id:" << crtc_id;
for (int i = 0; i < connector->count_modes; i++) {
const drmModeModeInfo &mode = connector->modes[i];
qCDebug(qLcKmsDebug) << "mode" << i << mode.hdisplay << "x" << mode.vdisplay
@@ -256,9 +264,11 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
for (int i = modes.size() - 1; i >= 0; i--) {
const drmModeModeInfo &m = modes.at(i);
- if (configuration == OutputConfigMode &&
- m.hdisplay == configurationSize.width() &&
- m.vdisplay == configurationSize.height()) {
+ if (configuration == OutputConfigMode
+ && m.hdisplay == configurationSize.width()
+ && m.vdisplay == configurationSize.height()
+ && (!configurationRefresh || m.vrefresh == uint32_t(configurationRefresh)))
+ {
configured = i;
}
@@ -297,7 +307,7 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
if (selected_mode < 0) {
qWarning() << "No modes available for output" << connectorName;
- return Q_NULLPTR;
+ return nullptr;
} else {
int width = modes[selected_mode].hdisplay;
int height = modes[selected_mode].vdisplay;
@@ -324,24 +334,72 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
}
qCDebug(qLcKmsDebug) << "Physical size is" << physSize << "mm" << "for output" << connectorName;
- QKmsOutput output = {
- QString::fromUtf8(connectorName),
- connector->connector_id,
- crtc_id,
- physSize,
- selected_mode,
- selected_mode,
- false,
- drmModeGetCrtc(m_dri_fd, crtc_id),
- modes,
- connector->subpixel,
- connectorProperty(connector, QByteArrayLiteral("DPMS")),
- connectorPropertyBlob(connector, QByteArrayLiteral("EDID")),
- false,
- 0,
- false
- };
+ const QByteArray formatStr = userConnectorConfig.value(QStringLiteral("format"), QStringLiteral("xrgb8888"))
+ .toByteArray().toLower();
+ uint32_t drmFormat;
+ if (formatStr == "xrgb8888") {
+ drmFormat = DRM_FORMAT_XRGB8888;
+ } else if (formatStr == "xbgr8888") {
+ drmFormat = DRM_FORMAT_XBGR8888;
+ } else if (formatStr == "argb8888") {
+ drmFormat = DRM_FORMAT_ARGB8888;
+ } else if (formatStr == "abgr8888") {
+ drmFormat = DRM_FORMAT_ABGR8888;
+ } else if (formatStr == "rgb565") {
+ drmFormat = DRM_FORMAT_RGB565;
+ } else if (formatStr == "bgr565") {
+ drmFormat = DRM_FORMAT_BGR565;
+ } else if (formatStr == "xrgb2101010") {
+ drmFormat = DRM_FORMAT_XRGB2101010;
+ } else if (formatStr == "xbgr2101010") {
+ drmFormat = DRM_FORMAT_XBGR2101010;
+ } else if (formatStr == "argb2101010") {
+ drmFormat = DRM_FORMAT_ARGB2101010;
+ } else if (formatStr == "abgr2101010") {
+ drmFormat = DRM_FORMAT_ABGR2101010;
+ } else {
+ qWarning("Invalid pixel format \"%s\" for output %s", formatStr.constData(), connectorName.constData());
+ drmFormat = DRM_FORMAT_XRGB8888;
+ }
+
+ const QString cloneSource = userConnectorConfig.value(QStringLiteral("clones")).toString();
+ if (!cloneSource.isEmpty())
+ qCDebug(qLcKmsDebug) << "Output" << connectorName << " clones output " << cloneSource;
+
+ QKmsOutput output;
+ output.name = QString::fromUtf8(connectorName);
+ output.connector_id = connector->connector_id;
+ output.crtc_index = crtc;
+ output.crtc_id = crtc_id;
+ output.physical_size = physSize;
+ output.preferred_mode = preferred >= 0 ? preferred : selected_mode;
+ output.mode = selected_mode;
+ output.mode_set = false;
+ output.saved_crtc = drmModeGetCrtc(m_dri_fd, crtc_id);
+ output.modes = modes;
+ output.subpixel = connector->subpixel;
+ output.dpms_prop = connectorProperty(connector, QByteArrayLiteral("DPMS"));
+ output.edid_blob = connectorPropertyBlob(connector, QByteArrayLiteral("EDID"));
+ output.wants_forced_plane = false;
+ output.forced_plane_id = 0;
+ output.forced_plane_set = false;
+ output.drm_format = drmFormat;
+ output.clone_source = cloneSource;
+
+ QString planeListStr;
+ for (const QKmsPlane &plane : qAsConst(m_planes)) {
+ if (plane.possibleCrtcs & (1 << output.crtc_index)) {
+ output.available_planes.append(plane);
+ planeListStr.append(QString::number(plane.id));
+ planeListStr.append(QLatin1Char(' '));
+ }
+ }
+ qCDebug(qLcKmsDebug, "Output %s can use %d planes: %s",
+ connectorName.constData(), output.available_planes.count(), qPrintable(planeListStr));
+ // This is for the EGLDevice/EGLStream backend. On some of those devices one
+ // may want to target a pre-configured plane. It is probably useless for
+ // eglfs_kms and others. Do not confuse with generic plane support (available_planes).
bool ok;
int idx = qEnvironmentVariableIntValue("QT_QPA_EGLFS_KMS_PLANE_INDEX", &ok);
if (ok) {
@@ -350,8 +408,8 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
if (idx >= 0 && idx < int(planeResources->count_planes)) {
drmModePlane *plane = drmModeGetPlane(m_dri_fd, planeResources->planes[idx]);
if (plane) {
- output.wants_plane = true;
- output.plane_id = plane->plane_id;
+ output.wants_forced_plane = true;
+ output.forced_plane_id = plane->plane_id;
qCDebug(qLcKmsDebug, "Forcing plane index %d, plane id %u (belongs to crtc id %u)",
idx, plane->plane_id, plane->crtc_id);
drmModeFreePlane(plane);
@@ -362,8 +420,9 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
}
}
- m_crtc_allocator |= (1 << output.crtc_id);
- m_connector_allocator |= (1 << output.connector_id);
+ m_crtc_allocator |= (1 << output.crtc_index);
+
+ vinfo->output = output;
return createScreen(output);
}
@@ -381,7 +440,7 @@ drmModePropertyPtr QKmsDevice::connectorProperty(drmModeConnectorPtr connector,
drmModeFreeProperty(prop);
}
- return Q_NULLPTR;
+ return nullptr;
}
drmModePropertyBlobPtr QKmsDevice::connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name)
@@ -406,7 +465,6 @@ QKmsDevice::QKmsDevice(QKmsScreenConfig *screenConfig, const QString &path)
, m_path(path)
, m_dri_fd(-1)
, m_crtc_allocator(0)
- , m_connector_allocator(0)
{
if (m_path.isEmpty()) {
m_path = m_screenConfig->devicePath();
@@ -425,10 +483,10 @@ QKmsDevice::~QKmsDevice()
struct OrderedScreen
{
OrderedScreen() : screen(nullptr) { }
- OrderedScreen(QPlatformScreen *screen, const QKmsDevice::VirtualDesktopInfo &vinfo)
+ OrderedScreen(QPlatformScreen *screen, const QKmsDevice::ScreenInfo &vinfo)
: screen(screen), vinfo(vinfo) { }
QPlatformScreen *screen;
- QKmsDevice::VirtualDesktopInfo vinfo;
+ QKmsDevice::ScreenInfo vinfo;
};
QDebug operator<<(QDebug dbg, const OrderedScreen &s)
@@ -449,12 +507,29 @@ static bool orderedScreenLessThan(const OrderedScreen &a, const OrderedScreen &b
void QKmsDevice::createScreens()
{
+ // Headless mode using a render node: cannot do any output related DRM
+ // stuff. Skip it all and register a dummy screen.
+ if (m_screenConfig->headless()) {
+ QPlatformScreen *screen = createHeadlessScreen();
+ if (screen) {
+ qCDebug(qLcKmsDebug, "Headless mode enabled");
+ registerScreen(screen, true, QPoint(0, 0), QList<QPlatformScreen *>());
+ return;
+ } else {
+ qWarning("QKmsDevice: Requested headless mode without support in the backend. Request is ignored.");
+ }
+ }
+
+ drmSetClientCap(m_dri_fd, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1);
+
drmModeResPtr resources = drmModeGetResources(m_dri_fd);
if (!resources) {
- qWarning("drmModeGetResources failed");
+ qErrnoWarning(errno, "drmModeGetResources failed");
return;
}
+ discoverPlanes();
+
QVector<OrderedScreen> screens;
int wantedConnectorIndex = -1;
@@ -475,7 +550,7 @@ void QKmsDevice::createScreens()
if (!connector)
continue;
- VirtualDesktopInfo vinfo;
+ ScreenInfo vinfo;
QPlatformScreen *screen = createScreenForConnector(resources, connector, &vinfo);
if (screen)
screens.append(OrderedScreen(screen, vinfo));
@@ -490,6 +565,32 @@ void QKmsDevice::createScreens()
std::stable_sort(screens.begin(), screens.end(), orderedScreenLessThan);
qCDebug(qLcKmsDebug) << "Sorted screen list:" << screens;
+ // The final list of screens is available, so do the second phase setup.
+ // Hook up clone sources and targets.
+ for (const OrderedScreen &orderedScreen : screens) {
+ QVector<QPlatformScreen *> screensCloningThisScreen;
+ for (const OrderedScreen &s : screens) {
+ if (s.vinfo.output.clone_source == orderedScreen.vinfo.output.name)
+ screensCloningThisScreen.append(s.screen);
+ }
+ QPlatformScreen *screenThisScreenClones = nullptr;
+ if (!orderedScreen.vinfo.output.clone_source.isEmpty()) {
+ for (const OrderedScreen &s : screens) {
+ if (s.vinfo.output.name == orderedScreen.vinfo.output.clone_source) {
+ screenThisScreenClones = s.screen;
+ break;
+ }
+ }
+ }
+ if (screenThisScreenClones)
+ qCDebug(qLcKmsDebug) << orderedScreen.screen->name() << "clones" << screenThisScreenClones;
+ if (!screensCloningThisScreen.isEmpty())
+ qCDebug(qLcKmsDebug) << orderedScreen.screen->name() << "is cloned by" << screensCloningThisScreen;
+
+ registerScreenCloning(orderedScreen.screen, screenThisScreenClones, screensCloningThisScreen);
+ }
+
+ // Figure out the virtual desktop and register the screens to QPA/QGuiApplication.
QPoint pos(0, 0);
QList<QPlatformScreen *> siblings;
QVector<QPoint> virtualPositions;
@@ -531,6 +632,132 @@ void QKmsDevice::createScreens()
}
}
+QPlatformScreen *QKmsDevice::createHeadlessScreen()
+{
+ // headless mode not supported by default
+ return nullptr;
+}
+
+// not all subclasses support screen cloning
+void QKmsDevice::registerScreenCloning(QPlatformScreen *screen,
+ QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen)
+{
+ Q_UNUSED(screen);
+ Q_UNUSED(screenThisScreenClones);
+ Q_UNUSED(screensCloningThisScreen);
+}
+
+// drm_property_type_is is not available in old headers
+static inline bool propTypeIs(drmModePropertyPtr prop, uint32_t type)
+{
+ if (prop->flags & DRM_MODE_PROP_EXTENDED_TYPE)
+ return (prop->flags & DRM_MODE_PROP_EXTENDED_TYPE) == type;
+ return prop->flags & type;
+}
+
+void QKmsDevice::enumerateProperties(drmModeObjectPropertiesPtr objProps, PropCallback callback)
+{
+ for (uint32_t propIdx = 0; propIdx < objProps->count_props; ++propIdx) {
+ drmModePropertyPtr prop = drmModeGetProperty(m_dri_fd, objProps->props[propIdx]);
+ if (!prop)
+ continue;
+
+ const quint64 value = objProps->prop_values[propIdx];
+ qCDebug(qLcKmsDebug, " property %d: id = %u name = '%s'", propIdx, prop->prop_id, prop->name);
+
+ if (propTypeIs(prop, DRM_MODE_PROP_SIGNED_RANGE)) {
+ qCDebug(qLcKmsDebug, " type is SIGNED_RANGE, value is %lld, possible values are:", qint64(value));
+ for (int i = 0; i < prop->count_values; ++i)
+ qCDebug(qLcKmsDebug, " %lld", qint64(prop->values[i]));
+ } else if (propTypeIs(prop, DRM_MODE_PROP_RANGE)) {
+ qCDebug(qLcKmsDebug, " type is RANGE, value is %llu, possible values are:", value);
+ for (int i = 0; i < prop->count_values; ++i)
+ qCDebug(qLcKmsDebug, " %llu", quint64(prop->values[i]));
+ } else if (propTypeIs(prop, DRM_MODE_PROP_ENUM)) {
+ qCDebug(qLcKmsDebug, " type is ENUM, value is %llu, possible values are:", value);
+ for (int i = 0; i < prop->count_enums; ++i)
+ qCDebug(qLcKmsDebug, " enum %d: %s - %llu", i, prop->enums[i].name, prop->enums[i].value);
+ } else if (propTypeIs(prop, DRM_MODE_PROP_BITMASK)) {
+ qCDebug(qLcKmsDebug, " type is BITMASK, value is %llu, possible bits are:", value);
+ for (int i = 0; i < prop->count_enums; ++i)
+ qCDebug(qLcKmsDebug, " bitmask %d: %s - %u", i, prop->enums[i].name, 1 << prop->enums[i].value);
+ } else if (propTypeIs(prop, DRM_MODE_PROP_BLOB)) {
+ qCDebug(qLcKmsDebug, " type is BLOB");
+ } else if (propTypeIs(prop, DRM_MODE_PROP_OBJECT)) {
+ qCDebug(qLcKmsDebug, " type is OBJECT");
+ }
+
+ callback(prop, value);
+
+ drmModeFreeProperty(prop);
+ }
+}
+
+void QKmsDevice::discoverPlanes()
+{
+ m_planes.clear();
+
+ drmModePlaneResPtr planeResources = drmModeGetPlaneResources(m_dri_fd);
+ if (!planeResources)
+ return;
+
+ const int countPlanes = planeResources->count_planes;
+ qCDebug(qLcKmsDebug, "Found %d planes", countPlanes);
+ for (int planeIdx = 0; planeIdx < countPlanes; ++planeIdx) {
+ drmModePlanePtr drmplane = drmModeGetPlane(m_dri_fd, planeResources->planes[planeIdx]);
+ if (!drmplane) {
+ qCDebug(qLcKmsDebug, "Failed to query plane %d, ignoring", planeIdx);
+ continue;
+ }
+
+ QKmsPlane plane;
+ plane.id = drmplane->plane_id;
+ plane.possibleCrtcs = drmplane->possible_crtcs;
+
+ const int countFormats = drmplane->count_formats;
+ QString formatStr;
+ for (int i = 0; i < countFormats; ++i) {
+ uint32_t f = drmplane->formats[i];
+ plane.supportedFormats.append(f);
+ QString s;
+ s.sprintf("%c%c%c%c ", f, f >> 8, f >> 16, f >> 24);
+ formatStr += s;
+ }
+
+ qCDebug(qLcKmsDebug, "plane %d: id = %u countFormats = %d possibleCrtcs = 0x%x supported formats = %s",
+ planeIdx, plane.id, countFormats, plane.possibleCrtcs, qPrintable(formatStr));
+
+ drmModeFreePlane(drmplane);
+
+ drmModeObjectPropertiesPtr objProps = drmModeObjectGetProperties(m_dri_fd, plane.id, DRM_MODE_OBJECT_PLANE);
+ if (!objProps) {
+ qCDebug(qLcKmsDebug, "Failed to query plane %d object properties, ignoring", planeIdx);
+ continue;
+ }
+
+ enumerateProperties(objProps, [&plane](drmModePropertyPtr prop, quint64 value) {
+ if (!strcmp(prop->name, "type")) {
+ plane.type = QKmsPlane::Type(value);
+ } else if (!strcmp(prop->name, "rotation")) {
+ plane.initialRotation = QKmsPlane::Rotations(int(value));
+ plane.availableRotations = 0;
+ if (propTypeIs(prop, DRM_MODE_PROP_BITMASK)) {
+ for (int i = 0; i < prop->count_enums; ++i)
+ plane.availableRotations |= QKmsPlane::Rotation(1 << prop->enums[i].value);
+ }
+ plane.rotationPropertyId = prop->prop_id;
+ }
+ });
+
+ m_planes.append(plane);
+
+ drmModeFreeObjectProperties(objProps);
+ }
+
+ drmModeFreePlaneResources(planeResources);
+}
+
int QKmsDevice::fd() const
{
return m_dri_fd;
@@ -552,7 +779,8 @@ QKmsScreenConfig *QKmsDevice::screenConfig() const
}
QKmsScreenConfig::QKmsScreenConfig()
- : m_hwCursor(true)
+ : m_headless(false)
+ , m_hwCursor(true)
, m_separateScreens(false)
, m_pbuffers(false)
, m_virtualDesktopLayout(VirtualDesktopLayoutHorizontal)
@@ -587,6 +815,16 @@ void QKmsScreenConfig::loadConfig()
const QJsonObject object = doc.object();
+ const QString headlessStr = object.value(QLatin1String("headless")).toString();
+ const QByteArray headless = headlessStr.toUtf8();
+ QSize headlessSize;
+ if (sscanf(headless.constData(), "%dx%d", &headlessSize.rwidth(), &headlessSize.rheight()) == 2) {
+ m_headless = true;
+ m_headlessSize = headlessSize;
+ } else {
+ m_headless = false;
+ }
+
m_hwCursor = object.value(QLatin1String("hwcursor")).toBool(m_hwCursor);
m_pbuffers = object.value(QLatin1String("pbuffers")).toBool(m_pbuffers);
m_devicePath = object.value(QLatin1String("device")).toString();
@@ -618,6 +856,7 @@ void QKmsScreenConfig::loadConfig()
}
qCDebug(qLcKmsDebug) << "Requested configuration (some settings may be ignored):\n"
+ << "\theadless:" << m_headless << "\n"
<< "\thwcursor:" << m_hwCursor << "\n"
<< "\tpbuffers:" << m_pbuffers << "\n"
<< "\tseparateScreens:" << m_separateScreens << "\n"
diff --git a/src/platformsupport/kmsconvenience/qkmsdevice_p.h b/src/platformsupport/kmsconvenience/qkmsdevice_p.h
index 964a0b1775..5eecedec39 100644
--- a/src/platformsupport/kmsconvenience/qkmsdevice_p.h
+++ b/src/platformsupport/kmsconvenience/qkmsdevice_p.h
@@ -59,6 +59,42 @@
#include <xf86drm.h>
#include <xf86drmMode.h>
+#include <drm_fourcc.h>
+
+#include <functional>
+
+// In less fortunate cases one may need to build on a system with dev headers
+// from the dark ages. Let's pull a GL and define the missing stuff outselves.
+
+#ifndef DRM_PLANE_TYPE_OVERLAY
+#define DRM_PLANE_TYPE_OVERLAY 0
+#endif
+#ifndef DRM_PLANE_TYPE_PRIMARY
+#define DRM_PLANE_TYPE_PRIMARY 1
+#endif
+#ifndef DRM_PLANE_TYPE_CURSOR
+#define DRM_PLANE_TYPE_CURSOR 2
+#endif
+
+#ifndef DRM_CLIENT_CAP_UNIVERSAL_PLANES
+#define DRM_CLIENT_CAP_UNIVERSAL_PLANES 2
+#endif
+#ifndef DRM_CLIENT_CAP_ATOMIC
+#define DRM_CLIENT_CAP_ATOMIC 3
+#endif
+
+#ifndef DRM_MODE_PROP_EXTENDED_TYPE
+#define DRM_MODE_PROP_EXTENDED_TYPE 0x0000ffc0
+#endif
+#ifndef DRM_MODE_PROP_TYPE
+#define DRM_MODE_PROP_TYPE(n) ((n) << 6)
+#endif
+#ifndef DRM_MODE_PROP_OBJECT
+#define DRM_MODE_PROP_OBJECT DRM_MODE_PROP_TYPE(1)
+#endif
+#ifndef DRM_MODE_PROP_SIGNED_RANGE
+#define DRM_MODE_PROP_SIGNED_RANGE DRM_MODE_PROP_TYPE(2)
+#endif
QT_BEGIN_NAMESPACE
@@ -76,6 +112,8 @@ public:
QString devicePath() const { return m_devicePath; }
+ bool headless() const { return m_headless; }
+ QSize headlessSize() const { return m_headlessSize; }
bool hwCursor() const { return m_hwCursor; }
bool separateScreens() const { return m_separateScreens; }
bool supportsPBuffers() const { return m_pbuffers; }
@@ -87,6 +125,8 @@ private:
void loadConfig();
QString m_devicePath;
+ bool m_headless;
+ QSize m_headlessSize;
bool m_hwCursor;
bool m_separateScreens;
bool m_pbuffers;
@@ -94,23 +134,63 @@ private:
QMap<QString, QVariantMap> m_outputSettings;
};
+// NB! QKmsPlane does not store the current state and offers no functions to
+// change object properties. Any such functionality belongs to subclasses since
+// in some cases atomic operations will be desired where a mere
+// drmModeObjectSetProperty would not be acceptable.
+struct QKmsPlane
+{
+ enum Type {
+ OverlayPlane = DRM_PLANE_TYPE_OVERLAY,
+ PrimaryPlane = DRM_PLANE_TYPE_PRIMARY,
+ CursorPlane = DRM_PLANE_TYPE_CURSOR
+ };
+
+ enum Rotation {
+ Rotation0 = 1 << 0,
+ Rotation90 = 1 << 1,
+ Rotation180 = 1 << 2,
+ Rotation270 = 1 << 3,
+ RotationReflectX = 1 << 4,
+ RotationReflectY = 1 << 5
+ };
+ Q_DECLARE_FLAGS(Rotations, Rotation)
+
+ uint32_t id = 0;
+ Type type = OverlayPlane;
+
+ int possibleCrtcs = 0;
+
+ QVector<uint32_t> supportedFormats;
+
+ Rotations initialRotation = Rotation0;
+ Rotations availableRotations = Rotation0;
+ uint32_t rotationPropertyId = 0;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QKmsPlane::Rotations)
+
struct QKmsOutput
{
QString name;
- uint32_t connector_id;
- uint32_t crtc_id;
+ uint32_t connector_id = 0;
+ uint32_t crtc_index = 0;
+ uint32_t crtc_id = 0;
QSizeF physical_size;
- int preferred_mode; // index of preferred mode in list below
- int mode; // index of selected mode in list below
- bool mode_set;
- drmModeCrtcPtr saved_crtc;
+ int preferred_mode = -1; // index of preferred mode in list below
+ int mode = -1; // index of selected mode in list below
+ bool mode_set = false;
+ drmModeCrtcPtr saved_crtc = nullptr;
QList<drmModeModeInfo> modes;
- int subpixel;
- drmModePropertyPtr dpms_prop;
- drmModePropertyBlobPtr edid_blob;
- bool wants_plane;
- uint32_t plane_id;
- bool plane_set;
+ int subpixel = DRM_MODE_SUBPIXEL_UNKNOWN;
+ drmModePropertyPtr dpms_prop = nullptr;
+ drmModePropertyBlobPtr edid_blob = nullptr;
+ bool wants_forced_plane = false;
+ uint32_t forced_plane_id = 0;
+ bool forced_plane_set = false;
+ uint32_t drm_format = DRM_FORMAT_XRGB8888;
+ QString clone_source;
+ QVector<QKmsPlane> available_planes;
void restoreMode(QKmsDevice *device);
void cleanup(QKmsDevice *device);
@@ -121,11 +201,11 @@ struct QKmsOutput
class QKmsDevice
{
public:
- struct VirtualDesktopInfo {
- VirtualDesktopInfo() : virtualIndex(0), isPrimary(false) { }
- int virtualIndex;
+ struct ScreenInfo {
+ int virtualIndex = 0;
QPoint virtualPos;
- bool isPrimary;
+ bool isPrimary = false;
+ QKmsOutput output;
};
QKmsDevice(QKmsScreenConfig *screenConfig, const QString &path = QString());
@@ -144,6 +224,10 @@ public:
protected:
virtual QPlatformScreen *createScreen(const QKmsOutput &output) = 0;
+ virtual QPlatformScreen *createHeadlessScreen();
+ virtual void registerScreenCloning(QPlatformScreen *screen,
+ QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen);
virtual void registerScreen(QPlatformScreen *screen,
bool isPrimary,
const QPoint &virtualPos,
@@ -153,16 +237,20 @@ protected:
int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector);
QPlatformScreen *createScreenForConnector(drmModeResPtr resources,
drmModeConnectorPtr connector,
- VirtualDesktopInfo *vinfo);
+ ScreenInfo *vinfo);
drmModePropertyPtr connectorProperty(drmModeConnectorPtr connector, const QByteArray &name);
drmModePropertyBlobPtr connectorPropertyBlob(drmModeConnectorPtr connector, const QByteArray &name);
+ typedef std::function<void(drmModePropertyPtr, quint64)> PropCallback;
+ void enumerateProperties(drmModeObjectPropertiesPtr objProps, PropCallback callback);
+ void discoverPlanes();
QKmsScreenConfig *m_screenConfig;
QString m_path;
int m_dri_fd;
quint32 m_crtc_allocator;
- quint32 m_connector_allocator;
+
+ QVector<QKmsPlane> m_planes;
private:
Q_DISABLE_COPY(QKmsDevice)
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
index a936ec7aad..580cf0e31d 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
@@ -1601,7 +1601,13 @@ bool AtSpiAdaptor::componentInterface(QAccessibleInterface *interface, const QSt
int x = message.arguments().at(0).toInt();
int y = message.arguments().at(1).toInt();
uint coordType = message.arguments().at(2).toUInt();
- Q_UNUSED (coordType) // FIXME
+ if (coordType == ATSPI_COORD_TYPE_WINDOW) {
+ QWindow * window = interface->window();
+ if (window) {
+ x += window->position().x();
+ y += window->position().y();
+ }
+ }
QAccessibleInterface * childInterface(interface->childAt(x, y));
QAccessibleInterface * iface = 0;
diff --git a/src/platformsupport/linuxaccessibility/bridge_p.h b/src/platformsupport/linuxaccessibility/bridge_p.h
index 1e435ca351..c48bbd3710 100644
--- a/src/platformsupport/linuxaccessibility/bridge_p.h
+++ b/src/platformsupport/linuxaccessibility/bridge_p.h
@@ -74,7 +74,7 @@ public:
virtual ~QSpiAccessibleBridge();
- void notifyAccessibilityUpdate(QAccessibleEvent *event) Q_DECL_OVERRIDE;
+ void notifyAccessibilityUpdate(QAccessibleEvent *event) override;
QDBusConnection dBusConnection() const;
public Q_SLOTS:
diff --git a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp
index e938020437..40400e2a19 100644
--- a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp
+++ b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp
@@ -196,7 +196,7 @@ void QOpenGLCompositorBackingStore::flush(QWindow *window, const QRegion &region
dstCtx->makeCurrent(dstWin);
updateTexture();
m_textures->clear();
- m_textures->appendTexture(Q_NULLPTR, m_bsTexture, window->geometry());
+ m_textures->appendTexture(nullptr, m_bsTexture, window->geometry());
compositor->update();
}
@@ -233,7 +233,7 @@ void QOpenGLCompositorBackingStore::composeAndFlush(QWindow *window, const QRegi
textures->clipRect(i), textures->flags(i));
updateTexture();
- m_textures->appendTexture(Q_NULLPTR, m_bsTexture, window->geometry());
+ m_textures->appendTexture(nullptr, m_bsTexture, window->geometry());
textures->lock(true);
m_lockedWidgetTextures = textures;
@@ -280,7 +280,7 @@ void QOpenGLCompositorBackingStore::resize(const QSize &size, const QRegion &sta
if (m_bsTexture) {
glDeleteTextures(1, &m_bsTexture);
m_bsTexture = 0;
- m_bsTextureContext = Q_NULLPTR;
+ m_bsTextureContext = nullptr;
}
}
diff --git a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h
index da68b90e92..d88738ea8f 100644
--- a/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h
+++ b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h
@@ -66,17 +66,17 @@ public:
QOpenGLCompositorBackingStore(QWindow *window);
~QOpenGLCompositorBackingStore();
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
- void beginPaint(const QRegion &region) Q_DECL_OVERRIDE;
+ void beginPaint(const QRegion &region) override;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
+ void resize(const QSize &size, const QRegion &staticContents) override;
- QImage toImage() const Q_DECL_OVERRIDE;
+ QImage toImage() const override;
void composeAndFlush(QWindow *window, const QRegion &region, const QPoint &offset,
QPlatformTextureList *textures,
- bool translucentBackground) Q_DECL_OVERRIDE;
+ bool translucentBackground) override;
const QPlatformTextureList *textures() const { return m_textures; }
diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro
index 5549984d6a..7dbb6f6cae 100644
--- a/src/platformsupport/platformsupport.pro
+++ b/src/platformsupport/platformsupport.pro
@@ -16,7 +16,7 @@ qtConfig(evdev)|qtConfig(tslib)|qtConfig(libinput)|qtConfig(integrityhid) {
input.depends += devicediscovery
}
-unix:!darwin: \
+if(unix:!darwin)|qtConfig(xcb): \
SUBDIRS += services
qtConfig(opengl): \
@@ -34,6 +34,7 @@ qtConfig(accessibility) {
SUBDIRS += linuxaccessibility
linuxaccessibility.depends += accessibility
}
+ win32:!winrt: SUBDIRS += windowsuiautomation
}
darwin {
diff --git a/src/platformsupport/services/genericunix/qgenericunixservices.cpp b/src/platformsupport/services/genericunix/qgenericunixservices.cpp
index cdb5d33859..cb1e367b9f 100644
--- a/src/platformsupport/services/genericunix/qgenericunixservices.cpp
+++ b/src/platformsupport/services/genericunix/qgenericunixservices.cpp
@@ -49,6 +49,24 @@
#include <QtCore/QStandardPaths>
#include <QtCore/QUrl>
+#if QT_CONFIG(dbus)
+// These QtCore includes are needed for flatpak support
+#include <QtCore/private/qcore_unix_p.h>
+
+#include <QtCore/QFileInfo>
+#include <QtCore/QUrlQuery>
+
+#include <QtDBus/QDBusConnection>
+#include <QtDBus/QDBusMessage>
+#include <QtDBus/QDBusPendingCall>
+#include <QtDBus/QDBusPendingCallWatcher>
+#include <QtDBus/QDBusPendingReply>
+#include <QtDBus/QDBusUnixFileDescriptor>
+
+#include <fcntl.h>
+
+#endif // QT_CONFIG(dbus)
+
#include <stdlib.h>
QT_BEGIN_NAMESPACE
@@ -153,6 +171,83 @@ static inline bool launch(const QString &launcher, const QUrl &url)
return ok;
}
+#if QT_CONFIG(dbus)
+static inline bool checkRunningUnderFlatpak()
+{
+ return !QStandardPaths::locate(QStandardPaths::RuntimeLocation, QLatin1String("flatpak-info")).isEmpty();
+}
+
+static inline bool flatpakOpenUrl(const QUrl &url)
+{
+ // DBus signature:
+ // OpenURI (IN s parent_window,
+ // IN s uri,
+ // IN a{sv} options,
+ // OUT o handle)
+ // Options:
+ // writable (b) - Whether to allow the chosen application to write to the file.
+ // This key only takes effect the uri points to a local file that is exported in the document portal,
+ // and the chosen application is sandboxed itself.
+
+ QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"),
+ QLatin1String("/org/freedesktop/portal/desktop"),
+ QLatin1String("org.freedesktop.portal.OpenURI"),
+ QLatin1String("OpenURI"));
+ // FIXME parent_window_id and handle writable option
+ message << QString() << url.toString() << QVariantMap();
+
+ QDBusPendingReply<QDBusObjectPath> reply = QDBusConnection::sessionBus().call(message);
+ return !reply.isError();
+}
+
+static inline bool flatpakSendEmail(const QUrl &url)
+{
+ // DBus signature:
+ // ComposeEmail (IN s parent_window,
+ // IN a{sv} options,
+ // OUT o handle)
+ // Options:
+ // address (s) - The email address to send to.
+ // subject (s) - The subject for the email.
+ // body (s) - The body for the email.
+ // attachment_fds (ah) - File descriptors for files to attach.
+
+ QUrlQuery urlQuery(url);
+ QVariantMap options;
+ options.insert(QLatin1String("address"), url.path());
+ options.insert(QLatin1String("subject"), urlQuery.queryItemValue(QLatin1String("subject")));
+ options.insert(QLatin1String("body"), urlQuery.queryItemValue(QLatin1String("body")));
+
+ // O_PATH seems to be present since Linux 2.6.39, which is not case of RHEL 6
+#ifdef O_PATH
+ QList<QDBusUnixFileDescriptor> attachments;
+ const QStringList attachmentUris = urlQuery.allQueryItemValues(QLatin1String("attachment"));
+
+ for (const QString &attachmentUri : attachmentUris) {
+ const int fd = qt_safe_open(QFile::encodeName(attachmentUri), O_PATH);
+ if (fd != -1) {
+ QDBusUnixFileDescriptor descriptor(fd);
+ attachments << descriptor;
+ qt_safe_close(fd);
+ }
+ }
+
+ options.insert(QLatin1String("attachment_fds"), QVariant::fromValue(attachments));
+#endif
+
+ QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"),
+ QLatin1String("/org/freedesktop/portal/desktop"),
+ QLatin1String("org.freedesktop.portal.Email"),
+ QLatin1String("ComposeEmail"));
+
+ // FIXME parent_window_id
+ message << QString() << options;
+
+ QDBusPendingReply<QDBusObjectPath> reply = QDBusConnection::sessionBus().call(message);
+ return !reply.isError();
+}
+#endif // QT_CONFIG(dbus)
+
QByteArray QGenericUnixServices::desktopEnvironment() const
{
static const QByteArray result = detectDesktopEnvironment();
@@ -161,8 +256,18 @@ QByteArray QGenericUnixServices::desktopEnvironment() const
bool QGenericUnixServices::openUrl(const QUrl &url)
{
- if (url.scheme() == QLatin1String("mailto"))
+ if (url.scheme() == QLatin1String("mailto")) {
+#if QT_CONFIG(dbus)
+ if (checkRunningUnderFlatpak())
+ return flatpakSendEmail(url);
+#endif
return openDocument(url);
+ }
+
+#if QT_CONFIG(dbus)
+ if (checkRunningUnderFlatpak())
+ return flatpakOpenUrl(url);
+#endif
if (m_webBrowser.isEmpty() && !detectWebBrowser(desktopEnvironment(), true, &m_webBrowser)) {
qWarning("Unable to detect a web browser to launch '%s'", qPrintable(url.toString()));
diff --git a/src/platformsupport/services/genericunix/qgenericunixservices_p.h b/src/platformsupport/services/genericunix/qgenericunixservices_p.h
index 205b2e6160..8ac3de6f03 100644
--- a/src/platformsupport/services/genericunix/qgenericunixservices_p.h
+++ b/src/platformsupport/services/genericunix/qgenericunixservices_p.h
@@ -61,10 +61,10 @@ class QGenericUnixServices : public QPlatformServices
public:
QGenericUnixServices() {}
- QByteArray desktopEnvironment() const Q_DECL_OVERRIDE;
+ QByteArray desktopEnvironment() const override;
- bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
- bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
+ bool openUrl(const QUrl &url) override;
+ bool openDocument(const QUrl &url) override;
private:
QString m_webBrowser;
diff --git a/src/platformsupport/services/services.pro b/src/platformsupport/services/services.pro
index 91957a0a78..7ff5e8e179 100644
--- a/src/platformsupport/services/services.pro
+++ b/src/platformsupport/services/services.pro
@@ -2,12 +2,13 @@ TARGET = QtServiceSupport
MODULE = service_support
QT = core-private gui-private
+qtConfig(dbus): QT += dbus
+
CONFIG += static internal_module
DEFINES += QT_NO_CAST_FROM_ASCII
PRECOMPILED_HEADER = ../../corelib/global/qt_pch.h
-unix:!darwin: \
- include($$PWD/genericunix/genericunix.pri)
+include($$PWD/genericunix/genericunix.pri)
load(qt_module)
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuadaptor.cpp b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuadaptor.cpp
index 354b9c3a2e..eabb4b4122 100644
--- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuadaptor.cpp
+++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenuadaptor.cpp
@@ -122,7 +122,7 @@ void QDBusMenuAdaptor::Event(int id, const QString &eventId, const QDBusVariant
emit item->hovered();
if (eventId == QLatin1String("closed")) {
// There is no explicit AboutToHide method, so map closed event to aboutToHide method
- const QDBusPlatformMenu *menu = Q_NULLPTR;
+ const QDBusPlatformMenu *menu = nullptr;
if (item)
menu = static_cast<const QDBusPlatformMenu *>(item->menu());
else if (id == 0)
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar_p.h b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar_p.h
index 8266a395f5..364e7da4b6 100644
--- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar_p.h
+++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusmenubar_p.h
@@ -67,12 +67,12 @@ public:
QDBusMenuBar();
virtual ~QDBusMenuBar();
- void insertMenu(QPlatformMenu *menu, QPlatformMenu *before) Q_DECL_OVERRIDE;
- void removeMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
- void syncMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
- void handleReparent(QWindow *newParentWindow) Q_DECL_OVERRIDE;
- QPlatformMenu *menuForTag(quintptr tag) const Q_DECL_OVERRIDE;
- QPlatformMenu *createMenu() const Q_DECL_OVERRIDE;
+ void insertMenu(QPlatformMenu *menu, QPlatformMenu *before) override;
+ void removeMenu(QPlatformMenu *menu) override;
+ void syncMenu(QPlatformMenu *menu) override;
+ void handleReparent(QWindow *newParentWindow) override;
+ QPlatformMenu *menuForTag(quintptr tag) const override;
+ QPlatformMenu *createMenu() const override;
private:
QDBusPlatformMenu *m_menu;
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp
index 51c690d43a..fc1b37f2f2 100644
--- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp
+++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu.cpp
@@ -68,7 +68,7 @@ QDBusPlatformMenuItem::~QDBusPlatformMenuItem()
{
menuItemsByID.remove(m_dbusID);
if (m_subMenu)
- static_cast<QDBusPlatformMenu *>(m_subMenu)->setContainingMenuItem(Q_NULLPTR);
+ static_cast<QDBusPlatformMenu *>(m_subMenu)->setContainingMenuItem(nullptr);
}
void QDBusPlatformMenuItem::setText(const QString &text)
@@ -88,7 +88,7 @@ void QDBusPlatformMenuItem::setIcon(const QIcon &icon)
void QDBusPlatformMenuItem::setMenu(QPlatformMenu *menu)
{
if (m_subMenu)
- static_cast<QDBusPlatformMenu *>(m_subMenu)->setContainingMenuItem(Q_NULLPTR);
+ static_cast<QDBusPlatformMenu *>(m_subMenu)->setContainingMenuItem(nullptr);
m_subMenu = menu;
if (menu)
static_cast<QDBusPlatformMenu *>(menu)->setContainingMenuItem(this);
@@ -147,7 +147,7 @@ QDBusPlatformMenuItem *QDBusPlatformMenuItem::byId(int id)
// a default-constructed nullptr value into menuItemsByID
if (menuItemsByID.contains(id))
return menuItemsByID[id];
- return Q_NULLPTR;
+ return nullptr;
}
QList<const QDBusPlatformMenuItem *> QDBusPlatformMenuItem::byIds(const QList<int> &ids)
@@ -165,14 +165,14 @@ QDBusPlatformMenu::QDBusPlatformMenu()
: m_isEnabled(true)
, m_isVisible(true)
, m_revision(1)
- , m_containingMenuItem(Q_NULLPTR)
+ , m_containingMenuItem(nullptr)
{
}
QDBusPlatformMenu::~QDBusPlatformMenu()
{
if (m_containingMenuItem)
- m_containingMenuItem->setMenu(Q_NULLPTR);
+ m_containingMenuItem->setMenu(nullptr);
}
void QDBusPlatformMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before)
diff --git a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h
index 5458e2fdd5..8a31f82fb0 100644
--- a/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h
+++ b/src/platformsupport/themes/genericunix/dbusmenu/qdbusplatformmenu_p.h
@@ -77,31 +77,31 @@ public:
~QDBusPlatformMenuItem();
const QString text() const { return m_text; }
- void setText(const QString &text) Q_DECL_OVERRIDE;
+ void setText(const QString &text) override;
QIcon icon() const { return m_icon; }
- void setIcon(const QIcon &icon) Q_DECL_OVERRIDE;
+ void setIcon(const QIcon &icon) override;
const QPlatformMenu *menu() const { return m_subMenu; }
- void setMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
+ void setMenu(QPlatformMenu *menu) override;
bool isEnabled() const { return m_isEnabled; }
- void setEnabled(bool enabled) Q_DECL_OVERRIDE;
+ void setEnabled(bool enabled) override;
bool isVisible() const { return m_isVisible; }
- void setVisible(bool isVisible) Q_DECL_OVERRIDE;
+ void setVisible(bool isVisible) override;
bool isSeparator() const { return m_isSeparator; }
- void setIsSeparator(bool isSeparator) Q_DECL_OVERRIDE;
- void setFont(const QFont &font) Q_DECL_OVERRIDE { Q_UNUSED(font); }
- void setRole(MenuRole role) Q_DECL_OVERRIDE;
+ void setIsSeparator(bool isSeparator) override;
+ void setFont(const QFont &font) override { Q_UNUSED(font); }
+ void setRole(MenuRole role) override;
bool isCheckable() const { return m_isCheckable; }
- void setCheckable(bool checkable) Q_DECL_OVERRIDE;
+ void setCheckable(bool checkable) override;
bool isChecked() const { return m_isChecked; }
- void setChecked(bool isChecked) Q_DECL_OVERRIDE;
+ void setChecked(bool isChecked) override;
bool hasExclusiveGroup() const { return m_hasExclusiveGroup; }
- void setHasExclusiveGroup(bool hasExclusiveGroup) Q_DECL_OVERRIDE;
+ void setHasExclusiveGroup(bool hasExclusiveGroup) override;
#ifndef QT_NO_SHORTCUT
QKeySequence shortcut() const { return m_shortcut; }
- void setShortcut(const QKeySequence& shortcut) Q_DECL_OVERRIDE;
+ void setShortcut(const QKeySequence& shortcut) override;
#endif
- void setIconSize(int size) Q_DECL_OVERRIDE { Q_UNUSED(size); }
- void setNativeContents(WId item) Q_DECL_OVERRIDE { Q_UNUSED(item); }
+ void setIconSize(int size) override { Q_UNUSED(size); }
+ void setNativeContents(WId item) override { Q_UNUSED(item); }
int dbusID() const { return m_dbusID; }
@@ -133,35 +133,35 @@ class QDBusPlatformMenu : public QPlatformMenu
public:
QDBusPlatformMenu();
~QDBusPlatformMenu();
- void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) Q_DECL_OVERRIDE;
- void removeMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE;
+ void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) override;
+ void removeMenuItem(QPlatformMenuItem *menuItem) override;
void syncSubMenu(const QDBusPlatformMenu *menu);
- void syncMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE;
- void syncSeparatorsCollapsible(bool enable) Q_DECL_OVERRIDE { Q_UNUSED(enable); }
+ void syncMenuItem(QPlatformMenuItem *menuItem) override;
+ void syncSeparatorsCollapsible(bool enable) override { Q_UNUSED(enable); }
const QString text() const { return m_text; }
- void setText(const QString &text) Q_DECL_OVERRIDE;
+ void setText(const QString &text) override;
QIcon icon() const { return m_icon; }
- void setIcon(const QIcon &icon) Q_DECL_OVERRIDE;
- bool isEnabled() const Q_DECL_OVERRIDE { return m_isEnabled; }
- void setEnabled(bool enabled) Q_DECL_OVERRIDE;
+ void setIcon(const QIcon &icon) override;
+ bool isEnabled() const override { return m_isEnabled; }
+ void setEnabled(bool enabled) override;
bool isVisible() const { return m_isVisible; }
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void setMinimumWidth(int width) Q_DECL_OVERRIDE { Q_UNUSED(width); }
- void setFont(const QFont &font) Q_DECL_OVERRIDE { Q_UNUSED(font); }
- void setMenuType(MenuType type) Q_DECL_OVERRIDE { Q_UNUSED(type); }
+ void setVisible(bool visible) override;
+ void setMinimumWidth(int width) override { Q_UNUSED(width); }
+ void setFont(const QFont &font) override { Q_UNUSED(font); }
+ void setMenuType(MenuType type) override { Q_UNUSED(type); }
void setContainingMenuItem(QDBusPlatformMenuItem *item);
- void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) Q_DECL_OVERRIDE;
+ void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) override;
- void dismiss() Q_DECL_OVERRIDE { } // Closes this and all its related menu popups
+ void dismiss() override { } // Closes this and all its related menu popups
- QPlatformMenuItem *menuItemAt(int position) const Q_DECL_OVERRIDE;
- QPlatformMenuItem *menuItemForTag(quintptr tag) const Q_DECL_OVERRIDE;
+ QPlatformMenuItem *menuItemAt(int position) const override;
+ QPlatformMenuItem *menuItemForTag(quintptr tag) const override;
const QList<QDBusPlatformMenuItem *> items() const;
- QPlatformMenuItem *createMenuItem() const Q_DECL_OVERRIDE;
- QPlatformMenu *createSubMenu() const Q_DECL_OVERRIDE;
+ QPlatformMenuItem *createMenuItem() const override;
+ QPlatformMenu *createSubMenu() const override;
uint revision() const { return m_revision; }
diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
index 9baf94726d..8480c15fb7 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
+++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon.cpp
@@ -102,17 +102,17 @@ static int instanceCount = 0;
*/
QDBusTrayIcon::QDBusTrayIcon()
- : m_dbusConnection(Q_NULLPTR)
+ : m_dbusConnection(nullptr)
, m_adaptor(new QStatusNotifierItemAdaptor(this))
- , m_menuAdaptor(Q_NULLPTR)
- , m_menu(Q_NULLPTR)
- , m_notifier(Q_NULLPTR)
+ , m_menuAdaptor(nullptr)
+ , m_menu(nullptr)
+ , m_notifier(nullptr)
, m_instanceId(KDEItemFormat.arg(QCoreApplication::applicationPid()).arg(++instanceCount))
, m_category(QStringLiteral("ApplicationStatus"))
, m_defaultStatus(QStringLiteral("Active")) // be visible all the time. QSystemTrayIcon has no API to control this.
, m_status(m_defaultStatus)
- , m_tempIcon(Q_NULLPTR)
- , m_tempAttentionIcon(Q_NULLPTR)
+ , m_tempIcon(nullptr)
+ , m_tempAttentionIcon(nullptr)
, m_registered(false)
{
qCDebug(qLcTray);
@@ -149,9 +149,9 @@ void QDBusTrayIcon::cleanup()
if (m_registered)
dBusConnection()->unregisterTrayIcon(this);
delete m_dbusConnection;
- m_dbusConnection = Q_NULLPTR;
+ m_dbusConnection = nullptr;
delete m_notifier;
- m_notifier = Q_NULLPTR;
+ m_notifier = nullptr;
m_registered = false;
}
@@ -203,7 +203,7 @@ QTemporaryFile *QDBusTrayIcon::tempIcon(const QIcon &icon)
necessity_checked = true;
}
if (!necessary)
- return Q_NULLPTR;
+ return nullptr;
qreal dpr = qGuiApp->devicePixelRatio();
QTemporaryFile *ret = new QTemporaryFile(TempFileTemplate, this);
ret->open();
diff --git a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h
index 4c9bc8f7e3..7034a7edb4 100644
--- a/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h
+++ b/src/platformsupport/themes/genericunix/dbustray/qdbustrayicon_p.h
@@ -91,18 +91,18 @@ public:
QDBusMenuConnection * dBusConnection();
- void init() Q_DECL_OVERRIDE;
- void cleanup() Q_DECL_OVERRIDE;
- void updateIcon(const QIcon &icon) Q_DECL_OVERRIDE;
- void updateToolTip(const QString &tooltip) Q_DECL_OVERRIDE;
- void updateMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
- QPlatformMenu *createMenu() const Q_DECL_OVERRIDE;
+ void init() override;
+ void cleanup() override;
+ void updateIcon(const QIcon &icon) override;
+ void updateToolTip(const QString &tooltip) override;
+ void updateMenu(QPlatformMenu *menu) override;
+ QPlatformMenu *createMenu() const override;
void showMessage(const QString &title, const QString &msg,
- const QIcon &icon, MessageIcon iconType, int msecs) Q_DECL_OVERRIDE;
+ const QIcon &icon, MessageIcon iconType, int msecs) override;
- bool isSystemTrayAvailable() const Q_DECL_OVERRIDE;
- bool supportsMessages() const Q_DECL_OVERRIDE { return true; }
- QRect geometry() const Q_DECL_OVERRIDE { return QRect(); }
+ bool isSystemTrayAvailable() const override;
+ bool supportsMessages() const override { return true; }
+ QRect geometry() const override { return QRect(); }
QString category() const { return m_category; }
QString status() const { return m_status; }
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
index 2105145263..63a860f251 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
@@ -178,6 +178,12 @@ QStringList QGenericUnixTheme::xdgIconThemePaths()
paths.append(xdgIconsDir.absoluteFilePath());
}
+ return paths;
+}
+
+QStringList QGenericUnixTheme::iconFallbackPaths()
+{
+ QStringList paths;
const QFileInfo pixmapsIconsDir(QStringLiteral("/usr/share/pixmaps"));
if (pixmapsIconsDir.isDir())
paths.append(pixmapsIconsDir.absoluteFilePath());
@@ -199,7 +205,7 @@ QPlatformSystemTrayIcon *QGenericUnixTheme::createPlatformSystemTrayIcon() const
{
if (isDBusTrayAvailable())
return new QDBusTrayIcon();
- return Q_NULLPTR;
+ return nullptr;
}
#endif
@@ -210,6 +216,8 @@ QVariant QGenericUnixTheme::themeHint(ThemeHint hint) const
return QVariant(QString(QStringLiteral("hicolor")));
case QPlatformTheme::IconThemeSearchPaths:
return xdgIconThemePaths();
+ case QPlatformTheme::IconFallbackSearchPaths:
+ return iconFallbackPaths();
case QPlatformTheme::DialogButtonBoxButtonsHaveIcons:
return QVariant(true);
case QPlatformTheme::StyleNames: {
@@ -674,7 +682,7 @@ QPlatformSystemTrayIcon *QKdeTheme::createPlatformSystemTrayIcon() const
{
if (isDBusTrayAvailable())
return new QDBusTrayIcon();
- return Q_NULLPTR;
+ return nullptr;
}
#endif
@@ -693,7 +701,7 @@ const char *QGnomeTheme::name = "gnome";
class QGnomeThemePrivate : public QPlatformThemePrivate
{
public:
- QGnomeThemePrivate() : systemFont(Q_NULLPTR), fixedFont(Q_NULLPTR) {}
+ QGnomeThemePrivate() : systemFont(nullptr), fixedFont(nullptr) {}
~QGnomeThemePrivate() { delete systemFont; delete fixedFont; }
void configureFonts(const QString &gtkFontName) const
@@ -793,7 +801,7 @@ QPlatformSystemTrayIcon *QGnomeTheme::createPlatformSystemTrayIcon() const
{
if (isDBusTrayAvailable())
return new QDBusTrayIcon();
- return Q_NULLPTR;
+ return nullptr;
}
#endif
@@ -831,7 +839,7 @@ QPlatformTheme *QGenericUnixTheme::createUnixTheme(const QString &name)
#endif
if (name == QLatin1String(QGnomeTheme::name))
return new QGnomeTheme;
- return Q_NULLPTR;
+ return nullptr;
}
QStringList QGenericUnixTheme::themeNames()
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h b/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h
index da13390662..865a624694 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h
@@ -81,15 +81,16 @@ public:
static QPlatformTheme *createUnixTheme(const QString &name);
static QStringList themeNames();
- const QFont *font(Font type) const Q_DECL_OVERRIDE;
- QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
+ const QFont *font(Font type) const override;
+ QVariant themeHint(ThemeHint hint) const override;
static QStringList xdgIconThemePaths();
+ static QStringList iconFallbackPaths();
#ifndef QT_NO_DBUS
- QPlatformMenuBar *createPlatformMenuBar() const Q_DECL_OVERRIDE;
+ QPlatformMenuBar *createPlatformMenuBar() const override;
#endif
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
- QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const Q_DECL_OVERRIDE;
+ QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
#endif
static const char *name;
@@ -105,19 +106,19 @@ public:
QKdeTheme(const QStringList& kdeDirs, int kdeVersion);
static QPlatformTheme *createKdeTheme();
- QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
+ QVariant themeHint(ThemeHint hint) const override;
QIcon fileIcon(const QFileInfo &fileInfo,
QPlatformTheme::IconOptions iconOptions = 0) const override;
- const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE;
+ const QPalette *palette(Palette type = SystemPalette) const override;
- const QFont *font(Font type) const Q_DECL_OVERRIDE;
+ const QFont *font(Font type) const override;
#ifndef QT_NO_DBUS
- QPlatformMenuBar *createPlatformMenuBar() const Q_DECL_OVERRIDE;
+ QPlatformMenuBar *createPlatformMenuBar() const override;
#endif
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
- QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const Q_DECL_OVERRIDE;
+ QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
#endif
static const char *name;
@@ -131,18 +132,18 @@ class QGnomeTheme : public QPlatformTheme
Q_DECLARE_PRIVATE(QGnomeTheme)
public:
QGnomeTheme();
- QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
+ QVariant themeHint(ThemeHint hint) const override;
QIcon fileIcon(const QFileInfo &fileInfo,
QPlatformTheme::IconOptions = 0) const override;
- const QFont *font(Font type) const Q_DECL_OVERRIDE;
- QString standardButtonText(int button) const Q_DECL_OVERRIDE;
+ const QFont *font(Font type) const override;
+ QString standardButtonText(int button) const override;
virtual QString gtkFontName() const;
#ifndef QT_NO_DBUS
- QPlatformMenuBar *createPlatformMenuBar() const Q_DECL_OVERRIDE;
+ QPlatformMenuBar *createPlatformMenuBar() const override;
#endif
#if !defined(QT_NO_DBUS) && !defined(QT_NO_SYSTEMTRAYICON)
- QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const Q_DECL_OVERRIDE;
+ QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
#endif
static const char *name;
diff --git a/src/platformsupport/themes/themes.pro b/src/platformsupport/themes/themes.pro
index aeed4d2f47..44f94fafc8 100644
--- a/src/platformsupport/themes/themes.pro
+++ b/src/platformsupport/themes/themes.pro
@@ -6,7 +6,7 @@ CONFIG += static internal_module
DEFINES += QT_NO_CAST_FROM_ASCII
-unix:!darwin: \
+if(unix:!darwin)|qtConfig(xcb): \
include($$PWD/genericunix/genericunix.pri)
HEADERS += \
diff --git a/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp b/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp
new file mode 100644
index 0000000000..79541fe636
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/qwindowsuiawrapper.cpp
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <initguid.h>
+
+#include "qwindowsuiawrapper_p.h"
+#include <QtCore/private/qsystemlibrary_p.h>
+
+QT_BEGIN_NAMESPACE
+
+// private constructor
+QWindowsUiaWrapper::QWindowsUiaWrapper()
+{
+ QSystemLibrary uiaLib(QStringLiteral("UIAutomationCore"));
+ if (uiaLib.load()) {
+ m_pUiaReturnRawElementProvider = reinterpret_cast<PtrUiaReturnRawElementProvider>(uiaLib.resolve("UiaReturnRawElementProvider"));
+ m_pUiaHostProviderFromHwnd = reinterpret_cast<PtrUiaHostProviderFromHwnd>(uiaLib.resolve("UiaHostProviderFromHwnd"));
+ m_pUiaRaiseAutomationPropertyChangedEvent = reinterpret_cast<PtrUiaRaiseAutomationPropertyChangedEvent>(uiaLib.resolve("UiaRaiseAutomationPropertyChangedEvent"));
+ m_pUiaRaiseAutomationEvent = reinterpret_cast<PtrUiaRaiseAutomationEvent>(uiaLib.resolve("UiaRaiseAutomationEvent"));
+ m_pUiaClientsAreListening = reinterpret_cast<PtrUiaClientsAreListening>(uiaLib.resolve("UiaClientsAreListening"));
+ }
+}
+
+QWindowsUiaWrapper::~QWindowsUiaWrapper()
+{
+}
+
+// shared instance
+QWindowsUiaWrapper *QWindowsUiaWrapper::instance()
+{
+ static QWindowsUiaWrapper wrapper;
+ return &wrapper;
+}
+
+// True if all symbols resolved.
+BOOL QWindowsUiaWrapper::ready()
+{
+ return m_pUiaReturnRawElementProvider
+ && m_pUiaHostProviderFromHwnd
+ && m_pUiaRaiseAutomationPropertyChangedEvent
+ && m_pUiaRaiseAutomationEvent
+ && m_pUiaClientsAreListening;
+}
+
+BOOL QWindowsUiaWrapper::clientsAreListening()
+{
+ if (!m_pUiaClientsAreListening)
+ return FALSE;
+ return m_pUiaClientsAreListening();
+}
+
+LRESULT QWindowsUiaWrapper::returnRawElementProvider(HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple *el)
+{
+ if (!m_pUiaReturnRawElementProvider)
+ return static_cast<LRESULT>(NULL);
+ return m_pUiaReturnRawElementProvider(hwnd, wParam, lParam, el);
+}
+
+HRESULT QWindowsUiaWrapper::hostProviderFromHwnd(HWND hwnd, IRawElementProviderSimple **ppProvider)
+{
+ if (!m_pUiaHostProviderFromHwnd)
+ return UIA_E_NOTSUPPORTED;
+ return m_pUiaHostProviderFromHwnd(hwnd, ppProvider);
+}
+
+HRESULT QWindowsUiaWrapper::raiseAutomationPropertyChangedEvent(IRawElementProviderSimple *pProvider, PROPERTYID id, VARIANT oldValue, VARIANT newValue)
+{
+ if (!m_pUiaRaiseAutomationPropertyChangedEvent)
+ return UIA_E_NOTSUPPORTED;
+ return m_pUiaRaiseAutomationPropertyChangedEvent(pProvider, id, oldValue, newValue);
+}
+
+HRESULT QWindowsUiaWrapper::raiseAutomationEvent(IRawElementProviderSimple *pProvider, EVENTID id)
+{
+ if (!m_pUiaRaiseAutomationEvent)
+ return UIA_E_NOTSUPPORTED;
+ return m_pUiaRaiseAutomationEvent(pProvider, id);
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h b/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h
new file mode 100644
index 0000000000..3ebc3008d3
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/qwindowsuiawrapper_p.h
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAWRAPPER_H
+#define QWINDOWSUIAWRAPPER_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/private/qtguiglobal_p.h>
+
+#include "uiatypes_p.h"
+#include "uiaattributeids_p.h"
+#include "uiacontroltypeids_p.h"
+#include "uiaerrorids_p.h"
+#include "uiaeventids_p.h"
+#include "uiageneralids_p.h"
+#include "uiapatternids_p.h"
+#include "uiapropertyids_p.h"
+#include "uiaserverinterfaces_p.h"
+#include "uiaclientinterfaces_p.h"
+
+QT_REQUIRE_CONFIG(accessibility);
+
+QT_BEGIN_NAMESPACE
+
+class QWindowsUiaWrapper
+{
+ QWindowsUiaWrapper();
+ virtual ~QWindowsUiaWrapper();
+public:
+ static QWindowsUiaWrapper *instance();
+ BOOL ready();
+ BOOL clientsAreListening();
+ LRESULT returnRawElementProvider(HWND hwnd, WPARAM wParam, LPARAM lParam, IRawElementProviderSimple *el);
+ HRESULT hostProviderFromHwnd(HWND hwnd, IRawElementProviderSimple **ppProvider);
+ HRESULT raiseAutomationPropertyChangedEvent(IRawElementProviderSimple *pProvider, PROPERTYID id, VARIANT oldValue, VARIANT newValue);
+ HRESULT raiseAutomationEvent(IRawElementProviderSimple *pProvider, EVENTID id);
+
+private:
+ typedef LRESULT (WINAPI *PtrUiaReturnRawElementProvider)(HWND, WPARAM, LPARAM, IRawElementProviderSimple *);
+ typedef HRESULT (WINAPI *PtrUiaHostProviderFromHwnd)(HWND, IRawElementProviderSimple **);
+ typedef HRESULT (WINAPI *PtrUiaRaiseAutomationPropertyChangedEvent)(IRawElementProviderSimple *, PROPERTYID, VARIANT, VARIANT);
+ typedef HRESULT (WINAPI *PtrUiaRaiseAutomationEvent)(IRawElementProviderSimple *, EVENTID);
+ typedef BOOL (WINAPI *PtrUiaClientsAreListening)();
+ PtrUiaReturnRawElementProvider m_pUiaReturnRawElementProvider = nullptr;
+ PtrUiaHostProviderFromHwnd m_pUiaHostProviderFromHwnd = nullptr;
+ PtrUiaRaiseAutomationPropertyChangedEvent m_pUiaRaiseAutomationPropertyChangedEvent = nullptr;
+ PtrUiaRaiseAutomationEvent m_pUiaRaiseAutomationEvent = nullptr;
+ PtrUiaClientsAreListening m_pUiaClientsAreListening = nullptr;
+};
+
+QT_END_NAMESPACE
+
+#endif //QWINDOWSUIAWRAPPER_H
+
diff --git a/src/platformsupport/windowsuiautomation/uiaattributeids_p.h b/src/platformsupport/windowsuiautomation/uiaattributeids_p.h
new file mode 100644
index 0000000000..52e7306a67
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiaattributeids_p.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIAATTRIBUTEIDS_H
+#define UIAATTRIBUTEIDS_H
+
+#define UIA_AnimationStyleAttributeId 40000
+#define UIA_BackgroundColorAttributeId 40001
+#define UIA_BulletStyleAttributeId 40002
+#define UIA_CapStyleAttributeId 40003
+#define UIA_CultureAttributeId 40004
+#define UIA_FontNameAttributeId 40005
+#define UIA_FontSizeAttributeId 40006
+#define UIA_FontWeightAttributeId 40007
+#define UIA_ForegroundColorAttributeId 40008
+#define UIA_HorizontalTextAlignmentAttributeId 40009
+#define UIA_IndentationFirstLineAttributeId 40010
+#define UIA_IndentationLeadingAttributeId 40011
+#define UIA_IndentationTrailingAttributeId 40012
+#define UIA_IsHiddenAttributeId 40013
+#define UIA_IsItalicAttributeId 40014
+#define UIA_IsReadOnlyAttributeId 40015
+#define UIA_IsSubscriptAttributeId 40016
+#define UIA_IsSuperscriptAttributeId 40017
+#define UIA_MarginBottomAttributeId 40018
+#define UIA_MarginLeadingAttributeId 40019
+#define UIA_MarginTopAttributeId 40020
+#define UIA_MarginTrailingAttributeId 40021
+#define UIA_OutlineStylesAttributeId 40022
+#define UIA_OverlineColorAttributeId 40023
+#define UIA_OverlineStyleAttributeId 40024
+#define UIA_StrikethroughColorAttributeId 40025
+#define UIA_StrikethroughStyleAttributeId 40026
+#define UIA_TabsAttributeId 40027
+#define UIA_TextFlowDirectionsAttributeId 40028
+#define UIA_UnderlineColorAttributeId 40029
+#define UIA_UnderlineStyleAttributeId 40030
+#define UIA_AnnotationTypesAttributeId 40031
+#define UIA_AnnotationObjectsAttributeId 40032
+#define UIA_StyleNameAttributeId 40033
+#define UIA_StyleIdAttributeId 40034
+#define UIA_LinkAttributeId 40035
+#define UIA_IsActiveAttributeId 40036
+#define UIA_SelectionActiveEndAttributeId 40037
+#define UIA_CaretPositionAttributeId 40038
+#define UIA_CaretBidiModeAttributeId 40039
+#define UIA_LineSpacingAttributeId 40040
+#define UIA_BeforeParagraphSpacingAttributeId 40041
+#define UIA_AfterParagraphSpacingAttributeId 40042
+#define UIA_SayAsInterpretAsAttributeId 40043
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiaclientinterfaces_p.h b/src/platformsupport/windowsuiautomation/uiaclientinterfaces_p.h
new file mode 100644
index 0000000000..b95c05f6a4
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiaclientinterfaces_p.h
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIACLIENTINTERFACES_H
+#define UIACLIENTINTERFACES_H
+
+#include <Unknwn.h>
+
+#ifndef __IUIAutomationElement_INTERFACE_DEFINED__
+
+struct IUIAutomationCondition;
+struct IUIAutomationCacheRequest;
+struct IUIAutomationElementArray;
+struct IUIAutomationTreeWalker;
+struct IUIAutomationEventHandler;
+struct IUIAutomationPropertyChangedEventHandler;
+struct IUIAutomationStructureChangedEventHandler;
+struct IUIAutomationFocusChangedEventHandler;
+struct IUIAutomationProxyFactory;
+struct IUIAutomationProxyFactoryEntry;
+struct IUIAutomationProxyFactoryMapping;
+#ifndef __IAccessible_FWD_DEFINED__
+#define __IAccessible_FWD_DEFINED__
+struct IAccessible;
+#endif /* __IAccessible_FWD_DEFINED__ */
+
+#define __IUIAutomationElement_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IUIAutomationElement, 0xd22108aa, 0x8ac5, 0x49a5, 0x83,0x7b, 0x37,0xbb,0xb3,0xd7,0x59,0x1e);
+MIDL_INTERFACE("d22108aa-8ac5-49a5-837b-37bbb3d7591e")
+IUIAutomationElement : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE SetFocus() = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetRuntimeId(__RPC__deref_out_opt SAFEARRAY **runtimeId) = 0;
+ virtual HRESULT STDMETHODCALLTYPE FindFirst(enum TreeScope scope, __RPC__in_opt IUIAutomationCondition *condition, __RPC__deref_out_opt IUIAutomationElement **found) = 0;
+ virtual HRESULT STDMETHODCALLTYPE FindAll(enum TreeScope scope, __RPC__in_opt IUIAutomationCondition *condition, __RPC__deref_out_opt IUIAutomationElementArray **found) = 0;
+ virtual HRESULT STDMETHODCALLTYPE FindFirstBuildCache(enum TreeScope scope, __RPC__in_opt IUIAutomationCondition *condition, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **found) = 0;
+ virtual HRESULT STDMETHODCALLTYPE FindAllBuildCache(enum TreeScope scope, __RPC__in_opt IUIAutomationCondition *condition, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElementArray **found) = 0;
+ virtual HRESULT STDMETHODCALLTYPE BuildUpdatedCache(__RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **updatedElement) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentPropertyValue(PROPERTYID propertyId, __RPC__out VARIANT *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentPropertyValueEx(PROPERTYID propertyId, BOOL ignoreDefaultValue, __RPC__out VARIANT *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCachedPropertyValue(PROPERTYID propertyId, __RPC__out VARIANT *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCachedPropertyValueEx(PROPERTYID propertyId, BOOL ignoreDefaultValue, __RPC__out VARIANT *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentPatternAs(PATTERNID patternId, __RPC__in REFIID riid, __RPC__deref_out_opt void **patternObject) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCachedPatternAs(PATTERNID patternId, __RPC__in REFIID riid, __RPC__deref_out_opt void **patternObject) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCurrentPattern(PATTERNID patternId, __RPC__deref_out_opt IUnknown **patternObject) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCachedPattern(PATTERNID patternId, __RPC__deref_out_opt IUnknown **patternObject) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCachedParent(__RPC__deref_out_opt IUIAutomationElement **parent) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCachedChildren(__RPC__deref_out_opt IUIAutomationElementArray **children) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentProcessId(__RPC__out int *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentControlType(__RPC__out CONTROLTYPEID *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentLocalizedControlType(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentName(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentAcceleratorKey(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentAccessKey(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentHasKeyboardFocus(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsKeyboardFocusable(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsEnabled(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentAutomationId(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentClassName(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentHelpText(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentCulture(__RPC__out int *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsControlElement(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsContentElement(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsPassword(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentNativeWindowHandle(__RPC__deref_out_opt UIA_HWND *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentItemType(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsOffscreen(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentOrientation(__RPC__out enum OrientationType *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentFrameworkId(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsRequiredForForm(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentItemStatus(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentBoundingRectangle(__RPC__out RECT *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentLabeledBy(__RPC__deref_out_opt IUIAutomationElement **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentAriaRole(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentAriaProperties(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentIsDataValidForForm(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentControllerFor(__RPC__deref_out_opt IUIAutomationElementArray **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentDescribedBy(__RPC__deref_out_opt IUIAutomationElementArray **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentFlowsTo(__RPC__deref_out_opt IUIAutomationElementArray **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CurrentProviderDescription(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedProcessId(__RPC__out int *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedControlType(__RPC__out CONTROLTYPEID *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedLocalizedControlType(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedName(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedAcceleratorKey(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedAccessKey(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedHasKeyboardFocus(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsKeyboardFocusable(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsEnabled(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedAutomationId(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedClassName(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedHelpText(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedCulture(__RPC__out int *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsControlElement(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsContentElement(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsPassword(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedNativeWindowHandle(__RPC__deref_out_opt UIA_HWND *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedItemType(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsOffscreen(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedOrientation(__RPC__out enum OrientationType *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedFrameworkId(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsRequiredForForm(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedItemStatus(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedBoundingRectangle(__RPC__out RECT *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedLabeledBy(__RPC__deref_out_opt IUIAutomationElement **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedAriaRole(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedAriaProperties(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedIsDataValidForForm(__RPC__out BOOL *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedControllerFor(__RPC__deref_out_opt IUIAutomationElementArray **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedDescribedBy(__RPC__deref_out_opt IUIAutomationElementArray **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedFlowsTo(__RPC__deref_out_opt IUIAutomationElementArray **retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CachedProviderDescription(__RPC__deref_out_opt BSTR *retVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetClickablePoint(__RPC__out POINT *clickable, __RPC__out BOOL *gotClickable) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUIAutomationElement, 0xd22108aa, 0x8ac5, 0x49a5, 0x83,0x7b, 0x37,0xbb,0xb3,0xd7,0x59,0x1e)
+#endif
+#endif
+
+
+#ifndef __IUIAutomation_INTERFACE_DEFINED__
+#define __IUIAutomation_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IUIAutomation, 0x30cbe57d, 0xd9d0, 0x452a, 0xab,0x13, 0x7a,0xc5,0xac,0x48,0x25,0xee);
+MIDL_INTERFACE("30cbe57d-d9d0-452a-ab13-7ac5ac4825ee")
+IUIAutomation : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE CompareElements(__RPC__in_opt IUIAutomationElement *el1, __RPC__in_opt IUIAutomationElement *el2, __RPC__out BOOL *areSame) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CompareRuntimeIds(__RPC__in SAFEARRAY * runtimeId1, __RPC__in SAFEARRAY * runtimeId2, __RPC__out BOOL *areSame) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetRootElement(__RPC__deref_out_opt IUIAutomationElement **root) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ElementFromHandle(__RPC__in UIA_HWND hwnd, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ElementFromPoint(POINT pt, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetFocusedElement(__RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetRootElementBuildCache(__RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **root) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ElementFromHandleBuildCache(__RPC__in UIA_HWND hwnd, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ElementFromPointBuildCache(POINT pt, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetFocusedElementBuildCache(__RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateTreeWalker(__RPC__in_opt IUIAutomationCondition *pCondition, __RPC__deref_out_opt IUIAutomationTreeWalker **walker) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ControlViewWalker(__RPC__deref_out_opt IUIAutomationTreeWalker **walker) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ContentViewWalker(__RPC__deref_out_opt IUIAutomationTreeWalker **walker) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_RawViewWalker(__RPC__deref_out_opt IUIAutomationTreeWalker **walker) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_RawViewCondition(__RPC__deref_out_opt IUIAutomationCondition **condition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ControlViewCondition(__RPC__deref_out_opt IUIAutomationCondition **condition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ContentViewCondition(__RPC__deref_out_opt IUIAutomationCondition **condition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateCacheRequest(__RPC__deref_out_opt IUIAutomationCacheRequest **cacheRequest) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateTrueCondition(__RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateFalseCondition(__RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreatePropertyCondition(PROPERTYID propertyId, VARIANT value, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreatePropertyConditionEx(PROPERTYID propertyId, VARIANT value, enum PropertyConditionFlags flags, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateAndCondition(__RPC__in_opt IUIAutomationCondition *condition1, __RPC__in_opt IUIAutomationCondition *condition2, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateAndConditionFromArray(__RPC__in_opt SAFEARRAY * conditions, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateAndConditionFromNativeArray(__RPC__in_ecount_full(conditionCount) IUIAutomationCondition **conditions, int conditionCount, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateOrCondition(__RPC__in_opt IUIAutomationCondition *condition1, __RPC__in_opt IUIAutomationCondition *condition2, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateOrConditionFromArray(__RPC__in_opt SAFEARRAY * conditions, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateOrConditionFromNativeArray(__RPC__in_ecount_full(conditionCount) IUIAutomationCondition **conditions, int conditionCount, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateNotCondition(__RPC__in_opt IUIAutomationCondition *condition, __RPC__deref_out_opt IUIAutomationCondition **newCondition) = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddAutomationEventHandler(EVENTID eventId, __RPC__in_opt IUIAutomationElement *element, enum TreeScope scope, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__in_opt IUIAutomationEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemoveAutomationEventHandler(EVENTID eventId, __RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddPropertyChangedEventHandlerNativeArray(__RPC__in_opt IUIAutomationElement *element, enum TreeScope scope, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__in_opt IUIAutomationPropertyChangedEventHandler *handler, __RPC__in_ecount_full(propertyCount) PROPERTYID *propertyArray, int propertyCount) = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddPropertyChangedEventHandler(__RPC__in_opt IUIAutomationElement *element, enum TreeScope scope, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__in_opt IUIAutomationPropertyChangedEventHandler *handler, __RPC__in SAFEARRAY * propertyArray) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemovePropertyChangedEventHandler(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationPropertyChangedEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddStructureChangedEventHandler(__RPC__in_opt IUIAutomationElement *element, enum TreeScope scope, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__in_opt IUIAutomationStructureChangedEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemoveStructureChangedEventHandler(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationStructureChangedEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddFocusChangedEventHandler(__RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__in_opt IUIAutomationFocusChangedEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemoveFocusChangedEventHandler(__RPC__in_opt IUIAutomationFocusChangedEventHandler *handler) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemoveAllEventHandlers() = 0;
+ virtual HRESULT STDMETHODCALLTYPE IntNativeArrayToSafeArray(__RPC__in_ecount_full(arrayCount) int *array, int arrayCount, __RPC__deref_out_opt SAFEARRAY **safeArray) = 0;
+ virtual HRESULT STDMETHODCALLTYPE IntSafeArrayToNativeArray(__RPC__in SAFEARRAY * intArray, __RPC__deref_out_ecount_full_opt(*arrayCount) int **array, __RPC__out int *arrayCount) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RectToVariant(RECT rc, __RPC__out VARIANT *var) = 0;
+ virtual HRESULT STDMETHODCALLTYPE VariantToRect(VARIANT var, __RPC__out RECT *rc) = 0;
+ virtual HRESULT STDMETHODCALLTYPE SafeArrayToRectNativeArray(__RPC__in SAFEARRAY * rects, __RPC__deref_out_ecount_full_opt(*rectArrayCount) RECT **rectArray, __RPC__out int *rectArrayCount) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CreateProxyFactoryEntry(__RPC__in_opt IUIAutomationProxyFactory *factory, __RPC__deref_out_opt IUIAutomationProxyFactoryEntry **factoryEntry) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ProxyFactoryMapping(__RPC__deref_out_opt IUIAutomationProxyFactoryMapping **factoryMapping) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetPropertyProgrammaticName(PROPERTYID property, __RPC__deref_out_opt BSTR *name) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetPatternProgrammaticName(PATTERNID pattern, __RPC__deref_out_opt BSTR *name) = 0;
+ virtual HRESULT STDMETHODCALLTYPE PollForPotentialSupportedPatterns(__RPC__in_opt IUIAutomationElement *pElement, __RPC__deref_out_opt SAFEARRAY **patternIds, __RPC__deref_out_opt SAFEARRAY **patternNames) = 0;
+ virtual HRESULT STDMETHODCALLTYPE PollForPotentialSupportedProperties(__RPC__in_opt IUIAutomationElement *pElement, __RPC__deref_out_opt SAFEARRAY **propertyIds, __RPC__deref_out_opt SAFEARRAY **propertyNames) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CheckNotSupported(VARIANT value, __RPC__out BOOL *isNotSupported) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ReservedNotSupportedValue(__RPC__deref_out_opt IUnknown **notSupportedValue) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ReservedMixedAttributeValue(__RPC__deref_out_opt IUnknown **mixedAttributeValue) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ElementFromIAccessible(__RPC__in_opt IAccessible *accessible, int childId, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ElementFromIAccessibleBuildCache(__RPC__in_opt IAccessible *accessible, int childId, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **element) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUIAutomation, 0x30cbe57d, 0xd9d0, 0x452a, 0xab,0x13, 0x7a,0xc5,0xac,0x48,0x25,0xee)
+#endif
+#endif
+
+
+#ifndef __IUIAutomationTreeWalker_INTERFACE_DEFINED__
+#define __IUIAutomationTreeWalker_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IUIAutomationTreeWalker, 0x4042c624, 0x389c, 0x4afc, 0xa6,0x30, 0x9d,0xf8,0x54,0xa5,0x41,0xfc);
+MIDL_INTERFACE("4042c624-389c-4afc-a630-9df854a541fc")
+IUIAutomationTreeWalker : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE GetParentElement(__RPC__in_opt IUIAutomationElement *element, __RPC__deref_out_opt IUIAutomationElement **parent) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetFirstChildElement(__RPC__in_opt IUIAutomationElement *element, __RPC__deref_out_opt IUIAutomationElement **first) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetLastChildElement(__RPC__in_opt IUIAutomationElement *element, __RPC__deref_out_opt IUIAutomationElement **last) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetNextSiblingElement(__RPC__in_opt IUIAutomationElement *element, __RPC__deref_out_opt IUIAutomationElement **next) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetPreviousSiblingElement(__RPC__in_opt IUIAutomationElement *element, __RPC__deref_out_opt IUIAutomationElement **previous) = 0;
+ virtual HRESULT STDMETHODCALLTYPE NormalizeElement(__RPC__in_opt IUIAutomationElement *element, __RPC__deref_out_opt IUIAutomationElement **normalized) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetParentElementBuildCache(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **parent) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetFirstChildElementBuildCache(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **first) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetLastChildElementBuildCache(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **last) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetNextSiblingElementBuildCache(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **next) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetPreviousSiblingElementBuildCache(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **previous) = 0;
+ virtual HRESULT STDMETHODCALLTYPE NormalizeElementBuildCache(__RPC__in_opt IUIAutomationElement *element, __RPC__in_opt IUIAutomationCacheRequest *cacheRequest, __RPC__deref_out_opt IUIAutomationElement **normalized) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_Condition(__RPC__deref_out_opt IUIAutomationCondition **condition) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IUIAutomationTreeWalker, 0x4042c624, 0x389c, 0x4afc, 0xa6,0x30, 0x9d,0xf8,0x54,0xa5,0x41,0xfc)
+#endif
+#endif
+
+DEFINE_GUID(CLSID_CUIAutomation, 0xff48dba4, 0x60ef, 0x4201, 0xaa,0x87, 0x54,0x10,0x3e,0xef,0x59,0x4e);
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiacontroltypeids_p.h b/src/platformsupport/windowsuiautomation/uiacontroltypeids_p.h
new file mode 100644
index 0000000000..d77fc68da9
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiacontroltypeids_p.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIACONTROLTYPEIDS_H
+#define UIACONTROLTYPEIDS_H
+
+#define UIA_ButtonControlTypeId 50000
+#define UIA_CalendarControlTypeId 50001
+#define UIA_CheckBoxControlTypeId 50002
+#define UIA_ComboBoxControlTypeId 50003
+#define UIA_EditControlTypeId 50004
+#define UIA_HyperlinkControlTypeId 50005
+#define UIA_ImageControlTypeId 50006
+#define UIA_ListItemControlTypeId 50007
+#define UIA_ListControlTypeId 50008
+#define UIA_MenuControlTypeId 50009
+#define UIA_MenuBarControlTypeId 50010
+#define UIA_MenuItemControlTypeId 50011
+#define UIA_ProgressBarControlTypeId 50012
+#define UIA_RadioButtonControlTypeId 50013
+#define UIA_ScrollBarControlTypeId 50014
+#define UIA_SliderControlTypeId 50015
+#define UIA_SpinnerControlTypeId 50016
+#define UIA_StatusBarControlTypeId 50017
+#define UIA_TabControlTypeId 50018
+#define UIA_TabItemControlTypeId 50019
+#define UIA_TextControlTypeId 50020
+#define UIA_ToolBarControlTypeId 50021
+#define UIA_ToolTipControlTypeId 50022
+#define UIA_TreeControlTypeId 50023
+#define UIA_TreeItemControlTypeId 50024
+#define UIA_CustomControlTypeId 50025
+#define UIA_GroupControlTypeId 50026
+#define UIA_ThumbControlTypeId 50027
+#define UIA_DataGridControlTypeId 50028
+#define UIA_DataItemControlTypeId 50029
+#define UIA_DocumentControlTypeId 50030
+#define UIA_SplitButtonControlTypeId 50031
+#define UIA_WindowControlTypeId 50032
+#define UIA_PaneControlTypeId 50033
+#define UIA_HeaderControlTypeId 50034
+#define UIA_HeaderItemControlTypeId 50035
+#define UIA_TableControlTypeId 50036
+#define UIA_TitleBarControlTypeId 50037
+#define UIA_SeparatorControlTypeId 50038
+#define UIA_SemanticZoomControlTypeId 50039
+#define UIA_AppBarControlTypeId 50040
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiaerrorids_p.h b/src/platformsupport/windowsuiautomation/uiaerrorids_p.h
new file mode 100644
index 0000000000..c25453007d
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiaerrorids_p.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIAERRORIDS_H
+#define UIAERRORIDS_H
+
+#define UIA_E_ELEMENTNOTENABLED 0x80040200
+#define UIA_E_ELEMENTNOTAVAILABLE 0x80040201
+#define UIA_E_NOCLICKABLEPOINT 0x80040202
+#define UIA_E_PROXYASSEMBLYNOTLOADED 0x80040203
+#define UIA_E_NOTSUPPORTED 0x80040204
+#define UIA_E_INVALIDOPERATION 0x80131509
+#define UIA_E_TIMEOUT 0x80131505
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiaeventids_p.h b/src/platformsupport/windowsuiautomation/uiaeventids_p.h
new file mode 100644
index 0000000000..2b414968ed
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiaeventids_p.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIAEVENTIDS_H
+#define UIAEVENTIDS_H
+
+#define UIA_ToolTipOpenedEventId 20000
+#define UIA_ToolTipClosedEventId 20001
+#define UIA_StructureChangedEventId 20002
+#define UIA_MenuOpenedEventId 20003
+#define UIA_AutomationPropertyChangedEventId 20004
+#define UIA_AutomationFocusChangedEventId 20005
+#define UIA_AsyncContentLoadedEventId 20006
+#define UIA_MenuClosedEventId 20007
+#define UIA_LayoutInvalidatedEventId 20008
+#define UIA_Invoke_InvokedEventId 20009
+#define UIA_SelectionItem_ElementAddedToSelectionEventId 20010
+#define UIA_SelectionItem_ElementRemovedFromSelectionEventId 20011
+#define UIA_SelectionItem_ElementSelectedEventId 20012
+#define UIA_Selection_InvalidatedEventId 20013
+#define UIA_Text_TextSelectionChangedEventId 20014
+#define UIA_Text_TextChangedEventId 20015
+#define UIA_Window_WindowOpenedEventId 20016
+#define UIA_Window_WindowClosedEventId 20017
+#define UIA_MenuModeStartEventId 20018
+#define UIA_MenuModeEndEventId 20019
+#define UIA_InputReachedTargetEventId 20020
+#define UIA_InputReachedOtherElementEventId 20021
+#define UIA_InputDiscardedEventId 20022
+#define UIA_SystemAlertEventId 20023
+#define UIA_LiveRegionChangedEventId 20024
+#define UIA_HostedFragmentRootsInvalidatedEventId 20025
+#define UIA_Drag_DragStartEventId 20026
+#define UIA_Drag_DragCancelEventId 20027
+#define UIA_Drag_DragCompleteEventId 20028
+#define UIA_DropTarget_DragEnterEventId 20029
+#define UIA_DropTarget_DragLeaveEventId 20030
+#define UIA_DropTarget_DroppedEventId 20031
+#define UIA_TextEdit_TextChangedEventId 20032
+#define UIA_TextEdit_ConversionTargetChangedEventId 20033
+#define UIA_ChangesEventId 20034
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiageneralids_p.h b/src/platformsupport/windowsuiautomation/uiageneralids_p.h
new file mode 100644
index 0000000000..62c795b94a
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiageneralids_p.h
@@ -0,0 +1,46 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIAGENERALIDS_H
+#define UIAGENERALIDS_H
+
+#define UiaAppendRuntimeId 3
+#define UiaRootObjectId -25
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiapatternids_p.h b/src/platformsupport/windowsuiautomation/uiapatternids_p.h
new file mode 100644
index 0000000000..114aabcaa5
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiapatternids_p.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIAPATTERNIDS_H
+#define UIAPATTERNIDS_H
+
+#define UIA_InvokePatternId 10000
+#define UIA_SelectionPatternId 10001
+#define UIA_ValuePatternId 10002
+#define UIA_RangeValuePatternId 10003
+#define UIA_ScrollPatternId 10004
+#define UIA_ExpandCollapsePatternId 10005
+#define UIA_GridPatternId 10006
+#define UIA_GridItemPatternId 10007
+#define UIA_MultipleViewPatternId 10008
+#define UIA_WindowPatternId 10009
+#define UIA_SelectionItemPatternId 10010
+#define UIA_DockPatternId 10011
+#define UIA_TablePatternId 10012
+#define UIA_TableItemPatternId 10013
+#define UIA_TextPatternId 10014
+#define UIA_TogglePatternId 10015
+#define UIA_TransformPatternId 10016
+#define UIA_ScrollItemPatternId 10017
+#define UIA_LegacyIAccessiblePatternId 10018
+#define UIA_ItemContainerPatternId 10019
+#define UIA_VirtualizedItemPatternId 10020
+#define UIA_SynchronizedInputPatternId 10021
+#define UIA_ObjectModelPatternId 10022
+#define UIA_AnnotationPatternId 10023
+#define UIA_TextPattern2Id 10024
+#define UIA_StylesPatternId 10025
+#define UIA_SpreadsheetPatternId 10026
+#define UIA_SpreadsheetItemPatternId 10027
+#define UIA_TransformPattern2Id 10028
+#define UIA_TextChildPatternId 10029
+#define UIA_DragPatternId 10030
+#define UIA_DropTargetPatternId 10031
+#define UIA_TextEditPatternId 10032
+#define UIA_CustomNavigationPatternId 10033
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiapropertyids_p.h b/src/platformsupport/windowsuiautomation/uiapropertyids_p.h
new file mode 100644
index 0000000000..5c35c956f8
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiapropertyids_p.h
@@ -0,0 +1,212 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIAPROPERTYIDS_H
+#define UIAPROPERTYIDS_H
+
+#define UIA_RuntimeIdPropertyId 30000
+#define UIA_BoundingRectanglePropertyId 30001
+#define UIA_ProcessIdPropertyId 30002
+#define UIA_ControlTypePropertyId 30003
+#define UIA_LocalizedControlTypePropertyId 30004
+#define UIA_NamePropertyId 30005
+#define UIA_AcceleratorKeyPropertyId 30006
+#define UIA_AccessKeyPropertyId 30007
+#define UIA_HasKeyboardFocusPropertyId 30008
+#define UIA_IsKeyboardFocusablePropertyId 30009
+#define UIA_IsEnabledPropertyId 30010
+#define UIA_AutomationIdPropertyId 30011
+#define UIA_ClassNamePropertyId 30012
+#define UIA_HelpTextPropertyId 30013
+#define UIA_ClickablePointPropertyId 30014
+#define UIA_CulturePropertyId 30015
+#define UIA_IsControlElementPropertyId 30016
+#define UIA_IsContentElementPropertyId 30017
+#define UIA_LabeledByPropertyId 30018
+#define UIA_IsPasswordPropertyId 30019
+#define UIA_NativeWindowHandlePropertyId 30020
+#define UIA_ItemTypePropertyId 30021
+#define UIA_IsOffscreenPropertyId 30022
+#define UIA_OrientationPropertyId 30023
+#define UIA_FrameworkIdPropertyId 30024
+#define UIA_IsRequiredForFormPropertyId 30025
+#define UIA_ItemStatusPropertyId 30026
+#define UIA_IsDockPatternAvailablePropertyId 30027
+#define UIA_IsExpandCollapsePatternAvailablePropertyId 30028
+#define UIA_IsGridItemPatternAvailablePropertyId 30029
+#define UIA_IsGridPatternAvailablePropertyId 30030
+#define UIA_IsInvokePatternAvailablePropertyId 30031
+#define UIA_IsMultipleViewPatternAvailablePropertyId 30032
+#define UIA_IsRangeValuePatternAvailablePropertyId 30033
+#define UIA_IsScrollPatternAvailablePropertyId 30034
+#define UIA_IsScrollItemPatternAvailablePropertyId 30035
+#define UIA_IsSelectionItemPatternAvailablePropertyId 30036
+#define UIA_IsSelectionPatternAvailablePropertyId 30037
+#define UIA_IsTablePatternAvailablePropertyId 30038
+#define UIA_IsTableItemPatternAvailablePropertyId 30039
+#define UIA_IsTextPatternAvailablePropertyId 30040
+#define UIA_IsTogglePatternAvailablePropertyId 30041
+#define UIA_IsTransformPatternAvailablePropertyId 30042
+#define UIA_IsValuePatternAvailablePropertyId 30043
+#define UIA_IsWindowPatternAvailablePropertyId 30044
+#define UIA_ValueValuePropertyId 30045
+#define UIA_ValueIsReadOnlyPropertyId 30046
+#define UIA_RangeValueValuePropertyId 30047
+#define UIA_RangeValueIsReadOnlyPropertyId 30048
+#define UIA_RangeValueMinimumPropertyId 30049
+#define UIA_RangeValueMaximumPropertyId 30050
+#define UIA_RangeValueLargeChangePropertyId 30051
+#define UIA_RangeValueSmallChangePropertyId 30052
+#define UIA_ScrollHorizontalScrollPercentPropertyId 30053
+#define UIA_ScrollHorizontalViewSizePropertyId 30054
+#define UIA_ScrollVerticalScrollPercentPropertyId 30055
+#define UIA_ScrollVerticalViewSizePropertyId 30056
+#define UIA_ScrollHorizontallyScrollablePropertyId 30057
+#define UIA_ScrollVerticallyScrollablePropertyId 30058
+#define UIA_SelectionSelectionPropertyId 30059
+#define UIA_SelectionCanSelectMultiplePropertyId 30060
+#define UIA_SelectionIsSelectionRequiredPropertyId 30061
+#define UIA_GridRowCountPropertyId 30062
+#define UIA_GridColumnCountPropertyId 30063
+#define UIA_GridItemRowPropertyId 30064
+#define UIA_GridItemColumnPropertyId 30065
+#define UIA_GridItemRowSpanPropertyId 30066
+#define UIA_GridItemColumnSpanPropertyId 30067
+#define UIA_GridItemContainingGridPropertyId 30068
+#define UIA_DockDockPositionPropertyId 30069
+#define UIA_ExpandCollapseExpandCollapseStatePropertyId 30070
+#define UIA_MultipleViewCurrentViewPropertyId 30071
+#define UIA_MultipleViewSupportedViewsPropertyId 30072
+#define UIA_WindowCanMaximizePropertyId 30073
+#define UIA_WindowCanMinimizePropertyId 30074
+#define UIA_WindowWindowVisualStatePropertyId 30075
+#define UIA_WindowWindowInteractionStatePropertyId 30076
+#define UIA_WindowIsModalPropertyId 30077
+#define UIA_WindowIsTopmostPropertyId 30078
+#define UIA_SelectionItemIsSelectedPropertyId 30079
+#define UIA_SelectionItemSelectionContainerPropertyId 30080
+#define UIA_TableRowHeadersPropertyId 30081
+#define UIA_TableColumnHeadersPropertyId 30082
+#define UIA_TableRowOrColumnMajorPropertyId 30083
+#define UIA_TableItemRowHeaderItemsPropertyId 30084
+#define UIA_TableItemColumnHeaderItemsPropertyId 30085
+#define UIA_ToggleToggleStatePropertyId 30086
+#define UIA_TransformCanMovePropertyId 30087
+#define UIA_TransformCanResizePropertyId 30088
+#define UIA_TransformCanRotatePropertyId 30089
+#define UIA_IsLegacyIAccessiblePatternAvailablePropertyId 30090
+#define UIA_LegacyIAccessibleChildIdPropertyId 30091
+#define UIA_LegacyIAccessibleNamePropertyId 30092
+#define UIA_LegacyIAccessibleValuePropertyId 30093
+#define UIA_LegacyIAccessibleDescriptionPropertyId 30094
+#define UIA_LegacyIAccessibleRolePropertyId 30095
+#define UIA_LegacyIAccessibleStatePropertyId 30096
+#define UIA_LegacyIAccessibleHelpPropertyId 30097
+#define UIA_LegacyIAccessibleKeyboardShortcutPropertyId 30098
+#define UIA_LegacyIAccessibleSelectionPropertyId 30099
+#define UIA_LegacyIAccessibleDefaultActionPropertyId 30100
+#define UIA_AriaRolePropertyId 30101
+#define UIA_AriaPropertiesPropertyId 30102
+#define UIA_IsDataValidForFormPropertyId 30103
+#define UIA_ControllerForPropertyId 30104
+#define UIA_DescribedByPropertyId 30105
+#define UIA_FlowsToPropertyId 30106
+#define UIA_ProviderDescriptionPropertyId 30107
+#define UIA_IsItemContainerPatternAvailablePropertyId 30108
+#define UIA_IsVirtualizedItemPatternAvailablePropertyId 30109
+#define UIA_IsSynchronizedInputPatternAvailablePropertyId 30110
+#define UIA_OptimizeForVisualContentPropertyId 30111
+#define UIA_IsObjectModelPatternAvailablePropertyId 30112
+#define UIA_AnnotationAnnotationTypeIdPropertyId 30113
+#define UIA_AnnotationAnnotationTypeNamePropertyId 30114
+#define UIA_AnnotationAuthorPropertyId 30115
+#define UIA_AnnotationDateTimePropertyId 30116
+#define UIA_AnnotationTargetPropertyId 30117
+#define UIA_IsAnnotationPatternAvailablePropertyId 30118
+#define UIA_IsTextPattern2AvailablePropertyId 30119
+#define UIA_StylesStyleIdPropertyId 30120
+#define UIA_StylesStyleNamePropertyId 30121
+#define UIA_StylesFillColorPropertyId 30122
+#define UIA_StylesFillPatternStylePropertyId 30123
+#define UIA_StylesShapePropertyId 30124
+#define UIA_StylesFillPatternColorPropertyId 30125
+#define UIA_StylesExtendedPropertiesPropertyId 30126
+#define UIA_IsStylesPatternAvailablePropertyId 30127
+#define UIA_IsSpreadsheetPatternAvailablePropertyId 30128
+#define UIA_SpreadsheetItemFormulaPropertyId 30129
+#define UIA_SpreadsheetItemAnnotationObjectsPropertyId 30130
+#define UIA_SpreadsheetItemAnnotationTypesPropertyId 30131
+#define UIA_IsSpreadsheetItemPatternAvailablePropertyId 30132
+#define UIA_Transform2CanZoomPropertyId 30133
+#define UIA_IsTransformPattern2AvailablePropertyId 30134
+#define UIA_LiveSettingPropertyId 30135
+#define UIA_IsTextChildPatternAvailablePropertyId 30136
+#define UIA_IsDragPatternAvailablePropertyId 30137
+#define UIA_DragIsGrabbedPropertyId 30138
+#define UIA_DragDropEffectPropertyId 30139
+#define UIA_DragDropEffectsPropertyId 30140
+#define UIA_IsDropTargetPatternAvailablePropertyId 30141
+#define UIA_DropTargetDropTargetEffectPropertyId 30142
+#define UIA_DropTargetDropTargetEffectsPropertyId 30143
+#define UIA_DragGrabbedItemsPropertyId 30144
+#define UIA_Transform2ZoomLevelPropertyId 30145
+#define UIA_Transform2ZoomMinimumPropertyId 30146
+#define UIA_Transform2ZoomMaximumPropertyId 30147
+#define UIA_FlowsFromPropertyId 30148
+#define UIA_IsTextEditPatternAvailablePropertyId 30149
+#define UIA_IsPeripheralPropertyId 30150
+#define UIA_IsCustomNavigationPatternAvailablePropertyId 30151
+#define UIA_PositionInSetPropertyId 30152
+#define UIA_SizeOfSetPropertyId 30153
+#define UIA_LevelPropertyId 30154
+#define UIA_AnnotationTypesPropertyId 30155
+#define UIA_AnnotationObjectsPropertyId 30156
+#define UIA_LandmarkTypePropertyId 30157
+#define UIA_LocalizedLandmarkTypePropertyId 30158
+#define UIA_FullDescriptionPropertyId 30159
+#define UIA_FillColorPropertyId 30160
+#define UIA_OutlineColorPropertyId 30161
+#define UIA_FillTypePropertyId 30162
+#define UIA_VisualEffectsPropertyId 30163
+#define UIA_OutlineThicknessPropertyId 30164
+#define UIA_CenterPointPropertyId 30165
+#define UIA_RotationPropertyId 30166
+#define UIA_SizePropertyId 30167
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiaserverinterfaces_p.h b/src/platformsupport/windowsuiautomation/uiaserverinterfaces_p.h
new file mode 100644
index 0000000000..caae84755b
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiaserverinterfaces_p.h
@@ -0,0 +1,352 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIASERVERINTERFACES_H
+#define UIASERVERINTERFACES_H
+
+#include <Unknwn.h>
+
+#ifndef __IRawElementProviderSimple_INTERFACE_DEFINED__
+#define __IRawElementProviderSimple_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IRawElementProviderSimple, 0xd6dd68d1, 0x86fd, 0x4332, 0x86,0x66, 0x9a,0xbe,0xde,0xa2,0xd2,0x4c);
+MIDL_INTERFACE("d6dd68d1-86fd-4332-8666-9abedea2d24c")
+IRawElementProviderSimple : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE get_ProviderOptions(__RPC__out enum ProviderOptions *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetPatternProvider(PATTERNID patternId, __RPC__deref_out_opt IUnknown **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetPropertyValue(PROPERTYID propertyId, __RPC__out VARIANT *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_HostRawElementProvider(__RPC__deref_out_opt IRawElementProviderSimple **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IRawElementProviderSimple, 0xd6dd68d1, 0x86fd, 0x4332, 0x86,0x66, 0x9a,0xbe,0xde,0xa2,0xd2,0x4c)
+#endif
+#endif
+
+
+#ifndef __IRawElementProviderFragmentRoot_FWD_DEFINED__
+#define __IRawElementProviderFragmentRoot_FWD_DEFINED__
+typedef interface IRawElementProviderFragmentRoot IRawElementProviderFragmentRoot;
+#endif
+
+
+#ifndef __IRawElementProviderFragment_FWD_DEFINED__
+#define __IRawElementProviderFragment_FWD_DEFINED__
+typedef interface IRawElementProviderFragment IRawElementProviderFragment;
+#endif
+
+
+#ifndef __IRawElementProviderFragment_INTERFACE_DEFINED__
+#define __IRawElementProviderFragment_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IRawElementProviderFragment, 0xf7063da8, 0x8359, 0x439c, 0x92,0x97, 0xbb,0xc5,0x29,0x9a,0x7d,0x87);
+MIDL_INTERFACE("f7063da8-8359-439c-9297-bbc5299a7d87")
+IRawElementProviderFragment : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE Navigate(enum NavigateDirection direction, __RPC__deref_out_opt IRawElementProviderFragment **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetRuntimeId(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_BoundingRectangle(__RPC__out struct UiaRect *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetEmbeddedFragmentRoots(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE SetFocus() = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_FragmentRoot(__RPC__deref_out_opt IRawElementProviderFragmentRoot **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IRawElementProviderFragment, 0xf7063da8, 0x8359, 0x439c, 0x92,0x97, 0xbb,0xc5,0x29,0x9a,0x7d,0x87)
+#endif
+#endif
+
+
+#ifndef __IRawElementProviderFragmentRoot_INTERFACE_DEFINED__
+#define __IRawElementProviderFragmentRoot_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IRawElementProviderFragmentRoot, 0x620ce2a5, 0xab8f, 0x40a9, 0x86,0xcb, 0xde,0x3c,0x75,0x59,0x9b,0x58);
+MIDL_INTERFACE("620ce2a5-ab8f-40a9-86cb-de3c75599b58")
+IRawElementProviderFragmentRoot : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE ElementProviderFromPoint(double x, double y, __RPC__deref_out_opt IRawElementProviderFragment **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetFocus(__RPC__deref_out_opt IRawElementProviderFragment **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IRawElementProviderFragmentRoot, 0x620ce2a5, 0xab8f, 0x40a9, 0x86,0xcb, 0xde,0x3c,0x75,0x59,0x9b,0x58)
+#endif
+#endif
+
+
+#ifndef __IValueProvider_INTERFACE_DEFINED__
+#define __IValueProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IValueProvider, 0xc7935180, 0x6fb3, 0x4201, 0xb1,0x74, 0x7d,0xf7,0x3a,0xdb,0xf6,0x4a);
+MIDL_INTERFACE("c7935180-6fb3-4201-b174-7df73adbf64a")
+IValueProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE SetValue(__RPC__in LPCWSTR val) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_Value(__RPC__deref_out_opt BSTR *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_IsReadOnly(__RPC__out BOOL *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IValueProvider, 0xc7935180, 0x6fb3, 0x4201, 0xb1,0x74, 0x7d,0xf7,0x3a,0xdb,0xf6,0x4a)
+#endif
+#endif
+
+
+#ifndef __IRangeValueProvider_INTERFACE_DEFINED__
+#define __IRangeValueProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IRangeValueProvider, 0x36dc7aef, 0x33e6, 0x4691, 0xaf,0xe1, 0x2b,0xe7,0x27,0x4b,0x3d,0x33);
+MIDL_INTERFACE("36dc7aef-33e6-4691-afe1-2be7274b3d33")
+IRangeValueProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE SetValue(double val) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_Value(__RPC__out double *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_IsReadOnly(__RPC__out BOOL *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_Maximum(__RPC__out double *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_Minimum(__RPC__out double *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_LargeChange(__RPC__out double *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_SmallChange(__RPC__out double *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IRangeValueProvider, 0x36dc7aef, 0x33e6, 0x4691, 0xaf,0xe1, 0x2b,0xe7,0x27,0x4b,0x3d,0x33)
+#endif
+#endif
+
+
+#ifndef __ITextRangeProvider_INTERFACE_DEFINED__
+#define __ITextRangeProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITextRangeProvider, 0x5347ad7b, 0xc355, 0x46f8, 0xaf,0xf5, 0x90,0x90,0x33,0x58,0x2f,0x63);
+MIDL_INTERFACE("5347ad7b-c355-46f8-aff5-909033582f63")
+ITextRangeProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE Clone(__RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE Compare(__RPC__in_opt ITextRangeProvider *range, __RPC__out BOOL *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE CompareEndpoints(enum TextPatternRangeEndpoint endpoint, __RPC__in_opt ITextRangeProvider *targetRange, enum TextPatternRangeEndpoint targetEndpoint, __RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE ExpandToEnclosingUnit(enum TextUnit unit) = 0;
+ virtual HRESULT STDMETHODCALLTYPE FindAttribute(TEXTATTRIBUTEID attributeId, VARIANT val, BOOL backward, __RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE FindText(__RPC__in BSTR text, BOOL backward, BOOL ignoreCase, __RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetAttributeValue(TEXTATTRIBUTEID attributeId, __RPC__out VARIANT *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetBoundingRectangles(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetEnclosingElement(__RPC__deref_out_opt IRawElementProviderSimple **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetText(int maxLength, __RPC__deref_out_opt BSTR *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE Move(enum TextUnit unit, int count, __RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE MoveEndpointByUnit(enum TextPatternRangeEndpoint endpoint, enum TextUnit unit, int count, __RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE MoveEndpointByRange(enum TextPatternRangeEndpoint endpoint, __RPC__in_opt ITextRangeProvider *targetRange, enum TextPatternRangeEndpoint targetEndpoint) = 0;
+ virtual HRESULT STDMETHODCALLTYPE Select() = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddToSelection() = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemoveFromSelection() = 0;
+ virtual HRESULT STDMETHODCALLTYPE ScrollIntoView(BOOL alignToTop) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetChildren(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITextRangeProvider, 0x5347ad7b, 0xc355, 0x46f8, 0xaf,0xf5, 0x90,0x90,0x33,0x58,0x2f,0x63)
+#endif
+#endif
+
+
+#ifndef __ITextProvider_INTERFACE_DEFINED__
+#define __ITextProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITextProvider, 0x3589c92c, 0x63f3, 0x4367, 0x99,0xbb, 0xad,0xa6,0x53,0xb7,0x7c,0xf2);
+MIDL_INTERFACE("3589c92c-63f3-4367-99bb-ada653b77cf2")
+ITextProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE GetSelection(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetVisibleRanges(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RangeFromChild(__RPC__in_opt IRawElementProviderSimple *childElement, __RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE RangeFromPoint(struct UiaPoint point, __RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_DocumentRange(__RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_SupportedTextSelection(__RPC__out enum SupportedTextSelection *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITextProvider, 0x3589c92c, 0x63f3, 0x4367, 0x99,0xbb, 0xad,0xa6,0x53,0xb7,0x7c,0xf2)
+#endif
+#endif
+
+
+#ifndef __ITextProvider2_INTERFACE_DEFINED__
+#define __ITextProvider2_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITextProvider2, 0x0dc5e6ed, 0x3e16, 0x4bf1, 0x8f,0x9a, 0xa9,0x79,0x87,0x8b,0xc1,0x95);
+MIDL_INTERFACE("0dc5e6ed-3e16-4bf1-8f9a-a979878bc195")
+ITextProvider2 : public ITextProvider
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE RangeFromAnnotation(__RPC__in_opt IRawElementProviderSimple *annotationElement, __RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetCaretRange(__RPC__out BOOL *isActive, __RPC__deref_out_opt ITextRangeProvider **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITextProvider2, 0x0dc5e6ed, 0x3e16, 0x4bf1, 0x8f,0x9a, 0xa9,0x79,0x87,0x8b,0xc1,0x95)
+#endif
+#endif
+
+
+#ifndef __IToggleProvider_INTERFACE_DEFINED__
+#define __IToggleProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IToggleProvider, 0x56d00bd0, 0xc4f4, 0x433c, 0xa8,0x36, 0x1a,0x52,0xa5,0x7e,0x08,0x92);
+MIDL_INTERFACE("56d00bd0-c4f4-433c-a836-1a52a57e0892")
+IToggleProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE Toggle() = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ToggleState(__RPC__out enum ToggleState *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IToggleProvider, 0x56d00bd0, 0xc4f4, 0x433c, 0xa8,0x36, 0x1a,0x52,0xa5,0x7e,0x08,0x92)
+#endif
+#endif
+
+
+#ifndef __IInvokeProvider_INTERFACE_DEFINED__
+#define __IInvokeProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IInvokeProvider, 0x54fcb24b, 0xe18e, 0x47a2, 0xb4,0xd3, 0xec,0xcb,0xe7,0x75,0x99,0xa2);
+MIDL_INTERFACE("54fcb24b-e18e-47a2-b4d3-eccbe77599a2")
+IInvokeProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE Invoke() = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IInvokeProvider, 0x54fcb24b, 0xe18e, 0x47a2, 0xb4,0xd3, 0xec,0xcb,0xe7,0x75,0x99,0xa2)
+#endif
+#endif
+
+
+#ifndef __ISelectionProvider_INTERFACE_DEFINED__
+#define __ISelectionProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ISelectionProvider, 0xfb8b03af, 0x3bdf, 0x48d4, 0xbd,0x36, 0x1a,0x65,0x79,0x3b,0xe1,0x68);
+MIDL_INTERFACE("fb8b03af-3bdf-48d4-bd36-1a65793be168")
+ISelectionProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE GetSelection(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_CanSelectMultiple(__RPC__out BOOL *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_IsSelectionRequired(__RPC__out BOOL *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISelectionProvider, 0xfb8b03af, 0x3bdf, 0x48d4, 0xbd,0x36, 0x1a,0x65,0x79,0x3b,0xe1,0x68)
+#endif
+#endif
+
+
+#ifndef __ISelectionItemProvider_INTERFACE_DEFINED__
+#define __ISelectionItemProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ISelectionItemProvider, 0x2acad808, 0xb2d4, 0x452d, 0xa4,0x07, 0x91,0xff,0x1a,0xd1,0x67,0xb2);
+MIDL_INTERFACE("2acad808-b2d4-452d-a407-91ff1ad167b2")
+ISelectionItemProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE Select() = 0;
+ virtual HRESULT STDMETHODCALLTYPE AddToSelection() = 0;
+ virtual HRESULT STDMETHODCALLTYPE RemoveFromSelection() = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_IsSelected(__RPC__out BOOL *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_SelectionContainer(__RPC__deref_out_opt IRawElementProviderSimple **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ISelectionItemProvider, 0x2acad808, 0xb2d4, 0x452d, 0xa4,0x07, 0x91,0xff,0x1a,0xd1,0x67,0xb2)
+#endif
+#endif
+
+
+#ifndef __ITableProvider_INTERFACE_DEFINED__
+#define __ITableProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITableProvider, 0x9c860395, 0x97b3, 0x490a, 0xb5,0x2a, 0x85,0x8c,0xc2,0x2a,0xf1,0x66);
+MIDL_INTERFACE("9c860395-97b3-490a-b52a-858cc22af166")
+ITableProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE GetRowHeaders(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetColumnHeaders(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_RowOrColumnMajor(__RPC__out enum RowOrColumnMajor *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITableProvider, 0x9c860395, 0x97b3, 0x490a, 0xb5,0x2a, 0x85,0x8c,0xc2,0x2a,0xf1,0x66)
+#endif
+#endif
+
+
+#ifndef __ITableItemProvider_INTERFACE_DEFINED__
+#define __ITableItemProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_ITableItemProvider, 0xb9734fa6, 0x771f, 0x4d78, 0x9c,0x90, 0x25,0x17,0x99,0x93,0x49,0xcd);
+MIDL_INTERFACE("b9734fa6-771f-4d78-9c90-2517999349cd")
+ITableItemProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE GetRowHeaderItems(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE GetColumnHeaderItems(__RPC__deref_out_opt SAFEARRAY **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(ITableItemProvider, 0xb9734fa6, 0x771f, 0x4d78, 0x9c,0x90, 0x25,0x17,0x99,0x93,0x49,0xcd)
+#endif
+#endif
+
+
+#ifndef __IGridProvider_INTERFACE_DEFINED__
+#define __IGridProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IGridProvider, 0xb17d6187, 0x0907, 0x464b, 0xa1,0x68, 0x0e,0xf1,0x7a,0x15,0x72,0xb1);
+MIDL_INTERFACE("b17d6187-0907-464b-a168-0ef17a1572b1")
+IGridProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE GetItem(int row, int column, __RPC__deref_out_opt IRawElementProviderSimple **pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_RowCount(__RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ColumnCount(__RPC__out int *pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IGridProvider, 0xb17d6187, 0x0907, 0x464b, 0xa1,0x68, 0x0e,0xf1,0x7a,0x15,0x72,0xb1)
+#endif
+#endif
+
+
+#ifndef __IGridItemProvider_INTERFACE_DEFINED__
+#define __IGridItemProvider_INTERFACE_DEFINED__
+DEFINE_GUID(IID_IGridItemProvider, 0xd02541f1, 0xfb81, 0x4d64, 0xae,0x32, 0xf5,0x20,0xf8,0xa6,0xdb,0xd1);
+MIDL_INTERFACE("d02541f1-fb81-4d64-ae32-f520f8a6dbd1")
+IGridItemProvider : public IUnknown
+{
+public:
+ virtual HRESULT STDMETHODCALLTYPE get_Row(__RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_Column(__RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_RowSpan(__RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ColumnSpan(__RPC__out int *pRetVal) = 0;
+ virtual HRESULT STDMETHODCALLTYPE get_ContainingGrid(__RPC__deref_out_opt IRawElementProviderSimple **pRetVal) = 0;
+};
+#ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IGridItemProvider, 0xd02541f1, 0xfb81, 0x4d64, 0xae,0x32, 0xf5,0x20,0xf8,0xa6,0xdb,0xd1)
+#endif
+#endif
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/uiatypes_p.h b/src/platformsupport/windowsuiautomation/uiatypes_p.h
new file mode 100644
index 0000000000..25d8b8cb2b
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/uiatypes_p.h
@@ -0,0 +1,145 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef UIATYPES_H
+#define UIATYPES_H
+
+typedef int PROPERTYID;
+typedef int PATTERNID;
+typedef int EVENTID;
+typedef int TEXTATTRIBUTEID;
+typedef int CONTROLTYPEID;
+typedef int LANDMARKTYPEID;
+typedef int METADATAID;
+
+typedef void *UIA_HWND;
+
+enum NavigateDirection {
+ NavigateDirection_Parent = 0,
+ NavigateDirection_NextSibling = 1,
+ NavigateDirection_PreviousSibling = 2,
+ NavigateDirection_FirstChild = 3,
+ NavigateDirection_LastChild = 4
+};
+
+enum ProviderOptions {
+ ProviderOptions_ClientSideProvider = 0x1,
+ ProviderOptions_ServerSideProvider = 0x2,
+ ProviderOptions_NonClientAreaProvider = 0x4,
+ ProviderOptions_OverrideProvider = 0x8,
+ ProviderOptions_ProviderOwnsSetFocus = 0x10,
+ ProviderOptions_UseComThreading = 0x20,
+ ProviderOptions_RefuseNonClientSupport = 0x40,
+ ProviderOptions_HasNativeIAccessible = 0x80,
+ ProviderOptions_UseClientCoordinates = 0x100
+};
+
+enum SupportedTextSelection {
+ SupportedTextSelection_None = 0,
+ SupportedTextSelection_Single = 1,
+ SupportedTextSelection_Multiple = 2
+};
+
+enum TextUnit {
+ TextUnit_Character = 0,
+ TextUnit_Format = 1,
+ TextUnit_Word = 2,
+ TextUnit_Line = 3,
+ TextUnit_Paragraph = 4,
+ TextUnit_Page = 5,
+ TextUnit_Document = 6
+};
+
+enum TextPatternRangeEndpoint {
+ TextPatternRangeEndpoint_Start = 0,
+ TextPatternRangeEndpoint_End = 1
+};
+
+enum CaretPosition {
+ CaretPosition_Unknown = 0,
+ CaretPosition_EndOfLine = 1,
+ CaretPosition_BeginningOfLine = 2
+};
+
+enum ToggleState {
+ ToggleState_Off = 0,
+ ToggleState_On = 1,
+ ToggleState_Indeterminate = 2
+};
+
+enum RowOrColumnMajor {
+ RowOrColumnMajor_RowMajor = 0,
+ RowOrColumnMajor_ColumnMajor = 1,
+ RowOrColumnMajor_Indeterminate = 2
+};
+
+enum TreeScope {
+ TreeScope_None = 0,
+ TreeScope_Element = 0x1,
+ TreeScope_Children = 0x2,
+ TreeScope_Descendants = 0x4,
+ TreeScope_Parent = 0x8,
+ TreeScope_Ancestors = 0x10,
+ TreeScope_Subtree = TreeScope_Element | TreeScope_Children | TreeScope_Descendants
+};
+
+enum OrientationType {
+ OrientationType_None = 0,
+ OrientationType_Horizontal = 1,
+ OrientationType_Vertical = 2
+};
+
+enum PropertyConditionFlags {
+ PropertyConditionFlags_None = 0,
+ PropertyConditionFlags_IgnoreCase = 1
+};
+
+struct UiaRect {
+ double left;
+ double top;
+ double width;
+ double height;
+};
+
+struct UiaPoint {
+ double x;
+ double y;
+};
+
+#endif
diff --git a/src/platformsupport/windowsuiautomation/windowsuiautomation.pro b/src/platformsupport/windowsuiautomation/windowsuiautomation.pro
new file mode 100644
index 0000000000..97cdb60ef9
--- /dev/null
+++ b/src/platformsupport/windowsuiautomation/windowsuiautomation.pro
@@ -0,0 +1,23 @@
+TARGET = QtWindowsUIAutomationSupport
+MODULE = windowsuiautomation_support
+
+QT = core-private gui-private
+CONFIG += static internal_module
+
+HEADERS += \
+ qwindowsuiawrapper_p.h \
+ uiaattributeids_p.h \
+ uiacontroltypeids_p.h \
+ uiaerrorids_p.h \
+ uiaeventids_p.h \
+ uiageneralids_p.h \
+ uiaserverinterfaces_p.h \
+ uiaclientinterfaces_p.h \
+ uiapatternids_p.h \
+ uiapropertyids_p.h \
+ uiatypes_p.h
+
+SOURCES += \
+ qwindowsuiawrapper.cpp
+
+load(qt_module)
diff --git a/src/plugins/bearer/android/jar/bundledjar.pro b/src/plugins/bearer/android/jar/bundledjar.pro
deleted file mode 100644
index 6037f813f2..0000000000
--- a/src/plugins/bearer/android/jar/bundledjar.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-TARGET = QtAndroidBearer-bundled
-CONFIG += bundled_jar_file
-include(jar.pri)
diff --git a/src/plugins/bearer/android/jar/distributedjar.pro b/src/plugins/bearer/android/jar/distributedjar.pro
deleted file mode 100644
index c769a113d5..0000000000
--- a/src/plugins/bearer/android/jar/distributedjar.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-TARGET = QtAndroidBearer
-include(jar.pri)
diff --git a/src/plugins/bearer/android/jar/jar.pri b/src/plugins/bearer/android/jar/jar.pri
deleted file mode 100644
index e43dbf0711..0000000000
--- a/src/plugins/bearer/android/jar/jar.pri
+++ /dev/null
@@ -1,11 +0,0 @@
-load(qt_build_paths)
-CONFIG += java
-DESTDIR = $$MODULE_BASE_OUTDIR/jar
-
-JAVACLASSPATH += $$PWD/src
-
-JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java
-
-# install
-target.path = $$[QT_INSTALL_PREFIX]/jar
-INSTALLS += target
diff --git a/src/plugins/bearer/android/jar/jar.pro b/src/plugins/bearer/android/jar/jar.pro
index 923e757d9b..f988019dac 100644
--- a/src/plugins/bearer/android/jar/jar.pro
+++ b/src/plugins/bearer/android/jar/jar.pro
@@ -1,2 +1,13 @@
-TEMPLATE=subdirs
-SUBDIRS += distributedjar.pro bundledjar.pro
+TARGET = QtAndroidBearer
+
+load(qt_build_paths)
+CONFIG += java
+DESTDIR = $$MODULE_BASE_OUTDIR/jar
+
+JAVACLASSPATH += $$PWD/src
+
+JAVASOURCES += $$PWD/src/org/qtproject/qt5/android/bearer/QtNetworkReceiver.java
+
+# install
+target.path = $$[QT_INSTALL_PREFIX]/jar
+INSTALLS += target
diff --git a/src/plugins/bearer/android/src/main.cpp b/src/plugins/bearer/android/src/main.cpp
index 3892766b89..f3a5074e5d 100644
--- a/src/plugins/bearer/android/src/main.cpp
+++ b/src/plugins/bearer/android/src/main.cpp
@@ -50,7 +50,7 @@ class QAndroidBearerEnginePlugin : public QBearerEnginePlugin
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QBearerEngineFactoryInterface" FILE "android.json")
public:
- QBearerEngine *create(const QString &key) const Q_DECL_OVERRIDE
+ QBearerEngine *create(const QString &key) const override
{
return (key == QLatin1String("android")) ? new QAndroidBearerEngine() : 0;
}
diff --git a/src/plugins/bearer/android/src/qandroidbearerengine.h b/src/plugins/bearer/android/src/qandroidbearerengine.h
index f404ca65eb..837b02232d 100644
--- a/src/plugins/bearer/android/src/qandroidbearerengine.h
+++ b/src/plugins/bearer/android/src/qandroidbearerengine.h
@@ -60,20 +60,20 @@ class QAndroidBearerEngine : public QBearerEngineImpl
public:
explicit QAndroidBearerEngine(QObject *parent = 0);
- ~QAndroidBearerEngine() Q_DECL_OVERRIDE;
-
- QString getInterfaceFromId(const QString &id) Q_DECL_OVERRIDE;
- bool hasIdentifier(const QString &id) Q_DECL_OVERRIDE;
- void connectToId(const QString &id) Q_DECL_OVERRIDE;
- void disconnectFromId(const QString &id) Q_DECL_OVERRIDE;
- QNetworkSession::State sessionStateForId(const QString &id) Q_DECL_OVERRIDE;
- QNetworkConfigurationManager::Capabilities capabilities() const Q_DECL_OVERRIDE;
- QNetworkSessionPrivate *createSessionBackend() Q_DECL_OVERRIDE;
- QNetworkConfigurationPrivatePointer defaultConfiguration() Q_DECL_OVERRIDE;
- bool requiresPolling() const Q_DECL_OVERRIDE;
- quint64 bytesWritten(const QString &id) Q_DECL_OVERRIDE;
- quint64 bytesReceived(const QString &id) Q_DECL_OVERRIDE;
- quint64 startTime(const QString &id) Q_DECL_OVERRIDE;
+ ~QAndroidBearerEngine() override;
+
+ QString getInterfaceFromId(const QString &id) override;
+ bool hasIdentifier(const QString &id) override;
+ void connectToId(const QString &id) override;
+ void disconnectFromId(const QString &id) override;
+ QNetworkSession::State sessionStateForId(const QString &id) override;
+ QNetworkConfigurationManager::Capabilities capabilities() const override;
+ QNetworkSessionPrivate *createSessionBackend() override;
+ QNetworkConfigurationPrivatePointer defaultConfiguration() override;
+ bool requiresPolling() const override;
+ quint64 bytesWritten(const QString &id) override;
+ quint64 bytesReceived(const QString &id) override;
+ quint64 startTime(const QString &id) override;
Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
diff --git a/src/plugins/bearer/generic/main.cpp b/src/plugins/bearer/generic/main.cpp
index 80e7b7d9aa..82a9ce97f4 100644
--- a/src/plugins/bearer/generic/main.cpp
+++ b/src/plugins/bearer/generic/main.cpp
@@ -54,7 +54,7 @@ public:
QGenericEnginePlugin();
~QGenericEnginePlugin();
- QBearerEngine *create(const QString &key) const Q_DECL_OVERRIDE;
+ QBearerEngine *create(const QString &key) const override;
};
QGenericEnginePlugin::QGenericEnginePlugin()
diff --git a/src/plugins/bearer/generic/qgenericengine.h b/src/plugins/bearer/generic/qgenericengine.h
index e680eb9cc0..08960d66f6 100644
--- a/src/plugins/bearer/generic/qgenericengine.h
+++ b/src/plugins/bearer/generic/qgenericengine.h
@@ -58,24 +58,24 @@ public:
QGenericEngine(QObject *parent = 0);
~QGenericEngine();
- QString getInterfaceFromId(const QString &id) Q_DECL_OVERRIDE;
- bool hasIdentifier(const QString &id) Q_DECL_OVERRIDE;
+ QString getInterfaceFromId(const QString &id) override;
+ bool hasIdentifier(const QString &id) override;
- void connectToId(const QString &id) Q_DECL_OVERRIDE;
- void disconnectFromId(const QString &id) Q_DECL_OVERRIDE;
+ void connectToId(const QString &id) override;
+ void disconnectFromId(const QString &id) override;
Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
- QNetworkSession::State sessionStateForId(const QString &id) Q_DECL_OVERRIDE;
+ QNetworkSession::State sessionStateForId(const QString &id) override;
- QNetworkConfigurationManager::Capabilities capabilities() const Q_DECL_OVERRIDE;
+ QNetworkConfigurationManager::Capabilities capabilities() const override;
- QNetworkSessionPrivate *createSessionBackend() Q_DECL_OVERRIDE;
+ QNetworkSessionPrivate *createSessionBackend() override;
- QNetworkConfigurationPrivatePointer defaultConfiguration() Q_DECL_OVERRIDE;
+ QNetworkConfigurationPrivatePointer defaultConfiguration() override;
- bool requiresPolling() const Q_DECL_OVERRIDE;
+ bool requiresPolling() const override;
private Q_SLOTS:
void doRequestUpdate();
diff --git a/src/plugins/bearer/qnetworksession_impl.h b/src/plugins/bearer/qnetworksession_impl.h
index e9c0e383fc..d9aa6ca8fb 100644
--- a/src/plugins/bearer/qnetworksession_impl.h
+++ b/src/plugins/bearer/qnetworksession_impl.h
@@ -75,31 +75,31 @@ public:
//that the state is immediately updated (w/o actually opening
//a session). Also this function should take care of
//notification hooks to discover future state changes.
- void syncStateWithInterface() Q_DECL_OVERRIDE;
+ void syncStateWithInterface() override;
#ifndef QT_NO_NETWORKINTERFACE
- QNetworkInterface currentInterface() const Q_DECL_OVERRIDE;
+ QNetworkInterface currentInterface() const override;
#endif
- QVariant sessionProperty(const QString& key) const Q_DECL_OVERRIDE;
- void setSessionProperty(const QString& key, const QVariant& value) Q_DECL_OVERRIDE;
-
- void open() Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- void stop() Q_DECL_OVERRIDE;
- void migrate() Q_DECL_OVERRIDE;
- void accept() Q_DECL_OVERRIDE;
- void ignore() Q_DECL_OVERRIDE;
- void reject() Q_DECL_OVERRIDE;
-
- QString errorString() const Q_DECL_OVERRIDE; //must return translated string
- QNetworkSession::SessionError error() const Q_DECL_OVERRIDE;
-
- quint64 bytesWritten() const Q_DECL_OVERRIDE;
- quint64 bytesReceived() const Q_DECL_OVERRIDE;
- quint64 activeTime() const Q_DECL_OVERRIDE;
-
- QNetworkSession::UsagePolicies usagePolicies() const Q_DECL_OVERRIDE;
- void setUsagePolicies(QNetworkSession::UsagePolicies) Q_DECL_OVERRIDE;
+ QVariant sessionProperty(const QString& key) const override;
+ void setSessionProperty(const QString& key, const QVariant& value) override;
+
+ void open() override;
+ void close() override;
+ void stop() override;
+ void migrate() override;
+ void accept() override;
+ void ignore() override;
+ void reject() override;
+
+ QString errorString() const override; //must return translated string
+ QNetworkSession::SessionError error() const override;
+
+ quint64 bytesWritten() const override;
+ quint64 bytesReceived() const override;
+ quint64 activeTime() const override;
+
+ QNetworkSession::UsagePolicies usagePolicies() const override;
+ void setUsagePolicies(QNetworkSession::UsagePolicies) override;
private Q_SLOTS:
void networkConfigurationsChanged();
diff --git a/src/plugins/generic/evdevkeyboard/main.cpp b/src/plugins/generic/evdevkeyboard/main.cpp
index ef08cd56ab..5c170e1a06 100644
--- a/src/plugins/generic/evdevkeyboard/main.cpp
+++ b/src/plugins/generic/evdevkeyboard/main.cpp
@@ -50,7 +50,7 @@ class QEvdevKeyboardPlugin : public QGenericPlugin
public:
QEvdevKeyboardPlugin();
- QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
+ QObject* create(const QString &key, const QString &specification) override;
};
QEvdevKeyboardPlugin::QEvdevKeyboardPlugin()
diff --git a/src/plugins/generic/evdevmouse/main.cpp b/src/plugins/generic/evdevmouse/main.cpp
index 86ec7cb575..1b8517f4c4 100644
--- a/src/plugins/generic/evdevmouse/main.cpp
+++ b/src/plugins/generic/evdevmouse/main.cpp
@@ -50,7 +50,7 @@ class QEvdevMousePlugin : public QGenericPlugin
public:
QEvdevMousePlugin();
- QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
+ QObject* create(const QString &key, const QString &specification) override;
};
QEvdevMousePlugin::QEvdevMousePlugin()
diff --git a/src/plugins/generic/evdevtablet/main.cpp b/src/plugins/generic/evdevtablet/main.cpp
index 0646d71146..f43a32910d 100644
--- a/src/plugins/generic/evdevtablet/main.cpp
+++ b/src/plugins/generic/evdevtablet/main.cpp
@@ -50,7 +50,7 @@ class QEvdevTabletPlugin : public QGenericPlugin
public:
QEvdevTabletPlugin();
- QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
+ QObject* create(const QString &key, const QString &specification) override;
};
QEvdevTabletPlugin::QEvdevTabletPlugin()
diff --git a/src/plugins/generic/evdevtouch/main.cpp b/src/plugins/generic/evdevtouch/main.cpp
index aa60614936..f1a0ad53ab 100644
--- a/src/plugins/generic/evdevtouch/main.cpp
+++ b/src/plugins/generic/evdevtouch/main.cpp
@@ -50,7 +50,7 @@ class QEvdevTouchScreenPlugin : public QGenericPlugin
public:
QEvdevTouchScreenPlugin();
- QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
+ QObject* create(const QString &key, const QString &specification) override;
};
QEvdevTouchScreenPlugin::QEvdevTouchScreenPlugin()
diff --git a/src/plugins/generic/generic.pro b/src/plugins/generic/generic.pro
index e323f32d2c..980aa1a506 100644
--- a/src/plugins/generic/generic.pro
+++ b/src/plugins/generic/generic.pro
@@ -1,5 +1,5 @@
TEMPLATE = subdirs
-QT_FOR_CONFIG += gui-private network-private
+QT_FOR_CONFIG += gui-private
qtConfig(evdev) {
SUBDIRS += evdevmouse evdevtouch evdevkeyboard
@@ -11,7 +11,7 @@ qtConfig(tslib) {
SUBDIRS += tslib
}
-qtConfig(udpsocket) {
+qtConfig(tuiotouch) {
SUBDIRS += tuiotouch
}
diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
index 68619928d3..1cdc28c077 100644
--- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp
+++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
@@ -65,9 +65,6 @@ extern "C" {
#endif
#define XMD_H // shut JPEGlib up
-#if defined(Q_OS_UNIXWARE)
-# define HAVE_BOOLEAN // libjpeg under Unixware seems to need this
-#endif
#include <jpeglib.h>
#ifdef const
# undef const // remove crazy C hackery in jconfig.h
diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
index 48693ccdb0..81a730232c 100644
--- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.cpp
@@ -82,7 +82,37 @@ static const int composingKeys[] = {
Qt::Key_Dead_Semivoiced_Sound,
Qt::Key_Dead_Belowdot,
Qt::Key_Dead_Hook,
- Qt::Key_Dead_Horn
+ Qt::Key_Dead_Horn,
+ Qt::Key_Dead_Stroke,
+ Qt::Key_Dead_Abovecomma,
+ Qt::Key_Dead_Abovereversedcomma,
+ Qt::Key_Dead_Doublegrave,
+ Qt::Key_Dead_Belowring,
+ Qt::Key_Dead_Belowmacron,
+ Qt::Key_Dead_Belowcircumflex,
+ Qt::Key_Dead_Belowtilde,
+ Qt::Key_Dead_Belowbreve,
+ Qt::Key_Dead_Belowdiaeresis,
+ Qt::Key_Dead_Invertedbreve,
+ Qt::Key_Dead_Belowcomma,
+ Qt::Key_Dead_Currency,
+ Qt::Key_Dead_a,
+ Qt::Key_Dead_A,
+ Qt::Key_Dead_e,
+ Qt::Key_Dead_E,
+ Qt::Key_Dead_i,
+ Qt::Key_Dead_I,
+ Qt::Key_Dead_o,
+ Qt::Key_Dead_O,
+ Qt::Key_Dead_u,
+ Qt::Key_Dead_U,
+ Qt::Key_Dead_Small_Schwa,
+ Qt::Key_Dead_Capital_Schwa,
+ Qt::Key_Dead_Greek,
+ Qt::Key_Dead_Lowline,
+ Qt::Key_Dead_Aboveverticalline,
+ Qt::Key_Dead_Belowverticalline,
+ Qt::Key_Dead_Longsolidusoverlay
};
QComposeInputContext::QComposeInputContext()
diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h
index f82280903d..4830959665 100644
--- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h
@@ -58,11 +58,11 @@ public:
QComposeInputContext();
~QComposeInputContext();
- bool isValid() const Q_DECL_OVERRIDE;
- void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
- void reset() Q_DECL_OVERRIDE;
- void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
- bool filterEvent(const QEvent *event) Q_DECL_OVERRIDE;
+ bool isValid() const override;
+ void setFocusObject(QObject *object) override;
+ void reset() override;
+ void update(Qt::InputMethodQueries) override;
+ bool filterEvent(const QEvent *event) override;
protected:
void clearComposeBuffer();
diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp
index 97a7242ca6..6b33df65b9 100644
--- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontextmain.cpp
@@ -51,7 +51,7 @@ class QComposePlatformInputContextPlugin : public QPlatformInputContextPlugin
Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "compose.json")
public:
- QComposeInputContext *create(const QString &, const QStringList &) Q_DECL_OVERRIDE;
+ QComposeInputContext *create(const QString &, const QStringList &) override;
};
QComposeInputContext *QComposePlatformInputContextPlugin::create(const QString &system, const QStringList &paramList)
diff --git a/src/plugins/platforminputcontexts/ibus/main.cpp b/src/plugins/platforminputcontexts/ibus/main.cpp
index 2846f52c8c..0a7da3b14c 100644
--- a/src/plugins/platforminputcontexts/ibus/main.cpp
+++ b/src/plugins/platforminputcontexts/ibus/main.cpp
@@ -51,7 +51,7 @@ class QIbusPlatformInputContextPlugin : public QPlatformInputContextPlugin
Q_PLUGIN_METADATA(IID QPlatformInputContextFactoryInterface_iid FILE "ibus.json")
public:
- QIBusPlatformInputContext *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QIBusPlatformInputContext *create(const QString&, const QStringList&) override;
};
QIBusPlatformInputContext *QIbusPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
index 9675d828e7..76f42d764d 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
+++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.cpp
@@ -60,6 +60,10 @@
#ifndef IBUS_RELEASE_MASK
#define IBUS_RELEASE_MASK (1 << 30)
+#define IBUS_SHIFT_MASK (1 << 0)
+#define IBUS_CONTROL_MASK (1 << 2)
+#define IBUS_MOD1_MASK (1 << 3)
+#define IBUS_META_MASK (1 << 28)
#endif
QT_BEGIN_NAMESPACE
@@ -90,6 +94,7 @@ public:
bool valid;
bool busConnected;
QString predit;
+ QList<QInputMethodEvent::Attribute> attributes;
bool needsSurroundingText;
QLocale locale;
};
@@ -165,6 +170,7 @@ void QIBusPlatformInputContext::reset()
d->context->Reset();
d->predit = QString();
+ d->attributes.clear();
}
void QIBusPlatformInputContext::commit()
@@ -177,6 +183,7 @@ void QIBusPlatformInputContext::commit()
QObject *input = qApp->focusObject();
if (!input) {
d->predit = QString();
+ d->attributes.clear();
return;
}
@@ -188,6 +195,7 @@ void QIBusPlatformInputContext::commit()
d->context->Reset();
d->predit = QString();
+ d->attributes.clear();
}
@@ -274,6 +282,7 @@ void QIBusPlatformInputContext::commitText(const QDBusVariant &text)
QCoreApplication::sendEvent(input, &event);
d->predit = QString();
+ d->attributes.clear();
}
void QIBusPlatformInputContext::updatePreeditText(const QDBusVariant &text, uint cursorPos, bool visible)
@@ -292,16 +301,48 @@ void QIBusPlatformInputContext::updatePreeditText(const QDBusVariant &text, uint
if (debug)
qDebug() << "preedit text:" << t.text;
- QList<QInputMethodEvent::Attribute> attributes = t.attributes.imAttributes();
+ d->attributes = t.attributes.imAttributes();
if (!t.text.isEmpty())
- attributes += QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, visible ? 1 : 0);
+ d->attributes += QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, visible ? 1 : 0, QVariant());
- QInputMethodEvent event(t.text, attributes);
+ QInputMethodEvent event(t.text, d->attributes);
QCoreApplication::sendEvent(input, &event);
d->predit = t.text;
}
+void QIBusPlatformInputContext::forwardKeyEvent(uint keyval, uint keycode, uint state)
+{
+ if (!qApp)
+ return;
+
+ QObject *input = qApp->focusObject();
+ if (!input)
+ return;
+
+ if (debug)
+ qDebug() << "forwardKeyEvent" << keyval << keycode << state;
+
+ QEvent::Type type = QEvent::KeyPress;
+ if (state & IBUS_RELEASE_MASK)
+ type = QEvent::KeyRelease;
+
+ state &= ~IBUS_RELEASE_MASK;
+
+ Qt::KeyboardModifiers modifiers = Qt::NoModifier;
+ if (state & IBUS_SHIFT_MASK)
+ modifiers |= Qt::ShiftModifier;
+ if (state & IBUS_CONTROL_MASK)
+ modifiers |= Qt::ControlModifier;
+ if (state & IBUS_MOD1_MASK)
+ modifiers |= Qt::AltModifier;
+ if (state & IBUS_META_MASK)
+ modifiers |= Qt::MetaModifier;
+
+ QKeyEvent event(type, keyval, modifiers, QString(keyval));
+ QCoreApplication::sendEvent(input, &event);
+}
+
void QIBusPlatformInputContext::surroundingTextRequired()
{
if (debug)
@@ -324,6 +365,27 @@ void QIBusPlatformInputContext::deleteSurroundingText(int offset, uint n_chars)
QCoreApplication::sendEvent(input, &event);
}
+void QIBusPlatformInputContext::hidePreeditText()
+{
+ QObject *input = QGuiApplication::focusObject();
+ if (!input)
+ return;
+
+ QList<QInputMethodEvent::Attribute> attributes;
+ QInputMethodEvent event(QString(), attributes);
+ QCoreApplication::sendEvent(input, &event);
+}
+
+void QIBusPlatformInputContext::showPreeditText()
+{
+ QObject *input = QGuiApplication::focusObject();
+ if (!input)
+ return;
+
+ QInputMethodEvent event(d->predit, d->attributes);
+ QCoreApplication::sendEvent(input, &event);
+}
+
bool QIBusPlatformInputContext::filterEvent(const QEvent *event)
{
if (!d->busConnected)
@@ -496,8 +558,11 @@ void QIBusPlatformInputContext::connectToContextSignals()
if (d->context) {
connect(d->context, SIGNAL(CommitText(QDBusVariant)), SLOT(commitText(QDBusVariant)));
connect(d->context, SIGNAL(UpdatePreeditText(QDBusVariant,uint,bool)), this, SLOT(updatePreeditText(QDBusVariant,uint,bool)));
+ connect(d->context, SIGNAL(ForwardKeyEvent(uint, uint, uint)), this, SLOT(forwardKeyEvent(uint, uint, uint)));
connect(d->context, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint)));
connect(d->context, SIGNAL(RequireSurroundingText()), this, SLOT(surroundingTextRequired()));
+ connect(d->context, SIGNAL(HidePreeditText()), this, SLOT(hidePreeditText()));
+ connect(d->context, SIGNAL(ShowPreeditText()), this, SLOT(showPreeditText()));
}
}
diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
index 7baa9ad1da..9b92b2e1f9 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
@@ -86,23 +86,26 @@ public:
QIBusPlatformInputContext();
~QIBusPlatformInputContext();
- bool isValid() const Q_DECL_OVERRIDE;
- void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
+ bool isValid() const override;
+ void setFocusObject(QObject *object) override;
- void invokeAction(QInputMethod::Action a, int x) Q_DECL_OVERRIDE;
- void reset() Q_DECL_OVERRIDE;
- void commit() Q_DECL_OVERRIDE;
- void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
- bool filterEvent(const QEvent *event) Q_DECL_OVERRIDE;
- QLocale locale() const Q_DECL_OVERRIDE;
- bool hasCapability(Capability capability) const Q_DECL_OVERRIDE;
+ void invokeAction(QInputMethod::Action a, int x) override;
+ void reset() override;
+ void commit() override;
+ void update(Qt::InputMethodQueries) override;
+ bool filterEvent(const QEvent *event) override;
+ QLocale locale() const override;
+ bool hasCapability(Capability capability) const override;
public Q_SLOTS:
void commitText(const QDBusVariant &text);
void updatePreeditText(const QDBusVariant &text, uint cursor_pos, bool visible);
+ void forwardKeyEvent(uint keyval, uint keycode, uint state);
void cursorRectChanged();
void deleteSurroundingText(int offset, uint n_chars);
void surroundingTextRequired();
+ void hidePreeditText();
+ void showPreeditText();
void filterEventFinished(QDBusPendingCallWatcher *call);
void socketChanged(const QString &str);
void connectToBus();
diff --git a/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp b/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp
index 9efa6f7eb0..156e9b7c90 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp
+++ b/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp
@@ -33,10 +33,53 @@ QIBusProxy::~QIBusProxy()
{
}
+#ifdef QIBUS_GET_ADDRESS
+QString QIBusProxy::getAddress()
+{
+ QDBusReply<QDBusVariant> reply = Address();
+ QVariant variant = reply.value().variant();
+ if (!variant.isValid())
+ return QString();
+ return variant.toString();
+}
+#endif
+
+#ifdef QIBUS_GET_ENGINES
+QList<QIBusEngineDesc> QIBusProxy::getEngines()
+{
+ QList<QIBusEngineDesc> engines;
+ QDBusReply<QDBusVariant> reply = Engines();
+ QVariant variant = reply.value().variant();
+ if (!variant.isValid())
+ return engines;
+ const QDBusArgument argument = variant.value<QDBusArgument>();
+ qCDebug(qtQpaInputMethodsSerialize) << "QIBusProxy::getEngines()" << argument.currentSignature();
+
+ int i = 1;
+ argument.beginMap();
+ while (!argument.atEnd()) {
+ QDBusVariant value;
+ argument >> value;
+ if (!value.variant().isValid()) {
+ qWarning() << "Warning in QIBusProxy::getEngines():" << QString::asprintf("%dth variant is wrong", i);
+ break;
+ }
+ const QDBusArgument desc_arg = value.variant().value<QDBusArgument>();
+
+ QIBusEngineDesc desc;
+ desc_arg >> desc;
+ engines.append(desc);
+ ++i;
+ }
+ argument.endMap();
+ return engines;
+}
+#endif
+
QIBusEngineDesc QIBusProxy::getGlobalEngine()
{
QIBusEngineDesc desc;
- QDBusReply<QDBusVariant> reply = GetGlobalEngine();
+ QDBusReply<QDBusVariant> reply = GlobalEngine();
QVariant variant = reply.value().variant();
if (!variant.isValid())
return desc;
diff --git a/src/plugins/platforminputcontexts/ibus/qibusproxy.h b/src/plugins/platforminputcontexts/ibus/qibusproxy.h
index bbaebe1b96..839e972c34 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusproxy.h
+++ b/src/plugins/platforminputcontexts/ibus/qibusproxy.h
@@ -54,24 +54,6 @@ public Q_SLOTS: // METHODS
return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList);
}
- inline QDBusPendingReply<QString> GetAddress()
- {
- QList<QVariant> argumentList;
- return asyncCallWithArgumentList(QLatin1String("GetAddress"), argumentList);
- }
-
- inline QDBusPendingReply<QVariantList> ListActiveEngines()
- {
- QList<QVariant> argumentList;
- return asyncCallWithArgumentList(QLatin1String("ListActiveEngines"), argumentList);
- }
-
- inline QDBusPendingReply<QVariantList> ListEngines()
- {
- QList<QVariant> argumentList;
- return asyncCallWithArgumentList(QLatin1String("ListEngines"), argumentList);
- }
-
inline QDBusPendingReply<QDBusVariant> Ping(const QDBusVariant &data)
{
QList<QVariant> argumentList;
@@ -86,19 +68,45 @@ public Q_SLOTS: // METHODS
return asyncCallWithArgumentList(QLatin1String("RegisterComponent"), argumentList);
}
- inline QDBusPendingReply<QDBusVariant> GetGlobalEngine()
+// Property
+ inline QDBusPendingCall GetProperty(const QString method)
{
if (!this->isValid() || this->service().isEmpty() || this->path().isEmpty())
- return QDBusMessage::createError(this->lastError());
+ return QDBusPendingCall::fromError(this->lastError());
QDBusMessage msg = QDBusMessage::createMethodCall(this->service(),
this->path(),
dbusInterfaceProperties(),
QStringLiteral("Get"));
- msg << this->interface() << QStringLiteral("GlobalEngine");
+ msg << this->interface() << method;
return this->connection().asyncCall(msg, this->timeout());
}
+#ifdef QIBUS_GET_ADDRESS
+ inline QDBusPendingCall Address()
+ {
+ return GetProperty(QStringLiteral("Address"));
+ }
+#endif
+
+#ifdef QIBUS_GET_ENGINES
+ inline QDBusPendingCall Engines()
+ {
+ return GetProperty(QStringLiteral("Engines"));
+ }
+#endif
+
+ inline QDBusPendingCall GlobalEngine()
+ {
+ return GetProperty(QStringLiteral("GlobalEngine"));
+ }
+
+#ifdef QIBUS_GET_ADDRESS
+ QString getAddress();
+#endif
+#ifdef QIBUS_GET_ENGINES
+ QList<QIBusEngineDesc> getEngines();
+#endif
QIBusEngineDesc getGlobalEngine();
private:
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index 2bdd49dc50..13d41bea99 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -59,6 +59,7 @@
#include "qandroideventdispatcher.h"
#include <android/api-level.h>
+#include <QtCore/qthread.h>
#include <QtCore/private/qjnihelpers_p.h>
#include <QtCore/private/qjni_p.h>
#include <QtGui/private/qguiapplication_p.h>
@@ -99,7 +100,6 @@ extern "C" typedef int (*Main)(int, char **); //use the standard main method to
static Main m_main = nullptr;
static void *m_mainLibraryHnd = nullptr;
static QList<QByteArray> m_applicationParams;
-pthread_t m_qtAppThread = 0;
static sem_t m_exitSemaphore, m_terminateSemaphore;
QHash<int, AndroidSurfaceClient *> m_surfaces;
@@ -441,57 +441,10 @@ namespace QtAndroid
} // namespace QtAndroid
-static jboolean startQtAndroidPlugin(JNIEnv* /*env*/, jobject /*object*//*, jobject applicationAssetManager*/)
+static jboolean startQtAndroidPlugin(JNIEnv *env, jobject /*object*/, jstring paramsString, jstring environmentString)
{
m_androidPlatformIntegration = nullptr;
m_androidAssetsFileEngineHandler = new AndroidAssetsFileEngineHandler();
- return true;
-}
-
-static void *startMainMethod(void */*data*/)
-{
- {
- JNIEnv* env = nullptr;
- JavaVMAttachArgs args;
- args.version = JNI_VERSION_1_6;
- args.name = "QtMainThread";
- args.group = NULL;
- JavaVM *vm = QtAndroidPrivate::javaVM();
- if (vm != 0)
- vm->AttachCurrentThread(&env, &args);
- }
-
- QVarLengthArray<const char *> params(m_applicationParams.size());
- for (int i = 0; i < m_applicationParams.size(); i++)
- params[i] = static_cast<const char *>(m_applicationParams[i].constData());
-
- int ret = m_main(m_applicationParams.length(), const_cast<char **>(params.data()));
-
- if (m_mainLibraryHnd) {
- int res = dlclose(m_mainLibraryHnd);
- if (res < 0)
- qWarning() << "dlclose failed:" << dlerror();
- }
-
- if (m_applicationClass)
- QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "quitApp", "()V");
-
- // All attached threads should be detached before returning from this function.
- JavaVM *vm = QtAndroidPrivate::javaVM();
- if (vm != 0)
- vm->DetachCurrentThread();
-
- sem_post(&m_terminateSemaphore);
- sem_wait(&m_exitSemaphore);
- sem_destroy(&m_exitSemaphore);
-
- // We must call exit() to ensure that all global objects will be destructed
- exit(ret);
- return 0;
-}
-
-static jboolean startQtApplication(JNIEnv *env, jobject /*object*/, jstring paramsString, jstring environmentString)
-{
m_mainLibraryHnd = nullptr;
{ // Set env. vars
const char *nativeString = env->GetStringUTFChars(environmentString, 0);
@@ -540,14 +493,54 @@ static jboolean startQtApplication(JNIEnv *env, jobject /*object*/, jstring para
if (sem_init(&m_terminateSemaphore, 0, 0) == -1)
return false;
- jboolean res = pthread_create(&m_qtAppThread, nullptr, startMainMethod, nullptr) == 0;
+ return true;
+}
+static void waitForServiceSetup(JNIEnv *env, jclass /*clazz*/)
+{
+ Q_UNUSED(env);
// The service must wait until the QCoreApplication starts otherwise onBind will be
// called too early
if (m_serviceObject)
QtAndroidPrivate::waitForServiceSetup();
+}
+
+static jboolean startQtApplication(JNIEnv */*env*/, jclass /*clazz*/)
+{
+ {
+ JNIEnv* env = nullptr;
+ JavaVMAttachArgs args;
+ args.version = JNI_VERSION_1_6;
+ args.name = "QtMainThread";
+ args.group = NULL;
+ JavaVM *vm = QtAndroidPrivate::javaVM();
+ if (vm != 0)
+ vm->AttachCurrentThread(&env, &args);
+ }
+
+ QVarLengthArray<const char *> params(m_applicationParams.size());
+ for (int i = 0; i < m_applicationParams.size(); i++)
+ params[i] = static_cast<const char *>(m_applicationParams[i].constData());
+
+ int ret = m_main(m_applicationParams.length(), const_cast<char **>(params.data()));
+
+ if (m_mainLibraryHnd) {
+ int res = dlclose(m_mainLibraryHnd);
+ if (res < 0)
+ qWarning() << "dlclose failed:" << dlerror();
+ }
- return res;
+ if (m_applicationClass) {
+ qWarning("exit app 0");
+ QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass, "quitApp", "()V");
+ }
+
+ sem_post(&m_terminateSemaphore);
+ sem_wait(&m_exitSemaphore);
+ sem_destroy(&m_exitSemaphore);
+
+ // We must call exit() to ensure that all global objects will be destructed
+ exit(ret);
}
static void quitQtCoreApplication(JNIEnv *env, jclass /*clazz*/)
@@ -593,7 +586,6 @@ static void terminateQt(JNIEnv *env, jclass /*clazz*/)
if (!QAndroidEventDispatcherStopper::instance()->stopped()) {
sem_post(&m_exitSemaphore);
- pthread_join(m_qtAppThread, nullptr);
}
}
@@ -758,11 +750,12 @@ static jobject onBind(JNIEnv */*env*/, jclass /*cls*/, jobject intent)
}
static JNINativeMethod methods[] = {
- {"startQtAndroidPlugin", "()Z", (void *)startQtAndroidPlugin},
- {"startQtApplication", "(Ljava/lang/String;Ljava/lang/String;)V", (void *)startQtApplication},
+ {"startQtAndroidPlugin", "(Ljava/lang/String;Ljava/lang/String;)Z", (void *)startQtAndroidPlugin},
+ {"startQtApplication", "()V", (void *)startQtApplication},
{"quitQtAndroidPlugin", "()V", (void *)quitQtAndroidPlugin},
{"quitQtCoreApplication", "()V", (void *)quitQtCoreApplication},
{"terminateQt", "()V", (void *)terminateQt},
+ {"waitForServiceSetup", "()V", (void *)waitForServiceSetup},
{"setDisplayMetrics", "(IIIIDDDD)V", (void *)setDisplayMetrics},
{"setSurface", "(ILjava/lang/Object;II)V", (void *)setSurface},
{"updateWindow", "()V", (void *)updateWindow},
@@ -884,7 +877,6 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
void *venv;
} UnionJNIEnvToVoid;
- __android_log_print(ANDROID_LOG_INFO, "Qt", "qt start");
UnionJNIEnvToVoid uenv;
uenv.venv = nullptr;
m_javaVM = nullptr;
@@ -906,5 +898,10 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/)
QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(false);
m_javaVM = vm;
+ // attach qt main thread data to this thread
+ QObject threadSetter;
+ if (threadSetter.thread())
+ threadSetter.thread()->setObjectName("QtMainLoopThread");
+ __android_log_print(ANDROID_LOG_INFO, "Qt", "qt started");
return JNI_VERSION_1_4;
}
diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp
index 3a79e32abe..7dc8bb8080 100644
--- a/src/plugins/platforms/android/qandroidplatformscreen.cpp
+++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp
@@ -59,6 +59,8 @@
#include <QtGui/QWindow>
#include <QtGui/private/qwindow_p.h>
+#include <vector>
+
QT_BEGIN_NAMESPACE
#ifdef QANDROIDPLATFORMSCREEN_DEBUG
@@ -376,8 +378,7 @@ void QAndroidPlatformScreen::doRedraw()
|| !window->isRaster())
continue;
- const QVector<QRect> visibleRects = visibleRegion.rects();
- for (const QRect &rect : visibleRects) {
+ for (const QRect &rect : std::vector<QRect>(visibleRegion.begin(), visibleRegion.end())) {
QRect targetRect = window->geometry();
targetRect &= rect;
diff --git a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp
index 067a26a7b1..d752b539a0 100644
--- a/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp
+++ b/src/plugins/platforms/bsdfb/qbsdfbscreen.cpp
@@ -247,8 +247,7 @@ QRegion QBsdFbScreen::doRedraw()
if (!m_blitter)
m_blitter.reset(new QPainter(&m_onscreenImage));
- const auto rects = touched.rects();
- for (const QRect &rect : rects)
+ for (const QRect &rect : touched)
m_blitter->drawImage(rect, mScreenImage, rect);
return touched;
}
diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro
index 5354bdafbc..2694cb3607 100644
--- a/src/plugins/platforms/cocoa/cocoa.pro
+++ b/src/plugins/platforms/cocoa/cocoa.pro
@@ -14,6 +14,7 @@ SOURCES += main.mm \
qcocoaeventdispatcher.mm \
qcocoaapplicationdelegate.mm \
qcocoaapplication.mm \
+ qcocoansmenu.mm \
qcocoamenu.mm \
qcocoamenuitem.mm \
qcocoamenubar.mm \
@@ -47,6 +48,7 @@ HEADERS += qcocoaintegration.h \
qcocoaeventdispatcher.h \
qcocoaapplicationdelegate.h \
qcocoaapplication.h \
+ qcocoansmenu.h \
qcocoamenu.h \
qcocoamenuitem.h \
qcocoamenubar.h \
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibility.h b/src/plugins/platforms/cocoa/qcocoaaccessibility.h
index e7957276c2..e456364555 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibility.h
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibility.h
@@ -53,10 +53,10 @@ class QCocoaAccessibility : public QPlatformAccessibility
public:
QCocoaAccessibility();
~QCocoaAccessibility();
- void notifyAccessibilityUpdate(QAccessibleEvent *event) Q_DECL_OVERRIDE;
- void setRootObject(QObject *o) Q_DECL_OVERRIDE;
- void initialize() Q_DECL_OVERRIDE;
- void cleanup() Q_DECL_OVERRIDE;
+ void notifyAccessibilityUpdate(QAccessibleEvent *event) override;
+ void setRootObject(QObject *o) override;
+ void initialize() override;
+ void cleanup() override;
};
namespace QCocoaAccessible {
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
index 7e6bae127c..df2336d08b 100644
--- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
+++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm
@@ -40,6 +40,7 @@
#include "qcocoaaccessibility.h"
#include "qcocoahelpers.h"
#include "qcocoawindow.h"
+#include "qcocoascreen.h"
#include "private/qaccessiblecache_p.h"
#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h>
#include <QtGui/qaccessible.h>
@@ -298,9 +299,9 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
// We're in the same top level element as our parent.
return [[self parentElement] accessibilityAttributeValue:NSAccessibilityTopLevelUIElementAttribute];
} else if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
- QPoint qtPosition = iface->rect().topLeft();
- QSize qtSize = iface->rect().size();
- return [NSValue valueWithPoint: NSMakePoint(qtPosition.x(), qt_mac_flipYCoordinate(qtPosition.y() + qtSize.height()))];
+ // The position in points of the element's lower-left corner in screen-relative coordinates
+ QPointF qtPosition = QRectF(iface->rect()).bottomLeft();
+ return [NSValue valueWithPoint:QCocoaScreen::mapToNative(qtPosition)];
} else if ([attribute isEqualToString:NSAccessibilitySizeAttribute]) {
QSize qtSize = iface->rect().size();
return [NSValue valueWithSize: NSMakeSize(qtSize.width(), qtSize.height())];
@@ -430,7 +431,7 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
if ([attribute isEqualToString: NSAccessibilityBoundsForRangeParameterizedAttribute]) {
NSRange range = [parameter rangeValue];
QRect firstRect = iface->textInterface()->characterRect(range.location);
- QRect rect;
+ QRectF rect;
if (range.length > 0) {
NSUInteger position = range.location + range.length - 1;
if (position > range.location && iface->textInterface()->text(position, position + 1) == QStringLiteral("\n"))
@@ -441,15 +442,14 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
rect = firstRect;
rect.setWidth(1);
}
- return [NSValue valueWithRect: NSMakeRect((CGFloat) rect.x(),(CGFloat) qt_mac_flipYCoordinate(rect.y() + rect.height()), rect.width(), rect.height())];
+ return [NSValue valueWithRect:QCocoaScreen::mapToNative(rect)];
}
if ([attribute isEqualToString: NSAccessibilityAttributedStringForRangeParameterizedAttribute]) {
NSRange range = [parameter rangeValue];
QString text = iface->textInterface()->text(range.location, range.location + range.length);
return [[NSAttributedString alloc] initWithString:text.toNSString()];
} else if ([attribute isEqualToString: NSAccessibilityRangeForPositionParameterizedAttribute]) {
- NSPoint nsPoint = [parameter pointValue];
- QPoint point(static_cast<int>(nsPoint.x), static_cast<int>(qt_mac_flipYCoordinate(nsPoint.y)));
+ QPoint point = QCocoaScreen::mapFromNative([parameter pointValue]).toPoint();
int offset = iface->textInterface()->offsetAtPoint(point);
return [NSValue valueWithRange:NSMakeRange(static_cast<NSUInteger>(offset), 1)];
} else if ([attribute isEqualToString: NSAccessibilityStyleRangeForIndexParameterizedAttribute]) {
@@ -566,8 +566,8 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
return NSAccessibilityUnignoredAncestor(self);
}
- int y = qt_mac_flipYCoordinate(point.y);
- QAccessibleInterface *childInterface = iface->childAt(point.x, y);
+ QPointF screenPoint = QCocoaScreen::mapFromNative(point);
+ QAccessibleInterface *childInterface = iface->childAt(screenPoint.x(), screenPoint.y());
// No child found, meaning we hit this element.
if (!childInterface || !childInterface->isValid())
return NSAccessibilityUnignoredAncestor(self);
@@ -575,7 +575,7 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of
// find the deepest child at the point
QAccessibleInterface *childOfChildInterface = 0;
do {
- childOfChildInterface = childInterface->childAt(point.x, y);
+ childOfChildInterface = childInterface->childAt(screenPoint.x(), screenPoint.y());
if (childOfChildInterface && childOfChildInterface->isValid())
childInterface = childOfChildInterface;
} while (childOfChildInterface && childOfChildInterface->isValid());
diff --git a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
index 38bcb69acf..a94e0dc517 100644
--- a/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
+++ b/src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm
@@ -86,16 +86,21 @@
QT_USE_NAMESPACE
-QT_BEGIN_NAMESPACE
-static QCocoaApplicationDelegate *sharedCocoaApplicationDelegate = nil;
+@implementation QCocoaApplicationDelegate
-static void cleanupCocoaApplicationDelegate()
++ (instancetype)sharedDelegate
{
- [sharedCocoaApplicationDelegate release];
+ static QCocoaApplicationDelegate *shared = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ shared = [[self alloc] init];
+ atexit_b(^{
+ [shared release];
+ shared = nil;
+ });
+ });
+ return shared;
}
-QT_END_NAMESPACE
-
-@implementation QCocoaApplicationDelegate
- (id)init
{
@@ -120,7 +125,6 @@ QT_END_NAMESPACE
- (void)dealloc
{
- sharedCocoaApplicationDelegate = nil;
[dockMenu release];
if (reflectionDelegate) {
[[NSApplication sharedApplication] setDelegate:reflectionDelegate];
@@ -131,27 +135,6 @@ QT_END_NAMESPACE
[super dealloc];
}
-+ (id)allocWithZone:(NSZone *)zone
-{
- @synchronized(self) {
- if (sharedCocoaApplicationDelegate == nil) {
- sharedCocoaApplicationDelegate = [super allocWithZone:zone];
- qAddPostRoutine(cleanupCocoaApplicationDelegate);
- return sharedCocoaApplicationDelegate;
- }
- }
- return nil;
-}
-
-+ (QCocoaApplicationDelegate *)sharedDelegate
-{
- @synchronized(self) {
- if (sharedCocoaApplicationDelegate == nil)
- [[self alloc] init];
- }
- return [[sharedCocoaApplicationDelegate retain] autorelease];
-}
-
- (void)setDockMenu:(NSMenu*)newMenu
{
[newMenu retain];
diff --git a/src/plugins/platforms/cocoa/qcocoabackingstore.h b/src/plugins/platforms/cocoa/qcocoabackingstore.h
index a0bc204013..b4cd506513 100644
--- a/src/plugins/platforms/cocoa/qcocoabackingstore.h
+++ b/src/plugins/platforms/cocoa/qcocoabackingstore.h
@@ -52,11 +52,11 @@ public:
QCocoaBackingStore(QWindow *window);
~QCocoaBackingStore();
- void flush(QWindow *, const QRegion &, const QPoint &) Q_DECL_OVERRIDE;
+ void flush(QWindow *, const QRegion &, const QPoint &) override;
private:
bool windowHasUnifiedToolbar() const;
- QImage::Format format() const Q_DECL_OVERRIDE;
+ QImage::Format format() const override;
void redrawRoundedBottomCorners(CGRect) const;
};
diff --git a/src/plugins/platforms/cocoa/qcocoaclipboard.h b/src/plugins/platforms/cocoa/qcocoaclipboard.h
index cab2cfaa91..a78d8f4187 100644
--- a/src/plugins/platforms/cocoa/qcocoaclipboard.h
+++ b/src/plugins/platforms/cocoa/qcocoaclipboard.h
@@ -56,10 +56,10 @@ class QCocoaClipboard : public QObject, public QPlatformClipboard
public:
QCocoaClipboard();
- QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
- void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
- bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
- bool ownsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override;
+ void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) override;
+ bool supportsMode(QClipboard::Mode mode) const override;
+ bool ownsMode(QClipboard::Mode mode) const override;
private Q_SLOTS:
void handleApplicationStateChanged(Qt::ApplicationState state);
diff --git a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.h b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.h
index 133efd6db8..01ac7e181d 100644
--- a/src/plugins/platforms/cocoa/qcocoacolordialoghelper.h
+++ b/src/plugins/platforms/cocoa/qcocoacolordialoghelper.h
@@ -55,12 +55,12 @@ public:
QCocoaColorDialogHelper();
~QCocoaColorDialogHelper();
- void exec() Q_DECL_OVERRIDE;
- bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
+ void exec() override;
+ bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override;
+ void hide() override;
- void setCurrentColor(const QColor&) Q_DECL_OVERRIDE;
- QColor currentColor() const Q_DECL_OVERRIDE;
+ void setCurrentColor(const QColor&) override;
+ QColor currentColor() const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoacursor.h b/src/plugins/platforms/cocoa/qcocoacursor.h
index d1586660a4..58b9ef2151 100644
--- a/src/plugins/platforms/cocoa/qcocoacursor.h
+++ b/src/plugins/platforms/cocoa/qcocoacursor.h
@@ -53,9 +53,9 @@ public:
QCocoaCursor();
~QCocoaCursor();
- void changeCursor(QCursor *cursor, QWindow *window) Q_DECL_OVERRIDE;
- QPoint pos() const Q_DECL_OVERRIDE;
- void setPos(const QPoint &position) Q_DECL_OVERRIDE;
+ void changeCursor(QCursor *cursor, QWindow *window) override;
+ QPoint pos() const override;
+ void setPos(const QPoint &position) override;
private:
QHash<Qt::CursorShape, NSCursor *> m_cursors;
NSCursor *convertCursor(QCursor *cursor);
diff --git a/src/plugins/platforms/cocoa/qcocoacursor.mm b/src/plugins/platforms/cocoa/qcocoacursor.mm
index 99a136d384..c021128e4c 100644
--- a/src/plugins/platforms/cocoa/qcocoacursor.mm
+++ b/src/plugins/platforms/cocoa/qcocoacursor.mm
@@ -39,6 +39,7 @@
#include "qcocoacursor.h"
#include "qcocoawindow.h"
+#include "qcocoascreen.h"
#include "qcocoahelpers.h"
#include <QtGui/private/qcoregraphics_p.h>
@@ -70,7 +71,7 @@ void QCocoaCursor::changeCursor(QCursor *cursor, QWindow *window)
QPoint QCocoaCursor::pos() const
{
- return qt_mac_flipPoint([NSEvent mouseLocation]).toPoint();
+ return QCocoaScreen::mapFromNative([NSEvent mouseLocation]).toPoint();
}
void QCocoaCursor::setPos(const QPoint &position)
@@ -86,7 +87,7 @@ void QCocoaCursor::setPos(const QPoint &position)
NSCursor *QCocoaCursor::convertCursor(QCursor *cursor)
{
- if (cursor == Q_NULLPTR)
+ if (cursor == nullptr)
return 0;
const Qt::CursorShape newShape = cursor->shape();
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.h b/src/plugins/platforms/cocoa/qcocoadrag.h
index c7277a47bf..dc0cc17dfb 100644
--- a/src/plugins/platforms/cocoa/qcocoadrag.h
+++ b/src/plugins/platforms/cocoa/qcocoadrag.h
@@ -56,10 +56,10 @@ public:
~QCocoaDrag();
QMimeData *dragMimeData();
- Qt::DropAction drag(QDrag *m_drag) Q_DECL_OVERRIDE;
+ Qt::DropAction drag(QDrag *m_drag) override;
Qt::DropAction defaultAction(Qt::DropActions possibleActions,
- Qt::KeyboardModifiers modifiers) const Q_DECL_OVERRIDE;
+ Qt::KeyboardModifiers modifiers) const override;
/**
* to meet NSView dragImage:at guarantees, we need to record the original
diff --git a/src/plugins/platforms/cocoa/qcocoadrag.mm b/src/plugins/platforms/cocoa/qcocoadrag.mm
index 3bd0b05725..e1f36b47a1 100644
--- a/src/plugins/platforms/cocoa/qcocoadrag.mm
+++ b/src/plugins/platforms/cocoa/qcocoadrag.mm
@@ -188,7 +188,7 @@ QPixmap QCocoaDrag::dragPixmap(QDrag *drag, QPoint &hotSpot) const
if (s.length() > dragImageMaxChars)
s = s.left(dragImageMaxChars -3) + QChar(0x2026);
if (!s.isEmpty()) {
- const int width = fm.width(s);
+ const int width = fm.horizontalAdvance(s);
const int height = fm.height();
if (width > 0 && height > 0) {
qreal dpr = 1.0;
diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
index f5ba1dc22e..2ddda14289 100644
--- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
+++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.h
@@ -59,19 +59,19 @@ public:
QCocoaFileDialogHelper();
virtual ~QCocoaFileDialogHelper();
- void exec() Q_DECL_OVERRIDE;
+ void exec() override;
- bool defaultNameFilterDisables() const Q_DECL_OVERRIDE;
+ bool defaultNameFilterDisables() const override;
- bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
- void setDirectory(const QUrl &directory) Q_DECL_OVERRIDE;
- QUrl directory() const Q_DECL_OVERRIDE;
- void selectFile(const QUrl &filename) Q_DECL_OVERRIDE;
- QList<QUrl> selectedFiles() const Q_DECL_OVERRIDE;
- void setFilter() Q_DECL_OVERRIDE;
- void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE;
- QString selectedNameFilter() const Q_DECL_OVERRIDE;
+ bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override;
+ void hide() override;
+ void setDirectory(const QUrl &directory) override;
+ QUrl directory() const override;
+ void selectFile(const QUrl &filename) override;
+ QList<QUrl> selectedFiles() const override;
+ void setFilter() override;
+ void selectNameFilter(const QString &filter) override;
+ QString selectedNameFilter() const override;
public:
bool showCocoaFilePanel(Qt::WindowModality windowModality, QWindow *parent);
diff --git a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
index b02e3bc052..94f2125bad 100644
--- a/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
+++ b/src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm
@@ -63,7 +63,8 @@
#include <qsysinfo.h>
#include <qoperatingsystemversion.h>
#include <qglobal.h>
-#include <QDir>
+#include <qdir.h>
+#include <qregularexpression.h>
#include <qpa/qplatformnativeinterface.h>
@@ -161,11 +162,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSOpenSavePanelDelegate);
// resetting our mCurrentDir, set the delegate
// here to make sure it gets the correct value.
[mSavePanel setDelegate:self];
-
-#if QT_OSX_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_11)
- if (__builtin_available(macOS 10.11, *))
- mOpenPanel.accessoryViewDisclosed = YES;
-#endif
+ mOpenPanel.accessoryViewDisclosed = YES;
if (mOptions->isLabelExplicitlySet(QFileDialogOptions::Accept))
[mSavePanel setPrompt:[self strip:options->labelText(QFileDialogOptions::Accept)]];
@@ -197,7 +194,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSOpenSavePanelDelegate);
static QString strippedText(QString s)
{
- s.remove( QString::fromLatin1("...") );
+ s.remove(QLatin1String("..."));
return QPlatformTheme::removeMnemonics(s).trimmed();
}
@@ -513,9 +510,10 @@ static QString strippedText(QString s)
- (QString)removeExtensions:(const QString &)filter
{
- QRegExp regExp(QString::fromLatin1(QPlatformFileDialogHelper::filterRegExp));
- if (regExp.indexIn(filter) != -1)
- return regExp.cap(1).trimmed();
+ QRegularExpression regExp(QString::fromLatin1(QPlatformFileDialogHelper::filterRegExp));
+ QRegularExpressionMatch match = regExp.match(filter);
+ if (match.hasMatch())
+ return match.captured(1).trimmed();
return filter;
}
diff --git a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.h b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.h
index c3fad7cfd6..14f12f2d76 100644
--- a/src/plugins/platforms/cocoa/qcocoafontdialoghelper.h
+++ b/src/plugins/platforms/cocoa/qcocoafontdialoghelper.h
@@ -54,13 +54,13 @@ public:
QCocoaFontDialogHelper();
~QCocoaFontDialogHelper();
- void exec() Q_DECL_OVERRIDE;
+ void exec() override;
- bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
+ bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override;
+ void hide() override;
- void setCurrentFont(const QFont &) Q_DECL_OVERRIDE;
- QFont currentFont() const Q_DECL_OVERRIDE;
+ void setCurrentFont(const QFont &) override;
+ QFont currentFont() const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.h b/src/plugins/platforms/cocoa/qcocoaglcontext.h
index 732b50d29e..0530aa8201 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.h
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.h
@@ -55,22 +55,22 @@ public:
QCocoaGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, const QVariant &nativeHandle);
~QCocoaGLContext();
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override;
- void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void swapBuffers(QPlatformSurface *surface) override;
- bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
- void doneCurrent() Q_DECL_OVERRIDE;
+ bool makeCurrent(QPlatformSurface *surface) override;
+ void doneCurrent() override;
- QFunctionPointer getProcAddress(const char *procName) Q_DECL_OVERRIDE;
+ QFunctionPointer getProcAddress(const char *procName) override;
void update();
static NSOpenGLPixelFormat *createNSOpenGLPixelFormat(const QSurfaceFormat &format);
NSOpenGLContext *nsOpenGLContext() const;
- bool isSharing() const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isSharing() const override;
+ bool isValid() const override;
void windowWasHidden();
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.h b/src/plugins/platforms/cocoa/qcocoahelpers.h
index 7ce247f861..84632c1487 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.h
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.h
@@ -63,6 +63,8 @@ Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QNSView));
QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(lcQpaCocoaWindow)
+Q_DECLARE_LOGGING_CATEGORY(lcQpaCocoaDrawing)
+Q_DECLARE_LOGGING_CATEGORY(lcQpaCocoaMouse)
class QPixmap;
class QString;
@@ -85,13 +87,8 @@ QT_MANGLE_NAMESPACE(QNSView) *qnsview_cast(NSView *view);
void qt_mac_transformProccessToForegroundApplication();
QString qt_mac_applicationName();
-int qt_mac_flipYCoordinate(int y);
-qreal qt_mac_flipYCoordinate(qreal y);
-QPointF qt_mac_flipPoint(const NSPoint &p);
-NSPoint qt_mac_flipPoint(const QPoint &p);
-NSPoint qt_mac_flipPoint(const QPointF &p);
-
-NSRect qt_mac_flipRect(const QRect &rect);
+QPointF qt_mac_flip(const QPointF &pos, const QRectF &reference);
+QRectF qt_mac_flip(const QRectF &rect, const QRectF &reference);
Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum);
@@ -196,6 +193,19 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QNSPanelContentsWrapper);
// -------------------------------------------------------------------------
+// QAppleRefCounted expects the retain function to return the object
+io_object_t q_IOObjectRetain(io_object_t obj);
+// QAppleRefCounted expects the release function to return void
+void q_IOObjectRelease(io_object_t obj);
+
+template <typename T>
+class QIOType : public QAppleRefCounted<T, io_object_t, q_IOObjectRetain, q_IOObjectRelease>
+{
+ using QAppleRefCounted<T, io_object_t, q_IOObjectRetain, q_IOObjectRelease>::QAppleRefCounted;
+};
+
+// -------------------------------------------------------------------------
+
// Depending on the ABI of the platform, we may need to use objc_msgSendSuper_stret:
// - http://www.sealiesoftware.com/blog/archive/2008/10/30/objc_explain_objc_msgSend_stret.html
// - https://lists.apple.com/archives/cocoa-dev/2008/Feb/msg02338.html
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm
index 0380e0e79d..b729c7f4c0 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.mm
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm
@@ -58,6 +58,8 @@
QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcQpaCocoaWindow, "qt.qpa.cocoa.window");
+Q_LOGGING_CATEGORY(lcQpaCocoaDrawing, "qt.qpa.cocoa.drawing");
+Q_LOGGING_CATEGORY(lcQpaCocoaMouse, "qt.qpa.cocoa.mouse");
//
// Conversion Functions
@@ -232,50 +234,37 @@ QString qt_mac_applicationName()
return appName;
}
-int qt_mac_primaryScreenHeight()
-{
- QMacAutoReleasePool pool;
- NSArray *screens = [NSScreen screens];
- if ([screens count] > 0) {
- // The first screen in the screens array is documented to
- // have the (0,0) origin and is designated the primary screen.
- NSRect screenFrame = [[screens objectAtIndex: 0] frame];
- return screenFrame.size.height;
- }
- return 0;
-}
+// -------------------------------------------------------------------------
-int qt_mac_flipYCoordinate(int y)
-{
- return qt_mac_primaryScreenHeight() - y;
-}
+/*!
+ \fn QPointF qt_mac_flip(const QPointF &pos, const QRectF &reference)
+ \fn QRectF qt_mac_flip(const QRectF &rect, const QRectF &reference)
-qreal qt_mac_flipYCoordinate(qreal y)
-{
- return qt_mac_primaryScreenHeight() - y;
-}
+ Flips the Y coordinate of the point/rect between quadrant I and IV.
-QPointF qt_mac_flipPoint(const NSPoint &p)
-{
- return QPointF(p.x, qt_mac_flipYCoordinate(p.y));
-}
+ The native coordinate system on macOS uses quadrant I, with origin
+ in bottom left, and Qt uses quadrant IV, with origin in top left.
-NSPoint qt_mac_flipPoint(const QPoint &p)
-{
- return NSMakePoint(p.x(), qt_mac_flipYCoordinate(p.y()));
-}
+ By flipping the Y coordinate, we can map the point/rect between
+ the two coordinate systems.
-NSPoint qt_mac_flipPoint(const QPointF &p)
+ The flip is always in relation to a reference rectangle, e.g.
+ the frame of the parent view, or the screen geometry. In the
+ latter case the specialized QCocoaScreen::mapFrom/To functions
+ should be used instead.
+*/
+QPointF qt_mac_flip(const QPointF &pos, const QRectF &reference)
{
- return NSMakePoint(p.x(), qt_mac_flipYCoordinate(p.y()));
+ return QPointF(pos.x(), reference.height() - pos.y());
}
-NSRect qt_mac_flipRect(const QRect &rect)
+QRectF qt_mac_flip(const QRectF &rect, const QRectF &reference)
{
- int flippedY = qt_mac_flipYCoordinate(rect.y() + rect.height());
- return NSMakeRect(rect.x(), flippedY, rect.width(), rect.height());
+ return QRectF(qt_mac_flip(rect.bottomLeft(), reference), rect.size());
}
+// -------------------------------------------------------------------------
+
Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum)
{
if (buttonNum >= 0 && buttonNum <= 31)
@@ -408,4 +397,19 @@ QT_END_NAMESPACE
[super layout];
}
+// -------------------------------------------------------------------------
+
+io_object_t q_IOObjectRetain(io_object_t obj)
+{
+ kern_return_t ret = IOObjectRetain(obj);
+ Q_ASSERT(!ret);
+ return obj;
+}
+
+void q_IOObjectRelease(io_object_t obj)
+{
+ kern_return_t ret = IOObjectRelease(obj);
+ Q_ASSERT(!ret);
+}
+
@end
diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.h b/src/plugins/platforms/cocoa/qcocoainputcontext.h
index a248ca0d8d..7190ba0de8 100644
--- a/src/plugins/platforms/cocoa/qcocoainputcontext.h
+++ b/src/plugins/platforms/cocoa/qcocoainputcontext.h
@@ -53,11 +53,11 @@ public:
explicit QCocoaInputContext();
~QCocoaInputContext();
- bool isValid() const Q_DECL_OVERRIDE { return true; }
+ bool isValid() const override { return true; }
- void reset() Q_DECL_OVERRIDE;
+ void reset() override;
- QLocale locale() const Q_DECL_OVERRIDE { return m_locale; }
+ QLocale locale() const override { return m_locale; }
void updateLocale();
private Q_SLOTS:
diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.mm b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
index 9221099a57..d0baea5b36 100644
--- a/src/plugins/platforms/cocoa/qcocoainputcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
@@ -129,6 +129,8 @@ void QCocoaInputContext::focusObjectChanged(QObject *focusObject)
return;
QCocoaWindow *window = static_cast<QCocoaWindow *>(mWindow->handle());
+ if (!window)
+ return;
QNSView *view = qnsview_cast(window->view());
if (!view)
return;
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h
index 2fc5156d24..301771fd53 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.h
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.h
@@ -75,35 +75,35 @@ public:
static QCocoaIntegration *instance();
Options options() const;
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformWindow *createForeignWindow(QWindow *window, WId nativeHandle) const Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformWindow *createForeignWindow(QWindow *window, WId nativeHandle) const override;
QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const override;
#ifndef QT_NO_OPENGL
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override;
#endif
- QPlatformBackingStore *createPlatformBackingStore(QWindow *widget) const Q_DECL_OVERRIDE;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *widget) const override;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
- QCoreTextFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QCocoaNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
- QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE;
+ QCoreTextFontDatabase *fontDatabase() const override;
+ QCocoaNativeInterface *nativeInterface() const override;
+ QPlatformInputContext *inputContext() const override;
#ifndef QT_NO_ACCESSIBILITY
- QCocoaAccessibility *accessibility() const Q_DECL_OVERRIDE;
+ QCocoaAccessibility *accessibility() const override;
#endif
#ifndef QT_NO_CLIPBOARD
- QCocoaClipboard *clipboard() const Q_DECL_OVERRIDE;
+ QCocoaClipboard *clipboard() const override;
#endif
- QCocoaDrag *drag() const Q_DECL_OVERRIDE;
+ QCocoaDrag *drag() const override;
- QStringList themeNames() const Q_DECL_OVERRIDE;
- QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE;
- QCocoaServices *services() const Q_DECL_OVERRIDE;
- QVariant styleHint(StyleHint hint) const Q_DECL_OVERRIDE;
+ QStringList themeNames() const override;
+ QPlatformTheme *createPlatformTheme(const QString &name) const override;
+ QCocoaServices *services() const override;
+ QVariant styleHint(StyleHint hint) const override;
- Qt::KeyboardModifiers queryKeyboardModifiers() const Q_DECL_OVERRIDE;
- QList<int> possibleKeys(const QKeyEvent *event) const Q_DECL_OVERRIDE;
+ Qt::KeyboardModifiers queryKeyboardModifiers() const override;
+ QList<int> possibleKeys(const QKeyEvent *event) const override;
void updateScreens();
QCocoaScreen *screenForNSScreen(NSScreen *nsScreen);
@@ -117,9 +117,9 @@ public:
QCocoaWindow *activePopupWindow() const;
QList<QCocoaWindow *> *popupWindowStack();
- void setApplicationIcon(const QIcon &icon) const Q_DECL_OVERRIDE;
+ void setApplicationIcon(const QIcon &icon) const override;
- void beep() const Q_DECL_OVERRIDE;
+ void beep() const override;
private Q_SLOTS:
void focusWindowChanged(QWindow *);
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.h b/src/plugins/platforms/cocoa/qcocoamenu.h
index 5081fc78c6..2b4cf0ef98 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.h
+++ b/src/plugins/platforms/cocoa/qcocoamenu.h
@@ -45,6 +45,8 @@
#include <qpa/qplatformmenu.h>
#include "qcocoamenuitem.h"
+Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QCocoaNSMenu));
+
QT_BEGIN_NAMESPACE
class QCocoaMenuBar;
@@ -55,32 +57,31 @@ public:
QCocoaMenu();
~QCocoaMenu();
- void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) Q_DECL_OVERRIDE;
- void removeMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE;
- void syncMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE;
- void setEnabled(bool enabled) Q_DECL_OVERRIDE;
- bool isEnabled() const Q_DECL_OVERRIDE;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) Q_DECL_OVERRIDE;
- void dismiss() Q_DECL_OVERRIDE;
+ void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) override;
+ void removeMenuItem(QPlatformMenuItem *menuItem) override;
+ void syncMenuItem(QPlatformMenuItem *menuItem) override;
+ void setEnabled(bool enabled) override;
+ bool isEnabled() const override;
+ void setVisible(bool visible) override;
+ void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) override;
+ void dismiss() override;
- void syncSeparatorsCollapsible(bool enable) Q_DECL_OVERRIDE;
+ void syncSeparatorsCollapsible(bool enable) override;
void propagateEnabledState(bool enabled);
- void setIcon(const QIcon &icon) Q_DECL_OVERRIDE { Q_UNUSED(icon) }
+ void setIcon(const QIcon &icon) override { Q_UNUSED(icon) }
- void setText(const QString &text) Q_DECL_OVERRIDE;
- void setMinimumWidth(int width) Q_DECL_OVERRIDE;
- void setFont(const QFont &font) Q_DECL_OVERRIDE;
+ void setText(const QString &text) override;
+ void setMinimumWidth(int width) override;
+ void setFont(const QFont &font) override;
- inline NSMenu *nsMenu() const
- { return m_nativeMenu; }
+ NSMenu *nsMenu() const;
inline bool isVisible() const { return m_visible; }
- QPlatformMenuItem *menuItemAt(int position) const Q_DECL_OVERRIDE;
- QPlatformMenuItem *menuItemForTag(quintptr tag) const Q_DECL_OVERRIDE;
+ QPlatformMenuItem *menuItemAt(int position) const override;
+ QPlatformMenuItem *menuItemForTag(quintptr tag) const override;
QList<QCocoaMenuItem *> items() const;
QList<QCocoaMenuItem *> merged() const;
@@ -91,7 +92,7 @@ public:
bool isOpen() const;
void setIsOpen(bool isOpen);
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) override;
void syncMenuItem_helper(QPlatformMenuItem *menuItem, bool menubarUpdate);
@@ -101,7 +102,7 @@ private:
void scheduleUpdate();
QList<QCocoaMenuItem *> m_menuItems;
- NSMenu *m_nativeMenu;
+ QT_MANGLE_NAMESPACE(QCocoaNSMenu) *m_nativeMenu;
NSMenuItem *m_attachedItem;
int m_updateTimer;
bool m_enabled:1;
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index 0ffb945863..b3c2d5ae90 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -38,236 +38,17 @@
****************************************************************************/
#include "qcocoamenu.h"
+#include "qcocoansmenu.h"
#include "qcocoahelpers.h"
#include <QtCore/QtDebug>
-#include <QtCore/qmetaobject.h>
-#include <QtCore/private/qthread_p.h>
-#include <QtGui/private/qguiapplication_p.h>
#include "qcocoaapplication.h"
#include "qcocoaintegration.h"
#include "qcocoamenuloader.h"
#include "qcocoamenubar.h"
#include "qcocoawindow.h"
#include "qcocoascreen.h"
-#import "qnsview.h"
-
-QT_BEGIN_NAMESPACE
-
-NSString *qt_mac_removePrivateUnicode(NSString* string)
-{
- int len = [string length];
- if (len) {
- QVarLengthArray <unichar, 10> characters(len);
- bool changed = false;
- for (int i = 0; i<len; i++) {
- characters[i] = [string characterAtIndex:i];
- // check if they belong to key codes in private unicode range
- // currently we need to handle only the NSDeleteFunctionKey
- if (characters[i] == NSDeleteFunctionKey) {
- characters[i] = NSDeleteCharacter;
- changed = true;
- }
- }
- if (changed)
- return [NSString stringWithCharacters:characters.data() length:len];
- }
- return string;
-}
-
-QT_END_NAMESPACE
-
-@interface QT_MANGLE_NAMESPACE(QCocoaMenuDelegate) : NSObject <NSMenuDelegate> {
- QCocoaMenu *m_menu;
-}
-
-- (id) initWithMenu:(QCocoaMenu*) m;
-- (NSMenuItem *)findItem:(NSMenu *)menu forKey:(NSString *)key forModifiers:(NSUInteger)modifier;
-
-@end
-
-QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaMenuDelegate);
-
-@implementation QCocoaMenuDelegate
-
-- (id) initWithMenu:(QCocoaMenu*) m
-{
- if ((self = [super init]))
- m_menu = m;
-
- return self;
-}
-
-- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
-{
- Q_ASSERT(m_menu->nsMenu() == menu);
- return menu.numberOfItems;
-}
-
-- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel
-{
- Q_UNUSED(index);
- Q_ASSERT(m_menu->nsMenu() == menu);
- if (shouldCancel) {
- // TODO detach all submenus
- return NO;
- }
-
- QCocoaMenuItem *menuItem = reinterpret_cast<QCocoaMenuItem *>(item.tag);
- if (m_menu->items().contains(menuItem)) {
- if (QCocoaMenu *itemSubmenu = menuItem->menu())
- itemSubmenu->setAttachedItem(item);
- }
- return YES;
-}
-
-- (void)menu:(NSMenu*)menu willHighlightItem:(NSMenuItem*)item
-{
- Q_UNUSED(menu);
- if (item && [item tag]) {
- QCocoaMenuItem *cocoaItem = reinterpret_cast<QCocoaMenuItem *>([item tag]);
- cocoaItem->hovered();
- }
-}
-
-- (void) menuWillOpen:(NSMenu*)m
-{
- Q_UNUSED(m);
- m_menu->setIsOpen(true);
- emit m_menu->aboutToShow();
-}
-
-- (void) menuDidClose:(NSMenu*)m
-{
- Q_UNUSED(m);
- m_menu->setIsOpen(false);
- // wrong, but it's the best we can do
- emit m_menu->aboutToHide();
-}
-
-- (void) itemFired:(NSMenuItem*) item
-{
- QCocoaMenuItem *cocoaItem = reinterpret_cast<QCocoaMenuItem *>([item tag]);
- // Menu-holding items also get a target to play nicely
- // with NSMenuValidation but should not trigger.
- if (cocoaItem->menu())
- return;
- QScopedScopeLevelCounter scopeLevelCounter(QGuiApplicationPrivate::instance()->threadData);
- QGuiApplicationPrivate::modifier_buttons = [QNSView convertKeyModifiers:[NSEvent modifierFlags]];
- static QMetaMethod activatedSignal = QMetaMethod::fromSignal(&QCocoaMenuItem::activated);
- activatedSignal.invoke(cocoaItem, Qt::QueuedConnection);
-}
-
-- (BOOL)validateMenuItem:(NSMenuItem*)menuItem
-{
- QCocoaMenuItem *cocoaItem = reinterpret_cast<QCocoaMenuItem *>(menuItem.tag);
- // Menu-holding items are always enabled, as it's conventional in Cocoa
- if (!cocoaItem || cocoaItem->menu())
- return YES;
-
- return cocoaItem->isEnabled();
-}
-
-- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event target:(id *)target action:(SEL *)action
-{
- /*
- Check if the menu actually has a keysequence defined for this key event.
- If it does, then we will first send the key sequence to the QWidget that has focus
- since (in Qt's eyes) it needs to a chance at the key event first (QEvent::ShortcutOverride).
- If the widget accepts the key event, we then return YES, but set the target and action to be nil,
- which means that the action should not be triggered, and instead dispatch the event ourselves.
- In every other case we return NO, which means that Cocoa can do as it pleases
- (i.e., fire the menu action).
- */
-
- // Change the private unicode keys to the ones used in setting the "Key Equivalents"
- NSString *characters = qt_mac_removePrivateUnicode([event characters]);
- // Interested only in Shift, Cmd, Ctrl & Alt Keys, so ignoring masks like, Caps lock, Num Lock ...
- const NSUInteger mask = NSShiftKeyMask | NSControlKeyMask | NSCommandKeyMask | NSAlternateKeyMask;
- if (NSMenuItem *menuItem = [self findItem:menu forKey:characters forModifiers:([event modifierFlags] & mask)]) {
- if (!menuItem.target) {
- // This item was modified by QCocoaMenuBar::redirectKnownMenuItemsToFirstResponder
- // and it looks like we're running a modal session for NSOpenPanel/NSSavePanel.
- // QCocoaFileDialogHelper is actually the only place we use this and we run NSOpenPanel modal
- // (modal sheet, window modal, application modal).
- // Whatever the current first responder is, let's give it a chance
- // and do not touch the Qt's focusObject (which is different from some native view
- // having a focus inside NSSave/OpenPanel.
- *target = nil;
- *action = menuItem.action;
- return YES;
- }
-
- QObject *object = qApp->focusObject();
- if (object) {
- QChar ch;
- int keyCode;
- ulong nativeModifiers = [event modifierFlags];
- Qt::KeyboardModifiers modifiers = [QNSView convertKeyModifiers: nativeModifiers];
- NSString *charactersIgnoringModifiers = [event charactersIgnoringModifiers];
- NSString *characters = [event characters];
-
- if ([charactersIgnoringModifiers length] > 0) { // convert the first character into a key code
- if ((modifiers & Qt::ControlModifier) && ([characters length] != 0)) {
- ch = QChar([characters characterAtIndex:0]);
- } else {
- ch = QChar([charactersIgnoringModifiers characterAtIndex:0]);
- }
- keyCode = qt_mac_cocoaKey2QtKey(ch);
- } else {
- // might be a dead key
- ch = QChar::ReplacementCharacter;
- keyCode = Qt::Key_unknown;
- }
-
- QKeyEvent accel_ev(QEvent::ShortcutOverride, (keyCode & (~Qt::KeyboardModifierMask)),
- Qt::KeyboardModifiers(modifiers & Qt::KeyboardModifierMask));
- accel_ev.ignore();
- QCoreApplication::sendEvent(object, &accel_ev);
- if (accel_ev.isAccepted()) {
- [[NSApp keyWindow] sendEvent: event];
- *target = nil;
- *action = nil;
- return YES;
- }
- }
- }
- return NO;
-}
-
-- (NSMenuItem *)findItem:(NSMenu *)menu forKey:(NSString *)key forModifiers:(NSUInteger)modifier
-{
- for (NSMenuItem *item in [menu itemArray]) {
- if (![item isEnabled] || [item isHidden] || [item isSeparatorItem])
- continue;
- if ([item hasSubmenu]) {
- if (NSMenuItem *nested = [self findItem:[item submenu] forKey:key forModifiers:modifier])
- return nested;
- }
-
- NSString *menuKey = [item keyEquivalent];
- if (menuKey
- && NSOrderedSame == [menuKey compare:key]
- && modifier == [item keyEquivalentModifierMask])
- return item;
- }
- return nil;
-}
-
-// Cocoa will query the menu item's target for the worksWhenModal selector.
-// So we need to implement this to allow the items to be handled correctly
-// when a modal dialog is visible.
-- (BOOL)worksWhenModal
-{
- if (!QGuiApplication::modalWindow())
- return YES;
- if (auto *mb = qobject_cast<QCocoaMenuBar *>(m_menu->menuParent()))
- return QGuiApplication::modalWindow()->handle() == mb->cocoaWindow() ? YES : NO;
- return YES;
-}
-
-@end
QT_BEGIN_NAMESPACE
@@ -281,9 +62,7 @@ QCocoaMenu::QCocoaMenu() :
{
QMacAutoReleasePool pool;
- m_nativeMenu = [[NSMenu alloc] initWithTitle:@"Untitled"];
- [m_nativeMenu setAutoenablesItems:YES];
- m_nativeMenu.delegate = [[QCocoaMenuDelegate alloc] initWithMenu:this];
+ m_nativeMenu = [[QCocoaNSMenu alloc] initWithQPAMenu:this];
}
QCocoaMenu::~QCocoaMenu()
@@ -293,10 +72,6 @@ QCocoaMenu::~QCocoaMenu()
item->setMenuParent(0);
}
- QMacAutoReleasePool pool;
- NSObject *delegate = m_nativeMenu.delegate;
- m_nativeMenu.delegate = nil;
- [delegate release];
[m_nativeMenu release];
}
@@ -321,6 +96,11 @@ void QCocoaMenu::setFont(const QFont &font)
}
}
+NSMenu *QCocoaMenu::nsMenu() const
+{
+ return static_cast<NSMenu *>(m_nativeMenu);
+}
+
void QCocoaMenu::insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before)
{
QMacAutoReleasePool pool;
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.h b/src/plugins/platforms/cocoa/qcocoamenubar.h
index a259147247..6f3aca3a51 100644
--- a/src/plugins/platforms/cocoa/qcocoamenubar.h
+++ b/src/plugins/platforms/cocoa/qcocoamenubar.h
@@ -56,11 +56,11 @@ public:
QCocoaMenuBar();
~QCocoaMenuBar();
- void insertMenu(QPlatformMenu *menu, QPlatformMenu* before) Q_DECL_OVERRIDE;
- void removeMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
- void syncMenu(QPlatformMenu *menuItem) Q_DECL_OVERRIDE;
- void handleReparent(QWindow *newParentWindow) Q_DECL_OVERRIDE;
- QPlatformMenu *menuForTag(quintptr tag) const Q_DECL_OVERRIDE;
+ void insertMenu(QPlatformMenu *menu, QPlatformMenu* before) override;
+ void removeMenu(QPlatformMenu *menu) override;
+ void syncMenu(QPlatformMenu *menuItem) override;
+ void handleReparent(QWindow *newParentWindow) override;
+ QPlatformMenu *menuForTag(quintptr tag) const override;
inline NSMenu *nsMenu() const
{ return m_nativeMenu; }
diff --git a/src/plugins/platforms/cocoa/qcocoamenubar.mm b/src/plugins/platforms/cocoa/qcocoamenubar.mm
index cf9553bcf7..8091d00bda 100644
--- a/src/plugins/platforms/cocoa/qcocoamenubar.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenubar.mm
@@ -449,7 +449,7 @@ NSMenuItem *QCocoaMenuBar::itemForRole(QPlatformMenuItem::MenuRole r)
foreach (QCocoaMenuItem *i, m->items())
if (i->effectiveRole() == r)
return i->nsItem();
- return Q_NULLPTR;
+ return nullptr;
}
QCocoaWindow *QCocoaMenuBar::cocoaWindow() const
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.h b/src/plugins/platforms/cocoa/qcocoamenuitem.h
index 53862d0484..2b598ee3a0 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.h
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.h
@@ -78,22 +78,22 @@ public:
QCocoaMenuItem();
~QCocoaMenuItem();
- void setText(const QString &text) Q_DECL_OVERRIDE;
- void setIcon(const QIcon &icon) Q_DECL_OVERRIDE;
- void setMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
- void setVisible(bool isVisible) Q_DECL_OVERRIDE;
- void setIsSeparator(bool isSeparator) Q_DECL_OVERRIDE;
- void setFont(const QFont &font) Q_DECL_OVERRIDE;
- void setRole(MenuRole role) Q_DECL_OVERRIDE;
+ void setText(const QString &text) override;
+ void setIcon(const QIcon &icon) override;
+ void setMenu(QPlatformMenu *menu) override;
+ void setVisible(bool isVisible) override;
+ void setIsSeparator(bool isSeparator) override;
+ void setFont(const QFont &font) override;
+ void setRole(MenuRole role) override;
#ifndef QT_NO_SHORTCUT
- void setShortcut(const QKeySequence& shortcut) Q_DECL_OVERRIDE;
+ void setShortcut(const QKeySequence& shortcut) override;
#endif
- void setCheckable(bool checkable) Q_DECL_OVERRIDE { Q_UNUSED(checkable) }
- void setChecked(bool isChecked) Q_DECL_OVERRIDE;
- void setEnabled(bool isEnabled) Q_DECL_OVERRIDE;
- void setIconSize(int size) Q_DECL_OVERRIDE;
+ void setCheckable(bool checkable) override { Q_UNUSED(checkable) }
+ void setChecked(bool isChecked) override;
+ void setEnabled(bool isEnabled) override;
+ void setIconSize(int size) override;
- void setNativeContents(WId item) Q_DECL_OVERRIDE;
+ void setNativeContents(WId item) override;
inline QString text() const { return m_text; }
inline NSMenuItem * nsItem() { return m_native; }
diff --git a/src/plugins/platforms/cocoa/qcocoamenuitem.mm b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
index eaf310ec51..f8f9648822 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuitem.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenuitem.mm
@@ -49,6 +49,7 @@
#include "qcocoaapplication.h" // for custom application category
#include "qcocoamenuloader.h"
#include <QtGui/private/qcoregraphics_p.h>
+#include <QtCore/qregularexpression.h>
#include <QtCore/QDebug>
@@ -261,7 +262,8 @@ NSMenuItem *QCocoaMenuItem::sync()
m_detectedRole = detectMenuRole(m_text);
switch (m_detectedRole) {
case QPlatformMenuItem::AboutRole:
- if (m_text.indexOf(QRegExp(QString::fromLatin1("qt$"), Qt::CaseInsensitive)) == -1)
+ if (m_text.indexOf(QRegularExpression(QString::fromLatin1("qt$"),
+ QRegularExpression::CaseInsensitiveOption)) == -1)
mergeItem = [loader aboutMenuItem];
else
mergeItem = [loader aboutQtMenuItem];
diff --git a/src/plugins/platforms/cocoa/qcocoamenuloader.mm b/src/plugins/platforms/cocoa/qcocoamenuloader.mm
index b986833f6d..cd597da71c 100644
--- a/src/plugins/platforms/cocoa/qcocoamenuloader.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenuloader.mm
@@ -57,8 +57,12 @@
static QCocoaMenuLoader *shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
- shared = [[self alloc] init];
- });
+ shared = [[self alloc] init];
+ atexit_b(^{
+ [shared release];
+ shared = nil;
+ });
+ });
return shared;
}
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h
index 26fbe3e4bc..c78f1d5a7f 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h
@@ -60,18 +60,18 @@ public:
QCocoaNativeInterface();
#ifndef QT_NO_OPENGL
- void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) Q_DECL_OVERRIDE;
+ void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) override;
#endif
- void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) Q_DECL_OVERRIDE;
+ void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) override;
- NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE;
+ NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) override;
#ifndef QT_NO_OPENGL
static void *cglContextForContext(QOpenGLContext *context);
static void *nsOpenGLContextForContext(QOpenGLContext* context);
#endif
- QFunctionPointer platformFunction(const QByteArray &function) const Q_DECL_OVERRIDE;
+ QFunctionPointer platformFunction(const QByteArray &function) const override;
public Q_SLOTS:
void onAppFocusWindowChanged(QWindow *window);
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
index 58cfcd3c42..955b147bfd 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
@@ -233,7 +233,7 @@ QFunctionPointer QCocoaNativeInterface::platformFunction(const QByteArray &funct
if (function == QCocoaWindowFunctions::bottomLeftClippedByNSWindowOffsetIdentifier())
return QFunctionPointer(QCocoaWindowFunctions::BottomLeftClippedByNSWindowOffset(QCocoaWindow::bottomLeftClippedByNSWindowOffsetStatic));
- return Q_NULLPTR;
+ return nullptr;
}
void QCocoaNativeInterface::addToMimeList(void *macPasteboardMime)
diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.h b/src/plugins/platforms/cocoa/qcocoansmenu.h
new file mode 100644
index 0000000000..8fb0a26f27
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoansmenu.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QCOCOANSMENU_H
+#define QCOCOANSMENU_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#import <AppKit/AppKit.h>
+
+#include <QtCore/qpointer.h>
+#include <qcocoahelpers.h>
+
+QT_FORWARD_DECLARE_CLASS(QCocoaMenu);
+typedef QPointer<QCocoaMenu> QCocoaMenuPointer;
+
+
+@interface QT_MANGLE_NAMESPACE(QCocoaNSMenuDelegate) : NSObject <NSMenuDelegate>
+
++ (instancetype)sharedMenuDelegate;
+
+- (NSMenuItem *)findItemInMenu:(NSMenu *)menu
+ forKey:(NSString *)key
+ modifiers:(NSUInteger)modifiers;
+
+- (BOOL)validateMenuItem:(NSMenuItem *)item; // NSMenuValidation
+
+@end
+
+@interface QT_MANGLE_NAMESPACE(QCocoaNSMenu) : NSMenu
+
+@property (readonly, nonatomic) QCocoaMenuPointer qpaMenu;
+
+- (instancetype)initWithQPAMenu:(QCocoaMenu *)menu;
+
+@end
+
+QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaNSMenu);
+QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaNSMenuDelegate);
+
+#endif // QCOCOANSMENU_H
diff --git a/src/plugins/platforms/cocoa/qcocoansmenu.mm b/src/plugins/platforms/cocoa/qcocoansmenu.mm
new file mode 100644
index 0000000000..6be2569dbc
--- /dev/null
+++ b/src/plugins/platforms/cocoa/qcocoansmenu.mm
@@ -0,0 +1,311 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#import "qcocoansmenu.h"
+#include "qcocoamenu.h"
+#include "qcocoamenuitem.h"
+#include "qcocoamenubar.h"
+#include "qcocoawindow.h"
+#import "qnsview.h"
+
+#include <QtCore/qmetaobject.h>
+#include <QtCore/private/qthread_p.h>
+#include <QtGui/private/qguiapplication_p.h>
+
+static NSString *qt_mac_removePrivateUnicode(NSString* string)
+{
+ int len = [string length];
+ if (len) {
+ QVarLengthArray <unichar, 10> characters(len);
+ bool changed = false;
+ for (int i = 0; i<len; i++) {
+ characters[i] = [string characterAtIndex:i];
+ // check if they belong to key codes in private unicode range
+ // currently we need to handle only the NSDeleteFunctionKey
+ if (characters[i] == NSDeleteFunctionKey) {
+ characters[i] = NSDeleteCharacter;
+ changed = true;
+ }
+ }
+ if (changed)
+ return [NSString stringWithCharacters:characters.data() length:len];
+ }
+ return string;
+}
+
+@implementation QCocoaNSMenu
+
+- (instancetype)initWithQPAMenu:(QCocoaMenu *)menu
+{
+ if ((self = [super initWithTitle:@"Untitled"])) {
+ _qpaMenu = menu;
+ self.autoenablesItems = YES;
+ self.delegate = [QCocoaNSMenuDelegate sharedMenuDelegate];
+ }
+
+ return self;
+}
+
+@end
+
+#define CHECK_MENU_CLASS(menu) Q_ASSERT([menu isMemberOfClass:[QCocoaNSMenu class]])
+
+@implementation QCocoaNSMenuDelegate
+
++ (instancetype)sharedMenuDelegate
+{
+ static QCocoaNSMenuDelegate *shared = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ shared = [[self alloc] init];
+ atexit_b(^{
+ [shared release];
+ shared = nil;
+ });
+ });
+ return shared;
+}
+
+- (NSInteger)numberOfItemsInMenu:(NSMenu *)menu
+{
+ CHECK_MENU_CLASS(menu);
+ return menu.numberOfItems;
+}
+
+- (BOOL)menu:(NSMenu *)menu updateItem:(NSMenuItem *)item atIndex:(NSInteger)index shouldCancel:(BOOL)shouldCancel
+{
+ Q_UNUSED(index);
+ CHECK_MENU_CLASS(menu);
+
+ if (shouldCancel)
+ return NO;
+
+ const auto &qpaMenu = static_cast<QCocoaNSMenu *>(menu).qpaMenu;
+ if (qpaMenu.isNull())
+ return YES;
+
+ auto *menuItem = reinterpret_cast<QCocoaMenuItem *>(item.tag);
+ if (qpaMenu->items().contains(menuItem)) {
+ if (QCocoaMenu *itemSubmenu = menuItem->menu())
+ itemSubmenu->setAttachedItem(item);
+ }
+
+ return YES;
+}
+
+- (void)menu:(NSMenu *)menu willHighlightItem:(NSMenuItem *)item
+{
+ CHECK_MENU_CLASS(menu);
+ auto *qpaItem = reinterpret_cast<QCocoaMenuItem *>(item.tag);
+ if (qpaItem)
+ qpaItem->hovered();
+}
+
+- (void)menuWillOpen:(NSMenu *)menu
+{
+ CHECK_MENU_CLASS(menu);
+ const auto &qpaMenu = static_cast<QCocoaNSMenu *>(menu).qpaMenu;
+ if (qpaMenu.isNull())
+ return;
+
+ qpaMenu->setIsOpen(true);
+ emit qpaMenu->aboutToShow();
+}
+
+- (void)menuDidClose:(NSMenu *)menu
+{
+ CHECK_MENU_CLASS(menu);
+ const auto &qpaMenu = static_cast<QCocoaNSMenu *>(menu).qpaMenu;
+ if (qpaMenu.isNull())
+ return;
+
+ qpaMenu->setIsOpen(false);
+ // wrong, but it's the best we can do
+ emit qpaMenu->aboutToHide();
+}
+
+- (void)itemFired:(NSMenuItem *)item
+{
+ auto *qpaItem = reinterpret_cast<QCocoaMenuItem *>(item.tag);
+ // Menu-holding items also get a target to play nicely
+ // with NSMenuValidation but should not trigger.
+ if (!qpaItem || qpaItem->menu())
+ return;
+
+ QScopedScopeLevelCounter scopeLevelCounter(QGuiApplicationPrivate::instance()->threadData);
+ QGuiApplicationPrivate::modifier_buttons = [QNSView convertKeyModifiers:[NSEvent modifierFlags]];
+
+ static QMetaMethod activatedSignal = QMetaMethod::fromSignal(&QCocoaMenuItem::activated);
+ activatedSignal.invoke(qpaItem, Qt::QueuedConnection);
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem*)item
+{
+ auto *qpaItem = reinterpret_cast<QCocoaMenuItem *>(item.tag);
+ // Menu-holding items are always enabled, as it's conventional in Cocoa
+ if (!qpaItem || qpaItem->menu())
+ return YES;
+
+ return qpaItem->isEnabled();
+}
+
+- (BOOL)menuHasKeyEquivalent:(NSMenu *)menu forEvent:(NSEvent *)event target:(id *)target action:(SEL *)action
+{
+ /*
+ Check if the menu actually has a keysequence defined for this key event.
+ If it does, then we will first send the key sequence to the QWidget that has focus
+ since (in Qt's eyes) it needs to a chance at the key event first (QEvent::ShortcutOverride).
+ If the widget accepts the key event, we then return YES, but set the target and action to be nil,
+ which means that the action should not be triggered, and instead dispatch the event ourselves.
+ In every other case we return NO, which means that Cocoa can do as it pleases
+ (i.e., fire the menu action).
+ */
+
+ CHECK_MENU_CLASS(menu);
+
+ // Interested only in Shift, Cmd, Ctrl & Alt Keys, so ignoring masks like, Caps lock, Num Lock ...
+ static const NSUInteger mask = NSShiftKeyMask | NSControlKeyMask | NSCommandKeyMask | NSAlternateKeyMask;
+
+ // Change the private unicode keys to the ones used in setting the "Key Equivalents"
+ NSString *characters = qt_mac_removePrivateUnicode(event.charactersIgnoringModifiers);
+ const auto modifiers = event.modifierFlags & mask;
+ NSMenuItem *keyEquivalentItem = [self findItemInMenu:menu
+ forKey:characters
+ modifiers:modifiers];
+ if (!keyEquivalentItem) {
+ // Maybe the modified character is what we're looking for after all
+ characters = qt_mac_removePrivateUnicode(event.characters);
+ keyEquivalentItem = [self findItemInMenu:menu
+ forKey:characters
+ modifiers:modifiers];
+ }
+
+ if (keyEquivalentItem) {
+ if (!keyEquivalentItem.target) {
+ // This item was modified by QCocoaMenuBar::redirectKnownMenuItemsToFirstResponder
+ // and it looks like we're running a modal session for NSOpenPanel/NSSavePanel.
+ // QCocoaFileDialogHelper is actually the only place we use this and we run NSOpenPanel modal
+ // (modal sheet, window modal, application modal).
+ // Whatever the current first responder is, let's give it a chance
+ // and do not touch the Qt's focusObject (which is different from some native view
+ // having a focus inside NSSave/OpenPanel.
+ *target = nil;
+ *action = keyEquivalentItem.action;
+ return YES;
+ }
+
+ QObject *object = qApp->focusObject();
+ if (object) {
+ QChar ch;
+ int keyCode;
+ ulong nativeModifiers = [event modifierFlags];
+ Qt::KeyboardModifiers modifiers = [QNSView convertKeyModifiers: nativeModifiers];
+ NSString *charactersIgnoringModifiers = [event charactersIgnoringModifiers];
+ NSString *characters = [event characters];
+
+ if ([charactersIgnoringModifiers length] > 0) { // convert the first character into a key code
+ if ((modifiers & Qt::ControlModifier) && ([characters length] != 0)) {
+ ch = QChar([characters characterAtIndex:0]);
+ } else {
+ ch = QChar([charactersIgnoringModifiers characterAtIndex:0]);
+ }
+ keyCode = qt_mac_cocoaKey2QtKey(ch);
+ } else {
+ // might be a dead key
+ ch = QChar::ReplacementCharacter;
+ keyCode = Qt::Key_unknown;
+ }
+
+ QKeyEvent accel_ev(QEvent::ShortcutOverride, (keyCode & (~Qt::KeyboardModifierMask)),
+ Qt::KeyboardModifiers(modifiers & Qt::KeyboardModifierMask));
+ accel_ev.ignore();
+ QCoreApplication::sendEvent(object, &accel_ev);
+ if (accel_ev.isAccepted()) {
+ [[NSApp keyWindow] sendEvent: event];
+ *target = nil;
+ *action = nil;
+ return YES;
+ }
+ }
+ }
+
+ return NO;
+}
+
+- (NSMenuItem *)findItemInMenu:(NSMenu *)menu
+ forKey:(NSString *)key
+ modifiers:(NSUInteger)modifiers
+{
+ // Find an item in 'menu' that has the same key equivalent as specified by
+ // 'key' and 'modifiers'. We ignore disabled, hidden and separator items.
+ // In a similar fashion, we don't need to recurse into submenus because their
+ // delegate will have [menuHasKeyEquivalent:...] invoked at some point.
+
+ for (NSMenuItem *item in menu.itemArray) {
+ if (!item.enabled || item.hidden || item.separatorItem)
+ continue;
+
+ if (item.hasSubmenu)
+ continue;
+
+ NSString *menuKey = item.keyEquivalent;
+ if (menuKey && NSOrderedSame == [menuKey compare:key]
+ && modifiers == item.keyEquivalentModifierMask)
+ return item;
+ }
+
+ return nil;
+}
+
+// Cocoa will query the menu item's target for the worksWhenModal selector.
+// So we need to implement this to allow the items to be handled correctly
+// when a modal dialog is visible.
+- (BOOL)worksWhenModal
+{
+ if (!QGuiApplication::modalWindow())
+ return YES;
+ const auto &qpaMenu = static_cast<QCocoaNSMenu *>(self).qpaMenu;
+ if (auto *mb = qobject_cast<QCocoaMenuBar *>(qpaMenu->menuParent()))
+ return QGuiApplication::modalWindow()->handle() == mb->cocoaWindow() ? YES : NO;
+ return YES;
+}
+
+@end
+
+#undef CHECK_MENU_CLASS
diff --git a/src/plugins/platforms/cocoa/qcocoaprintdevice.h b/src/plugins/platforms/cocoa/qcocoaprintdevice.h
index c726cca4e5..20b27f3286 100644
--- a/src/plugins/platforms/cocoa/qcocoaprintdevice.h
+++ b/src/plugins/platforms/cocoa/qcocoaprintdevice.h
@@ -68,37 +68,37 @@ public:
explicit QCocoaPrintDevice(const QString &id);
virtual ~QCocoaPrintDevice();
- bool isValid() const Q_DECL_OVERRIDE;
- bool isDefault() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
+ bool isDefault() const override;
- QPrint::DeviceState state() const Q_DECL_OVERRIDE;
+ QPrint::DeviceState state() const override;
- QPageSize defaultPageSize() const Q_DECL_OVERRIDE;
+ QPageSize defaultPageSize() const override;
QMarginsF printableMargins(const QPageSize &pageSize, QPageLayout::Orientation orientation,
- int resolution) const Q_DECL_OVERRIDE;
+ int resolution) const override;
- int defaultResolution() const Q_DECL_OVERRIDE;
+ int defaultResolution() const override;
- QPrint::InputSlot defaultInputSlot() const Q_DECL_OVERRIDE;
+ QPrint::InputSlot defaultInputSlot() const override;
- QPrint::OutputBin defaultOutputBin() const Q_DECL_OVERRIDE;
+ QPrint::OutputBin defaultOutputBin() const override;
- QPrint::DuplexMode defaultDuplexMode() const Q_DECL_OVERRIDE;
+ QPrint::DuplexMode defaultDuplexMode() const override;
- QPrint::ColorMode defaultColorMode() const Q_DECL_OVERRIDE;
+ QPrint::ColorMode defaultColorMode() const override;
PMPrinter macPrinter() const;
PMPaper macPaper(const QPageSize &pageSize) const;
protected:
- void loadPageSizes() const Q_DECL_OVERRIDE;
- void loadResolutions() const Q_DECL_OVERRIDE;
- void loadInputSlots() const Q_DECL_OVERRIDE;
- void loadOutputBins() const Q_DECL_OVERRIDE;
- void loadDuplexModes() const Q_DECL_OVERRIDE;
- void loadColorModes() const Q_DECL_OVERRIDE;
- void loadMimeTypes() const Q_DECL_OVERRIDE;
+ void loadPageSizes() const override;
+ void loadResolutions() const override;
+ void loadInputSlots() const override;
+ void loadOutputBins() const override;
+ void loadDuplexModes() const override;
+ void loadColorModes() const override;
+ void loadMimeTypes() const override;
private:
QPageSize createPageSize(const PMPaper &paper) const;
diff --git a/src/plugins/platforms/cocoa/qcocoaprintdevice.mm b/src/plugins/platforms/cocoa/qcocoaprintdevice.mm
index 39fcf285ed..bfe6cd09b6 100644
--- a/src/plugins/platforms/cocoa/qcocoaprintdevice.mm
+++ b/src/plugins/platforms/cocoa/qcocoaprintdevice.mm
@@ -46,6 +46,15 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_PRINTER
+// The CUPS PPD APIs were deprecated in CUPS 1.6/macOS 10.8, but
+// as long as we're supporting RHEL 6, which still ships CUPS 1.4
+// we're not going to rewrite this, as we want to share the code
+// between macOS and Linux for the CUPS-bits. See discussion in
+// https://bugreports.qt.io/browse/QTBUG-56545
+#pragma message "Disabling CUPS PPD deprecation warnings. This should be fixed once we drop support for RHEL6 (QTBUG-56545)"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+
static QPrint::DuplexMode macToDuplexMode(const PMDuplexMode &mode)
{
if (mode == kPMDuplexTumble)
@@ -474,6 +483,8 @@ PMPaper QCocoaPrintDevice::macPaper(const QPageSize &pageSize) const
return paper;
}
+#pragma clang diagnostic pop
+
#endif // QT_NO_PRINTER
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.h b/src/plugins/platforms/cocoa/qcocoaprintersupport.h
index a07bf0ec1b..40a638207a 100644
--- a/src/plugins/platforms/cocoa/qcocoaprintersupport.h
+++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.h
@@ -53,12 +53,12 @@ public:
QCocoaPrinterSupport();
~QCocoaPrinterSupport();
- QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) Q_DECL_OVERRIDE;
- QPaintEngine *createPaintEngine(QPrintEngine *, QPrinter::PrinterMode printerMode) Q_DECL_OVERRIDE;
+ QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) override;
+ QPaintEngine *createPaintEngine(QPrintEngine *, QPrinter::PrinterMode printerMode) override;
- QPrintDevice createPrintDevice(const QString &id) Q_DECL_OVERRIDE;
- QStringList availablePrintDeviceIds() const Q_DECL_OVERRIDE;
- QString defaultPrintDeviceId() const Q_DECL_OVERRIDE;
+ QPrintDevice createPrintDevice(const QString &id) override;
+ QStringList availablePrintDeviceIds() const override;
+ QString defaultPrintDeviceId() const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoascreen.h b/src/plugins/platforms/cocoa/qcocoascreen.h
index 937002f493..3d59c3de79 100644
--- a/src/plugins/platforms/cocoa/qcocoascreen.h
+++ b/src/plugins/platforms/cocoa/qcocoascreen.h
@@ -56,20 +56,20 @@ public:
// ----------------------------------------------------
// Virtual methods overridden from QPlatformScreen
- QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
- QRect geometry() const Q_DECL_OVERRIDE { return m_geometry; }
- QRect availableGeometry() const Q_DECL_OVERRIDE { return m_availableGeometry; }
- int depth() const Q_DECL_OVERRIDE { return m_depth; }
- QImage::Format format() const Q_DECL_OVERRIDE { return m_format; }
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
- QSizeF physicalSize() const Q_DECL_OVERRIDE { return m_physicalSize; }
- QDpi logicalDpi() const Q_DECL_OVERRIDE { return m_logicalDpi; }
- qreal refreshRate() const Q_DECL_OVERRIDE { return m_refreshRate; }
- QString name() const Q_DECL_OVERRIDE { return m_name; }
- QPlatformCursor *cursor() const Q_DECL_OVERRIDE { return m_cursor; }
- QWindow *topLevelAt(const QPoint &point) const Q_DECL_OVERRIDE;
- QList<QPlatformScreen *> virtualSiblings() const Q_DECL_OVERRIDE { return m_siblings; }
- QPlatformScreen::SubpixelAntialiasingType subpixelAntialiasingTypeHint() const Q_DECL_OVERRIDE;
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const override;
+ QRect geometry() const override { return m_geometry; }
+ QRect availableGeometry() const override { return m_availableGeometry; }
+ int depth() const override { return m_depth; }
+ QImage::Format format() const override { return m_format; }
+ qreal devicePixelRatio() const override;
+ QSizeF physicalSize() const override { return m_physicalSize; }
+ QDpi logicalDpi() const override { return m_logicalDpi; }
+ qreal refreshRate() const override { return m_refreshRate; }
+ QString name() const override { return m_name; }
+ QPlatformCursor *cursor() const override { return m_cursor; }
+ QWindow *topLevelAt(const QPoint &point) const override;
+ QList<QPlatformScreen *> virtualSiblings() const override { return m_siblings; }
+ QPlatformScreen::SubpixelAntialiasingType subpixelAntialiasingTypeHint() const override;
// ----------------------------------------------------
// Additional methods
@@ -77,16 +77,12 @@ public:
NSScreen *nativeScreen() const;
void updateGeometry();
- QPointF mapToNative(const QPointF &pos) const { return flipCoordinate(pos); }
- QRectF mapToNative(const QRectF &rect) const { return flipCoordinate(rect); }
- QPointF mapFromNative(const QPointF &pos) const { return flipCoordinate(pos); }
- QRectF mapFromNative(const QRectF &rect) const { return flipCoordinate(rect); }
-
static QCocoaScreen *primaryScreen();
-private:
- QPointF flipCoordinate(const QPointF &pos) const;
- QRectF flipCoordinate(const QRectF &rect) const;
+ static CGPoint mapToNative(const QPointF &pos, QCocoaScreen *screen = QCocoaScreen::primaryScreen());
+ static CGRect mapToNative(const QRectF &rect, QCocoaScreen *screen = QCocoaScreen::primaryScreen());
+ static QPointF mapFromNative(CGPoint pos, QCocoaScreen *screen = QCocoaScreen::primaryScreen());
+ static QRectF mapFromNative(CGRect rect, QCocoaScreen *screen = QCocoaScreen::primaryScreen());
public:
int m_screenIndex;
diff --git a/src/plugins/platforms/cocoa/qcocoascreen.mm b/src/plugins/platforms/cocoa/qcocoascreen.mm
index f523873bde..ed1b19cd53 100644
--- a/src/plugins/platforms/cocoa/qcocoascreen.mm
+++ b/src/plugins/platforms/cocoa/qcocoascreen.mm
@@ -75,32 +75,36 @@ NSScreen *QCocoaScreen::nativeScreen() const
return [screens objectAtIndex:m_screenIndex];
}
-/*!
- Flips the Y coordinate of the point between quadrant I and IV.
+static QString displayName(CGDirectDisplayID displayID)
+{
+ QIOType<io_iterator_t> iterator;
+ if (IOServiceGetMatchingServices(kIOMasterPortDefault,
+ IOServiceMatching("IODisplayConnect"), &iterator))
+ return QString();
+
+ QIOType<io_service_t> display;
+ while ((display = IOIteratorNext(iterator)) != 0)
+ {
+ NSDictionary *info = [(__bridge NSDictionary*)IODisplayCreateInfoDictionary(
+ display, kIODisplayOnlyPreferredName) autorelease];
+
+ if ([[info objectForKey:@kDisplayVendorID] longValue] != CGDisplayVendorNumber(displayID))
+ continue;
- The native coordinate system on macOS uses quadrant I, with origin
- in bottom left, and Qt uses quadrant IV, with origin in top left.
+ if ([[info objectForKey:@kDisplayProductID] longValue] != CGDisplayModelNumber(displayID))
+ continue;
- By flippig the Y coordinate, we can map the position between the
- two coordinate systems.
-*/
-QPointF QCocoaScreen::flipCoordinate(const QPointF &pos) const
-{
- return QPointF(pos.x(), m_geometry.height() - pos.y());
-}
+ if ([[info objectForKey:@kDisplaySerialNumber] longValue] != CGDisplaySerialNumber(displayID))
+ continue;
-/*!
- Flips the Y coordinate of the rectangle between quadrant I and IV.
+ NSDictionary *localizedNames = [info objectForKey:@kDisplayProductName];
+ if (![localizedNames count])
+ break; // Correct screen, but no name in dictionary
- The native coordinate system on macOS uses quadrant I, with origin
- in bottom left, and Qt uses quadrant IV, with origin in top left.
+ return QString::fromNSString([localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]]);
+ }
- By flippig the Y coordinate, we can map the rectangle between the
- two coordinate systems.
-*/
-QRectF QCocoaScreen::flipCoordinate(const QRectF &rect) const
-{
- return QRectF(flipCoordinate(rect.topLeft() + QPoint(0, rect.height())), rect.size());
+ return QString();
}
void QCocoaScreen::updateGeometry()
@@ -109,20 +113,10 @@ void QCocoaScreen::updateGeometry()
if (!nsScreen)
return;
- // At this point the geometry is in native coordinates, but the size
- // is correct, which we take advantage of next when we map the native
- // coordinates to the Qt coordinate system.
- m_geometry = QRectF::fromCGRect(NSRectToCGRect(nsScreen.frame)).toRect();
- m_availableGeometry = QRectF::fromCGRect(NSRectToCGRect(nsScreen.visibleFrame)).toRect();
-
- // The reference screen for the geometry is always the primary screen, but since
- // we may be in the process of creating and registering the primary screen, we
- // must special-case that and assign it direcly.
- QCocoaScreen *primaryScreen = (nsScreen == [[NSScreen screens] firstObject]) ?
- this : QCocoaScreen::primaryScreen();
-
- m_geometry = primaryScreen->mapFromNative(m_geometry).toRect();
- m_availableGeometry = primaryScreen->mapFromNative(m_availableGeometry).toRect();
+ // The reference screen for the geometry is always the primary screen
+ QRectF primaryScreenGeometry = QRectF::fromCGRect([[NSScreen screens] firstObject].frame);
+ m_geometry = qt_mac_flip(QRectF::fromCGRect(nsScreen.frame), primaryScreenGeometry).toRect();
+ m_availableGeometry = qt_mac_flip(QRectF::fromCGRect(nsScreen.visibleFrame), primaryScreenGeometry).toRect();
m_format = QImage::Format_RGB32;
m_depth = NSBitsPerPixelFromDepth([nsScreen depth]);
@@ -139,12 +133,7 @@ void QCocoaScreen::updateGeometry()
if (refresh > 0)
m_refreshRate = refresh;
- // Get m_name (brand/model of the monitor)
- NSDictionary *deviceInfo = (NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(dpy), kIODisplayOnlyPreferredName);
- NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]];
- if ([localizedNames count] > 0)
- m_name = QString::fromUtf8([[localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]] UTF8String]);
- [deviceInfo release];
+ m_name = displayName(dpy);
QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), availableGeometry());
QWindowSystemInterface::handleScreenLogicalDotsPerInchChange(screen(), m_logicalDpi.first, m_logicalDpi.second);
@@ -170,7 +159,7 @@ QPlatformScreen::SubpixelAntialiasingType QCocoaScreen::subpixelAntialiasingType
QWindow *QCocoaScreen::topLevelAt(const QPoint &point) const
{
- NSPoint screenPoint = qt_mac_flipPoint(point);
+ NSPoint screenPoint = mapToNative(point);
// Search (hit test) for the top-level window. [NSWidow windowNumberAtPoint:
// belowWindowWithWindowNumber] may return windows that are not interesting
@@ -275,6 +264,30 @@ QCocoaScreen *QCocoaScreen::primaryScreen()
return static_cast<QCocoaScreen *>(QGuiApplication::primaryScreen()->handle());
}
+CGPoint QCocoaScreen::mapToNative(const QPointF &pos, QCocoaScreen *screen)
+{
+ Q_ASSERT(screen);
+ return qt_mac_flip(pos, screen->geometry()).toCGPoint();
+}
+
+CGRect QCocoaScreen::mapToNative(const QRectF &rect, QCocoaScreen *screen)
+{
+ Q_ASSERT(screen);
+ return qt_mac_flip(rect, screen->geometry()).toCGRect();
+}
+
+QPointF QCocoaScreen::mapFromNative(CGPoint pos, QCocoaScreen *screen)
+{
+ Q_ASSERT(screen);
+ return qt_mac_flip(QPointF::fromCGPoint(pos), screen->geometry());
+}
+
+QRectF QCocoaScreen::mapFromNative(CGRect rect, QCocoaScreen *screen)
+{
+ Q_ASSERT(screen);
+ return qt_mac_flip(QRectF::fromCGRect(rect), screen->geometry());
+}
+
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug debug, const QCocoaScreen *screen)
{
diff --git a/src/plugins/platforms/cocoa/qcocoaservices.h b/src/plugins/platforms/cocoa/qcocoaservices.h
index c2ceede0f0..62a8891f96 100644
--- a/src/plugins/platforms/cocoa/qcocoaservices.h
+++ b/src/plugins/platforms/cocoa/qcocoaservices.h
@@ -47,8 +47,8 @@ QT_BEGIN_NAMESPACE
class QCocoaServices : public QPlatformServices
{
public:
- bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
- bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
+ bool openUrl(const QUrl &url) override;
+ bool openDocument(const QUrl &url) override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
index d542a3cb8f..2f1a1e42a9 100644
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
@@ -57,17 +57,17 @@ class Q_GUI_EXPORT QCocoaSystemTrayIcon : public QPlatformSystemTrayIcon
public:
QCocoaSystemTrayIcon() : m_sys(0) {}
- void init() Q_DECL_OVERRIDE;
- void cleanup() Q_DECL_OVERRIDE;
- void updateIcon(const QIcon &icon) Q_DECL_OVERRIDE;
- void updateToolTip(const QString &toolTip) Q_DECL_OVERRIDE;
- void updateMenu(QPlatformMenu *menu) Q_DECL_OVERRIDE;
- QRect geometry() const Q_DECL_OVERRIDE;
+ void init() override;
+ void cleanup() override;
+ void updateIcon(const QIcon &icon) override;
+ void updateToolTip(const QString &toolTip) override;
+ void updateMenu(QPlatformMenu *menu) override;
+ QRect geometry() const override;
void showMessage(const QString &title, const QString &msg,
- const QIcon& icon, MessageIcon iconType, int secs) Q_DECL_OVERRIDE;
+ const QIcon& icon, MessageIcon iconType, int secs) override;
- bool isSystemTrayAvailable() const Q_DECL_OVERRIDE;
- bool supportsMessages() const Q_DECL_OVERRIDE;
+ bool isSystemTrayAvailable() const override;
+ bool supportsMessages() const override;
private:
QSystemTrayIconSys *m_sys;
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.h b/src/plugins/platforms/cocoa/qcocoatheme.h
index 27c071a8cd..69eaf8db56 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.h
+++ b/src/plugins/platforms/cocoa/qcocoatheme.h
@@ -56,25 +56,25 @@ public:
void reset();
- QPlatformMenuItem* createPlatformMenuItem() const Q_DECL_OVERRIDE;
- QPlatformMenu* createPlatformMenu() const Q_DECL_OVERRIDE;
- QPlatformMenuBar* createPlatformMenuBar() const Q_DECL_OVERRIDE;
+ QPlatformMenuItem* createPlatformMenuItem() const override;
+ QPlatformMenu* createPlatformMenu() const override;
+ QPlatformMenuBar* createPlatformMenuBar() const override;
#ifndef QT_NO_SYSTEMTRAYICON
- QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const Q_DECL_OVERRIDE;
+ QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
#endif
- bool usePlatformNativeDialog(DialogType dialogType) const Q_DECL_OVERRIDE;
- QPlatformDialogHelper *createPlatformDialogHelper(DialogType dialogType) const Q_DECL_OVERRIDE;
+ bool usePlatformNativeDialog(DialogType dialogType) const override;
+ QPlatformDialogHelper *createPlatformDialogHelper(DialogType dialogType) const override;
- const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE;
- const QFont *font(Font type = SystemFont) const Q_DECL_OVERRIDE;
- QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const Q_DECL_OVERRIDE;
+ const QPalette *palette(Palette type = SystemPalette) const override;
+ const QFont *font(Font type = SystemFont) const override;
+ QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const override;
QIcon fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions options = 0) const override;
- QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
- QString standardButtonText(int button) const Q_DECL_OVERRIDE;
- QKeySequence standardButtonShortcut(int button) const Q_DECL_OVERRIDE;
+ QVariant themeHint(ThemeHint hint) const override;
+ QString standardButtonText(int button) const override;
+ QKeySequence standardButtonShortcut(int button) const override;
static const char *name;
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index 5239864ad8..93f0400916 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -98,7 +98,7 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QCocoaThemeNotificationReceiver);
{
Q_UNUSED(notification);
mPrivate->reset();
- QWindowSystemInterface::handleThemeChange(Q_NULLPTR);
+ QWindowSystemInterface::handleThemeChange(nullptr);
}
@end
@@ -127,7 +127,7 @@ QCocoaTheme::~QCocoaTheme()
void QCocoaTheme::reset()
{
delete m_systemPalette;
- m_systemPalette = Q_NULLPTR;
+ m_systemPalette = nullptr;
qDeleteAll(m_palettes);
m_palettes.clear();
}
@@ -275,7 +275,7 @@ QPixmap QCocoaTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const
}
if (iconType != 0) {
QPixmap pixmap;
- IconRef icon = Q_NULLPTR;
+ IconRef icon = nullptr;
GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon);
if (icon) {
@@ -347,6 +347,8 @@ QVariant QCocoaTheme::themeHint(ThemeHint hint) const
return QVariant(int(HoverEffect));
case QPlatformTheme::SpellCheckUnderlineStyle:
return QVariant(int(QTextCharFormat::DotLine));
+ case QPlatformTheme::UseFullScreenForPopupMenu:
+ return QVariant(bool([[NSApplication sharedApplication] presentationOptions] & NSApplicationPresentationFullScreen));
default:
break;
}
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h
index 6fbe29f683..fb91c53a7a 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.h
+++ b/src/plugins/platforms/cocoa/qcocoawindow.h
@@ -97,37 +97,37 @@ public:
void initialize() override;
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- QRect geometry() const Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &rect) override;
+ QRect geometry() const override;
void setCocoaGeometry(const QRect &rect);
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
- void setWindowState(Qt::WindowStates state) Q_DECL_OVERRIDE;
- void setWindowTitle(const QString &title) Q_DECL_OVERRIDE;
- void setWindowFilePath(const QString &filePath) Q_DECL_OVERRIDE;
- void setWindowIcon(const QIcon &icon) Q_DECL_OVERRIDE;
- void setAlertState(bool enabled) Q_DECL_OVERRIDE;
- bool isAlertState() const Q_DECL_OVERRIDE;
- void raise() Q_DECL_OVERRIDE;
- void lower() Q_DECL_OVERRIDE;
- bool isExposed() const Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
+ void setWindowFlags(Qt::WindowFlags flags) override;
+ void setWindowState(Qt::WindowStates state) override;
+ void setWindowTitle(const QString &title) override;
+ void setWindowFilePath(const QString &filePath) override;
+ void setWindowIcon(const QIcon &icon) override;
+ void setAlertState(bool enabled) override;
+ bool isAlertState() const override;
+ void raise() override;
+ void lower() override;
+ bool isExposed() const override;
bool isOpaque() const;
- void propagateSizeHints() Q_DECL_OVERRIDE;
- void setOpacity(qreal level) Q_DECL_OVERRIDE;
- void setMask(const QRegion &region) Q_DECL_OVERRIDE;
- bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE;
- bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
- QMargins frameMargins() const Q_DECL_OVERRIDE;
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ void propagateSizeHints() override;
+ void setOpacity(qreal level) override;
+ void setMask(const QRegion &region) override;
+ bool setKeyboardGrabEnabled(bool grab) override;
+ bool setMouseGrabEnabled(bool grab) override;
+ QMargins frameMargins() const override;
+ QSurfaceFormat format() const override;
- bool isForeignWindow() const Q_DECL_OVERRIDE;
+ bool isForeignWindow() const override;
void requestUpdate() override;
- void requestActivateWindow() Q_DECL_OVERRIDE;
+ void requestActivateWindow() override;
- WId winId() const Q_DECL_OVERRIDE;
- void setParent(const QPlatformWindow *window) Q_DECL_OVERRIDE;
+ WId winId() const override;
+ void setParent(const QPlatformWindow *window) override;
NSView *view() const;
NSWindow *nativeWindow() const;
@@ -167,10 +167,10 @@ public:
QCocoaGLContext *currentContext() const;
#endif
- bool setWindowModified(bool modified) Q_DECL_OVERRIDE;
+ bool setWindowModified(bool modified) override;
- void setFrameStrutEventsEnabled(bool enabled) Q_DECL_OVERRIDE;
- bool frameStrutEventsEnabled() const Q_DECL_OVERRIDE
+ void setFrameStrutEventsEnabled(bool enabled) override;
+ bool frameStrutEventsEnabled() const override
{ return m_frameStrutEventsEnabled; }
void setMenubar(QCocoaMenuBar *mb);
@@ -187,7 +187,7 @@ public:
void applyContentBorderThickness(NSWindow *window = nullptr);
void updateNSToolbar();
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ qreal devicePixelRatio() const override;
QWindow *childWindowAt(QPoint windowPoint);
bool shouldRefuseKeyWindowAndFirstResponder();
@@ -209,8 +209,6 @@ protected:
void recreateWindowIfNeeded();
QCocoaNSWindow *createNSWindow(bool shouldBePanel);
- QRect nativeWindowGeometry() const;
-
Qt::WindowState windowState() const;
void applyWindowState(Qt::WindowStates newState);
void toggleMaximized();
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index af2931c747..ca580e7d17 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -287,7 +287,7 @@ QRect QCocoaWindow::geometry() const
NSPoint windowPoint = [m_view convertPoint:NSMakePoint(0, 0) toView:nil];
NSRect screenRect = [[m_view window] convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 1, 1)];
NSPoint screenPoint = screenRect.origin;
- QPoint position = qt_mac_flipPoint(screenPoint).toPoint();
+ QPoint position = QCocoaScreen::mapFromNative(screenPoint).toPoint();
QSize size = QRectF::fromCGRect(NSRectToCGRect([m_view bounds])).toRect().size();
return QRect(position, size);
}
@@ -310,7 +310,7 @@ void QCocoaWindow::setCocoaGeometry(const QRect &rect)
}
if (isContentView()) {
- NSRect bounds = qt_mac_flipRect(rect);
+ NSRect bounds = QCocoaScreen::mapToNative(rect);
[m_view.window setFrame:[m_view.window frameRectForContentRect:bounds] display:YES animate:NO];
} else {
[m_view setFrame:NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height())];
@@ -403,7 +403,7 @@ void QCocoaWindow::setVisible(bool visible)
if (!(parentCocoaWindow && window()->transientParent()->isActive()) && window()->type() == Qt::Popup) {
removeMonitor();
monitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseDownMask|NSRightMouseDownMask|NSOtherMouseDownMask|NSMouseMovedMask handler:^(NSEvent *e) {
- QPointF localPoint = qt_mac_flipPoint([NSEvent mouseLocation]);
+ QPointF localPoint = QCocoaScreen::mapFromNative([NSEvent mouseLocation]);
QWindowSystemInterface::handleMouseEvent(window(), window()->mapFromGlobal(localPoint.toPoint()), localPoint,
cocoaButton2QtButton([e buttonNumber]));
}];
@@ -1117,7 +1117,7 @@ void QCocoaWindow::handleGeometryChange()
CGRect contentRect = [m_view.window contentRectForFrameRect:m_view.window.frame];
// The result above is in native screen coordinates, so remap to the Qt coordinate system
- newGeometry = QCocoaScreen::primaryScreen()->mapFromNative(QRectF::fromCGRect(contentRect)).toRect();
+ newGeometry = QCocoaScreen::mapFromNative(contentRect).toRect();
} else {
// QNSView has isFlipped set, so no need to remap the geometry
newGeometry = QRectF::fromCGRect(m_view.frame).toRect();
@@ -1157,7 +1157,7 @@ void QCocoaWindow::handleExposeEvent(const QRegion &region)
m_exposedRect = QRect();
}
- qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::handleExposeEvent" << window() << region << "isExposed" << isExposed();
+ qCDebug(lcQpaCocoaDrawing) << "QCocoaWindow::handleExposeEvent" << window() << region << "isExposed" << isExposed();
QWindowSystemInterface::handleExposeEvent<QWindowSystemInterface::SynchronousDelivery>(window(), region);
}
@@ -1330,7 +1330,7 @@ void QCocoaWindow::recreateWindowIfNeeded()
void QCocoaWindow::requestUpdate()
{
- qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::requestUpdate" << window();
+ qCDebug(lcQpaCocoaDrawing) << "QCocoaWindow::requestUpdate" << window();
[m_view requestUpdate];
}
@@ -1362,7 +1362,7 @@ QCocoaNSWindow *QCocoaWindow::createNSWindow(bool shouldBePanel)
rect.translate(-targetScreen->geometry().topLeft());
QCocoaScreen *cocoaScreen = static_cast<QCocoaScreen *>(targetScreen->handle());
- NSRect frame = NSRectFromCGRect(cocoaScreen->mapToNative(rect).toCGRect());
+ NSRect frame = QCocoaScreen::mapToNative(rect, cocoaScreen);
// Note: The macOS window manager has a bug, where if a screen is rotated, it will not allow
// a window to be created within the area of the screen that has a Y coordinate (I quadrant)
@@ -1458,19 +1458,6 @@ void QCocoaWindow::removeMonitor()
monitor = nil;
}
-// Returns the current global screen geometry for the nswindow associated with this window.
-QRect QCocoaWindow::nativeWindowGeometry() const
-{
- if (!isContentView())
- return geometry();
-
- NSRect rect = m_view.window.frame;
- QPlatformScreen *onScreen = QPlatformScreen::platformScreenForWindow(window());
- int flippedY = onScreen->geometry().height() - rect.origin.y - rect.size.height; // account for nswindow inverted y.
- QRect qRect = QRect(rect.origin.x, flippedY, rect.size.width, rect.size.height);
- return qRect;
-}
-
/*!
Applies the given state to the NSWindow, going in/out of minimize/zoomed/fullscreen
diff --git a/src/plugins/platforms/cocoa/qmultitouch_mac.mm b/src/plugins/platforms/cocoa/qmultitouch_mac.mm
index 79f8af7783..9eca4d2d43 100644
--- a/src/plugins/platforms/cocoa/qmultitouch_mac.mm
+++ b/src/plugins/platforms/cocoa/qmultitouch_mac.mm
@@ -39,6 +39,7 @@
#include "qmultitouch_mac_p.h"
#include "qcocoahelpers.h"
+#include "qcocoascreen.h"
#include <private/qtouchdevice_p.h>
QT_BEGIN_NAMESPACE
@@ -83,7 +84,7 @@ void QCocoaTouch::updateTouchData(NSTouch *nstouch, NSTouchPhase phase)
if (_touchPoint.id == 0 && phase == NSTouchPhaseBegan) {
_trackpadReferencePos = qnpos;
- _screenReferencePos = qt_mac_flipPoint([NSEvent mouseLocation]);
+ _screenReferencePos = QCocoaScreen::mapFromNative([NSEvent mouseLocation]);
}
QPointF screenPos = _screenReferencePos;
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 3e3e9aac1a..ec1d126ab9 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -42,6 +42,7 @@
#include "qnsview.h"
#include "qcocoawindow.h"
#include "qcocoahelpers.h"
+#include "qcocoascreen.h"
#include "qmultitouch_mac_p.h"
#include "qcocoadrag.h"
#include "qcocoainputcontext.h"
@@ -333,7 +334,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
for (int i = 0; i < numDirtyRects; ++i)
exposedRegion += QRectF::fromCGRect(dirtyRects[i]).toRect();
- qCDebug(lcQpaCocoaWindow) << "[QNSView drawRect:]" << m_platformWindow->window() << exposedRegion;
+ qCDebug(lcQpaCocoaDrawing) << "[QNSView drawRect:]" << m_platformWindow->window() << exposedRegion;
[self updateRegion:exposedRegion];
}
@@ -362,7 +363,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
// but AppKit will reset the needsDisplay state of the view after completing
// the current display cycle, so we need to defer the request to redisplay.
// FIXME: Perhaps this should be a trigger to enable CADisplayLink?
- qCDebug(lcQpaCocoaWindow) << "Pending update request, triggering re-display";
+ qCDebug(lcQpaCocoaDrawing) << "[QNSView drawRect:] issuing deferred setNeedsDisplay due to pending update request";
dispatch_async(dispatch_get_main_queue (), ^{ [self requestUpdate]; });
}
}
@@ -377,7 +378,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
if (!m_platformWindow)
return;
- qCDebug(lcQpaCocoaWindow) << "[QNSView updateLayer]" << m_platformWindow->window();
+ qCDebug(lcQpaCocoaDrawing) << "[QNSView updateLayer]" << m_platformWindow->window();
// FIXME: Find out if there's a way to resolve the dirty rect like in drawRect:
[self updateRegion:QRectF::fromCGRect(self.bounds).toRect()];
@@ -472,8 +473,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
nsWindowPoint = windowRect.origin; // NSWindow coordinates
NSPoint nsViewPoint = [self convertPoint: nsWindowPoint fromView: nil]; // NSView/QWindow coordinates
*qtWindowPoint = QPointF(nsViewPoint.x, nsViewPoint.y); // NSView/QWindow coordinates
-
- *qtScreenPoint = QPointF(mouseLocation.x, qt_mac_flipYCoordinate(mouseLocation.y)); // Qt screen coordinates
+ *qtScreenPoint = QCocoaScreen::mapFromNative(mouseLocation);
}
- (void)resetMouseButtons
@@ -584,7 +584,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil];
QPoint qtWindowPoint = QPoint(nsViewPoint.x, titleBarHeight + nsViewPoint.y);
NSPoint screenPoint = [window convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 0, 0)].origin;
- QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y));
+ QPoint qtScreenPoint = QCocoaScreen::mapFromNative(screenPoint).toPoint();
ulong timestamp = [theEvent timestamp] * 1000;
QWindowSystemInterface::handleFrameStrutMouseEvent(m_platformWindow->window(), timestamp, qtWindowPoint, qtScreenPoint, m_frameStrutButtons);
@@ -676,7 +676,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
if (!popups->isEmpty()) {
// Check if the click is outside all popups.
bool inside = false;
- QPointF qtScreenPoint = qt_mac_flipPoint([self screenMousePoint:theEvent]);
+ QPointF qtScreenPoint = QCocoaScreen::mapFromNative([self screenMousePoint:theEvent]);
for (QList<QCocoaWindow *>::const_iterator it = popups->begin(); it != popups->end(); ++it) {
if ((*it)->geometry().contains(qtScreenPoint.toPoint())) {
inside = true;
@@ -719,7 +719,8 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
if ([self hasMarkedText]) {
[[NSTextInputContext currentInputContext] handleEvent:theEvent];
} else {
- if (!m_dontOverrideCtrlLMB && [QNSView convertKeyModifiers:[theEvent modifierFlags]] & Qt::MetaModifier) {
+ auto ctrlOrMetaModifier = qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta) ? Qt::ControlModifier : Qt::MetaModifier;
+ if (!m_dontOverrideCtrlLMB && [QNSView convertKeyModifiers:[theEvent modifierFlags]] & ctrlOrMetaModifier) {
m_buttons |= Qt::RightButton;
m_sendUpAsRightButton = true;
} else {
@@ -816,7 +817,7 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
- (void)cursorUpdate:(NSEvent *)theEvent
{
- qCDebug(lcQpaCocoaWindow) << "[QNSView cursorUpdate:]" << self.cursor;
+ qCDebug(lcQpaCocoaMouse) << "[QNSView cursorUpdate:]" << self.cursor;
// Note: We do not get this callback when moving from a subview that
// uses the legacy cursorRect API, so the cursor is reset to the arrow
@@ -1344,15 +1345,16 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
+ (Qt::KeyboardModifiers) convertKeyModifiers : (ulong)modifierFlags
{
+ const bool dontSwapCtrlAndMeta = qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta);
Qt::KeyboardModifiers qtMods =Qt::NoModifier;
if (modifierFlags & NSShiftKeyMask)
qtMods |= Qt::ShiftModifier;
if (modifierFlags & NSControlKeyMask)
- qtMods |= Qt::MetaModifier;
+ qtMods |= dontSwapCtrlAndMeta ? Qt::ControlModifier : Qt::MetaModifier;
if (modifierFlags & NSAlternateKeyMask)
qtMods |= Qt::AltModifier;
if (modifierFlags & NSCommandKeyMask)
- qtMods |= Qt::ControlModifier;
+ qtMods |= dontSwapCtrlAndMeta ? Qt::MetaModifier : Qt::ControlModifier;
if (modifierFlags & NSNumericPadKeyMask)
qtMods |= Qt::KeypadModifier;
return qtMods;
@@ -1385,7 +1387,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
// ALT+E to be used as a shortcut with an English keyboard even though
// pressing ALT+E will give a dead key while doing normal text input.
if ([characters length] != 0 || [charactersIgnoringModifiers length] != 0) {
- if (((modifiers & Qt::MetaModifier) || (modifiers & Qt::AltModifier)) && ([charactersIgnoringModifiers length] != 0))
+ auto ctrlOrMetaModifier = qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta) ? Qt::ControlModifier : Qt::MetaModifier;
+ if (((modifiers & ctrlOrMetaModifier) || (modifiers & Qt::AltModifier)) && ([charactersIgnoringModifiers length] != 0))
ch = QChar([charactersIgnoringModifiers characterAtIndex:0]);
else if ([characters length] != 0)
ch = QChar([characters characterAtIndex:0]);
@@ -1534,10 +1537,17 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
if ((delta & mac_mask) == 0u)
continue;
+ Qt::Key qtCode = modifier_key_symbols[i].qt_code;
+ if (qApp->testAttribute(Qt::AA_MacDontSwapCtrlAndMeta)) {
+ if (qtCode == Qt::Key_Meta)
+ qtCode = Qt::Key_Control;
+ else if (qtCode == Qt::Key_Control)
+ qtCode = Qt::Key_Meta;
+ }
QWindowSystemInterface::handleKeyEvent(m_platformWindow->window(),
timestamp,
(lastKnownModifiers & mac_mask) ? QEvent::KeyRelease : QEvent::KeyPress,
- modifier_key_symbols[i].qt_code,
+ qtCode,
qmodifiers ^ [QNSView convertKeyModifiers:mac_mask]);
}
}
@@ -1769,14 +1779,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
// The returned rect is always based on the internal cursor.
QRect mr = qApp->inputMethod()->cursorRectangle().toRect();
- QPoint mp = m_platformWindow->window()->mapToGlobal(mr.bottomLeft());
-
- NSRect rect;
- rect.origin.x = mp.x();
- rect.origin.y = qt_mac_flipYCoordinate(mp.y());
- rect.size.width = mr.width();
- rect.size.height = mr.height();
- return rect;
+ mr.moveBottomLeft(m_platformWindow->window()->mapToGlobal(mr.bottomLeft()));
+ return QCocoaScreen::mapToNative(mr);
}
- (NSUInteger)characterIndexForPoint:(NSPoint)aPoint
@@ -2062,8 +2066,7 @@ static QPoint mapWindowCoordinates(QWindow *source, QWindow *target, QPoint poin
NSPoint windowPoint = [self.window convertRectFromScreen:NSMakeRect(screenPoint.x, screenPoint.y, 1, 1)].origin;
NSPoint nsViewPoint = [self convertPoint: windowPoint fromView: nil]; // NSView/QWindow coordinates
QPoint qtWindowPoint(nsViewPoint.x, nsViewPoint.y);
-
- QPoint qtScreenPoint = QPoint(screenPoint.x, qt_mac_flipYCoordinate(screenPoint.y));
+ QPoint qtScreenPoint = QCocoaScreen::mapFromNative(screenPoint).toPoint();
QWindowSystemInterface::handleMouseEvent(target, mapWindowCoordinates(m_platformWindow->window(), target, qtWindowPoint), qtScreenPoint, m_buttons);
}
diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
index cdecd86dfb..6e5623d679 100644
--- a/src/plugins/platforms/cocoa/qnswindowdelegate.mm
+++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm
@@ -80,22 +80,6 @@ static QRegExp whitespaceRegex = QRegExp(QStringLiteral("\\s*"));
return NSRectFromCGRect(m_cocoaWindow->screen()->availableGeometry().toCGRect());
}
-#if QT_MACOS_DEPLOYMENT_TARGET_BELOW(__MAC_10_11)
-/*
- AppKit on OS X 10.10 wrongly calls windowWillUseStandardFrame:defaultFrame
- from -[NSWindow _frameForFullScreenMode] when going into fullscreen, resulting
- in black bars on top and bottom of the window. By implementing the following
- method, AppKit will choose that instead, and resolve the right fullscreen
- geometry.
-*/
-- (NSSize)window:(NSWindow *)window willUseFullScreenContentSize:(NSSize)proposedSize
-{
- Q_UNUSED(proposedSize);
- Q_ASSERT(window == m_cocoaWindow->nativeWindow());
- return NSSizeFromCGSize(m_cocoaWindow->screen()->geometry().size().toCGSize());
-}
-#endif
-
- (BOOL)window:(NSWindow *)window shouldPopUpDocumentPathMenu:(NSMenu *)menu
{
Q_UNUSED(window);
diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac.mm b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
index 7e241e3ae6..3f363b62d5 100644
--- a/src/plugins/platforms/cocoa/qpaintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
@@ -108,7 +108,7 @@ CGAffineTransform qt_mac_convert_transform_to_cg(const QTransform &t) {
return CGAffineTransformMake(t.m11(), t.m12(), t.m21(), t.m22(), t.dx(), t.dy());
}
-inline static QCFType<CGColorRef> cgColorForQColor(const QColor &col, QPaintDevice *pdev)
+inline static QCFType<CGColorRef> cgColorForQColor(const QColor &col)
{
CGFloat components[] = {
qt_mac_convert_color_to_cg(col.red()),
@@ -116,7 +116,8 @@ inline static QCFType<CGColorRef> cgColorForQColor(const QColor &col, QPaintDevi
qt_mac_convert_color_to_cg(col.blue()),
qt_mac_convert_color_to_cg(col.alpha())
};
- return CGColorCreate(qt_mac_colorSpaceForDeviceType(pdev), components);
+ QCFType<CGColorSpaceRef> colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ return CGColorCreate(colorSpace, components);
}
// There's architectural problems with using native gradients
@@ -239,81 +240,6 @@ static CGMutablePathRef qt_mac_compose_path(const QPainterPath &p, float off=0)
return ret;
}
-CGColorSpaceRef QCoreGraphicsPaintEngine::m_genericColorSpace = 0;
-QHash<CGDirectDisplayID, CGColorSpaceRef> QCoreGraphicsPaintEngine::m_displayColorSpaceHash;
-bool QCoreGraphicsPaintEngine::m_postRoutineRegistered = false;
-
-CGColorSpaceRef QCoreGraphicsPaintEngine::macGenericColorSpace()
-{
-#if 0
- if (!m_genericColorSpace) {
- if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4) {
- m_genericColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
- } else
- {
- m_genericColorSpace = CGColorSpaceCreateDeviceRGB();
- }
- if (!m_postRoutineRegistered) {
- m_postRoutineRegistered = true;
- qAddPostRoutine(QCoreGraphicsPaintEngine::cleanUpMacColorSpaces);
- }
- }
- return m_genericColorSpace;
-#else
- // Just return the main display colorspace for the moment.
- return macDisplayColorSpace();
-#endif
-}
-
-/*
- Ideally, we should pass the widget in here, and use CGGetDisplaysWithRect() etc.
- to support multiple displays correctly.
-*/
-CGColorSpaceRef QCoreGraphicsPaintEngine::macDisplayColorSpace(const QWidget *widget)
-{
- CGColorSpaceRef colorSpace;
-
- CGDirectDisplayID displayID;
- if (widget == 0) {
- displayID = CGMainDisplayID();
- } else {
- const QRect &qrect = widget->window()->geometry();
- CGRect rect = CGRectMake(qrect.x(), qrect.y(), qrect.width(), qrect.height());
- CGDisplayCount throwAway;
- CGDisplayErr dErr = CGGetDisplaysWithRect(rect, 1, &displayID, &throwAway);
- if (dErr != kCGErrorSuccess)
- return macDisplayColorSpace(0); // fall back on main display
- }
- if ((colorSpace = m_displayColorSpaceHash.value(displayID)))
- return colorSpace;
-
- colorSpace = CGDisplayCopyColorSpace(displayID);
- if (colorSpace == 0)
- colorSpace = CGColorSpaceCreateDeviceRGB();
-
- m_displayColorSpaceHash.insert(displayID, colorSpace);
- if (!m_postRoutineRegistered) {
- m_postRoutineRegistered = true;
- qAddPostRoutine(QCoreGraphicsPaintEngine::cleanUpMacColorSpaces);
- }
- return colorSpace;
-}
-
-void QCoreGraphicsPaintEngine::cleanUpMacColorSpaces()
-{
- if (m_genericColorSpace) {
- CFRelease(m_genericColorSpace);
- m_genericColorSpace = 0;
- }
- QHash<CGDirectDisplayID, CGColorSpaceRef>::const_iterator it = m_displayColorSpaceHash.constBegin();
- while (it != m_displayColorSpaceHash.constEnd()) {
- if (it.value())
- CFRelease(it.value());
- ++it;
- }
- m_displayColorSpaceHash.clear();
-}
-
//pattern handling (tiling)
#if 1
# define QMACPATTERN_MASK_MULTIPLIER 32
@@ -377,7 +303,7 @@ static void qt_mac_draw_pattern(void *info, CGContextRef c)
QPixmap pm(w*QMACPATTERN_MASK_MULTIPLIER, h*QMACPATTERN_MASK_MULTIPLIER);
pm.fill(c0);
QMacCGContext pm_ctx(&pm);
- CGContextSetFillColorWithColor(c, cgColorForQColor(c1, pat->pdev));
+ CGContextSetFillColorWithColor(c, cgColorForQColor(c1));
CGRect rect = CGRectMake(0, 0, w, h);
for (int x = 0; x < QMACPATTERN_MASK_MULTIPLIER; ++x) {
rect.origin.x = x * w;
@@ -409,7 +335,7 @@ static void qt_mac_draw_pattern(void *info, CGContextRef c)
bool needRestore = false;
if (CGImageIsMask(pat->image)) {
CGContextSaveGState(c);
- CGContextSetFillColorWithColor(c, cgColorForQColor(pat->foreground, pat->pdev));
+ CGContextSetFillColorWithColor(c, cgColorForQColor(pat->foreground));
}
CGRect rect = CGRectMake(0, 0, w, h);
qt_mac_drawCGImage(c, &rect, pat->image);
@@ -871,7 +797,7 @@ void QCoreGraphicsPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, co
d->saveGraphicsState();
const QColor &col = d->current.pen.color();
- CGContextSetFillColorWithColor(d->hd, cgColorForQColor(col, d->pdev));
+ CGContextSetFillColorWithColor(d->hd, cgColorForQColor(col));
image = qt_mac_create_imagemask(pm, sr);
} else if (differentSize) {
QCFType<CGImageRef> img = qt_mac_toCGImage(pm.toImage());
@@ -1233,7 +1159,7 @@ QCoreGraphicsPaintEnginePrivate::setStrokePen(const QPen &pen)
CGContextSetLineDash(hd, pen.dashOffset() * cglinewidth, linedashes.data(), linedashes.size());
// color
- CGContextSetStrokeColorWithColor(hd, cgColorForQColor(pen.color(), pdev));
+ CGContextSetStrokeColorWithColor(hd, cgColorForQColor(pen.color()));
}
// Add our own patterns here to deal with the fact that the coordinate system
@@ -1276,7 +1202,7 @@ void QCoreGraphicsPaintEnginePrivate::setFillBrush(const QPointF &offset)
CGFunctionRef fill_func = CGFunctionCreate(reinterpret_cast<void *>(&current.brush),
1, domain, 4, 0, &callbacks);
- CGColorSpaceRef colorspace = qt_mac_colorSpaceForDeviceType(pdev);
+ CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB)
if (bs == Qt::LinearGradientPattern) {
const QLinearGradient *linearGrad = static_cast<const QLinearGradient *>(grad);
const QPointF start(linearGrad->start());
@@ -1315,7 +1241,7 @@ void QCoreGraphicsPaintEnginePrivate::setFillBrush(const QPointF &offset)
components[0] = qt_mac_convert_color_to_cg(col.red());
components[1] = qt_mac_convert_color_to_cg(col.green());
components[2] = qt_mac_convert_color_to_cg(col.blue());
- base_colorspace = QCoreGraphicsPaintEngine::macGenericColorSpace();
+ base_colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
}
} else {
qpattern->as_mask = true;
@@ -1325,7 +1251,7 @@ void QCoreGraphicsPaintEnginePrivate::setFillBrush(const QPointF &offset)
components[0] = qt_mac_convert_color_to_cg(col.red());
components[1] = qt_mac_convert_color_to_cg(col.green());
components[2] = qt_mac_convert_color_to_cg(col.blue());
- base_colorspace = QCoreGraphicsPaintEngine::macGenericColorSpace();
+ base_colorspace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
}
int width = qpattern->width(), height = qpattern->height();
qpattern->foreground = current.brush.color();
@@ -1346,10 +1272,12 @@ void QCoreGraphicsPaintEnginePrivate::setFillBrush(const QPointF &offset)
!base_colorspace, &callbks);
CGContextSetFillPattern(hd, fill_pattern, components);
+
CGPatternRelease(fill_pattern);
+ CGColorSpaceRelease(base_colorspace);
CGColorSpaceRelease(fill_colorspace);
} else if (bs != Qt::NoBrush) {
- CGContextSetFillColorWithColor(hd, cgColorForQColor(current.brush.color(), pdev));
+ CGContextSetFillColorWithColor(hd, cgColorForQColor(current.brush.color()));
}
}
diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac_p.h b/src/plugins/platforms/cocoa/qpaintengine_mac_p.h
index 57d985c399..c9519ac827 100644
--- a/src/plugins/platforms/cocoa/qpaintengine_mac_p.h
+++ b/src/plugins/platforms/cocoa/qpaintengine_mac_p.h
@@ -73,8 +73,6 @@ public:
bool begin(QPaintDevice *pdev);
bool end();
- static CGColorSpaceRef macGenericColorSpace();
- static CGColorSpaceRef macDisplayColorSpace(const QWidget *widget = 0);
void updateState(const QPaintEngineState &state);
@@ -126,10 +124,6 @@ protected:
QCoreGraphicsPaintEngine(QPaintEnginePrivate &dptr);
private:
- static bool m_postRoutineRegistered;
- static CGColorSpaceRef m_genericColorSpace;
- static QHash<CGDirectDisplayID, CGColorSpaceRef> m_displayColorSpaceHash;
- static void cleanUpMacColorSpaces();
Q_DISABLE_COPY(QCoreGraphicsPaintEngine)
};
diff --git a/src/plugins/platforms/cocoa/qprintengine_mac.mm b/src/plugins/platforms/cocoa/qprintengine_mac.mm
index c39af870d4..b3d48c1ec3 100644
--- a/src/plugins/platforms/cocoa/qprintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qprintengine_mac.mm
@@ -247,7 +247,7 @@ void QMacPrintEnginePrivate::initialize()
QList<int> resolutions = m_printDevice->supportedResolutions();
if (!resolutions.isEmpty() && mode != QPrinter::ScreenResolution) {
- qSort(resolutions);
+ std::sort(resolutions.begin(), resolutions.end());
if (resolutions.count() > 1 && mode == QPrinter::HighResolution)
resolution.hRes = resolution.vRes = resolutions.last();
else
diff --git a/src/plugins/platforms/cocoa/qprintengine_mac_p.h b/src/plugins/platforms/cocoa/qprintengine_mac_p.h
index 2d46a250d5..9514f3e691 100644
--- a/src/plugins/platforms/cocoa/qprintengine_mac_p.h
+++ b/src/plugins/platforms/cocoa/qprintengine_mac_p.h
@@ -150,8 +150,8 @@ public:
PMPrintSession session() const { return static_cast<PMPrintSession>([printInfo PMPrintSession]); }
PMPrintSettings settings() const { return static_cast<PMPrintSettings>([printInfo PMPrintSettings]); }
- QPaintEngine *aggregateEngine() Q_DECL_OVERRIDE { return paintEngine; }
- Qt::HANDLE nativeHandle() Q_DECL_OVERRIDE { return q_func()->handle(); }
+ QPaintEngine *aggregateEngine() override { return paintEngine; }
+ Qt::HANDLE nativeHandle() override { return q_func()->handle(); }
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h
index 670c4e9840..f72ea2b038 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dbackingstore.h
@@ -54,12 +54,12 @@ public:
QWindowsDirect2DBackingStore(QWindow *window);
~QWindowsDirect2DBackingStore();
- void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
- void endPaint() Q_DECL_OVERRIDE;
+ void beginPaint(const QRegion &) override;
+ void endPaint() override;
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- void flush(QWindow *targetWindow, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
+ void flush(QWindow *targetWindow, const QRegion &region, const QPoint &offset) override;
+ void resize(const QSize &size, const QRegion &staticContents) override;
QImage toImage() const override;
};
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp
index 643ae877d0..d578a58982 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2ddevicecontext.cpp
@@ -161,7 +161,7 @@ void QWindowsDirect2DDeviceContextSuspender::resume()
{
if (m_dc) {
m_dc->resume();
- m_dc = Q_NULLPTR;
+ m_dc = nullptr;
}
}
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
index ea51135583..6d98da5be5 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
@@ -48,6 +48,7 @@
#include <qplatformdefs.h>
#include <QtCore/QCoreApplication>
+#include <QtCore/QVersionNumber>
#include <QtGui/private/qpixmap_raster_p.h>
#include <QtGui/qpa/qwindowsysteminterface.h>
#include <QtEventDispatcherSupport/private/qwindowsguieventdispatcher_p.h>
@@ -73,127 +74,60 @@ public:
QWindowsDirect2DContext m_d2dContext;
};
-class Direct2DVersion
+static QVersionNumber systemD2DVersion()
{
-private:
- Direct2DVersion() = default;
-
- Direct2DVersion(int one, int two, int three, int four)
- : partOne(one)
- , partTwo(two)
- , partThree(three)
- , partFour(four)
- {}
+ static const int bufSize = 512;
+ TCHAR filename[bufSize];
+
+ UINT i = GetSystemDirectory(filename, bufSize);
+ if (i > 0 && i < bufSize) {
+ if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) {
+ DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL);
+ if (versionInfoSize) {
+ QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize));
+ if (GetFileVersionInfo(filename, 0, versionInfoSize, info.data())) {
+ UINT size;
+ DWORD *fi;
+
+ if (VerQueryValue(info.constData(), __TEXT("\\"),
+ reinterpret_cast<void **>(&fi), &size) && size) {
+ const VS_FIXEDFILEINFO *verInfo = reinterpret_cast<const VS_FIXEDFILEINFO *>(fi);
+ return QVersionNumber{HIWORD(verInfo->dwFileVersionMS), LOWORD(verInfo->dwFileVersionMS),
+ HIWORD(verInfo->dwFileVersionLS), LOWORD(verInfo->dwFileVersionLS)};
+ }
+ }
+ }
+ }
+ }
+ return QVersionNumber();
+}
-public:
+static QVersionNumber minimumD2DVersion()
+{
// 6.2.9200.16492 corresponds to Direct2D 1.1 on Windows 7 SP1 with Platform Update
- enum {
+ enum : int {
D2DMinVersionPart1 = 6,
D2DMinVersionPart2 = 2,
D2DMinVersionPart3 = 9200,
D2DMinVersionPart4 = 16492
};
- static Direct2DVersion systemVersion() {
- static const int bufSize = 512;
- TCHAR filename[bufSize];
-
- UINT i = GetSystemDirectory(filename, bufSize);
- if (i > 0 && i < bufSize) {
- if (_tcscat_s(filename, bufSize, __TEXT("\\d2d1.dll")) == 0) {
- DWORD versionInfoSize = GetFileVersionInfoSize(filename, NULL);
- if (versionInfoSize) {
- QVarLengthArray<BYTE> info(static_cast<int>(versionInfoSize));
- if (GetFileVersionInfo(filename, 0, versionInfoSize, info.data())) {
- UINT size;
- DWORD *fi;
-
- if (VerQueryValue(info.constData(), __TEXT("\\"),
- reinterpret_cast<void **>(&fi), &size) && size) {
- const VS_FIXEDFILEINFO *verInfo = reinterpret_cast<const VS_FIXEDFILEINFO *>(fi);
- return Direct2DVersion(HIWORD(verInfo->dwFileVersionMS),
- LOWORD(verInfo->dwFileVersionMS),
- HIWORD(verInfo->dwFileVersionLS),
- LOWORD(verInfo->dwFileVersionLS));
- }
- }
- }
- }
- }
-
- return Direct2DVersion();
- }
-
- static Direct2DVersion minimumVersion() {
- return Direct2DVersion(D2DMinVersionPart1,
- D2DMinVersionPart2,
- D2DMinVersionPart3,
- D2DMinVersionPart4);
- }
-
- bool isValid() const {
- return partOne || partTwo || partThree || partFour;
- }
-
- bool operator<(const Direct2DVersion &other) {
- int c = cmp(partOne, other.partOne);
- if (c > 0)
- return false;
- if (c < 0)
- return true;
-
- c = cmp(partTwo, other.partTwo);
- if (c > 0)
- return false;
- if (c < 0)
- return true;
-
- c = cmp(partThree, other.partThree);
- if (c > 0)
- return false;
- if (c < 0)
- return true;
-
- c = cmp(partFour, other.partFour);
- if (c > 0)
- return false;
- if (c < 0)
- return true;
-
- return false;
- }
-
- static Q_DECL_CONSTEXPR int cmp(int a, int b) {
- return a - b;
- }
-
- int partOne = 0;
- int partTwo = 0;
- int partThree = 0;
- int partFour = 0;
-};
+ return QVersionNumber{D2DMinVersionPart1, D2DMinVersionPart2, D2DMinVersionPart3, D2DMinVersionPart4};
+}
QWindowsDirect2DIntegration *QWindowsDirect2DIntegration::create(const QStringList &paramList)
{
- Direct2DVersion systemVersion = Direct2DVersion::systemVersion();
-
- if (systemVersion.isValid() && systemVersion < Direct2DVersion::minimumVersion()) {
+ const QVersionNumber systemVersion = systemD2DVersion();
+ const QVersionNumber minimumVersion = minimumD2DVersion();
+ if (!systemVersion.isNull() && systemVersion < minimumVersion) {
QString msg = QCoreApplication::translate("QWindowsDirect2DIntegration",
"Qt cannot load the direct2d platform plugin because " \
"the Direct2D version on this system is too old. The " \
"minimum system requirement for this platform plugin " \
"is Windows 7 SP1 with Platform Update.\n\n" \
- "The minimum Direct2D version required is %1.%2.%3.%4. " \
- "The Direct2D version on this system is %5.%6.%7.%8.");
-
- msg = msg.arg(Direct2DVersion::D2DMinVersionPart1)
- .arg(Direct2DVersion::D2DMinVersionPart2)
- .arg(Direct2DVersion::D2DMinVersionPart3)
- .arg(Direct2DVersion::D2DMinVersionPart4)
- .arg(systemVersion.partOne)
- .arg(systemVersion.partTwo)
- .arg(systemVersion.partThree)
- .arg(systemVersion.partFour);
+ "The minimum Direct2D version required is %1. " \
+ "The Direct2D version on this system is %2.")
+ .arg(minimumVersion.toString(), systemVersion.toString());
QString caption = QCoreApplication::translate("QWindowsDirect2DIntegration",
"Cannot load direct2d platform plugin");
@@ -203,7 +137,7 @@ QWindowsDirect2DIntegration *QWindowsDirect2DIntegration::create(const QStringLi
caption.toStdWString().c_str(),
MB_OK | MB_ICONERROR);
- return Q_NULLPTR;
+ return nullptr;
}
QWindowsDirect2DIntegration *integration = new QWindowsDirect2DIntegration(paramList);
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h
index 43f2a08745..39ca1d0dbf 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dintegration.h
@@ -58,15 +58,15 @@ public:
static QWindowsDirect2DIntegration *instance();
- QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
- QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QPlatformNativeInterface *nativeInterface() const override;
+ QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
QWindowsDirect2DContext *direct2DContext() const;
protected:
- QWindowsWindow *createPlatformWindowHelper(QWindow *window, const QWindowsWindowData &) const Q_DECL_OVERRIDE;
+ QWindowsWindow *createPlatformWindowHelper(QWindow *window, const QWindowsWindowData &) const override;
private:
explicit QWindowsDirect2DIntegration(const QStringList &paramList);
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h b/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h
index d57136129b..fce6ff9969 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dnativeinterface.h
@@ -48,7 +48,7 @@ class QWindowsDirect2DNativeInterface : public QWindowsNativeInterface
{
Q_OBJECT
public:
- void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs) Q_DECL_OVERRIDE;
+ void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *bs) override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h
index f434ef993c..1f23d604f5 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintdevice.h
@@ -58,11 +58,11 @@ public:
QWindowsDirect2DPaintEngine::Flags paintFlags = QWindowsDirect2DPaintEngine::NoFlag);
~QWindowsDirect2DPaintDevice();
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
- int devType() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
+ int devType() const override;
protected:
- int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric metric) const override;
private:
QScopedPointer<QWindowsDirect2DPaintDevicePrivate> d_ptr;
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
index 164429ba30..95fbd37247 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
@@ -804,7 +804,7 @@ public:
const bool alias = !q->antiAliasingEnabled();
QVectorPath::CacheEntry *cacheEntry = path.isCacheable() ? path.lookupCacheData(q)
- : Q_NULLPTR;
+ : nullptr;
if (cacheEntry) {
D2DVectorPathCache *e = static_cast<D2DVectorPathCache *>(cacheEntry->data);
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h
index a8f63af5d5..b9616acd6a 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.h
@@ -65,45 +65,45 @@ public:
QWindowsDirect2DPaintEngine(QWindowsDirect2DBitmap *bitmap, Flags flags);
- bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
- bool end() Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *pdev) override;
+ bool end() override;
- Type type() const Q_DECL_OVERRIDE;
+ Type type() const override;
- void setState(QPainterState *s) Q_DECL_OVERRIDE;
+ void setState(QPainterState *s) override;
- void draw(const QVectorPath &path) Q_DECL_OVERRIDE;
+ void draw(const QVectorPath &path) override;
- void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
+ void fill(const QVectorPath &path, const QBrush &brush) override;
void fill(ID2D1Geometry *geometry, const QBrush &brush);
- void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
+ void stroke(const QVectorPath &path, const QPen &pen) override;
void stroke(ID2D1Geometry *geometry, const QPen &pen);
- void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE;
+ void clip(const QVectorPath &path, Qt::ClipOperation op) override;
- void clipEnabledChanged() Q_DECL_OVERRIDE;
- void penChanged() Q_DECL_OVERRIDE;
- void brushChanged() Q_DECL_OVERRIDE;
- void brushOriginChanged() Q_DECL_OVERRIDE;
- void opacityChanged() Q_DECL_OVERRIDE;
- void compositionModeChanged() Q_DECL_OVERRIDE;
- void renderHintsChanged() Q_DECL_OVERRIDE;
- void transformChanged() Q_DECL_OVERRIDE;
+ void clipEnabledChanged() override;
+ void penChanged() override;
+ void brushChanged() override;
+ void brushOriginChanged() override;
+ void opacityChanged() override;
+ void compositionModeChanged() override;
+ void renderHintsChanged() override;
+ void transformChanged() override;
- void fillRect(const QRectF &rect, const QBrush &brush) Q_DECL_OVERRIDE;
+ void fillRect(const QRectF &rect, const QBrush &brush) override;
- void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE;
- void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
+ void drawRects(const QRect *rects, int rectCount) override;
+ void drawRects(const QRectF *rects, int rectCount) override;
- void drawEllipse(const QRectF &r) Q_DECL_OVERRIDE;
- void drawEllipse(const QRect &r) Q_DECL_OVERRIDE;
+ void drawEllipse(const QRectF &r) override;
+ void drawEllipse(const QRect &r) override;
- void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
- void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
+ void drawImage(const QRectF &rectangle, const QImage &image, const QRectF &sr, Qt::ImageConversionFlags flags = Qt::AutoColor) override;
+ void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
- void drawStaticTextItem(QStaticTextItem *staticTextItem) Q_DECL_OVERRIDE;
- void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
+ void drawStaticTextItem(QStaticTextItem *staticTextItem) override;
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
private:
void ensureBrush();
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h b/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h
index 5f65a2313a..0448613a95 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dplatformpixmap.h
@@ -59,21 +59,21 @@ public:
QWindowsDirect2DPlatformPixmap(PixelType pixelType, QWindowsDirect2DPaintEngine::Flags flags, QWindowsDirect2DBitmap *bitmap);
~QWindowsDirect2DPlatformPixmap();
- void resize(int width, int height) Q_DECL_OVERRIDE;
- void fromImage(const QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
+ void resize(int width, int height) override;
+ void fromImage(const QImage &image, Qt::ImageConversionFlags flags) override;
- int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- void fill(const QColor &color) Q_DECL_OVERRIDE;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const override;
+ void fill(const QColor &color) override;
- bool hasAlphaChannel() const Q_DECL_OVERRIDE;
+ bool hasAlphaChannel() const override;
- QImage toImage() const Q_DECL_OVERRIDE;
- QImage toImage(const QRect &rect) const Q_DECL_OVERRIDE;
+ QImage toImage() const override;
+ QImage toImage(const QRect &rect) const override;
- QPaintEngine* paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine* paintEngine() const override;
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
- void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE;
+ qreal devicePixelRatio() const override;
+ void setDevicePixelRatio(qreal scaleFactor) override;
QWindowsDirect2DBitmap *bitmap() const;
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp
index 21294cfb15..f81182e0b1 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.cpp
@@ -209,7 +209,7 @@ void QWindowsDirect2DWindow::resizeSwapChain(const QSize &size)
{
m_pixmap.reset();
m_bitmap.reset();
- m_deviceContext->SetTarget(Q_NULLPTR);
+ m_deviceContext->SetTarget(nullptr);
m_needsFullFlush = true;
if (!m_swapChain)
@@ -241,7 +241,7 @@ QSharedPointer<QWindowsDirect2DBitmap> QWindowsDirect2DWindow::copyBackBuffer()
dpiX, // FLOAT dpiX;
dpiY, // FLOAT dpiY;
D2D1_BITMAP_OPTIONS_TARGET, // D2D1_BITMAP_OPTIONS bitmapOptions;
- Q_NULLPTR // _Field_size_opt_(1) ID2D1ColorContext *colorContext;
+ nullptr // _Field_size_opt_(1) ID2D1ColorContext *colorContext;
};
ComPtr<ID2D1Bitmap1> copy;
HRESULT hr = m_deviceContext.Get()->CreateBitmap(size, NULL, 0, properties, &copy);
@@ -257,7 +257,7 @@ QSharedPointer<QWindowsDirect2DBitmap> QWindowsDirect2DWindow::copyBackBuffer()
return null_result;
}
- return QSharedPointer<QWindowsDirect2DBitmap>(new QWindowsDirect2DBitmap(copy.Get(), Q_NULLPTR));
+ return QSharedPointer<QWindowsDirect2DBitmap>(new QWindowsDirect2DBitmap(copy.Get(), nullptr));
}
void QWindowsDirect2DWindow::setupBitmap()
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h
index 156d4660d1..3ac532d938 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dwindow.h
@@ -56,7 +56,7 @@ public:
QWindowsDirect2DWindow(QWindow *window, const QWindowsWindowData &data);
~QWindowsDirect2DWindow();
- void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
+ void setWindowFlags(Qt::WindowFlags flags) override;
QPixmap *pixmap();
void flush(QWindowsDirect2DBitmap *bitmap, const QRegion &region, const QPoint &offset);
diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp
index e411ea55e9..1b8f50a1c6 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp
@@ -103,7 +103,7 @@ QStringList QEglFSDeviceIntegrationFactory::keys(const QString &pluginPath)
QEglFSDeviceIntegration *QEglFSDeviceIntegrationFactory::create(const QString &key, const QString &pluginPath)
{
- QEglFSDeviceIntegration *integration = Q_NULLPTR;
+ QEglFSDeviceIntegration *integration = nullptr;
#if QT_CONFIG(library)
if (!pluginPath.isEmpty()) {
QCoreApplication::addLibraryPath(pluginPath);
@@ -351,9 +351,28 @@ bool QEglFSDeviceIntegration::supportsSurfacelessContexts() const
return true;
}
+QFunctionPointer QEglFSDeviceIntegration::platformFunction(const QByteArray &function) const
+{
+ Q_UNUSED(function);
+ return nullptr;
+}
+
+void *QEglFSDeviceIntegration::nativeResourceForIntegration(const QByteArray &name)
+{
+ Q_UNUSED(name);
+ return nullptr;
+}
+
+void *QEglFSDeviceIntegration::nativeResourceForScreen(const QByteArray &resource, QScreen *screen)
+{
+ Q_UNUSED(resource);
+ Q_UNUSED(screen);
+ return nullptr;
+}
+
void *QEglFSDeviceIntegration::wlDisplay() const
{
- return Q_NULLPTR;
+ return nullptr;
}
EGLConfig QEglFSDeviceIntegration::chooseConfig(EGLDisplay display, const QSurfaceFormat &format)
diff --git a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration_p.h b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration_p.h
index 4335554912..71ffb4c69a 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration_p.h
+++ b/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration_p.h
@@ -103,7 +103,9 @@ public:
virtual int framebufferIndex() const;
virtual bool supportsPBuffers() const;
virtual bool supportsSurfacelessContexts() const;
-
+ virtual QFunctionPointer platformFunction(const QByteArray &function) const;
+ virtual void *nativeResourceForIntegration(const QByteArray &name);
+ virtual void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen);
virtual void *wlDisplay() const;
static EGLConfig chooseConfig(EGLDisplay display, const QSurfaceFormat &format);
diff --git a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
index 9a0be489a8..33878a5f50 100644
--- a/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
+++ b/src/plugins/platforms/eglfs/api/qeglfsintegration.cpp
@@ -324,13 +324,14 @@ void *QEglFSIntegration::nativeResourceForIntegration(const QByteArray &resource
result = qt_egl_device_integration()->wlDisplay();
break;
default:
+ result = qt_egl_device_integration()->nativeResourceForIntegration(resource);
break;
}
return result;
}
-void *QEglFSIntegration::nativeResourceForScreen(const QByteArray &resource, QScreen *)
+void *QEglFSIntegration::nativeResourceForScreen(const QByteArray &resource, QScreen *screen)
{
void *result = 0;
@@ -341,6 +342,7 @@ void *QEglFSIntegration::nativeResourceForScreen(const QByteArray &resource, QSc
result = reinterpret_cast<void*>(nativeDisplay());
break;
default:
+ result = qt_egl_device_integration()->nativeResourceForScreen(resource, screen);
break;
}
@@ -427,11 +429,9 @@ QFunctionPointer QEglFSIntegration::platformFunction(const QByteArray &function)
#if QT_CONFIG(evdev)
if (function == QEglFSFunctions::loadKeymapTypeIdentifier())
return QFunctionPointer(loadKeymapStatic);
-#else
- Q_UNUSED(function)
#endif
- return 0;
+ return qt_egl_device_integration()->platformFunction(function);
}
void QEglFSIntegration::loadKeymapStatic(const QString &filename)
diff --git a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h
index 6bda262523..c61f04f569 100644
--- a/src/plugins/platforms/eglfs/api/qeglfswindow_p.h
+++ b/src/plugins/platforms/eglfs/api/qeglfswindow_p.h
@@ -95,7 +95,7 @@ public:
EGLNativeWindowType eglWindow() const;
EGLSurface surface() const;
- QEglFSScreen *screen() const;
+ QEglFSScreen *screen() const override;
bool hasNativeWindow() const { return m_flags.testFlag(HasNativeWindow); }
diff --git a/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro b/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro
index 92ee83fd8f..919ecd01f6 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro
@@ -4,6 +4,7 @@ QT_FOR_CONFIG += gui-private
qtConfig(egl_x11): SUBDIRS += eglfs_x11
qtConfig(eglfs_gbm): SUBDIRS *= eglfs_kms_support eglfs_kms
qtConfig(eglfs_egldevice): SUBDIRS *= eglfs_kms_support eglfs_kms_egldevice
+qtConfig(eglfs_vsp2): SUBDIRS += eglfs_kms_vsp2
qtConfig(eglfs_brcm): SUBDIRS += eglfs_brcm
qtConfig(eglfs_mali): SUBDIRS += eglfs_mali
qtConfig(eglfs_viv): SUBDIRS += eglfs_viv
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
index 27c0af1f08..43170a3875 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
@@ -19,11 +19,13 @@ SOURCES += $$PWD/qeglfskmsgbmmain.cpp \
$$PWD/qeglfskmsgbmintegration.cpp \
$$PWD/qeglfskmsgbmdevice.cpp \
$$PWD/qeglfskmsgbmscreen.cpp \
- $$PWD/qeglfskmsgbmcursor.cpp
+ $$PWD/qeglfskmsgbmcursor.cpp \
+ $$PWD/qeglfskmsgbmwindow.cpp
HEADERS += $$PWD/qeglfskmsgbmintegration.h \
$$PWD/qeglfskmsgbmdevice.h \
$$PWD/qeglfskmsgbmscreen.h \
- $$PWD/qeglfskmsgbmcursor.h
+ $$PWD/qeglfskmsgbmcursor.h \
+ $$PWD/qeglfskmsgbmwindow.h
OTHER_FILES += $$PWD/eglfs_kms.json
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp
index 800118362d..9bd7fee1fb 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmcursor.cpp
@@ -68,7 +68,7 @@ Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
QEglFSKmsGbmCursor::QEglFSKmsGbmCursor(QEglFSKmsGbmScreen *screen)
: m_screen(screen)
, m_cursorSize(64, 64) // 64x64 is the old standard size, we now try to query the real size below
- , m_bo(Q_NULLPTR)
+ , m_bo(nullptr)
, m_cursorImage(0, 0, 0, 0, 0, 0)
, m_state(CursorPendingVisible)
{
@@ -118,7 +118,7 @@ QEglFSKmsGbmCursor::~QEglFSKmsGbmCursor()
if (m_bo) {
gbm_bo_destroy(m_bo);
- m_bo = Q_NULLPTR;
+ m_bo = nullptr;
}
}
@@ -132,7 +132,7 @@ void QEglFSKmsGbmCursor::updateMouseStatus()
m_state = visible ? CursorPendingVisible : CursorPendingHidden;
#ifndef QT_NO_CURSOR
- changeCursor(Q_NULLPTR, m_screen->topLevelAt(pos()));
+ changeCursor(nullptr, m_screen->topLevelAt(pos()));
#endif
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp
index e218d580a2..20127ae7f7 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.cpp
@@ -53,28 +53,17 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
-void QEglFSKmsGbmDevice::pageFlipHandler(int fd, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, void *user_data)
-{
- Q_UNUSED(fd);
- Q_UNUSED(sequence);
- Q_UNUSED(tv_sec);
- Q_UNUSED(tv_usec);
-
- QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(user_data);
- screen->flipFinished();
-}
-
QEglFSKmsGbmDevice::QEglFSKmsGbmDevice(QKmsScreenConfig *screenConfig, const QString &path)
: QEglFSKmsDevice(screenConfig, path)
- , m_gbm_device(Q_NULLPTR)
- , m_globalCursor(Q_NULLPTR)
+ , m_gbm_device(nullptr)
+ , m_globalCursor(nullptr)
{
}
bool QEglFSKmsGbmDevice::open()
{
Q_ASSERT(fd() == -1);
- Q_ASSERT(m_gbm_device == Q_NULLPTR);
+ Q_ASSERT(m_gbm_device == nullptr);
int fd = qt_safe_open(devicePath().toLocal8Bit().constData(), O_RDWR | O_CLOEXEC);
if (fd == -1) {
@@ -103,7 +92,7 @@ void QEglFSKmsGbmDevice::close()
if (m_gbm_device) {
gbm_device_destroy(m_gbm_device);
- m_gbm_device = Q_NULLPTR;
+ m_gbm_device = nullptr;
}
if (fd() != -1) {
@@ -134,24 +123,13 @@ void QEglFSKmsGbmDevice::destroyGlobalCursor()
if (m_globalCursor) {
qCDebug(qLcEglfsKmsDebug, "Destroying global GBM mouse cursor");
delete m_globalCursor;
- m_globalCursor = Q_NULLPTR;
+ m_globalCursor = nullptr;
}
}
-void QEglFSKmsGbmDevice::handleDrmEvent()
-{
- drmEventContext drmEvent;
- memset(&drmEvent, 0, sizeof(drmEvent));
- drmEvent.version = 2;
- drmEvent.vblank_handler = nullptr;
- drmEvent.page_flip_handler = pageFlipHandler;
-
- drmHandleEvent(fd(), &drmEvent);
-}
-
QPlatformScreen *QEglFSKmsGbmDevice::createScreen(const QKmsOutput &output)
{
- QEglFSKmsGbmScreen *screen = new QEglFSKmsGbmScreen(this, output);
+ QEglFSKmsGbmScreen *screen = new QEglFSKmsGbmScreen(this, output, false);
if (!m_globalCursor && screenConfig()->hwCursor()) {
qCDebug(qLcEglfsKmsDebug, "Creating new global GBM mouse cursor");
@@ -161,4 +139,20 @@ QPlatformScreen *QEglFSKmsGbmDevice::createScreen(const QKmsOutput &output)
return screen;
}
+QPlatformScreen *QEglFSKmsGbmDevice::createHeadlessScreen()
+{
+ return new QEglFSKmsGbmScreen(this, QKmsOutput(), true);
+}
+
+void QEglFSKmsGbmDevice::registerScreenCloning(QPlatformScreen *screen,
+ QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen)
+{
+ if (!screenThisScreenClones && screensCloningThisScreen.isEmpty())
+ return;
+
+ QEglFSKmsGbmScreen *gbmScreen = static_cast<QEglFSKmsGbmScreen *>(screen);
+ gbmScreen->initCloning(screenThisScreenClones, screensCloningThisScreen);
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h
index 08ca28d48e..518e2ce58b 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmdevice.h
@@ -65,9 +65,11 @@ public:
QPlatformCursor *globalCursor() const;
void destroyGlobalCursor();
- void handleDrmEvent();
-
QPlatformScreen *createScreen(const QKmsOutput &output) override;
+ QPlatformScreen *createHeadlessScreen() override;
+ void registerScreenCloning(QPlatformScreen *screen,
+ QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen) override;
private:
Q_DISABLE_COPY(QEglFSKmsGbmDevice)
@@ -75,12 +77,6 @@ private:
gbm_device *m_gbm_device;
QEglFSKmsGbmCursor *m_globalCursor;
-
- static void pageFlipHandler(int fd,
- unsigned int sequence,
- unsigned int tv_sec,
- unsigned int tv_usec,
- void *user_data);
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
index 058791e473..402338197d 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmintegration.cpp
@@ -43,21 +43,13 @@
#include "qeglfskmsgbmdevice.h"
#include "qeglfskmsgbmscreen.h"
#include "qeglfskmsgbmcursor.h"
-#include "private/qeglfswindow_p.h"
+#include "qeglfskmsgbmwindow.h"
#include "private/qeglfscursor_p.h"
-#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
-#include <QtEglSupport/private/qeglconvenience_p.h>
#include <QtCore/QLoggingCategory>
-#include <QtCore/QJsonDocument>
-#include <QtCore/QJsonObject>
-#include <QtCore/QJsonArray>
-#include <QtGui/qpa/qplatformwindow.h>
-#include <QtGui/qpa/qplatformcursor.h>
#include <QtGui/QScreen>
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
-#include <xf86drm.h>
-#include <xf86drmMode.h>
#include <gbm.h>
QT_BEGIN_NAMESPACE
@@ -105,7 +97,6 @@ EGLNativeWindowType QEglFSKmsGbmIntegration::createNativeOffscreenWindow(const Q
Q_UNUSED(format);
Q_ASSERT(device());
- qCDebug(qLcEglfsKmsDebug) << "Creating native off screen window";
gbm_surface *surface = gbm_surface_create(static_cast<QEglFSKmsGbmDevice *>(device())->gbmDevice(),
1, 1,
GBM_FORMAT_XRGB8888,
@@ -134,8 +125,7 @@ QPlatformCursor *QEglFSKmsGbmIntegration::createCursor(QPlatformScreen *screen)
void QEglFSKmsGbmIntegration::presentBuffer(QPlatformSurface *surface)
{
QWindow *window = static_cast<QWindow *>(surface->surface());
- QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(window->screen()->handle());
-
+ QEglFSKmsGbmScreen *screen = static_cast<QEglFSKmsGbmScreen *>(window->screen()->handle());
screen->flip();
}
@@ -160,46 +150,6 @@ QKmsDevice *QEglFSKmsGbmIntegration::createDevice()
return new QEglFSKmsGbmDevice(screenConfig(), path);
}
-class QEglFSKmsGbmWindow : public QEglFSWindow
-{
-public:
- QEglFSKmsGbmWindow(QWindow *w, const QEglFSKmsGbmIntegration *integration)
- : QEglFSWindow(w)
- , m_integration(integration)
- {}
- void resetSurface() override;
- const QEglFSKmsGbmIntegration *m_integration;
-};
-
-void QEglFSKmsGbmWindow::resetSurface()
-{
- QEglFSKmsGbmScreen *gbmScreen = static_cast<QEglFSKmsGbmScreen *>(screen());
- if (gbmScreen->surface()) {
- qWarning("Only single window per screen supported!");
- return;
- }
-
- EGLDisplay display = gbmScreen->display();
- QSurfaceFormat platformFormat = m_integration->surfaceFormatFor(window()->requestedFormat());
- m_config = QEglFSDeviceIntegration::chooseConfig(display, platformFormat);
- m_format = q_glFormatFromConfig(display, m_config, platformFormat);
- m_window = reinterpret_cast<EGLNativeWindowType>(gbmScreen->createSurface());
-
- PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
- const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
- if (extensions && (strstr(extensions, "EGL_KHR_platform_gbm") || strstr(extensions, "EGL_MESA_platform_gbm"))) {
- createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
- eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"));
- }
-
- if (createPlatformWindowSurface) {
- m_surface = createPlatformWindowSurface(display, m_config, reinterpret_cast<void *>(m_window), nullptr);
- } else {
- qCDebug(qLcEglfsKmsDebug, "No eglCreatePlatformWindowSurface for GBM, falling back to eglCreateWindowSurface");
- m_surface = eglCreateWindowSurface(display, m_config, m_window, nullptr);
- }
-}
-
QEglFSWindow *QEglFSKmsGbmIntegration::createWindow(QWindow *window) const
{
return new QEglFSKmsGbmWindow(window, this);
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
index 87fb3146c7..4742143121 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
-** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2016 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
@@ -55,6 +55,18 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+static inline uint32_t drmFormatToGbmFormat(uint32_t drmFormat)
+{
+ Q_ASSERT(DRM_FORMAT_XRGB8888 == GBM_FORMAT_XRGB8888);
+ return drmFormat;
+}
+
+static inline uint32_t gbmFormatToDrmFormat(uint32_t gbmFormat)
+{
+ Q_ASSERT(DRM_FORMAT_XRGB8888 == GBM_FORMAT_XRGB8888);
+ return gbmFormat;
+}
+
void QEglFSKmsGbmScreen::bufferDestroyedHandler(gbm_bo *bo, void *data)
{
FrameBuffer *fb = static_cast<FrameBuffer *>(data);
@@ -77,29 +89,34 @@ QEglFSKmsGbmScreen::FrameBuffer *QEglFSKmsGbmScreen::framebufferForBufferObject(
uint32_t width = gbm_bo_get_width(bo);
uint32_t height = gbm_bo_get_height(bo);
- uint32_t stride = gbm_bo_get_stride(bo);
- uint32_t handle = gbm_bo_get_handle(bo).u32;
+ uint32_t handles[4] = { gbm_bo_get_handle(bo).u32 };
+ uint32_t strides[4] = { gbm_bo_get_stride(bo) };
+ uint32_t offsets[4] = { 0 };
+ uint32_t pixelFormat = gbmFormatToDrmFormat(gbm_bo_get_format(bo));
QScopedPointer<FrameBuffer> fb(new FrameBuffer);
+ qCDebug(qLcEglfsKmsDebug, "Adding FB, size %ux%u, DRM format 0x%x", width, height, pixelFormat);
- int ret = drmModeAddFB(device()->fd(), width, height, 24, 32,
- stride, handle, &fb->fb);
+ int ret = drmModeAddFB2(device()->fd(), width, height, pixelFormat,
+ handles, strides, offsets, &fb->fb, 0);
if (ret) {
qWarning("Failed to create KMS FB!");
- return Q_NULLPTR;
+ return nullptr;
}
gbm_bo_set_user_data(bo, fb.data(), bufferDestroyedHandler);
return fb.take();
}
-QEglFSKmsGbmScreen::QEglFSKmsGbmScreen(QKmsDevice *device, const QKmsOutput &output)
- : QEglFSKmsScreen(device, output)
- , m_gbm_surface(Q_NULLPTR)
- , m_gbm_bo_current(Q_NULLPTR)
- , m_gbm_bo_next(Q_NULLPTR)
- , m_cursor(Q_NULLPTR)
+QEglFSKmsGbmScreen::QEglFSKmsGbmScreen(QKmsDevice *device, const QKmsOutput &output, bool headless)
+ : QEglFSKmsScreen(device, output, headless)
+ , m_gbm_surface(nullptr)
+ , m_gbm_bo_current(nullptr)
+ , m_gbm_bo_next(nullptr)
+ , m_flipPending(false)
+ , m_cursor(nullptr)
+ , m_cloneSource(nullptr)
{
}
@@ -114,6 +131,8 @@ QEglFSKmsGbmScreen::~QEglFSKmsGbmScreen()
QPlatformCursor *QEglFSKmsGbmScreen::cursor() const
{
QKmsScreenConfig *config = device()->screenConfig();
+ if (config->headless())
+ return nullptr;
if (config->hwCursor()) {
if (!config->separateScreens())
return static_cast<QEglFSKmsGbmDevice *>(device())->globalCursor();
@@ -132,47 +151,112 @@ QPlatformCursor *QEglFSKmsGbmScreen::cursor() const
gbm_surface *QEglFSKmsGbmScreen::createSurface()
{
if (!m_gbm_surface) {
- qCDebug(qLcEglfsKmsDebug) << "Creating window for screen" << name();
+ uint32_t gbmFormat = drmFormatToGbmFormat(m_output.drm_format);
+ qCDebug(qLcEglfsKmsDebug, "Creating gbm_surface for screen %s with format 0x%x", qPrintable(name()), gbmFormat);
m_gbm_surface = gbm_surface_create(static_cast<QEglFSKmsGbmDevice *>(device())->gbmDevice(),
rawGeometry().width(),
rawGeometry().height(),
- GBM_FORMAT_XRGB8888,
+ gbmFormat,
GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
}
- return m_gbm_surface;
+ return m_gbm_surface; // not owned, gets destroyed in QEglFSKmsGbmIntegration::destroyNativeWindow() via QEglFSKmsGbmWindow::invalidateSurface()
}
-void QEglFSKmsGbmScreen::destroySurface()
+void QEglFSKmsGbmScreen::resetSurface()
{
- if (m_gbm_bo_current) {
- gbm_bo_destroy(m_gbm_bo_current);
- m_gbm_bo_current = Q_NULLPTR;
- }
+ m_gbm_surface = nullptr;
+}
- if (m_gbm_bo_next) {
- gbm_bo_destroy(m_gbm_bo_next);
- m_gbm_bo_next = Q_NULLPTR;
+void QEglFSKmsGbmScreen::initCloning(QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen)
+{
+ // clone destinations need to know the clone source
+ const bool clonesAnother = screenThisScreenClones != nullptr;
+ if (clonesAnother && !screensCloningThisScreen.isEmpty()) {
+ qWarning("QEglFSKmsGbmScreen %s cannot be clone source and destination at the same time", qPrintable(name()));
+ return;
}
+ if (clonesAnother)
+ m_cloneSource = static_cast<QEglFSKmsGbmScreen *>(screenThisScreenClones);
+
+ // clone sources need to know their additional destinations
+ for (QPlatformScreen *s : screensCloningThisScreen) {
+ CloneDestination d;
+ d.screen = static_cast<QEglFSKmsGbmScreen *>(s);
+ m_cloneDests.append(d);
+ }
+}
+
+void QEglFSKmsGbmScreen::ensureModeSet(uint32_t fb)
+{
+ QKmsOutput &op(output());
+ const int fd = device()->fd();
+
+ if (!op.mode_set) {
+ op.mode_set = true;
+
+ bool doModeSet = true;
+ drmModeCrtcPtr currentMode = drmModeGetCrtc(fd, op.crtc_id);
+ const bool alreadySet = currentMode && !memcmp(&currentMode->mode, &op.modes[op.mode], sizeof(drmModeModeInfo));
+ if (currentMode)
+ drmModeFreeCrtc(currentMode);
+ if (alreadySet) {
+ static bool alwaysDoSet = qEnvironmentVariableIntValue("QT_QPA_EGLFS_ALWAYS_SET_MODE");
+ if (!alwaysDoSet) {
+ qCDebug(qLcEglfsKmsDebug, "Mode already set, skipping modesetting for screen %s", qPrintable(name()));
+ doModeSet = false;
+ }
+ }
- if (m_gbm_surface) {
- gbm_surface_destroy(m_gbm_surface);
- m_gbm_surface = Q_NULLPTR;
+ if (doModeSet) {
+ qCDebug(qLcEglfsKmsDebug, "Setting mode for screen %s", qPrintable(name()));
+ int ret = drmModeSetCrtc(fd,
+ op.crtc_id,
+ fb,
+ 0, 0,
+ &op.connector_id, 1,
+ &op.modes[op.mode]);
+
+ if (ret == 0)
+ setPowerState(PowerStateOn);
+ else
+ qErrnoWarning(errno, "Could not set DRM mode for screen %s", qPrintable(name()));
+ }
}
}
void QEglFSKmsGbmScreen::waitForFlip()
{
+ if (m_headless || m_cloneSource)
+ return;
+
// Don't lock the mutex unless we actually need to
if (!m_gbm_bo_next)
return;
QMutexLocker lock(&m_waitForFlipMutex);
- while (m_gbm_bo_next)
- static_cast<QEglFSKmsGbmDevice *>(device())->handleDrmEvent();
+ while (m_gbm_bo_next) {
+ drmEventContext drmEvent;
+ memset(&drmEvent, 0, sizeof(drmEvent));
+ drmEvent.version = 2;
+ drmEvent.vblank_handler = nullptr;
+ drmEvent.page_flip_handler = pageFlipHandler;
+ drmHandleEvent(device()->fd(), &drmEvent);
+ }
}
void QEglFSKmsGbmScreen::flip()
{
+ // For headless screen just return silently. It is not necessarily an error
+ // to end up here, so show no warnings.
+ if (m_headless)
+ return;
+
+ if (m_cloneSource) {
+ qWarning("Screen %s clones another screen. swapBuffers() not allowed.", qPrintable(name()));
+ return;
+ }
+
if (!m_gbm_surface) {
qWarning("Cannot sync before platform init!");
return;
@@ -185,60 +269,92 @@ void QEglFSKmsGbmScreen::flip()
}
FrameBuffer *fb = framebufferForBufferObject(m_gbm_bo_next);
+ ensureModeSet(fb->fb);
QKmsOutput &op(output());
const int fd = device()->fd();
- const uint32_t w = op.modes[op.mode].hdisplay;
- const uint32_t h = op.modes[op.mode].vdisplay;
-
- if (!op.mode_set) {
- int ret = drmModeSetCrtc(fd,
- op.crtc_id,
- fb->fb,
- 0, 0,
- &op.connector_id, 1,
- &op.modes[op.mode]);
-
- if (ret == -1) {
- qErrnoWarning(errno, "Could not set DRM mode!");
- } else {
- op.mode_set = true;
- setPowerState(PowerStateOn);
-
- if (!op.plane_set) {
- op.plane_set = true;
- if (op.wants_plane) {
- int ret = drmModeSetPlane(fd, op.plane_id, op.crtc_id,
- uint32_t(-1), 0,
- 0, 0, w, h,
- 0 << 16, 0 << 16, w << 16, h << 16);
- if (ret == -1)
- qErrnoWarning(errno, "drmModeSetPlane failed");
- }
- }
- }
- }
-
+ m_flipPending = true;
int ret = drmModePageFlip(fd,
op.crtc_id,
fb->fb,
DRM_MODE_PAGE_FLIP_EVENT,
this);
if (ret) {
- qErrnoWarning("Could not queue DRM page flip!");
+ qErrnoWarning("Could not queue DRM page flip on screen %s", qPrintable(name()));
+ m_flipPending = false;
gbm_surface_release_buffer(m_gbm_surface, m_gbm_bo_next);
- m_gbm_bo_next = Q_NULLPTR;
+ m_gbm_bo_next = nullptr;
+ return;
+ }
+
+ for (CloneDestination &d : m_cloneDests) {
+ if (d.screen != this) {
+ d.screen->ensureModeSet(fb->fb);
+ d.cloneFlipPending = true;
+ int ret = drmModePageFlip(fd,
+ d.screen->output().crtc_id,
+ fb->fb,
+ DRM_MODE_PAGE_FLIP_EVENT,
+ d.screen);
+ if (ret) {
+ qErrnoWarning("Could not queue DRM page flip for clone screen %s", qPrintable(name()));
+ d.cloneFlipPending = false;
+ }
+ }
}
}
+void QEglFSKmsGbmScreen::pageFlipHandler(int fd, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, void *user_data)
+{
+ Q_UNUSED(fd);
+ Q_UNUSED(sequence);
+ Q_UNUSED(tv_sec);
+ Q_UNUSED(tv_usec);
+
+ QEglFSKmsGbmScreen *screen = static_cast<QEglFSKmsGbmScreen *>(user_data);
+ screen->flipFinished();
+}
+
void QEglFSKmsGbmScreen::flipFinished()
{
+ if (m_cloneSource) {
+ m_cloneSource->cloneDestFlipFinished(this);
+ return;
+ }
+
+ m_flipPending = false;
+ updateFlipStatus();
+}
+
+void QEglFSKmsGbmScreen::cloneDestFlipFinished(QEglFSKmsGbmScreen *cloneDestScreen)
+{
+ for (CloneDestination &d : m_cloneDests) {
+ if (d.screen == cloneDestScreen) {
+ d.cloneFlipPending = false;
+ break;
+ }
+ }
+ updateFlipStatus();
+}
+
+void QEglFSKmsGbmScreen::updateFlipStatus()
+{
+ Q_ASSERT(!m_cloneSource);
+
+ if (m_flipPending)
+ return;
+
+ for (const CloneDestination &d : m_cloneDests) {
+ if (d.cloneFlipPending)
+ return;
+ }
+
if (m_gbm_bo_current)
gbm_surface_release_buffer(m_gbm_surface,
m_gbm_bo_current);
m_gbm_bo_current = m_gbm_bo_next;
- m_gbm_bo_next = Q_NULLPTR;
+ m_gbm_bo_next = nullptr;
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.h
index 341cc95bbe..f5a2122723 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmscreen.h
@@ -54,34 +54,54 @@ class QEglFSKmsGbmCursor;
class QEglFSKmsGbmScreen : public QEglFSKmsScreen
{
public:
- QEglFSKmsGbmScreen(QKmsDevice *device, const QKmsOutput &output);
+ QEglFSKmsGbmScreen(QKmsDevice *device, const QKmsOutput &output, bool headless);
~QEglFSKmsGbmScreen();
QPlatformCursor *cursor() const override;
- gbm_surface *surface() const { return m_gbm_surface; }
gbm_surface *createSurface();
- void destroySurface();
+ void resetSurface();
+
+ void initCloning(QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen);
void waitForFlip() override;
- void flip() override;
- void flipFinished() override;
+
+ void flip();
private:
+ void flipFinished();
+ void ensureModeSet(uint32_t fb);
+ void cloneDestFlipFinished(QEglFSKmsGbmScreen *cloneDestScreen);
+ void updateFlipStatus();
+
+ static void pageFlipHandler(int fd,
+ unsigned int sequence,
+ unsigned int tv_sec,
+ unsigned int tv_usec,
+ void *user_data);
+
gbm_surface *m_gbm_surface;
gbm_bo *m_gbm_bo_current;
gbm_bo *m_gbm_bo_next;
+ bool m_flipPending;
QScopedPointer<QEglFSKmsGbmCursor> m_cursor;
struct FrameBuffer {
- FrameBuffer() : fb(0) {}
- uint32_t fb;
+ uint32_t fb = 0;
};
static void bufferDestroyedHandler(gbm_bo *bo, void *data);
FrameBuffer *framebufferForBufferObject(gbm_bo *bo);
+ QEglFSKmsGbmScreen *m_cloneSource;
+ struct CloneDestination {
+ QEglFSKmsGbmScreen *screen = nullptr;
+ bool cloneFlipPending = false;
+ };
+ QVector<CloneDestination> m_cloneDests;
+
static QMutex m_waitForFlipMutex;
};
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp
new file mode 100644
index 0000000000..110a592dec
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsgbmwindow.h"
+#include "qeglfskmsgbmintegration.h"
+#include "qeglfskmsgbmscreen.h"
+
+#include <QtEglSupport/private/qeglconvenience_p.h>
+
+QT_BEGIN_NAMESPACE
+
+void QEglFSKmsGbmWindow::resetSurface()
+{
+ QEglFSKmsGbmScreen *gbmScreen = static_cast<QEglFSKmsGbmScreen *>(screen());
+ EGLDisplay display = gbmScreen->display();
+ QSurfaceFormat platformFormat = m_integration->surfaceFormatFor(window()->requestedFormat());
+ m_config = QEglFSDeviceIntegration::chooseConfig(display, platformFormat);
+ m_format = q_glFormatFromConfig(display, m_config, platformFormat);
+ // One fullscreen window per screen -> the native window is simply the gbm_surface the screen created.
+ m_window = reinterpret_cast<EGLNativeWindowType>(gbmScreen->createSurface());
+
+ PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
+ const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+ if (extensions && (strstr(extensions, "EGL_KHR_platform_gbm") || strstr(extensions, "EGL_MESA_platform_gbm"))) {
+ createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
+ eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"));
+ }
+
+ if (createPlatformWindowSurface) {
+ m_surface = createPlatformWindowSurface(display, m_config, reinterpret_cast<void *>(m_window), nullptr);
+ } else {
+ qCDebug(qLcEglfsKmsDebug, "No eglCreatePlatformWindowSurface for GBM, falling back to eglCreateWindowSurface");
+ m_surface = eglCreateWindowSurface(display, m_config, m_window, nullptr);
+ }
+}
+
+void QEglFSKmsGbmWindow::invalidateSurface()
+{
+ QEglFSKmsGbmScreen *gbmScreen = static_cast<QEglFSKmsGbmScreen *>(screen());
+ QEglFSWindow::invalidateSurface();
+ gbmScreen->resetSurface();
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.h
new file mode 100644
index 0000000000..a19cf7e8bc
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsgbmwindow.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSGBMWINDOW_H
+#define QEGLFSKMSGBMWINDOW_H
+
+#include "private/qeglfswindow_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsGbmIntegration;
+
+class QEglFSKmsGbmWindow : public QEglFSWindow
+{
+public:
+ QEglFSKmsGbmWindow(QWindow *w, const QEglFSKmsGbmIntegration *integration)
+ : QEglFSWindow(w),
+ m_integration(integration)
+ { }
+ void resetSurface() override;
+ void invalidateSurface() override;
+
+private:
+ const QEglFSKmsGbmIntegration *m_integration;
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLFSKMSGBMWINDOW_H
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp
index cca413ff2d..8c8e6260f1 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevice.cpp
@@ -58,7 +58,7 @@ bool QEglFSKmsEglDevice::open()
{
Q_ASSERT(fd() == -1);
- int fd = drmOpen(devicePath().toLocal8Bit().constData(), Q_NULLPTR);
+ int fd = drmOpen(devicePath().toLocal8Bit().constData(), nullptr);
if (Q_UNLIKELY(fd < 0))
qFatal("Could not open DRM (NV) device");
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
index 3af21d768e..a67457a6a5 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldeviceintegration.cpp
@@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
QEglFSKmsEglDeviceIntegration::QEglFSKmsEglDeviceIntegration()
: m_egl_device(EGL_NO_DEVICE_EXT)
- , m_funcs(Q_NULLPTR)
+ , m_funcs(nullptr)
{
qCDebug(qLcEglfsKmsDebug, "New DRM/KMS on EGLDevice integration created");
}
@@ -75,7 +75,7 @@ EGLDisplay QEglFSKmsEglDeviceIntegration::createDisplay(EGLNativeDisplayType nat
EGLDisplay display;
if (m_funcs->has_egl_platform_device) {
- display = m_funcs->get_platform_display(EGL_PLATFORM_DEVICE_EXT, nativeDisplay, Q_NULLPTR);
+ display = m_funcs->get_platform_display(EGL_PLATFORM_DEVICE_EXT, nativeDisplay, nullptr);
} else {
qWarning("EGL_EXT_platform_device not available, falling back to legacy path!");
display = eglGetDisplay(nativeDisplay);
@@ -162,7 +162,7 @@ void QEglFSKmsEglDeviceWindow::resetSurface()
qCDebug(qLcEglfsKmsDebug, "Could not query number of EGLStream FIFO frames");
}
- if (!m_integration->m_funcs->get_output_layers(display, Q_NULLPTR, Q_NULLPTR, 0, &count) || count == 0) {
+ if (!m_integration->m_funcs->get_output_layers(display, nullptr, nullptr, 0, &count) || count == 0) {
qWarning("No output layers found");
return;
}
@@ -172,7 +172,7 @@ void QEglFSKmsEglDeviceWindow::resetSurface()
QVector<EGLOutputLayerEXT> layers;
layers.resize(count);
EGLint actualCount;
- if (!m_integration->m_funcs->get_output_layers(display, Q_NULLPTR, layers.data(), count, &actualCount)) {
+ if (!m_integration->m_funcs->get_output_layers(display, nullptr, layers.data(), count, &actualCount)) {
qWarning("Failed to get layers");
return;
}
@@ -180,7 +180,7 @@ void QEglFSKmsEglDeviceWindow::resetSurface()
QEglFSKmsEglDeviceScreen *cur_screen = static_cast<QEglFSKmsEglDeviceScreen *>(screen());
Q_ASSERT(cur_screen);
QKmsOutput &output(cur_screen->output());
- const uint32_t wantedId = !output.wants_plane ? output.crtc_id : output.plane_id;
+ const uint32_t wantedId = !output.wants_forced_plane ? output.crtc_id : output.forced_plane_id;
qCDebug(qLcEglfsKmsDebug, "Searching for id: %d", wantedId);
EGLOutputLayerEXT layer = EGL_NO_OUTPUT_LAYER_EXT;
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
index a27c89faab..531b73d1dc 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/qeglfskmsegldevicescreen.cpp
@@ -105,12 +105,12 @@ void QEglFSKmsEglDeviceScreen::waitForFlip()
qErrnoWarning(errno, "drmModeSetCrtc failed");
}
- if (!op.plane_set) {
- op.plane_set = true;
+ if (!op.forced_plane_set) {
+ op.forced_plane_set = true;
- if (op.wants_plane) {
- qCDebug(qLcEglfsKmsDebug, "Setting plane %u", op.plane_id);
- int ret = drmModeSetPlane(fd, op.plane_id, op.crtc_id, uint32_t(-1), 0,
+ if (op.wants_forced_plane) {
+ qCDebug(qLcEglfsKmsDebug, "Setting plane %u", op.forced_plane_id);
+ int ret = drmModeSetPlane(fd, op.forced_plane_id, op.crtc_id, uint32_t(-1), 0,
0, 0, w, h,
0 << 16, 0 << 16, w << 16, h << 16);
if (ret == -1)
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro
index 88cf6db33b..4d1321079c 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/eglfs_kms_support.pro
@@ -19,4 +19,5 @@ SOURCES += $$PWD/qeglfskmsintegration.cpp \
HEADERS += $$PWD/qeglfskmsintegration.h \
$$PWD/qeglfskmsdevice.h \
- $$PWD/qeglfskmsscreen.h
+ $$PWD/qeglfskmsscreen.h \
+ $$PWD/qeglfskmshelpers.h
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmshelpers.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmshelpers.h
new file mode 100644
index 0000000000..c9e5f04a7b
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmshelpers.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSHELPERS_H
+#define QEGLFSKMSHELPERS_H
+
+#include <QString>
+
+QT_BEGIN_NAMESPACE
+
+inline QString q_fourccToString(uint code)
+{
+ QString s;
+ s.reserve(4);
+ s.append(code & 0xff);
+ s.append((code >> 8) & 0xff);
+ s.append((code >> 16) & 0xff);
+ s.append((code >> 24) & 0xff);
+ return s;
+}
+
+QT_END_NAMESPACE
+
+#endif // QEGLFSKMSHELPERS_H
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp
index c77151181e..06bc272050 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.cpp
@@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(qLcEglfsKmsDebug, "qt.qpa.eglfs.kms")
QEglFSKmsIntegration::QEglFSKmsIntegration()
- : m_device(Q_NULLPTR),
+ : m_device(nullptr),
m_screenConfig(new QKmsScreenConfig)
{
}
@@ -78,7 +78,7 @@ void QEglFSKmsIntegration::platformDestroy()
qCDebug(qLcEglfsKmsDebug, "platformDestroy: Closing DRM device");
m_device->close();
delete m_device;
- m_device = Q_NULLPTR;
+ m_device = nullptr;
}
EGLNativeDisplayType QEglFSKmsIntegration::platformDisplay() const
@@ -133,6 +133,24 @@ bool QEglFSKmsIntegration::supportsPBuffers() const
return m_screenConfig->supportsPBuffers();
}
+void *QEglFSKmsIntegration::nativeResourceForIntegration(const QByteArray &name)
+{
+ if (name == QByteArrayLiteral("dri_fd") && m_device)
+ return (void *) (qintptr) m_device->fd();
+
+ return nullptr;
+}
+
+void *QEglFSKmsIntegration::nativeResourceForScreen(const QByteArray &resource, QScreen *screen)
+{
+ QEglFSKmsScreen *s = static_cast<QEglFSKmsScreen *>(screen->handle());
+ if (s) {
+ if (resource == QByteArrayLiteral("dri_crtcid"))
+ return (void *) (qintptr) s->output().crtc_id;
+ }
+ return nullptr;
+}
+
QKmsDevice *QEglFSKmsIntegration::device() const
{
return m_device;
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h
index 9955616919..e2c37f60fc 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsintegration.h
@@ -69,6 +69,8 @@ public:
bool hasCapability(QPlatformIntegration::Capability cap) const override;
void waitForVSync(QPlatformSurface *surface) const override;
bool supportsPBuffers() const override;
+ void *nativeResourceForIntegration(const QByteArray &name) override;
+ void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen) override;
QKmsDevice *device() const;
QKmsScreenConfig *screenConfig() const;
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
index 734f5cd611..5e45b42abe 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp
@@ -1,7 +1,7 @@
/****************************************************************************
**
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
-** Copyright (C) 2016 The Qt Company Ltd.
** Copyright (C) 2016 Pelagicore AG
** Contact: https://www.qt.io/licensing/
**
@@ -68,12 +68,13 @@ private:
QEglFSKmsScreen *m_screen;
};
-QEglFSKmsScreen::QEglFSKmsScreen(QKmsDevice *device, const QKmsOutput &output)
+QEglFSKmsScreen::QEglFSKmsScreen(QKmsDevice *device, const QKmsOutput &output, bool headless)
: QEglFSScreen(static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration())->display())
, m_device(device)
, m_output(output)
, m_powerState(PowerStateOn)
, m_interruptHandler(new QEglFSKmsInterruptHandler(this))
+ , m_headless(headless)
{
m_siblings << this; // gets overridden later
@@ -109,6 +110,9 @@ void QEglFSKmsScreen::setVirtualPosition(const QPoint &pos)
// geometry() calls rawGeometry() and may apply additional transforms.
QRect QEglFSKmsScreen::rawGeometry() const
{
+ if (m_headless)
+ return QRect(QPoint(0, 0), m_device->screenConfig()->headlessSize());
+
const int mode = m_output.mode;
return QRect(m_pos.x(), m_pos.y(),
m_output.modes[mode].hdisplay,
@@ -117,12 +121,30 @@ QRect QEglFSKmsScreen::rawGeometry() const
int QEglFSKmsScreen::depth() const
{
- return 32;
+ return format() == QImage::Format_RGB16 ? 16 : 32;
}
QImage::Format QEglFSKmsScreen::format() const
{
- return QImage::Format_RGB32;
+ // the result can be slightly incorrect, it won't matter in practice
+ switch (m_output.drm_format) {
+ case DRM_FORMAT_ARGB8888:
+ case DRM_FORMAT_ABGR8888:
+ return QImage::Format_ARGB32;
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_BGR565:
+ return QImage::Format_RGB16;
+ case DRM_FORMAT_XRGB2101010:
+ return QImage::Format_RGB30;
+ case DRM_FORMAT_XBGR2101010:
+ return QImage::Format_BGR30;
+ case DRM_FORMAT_ARGB2101010:
+ return QImage::Format_A2RGB30_Premultiplied;
+ case DRM_FORMAT_ABGR2101010:
+ return QImage::Format_A2BGR30_Premultiplied;
+ default:
+ return QImage::Format_RGB32;
+ }
}
QSizeF QEglFSKmsScreen::physicalSize() const
@@ -159,7 +181,7 @@ Qt::ScreenOrientation QEglFSKmsScreen::orientation() const
QString QEglFSKmsScreen::name() const
{
- return m_output.name;
+ return !m_headless ? m_output.name : QStringLiteral("qt_Headless");
}
QString QEglFSKmsScreen::manufacturer() const
@@ -177,22 +199,10 @@ QString QEglFSKmsScreen::serialNumber() const
return m_edid.serialNumber;
}
-void QEglFSKmsScreen::destroySurface()
-{
-}
-
void QEglFSKmsScreen::waitForFlip()
{
}
-void QEglFSKmsScreen::flip()
-{
-}
-
-void QEglFSKmsScreen::flipFinished()
-{
-}
-
void QEglFSKmsScreen::restoreMode()
{
m_output.restoreMode(m_device);
@@ -200,6 +210,9 @@ void QEglFSKmsScreen::restoreMode()
qreal QEglFSKmsScreen::refreshRate() const
{
+ if (m_headless)
+ return 60;
+
quint32 refresh = m_output.modes[m_output.mode].vrefresh;
return refresh > 0 ? refresh : 60;
}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h
index 4e09929189..7f395aacb7 100644
--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.h
@@ -56,7 +56,7 @@ class QEglFSKmsInterruptHandler;
class Q_EGLFS_EXPORT QEglFSKmsScreen : public QEglFSScreen
{
public:
- QEglFSKmsScreen(QKmsDevice *device, const QKmsOutput &output);
+ QEglFSKmsScreen(QKmsDevice *device, const QKmsOutput &output, bool headless = false);
~QEglFSKmsScreen();
void setVirtualPosition(const QPoint &pos);
@@ -89,11 +89,7 @@ public:
QKmsDevice *device() const { return m_device; }
- void destroySurface();
-
virtual void waitForFlip();
- virtual void flip();
- virtual void flipFinished();
QKmsOutput &output() { return m_output; }
void restoreMode();
@@ -115,6 +111,8 @@ protected:
PowerState m_powerState;
QEglFSKmsInterruptHandler *m_interruptHandler;
+
+ bool m_headless;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.json b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.json
new file mode 100644
index 0000000000..b898dc27cb
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "eglfs_kms_vsp2" ]
+}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.pro
new file mode 100644
index 0000000000..826c2f989f
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/eglfs_kms_vsp2.pro
@@ -0,0 +1,31 @@
+TARGET = qeglfs-kms-vsp2-integration
+
+PLUGIN_TYPE = egldeviceintegrations
+PLUGIN_CLASS_NAME = QEglFSKmsVsp2IntegrationPlugin
+load(qt_plugin)
+
+QT += core-private gui-private eglfsdeviceintegration-private eglfs_kms_support-private kms_support-private edid_support-private
+
+INCLUDEPATH += $$PWD/../../api $$PWD/../eglfs_kms_support
+
+# Avoid X11 header collision, use generic EGL native types
+DEFINES += QT_EGL_NO_X11
+
+QMAKE_USE += gbm drm v4l2
+CONFIG += egl
+QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
+
+SOURCES += $$PWD/qeglfskmsvsp2main.cpp \
+ $$PWD/qeglfskmsvsp2integration.cpp \
+ $$PWD/qeglfskmsvsp2device.cpp \
+ $$PWD/qeglfskmsvsp2screen.cpp \
+ $$PWD/qlinuxmediadevice.cpp \
+ $$PWD/qvsp2blendingdevice.cpp
+
+HEADERS += $$PWD/qeglfskmsvsp2integration.h \
+ $$PWD/qeglfskmsvsp2device.h \
+ $$PWD/qeglfskmsvsp2screen.h \
+ $$PWD/qlinuxmediadevice.h \
+ $$PWD/qvsp2blendingdevice.h
+
+OTHER_FILES += $$PWD/eglfs_kms.json
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.cpp
new file mode 100644
index 0000000000..44f855910c
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.cpp
@@ -0,0 +1,136 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsvsp2device.h"
+#include "qeglfskmsvsp2screen.h"
+
+#include "qeglfsintegration_p.h"
+
+#include <QtCore/QLoggingCategory>
+#include <QtCore/private/qcore_unix_p.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+QEglFSKmsVsp2Device::QEglFSKmsVsp2Device(QKmsScreenConfig *screenConfig, const QString &path)
+ : QEglFSKmsDevice(screenConfig, path)
+{
+}
+
+bool QEglFSKmsVsp2Device::open()
+{
+ Q_ASSERT(fd() == -1);
+ Q_ASSERT(m_gbm_device == nullptr);
+
+ int fd = qt_safe_open(devicePath().toLocal8Bit().constData(), O_RDWR | O_CLOEXEC);
+ if (fd == -1) {
+ qErrnoWarning("Could not open DRM device %s", qPrintable(devicePath()));
+ return false;
+ }
+
+ qCDebug(qLcEglfsKmsDebug) << "Creating GBM device for file descriptor" << fd
+ << "obtained from" << devicePath();
+ m_gbm_device = gbm_create_device(fd);
+ if (!m_gbm_device) {
+ qErrnoWarning("Could not create GBM device");
+ qt_safe_close(fd);
+ fd = -1;
+ return false;
+ }
+
+ setFd(fd);
+
+ return true;
+}
+
+void QEglFSKmsVsp2Device::close()
+{
+ // Note: screens are gone at this stage.
+
+ if (m_gbm_device) {
+ gbm_device_destroy(m_gbm_device);
+ m_gbm_device = nullptr;
+ }
+
+ if (fd() != -1) {
+ qt_safe_close(fd());
+ setFd(-1);
+ }
+}
+
+void *QEglFSKmsVsp2Device::nativeDisplay() const
+{
+ return m_gbm_device;
+}
+
+gbm_device * QEglFSKmsVsp2Device::gbmDevice() const
+{
+ return m_gbm_device;
+}
+
+QPlatformScreen *QEglFSKmsVsp2Device::createScreen(const QKmsOutput &output)
+{
+ auto *screen = new QEglFSKmsVsp2Screen(this, output);
+
+ return screen;
+}
+
+QPlatformScreen *QEglFSKmsVsp2Device::createHeadlessScreen()
+{
+ qWarning() << Q_FUNC_INFO << "Not implemented yet";
+ return nullptr;
+}
+
+void QEglFSKmsVsp2Device::registerScreenCloning(QPlatformScreen *screen,
+ QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen)
+{
+ Q_UNUSED(screen);
+ qWarning() << Q_FUNC_INFO << "Not implemented yet";
+ if (!screenThisScreenClones && screensCloningThisScreen.isEmpty())
+ return;
+
+// auto *vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen);
+// vsp2Screen->initCloning(screenThisScreenClones, screensCloningThisScreen);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.h
new file mode 100644
index 0000000000..c795fa4005
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2device.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSVSP2DEVICE_H
+#define QEGLFSKMSVSP2DEVICE_H
+
+#include <qeglfskmsdevice.h>
+
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsScreen;
+
+class QEglFSKmsVsp2Device: public QEglFSKmsDevice
+{
+public:
+ QEglFSKmsVsp2Device(QKmsScreenConfig *screenConfig, const QString &path);
+
+ bool open() override;
+ void close() override;
+
+ void *nativeDisplay() const override;
+ gbm_device *gbmDevice() const;
+
+ QPlatformScreen *createScreen(const QKmsOutput &output) override;
+ QPlatformScreen *createHeadlessScreen() override;
+ void registerScreenCloning(QPlatformScreen *screen,
+ QPlatformScreen *screenThisScreenClones,
+ const QVector<QPlatformScreen *> &screensCloningThisScreen) override;
+
+private:
+ Q_DISABLE_COPY(QEglFSKmsVsp2Device)
+
+ gbm_device *m_gbm_device = nullptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLFSKMSVSP2DEVICE_H
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.cpp
new file mode 100644
index 0000000000..0d9b6b6290
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.cpp
@@ -0,0 +1,250 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsvsp2integration.h"
+#include "qeglfskmsvsp2device.h"
+#include "qeglfskmsvsp2screen.h"
+#include "private/qeglfswindow_p.h"
+
+#include <QtDeviceDiscoverySupport/private/qdevicediscovery_p.h>
+#include <QtEglSupport/private/qeglconvenience_p.h>
+#include <QtCore/QLoggingCategory>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+#include <QtCore/QJsonArray>
+#include <QtGui/qpa/qplatformwindow.h>
+#include <QtGui/QScreen>
+#include <QtPlatformHeaders/qeglfsfunctions.h>
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+QEglFSKmsVsp2Integration::QEglFSKmsVsp2Integration()
+{
+ qCDebug(qLcEglfsKmsDebug, "New DRM/KMS via Vsp2 integration created");
+}
+
+#ifndef EGL_EXT_platform_base
+typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list);
+typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list);
+#endif
+
+#ifndef EGL_PLATFORM_GBM_KHR
+#define EGL_PLATFORM_GBM_KHR 0x31D7
+#endif
+
+EGLDisplay QEglFSKmsVsp2Integration::createDisplay(EGLNativeDisplayType nativeDisplay)
+{
+ qCDebug(qLcEglfsKmsDebug, "Querying EGLDisplay");
+ EGLDisplay display;
+
+ PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = nullptr;
+ const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+ if (extensions && (strstr(extensions, "EGL_KHR_platform_gbm") || strstr(extensions, "EGL_MESA_platform_gbm"))) {
+ getPlatformDisplay = reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(
+ eglGetProcAddress("eglGetPlatformDisplayEXT"));
+ }
+
+ if (getPlatformDisplay) {
+ display = getPlatformDisplay(EGL_PLATFORM_GBM_KHR, nativeDisplay, nullptr);
+ } else {
+ qCDebug(qLcEglfsKmsDebug, "No eglGetPlatformDisplay for GBM, falling back to eglGetDisplay");
+ display = eglGetDisplay(nativeDisplay);
+ }
+
+ return display;
+}
+
+EGLNativeWindowType QEglFSKmsVsp2Integration::createNativeOffscreenWindow(const QSurfaceFormat &format)
+{
+ Q_UNUSED(format);
+ Q_ASSERT(device());
+
+ gbm_surface *surface = gbm_surface_create(static_cast<QEglFSKmsVsp2Device *>(device())->gbmDevice(),
+ 1, 1,
+ GBM_FORMAT_XRGB8888,
+ GBM_BO_USE_RENDERING);
+
+ return reinterpret_cast<EGLNativeWindowType>(surface);
+}
+
+void QEglFSKmsVsp2Integration::destroyNativeWindow(EGLNativeWindowType window)
+{
+ gbm_surface *surface = reinterpret_cast<gbm_surface *>(window);
+ //TODO call screen destroysurface instead
+ gbm_surface_destroy(surface);
+}
+
+void QEglFSKmsVsp2Integration::presentBuffer(QPlatformSurface *surface)
+{
+ QWindow *window = static_cast<QWindow *>(surface->surface());
+ auto *screen = static_cast<QEglFSKmsVsp2Screen *>(window->screen()->handle());
+ screen->flip();
+}
+
+QFunctionPointer QEglFSKmsVsp2Integration::platformFunction(const QByteArray &function) const
+{
+ if (function == QEglFSFunctions::vsp2AddLayerTypeIdentifier())
+ return QFunctionPointer(addLayerStatic);
+ if (function == QEglFSFunctions::vsp2RemoveLayerTypeIdentifier())
+ return QFunctionPointer(removeLayerStatic);
+ if (function == QEglFSFunctions::vsp2SetLayerBufferTypeIdentifier())
+ return QFunctionPointer(setLayerBufferStatic);
+ if (function == QEglFSFunctions::vsp2SetLayerPositionTypeIdentifier())
+ return QFunctionPointer(setLayerPositionStatic);
+ if (function == QEglFSFunctions::vsp2SetLayerAlphaTypeIdentifier())
+ return QFunctionPointer(setLayerAlphaStatic);
+ if (function == QEglFSFunctions::vsp2AddBlendListenerTypeIdentifier())
+ return QFunctionPointer(addBlendListenerStatic);
+
+ return nullptr;
+}
+
+QKmsDevice *QEglFSKmsVsp2Integration::createDevice()
+{
+ QString path = screenConfig()->devicePath();
+ if (!path.isEmpty()) {
+ qCDebug(qLcEglfsKmsDebug) << "VSP2: Using DRM device" << path << "specified in config file";
+ } else {
+ QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask);
+ const QStringList devices = d->scanConnectedDevices();
+ qCDebug(qLcEglfsKmsDebug) << "Found the following video devices:" << devices;
+ d->deleteLater();
+
+ if (Q_UNLIKELY(devices.isEmpty()))
+ qFatal("Could not find DRM device!");
+
+ path = devices.first();
+ qCDebug(qLcEglfsKmsDebug) << "Using" << path;
+ }
+
+ return new QEglFSKmsVsp2Device(screenConfig(), path);
+}
+
+int QEglFSKmsVsp2Integration::addLayerStatic(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint pixelFormat, uint bytesPerLine)
+{
+ auto vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen->handle());
+ return vsp2Screen->addLayer(dmabufFd, size, position, pixelFormat, bytesPerLine);
+}
+
+bool QEglFSKmsVsp2Integration::removeLayerStatic(const QScreen *screen, int id)
+{
+ auto vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen->handle());
+ return vsp2Screen->removeLayer(id);
+}
+
+void QEglFSKmsVsp2Integration::setLayerBufferStatic(const QScreen *screen, int id, int dmabufFd)
+{
+ auto vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen->handle());
+ vsp2Screen->setLayerBuffer(id, dmabufFd);
+}
+
+void QEglFSKmsVsp2Integration::setLayerPositionStatic(const QScreen *screen, int id, const QPoint &position)
+{
+ auto vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen->handle());
+ vsp2Screen->setLayerPosition(id, position);
+}
+
+void QEglFSKmsVsp2Integration::setLayerAlphaStatic(const QScreen *screen, int id, qreal alpha)
+{
+ auto vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen->handle());
+ vsp2Screen->setLayerAlpha(id, alpha);
+}
+
+void QEglFSKmsVsp2Integration::addBlendListenerStatic(const QScreen *screen, void(*callback)())
+{
+ auto vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen->handle());
+ vsp2Screen->addBlendListener(callback);
+}
+
+class QEglFSKmsVsp2Window : public QEglFSWindow
+{
+public:
+ QEglFSKmsVsp2Window(QWindow *w, const QEglFSKmsVsp2Integration *integration)
+ : QEglFSWindow(w)
+ , m_integration(integration)
+ {}
+ void resetSurface() override;
+ void invalidateSurface() override;
+ const QEglFSKmsVsp2Integration *m_integration;
+};
+
+void QEglFSKmsVsp2Window::resetSurface()
+{
+ auto *vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen());
+ EGLDisplay display = vsp2Screen->display();
+ QSurfaceFormat platformFormat = m_integration->surfaceFormatFor(window()->requestedFormat());
+ m_config = QEglFSDeviceIntegration::chooseConfig(display, platformFormat);
+ m_format = q_glFormatFromConfig(display, m_config, platformFormat);
+ // One fullscreen window per screen -> the native window is simply the gbm_surface the screen created.
+ m_window = reinterpret_cast<EGLNativeWindowType>(vsp2Screen->createSurface());
+
+ PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC createPlatformWindowSurface = nullptr;
+ const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+ if (extensions && (strstr(extensions, "EGL_KHR_platform_gbm") || strstr(extensions, "EGL_MESA_platform_gbm"))) {
+ createPlatformWindowSurface = reinterpret_cast<PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC>(
+ eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"));
+ }
+
+ if (createPlatformWindowSurface) {
+ m_surface = createPlatformWindowSurface(display, m_config, reinterpret_cast<void *>(m_window), nullptr);
+ } else {
+ qCDebug(qLcEglfsKmsDebug, "No eglCreatePlatformWindowSurface for GBM, falling back to eglCreateWindowSurface");
+ m_surface = eglCreateWindowSurface(display, m_config, m_window, nullptr);
+ }
+}
+
+void QEglFSKmsVsp2Window::invalidateSurface()
+{
+ auto *vsp2Screen = static_cast<QEglFSKmsVsp2Screen *>(screen());
+ QEglFSWindow::invalidateSurface();
+ vsp2Screen->resetSurface();
+}
+
+QEglFSWindow *QEglFSKmsVsp2Integration::createWindow(QWindow *window) const
+{
+ return new QEglFSKmsVsp2Window(window, this);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.h
new file mode 100644
index 0000000000..b1a8a2edf3
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2integration.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSVSP2INTEGRATION_H
+#define QEGLFSKMSVSP2INTEGRATION_H
+
+#include "qeglfskmsintegration.h"
+#include <QtCore/QMap>
+#include <QtCore/QVariant>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsDevice;
+
+class QEglFSKmsVsp2Integration : public QEglFSKmsIntegration
+{
+public:
+ QEglFSKmsVsp2Integration();
+
+ EGLDisplay createDisplay(EGLNativeDisplayType nativeDisplay) override;
+ EGLNativeWindowType createNativeOffscreenWindow(const QSurfaceFormat &format) override;
+ void destroyNativeWindow(EGLNativeWindowType window) override;
+
+ void presentBuffer(QPlatformSurface *surface) override;
+ QEglFSWindow *createWindow(QWindow *window) const override;
+
+ QFunctionPointer platformFunction(const QByteArray &function) const override;
+
+protected:
+ QKmsDevice *createDevice() override;
+
+private:
+ static int addLayerStatic(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint pixelFormat, uint bytesPerLine);
+ static bool removeLayerStatic(const QScreen *screen, int id);
+ static void setLayerBufferStatic(const QScreen *screen, int id, int dmabufFd);
+ static void setLayerPositionStatic(const QScreen *screen, int id, const QPoint &position);
+ static void setLayerAlphaStatic(const QScreen *screen, int id, qreal alpha);
+ static void addBlendListenerStatic(const QScreen *screen, void(*callback)());
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLFSKMSVSP2INTEGRATION_H
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2main.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2main.cpp
new file mode 100644
index 0000000000..1345d38359
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2main.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "private/qeglfsdeviceintegration_p.h"
+#include "qeglfskmsvsp2integration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsVsp2IntegrationPlugin : public QEglFSDeviceIntegrationPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QEglFSDeviceIntegrationFactoryInterface_iid FILE "eglfs_kms_vsp2.json")
+
+public:
+ QEglFSDeviceIntegration *create() override { return new QEglFSKmsVsp2Integration; }
+};
+
+QT_END_NAMESPACE
+
+#include "qeglfskmsvsp2main.moc"
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.cpp
new file mode 100644
index 0000000000..88b401c920
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.cpp
@@ -0,0 +1,365 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsvsp2screen.h"
+#include "qeglfskmsvsp2device.h"
+#include <qeglfskmshelpers.h>
+
+#include <QtCore/QLoggingCategory>
+#include <QtGui/private/qguiapplication_p.h>
+
+#include <drm_fourcc.h>
+#include <xf86drm.h>
+#include <fcntl.h>
+
+//TODO move to qlinuxmediadevice?
+#include <cstdlib> //this needs to go before mediactl/mediactl.h because it uses size_t without including it
+extern "C" {
+#include <mediactl/mediactl.h>
+#include <mediactl/v4l2subdev.h> //needed in header for default arguments
+}
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+static inline uint32_t drmFormatToGbmFormat(uint32_t drmFormat)
+{
+ Q_ASSERT(DRM_FORMAT_XRGB8888 == GBM_FORMAT_XRGB8888);
+ return drmFormat;
+}
+
+static inline uint32_t gbmFormatToDrmFormat(uint32_t gbmFormat) //TODO: is this needed?
+{
+ Q_ASSERT(DRM_FORMAT_XRGB8888 == GBM_FORMAT_XRGB8888);
+ return gbmFormat;
+}
+
+void QEglFSKmsVsp2Screen::dmaBufferDestroyedHandler(gbm_bo *gbmBo, void *data)
+{
+ Q_UNUSED(gbmBo); //TODO: do we need to do something with it after all?
+ auto dmabuf = static_cast<DmaBuffer *>(data);
+ //TODO: need some extra cleanup here?
+ delete dmabuf;
+}
+
+QEglFSKmsVsp2Screen::DmaBuffer *QEglFSKmsVsp2Screen::dmaBufferForGbmBuffer(gbm_bo *gbmBo)
+{
+ auto existingBuffer = static_cast<DmaBuffer *>(gbm_bo_get_user_data(gbmBo));
+ if (existingBuffer)
+ return existingBuffer;
+
+ uint32_t handle = gbm_bo_get_handle(gbmBo).u32;
+ QScopedPointer<DmaBuffer> fb(new DmaBuffer);
+ int ret = drmPrimeHandleToFD(device()->fd(), handle, DRM_CLOEXEC, &fb->dmabufFd);
+ if (ret) {
+ qWarning("Failed to create dmabuf file descriptor for buffer with drmPrimeHandleToFd");
+ return nullptr;
+ }
+
+ gbm_bo_set_user_data(gbmBo, fb.data(), dmaBufferDestroyedHandler);
+ return fb.take();
+}
+
+QEglFSKmsVsp2Screen::QEglFSKmsVsp2Screen(QKmsDevice *device, const QKmsOutput &output)
+ : QEglFSKmsScreen(device, output)
+ , m_blender(new Blender(this))
+{
+}
+
+gbm_surface *QEglFSKmsVsp2Screen::createSurface()
+{
+ if (!m_gbmSurface) {
+ uint32_t gbmFormat = drmFormatToGbmFormat(m_output.drm_format);
+ qCDebug(qLcEglfsKmsDebug, "Creating gbm_surface for screen %s with format 0x%x", qPrintable(name()), gbmFormat);
+ Q_ASSERT(rawGeometry().isValid());
+ m_gbmSurface = gbm_surface_create(static_cast<QEglFSKmsVsp2Device *>(device())->gbmDevice(),
+ uint(rawGeometry().width()),
+ uint(rawGeometry().height()),
+ gbmFormat,
+ GBM_BO_USE_RENDERING);
+ }
+
+ if (!m_blendDevice)
+ initVsp2();
+
+ if (m_frameBuffers[m_backFb].dmabufFd == -1)
+ initDumbFrameBuffers();
+
+ return m_gbmSurface; // not owned, gets destroyed in QEglFSKmsGbmIntegration::destroyNativeWindow()
+}
+
+void QEglFSKmsVsp2Screen::resetSurface()
+{
+ m_gbmSurface = nullptr;
+}
+
+void QEglFSKmsVsp2Screen::initDumbFrameBuffers()
+{
+ for (auto &fb : m_frameBuffers)
+ initDumbFrameBuffer(fb);
+}
+
+void QEglFSKmsVsp2Screen::initVsp2()
+{
+ qCDebug(qLcEglfsKmsDebug, "Initializing Vsp2 hardware");
+ const QSize screenSize = rawGeometry().size();
+ m_blendDevice.reset(new QVsp2BlendingDevice(screenSize));
+
+ // Enable input for main buffer drawn by the compositor (always on)
+ const uint bytesPerLine = uint(screenSize.width()) * 4; //TODO: is this ok?
+ bool formatSet = m_blendDevice->enableInput(m_qtLayer, QRect(QPoint(), screenSize), m_output.drm_format, bytesPerLine);
+ if (!formatSet) {
+ const uint32_t fallbackFormat = DRM_FORMAT_ARGB8888;
+ qWarning() << "Failed to set format" << q_fourccToString(m_output.drm_format)
+ << "falling back to" << q_fourccToString(fallbackFormat);
+ formatSet = m_blendDevice->enableInput(m_qtLayer, QRect(QPoint(), screenSize), fallbackFormat, bytesPerLine);
+ if (!formatSet)
+ qFatal("Failed to set vsp2 blending format");
+ }
+}
+
+int QEglFSKmsVsp2Screen::addLayer(int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine)
+{
+ int index = m_blendDevice->enableInput(QRect(position, size), drmPixelFormat, bytesPerLine);
+ if (index != -1) {
+ m_blendDevice->setInputBuffer(index, dmabufFd);
+ int id = index; //TODO: maybe make id something independent of layer index?
+ qCDebug(qLcEglfsKmsDebug) << "Enabled extra layer for vsp input" << index;
+ return id;
+ }
+ qWarning() << "Failed to add layer";
+ return -1;
+}
+
+void QEglFSKmsVsp2Screen::setLayerBuffer(int id, int dmabufFd)
+{
+ int layerIndex = id;
+ m_blendDevice->setInputBuffer(layerIndex, dmabufFd);
+ if (!m_blendScheduled) {
+ m_blendScheduled = true;
+ QCoreApplication::postEvent(m_blender.data(), new QEvent(QEvent::User));
+ }
+}
+
+void QEglFSKmsVsp2Screen::setLayerPosition(int id, const QPoint &position)
+{
+ int layerIndex = id;
+ m_blendDevice->setInputPosition(layerIndex, position);
+}
+
+void QEglFSKmsVsp2Screen::setLayerAlpha(int id, qreal alpha)
+{
+ int layerIndex = id;
+ m_blendDevice->setInputAlpha(layerIndex, alpha);
+}
+
+bool QEglFSKmsVsp2Screen::removeLayer(int id)
+{
+ int layerIndex = id;
+ m_blendDevice->disableInput(layerIndex);
+ return true;
+}
+
+void QEglFSKmsVsp2Screen::addBlendListener(void (*callback)())
+{
+ m_blendFinishedCallbacks.append(callback);
+}
+
+void QEglFSKmsVsp2Screen::flip()
+{
+ if (!m_gbmSurface) {
+ qWarning("Cannot sync before platform init!");
+ return;
+ }
+
+ if (!m_blendScheduled && !m_nextGbmBo) {
+ m_nextGbmBo = gbm_surface_lock_front_buffer(m_gbmSurface);
+
+ if (!m_nextGbmBo) {
+ qWarning("Could not lock GBM surface front buffer!");
+ return;
+ }
+
+ m_blendScheduled = true;
+ QCoreApplication::postEvent(m_blender.data(), new QEvent(QEvent::User));
+ }
+}
+
+void QEglFSKmsVsp2Screen::ensureModeSet()
+{
+ const int driFd = device()->fd();
+ QKmsOutput &op(output());
+ if (!op.mode_set) {
+ int ret = drmModeSetCrtc(driFd,
+ op.crtc_id,
+ m_frameBuffers[m_backFb].drmBufferId,
+ 0, 0,
+ &op.connector_id, 1,
+ &op.modes[op.mode]);
+
+ if (ret == -1) {
+ qErrnoWarning(errno, "Could not set DRM mode!");
+ } else {
+ op.mode_set = true;
+ setPowerState(PowerStateOn);
+ }
+ }
+}
+
+void QEglFSKmsVsp2Screen::doDrmFlip()
+{
+ QKmsOutput &op(output());
+ const int driFd = device()->fd();
+
+ int ret = drmModePageFlip(driFd,
+ op.crtc_id,
+ m_frameBuffers[m_backFb].drmBufferId,
+ 0,
+ this);
+
+ if (ret)
+ qErrnoWarning("Could not queue DRM page flip on screen %s", qPrintable(name()));
+
+ m_backFb = (m_backFb + 1) % 2;
+}
+
+void QEglFSKmsVsp2Screen::blendAndFlipDrm()
+{
+ m_blendScheduled = false;
+ if (!m_nextGbmBo && !m_blendDevice->isDirty())
+ return;
+
+ FrameBuffer &backBuffer = m_frameBuffers[m_backFb];
+ if (backBuffer.dmabufFd == -1)
+ initDumbFrameBuffers();
+
+ if (m_nextGbmBo) {
+ Q_ASSERT(m_nextGbmBo != m_currentGbmBo);
+ int compositorBackBufferDmaFd = dmaBufferForGbmBuffer(m_nextGbmBo)->dmabufFd;
+ m_blendDevice->setInputBuffer(m_qtLayer, compositorBackBufferDmaFd);
+
+ if (m_currentGbmBo)
+ gbm_surface_release_buffer(m_gbmSurface, m_currentGbmBo);
+ m_currentGbmBo = m_nextGbmBo;
+ m_nextGbmBo = nullptr;
+ }
+
+ ensureModeSet();
+
+ if (!m_blendDevice)
+ initVsp2();
+
+ if (!m_blendDevice->isDirty())
+ return;
+
+ const int driFd = device()->fd();
+ drmVBlank vBlank;
+ vBlank.request.type = static_cast<drmVBlankSeqType>(DRM_VBLANK_RELATIVE | DRM_VBLANK_SECONDARY); //TODO: make secondary configurable (or automatic)
+ vBlank.request.sequence = 1;
+ vBlank.request.signal = 0;
+ drmWaitVBlank(driFd, &vBlank);
+
+ if (!m_blendDevice->blend(backBuffer.dmabufFd))
+ qWarning() << "Vsp2: blending failed";
+
+ for (auto cb : m_blendFinishedCallbacks)
+ cb();
+
+ doDrmFlip();
+}
+
+void QEglFSKmsVsp2Screen::initDumbFrameBuffer(FrameBuffer &fb)
+{
+ QKmsOutput &op(output());
+ const uint32_t width = op.modes[op.mode].hdisplay;
+ const uint32_t height = op.modes[op.mode].vdisplay;
+
+ Q_ASSERT(fb.dmabufFd == -1);
+ const uint32_t dumbBufferFlags = 0; //TODO: do we want some flags? What's possible?
+ const uint32_t bpp = 32;
+
+ drm_mode_create_dumb creq = {
+ height,
+ width,
+ bpp,
+ dumbBufferFlags,
+ 0, 0, 0 //return values
+ };
+
+ const int driFd = device()->fd();
+ if (drmIoctl(driFd, DRM_IOCTL_MODE_CREATE_DUMB, &creq) == -1)
+ qFatal("Failed to create dumb buffer: %s", strerror(errno));
+
+// uint32_t handles[4] = { gbm_bo_get_handle(bo).u32 };
+// uint32_t strides[4] = { gbm_bo_get_stride(bo) };
+// uint32_t offsets[4] = { 0 };
+// uint32_t pixelFormat = gbmFormatToDrmFormat(gbm_bo_get_format(bo));
+
+ //TODO: support additional planes
+ uint32_t gbmBoHandles[4] = { creq.handle, 0, 0, 0 };
+ uint32_t strides[4] = { creq.pitch, 0, 0, 0 };
+ uint32_t offsets[4] = { 0 };
+ uint32_t pixelFormat = DRM_FORMAT_ARGB8888; //TODO: support other formats?
+ uint32_t drmFlags = 0;
+
+ qCDebug(qLcEglfsKmsDebug) << "Adding FB" << QSize(width, height)
+ << ", DRM format" << q_fourccToString(pixelFormat);
+ int ret = drmModeAddFB2(driFd, width, height, pixelFormat,
+ gbmBoHandles, strides, offsets, &fb.drmBufferId, drmFlags);
+ if (ret)
+ qFatal("drmModeAddFB2 failed: %s", strerror(errno));
+
+ drmPrimeHandleToFD(driFd, gbmBoHandles[0], DRM_CLOEXEC, &fb.dmabufFd);
+}
+
+bool QEglFSKmsVsp2Screen::Blender::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::User:
+ m_screen->blendAndFlipDrm();
+ return true;
+ default:
+ return QObject::event(event);
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.h
new file mode 100644
index 0000000000..fa03e36785
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qeglfskmsvsp2screen.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2016 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSVSP2SCREEN_H
+#define QEGLFSKMSVSP2SCREEN_H
+
+#include "qeglfskmsscreen.h"
+#include "qvsp2blendingdevice.h"
+#include <QtCore/QMutex>
+
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsVsp2Screen : public QEglFSKmsScreen
+{
+public:
+ QEglFSKmsVsp2Screen(QKmsDevice *device, const QKmsOutput &output);
+
+ gbm_surface *createSurface();
+ void resetSurface();
+
+ void initDumbFrameBuffers();
+ void initVsp2();
+
+ //TODO: use a fixed index API instead of auto increment?
+ int addLayer(int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine);
+ void setLayerBuffer(int id, int dmabufFd);
+ void setLayerPosition(int id, const QPoint &position);
+ void setLayerAlpha(int id, qreal alpha);
+ bool removeLayer(int id);
+ void addBlendListener(void (*callback)());
+
+ void flip();
+ void blendAndFlipDrm();
+
+private:
+ class Blender : public QObject // This is a workaround we really would want the screen to be a QObject
+ {
+ public:
+ Blender(QEglFSKmsVsp2Screen *screen) : m_screen(screen) {}
+ ~Blender() override {}
+ bool event(QEvent *event) override;
+ QEglFSKmsVsp2Screen *m_screen = nullptr;
+ };
+ QScopedArrayPointer<Blender> m_blender;
+
+ gbm_surface *m_gbmSurface = nullptr;
+ gbm_bo *m_currentGbmBo = nullptr;
+ gbm_bo *m_nextGbmBo = nullptr;
+
+ QScopedPointer<QVsp2BlendingDevice> m_blendDevice;
+
+ struct FrameBuffer { //these are for buffers that have been blended by the bru
+ uint32_t drmBufferId = 0;
+ int dmabufFd = -1;
+ };
+ std::array<FrameBuffer, 2> m_frameBuffers;
+ uint m_backFb = 0;
+ void initDumbFrameBuffer(FrameBuffer &fb);
+ QVector<void (*)()> m_blendFinishedCallbacks;
+
+ struct DmaBuffer { //these are for qt buffers before blending with additional layers (gbm buffer data)
+ int dmabufFd = -1;
+ };
+ static void dmaBufferDestroyedHandler(gbm_bo *gbmBo, void *data);
+ DmaBuffer *dmaBufferForGbmBuffer(gbm_bo *gbmBo);
+
+ void ensureModeSet();
+ void doDrmFlip();
+
+ bool m_blendScheduled = false;
+ int m_qtLayer = 0; //TODO: add API for changing this
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLFSKMSVSP2SCREEN_H
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.cpp
new file mode 100644
index 0000000000..25b0c39050
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.cpp
@@ -0,0 +1,627 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfsintegration_p.h"
+#include "qlinuxmediadevice.h"
+#include <qeglfskmshelpers.h>
+
+#include <QtCore/QLoggingCategory>
+#include <QtCore/QSize>
+#include <QtCore/QRect>
+
+#include <sys/ioctl.h>
+#include <fcntl.h>
+
+#include <cstdlib> //this needs to go before mediactl/mediactl.h because it uses size_t without including it
+extern "C" {
+#include <mediactl/mediactl.h>
+#include <mediactl/v4l2subdev.h>
+}
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+static QString mediaBusFmtToString(uint code)
+{
+ switch (code) {
+ case MEDIA_BUS_FMT_FIXED: return "FIXED";
+ case MEDIA_BUS_FMT_RGB444_1X12: return "RGB444_1X12";
+// case MEDIA_BUS_FMT_RGB444_2X8_PADHI_B: return "RGB444_2X8_PADHI_B";
+// case MEDIA_BUS_FMT_RGB444_2X8_PADHI_L: return "RGB444_2X8_PADHI_L";
+// case MEDIA_BUS_FMT_RGB555_2X8_PADHI_B: return "RGB555_2X8_PADHI_B";
+// case MEDIA_BUS_FMT_RGB555_2X8_PADHI_L: return "RGB555_2X8_PADHI_L";
+ case MEDIA_BUS_FMT_RGB565_1X16: return "RGB565_1X16";
+ case MEDIA_BUS_FMT_BGR565_2X8_BE: return "BGR565_2X8_BE";
+ case MEDIA_BUS_FMT_BGR565_2X8_LE: return "BGR565_2X8_LE";
+ case MEDIA_BUS_FMT_RGB565_2X8_BE: return "RGB565_2X8_BE";
+ case MEDIA_BUS_FMT_RGB565_2X8_LE: return "RGB565_2X8_LE";
+ case MEDIA_BUS_FMT_RGB666_1X18: return "RGB666_1X18";
+ case MEDIA_BUS_FMT_RBG888_1X24: return "RBG888_1X24";
+// case MEDIA_BUS_FMT_RGB666_1X24_CPADH: return "RGB666_1X24_CPADH";
+ case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG: return "RGB666_1X7X3_SPWG";
+ case MEDIA_BUS_FMT_BGR888_1X24: return "BGR888_1X24";
+ case MEDIA_BUS_FMT_GBR888_1X24: return "GBR888_1X24";
+ case MEDIA_BUS_FMT_RGB888_1X24: return "RGB888_1X24";
+ case MEDIA_BUS_FMT_RGB888_2X12_BE: return "RGB888_2X12_BE";
+ case MEDIA_BUS_FMT_RGB888_2X12_LE: return "RGB888_2X12_LE";
+ case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG: return "RGB888_1X7X4_SPWG";
+// case MEDIA_BUS_FMT_RGB888_1X7X4_JEID: return "RGB888_1X7X4_JEID";
+ case MEDIA_BUS_FMT_ARGB8888_1X32: return "ARGB8888_1X32";
+ case MEDIA_BUS_FMT_RGB888_1X32_PADHI: return "RGB888_1X32_PADHI";
+// case MEDIA_BUS_FMT_RGB101010_1X30: return "RGB101010_1X30";
+// case MEDIA_BUS_FMT_RGB121212_1X36: return "RGB121212_1X36";
+// case MEDIA_BUS_FMT_RGB161616_1X48: return "RGB161616_1X48";
+ case MEDIA_BUS_FMT_Y8_1X8: return "Y8_1X8";
+ case MEDIA_BUS_FMT_UV8_1X8: return "UV8_1X8";
+ case MEDIA_BUS_FMT_UYVY8_1_5X8: return "UYVY8_1_5X8";
+ case MEDIA_BUS_FMT_VYUY8_1_5X8: return "VYUY8_1_5X8";
+ case MEDIA_BUS_FMT_YUYV8_1_5X8: return "YUYV8_1_5X8";
+ case MEDIA_BUS_FMT_YVYU8_1_5X8: return "YVYU8_1_5X8";
+ case MEDIA_BUS_FMT_UYVY8_2X8: return "UYVY8_2X8";
+ case MEDIA_BUS_FMT_VYUY8_2X8: return "VYUY8_2X8";
+ case MEDIA_BUS_FMT_YUYV8_2X8: return "YUYV8_2X8";
+ case MEDIA_BUS_FMT_YVYU8_2X8: return "YVYU8_2X8";
+ case MEDIA_BUS_FMT_Y10_1X10: return "Y10_1X10";
+ case MEDIA_BUS_FMT_UYVY10_2X10: return "UYVY10_2X10";
+ case MEDIA_BUS_FMT_VYUY10_2X10: return "VYUY10_2X10";
+ case MEDIA_BUS_FMT_YUYV10_2X10: return "YUYV10_2X10";
+ case MEDIA_BUS_FMT_YVYU10_2X10: return "YVYU10_2X10";
+ case MEDIA_BUS_FMT_Y12_1X12: return "Y12_1X12";
+ case MEDIA_BUS_FMT_UYVY12_2X12: return "UYVY12_2X12";
+ case MEDIA_BUS_FMT_VYUY12_2X12: return "VYUY12_2X12";
+ case MEDIA_BUS_FMT_YUYV12_2X12: return "YUYV12_2X12";
+ case MEDIA_BUS_FMT_YVYU12_2X12: return "YVYU12_2X12";
+ case MEDIA_BUS_FMT_UYVY8_1X16: return "UYVY8_1X16";
+ case MEDIA_BUS_FMT_VYUY8_1X16: return "VYUY8_1X16";
+ case MEDIA_BUS_FMT_YUYV8_1X16: return "YUYV8_1X16";
+ case MEDIA_BUS_FMT_YVYU8_1X16: return "YVYU8_1X16";
+ case MEDIA_BUS_FMT_YDYUYDYV8_1X16: return "YDYUYDYV8_1X16";
+ case MEDIA_BUS_FMT_UYVY10_1X20: return "UYVY10_1X20";
+ case MEDIA_BUS_FMT_VYUY10_1X20: return "VYUY10_1X20";
+ case MEDIA_BUS_FMT_YUYV10_1X20: return "YUYV10_1X20";
+ case MEDIA_BUS_FMT_YVYU10_1X20: return "YVYU10_1X20";
+ case MEDIA_BUS_FMT_VUY8_1X24: return "VUY8_1X24";
+ case MEDIA_BUS_FMT_YUV8_1X24: return "YUV8_1X24";
+// case MEDIA_BUS_FMT_UYYVYY8_0_5X24: return "UYYVYY8_0_5X24";
+ case MEDIA_BUS_FMT_UYVY12_1X24: return "UYVY12_1X24";
+ case MEDIA_BUS_FMT_VYUY12_1X24: return "VYUY12_1X24";
+ case MEDIA_BUS_FMT_YUYV12_1X24: return "YUYV12_1X24";
+ case MEDIA_BUS_FMT_YVYU12_1X24: return "YVYU12_1X24";
+ case MEDIA_BUS_FMT_YUV10_1X30: return "YUV10_1X30";
+// case MEDIA_BUS_FMT_UYYVYY10_0_5X30: return "UYYVYY10_0_5X30";
+ case MEDIA_BUS_FMT_AYUV8_1X32: return "AYUV8_1X32";
+// case MEDIA_BUS_FMT_UYYVYY12_0_5X36: return "UYYVYY12_0_5X36";
+// case MEDIA_BUS_FMT_YUV12_1X36: return "YUV12_1X36";
+// case MEDIA_BUS_FMT_YUV16_1X48: return "YUV16_1X48";
+// case MEDIA_BUS_FMT_UYYVYY16_0_5X48: return "UYYVYY16_0_5X48";
+ case MEDIA_BUS_FMT_SBGGR8_1X8: return "SBGGR8_1X8";
+ case MEDIA_BUS_FMT_SGBRG8_1X8: return "SGBRG8_1X8";
+ case MEDIA_BUS_FMT_SGRBG8_1X8: return "SGRBG8_1X8";
+ case MEDIA_BUS_FMT_SRGGB8_1X8: return "SRGGB8_1X8";
+ case MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8: return "SBGGR10_ALAW8_1X8";
+ case MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8: return "SGBRG10_ALAW8_1X8";
+ case MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8: return "SGRBG10_ALAW8_1X8";
+ case MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8: return "SRGGB10_ALAW8_1X8";
+ case MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8: return "SBGGR10_DPCM8_1X8";
+ case MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8: return "SGBRG10_DPCM8_1X8";
+ case MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8: return "SGRBG10_DPCM8_1X8";
+ case MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8: return "SRGGB10_DPCM8_1X8";
+// case MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_B: return "SBGGR10_2X8_PADHI_B";
+// case MEDIA_BUS_FMT_SBGGR10_2X8_PADHI_L: return "SBGGR10_2X8_PADHI_L";
+// case MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_B: return "SBGGR10_2X8_PADLO_B";
+// case MEDIA_BUS_FMT_SBGGR10_2X8_PADLO_L: return "SBGGR10_2X8_PADLO_L";
+ case MEDIA_BUS_FMT_SBGGR10_1X10: return "SBGGR10_1X10";
+ case MEDIA_BUS_FMT_SGBRG10_1X10: return "SGBRG10_1X10";
+ case MEDIA_BUS_FMT_SGRBG10_1X10: return "SGRBG10_1X10";
+ case MEDIA_BUS_FMT_SRGGB10_1X10: return "SRGGB10_1X10";
+ case MEDIA_BUS_FMT_SBGGR12_1X12: return "SBGGR12_1X12";
+ case MEDIA_BUS_FMT_SGBRG12_1X12: return "SGBRG12_1X12";
+ case MEDIA_BUS_FMT_SGRBG12_1X12: return "SGRBG12_1X12";
+ case MEDIA_BUS_FMT_SRGGB12_1X12: return "SRGGB12_1X12";
+ case MEDIA_BUS_FMT_SBGGR14_1X14: return "SBGGR14_1X14";
+ case MEDIA_BUS_FMT_SGBRG14_1X14: return "SGBRG14_1X14";
+ case MEDIA_BUS_FMT_SGRBG14_1X14: return "SGRBG14_1X14";
+ case MEDIA_BUS_FMT_SRGGB14_1X14: return "SRGGB14_1X14";
+ case MEDIA_BUS_FMT_SBGGR16_1X16: return "SBGGR16_1X16";
+ case MEDIA_BUS_FMT_SGBRG16_1X16: return "SGBRG16_1X16";
+ case MEDIA_BUS_FMT_SGRBG16_1X16: return "SGRBG16_1X16";
+ case MEDIA_BUS_FMT_SRGGB16_1X16: return "SRGGB16_1X16";
+ case MEDIA_BUS_FMT_JPEG_1X8: return "JPEG_1X8";
+ case MEDIA_BUS_FMT_S5C_UYVY_JPEG_1X8: return "S5C_UYVY_JPEG_1X8";
+ case MEDIA_BUS_FMT_AHSV8888_1X32: return "AHSV8888_1X32";
+ default: return QString(code);
+ }
+}
+
+static QDebug operator<<(QDebug debug, const struct v4l2_mbus_framefmt &format)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace() << "v4l2_mbus_framefmt("
+ << "code: " << mediaBusFmtToString(format.code) << ", "
+ << "size: " << format.width << "x" << format.height << ")";
+ return debug;
+}
+
+static QDebug operator<<(QDebug debug, const struct v4l2_pix_format_mplane &format)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace() << "v4l2_pix_format_mplane("
+ << "pixel format: " << q_fourccToString(format.pixelformat) << ", "
+ << "size: " << format.width << "x" << format.height << ", "
+ << "planes: " << format.num_planes << ")";
+ return debug;
+}
+
+QLinuxMediaDevice::QLinuxMediaDevice(const QString &devicePath)
+ : m_mediaDevice(media_device_new(devicePath.toStdString().c_str()))
+{
+ if (!m_mediaDevice)
+ qFatal("Couldn't get media device");
+
+ if (media_device_enumerate(m_mediaDevice))
+ qFatal("Couldn't enumerate media device");
+
+ m_info = media_get_info(m_mediaDevice);
+
+ qCDebug(qLcEglfsKmsDebug) << "Opened linux media device:"
+ << "\n\t Path:" << devicePath
+ << "\n\t Model:" << model()
+ << "\n\t Device name:" << deviceName();
+
+ resetLinks();
+}
+
+QLinuxMediaDevice::~QLinuxMediaDevice()
+{
+ if (m_mediaDevice)
+ media_device_unref(m_mediaDevice);
+}
+
+QString QLinuxMediaDevice::model()
+{
+ return QString(m_info->model);
+}
+
+QString QLinuxMediaDevice::deviceName()
+{
+ return QString(m_info->bus_info).split(":").last();
+}
+
+bool QLinuxMediaDevice::resetLinks()
+{
+ if (media_reset_links(m_mediaDevice)) {
+ qWarning() << "Could not reset media controller links.";
+ return false;
+ }
+ qCDebug(qLcEglfsKmsDebug) << "Reset media links";
+ return true;
+}
+
+struct media_link *QLinuxMediaDevice::parseLink(const QString &link)
+{
+ char *endp = nullptr;;
+ struct media_link *mediaLink = media_parse_link(m_mediaDevice, link.toStdString().c_str(), &endp);
+
+ if (!mediaLink)
+ qWarning() << "Failed to parse media link:" << link;
+
+ return mediaLink;
+}
+
+struct media_pad *QLinuxMediaDevice::parsePad(const QString &pad)
+{
+ struct media_pad *mediaPad = media_parse_pad(m_mediaDevice, pad.toStdString().c_str(), nullptr);
+
+ if (!mediaPad)
+ qWarning() << "Failed to parse media pad:" << pad;
+
+ return mediaPad;
+}
+
+bool QLinuxMediaDevice::enableLink(struct media_link *link)
+{
+ if (media_setup_link(m_mediaDevice, link->source, link->sink, 1)) {
+ qWarning() << "Failed to enable media link.";
+ return false;
+ }
+ return true;
+}
+
+bool QLinuxMediaDevice::disableLink(struct media_link *link)
+{
+ if (media_setup_link(m_mediaDevice, link->source, link->sink, 0)) {
+ qWarning() << "Failed to disable media link.";
+ return false;
+ }
+ return true;
+}
+
+media_entity *QLinuxMediaDevice::getEntity(const QString &name)
+{
+ struct media_entity *entity = media_get_entity_by_name(m_mediaDevice, name.toStdString().c_str(), name.length());
+
+ if (!entity)
+ qWarning() << "Failed to get media entity:" << name;
+
+ return entity;
+}
+
+int QLinuxMediaDevice::openVideoDevice(const QString &name)
+{
+ struct media_entity *entity = getEntity(name);
+ const char *deviceName = media_entity_get_devname(entity);
+ int fd = open(deviceName, O_RDWR);
+ qCDebug(qLcEglfsKmsDebug) << "Opened video device:" << deviceName << "with fd" << fd;
+ return fd;
+}
+
+QLinuxMediaDevice::CaptureSubDevice::CaptureSubDevice(QLinuxMediaDevice *mediaDevice, const QString &name)
+ : m_subdevFd(mediaDevice->openVideoDevice(name))
+{
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::setFormat(const QSize &size, uint32_t pixelFormat)
+{
+ Q_ASSERT(size.isValid());
+ struct v4l2_format format;
+ memset(&format, 0, sizeof(struct v4l2_format));
+ format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ if (ioctl(m_subdevFd, VIDIOC_G_FMT, &format) == -1) {
+ qErrnoWarning("VIDIOC_G_FMT for capture device failed");
+ return false;
+ }
+
+ format.fmt.pix_mp.width = static_cast<uint>(size.width());
+ format.fmt.pix_mp.height = static_cast<uint>(size.height());
+ format.fmt.pix_mp.field = V4L2_FIELD_NONE;
+ format.fmt.pix_mp.pixelformat = pixelFormat;
+ format.fmt.pix_mp.num_planes = 1;
+ format.fmt.pix_mp.flags = 0;
+ format.fmt.pix_mp.plane_fmt[0].bytesperline = 0;
+ format.fmt.pix_mp.plane_fmt[0].sizeimage = 0;
+
+ if (ioctl(m_subdevFd, VIDIOC_S_FMT, &format) == -1) {
+ qWarning() << "Capture device" << m_subdevFd << "VIDIOC_S_FMT with format" << format.fmt.pix_mp
+ << "failed:" << strerror(errno);
+ return false;
+ }
+
+ qCDebug(qLcEglfsKmsDebug) << "Capture device" << m_subdevFd << "format set:" << format.fmt.pix_mp;
+ return true;
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::clearBuffers()
+{
+ struct v4l2_requestbuffers requestBuffers;
+ memset(&requestBuffers, 0, sizeof(requestBuffers));
+ requestBuffers.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ requestBuffers.memory = V4L2_MEMORY_DMABUF;
+ requestBuffers.count = 0;
+ if (ioctl(m_subdevFd, VIDIOC_REQBUFS, &requestBuffers) == -1) {
+ qWarning("Capture device %d: VIDIOC_REQBUFS clear failed: %s", m_subdevFd, strerror(errno));
+ return false;
+ }
+ qCDebug(qLcEglfsKmsDebug, "Capture device %d: Deallocced buffers with REQBUF, now has %d buffers", m_subdevFd, requestBuffers.count);
+ Q_ASSERT(requestBuffers.count == 0);
+ return true;
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::requestBuffer()
+{
+ struct v4l2_requestbuffers requestBuffers;
+ memset(&requestBuffers, 0, sizeof(requestBuffers));
+ requestBuffers.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ requestBuffers.memory = V4L2_MEMORY_DMABUF;
+ requestBuffers.count = 1;
+ if (ioctl(m_subdevFd, VIDIOC_REQBUFS, &requestBuffers) == -1) {
+ if (errno == EINVAL)
+ qWarning("Capture device %d: Multi-planar capture or dma buffers not supported", m_subdevFd);
+ qWarning("Capture device %d: VIDIOC_REQBUFS failed: %s", m_subdevFd, strerror(errno));
+ return false;
+ }
+ Q_ASSERT(requestBuffers.count == 1);
+ return true;
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::queueBuffer(int dmabufFd, const QSize &bufferSize)
+{
+ const uint numPlanes = 1;
+ struct v4l2_buffer buffer;
+ memset(&buffer, 0, sizeof(buffer));
+ buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ buffer.memory = V4L2_MEMORY_DMABUF;
+ buffer.index = 0;
+
+ struct v4l2_plane planes[VIDEO_MAX_PLANES];
+ buffer.m.planes = planes;
+ buffer.length = numPlanes;
+ memset(planes, 0, sizeof(planes));
+ for (uint i = 0; i < numPlanes; i++) {
+ buffer.m.planes[i].m.fd = dmabufFd;
+ buffer.m.planes[i].length = static_cast<uint>(bufferSize.width() * bufferSize.height() * 4); //TODO: don't harcode bpp
+ buffer.m.planes[i].bytesused = static_cast<uint>(bufferSize.width() * bufferSize.height() * 4); //TODO: don't harcode bpp
+ }
+
+ if (ioctl(m_subdevFd, VIDIOC_QBUF, &buffer) == -1) {
+ qWarning("Capture device %d: VIDIOC_QBUF failed for dma buffer with fd %d: %s",
+ m_subdevFd, dmabufFd, strerror(errno));
+ return false;
+ }
+
+ return true;
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::dequeueBuffer()
+{
+ const int numPlanes = 1;
+ struct v4l2_buffer buffer;
+ struct v4l2_plane planes[VIDEO_MAX_PLANES];
+
+ memset(&buffer, 0, sizeof(buffer));
+ buffer.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ buffer.memory = V4L2_MEMORY_DMABUF;
+ buffer.index = 0;
+ buffer.m.planes = planes;
+ buffer.length = numPlanes;
+ memset(planes, 0, sizeof(planes));
+
+ if (ioctl(m_subdevFd, VIDIOC_DQBUF, &buffer) == -1) {
+ qWarning("Capture device %d: VIDIOC_DQBUF failed: %s", m_subdevFd, strerror(errno));
+ return false;
+ }
+
+ return true;
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::streamOn()
+{
+ return QLinuxMediaDevice::streamOn(m_subdevFd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
+}
+
+bool QLinuxMediaDevice::CaptureSubDevice::streamOff()
+{
+ return QLinuxMediaDevice::streamOff(m_subdevFd, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
+}
+
+QLinuxMediaDevice::OutputSubDevice::OutputSubDevice(QLinuxMediaDevice *mediaDevice, const QString &name)
+ : m_subdevFd(mediaDevice->openVideoDevice(name))
+{
+}
+
+bool QLinuxMediaDevice::OutputSubDevice::setFormat(const QSize &size, uint32_t pixelFormat, uint32_t bytesPerLine)
+{
+ Q_ASSERT(size.isValid());
+ struct v4l2_format format;
+ memset(&format, 0, sizeof(struct v4l2_format));
+ format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+ if (ioctl(m_subdevFd, VIDIOC_G_FMT, &format) == -1) {
+ qErrnoWarning("VIDIOC_G_FMT for output device failed");
+ return false;
+ }
+
+ format.fmt.pix_mp.width = static_cast<uint>(size.width());
+ format.fmt.pix_mp.height = static_cast<uint>(size.height());
+ format.fmt.pix_mp.field = V4L2_FIELD_NONE;
+ format.fmt.pix_mp.pixelformat = pixelFormat;
+ format.fmt.pix_mp.num_planes = 1;
+ format.fmt.pix_mp.flags = 0;
+ format.fmt.pix_mp.plane_fmt[0].bytesperline = bytesPerLine;
+ format.fmt.pix_mp.plane_fmt[0].sizeimage = 0;
+
+ if (ioctl(m_subdevFd, VIDIOC_S_FMT, &format) == -1) {
+ qWarning() << "Output device" << m_subdevFd << "VIDIOC_S_FMT with format" << format.fmt.pix_mp
+ << "failed:" << strerror(errno);
+ return false;
+ }
+
+ qCDebug(qLcEglfsKmsDebug) << "Output device device" << m_subdevFd << "format set:" << format.fmt.pix_mp;
+ return true;
+}
+
+bool QLinuxMediaDevice::OutputSubDevice::clearBuffers()
+{
+ struct v4l2_requestbuffers requestBuffers;
+ memset(&requestBuffers, 0, sizeof(requestBuffers));
+ requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+ requestBuffers.memory = V4L2_MEMORY_DMABUF;
+ requestBuffers.count = 0;
+ if (ioctl(m_subdevFd, VIDIOC_REQBUFS, &requestBuffers) == -1) {
+ qWarning("Output device %d: VIDIOC_REQBUFS clear failed: %s", m_subdevFd, strerror(errno));
+ return false;
+ }
+ qCDebug(qLcEglfsKmsDebug, "Output device %d: Deallocced buffers with REQBUF, now has %d buffers", m_subdevFd, requestBuffers.count);
+ Q_ASSERT(requestBuffers.count == 0);
+ return true;
+}
+
+bool QLinuxMediaDevice::OutputSubDevice::requestBuffer()
+{
+ struct v4l2_requestbuffers requestBuffers;
+ memset(&requestBuffers, 0, sizeof(requestBuffers));
+ requestBuffers.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+ requestBuffers.memory = V4L2_MEMORY_DMABUF;
+ requestBuffers.count = 1;
+ if (ioctl(m_subdevFd, VIDIOC_REQBUFS, &requestBuffers) == -1) {
+ if (errno == EINVAL)
+ qWarning("Output device %d: Multi-planar output or dma buffers not supported", m_subdevFd);
+ qWarning("Output device %d: VIDIOC_REQBUFS failed: %s", m_subdevFd, strerror(errno));
+ return false;
+ }
+ qCDebug(qLcEglfsKmsDebug) << "REQBUF returned" << requestBuffers.count << "buffers for output device" << m_subdevFd;
+ return true;
+}
+
+bool QLinuxMediaDevice::OutputSubDevice::queueBuffer(int dmabufFd, uint bytesUsed, uint length)
+{
+ const int numPlanes = 1;
+ struct v4l2_buffer buffer;
+ memset(&buffer, 0, sizeof(buffer));
+ buffer.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+ buffer.memory = V4L2_MEMORY_DMABUF;
+ buffer.index = 0;
+ buffer.length = numPlanes;
+ buffer.bytesused = bytesUsed;
+ buffer.field = V4L2_FIELD_NONE; //TODO: what is this?
+
+ struct v4l2_plane planes[numPlanes];
+ memset(planes, 0, sizeof(planes));
+ buffer.m.planes = planes;
+
+ for (int i = 0; i < numPlanes; i++) {
+ buffer.m.planes[i].m.fd = dmabufFd;
+ buffer.m.planes[i].length = length;
+ buffer.m.planes[i].bytesused = bytesUsed;
+ }
+
+ if (ioctl(m_subdevFd, VIDIOC_QBUF, &buffer) == -1) {
+ qWarning("Output device %d: VIDIOC_QBUF failed for dmabuf %d: %s", m_subdevFd, dmabufFd, strerror(errno));
+ return false;
+ }
+
+ if (!(buffer.flags & V4L2_BUF_FLAG_QUEUED)) {
+ qWarning() << "Queued flag not set on buffer for output device";
+ return false;
+ }
+
+ return true;
+}
+
+bool QLinuxMediaDevice::OutputSubDevice::streamOn()
+{
+ return QLinuxMediaDevice::streamOn(m_subdevFd, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
+}
+
+bool QLinuxMediaDevice::OutputSubDevice::streamOff()
+{
+ return QLinuxMediaDevice::streamOff(m_subdevFd, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
+}
+
+int QLinuxMediaDevice::openVideoDevice(media_pad *pad)
+{
+ const char *deviceName = media_entity_get_devname(pad->entity);
+ int fd = open(deviceName, O_RDWR);
+ qCDebug(qLcEglfsKmsDebug) << "Opened video device:" << deviceName << "with fd" << fd;
+ return fd;
+}
+
+bool QLinuxMediaDevice::setSubdevFormat(struct media_pad *pad, const QSize &size, uint32_t mbusFormat)
+{
+ Q_ASSERT(size.isValid());
+ struct v4l2_mbus_framefmt format;
+ format.width = static_cast<uint>(size.width());
+ format.height = static_cast<uint>(size.height());
+ format.code = mbusFormat;
+
+ if (v4l2_subdev_set_format(pad->entity, &format, pad->index, V4L2_SUBDEV_FORMAT_ACTIVE)) {
+ qWarning() << "Setting v4l2_subdev_set_format failed for format" << format;
+ return false;
+ }
+
+ if (format.code != mbusFormat) {
+ qWarning() << "Got" << mediaBusFmtToString(format.code) << "instead of"
+ << mediaBusFmtToString(mbusFormat) << "when setting subdevice format";
+ return false;
+ }
+
+ qCDebug(qLcEglfsKmsDebug) << "Set format to" << format << "for entity" << pad->entity << "index" << pad->index;
+ return true;
+}
+
+bool QLinuxMediaDevice::setSubdevAlpha(int subdevFd, qreal alpha)
+{
+ struct v4l2_control control;
+ control.id = V4L2_CID_ALPHA_COMPONENT;
+ control.value = static_cast<__s32>(alpha * 0xff);
+ if (ioctl(subdevFd, VIDIOC_S_CTRL, &control) == -1) {
+ qErrnoWarning("Setting alpha (%d) failed", control.value);
+ return false;
+ }
+ return true;
+}
+
+bool QLinuxMediaDevice::setSubdevSelection(struct media_pad *pad, const QRect &geometry, uint target)
+{
+ Q_ASSERT(geometry.isValid());
+ struct v4l2_rect rect;
+ rect.left = geometry.left();
+ rect.top = geometry.top();
+ rect.width = static_cast<uint>(geometry.width());
+ rect.height = static_cast<uint>(geometry.height());
+
+ int ret = v4l2_subdev_set_selection(pad->entity, &rect, pad->index, target, V4L2_SUBDEV_FORMAT_ACTIVE);
+ if (ret) {
+ qWarning() << "Setting subdev selection failed.";
+ return false;
+ }
+
+ return true;
+}
+
+bool QLinuxMediaDevice::setSubdevCrop(struct media_pad *pad, const QRect &geometry)
+{
+ return setSubdevSelection(pad, geometry, V4L2_SEL_TGT_CROP);
+}
+
+bool QLinuxMediaDevice::setSubdevCompose(struct media_pad *pad, const QRect &geometry)
+{
+ return setSubdevSelection(pad, geometry, V4L2_SEL_TGT_COMPOSE);
+}
+
+bool QLinuxMediaDevice::streamOn(int subDeviceFd, v4l2_buf_type bufferType)
+{
+ if (ioctl(subDeviceFd, VIDIOC_STREAMON, &bufferType) == -1) {
+ qWarning("VIDIOC_STREAMON failed for subdevice %d: %s", subDeviceFd, strerror(errno));
+ return false;
+ }
+
+ return true;
+}
+
+bool QLinuxMediaDevice::streamOff(int subDeviceFd, v4l2_buf_type bufferType)
+{
+ if (ioctl(subDeviceFd, VIDIOC_STREAMOFF, &bufferType) == -1) {
+ qWarning("VIDIOC_STREAMOFF failed for subdevice %d: %s", subDeviceFd, strerror(errno));
+ return false;
+ }
+
+ return true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.h
new file mode 100644
index 0000000000..26f863214b
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qlinuxmediadevice.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLINUXMEDIADEVICE_H
+#define QLINUXMEDIADEVICE_H
+
+#include <linux/v4l2-mediabus.h>
+
+#include <QtCore/qglobal.h>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+class QSize;
+class QRect;
+
+class QLinuxMediaDevice
+{
+public:
+ QLinuxMediaDevice(const QString &devicePath);
+ ~QLinuxMediaDevice();
+
+ QString model();
+ QString deviceName();
+ bool resetLinks();
+ struct media_link *parseLink(const QString &link);
+ struct media_pad *parsePad(const QString &pad);
+ bool enableLink(struct media_link *link);
+ bool disableLink(struct media_link *link);
+ struct media_entity *getEntity(const QString &name);
+ int openVideoDevice(const QString &name);
+
+ class CaptureSubDevice
+ {
+ public:
+ CaptureSubDevice(QLinuxMediaDevice *mediaDevice, const QString &name);
+ bool setFormat(const QSize &size, uint32_t pixelFormat = V4L2_PIX_FMT_ABGR32); //TODO: fix to match output device
+ bool clearBuffers();
+ bool requestBuffer();
+ bool queueBuffer(int dmabufFd, const QSize &bufferSize);
+ bool dequeueBuffer();
+ bool streamOn();
+ bool streamOff();
+ private:
+ int m_subdevFd = -1;
+ };
+
+ class OutputSubDevice
+ {
+ public:
+ OutputSubDevice(QLinuxMediaDevice *mediaDevice, const QString &name);
+ bool setFormat(const QSize &size, uint32_t pixelFormat, uint32_t bytesPerLine);
+ bool clearBuffers();
+ bool requestBuffer();
+ bool queueBuffer(int dmabufFd, uint bytesUsed, uint length);
+ bool streamOn();
+ bool streamOff();
+ private:
+ int m_subdevFd = -1;
+ };
+
+ static int openVideoDevice(media_pad *pad);
+
+ static bool setSubdevFormat(struct media_pad *pad, const QSize &size, uint32_t mbusFormat = MEDIA_BUS_FMT_ARGB8888_1X32);
+ static bool setSubdevAlpha(int subdevFd, qreal alpha);
+
+ static bool setSubdevSelection(struct media_pad *pad, const QRect &geometry, uint target);
+ static bool setSubdevCrop(struct media_pad *pad, const QRect &geometry);
+ static bool setSubdevCompose(struct media_pad *pad, const QRect &geometry);
+
+private:
+ static bool streamOn(int subDeviceFd, v4l2_buf_type bufferType);
+ static bool streamOff(int subDeviceFd, v4l2_buf_type bufferType);
+ struct media_device *m_mediaDevice = nullptr;
+ const struct media_device_info *m_info = nullptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QLINUXMEDIADEVICE_H
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.cpp
new file mode 100644
index 0000000000..879d312341
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.cpp
@@ -0,0 +1,333 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qvsp2blendingdevice.h"
+#include <qeglfskmshelpers.h>
+
+#include <QDebug>
+#include <QtCore/QLoggingCategory>
+
+#include <drm_fourcc.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+//TODO: is this the right place for these conversion functions?
+static inline uint drmFormatToV4l2PixelFormat(uint drmFormat) {
+ //ARGB8888 == ABGR32 because linux media list stuff in the opposite order, but the fourcc is the same
+ Q_ASSERT(DRM_FORMAT_ARGB8888 == V4L2_PIX_FMT_ABGR32);
+ return drmFormat;
+}
+
+static uint drmFormatToMediaBusFormat(uint drmFormat)
+{
+ switch (drmFormat) {
+ case DRM_FORMAT_RGB888:
+ return MEDIA_BUS_FMT_RGB888_1X24;
+ case DRM_FORMAT_BGR888:
+ return MEDIA_BUS_FMT_BGR888_1X24;
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_XBGR8888:
+// return MEDIA_BUS_FMT_RGB888_1X32_PADHI; // doesn't work on renesas m3, just use fallthrough to argb for now
+ case DRM_FORMAT_RGBX8888:
+ case DRM_FORMAT_BGRX8888:
+ case DRM_FORMAT_ARGB8888:
+ case DRM_FORMAT_ABGR8888:
+ case DRM_FORMAT_RGBA8888:
+ case DRM_FORMAT_BGRA8888:
+ return MEDIA_BUS_FMT_ARGB8888_1X32;
+ default:
+ qWarning() << "Unknown drm format" << q_fourccToString(drmFormat) << "defaulting to argb8888";
+ return MEDIA_BUS_FMT_ARGB8888_1X32;
+ }
+}
+
+QVsp2BlendingDevice::QVsp2BlendingDevice(const QSize &screenSize)
+ : m_mediaDevice("/dev/media0")
+ , m_screenSize(screenSize)
+{
+ QLinuxMediaDevice &md = m_mediaDevice;
+ QString deviceName = md.deviceName();
+
+ if (md.model() != QString("VSP2"))
+ qWarning() << "Unsupported media device model:" << md.model();
+
+ if (deviceName != "fe960000.vsp")
+ qWarning() << "Unknown media device name:" << deviceName;
+
+ const int numInputs = 5;
+
+ for (int i = 0; i < numInputs; ++i) {
+ Input input;
+ input.linkToBru = md.parseLink(QString("'%1 rpf.%2':1 -> '%1 bru':%2").arg(deviceName).arg(i));
+ input.inputFormatPad = md.parsePad(QString("'%1 rpf.%2':0").arg(deviceName).arg(i));
+ input.outputFormatPad = md.parsePad(QString("'%1 rpf.%2':1").arg(deviceName).arg(i));
+ input.outputFormatFd = QLinuxMediaDevice::openVideoDevice(input.outputFormatPad);
+ input.bruInputFormatPad = md.parsePad(QString("'%1 bru':%2").arg(deviceName).arg(i));
+ input.rpfInput = new QLinuxMediaDevice::OutputSubDevice(&md, QString("%1 rpf.%2 input").arg(deviceName).arg(i));
+ m_inputs.append(input);
+ }
+
+ m_wpfOutput = new QLinuxMediaDevice::CaptureSubDevice(&md, QString("%1 wpf.0 output").arg(deviceName));
+
+ // Setup links for output
+ md.enableLink(md.parseLink(QString("'%1 bru':5 -> '%1 wpf.0':0").arg(deviceName)));
+ md.enableLink(md.parseLink(QString("'%1 wpf.0':1 -> '%1 wpf.0 output':0").arg(deviceName)));
+
+ // Output pads
+ auto bruOutputFormatPad = md.parsePad(QString("'%1 bru':5").arg(deviceName));
+ auto wpfInputFormatPad = md.parsePad(QString("'%1 wpf.0':0").arg(deviceName));
+ auto wpfOutputFormatPad = md.parsePad(QString("'%1 wpf.0':1").arg(deviceName));
+
+ m_wpfOutput->setFormat(screenSize);
+ QLinuxMediaDevice::setSubdevFormat(bruOutputFormatPad, screenSize);
+ QLinuxMediaDevice::setSubdevFormat(wpfInputFormatPad, screenSize);
+ QLinuxMediaDevice::setSubdevFormat(wpfOutputFormatPad, screenSize);
+
+ m_wpfOutput->requestBuffer();
+}
+
+bool QVsp2BlendingDevice::enableInput(int i, const QRect &bufferGeometry, uint drmFormat, uint bytesPerLine)
+{
+ qCDebug(qLcEglfsKmsDebug) << "Blend unit: Enabling input" << i;
+ if (m_inputs[i].enabled) {
+ qWarning("Vsp2: Input %d already enabled", i);
+ return false;
+ }
+
+ if (!bufferGeometry.isValid()) { //TODO: bounds checking as well?
+ qWarning() << "Vsp2: Invalid buffer geometry";
+ return false;
+ }
+
+ Input &input = m_inputs[i];
+ if (!m_mediaDevice.enableLink(input.linkToBru))
+ return false;
+
+ uint pixelFormat = drmFormatToV4l2PixelFormat(drmFormat);
+ if (!setInputFormat(i, bufferGeometry, pixelFormat, bytesPerLine)) {
+ disableInput(i);
+ return false;
+ }
+
+ input.rpfInput->requestBuffer();
+ return true;
+}
+
+int QVsp2BlendingDevice::enableInput(const QRect &bufferGeometry, uint drmFormat, uint bytesPerLine)
+{
+ for (int i = 0; i < m_inputs.size(); ++i) {
+ if (!m_inputs[i].enabled)
+ return enableInput(i, bufferGeometry, drmFormat, bytesPerLine) ? i : -1;
+ }
+ qWarning() << "Vsp2: No more inputs available in blend unit";
+ return -1;
+}
+
+bool QVsp2BlendingDevice::disableInput(int i)
+{
+ qCDebug(qLcEglfsKmsDebug) << "Vsp2: disabling input" << i;
+ if (!m_inputs[i].enabled) {
+ qWarning("Vsp2: Input %d already disabled", i);
+ return false;
+ }
+ m_mediaDevice.disableLink(m_inputs[i].linkToBru);
+ m_inputs[i].rpfInput->clearBuffers();
+ m_inputs[i].enabled = false;
+ return true;
+}
+
+bool QVsp2BlendingDevice::setInputBuffer(int index, int dmabufFd)
+{
+ Input &input = m_inputs[index];
+
+ if (!input.enabled) {
+ qWarning() << "Vsp2: Can't queue on disabled input" << index;
+ return false;
+ }
+
+ // Don't queue the buffer yet, store it here and wait until blending
+ if (input.dmabuf.fd != dmabufFd) {
+ m_dirty = true;
+ input.dmabuf.fd = dmabufFd;
+ }
+ return true;
+}
+
+bool QVsp2BlendingDevice::setInputPosition(int index, const QPoint &position)
+{
+ Input &input = m_inputs[index];
+
+ if (input.geometry.topLeft() == position)
+ return true;
+
+ m_dirty = true;
+ input.geometry.moveTopLeft(position);
+ return QLinuxMediaDevice::setSubdevCompose(input.bruInputFormatPad, input.geometry);
+}
+
+bool QVsp2BlendingDevice::setInputAlpha(int index, qreal alpha)
+{
+ Input &input = m_inputs[index];
+ if (input.alpha == alpha)
+ return true;
+
+ m_dirty = true;
+ input.alpha = alpha;
+ return QLinuxMediaDevice::setSubdevAlpha(input.outputFormatFd, alpha);
+}
+
+bool QVsp2BlendingDevice::blend(int outputDmabufFd)
+{
+ if (!m_dirty)
+ qWarning("Blending without being dirty, should not be necessary");
+
+ if (!m_inputs[0].enabled) {
+ qWarning("Vsp2: Can't blend with layer 0 disabled");
+ return false;
+ }
+
+ // Queue dma input buffers
+ for (int i=0; i < m_inputs.size(); ++i) {
+ auto &input = m_inputs[i];
+ if (input.enabled) {
+ if (!input.rpfInput->queueBuffer(input.dmabuf.fd, input.dmabuf.bytesUsed, input.dmabuf.length)) {
+ qWarning() << "Vsp2: Failed to queue buffer for input" << i
+ << "with dmabuf" << input.dmabuf.fd
+ << "and size" << input.geometry.size();
+
+ if (!disableInput(i))
+ qWarning() << "Vsp2: Failed to disable input" << i;
+ }
+ }
+ }
+
+ if (!m_wpfOutput->queueBuffer(outputDmabufFd, m_screenSize)) {
+ qWarning() << "Vsp2: Failed to queue blending output buffer" << outputDmabufFd << m_screenSize;
+ return false;
+ }
+
+ if (!streamOn()) {
+ qWarning() << "Vsp2: Failed to start streaming";
+ return false;
+ }
+
+ if (!m_wpfOutput->dequeueBuffer()) {
+ qWarning() << "Vsp2: Failed to dequeue blending output buffer";
+ if (!streamOff())
+ qWarning() << "Vsp2: Failed to stop streaming when recovering after a broken blend.";
+ return false;
+ }
+
+ if (!streamOff()) {
+ qWarning() << "Vsp2: Failed to stop streaming";
+ return false;
+ }
+
+ m_dirty = false;
+ return true;
+}
+
+int QVsp2BlendingDevice::numInputs() const
+{
+ return m_inputs.size();
+}
+
+bool QVsp2BlendingDevice::streamOn()
+{
+ for (auto &input : m_inputs) {
+ if (input.enabled) {
+ if (!input.rpfInput->streamOn()) {
+ //TODO: perhaps it's better to try to continue with the other inputs?
+ return false;
+ }
+ }
+ }
+
+ return m_wpfOutput->streamOn();
+}
+
+bool QVsp2BlendingDevice::streamOff()
+{
+ bool succeeded = m_wpfOutput->streamOff();
+ for (auto &input : m_inputs) {
+ if (input.enabled)
+ succeeded &= input.rpfInput->streamOff();
+ }
+ return succeeded;
+}
+
+bool QVsp2BlendingDevice::setInputFormat(int i, const QRect &bufferGeometry, uint pixelFormat, uint bytesPerLine)
+{
+ Input &input = m_inputs[i];
+
+ Q_ASSERT(bufferGeometry.isValid());
+
+ const uint bpp = 4; //TODO: don't hardcode bpp, get it from pixelFormat?
+ input.enabled = true;
+ input.geometry = bufferGeometry;
+ input.dmabuf.bytesUsed = bpp * static_cast<uint>(bufferGeometry.width()) * static_cast<uint>(bufferGeometry.height());
+ input.dmabuf.length = static_cast<uint>(bufferGeometry.height()) * bytesPerLine;
+
+ const QSize size = bufferGeometry.size();
+
+ if (!input.rpfInput->setFormat(size, pixelFormat, bytesPerLine)) // rpf.x input
+ return false;
+
+ const uint mediaBusFormat = drmFormatToMediaBusFormat(pixelFormat);
+ if (!QLinuxMediaDevice::setSubdevFormat(input.inputFormatPad, size, mediaBusFormat)) // rpf.x:0
+ return false;
+
+ if (!QLinuxMediaDevice::setSubdevFormat(input.outputFormatPad, size, mediaBusFormat)) // rpf.x:1
+ return false;
+
+ if (!QLinuxMediaDevice::setSubdevFormat(input.bruInputFormatPad, size, mediaBusFormat)) // bru:x
+ return false;
+
+ if (!QLinuxMediaDevice::setSubdevCrop(input.inputFormatPad, QRect(QPoint(0, 0), size)))
+ return false;
+
+ if (!QLinuxMediaDevice::setSubdevCompose(input.bruInputFormatPad, bufferGeometry))
+ return false;
+
+ return true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.h
new file mode 100644
index 0000000000..be48954f47
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_vsp2/qvsp2blendingdevice.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QVSP2BLENDINGDEVICE_H
+#define QVSP2BLENDINGDEVICE_H
+
+#include <QtCore/QRect>
+#include <QtCore/QVector>
+#include <QtCore/qglobal.h>
+
+#include "qlinuxmediadevice.h"
+
+QT_BEGIN_NAMESPACE
+
+class QSize;
+
+class QVsp2BlendingDevice
+{
+public:
+ QVsp2BlendingDevice(const QSize& screenSize); //TODO: add support for output format as well?
+ bool enableInput(int i, const QRect &bufferGeometry, uint drmFormat, uint bytesPerLine);
+ int enableInput(const QRect &bufferGeometry, uint drmFormat, uint bytesPerLine);
+ bool disableInput(int i);
+ bool setInputBuffer(int index, int dmabufFd);
+ bool setInputPosition(int index, const QPoint &position);
+ bool setInputAlpha(int index, qreal alpha);
+ bool blend(int outputDmabufFd);
+ int numInputs() const;
+ bool isDirty() const { return m_dirty; }
+private:
+ bool streamOn();
+ bool streamOff();
+ bool setInputFormat(int i, const QRect &bufferGeometry, uint pixelFormat, uint bytesPerLine);
+ QLinuxMediaDevice m_mediaDevice;
+ QLinuxMediaDevice::CaptureSubDevice *m_wpfOutput = nullptr; // wpf output
+ struct Input {
+ bool enabled = false;
+ QRect geometry;
+ qreal alpha = 1;
+ struct {
+ int fd = -1;
+ uint bytesUsed = 0;
+ uint length = 0;
+ } dmabuf;
+ struct media_link *linkToBru = nullptr; //rpf.x:1 -> bru:x
+ struct media_pad *inputFormatPad = nullptr; // rpf.x:0
+ struct media_pad *outputFormatPad = nullptr; // rpf.x:1
+ int outputFormatFd = -1; // rpf.x:1 (again, because v4l2_subdev_* doesn't have a way to set alpha)
+ struct media_pad *bruInputFormatPad = nullptr; // bru:x
+ QLinuxMediaDevice::OutputSubDevice *rpfInput = nullptr; // rpf.x input
+ };
+ QVector<struct Input> m_inputs;
+ const QSize m_screenSize;
+ bool m_dirty = true;
+};
+
+QT_END_NAMESPACE
+
+#endif // QVSP2BLENDINGDEVICE
diff --git a/src/plugins/platforms/haiku/main.cpp b/src/plugins/platforms/haiku/main.cpp
index 02168d0165..841891970d 100644
--- a/src/plugins/platforms/haiku/main.cpp
+++ b/src/plugins/platforms/haiku/main.cpp
@@ -47,7 +47,7 @@ QPlatformIntegration *QHaikuIntegrationPlugin::create(const QString& system, con
if (!system.compare(QLatin1String("haiku"), Qt::CaseInsensitive))
return new QHaikuIntegration(paramList);
- return Q_NULLPTR;
+ return nullptr;
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/main.h b/src/plugins/platforms/haiku/main.h
index 82f3313652..e316b79d7c 100644
--- a/src/plugins/platforms/haiku/main.h
+++ b/src/plugins/platforms/haiku/main.h
@@ -47,7 +47,7 @@ class QHaikuIntegrationPlugin : public QPlatformIntegrationPlugin
Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "haiku.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QPlatformIntegration *create(const QString&, const QStringList&) override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuapplication.h b/src/plugins/platforms/haiku/qhaikuapplication.h
index 0696df8109..a9ea442691 100644
--- a/src/plugins/platforms/haiku/qhaikuapplication.h
+++ b/src/plugins/platforms/haiku/qhaikuapplication.h
@@ -49,8 +49,8 @@ class QHaikuApplication : public BApplication
public:
explicit QHaikuApplication(const char *signature);
- bool QuitRequested() Q_DECL_OVERRIDE;
- void RefsReceived(BMessage* message) Q_DECL_OVERRIDE;
+ bool QuitRequested() override;
+ void RefsReceived(BMessage* message) override;
};
#endif
diff --git a/src/plugins/platforms/haiku/qhaikubuffer.cpp b/src/plugins/platforms/haiku/qhaikubuffer.cpp
index c6f6ffe6bc..f25ddef86b 100644
--- a/src/plugins/platforms/haiku/qhaikubuffer.cpp
+++ b/src/plugins/platforms/haiku/qhaikubuffer.cpp
@@ -45,7 +45,7 @@
QT_BEGIN_NAMESPACE
QHaikuBuffer::QHaikuBuffer()
- : m_buffer(Q_NULLPTR)
+ : m_buffer(nullptr)
{
}
@@ -63,12 +63,12 @@ BBitmap* QHaikuBuffer::nativeBuffer() const
const QImage *QHaikuBuffer::image() const
{
- return (m_buffer != Q_NULLPTR) ? &m_image : Q_NULLPTR;
+ return (m_buffer != nullptr) ? &m_image : nullptr;
}
QImage *QHaikuBuffer::image()
{
- return (m_buffer != Q_NULLPTR) ? &m_image : Q_NULLPTR;
+ return (m_buffer != nullptr) ? &m_image : nullptr;
}
QRect QHaikuBuffer::rect() const
diff --git a/src/plugins/platforms/haiku/qhaikuclipboard.cpp b/src/plugins/platforms/haiku/qhaikuclipboard.cpp
index 774da4432a..20519e21d0 100644
--- a/src/plugins/platforms/haiku/qhaikuclipboard.cpp
+++ b/src/plugins/platforms/haiku/qhaikuclipboard.cpp
@@ -47,8 +47,8 @@
#include <Clipboard.h>
QHaikuClipboard::QHaikuClipboard()
- : m_systemMimeData(Q_NULLPTR)
- , m_userMimeData(Q_NULLPTR)
+ : m_systemMimeData(nullptr)
+ , m_userMimeData(nullptr)
{
if (be_clipboard)
be_clipboard->StartWatching(BMessenger(this));
@@ -81,12 +81,12 @@ QMimeData *QHaikuClipboard::mimeData(QClipboard::Mode mode)
const BMessage *clipboard = be_clipboard->Data();
if (clipboard) {
- char *name = Q_NULLPTR;
+ char *name = nullptr;
uint32 type = 0;
int32 count = 0;
for (int i = 0; clipboard->GetInfo(B_MIME_TYPE, i, &name, &type, &count) == B_OK; i++) {
- const void *data = Q_NULLPTR;
+ const void *data = nullptr;
int32 dataLen = 0;
const status_t status = clipboard->FindData(name, B_MIME_TYPE, &data, &dataLen);
@@ -162,7 +162,7 @@ void QHaikuClipboard::MessageReceived(BMessage* message)
{
if (message->what == B_CLIPBOARD_CHANGED) {
delete m_userMimeData;
- m_userMimeData = Q_NULLPTR;
+ m_userMimeData = nullptr;
emitChanged(QClipboard::Clipboard);
}
diff --git a/src/plugins/platforms/haiku/qhaikuclipboard.h b/src/plugins/platforms/haiku/qhaikuclipboard.h
index 3dd4496e8d..b6eb3f591f 100644
--- a/src/plugins/platforms/haiku/qhaikuclipboard.h
+++ b/src/plugins/platforms/haiku/qhaikuclipboard.h
@@ -54,13 +54,13 @@ public:
QHaikuClipboard();
~QHaikuClipboard();
- QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
- void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
- bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
- bool ownsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override;
+ void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) override;
+ bool supportsMode(QClipboard::Mode mode) const override;
+ bool ownsMode(QClipboard::Mode mode) const override;
// override from BHandler to catch change notifications from Haiku clipboard
- void MessageReceived(BMessage* message) Q_DECL_OVERRIDE;
+ void MessageReceived(BMessage* message) override;
private:
QMimeData *m_systemMimeData;
diff --git a/src/plugins/platforms/haiku/qhaikucursor.h b/src/plugins/platforms/haiku/qhaikucursor.h
index 5d70c97d9e..73a1d2c492 100644
--- a/src/plugins/platforms/haiku/qhaikucursor.h
+++ b/src/plugins/platforms/haiku/qhaikucursor.h
@@ -52,7 +52,7 @@ public:
QHaikuCursor();
#ifndef QT_NO_CURSOR
- void changeCursor(QCursor *windowCursor, QWindow *window) Q_DECL_OVERRIDE;
+ void changeCursor(QCursor *windowCursor, QWindow *window) override;
#endif
private:
diff --git a/src/plugins/platforms/haiku/qhaikuintegration.cpp b/src/plugins/platforms/haiku/qhaikuintegration.cpp
index d46d77ff18..8bd2171794 100644
--- a/src/plugins/platforms/haiku/qhaikuintegration.cpp
+++ b/src/plugins/platforms/haiku/qhaikuintegration.cpp
@@ -87,13 +87,13 @@ QHaikuIntegration::QHaikuIntegration(const QStringList &parameters)
QHaikuIntegration::~QHaikuIntegration()
{
destroyScreen(m_screen);
- m_screen = Q_NULLPTR;
+ m_screen = nullptr;
delete m_services;
- m_services = Q_NULLPTR;
+ m_services = nullptr;
delete m_clipboard;
- m_clipboard = Q_NULLPTR;
+ m_clipboard = nullptr;
be_app->LockLooper();
be_app->Quit();
diff --git a/src/plugins/platforms/haiku/qhaikuintegration.h b/src/plugins/platforms/haiku/qhaikuintegration.h
index 1b938acb82..5c7a173c91 100644
--- a/src/plugins/platforms/haiku/qhaikuintegration.h
+++ b/src/plugins/platforms/haiku/qhaikuintegration.h
@@ -54,17 +54,17 @@ public:
explicit QHaikuIntegration(const QStringList &paramList);
~QHaikuIntegration();
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QPlatformServices *services() const Q_DECL_OVERRIDE;
+ QPlatformFontDatabase *fontDatabase() const override;
+ QPlatformServices *services() const override;
#ifndef QT_NO_CLIPBOARD
- QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE;
+ QPlatformClipboard *clipboard() const override;
#endif
private:
diff --git a/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp b/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp
index ee53f693cd..613ae471cb 100644
--- a/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp
+++ b/src/plugins/platforms/haiku/qhaikurasterbackingstore.cpp
@@ -47,14 +47,14 @@ QT_BEGIN_NAMESPACE
QHaikuRasterBackingStore::QHaikuRasterBackingStore(QWindow *window)
: QPlatformBackingStore(window)
- , m_bitmap(Q_NULLPTR)
+ , m_bitmap(nullptr)
{
}
QHaikuRasterBackingStore::~QHaikuRasterBackingStore()
{
delete m_bitmap;
- m_bitmap = Q_NULLPTR;
+ m_bitmap = nullptr;
}
QPaintDevice *QHaikuRasterBackingStore::paintDevice()
@@ -62,7 +62,7 @@ QPaintDevice *QHaikuRasterBackingStore::paintDevice()
if (!m_bufferSize.isEmpty() && m_bitmap)
return m_buffer.image();
- return Q_NULLPTR;
+ return nullptr;
}
void QHaikuRasterBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
diff --git a/src/plugins/platforms/haiku/qhaikurasterbackingstore.h b/src/plugins/platforms/haiku/qhaikurasterbackingstore.h
index 06a46e7eb3..060ab27126 100644
--- a/src/plugins/platforms/haiku/qhaikurasterbackingstore.h
+++ b/src/plugins/platforms/haiku/qhaikurasterbackingstore.h
@@ -55,9 +55,9 @@ public:
explicit QHaikuRasterBackingStore(QWindow *window);
~QHaikuRasterBackingStore();
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
+ void resize(const QSize &size, const QRegion &staticContents) override;
private:
BBitmap *m_bitmap;
diff --git a/src/plugins/platforms/haiku/qhaikurasterwindow.cpp b/src/plugins/platforms/haiku/qhaikurasterwindow.cpp
index 9834b7cbc7..7e57e67bab 100644
--- a/src/plugins/platforms/haiku/qhaikurasterwindow.cpp
+++ b/src/plugins/platforms/haiku/qhaikurasterwindow.cpp
@@ -211,7 +211,7 @@ void HaikuViewProxy::handleKeyEvent(QEvent::Type type, BMessage *message)
{
int32 key = 0;
uint32 code = 0;
- const char *bytes = Q_NULLPTR;
+ const char *bytes = nullptr;
QString text;
if (message) {
@@ -265,7 +265,7 @@ QHaikuRasterWindow::~QHaikuRasterWindow()
m_window->UnlockLooper();
delete m_view;
- m_view = Q_NULLPTR;
+ m_view = nullptr;
}
BView* QHaikuRasterWindow::nativeViewHandle() const
diff --git a/src/plugins/platforms/haiku/qhaikurasterwindow.h b/src/plugins/platforms/haiku/qhaikurasterwindow.h
index ae57e0f0e4..24b13aa122 100644
--- a/src/plugins/platforms/haiku/qhaikurasterwindow.h
+++ b/src/plugins/platforms/haiku/qhaikurasterwindow.h
@@ -51,15 +51,15 @@ class HaikuViewProxy : public QObject, public BView
Q_OBJECT
public:
- explicit HaikuViewProxy(BWindow *window, QObject *parent = Q_NULLPTR);
+ explicit HaikuViewProxy(BWindow *window, QObject *parent = nullptr);
- void MessageReceived(BMessage *message) Q_DECL_OVERRIDE;
- void Draw(BRect updateRect) Q_DECL_OVERRIDE;
- void MouseDown(BPoint pos) Q_DECL_OVERRIDE;
- void MouseUp(BPoint pos) Q_DECL_OVERRIDE;
- void MouseMoved(BPoint pos, uint32 code, const BMessage *dragMessage) Q_DECL_OVERRIDE;
- void KeyDown(const char *bytes, int32 numBytes) Q_DECL_OVERRIDE;
- void KeyUp(const char *bytes, int32 numBytes) Q_DECL_OVERRIDE;
+ void MessageReceived(BMessage *message) override;
+ void Draw(BRect updateRect) override;
+ void MouseDown(BPoint pos) override;
+ void MouseUp(BPoint pos) override;
+ void MouseMoved(BPoint pos, uint32 code, const BMessage *dragMessage) override;
+ void KeyDown(const char *bytes, int32 numBytes) override;
+ void KeyUp(const char *bytes, int32 numBytes) override;
Q_SIGNALS:
void mouseEvent(const QPoint &localPosition, const QPoint &globalPosition, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source);
diff --git a/src/plugins/platforms/haiku/qhaikuscreen.cpp b/src/plugins/platforms/haiku/qhaikuscreen.cpp
index 54951a0af5..2c8abba8aa 100644
--- a/src/plugins/platforms/haiku/qhaikuscreen.cpp
+++ b/src/plugins/platforms/haiku/qhaikuscreen.cpp
@@ -58,10 +58,10 @@ QHaikuScreen::QHaikuScreen()
QHaikuScreen::~QHaikuScreen()
{
delete m_cursor;
- m_cursor = Q_NULLPTR;
+ m_cursor = nullptr;
delete m_screen;
- m_screen = Q_NULLPTR;
+ m_screen = nullptr;
}
QPixmap QHaikuScreen::grabWindow(WId winId, int x, int y, int width, int height) const
@@ -69,8 +69,8 @@ QPixmap QHaikuScreen::grabWindow(WId winId, int x, int y, int width, int height)
if (width == 0 || height == 0)
return QPixmap();
- BScreen screen(Q_NULLPTR);
- BBitmap *bitmap = Q_NULLPTR;
+ BScreen screen(nullptr);
+ BBitmap *bitmap = nullptr;
screen.GetBitmap(&bitmap);
const BRect frame = (winId ? ((BWindow*)winId)->Frame() : screen.Frame());
diff --git a/src/plugins/platforms/haiku/qhaikuscreen.h b/src/plugins/platforms/haiku/qhaikuscreen.h
index 49fa3f0a60..98de6fdd03 100644
--- a/src/plugins/platforms/haiku/qhaikuscreen.h
+++ b/src/plugins/platforms/haiku/qhaikuscreen.h
@@ -53,13 +53,13 @@ public:
QHaikuScreen();
~QHaikuScreen();
- QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const override;
- QRect geometry() const Q_DECL_OVERRIDE;
- int depth() const Q_DECL_OVERRIDE;
- QImage::Format format() const Q_DECL_OVERRIDE;
+ QRect geometry() const override;
+ int depth() const override;
+ QImage::Format format() const override;
- QPlatformCursor *cursor() const Q_DECL_OVERRIDE;
+ QPlatformCursor *cursor() const override;
private:
BScreen *m_screen;
diff --git a/src/plugins/platforms/haiku/qhaikuservices.h b/src/plugins/platforms/haiku/qhaikuservices.h
index a210eb8b61..59ff6395fb 100644
--- a/src/plugins/platforms/haiku/qhaikuservices.h
+++ b/src/plugins/platforms/haiku/qhaikuservices.h
@@ -47,10 +47,10 @@ QT_BEGIN_NAMESPACE
class QHaikuServices : public QPlatformServices
{
public:
- bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
- bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
+ bool openUrl(const QUrl &url) override;
+ bool openDocument(const QUrl &url) override;
- QByteArray desktopEnvironment() const Q_DECL_OVERRIDE;
+ QByteArray desktopEnvironment() const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/haiku/qhaikuwindow.cpp b/src/plugins/platforms/haiku/qhaikuwindow.cpp
index 4bea7f7ff6..f8fdf3f92d 100644
--- a/src/plugins/platforms/haiku/qhaikuwindow.cpp
+++ b/src/plugins/platforms/haiku/qhaikuwindow.cpp
@@ -118,12 +118,12 @@ void HaikuWindowProxy::zoomByQt()
QHaikuWindow::QHaikuWindow(QWindow *window)
: QPlatformWindow(window)
- , m_window(Q_NULLPTR)
+ , m_window(nullptr)
, m_windowState(Qt::WindowNoState)
{
const QRect rect = initialGeometry(window, window->geometry(), DefaultWindowWidth, DefaultWindowHeight);
- HaikuWindowProxy *haikuWindow = new HaikuWindowProxy(window, rect, Q_NULLPTR);
+ HaikuWindowProxy *haikuWindow = new HaikuWindowProxy(window, rect, nullptr);
connect(haikuWindow, SIGNAL(moved(QPoint)), SLOT(haikuWindowMoved(QPoint)));
connect(haikuWindow, SIGNAL(resized(QSize,bool)), SLOT(haikuWindowResized(QSize,bool)));
connect(haikuWindow, SIGNAL(windowActivated(bool)), SLOT(haikuWindowActivated(bool)));
@@ -145,7 +145,7 @@ QHaikuWindow::~QHaikuWindow()
m_window->LockLooper();
m_window->Quit();
- m_window = Q_NULLPTR;
+ m_window = nullptr;
}
void QHaikuWindow::setGeometry(const QRect &rect)
@@ -330,7 +330,7 @@ void QHaikuWindow::haikuWindowResized(const QSize &size, bool zoomInProgress)
void QHaikuWindow::haikuWindowActivated(bool activated)
{
- QWindowSystemInterface::handleWindowActivated(activated ? window() : Q_NULLPTR);
+ QWindowSystemInterface::handleWindowActivated(activated ? window() : nullptr);
}
void QHaikuWindow::haikuWindowMinimized(bool minimize)
diff --git a/src/plugins/platforms/haiku/qhaikuwindow.h b/src/plugins/platforms/haiku/qhaikuwindow.h
index 5bfb99e532..bb57742087 100644
--- a/src/plugins/platforms/haiku/qhaikuwindow.h
+++ b/src/plugins/platforms/haiku/qhaikuwindow.h
@@ -51,14 +51,14 @@ class HaikuWindowProxy : public QObject, public BWindow
Q_OBJECT
public:
- explicit HaikuWindowProxy(QWindow *window, const QRect &rect, QObject *parent = Q_NULLPTR);
+ explicit HaikuWindowProxy(QWindow *window, const QRect &rect, QObject *parent = nullptr);
- void FrameMoved(BPoint pos) Q_DECL_OVERRIDE;
- void FrameResized(float width, float height) Q_DECL_OVERRIDE;
- void WindowActivated(bool activated) Q_DECL_OVERRIDE;
- void Minimize(bool minimize) Q_DECL_OVERRIDE;
- void Zoom(BPoint pos, float width, float height) Q_DECL_OVERRIDE;
- bool QuitRequested() Q_DECL_OVERRIDE;
+ void FrameMoved(BPoint pos) override;
+ void FrameResized(float width, float height) override;
+ void WindowActivated(bool activated) override;
+ void Minimize(bool minimize) override;
+ void Zoom(BPoint pos, float width, float height) override;
+ bool QuitRequested() override;
void zoomByQt();
@@ -83,23 +83,23 @@ public:
explicit QHaikuWindow(QWindow *window);
virtual ~QHaikuWindow();
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- QMargins frameMargins() const Q_DECL_OVERRIDE;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &rect) override;
+ QMargins frameMargins() const override;
+ void setVisible(bool visible) override;
- bool isExposed() const Q_DECL_OVERRIDE;
- bool isActive() const Q_DECL_OVERRIDE;
+ bool isExposed() const override;
+ bool isActive() const override;
- WId winId() const Q_DECL_OVERRIDE;
+ WId winId() const override;
BWindow* nativeHandle() const;
- void requestActivateWindow() Q_DECL_OVERRIDE;
- void setWindowState(Qt::WindowStates state) Q_DECL_OVERRIDE;
- void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
+ void requestActivateWindow() override;
+ void setWindowState(Qt::WindowStates state) override;
+ void setWindowFlags(Qt::WindowFlags flags) override;
- void setWindowTitle(const QString &title) Q_DECL_OVERRIDE;
+ void setWindowTitle(const QString &title) override;
- void propagateSizeHints() Q_DECL_OVERRIDE;
+ void propagateSizeHints() override;
protected:
HaikuWindowProxy *m_window;
diff --git a/src/plugins/platforms/integrity/main.cpp b/src/plugins/platforms/integrity/main.cpp
index f75e227335..6313aa47e5 100644
--- a/src/plugins/platforms/integrity/main.cpp
+++ b/src/plugins/platforms/integrity/main.cpp
@@ -47,7 +47,7 @@ class QIntegrityFbIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "integrity.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QPlatformIntegration *create(const QString&, const QStringList&) override;
};
QPlatformIntegration* QIntegrityFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/integrity/qintegrityfbintegration.h b/src/plugins/platforms/integrity/qintegrityfbintegration.h
index a954dc2356..d0cd5417ab 100644
--- a/src/plugins/platforms/integrity/qintegrityfbintegration.h
+++ b/src/plugins/platforms/integrity/qintegrityfbintegration.h
@@ -54,19 +54,19 @@ public:
QIntegrityFbIntegration(const QStringList &paramList);
~QIntegrityFbIntegration();
- void initialize() Q_DECL_OVERRIDE;
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ void initialize() override;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QPlatformServices *services() const Q_DECL_OVERRIDE;
- QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE { return m_inputContext; }
+ QPlatformFontDatabase *fontDatabase() const override;
+ QPlatformServices *services() const override;
+ QPlatformInputContext *inputContext() const override { return m_inputContext; }
- QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
+ QPlatformNativeInterface *nativeInterface() const override;
QList<QPlatformScreen *> screens() const;
diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp
index 3979937955..d64b96ca4c 100644
--- a/src/plugins/platforms/integrity/qintegrityfbscreen.cpp
+++ b/src/plugins/platforms/integrity/qintegrityfbscreen.cpp
@@ -204,15 +204,14 @@ QRegion QIntegrityFbScreen::doRedraw()
if (!mBlitter)
mBlitter = new QPainter(&mFbScreenImage);
- QVector<QRect> rects = touched.rects();
- for (int i = 0; i < rects.size(); i++) {
+ for (QRect rect : touched) {
FBRect fbrect = {
- (uint32_t)rects[i].left(),
- (uint32_t)rects[i].top(),
- (uint32_t)rects[i].width(),
- (uint32_t)rects[i].height()
+ (uint32_t)rect.left(),
+ (uint32_t)rect.top(),
+ (uint32_t)rect.width(),
+ (uint32_t)rect.height()
};
- mBlitter->drawImage(rects[i], mScreenImage, rects[i]);
+ mBlitter->drawImage(rect, mScreenImage, rect);
gh_FB_expose(mFbh, &fbrect, NULL);
}
return touched;
diff --git a/src/plugins/platforms/integrity/qintegrityfbscreen.h b/src/plugins/platforms/integrity/qintegrityfbscreen.h
index 6bc78913c9..c38b4f073d 100644
--- a/src/plugins/platforms/integrity/qintegrityfbscreen.h
+++ b/src/plugins/platforms/integrity/qintegrityfbscreen.h
@@ -57,9 +57,9 @@ public:
bool initialize();
- QPixmap grabWindow(WId wid, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
+ QPixmap grabWindow(WId wid, int x, int y, int width, int height) const override;
- QRegion doRedraw() Q_DECL_OVERRIDE;
+ QRegion doRedraw() override;
private:
QStringList mArgs;
diff --git a/src/plugins/platforms/integrity/qintegrityhidmanager.cpp b/src/plugins/platforms/integrity/qintegrityhidmanager.cpp
index 49583735f5..3570b90134 100644
--- a/src/plugins/platforms/integrity/qintegrityhidmanager.cpp
+++ b/src/plugins/platforms/integrity/qintegrityhidmanager.cpp
@@ -73,8 +73,8 @@ public:
{
CheckSuccess(gh_hid_close(handle));
};
- void process_event(void) Q_DECL_OVERRIDE;
- void async_wait(void) Q_DECL_OVERRIDE;
+ void process_event(void) override;
+ void async_wait(void) override;
HIDDriver *get_driver(void) { return driver; };
HIDHandle get_handle(void) { return handle; };
private:
@@ -92,8 +92,8 @@ public:
{
qDeleteAll(devices);
};
- void process_event(void) Q_DECL_OVERRIDE;
- void async_wait(void) Q_DECL_OVERRIDE;
+ void process_event(void) override;
+ void async_wait(void) override;
void find_devices(void);
private:
QHash<Value, HIDDeviceHandler *> devices;
diff --git a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
index bea2897240..54152aebf7 100644
--- a/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
+++ b/src/plugins/platforms/ios/optional/nsphotolibrarysupport/qiosfileengineassetslibrary.mm
@@ -302,7 +302,7 @@ public:
g_iteratorCurrentUrl.setLocalData(QString());
}
- QString next() Q_DECL_OVERRIDE
+ QString next() override
{
// Cache the URL that we are about to return, since QDir will immediately create a
// new file engine on the file and ask if it exists. Unless we do this, we end up
@@ -314,17 +314,17 @@ public:
return url;
}
- bool hasNext() const Q_DECL_OVERRIDE
+ bool hasNext() const override
{
return m_enumerator->hasNext();
}
- QString currentFileName() const Q_DECL_OVERRIDE
+ QString currentFileName() const override
{
return g_iteratorCurrentUrl.localData();
}
- QFileInfo currentFileInfo() const Q_DECL_OVERRIDE
+ QFileInfo currentFileInfo() const override
{
return QFileInfo(currentFileName());
}
diff --git a/src/plugins/platforms/ios/qiosbackingstore.h b/src/plugins/platforms/ios/qiosbackingstore.h
index e6b890251a..38006ba90b 100644
--- a/src/plugins/platforms/ios/qiosbackingstore.h
+++ b/src/plugins/platforms/ios/qiosbackingstore.h
@@ -54,7 +54,7 @@ public:
QIOSBackingStore(QWindow *window);
~QIOSBackingStore();
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/ios/qiosclipboard.h b/src/plugins/platforms/ios/qiosclipboard.h
index f3ccfcace0..3fe9b29b71 100644
--- a/src/plugins/platforms/ios/qiosclipboard.h
+++ b/src/plugins/platforms/ios/qiosclipboard.h
@@ -58,10 +58,10 @@ public:
QIOSClipboard();
~QIOSClipboard();
- QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
- void setMimeData(QMimeData *mimeData, QClipboard::Mode mode = QClipboard::Clipboard) Q_DECL_OVERRIDE;
- bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
- bool ownsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override;
+ void setMimeData(QMimeData *mimeData, QClipboard::Mode mode = QClipboard::Clipboard) override;
+ bool supportsMode(QClipboard::Mode mode) const override;
+ bool ownsMode(QClipboard::Mode mode) const override;
private:
QUIClipboard *m_clipboard;
diff --git a/src/plugins/platforms/ios/qiosclipboard.mm b/src/plugins/platforms/ios/qiosclipboard.mm
index 15deb3332e..9a975eadc9 100644
--- a/src/plugins/platforms/ios/qiosclipboard.mm
+++ b/src/plugins/platforms/ios/qiosclipboard.mm
@@ -138,8 +138,8 @@ public:
QIOSMimeData(QClipboard::Mode mode) : QMimeData(), m_mode(mode) { }
~QIOSMimeData() { }
- QStringList formats() const Q_DECL_OVERRIDE;
- QVariant retrieveData(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE;
+ QStringList formats() const override;
+ QVariant retrieveData(const QString &mimeType, QVariant::Type type) const override;
private:
const QClipboard::Mode m_mode;
diff --git a/src/plugins/platforms/ios/qioscontext.h b/src/plugins/platforms/ios/qioscontext.h
index ce50eff1d9..a2595877dc 100644
--- a/src/plugins/platforms/ios/qioscontext.h
+++ b/src/plugins/platforms/ios/qioscontext.h
@@ -57,18 +57,18 @@ public:
QIOSContext(QOpenGLContext *context);
~QIOSContext();
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override;
- void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void swapBuffers(QPlatformSurface *surface) override;
- bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
- void doneCurrent() Q_DECL_OVERRIDE;
+ bool makeCurrent(QPlatformSurface *surface) override;
+ void doneCurrent() override;
- GLuint defaultFramebufferObject(QPlatformSurface *) const Q_DECL_OVERRIDE;
- QFunctionPointer getProcAddress(const char *procName) Q_DECL_OVERRIDE;
+ GLuint defaultFramebufferObject(QPlatformSurface *) const override;
+ QFunctionPointer getProcAddress(const char *procName) override;
- bool isSharing() const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isSharing() const override;
+ bool isValid() const override;
private Q_SLOTS:
void windowDestroyed(QObject *object);
diff --git a/src/plugins/platforms/ios/qioseventdispatcher.h b/src/plugins/platforms/ios/qioseventdispatcher.h
index c1442ed1e8..62133b9510 100644
--- a/src/plugins/platforms/ios/qioseventdispatcher.h
+++ b/src/plugins/platforms/ios/qioseventdispatcher.h
@@ -51,8 +51,8 @@ class QIOSEventDispatcher : public QEventDispatcherCoreFoundation
public:
explicit QIOSEventDispatcher(QObject *parent = 0);
- bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
- bool processPostedEvents() Q_DECL_OVERRIDE;
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) override;
+ bool processPostedEvents() override;
void handleRunLoopExit(CFRunLoopActivity activity);
diff --git a/src/plugins/platforms/ios/qioseventdispatcher.mm b/src/plugins/platforms/ios/qioseventdispatcher.mm
index de2c30cdfb..a6f6a7aac9 100644
--- a/src/plugins/platforms/ios/qioseventdispatcher.mm
+++ b/src/plugins/platforms/ios/qioseventdispatcher.mm
@@ -228,7 +228,7 @@ extern "C" int qt_main_wrapper(int argc, char *argv[])
}
}
- qEventDispatcherDebug() << "Running UIApplicationMain"; qIndent();
+ qCDebug(lcEventDispatcher) << "Running UIApplicationMain";
return UIApplicationMain(argc, argv, nil, NSStringFromClass([QIOSApplicationDelegate class]));
}
}
@@ -263,7 +263,7 @@ static void __attribute__((noinline, noreturn)) user_main_trampoline()
int exitCode = main(argc, argv);
delete[] argv;
- qEventDispatcherDebug() << "Returned from main with exit code " << exitCode;
+ qCDebug(lcEventDispatcher) << "Returned from main with exit code " << exitCode;
if (Q_UNLIKELY(debugStackUsage))
userMainStack.printUsage();
@@ -322,7 +322,7 @@ static bool rootLevelRunLoopIntegration()
+ (void)applicationDidFinishLaunching:(NSNotification *)notification
{
- qCDebug(lcQpaApplication) << "Application launched with options" << notification.userInfo;
+ qCDebug(lcEventDispatcher) << "Application launched with options" << notification.userInfo;
if (!isQtApplication())
return;
@@ -331,7 +331,7 @@ static bool rootLevelRunLoopIntegration()
// We schedule the main-redirection for the next run-loop pass, so that we
// can return from this function and let UIApplicationMain finish its job.
// This results in running Qt's application eventloop as a nested runloop.
- qCDebug(lcQpaApplication) << "Scheduling main() on next run-loop pass";
+ qCDebug(lcEventDispatcher) << "Scheduling main() on next run-loop pass";
CFRunLoopTimerRef userMainTimer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault,
CFAbsoluteTimeGetCurrent(), 0, 0, 0, ^(CFRunLoopTimerRef) { user_main_trampoline(); });
CFRunLoopAddTimer(CFRunLoopGetMain(), userMainTimer, kCFRunLoopCommonModes);
@@ -339,10 +339,10 @@ static bool rootLevelRunLoopIntegration()
return;
}
+
switch (setjmp(processEventEnterJumpPoint)) {
case kJumpPointSetSuccessfully:
- qCDebug(lcQpaApplication) << "Running main() on separate stack"; qIndent();
-
+ qCDebug(lcEventDispatcher) << "Running main() on separate stack";
// Redirect the stack pointer to the start of the reserved stack. This ensures
// that when we longjmp out of the event dispatcher and continue execution, the
// 'Qt main' call-stack will not be smashed, as it lives in a part of the stack
@@ -360,7 +360,7 @@ static bool rootLevelRunLoopIntegration()
case kJumpedFromEventDispatcherProcessEvents:
// We've returned from the longjmp in the event dispatcher,
// and the stack has been restored to its old self.
- qUnIndent(); qCDebug(lcQpaApplication) << "Returned from processEvents";
+ qCDebug(lcEventDispatcher) << "↳ Jumped from processEvents due to exec";
if (Q_UNLIKELY(debugStackUsage))
userMainStack.printUsage();
@@ -396,18 +396,18 @@ static const char kApplicationWillTerminateExitCode = char(SIGTERM | 0x80);
applicationAboutToTerminate = true;
switch (setjmp(applicationWillTerminateJumpPoint)) {
case kJumpPointSetSuccessfully:
- qEventDispatcherDebug() << "Exiting qApp with SIGTERM exit code"; qIndent();
+ qCDebug(lcEventDispatcher) << "Exiting qApp with SIGTERM exit code";
qApp->exit(kApplicationWillTerminateExitCode);
// The runloop will not exit when the application is about to terminate,
// so we'll never see the exit activity and have a chance to return from
// QEventLoop::exec(). We initiate the return manually as a workaround.
- qEventDispatcherDebug() << "Manually triggering return from event loop exec";
+ qCDebug(lcEventDispatcher) << "Manually triggering return from event loop exec";
static_cast<QIOSEventDispatcher *>(qApp->eventDispatcher())->interruptEventLoopExec();
break;
case kJumpedFromUserMainTrampoline:
// The user's main has returned, so we're ready to let iOS terminate the application
- qUnIndent(); qEventDispatcherDebug() << "kJumpedFromUserMainTrampoline, allowing iOS to terminate";
+ qCDebug(lcEventDispatcher) << "kJumpedFromUserMainTrampoline, allowing iOS to terminate";
break;
default:
qFatal("Unexpected jump result in event loop integration");
@@ -434,13 +434,15 @@ bool __attribute__((returns_twice)) QIOSEventDispatcher::processEvents(QEventLoo
return QEventDispatcherCoreFoundation::processEvents(flags);
if (applicationAboutToTerminate) {
- qEventDispatcherDebug() << "Detected QEventLoop exec after application termination";
+ qCDebug(lcEventDispatcher) << "Detected QEventLoop exec after application termination";
// Re-issue exit, and return immediately
qApp->exit(kApplicationWillTerminateExitCode);
return false;
}
if (!m_processEventLevel && (flags & QEventLoop::EventLoopExec)) {
+ qCDebug(lcEventDispatcher) << "Processing events with flags" << flags;
+
++m_processEventLevel;
m_runLoopExitObserver.addToMode(kCFRunLoopCommonModes);
@@ -449,7 +451,7 @@ bool __attribute__((returns_twice)) QIOSEventDispatcher::processEvents(QEventLoo
// is asked to exit, so that we can return from QEventLoop::exec().
switch (setjmp(processEventExitJumpPoint)) {
case kJumpPointSetSuccessfully:
- qEventDispatcherDebug() << "QEventLoop exec detected, jumping back to native runloop";
+ qCDebug(lcEventDispatcher) << "QEventLoop exec detected, jumping back to system runloop ↵";
longjmp(processEventEnterJumpPoint, kJumpedFromEventDispatcherProcessEvents);
break;
case kJumpedFromEventLoopExecInterrupt:
@@ -457,7 +459,7 @@ bool __attribute__((returns_twice)) QIOSEventDispatcher::processEvents(QEventLoo
// signal), and we jumped back though processEventExitJumpPoint. We return from processEvents,
// which will emit aboutToQuit if it's QApplication's event loop, and then return to the user's
// main, which can do whatever it wants, including calling exec() on the application again.
- qEventDispatcherDebug() << "kJumpedFromEventLoopExecInterrupt, returning with eventsProcessed = true";
+ qCDebug(lcEventDispatcher) << "⇢ System runloop exited, returning with eventsProcessed = true";
return true;
default:
qFatal("Unexpected jump result in event loop integration");
@@ -485,9 +487,8 @@ bool QIOSEventDispatcher::processPostedEvents()
if (!QEventDispatcherCoreFoundation::processPostedEvents())
return false;
- qEventDispatcherDebug() << "Sending window system events for " << m_processEvents.flags; qIndent();
+ qCDebug(lcEventDispatcher) << "Sending window system events for" << m_processEvents.flags;
QWindowSystemInterface::sendWindowSystemEvents(m_processEvents.flags);
- qUnIndent();
return true;
}
@@ -497,10 +498,8 @@ void QIOSEventDispatcher::handleRunLoopExit(CFRunLoopActivity activity)
Q_UNUSED(activity);
Q_ASSERT(activity == kCFRunLoopExit);
- if (m_processEventLevel == 1 && !currentEventLoop()->isRunning()) {
- qEventDispatcherDebug() << "Root runloop level exited";
+ if (m_processEventLevel == 1 && !currentEventLoop()->isRunning())
interruptEventLoopExec();
- }
}
void QIOSEventDispatcher::interruptEventLoopExec()
@@ -516,12 +515,12 @@ void QIOSEventDispatcher::interruptEventLoopExec()
// processEvents, instead of back in didFinishLaunchingWithOptions.
switch (setjmp(processEventEnterJumpPoint)) {
case kJumpPointSetSuccessfully:
- qEventDispatcherDebug() << "Jumping back to processEvents";
+ qCDebug(lcEventDispatcher) << "Jumping into processEvents due to system runloop exit ⇢";
longjmp(processEventExitJumpPoint, kJumpedFromEventLoopExecInterrupt);
break;
case kJumpedFromEventDispatcherProcessEvents:
// QEventLoop was re-executed
- qEventDispatcherDebug() << "kJumpedFromEventDispatcherProcessEvents";
+ qCDebug(lcEventDispatcher) << "↳ Jumped from processEvents due to re-exec";
break;
default:
qFatal("Unexpected jump result in event loop integration");
diff --git a/src/plugins/platforms/ios/qiosfiledialog.h b/src/plugins/platforms/ios/qiosfiledialog.h
index 0b56bd20bf..5cb1b45e20 100644
--- a/src/plugins/platforms/ios/qiosfiledialog.h
+++ b/src/plugins/platforms/ios/qiosfiledialog.h
@@ -53,17 +53,17 @@ public:
QIOSFileDialog();
~QIOSFileDialog();
- void exec() Q_DECL_OVERRIDE;
- bool defaultNameFilterDisables() const Q_DECL_OVERRIDE { return false; }
- bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
- void setDirectory(const QUrl &) Q_DECL_OVERRIDE {}
- QUrl directory() const Q_DECL_OVERRIDE { return QUrl(); }
- void selectFile(const QUrl &) Q_DECL_OVERRIDE {}
- QList<QUrl> selectedFiles() const Q_DECL_OVERRIDE;
- void setFilter() Q_DECL_OVERRIDE {}
- void selectNameFilter(const QString &) Q_DECL_OVERRIDE {}
- QString selectedNameFilter() const Q_DECL_OVERRIDE { return QString(); }
+ void exec() override;
+ bool defaultNameFilterDisables() const override { return false; }
+ bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override;
+ void hide() override;
+ void setDirectory(const QUrl &) override {}
+ QUrl directory() const override { return QUrl(); }
+ void selectFile(const QUrl &) override {}
+ QList<QUrl> selectedFiles() const override;
+ void setFilter() override {}
+ void selectNameFilter(const QString &) override {}
+ QString selectedNameFilter() const override { return QString(); }
void selectedFilesChanged(QList<QUrl> selection);
diff --git a/src/plugins/platforms/ios/qiosfiledialog.mm b/src/plugins/platforms/ios/qiosfiledialog.mm
index c5722d33f8..5987bc1540 100644
--- a/src/plugins/platforms/ios/qiosfiledialog.mm
+++ b/src/plugins/platforms/ios/qiosfiledialog.mm
@@ -48,7 +48,7 @@
#include "qiosoptionalplugininterface.h"
QIOSFileDialog::QIOSFileDialog()
- : m_viewController(Q_NULLPTR)
+ : m_viewController(nullptr)
{
}
@@ -112,7 +112,7 @@ void QIOSFileDialog::hide()
[m_viewController dismissViewControllerAnimated:YES completion:nil];
[m_viewController release];
- m_viewController = Q_NULLPTR;
+ m_viewController = nullptr;
m_eventLoop.exit();
}
diff --git a/src/plugins/platforms/ios/qiosinputcontext.h b/src/plugins/platforms/ios/qiosinputcontext.h
index 966d1a7e80..255cf8bca9 100644
--- a/src/plugins/platforms/ios/qiosinputcontext.h
+++ b/src/plugins/platforms/ios/qiosinputcontext.h
@@ -88,24 +88,24 @@ public:
QIOSInputContext();
~QIOSInputContext();
- bool isValid() const Q_DECL_OVERRIDE { return true; }
+ bool isValid() const override { return true; }
- void showInputPanel() Q_DECL_OVERRIDE;
- void hideInputPanel() Q_DECL_OVERRIDE;
+ void showInputPanel() override;
+ void hideInputPanel() override;
- bool isInputPanelVisible() const Q_DECL_OVERRIDE;
- bool isAnimating() const Q_DECL_OVERRIDE;
- QRectF keyboardRect() const Q_DECL_OVERRIDE;
+ bool isInputPanelVisible() const override;
+ bool isAnimating() const override;
+ QRectF keyboardRect() const override;
- void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
- void reset() Q_DECL_OVERRIDE;
- void commit() Q_DECL_OVERRIDE;
+ void update(Qt::InputMethodQueries) override;
+ void reset() override;
+ void commit() override;
- QLocale locale() const Q_DECL_OVERRIDE;
+ QLocale locale() const override;
void clearCurrentFocusObject();
- void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
+ void setFocusObject(QObject *object) override;
void focusWindowChanged(QWindow *focusWindow);
void scrollToCursor();
diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h
index 522cc032ff..6be8855020 100644
--- a/src/plugins/platforms/ios/qiosintegration.h
+++ b/src/plugins/platforms/ios/qiosintegration.h
@@ -62,45 +62,45 @@ public:
QIOSIntegration();
~QIOSIntegration();
- bool hasCapability(Capability cap) const Q_DECL_OVERRIDE;
+ bool hasCapability(Capability cap) const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
- QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override;
+ QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const override;
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
+ QPlatformFontDatabase *fontDatabase() const override;
#ifndef QT_NO_CLIPBOARD
- QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE;
+ QPlatformClipboard *clipboard() const override;
#endif
- QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE;
- QPlatformServices *services() const Q_DECL_OVERRIDE;
+ QPlatformInputContext *inputContext() const override;
+ QPlatformServices *services() const override;
- QVariant styleHint(StyleHint hint) const Q_DECL_OVERRIDE;
+ QVariant styleHint(StyleHint hint) const override;
- QStringList themeNames() const Q_DECL_OVERRIDE;
- QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE;
+ QStringList themeNames() const override;
+ QPlatformTheme *createPlatformTheme(const QString &name) const override;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
- QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
+ QPlatformNativeInterface *nativeInterface() const override;
QTouchDevice *touchDevice();
#ifndef QT_NO_ACCESSIBILITY
- QPlatformAccessibility *accessibility() const Q_DECL_OVERRIDE;
+ QPlatformAccessibility *accessibility() const override;
#endif
// Called from Objective-C class QIOSScreenTracker, which can't be friended
void addScreen(QPlatformScreen *screen) { screenAdded(screen); }
void destroyScreen(QPlatformScreen *screen) { QPlatformIntegration::destroyScreen(screen); }
- void beep() const Q_DECL_OVERRIDE;
+ void beep() const override;
static QIOSIntegration *instance();
// -- QPlatformNativeInterface --
- void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) Q_DECL_OVERRIDE;
+ void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) override;
QFactoryLoader *optionalPlugins() { return m_optionalPlugins; }
diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm
index 94a30eb931..92c1e39d72 100644
--- a/src/plugins/platforms/ios/qiosintegration.mm
+++ b/src/plugins/platforms/ios/qiosintegration.mm
@@ -118,6 +118,9 @@ QIOSIntegration::QIOSIntegration()
}
m_touchDevice->setCapabilities(touchCapabilities);
QWindowSystemInterface::registerTouchDevice(m_touchDevice);
+#if QT_CONFIG(tabletevent)
+ QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(false);
+#endif
QMacInternalPasteboardMime::initializeMimeTypes();
for (int i = 0; i < m_optionalPlugins->metaData().size(); ++i)
@@ -196,12 +199,12 @@ class QIOSOffscreenSurface : public QPlatformOffscreenSurface
public:
QIOSOffscreenSurface(QOffscreenSurface *offscreenSurface) : QPlatformOffscreenSurface(offscreenSurface) {}
- QSurfaceFormat format() const Q_DECL_OVERRIDE
+ QSurfaceFormat format() const override
{
Q_ASSERT(offscreenSurface());
return offscreenSurface()->requestedFormat();
}
- bool isValid() const Q_DECL_OVERRIDE { return true; }
+ bool isValid() const override { return true; }
};
QPlatformOffscreenSurface *QIOSIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const
diff --git a/src/plugins/platforms/ios/qiosmenu.h b/src/plugins/platforms/ios/qiosmenu.h
index 61cadab56d..32022a3bb8 100644
--- a/src/plugins/platforms/ios/qiosmenu.h
+++ b/src/plugins/platforms/ios/qiosmenu.h
@@ -56,20 +56,20 @@ class QIOSMenuItem : public QPlatformMenuItem
public:
QIOSMenuItem();
- void setText(const QString &text) Q_DECL_OVERRIDE;
- void setIcon(const QIcon &) Q_DECL_OVERRIDE {}
- void setMenu(QPlatformMenu *) Q_DECL_OVERRIDE;
- void setVisible(bool isVisible) Q_DECL_OVERRIDE;
- void setIsSeparator(bool) Q_DECL_OVERRIDE;
- void setFont(const QFont &) Q_DECL_OVERRIDE {}
- void setRole(MenuRole role) Q_DECL_OVERRIDE;
- void setCheckable(bool) Q_DECL_OVERRIDE {}
- void setChecked(bool) Q_DECL_OVERRIDE {}
+ void setText(const QString &text) override;
+ void setIcon(const QIcon &) override {}
+ void setMenu(QPlatformMenu *) override;
+ void setVisible(bool isVisible) override;
+ void setIsSeparator(bool) override;
+ void setFont(const QFont &) override {}
+ void setRole(MenuRole role) override;
+ void setCheckable(bool) override {}
+ void setChecked(bool) override {}
#ifndef QT_NO_SHORTCUT
- void setShortcut(const QKeySequence&) Q_DECL_OVERRIDE;
+ void setShortcut(const QKeySequence&) override;
#endif
- void setEnabled(bool enabled) Q_DECL_OVERRIDE;
- void setIconSize(int) Q_DECL_OVERRIDE {}
+ void setEnabled(bool enabled) override;
+ void setIconSize(int) override {}
bool m_visible;
QString m_text;
@@ -88,22 +88,22 @@ public:
QIOSMenu();
~QIOSMenu();
- void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) Q_DECL_OVERRIDE;
- void removeMenuItem(QPlatformMenuItem *menuItem) Q_DECL_OVERRIDE;
- void syncMenuItem(QPlatformMenuItem *) Q_DECL_OVERRIDE;
- void syncSeparatorsCollapsible(bool) Q_DECL_OVERRIDE {}
+ void insertMenuItem(QPlatformMenuItem *menuItem, QPlatformMenuItem *before) override;
+ void removeMenuItem(QPlatformMenuItem *menuItem) override;
+ void syncMenuItem(QPlatformMenuItem *) override;
+ void syncSeparatorsCollapsible(bool) override {}
- void setText(const QString &) Q_DECL_OVERRIDE;
- void setIcon(const QIcon &) Q_DECL_OVERRIDE {}
- void setEnabled(bool enabled) Q_DECL_OVERRIDE;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void setMenuType(MenuType type) Q_DECL_OVERRIDE;
+ void setText(const QString &) override;
+ void setIcon(const QIcon &) override {}
+ void setEnabled(bool enabled) override;
+ void setVisible(bool visible) override;
+ void setMenuType(MenuType type) override;
- void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) Q_DECL_OVERRIDE;
- void dismiss() Q_DECL_OVERRIDE;
+ void showPopup(const QWindow *parentWindow, const QRect &targetRect, const QPlatformMenuItem *item) override;
+ void dismiss() override;
- QPlatformMenuItem *menuItemAt(int position) const Q_DECL_OVERRIDE;
- QPlatformMenuItem *menuItemForTag(quintptr tag) const Q_DECL_OVERRIDE;
+ QPlatformMenuItem *menuItemAt(int position) const override;
+ QPlatformMenuItem *menuItemForTag(quintptr tag) const override;
void handleItemSelected(QIOSMenuItem *menuItem);
@@ -111,7 +111,7 @@ public:
static id menuActionTarget() { return m_currentMenu ? m_currentMenu->m_menuController : 0; }
protected:
- bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *obj, QEvent *event) override;
private:
bool m_enabled;
diff --git a/src/plugins/platforms/ios/qiosmessagedialog.h b/src/plugins/platforms/ios/qiosmessagedialog.h
index e67e10a5e1..92a4db8319 100644
--- a/src/plugins/platforms/ios/qiosmessagedialog.h
+++ b/src/plugins/platforms/ios/qiosmessagedialog.h
@@ -54,9 +54,9 @@ public:
QIOSMessageDialog();
~QIOSMessageDialog();
- void exec() Q_DECL_OVERRIDE;
- bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
+ void exec() override;
+ bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override;
+ void hide() override;
private:
QEventLoop m_eventLoop;
diff --git a/src/plugins/platforms/ios/qiosmessagedialog.mm b/src/plugins/platforms/ios/qiosmessagedialog.mm
index 5507f13de7..9d05b792c2 100644
--- a/src/plugins/platforms/ios/qiosmessagedialog.mm
+++ b/src/plugins/platforms/ios/qiosmessagedialog.mm
@@ -48,7 +48,7 @@
#include "qiosmessagedialog.h"
QIOSMessageDialog::QIOSMessageDialog()
- : m_alertController(Q_NULLPTR)
+ : m_alertController(nullptr)
{
}
@@ -136,5 +136,5 @@ void QIOSMessageDialog::hide()
m_eventLoop.exit();
[m_alertController dismissViewControllerAnimated:YES completion:nil];
[m_alertController release];
- m_alertController = Q_NULLPTR;
+ m_alertController = nullptr;
}
diff --git a/src/plugins/platforms/ios/qiosoptionalplugininterface.h b/src/plugins/platforms/ios/qiosoptionalplugininterface.h
index 3f74e41c83..660c74e856 100644
--- a/src/plugins/platforms/ios/qiosoptionalplugininterface.h
+++ b/src/plugins/platforms/ios/qiosoptionalplugininterface.h
@@ -55,7 +55,7 @@ class QIosOptionalPluginInterface
public:
virtual ~QIosOptionalPluginInterface() {}
virtual void initPlugin() const {};
- virtual UIViewController* createImagePickerController(QIOSFileDialog *) const { return Q_NULLPTR; };
+ virtual UIViewController* createImagePickerController(QIOSFileDialog *) const { return nullptr; };
};
Q_DECLARE_INTERFACE(QIosOptionalPluginInterface, QIosOptionalPluginInterface_iid)
diff --git a/src/plugins/platforms/ios/qiosscreen.h b/src/plugins/platforms/ios/qiosscreen.h
index be0f301710..d5a253461d 100644
--- a/src/plugins/platforms/ios/qiosscreen.h
+++ b/src/plugins/platforms/ios/qiosscreen.h
@@ -62,18 +62,18 @@ public:
QString name() const override;
- QRect geometry() const Q_DECL_OVERRIDE;
- QRect availableGeometry() const Q_DECL_OVERRIDE;
- int depth() const Q_DECL_OVERRIDE;
- QImage::Format format() const Q_DECL_OVERRIDE;
- QSizeF physicalSize() const Q_DECL_OVERRIDE;
- QDpi logicalDpi() const Q_DECL_OVERRIDE;
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ QRect geometry() const override;
+ QRect availableGeometry() const override;
+ int depth() const override;
+ QImage::Format format() const override;
+ QSizeF physicalSize() const override;
+ QDpi logicalDpi() const override;
+ qreal devicePixelRatio() const override;
qreal refreshRate() const override;
- Qt::ScreenOrientation nativeOrientation() const Q_DECL_OVERRIDE;
- Qt::ScreenOrientation orientation() const Q_DECL_OVERRIDE;
- void setOrientationUpdateMask(Qt::ScreenOrientations mask) Q_DECL_OVERRIDE;
+ Qt::ScreenOrientation nativeOrientation() const override;
+ Qt::ScreenOrientation orientation() const override;
+ void setOrientationUpdateMask(Qt::ScreenOrientations mask) override;
QPixmap grabWindow(WId window, int x, int y, int width, int height) const override;
diff --git a/src/plugins/platforms/ios/qiostextinputoverlay.mm b/src/plugins/platforms/ios/qiostextinputoverlay.mm
index bb9fe4d58f..fe3c29d037 100644
--- a/src/plugins/platforms/ios/qiostextinputoverlay.mm
+++ b/src/plugins/platforms/ios/qiostextinputoverlay.mm
@@ -608,7 +608,7 @@ static void executeBlockWithoutAnimation(Block block)
- (QIOSLoupeLayer *)createLoupeLayer
{
Q_UNREACHABLE();
- return Q_NULLPTR;
+ return nullptr;
}
- (void)updateFocalPoint:(QPointF)touchPoint
@@ -984,12 +984,12 @@ static void executeBlockWithoutAnimation(Block block)
QT_BEGIN_NAMESPACE
-QIOSEditMenu *QIOSTextInputOverlay::s_editMenu = Q_NULLPTR;
+QIOSEditMenu *QIOSTextInputOverlay::s_editMenu = nullptr;
QIOSTextInputOverlay::QIOSTextInputOverlay()
- : m_cursorRecognizer(Q_NULLPTR)
- , m_selectionRecognizer(Q_NULLPTR)
- , m_openMenuOnTapRecognizer(Q_NULLPTR)
+ : m_cursorRecognizer(nullptr)
+ , m_selectionRecognizer(nullptr)
+ , m_openMenuOnTapRecognizer(nullptr)
{
connect(qApp, &QGuiApplication::focusObjectChanged, this, &QIOSTextInputOverlay::updateFocusObject);
}
@@ -1012,10 +1012,10 @@ void QIOSTextInputOverlay::updateFocusObject()
[m_selectionRecognizer release];
[m_openMenuOnTapRecognizer release];
[s_editMenu release];
- m_cursorRecognizer = Q_NULLPTR;
- m_selectionRecognizer = Q_NULLPTR;
- m_openMenuOnTapRecognizer = Q_NULLPTR;
- s_editMenu = Q_NULLPTR;
+ m_cursorRecognizer = nullptr;
+ m_selectionRecognizer = nullptr;
+ m_openMenuOnTapRecognizer = nullptr;
+ s_editMenu = nullptr;
}
if (platformInputContext()->inputMethodAccepted()) {
diff --git a/src/plugins/platforms/ios/qiostheme.h b/src/plugins/platforms/ios/qiostheme.h
index fc6b58178a..c917679a91 100644
--- a/src/plugins/platforms/ios/qiostheme.h
+++ b/src/plugins/platforms/ios/qiostheme.h
@@ -52,16 +52,16 @@ public:
QIOSTheme();
~QIOSTheme();
- const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE;
- QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
+ const QPalette *palette(Palette type = SystemPalette) const override;
+ QVariant themeHint(ThemeHint hint) const override;
- QPlatformMenuItem* createPlatformMenuItem() const Q_DECL_OVERRIDE;
- QPlatformMenu* createPlatformMenu() const Q_DECL_OVERRIDE;
+ QPlatformMenuItem* createPlatformMenuItem() const override;
+ QPlatformMenu* createPlatformMenu() const override;
- bool usePlatformNativeDialog(DialogType type) const Q_DECL_OVERRIDE;
- QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const Q_DECL_OVERRIDE;
+ bool usePlatformNativeDialog(DialogType type) const override;
+ QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
- const QFont *font(Font type = SystemFont) const Q_DECL_OVERRIDE;
+ const QFont *font(Font type = SystemFont) const override;
static const char *name;
diff --git a/src/plugins/platforms/ios/qioswindow.h b/src/plugins/platforms/ios/qioswindow.h
index 8ed5347f66..2028fc2a42 100644
--- a/src/plugins/platforms/ios/qioswindow.h
+++ b/src/plugins/platforms/ios/qioswindow.h
@@ -60,37 +60,37 @@ public:
explicit QIOSWindow(QWindow *window);
~QIOSWindow();
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &rect) override;
- void setWindowState(Qt::WindowStates state) Q_DECL_OVERRIDE;
- void setParent(const QPlatformWindow *window) Q_DECL_OVERRIDE;
- void handleContentOrientationChange(Qt::ScreenOrientation orientation) Q_DECL_OVERRIDE;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void setOpacity(qreal level) Q_DECL_OVERRIDE;
+ void setWindowState(Qt::WindowStates state) override;
+ void setParent(const QPlatformWindow *window) override;
+ void handleContentOrientationChange(Qt::ScreenOrientation orientation) override;
+ void setVisible(bool visible) override;
+ void setOpacity(qreal level) override;
- bool isExposed() const Q_DECL_OVERRIDE;
- void propagateSizeHints() Q_DECL_OVERRIDE {}
+ bool isExposed() const override;
+ void propagateSizeHints() override {}
QMargins safeAreaMargins() const override;
- void raise() Q_DECL_OVERRIDE{ raiseOrLower(true); }
- void lower() Q_DECL_OVERRIDE { raiseOrLower(false); }
+ void raise() override{ raiseOrLower(true); }
+ void lower() override { raiseOrLower(false); }
bool shouldAutoActivateWindow() const;
- void requestActivateWindow() Q_DECL_OVERRIDE;
+ void requestActivateWindow() override;
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ qreal devicePixelRatio() const override;
- bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE { return grab; }
- bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE { return grab; }
+ bool setMouseGrabEnabled(bool grab) override { return grab; }
+ bool setKeyboardGrabEnabled(bool grab) override { return grab; }
- WId winId() const Q_DECL_OVERRIDE { return WId(m_view); }
+ WId winId() const override { return WId(m_view); }
void clearAccessibleCache();
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override;
- void requestUpdate() Q_DECL_OVERRIDE;
+ void requestUpdate() override;
CAEAGLLayer *eaglLayer() const;
diff --git a/src/plugins/platforms/ios/quiview.h b/src/plugins/platforms/ios/quiview.h
index 1ce9007a35..3e3c579075 100644
--- a/src/plugins/platforms/ios/quiview.h
+++ b/src/plugins/platforms/ios/quiview.h
@@ -58,6 +58,7 @@ QT_END_NAMESPACE
QT_PREPEND_NAMESPACE(QIOSWindow) *m_qioswindow;
@private
QHash<UITouch *, QWindowSystemInterface::TouchPoint> m_activeTouches;
+ UITouch *m_activePencilTouch;
int m_nextTouchId;
@private
diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm
index bd75ed2384..584dfe9b41 100644
--- a/src/plugins/platforms/ios/quiview.mm
+++ b/src/plugins/platforms/ios/quiview.mm
@@ -53,6 +53,8 @@
#include <QtGui/private/qwindow_p.h>
#include <qpa/qwindowsysteminterface_p.h>
+Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
+
@implementation QUIView
+ (void)load
@@ -364,11 +366,44 @@
return [super pointInside:point withEvent:event];
}
-- (void)updateTouchList:(NSSet *)touches withState:(Qt::TouchPointState)state
+- (void)handleTouches:(NSSet *)touches withEvent:(UIEvent *)event withState:(Qt::TouchPointState)state withTimestamp:(ulong)timeStamp
{
+ QIOSIntegration *iosIntegration = QIOSIntegration::instance();
bool supportsPressure = QIOSIntegration::instance()->touchDevice()->capabilities() & QTouchDevice::Pressure;
- foreach (UITouch *uiTouch, m_activeTouches.keys()) {
+#if QT_CONFIG(tabletevent)
+ if (m_activePencilTouch && [touches containsObject:m_activePencilTouch]) {
+ NSArray<UITouch *> *cTouches = [event coalescedTouchesForTouch:m_activePencilTouch];
+ int i = 0;
+ for (UITouch *cTouch in cTouches) {
+ QPointF localViewPosition = QPointF::fromCGPoint([cTouch preciseLocationInView:self]);
+ QPoint localViewPositionI = localViewPosition.toPoint();
+ QPointF globalScreenPosition = m_qioswindow->mapToGlobal(localViewPositionI) +
+ (localViewPosition - localViewPositionI);
+ qreal pressure = cTouch.force / cTouch.maximumPossibleForce;
+ // azimuth unit vector: +x to the right, +y going downwards
+ CGVector azimuth = [cTouch azimuthUnitVectorInView: self];
+ // azimuthAngle given in radians, zero when the stylus points towards +x axis; converted to degrees with 0 pointing straight up
+ qreal azimuthAngle = [cTouch azimuthAngleInView: self] * 180 / M_PI + 90;
+ // altitudeAngle given in radians, pi / 2 is with the stylus perpendicular to the iPad, smaller values mean more tilted, but never negative.
+ // Convert to degrees with zero being perpendicular.
+ qreal altitudeAngle = 90 - cTouch.altitudeAngle * 180 / M_PI;
+ qCDebug(lcQpaTablet) << i << ":" << timeStamp << localViewPosition << pressure << state << "azimuth" << azimuth.dx << azimuth.dy
+ << "angle" << azimuthAngle << "altitude" << cTouch.altitudeAngle
+ << "xTilt" << qBound(-60.0, altitudeAngle * azimuth.dx, 60.0) << "yTilt" << qBound(-60.0, altitudeAngle * azimuth.dy, 60.0);
+ QWindowSystemInterface::handleTabletEvent(m_qioswindow->window(), timeStamp, localViewPosition, globalScreenPosition,
+ // device, pointerType, buttons
+ QTabletEvent::RotationStylus, QTabletEvent::Pen, state == Qt::TouchPointReleased ? Qt::NoButton : Qt::LeftButton,
+ // pressure, xTilt, yTilt
+ pressure, qBound(-60.0, altitudeAngle * azimuth.dx, 60.0), qBound(-60.0, altitudeAngle * azimuth.dy, 60.0),
+ // tangentialPressure, rotation, z, uid, modifiers
+ 0, azimuthAngle, 0, 0, Qt::NoModifier);
+ ++i;
+ }
+ }
+#endif
+
+ for (UITouch *uiTouch : m_activeTouches.keys()) {
QWindowSystemInterface::TouchPoint &touchPoint = m_activeTouches[uiTouch];
if (![touches containsObject:uiTouch]) {
touchPoint.state = Qt::TouchPointStationary;
@@ -397,16 +432,14 @@
touchPoint.pressure = uiTouch.force / uiTouch.maximumPossibleForce;
} else {
// We don't claim that our touch device supports QTouchDevice::Pressure,
- // but fill in a meaningfull value in case clients use it anyways.
+ // but fill in a meaningful value in case clients use it anyway.
touchPoint.pressure = (state == Qt::TouchPointReleased) ? 0.0 : 1.0;
}
}
}
-}
-
-- (void)sendTouchEventWithTimestamp:(ulong)timeStamp
-{
- QIOSIntegration *iosIntegration = QIOSIntegration::instance();
+ if (m_activeTouches.isEmpty())
+ return;
+ QWindowSystemInterface::handleTouchEvent<QWindowSystemInterface::SynchronousDelivery>(m_qioswindow->window(), timeStamp, iosIntegration->touchDevice(), m_activeTouches.values());
if (!static_cast<QUIWindow *>(self.window).sendingEvent) {
// The event is likely delivered as part of delayed touch delivery, via
// _UIGestureEnvironmentSortAndSendDelayedTouches, due to one of the two
@@ -431,8 +464,21 @@
// points to QWindowSystemInterface::TouchPoints, and assigns each TouchPoint
// an id for use by Qt.
for (UITouch *touch in touches) {
- Q_ASSERT(!m_activeTouches.contains(touch));
- m_activeTouches[touch].id = m_nextTouchId++;
+#if QT_CONFIG(tabletevent)
+ if (touch.type == UITouchTypeStylus) {
+ if (Q_UNLIKELY(m_activePencilTouch)) {
+ qWarning("ignoring additional Pencil while first is still active");
+ continue;
+ }
+ m_activePencilTouch = touch;
+ } else
+ {
+ Q_ASSERT(!m_activeTouches.contains(touch));
+#endif
+ m_activeTouches[touch].id = m_nextTouchId++;
+#if QT_CONFIG(tabletevent)
+ }
+#endif
}
if (m_qioswindow->shouldAutoActivateWindow() && m_activeTouches.size() == 1) {
@@ -443,31 +489,36 @@
topLevel->requestActivateWindow();
}
- [self updateTouchList:touches withState:Qt::TouchPointPressed];
- [self sendTouchEventWithTimestamp:ulong(event.timestamp * 1000)];
+ [self handleTouches:touches withEvent:event withState:Qt::TouchPointPressed withTimestamp:ulong(event.timestamp * 1000)];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
- [self updateTouchList:touches withState:Qt::TouchPointMoved];
- [self sendTouchEventWithTimestamp:ulong(event.timestamp * 1000)];
+ [self handleTouches:touches withEvent:event withState:Qt::TouchPointMoved withTimestamp:ulong(event.timestamp * 1000)];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
- [self updateTouchList:touches withState:Qt::TouchPointReleased];
- [self sendTouchEventWithTimestamp:ulong(event.timestamp * 1000)];
+ [self handleTouches:touches withEvent:event withState:Qt::TouchPointReleased withTimestamp:ulong(event.timestamp * 1000)];
// Remove ended touch points from the active set:
- for (UITouch *touch in touches)
- m_activeTouches.remove(touch);
- if (m_activeTouches.isEmpty())
+ for (UITouch *touch in touches) {
+#if QT_CONFIG(tabletevent)
+ if (touch.type == UITouchTypeStylus) {
+ m_activePencilTouch = nil;
+ } else
+#endif
+ {
+ m_activeTouches.remove(touch);
+ }
+ }
+ if (m_activeTouches.isEmpty() && !m_activePencilTouch)
m_nextTouchId = 0;
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
- if (m_activeTouches.isEmpty())
+ if (m_activeTouches.isEmpty() && !m_activePencilTouch)
return;
// When four-finger swiping, we get a touchesCancelled callback
@@ -491,11 +542,12 @@
// sub-set of the active touch events are intentionally cancelled.
NSInteger count = static_cast<NSInteger>([touches count]);
- if (count != 0 && count != m_activeTouches.count())
+ if (count != 0 && count != m_activeTouches.count() && !m_activePencilTouch)
qWarning("Subset of active touches cancelled by UIKit");
m_activeTouches.clear();
m_nextTouchId = 0;
+ m_activePencilTouch = nil;
NSTimeInterval timestamp = event ? event.timestamp : [[NSProcessInfo processInfo] systemUptime];
diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp
index 82b916b9a9..24156b68e8 100644
--- a/src/plugins/platforms/linuxfb/main.cpp
+++ b/src/plugins/platforms/linuxfb/main.cpp
@@ -47,7 +47,7 @@ class QLinuxFbIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "linuxfb.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QPlatformIntegration *create(const QString&, const QStringList&) override;
};
QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp b/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp
index e15d6fee24..dcc1ef2790 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp
+++ b/src/plugins/platforms/linuxfb/qlinuxfbdrmscreen.cpp
@@ -43,7 +43,6 @@
// Multiscreen: QWindow-QScreen(-output) association. Needs some reorg (device cannot be owned by screen)
// Find card via devicediscovery like in eglfs_kms.
// Mode restore like QEglFSKmsInterruptHandler.
-// Formats other then 32 bpp?
// grabWindow
#include "qlinuxfbdrmscreen.h"
@@ -187,15 +186,67 @@ void QLinuxFbDevice::registerScreen(QPlatformScreen *screen,
Q_UNREACHABLE();
}
+static uint32_t bppForDrmFormat(uint32_t drmFormat)
+{
+ switch (drmFormat) {
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_BGR565:
+ return 16;
+ default:
+ return 32;
+ }
+}
+
+static int depthForDrmFormat(uint32_t drmFormat)
+{
+ switch (drmFormat) {
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_BGR565:
+ return 16;
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_XBGR8888:
+ return 24;
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_XBGR2101010:
+ return 30;
+ default:
+ return 32;
+ }
+}
+
+static QImage::Format formatForDrmFormat(uint32_t drmFormat)
+{
+ switch (drmFormat) {
+ case DRM_FORMAT_XRGB8888:
+ case DRM_FORMAT_XBGR8888:
+ return QImage::Format_RGB32;
+ case DRM_FORMAT_ARGB8888:
+ case DRM_FORMAT_ABGR8888:
+ return QImage::Format_ARGB32;
+ case DRM_FORMAT_RGB565:
+ case DRM_FORMAT_BGR565:
+ return QImage::Format_RGB16;
+ case DRM_FORMAT_XRGB2101010:
+ case DRM_FORMAT_XBGR2101010:
+ return QImage::Format_RGB30;
+ case DRM_FORMAT_ARGB2101010:
+ case DRM_FORMAT_ABGR2101010:
+ return QImage::Format_A2RGB30_Premultiplied;
+ default:
+ return QImage::Format_ARGB32;
+ }
+}
+
bool QLinuxFbDevice::createFramebuffer(QLinuxFbDevice::Output *output, int bufferIdx)
{
const QSize size = output->currentRes();
const uint32_t w = size.width();
const uint32_t h = size.height();
+ const uint32_t bpp = bppForDrmFormat(output->kmsOutput.drm_format);
drm_mode_create_dumb creq = {
h,
w,
- 32,
+ bpp,
0, 0, 0, 0
};
if (drmIoctl(fd(), DRM_IOCTL_MODE_CREATE_DUMB, &creq) == -1) {
@@ -207,10 +258,15 @@ bool QLinuxFbDevice::createFramebuffer(QLinuxFbDevice::Output *output, int buffe
fb.handle = creq.handle;
fb.pitch = creq.pitch;
fb.size = creq.size;
- qCDebug(qLcFbDrm, "Got a dumb buffer for size %dx%d, handle %u, pitch %u, size %u",
- w, h, fb.handle, fb.pitch, (uint) fb.size);
+ qCDebug(qLcFbDrm, "Got a dumb buffer for size %dx%d and bpp %u: handle %u, pitch %u, size %u",
+ w, h, bpp, fb.handle, fb.pitch, (uint) fb.size);
+
+ uint32_t handles[4] = { fb.handle };
+ uint32_t strides[4] = { fb.pitch };
+ uint32_t offsets[4] = { 0 };
- if (drmModeAddFB(fd(), w, h, 24, 32, fb.pitch, fb.handle, &fb.fb) == -1) {
+ if (drmModeAddFB2(fd(), w, h, output->kmsOutput.drm_format,
+ handles, strides, offsets, &fb.fb, 0) == -1) {
qErrnoWarning(errno, "Failed to add FB");
return false;
}
@@ -229,10 +285,10 @@ bool QLinuxFbDevice::createFramebuffer(QLinuxFbDevice::Output *output, int buffe
return false;
}
- qCDebug(qLcFbDrm, "FB is %u, mapped at %p", fb.fb, fb.p);
+ qCDebug(qLcFbDrm, "FB is %u (DRM format 0x%x), mapped at %p", fb.fb, output->kmsOutput.drm_format, fb.p);
memset(fb.p, 0, fb.size);
- fb.wrapper = QImage(static_cast<uchar *>(fb.p), w, h, fb.pitch, QImage::Format_ARGB32);
+ fb.wrapper = QImage(static_cast<uchar *>(fb.p), w, h, fb.pitch, formatForDrmFormat(output->kmsOutput.drm_format));
return true;
}
@@ -357,10 +413,10 @@ bool QLinuxFbDrmScreen::initialize()
QLinuxFbDevice::Output *output(m_device->output(0));
mGeometry = QRect(QPoint(0, 0), output->currentRes());
- mDepth = 32;
- mFormat = QImage::Format_ARGB32;
+ mDepth = depthForDrmFormat(output->kmsOutput.drm_format);
+ mFormat = formatForDrmFormat(output->kmsOutput.drm_format);
mPhysicalSize = output->kmsOutput.physical_size;
- qCDebug(qLcFbDrm) << mGeometry << mPhysicalSize;
+ qCDebug(qLcFbDrm) << mGeometry << mPhysicalSize << mDepth << mFormat;
QFbScreen::initializeCompositor();
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
index 9934a8cd54..22578bf980 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
+++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
@@ -55,19 +55,19 @@ public:
QLinuxFbIntegration(const QStringList &paramList);
~QLinuxFbIntegration();
- void initialize() Q_DECL_OVERRIDE;
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ void initialize() override;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QPlatformServices *services() const Q_DECL_OVERRIDE;
- QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE { return m_inputContext; }
+ QPlatformFontDatabase *fontDatabase() const override;
+ QPlatformServices *services() const override;
+ QPlatformInputContext *inputContext() const override { return m_inputContext; }
- QPlatformNativeInterface *nativeInterface() const Q_DECL_OVERRIDE;
+ QPlatformNativeInterface *nativeInterface() const override;
QList<QPlatformScreen *> screens() const;
diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp
index 29809c1843..f9a0c17509 100644
--- a/src/plugins/platforms/minimal/main.cpp
+++ b/src/plugins/platforms/minimal/main.cpp
@@ -48,7 +48,7 @@ class QMinimalIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "minimal.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QPlatformIntegration *create(const QString&, const QStringList&) override;
};
QPlatformIntegration *QMinimalIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro
index 8cfb68824e..a1a2da547b 100644
--- a/src/plugins/platforms/minimal/minimal.pro
+++ b/src/plugins/platforms/minimal/minimal.pro
@@ -14,6 +14,8 @@ HEADERS = qminimalintegration.h \
OTHER_FILES += minimal.json
+qtConfig(freetype): QMAKE_USE_PRIVATE += freetype
+
PLUGIN_TYPE = platforms
PLUGIN_CLASS_NAME = QMinimalIntegrationPlugin
!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
diff --git a/src/plugins/platforms/minimal/qminimalbackingstore.h b/src/plugins/platforms/minimal/qminimalbackingstore.h
index 3d7aaf2b99..2119894809 100644
--- a/src/plugins/platforms/minimal/qminimalbackingstore.h
+++ b/src/plugins/platforms/minimal/qminimalbackingstore.h
@@ -52,9 +52,9 @@ public:
QMinimalBackingStore(QWindow *window);
~QMinimalBackingStore();
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
+ void resize(const QSize &size, const QRegion &staticContents) override;
private:
QImage mImage;
diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp
index ca33689cd7..0c04608fca 100644
--- a/src/plugins/platforms/minimal/qminimalintegration.cpp
+++ b/src/plugins/platforms/minimal/qminimalintegration.cpp
@@ -54,11 +54,17 @@
# endif
#elif defined(Q_OS_DARWIN)
# include <QtFontDatabaseSupport/private/qcoretextfontdatabase_p.h>
-#elif QT_CONFIG(fontconfig)
+#endif
+
+#if QT_CONFIG(fontconfig)
# include <QtFontDatabaseSupport/private/qgenericunixfontdatabase_p.h>
# include <qpa/qplatformfontdatabase.h>
#endif
+#if QT_CONFIG(freetype)
+#include <QtFontDatabaseSupport/private/qfontengine_ft_p.h>
+#endif
+
#if !defined(Q_OS_WIN)
#include <QtEventDispatcherSupport/private/qgenericunixeventdispatcher_p.h>
#elif defined(Q_OS_WINRT)
@@ -81,6 +87,8 @@ static inline unsigned parseOptions(const QStringList &paramList)
options |= QMinimalIntegration::EnableFonts;
else if (param == QLatin1String("freetype"))
options |= QMinimalIntegration::FreeTypeFontDatabase;
+ else if (param == QLatin1String("fontconfig"))
+ options |= QMinimalIntegration::FontconfigDatabase;
}
return options;
}
@@ -123,15 +131,13 @@ bool QMinimalIntegration::hasCapability(QPlatformIntegration::Capability cap) co
class DummyFontDatabase : public QPlatformFontDatabase
{
public:
- virtual void populateFontDatabase() Q_DECL_OVERRIDE {}
+ virtual void populateFontDatabase() override {}
};
QPlatformFontDatabase *QMinimalIntegration::fontDatabase() const
{
if (!m_fontDatabase && (m_options & EnableFonts)) {
-#if QT_CONFIG(fontconfig)
- m_fontDatabase = new QGenericUnixFontDatabase;
-#elif defined(Q_OS_WINRT)
+#if defined(Q_OS_WINRT)
m_fontDatabase = new QWinRTFontDatabase;
#elif defined(Q_OS_WIN)
if (m_options & FreeTypeFontDatabase) {
@@ -142,10 +148,24 @@ QPlatformFontDatabase *QMinimalIntegration::fontDatabase() const
m_fontDatabase = new QWindowsFontDatabase;
}
#elif defined(Q_OS_DARWIN)
- m_fontDatabase = new QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>;
+ if (!(m_options & FontconfigDatabase)) {
+ if (m_options & FreeTypeFontDatabase) {
+# if QT_CONFIG(freetype)
+ m_fontDatabase = new QCoreTextFontDatabaseEngineFactory<QFontEngineFT>;
+# endif // freetype
+ } else {
+ m_fontDatabase = new QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>;
+ }
+ }
+#endif
+
+ if (!m_fontDatabase) {
+#if QT_CONFIG(fontconfig)
+ m_fontDatabase = new QGenericUnixFontDatabase;
#else
- m_fontDatabase = QPlatformIntegration::fontDatabase();
+ m_fontDatabase = QPlatformIntegration::fontDatabase();
#endif
+ }
}
if (!m_fontDatabase)
m_fontDatabase = new DummyFontDatabase;
diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h
index eaa2f228c5..ad1bec2112 100644
--- a/src/plugins/platforms/minimal/qminimalintegration.h
+++ b/src/plugins/platforms/minimal/qminimalintegration.h
@@ -51,9 +51,9 @@ public:
QMinimalScreen()
: mDepth(32), mFormat(QImage::Format_ARGB32_Premultiplied) {}
- QRect geometry() const Q_DECL_OVERRIDE { return mGeometry; }
- int depth() const Q_DECL_OVERRIDE { return mDepth; }
- QImage::Format format() const Q_DECL_OVERRIDE { return mFormat; }
+ QRect geometry() const override { return mGeometry; }
+ int depth() const override { return mDepth; }
+ QImage::Format format() const override { return mFormat; }
public:
QRect mGeometry;
@@ -68,18 +68,19 @@ public:
enum Options { // Options to be passed on command line or determined from environment
DebugBackingStore = 0x1,
EnableFonts = 0x2,
- FreeTypeFontDatabase = 0x4
+ FreeTypeFontDatabase = 0x4,
+ FontconfigDatabase = 0x8
};
explicit QMinimalIntegration(const QStringList &parameters);
~QMinimalIntegration();
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
+ QPlatformFontDatabase *fontDatabase() const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
unsigned options() const { return m_options; }
diff --git a/src/plugins/platforms/minimalegl/main.cpp b/src/plugins/platforms/minimalegl/main.cpp
index a010ed76e2..5aac71e140 100644
--- a/src/plugins/platforms/minimalegl/main.cpp
+++ b/src/plugins/platforms/minimalegl/main.cpp
@@ -47,7 +47,7 @@ class QMinimalEglIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "minimalegl.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QPlatformIntegration *create(const QString&, const QStringList&) override;
};
QPlatformIntegration* QMinimalEglIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h b/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h
index 0e22298891..382f2d1404 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h
@@ -53,13 +53,13 @@ public:
QMinimalEglBackingStore(QWindow *window);
~QMinimalEglBackingStore();
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
- void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
- void endPaint() Q_DECL_OVERRIDE;
+ void beginPaint(const QRegion &) override;
+ void endPaint() override;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
+ void resize(const QSize &size, const QRegion &staticContents) override;
private:
QOpenGLContext *m_context;
diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
index a716a6092a..5d31af53d5 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
+++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
@@ -71,7 +71,7 @@ public:
QWinRTEventDispatcher() {}
protected:
- bool hasPendingEvents() Q_DECL_OVERRIDE
+ bool hasPendingEvents() override
{
return QEventDispatcherWinRT::hasPendingEvents() || QWindowSystemInterface::windowSystemEventsQueued();
}
@@ -156,7 +156,7 @@ QAbstractEventDispatcher *QMinimalEglIntegration::createEventDispatcher() const
#elif defined(Q_OS_WIN)
return new QWindowsGuiEventDispatcher;
#else
- return Q_NULLPTR;
+ return nullptr;
#endif
}
diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.h b/src/plugins/platforms/minimalegl/qminimaleglintegration.h
index d0ab75bd3c..70a51004a6 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglintegration.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.h
@@ -51,18 +51,18 @@ public:
QMinimalEglIntegration();
~QMinimalEglIntegration();
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
#ifndef QT_NO_OPENGL
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override;
#endif
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
+ QPlatformFontDatabase *fontDatabase() const override;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
- QVariant styleHint(QPlatformIntegration::StyleHint hint) const Q_DECL_OVERRIDE;
+ QVariant styleHint(QPlatformIntegration::StyleHint hint) const override;
private:
QPlatformFontDatabase *mFontDb;
diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
index 0175d2dbdd..6e122e28ce 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
+++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
@@ -64,7 +64,7 @@ public:
{
}
- EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) Q_DECL_OVERRIDE
+ EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) override
{
QMinimalEglWindow *window = static_cast<QMinimalEglWindow *>(surface);
QMinimalEglScreen *screen = static_cast<QMinimalEglScreen *>(window->screen());
diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.h b/src/plugins/platforms/minimalegl/qminimaleglscreen.h
index 24098b8127..926936ae32 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglscreen.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.h
@@ -56,9 +56,9 @@ public:
QMinimalEglScreen(EGLNativeDisplayType display);
~QMinimalEglScreen();
- QRect geometry() const Q_DECL_OVERRIDE;
- int depth() const Q_DECL_OVERRIDE;
- QImage::Format format() const Q_DECL_OVERRIDE;
+ QRect geometry() const override;
+ int depth() const override;
+ QImage::Format format() const override;
#ifndef QT_NO_OPENGL
QPlatformOpenGLContext *platformContext() const;
#endif
diff --git a/src/plugins/platforms/minimalegl/qminimaleglwindow.h b/src/plugins/platforms/minimalegl/qminimaleglwindow.h
index b8bfd6c8d2..098ec05e6b 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglwindow.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglwindow.h
@@ -51,8 +51,8 @@ class QMinimalEglWindow : public QPlatformWindow
public:
QMinimalEglWindow(QWindow *w);
- void setGeometry(const QRect &) Q_DECL_OVERRIDE;
- WId winId() const Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &) override;
+ WId winId() const override;
private:
WId m_winid;
diff --git a/src/plugins/platforms/mirclient/qmirclientinput.cpp b/src/plugins/platforms/mirclient/qmirclientinput.cpp
index ea13f3cc17..e5319b0435 100644
--- a/src/plugins/platforms/mirclient/qmirclientinput.cpp
+++ b/src/plugins/platforms/mirclient/qmirclientinput.cpp
@@ -156,6 +156,36 @@ static const uint32_t KeyTable[] = {
XKB_KEY_dead_belowdot, Qt::Key_Dead_Belowdot,
XKB_KEY_dead_hook, Qt::Key_Dead_Hook,
XKB_KEY_dead_horn, Qt::Key_Dead_Horn,
+ XKB_KEY_dead_stroke, Qt::Key_Dead_Stroke,
+ XKB_KEY_dead_abovecomma, Qt::Key_Dead_Abovecomma,
+ XKB_KEY_dead_abovereversedcomma, Qt::Key_Dead_Abovereversedcomma,
+ XKB_KEY_dead_doublegrave, Qt::Key_Dead_Doublegrave,
+ XKB_KEY_dead_belowring, Qt::Key_Dead_Belowring,
+ XKB_KEY_dead_belowmacron, Qt::Key_Dead_Belowmacron,
+ XKB_KEY_dead_belowcircumflex, Qt::Key_Dead_Belowcircumflex,
+ XKB_KEY_dead_belowtilde, Qt::Key_Dead_Belowtilde,
+ XKB_KEY_dead_belowbreve, Qt::Key_Dead_Belowbreve,
+ XKB_KEY_dead_belowdiaeresis, Qt::Key_Dead_Belowdiaeresis,
+ XKB_KEY_dead_invertedbreve, Qt::Key_Dead_Invertedbreve,
+ XKB_KEY_dead_belowcomma, Qt::Key_Dead_Belowcomma,
+ XKB_KEY_dead_currency, Qt::Key_Dead_Currency,
+ XKB_KEY_dead_a, Qt::Key_Dead_a,
+ XKB_KEY_dead_A, Qt::Key_Dead_A,
+ XKB_KEY_dead_e, Qt::Key_Dead_e,
+ XKB_KEY_dead_E, Qt::Key_Dead_E,
+ XKB_KEY_dead_i, Qt::Key_Dead_i,
+ XKB_KEY_dead_I, Qt::Key_Dead_I,
+ XKB_KEY_dead_o, Qt::Key_Dead_o,
+ XKB_KEY_dead_O, Qt::Key_Dead_O,
+ XKB_KEY_dead_u, Qt::Key_Dead_u,
+ XKB_KEY_dead_U, Qt::Key_Dead_U,
+ XKB_KEY_dead_small_schwa, Qt::Key_Dead_Small_Schwa,
+ XKB_KEY_dead_capital_schwa, Qt::Key_Dead_Capital_Schwa,
+ XKB_KEY_dead_greek, Qt::Key_Dead_Greek,
+ XKB_KEY_dead_lowline, Qt::Key_Dead_Lowline,
+ XKB_KEY_dead_aboveverticalline, Qt::Key_Dead_Aboveverticalline,
+ XKB_KEY_dead_belowverticalline, Qt::Key_Dead_Belowverticalline,
+ XKB_KEY_dead_longsolidusoverlay, Qt::Key_Dead_Longsolidusoverlay,
XKB_KEY_Mode_switch, Qt::Key_Mode_switch,
XKB_KEY_script_switch, Qt::Key_Mode_switch,
diff --git a/src/plugins/platforms/offscreen/main.cpp b/src/plugins/platforms/offscreen/main.cpp
index 9750c4f7ca..207db60f3a 100644
--- a/src/plugins/platforms/offscreen/main.cpp
+++ b/src/plugins/platforms/offscreen/main.cpp
@@ -48,7 +48,7 @@ class QOffscreenIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID QPlatformIntegrationFactoryInterface_iid FILE "offscreen.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
+ QPlatformIntegration *create(const QString&, const QStringList&) override;
};
QPlatformIntegration *QOffscreenIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/offscreen/qoffscreencommon.cpp b/src/plugins/platforms/offscreen/qoffscreencommon.cpp
index 85422071aa..f0eb69718a 100644
--- a/src/plugins/platforms/offscreen/qoffscreencommon.cpp
+++ b/src/plugins/platforms/offscreen/qoffscreencommon.cpp
@@ -55,8 +55,8 @@ class QOffscreenCursor : public QPlatformCursor
public:
QOffscreenCursor() : m_pos(10, 10) {}
- QPoint pos() const Q_DECL_OVERRIDE { return m_pos; }
- void setPos(const QPoint &pos) Q_DECL_OVERRIDE
+ QPoint pos() const override { return m_pos; }
+ void setPos(const QPoint &pos) override
{
m_pos = pos;
const QWindowList wl = QGuiApplication::topLevelWindows();
@@ -82,7 +82,7 @@ public:
QOffscreenScreen::windowContainingCursor = containing ? containing->handle() : 0;
}
#ifndef QT_NO_CURSOR
- void changeCursor(QCursor *windowCursor, QWindow *window) Q_DECL_OVERRIDE
+ void changeCursor(QCursor *windowCursor, QWindow *window) override
{
Q_UNUSED(windowCursor);
Q_UNUSED(window);
diff --git a/src/plugins/platforms/offscreen/qoffscreencommon.h b/src/plugins/platforms/offscreen/qoffscreencommon.h
index 1a9d65972d..541c07384c 100644
--- a/src/plugins/platforms/offscreen/qoffscreencommon.h
+++ b/src/plugins/platforms/offscreen/qoffscreencommon.h
@@ -57,12 +57,12 @@ class QOffscreenScreen : public QPlatformScreen
public:
QOffscreenScreen();
- QRect geometry() const Q_DECL_OVERRIDE { return m_geometry; }
- int depth() const Q_DECL_OVERRIDE { return 32; }
- QImage::Format format() const Q_DECL_OVERRIDE { return QImage::Format_RGB32; }
- QPlatformCursor *cursor() const Q_DECL_OVERRIDE { return m_cursor.data(); }
+ QRect geometry() const override { return m_geometry; }
+ int depth() const override { return 32; }
+ QImage::Format format() const override { return QImage::Format_RGB32; }
+ QPlatformCursor *cursor() const override { return m_cursor.data(); }
- QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const override;
static QPlatformWindow *windowContainingCursor;
@@ -75,7 +75,7 @@ public:
class QOffscreenDrag : public QPlatformDrag
{
public:
- Qt::DropAction drag(QDrag *) Q_DECL_OVERRIDE { return Qt::IgnoreAction; }
+ Qt::DropAction drag(QDrag *) override { return Qt::IgnoreAction; }
};
#endif
@@ -85,10 +85,10 @@ public:
QOffscreenBackingStore(QWindow *window);
~QOffscreenBackingStore();
- QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
- bool scroll(const QRegion &area, int dx, int dy) Q_DECL_OVERRIDE;
+ QPaintDevice *paintDevice() override;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) override;
+ void resize(const QSize &size, const QRegion &staticContents) override;
+ bool scroll(const QRegion &area, int dx, int dy) override;
QPixmap grabWindow(WId window, const QRect &rect) const;
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.h b/src/plugins/platforms/offscreen/qoffscreenintegration.h
index 154a420e3d..a1e3a9bde8 100644
--- a/src/plugins/platforms/offscreen/qoffscreenintegration.h
+++ b/src/plugins/platforms/offscreen/qoffscreenintegration.h
@@ -54,23 +54,23 @@ public:
QOffscreenIntegration();
~QOffscreenIntegration();
- void initialize() Q_DECL_OVERRIDE;
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ void initialize() override;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
- QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const override;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const override;
#ifndef QT_NO_DRAGANDDROP
- QPlatformDrag *drag() const Q_DECL_OVERRIDE;
+ QPlatformDrag *drag() const override;
#endif
- QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE;
- QPlatformServices *services() const Q_DECL_OVERRIDE;
+ QPlatformInputContext *inputContext() const override;
+ QPlatformServices *services() const override;
- QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ QPlatformFontDatabase *fontDatabase() const override;
+ QAbstractEventDispatcher *createEventDispatcher() const override;
- QStringList themeNames() const Q_DECL_OVERRIDE;
- QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE;
+ QStringList themeNames() const override;
+ QPlatformTheme *createPlatformTheme(const QString &name) const override;
static QOffscreenIntegration *createOffscreenIntegration();
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h
index aaca74d2fb..5e1c6b799b 100644
--- a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h
+++ b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h
@@ -55,9 +55,9 @@ class QOffscreenX11Info;
class QOffscreenX11Integration : public QOffscreenIntegration
{
public:
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const override;
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const override;
private:
mutable QScopedPointer<QOffscreenX11Connection> m_connection;
@@ -88,14 +88,14 @@ public:
QOffscreenX11GLXContext(QOffscreenX11Info *x11, QOpenGLContext *context);
~QOffscreenX11GLXContext();
- bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
- void doneCurrent() Q_DECL_OVERRIDE;
- void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
- QFunctionPointer getProcAddress(const char *procName) Q_DECL_OVERRIDE;
+ bool makeCurrent(QPlatformSurface *surface) override;
+ void doneCurrent() override;
+ void swapBuffers(QPlatformSurface *surface) override;
+ QFunctionPointer getProcAddress(const char *procName) override;
- QSurfaceFormat format() const Q_DECL_OVERRIDE;
- bool isSharing() const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
+ QSurfaceFormat format() const override;
+ bool isSharing() const override;
+ bool isValid() const override;
private:
QScopedPointer<QOffscreenX11GLXContextData> d;
diff --git a/src/plugins/platforms/offscreen/qoffscreenwindow.h b/src/plugins/platforms/offscreen/qoffscreenwindow.h
index 0dced9680a..e1f37bb034 100644
--- a/src/plugins/platforms/offscreen/qoffscreenwindow.h
+++ b/src/plugins/platforms/offscreen/qoffscreenwindow.h
@@ -53,15 +53,15 @@ public:
QOffscreenWindow(QWindow *window);
~QOffscreenWindow();
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- void setWindowState(Qt::WindowStates states) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &rect) override;
+ void setWindowState(Qt::WindowStates states) override;
- QMargins frameMargins() const Q_DECL_OVERRIDE;
+ QMargins frameMargins() const override;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void requestActivateWindow() Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
+ void requestActivateWindow() override;
- WId winId() const Q_DECL_OVERRIDE;
+ WId winId() const override;
static QOffscreenWindow *windowForWinId(WId id);
diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro
index 9414f01ef0..e61887618f 100644
--- a/src/plugins/platforms/platforms.pro
+++ b/src/plugins/platforms/platforms.pro
@@ -36,7 +36,7 @@ qtConfig(directfb) {
qtConfig(linuxfb): SUBDIRS += linuxfb
-qtConfig(vnc): SUBDIRS += vnc
+qtHaveModule(network):qtConfig(vnc): SUBDIRS += vnc
freebsd {
SUBDIRS += bsdfb
diff --git a/src/plugins/platforms/qnx/qnx.pro b/src/plugins/platforms/qnx/qnx.pro
index 15d33200e5..96bfa1dd19 100644
--- a/src/plugins/platforms/qnx/qnx.pro
+++ b/src/plugins/platforms/qnx/qnx.pro
@@ -71,14 +71,14 @@ HEADERS = main.h \
LIBS += -lscreen
-qtConfig(opengles2) {
+qtConfig(egl) {
SOURCES += qqnxglcontext.cpp \
qqnxeglwindow.cpp
HEADERS += qqnxglcontext.h \
qqnxeglwindow.h
- QMAKE_USE += opengl_es2 egl
+ QMAKE_USE += egl
}
qtConfig(qqnx_pps) {
diff --git a/src/plugins/platforms/qnx/qqnxeglwindow.cpp b/src/plugins/platforms/qnx/qqnxeglwindow.cpp
index 33ce0f924c..48766fc435 100644
--- a/src/plugins/platforms/qnx/qqnxeglwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxeglwindow.cpp
@@ -56,18 +56,12 @@ QT_BEGIN_NAMESPACE
QQnxEglWindow::QQnxEglWindow(QWindow *window, screen_context_t context, bool needRootWindow) :
QQnxWindow(window, context, needRootWindow),
- m_platformOpenGLContext(0),
m_newSurfaceRequested(true),
+ m_eglDisplay(EGL_NO_DISPLAY),
m_eglSurface(EGL_NO_SURFACE)
{
initWindow();
- // Set window usage
- const int val = SCREEN_USAGE_OPENGL_ES2;
- const int result = screen_set_window_property_iv(nativeHandle(), SCREEN_PROPERTY_USAGE, &val);
- if (Q_UNLIKELY(result != 0))
- qFatal("QQnxEglWindow: failed to set window alpha usage, errno=%d", errno);
-
m_requestedBufferSize = shouldMakeFullScreen() ? screen()->geometry().size() : window->geometry().size();
}
@@ -77,14 +71,58 @@ QQnxEglWindow::~QQnxEglWindow()
destroyEGLSurface();
}
-void QQnxEglWindow::createEGLSurface()
+bool QQnxEglWindow::isInitialized() const
{
+ return m_eglSurface != EGL_NO_SURFACE;
+}
+
+void QQnxEglWindow::ensureInitialized(QQnxGLContext* context)
+{
+ if (m_newSurfaceRequested.testAndSetOrdered(true, false)) {
+ const QMutexLocker locker(&m_mutex); // Set geomety must not reset the requestedBufferSize till
+ // the surface is created
+
+ if (m_requestedBufferSize != bufferSize() || m_eglSurface == EGL_NO_SURFACE) {
+ if (m_eglSurface != EGL_NO_SURFACE) {
+ context->doneCurrent();
+ destroyEGLSurface();
+ }
+ createEGLSurface(context);
+ } else {
+ // Must've been a sequence of unprocessed changes returning us to the original size.
+ resetBuffers();
+ }
+ }
+}
+
+void QQnxEglWindow::createEGLSurface(QQnxGLContext *context)
+{
+ if (context->format().renderableType() != QSurfaceFormat::OpenGLES) {
+ qFatal("QQnxEglWindow: renderable type is not OpenGLES");
+ return;
+ }
+
+ // Set window usage
+ int usage = SCREEN_USAGE_OPENGL_ES2;
+#if _SCREEN_VERSION >= _SCREEN_MAKE_VERSION(1, 0, 0)
+ if (context->format().majorVersion() == 3)
+ usage |= SCREEN_USAGE_OPENGL_ES3;
+#endif
+
+ const int result = screen_set_window_property_iv(nativeHandle(), SCREEN_PROPERTY_USAGE, &usage);
+ if (Q_UNLIKELY(result != 0))
+ qFatal("QQnxEglWindow: failed to set window usage, errno=%d", errno);
+
if (!m_requestedBufferSize.isValid()) {
qWarning("QQNX: Trying to create 0 size EGL surface. "
"Please set a valid window size before calling QOpenGLContext::makeCurrent()");
return;
}
+ m_eglDisplay = context->eglDisplay();
+ m_eglConfig = context->eglConfig();
+ m_format = context->format();
+
// update the window's buffers before we create the EGL surface
setBufferSize(m_requestedBufferSize);
@@ -94,24 +132,27 @@ void QQnxEglWindow::createEGLSurface()
EGL_NONE
};
- qEglWindowDebug() << "Creating EGL surface" << platformOpenGLContext()->getEglDisplay()
- << platformOpenGLContext()->getEglConfig();
+ qEglWindowDebug() << "Creating EGL surface from" << this << context
+ << window()->surfaceType() << window()->type();
// Create EGL surface
- m_eglSurface = eglCreateWindowSurface(platformOpenGLContext()->getEglDisplay(),
- platformOpenGLContext()->getEglConfig(),
- (EGLNativeWindowType) nativeHandle(), eglSurfaceAttrs);
- if (m_eglSurface == EGL_NO_SURFACE) {
- const EGLenum error = QQnxGLContext::checkEGLError("eglCreateWindowSurface");
- qWarning("QQNX: failed to create EGL surface, err=%d", error);
- }
+ EGLSurface eglSurface = eglCreateWindowSurface(
+ m_eglDisplay,
+ m_eglConfig,
+ (EGLNativeWindowType) nativeHandle(),
+ eglSurfaceAttrs);
+
+ if (eglSurface == EGL_NO_SURFACE)
+ qWarning("QQNX: failed to create EGL surface, err=%d", eglGetError());
+
+ m_eglSurface = eglSurface;
}
void QQnxEglWindow::destroyEGLSurface()
{
// Destroy EGL surface if it exists
if (m_eglSurface != EGL_NO_SURFACE) {
- EGLBoolean eglResult = eglDestroySurface(platformOpenGLContext()->getEglDisplay(), m_eglSurface);
+ EGLBoolean eglResult = eglDestroySurface(m_eglDisplay, m_eglSurface);
if (Q_UNLIKELY(eglResult != EGL_TRUE))
qFatal("QQNX: failed to destroy EGL surface, err=%d", eglGetError());
}
@@ -119,40 +160,8 @@ void QQnxEglWindow::destroyEGLSurface()
m_eglSurface = EGL_NO_SURFACE;
}
-void QQnxEglWindow::swapEGLBuffers()
+EGLSurface QQnxEglWindow::surface() const
{
- qEglWindowDebug();
- // Set current rendering API
- EGLBoolean eglResult = eglBindAPI(EGL_OPENGL_ES_API);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQNX: failed to set EGL API, err=%d", eglGetError());
-
- // Post EGL surface to window
- eglResult = eglSwapBuffers(m_platformOpenGLContext->getEglDisplay(), m_eglSurface);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQNX: failed to swap EGL buffers, err=%d", eglGetError());
-
- windowPosted();
-}
-
-EGLSurface QQnxEglWindow::getSurface()
-{
- if (m_newSurfaceRequested.testAndSetOrdered(true, false)) {
- const QMutexLocker locker(&m_mutex); //Set geomety must not reset the requestedBufferSize till
- //the surface is created
-
- if ((m_requestedBufferSize != bufferSize()) || (m_eglSurface == EGL_NO_SURFACE)) {
- if (m_eglSurface != EGL_NO_SURFACE) {
- platformOpenGLContext()->doneCurrent();
- destroyEGLSurface();
- }
- createEGLSurface();
- } else {
- // Must've been a sequence of unprocessed changes returning us to the original size.
- resetBuffers();
- }
- }
-
return m_eglSurface;
}
@@ -169,35 +178,24 @@ void QQnxEglWindow::setGeometry(const QRect &rect)
// that test.
const QMutexLocker locker(&m_mutex);
m_requestedBufferSize = newGeometry.size();
- if (m_platformOpenGLContext != 0 && bufferSize() != newGeometry.size())
+ if (isInitialized() && bufferSize() != newGeometry.size())
m_newSurfaceRequested.testAndSetRelease(false, true);
}
QQnxWindow::setGeometry(newGeometry);
}
-void QQnxEglWindow::setPlatformOpenGLContext(QQnxGLContext *platformOpenGLContext)
-{
- // This function does not take ownership of the platform gl context.
- // It is owned by the frontend QOpenGLContext
- m_platformOpenGLContext = platformOpenGLContext;
-}
-
int QQnxEglWindow::pixelFormat() const
{
- if (!m_platformOpenGLContext) //The platform GL context was not set yet
- return -1;
-
- const QSurfaceFormat format = m_platformOpenGLContext->format();
// Extract size of color channels from window format
- const int redSize = format.redBufferSize();
+ const int redSize = m_format.redBufferSize();
if (Q_UNLIKELY(redSize == -1))
qFatal("QQnxWindow: red size not defined");
- const int greenSize = format.greenBufferSize();
+ const int greenSize = m_format.greenBufferSize();
if (Q_UNLIKELY(greenSize == -1))
qFatal("QQnxWindow: green size not defined");
- const int blueSize = format.blueBufferSize();
+ const int blueSize = m_format.blueBufferSize();
if (Q_UNLIKELY(blueSize == -1))
qFatal("QQnxWindow: blue size not defined");
diff --git a/src/plugins/platforms/qnx/qqnxeglwindow.h b/src/plugins/platforms/qnx/qqnxeglwindow.h
index 183be11ddc..3a3840f13c 100644
--- a/src/plugins/platforms/qnx/qqnxeglwindow.h
+++ b/src/plugins/platforms/qnx/qqnxeglwindow.h
@@ -53,13 +53,10 @@ public:
QQnxEglWindow(QWindow *window, screen_context_t context, bool needRootWindow);
~QQnxEglWindow();
- void createEGLSurface();
- void destroyEGLSurface();
- void swapEGLBuffers();
- EGLSurface getSurface();
+ EGLSurface surface() const;
- void setPlatformOpenGLContext(QQnxGLContext *platformOpenGLContext);
- QQnxGLContext *platformOpenGLContext() const { return m_platformOpenGLContext; }
+ bool isInitialized() const;
+ void ensureInitialized(QQnxGLContext *context);
void setGeometry(const QRect &rect) override;
@@ -68,6 +65,9 @@ protected:
void resetBuffers() override;
private:
+ void createEGLSurface(QQnxGLContext *context);
+ void destroyEGLSurface();
+
QSize m_requestedBufferSize;
// This mutex is used to protect access to the m_requestedBufferSize
@@ -78,9 +78,11 @@ private:
// QQnxGLContext::makeCurrent()
mutable QMutex m_mutex;
- QQnxGLContext *m_platformOpenGLContext;
QAtomicInt m_newSurfaceRequested;
+ EGLDisplay m_eglDisplay;
+ EGLConfig m_eglConfig;
EGLSurface m_eglSurface;
+ QSurfaceFormat m_format;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxglcontext.cpp b/src/plugins/platforms/qnx/qqnxglcontext.cpp
index d35a4f0bba..d4493943e2 100644
--- a/src/plugins/platforms/qnx/qqnxglcontext.cpp
+++ b/src/plugins/platforms/qnx/qqnxglcontext.cpp
@@ -59,117 +59,13 @@ QT_BEGIN_NAMESPACE
EGLDisplay QQnxGLContext::ms_eglDisplay = EGL_NO_DISPLAY;
-QQnxGLContext::QQnxGLContext(QOpenGLContext *glContext)
- : QPlatformOpenGLContext(),
- m_glContext(glContext),
- m_currentEglSurface(EGL_NO_SURFACE)
+QQnxGLContext::QQnxGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share)
+ : QEGLPlatformContext(format, share, ms_eglDisplay)
{
- qGLContextDebug();
- QSurfaceFormat format = m_glContext->format();
-
- // Set current rendering API
- EGLBoolean eglResult = eglBindAPI(EGL_OPENGL_ES_API);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQNX: failed to set EGL API, err=%d", eglGetError());
-
- // Get colour channel sizes from window format
- int alphaSize = format.alphaBufferSize();
- int redSize = format.redBufferSize();
- int greenSize = format.greenBufferSize();
- int blueSize = format.blueBufferSize();
-
- // Check if all channels are don't care
- if (alphaSize == -1 && redSize == -1 && greenSize == -1 && blueSize == -1) {
- // Set colour channels based on depth of window's screen
- QQnxScreen *screen = static_cast<QQnxScreen*>(glContext->screen()->handle());
- int depth = screen->depth();
- if (depth == 32) {
- // SCREEN_FORMAT_RGBA8888
- alphaSize = 8;
- redSize = 8;
- greenSize = 8;
- blueSize = 8;
- } else {
- // SCREEN_FORMAT_RGB565
- alphaSize = 0;
- redSize = 5;
- greenSize = 6;
- blueSize = 5;
- }
- } else {
- // Choose best match based on supported pixel formats
- if (alphaSize <= 0 && redSize <= 5 && greenSize <= 6 && blueSize <= 5) {
- // SCREEN_FORMAT_RGB565
- alphaSize = 0;
- redSize = 5;
- greenSize = 6;
- blueSize = 5;
- } else {
- // SCREEN_FORMAT_RGBA8888
- alphaSize = 8;
- redSize = 8;
- greenSize = 8;
- blueSize = 8;
- }
- }
-
- // Update colour channel sizes in window format
- format.setAlphaBufferSize(alphaSize);
- format.setRedBufferSize(redSize);
- format.setGreenBufferSize(greenSize);
- format.setBlueBufferSize(blueSize);
-
- // Select EGL config based on requested window format
- m_eglConfig = q_configFromGLFormat(ms_eglDisplay, format);
- if (Q_UNLIKELY(m_eglConfig == 0))
- qFatal("QQnxGLContext: failed to find EGL config");
-
- QQnxGLContext *glShareContext = static_cast<QQnxGLContext*>(m_glContext->shareHandle());
- m_eglShareContext = glShareContext ? glShareContext->m_eglContext : EGL_NO_CONTEXT;
-
- m_eglContext = eglCreateContext(ms_eglDisplay, m_eglConfig, m_eglShareContext,
- contextAttrs(format));
- if (Q_UNLIKELY(m_eglContext == EGL_NO_CONTEXT)) {
- checkEGLError("eglCreateContext");
- qFatal("QQnxGLContext: failed to create EGL context, err=%d", eglGetError());
- }
-
- // Query/cache window format of selected EGL config
- m_windowFormat = q_glFormatFromConfig(ms_eglDisplay, m_eglConfig);
}
QQnxGLContext::~QQnxGLContext()
{
- qGLContextDebug();
-
- // Cleanup EGL context if it exists
- if (m_eglContext != EGL_NO_CONTEXT)
- eglDestroyContext(ms_eglDisplay, m_eglContext);
-}
-
-EGLenum QQnxGLContext::checkEGLError(const char *msg)
-{
- static const char *errmsg[] =
- {
- "EGL function succeeded",
- "EGL is not initialized, or could not be initialized, for the specified display",
- "EGL cannot access a requested resource",
- "EGL failed to allocate resources for the requested operation",
- "EGL fail to access an unrecognized attribute or attribute value was passed in an attribute list",
- "EGLConfig argument does not name a valid EGLConfig",
- "EGLContext argument does not name a valid EGLContext",
- "EGL current surface of the calling thread is no longer valid",
- "EGLDisplay argument does not name a valid EGLDisplay",
- "EGL arguments are inconsistent",
- "EGLNativePixmapType argument does not refer to a valid native pixmap",
- "EGLNativeWindowType argument does not refer to a valid native window",
- "EGL one or more argument values are invalid",
- "EGLSurface argument does not name a valid surface configured for rendering",
- "EGL power management event has occurred",
- };
- EGLenum error = eglGetError();
- fprintf(stderr, "%s: %s\n", msg, errmsg[error - EGL_SUCCESS]);
- return error;
}
void QQnxGLContext::initializeContext()
@@ -178,16 +74,12 @@ void QQnxGLContext::initializeContext()
// Initialize connection to EGL
ms_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- if (Q_UNLIKELY(ms_eglDisplay == EGL_NO_DISPLAY)) {
- checkEGLError("eglGetDisplay");
- qFatal("QQnxGLContext: failed to obtain EGL display");
- }
+ if (Q_UNLIKELY(ms_eglDisplay == EGL_NO_DISPLAY))
+ qFatal("QQnxGLContext: failed to obtain EGL display: %x", eglGetError());
EGLBoolean eglResult = eglInitialize(ms_eglDisplay, 0, 0);
- if (Q_UNLIKELY(eglResult != EGL_TRUE)) {
- checkEGLError("eglInitialize");
+ if (Q_UNLIKELY(eglResult != EGL_TRUE))
qFatal("QQnxGLContext: failed to initialize EGL display, err=%d", eglGetError());
- }
}
void QQnxGLContext::shutdownContext()
@@ -198,98 +90,32 @@ void QQnxGLContext::shutdownContext()
eglTerminate(ms_eglDisplay);
}
-bool QQnxGLContext::makeCurrent(QPlatformSurface *surface)
+EGLSurface QQnxGLContext::eglSurfaceForPlatformSurface(QPlatformSurface *surface)
{
- qGLContextDebug();
-
- Q_ASSERT(surface->surface()->surfaceType() == QSurface::OpenGLSurface);
-
- // Set current rendering API
- EGLBoolean eglResult = eglBindAPI(EGL_OPENGL_ES_API);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQnxGLContext: failed to set EGL API, err=%d", eglGetError());
-
- QQnxEglWindow *platformWindow = dynamic_cast<QQnxEglWindow*>(surface);
- if (!platformWindow)
- return false;
-
- platformWindow->setPlatformOpenGLContext(this);
-
- if (m_currentEglSurface == EGL_NO_SURFACE || m_currentEglSurface != platformWindow->getSurface()) {
- m_currentEglSurface = platformWindow->getSurface();
- doneCurrent();
- }
-
- eglResult = eglMakeCurrent(ms_eglDisplay, m_currentEglSurface, m_currentEglSurface, m_eglContext);
- if (eglResult != EGL_TRUE) {
- checkEGLError("eglMakeCurrent");
- qWarning("QQNX: failed to set current EGL context, err=%d", eglGetError());
- return false;
- }
- return (eglResult == EGL_TRUE);
+ QQnxEglWindow *window = static_cast<QQnxEglWindow *>(surface);
+ window->ensureInitialized(this);
+ return window->surface();
}
-void QQnxGLContext::doneCurrent()
+bool QQnxGLContext::makeCurrent(QPlatformSurface *surface)
{
qGLContextDebug();
-
- // set current rendering API
- EGLBoolean eglResult = eglBindAPI(EGL_OPENGL_ES_API);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQNX: failed to set EGL API, err=%d", eglGetError());
-
- // clear curent EGL context and unbind EGL surface
- eglResult = eglMakeCurrent(ms_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQNX: failed to clear current EGL context, err=%d", eglGetError());
+ return QEGLPlatformContext::makeCurrent(surface);
}
void QQnxGLContext::swapBuffers(QPlatformSurface *surface)
{
qGLContextDebug();
- QQnxEglWindow *platformWindow = dynamic_cast<QQnxEglWindow*>(surface);
- if (!platformWindow)
- return;
-
- platformWindow->swapEGLBuffers();
-}
-QFunctionPointer QQnxGLContext::getProcAddress(const char *procName)
-{
- qGLContextDebug();
+ QEGLPlatformContext::swapBuffers(surface);
- // Set current rendering API
- EGLBoolean eglResult = eglBindAPI(EGL_OPENGL_ES_API);
- if (Q_UNLIKELY(eglResult != EGL_TRUE))
- qFatal("QQNX: failed to set EGL API, err=%d", eglGetError());
-
- // Lookup EGL extension function pointer
- QFunctionPointer result = static_cast<QFunctionPointer>(eglGetProcAddress(procName));
- if (!result)
- result = reinterpret_cast<QFunctionPointer>(dlsym(RTLD_DEFAULT, procName));
- return result;
-}
-
-bool QQnxGLContext::isSharing() const
-{
- return m_eglShareContext != EGL_NO_CONTEXT;
-}
-
-EGLDisplay QQnxGLContext::getEglDisplay() {
- return ms_eglDisplay;
+ QQnxEglWindow *platformWindow = static_cast<QQnxEglWindow*>(surface);
+ platformWindow->windowPosted();
}
-EGLint *QQnxGLContext::contextAttrs(const QSurfaceFormat &format)
+void QQnxGLContext::doneCurrent()
{
- qGLContextDebug();
-
- // Choose EGL settings based on OpenGL version
-#if defined(QT_OPENGL_ES_2)
- static EGLint attrs[] = { EGL_CONTEXT_CLIENT_VERSION, format.version().first, EGL_NONE };
- return attrs;
-#else
- return 0;
-#endif
+ QEGLPlatformContext::doneCurrent();
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxglcontext.h b/src/plugins/platforms/qnx/qqnxglcontext.h
index 6e5408e8bf..19179a80e2 100644
--- a/src/plugins/platforms/qnx/qqnxglcontext.h
+++ b/src/plugins/platforms/qnx/qqnxglcontext.h
@@ -46,49 +46,31 @@
#include <QtCore/QSize>
#include <EGL/egl.h>
+#include <QtEglSupport/private/qeglplatformcontext_p.h>
QT_BEGIN_NAMESPACE
class QQnxWindow;
-class QQnxGLContext : public QPlatformOpenGLContext
+class QQnxGLContext : public QEGLPlatformContext
{
public:
- QQnxGLContext(QOpenGLContext *glContext);
+ QQnxGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share);
virtual ~QQnxGLContext();
- static EGLenum checkEGLError(const char *msg);
-
static void initializeContext();
static void shutdownContext();
- void requestSurfaceChange();
-
bool makeCurrent(QPlatformSurface *surface) override;
- void doneCurrent() override;
void swapBuffers(QPlatformSurface *surface) override;
- QFunctionPointer getProcAddress(const char *procName) override;
-
- virtual QSurfaceFormat format() const override { return m_windowFormat; }
- bool isSharing() const override;
+ void doneCurrent() override;
- static EGLDisplay getEglDisplay();
- EGLConfig getEglConfig() const { return m_eglConfig;}
- EGLContext getEglContext() const { return m_eglContext; }
+protected:
+ EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) override;
private:
//Can be static because different displays returne the same handle
static EGLDisplay ms_eglDisplay;
-
- QSurfaceFormat m_windowFormat;
- QOpenGLContext *m_glContext;
-
- EGLConfig m_eglConfig;
- EGLContext m_eglContext;
- EGLContext m_eglShareContext;
- EGLSurface m_currentEglSurface;
-
- static EGLint *contextAttrs(const QSurfaceFormat &format);
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp
index 072510e052..bffe7ee34b 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.cpp
+++ b/src/plugins/platforms/qnx/qqnxintegration.cpp
@@ -313,7 +313,58 @@ QPlatformBackingStore *QQnxIntegration::createPlatformBackingStore(QWindow *wind
QPlatformOpenGLContext *QQnxIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
{
qIntegrationDebug();
- return new QQnxGLContext(context);
+
+ // Get color channel sizes from window format
+ QSurfaceFormat format = context->format();
+ int alphaSize = format.alphaBufferSize();
+ int redSize = format.redBufferSize();
+ int greenSize = format.greenBufferSize();
+ int blueSize = format.blueBufferSize();
+
+ // Check if all channels are don't care
+ if (alphaSize == -1 && redSize == -1 && greenSize == -1 && blueSize == -1) {
+ // Set color channels based on depth of window's screen
+ QQnxScreen *screen = static_cast<QQnxScreen*>(context->screen()->handle());
+ int depth = screen->depth();
+ if (depth == 32) {
+ // SCREEN_FORMAT_RGBA8888
+ alphaSize = 8;
+ redSize = 8;
+ greenSize = 8;
+ blueSize = 8;
+ } else {
+ // SCREEN_FORMAT_RGB565
+ alphaSize = 0;
+ redSize = 5;
+ greenSize = 6;
+ blueSize = 5;
+ }
+ } else {
+ // Choose best match based on supported pixel formats
+ if (alphaSize <= 0 && redSize <= 5 && greenSize <= 6 && blueSize <= 5) {
+ // SCREEN_FORMAT_RGB565
+ alphaSize = 0;
+ redSize = 5;
+ greenSize = 6;
+ blueSize = 5;
+ } else {
+ // SCREEN_FORMAT_RGBA8888
+ alphaSize = 8;
+ redSize = 8;
+ greenSize = 8;
+ blueSize = 8;
+ }
+ }
+
+ // Update color channel sizes in window format
+ format.setAlphaBufferSize(alphaSize);
+ format.setRedBufferSize(redSize);
+ format.setGreenBufferSize(greenSize);
+ format.setBlueBufferSize(blueSize);
+ context->setFormat(format);
+
+ QQnxGLContext *ctx = new QQnxGLContext(context->format(), context->shareHandle());
+ return ctx;
}
#endif
diff --git a/src/plugins/platforms/qnx/qqnxnativeinterface.cpp b/src/plugins/platforms/qnx/qqnxnativeinterface.cpp
index 468fe9cd91..3eebb9c742 100644
--- a/src/plugins/platforms/qnx/qqnxnativeinterface.cpp
+++ b/src/plugins/platforms/qnx/qqnxnativeinterface.cpp
@@ -98,7 +98,7 @@ void *QQnxNativeInterface::nativeResourceForIntegration(const QByteArray &resour
void *QQnxNativeInterface::nativeResourceForContext(const QByteArray &resource, QOpenGLContext *context)
{
if (resource == "eglcontext" && context)
- return static_cast<QQnxGLContext*>(context->handle())->getEglContext();
+ return static_cast<QQnxGLContext*>(context->handle())->eglContext();
return 0;
}
diff --git a/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp b/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp
index a758bdf7f4..dd7f907ee0 100644
--- a/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp
+++ b/src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp
@@ -139,6 +139,7 @@ void QQnxRasterBackingStore::beginPaint(const QRegion &region)
platformWindow()->adjustBufferSize();
if (window()->requestedFormat().alphaBufferSize() > 0) {
+ auto platformScreen = static_cast<QQnxScreen *>(platformWindow()->screen());
for (const QRect &r : region) {
// Clear transparent regions
const int bg[] = {
@@ -149,11 +150,11 @@ void QQnxRasterBackingStore::beginPaint(const QRegion &region)
SCREEN_BLIT_DESTINATION_HEIGHT, r.height(),
SCREEN_BLIT_END
};
- Q_SCREEN_CHECKERROR(screen_fill(platformWindow()->screen()->nativeContext(),
+ Q_SCREEN_CHECKERROR(screen_fill(platformScreen->nativeContext(),
platformWindow()->renderBuffer().nativeBuffer(), bg),
"failed to clear transparent regions");
}
- Q_SCREEN_CHECKERROR(screen_flush_blits(platformWindow()->screen()->nativeContext(),
+ Q_SCREEN_CHECKERROR(screen_flush_blits(platformScreen->nativeContext(),
SCREEN_WAIT_IDLE), "failed to flush blits");
}
}
diff --git a/src/plugins/platforms/qnx/qqnxrasterwindow.cpp b/src/plugins/platforms/qnx/qqnxrasterwindow.cpp
index 7f11de228e..dc844189d1 100644
--- a/src/plugins/platforms/qnx/qqnxrasterwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxrasterwindow.cpp
@@ -141,6 +141,7 @@ QQnxBuffer &QQnxRasterWindow::renderBuffer()
// Check if render buffer is invalid
if (m_currentBufferIndex == -1) {
+ auto platformScreen = static_cast<QQnxScreen *>(screen());
// Get all buffers available for rendering
screen_buffer_t buffers[MAX_BUFFER_COUNT];
const int result = screen_get_window_property_pv(nativeHandle(), SCREEN_PROPERTY_RENDER_BUFFERS,
@@ -153,11 +154,11 @@ QQnxBuffer &QQnxRasterWindow::renderBuffer()
// Clear Buffer
int bg[] = { SCREEN_BLIT_COLOR, 0x00000000, SCREEN_BLIT_END };
- Q_SCREEN_CHECKERROR(screen_fill(screen()->nativeContext(), buffers[i], bg),
+ Q_SCREEN_CHECKERROR(screen_fill(platformScreen->nativeContext(), buffers[i], bg),
"Failed to clear window buffer");
}
- Q_SCREEN_CHECKERROR(screen_flush_blits(screen()->nativeContext(), 0),
+ Q_SCREEN_CHECKERROR(screen_flush_blits(platformScreen->nativeContext(), 0),
"Failed to flush blits");
// Use the first available render buffer
@@ -185,7 +186,7 @@ void QQnxRasterWindow::adjustBufferSize()
int QQnxRasterWindow::pixelFormat() const
{
- return screen()->nativeFormat();
+ return static_cast<QQnxScreen *>(screen())->nativeFormat();
}
void QQnxRasterWindow::resetBuffers()
diff --git a/src/plugins/platforms/qnx/qqnxscreen.h b/src/plugins/platforms/qnx/qqnxscreen.h
index 8a498434aa..a6d5623d04 100644
--- a/src/plugins/platforms/qnx/qqnxscreen.h
+++ b/src/plugins/platforms/qnx/qqnxscreen.h
@@ -49,10 +49,14 @@
#include <screen/screen.h>
-// For pre-7.0 SDPs, map some screen property names to the old
+#if !defined(_SCREEN_VERSION)
+#define _SCREEN_MAKE_VERSION(major, minor, patch) (((major) * 10000) + ((minor) * 100) + (patch))
+#define _SCREEN_VERSION _SCREEN_MAKE_VERSION(0, 0, 0)
+#endif
+
+// For pre-1.0.0 screen, map some screen property names to the old
// names.
-#include <sys/neutrino.h>
-#if _NTO_VERSION < 700
+#if _SCREEN_VERSION < _SCREEN_MAKE_VERSION(1, 0, 0)
const int SCREEN_PROPERTY_FLAGS = SCREEN_PROPERTY_KEY_FLAGS;
const int SCREEN_PROPERTY_FOCUS = SCREEN_PROPERTY_KEYBOARD_FOCUS;
const int SCREEN_PROPERTY_MODIFIERS = SCREEN_PROPERTY_KEY_MODIFIERS;
diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp
index 2253e3b23d..38b61fd782 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.cpp
+++ b/src/plugins/platforms/qnx/qqnxwindow.cpp
@@ -479,7 +479,7 @@ void QQnxWindow::setParent(const QPlatformWindow *window)
if (newParent == m_parentWindow)
return;
- if (screen()->rootWindow() == this) {
+ if (static_cast<QQnxScreen *>(screen())->rootWindow() == this) {
qWarning("Application window cannot be reparented");
return;
}
@@ -539,7 +539,7 @@ void QQnxWindow::requestActivateWindow()
if (focusWindow == this)
return;
- if (screen()->rootWindow() == this ||
+ if (static_cast<QQnxScreen *>(screen())->rootWindow() == this ||
(focusWindow && findWindow(focusWindow->nativeHandle()))) {
// If the focus window is a child, we can just set the focus of our own window
// group to our window handle
@@ -550,6 +550,7 @@ void QQnxWindow::requestActivateWindow()
QQnxWindow *currentWindow = this;
QList<QQnxWindow*> windowList;
while (currentWindow) {
+ auto platformScreen = static_cast<QQnxScreen *>(screen());
windowList.prepend(currentWindow);
// If we find the focus window, we don't have to go further
if (currentWindow == focusWindow)
@@ -557,9 +558,9 @@ void QQnxWindow::requestActivateWindow()
if (currentWindow->parent()){
currentWindow = static_cast<QQnxWindow*>(currentWindow->parent());
- } else if (screen()->rootWindow() &&
- screen()->rootWindow()->m_windowGroupName == currentWindow->m_parentGroupName) {
- currentWindow = screen()->rootWindow();
+ } else if (platformScreen->rootWindow() &&
+ platformScreen->rootWindow()->m_windowGroupName == currentWindow->m_parentGroupName) {
+ currentWindow = platformScreen->rootWindow();
} else {
currentWindow = 0;
}
@@ -622,6 +623,11 @@ void QQnxWindow::clearMMRendererWindow()
m_mmRendererWindow = 0;
}
+QPlatformScreen *QQnxWindow::screen() const
+{
+ return m_screen;
+}
+
QQnxWindow *QQnxWindow::findWindow(screen_window_t windowHandle)
{
if (m_window == windowHandle)
@@ -775,7 +781,8 @@ void QQnxWindow::windowPosted()
bool QQnxWindow::shouldMakeFullScreen() const
{
- return ((screen()->rootWindow() == this) && (QQnxIntegration::options() & QQnxIntegration::FullScreenApplication));
+ return ((static_cast<QQnxScreen *>(screen())->rootWindow() == this)
+ && (QQnxIntegration::options() & QQnxIntegration::FullScreenApplication));
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/qnx/qqnxwindow.h b/src/plugins/platforms/qnx/qqnxwindow.h
index f96edc49e4..2895a547b1 100644
--- a/src/plugins/platforms/qnx/qqnxwindow.h
+++ b/src/plugins/platforms/qnx/qqnxwindow.h
@@ -94,7 +94,7 @@ public:
void setMMRendererWindow(screen_window_t handle);
void clearMMRendererWindow();
- QQnxScreen *screen() const { return m_screen; }
+ QPlatformScreen *screen() const override;
const QList<QQnxWindow*>& children() const { return m_childWindows; }
QQnxWindow *findWindow(screen_window_t windowHandle);
@@ -112,12 +112,13 @@ public:
bool shouldMakeFullScreen() const;
+ void windowPosted();
+
protected:
virtual int pixelFormat() const = 0;
virtual void resetBuffers() = 0;
void initWindow();
- void windowPosted();
screen_context_t m_screenContext;
diff --git a/src/plugins/platforms/vnc/qvnc.cpp b/src/plugins/platforms/vnc/qvnc.cpp
index fa65e8c9a4..44fc1c6101 100644
--- a/src/plugins/platforms/vnc/qvnc.cpp
+++ b/src/plugins/platforms/vnc/qvnc.cpp
@@ -476,7 +476,8 @@ void QRfbRawEncoder::write()
// rgn &= QRect(0, 0, server->screen()->geometry().width(),
// server->screen()->geometry().height());
// }
- const QVector<QRect> rects = rgn.rects();
+
+ const auto rectsInRegion = rgn.rectCount();
{
const char tmp[2] = { 0, 0 }; // msg type, padding
@@ -484,16 +485,16 @@ void QRfbRawEncoder::write()
}
{
- const quint16 count = htons(rects.size());
+ const quint16 count = htons(rectsInRegion);
socket->write((char *)&count, sizeof(count));
}
- if (rects.size() <= 0)
+ if (rectsInRegion <= 0)
return;
const QImage screenImage = client->server()->screenImage();
- for (const QRect &tileRect: rects) {
+ for (const QRect &tileRect: rgn) {
const QRfbRect rect(tileRect.x(), tileRect.y(),
tileRect.width(), tileRect.height());
rect.write(socket);
diff --git a/src/plugins/platforms/windows/accessible/accessible.pri b/src/plugins/platforms/windows/accessible/accessible.pri
deleted file mode 100644
index 557bdfe307..0000000000
--- a/src/plugins/platforms/windows/accessible/accessible.pri
+++ /dev/null
@@ -1,19 +0,0 @@
-SOURCES += \
- $$PWD/qwindowsaccessibility.cpp \
- $$PWD/comutils.cpp
-
-HEADERS += \
- $$PWD/qwindowsaccessibility.h \
- $$PWD/comutils.h
-
-SOURCES += \
- $$PWD/qwindowsmsaaaccessible.cpp \
- $$PWD/iaccessible2.cpp
-
-HEADERS += \
- $$PWD/qwindowsmsaaaccessible.h \
- $$PWD/iaccessible2.h
-
-include(../../../../3rdparty/iaccessible2/iaccessible2.pri)
-
-mingw: LIBS *= -luuid
diff --git a/src/plugins/platforms/windows/accessible/comutils.cpp b/src/plugins/platforms/windows/accessible/comutils.cpp
deleted file mode 100644
index 1c072c5e2c..0000000000
--- a/src/plugins/platforms/windows/accessible/comutils.cpp
+++ /dev/null
@@ -1,280 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <qt_windows.h>
-
-#include <ocidl.h>
-#include <olectl.h>
-
-#include "comutils.h"
-#include <QtCore/qdatetime.h>
-#include <QtGui/qpixmap.h>
-#include <QtGui/qfont.h>
-
-
-#include <QtCore/qvariant.h>
-#include <QtCore/qbytearray.h>
-#include <QtGui/qcolor.h>
-
-QT_BEGIN_NAMESPACE
-
-static DATE QDateTimeToDATE(const QDateTime &dt)
-{
- if (!dt.isValid() || dt.isNull())
- return 949998; // Special value for no date (01/01/4501)
-
- SYSTEMTIME stime;
- memset(&stime, 0, sizeof(stime));
- QDate date = dt.date();
- QTime time = dt.time();
- if (date.isValid() && !date.isNull()) {
- stime.wDay = WORD(date.day());
- stime.wMonth = WORD(date.month());
- stime.wYear = WORD(date.year());
- }
- if (time.isValid() && !time.isNull()) {
- stime.wMilliseconds = WORD(time.msec());
- stime.wSecond = WORD(time.second());
- stime.wMinute = WORD(time.minute());
- stime.wHour = WORD(time.hour());
- }
-
- double vtime;
- SystemTimeToVariantTime(&stime, &vtime);
-
- return vtime;
-}
-
-inline uint QColorToOLEColor(const QColor &col)
-{
- return qRgba(col.blue(), col.green(), col.red(), 0x00);
-}
-
-bool QVariant2VARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeName, bool out)
-{
- QVariant qvar = var;
- // "type" is the expected type, so coerce if necessary
- QVariant::Type proptype = typeName.isEmpty() ? QVariant::Invalid : QVariant::nameToType(typeName);
- if (proptype == QVariant::UserType && !typeName.isEmpty()) {
- if (typeName == "short" || typeName == "char")
- proptype = QVariant::Int;
- else if (typeName == "float")
- proptype = QVariant::Double;
- }
- if (proptype != QVariant::Invalid && proptype != QVariant::UserType && proptype != qvar.type()) {
- if (qvar.canConvert(int(proptype)))
- qvar.convert(int(proptype));
- else
- qvar = QVariant(proptype);
- }
-
- if (out && arg.vt == (VT_VARIANT|VT_BYREF) && arg.pvarVal) {
- return QVariant2VARIANT(var, *arg.pvarVal, typeName, false);
- }
-
- if (out && proptype == QVariant::UserType && typeName == "QVariant") {
- VARIANT *pVariant = new VARIANT;
- QVariant2VARIANT(var, *pVariant, QByteArray(), false);
- arg.vt = VT_VARIANT|VT_BYREF;
- arg.pvarVal = pVariant;
- return true;
- }
-
- switch ((int)qvar.type()) {
- case QVariant::String:
- if (out && arg.vt == (VT_BSTR|VT_BYREF)) {
- if (*arg.pbstrVal)
- SysFreeString(*arg.pbstrVal);
- *arg.pbstrVal = QStringToBSTR(qvar.toString());
- arg.vt = VT_BSTR|VT_BYREF;
- } else {
- arg.vt = VT_BSTR;
- arg.bstrVal = QStringToBSTR(qvar.toString());
- if (out) {
- arg.pbstrVal = new BSTR(arg.bstrVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::Int:
- if (out && arg.vt == (VT_I4|VT_BYREF)) {
- *arg.plVal = qvar.toInt();
- } else {
- arg.vt = VT_I4;
- arg.lVal = qvar.toInt();
- if (out) {
- if (typeName == "short") {
- arg.vt = VT_I2;
- arg.piVal = new short(arg.lVal);
- } else if (typeName == "char") {
- arg.vt = VT_I1;
- arg.pcVal= new char(arg.lVal);
- } else {
- arg.plVal = new long(arg.lVal);
- }
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::UInt:
- if (out && (arg.vt == (VT_UINT|VT_BYREF) || arg.vt == (VT_I4|VT_BYREF))) {
- *arg.puintVal = qvar.toUInt();
- } else {
- arg.vt = VT_UINT;
- arg.uintVal = qvar.toUInt();
- if (out) {
- arg.puintVal = new uint(arg.uintVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::LongLong:
- if (out && arg.vt == (VT_CY|VT_BYREF)) {
- arg.pcyVal->int64 = qvar.toLongLong();
- } else if (out && arg.vt == (VT_I8|VT_BYREF)) {
- *arg.pllVal = qvar.toLongLong();
- } else {
- arg.vt = VT_I8;
- arg.llVal = qvar.toLongLong();
- if (out) {
- arg.pllVal = new LONGLONG(arg.llVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::ULongLong:
- if (out && arg.vt == (VT_CY|VT_BYREF)) {
- arg.pcyVal->int64 = qvar.toULongLong();
- } else if (out && arg.vt == (VT_UI8|VT_BYREF)) {
- *arg.pullVal = qvar.toULongLong();
- } else {
- arg.vt = VT_UI8;
- arg.ullVal = qvar.toULongLong();
- if (out) {
- arg.pullVal = new ULONGLONG(arg.ullVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::Bool:
- if (out && arg.vt == (VT_BOOL|VT_BYREF)) {
- *arg.pboolVal = qvar.toBool() ? VARIANT_TRUE : VARIANT_FALSE;
- } else {
- arg.vt = VT_BOOL;
- arg.boolVal = qvar.toBool() ? VARIANT_TRUE : VARIANT_FALSE;
- if (out) {
- arg.pboolVal = new short(arg.boolVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
- case QVariant::Double:
- if (out && arg.vt == (VT_R8|VT_BYREF)) {
- *arg.pdblVal = qvar.toDouble();
- } else {
- arg.vt = VT_R8;
- arg.dblVal = qvar.toDouble();
- if (out) {
- if (typeName == "float") {
- arg.vt = VT_R4;
- arg.pfltVal = new float(arg.dblVal);
- } else {
- arg.pdblVal = new double(arg.dblVal);
- }
- arg.vt |= VT_BYREF;
- }
- }
- break;
- case QVariant::Color:
- if (out && arg.vt == (VT_COLOR|VT_BYREF)) {
-
- *arg.plVal = QColorToOLEColor(qvariant_cast<QColor>(qvar));
- } else {
- arg.vt = VT_COLOR;
- arg.lVal = QColorToOLEColor(qvariant_cast<QColor>(qvar));
- if (out) {
- arg.plVal = new long(arg.lVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::Date:
- case QVariant::Time:
- case QVariant::DateTime:
- if (out && arg.vt == (VT_DATE|VT_BYREF)) {
- *arg.pdate = QDateTimeToDATE(qvar.toDateTime());
- } else {
- arg.vt = VT_DATE;
- arg.date = QDateTimeToDATE(qvar.toDateTime());
- if (out) {
- arg.pdate = new DATE(arg.date);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- case QVariant::Invalid: // default-parameters not set
- if (out && arg.vt == (VT_ERROR|VT_BYREF)) {
- *arg.plVal = DISP_E_PARAMNOTFOUND;
- } else {
- arg.vt = VT_ERROR;
- arg.lVal = DISP_E_PARAMNOTFOUND;
- if (out) {
- arg.plVal = new long(arg.lVal);
- arg.vt |= VT_BYREF;
- }
- }
- break;
-
- default:
- return false;
- }
-
- Q_ASSERT(!out || (arg.vt & VT_BYREF));
- return true;
-}
-
-QT_END_NAMESPACE
-
diff --git a/src/plugins/platforms/windows/accessible/comutils.h b/src/plugins/platforms/windows/accessible/comutils.h
deleted file mode 100644
index b1e6183a0f..0000000000
--- a/src/plugins/platforms/windows/accessible/comutils.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef COMUTILS_H
-#define COMUTILS_H
-
-#if !defined(_WINDOWS_) && !defined(_WINDOWS_H) && !defined(__WINDOWS__)
-#error Must include windows.h first!
-#endif
-
-#include <ocidl.h>
-#include <QtCore/qstring.h>
-
-QT_BEGIN_NAMESPACE
-
-class QVariant;
-
-// Originally QVariantToVARIANT copied from ActiveQt - renamed to avoid conflicts in static builds.
-bool QVariant2VARIANT(const QVariant &var, VARIANT &arg, const QByteArray &typeName, bool out);
-
-inline BSTR QStringToBSTR(const QString &str)
-{
- return SysAllocStringLen(reinterpret_cast<const OLECHAR *>(str.unicode()), UINT(str.length()));
-}
-
-QT_END_NAMESPACE
-
-#endif // COMUTILS_H
-
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
deleted file mode 100644
index 75af65b5ab..0000000000
--- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp
+++ /dev/null
@@ -1,1640 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#include <QtCore/qglobal.h>
-#ifndef QT_NO_ACCESSIBILITY
-
-#include "iaccessible2.h"
-#include "qwindowsaccessibility.h"
-#include <QtAccessibilitySupport/private/qaccessiblebridgeutils_p.h>
-#include <QtGui/qaccessible.h>
-#include <QtGui/qclipboard.h>
-#include <QtGui/qguiapplication.h>
-#include <QtGui/private/qhighdpiscaling_p.h>
-#include <QtCore/qdebug.h>
-
-#include <algorithm>
-
-QT_BEGIN_NAMESPACE
-
-template <class T>
-static inline T *coTaskMemAllocArray(int size)
-{
- return static_cast<T *>(::CoTaskMemAlloc(sizeof(T) * size_t(size)));
-}
-
-/**************************************************************\
- * AccessibleApplication *
- **************************************************************/
-
-HRESULT STDMETHODCALLTYPE AccessibleApplication::get_appName(/* [retval][out] */ BSTR *name)
-{
- const QString appName = QGuiApplication::applicationName();
- *name = QStringToBSTR(appName);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE AccessibleApplication::get_appVersion(/* [retval][out] */ BSTR *version)
-{
- const QString appName = QGuiApplication::applicationVersion();
- *version = QStringToBSTR(appName);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE AccessibleApplication::get_toolkitName(/* [retval][out] */ BSTR *name)
-{
- *name = ::SysAllocString(L"Qt");
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE AccessibleApplication::get_toolkitVersion(/* [retval][out] */ BSTR *version)
-{
- *version = ::SysAllocString(TEXT(QT_VERSION_STR));
- return S_OK;
-}
-
-
-/**************************************************************\
- * AccessibleRelation *
- **************************************************************/
-AccessibleRelation::AccessibleRelation(const QList<QAccessibleInterface *> &targets,
- QAccessible::Relation relation)
- : m_targets(targets), m_relation(relation)
-{
- Q_ASSERT(m_targets.count());
-}
-
-/* IAccessibleRelation */
-HRESULT STDMETHODCALLTYPE AccessibleRelation::get_relationType(
- /* [retval][out] */ BSTR *relationType)
-{
- *relationType = relationToBSTR(m_relation);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE AccessibleRelation::get_localizedRelationType(
- /* [retval][out] */ BSTR *localizedRelationType)
-{
- // Who ever needs this???
- *localizedRelationType = relationToBSTR(m_relation);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE AccessibleRelation::get_nTargets(
- /* [retval][out] */ long *nTargets)
-{
- // ### always one target
- *nTargets = m_targets.count();
- return S_OK;
-}
-
-/*!
- \internal
- Client allocates and deallocates array
- (see "Special Consideration when using Arrays", in Accessible2.idl)
- */
-HRESULT STDMETHODCALLTYPE AccessibleRelation::get_target(
- /* [in] */ long targetIndex,
- /* [retval][out] */ IUnknown **target)
-{
- if (targetIndex >= 0 && targetIndex < m_targets.count()) {
- QAccessibleInterface *iface = m_targets.at(targetIndex);
- *target = QWindowsAccessibility::wrap(iface);
- if (*target)
- return S_OK;
- return E_FAIL;
- }
- return E_INVALIDARG;
-}
-
-/*!
- \internal
- Client allocates and deallocates \a targets array
- (see "Special Consideration when using Arrays", in Accessible2.idl)
- */
-HRESULT STDMETHODCALLTYPE AccessibleRelation::get_targets(
- /* [in] */ long maxTargets,
- /* [length_is][size_is][out] */ IUnknown **targets,
- /* [retval][out] */ long *nTargets)
-{
-
- const int numTargets = qMin(int(maxTargets), m_targets.count());
- for (int i = 0; i < numTargets; ++i) {
- QAccessibleInterface *iface = m_targets.at(i);
- IAccessible *iacc = QWindowsAccessibility::wrap(iface);
- if (!iacc)
- return E_FAIL;
- *targets = iacc;
- ++targets;
- }
- *nTargets = numTargets;
- // \a targets array is allocated by client.
- return numTargets > 0 ? S_OK : S_FALSE;
-}
-
-
-/**************************************************************\
- * *
- * IUnknown *
- * *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::QueryInterface(REFIID id, LPVOID *iface)
-{
- *iface = nullptr;
- QAccessibleInterface *accessible = accessibleInterface();
- if (!accessible)
- return E_NOINTERFACE;
-
- if (SUCCEEDED(QWindowsMsaaAccessible::QueryInterface(id, iface))
- || qWindowsComQueryInterface<IServiceProvider>(this, id, iface)
- || qWindowsComQueryInterface<IAccessible2>(this, id, iface)
- || qWindowsComQueryInterface<IAccessibleComponent>(this, id, iface)) {
- return S_OK;
- }
-
- if (id == IID_IAccessibleAction) {
- if (accessible->actionInterface())
- *iface = static_cast<IAccessibleAction *>(this);
- } else if (id == IID_IAccessibleEditableText) {
- if (accessible->editableTextInterface() ||
- accessible->role() == QAccessible::EditableText)
- {
- *iface = static_cast<IAccessibleEditableText *>(this);
- }
- } else if (id == IID_IAccessibleHyperlink) {
- //*iface = static_cast<IAccessibleHyperlink *>(this);
- } else if (id == IID_IAccessibleHypertext) {
- //*iface = static_cast<IAccessibleHypertext *>(this);
- } else if (id == IID_IAccessibleImage) {
- //*iface = static_cast<IAccessibleImage *>(this);
- } else if (id == IID_IAccessibleTable) {
- //*iface = static_cast<IAccessibleTable *>(this); // not supported
- } else if (id == IID_IAccessibleTable2) {
- if (accessible->tableInterface())
- *iface = static_cast<IAccessibleTable2 *>(this);
- } else if (id == IID_IAccessibleTableCell) {
- if (accessible->tableCellInterface())
- *iface = static_cast<IAccessibleTableCell *>(this);
- } else if (id == IID_IAccessibleText) {
- if (accessible->textInterface())
- *iface = static_cast<IAccessibleText *>(this);
- } else if (id == IID_IAccessibleValue) {
- if (accessible->valueInterface())
- *iface = static_cast<IAccessibleValue *>(this);
- }
- if (*iface) {
- AddRef();
- return S_OK;
- }
- return E_NOINTERFACE;
-}
-
-
-/* Note that IUnknown is inherited from several interfaces. Therefore we must reimplement all its
- functions in the concrete class to avoid ambiguity.
-*/
-ULONG STDMETHODCALLTYPE QWindowsIA2Accessible::AddRef()
-{
- return QWindowsMsaaAccessible::AddRef();
-}
-
-ULONG STDMETHODCALLTYPE QWindowsIA2Accessible::Release()
-{
- return QWindowsMsaaAccessible::Release();
-}
-
-/**************************************************************\
- * *
- * IAccessible2 *
- * *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nRelations(long *nRelations)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!nRelations)
- return E_INVALIDARG;
- if (!accessible)
- return E_FAIL;
-
- return getRelationsHelper(0, 0, 0, nRelations);
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_relation(long relationIndex, IAccessibleRelation **relation)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!relation)
- return E_INVALIDARG;
- if (!accessible)
- return E_FAIL;
-
- return getRelationsHelper(relation, relationIndex, 1);
-}
-
-/*!
- \internal
- Client allocates and deallocates array
- (see "Special Consideration when using Arrays", in Accessible2.idl)
- */
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_relations(long maxRelations,
- IAccessibleRelation **relations,
- long *nRelations)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- return getRelationsHelper(relations, 0, maxRelations, nRelations);
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::role(long *ia2role)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- long r = accessible->role();
-
- switch (r) {
- case QAccessible::LayeredPane: r = IA2_ROLE_LAYERED_PANE; break;
- case QAccessible::Terminal: r = IA2_ROLE_TERMINAL; break;
- case QAccessible::Desktop: r = IA2_ROLE_DESKTOP_PANE; break;
- case QAccessible::Paragraph: r = IA2_ROLE_PARAGRAPH; break;
- case QAccessible::Section: r = IA2_ROLE_SECTION; break;
- default: break;
- }
-
- *ia2role = r;
- return S_OK;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::scrollTo(enum IA2ScrollType /*scrollType*/)
-{
- //### Ignore for now
- return E_NOTIMPL;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::scrollToPoint(enum IA2CoordinateType /*coordinateType*/, long /*x*/, long /*y*/)
-{
- //### Ignore for now
- return E_NOTIMPL;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_groupPosition(long *groupLevel,
- long *similarItemsInGroup,
- long *positionInGroup)
-{
- // ### Ignore for now. Not sure what this is used for.....
- *groupLevel = 0; // Not applicable
- *similarItemsInGroup = 0; // Not applicable
- *positionInGroup = 0; // Not applicable
- return S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_states(AccessibleStates *states)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- if (!states)
- return E_POINTER;
- QAccessible::State st = accessible->state();
- AccessibleStates ia2states = 0;
- if (st.active)
- ia2states |= IA2_STATE_ACTIVE;
- if (st.invalid)
- ia2states |= IA2_STATE_DEFUNCT;
- if (st.editable)
- ia2states |= IA2_STATE_EDITABLE;
- if (st.multiLine)
- ia2states |= IA2_STATE_MULTI_LINE;
- if (st.selectableText)
- ia2states |= IA2_STATE_SELECTABLE_TEXT;
- if (st.supportsAutoCompletion)
- ia2states |= IA2_STATE_SUPPORTS_AUTOCOMPLETION;
-
- *states = ia2states;
- return S_OK;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_extendedRole(BSTR *extendedRole)
-{
- //###
- *extendedRole = 0;
- return E_NOTIMPL; // mozilla does this
- //return S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_localizedExtendedRole(BSTR *localizedExtendedRole)
-{
- //###
- *localizedExtendedRole = 0;
- return E_NOTIMPL; // mozilla does this
- //return S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nExtendedStates(long *nExtendedStates)
-{
- // Who will ever intepret these values into something meaningful??
- *nExtendedStates = 0;
- return E_NOTIMPL; // mozilla does this
- //return S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_extendedStates(long /*maxExtendedStates*/,
- BSTR **extendedStates,
- long *nExtendedStates)
-{
- *extendedStates = 0;
- *nExtendedStates = 0;
- return E_NOTIMPL; // mozilla does this
- //return S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_localizedExtendedStates(long /*maxLocalizedExtendedStates*/,
- BSTR **localizedExtendedStates,
- long *nLocalizedExtendedStates)
-{
- *localizedExtendedStates = 0;
- *nLocalizedExtendedStates = 0;
- return E_NOTIMPL; // mozilla does this
- //return S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_uniqueID(long *outUniqueID)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- qCDebug(lcQpaAccessibility) << "uniqueID: " << showbase << hex << id;
-
- *outUniqueID = (long)id;
- return int(id) < 0 ? S_OK : S_FALSE;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_windowHandle(HWND *windowHandle)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- return GetWindow(windowHandle);
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_indexInParent(long *indexInParent)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- if (!indexInParent)
- return E_INVALIDARG;
- QAccessibleInterface *par = accessible->parent();
- *indexInParent = par ? par->indexOfChild(accessible) : -1;
- if (*indexInParent < 0) {
- qCWarning(lcQpaAccessibility) << "index in parent invalid:" << accessible << "parent:" << par;
- return S_FALSE;
- }
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_locale(IA2Locale *locale)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- IA2Locale res;
- QLocale l;
- res.country = QStringToBSTR(QLocale::countryToString(l.country()));
- res.language = QStringToBSTR(QLocale::languageToString(l.language()));
- res.variant = QStringToBSTR(QString());
- *locale = res;
- return S_OK;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_attributes(BSTR *attributes)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *attributes = 0;//QStringToBSTR(QString());
- return S_FALSE;
-}
-
-/**************************************************************\
- * IAccessibleAction *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::nActions(long *nActions)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *nActions = QAccessibleBridgeUtils::effectiveActionNames(accessible).count();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::doAction(long actionIndex)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- const QStringList actionNames = QAccessibleBridgeUtils::effectiveActionNames(accessible);
- if (actionIndex < 0 || actionIndex >= actionNames.count())
- return E_INVALIDARG;
- const QString actionName = actionNames.at(actionIndex);
- return QAccessibleBridgeUtils::performEffectiveAction(accessible, actionName) ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_description(long actionIndex, BSTR *description)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *description = 0;
- const QStringList actionNames = QAccessibleBridgeUtils::effectiveActionNames(accessible);
- if (actionIndex < 0 || actionIndex >= actionNames.count())
- return E_INVALIDARG;
- const QString actionName = actionNames.at(actionIndex);
- if (QAccessibleActionInterface *actionIface = actionInterface())
- *description = QStringToBSTR(actionIface->localizedActionDescription(actionName));
- else
- *description = QStringToBSTR(qAccessibleLocalizedActionDescription(actionName));
-
- return *description ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_keyBinding(long actionIndex, long nMaxBindings, BSTR **keyBindings, long *nBindings)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- Q_UNUSED(nMaxBindings);
- BSTR *arrayOfBindingsToReturn = 0;
- int numBindings = 0;
- if (QAccessibleActionInterface *actionIface = actionInterface()) {
- const QStringList actionNames = actionIface->actionNames();
- if (actionIndex < 0 || actionIndex >= actionNames.count())
- return E_INVALIDARG;
- const QString actionName = actionNames.at(actionIndex);
- const QStringList keyBindings = actionIface->keyBindingsForAction(actionName);
- numBindings = keyBindings.count();
- if (numBindings > 0) {
- // The IDL documents that the client must free with CoTaskMemFree
- arrayOfBindingsToReturn = coTaskMemAllocArray<BSTR>(numBindings);
- std::transform(keyBindings.constBegin(), keyBindings.constEnd(),
- QT_MAKE_CHECKED_ARRAY_ITERATOR(arrayOfBindingsToReturn, numBindings),
- QStringToBSTR);
- }
- }
- *keyBindings = arrayOfBindingsToReturn;
- *nBindings = numBindings;
-
- return numBindings ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_name(long actionIndex, BSTR *name)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *name = 0;
- const QStringList actionNames = QAccessibleBridgeUtils::effectiveActionNames(accessible);
- if (actionIndex < 0 || actionIndex >= actionNames.count())
- return E_INVALIDARG;
- const QString actionName = actionNames.at(actionIndex);
- *name = QStringToBSTR(actionName);
- return *name ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_localizedName(long actionIndex, BSTR *localizedName)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *localizedName = 0;
- const QStringList actionNames = QAccessibleBridgeUtils::effectiveActionNames(accessible);
- if (actionIndex < 0 || actionIndex >= actionNames.count())
- return E_INVALIDARG;
-
- const QString actionName = actionNames.at(actionIndex);
- if (QAccessibleActionInterface *actionIface = actionInterface())
- *localizedName = QStringToBSTR(actionIface->localizedActionName(actionName));
- else
- *localizedName = QStringToBSTR(QAccessibleActionInterface::tr(qPrintable(actionName)));
-
- return *localizedName ? S_OK : S_FALSE;
-}
-
-/**************************************************************\
- * IAccessibleComponent *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_locationInParent(long *x, long *y)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QPoint topLeft = accessible->rect().topLeft();
-
- QAccessibleInterface *parentIface = accessible->parent();
- if (parentIface && parentIface->isValid())
- topLeft -= parentIface->rect().topLeft();
- const QPoint nativeTopLeft = QHighDpi::toNativeLocalPosition(topLeft, accessible->window());
-
-
- *x = nativeTopLeft.x();
- *y = nativeTopLeft.y();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_foreground(IA2Color *foreground)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- // IA2Color is a typedef for long
- *foreground = static_cast<IA2Color>(accessible->foregroundColor().rgb());
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_background(IA2Color *background)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- // IA2Color is a typedef for long
- *background = static_cast<IA2Color>(accessible->backgroundColor().rgb());
- return S_OK;
-}
-
-/**************************************************************\
- * IAccessibleEditableText *
- **************************************************************/
-#if QT_CONFIG(clipboard)
-/*!
- \internal
-
- if \a endOffset == -1 it means end of the text
-*/
-QString QWindowsIA2Accessible::textForRange(int startOffset, int endOffset) const
-{
- QAccessibleInterface *accessible = accessibleInterface();
-
- if (QAccessibleTextInterface *textIface = accessible->textInterface()) {
- if (endOffset == IA2_TEXT_OFFSET_LENGTH)
- endOffset = textIface->characterCount();
- return textIface->text(startOffset, endOffset);
- }
- QString txt = accessible->text(QAccessible::Value);
- if (endOffset == IA2_TEXT_OFFSET_LENGTH)
- endOffset = txt.length();
- return txt.mid(startOffset, endOffset - startOffset);
-}
-#endif
-
-/*!
- \internal
-*/
-void QWindowsIA2Accessible::replaceTextFallback(long startOffset, long endOffset, const QString &txt)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- QString t = textForRange(0, -1);
- if (endOffset == IA2_TEXT_OFFSET_LENGTH)
- endOffset = t.length();
- if (endOffset - startOffset == 0) {
- t.insert(startOffset, txt);
- } else {
- t.replace(startOffset, endOffset - startOffset, txt);
- }
- accessible->setText(QAccessible::Value, t);
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::copyText(long startOffset, long endOffset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
-#if QT_CONFIG(clipboard)
- const QString t = textForRange(startOffset, endOffset);
- QGuiApplication::clipboard()->setText(t);
- return S_OK;
-#else
- return E_NOTIMPL;
-#endif
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::deleteText(long startOffset, long endOffset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
- editableTextIface->deleteText(startOffset, endOffset);
- else
- replaceTextFallback(startOffset, endOffset, QString());
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::insertText(long offset, BSTR *text)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- const QString txt = QString::fromWCharArray(*text);
- if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
- editableTextIface->insertText(offset, txt);
- else
- replaceTextFallback(offset, offset, txt);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::cutText(long startOffset, long endOffset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
-#if QT_CONFIG(clipboard)
- const QString t = textForRange(startOffset, endOffset);
- if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
- editableTextIface->deleteText(startOffset, endOffset);
- else
- replaceTextFallback(startOffset, endOffset, QString());
- QGuiApplication::clipboard()->setText(t);
- return S_OK;
-#else
- return E_NOTIMPL;
-#endif
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::pasteText(long offset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
-#if QT_CONFIG(clipboard)
- const QString txt = QGuiApplication::clipboard()->text();
- if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
- editableTextIface->insertText(offset, txt);
- else
- replaceTextFallback(offset, offset, txt);
- return S_OK;
-#else
- return E_NOTIMPL;
-#endif
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::replaceText(long startOffset, long endOffset, BSTR *text)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- const QString txt = QString::fromWCharArray(*text);
- if (QAccessibleEditableTextInterface *editableTextIface = accessible->editableTextInterface())
- editableTextIface->replaceText(startOffset, endOffset, txt);
- else
- replaceTextFallback(startOffset, endOffset, txt);
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::setAttributes(long /*startOffset*/, long /*endOffset*/, BSTR * /*attributes*/)
-{
- return E_NOTIMPL;
-}
-
-
-/**************************************************************\
- * IAccessibleTable2 *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_cellAt( long row, long column, IUnknown **cell)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *cell = 0;
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- if (QAccessibleInterface *qtCell = tableIface->cellAt(row, column)) {
- *cell = QWindowsAccessibility::wrap(qtCell);
- }
- }
- qCDebug(lcQpaAccessibility) << "found cell? " << *cell;
- return *cell ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_caption( IUnknown **captionInterface)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *captionInterface = 0;
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- if (QAccessibleInterface *iface = tableIface->caption())
- *captionInterface = QWindowsAccessibility::wrap(iface);
- }
- return *captionInterface ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_columnDescription( long column, BSTR *description)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *description = 0;
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- const QString qtDesc = tableIface->columnDescription(column);
- if (!qtDesc.isEmpty())
- *description = QStringToBSTR(qtDesc);
- }
- return *description ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nColumns( long *columnCount)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *columnCount = tableIface->columnCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nRows(long *rowCount)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *rowCount = tableIface->rowCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nSelectedCells(long *cellCount)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *cellCount = tableIface->selectedCellCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nSelectedColumns(long *columnCount)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *columnCount = tableIface->selectedColumnCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nSelectedRows(long *rowCount)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *rowCount = tableIface->selectedRowCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_rowDescription(long row, BSTR *description)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *description = 0;
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- const QString qtDesc = tableIface->rowDescription(row);
- if (!qtDesc.isEmpty())
- *description = QStringToBSTR(qtDesc);
- }
- return *description ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_selectedCells(IUnknown ***cells, long *nSelectedCells)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- Q_UNUSED(cells);
- Q_UNUSED(nSelectedCells);
- if (!accessible)
- return E_FAIL;
-
- QList<QAccessibleInterface*> selectedCells = tableInterface()->selectedCells();
- return wrapListOfCells(selectedCells, cells, nSelectedCells);
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_selectedColumns(long **selectedColumns, long *nColumns)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- const QList<int> selectedIndices = tableIface->selectedColumns();
- const int count = selectedIndices.count();
- *nColumns = count;
- *selectedColumns = Q_NULLPTR;
- if (count) {
- *selectedColumns = coTaskMemAllocArray<long>(count);
- std::copy(selectedIndices.constBegin(), selectedIndices.constEnd(),
- QT_MAKE_CHECKED_ARRAY_ITERATOR(*selectedColumns, count));
- }
- return count ? S_OK : S_FALSE;
- }
- return E_FAIL;
-
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_selectedRows(long **selectedRows, long *nRows)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- const QList<int> selectedIndices = tableIface->selectedRows();
- const int count = selectedIndices.count();
- *nRows = count;
- *selectedRows = Q_NULLPTR;
- if (count) {
- *selectedRows = coTaskMemAllocArray<long>(count);
- std::copy(selectedIndices.constBegin(), selectedIndices.constEnd(),
- QT_MAKE_CHECKED_ARRAY_ITERATOR(*selectedRows, count));
- }
- return count ? S_OK : S_FALSE;
- }
- return E_FAIL;
-
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_summary(IUnknown **summaryInterface)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *summaryInterface = 0;
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- if (QAccessibleInterface *iface = tableIface->summary())
- *summaryInterface = QWindowsAccessibility::wrap(iface);
- }
- return *summaryInterface ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_isColumnSelected(long column, boolean *isSelected)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *isSelected = tableIface->isColumnSelected(column);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_isRowSelected(long row, boolean *isSelected)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- *isSelected = tableIface->isRowSelected(row);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::selectRow(long row)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- bool ok = tableIface->selectRow(row);
- return ok ? S_OK : E_INVALIDARG; //### Not sure of the return value if it fails???
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::selectColumn(long column)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- bool ok = tableIface->selectColumn(column);
- return ok ? S_OK : E_INVALIDARG; //### Not sure of the return value if it fails???
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::unselectRow(long row)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- bool ok = tableIface->unselectRow(row);
- return ok ? S_OK : E_INVALIDARG; //### Not sure of the return value if it fails???
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::unselectColumn(long column)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleTableInterface *tableIface = tableInterface()) {
- bool ok = tableIface->unselectColumn(column);
- return ok ? S_OK : E_INVALIDARG; //### Not sure of the return value if it fails???
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_modelChange( IA2TableModelChange * /*modelChange*/)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- return E_NOTIMPL;
-}
-
-/**************************************************************\
- * IAccessibleTableCell *
-\**************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_columnExtent(long *nColumnsSpanned)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *nColumnsSpanned = tableCellInterface()->columnExtent();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_columnHeaderCells(IUnknown ***cellAccessibles,
- long *nColumnHeaderCells)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- const QList<QAccessibleInterface*> headerCells = tableCellInterface()->columnHeaderCells();
- return wrapListOfCells(headerCells, cellAccessibles, nColumnHeaderCells);
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_columnIndex(long *columnIndex)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *columnIndex = tableCellInterface()->columnIndex();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_rowExtent(long *nRowsSpanned)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *nRowsSpanned = tableCellInterface()->rowExtent();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_rowHeaderCells(IUnknown ***cellAccessibles,
- long *nRowHeaderCells)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- const QList<QAccessibleInterface*> headerCells = tableCellInterface()->rowHeaderCells();
- return wrapListOfCells(headerCells, cellAccessibles, nRowHeaderCells);
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_rowIndex(long *rowIndex)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *rowIndex = tableCellInterface()->rowIndex();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_isSelected( boolean *isSelected)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- *isSelected = tableCellInterface()->isSelected();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_rowColumnExtents(long *row, long *column,
- long *rowExtents, long *columnExtents,
- boolean *isSelected)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible || !tableCellInterface())
- return E_FAIL;
-
- *row = tableCellInterface()->rowIndex();
- *column = tableCellInterface()->columnIndex();
- *rowExtents = tableCellInterface()->rowExtent();
- *columnExtents = tableCellInterface()->columnExtent();
- *isSelected = tableCellInterface()->isSelected();
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_table(IUnknown **table)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QAccessibleInterface *tableIface = tableCellInterface()->table();
-
- *table = QWindowsAccessibility::wrap(tableIface);
- return S_OK;
-}
-
-/**************************************************************\
- * IAccessibleText *
-\**************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::addSelection(long startOffset,
- long endOffset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- text->addSelection(startOffset, endOffset);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_attributes(long offset,
- long *startOffset,
- long *endOffset,
- BSTR *textAttributes)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- const QString attrs = text->attributes(offset, reinterpret_cast<int *>(startOffset),
- reinterpret_cast<int *>(endOffset));
- *textAttributes = QStringToBSTR(attrs);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_caretOffset(long *offset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- *offset = text->cursorPosition();
- return S_OK;
- }
- return E_FAIL;
-}
-
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_characterExtents(long offset,
- enum IA2CoordinateType coordType,
- long *x,
- long *y,
- long *width,
- long *height)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- QRect rect = text->characterRect(offset);
- mapFromScreenPos(coordType, rect.topLeft(), x, y);
- *width = rect.width();
- *height = rect.height();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nSelections(long *nSelections)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- *nSelections = text->selectionCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_offsetAtPoint(long x,
- long y,
- enum IA2CoordinateType coordType,
- long *offset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- QPoint screenPos = mapToScreenPos(coordType, x, y);
- *offset = text->offsetAtPoint(screenPos);
- return (*offset >=0 ? S_OK : S_FALSE);
- }
- return E_FAIL;
-
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_selection(long selectionIndex,
- long *startOffset,
- long *endOffset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *text = textInterface()) {
- text->selection(selectionIndex, reinterpret_cast<int *>(startOffset),
- reinterpret_cast<int *>(endOffset));
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_text(long startOffset,
- long endOffset,
- BSTR *text)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textif = textInterface()) {
- const QString t = textif->text(startOffset, endOffset);
- if (!t.isEmpty()) {
- *text = QStringToBSTR(t);
- return S_OK;
- }
- return E_INVALIDARG;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_textBeforeOffset(long offset,
- enum IA2TextBoundaryType boundaryType,
- long *startOffset,
- long *endOffset,
- BSTR *text)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- const QString txt =
- textIface->textBeforeOffset(offset, static_cast<QAccessible::TextBoundaryType>(boundaryType),
- reinterpret_cast<int *>(startOffset),
- reinterpret_cast<int *>(endOffset));
- if (!txt.isEmpty()) {
- *text = QStringToBSTR(txt);
- return S_OK;
- }
- return S_FALSE;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_textAfterOffset(
- long offset,
- enum IA2TextBoundaryType boundaryType,
- long *startOffset,
- long *endOffset,
- BSTR *text)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- const QString txt =
- textIface->textAfterOffset(offset, static_cast<QAccessible::TextBoundaryType>(boundaryType),
- reinterpret_cast<int *>(startOffset),
- reinterpret_cast<int *>(endOffset));
- if (!txt.isEmpty()) {
- *text = QStringToBSTR(txt);
- return S_OK;
- }
- return S_FALSE;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_textAtOffset(long offset,
- enum IA2TextBoundaryType boundaryType,
- long *startOffset,
- long *endOffset,
- BSTR *text)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- const QString txt =
- textIface->textAtOffset(offset, static_cast<QAccessible::TextBoundaryType>(boundaryType),
- reinterpret_cast<int *>(startOffset),
- reinterpret_cast<int *>(endOffset));
- if (!txt.isEmpty()) {
- *text = QStringToBSTR(txt);
- return S_OK;
- }
- return S_FALSE;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::removeSelection(long selectionIndex)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- textIface->removeSelection(selectionIndex);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::setCaretOffset(long offset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- textIface->setCursorPosition(offset);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::setSelection(long selectionIndex,
- long startOffset,
- long endOffset)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- textIface->setSelection(selectionIndex, startOffset, endOffset);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_nCharacters(long *nCharacters)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- *nCharacters = textIface->characterCount();
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::scrollSubstringTo(long startIndex,
- long endIndex,
- enum IA2ScrollType scrollType)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (QAccessibleTextInterface *textIface = textInterface()) {
- Q_UNUSED(scrollType); //###
- textIface->scrollToSubstring(startIndex, endIndex);
- return S_OK;
- }
- return E_FAIL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::scrollSubstringToPoint(long startIndex,
- long endIndex,
- enum IA2CoordinateType coordinateType,
- long x,
- long y)
-{
- Q_UNUSED(startIndex);
- Q_UNUSED(endIndex);
- Q_UNUSED(coordinateType);
- Q_UNUSED(x);
- Q_UNUSED(y);
-
- return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_newText(IA2TextSegment *newText)
-{
- Q_UNUSED(newText);
- return E_NOTIMPL;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_oldText(IA2TextSegment *oldText)
-{
- Q_UNUSED(oldText);
- return E_NOTIMPL;
-}
-
-/**************************************************************\
- * IAccessibleValue *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_currentValue(VARIANT *currentValue)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- if (QAccessibleValueInterface *valueIface = valueInterface()) {
- const QVariant var = valueIface->currentValue();
- if (QVariant2VARIANT(var, *currentValue, QByteArray(), false))
- return S_OK;
-
- }
- currentValue->vt = VT_EMPTY;
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::setCurrentValue(VARIANT value)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- HRESULT hr = S_FALSE;
- if (QAccessibleValueInterface *valueIface = valueInterface()) {
- hr = VariantChangeType(&value, &value, 0, VT_R8);
- if (SUCCEEDED(hr)) {
- // ### works only for numbers (not date, strings, etc)
- valueIface->setCurrentValue(QVariant(value.dblVal));
- }
- }
- return hr;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_maximumValue(VARIANT *maximumValue)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- if (QAccessibleValueInterface *valueIface = valueInterface()) {
- const QVariant var = valueIface->maximumValue();
- if (QVariant2VARIANT(var, *maximumValue, QByteArray(), false))
- return S_OK;
- }
- maximumValue->vt = VT_EMPTY;
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::get_minimumValue(VARIANT *minimumValue)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
- if (QAccessibleValueInterface *valueIface = valueInterface()) {
- const QVariant var = valueIface->minimumValue();
- if (QVariant2VARIANT(var, *minimumValue, QByteArray(), false))
- return S_OK;
- }
- minimumValue->vt = VT_EMPTY;
- return S_FALSE;
-}
-
-
-/**************************************************************\
- * IServiceProvider *
- **************************************************************/
-/*!
- \internal
- Reimplemented from IServiceProvider
-*/
-HRESULT STDMETHODCALLTYPE QWindowsIA2Accessible::QueryService(REFGUID guidService, REFIID riid, void **iface)
-{
- if (!iface)
- return E_POINTER;
- Q_UNUSED(guidService);
- *iface = 0;
- qCDebug(lcQpaAccessibility) << "QWindowsIA2Accessible::QS(): " << QWindowsAccessibleGuid(riid);
-
-
- if (guidService == IID_IAccessible) {
- if (riid == IID_IServiceProvider) {
- // do not end up calling QueryInterface for IID_IServiceProvider
- *iface = 0;
- } else if (riid == IID_IAccessible || riid == IID_IUnknown || riid == IID_IDispatch) {
- // The above conditions works with AccProbe and NVDA.
- *iface = static_cast<IAccessible*>(this);
- } else {
- // According to _dicoveringInterfaces Discovery of Interfaces, we should really only
- // enter here if riid == IID_IAccessible2, but some screen readers does not like that,
- // and other servers seems to have realized that. (Chrome and Mozilla for instance,
- // calls QueryInterface more or less in the same way)
-
- // For instance, accProbe discovers IID_IAccessibleTable2 by a QueryService only.
- return QueryInterface(riid, iface);
- }
- }
-
- if (riid == IID_IAccessibleApplication) {
- *iface = new AccessibleApplication;
- return S_OK;
- }
- if (*iface) {
- AddRef();
- return S_OK;
- }
-
- return E_NOINTERFACE;
-}
-
-
-/*!
- \internal
- private function..
- \a maxRelations max number of relations to return in \a relations
- \a relations the array of relations matching
- \a startIndex Index to start to return from,
- it will return only that specific relation in \a relations
-
- If \a relations is null, \a startIndex and \a maxRelations are ignored, causing
- it to return the number of relations in \a nRelations
-*/
-HRESULT QWindowsIA2Accessible::getRelationsHelper(IAccessibleRelation **relations, int startIndex, long maxRelations, long *nRelations /* = 0*/)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- if (nRelations)
- *nRelations = 0;
- typedef QPair<QAccessibleInterface *, QAccessible::Relation> RelationEntry;
- QVector<RelationEntry> rels = accessible->relations();
- QMap<QAccessible::Relation, QAccessibleInterface *> relationMap;
- for (QVector<RelationEntry>::const_iterator it = rels.constBegin(); it != rels.constEnd(); ++it)
- {
- RelationEntry e = *it;
- relationMap.insertMulti(e.second, e.first);
- }
-
- QList<QAccessible::Relation> keys = relationMap.keys();
- const int numRelations = keys.count();
- if (relations) {
- for (int i = startIndex; i < qMin(startIndex + int(maxRelations), numRelations); ++i) {
- QAccessible::Relation relation = keys.at(i);
- QList<QAccessibleInterface*> targets = relationMap.values(relation);
- AccessibleRelation *rel = new AccessibleRelation(targets, relation);
- *relations = rel;
- ++relations;
- }
- }
- if (nRelations)
- *nRelations = numRelations;
-
- return numRelations > 0 ? S_OK : S_FALSE;
-}
-
-
-
-
-/*!
- \internal
- helper to wrap a QList<QAccessibleInterface*> inside an array of IAccessible*
- The IAccessible* array is returned as a IUnknown*
-*/
-HRESULT QWindowsIA2Accessible::wrapListOfCells(const QList<QAccessibleInterface*> &inputCells, IUnknown ***outputAccessibles, long *nCellCount)
-{
- const int count = inputCells.count();
- // Server allocates array
- *nCellCount = count;
- *outputAccessibles = Q_NULLPTR;
- if (count) {
- *outputAccessibles = coTaskMemAllocArray<IUnknown *>(count);
- std::transform(inputCells.constBegin(), inputCells.constEnd(),
- QT_MAKE_CHECKED_ARRAY_ITERATOR(*outputAccessibles, count),
- QWindowsAccessibility::wrap);
- }
- return count > 0 ? S_OK : S_FALSE;
-}
-
-// Q_STATIC_ASSERT(IA2_ROLE_CANVAS == QAccessible::Canvas); // ### Qt 6: make them the same
-Q_STATIC_ASSERT(IA2_ROLE_COLOR_CHOOSER == static_cast<IA2Role>(QAccessible::ColorChooser));
-Q_STATIC_ASSERT(IA2_ROLE_FOOTER == static_cast<IA2Role>(QAccessible::Footer));
-Q_STATIC_ASSERT(IA2_ROLE_FORM == static_cast<IA2Role>(QAccessible::Form));
-Q_STATIC_ASSERT(IA2_ROLE_HEADING == static_cast<IA2Role>(QAccessible::Heading));
-Q_STATIC_ASSERT(IA2_ROLE_NOTE == static_cast<IA2Role>(QAccessible::Note));
-Q_STATIC_ASSERT(IA2_ROLE_COMPLEMENTARY_CONTENT == static_cast<IA2Role>(QAccessible::ComplementaryContent));
-
-QT_END_NAMESPACE
-
-#endif //QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.h b/src/plugins/platforms/windows/accessible/iaccessible2.h
deleted file mode 100644
index d987016e15..0000000000
--- a/src/plugins/platforms/windows/accessible/iaccessible2.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef IACCESSIBLE2_H
-#define IACCESSIBLE2_H
-
-#include <QtCore/qglobal.h>
-#ifndef QT_NO_ACCESSIBILITY
-
-#include "qwindowscombase.h"
-#include "qwindowsmsaaaccessible.h"
-#include "comutils.h"
-
-#include "ia2_api_all.h"
-
-#include <servprov.h>
-
-QT_BEGIN_NAMESPACE
-
-#ifdef Q_CC_MINGW
-QT_WARNING_DISABLE_GCC("-Wunused-function") // MinGW 7.X claims it is unused
-// MinGW's __uuidof operator does not work for the Accessible2 interfaces
-template <>
-IID qUuidOf<IAccessibleComponent>() { return IID_IAccessibleComponent; }
-#endif // Q_CC_MINGW
-
-class QWindowsIA2Accessible : public QWindowsMsaaAccessible,
- public IAccessibleAction,
- public IAccessibleComponent,
- public IAccessibleEditableText,
- public IAccessibleTable2,
- public IAccessibleTableCell,
- public IAccessibleText,
- public IAccessibleValue,
- public IServiceProvider
-{
-public:
- QWindowsIA2Accessible(QAccessibleInterface *a) : QWindowsMsaaAccessible(a) {}
-
- /* IUnknown */
- HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID *);
- ULONG STDMETHODCALLTYPE AddRef();
- ULONG STDMETHODCALLTYPE Release();
-
- /* IAccessible2 */
- HRESULT STDMETHODCALLTYPE get_nRelations(long *nRelations);
- HRESULT STDMETHODCALLTYPE get_relation(long relationIndex, IAccessibleRelation **relation);
- HRESULT STDMETHODCALLTYPE get_relations(long maxRelations, IAccessibleRelation **relations, long *nRelations);
- HRESULT STDMETHODCALLTYPE role(long *role);
- HRESULT STDMETHODCALLTYPE scrollTo(enum IA2ScrollType scrollType);
- HRESULT STDMETHODCALLTYPE scrollToPoint(enum IA2CoordinateType coordinateType, long x, long y);
- HRESULT STDMETHODCALLTYPE get_groupPosition(long *groupLevel, long *similarItemsInGroup, long *positionInGroup);
- HRESULT STDMETHODCALLTYPE get_states(AccessibleStates *states);
- HRESULT STDMETHODCALLTYPE get_extendedRole(BSTR *extendedRole);
- HRESULT STDMETHODCALLTYPE get_localizedExtendedRole(BSTR *localizedExtendedRole);
- HRESULT STDMETHODCALLTYPE get_nExtendedStates(long *nExtendedStates);
- HRESULT STDMETHODCALLTYPE get_extendedStates(long maxExtendedStates, BSTR **extendedStates, long *nExtendedStates);
- HRESULT STDMETHODCALLTYPE get_localizedExtendedStates(long maxLocalizedExtendedStates, BSTR **localizedExtendedStates, long *nLocalizedExtendedStates);
- HRESULT STDMETHODCALLTYPE get_uniqueID(long *uniqueID);
- HRESULT STDMETHODCALLTYPE get_windowHandle(HWND *windowHandle);
- HRESULT STDMETHODCALLTYPE get_indexInParent(long *indexInParent);
- HRESULT STDMETHODCALLTYPE get_locale(IA2Locale *locale);
- HRESULT STDMETHODCALLTYPE get_attributes(BSTR *attributes);
-
- /* IAccessibleAction */
- HRESULT STDMETHODCALLTYPE nActions(long *nActions);
- HRESULT STDMETHODCALLTYPE doAction(long actionIndex);
- HRESULT STDMETHODCALLTYPE get_description(long actionIndex, BSTR *description);
- HRESULT STDMETHODCALLTYPE get_keyBinding(long actionIndex, long nMaxBindings, BSTR **keyBindings, long *nBindings);
- HRESULT STDMETHODCALLTYPE get_name(long actionIndex, BSTR *name);
- HRESULT STDMETHODCALLTYPE get_localizedName(long actionIndex, BSTR *localizedName);
-
- /* IAccessibleComponent */
- HRESULT STDMETHODCALLTYPE get_locationInParent(long *x,long *y);
- HRESULT STDMETHODCALLTYPE get_foreground(IA2Color *foreground);
- HRESULT STDMETHODCALLTYPE get_background(IA2Color *background);
-
- /* IAccessibleEditableText */
- HRESULT STDMETHODCALLTYPE copyText(long startOffset, long endOffset);
- HRESULT STDMETHODCALLTYPE deleteText(long startOffset, long endOffset);
- HRESULT STDMETHODCALLTYPE insertText(long offset, BSTR *text);
- HRESULT STDMETHODCALLTYPE cutText(long startOffset, long endOffset);
- HRESULT STDMETHODCALLTYPE pasteText(long offset);
- HRESULT STDMETHODCALLTYPE replaceText(long startOffset, long endOffset, BSTR *text);
- HRESULT STDMETHODCALLTYPE setAttributes(long startOffset, long endOffset, BSTR *attributes);
-
- /* IAccessibleTable2 */
- HRESULT STDMETHODCALLTYPE get_cellAt( long row, long column, IUnknown **cell);
- HRESULT STDMETHODCALLTYPE get_caption( IUnknown **accessibleInterface);
- HRESULT STDMETHODCALLTYPE get_columnDescription( long column, BSTR *description);
- HRESULT STDMETHODCALLTYPE get_nColumns( long *columnCount);
- HRESULT STDMETHODCALLTYPE get_nRows( long *rowCount);
- HRESULT STDMETHODCALLTYPE get_nSelectedCells( long *cellCount);
- HRESULT STDMETHODCALLTYPE get_nSelectedColumns( long *columnCount);
- HRESULT STDMETHODCALLTYPE get_nSelectedRows( long *rowCount);
- HRESULT STDMETHODCALLTYPE get_rowDescription( long row, BSTR *description);
- HRESULT STDMETHODCALLTYPE get_selectedCells( IUnknown ***cells, long *nSelectedCells);
- HRESULT STDMETHODCALLTYPE get_selectedColumns( long **selectedColumns, long *nColumns);
- HRESULT STDMETHODCALLTYPE get_selectedRows( long **selectedRows, long *nRows);
- HRESULT STDMETHODCALLTYPE get_summary( IUnknown **accessibleInterface);
- HRESULT STDMETHODCALLTYPE get_isColumnSelected( long column, boolean *isSelected);
- HRESULT STDMETHODCALLTYPE get_isRowSelected( long row, boolean *isSelected);
- HRESULT STDMETHODCALLTYPE selectRow( long row);
- HRESULT STDMETHODCALLTYPE selectColumn( long column);
- HRESULT STDMETHODCALLTYPE unselectRow( long row);
- HRESULT STDMETHODCALLTYPE unselectColumn( long column);
- HRESULT STDMETHODCALLTYPE get_modelChange( IA2TableModelChange *modelChange);
-
- /* IAccessibleTableCell */
- HRESULT STDMETHODCALLTYPE get_columnExtent(long *nColumnsSpanned);
- HRESULT STDMETHODCALLTYPE get_columnHeaderCells(IUnknown ***cellAccessibles, long *nColumnHeaderCells);
- HRESULT STDMETHODCALLTYPE get_columnIndex(long *columnIndex);
- HRESULT STDMETHODCALLTYPE get_rowExtent(long *nRowsSpanned);
- HRESULT STDMETHODCALLTYPE get_rowHeaderCells(IUnknown ***cellAccessibles, long *nRowHeaderCells);
- HRESULT STDMETHODCALLTYPE get_rowIndex(long *rowIndex);
- HRESULT STDMETHODCALLTYPE get_isSelected( boolean *isSelected);
- HRESULT STDMETHODCALLTYPE get_rowColumnExtents(long *row, long *column,
- long *rowExtents, long *columnExtents,
- boolean *isSelected);
- HRESULT STDMETHODCALLTYPE get_table(IUnknown **table);
-
-
- /* IAccessibleText */
- HRESULT STDMETHODCALLTYPE addSelection(long startOffset, long endOffset);
- HRESULT STDMETHODCALLTYPE get_attributes(long offset, long *startOffset,
- long *endOffset, BSTR *textAttributes);
- HRESULT STDMETHODCALLTYPE get_caretOffset(long *offset);
- HRESULT STDMETHODCALLTYPE get_characterExtents(long offset, enum IA2CoordinateType coordType,
- long *x, long *y,
- long *width, long *height);
- HRESULT STDMETHODCALLTYPE get_nSelections(long *nSelections);
- HRESULT STDMETHODCALLTYPE get_offsetAtPoint(long x, long y, enum IA2CoordinateType coordType, long *offset);
- HRESULT STDMETHODCALLTYPE get_selection(long selectionIndex, long *startOffset, long *endOffset);
- HRESULT STDMETHODCALLTYPE get_text(long startOffset, long endOffset, BSTR *text);
- HRESULT STDMETHODCALLTYPE get_textBeforeOffset(long offset, enum IA2TextBoundaryType boundaryType,
- long *startOffset, long *endOffset, BSTR *text);
- HRESULT STDMETHODCALLTYPE get_textAfterOffset(long offset, enum IA2TextBoundaryType boundaryType,
- long *startOffset, long *endOffset, BSTR *text);
- HRESULT STDMETHODCALLTYPE get_textAtOffset(long offset, enum IA2TextBoundaryType boundaryType,
- long *startOffset, long *endOffset, BSTR *text);
- HRESULT STDMETHODCALLTYPE removeSelection(long selectionIndex);
- HRESULT STDMETHODCALLTYPE setCaretOffset(long offset);
- HRESULT STDMETHODCALLTYPE setSelection(long selectionIndex, long startOffset, long endOffset);
- HRESULT STDMETHODCALLTYPE get_nCharacters(long *nCharacters);
- HRESULT STDMETHODCALLTYPE scrollSubstringTo(long startIndex, long endIndex, enum IA2ScrollType scrollType);
- HRESULT STDMETHODCALLTYPE scrollSubstringToPoint(long startIndex, long endIndex,
- enum IA2CoordinateType coordinateType, long x, long y);
- HRESULT STDMETHODCALLTYPE get_newText(IA2TextSegment *newText);
- HRESULT STDMETHODCALLTYPE get_oldText(IA2TextSegment *oldText);
-
- /* IAccessibleValue */
- HRESULT STDMETHODCALLTYPE get_currentValue(VARIANT *currentValue);
- HRESULT STDMETHODCALLTYPE setCurrentValue(VARIANT value);
- HRESULT STDMETHODCALLTYPE get_maximumValue(VARIANT *maximumValue);
- HRESULT STDMETHODCALLTYPE get_minimumValue(VARIANT *minimumValue);
-
- /* IServiceProvider */
- HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppv);
-
- /* private helper functions */
-private:
- inline QAccessibleTextInterface *textInterface() const {
- QAccessibleInterface *accessible = accessibleInterface();
- return accessible ? accessible->textInterface() : static_cast<QAccessibleTextInterface *>(0);
- }
-
- inline QAccessibleActionInterface *actionInterface() const {
- QAccessibleInterface *accessible = accessibleInterface();
- return accessible->actionInterface();
- }
-
- inline QAccessibleValueInterface *valueInterface() const {
- QAccessibleInterface *accessible = accessibleInterface();
- return accessible->valueInterface();
- }
-
- inline QAccessibleTableInterface *tableInterface() const {
- QAccessibleInterface *accessible = accessibleInterface();
- return accessible->tableInterface();
- }
-
- inline QAccessibleTableCellInterface *tableCellInterface() const {
- QAccessibleInterface *accessible = accessibleInterface();
- return accessible->tableCellInterface();
- }
-
- /*!
- \internal
- \a screenPos is in screen relative position
- \a x and \y (out) is in parent relative position if coordType == IA2_COORDTYPE_PARENT_RELATIVE
- */
- void mapFromScreenPos(enum IA2CoordinateType coordType, const QPoint &screenPos, long *x, long *y) const {
- QAccessibleInterface *accessible = accessibleInterface();
- if (coordType == IA2_COORDTYPE_PARENT_RELATIVE) {
- // caller wants relative to parent
- if (QAccessibleInterface *parent = accessible->parent()) {
- const QRect parentScreenRect = parent->rect();
- *x = parentScreenRect.x() - screenPos.x();
- *y = parentScreenRect.y() - screenPos.y();
- return;
- }
- }
- *x = screenPos.x();
- *y = screenPos.y();
- }
-
- /*!
- \internal
- \a x and \y is in parent relative position if coordType == IA2_COORDTYPE_PARENT_RELATIVE
- \return a screen relative position
- */
- QPoint mapToScreenPos(enum IA2CoordinateType coordType, long x, long y) const {
- QAccessibleInterface *accessible = accessibleInterface();
- if (coordType == IA2_COORDTYPE_PARENT_RELATIVE) {
- if (QAccessibleInterface *parent = accessible->parent()) {
- const QRect parentScreenRect = parent->rect();
- return QPoint(parentScreenRect.x() + x, parentScreenRect.y() + y);
- }
- }
- return QPoint(x,y);
- }
-
- HRESULT getRelationsHelper(IAccessibleRelation **relations, int startIndex, long maxRelations, long *nRelations = 0);
- HRESULT wrapListOfCells(const QList<QAccessibleInterface*> &inputCells, IUnknown ***outputAccessibles, long *nCellCount);
- QString textForRange(int startOffset, int endOffset) const;
- void replaceTextFallback(long startOffset, long endOffset, const QString &txt);
-
-};
-
-/**************************************************************\
- * AccessibleApplication *
- **************************************************************/
-
-#ifdef Q_CC_MINGW
-// MinGW's __uuidof operator does not work for the IAccessible2 interfaces
-template <>
-IID qUuidOf<IAccessibleApplication>() { return IID_IAccessibleApplication; }
-
-template <>
-IID qUuidOf<IAccessible2>() { return IID_IAccessible2; }
-
-template <>
-IID qUuidOf<IAccessibleRelation>() { return IID_IAccessibleRelation; }
-#endif // Q_CC_MINGW
-
-class AccessibleApplication : public QWindowsComBase<IAccessibleApplication>
-{
-public:
- AccessibleApplication() {}
-
- virtual ~AccessibleApplication() {}
-
- /* IAccessibleApplication */
- HRESULT STDMETHODCALLTYPE get_appName(/* [retval][out] */ BSTR *name);
- HRESULT STDMETHODCALLTYPE get_appVersion(/* [retval][out] */ BSTR *version);
- HRESULT STDMETHODCALLTYPE get_toolkitName(/* [retval][out] */ BSTR *name);
- HRESULT STDMETHODCALLTYPE get_toolkitVersion(/* [retval][out] */ BSTR *version);
-};
-
-
-
-/**************************************************************\
- * AccessibleRelation *
- **************************************************************/
-
-
-
-class AccessibleRelation : public QWindowsComBase<IAccessibleRelation>
-{
-public:
- AccessibleRelation(const QList<QAccessibleInterface *> &targets,
- QAccessible::Relation relation);
-
- virtual ~AccessibleRelation() {}
-
- /* IAccessibleRelation */
- HRESULT STDMETHODCALLTYPE get_relationType(BSTR *relationType);
- HRESULT STDMETHODCALLTYPE get_localizedRelationType(BSTR *localizedRelationType);
- HRESULT STDMETHODCALLTYPE get_nTargets(long *nTargets);
- HRESULT STDMETHODCALLTYPE get_target(long targetIndex, IUnknown **target);
- HRESULT STDMETHODCALLTYPE get_targets(long maxTargets, IUnknown **targets, long *nTargets);
-
-private:
- static BSTR relationToBSTR(QAccessible::Relation relation)
- {
- const wchar_t *constRelationString = 0;
- switch (relation) {
- case QAccessible::Label:
- constRelationString = IA2_RELATION_LABEL_FOR;
- break;
- case QAccessible::Labelled:
- constRelationString = IA2_RELATION_LABELLED_BY;
- break;
- case QAccessible::Controller:
- constRelationString = IA2_RELATION_CONTROLLER_FOR;
- break;
- case QAccessible::Controlled:
- constRelationString = IA2_RELATION_CONTROLLED_BY;
- break;
- case QAccessible::AllRelations:
- constRelationString = ( L"AllRelations" );
- break;
- }
-
- if (constRelationString) {
- BSTR bstrVal;
- const UINT wlen = (UINT)wcslen(constRelationString);
- bstrVal = ::SysAllocStringLen(constRelationString, wlen);
- return bstrVal;
- }
- return 0;
- }
-
-
- QList<QAccessibleInterface *> m_targets;
- QAccessible::Relation m_relation;
-};
-
-QT_END_NAMESPACE
-
-#endif //QT_NO_ACCESSIBILITY
-
-#endif // IACCESSIBLE2_H
diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
deleted file mode 100644
index d48cb9674f..0000000000
--- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qglobal.h>
-#ifndef QT_NO_ACCESSIBILITY
-
-
-#include <private/qsystemlibrary_p.h>
-
-#include <QtCore/qlocale.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qpair.h>
-#include <QtCore/qpointer.h>
-#include <QtGui/qaccessible.h>
-#include <QtGui/private/qguiapplication_p.h>
-#include <qpa/qplatformnativeinterface.h>
-#include <qpa/qplatformintegration.h>
-#include <QtGui/qwindow.h>
-#include <QtGui/qguiapplication.h>
-#include <QtFontDatabaseSupport/private/qwindowsfontdatabase_p.h> // registry helper
-
-#include "qwindowsaccessibility.h"
-#include "iaccessible2.h"
-#include "comutils.h"
-
-#include <oleacc.h>
-
-//#include <uiautomationcoreapi.h>
-#ifndef UiaRootObjectId
-#define UiaRootObjectId -25
-#endif
-
-#include <winuser.h>
-#if !defined(WINABLEAPI)
-# include <winable.h>
-#endif
-
-#include <servprov.h>
-#if !defined(Q_CC_BOR) && !defined (Q_CC_GNU)
-#include <comdef.h>
-#endif
-
-#include <QtCore/qt_windows.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \!internal
- \class QWindowsAccessibility
-
- Implements QPlatformAccessibility
-
-*/
-QWindowsAccessibility::QWindowsAccessibility()
-{
-}
-
-// Retrieve sound name by checking the icon property of a message box
-static inline QString messageBoxAlertSound(const QObject *messageBox)
-{
- enum MessageBoxIcon { // Keep in sync with QMessageBox::Icon
- Information = 1,
- Warning = 2,
- Critical = 3
- };
- switch (messageBox->property("icon").toInt()) {
- case Information:
- return QStringLiteral("SystemAsterisk");
- case Warning:
- return QStringLiteral("SystemExclamation");
- case Critical:
- return QStringLiteral("SystemHand");
- }
- return QString();
-}
-
-static QString soundFileName(const QString &soundName)
-{
- const QString key = QStringLiteral("AppEvents\\Schemes\\Apps\\.Default\\")
- + soundName + QStringLiteral("\\.Current");
- return QWindowsFontDatabase::readRegistryString(HKEY_CURRENT_USER,
- reinterpret_cast<const wchar_t *>(key.utf16()), L"");
-}
-
-void QWindowsAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
-{
- QString soundName;
- switch (event->type()) {
- case QAccessible::PopupMenuStart:
- soundName = QLatin1String("MenuPopup");
- break;
-
- case QAccessible::MenuCommand:
- soundName = QLatin1String("MenuCommand");
- break;
-
- case QAccessible::Alert:
- soundName = event->object()->inherits("QMessageBox") ?
- messageBoxAlertSound(event->object()) : QStringLiteral("SystemAsterisk");
- break;
- default:
- break;
- }
-
- if (!soundName.isEmpty() && !soundFileName(soundName).isEmpty()) {
- PlaySound(reinterpret_cast<const wchar_t *>(soundName.utf16()), 0,
- SND_ALIAS | SND_ASYNC | SND_NODEFAULT | SND_NOWAIT);
- }
-
- // An event has to be associated with a window,
- // so find the first parent that is a widget and that has a WId
- QAccessibleInterface *iface = event->accessibleInterface();
- if (!isActive() || !iface || !iface->isValid())
- return;
- QWindow *window = QWindowsAccessibility::windowHelper(iface);
-
- if (!window) {
- window = QGuiApplication::focusWindow();
- if (!window)
- return;
- }
-
- QPlatformNativeInterface *platform = QGuiApplication::platformNativeInterface();
- if (!window->handle()) // Called before show(), no native window yet.
- return;
- const HWND hWnd = reinterpret_cast<HWND>(platform->nativeResourceForWindow("handle", window));
-
- if (event->type() != QAccessible::MenuCommand && // MenuCommand is faked
- event->type() != QAccessible::ObjectDestroyed) {
- ::NotifyWinEvent(event->type(), hWnd, OBJID_CLIENT, QAccessible::uniqueId(iface));
- }
-}
-
-QWindow *QWindowsAccessibility::windowHelper(const QAccessibleInterface *iface)
-{
- QWindow *window = iface->window();
- if (!window) {
- QAccessibleInterface *acc = iface->parent();
- while (acc && acc->isValid() && !window) {
- window = acc->window();
- QAccessibleInterface *par = acc->parent();
- acc = par;
- }
- }
- return window;
-}
-
-/*!
- \internal
- helper to wrap a QAccessibleInterface inside a IAccessible*
-*/
-IAccessible *QWindowsAccessibility::wrap(QAccessibleInterface *acc)
-{
- if (!acc)
- return 0;
-
- // ### FIXME: maybe we should accept double insertions into the cache
- if (!QAccessible::uniqueId(acc))
- QAccessible::registerAccessibleInterface(acc);
-
- QWindowsIA2Accessible *wacc = new QWindowsIA2Accessible(acc);
- IAccessible *iacc = 0;
- wacc->QueryInterface(IID_IAccessible, reinterpret_cast<void **>(&iacc));
- return iacc;
-}
-
-bool QWindowsAccessibility::handleAccessibleObjectFromWindowRequest(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult)
-{
- if (static_cast<long>(lParam) == static_cast<long>(UiaRootObjectId)) {
- /* For UI Automation */
- } else if (DWORD(lParam) == DWORD(OBJID_CLIENT)) {
- // Start handling accessibility internally
- QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true);
- // Ignoring all requests while starting up
- // ### Maybe QPA takes care of this???
- if (QCoreApplication::startingUp() || QCoreApplication::closingDown())
- return false;
-
- typedef LRESULT (WINAPI *PtrLresultFromObject)(REFIID, WPARAM, LPUNKNOWN);
- static PtrLresultFromObject ptrLresultFromObject = 0;
- static bool oleaccChecked = false;
-
- if (!oleaccChecked) {
- oleaccChecked = true;
- ptrLresultFromObject = reinterpret_cast<PtrLresultFromObject>(QSystemLibrary::resolve(QLatin1String("oleacc"), "LresultFromObject"));
- }
-
- if (ptrLresultFromObject) {
- QWindow *window = QWindowsContext::instance()->findWindow(hwnd);
- if (window) {
- QAccessibleInterface *acc = window->accessibleRoot();
- if (acc) {
- if (IAccessible *iface = wrap(acc)) {
- *lResult = ptrLresultFromObject(IID_IAccessible, wParam, iface); // ref == 2
- if (*lResult) {
- iface->Release(); // the client will release the object again, and then it will destroy itself
- }
- return true;
- }
- }
- }
- }
- }
- return false;
-}
-
-QT_END_NAMESPACE
-
-#endif //QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h b/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h
deleted file mode 100644
index 8621e93120..0000000000
--- a/src/plugins/platforms/windows/accessible/qwindowsaccessibility.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QWINDOWSACCESSIBILITY_H
-#define QWINDOWSACCESSIBILITY_H
-
-#include "../qtwindowsglobal.h"
-#include "../qwindowscontext.h"
-#include <qpa/qplatformaccessibility.h>
-
-#include <oleacc.h>
-
-QT_BEGIN_NAMESPACE
-
-class QWindowsAccessibility : public QPlatformAccessibility
-{
-public:
- QWindowsAccessibility();
- static bool handleAccessibleObjectFromWindowRequest(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult);
- void notifyAccessibilityUpdate(QAccessibleEvent *event) override;
- static IAccessible *wrap(QAccessibleInterface *acc);
- static QWindow *windowHelper(const QAccessibleInterface *iface);
-};
-
-QT_END_NAMESPACE
-
-#endif // QWINDOWSACCESSIBILITY_H
diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
deleted file mode 100644
index fe2b9335cb..0000000000
--- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
+++ /dev/null
@@ -1,1223 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtCore/qglobal.h>
-#ifndef QT_NO_ACCESSIBILITY
-
-#include "qwindowsmsaaaccessible.h"
-#include "qwindowsaccessibility.h"
-#include "qwindowscombase.h"
-#include <oleacc.h>
-#include <servprov.h>
-#include <winuser.h>
-#include "comutils.h"
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qmap.h>
-#include <QtCore/qpair.h>
-#include <QtGui/qaccessible.h>
-#include <QtGui/qguiapplication.h>
-#include <qpa/qplatformnativeinterface.h>
-#include <QtGui/qwindow.h>
-#include <QtGui/private/qhighdpiscaling_p.h>
-
-//#include <uiautomationcoreapi.h>
-#ifndef UiaRootObjectId
-#define UiaRootObjectId -25
-#endif
-
-#if !defined(Q_CC_BOR) && !defined (Q_CC_GNU)
-#include <comdef.h>
-#endif
-
-
-#include <QtCore/qt_windows.h>
-
-
-QT_BEGIN_NAMESPACE
-
-class QWindowsEnumerate : public QWindowsComBase<IEnumVARIANT>
-{
-public:
- QWindowsEnumerate(const QVector<int> &a) : QWindowsComBase<IEnumVARIANT>(0), current(0),array(a) {}
- virtual ~QWindowsEnumerate() {}
-
- HRESULT STDMETHODCALLTYPE Clone(IEnumVARIANT **ppEnum);
- HRESULT STDMETHODCALLTYPE Next(unsigned long celt, VARIANT FAR* rgVar, unsigned long FAR* pCeltFetched);
- HRESULT STDMETHODCALLTYPE Reset();
- HRESULT STDMETHODCALLTYPE Skip(unsigned long celt);
-
-private:
- ULONG current;
- QVector<int> array;
-};
-
-HRESULT STDMETHODCALLTYPE QWindowsEnumerate::Clone(IEnumVARIANT **ppEnum)
-{
- QWindowsEnumerate *penum = 0;
- *ppEnum = 0;
-
- penum = new QWindowsEnumerate(array);
- if (!penum)
- return E_OUTOFMEMORY;
- penum->current = current;
- penum->array = array;
- penum->AddRef();
- *ppEnum = penum;
-
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsEnumerate::Next(unsigned long celt, VARIANT FAR* rgVar, unsigned long FAR* pCeltFetched)
-{
- if (pCeltFetched)
- *pCeltFetched = 0;
-
- ULONG l;
- for (l = 0; l < celt; l++) {
- VariantInit(&rgVar[l]);
- if (current + 1 > ULONG(array.size())) {
- *pCeltFetched = l;
- return S_FALSE;
- }
-
- rgVar[l].vt = VT_I4;
- rgVar[l].lVal = array[int(current)];
- ++current;
- }
- *pCeltFetched = l;
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsEnumerate::Reset()
-{
- current = 0;
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsEnumerate::Skip(unsigned long celt)
-{
- current += celt;
- if (current > ULONG(array.size())) {
- current = ULONG(array.size());
- return S_FALSE;
- }
- return S_OK;
-}
-
-#if defined(DEBUG_SHOW_ATCLIENT_COMMANDS)
-void accessibleDebugClientCalls_helper(const char* funcName, const QAccessibleInterface *iface)
-{
- qCDebug(lcQpaAccessibility) << iface << funcName;
-}
-#endif
-
-/**************************************************************\
- * *
- * IUnknown *
- * *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::QueryInterface(REFIID id, LPVOID *iface)
-{
- *iface = nullptr;
- const bool result = qWindowsComQueryUnknownInterfaceMulti<IAccessible2>(this, id, iface)
- || qWindowsComQueryInterface<IDispatch>(this, id, iface)
- || qWindowsComQueryInterface<IAccessible>(this, id, iface)
- || qWindowsComQueryInterface<IOleWindow>(this, id, iface);
-
- if (result) {
- qCDebug(lcQpaAccessibility) << "QWindowsIA2Accessible::QI() - "
- << QWindowsAccessibleGuid(id) << ", iface:" << accessibleInterface();
- }
- return result ? S_OK : E_NOINTERFACE;
-}
-
-ULONG STDMETHODCALLTYPE QWindowsMsaaAccessible::AddRef()
-{
- return ++ref;
-}
-
-ULONG STDMETHODCALLTYPE QWindowsMsaaAccessible::Release()
-{
- if (!--ref) {
- delete this;
- return 0;
- }
- return ref;
-}
-
-
-/*
- IDispatch
-*/
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::GetTypeInfoCount(unsigned int * pctinfo)
-{
- // We don't use a type library
- *pctinfo = 0;
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::GetTypeInfo(unsigned int, unsigned long, ITypeInfo **pptinfo)
-{
- // We don't use a type library
- *pptinfo = 0;
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::GetIDsOfNames(const _GUID &, wchar_t **rgszNames, unsigned int, unsigned long, long *rgdispid)
-{
-#if !defined(Q_CC_BOR) && !defined(Q_CC_GNU)
- // PROPERTIES: Hierarchical
- if (_bstr_t(rgszNames[0]) == _bstr_t(L"accParent"))
- rgdispid[0] = DISPID_ACC_PARENT;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accChildCount"))
- rgdispid[0] = DISPID_ACC_CHILDCOUNT;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accChild"))
- rgdispid[0] = DISPID_ACC_CHILD;
-
- // PROPERTIES: Descriptional
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accName("))
- rgdispid[0] = DISPID_ACC_NAME;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accValue"))
- rgdispid[0] = DISPID_ACC_VALUE;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accDescription"))
- rgdispid[0] = DISPID_ACC_DESCRIPTION;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accRole"))
- rgdispid[0] = DISPID_ACC_ROLE;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accState"))
- rgdispid[0] = DISPID_ACC_STATE;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accHelp"))
- rgdispid[0] = DISPID_ACC_HELP;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accHelpTopic"))
- rgdispid[0] = DISPID_ACC_HELPTOPIC;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accKeyboardShortcut"))
- rgdispid[0] = DISPID_ACC_KEYBOARDSHORTCUT;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accFocus"))
- rgdispid[0] = DISPID_ACC_FOCUS;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accSelection"))
- rgdispid[0] = DISPID_ACC_SELECTION;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accDefaultAction"))
- rgdispid[0] = DISPID_ACC_DEFAULTACTION;
-
- // METHODS
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accSelect"))
- rgdispid[0] = DISPID_ACC_SELECT;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accLocation"))
- rgdispid[0] = DISPID_ACC_LOCATION;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accNavigate"))
- rgdispid[0] = DISPID_ACC_NAVIGATE;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accHitTest"))
- rgdispid[0] = DISPID_ACC_HITTEST;
- else if (_bstr_t(rgszNames[0]) == _bstr_t(L"accDoDefaultAction"))
- rgdispid[0] = DISPID_ACC_DODEFAULTACTION;
- else
- return DISP_E_UNKNOWNINTERFACE;
-
- return S_OK;
-#else
- Q_UNUSED(rgszNames);
- Q_UNUSED(rgdispid);
-
- return DISP_E_MEMBERNOTFOUND;
-#endif
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::Invoke(long dispIdMember,
- const _GUID &,
- unsigned long,
- unsigned short wFlags,
- tagDISPPARAMS *pDispParams,
- tagVARIANT *pVarResult,
- tagEXCEPINFO *, unsigned int *)
-{
- HRESULT hr = DISP_E_MEMBERNOTFOUND;
-
- switch (dispIdMember)
- {
- case DISPID_ACC_PARENT:
- if (wFlags == DISPATCH_PROPERTYGET) {
- if (!pVarResult)
- return E_INVALIDARG;
- hr = get_accParent(&pVarResult->pdispVal);
- } else {
- hr = DISP_E_MEMBERNOTFOUND;
- }
- break;
-
- case DISPID_ACC_CHILDCOUNT:
- if (wFlags == DISPATCH_PROPERTYGET) {
- if (!pVarResult)
- return E_INVALIDARG;
- hr = get_accChildCount(&pVarResult->lVal);
- } else {
- hr = DISP_E_MEMBERNOTFOUND;
- }
- break;
-
- case DISPID_ACC_CHILD:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accChild(pDispParams->rgvarg[0], &pVarResult->pdispVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_NAME:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accName(pDispParams->rgvarg[0], &pVarResult->bstrVal);
- else if (wFlags == DISPATCH_PROPERTYPUT)
- hr = put_accName(pDispParams->rgvarg[0], pVarResult->bstrVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_VALUE:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accValue(pDispParams->rgvarg[0], &pVarResult->bstrVal);
- else if (wFlags == DISPATCH_PROPERTYPUT)
- hr = put_accValue(pDispParams->rgvarg[0], pVarResult->bstrVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_DESCRIPTION:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accDescription(pDispParams->rgvarg[0], &pVarResult->bstrVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_ROLE:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accRole(pDispParams->rgvarg[0], pVarResult);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_STATE:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accState(pDispParams->rgvarg[0], pVarResult);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_HELP:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accHelp(pDispParams->rgvarg[0], &pVarResult->bstrVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_HELPTOPIC:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accHelpTopic(&pDispParams->rgvarg[2].bstrVal, pDispParams->rgvarg[1], &pDispParams->rgvarg[0].lVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_KEYBOARDSHORTCUT:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accKeyboardShortcut(pDispParams->rgvarg[0], &pVarResult->bstrVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_FOCUS:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accFocus(pVarResult);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_SELECTION:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accSelection(pVarResult);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_DEFAULTACTION:
- if (wFlags == DISPATCH_PROPERTYGET)
- hr = get_accDefaultAction(pDispParams->rgvarg[0], &pVarResult->bstrVal);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_SELECT:
- if (wFlags == DISPATCH_METHOD)
- hr = accSelect(pDispParams->rgvarg[1].lVal, pDispParams->rgvarg[0]);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_LOCATION:
- if (wFlags == DISPATCH_METHOD)
- hr = accLocation(&pDispParams->rgvarg[4].lVal, &pDispParams->rgvarg[3].lVal, &pDispParams->rgvarg[2].lVal, &pDispParams->rgvarg[1].lVal, pDispParams->rgvarg[0]);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_NAVIGATE:
- if (wFlags == DISPATCH_METHOD)
- hr = accNavigate(pDispParams->rgvarg[1].lVal, pDispParams->rgvarg[0], pVarResult);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_HITTEST:
- if (wFlags == DISPATCH_METHOD)
- hr = accHitTest(pDispParams->rgvarg[1].lVal, pDispParams->rgvarg[0].lVal, pVarResult);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- case DISPID_ACC_DODEFAULTACTION:
- if (wFlags == DISPATCH_METHOD)
- hr = accDoDefaultAction(pDispParams->rgvarg[0]);
- else
- hr = DISP_E_MEMBERNOTFOUND;
- break;
-
- default:
- hr = DISP_E_MEMBERNOTFOUND;
- break;
- }
-
- if (!SUCCEEDED(hr)) {
- return hr;
- }
- return hr;
-}
-
-/*
- IAccessible
-
-IAccessible::accHitTest documents the value returned in pvarID like this:
-
-| *Point location* | *vt member* | *Value member* |
-+========================================================+=============+=========================+
-| Outside of the object's boundaries, and either inside | VT_EMPTY | None. |
-| or outside of the object's bounding rectangle. | | |
-+--------------------------------------------------------+-------------+-------------------------+
-| Within the object but not within a child element or a | VT_I4 | lVal is CHILDID_SELF |
-| child object. | | |
-+--------------------------------------------------------+-------------+-------------------------+
-| Within a child element. | VT_I4 | lVal contains |
-| | | the child ID. |
-+--------------------------------------------------------+-------------+-------------------------+
-| Within a child object. | VT_DISPATCH | pdispVal is set to the |
-| | | child object's IDispatch|
-| | | interface pointer |
-+--------------------------------------------------------+-------------+-------------------------+
-*/
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accHitTest(long xLeft, long yTop, VARIANT *pvarID)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- const QPoint pos = QHighDpi::fromNativeLocalPosition(QPoint(xLeft, yTop),
- QWindowsAccessibility::windowHelper(accessible));
- QAccessibleInterface *child = accessible->childAt(pos.x(), pos.y());
- if (child == 0) {
- // no child found, return this item if it contains the coordinates
- if (accessible->rect().contains(xLeft, yTop)) {
- (*pvarID).vt = VT_I4;
- (*pvarID).lVal = CHILDID_SELF;
- return S_OK;
- }
- } else {
- IAccessible *iface = QWindowsAccessibility::wrap(child);
- if (iface) {
- (*pvarID).vt = VT_DISPATCH;
- (*pvarID).pdispVal = iface;
- return S_OK;
- }
- }
-
- // Did not find anything
- (*pvarID).vt = VT_EMPTY;
- return S_FALSE;
-}
-
-/*
- It is recommended to read
- "Implementing a Microsoft Active Accessibility (MSAA) Server.
- Practical Tips for Developers and How Mozilla Does It"
- (https://developer.mozilla.org/En/Accessibility/Implementing_an_MSAA_Server)
-
- to get an overview of what's important to implement and what parts of MSAA
- can be ignored. All stuff prefixed with "moz" are information from that page.
-*/
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accLocation(long *pxLeft, long *pyTop, long *pcxWidth, long *pcyHeight, VARIANT varID)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QAccessibleInterface *acc = childPointer(accessible, varID);
- if (!acc || !acc->isValid())
- return E_FAIL;
- const QRect rect = QHighDpi::toNativePixels(acc->rect(),
- QWindowsAccessibility::windowHelper(accessible));
-
- *pxLeft = rect.x();
- *pyTop = rect.y();
- *pcxWidth = rect.width();
- *pcyHeight = rect.height();
-
- return S_OK;
-}
-
-// moz: [important, but no need to implement up/down/left/right]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accNavigate(long navDir, VARIANT varStart, VARIANT *pvarEnd)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QAccessibleInterface *acc = 0;
- switch (navDir) {
- case NAVDIR_FIRSTCHILD:
- acc = accessible->child(0);
- break;
- case NAVDIR_LASTCHILD:
- acc = accessible->child(accessible->childCount() - 1);
- break;
- case NAVDIR_NEXT:
- case NAVDIR_PREVIOUS:
- if (!varStart.lVal){
- QAccessibleInterface *parent = accessible->parent();
- if (parent && parent->isValid()) {
- int index = parent->indexOfChild(accessible);
- index += (navDir == NAVDIR_NEXT) ? 1 : -1;
- if (index >= 0 && index < parent->childCount())
- acc = parent->child(index);
- }
- } else {
- int index = varStart.lVal;
- index += (navDir == NAVDIR_NEXT) ? 1 : -1;
- if (index > 0 && index <= accessible->childCount())
- acc = accessible->child(index - 1);
- }
- break;
-
- // Geometrical
- case NAVDIR_UP:
- case NAVDIR_DOWN:
- case NAVDIR_LEFT:
- case NAVDIR_RIGHT: {
- QAccessibleInterface *pIface = accessible->parent();
- if (pIface && pIface->isValid()) {
- const int indexOfOurself = pIface->indexOfChild(accessible);
- QRect startg = accessible->rect();
- QPoint startc = startg.center();
- QAccessibleInterface *candidate = 0;
- unsigned mindist = UINT_MAX; // will work on screen sizes at least up to 46340x46340
- const int sibCount = pIface->childCount();
- for (int i = 0; i < sibCount; ++i) {
- QAccessibleInterface *sibling = 0;
- sibling = pIface->child(i);
- Q_ASSERT(sibling);
- if (i == indexOfOurself || sibling->state().invisible) {
- //ignore ourself and invisible siblings
- continue;
- }
-
- QRect sibg = sibling->rect();
- QPoint sibc = sibg.center();
- QPoint sibp;
- QPoint startp;
- QPoint distp;
- switch (navDir) {
- case NAVDIR_LEFT:
- startp = QPoint(startg.left(), startg.top() + startg.height() / 2);
- sibp = QPoint(sibg.right(), sibg.top() + sibg.height() / 2);
- if (QPoint(sibc - startc).x() >= 0) {
- continue;
- }
- distp = sibp - startp;
- break;
- case NAVDIR_RIGHT:
- startp = QPoint(startg.right(), startg.top() + startg.height() / 2);
- sibp = QPoint(sibg.left(), sibg.top() + sibg.height() / 2);
- if (QPoint(sibc - startc).x() <= 0) {
- continue;
- }
- distp = sibp - startp;
- break;
- case NAVDIR_UP:
- startp = QPoint(startg.left() + startg.width() / 2, startg.top());
- sibp = QPoint(sibg.left() + sibg.width() / 2, sibg.bottom());
- if (QPoint(sibc - startc).y() >= 0) {
- continue;
- }
- distp = sibp - startp;
- break;
- case NAVDIR_DOWN:
- startp = QPoint(startg.left() + startg.width() / 2, startg.bottom());
- sibp = QPoint(sibg.left() + sibg.width() / 2, sibg.top());
- if (QPoint(sibc - startc).y() <= 0) {
- continue;
- }
- distp = sibp - startp;
- break;
- default:
- break;
- }
-
- // Since we're *comparing* (and not measuring) distances, we can compare the
- // squared distance, (thus, no need to take the sqrt()).
- unsigned dist = distp.x() * distp.x() + distp.y() * distp.y();
- if (dist < mindist) {
- candidate = sibling;
- mindist = dist;
- }
- }
- acc = candidate;
- }
- }
- break;
- default:
- break;
- }
- if (!acc) {
- (*pvarEnd).vt = VT_EMPTY;
- return S_FALSE;
- }
-
- if (IAccessible *iface = QWindowsAccessibility::wrap(acc)) {
- (*pvarEnd).vt = VT_DISPATCH;
- (*pvarEnd).pdispVal = iface;
- return S_OK;
- }
-
- (*pvarEnd).vt = VT_EMPTY;
- return S_FALSE;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accChild(VARIANT varChildID, IDispatch** ppdispChild)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (varChildID.vt != VT_I4)
- return E_INVALIDARG;
-
- QAccessibleInterface *acc = childPointer(accessible, varChildID);
- if (acc && acc->isValid()) {
- *ppdispChild = QWindowsAccessibility::wrap(acc);
- return S_OK;
- }
-
- return E_FAIL;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accChildCount(long* pcountChildren)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *pcountChildren = accessible->childCount();
- return S_OK;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accParent(IDispatch** ppdispParent)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QAccessibleInterface *acc = accessible->parent();
- if (acc) {
- if (IAccessible *iface = QWindowsAccessibility::wrap(acc)) {
- *ppdispParent = iface;
- return S_OK;
- }
- }
-
- *ppdispParent = 0;
- return S_FALSE;
-}
-
-/*
- Properties and methods
-*/
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accDoDefaultAction(VARIANT varID)
-{
- Q_UNUSED(varID);
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) {
- const QString def = actionIface->actionNames().value(0);
- if (!def.isEmpty()) {
- actionIface->doAction(def);
- return S_OK;
- }
- }
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accDefaultAction(VARIANT varID, BSTR* pszDefaultAction)
-{
- Q_UNUSED(varID);
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *pszDefaultAction = 0;
- if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) {
- const QString def = actionIface->actionNames().value(0);
- if (!def.isEmpty())
- *pszDefaultAction = QStringToBSTR(def);
- }
- return *pszDefaultAction ? S_OK : S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accDescription(VARIANT varID, BSTR* pszDescription)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
-
- QString descr;
- if (varID.lVal) {
- QAccessibleInterface *child = childPointer(accessible, varID);
- if (!child || !child->isValid())
- return E_FAIL;
- descr = child->text(QAccessible::Description);
- } else {
- descr = accessible->text(QAccessible::Description);
- }
- if (descr.size()) {
- *pszDescription = QStringToBSTR(descr);
- return S_OK;
- }
-
- *pszDescription = 0;
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accHelp(VARIANT varID, BSTR *pszHelp)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QString help;
- if (varID.lVal) {
- QAccessibleInterface *child = childPointer(accessible, varID);
- if (!child || !child->isValid())
- return E_FAIL;
- help = child->text(QAccessible::Help);
- } else {
- help = accessible->text(QAccessible::Help);
- }
- if (help.size()) {
- *pszHelp = QStringToBSTR(help);
- return S_OK;
- }
-
- *pszHelp = 0;
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accHelpTopic(BSTR *, VARIANT, long *)
-{
- return DISP_E_MEMBERNOTFOUND;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accKeyboardShortcut(VARIANT varID, BSTR *pszKeyboardShortcut)
-{
- Q_UNUSED(varID);
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- *pszKeyboardShortcut = 0;
- if (QAccessibleActionInterface *actionIface = accessible->actionInterface()) {
- const QString def = actionIface->actionNames().value(0);
- if (!def.isEmpty()) {
- const QString keyBoardShortCut = actionIface->keyBindingsForAction(def).value(0);
- if (!keyBoardShortCut.isEmpty())
- *pszKeyboardShortcut = QStringToBSTR(keyBoardShortCut);
- }
- }
- return *pszKeyboardShortcut ? S_OK : S_FALSE;
-}
-
-static QAccessibleInterface *relatedInterface(QAccessibleInterface *iface, QAccessible::RelationFlag flag)
-{
- typedef QPair<QAccessibleInterface *, QAccessible::Relation> RelationPair;
- QVector<RelationPair> rels = iface->relations(flag);
-
- return rels.value(0).first;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accName(VARIANT varID, BSTR* pszName)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QString name;
- if (varID.lVal) {
- QAccessibleInterface *child = childPointer(accessible, varID);
- if (!child || !child->isValid())
- return E_FAIL;
- name = child->text(QAccessible::Name);
- if (name.isEmpty()) {
- if (QAccessibleInterface *labelInterface = relatedInterface(child, QAccessible::Label)) {
- name = labelInterface->text(QAccessible::Name);
- }
- }
- } else {
- name = accessible->text(QAccessible::Name);
- if (name.isEmpty()) {
- if (QAccessibleInterface *labelInterface = relatedInterface(accessible, QAccessible::Label)) {
- name = labelInterface->text(QAccessible::Name);
- }
- }
- }
-
- QString shortcut = accessible->text(QAccessible::Accelerator);
- if (!shortcut.isEmpty())
- name += QLatin1Char(' ') + shortcut;
-
- if (name.size()) {
- *pszName = QStringToBSTR(name);
- return S_OK;
- }
-
- *pszName = 0;
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::put_accName(VARIANT, BSTR)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- return DISP_E_MEMBERNOTFOUND;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accRole(VARIANT varID, VARIANT *pvarRole)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QAccessible::Role role;
- if (varID.lVal) {
- QAccessibleInterface *child = childPointer(accessible, varID);
- if (!child || !child->isValid())
- return E_FAIL;
- role = child->role();
- } else {
- role = accessible->role();
- }
-
- if (role != QAccessible::NoRole) {
- if (role >= QAccessible::LayeredPane) {
- // This block should hopefully only be entered if the AT client
- // does not support IAccessible2, since it should prefer IA2::role() then.
- if (role == QAccessible::LayeredPane)
- role = QAccessible::Pane;
- else if (role == QAccessible::WebDocument)
- role = QAccessible::Document;
- else
- role = QAccessible::Client;
- }
- (*pvarRole).vt = VT_I4;
- (*pvarRole).lVal = role;
- } else {
- (*pvarRole).vt = VT_EMPTY;
- }
- return S_OK;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accState(VARIANT varID, VARIANT *pvarState)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QAccessible::State state;
- if (varID.lVal) {
- QAccessibleInterface *child = childPointer(accessible, varID);
- if (!child || !child->isValid())
- return E_FAIL;
- state = child->state();
- } else {
- state = accessible->state();
- }
-
- LONG st = 0;
- if (state.animated)
- st |= STATE_SYSTEM_ANIMATED;
- if (state.busy)
- st |= STATE_SYSTEM_BUSY;
- if (state.checked)
- st |= STATE_SYSTEM_CHECKED;
- if (state.collapsed)
- st |= STATE_SYSTEM_COLLAPSED;
- if (state.defaultButton)
- st |= STATE_SYSTEM_DEFAULT;
- if (state.expanded)
- st |= STATE_SYSTEM_EXPANDED;
- if (state.extSelectable)
- st |= STATE_SYSTEM_EXTSELECTABLE;
- if (state.focusable)
- st |= STATE_SYSTEM_FOCUSABLE;
- if (state.focused)
- st |= STATE_SYSTEM_FOCUSED;
- if (state.hasPopup)
- st |= STATE_SYSTEM_HASPOPUP;
- if (state.hotTracked)
- st |= STATE_SYSTEM_HOTTRACKED;
- if (state.invisible)
- st |= STATE_SYSTEM_INVISIBLE;
- if (state.linked)
- st |= STATE_SYSTEM_LINKED;
- if (state.marqueed)
- st |= STATE_SYSTEM_MARQUEED;
- if (state.checkStateMixed)
- st |= STATE_SYSTEM_MIXED;
- if (state.movable)
- st |= STATE_SYSTEM_MOVEABLE;
- if (state.multiSelectable)
- st |= STATE_SYSTEM_MULTISELECTABLE;
- if (state.offscreen)
- st |= STATE_SYSTEM_OFFSCREEN;
- if (state.pressed)
- st |= STATE_SYSTEM_PRESSED;
- if (state.passwordEdit)
- st |= STATE_SYSTEM_PROTECTED;
- if (state.readOnly)
- st |= STATE_SYSTEM_READONLY;
- if (state.selectable)
- st |= STATE_SYSTEM_SELECTABLE;
- if (state.selected)
- st |= STATE_SYSTEM_SELECTED;
- if (state.selfVoicing)
- st |= STATE_SYSTEM_SELFVOICING;
- if (state.sizeable)
- st |= STATE_SYSTEM_SIZEABLE;
- if (state.traversed)
- st |= STATE_SYSTEM_TRAVERSED;
- if (state.disabled)
- st |= STATE_SYSTEM_UNAVAILABLE;
-
- (*pvarState).vt = VT_I4;
- (*pvarState).lVal = st;
- return S_OK;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accValue(VARIANT varID, BSTR* pszValue)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (varID.vt != VT_I4)
- return E_INVALIDARG;
-
- if (!accessible || !accessible->isValid() || varID.lVal) {
- return E_FAIL;
- }
-
- QString value;
- if (accessible->valueInterface()) {
- value = accessible->valueInterface()->currentValue().toString();
- } else {
- value = accessible->text(QAccessible::Value);
- }
- if (!value.isNull()) {
- *pszValue = QStringToBSTR(value);
- return S_OK;
- }
-
- *pszValue = 0;
- qCDebug(lcQpaAccessibility) << "return S_FALSE";
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::put_accValue(VARIANT, BSTR value)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
-
- if (!accessible || !accessible->isValid()) {
- return E_FAIL;
- }
-
- QString qstrValue = QString::fromWCharArray(value);
-
- if (accessible->valueInterface()) {
- accessible->valueInterface()->setCurrentValue(qstrValue);
- } else {
- accessible->setText(QAccessible::Value, qstrValue);
- }
-
- return S_OK;
-}
-
-// moz: [important]
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accSelect(long flagsSelect, VARIANT varID)
-{
- Q_UNUSED(flagsSelect);
- Q_UNUSED(varID);
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- bool res = false;
-
-/*
- ### Check for accessibleTableInterface() or accessibleTextInterface()
-
- ### and if there are no ia2 interfaces we should do nothing??
- if (flagsSelect & SELFLAG_TAKEFOCUS)
- res = accessible()->doAction(SetFocus, varID.lVal, QVariantList());
- if (flagsSelect & SELFLAG_TAKESELECTION) {
- accessible()->doAction(ClearSelection, 0, QVariantList());
- res = accessible()->doAction(AddToSelection, varID.lVal, QVariantList());
- }
- if (flagsSelect & SELFLAG_EXTENDSELECTION)
- res = accessible()->doAction(ExtendSelection, varID.lVal, QVariantList());
- if (flagsSelect & SELFLAG_ADDSELECTION)
- res = accessible()->doAction(AddToSelection, varID.lVal, QVariantList());
- if (flagsSelect & SELFLAG_REMOVESELECTION)
- res = accessible()->doAction(RemoveSelection, varID.lVal, QVariantList());
-*/
- return res ? S_OK : S_FALSE;
-}
-
-/*!
- \internal
- Can return:
-
- +-------------+------------------------------------------------------------------------------+
- | VT_EMPTY | None. Neither this object nor any of its children has the keyboard focus. |
- +-------------+------------------------------------------------------------------------------+
- | VT_I4 | lVal is CHILDID_SELF. The object itself has the keyboard focus. |
- +-------------+------------------------------------------------------------------------------+
- | VT_I4 | lVal contains the child ID of the child element that has the keyboard focus. |
- +-------------+------------------------------------------------------------------------------+
- | VT_DISPATCH | pdispVal member is the address of the IDispatch interface for the child |
- | | object that has the keyboard focus. |
- +-------------+------------------------------------------------------------------------------+
- moz: [important]
-*/
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accFocus(VARIANT *pvarID)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- if (QAccessibleInterface *acc = accessible->focusChild()) {
- if (acc == accessible) {
- (*pvarID).vt = VT_I4;
- (*pvarID).lVal = CHILDID_SELF;
- return S_OK;
- } else {
- if (IAccessible *iface = QWindowsAccessibility::wrap(acc)) {
- (*pvarID).vt = VT_DISPATCH;
- (*pvarID).pdispVal = iface;
- return S_OK;
- }
- }
- }
- (*pvarID).vt = VT_EMPTY;
- return S_FALSE;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::get_accSelection(VARIANT *pvarChildren)
-{
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- int cc = accessible->childCount();
- QVector<int> sel(cc);
- int selIndex = 0;
- for (int i = 0; i < cc; ++i) {
- bool isSelected = false;
- QAccessibleInterface *child = accessible->child(i);
- if (child) {
- isSelected = child->state().selected;
- }
- if (isSelected)
- sel[selIndex++] = i+1;
- }
- sel.resize(selIndex);
- if (sel.isEmpty()) {
- (*pvarChildren).vt = VT_EMPTY;
- return S_FALSE;
- }
- if (sel.size() == 1) {
- (*pvarChildren).vt = VT_I4;
- (*pvarChildren).lVal = sel[0];
- return S_OK;
- }
- IEnumVARIANT *iface = new QWindowsEnumerate(sel);
- IUnknown *uiface;
- iface->QueryInterface(IID_IUnknown, (void**)&uiface);
- (*pvarChildren).vt = VT_UNKNOWN;
- (*pvarChildren).punkVal = uiface;
-
- return S_OK;
-}
-
-/**************************************************************\
- * IOleWindow *
- **************************************************************/
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::GetWindow(HWND *phwnd)
-{
- *phwnd = 0;
- QAccessibleInterface *accessible = accessibleInterface();
- accessibleDebugClientCalls(accessible);
- if (!accessible)
- return E_FAIL;
-
- QWindow *window = QWindowsAccessibility::windowHelper(accessible);
- if (!window)
- return E_FAIL;
-
- QPlatformNativeInterface *platform = QGuiApplication::platformNativeInterface();
- Q_ASSERT(platform);
- *phwnd = (HWND)platform->nativeResourceForWindow("handle", window);
- qCDebug(lcQpaAccessibility) << "QWindowsAccessible::GetWindow(): " << *phwnd;
- return S_OK;
-}
-
-HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::ContextSensitiveHelp(BOOL)
-{
- return S_OK;
-}
-
-const char *QWindowsAccessibleGuid::iidToString(const GUID &id)
-{
- const char *result = nullptr;
- if (id == IID_IUnknown)
- result = "IID_IUnknown";
- else if (id == IID_IDispatch)
- result = "IID_IDispatch";
- else if (id == IID_IAccessible)
- result = "IID_IAccessible";
- else if (id == IID_IOleWindow)
- result = "IID_IOleWindow";
- else if (id == IID_IServiceProvider)
- result = "IID_IServiceProvider";
- else if (id == IID_IAccessible2)
- result = "IID_IAccessible2";
- else if (id == IID_IAccessibleAction)
- result = "IID_IAccessibleAction";
- else if (id == IID_IAccessibleApplication)
- result = "IID_IAccessibleApplication";
- else if (id == IID_IAccessibleComponent)
- result = "IID_IAccessibleComponent";
- else if (id == IID_IAccessibleEditableText)
- result = "IID_IAccessibleEditableText";
- else if (id == IID_IAccessibleHyperlink)
- result = "IID_IAccessibleHyperlink";
- else if (id == IID_IAccessibleHypertext)
- result = "IID_IAccessibleHypertext";
- else if (id == IID_IAccessibleImage)
- result = "IID_IAccessibleImage";
- else if (id == IID_IAccessibleRelation)
- result = "IID_IAccessibleRelation";
- else if (id == IID_IAccessibleTable)
- result = "IID_IAccessibleTable";
- else if (id == IID_IAccessibleTable2)
- result = "IID_IAccessibleTable2";
- else if (id == IID_IAccessibleTableCell)
- result = "IID_IAccessibleTableCell";
- else if (id == IID_IAccessibleText)
- result = "IID_IAccessibleText";
- else if (id == IID_IAccessibleValue)
- result = "IID_IAccessibleValue";
- return result;
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-QDebug operator<<(QDebug, const GUID &);
-
-QDebug operator<<(QDebug d, const QWindowsAccessibleGuid &aguid)
-{
- QDebugStateSaver saver(d);
- d.nospace();
- if (const char *ids = QWindowsAccessibleGuid::iidToString(aguid.guid()))
- d << ids;
- else
- d << aguid.guid();
- return d;
-}
-#endif // !QT_NO_DEBUG_STREAM
-
-QT_END_NAMESPACE
-
-#endif //QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h
deleted file mode 100644
index 5380fc2411..0000000000
--- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-#ifndef QWINDOWSMSAAACCESSIBLE_H
-#define QWINDOWSMSAAACCESSIBLE_H
-
-#include <QtCore/qglobal.h>
-#ifndef QT_NO_ACCESSIBILITY
-
-#include <QtCore/qt_windows.h>
-#include <QtCore/qsharedpointer.h>
-#include <QtGui/qaccessible.h>
-#include <oleacc.h>
-#include "ia2_api_all.h" // IAccessible2 inherits from IAccessible
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QT_NO_DEBUG_OUTPUT
-#define DEBUG_SHOW_ATCLIENT_COMMANDS
-#endif
-#if defined(DEBUG_SHOW_ATCLIENT_COMMANDS)
-void accessibleDebugClientCalls_helper(const char* funcName, const QAccessibleInterface *iface);
-# define accessibleDebugClientCalls(iface) accessibleDebugClientCalls_helper(Q_FUNC_INFO, iface)
-#else
-# define accessibleDebugClientCalls(iface)
-#endif
-
-QWindow *window_helper(const QAccessibleInterface *iface);
-
-class QWindowsAccessibleGuid // Helper for QDebug, outputs known ids by name.
-{
-public:
- explicit QWindowsAccessibleGuid(const GUID &g) : m_guid(g) {}
- GUID guid () const { return m_guid; }
- static const char *iidToString(const GUID &id);
-
-private:
- GUID m_guid;
-};
-
-#ifndef QT_NO_DEBUG_STREAM
-QDebug operator<<(QDebug d, const QWindowsAccessibleGuid &aguid);
-#endif
-
-/**************************************************************\
- * QWindowsAccessible *
- **************************************************************/
-
-class QWindowsMsaaAccessible : public IAccessible2, public IOleWindow
-{
-public:
- QWindowsMsaaAccessible(QAccessibleInterface *a)
- : ref(0)
- {
- id = QAccessible::uniqueId(a);
- }
-
- virtual ~QWindowsMsaaAccessible()
- {
- }
-
- /* IUnknown */
- HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID *);
- ULONG STDMETHODCALLTYPE AddRef();
- ULONG STDMETHODCALLTYPE Release();
-
- /* IDispatch */
- HRESULT STDMETHODCALLTYPE GetTypeInfoCount(unsigned int *);
- HRESULT STDMETHODCALLTYPE GetTypeInfo(unsigned int, unsigned long, ITypeInfo **);
- HRESULT STDMETHODCALLTYPE GetIDsOfNames(const _GUID &, wchar_t **, unsigned int, unsigned long, long *);
- HRESULT STDMETHODCALLTYPE Invoke(long, const _GUID &, unsigned long, unsigned short, tagDISPPARAMS *, tagVARIANT *, tagEXCEPINFO *, unsigned int *);
-
- /* IAccessible */
- HRESULT STDMETHODCALLTYPE accHitTest(long xLeft, long yTop, VARIANT *pvarID);
- HRESULT STDMETHODCALLTYPE accLocation(long *pxLeft, long *pyTop, long *pcxWidth, long *pcyHeight, VARIANT varID);
- HRESULT STDMETHODCALLTYPE accNavigate(long navDir, VARIANT varStart, VARIANT *pvarEnd);
- HRESULT STDMETHODCALLTYPE get_accChild(VARIANT varChildID, IDispatch** ppdispChild);
- HRESULT STDMETHODCALLTYPE get_accChildCount(long* pcountChildren);
- HRESULT STDMETHODCALLTYPE get_accParent(IDispatch** ppdispParent);
-
- HRESULT STDMETHODCALLTYPE accDoDefaultAction(VARIANT varID);
- HRESULT STDMETHODCALLTYPE get_accDefaultAction(VARIANT varID, BSTR* pszDefaultAction);
- HRESULT STDMETHODCALLTYPE get_accDescription(VARIANT varID, BSTR* pszDescription);
- HRESULT STDMETHODCALLTYPE get_accHelp(VARIANT varID, BSTR *pszHelp);
- HRESULT STDMETHODCALLTYPE get_accHelpTopic(BSTR *pszHelpFile, VARIANT varChild, long *pidTopic);
- HRESULT STDMETHODCALLTYPE get_accKeyboardShortcut(VARIANT varID, BSTR *pszKeyboardShortcut);
- HRESULT STDMETHODCALLTYPE get_accName(VARIANT varID, BSTR* pszName);
- HRESULT STDMETHODCALLTYPE put_accName(VARIANT varChild, BSTR szName);
- HRESULT STDMETHODCALLTYPE get_accRole(VARIANT varID, VARIANT *pvarRole);
- HRESULT STDMETHODCALLTYPE get_accState(VARIANT varID, VARIANT *pvarState);
- HRESULT STDMETHODCALLTYPE get_accValue(VARIANT varID, BSTR* pszValue);
- HRESULT STDMETHODCALLTYPE put_accValue(VARIANT varChild, BSTR szValue);
-
- HRESULT STDMETHODCALLTYPE accSelect(long flagsSelect, VARIANT varID);
- HRESULT STDMETHODCALLTYPE get_accFocus(VARIANT *pvarID);
- HRESULT STDMETHODCALLTYPE get_accSelection(VARIANT *pvarChildren);
-
- /* IOleWindow */
- HRESULT STDMETHODCALLTYPE GetWindow(HWND *phwnd);
- HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
-
-protected:
- QAccessible::Id id;
-
- QAccessibleInterface *accessibleInterface() const
- {
- QAccessibleInterface *iface = QAccessible::accessibleInterface(id);
- if (iface && iface->isValid())
- return iface;
- return 0;
- }
-
- static QAccessibleInterface *childPointer(QAccessibleInterface *parent, VARIANT varID)
- {
- // -1 since windows API always uses 1 for the first child
- Q_ASSERT(parent);
-
- QAccessibleInterface *acc = 0;
- int childIndex = varID.lVal;
- if (childIndex == 0) {
- // Yes, some AT clients (Active Accessibility Object Inspector)
- // actually ask for the same object. As a consequence, we need to clone ourselves:
- acc = parent;
- } else if (childIndex < 0) {
- acc = QAccessible::accessibleInterface((QAccessible::Id)childIndex);
- } else {
- acc = parent->child(childIndex - 1);
- }
- return acc;
- }
-
-private:
- ULONG ref;
-
-};
-
-QT_END_NAMESPACE
-
-#endif //QT_NO_ACCESSIBILITY
-
-#endif // QWINDOWSMSAAACCESSIBLE_H
diff --git a/src/plugins/platforms/windows/qwin10helpers.cpp b/src/plugins/platforms/windows/qwin10helpers.cpp
index 12cccd124b..ac6a34d7c2 100644
--- a/src/plugins/platforms/windows/qwin10helpers.cpp
+++ b/src/plugins/platforms/windows/qwin10helpers.cpp
@@ -40,6 +40,7 @@
#include "qwin10helpers.h"
#include <QtCore/QDebug>
+#include <QtCore/QOperatingSystemVersion>
#include <QtCore/private/qsystemlibrary_p.h>
#if defined(Q_CC_MINGW)
@@ -115,7 +116,7 @@ static QWindowsComBaseDLL baseComDll;
bool QWindowsComBaseDLL::init()
{
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS10 && !isValid()) {
+ if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows10 && !isValid()) {
QSystemLibrary library(QStringLiteral("combase"));
roGetActivationFactory =
reinterpret_cast<RoGetActivationFactory>(library.resolve("RoGetActivationFactory"));
diff --git a/src/plugins/platforms/windows/qwindowsbackingstore.cpp b/src/plugins/platforms/windows/qwindowsbackingstore.cpp
index 49c7144221..80872c3ea3 100644
--- a/src/plugins/platforms/windows/qwindowsbackingstore.cpp
+++ b/src/plugins/platforms/windows/qwindowsbackingstore.cpp
@@ -93,7 +93,7 @@ void QWindowsBackingStore::flush(QWindow *window, const QRegion &region,
// Windows with alpha: Use blend function to update.
QRect r = QHighDpi::toNativePixels(window->frameGeometry(), window);
QPoint frameOffset(QHighDpi::toNativePixels(QPoint(window->frameMargins().left(), window->frameMargins().top()),
- static_cast<const QWindow *>(Q_NULLPTR)));
+ static_cast<const QWindow *>(nullptr)));
QRect dirtyRect = br.translated(offset + frameOffset);
SIZE size = {r.width(), r.height()};
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 07efac3117..3d0dbd7b1a 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -53,7 +53,7 @@
#include "qwindowstheme.h"
#include <private/qguiapplication_p.h>
#ifndef QT_NO_ACCESSIBILITY
-# include "accessible/qwindowsaccessibility.h"
+# include "uiautomation/qwindowsuiaaccessibility.h"
#endif
#if QT_CONFIG(sessionmanager)
# include <private/qsessionmanager_p.h>
@@ -98,6 +98,7 @@ Q_LOGGING_CATEGORY(lcQpaDialogs, "qt.qpa.dialogs")
Q_LOGGING_CATEGORY(lcQpaMenus, "qt.qpa.menus")
Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet")
Q_LOGGING_CATEGORY(lcQpaAccessibility, "qt.qpa.accessibility")
+Q_LOGGING_CATEGORY(lcQpaUiAutomation, "qt.qpa.uiautomation")
Q_LOGGING_CATEGORY(lcQpaTrayIcon, "qt.qpa.trayicon")
int QWindowsContext::verbose = 0;
@@ -193,26 +194,14 @@ void QWindowsUser32DLL::init()
getDisplayAutoRotationPreferences = (GetDisplayAutoRotationPreferences)library.resolve("GetDisplayAutoRotationPreferences");
setDisplayAutoRotationPreferences = (SetDisplayAutoRotationPreferences)library.resolve("SetDisplayAutoRotationPreferences");
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS10) { // Appears in 10.0.14393, October 2016
+ if (QOperatingSystemVersion::current()
+ >= QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0, 14393)) {
enableNonClientDpiScaling = (EnableNonClientDpiScaling)library.resolve("EnableNonClientDpiScaling");
getWindowDpiAwarenessContext = (GetWindowDpiAwarenessContext)library.resolve("GetWindowDpiAwarenessContext");
getAwarenessFromDpiAwarenessContext = (GetAwarenessFromDpiAwarenessContext)library.resolve("GetAwarenessFromDpiAwarenessContext");
}
}
-bool QWindowsUser32DLL::initTouch()
-{
- if (!isTouchWindow && QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7) {
- QSystemLibrary library(QStringLiteral("user32"));
- isTouchWindow = (IsTouchWindow)(library.resolve("IsTouchWindow"));
- registerTouchWindow = (RegisterTouchWindow)(library.resolve("RegisterTouchWindow"));
- unregisterTouchWindow = (UnregisterTouchWindow)(library.resolve("UnregisterTouchWindow"));
- getTouchInputInfo = (GetTouchInputInfo)(library.resolve("GetTouchInputInfo"));
- closeTouchInputHandle = (CloseTouchInputHandle)(library.resolve("CloseTouchInputHandle"));
- }
- return isTouchWindow && registerTouchWindow && unregisterTouchWindow && getTouchInputInfo && closeTouchInputHandle;
-}
-
void QWindowsShcoreDLL::init()
{
if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows8_1)
@@ -269,7 +258,7 @@ QWindowsContextPrivate::QWindowsContextPrivate()
QWindowsContext::user32dll.init();
QWindowsContext::shcoredll.init();
- if (m_mouseHandler.touchDevice() && QWindowsContext::user32dll.initTouch())
+ if (m_mouseHandler.touchDevice())
m_systemInfo |= QWindowsContext::SI_SupportsTouch;
m_displayContext = GetDC(0);
m_defaultDPI = GetDeviceCaps(m_displayContext, LOGPIXELSY);
@@ -327,11 +316,6 @@ bool QWindowsContext::initTouch(unsigned integrationOptions)
if (!touchDevice)
return false;
- if (!QWindowsContext::user32dll.initTouch()) {
- delete touchDevice;
- return false;
- }
-
if (!(integrationOptions & QWindowsIntegration::DontPassOsMouseEventsSynthesizedFromTouch))
touchDevice->setCapabilities(touchDevice->capabilities() | QTouchDevice::MouseEmulation);
@@ -454,7 +438,7 @@ QString QWindowsContext::registerWindowClass(const QWindow *w)
// QOpenGLWidget or QQuickWidget later on. That cannot be detected at this stage.
if (w->surfaceType() == QSurface::OpenGLSurface || (flags & Qt::MSWindowsOwnDC))
style |= CS_OWNDC;
- if (!(flags & Qt::NoDropShadowWindowHint) && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based)
+ if (!(flags & Qt::NoDropShadowWindowHint)
&& (type == Qt::Popup || w->property("_q_windowsDropShadow").toBool())) {
style |= CS_DROPSHADOW;
}
@@ -757,7 +741,7 @@ HWND QWindowsContext::createDummyWindow(const QString &classNameIn,
// present in the MSVCRT.DLL found on Windows XP (QTBUG-35617).
static inline QString errorMessageFromComError(const _com_error &comError)
{
- TCHAR *message = Q_NULLPTR;
+ TCHAR *message = nullptr;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, DWORD(comError.Error()), MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
message, 0, NULL);
@@ -872,7 +856,7 @@ static inline bool resizeOnDpiChanged(const QWindow *w)
static bool shouldHaveNonClientDpiScaling(const QWindow *window)
{
- return QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS10
+ return QOperatingSystemVersion::current() >= QOperatingSystemVersion::Windows10
&& window->isTopLevel()
&& !window->property(QWindowsWindow::embeddedNativeParentHandleProperty).isValid()
#if QT_CONFIG(opengl) // /QTBUG-62901, EnableNonClientDpiScaling has problems with GL
@@ -974,7 +958,7 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
return false;
case QtWindows::AccessibleObjectFromWindowRequest:
#ifndef QT_NO_ACCESSIBILITY
- return QWindowsAccessibility::handleAccessibleObjectFromWindowRequest(hwnd, wParam, lParam, result);
+ return QWindowsUiaAccessibility::handleWmGetObject(hwnd, wParam, lParam, result);
#else
return false;
#endif
diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h
index 5c39b6068b..f2ec307be2 100644
--- a/src/plugins/platforms/windows/qwindowscontext.h
+++ b/src/plugins/platforms/windows/qwindowscontext.h
@@ -66,6 +66,7 @@ Q_DECLARE_LOGGING_CATEGORY(lcQpaDialogs)
Q_DECLARE_LOGGING_CATEGORY(lcQpaMenus)
Q_DECLARE_LOGGING_CATEGORY(lcQpaTablet)
Q_DECLARE_LOGGING_CATEGORY(lcQpaAccessibility)
+Q_DECLARE_LOGGING_CATEGORY(lcQpaUiAutomation)
Q_DECLARE_LOGGING_CATEGORY(lcQpaTrayIcon)
class QWindow;
@@ -84,13 +85,7 @@ class QTouchDevice;
struct QWindowsUser32DLL
{
inline void init();
- inline bool initTouch();
- typedef BOOL (WINAPI *IsTouchWindow)(HWND, PULONG); // Windows 7
- typedef BOOL (WINAPI *RegisterTouchWindow)(HWND, ULONG);
- typedef BOOL (WINAPI *UnregisterTouchWindow)(HWND);
- typedef BOOL (WINAPI *GetTouchInputInfo)(HANDLE, UINT, PVOID, int);
- typedef BOOL (WINAPI *CloseTouchInputHandle)(HANDLE);
typedef BOOL (WINAPI *SetProcessDPIAware)();
typedef BOOL (WINAPI *AddClipboardFormatListener)(HWND);
typedef BOOL (WINAPI *RemoveClipboardFormatListener)(HWND);
@@ -100,13 +95,6 @@ struct QWindowsUser32DLL
typedef int (WINAPI *GetWindowDpiAwarenessContext)(HWND);
typedef int (WINAPI *GetAwarenessFromDpiAwarenessContext)(int);
- // Touch functions from Windows 7 onwards (also for use with Q_CC_MSVC).
- IsTouchWindow isTouchWindow = nullptr;
- RegisterTouchWindow registerTouchWindow = nullptr;
- UnregisterTouchWindow unregisterTouchWindow = nullptr;
- GetTouchInputInfo getTouchInputInfo = nullptr;
- CloseTouchInputHandle closeTouchInputHandle = nullptr;
-
// Windows Vista onwards
SetProcessDPIAware setProcessDPIAware = nullptr;
diff --git a/src/plugins/platforms/windows/qwindowscursor.cpp b/src/plugins/platforms/windows/qwindowscursor.cpp
index 1da7de7451..e1a5837201 100644
--- a/src/plugins/platforms/windows/qwindowscursor.cpp
+++ b/src/plugins/platforms/windows/qwindowscursor.cpp
@@ -184,7 +184,7 @@ static HCURSOR createBitmapCursor(const QCursor &cursor, qreal scaleFactor = 1)
return createBitmapCursor(bbits, mbits, cursor.hotSpot(), invb, invm);
}
-static QSize systemCursorSize(const QPlatformScreen *screen = Q_NULLPTR)
+static QSize systemCursorSize(const QPlatformScreen *screen = nullptr)
{
const QSize primaryScreenCursorSize(GetSystemMetrics(SM_CXCURSOR), GetSystemMetrics(SM_CYCURSOR));
if (screen) {
diff --git a/src/plugins/platforms/windows/qwindowscursor.h b/src/plugins/platforms/windows/qwindowscursor.h
index 28c7e88a6e..4772f3fce5 100644
--- a/src/plugins/platforms/windows/qwindowscursor.h
+++ b/src/plugins/platforms/windows/qwindowscursor.h
@@ -70,7 +70,7 @@ class CursorHandle
{
Q_DISABLE_COPY(CursorHandle)
public:
- explicit CursorHandle(HCURSOR hcursor = Q_NULLPTR) : m_hcursor(hcursor) {}
+ explicit CursorHandle(HCURSOR hcursor = nullptr) : m_hcursor(hcursor) {}
~CursorHandle()
{
if (m_hcursor)
@@ -113,9 +113,9 @@ public:
static HCURSOR createPixmapCursor(QPixmap pixmap, const QPoint &hotSpot, qreal scaleFactor = 1);
static HCURSOR createPixmapCursor(const PixmapCursor &pc, qreal scaleFactor = 1) { return createPixmapCursor(pc.pixmap, pc.hotSpot, scaleFactor); }
- static PixmapCursor customCursor(Qt::CursorShape cursorShape, const QPlatformScreen *screen = Q_NULLPTR);
+ static PixmapCursor customCursor(Qt::CursorShape cursorShape, const QPlatformScreen *screen = nullptr);
- static HCURSOR createCursorFromShape(Qt::CursorShape cursorShape, const QPlatformScreen *screen = Q_NULLPTR);
+ static HCURSOR createCursorFromShape(Qt::CursorShape cursorShape, const QPlatformScreen *screen = nullptr);
static QPoint mousePosition();
static CursorState cursorState();
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
index dfa93d18a6..80ee7b2287 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
@@ -600,8 +600,8 @@ QString QWindowsShellItem::path() const
{
if (isFileSystem())
return QDir::cleanPath(QWindowsShellItem::displayName(m_item, SIGDN_FILESYSPATH));
- // Check for a "Library" item (Windows 7)
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_WINDOWS7 && isDir())
+ // Check for a "Library" item
+ if (isDir())
return QWindowsShellItem::libraryItemDefaultSaveFolder(m_item);
return QString();
}
@@ -712,7 +712,7 @@ QString QWindowsShellItem::libraryItemDefaultSaveFolder(IShellItem *item)
{
QString result;
if (IShellLibrary *library = sHLoadLibraryFromItem(item, STGM_READ | STGM_SHARE_DENY_WRITE)) {
- IShellItem *item = Q_NULLPTR;
+ IShellItem *item = nullptr;
if (SUCCEEDED(library->GetDefaultSaveFolder(DSFT_DETECT, IID_IShellItem, reinterpret_cast<void **>(&item)))) {
result = QDir::cleanPath(QWindowsShellItem::displayName(item, SIGDN_FILESYSPATH));
item->Release();
@@ -894,7 +894,7 @@ void QWindowsNativeFileDialogBase::setWindowTitle(const QString &title)
IShellItem *QWindowsNativeFileDialogBase::shellItem(const QUrl &url)
{
if (url.isLocalFile()) {
- IShellItem *result = Q_NULLPTR;
+ IShellItem *result = nullptr;
const QString native = QDir::toNativeSeparators(url.toLocalFile());
const HRESULT hr =
SHCreateItemFromParsingName(reinterpret_cast<const wchar_t *>(native.utf16()),
@@ -902,30 +902,30 @@ IShellItem *QWindowsNativeFileDialogBase::shellItem(const QUrl &url)
reinterpret_cast<void **>(&result));
if (FAILED(hr)) {
qErrnoWarning("%s: SHCreateItemFromParsingName(%s)) failed", __FUNCTION__, qPrintable(url.toString()));
- return Q_NULLPTR;
+ return nullptr;
}
return result;
} else if (url.scheme() == QLatin1String("clsid")) {
// Support for virtual folders via GUID
// (see https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx)
// specified as "clsid:<GUID>" (without '{', '}').
- IShellItem *result = Q_NULLPTR;
+ IShellItem *result = nullptr;
const auto uuid = QUuid::fromString(url.path());
if (uuid.isNull()) {
qWarning() << __FUNCTION__ << ": Invalid CLSID: " << url.path();
- return Q_NULLPTR;
+ return nullptr;
}
PIDLIST_ABSOLUTE idList;
HRESULT hr = SHGetKnownFolderIDList(uuid, 0, 0, &idList);
if (FAILED(hr)) {
qErrnoWarning("%s: SHGetKnownFolderIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString()));
- return Q_NULLPTR;
+ return nullptr;
}
hr = SHCreateItemFromIDList(idList, IID_IShellItem, reinterpret_cast<void **>(&result));
CoTaskMemFree(idList);
if (FAILED(hr)) {
qErrnoWarning("%s: SHCreateItemFromIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString()));
- return Q_NULLPTR;
+ return nullptr;
}
return result;
} else {
@@ -2066,7 +2066,7 @@ bool useHelper(QPlatformTheme::DialogType type)
return false;
switch (type) {
case QPlatformTheme::FileDialog:
- return QSysInfo::windowsVersion() >= QSysInfo::WV_XP;
+ return true;
case QPlatformTheme::ColorDialog:
#ifdef USE_NATIVE_COLOR_DIALOG
return true;
@@ -2087,13 +2087,10 @@ QPlatformDialogHelper *createHelper(QPlatformTheme::DialogType type)
if (QWindowsIntegration::instance()->options() & QWindowsIntegration::NoNativeDialogs)
return 0;
switch (type) {
- case QPlatformTheme::FileDialog: // Note: "Windows XP Professional x64 Edition has version number WV_5_2 (WV_2003).
- if (QWindowsIntegration::instance()->options() & QWindowsIntegration::XpNativeDialogs
- || QSysInfo::windowsVersion() <= QSysInfo::WV_2003) {
+ case QPlatformTheme::FileDialog:
+ if (QWindowsIntegration::instance()->options() & QWindowsIntegration::XpNativeDialogs)
return new QWindowsXpFileDialogHelper();
- }
- if (QSysInfo::windowsVersion() > QSysInfo::WV_2003)
- return new QWindowsFileDialogHelper();
+ return new QWindowsFileDialogHelper;
case QPlatformTheme::ColorDialog:
#ifdef USE_NATIVE_COLOR_DIALOG
return new QWindowsColorDialogHelper();
diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp
index aa6454ef63..777c45ae86 100644
--- a/src/plugins/platforms/windows/qwindowsdrag.cpp
+++ b/src/plugins/platforms/windows/qwindowsdrag.cpp
@@ -246,7 +246,7 @@ private:
typedef QMap<Qt::DropAction, CursorEntry> ActionCursorMap;
- const Mode m_mode;
+ Mode m_mode;
QWindowsDrag *m_drag;
Qt::MouseButtons m_currentButtons;
ActionCursorMap m_cursors;
@@ -301,6 +301,15 @@ void QWindowsOleDropSource::createCursors()
Q_ASSERT(platformScreen);
QPlatformCursor *platformCursor = platformScreen->cursor();
+ if (GetSystemMetrics (SM_REMOTESESSION) != 0) {
+ /* Workaround for RDP issues with large cursors.
+ * Touch drag window seems to work just fine...
+ * 96 pixel is a 'large' mouse cursor, according to RDP spec */
+ const int rdpLargeCursor = qRound(qreal(96) / QHighDpiScaling::factor(platformScreen));
+ if (pixmap.width() > rdpLargeCursor || pixmap.height() > rdpLargeCursor)
+ m_mode = TouchDrag;
+ }
+
qreal pixmapScaleFactor = 1;
qreal hotSpotScaleFactor = 1;
if (m_mode != TouchDrag) { // Touch drag: pixmap is shown in a separate QWindow, which will be scaled.)
@@ -433,6 +442,9 @@ QWindowsOleDropSource::GiveFeedback(DWORD dwEffect)
SetCursor(e.cursor->handle());
break;
case TouchDrag:
+ // "Touch drag" with an unsuppressed cursor may happen with RDP (see createCursors())
+ if (QWindowsCursor::cursorState() != QWindowsCursor::CursorSuppressed)
+ SetCursor(nullptr);
if (!m_touchDragWindow)
m_touchDragWindow = new QWindowsDragCursorWindow;
m_touchDragWindow->setPixmap(e.pixmap);
diff --git a/src/plugins/platforms/windows/qwindowseglcontext.h b/src/plugins/platforms/windows/qwindowseglcontext.h
index 47878a7169..3e5f2c81d5 100644
--- a/src/plugins/platforms/windows/qwindowseglcontext.h
+++ b/src/plugins/platforms/windows/qwindowseglcontext.h
@@ -95,7 +95,7 @@ struct QWindowsLibGLESv2
#if !defined(QT_STATIC) || defined(QT_OPENGL_DYNAMIC)
void *moduleHandle() const { return m_lib; }
#else
- void *moduleHandle() const { return Q_NULLPTR; }
+ void *moduleHandle() const { return nullptr; }
#endif
const GLubyte * (APIENTRY * glGetString)(GLenum name);
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp
index 78368d87de..4bdf3167e4 100644
--- a/src/plugins/platforms/windows/qwindowsglcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp
@@ -379,9 +379,7 @@ static PIXELFORMATDESCRIPTOR
initPixelFormatDescriptor(&pfd);
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.iLayerType = PFD_MAIN_PLANE;
- pfd.dwFlags = PFD_SUPPORT_OPENGL;
- if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
- pfd.dwFlags = PFD_SUPPORT_COMPOSITION;
+ pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_SUPPORT_COMPOSITION;
const bool isPixmap = (additional.formatFlags & QWindowsGLRenderToPixmap) != 0;
pfd.dwFlags |= isPixmap ? PFD_DRAW_TO_BITMAP : PFD_DRAW_TO_WINDOW;
if (!(additional.formatFlags & QWindowsGLDirectRendering))
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
index 8c228f588e..b9dd2c557e 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
@@ -221,6 +221,28 @@ void QWindowsInputContext::setFocusObject(QObject *)
updateEnabled();
}
+HWND QWindowsInputContext::getVirtualKeyboardWindowHandle() const
+{
+ return ::FindWindowA("IPTip_Main_Window", nullptr);
+}
+
+QRectF QWindowsInputContext::keyboardRect() const
+{
+ if (HWND hwnd = getVirtualKeyboardWindowHandle()) {
+ RECT rect;
+ if (::GetWindowRect(hwnd, &rect)) {
+ return QRectF(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top);
+ }
+ }
+ return QRectF();
+}
+
+bool QWindowsInputContext::isInputPanelVisible() const
+{
+ HWND hwnd = getVirtualKeyboardWindowHandle();
+ return hwnd && ::IsWindowEnabled(hwnd) && ::IsWindowVisible(hwnd);
+}
+
void QWindowsInputContext::updateEnabled()
{
if (!QGuiApplication::focusObject())
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.h b/src/plugins/platforms/windows/qwindowsinputcontext.h
index 617ef30cef..ada1fc0d29 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.h
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.h
@@ -79,6 +79,9 @@ public:
void invokeAction(QInputMethod::Action, int cursorPosition) override;
void setFocusObject(QObject *object) override;
+ QRectF keyboardRect() const override;
+ bool isInputPanelVisible() const override;
+
bool startComposition(HWND hwnd);
bool composition(HWND hwnd, LPARAM lParam);
bool endComposition(HWND hwnd);
@@ -98,6 +101,7 @@ private:
void startContextComposition();
void endContextComposition();
void updateEnabled();
+ HWND getVirtualKeyboardWindowHandle() const;
const DWORD m_WM_MSIME_MOUSE;
static HIMC m_defaultContext;
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp
index f9bac3920b..287b65cd5d 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.cpp
+++ b/src/plugins/platforms/windows/qwindowsintegration.cpp
@@ -60,7 +60,7 @@
#include "qwindowsinputcontext.h"
#include "qwindowskeymapper.h"
#ifndef QT_NO_ACCESSIBILITY
-# include "accessible/qwindowsaccessibility.h"
+# include "uiautomation/qwindowsuiaaccessibility.h"
#endif
#include <qpa/qplatformnativeinterface.h>
@@ -151,7 +151,7 @@ struct QWindowsIntegrationPrivate
#endif // QT_NO_OPENGL
QScopedPointer<QPlatformInputContext> m_inputContext;
#ifndef QT_NO_ACCESSIBILITY
- QWindowsAccessibility m_accessibility;
+ QWindowsUiaAccessibility m_accessibility;
#endif
QWindowsServices m_services;
};
@@ -252,7 +252,7 @@ QWindowsIntegrationPrivate::~QWindowsIntegrationPrivate()
delete m_fontDatabase;
}
-QWindowsIntegration *QWindowsIntegration::m_instance = Q_NULLPTR;
+QWindowsIntegration *QWindowsIntegration::m_instance = nullptr;
QWindowsIntegration::QWindowsIntegration(const QStringList &paramList) :
d(new QWindowsIntegrationPrivate(paramList))
@@ -266,7 +266,7 @@ QWindowsIntegration::QWindowsIntegration(const QStringList &paramList) :
QWindowsIntegration::~QWindowsIntegration()
{
- m_instance = Q_NULLPTR;
+ m_instance = nullptr;
}
void QWindowsIntegration::initialize()
@@ -336,7 +336,7 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons
<< " handle=" << obtained.hwnd << ' ' << obtained.flags << '\n';
if (Q_UNLIKELY(!obtained.hwnd))
- return Q_NULLPTR;
+ return nullptr;
QWindowsWindow *result = createPlatformWindowHelper(window, obtained);
Q_ASSERT(result);
@@ -356,7 +356,7 @@ QPlatformWindow *QWindowsIntegration::createForeignWindow(QWindow *window, WId n
}
QWindowsForeignWindow *result = new QWindowsForeignWindow(window, hwnd);
const QRect obtainedGeometry = result->geometry();
- QScreen *screen = Q_NULLPTR;
+ QScreen *screen = nullptr;
if (const QPlatformScreen *pScreen = result->screenForGeometry(obtainedGeometry))
screen = pScreen->screen();
if (screen && screen != window->screen())
@@ -402,7 +402,7 @@ QWindowsStaticOpenGLContext *QWindowsStaticOpenGLContext::doCreate()
qCWarning(lcQpaGl, "Software OpenGL failed. Falling back to system OpenGL.");
if (QWindowsOpenGLTester::supportedRenderers() & QWindowsOpenGLTester::DesktopGl)
return QOpenGLStaticContext::create();
- return Q_NULLPTR;
+ return nullptr;
default:
break;
}
diff --git a/src/plugins/platforms/windows/qwindowsmousehandler.cpp b/src/plugins/platforms/windows/qwindowsmousehandler.cpp
index 9544fb81f7..814291c54a 100644
--- a/src/plugins/platforms/windows/qwindowsmousehandler.cpp
+++ b/src/plugins/platforms/windows/qwindowsmousehandler.cpp
@@ -56,37 +56,6 @@
#include <windowsx.h>
-/* Touch is supported from Windows 7 onwards and data structures
- * are present in the Windows SDK's, but not in older MSVC Express
- * versions. */
-
-#if !defined(TOUCHEVENTF_MOVE)
-
-typedef struct tagTOUCHINPUT {
- LONG x;
- LONG y;
- HANDLE hSource;
- DWORD dwID;
- DWORD dwFlags;
- DWORD dwMask;
- DWORD dwTime;
- ULONG_PTR dwExtraInfo;
- DWORD cxContact;
- DWORD cyContact;
-} TOUCHINPUT, *PTOUCHINPUT;
-typedef TOUCHINPUT const * PCTOUCHINPUT;
-
-# define TOUCHEVENTF_MOVE 0x0001
-# define TOUCHEVENTF_DOWN 0x0002
-# define TOUCHEVENTF_UP 0x0004
-# define TOUCHEVENTF_INRANGE 0x0008
-# define TOUCHEVENTF_PRIMARY 0x0010
-# define TOUCHEVENTF_NOCOALESCE 0x0020
-# define TOUCHEVENTF_PALM 0x0080
-# define TOUCHINPUTMASKF_CONTACTAREA 0x0004
-# define TOUCHINPUTMASKF_EXTRAINFO 0x0002
-#endif // if !defined(TOUCHEVENTF_MOVE)
-
QT_BEGIN_NAMESPACE
static inline void compressMouseMove(MSG *msg)
@@ -154,8 +123,6 @@ static inline QTouchDevice *createTouchDevice()
QT_NID_INTEGRATED_TOUCH = 0x1, QT_NID_EXTERNAL_TOUCH = 0x02,
QT_NID_MULTI_INPUT = 0x40, QT_NID_READY = 0x80 };
- if (QSysInfo::windowsVersion() < QSysInfo::WV_WINDOWS7)
- return 0;
const int digitizers = GetSystemMetrics(QT_SM_DIGITIZER);
if (!(digitizers & (QT_NID_INTEGRATED_TOUCH | QT_NID_EXTERNAL_TOUCH)))
return 0;
@@ -523,9 +490,8 @@ bool QWindowsMouseHandler::translateTouchEvent(QWindow *window, HWND,
touchPoints.reserve(winTouchPointCount);
Qt::TouchPointStates allStates = 0;
- QWindowsContext::user32dll.getTouchInputInfo(reinterpret_cast<HANDLE>(msg.lParam),
- UINT(msg.wParam),
- winTouchInputs.data(), sizeof(TOUCHINPUT));
+ GetTouchInputInfo(reinterpret_cast<HTOUCHINPUT>(msg.lParam),
+ UINT(msg.wParam), winTouchInputs.data(), sizeof(TOUCHINPUT));
for (int i = 0; i < winTouchPointCount; ++i) {
const TOUCHINPUT &winTouchInput = winTouchInputs[i];
int id = m_touchInputIDToTouchPointID.value(winTouchInput.dwID, -1);
@@ -566,7 +532,7 @@ bool QWindowsMouseHandler::translateTouchEvent(QWindow *window, HWND,
touchPoints.append(touchPoint);
}
- QWindowsContext::user32dll.closeTouchInputHandle(reinterpret_cast<HANDLE>(msg.lParam));
+ CloseTouchInputHandle(reinterpret_cast<HTOUCHINPUT>(msg.lParam));
// all touch points released, forget the ids we've seen, they may not be reused
if (allStates == Qt::TouchPointReleased)
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
index dc8e97c886..324b00144e 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
@@ -134,7 +134,7 @@ void *QWindowsNativeInterface::nativeResourceForCursor(const QByteArray &resourc
return static_cast<const QWindowsCursor *>(pCursor)->hCursor(cursor);
}
}
- return Q_NULLPTR;
+ return nullptr;
}
#endif // !QT_NO_CURSOR
@@ -280,7 +280,7 @@ QFunctionPointer QWindowsNativeInterface::platformFunction(const QByteArray &fun
return QFunctionPointer(QWindowsWindow::setHasBorderInFullScreenStatic);
else if (function == QWindowsWindowFunctions::isTabletModeIdentifier())
return QFunctionPointer(QWindowsNativeInterface::isTabletMode);
- return Q_NULLPTR;
+ return nullptr;
}
QVariant QWindowsNativeInterface::gpu() const
diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp
index cfddb3cc71..c0781df973 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp
@@ -563,7 +563,7 @@ const QWindowsScreen *QWindowsScreenManager::screenAtDp(const QPoint &p) const
if (scr->geometry().contains(p))
return scr;
}
- return Q_NULLPTR;
+ return nullptr;
}
const QWindowsScreen *QWindowsScreenManager::screenForHwnd(HWND hwnd) const
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index 56927a5788..159e1250d0 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -37,6 +37,13 @@
**
****************************************************************************/
+#if defined(WINVER) && WINVER < 0x0601
+# undef WINVER
+#endif
+#if !defined(WINVER)
+# define WINVER 0x0601 // Enable touch functions for MinGW
+#endif
+
#include "qwindowswindow.h"
#include "qwindowscontext.h"
#if QT_CONFIG(draganddrop)
@@ -858,7 +865,7 @@ QWindowsBaseWindow *QWindowsBaseWindow::baseWindowOf(const QWindow *w)
if (QPlatformWindow *pw = w->handle())
return static_cast<QWindowsBaseWindow *>(pw);
}
- return Q_NULLPTR;
+ return nullptr;
}
HWND QWindowsBaseWindow::handleOf(const QWindow *w)
@@ -1115,7 +1122,7 @@ QWindowsWindow::~QWindowsWindow()
{
setFlag(WithinDestroy);
if (testFlag(TouchRegistered))
- QWindowsContext::user32dll.unregisterTouchWindow(m_data.hwnd);
+ UnregisterTouchWindow(m_data.hwnd);
destroyWindow();
destroyIcon();
}
@@ -2066,9 +2073,17 @@ void QWindowsWindow::propagateSizeHints()
bool QWindowsWindow::handleGeometryChangingMessage(MSG *message, const QWindow *qWindow, const QMargins &margins)
{
+ WINDOWPOS *windowPos = reinterpret_cast<WINDOWPOS *>(message->lParam);
+ if ((windowPos->flags & SWP_NOZORDER) == 0) {
+ if (QWindowsWindow *platformWindow = QWindowsWindow::windowsWindowOf(qWindow)) {
+ QWindow *parentWindow = qWindow->parent();
+ HWND parentHWND = GetAncestor(windowPos->hwnd, GA_PARENT);
+ HWND desktopHWND = GetDesktopWindow();
+ platformWindow->m_data.embedded = !parentWindow && parentHWND && (parentHWND != desktopHWND);
+ }
+ }
if (!qWindow->isTopLevel()) // Implement hasHeightForWidth().
return false;
- WINDOWPOS *windowPos = reinterpret_cast<WINDOWPOS *>(message->lParam);
if ((windowPos->flags & (SWP_NOCOPYBITS | SWP_NOSIZE)))
return false;
const QRect suggestedFrameGeometry(windowPos->x, windowPos->y,
@@ -2264,6 +2279,16 @@ bool QWindowsWindow::startSystemResize(const QPoint &, Qt::Corner corner)
return true;
}
+bool QWindowsWindow::startSystemMove(const QPoint &)
+{
+ if (!GetSystemMenu(m_data.hwnd, FALSE))
+ return false;
+
+ ReleaseCapture();
+ PostMessage(m_data.hwnd, WM_SYSCOMMAND, 0xF012 /*SC_DRAGMOVE*/, 0);
+ return true;
+}
+
void QWindowsWindow::setFrameStrutEventsEnabled(bool enabled)
{
if (enabled) {
@@ -2602,12 +2627,12 @@ void QWindowsWindow::registerTouchWindow(QWindowsWindowFunctions::TouchWindowTou
if ((QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch)
&& !testFlag(TouchRegistered)) {
ULONG touchFlags = 0;
- const bool ret = QWindowsContext::user32dll.isTouchWindow(m_data.hwnd, &touchFlags);
+ const bool ret = IsTouchWindow(m_data.hwnd, &touchFlags);
// Return if it is not a touch window or the flags are already set by a hook
// such as HCBT_CREATEWND
if (ret || touchFlags != 0)
return;
- if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, ULONG(touchTypes)))
+ if (RegisterTouchWindow(m_data.hwnd, ULONG(touchTypes)))
setFlag(TouchRegistered);
else
qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(window()->objectName()));
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index 4e1f49be3b..8d29b871bf 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -270,6 +270,7 @@ public:
inline bool hasMouseCapture() const { return GetCapture() == m_data.hwnd; }
bool startSystemResize(const QPoint &pos, Qt::Corner corner) override;
+ bool startSystemMove(const QPoint &pos) override;
void setFrameStrutEventsEnabled(bool enabled) override;
bool frameStrutEventsEnabled() const override { return testFlag(FrameStrutEventsEnabled); }
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp
new file mode 100644
index 0000000000..907883bf5b
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.cpp
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiaaccessibility.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QWindow>
+#include <QtGui/QGuiApplication>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtCore/qt_windows.h>
+#include <qpa/qplatformintegration.h>
+#include <QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaAccessibility::QWindowsUiaAccessibility()
+{
+}
+
+QWindowsUiaAccessibility::~QWindowsUiaAccessibility()
+{
+}
+
+// Handles UI Automation window messages.
+bool QWindowsUiaAccessibility::handleWmGetObject(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult)
+{
+ if (lParam == LPARAM(UiaRootObjectId)) {
+
+ // Start handling accessibility internally
+ QGuiApplicationPrivate::platformIntegration()->accessibility()->setActive(true);
+
+ // Ignoring all requests while starting up / shutting down
+ if (QCoreApplication::startingUp() || QCoreApplication::closingDown())
+ return false;
+
+ if (QWindow *window = QWindowsContext::instance()->findWindow(hwnd)) {
+ if (QAccessibleInterface *accessible = window->accessibleRoot()) {
+ QWindowsUiaMainProvider *provider = QWindowsUiaMainProvider::providerForAccessible(accessible);
+ *lResult = QWindowsUiaWrapper::instance()->returnRawElementProvider(hwnd, wParam, lParam, provider);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+// Handles accessibility update notifications.
+void QWindowsUiaAccessibility::notifyAccessibilityUpdate(QAccessibleEvent *event)
+{
+ if (!event)
+ return;
+
+ QAccessibleInterface *accessible = event->accessibleInterface();
+ if (!isActive() || !accessible || !accessible->isValid())
+ return;
+
+ // Ensures QWindowsUiaWrapper is properly initialized.
+ if (!QWindowsUiaWrapper::instance()->ready())
+ return;
+
+ // No need to do anything when nobody is listening.
+ if (!QWindowsUiaWrapper::instance()->clientsAreListening())
+ return;
+
+ switch (event->type()) {
+
+ case QAccessible::Focus:
+ QWindowsUiaMainProvider::notifyFocusChange(event);
+ break;
+
+ case QAccessible::StateChanged:
+ QWindowsUiaMainProvider::notifyStateChange(static_cast<QAccessibleStateChangeEvent *>(event));
+ break;
+
+ case QAccessible::ValueChanged:
+ QWindowsUiaMainProvider::notifyValueChange(static_cast<QAccessibleValueChangeEvent *>(event));
+ break;
+
+ case QAccessible::TextAttributeChanged:
+ case QAccessible::TextColumnChanged:
+ case QAccessible::TextInserted:
+ case QAccessible::TextRemoved:
+ case QAccessible::TextUpdated:
+ case QAccessible::TextSelectionChanged:
+ case QAccessible::TextCaretMoved:
+ QWindowsUiaMainProvider::notifyTextChange(event);
+ break;
+
+ default:
+ break;
+ }
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h
new file mode 100644
index 0000000000..bbb81d596b
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaaccessibility.h
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAACCESSIBILITY_H
+#define QWINDOWSUIAACCESSIBILITY_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowscontext.h"
+#include <qpa/qplatformaccessibility.h>
+
+QT_BEGIN_NAMESPACE
+
+// Windows plataform accessibility implemented over UI Automation.
+class QWindowsUiaAccessibility : public QPlatformAccessibility
+{
+public:
+ explicit QWindowsUiaAccessibility();
+ virtual ~QWindowsUiaAccessibility();
+ static bool handleWmGetObject(HWND hwnd, WPARAM wParam, LPARAM lParam, LRESULT *lResult);
+ void notifyAccessibilityUpdate(QAccessibleEvent *event) override;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAACCESSIBILITY_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.cpp
new file mode 100644
index 0000000000..1e1fc49c0f
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.cpp
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaBaseProvider::QWindowsUiaBaseProvider(QAccessible::Id id) :
+ m_id(id)
+{
+}
+
+QWindowsUiaBaseProvider::~QWindowsUiaBaseProvider()
+{
+}
+
+QAccessibleInterface *QWindowsUiaBaseProvider::accessibleInterface() const
+{
+ QAccessibleInterface *accessible = QAccessible::accessibleInterface(m_id);
+ if (accessible && accessible->isValid())
+ return accessible;
+ return nullptr;
+}
+
+QAccessible::Id QWindowsUiaBaseProvider::id() const
+{
+ return m_id;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.h
new file mode 100644
index 0000000000..3ae403e8c5
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiabaseprovider.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIABASEPROVIDER_H
+#define QWINDOWSUIABASEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QPointer>
+
+#include <qwindowscombase.h>
+#include <QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAccessibleInterface;
+class QDebug;
+
+// Base class for UI Automation providers.
+class QWindowsUiaBaseProvider : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(QWindowsUiaBaseProvider)
+public:
+ explicit QWindowsUiaBaseProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaBaseProvider();
+
+ QAccessibleInterface *accessibleInterface() const;
+ QAccessible::Id id() const;
+
+private:
+ QAccessible::Id m_id;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIABASEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.cpp
new file mode 100644
index 0000000000..e0502c00f3
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.cpp
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiagriditemprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaGridItemProvider::QWindowsUiaGridItemProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaGridItemProvider::~QWindowsUiaGridItemProvider()
+{
+}
+
+// Returns the row index of the item.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridItemProvider::get_Row(int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = tableCellInterface->rowIndex();
+ return S_OK;
+}
+
+// Returns the column index of the item.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridItemProvider::get_Column(int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = tableCellInterface->columnIndex();
+ return S_OK;
+}
+
+// Returns the number of rows occupied by the item.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridItemProvider::get_RowSpan(int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = tableCellInterface->rowExtent();
+ return S_OK;
+}
+
+// Returns the number of columns occupied by the item.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridItemProvider::get_ColumnSpan(int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = tableCellInterface->columnExtent();
+ return S_OK;
+}
+
+// Returns the provider for the cointaining table/tree.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridItemProvider::get_ContainingGrid(IRawElementProviderSimple **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if (QAccessibleInterface *table = tableCellInterface->table()) {
+ *pRetVal = QWindowsUiaMainProvider::providerForAccessible(table);
+ }
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.h
new file mode 100644
index 0000000000..a93b50ef97
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiagriditemprovider.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAGRIDITEMPROVIDER_H
+#define QWINDOWSUIAGRIDITEMPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Grid Item control pattern provider. Used by items within a table/tree.
+class QWindowsUiaGridItemProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<IGridItemProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaGridItemProvider)
+public:
+ explicit QWindowsUiaGridItemProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaGridItemProvider();
+
+ // IGridItemProvider
+ HRESULT STDMETHODCALLTYPE get_Row(int *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_Column(int *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_RowSpan(int *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_ColumnSpan(int *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_ContainingGrid(IRawElementProviderSimple **pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAGRIDITEMPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.cpp
new file mode 100644
index 0000000000..65c2df703b
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.cpp
@@ -0,0 +1,136 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiagridprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaGridProvider::QWindowsUiaGridProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaGridProvider::~QWindowsUiaGridProvider()
+{
+}
+
+// Returns the provider for an item within a table/tree.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridProvider::GetItem(int row, int column, IRawElementProviderSimple **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableInterface *tableInterface = accessible->tableInterface();
+ if (!tableInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if ((row >= 0) && (row < tableInterface->rowCount()) && (column >= 0) && (column < tableInterface->columnCount())) {
+ if (QAccessibleInterface *cell = tableInterface->cellAt(row, column)) {
+ *pRetVal = QWindowsUiaMainProvider::providerForAccessible(cell);
+ }
+ }
+ return S_OK;
+}
+
+// Returns the number of rows.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridProvider::get_RowCount(int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableInterface *tableInterface = accessible->tableInterface();
+ if (!tableInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = tableInterface->rowCount();
+ return S_OK;
+}
+
+// Returns the number of columns.
+HRESULT STDMETHODCALLTYPE QWindowsUiaGridProvider::get_ColumnCount(int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableInterface *tableInterface = accessible->tableInterface();
+ if (!tableInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = tableInterface->columnCount();
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.h
new file mode 100644
index 0000000000..15521f98b3
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiagridprovider.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAGRIDPROVIDER_H
+#define QWINDOWSUIAGRIDPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Grid control pattern provider. Used by tables/trees.
+class QWindowsUiaGridProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<IGridProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaGridProvider)
+public:
+ explicit QWindowsUiaGridProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaGridProvider();
+
+ // IGridProvider
+ HRESULT STDMETHODCALLTYPE GetItem(int row, int column, IRawElementProviderSimple **pRetVal);
+ HRESULT STDMETHODCALLTYPE get_RowCount(int *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_ColumnCount(int *pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAGRIDPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.cpp
new file mode 100644
index 0000000000..2af883c4f6
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiainvokeprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaInvokeProvider::QWindowsUiaInvokeProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaInvokeProvider::~QWindowsUiaInvokeProvider()
+{
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaInvokeProvider::Invoke()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ actionInterface->doAction(QAccessibleActionInterface::pressAction());
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.h
new file mode 100644
index 0000000000..2b8a646983
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiainvokeprovider.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAINVOKEPROVIDER_H
+#define QWINDOWSUIAINVOKEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Invoke control pattern provider.
+class QWindowsUiaInvokeProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<IInvokeProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaInvokeProvider)
+public:
+ explicit QWindowsUiaInvokeProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaInvokeProvider();
+
+ // IInvokeProvider
+ HRESULT STDMETHODCALLTYPE Invoke();
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAINVOKEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
new file mode 100644
index 0000000000..46f73f81a0
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.cpp
@@ -0,0 +1,638 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiavalueprovider.h"
+#include "qwindowsuiarangevalueprovider.h"
+#include "qwindowsuiatextprovider.h"
+#include "qwindowsuiatoggleprovider.h"
+#include "qwindowsuiainvokeprovider.h"
+#include "qwindowsuiaselectionprovider.h"
+#include "qwindowsuiaselectionitemprovider.h"
+#include "qwindowsuiatableprovider.h"
+#include "qwindowsuiatableitemprovider.h"
+#include "qwindowsuiagridprovider.h"
+#include "qwindowsuiagriditemprovider.h"
+#include "qwindowscombase.h"
+#include "qwindowscontext.h"
+#include "qwindowsuiautils.h"
+#include "qwindowsuiaprovidercache.h"
+
+#include <QtCore/QDebug>
+#include <QtGui/QAccessible>
+#include <QtGui/QGuiApplication>
+#include <QtGui/QWindow>
+
+#if !defined(Q_CC_BOR) && !defined (Q_CC_GNU)
+#include <comdef.h>
+#endif
+
+#include <QtCore/qt_windows.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+// Returns a cached instance of the provider for a specific acessible interface.
+QWindowsUiaMainProvider *QWindowsUiaMainProvider::providerForAccessible(QAccessibleInterface *accessible)
+{
+ if (!accessible)
+ return nullptr;
+
+ QAccessible::Id id = QAccessible::uniqueId(accessible);
+ QWindowsUiaProviderCache *providerCache = QWindowsUiaProviderCache::instance();
+ QWindowsUiaMainProvider *provider = qobject_cast<QWindowsUiaMainProvider *>(providerCache->providerForId(id));
+
+ if (provider) {
+ provider->AddRef();
+ } else {
+ provider = new QWindowsUiaMainProvider(accessible);
+ providerCache->insert(id, provider);
+ }
+ return provider;
+}
+
+QWindowsUiaMainProvider::QWindowsUiaMainProvider(QAccessibleInterface *a, int initialRefCount)
+ : QWindowsUiaBaseProvider(QAccessible::uniqueId(a)),
+ m_ref(initialRefCount)
+{
+}
+
+QWindowsUiaMainProvider::~QWindowsUiaMainProvider()
+{
+}
+
+void QWindowsUiaMainProvider::notifyFocusChange(QAccessibleEvent *event)
+{
+ if (QAccessibleInterface *accessible = event->accessibleInterface()) {
+ if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
+ QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_AutomationFocusChangedEventId);
+ }
+ }
+}
+
+void QWindowsUiaMainProvider::notifyStateChange(QAccessibleStateChangeEvent *event)
+{
+ if (QAccessibleInterface *accessible = event->accessibleInterface()) {
+ if (event->changedStates().checked || event->changedStates().checkStateMixed) {
+ // Notifies states changes in checkboxes.
+ if (accessible->role() == QAccessible::CheckBox) {
+ if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
+ VARIANT oldVal, newVal;
+ clearVariant(&oldVal);
+ int toggleState = ToggleState_Off;
+ if (accessible->state().checked)
+ toggleState = accessible->state().checkStateMixed ? ToggleState_Indeterminate : ToggleState_On;
+ setVariantI4(toggleState, &newVal);
+ QWindowsUiaWrapper::instance()->raiseAutomationPropertyChangedEvent(provider, UIA_ToggleToggleStatePropertyId, oldVal, newVal);
+ }
+ }
+ }
+ if (event->changedStates().active) {
+ if (accessible->role() == QAccessible::Window) {
+ // Notifies window opened/closed.
+ if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
+ if (accessible->state().active) {
+ QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_Window_WindowOpenedEventId);
+ } else {
+ QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_Window_WindowClosedEventId);
+ }
+ }
+ }
+ }
+ }
+}
+
+void QWindowsUiaMainProvider::notifyValueChange(QAccessibleValueChangeEvent *event)
+{
+ if (QAccessibleInterface *accessible = event->accessibleInterface()) {
+ if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) {
+ // Notifies changes in values of controls supporting the value interface.
+ if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
+ VARIANT oldVal, newVal;
+ clearVariant(&oldVal);
+ setVariantDouble(valueInterface->currentValue().toDouble(), &newVal);
+ QWindowsUiaWrapper::instance()->raiseAutomationPropertyChangedEvent(provider, UIA_RangeValueValuePropertyId, oldVal, newVal);
+ }
+ }
+ }
+}
+
+// Notifies changes in text content and selection state of text controls.
+void QWindowsUiaMainProvider::notifyTextChange(QAccessibleEvent *event)
+{
+ if (QAccessibleInterface *accessible = event->accessibleInterface()) {
+ if (accessible->textInterface()) {
+ if (QWindowsUiaMainProvider *provider = providerForAccessible(accessible)) {
+ if (event->type() == QAccessible::TextSelectionChanged) {
+ QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_Text_TextSelectionChangedEventId);
+ } else if (event->type() == QAccessible::TextCaretMoved) {
+ if (!accessible->state().readOnly) {
+ QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_Text_TextSelectionChangedEventId);
+ }
+ } else {
+ QWindowsUiaWrapper::instance()->raiseAutomationEvent(provider, UIA_Text_TextChangedEventId);
+ }
+ }
+ }
+ }
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaMainProvider::QueryInterface(REFIID iid, LPVOID *iface)
+{
+ if (!iface)
+ return E_INVALIDARG;
+ *iface = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+
+ const bool result = qWindowsComQueryUnknownInterfaceMulti<IRawElementProviderSimple>(this, iid, iface)
+ || qWindowsComQueryInterface<IRawElementProviderSimple>(this, iid, iface)
+ || qWindowsComQueryInterface<IRawElementProviderFragment>(this, iid, iface)
+ || (accessible && hwndForAccessible(accessible) && qWindowsComQueryInterface<IRawElementProviderFragmentRoot>(this, iid, iface));
+ return result ? S_OK : E_NOINTERFACE;
+}
+
+ULONG QWindowsUiaMainProvider::AddRef()
+{
+ return ++m_ref;
+}
+
+ULONG STDMETHODCALLTYPE QWindowsUiaMainProvider::Release()
+{
+ if (!--m_ref) {
+ delete this;
+ return 0;
+ }
+ return m_ref;
+}
+
+HRESULT QWindowsUiaMainProvider::get_ProviderOptions(ProviderOptions *pRetVal)
+{
+ if (!pRetVal)
+ return E_INVALIDARG;
+ // We are STA, (OleInitialize()).
+ *pRetVal = static_cast<ProviderOptions>(ProviderOptions_ServerSideProvider | ProviderOptions_UseComThreading);
+ return S_OK;
+}
+
+// Return providers for specific control patterns
+HRESULT QWindowsUiaMainProvider::GetPatternProvider(PATTERNID idPattern, IUnknown **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << idPattern;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ switch (idPattern) {
+ case UIA_TextPatternId:
+ case UIA_TextPattern2Id:
+ // All text controls.
+ if (accessible->textInterface()) {
+ *pRetVal = new QWindowsUiaTextProvider(id());
+ }
+ break;
+ case UIA_ValuePatternId:
+ // All accessible controls return text(QAccessible::Value) (which may be empty).
+ *pRetVal = new QWindowsUiaValueProvider(id());
+ break;
+ case UIA_RangeValuePatternId:
+ // Controls providing a numeric value within a range (e.g., sliders, scroll bars, dials).
+ if (accessible->valueInterface()) {
+ *pRetVal = new QWindowsUiaRangeValueProvider(id());
+ }
+ break;
+ case UIA_TogglePatternId:
+ // Checkbox controls.
+ if (accessible->role() == QAccessible::CheckBox) {
+ *pRetVal = new QWindowsUiaToggleProvider(id());
+ }
+ break;
+ case UIA_SelectionPatternId:
+ // Lists of items.
+ if (accessible->role() == QAccessible::List) {
+ *pRetVal = new QWindowsUiaSelectionProvider(id());
+ }
+ break;
+ case UIA_SelectionItemPatternId:
+ // Items within a list and radio buttons.
+ if ((accessible->role() == QAccessible::RadioButton)
+ || (accessible->role() == QAccessible::ListItem)) {
+ *pRetVal = new QWindowsUiaSelectionItemProvider(id());
+ }
+ break;
+ case UIA_TablePatternId:
+ // Table/tree.
+ if (accessible->tableInterface()
+ && ((accessible->role() == QAccessible::Table) || (accessible->role() == QAccessible::Tree))) {
+ *pRetVal = new QWindowsUiaTableProvider(id());
+ }
+ break;
+ case UIA_TableItemPatternId:
+ // Item within a table/tree.
+ if (accessible->tableCellInterface()
+ && ((accessible->role() == QAccessible::Cell) || (accessible->role() == QAccessible::TreeItem))) {
+ *pRetVal = new QWindowsUiaTableItemProvider(id());
+ }
+ break;
+ case UIA_GridPatternId:
+ // Table/tree.
+ if (accessible->tableInterface()
+ && ((accessible->role() == QAccessible::Table) || (accessible->role() == QAccessible::Tree))) {
+ *pRetVal = new QWindowsUiaGridProvider(id());
+ }
+ break;
+ case UIA_GridItemPatternId:
+ // Item within a table/tree.
+ if (accessible->tableCellInterface()
+ && ((accessible->role() == QAccessible::Cell) || (accessible->role() == QAccessible::TreeItem))) {
+ *pRetVal = new QWindowsUiaGridItemProvider(id());
+ }
+ break;
+ case UIA_InvokePatternId:
+ // Things that have an invokable action (e.g., simple buttons).
+ if (accessible->actionInterface()) {
+ *pRetVal = new QWindowsUiaInvokeProvider(id());
+ }
+ break;
+ default:
+ break;
+ }
+
+ return S_OK;
+}
+
+HRESULT QWindowsUiaMainProvider::GetPropertyValue(PROPERTYID idProp, VARIANT *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << idProp;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ clearVariant(pRetVal);
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ bool clientTopLevel = (accessible->role() == QAccessible::Client)
+ && accessible->parent() && (accessible->parent()->role() == QAccessible::Application);
+
+ switch (idProp) {
+ case UIA_ProcessIdPropertyId:
+ // PID
+ setVariantI4(int(GetCurrentProcessId()), pRetVal);
+ break;
+ case UIA_AccessKeyPropertyId:
+ // Accelerator key.
+ setVariantString(accessible->text(QAccessible::Accelerator), pRetVal);
+ break;
+ case UIA_AutomationIdPropertyId:
+ // Automation ID, which can be used by tools to select a specific control in the UI.
+ setVariantString(automationIdForAccessible(accessible), pRetVal);
+ break;
+ case UIA_ClassNamePropertyId:
+ // Class name.
+ if (QObject *o = accessible->object()) {
+ QString className = QLatin1String(o->metaObject()->className());
+ setVariantString(className, pRetVal);
+ }
+ break;
+ case UIA_FrameworkIdPropertyId:
+ setVariantString(QStringLiteral("Qt"), pRetVal);
+ break;
+ case UIA_ControlTypePropertyId:
+ if (clientTopLevel) {
+ // Reports a top-level widget as a window, instead of "custom".
+ setVariantI4(UIA_WindowControlTypeId, pRetVal);
+ } else {
+ // Control type converted from role.
+ setVariantI4(roleToControlTypeId(accessible->role()), pRetVal);
+ }
+ break;
+ case UIA_HelpTextPropertyId:
+ setVariantString(accessible->text(QAccessible::Help), pRetVal);
+ break;
+ case UIA_HasKeyboardFocusPropertyId:
+ setVariantBool(accessible->state().focused, pRetVal);
+ break;
+ case UIA_IsKeyboardFocusablePropertyId:
+ setVariantBool(accessible->state().focusable, pRetVal);
+ break;
+ case UIA_IsOffscreenPropertyId:
+ setVariantBool(false, pRetVal);
+ break;
+ case UIA_IsContentElementPropertyId:
+ setVariantBool(true, pRetVal);
+ break;
+ case UIA_IsControlElementPropertyId:
+ setVariantBool(true, pRetVal);
+ break;
+ case UIA_IsEnabledPropertyId:
+ setVariantBool(!accessible->state().disabled, pRetVal);
+ break;
+ case UIA_IsPasswordPropertyId:
+ setVariantBool(accessible->role() == QAccessible::EditableText
+ && accessible->state().passwordEdit, pRetVal);
+ break;
+ case UIA_IsPeripheralPropertyId:
+ // True for peripheral UIs.
+ if (QWindow *window = windowForAccessible(accessible)) {
+ const Qt::WindowType wt = window->type();
+ setVariantBool(wt == Qt::Popup || wt == Qt::ToolTip || wt == Qt::SplashScreen, pRetVal);
+ }
+ break;
+ case UIA_FullDescriptionPropertyId:
+ setVariantString(accessible->text(QAccessible::Description), pRetVal);
+ break;
+ case UIA_NamePropertyId: {
+ QString name = accessible->text(QAccessible::Name);
+ if (name.isEmpty() && clientTopLevel) {
+ name = QCoreApplication::applicationName();
+ }
+ setVariantString(name, pRetVal);
+ break;
+ }
+ default:
+ break;
+ }
+ return S_OK;
+}
+
+// Generates an ID based on the name of the controls and their parents.
+QString QWindowsUiaMainProvider::automationIdForAccessible(const QAccessibleInterface *accessible)
+{
+ QString result;
+ if (accessible) {
+ QObject *obj = accessible->object();
+ while (obj) {
+ QString name = obj->objectName();
+ if (name.isEmpty())
+ return QString();
+ if (!result.isEmpty())
+ result.prepend(QLatin1Char('.'));
+ result.prepend(name);
+ obj = obj->parent();
+ }
+ }
+ return result;
+}
+
+HRESULT QWindowsUiaMainProvider::get_HostRawElementProvider(IRawElementProviderSimple **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ // Returns a host provider only for controls associated with a native window handle. Others should return NULL.
+ if (QAccessibleInterface *accessible = accessibleInterface()) {
+ if (HWND hwnd = hwndForAccessible(accessible)) {
+ return QWindowsUiaWrapper::instance()->hostProviderFromHwnd(hwnd, pRetVal);
+ }
+ }
+ return S_OK;
+}
+
+// Navigates within the tree of accessible controls.
+HRESULT QWindowsUiaMainProvider::Navigate(NavigateDirection direction, IRawElementProviderFragment **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << direction << " this: " << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleInterface *targetacc = nullptr;
+
+ switch (direction) {
+ case NavigateDirection_Parent:
+ targetacc = accessible->parent();
+ if (targetacc && (targetacc->role() == QAccessible::Application)) {
+ targetacc = nullptr; // The app's children are considered top level objects.
+ }
+ break;
+ case NavigateDirection_FirstChild:
+ targetacc = accessible->child(0);
+ break;
+ case NavigateDirection_LastChild:
+ targetacc = accessible->child(accessible->childCount() - 1);
+ break;
+ case NavigateDirection_NextSibling:
+ case NavigateDirection_PreviousSibling:
+ if (QAccessibleInterface *parent = accessible->parent()) {
+ if (parent->isValid()) {
+ int index = parent->indexOfChild(accessible);
+ index += (direction == NavigateDirection_NextSibling) ? 1 : -1;
+ if (index >= 0 && index < parent->childCount())
+ targetacc = parent->child(index);
+ }
+ }
+ break;
+ }
+
+ if (targetacc)
+ *pRetVal = providerForAccessible(targetacc);
+ return S_OK;
+}
+
+// Returns a unique id assigned to the UI element, used as key by the UI Automation framework.
+HRESULT QWindowsUiaMainProvider::GetRuntimeId(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // The UiaAppendRuntimeId constant is used to make then ID unique
+ // among multiple instances running on the system.
+ int rtId[] = { UiaAppendRuntimeId, int(id()) };
+
+ if ((*pRetVal = SafeArrayCreateVector(VT_I4, 0, 2))) {
+ for (LONG i = 0; i < 2; ++i)
+ SafeArrayPutElement(*pRetVal, &i, &rtId[i]);
+ }
+ return S_OK;
+}
+
+// Returns the bounding rectangle for the accessible control.
+HRESULT QWindowsUiaMainProvider::get_BoundingRectangle(UiaRect *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QWindow *window = windowForAccessible(accessible);
+ if (!window)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ rectToNativeUiaRect(accessible->rect(), window, pRetVal);
+ return S_OK;
+}
+
+HRESULT QWindowsUiaMainProvider::GetEmbeddedFragmentRoots(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+ // No embedded roots.
+ return S_OK;
+}
+
+// Sets focus to the control.
+HRESULT QWindowsUiaMainProvider::SetFocus()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ actionInterface->doAction(QAccessibleActionInterface::setFocusAction());
+ return S_OK;
+}
+
+HRESULT QWindowsUiaMainProvider::get_FragmentRoot(IRawElementProviderFragmentRoot **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ // Our UI Automation implementation considers the window as the root for
+ // non-native controls/fragments.
+ if (QAccessibleInterface *accessible = accessibleInterface()) {
+ if (QWindow *window = windowForAccessible(accessible)) {
+ if (QAccessibleInterface *rootacc = window->accessibleRoot()) {
+ *pRetVal = providerForAccessible(rootacc);
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Returns a provider for the UI element present at the specified screen coordinates.
+HRESULT QWindowsUiaMainProvider::ElementProviderFromPoint(double x, double y, IRawElementProviderFragment **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << x << y;
+
+ if (!pRetVal) {
+ return E_INVALIDARG;
+ }
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QWindow *window = windowForAccessible(accessible);
+ if (!window)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // Scales coordinates from High DPI screens.
+ UiaPoint uiaPoint = {x, y};
+ QPoint point;
+ nativeUiaPointToPoint(uiaPoint, window, &point);
+
+ QAccessibleInterface *targetacc = accessible->childAt(point.x(), point.y());
+
+ if (targetacc) {
+ QAccessibleInterface *acc = targetacc;
+ // Controls can be embedded within grouping elements. By default returns the innermost control.
+ while (acc) {
+ targetacc = acc;
+ // For accessibility tools it may be better to return the text element instead of its subcomponents.
+ if (targetacc->textInterface()) break;
+ acc = acc->childAt(point.x(), point.y());
+ }
+ *pRetVal = providerForAccessible(targetacc);
+ }
+ return S_OK;
+}
+
+// Returns the fragment with focus.
+HRESULT QWindowsUiaMainProvider::GetFocus(IRawElementProviderFragment **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ if (QAccessibleInterface *accessible = accessibleInterface()) {
+ if (QAccessibleInterface *focusacc = accessible->focusChild()) {
+ *pRetVal = providerForAccessible(focusacc);
+ }
+ }
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h
new file mode 100644
index 0000000000..893cbf7f8a
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiamainprovider.h
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAMAINPROVIDER_H
+#define QWINDOWSUIAMAINPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+#include <QtCore/QPointer>
+#include <QtCore/QSharedPointer>
+#include <QtCore/qt_windows.h>
+#include <QtGui/QAccessible>
+
+QT_BEGIN_NAMESPACE
+
+// The main UI Automation class.
+class QWindowsUiaMainProvider :
+ public QWindowsUiaBaseProvider,
+ public IRawElementProviderSimple,
+ public IRawElementProviderFragment,
+ public IRawElementProviderFragmentRoot
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(QWindowsUiaMainProvider)
+public:
+ static QWindowsUiaMainProvider *providerForAccessible(QAccessibleInterface *accessible);
+ explicit QWindowsUiaMainProvider(QAccessibleInterface *a, int initialRefCount = 1);
+ virtual ~QWindowsUiaMainProvider();
+ static void notifyFocusChange(QAccessibleEvent *event);
+ static void notifyStateChange(QAccessibleStateChangeEvent *event);
+ static void notifyValueChange(QAccessibleValueChangeEvent *event);
+ static void notifyTextChange(QAccessibleEvent *event);
+
+ // IUnknown
+ HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id, LPVOID *iface);
+ ULONG STDMETHODCALLTYPE AddRef();
+ ULONG STDMETHODCALLTYPE Release();
+
+ // IRawElementProviderSimple methods
+ HRESULT STDMETHODCALLTYPE get_ProviderOptions(ProviderOptions *pRetVal);
+ HRESULT STDMETHODCALLTYPE GetPatternProvider(PATTERNID idPattern, IUnknown **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetPropertyValue(PROPERTYID idProp, VARIANT *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_HostRawElementProvider(IRawElementProviderSimple **pRetVal);
+
+ // IRawElementProviderFragment methods
+ HRESULT STDMETHODCALLTYPE Navigate(NavigateDirection direction, IRawElementProviderFragment **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetRuntimeId(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE get_BoundingRectangle(UiaRect *pRetVal);
+ HRESULT STDMETHODCALLTYPE GetEmbeddedFragmentRoots(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE SetFocus();
+ HRESULT STDMETHODCALLTYPE get_FragmentRoot(IRawElementProviderFragmentRoot **pRetVal);
+
+ // IRawElementProviderFragmentRoot methods
+ HRESULT STDMETHODCALLTYPE ElementProviderFromPoint(double x, double y, IRawElementProviderFragment **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetFocus(IRawElementProviderFragment **pRetVal);
+
+private:
+ QString automationIdForAccessible(const QAccessibleInterface *accessible);
+ ULONG m_ref;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAMAINPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.cpp
new file mode 100644
index 0000000000..9f0a1e126f
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiaprovidercache.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtCore/QDebug>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+// Private constructor
+QWindowsUiaProviderCache::QWindowsUiaProviderCache()
+{
+}
+
+// shared instance
+QWindowsUiaProviderCache *QWindowsUiaProviderCache::instance()
+{
+ static QWindowsUiaProviderCache providerCache;
+ return &providerCache;
+}
+
+// Returns the provider instance associated with the ID, or nullptr.
+QWindowsUiaBaseProvider *QWindowsUiaProviderCache::providerForId(QAccessible::Id id) const
+{
+ return providerTable.value(id);
+}
+
+// Inserts a provider in the cache and associates it with an accessibility ID.
+void QWindowsUiaProviderCache::insert(QAccessible::Id id, QWindowsUiaBaseProvider *provider)
+{
+ remove(id);
+ if (provider) {
+ providerTable[id] = provider;
+ inverseTable[provider] = id;
+ // Connects the destroyed signal to our slot, to remove deleted objects from the cache.
+ QObject::connect(provider, &QObject::destroyed, this, &QWindowsUiaProviderCache::objectDestroyed);
+ }
+}
+
+// Removes deleted provider objects from the cache.
+void QWindowsUiaProviderCache::objectDestroyed(QObject *obj)
+{
+ // We have to use the inverse table to map the object address back to its ID,
+ // since at this point (called from QObject destructor), it has already been
+ // partially destroyed and we cannot treat it as a provider.
+ auto it = inverseTable.find(obj);
+ if (it != inverseTable.end()) {
+ providerTable.remove(*it);
+ inverseTable.remove(obj);
+ }
+}
+
+// Removes a provider with a given id from the cache.
+void QWindowsUiaProviderCache::remove(QAccessible::Id id)
+{
+ inverseTable.remove(providerTable.value(id));
+ providerTable.remove(id);
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.h
new file mode 100644
index 0000000000..7ad30ac39c
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaprovidercache.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAPROVIDERCACHE_H
+#define QWINDOWSUIAPROVIDERCACHE_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+#include <QtCore/QHash>
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+
+QT_BEGIN_NAMESPACE
+
+// Singleton used to cache provider instances using the accessibility ID as the key.
+class QWindowsUiaProviderCache : public QObject
+{
+ QWindowsUiaProviderCache();
+ Q_OBJECT
+public:
+ static QWindowsUiaProviderCache *instance();
+ QWindowsUiaBaseProvider *providerForId(QAccessible::Id id) const;
+ void insert(QAccessible::Id id, QWindowsUiaBaseProvider *provider);
+ void remove(QAccessible::Id id);
+
+private Q_SLOTS:
+ void objectDestroyed(QObject *obj);
+
+private:
+ QHash<QAccessible::Id, QWindowsUiaBaseProvider *> providerTable;
+ QHash<QObject *, QAccessible::Id> inverseTable;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAPROVIDERCACHE_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.cpp
new file mode 100644
index 0000000000..0cd09c3f0a
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.cpp
@@ -0,0 +1,190 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiarangevalueprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaRangeValueProvider::QWindowsUiaRangeValueProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaRangeValueProvider::~QWindowsUiaRangeValueProvider()
+{
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::SetValue(double val)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleValueInterface *valueInterface = accessible->valueInterface();
+ if (!valueInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ double minimum = valueInterface->minimumValue().toDouble();
+ double maximum = valueInterface->maximumValue().toDouble();
+ if ((val < minimum) || (val > maximum))
+ return E_INVALIDARG;
+
+ valueInterface->setCurrentValue(QVariant(val));
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::get_Value(double *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleValueInterface *valueInterface = accessible->valueInterface();
+ if (!valueInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QVariant varValue = valueInterface->currentValue();
+ *pRetVal = varValue.toDouble();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::get_IsReadOnly(BOOL *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = accessible->state().readOnly;
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::get_Maximum(double *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleValueInterface *valueInterface = accessible->valueInterface();
+ if (!valueInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QVariant varValue = valueInterface->maximumValue();
+ *pRetVal = varValue.toDouble();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::get_Minimum(double *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleValueInterface *valueInterface = accessible->valueInterface();
+ if (!valueInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QVariant varValue = valueInterface->minimumValue();
+ *pRetVal = varValue.toDouble();
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::get_LargeChange(double *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+ return get_SmallChange(pRetVal);
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaRangeValueProvider::get_SmallChange(double *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleValueInterface *valueInterface = accessible->valueInterface();
+ if (!valueInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QVariant varValue = valueInterface->minimumStepSize();
+ *pRetVal = varValue.toDouble();
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.h
new file mode 100644
index 0000000000..f742ef99c2
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiarangevalueprovider.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIARANGEVALUEPROVIDER_H
+#define QWINDOWSUIARANGEVALUEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Range Value control pattern provider.
+class QWindowsUiaRangeValueProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<IRangeValueProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaRangeValueProvider)
+public:
+ explicit QWindowsUiaRangeValueProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaRangeValueProvider();
+
+ // IRangeValueProvider
+ HRESULT STDMETHODCALLTYPE SetValue(double val);
+ HRESULT STDMETHODCALLTYPE get_Value(double *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_IsReadOnly(BOOL *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_Maximum(double *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_Minimum(double *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_LargeChange(double *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_SmallChange(double *pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIARANGEVALUEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.cpp
new file mode 100644
index 0000000000..45216a6d1c
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.cpp
@@ -0,0 +1,201 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiaselectionitemprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaSelectionItemProvider::QWindowsUiaSelectionItemProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaSelectionItemProvider::~QWindowsUiaSelectionItemProvider()
+{
+}
+
+// Selects the element (deselecting all others).
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::Select()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if (accessible->role() == QAccessible::RadioButton) {
+ // For radio buttons we just invoke the selection action; others are automatically deselected.
+ actionInterface->doAction(QAccessibleActionInterface::pressAction());
+ } else {
+ // Toggle list item if not already selected. It must be done first to support all selection modes.
+ if (!accessible->state().selected) {
+ actionInterface->doAction(QAccessibleActionInterface::toggleAction());
+ }
+ // Toggle selected siblings.
+ if (QAccessibleInterface *parent = accessible->parent()) {
+ for (int i = 0; i < parent->childCount(); ++i) {
+ if (QAccessibleInterface *sibling = parent->child(i)) {
+ if ((sibling != accessible) && (sibling->state().selected)) {
+ if (QAccessibleActionInterface *siblingAction = sibling->actionInterface()) {
+ siblingAction->doAction(QAccessibleActionInterface::toggleAction());
+ }
+ }
+ }
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Adds the element to the list of selected elements.
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::AddToSelection()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if (accessible->role() == QAccessible::RadioButton) {
+ // For radio buttons we invoke the selection action.
+ actionInterface->doAction(QAccessibleActionInterface::pressAction());
+ } else {
+ // Toggle list item if not already selected.
+ if (!accessible->state().selected) {
+ actionInterface->doAction(QAccessibleActionInterface::toggleAction());
+ }
+ }
+ return S_OK;
+}
+
+// Removes a list item from selection.
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::RemoveFromSelection()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if (accessible->role() != QAccessible::RadioButton) {
+ if (accessible->state().selected) {
+ actionInterface->doAction(QAccessibleActionInterface::toggleAction());
+ }
+ }
+
+ return S_OK;
+}
+
+// Returns true if element is currently selected.
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::get_IsSelected(BOOL *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = FALSE;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if (accessible->role() == QAccessible::RadioButton)
+ *pRetVal = accessible->state().checked;
+ else
+ *pRetVal = accessible->state().selected;
+ return S_OK;
+}
+
+// Returns the provider for the container element (e.g., the list for the list item).
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionItemProvider::get_SelectionContainer(IRawElementProviderSimple **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // Radio buttons do not require a container.
+ if (accessible->role() == QAccessible::ListItem) {
+ if (QAccessibleInterface *parent = accessible->parent()) {
+ if (parent->role() == QAccessible::List) {
+ *pRetVal = QWindowsUiaMainProvider::providerForAccessible(parent);
+ }
+ }
+ }
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.h
new file mode 100644
index 0000000000..6a9b5b1e4b
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionitemprovider.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIASELECTIONITEMPROVIDER_H
+#define QWINDOWSUIASELECTIONITEMPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Selection Item control pattern provider. Used for List items and radio buttons.
+class QWindowsUiaSelectionItemProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<ISelectionItemProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaSelectionItemProvider)
+public:
+ explicit QWindowsUiaSelectionItemProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaSelectionItemProvider();
+
+ // ISelectionItemProvider
+ HRESULT STDMETHODCALLTYPE Select();
+ HRESULT STDMETHODCALLTYPE AddToSelection();
+ HRESULT STDMETHODCALLTYPE RemoveFromSelection();
+ HRESULT STDMETHODCALLTYPE get_IsSelected(BOOL *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_SelectionContainer(IRawElementProviderSimple **pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIASELECTIONITEMPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.cpp
new file mode 100644
index 0000000000..1c06503bfc
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.cpp
@@ -0,0 +1,147 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiaselectionprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+#include <QList>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaSelectionProvider::QWindowsUiaSelectionProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaSelectionProvider::~QWindowsUiaSelectionProvider()
+{
+}
+
+// Returns an array of providers with the selected items.
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionProvider::GetSelection(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // First put selected items in a list, then build a safe array with the right size.
+ QList<QAccessibleInterface *> selectedList;
+ for (int i = 0; i < accessible->childCount(); ++i) {
+ if (QAccessibleInterface *child = accessible->child(i)) {
+ if (child->state().selected) {
+ selectedList.append(child);
+ }
+ }
+ }
+
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, selectedList.size()))) {
+ for (LONG i = 0; i < selectedList.size(); ++i) {
+ if (QWindowsUiaMainProvider *childProvider = QWindowsUiaMainProvider::providerForAccessible(selectedList.at(i))) {
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IRawElementProviderSimple *>(childProvider));
+ childProvider->Release();
+ }
+ }
+ }
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionProvider::get_CanSelectMultiple(BOOL *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = FALSE;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = accessible->state().multiSelectable;
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaSelectionProvider::get_IsSelectionRequired(BOOL *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = FALSE;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // Initially returns false if none are selected. After the first selection, it may be required.
+ bool anySelected = false;
+ for (int i = 0; i < accessible->childCount(); ++i) {
+ if (QAccessibleInterface *child = accessible->child(i)) {
+ if (child->state().selected) {
+ anySelected = true;
+ break;
+ }
+ }
+ }
+
+ *pRetVal = anySelected && !accessible->state().multiSelectable && !accessible->state().extSelectable;
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.h
new file mode 100644
index 0000000000..5a07a82ac8
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiaselectionprovider.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIASELECTIONPROVIDER_H
+#define QWINDOWSUIASELECTIONPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Selection control pattern provider. Used for Lists.
+class QWindowsUiaSelectionProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<ISelectionProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaSelectionProvider)
+public:
+ explicit QWindowsUiaSelectionProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaSelectionProvider();
+
+ // ISelectionProvider
+ HRESULT STDMETHODCALLTYPE GetSelection(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE get_CanSelectMultiple(BOOL *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_IsSelectionRequired(BOOL *pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIASELECTIONPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.cpp
new file mode 100644
index 0000000000..3ea29fc86c
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.cpp
@@ -0,0 +1,129 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiatableitemprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaTableItemProvider::QWindowsUiaTableItemProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaTableItemProvider::~QWindowsUiaTableItemProvider()
+{
+}
+
+// Returns the providers for the row headers associated with the item.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTableItemProvider::GetRowHeaderItems(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QList<QAccessibleInterface *> headers = tableCellInterface->rowHeaderCells();
+
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, headers.size()))) {
+ for (LONG i = 0; i < headers.size(); ++i) {
+ if (QWindowsUiaMainProvider *headerProvider = QWindowsUiaMainProvider::providerForAccessible(headers.at(i))) {
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IRawElementProviderSimple *>(headerProvider));
+ headerProvider->Release();
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Returns the providers for the column headers associated with the item.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTableItemProvider::GetColumnHeaderItems(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableCellInterface *tableCellInterface = accessible->tableCellInterface();
+ if (!tableCellInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QList<QAccessibleInterface *> headers = tableCellInterface->columnHeaderCells();
+
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, headers.size()))) {
+ for (LONG i = 0; i < headers.size(); ++i) {
+ if (QWindowsUiaMainProvider *headerProvider = QWindowsUiaMainProvider::providerForAccessible(headers.at(i))) {
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IRawElementProviderSimple *>(headerProvider));
+ headerProvider->Release();
+ }
+ }
+ }
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.h
new file mode 100644
index 0000000000..277884c980
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableitemprovider.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIATABLEITEMPROVIDER_H
+#define QWINDOWSUIATABLEITEMPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Table Item control pattern provider. Used by items within a table/tree.
+class QWindowsUiaTableItemProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<ITableItemProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaTableItemProvider)
+public:
+ explicit QWindowsUiaTableItemProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaTableItemProvider();
+
+ // ITableItemProvider
+ HRESULT STDMETHODCALLTYPE GetRowHeaderItems(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetColumnHeaderItems(SAFEARRAY **pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIATABLEITEMPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.cpp
new file mode 100644
index 0000000000..f79a24536b
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.cpp
@@ -0,0 +1,154 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiatableprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaTableProvider::QWindowsUiaTableProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaTableProvider::~QWindowsUiaTableProvider()
+{
+}
+
+// Gets the providers for all the row headers in the table.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTableProvider::GetRowHeaders(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableInterface *tableInterface = accessible->tableInterface();
+ if (!tableInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QList<QAccessibleInterface *> headers;
+
+ for (int i = 0; i < tableInterface->rowCount(); ++i) {
+ if (QAccessibleInterface *cell = tableInterface->cellAt(i, 0)) {
+ if (QAccessibleTableCellInterface *tableCellInterface = cell->tableCellInterface()) {
+ headers.append(tableCellInterface->rowHeaderCells());
+ }
+ }
+ }
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, headers.size()))) {
+ for (LONG i = 0; i < headers.size(); ++i) {
+ if (QWindowsUiaMainProvider *headerProvider = QWindowsUiaMainProvider::providerForAccessible(headers.at(i))) {
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IRawElementProviderSimple *>(headerProvider));
+ headerProvider->Release();
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Gets the providers for all the column headers in the table.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTableProvider::GetColumnHeaders(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTableInterface *tableInterface = accessible->tableInterface();
+ if (!tableInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QList<QAccessibleInterface *> headers;
+
+ for (int i = 0; i < tableInterface->columnCount(); ++i) {
+ if (QAccessibleInterface *cell = tableInterface->cellAt(0, i)) {
+ if (QAccessibleTableCellInterface *tableCellInterface = cell->tableCellInterface()) {
+ headers.append(tableCellInterface->columnHeaderCells());
+ }
+ }
+ }
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, headers.size()))) {
+ for (LONG i = 0; i < headers.size(); ++i) {
+ if (QWindowsUiaMainProvider *headerProvider = QWindowsUiaMainProvider::providerForAccessible(headers.at(i))) {
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IRawElementProviderSimple *>(headerProvider));
+ headerProvider->Release();
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Returns the primary direction of traversal for the table.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTableProvider::get_RowOrColumnMajor(enum RowOrColumnMajor *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = RowOrColumnMajor_Indeterminate;
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.h
new file mode 100644
index 0000000000..8cd0acda03
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatableprovider.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIATABLEPROVIDER_H
+#define QWINDOWSUIATABLEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Table control pattern provider. Used by tables/trees.
+class QWindowsUiaTableProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<ITableProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaTableProvider)
+public:
+ explicit QWindowsUiaTableProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaTableProvider();
+
+ // ITableProvider
+ HRESULT STDMETHODCALLTYPE GetRowHeaders(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetColumnHeaders(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE get_RowOrColumnMajor(enum RowOrColumnMajor *pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIATABLEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp
new file mode 100644
index 0000000000..e1622933af
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.cpp
@@ -0,0 +1,261 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiatextprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaTextProvider::QWindowsUiaTextProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaTextProvider::~QWindowsUiaTextProvider()
+{
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::QueryInterface(REFIID iid, LPVOID *iface)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!iface)
+ return E_INVALIDARG;
+ *iface = nullptr;
+
+ const bool result = qWindowsComQueryUnknownInterfaceMulti<ITextProvider>(this, iid, iface)
+ || qWindowsComQueryInterface<ITextProvider>(this, iid, iface)
+ || qWindowsComQueryInterface<ITextProvider2>(this, iid, iface);
+ return result ? S_OK : E_NOINTERFACE;
+}
+
+// Returns an array of providers for the selected text ranges.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::GetSelection(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int selCount = textInterface->selectionCount();
+ if (selCount > 0) {
+ // Build a safe array with the text range providers.
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, selCount))) {
+ for (LONG i = 0; i < selCount; ++i) {
+ int startOffset = 0, endOffset = 0;
+ textInterface->selection((int)i, &startOffset, &endOffset);
+ QWindowsUiaTextRangeProvider *textRangeProvider = new QWindowsUiaTextRangeProvider(id(), startOffset, endOffset);
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IUnknown *>(textRangeProvider));
+ textRangeProvider->Release();
+ }
+ }
+ } else {
+ // If there is no selection, we return an array with a single degenerate (empty) text range at the cursor position.
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, 1))) {
+ LONG i = 0;
+ int cursorPosition = textInterface->cursorPosition();
+ QWindowsUiaTextRangeProvider *textRangeProvider = new QWindowsUiaTextRangeProvider(id(), cursorPosition, cursorPosition);
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IUnknown *>(textRangeProvider));
+ textRangeProvider->Release();
+ }
+ }
+ return S_OK;
+}
+
+// Returns an array of providers for the visible text ranges.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::GetVisibleRanges(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // Considering the entire text as visible.
+ if ((*pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, 1))) {
+ LONG i = 0;
+ QWindowsUiaTextRangeProvider *textRangeProvider = new QWindowsUiaTextRangeProvider(id(), 0, textInterface->characterCount());
+ SafeArrayPutElement(*pRetVal, &i, static_cast<IUnknown *>(textRangeProvider));
+ textRangeProvider->Release();
+ }
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::RangeFromChild(IRawElementProviderSimple * /*childElement*/,
+ ITextRangeProvider **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+ // No children supported.
+ return S_OK;
+}
+
+// Returns a degenerate text range at the specified point.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::RangeFromPoint(UiaPoint point, ITextRangeProvider **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QWindow *window = windowForAccessible(accessible);
+ if (!window)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QPoint pt;
+ nativeUiaPointToPoint(point, window, &pt);
+
+ int offset = textInterface->offsetAtPoint(pt);
+ if ((offset >= 0) && (offset < textInterface->characterCount())) {
+ *pRetVal = new QWindowsUiaTextRangeProvider(id(), offset, offset);
+ }
+ return S_OK;
+}
+
+// Returns a text range provider for the entire text.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::get_DocumentRange(ITextRangeProvider **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = new QWindowsUiaTextRangeProvider(id(), 0, textInterface->characterCount());
+ return S_OK;
+}
+
+// Currently supporting single selection.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::get_SupportedTextSelection(SupportedTextSelection *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = SupportedTextSelection_Single;
+ return S_OK;
+}
+
+// Not supporting annotations.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::RangeFromAnnotation(IRawElementProviderSimple * /*annotationElement*/, ITextRangeProvider **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+ return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextProvider::GetCaretRange(BOOL *isActive, ITextRangeProvider **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!isActive || !pRetVal)
+ return E_INVALIDARG;
+ *isActive = FALSE;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *isActive = accessible->state().focused;
+
+ int cursorPosition = textInterface->cursorPosition();
+ *pRetVal = new QWindowsUiaTextRangeProvider(id(), cursorPosition, cursorPosition);
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.h
new file mode 100644
index 0000000000..a6d10027fa
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextprovider.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIATEXTPROVIDER_H
+#define QWINDOWSUIATEXTPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+#include "qwindowsuiatextrangeprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Text control pattern provider. Used for text controls.
+class QWindowsUiaTextProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<ITextProvider2>
+{
+ Q_DISABLE_COPY(QWindowsUiaTextProvider)
+public:
+ explicit QWindowsUiaTextProvider(QAccessible::Id id);
+ ~QWindowsUiaTextProvider();
+
+ // IUnknown overrides
+ HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id, LPVOID *iface);
+
+ // ITextProvider
+ HRESULT STDMETHODCALLTYPE GetSelection(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetVisibleRanges(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE RangeFromChild(IRawElementProviderSimple *childElement, ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE RangeFromPoint(UiaPoint point, ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE get_DocumentRange(ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE get_SupportedTextSelection(SupportedTextSelection *pRetVal);
+
+ // ITextProvider2
+ HRESULT STDMETHODCALLTYPE RangeFromAnnotation(IRawElementProviderSimple *annotationElement, ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetCaretRange(BOOL *isActive, ITextRangeProvider **pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIATEXTPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp
new file mode 100644
index 0000000000..dae7cbdd5f
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp
@@ -0,0 +1,554 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiatextrangeprovider.h"
+#include "qwindowsuiamainprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaTextRangeProvider::QWindowsUiaTextRangeProvider(QAccessible::Id id, int startOffset, int endOffset) :
+ QWindowsUiaBaseProvider(id),
+ m_startOffset(startOffset),
+ m_endOffset(endOffset)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this << startOffset << endOffset;
+}
+
+QWindowsUiaTextRangeProvider::~QWindowsUiaTextRangeProvider()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+}
+
+HRESULT QWindowsUiaTextRangeProvider::AddToSelection()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+ return Select();
+}
+
+HRESULT QWindowsUiaTextRangeProvider::Clone(ITextRangeProvider **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ *pRetVal = new QWindowsUiaTextRangeProvider(id(), m_startOffset, m_endOffset);
+ return S_OK;
+}
+
+// Two ranges are considered equal if their start/end points are the same.
+HRESULT QWindowsUiaTextRangeProvider::Compare(ITextRangeProvider *range, BOOL *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!range || !pRetVal)
+ return E_INVALIDARG;
+
+ QWindowsUiaTextRangeProvider *targetProvider = static_cast<QWindowsUiaTextRangeProvider *>(range);
+ *pRetVal = ((targetProvider->m_startOffset == m_startOffset) && (targetProvider->m_endOffset == m_endOffset));
+ return S_OK;
+}
+
+// Compare different endpoinds between two providers.
+HRESULT QWindowsUiaTextRangeProvider::CompareEndpoints(TextPatternRangeEndpoint endpoint,
+ ITextRangeProvider *targetRange,
+ TextPatternRangeEndpoint targetEndpoint,
+ int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__
+ << "endpoint=" << endpoint << "targetRange=" << targetRange
+ << "targetEndpoint=" << targetEndpoint << "this: " << this;
+
+ if (!targetRange || !pRetVal)
+ return E_INVALIDARG;
+
+ QWindowsUiaTextRangeProvider *targetProvider = static_cast<QWindowsUiaTextRangeProvider *>(targetRange);
+
+ int point = (endpoint == TextPatternRangeEndpoint_Start) ? m_startOffset : m_endOffset;
+ int targetPoint = (targetEndpoint == TextPatternRangeEndpoint_Start) ?
+ targetProvider->m_startOffset : targetProvider->m_endOffset;
+ *pRetVal = point - targetPoint;
+ return S_OK;
+}
+
+// Expands/normalizes the range for a given text unit.
+HRESULT QWindowsUiaTextRangeProvider::ExpandToEnclosingUnit(TextUnit unit)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << "unit=" << unit << "this: " << this;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int len = textInterface->characterCount();
+ if (len < 1) {
+ m_startOffset = 0;
+ m_endOffset = 0;
+ } else {
+ if (unit == TextUnit_Character) {
+ m_startOffset = qBound(0, m_startOffset, len - 1);
+ m_endOffset = m_startOffset + 1;
+ } else {
+ QString text = textInterface->text(0, len);
+ for (int t = m_startOffset; t >= 0; --t) {
+ if (!isTextUnitSeparator(unit, text[t]) && ((t == 0) || isTextUnitSeparator(unit, text[t - 1]))) {
+ m_startOffset = t;
+ break;
+ }
+ }
+ for (int t = m_startOffset; t < len; ++t) {
+ if ((t == len - 1) || (isTextUnitSeparator(unit, text[t]) && ((unit == TextUnit_Word) || !isTextUnitSeparator(unit, text[t + 1])))) {
+ m_endOffset = t + 1;
+ break;
+ }
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Not supported.
+HRESULT QWindowsUiaTextRangeProvider::FindAttribute(TEXTATTRIBUTEID /* attributeId */,
+ VARIANT /* val */, BOOL /* backward */,
+ ITextRangeProvider **pRetVal)
+{
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+ return S_OK;
+}
+
+// Returns the value of a given attribute.
+HRESULT STDMETHODCALLTYPE QWindowsUiaTextRangeProvider::GetAttributeValue(TEXTATTRIBUTEID attributeId,
+ VARIANT *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << "attributeId=" << attributeId << "this: " << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ clearVariant(pRetVal);
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ switch (attributeId) {
+ case UIA_IsReadOnlyAttributeId:
+ setVariantBool(accessible->state().readOnly, pRetVal);
+ break;
+ case UIA_CaretPositionAttributeId:
+ if (textInterface->cursorPosition() == 0)
+ setVariantI4(CaretPosition_BeginningOfLine, pRetVal);
+ else if (textInterface->cursorPosition() == textInterface->characterCount())
+ setVariantI4(CaretPosition_EndOfLine, pRetVal);
+ else
+ setVariantI4(CaretPosition_Unknown, pRetVal);
+ break;
+ default:
+ break;
+ }
+ return S_OK;
+}
+
+// Returns an array of bounding rectangles for text lines within the range.
+HRESULT QWindowsUiaTextRangeProvider::GetBoundingRectangles(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QWindow *window = windowForAccessible(accessible);
+ if (!window)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int len = textInterface->characterCount();
+ QList<QRect> rectList;
+
+ if ((m_startOffset >= 0) && (m_endOffset <= len) && (m_startOffset < m_endOffset)) {
+ int start, end;
+ textInterface->textAtOffset(m_startOffset, QAccessible::LineBoundary, &start, &end);
+ while ((start >= 0) && (end >= 0)) {
+ int startRange = qMax(start, m_startOffset);
+ int endRange = qMin(end, m_endOffset);
+ if (startRange < endRange) {
+ // Calculates a bounding rectangle for the line and adds it to the list.
+ QRect startRect = textInterface->characterRect(startRange);
+ QRect endRect = textInterface->characterRect(endRange - 1);
+ QRect lineRect(qMin(startRect.x(), endRect.x()),
+ qMin(startRect.y(), endRect.y()),
+ qMax(startRect.x() + startRect.width(), endRect.x() + endRect.width()) - qMin(startRect.x(), endRect.x()),
+ qMax(startRect.y() + startRect.height(), endRect.y() + endRect.height()) - qMin(startRect.y(), endRect.y()));
+ rectList.append(lineRect);
+ }
+ if (end >= len) break;
+ textInterface->textAfterOffset(end + 1, QAccessible::LineBoundary, &start, &end);
+ }
+ }
+
+ if ((*pRetVal = SafeArrayCreateVector(VT_R8, 0, 4 * rectList.size()))) {
+ for (int i = 0; i < rectList.size(); ++i) {
+ // Scale rect for high DPI screens.
+ UiaRect uiaRect;
+ rectToNativeUiaRect(rectList[i], window, &uiaRect);
+ double coords[4] = { uiaRect.left, uiaRect.top, uiaRect.width, uiaRect.height };
+ for (int j = 0; j < 4; ++j) {
+ LONG idx = 4 * i + j;
+ SafeArrayPutElement(*pRetVal, &idx, &coords[j]);
+ }
+ }
+ }
+ return S_OK;
+}
+
+// Returns an array of children elements embedded within the range.
+HRESULT QWindowsUiaTextRangeProvider::GetChildren(SAFEARRAY **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ // Not supporting any children.
+ *pRetVal = SafeArrayCreateVector(VT_UNKNOWN, 0, 0);
+ return S_OK;
+}
+
+// Returns a provider for the enclosing element (text to which the range belongs).
+HRESULT QWindowsUiaTextRangeProvider::GetEnclosingElement(IRawElementProviderSimple **pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = QWindowsUiaMainProvider::providerForAccessible(accessible);
+ return S_OK;
+}
+
+// Gets the text within the range.
+HRESULT QWindowsUiaTextRangeProvider::GetText(int maxLength, BSTR *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << maxLength << "this: " << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int len = textInterface->characterCount();
+ QString rangeText;
+ if ((m_startOffset >= 0) && (m_endOffset <= len) && (m_startOffset < m_endOffset))
+ rangeText = textInterface->text(m_startOffset, m_endOffset);
+
+ if ((maxLength > -1) && (rangeText.size() > maxLength))
+ rangeText.truncate(maxLength);
+ *pRetVal = bStrFromQString(rangeText);
+ return S_OK;
+}
+
+// Moves the range a specified number of units (and normalizes it).
+HRESULT QWindowsUiaTextRangeProvider::Move(TextUnit unit, int count, int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << "unit=" << unit << "count=" << count << "this: " << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int len = textInterface->characterCount();
+
+ if (len < 1)
+ return S_OK;
+
+ if (unit == TextUnit_Character) {
+ // Moves the start point, ensuring it lies within the bounds.
+ int start = qBound(0, m_startOffset + count, len - 1);
+ // If range was initially empty, leaves it as is; otherwise, normalizes it to one char.
+ m_endOffset = (m_endOffset > m_startOffset) ? start + 1 : start;
+ *pRetVal = start - m_startOffset; // Returns the actually moved distance.
+ m_startOffset = start;
+ } else {
+ if (count > 0) {
+ MoveEndpointByUnit(TextPatternRangeEndpoint_End, unit, count, pRetVal);
+ MoveEndpointByUnit(TextPatternRangeEndpoint_Start, unit, count, pRetVal);
+ } else {
+ MoveEndpointByUnit(TextPatternRangeEndpoint_Start, unit, count, pRetVal);
+ MoveEndpointByUnit(TextPatternRangeEndpoint_End, unit, count, pRetVal);
+ }
+ }
+ return S_OK;
+}
+
+// Copies the value of an end point from one range to another.
+HRESULT QWindowsUiaTextRangeProvider::MoveEndpointByRange(TextPatternRangeEndpoint endpoint,
+ ITextRangeProvider *targetRange,
+ TextPatternRangeEndpoint targetEndpoint)
+{
+ if (!targetRange)
+ return E_INVALIDARG;
+
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__
+ << "endpoint=" << endpoint << "targetRange=" << targetRange << "targetEndpoint=" << targetEndpoint << "this: " << this;
+
+ QWindowsUiaTextRangeProvider *targetProvider = static_cast<QWindowsUiaTextRangeProvider *>(targetRange);
+
+ int targetPoint = (targetEndpoint == TextPatternRangeEndpoint_Start) ?
+ targetProvider->m_startOffset : targetProvider->m_endOffset;
+
+ // If the moved endpoint crosses the other endpoint, that one is moved too.
+ if (endpoint == TextPatternRangeEndpoint_Start) {
+ m_startOffset = targetPoint;
+ if (m_endOffset < m_startOffset)
+ m_endOffset = m_startOffset;
+ } else {
+ m_endOffset = targetPoint;
+ if (m_endOffset < m_startOffset)
+ m_startOffset = m_endOffset;
+ }
+ return S_OK;
+}
+
+// Moves an endpoint an specific number of units.
+HRESULT QWindowsUiaTextRangeProvider::MoveEndpointByUnit(TextPatternRangeEndpoint endpoint,
+ TextUnit unit, int count,
+ int *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__
+ << "endpoint=" << endpoint << "unit=" << unit << "count=" << count << "this: " << this;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = 0;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int len = textInterface->characterCount();
+
+ if (len < 1)
+ return S_OK;
+
+ if (unit == TextUnit_Character) {
+ if (endpoint == TextPatternRangeEndpoint_Start) {
+ int boundedValue = qBound(0, m_startOffset + count, len - 1);
+ *pRetVal = boundedValue - m_startOffset;
+ m_startOffset = boundedValue;
+ m_endOffset = qBound(m_startOffset, m_endOffset, len);
+ } else {
+ int boundedValue = qBound(0, m_endOffset + count, len);
+ *pRetVal = boundedValue - m_endOffset;
+ m_endOffset = boundedValue;
+ m_startOffset = qBound(0, m_startOffset, m_endOffset);
+ }
+ } else {
+ QString text = textInterface->text(0, len);
+ int moved = 0;
+
+ if (endpoint == TextPatternRangeEndpoint_Start) {
+ if (count > 0) {
+ for (int t = m_startOffset; (t < len - 1) && (moved < count); ++t) {
+ if (isTextUnitSeparator(unit, text[t]) && !isTextUnitSeparator(unit, text[t + 1])) {
+ m_startOffset = t + 1;
+ ++moved;
+ }
+ }
+ m_endOffset = qBound(m_startOffset, m_endOffset, len);
+ } else {
+ for (int t = m_startOffset - 1; (t >= 0) && (moved > count); --t) {
+ if (!isTextUnitSeparator(unit, text[t]) && ((t == 0) || isTextUnitSeparator(unit, text[t - 1]))) {
+ m_startOffset = t;
+ --moved;
+ }
+ }
+ }
+ } else {
+ if (count > 0) {
+ for (int t = m_endOffset; (t < len) && (moved < count); ++t) {
+ if ((t == len - 1) || (isTextUnitSeparator(unit, text[t]) && ((unit == TextUnit_Word) || !isTextUnitSeparator(unit, text[t + 1])))) {
+ m_endOffset = t + 1;
+ ++moved;
+ }
+ }
+ } else {
+ int end = 0;
+ for (int t = m_endOffset - 2; (t > 0) && (moved > count); --t) {
+ if (isTextUnitSeparator(unit, text[t]) && ((unit == TextUnit_Word) || !isTextUnitSeparator(unit, text[t + 1]))) {
+ end = t + 1;
+ --moved;
+ }
+ }
+ m_endOffset = end;
+ m_startOffset = qBound(0, m_startOffset, m_endOffset);
+ }
+ }
+ *pRetVal = moved;
+ }
+ return S_OK;
+}
+
+HRESULT QWindowsUiaTextRangeProvider::RemoveFromSelection()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+ // unselects all
+ return unselect();
+}
+
+// Scrolls the range into view.
+HRESULT QWindowsUiaTextRangeProvider::ScrollIntoView(BOOL alignToTop)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << "alignToTop=" << alignToTop << "this: " << this;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ textInterface->scrollToSubstring(m_startOffset, m_endOffset);
+ return S_OK;
+}
+
+// Selects the range.
+HRESULT QWindowsUiaTextRangeProvider::Select()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // unselects all and adds a new selection
+ unselect();
+ textInterface->addSelection(m_startOffset, m_endOffset);
+ return S_OK;
+}
+
+// Not supported.
+HRESULT QWindowsUiaTextRangeProvider::FindTextW(BSTR /* text */, BOOL /* backward */,
+ BOOL /* ignoreCase */,
+ ITextRangeProvider **pRetVal)
+{
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+ return S_OK;
+}
+
+// Removes all selected ranges from the text element.
+HRESULT QWindowsUiaTextRangeProvider::unselect()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__ << this;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleTextInterface *textInterface = accessible->textInterface();
+ if (!textInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ int selCount = textInterface->selectionCount();
+
+ for (int i = selCount - 1; i >= 0; --i)
+ textInterface->removeSelection(i);
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.h
new file mode 100644
index 0000000000..6fe6502c41
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.h
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIATEXTRANGEPROVIDER_H
+#define QWINDOWSUIATEXTRANGEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Text Range control pattern provider. Used for text controls.
+class QWindowsUiaTextRangeProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<ITextRangeProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaTextRangeProvider)
+public:
+ explicit QWindowsUiaTextRangeProvider(QAccessible::Id id, int startOffset, int endOffset);
+ virtual ~QWindowsUiaTextRangeProvider();
+
+ HRESULT STDMETHODCALLTYPE AddToSelection();
+ HRESULT STDMETHODCALLTYPE Clone(ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE Compare(ITextRangeProvider *range, BOOL *pRetVal);
+ HRESULT STDMETHODCALLTYPE CompareEndpoints(TextPatternRangeEndpoint endpoint, ITextRangeProvider *targetRange, TextPatternRangeEndpoint targetEndpoint, int *pRetVal);
+ HRESULT STDMETHODCALLTYPE ExpandToEnclosingUnit(TextUnit unit);
+ HRESULT STDMETHODCALLTYPE FindAttribute(TEXTATTRIBUTEID attributeId, VARIANT val, BOOL backward, ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE FindText(BSTR text, BOOL backward, BOOL ignoreCase, ITextRangeProvider **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetAttributeValue(TEXTATTRIBUTEID attributeId, VARIANT *pRetVal);
+ HRESULT STDMETHODCALLTYPE GetBoundingRectangles(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetChildren(SAFEARRAY **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetEnclosingElement(IRawElementProviderSimple **pRetVal);
+ HRESULT STDMETHODCALLTYPE GetText(int maxLength, BSTR *pRetVal);
+ HRESULT STDMETHODCALLTYPE Move(TextUnit unit, int count, int *pRetVal);
+ HRESULT STDMETHODCALLTYPE MoveEndpointByRange(TextPatternRangeEndpoint endpoint, ITextRangeProvider *targetRange, TextPatternRangeEndpoint targetEndpoint);
+ HRESULT STDMETHODCALLTYPE MoveEndpointByUnit(TextPatternRangeEndpoint endpoint, TextUnit unit, int count, int *pRetVal);
+ HRESULT STDMETHODCALLTYPE RemoveFromSelection();
+ HRESULT STDMETHODCALLTYPE ScrollIntoView(BOOL alignToTop);
+ HRESULT STDMETHODCALLTYPE Select();
+
+private:
+ HRESULT unselect();
+ int m_startOffset;
+ int m_endOffset;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIATEXTRANGEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.cpp
new file mode 100644
index 0000000000..01cdfd7e91
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.cpp
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiatoggleprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaToggleProvider::QWindowsUiaToggleProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaToggleProvider::~QWindowsUiaToggleProvider()
+{
+}
+
+// toggles the state by invoking the toggle action
+HRESULT STDMETHODCALLTYPE QWindowsUiaToggleProvider::Toggle()
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ QAccessibleActionInterface *actionInterface = accessible->actionInterface();
+ if (!actionInterface)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ actionInterface->doAction(QAccessibleActionInterface::toggleAction());
+ return S_OK;
+}
+
+// Gets the current toggle state.
+HRESULT STDMETHODCALLTYPE QWindowsUiaToggleProvider::get_ToggleState(ToggleState *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = ToggleState_Off;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ if (accessible->state().checked)
+ *pRetVal = accessible->state().checkStateMixed ? ToggleState_Indeterminate : ToggleState_On;
+ else
+ *pRetVal = ToggleState_Off;
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.h
new file mode 100644
index 0000000000..a0df983e40
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatoggleprovider.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIATOGGLEPROVIDER_H
+#define QWINDOWSUIATOGGLEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Toggle control pattern provider. Used for checkboxes.
+class QWindowsUiaToggleProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<IToggleProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaToggleProvider)
+public:
+ explicit QWindowsUiaToggleProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaToggleProvider();
+
+ // IToggleProvider
+ HRESULT STDMETHODCALLTYPE Toggle();
+ HRESULT STDMETHODCALLTYPE get_ToggleState(ToggleState *pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIATOGGLEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
new file mode 100644
index 0000000000..89e5075dcb
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.cpp
@@ -0,0 +1,221 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+#include "qwindowswindow.h"
+
+#include <QtGui/QWindow>
+#include <QtGui/private/qhighdpiscaling_p.h>
+#include <cmath>
+
+QT_BEGIN_NAMESPACE
+
+namespace QWindowsUiAutomation {
+
+// Returns the window containing the element (usually the top window),
+QWindow *windowForAccessible(const QAccessibleInterface *accessible)
+{
+ QWindow *window = accessible->window();
+ if (!window) {
+ QAccessibleInterface *acc = accessible->parent();
+ while (acc && acc->isValid() && !window) {
+ window = acc->window();
+ QAccessibleInterface *par = acc->parent();
+ acc = par;
+ }
+ }
+ return window;
+}
+
+// Returns the native window handle associated with the element, if any.
+// Usually it will be NULL, as Qt5 by default uses alien widgets with no native windows.
+HWND hwndForAccessible(const QAccessibleInterface *accessible)
+{
+ if (QWindow *window = accessible->window()) {
+ if (!accessible->parent() || (accessible->parent()->window() != window)) {
+ return QWindowsBaseWindow::handleOf(window);
+ }
+ }
+ return NULL;
+}
+
+void clearVariant(VARIANT *variant)
+{
+ variant->vt = VT_EMPTY;
+ variant->punkVal = nullptr;
+}
+
+void setVariantI4(int value, VARIANT *variant)
+{
+ variant->vt = VT_I4;
+ variant->lVal = value;
+}
+
+void setVariantBool(bool value, VARIANT *variant)
+{
+ variant->vt = VT_BOOL;
+ variant->boolVal = value ? -1 : 0;
+}
+
+void setVariantDouble(double value, VARIANT *variant)
+{
+ variant->vt = VT_R8;
+ variant->boolVal = value;
+}
+
+BSTR bStrFromQString(const QString &value)
+{
+ return SysAllocString(reinterpret_cast<const wchar_t *>(value.utf16()));
+}
+
+void setVariantString(const QString &value, VARIANT *variant)
+{
+ variant->vt = VT_BSTR;
+ variant->bstrVal = bStrFromQString(value);
+}
+
+// Scales a rect to native coordinates, according to high dpi settings.
+void rectToNativeUiaRect(const QRect &rect, const QWindow *w, UiaRect *uiaRect)
+{
+ if (w && uiaRect) {
+ const qreal factor = QHighDpiScaling::factor(w);
+ uiaRect->left = qreal(rect.x()) * factor;
+ uiaRect->top = qreal(rect.y()) * factor;
+ uiaRect->width = qreal(rect.width()) * factor;
+ uiaRect->height = qreal(rect.height()) * factor;
+ }
+}
+
+// Scales a point from native coordinates, according to high dpi settings.
+void nativeUiaPointToPoint(const UiaPoint &uiaPoint, const QWindow *w, QPoint *point)
+{
+ if (w && point) {
+ const qreal factor = QHighDpiScaling::factor(w);
+ point->setX(int(std::lround(uiaPoint.x / factor)));
+ point->setY(int(std::lround(uiaPoint.y / factor)));
+ }
+}
+
+// Maps an accessibility role ID to an UI Automation control type ID.
+long roleToControlTypeId(QAccessible::Role role)
+{
+ static const QHash<QAccessible::Role, long> mapping {
+ {QAccessible::TitleBar, UIA_TitleBarControlTypeId},
+ {QAccessible::MenuBar, UIA_MenuBarControlTypeId},
+ {QAccessible::ScrollBar, UIA_ScrollBarControlTypeId},
+ {QAccessible::Grip, UIA_ThumbControlTypeId},
+ {QAccessible::Sound, UIA_CustomControlTypeId},
+ {QAccessible::Cursor, UIA_CustomControlTypeId},
+ {QAccessible::Caret, UIA_CustomControlTypeId},
+ {QAccessible::AlertMessage, UIA_CustomControlTypeId},
+ {QAccessible::Window, UIA_WindowControlTypeId},
+ {QAccessible::Client, UIA_CustomControlTypeId},
+ {QAccessible::PopupMenu, UIA_MenuControlTypeId},
+ {QAccessible::MenuItem, UIA_MenuItemControlTypeId},
+ {QAccessible::ToolTip, UIA_ToolTipControlTypeId},
+ {QAccessible::Application, UIA_CustomControlTypeId},
+ {QAccessible::Document, UIA_DocumentControlTypeId},
+ {QAccessible::Pane, UIA_PaneControlTypeId},
+ {QAccessible::Chart, UIA_CustomControlTypeId},
+ {QAccessible::Dialog, UIA_WindowControlTypeId},
+ {QAccessible::Border, UIA_CustomControlTypeId},
+ {QAccessible::Grouping, UIA_GroupControlTypeId},
+ {QAccessible::Separator, UIA_SeparatorControlTypeId},
+ {QAccessible::ToolBar, UIA_ToolBarControlTypeId},
+ {QAccessible::StatusBar, UIA_StatusBarControlTypeId},
+ {QAccessible::Table, UIA_TableControlTypeId},
+ {QAccessible::ColumnHeader, UIA_HeaderControlTypeId},
+ {QAccessible::RowHeader, UIA_HeaderControlTypeId},
+ {QAccessible::Column, UIA_HeaderItemControlTypeId},
+ {QAccessible::Row, UIA_HeaderItemControlTypeId},
+ {QAccessible::Cell, UIA_DataItemControlTypeId},
+ {QAccessible::Link, UIA_HyperlinkControlTypeId},
+ {QAccessible::HelpBalloon, UIA_ToolTipControlTypeId},
+ {QAccessible::Assistant, UIA_CustomControlTypeId},
+ {QAccessible::List, UIA_ListControlTypeId},
+ {QAccessible::ListItem, UIA_ListItemControlTypeId},
+ {QAccessible::Tree, UIA_TreeControlTypeId},
+ {QAccessible::TreeItem, UIA_TreeItemControlTypeId},
+ {QAccessible::PageTab, UIA_TabItemControlTypeId},
+ {QAccessible::PropertyPage, UIA_CustomControlTypeId},
+ {QAccessible::Indicator, UIA_CustomControlTypeId},
+ {QAccessible::Graphic, UIA_ImageControlTypeId},
+ {QAccessible::StaticText, UIA_EditControlTypeId},
+ {QAccessible::EditableText, UIA_EditControlTypeId},
+ {QAccessible::Button, UIA_ButtonControlTypeId},
+ {QAccessible::CheckBox, UIA_CheckBoxControlTypeId},
+ {QAccessible::RadioButton, UIA_RadioButtonControlTypeId},
+ {QAccessible::ComboBox, UIA_ComboBoxControlTypeId},
+ {QAccessible::ProgressBar, UIA_ProgressBarControlTypeId},
+ {QAccessible::Dial, UIA_CustomControlTypeId},
+ {QAccessible::HotkeyField, UIA_CustomControlTypeId},
+ {QAccessible::Slider, UIA_SliderControlTypeId},
+ {QAccessible::SpinBox, UIA_SpinnerControlTypeId},
+ {QAccessible::Canvas, UIA_CustomControlTypeId},
+ {QAccessible::Animation, UIA_CustomControlTypeId},
+ {QAccessible::Equation, UIA_CustomControlTypeId},
+ {QAccessible::ButtonDropDown, UIA_ButtonControlTypeId},
+ {QAccessible::ButtonMenu, UIA_ButtonControlTypeId},
+ {QAccessible::ButtonDropGrid, UIA_ButtonControlTypeId},
+ {QAccessible::Whitespace, UIA_CustomControlTypeId},
+ {QAccessible::PageTabList, UIA_TabControlTypeId},
+ {QAccessible::Clock, UIA_CustomControlTypeId},
+ {QAccessible::Splitter, UIA_CustomControlTypeId},
+ };
+
+ return mapping.value(role, UIA_CustomControlTypeId);
+}
+
+// True if a character can be a separator for a text unit.
+bool isTextUnitSeparator(TextUnit unit, const QChar &ch)
+{
+ return (((unit == TextUnit_Word) || (unit == TextUnit_Format)) && ch.isSpace())
+ || ((unit == TextUnit_Line) && (ch.toLatin1() == '\n'));
+}
+
+} // namespace QWindowsUiAutomation
+
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.h
new file mode 100644
index 0000000000..15f4d6e8ba
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiautils.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAUTILS_H
+#define QWINDOWSUIAUTILS_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include <QtCore/QString>
+#include <QtCore/qt_windows.h>
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtGui/QWindow>
+#include <QtCore/QDebug>
+#include <QtCore/QRect>
+#include <QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QWindowsUiAutomation {
+
+QWindow *windowForAccessible(const QAccessibleInterface *accessible);
+
+HWND hwndForAccessible(const QAccessibleInterface *accessible);
+
+void rectToNativeUiaRect(const QRect &rect, const QWindow *w, UiaRect *uiaRect);
+
+void nativeUiaPointToPoint(const UiaPoint &uiaPoint, const QWindow *w, QPoint *point);
+
+long roleToControlTypeId(QAccessible::Role role);
+
+bool isTextUnitSeparator(TextUnit unit, const QChar &ch);
+
+void clearVariant(VARIANT *variant);
+
+void setVariantI4(int value, VARIANT *variant);
+
+void setVariantBool(bool value, VARIANT *variant);
+
+void setVariantDouble(double value, VARIANT *variant);
+
+BSTR bStrFromQString(const QString &value);
+
+void setVariantString(const QString &value, VARIANT *variant);
+
+} // namespace QWindowsUiAutomation
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAUTILS_H
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.cpp
new file mode 100644
index 0000000000..ef7d564e22
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.cpp
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiavalueprovider.h"
+#include "qwindowsuiautils.h"
+#include "qwindowscontext.h"
+
+#include <QtGui/QAccessible>
+#include <QtGui/QAccessibleInterface>
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+
+QT_BEGIN_NAMESPACE
+
+using namespace QWindowsUiAutomation;
+
+
+QWindowsUiaValueProvider::QWindowsUiaValueProvider(QAccessible::Id id) :
+ QWindowsUiaBaseProvider(id)
+{
+}
+
+QWindowsUiaValueProvider::~QWindowsUiaValueProvider()
+{
+}
+
+// Sets the value associated with the control.
+HRESULT STDMETHODCALLTYPE QWindowsUiaValueProvider::SetValue(LPCWSTR val)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ // First sets the value as a text.
+ QString strVal = QString::fromUtf16(reinterpret_cast<const ushort *>(val));
+ accessible->setText(QAccessible::Value, strVal);
+
+ // Then, if the control supports the value interface (range value)
+ // and the supplied text can be converted to a number, and that number
+ // lies within the min/max limits, sets it as the control's current (numeric) value.
+ if (QAccessibleValueInterface *valueInterface = accessible->valueInterface()) {
+ bool ok = false;
+ double numval = strVal.toDouble(&ok);
+ if (ok) {
+ double minimum = valueInterface->minimumValue().toDouble();
+ double maximum = valueInterface->maximumValue().toDouble();
+ if ((numval >= minimum) && (numval <= maximum)) {
+ valueInterface->setCurrentValue(QVariant(numval));
+ }
+ }
+ }
+ return S_OK;
+}
+
+// True for read-only controls.
+HRESULT STDMETHODCALLTYPE QWindowsUiaValueProvider::get_IsReadOnly(BOOL *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = FALSE;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = accessible->state().readOnly;
+ return S_OK;
+}
+
+// Returns the value in text form.
+HRESULT STDMETHODCALLTYPE QWindowsUiaValueProvider::get_Value(BSTR *pRetVal)
+{
+ qCDebug(lcQpaUiAutomation) << __FUNCTION__;
+
+ if (!pRetVal)
+ return E_INVALIDARG;
+ *pRetVal = nullptr;
+
+ QAccessibleInterface *accessible = accessibleInterface();
+ if (!accessible)
+ return UIA_E_ELEMENTNOTAVAILABLE;
+
+ *pRetVal = bStrFromQString(accessible->text(QAccessible::Value));
+ return S_OK;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.h b/src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.h
new file mode 100644
index 0000000000..db54fc0a46
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiavalueprovider.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSUIAVALUEPROVIDER_H
+#define QWINDOWSUIAVALUEPROVIDER_H
+
+#include <QtCore/QtConfig>
+#ifndef QT_NO_ACCESSIBILITY
+
+#include "qwindowsuiabaseprovider.h"
+
+QT_BEGIN_NAMESPACE
+
+// Implements the Value control pattern provider.
+// Supported for all controls that can return text(QAccessible::Value).
+class QWindowsUiaValueProvider : public QWindowsUiaBaseProvider,
+ public QWindowsComBase<IValueProvider>
+{
+ Q_DISABLE_COPY(QWindowsUiaValueProvider)
+public:
+ explicit QWindowsUiaValueProvider(QAccessible::Id id);
+ virtual ~QWindowsUiaValueProvider();
+
+ // IValueProvider
+ HRESULT STDMETHODCALLTYPE SetValue(LPCWSTR val);
+ HRESULT STDMETHODCALLTYPE get_IsReadOnly(BOOL *pRetVal);
+ HRESULT STDMETHODCALLTYPE get_Value(BSTR *pRetVal);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ACCESSIBILITY
+
+#endif // QWINDOWSUIAVALUEPROVIDER_H
diff --git a/src/plugins/platforms/windows/uiautomation/uiautomation.pri b/src/plugins/platforms/windows/uiautomation/uiautomation.pri
new file mode 100644
index 0000000000..e3071766d9
--- /dev/null
+++ b/src/plugins/platforms/windows/uiautomation/uiautomation.pri
@@ -0,0 +1,43 @@
+qtHaveModule(windowsuiautomation_support-private): \
+ QT += windowsuiautomation_support-private
+
+SOURCES += \
+ $$PWD/qwindowsuiaaccessibility.cpp \
+ $$PWD/qwindowsuiaprovidercache.cpp \
+ $$PWD/qwindowsuiamainprovider.cpp \
+ $$PWD/qwindowsuiabaseprovider.cpp \
+ $$PWD/qwindowsuiavalueprovider.cpp \
+ $$PWD/qwindowsuiatextprovider.cpp \
+ $$PWD/qwindowsuiatextrangeprovider.cpp \
+ $$PWD/qwindowsuiatoggleprovider.cpp \
+ $$PWD/qwindowsuiaselectionprovider.cpp \
+ $$PWD/qwindowsuiaselectionitemprovider.cpp \
+ $$PWD/qwindowsuiainvokeprovider.cpp \
+ $$PWD/qwindowsuiarangevalueprovider.cpp \
+ $$PWD/qwindowsuiatableprovider.cpp \
+ $$PWD/qwindowsuiatableitemprovider.cpp \
+ $$PWD/qwindowsuiagridprovider.cpp \
+ $$PWD/qwindowsuiagriditemprovider.cpp \
+ $$PWD/qwindowsuiautils.cpp
+
+HEADERS += \
+ $$PWD/qwindowsuiaaccessibility.h \
+ $$PWD/qwindowsuiaprovidercache.h \
+ $$PWD/qwindowsuiamainprovider.h \
+ $$PWD/qwindowsuiabaseprovider.h \
+ $$PWD/qwindowsuiavalueprovider.h \
+ $$PWD/qwindowsuiatextprovider.h \
+ $$PWD/qwindowsuiatextrangeprovider.h \
+ $$PWD/qwindowsuiatoggleprovider.h \
+ $$PWD/qwindowsuiaselectionprovider.h \
+ $$PWD/qwindowsuiaselectionitemprovider.h \
+ $$PWD/qwindowsuiainvokeprovider.h \
+ $$PWD/qwindowsuiarangevalueprovider.h \
+ $$PWD/qwindowsuiatableprovider.h \
+ $$PWD/qwindowsuiatableitemprovider.h \
+ $$PWD/qwindowsuiagridprovider.h \
+ $$PWD/qwindowsuiagriditemprovider.h \
+ $$PWD/qwindowsuiautils.h
+
+mingw: LIBS *= -luuid
+
diff --git a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms/windows/windows.pri
index b7790a66e3..f4c396f7c5 100644
--- a/src/plugins/platforms/windows/windows.pri
+++ b/src/plugins/platforms/windows/windows.pri
@@ -53,7 +53,7 @@ HEADERS += \
$$PWD/qwindowsservices.h \
$$PWD/qwindowsnativeinterface.h \
$$PWD/qwindowsopengltester.h \
- $$PWD/qwindowsthreadpoolrunner.h
+ $$PWD/qwindowsthreadpoolrunner.h \
$$PWD/qwin10helpers.h
INCLUDEPATH += $$PWD
@@ -109,7 +109,7 @@ qtConfig(imageformat_png):RESOURCES += $$PWD/cursors.qrc
RESOURCES += $$PWD/openglblacklists.qrc
-qtConfig(accessibility): include($$PWD/accessible/accessible.pri)
+qtConfig(accessibility): include($$PWD/uiautomation/uiautomation.pri)
qtConfig(combined-angle-lib) {
DEFINES *= LIBEGL_NAME=$${LIBQTANGLE_NAME}
diff --git a/src/plugins/platforms/winrt/qwinrtclipboard.cpp b/src/plugins/platforms/winrt/qwinrtclipboard.cpp
index 117cb515df..05c34b82f8 100644
--- a/src/plugins/platforms/winrt/qwinrtclipboard.cpp
+++ b/src/plugins/platforms/winrt/qwinrtclipboard.cpp
@@ -59,7 +59,7 @@ typedef IEventHandler<IInspectable *> ContentChangedHandler;
QT_BEGIN_NAMESPACE
QWinRTClipboard::QWinRTClipboard()
- : m_mimeData(Q_NULLPTR)
+ : m_mimeData(nullptr)
{
QEventDispatcherWinRT::runOnXamlThread([this]() {
HRESULT hr;
diff --git a/src/plugins/platforms/winrt/qwinrtcursor.cpp b/src/plugins/platforms/winrt/qwinrtcursor.cpp
index 28a5f73e6e..3c918df935 100644
--- a/src/plugins/platforms/winrt/qwinrtcursor.cpp
+++ b/src/plugins/platforms/winrt/qwinrtcursor.cpp
@@ -89,7 +89,7 @@ void QWinRTCursor::changeCursor(QCursor *windowCursor, QWindow *window)
switch (windowCursor ? windowCursor->shape() : Qt::ArrowCursor) {
case Qt::BlankCursor:
hr = QEventDispatcherWinRT::runOnXamlThread([coreWindow]() {
- coreWindow->put_PointerCursor(Q_NULLPTR);
+ coreWindow->put_PointerCursor(nullptr);
return S_OK;
});
RETURN_VOID_IF_FAILED("Failed to set blank native cursor");
diff --git a/src/plugins/platforms/winrt/qwinrtdrag.cpp b/src/plugins/platforms/winrt/qwinrtdrag.cpp
index 43c406e1fb..0c918230b3 100644
--- a/src/plugins/platforms/winrt/qwinrtdrag.cpp
+++ b/src/plugins/platforms/winrt/qwinrtdrag.cpp
@@ -104,7 +104,7 @@ class DragThreadTransferData : public QObject
public slots:
void handleDrag();
public:
- explicit DragThreadTransferData(QObject *parent = Q_NULLPTR);
+ explicit DragThreadTransferData(QObject *parent = nullptr);
QWindow *window;
QWinRTInternalMimeData *mime;
QPoint point;
diff --git a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp
index 62eacba89b..3c90334c8c 100644
--- a/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp
+++ b/src/plugins/platforms/winrt/qwinrtfiledialoghelper.cpp
@@ -83,7 +83,7 @@ public:
}
HRESULT __stdcall GetView(IVectorView<HSTRING> **view)
{
- *view = Q_NULLPTR;
+ *view = nullptr;
return E_NOTIMPL;
}
HRESULT __stdcall IndexOf(HSTRING value, quint32 *index, boolean *found)
diff --git a/src/plugins/platforms/winrt/qwinrtfileengine.cpp b/src/plugins/platforms/winrt/qwinrtfileengine.cpp
index f037c516b5..76efdf6cc8 100644
--- a/src/plugins/platforms/winrt/qwinrtfileengine.cpp
+++ b/src/plugins/platforms/winrt/qwinrtfileengine.cpp
@@ -144,7 +144,7 @@ QAbstractFileEngine *QWinRTFileEngineHandler::create(const QString &fileName) co
if (file != d->files.end())
return new QWinRTFileEngine(fileName, file.value().Get());
- return Q_NULLPTR;
+ return nullptr;
}
static HRESULT getDestinationFolder(const QString &fileName, const QString &newFileName,
diff --git a/src/plugins/platforms/winrt/qwinrtscreen.cpp b/src/plugins/platforms/winrt/qwinrtscreen.cpp
index c370c2ec50..e37aeb0bc5 100644
--- a/src/plugins/platforms/winrt/qwinrtscreen.cpp
+++ b/src/plugins/platforms/winrt/qwinrtscreen.cpp
@@ -47,6 +47,7 @@
#endif
#include "qwinrtwindow.h"
#include <private/qeventdispatcher_winrt_p.h>
+#include <private/qhighdpiscaling_p.h>
#include <QtCore/QLoggingCategory>
#include <QtGui/QSurfaceFormat>
@@ -487,7 +488,8 @@ public:
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_PHONE_APP)
QAtomicPointer<QWinRTWindow> mouseGrabWindow;
QAtomicPointer<QWinRTWindow> keyboardGrabWindow;
- QWindow *currentPressWindow = 0;
+ QWindow *currentPressWindow = nullptr;
+ QWindow *currentTargetWindow = nullptr;
};
// To be called from the XAML thread
@@ -497,7 +499,7 @@ QWinRTScreen::QWinRTScreen()
Q_D(QWinRTScreen);
qCDebug(lcQpaWindows) << __FUNCTION__;
d->orientation = Qt::PrimaryOrientation;
- d->touchDevice = Q_NULLPTR;
+ d->touchDevice = nullptr;
HRESULT hr;
ComPtr<Xaml::IWindowStatics> windowStatics;
@@ -540,7 +542,7 @@ QWinRTScreen::QWinRTScreen()
Q_ASSERT_SUCCEEDED(hr);
d->nativeOrientation = static_cast<Qt::ScreenOrientation>(static_cast<int>(qtOrientationsFromNative(displayOrientation)));
// Set initial pixel density
- onDpiChanged(Q_NULLPTR, Q_NULLPTR);
+ onDpiChanged(nullptr, nullptr);
d->orientation = d->nativeOrientation;
ComPtr<IApplicationViewStatics2> applicationViewStatics;
@@ -764,7 +766,7 @@ void QWinRTScreen::initialize()
Q_ASSERT_SUCCEEDED(hr);
hr = d->displayInformation->add_DpiChanged(Callback<DisplayInformationHandler>(this, &QWinRTScreen::onDpiChanged).Get(), &d->displayTokens[&IDisplayInformation::remove_DpiChanged]);
Q_ASSERT_SUCCEEDED(hr);
- onOrientationChanged(Q_NULLPTR, Q_NULLPTR);
+ onOrientationChanged(nullptr, nullptr);
onVisibilityChanged(nullptr, nullptr);
hr = d->redirect->add_PointerRoutedReleased(Callback<RedirectHandler>(this, &QWinRTScreen::onRedirectReleased).Get(), &d->redirectTokens[&ICorePointerRedirector::remove_PointerRoutedReleased]);
@@ -864,7 +866,7 @@ void QWinRTScreen::removeWindow(QWindow *window)
const Qt::WindowType type = window->type();
if (wasTopWindow && type != Qt::Popup && type != Qt::ToolTip && type != Qt::Tool)
- QWindowSystemInterface::handleWindowActivated(Q_NULLPTR, Qt::OtherFocusReason);
+ QWindowSystemInterface::handleWindowActivated(nullptr, Qt::OtherFocusReason);
handleExpose();
QWindowSystemInterface::flushWindowSystemEvents(QEventLoop::ExcludeUserInputEvents);
#ifndef QT_NO_DRAGANDDROP
@@ -1081,11 +1083,11 @@ HRESULT QWinRTScreen::onPointerEntered(ICoreWindow *, IPointerEventArgs *args)
pointerPoint->get_Position(&point);
QPoint pos(point.X * d->scaleFactor, point.Y * d->scaleFactor);
- QWindow *targetWindow = topWindow();
+ d->currentTargetWindow = topWindow();
if (d->mouseGrabWindow)
- targetWindow = d->mouseGrabWindow.load()->window();
+ d->currentTargetWindow = d->mouseGrabWindow.load()->window();
- QWindowSystemInterface::handleEnterEvent(targetWindow, pos, pos);
+ QWindowSystemInterface::handleEnterEvent(d->currentTargetWindow, pos, pos);
}
return S_OK;
}
@@ -1104,11 +1106,11 @@ HRESULT QWinRTScreen::onPointerExited(ICoreWindow *, IPointerEventArgs *args)
d->touchPoints.remove(id);
- QWindow *targetWindow = nullptr;
if (d->mouseGrabWindow)
- targetWindow = d->mouseGrabWindow.load()->window();
+ d->currentTargetWindow = d->mouseGrabWindow.load()->window();
- QWindowSystemInterface::handleLeaveEvent(targetWindow);
+ QWindowSystemInterface::handleLeaveEvent(d->currentTargetWindow);
+ d->currentTargetWindow = nullptr;
return S_OK;
}
@@ -1126,19 +1128,19 @@ HRESULT QWinRTScreen::onPointerUpdated(ICoreWindow *, IPointerEventArgs *args)
// Common traits - point, modifiers, properties
Point point;
pointerPoint->get_Position(&point);
- QPointF pos(point.X * d->scaleFactor, point.Y * d->scaleFactor);
+ const QPointF pos(point.X * d->scaleFactor, point.Y * d->scaleFactor);
QPointF localPos = pos;
const QPoint posPoint = pos.toPoint();
- QWindow *windowUnderPointer = windowAt(posPoint);
- QWindow *targetWindow = windowUnderPointer;
+ QWindow *windowUnderPointer = windowAt(QHighDpiScaling::mapPositionFromNative(posPoint, this));
+ d->currentTargetWindow = windowUnderPointer;
if (d->mouseGrabWindow)
- targetWindow = d->mouseGrabWindow.load()->window();
+ d->currentTargetWindow = d->mouseGrabWindow.load()->window();
- if (targetWindow) {
+ if (d->currentTargetWindow) {
const QPointF globalPosDelta = pos - posPoint;
- localPos = targetWindow->mapFromGlobal(posPoint) + globalPosDelta;
+ localPos = d->currentTargetWindow->mapFromGlobal(posPoint) + globalPosDelta;
}
VirtualKeyModifiers modifiers;
@@ -1173,7 +1175,7 @@ HRESULT QWinRTScreen::onPointerUpdated(ICoreWindow *, IPointerEventArgs *args)
boolean isHorizontal;
properties->get_IsHorizontalMouseWheel(&isHorizontal);
QPoint angleDelta(isHorizontal ? delta : 0, isHorizontal ? 0 : delta);
- QWindowSystemInterface::handleWheelEvent(targetWindow, localPos, pos, QPoint(), angleDelta, mods);
+ QWindowSystemInterface::handleWheelEvent(d->currentTargetWindow, localPos, pos, QPoint(), angleDelta, mods);
break;
}
@@ -1207,15 +1209,22 @@ HRESULT QWinRTScreen::onPointerUpdated(ICoreWindow *, IPointerEventArgs *args)
// menus.
if (buttons != Qt::NoButton && d->currentPressWindow == nullptr && !d->mouseGrabWindow)
d->currentPressWindow = windowUnderPointer;
- if (!isPressed && d->currentPressWindow && d->mouseGrabWindow) {
+ if (buttons == Qt::NoButton && d->currentPressWindow && d->mouseGrabWindow) {
const QPointF globalPosDelta = pos - posPoint;
const QPointF localPressPos = d->currentPressWindow->mapFromGlobal(posPoint) + globalPosDelta;
QWindowSystemInterface::handleMouseEvent(d->currentPressWindow, localPressPos, pos, buttons, mods);
d->currentPressWindow = nullptr;
}
+ // If the mouse button is released outside of a window, targetWindow is 0, but the event
+ // has to be delivered to the window, that initially received the mouse press. Do not reset
+ // d->currentTargetWindow though, as it is used (and reset) in onPointerExited.
+ if (buttons == Qt::NoButton && d->currentPressWindow && !d->currentTargetWindow) {
+ d->currentTargetWindow = d->currentPressWindow;
+ d->currentPressWindow = nullptr;
+ }
- QWindowSystemInterface::handleMouseEvent(targetWindow, localPos, pos, buttons, mods);
+ QWindowSystemInterface::handleMouseEvent(d->currentTargetWindow, localPos, pos, buttons, mods);
break;
}
@@ -1269,7 +1278,7 @@ HRESULT QWinRTScreen::onPointerUpdated(ICoreWindow *, IPointerEventArgs *args)
it.value().normalPosition = QPointF(point.X/d->logicalRect.width(), point.Y/d->logicalRect.height());
it.value().pressure = pressure;
- QWindowSystemInterface::handleTouchEvent(targetWindow, d->touchDevice, d->touchPoints.values(), mods);
+ QWindowSystemInterface::handleTouchEvent(d->currentTargetWindow, d->touchDevice, d->touchPoints.values(), mods);
// Fall-through for pen to generate tablet event
if (pointerDeviceType != PointerDeviceType_Pen)
@@ -1288,7 +1297,7 @@ HRESULT QWinRTScreen::onPointerUpdated(ICoreWindow *, IPointerEventArgs *args)
float rotation;
properties->get_Twist(&rotation);
- QWindowSystemInterface::handleTabletEvent(targetWindow, isPressed, pos, pos, 0,
+ QWindowSystemInterface::handleTabletEvent(d->currentTargetWindow, isPressed, pos, pos, 0,
pointerType, pressure, xTilt, yTilt,
0, rotation, 0, id, mods);
diff --git a/src/plugins/platforms/winrt/qwinrtwindow.h b/src/plugins/platforms/winrt/qwinrtwindow.h
index a8992450b9..9604b4bbaa 100644
--- a/src/plugins/platforms/winrt/qwinrtwindow.h
+++ b/src/plugins/platforms/winrt/qwinrtwindow.h
@@ -70,8 +70,8 @@ public:
qreal devicePixelRatio() const override;
void setWindowState(Qt::WindowStates state) override;
- bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
- bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE;
+ bool setMouseGrabEnabled(bool grab) override;
+ bool setKeyboardGrabEnabled(bool grab) override;
EGLSurface eglSurface() const;
void createEglSurface(EGLDisplay display, EGLConfig config);
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
index 926e5e22df..07e983a499 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
@@ -69,7 +69,7 @@ public:
#endif
virtual QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const = 0;
- virtual QXcbNativeInterfaceHandler *nativeInterfaceHandler() const { return Q_NULLPTR; }
+ virtual QXcbNativeInterfaceHandler *nativeInterfaceHandler() const { return nullptr; }
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
index ac992b859d..e18656c6ec 100644
--- a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
@@ -56,37 +56,37 @@ QXcbNativeInterfaceHandler::~QXcbNativeInterfaceHandler()
QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForIntegration(const QByteArray &resource) const
{
Q_UNUSED(resource);
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForContext(const QByteArray &resource) const
{
Q_UNUSED(resource);
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForScreen(const QByteArray &resource) const
{
Q_UNUSED(resource);
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForWindowFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForWindow(const QByteArray &resource) const
{
Q_UNUSED(resource);
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForBackingStoreFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForBackingStore(const QByteArray &resource) const
{
Q_UNUSED(resource);
- return Q_NULLPTR;
+ return nullptr;
}
QFunctionPointer QXcbNativeInterfaceHandler::platformFunction(const QByteArray &function) const
{
Q_UNUSED(function);
- return Q_NULLPTR;
+ return nullptr;
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
index fe50afa62a..c3ce8d8745 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
@@ -59,6 +59,14 @@ public:
void swapBuffers(QPlatformSurface *surface)
{
QEGLPlatformContext::swapBuffers(surface);
+ if (surface->surface()->surfaceClass() == QSurface::Window) {
+ QXcbWindow *platformWindow = static_cast<QXcbWindow *>(surface);
+ // OpenGL context might be bound to a non-gui thread use QueuedConnection to sync
+ // the window from the platformWindow's thread as QXcbWindow is no QObject, an
+ // event is sent to QXcbConnection. (this is faster than a metacall)
+ if (platformWindow->needsSync())
+ platformWindow->postSyncWindowRequest();
+ }
}
bool makeCurrent(QPlatformSurface *surface)
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
index 7aa1d631df..fe18bc24db 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
@@ -49,7 +49,7 @@
QT_BEGIN_NAMESPACE
QXcbEglIntegration::QXcbEglIntegration()
- : m_connection(Q_NULLPTR)
+ : m_connection(nullptr)
, m_egl_display(EGL_NO_DISPLAY)
{
qCDebug(lcQpaGl) << "Xcb EGL gl-integration created";
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
index 30f5e3a00d..c0e3f820fe 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
@@ -77,7 +77,7 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbEglNativeInte
default:
break;
}
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForContextFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForContext(const QByteArray &resource) const
@@ -90,7 +90,7 @@ QPlatformNativeInterface::NativeResourceForContextFunction QXcbEglNativeInterfac
default:
break;
}
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForWindowFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForWindow(const QByteArray &resource) const
@@ -101,7 +101,7 @@ QPlatformNativeInterface::NativeResourceForWindowFunction QXcbEglNativeInterface
default:
break;
}
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbEglNativeInterfaceHandler::eglDisplay()
@@ -114,11 +114,11 @@ void *QXcbEglNativeInterfaceHandler::eglDisplay()
void *QXcbEglNativeInterfaceHandler::eglDisplayForWindow(QWindow *window)
{
Q_ASSERT(window);
- if (window->supportsOpenGL() && window->handle() == Q_NULLPTR)
+ if (window->supportsOpenGL() && window->handle() == nullptr)
return eglDisplay();
else if (window->supportsOpenGL())
return static_cast<QXcbEglWindow *>(window->handle())->glIntegration()->eglDisplay();
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbEglNativeInterfaceHandler::eglContextForContext(QOpenGLContext *context)
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
index 9c3fd26d49..65beac227c 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
@@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE
QXcbEglWindow::QXcbEglWindow(QWindow *window, QXcbEglIntegration *glIntegration)
: QXcbWindow(window)
, m_glIntegration(glIntegration)
- , m_config(Q_NULLPTR)
+ , m_config(nullptr)
, m_surface(EGL_NO_SURFACE)
{
}
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
index a59dc15b0e..21024385b0 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
@@ -325,7 +325,7 @@ void QGLXContext::init(QXcbScreen *screen, QPlatformOpenGLContext *share)
if (!m_context && m_shareContext) {
// re-try without a shared glx context
m_shareContext = 0;
- m_context = glXCreateContext(m_display, visualInfo, Q_NULLPTR, true);
+ m_context = glXCreateContext(m_display, visualInfo, nullptr, true);
}
// Create a temporary window so that we can make the new context current
@@ -474,7 +474,7 @@ static QXcbScreen *screenForPlatformSurface(QPlatformSurface *surface)
} else if (surfaceClass == QSurface::Offscreen) {
return static_cast<QXcbScreen *>(static_cast<QGLXPbuffer *>(surface)->screen());
}
- return Q_NULLPTR;
+ return nullptr;
}
QVariant QGLXContext::nativeHandle() const
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
index 377066df61..13f03f8bf3 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
@@ -87,7 +87,7 @@ QT_BEGIN_NAMESPACE
#endif
QXcbGlxIntegration::QXcbGlxIntegration()
- : m_connection(Q_NULLPTR)
+ : m_connection(nullptr)
, m_glx_first_event(0)
{
qCDebug(lcQpaGl) << "Xcb GLX gl-integration created";
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
index 638fdd46b5..e9bb4460ff 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
@@ -72,7 +72,7 @@ QPlatformNativeInterface::NativeResourceForContextFunction QXcbGlxNativeInterfac
default:
break;
}
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbGlxNativeInterfaceHandler::glxContextForContext(QOpenGLContext *context)
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
index 05275cd2c9..5e406017ca 100644
--- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
@@ -58,7 +58,7 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual()
{
QXcbScreen *scr = xcbScreen();
if (!scr)
- return Q_NULLPTR;
+ return nullptr;
qCDebug(lcQpaGl) << "Requested format before FBConfig/Visual selection:" << m_format;
@@ -74,7 +74,7 @@ const xcb_visualtype_t *QXcbGlxWindow::createVisual()
XVisualInfo *visualInfo = qglx_findVisualInfo(dpy, scr->screenNumber(), &m_format, GLX_WINDOW_BIT, flags);
if (!visualInfo) {
qWarning() << "No XVisualInfo for format" << m_format;
- return Q_NULLPTR;
+ return nullptr;
}
const xcb_visualtype_t *xcb_visualtype = scr->visualForId(visualInfo->visualid);
XFree(visualInfo);
diff --git a/src/plugins/platforms/xcb/nativepainting/qbackingstore_x11.cpp b/src/plugins/platforms/xcb/nativepainting/qbackingstore_x11.cpp
index bdf78b5255..9b31998620 100644
--- a/src/plugins/platforms/xcb/nativepainting/qbackingstore_x11.cpp
+++ b/src/plugins/platforms/xcb/nativepainting/qbackingstore_x11.cpp
@@ -121,7 +121,7 @@ void QXcbNativeBackingStore::flush(QWindow *window, const QRegion &region, const
else
#endif
{
- GC gc = XCreateGC(display(), wid, 0, Q_NULLPTR);
+ GC gc = XCreateGC(display(), wid, 0, nullptr);
if (clipRects.size() != 1)
XSetClipRectangles(display(), gc, 0, 0, clipRects.data(), clipRects.size(), YXBanded);
@@ -161,7 +161,7 @@ void QXcbNativeBackingStore::resize(const QSize &size, const QRegion &staticCont
QRect br = staticContents.boundingRect().intersected(QRect(QPoint(0, 0), size));
if (!br.isEmpty()) {
- GC gc = XCreateGC(display(), to, 0, Q_NULLPTR);
+ GC gc = XCreateGC(display(), to, 0, nullptr);
XCopyArea(display(), from, to, gc, br.x(), br.y(), br.width(), br.height(), br.x(), br.y());
XFreeGC(display(), gc);
}
@@ -178,7 +178,7 @@ bool QXcbNativeBackingStore::scroll(const QRegion &area, int dx, int dy)
QRect rect = area.boundingRect();
Pixmap pix = qt_x11PixmapHandle(m_pixmap);
- GC gc = XCreateGC(display(), pix, 0, Q_NULLPTR);
+ GC gc = XCreateGC(display(), pix, 0, nullptr);
XCopyArea(display(), pix, pix, gc,
rect.x(), rect.y(), rect.width(), rect.height(),
rect.x()+dx, rect.y()+dy);
diff --git a/src/plugins/platforms/xcb/nativepainting/qpaintengine_x11_p.h b/src/plugins/platforms/xcb/nativepainting/qpaintengine_x11_p.h
index 5338b5fe08..9b01c0a3fc 100644
--- a/src/plugins/platforms/xcb/nativepainting/qpaintengine_x11_p.h
+++ b/src/plugins/platforms/xcb/nativepainting/qpaintengine_x11_p.h
@@ -62,10 +62,10 @@ public:
QX11PaintEngine();
~QX11PaintEngine();
- bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
- bool end() Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *pdev) override;
+ bool end() override;
- void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
+ void updateState(const QPaintEngineState &state) override;
void updatePen(const QPen &pen);
void updateBrush(const QBrush &brush, const QPointF &pt);
@@ -74,31 +74,31 @@ public:
void updateMatrix(const QTransform &matrix);
void updateClipRegion_dev(const QRegion &region, Qt::ClipOperation op);
- void drawLines(const QLine *lines, int lineCount) Q_DECL_OVERRIDE;
- void drawLines(const QLineF *lines, int lineCount) Q_DECL_OVERRIDE;
+ void drawLines(const QLine *lines, int lineCount) override;
+ void drawLines(const QLineF *lines, int lineCount) override;
- void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE;
- void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
+ void drawRects(const QRect *rects, int rectCount) override;
+ void drawRects(const QRectF *rects, int rectCount) override;
- void drawPoints(const QPoint *points, int pointCount) Q_DECL_OVERRIDE;
- void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
+ void drawPoints(const QPoint *points, int pointCount) override;
+ void drawPoints(const QPointF *points, int pointCount) override;
- void drawEllipse(const QRect &r) Q_DECL_OVERRIDE;
- void drawEllipse(const QRectF &r) Q_DECL_OVERRIDE;
+ void drawEllipse(const QRect &r) override;
+ void drawEllipse(const QRectF &r) override;
- virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
- inline void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE
+ virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) override;
+ inline void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) override
{ QPaintEngine::drawPolygon(points, pointCount, mode); }
- void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
- void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) Q_DECL_OVERRIDE;
- void drawPath(const QPainterPath &path) Q_DECL_OVERRIDE;
- void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
+ void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) override;
+ void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) override;
+ void drawPath(const QPainterPath &path) override;
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) override;
void drawImage(const QRectF &r, const QImage &img, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
+ Qt::ImageConversionFlags flags = Qt::AutoColor) override;
virtual Drawable handle() const;
- inline Type type() const Q_DECL_OVERRIDE { return QPaintEngine::X11; }
+ inline Type type() const override { return QPaintEngine::X11; }
QPainter::RenderHints supportedRenderHints() const;
diff --git a/src/plugins/platforms/xcb/nativepainting/qpixmap_x11_p.h b/src/plugins/platforms/xcb/nativepainting/qpixmap_x11_p.h
index 8bff9e0d93..7392cbfccf 100644
--- a/src/plugins/platforms/xcb/nativepainting/qpixmap_x11_p.h
+++ b/src/plugins/platforms/xcb/nativepainting/qpixmap_x11_p.h
@@ -62,22 +62,22 @@ public:
QX11PlatformPixmap(PixelType pixelType);
~QX11PlatformPixmap();
- QPlatformPixmap *createCompatiblePlatformPixmap() const Q_DECL_OVERRIDE;
- void resize(int width, int height) Q_DECL_OVERRIDE;
- void fromImage(const QImage &img, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
- void copy(const QPlatformPixmap *data, const QRect &rect) Q_DECL_OVERRIDE;
- bool scroll(int dx, int dy, const QRect &rect) Q_DECL_OVERRIDE;
- int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- void fill(const QColor &fillColor) Q_DECL_OVERRIDE;
- QBitmap mask() const Q_DECL_OVERRIDE;
- void setMask(const QBitmap &mask) Q_DECL_OVERRIDE;
- bool hasAlphaChannel() const Q_DECL_OVERRIDE;
- QPixmap transformed(const QTransform &matrix, Qt::TransformationMode mode) const Q_DECL_OVERRIDE;
- QImage toImage() const Q_DECL_OVERRIDE;
- QImage toImage(const QRect &rect) const Q_DECL_OVERRIDE;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
- qreal devicePixelRatio() const Q_DECL_OVERRIDE;
- void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE;
+ QPlatformPixmap *createCompatiblePlatformPixmap() const override;
+ void resize(int width, int height) override;
+ void fromImage(const QImage &img, Qt::ImageConversionFlags flags) override;
+ void copy(const QPlatformPixmap *data, const QRect &rect) override;
+ bool scroll(int dx, int dy, const QRect &rect) override;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const override;
+ void fill(const QColor &fillColor) override;
+ QBitmap mask() const override;
+ void setMask(const QBitmap &mask) override;
+ bool hasAlphaChannel() const override;
+ QPixmap transformed(const QTransform &matrix, Qt::TransformationMode mode) const override;
+ QImage toImage() const override;
+ QImage toImage(const QRect &rect) const override;
+ QPaintEngine *paintEngine() const override;
+ qreal devicePixelRatio() const override;
+ void setDevicePixelRatio(qreal scaleFactor) override;
inline Drawable handle() const { return hd; }
inline Picture x11PictureHandle() const { return picture; }
@@ -129,7 +129,7 @@ inline QX11PlatformPixmap *qt_x11Pixmap(const QPixmap &pixmap)
{
return (pixmap.handle() && pixmap.handle()->classId() == QPlatformPixmap::X11Class)
? static_cast<QX11PlatformPixmap *>(pixmap.handle())
- : Q_NULLPTR;
+ : nullptr;
}
inline Picture qt_x11PictureHandle(const QPixmap &pixmap)
diff --git a/src/plugins/platforms/xcb/nativepainting/qxcbnativepainting.cpp b/src/plugins/platforms/xcb/nativepainting/qxcbnativepainting.cpp
index 4a587ceb36..57b1882e4b 100644
--- a/src/plugins/platforms/xcb/nativepainting/qxcbnativepainting.cpp
+++ b/src/plugins/platforms/xcb/nativepainting/qxcbnativepainting.cpp
@@ -44,7 +44,7 @@
QT_BEGIN_NAMESPACE
-QXcbX11Data *qt_x11Data = Q_NULLPTR;
+QXcbX11Data *qt_x11Data = nullptr;
void qt_xcb_native_x11_info_init(QXcbConnection *conn)
{
@@ -111,7 +111,7 @@ void qt_xcb_native_x11_info_init(QXcbConnection *conn)
QVector<XRectangle> qt_region_to_xrectangles(const QRegion &r)
{
const int numRects = r.rectCount();
- const QVector<QRect> input = r.rects();
+ const auto input = r.begin();
QVector<XRectangle> output(numRects);
for (int i = 0; i < numRects; ++i) {
const QRect &in = input[i];
@@ -128,7 +128,7 @@ class QXcbX11InfoData : public QSharedData, public QX11InfoData
{};
QXcbX11Info::QXcbX11Info()
- : d(Q_NULLPTR)
+ : d(nullptr)
{}
QXcbX11Info::~QXcbX11Info()
diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp
index 420d1ac7c5..1cf45c96d1 100644
--- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp
+++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp
@@ -69,6 +69,8 @@ public:
QXcbShmImage(QXcbScreen *connection, const QSize &size, uint depth, QImage::Format format);
~QXcbShmImage() { destroy(); }
+ void flushScrolledRegion(bool clientSideScroll);
+
bool scroll(const QRegion &area, int dx, int dy);
QImage *image() { return &m_qimage; }
@@ -86,7 +88,8 @@ private:
void destroy();
void ensureGC(xcb_drawable_t dst);
- void flushPixmap(const QRegion &region);
+ void shmPutImage(xcb_drawable_t drawable, const QRegion &region, const QPoint &offset = QPoint());
+ void flushPixmap(const QRegion &region, bool fullRegion = false);
void setClip(const QRegion &region);
xcb_shm_segment_info_t m_shm_info;
@@ -99,18 +102,26 @@ private:
xcb_gcontext_t m_gc;
xcb_drawable_t m_gc_drawable;
- // When using shared memory this is the region currently shared with the server
- QRegion m_dirtyShm;
-
+ // When using shared memory these variables are used only for server-side scrolling.
// When not using shared memory, we maintain a server-side pixmap with the backing
// store as well as repainted content not yet flushed to the pixmap. We only flush
// the regions we need and only when these are marked dirty. This way we can just
// do a server-side copy on expose instead of sending the pixels every time
xcb_pixmap_t m_xcb_pixmap;
QRegion m_pendingFlush;
+
+ // This is the scrolled region which is stored in server-side pixmap
+ QRegion m_scrolledRegion;
+
+ // When using shared memory this is the region currently shared with the server
+ QRegion m_dirtyShm;
+
+ // When not using shared memory this is a temporary buffer which is uploaded
+ // as a pixmap region to server
QByteArray m_flushBuffer;
bool m_hasAlpha;
+ bool m_clientSideScroll;
};
class QXcbShmGraphicsBuffer : public QPlatformGraphicsBuffer
@@ -145,10 +156,11 @@ private:
QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QImage::Format format)
: QXcbObject(screen->connection())
- , m_graphics_buffer(Q_NULLPTR)
+ , m_graphics_buffer(nullptr)
, m_gc(0)
, m_gc_drawable(0)
, m_xcb_pixmap(0)
+ , m_clientSideScroll(false)
{
const xcb_format_t *fmt = connection()->formatForDepth(depth);
Q_ASSERT(fmt);
@@ -202,13 +214,59 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, format);
m_graphics_buffer = new QXcbShmGraphicsBuffer(&m_qimage);
- if (!hasShm()) {
- m_xcb_pixmap = xcb_generate_id(xcb_connection());
- xcb_create_pixmap(xcb_connection(),
- m_xcb_image->depth,
- m_xcb_pixmap,
- screen->screen()->root,
- m_xcb_image->width, m_xcb_image->height);
+ m_xcb_pixmap = xcb_generate_id(xcb_connection());
+ xcb_create_pixmap(xcb_connection(),
+ m_xcb_image->depth,
+ m_xcb_pixmap,
+ screen->screen()->root,
+ m_xcb_image->width, m_xcb_image->height);
+}
+
+void QXcbShmImage::flushScrolledRegion(bool clientSideScroll)
+{
+ if (m_clientSideScroll == clientSideScroll)
+ return;
+
+ m_clientSideScroll = clientSideScroll;
+
+ if (m_scrolledRegion.isNull())
+ return;
+
+ if (hasShm() && m_dirtyShm.intersects(m_scrolledRegion)) {
+ connection()->sync();
+ m_dirtyShm = QRegion();
+ }
+
+ if (m_clientSideScroll) {
+ // Copy scrolled image region from server-side pixmap to client-side memory
+ for (const QRect &rect : m_scrolledRegion) {
+ const int w = rect.width();
+ const int h = rect.height();
+
+ auto reply = Q_XCB_REPLY_UNCHECKED(xcb_get_image,
+ xcb_connection(),
+ m_xcb_image->format,
+ m_xcb_pixmap,
+ rect.x(), rect.y(),
+ w, h,
+ ~0u);
+
+ if (reply && reply->depth == m_xcb_image->depth) {
+ const QImage img(xcb_get_image_data(reply.get()), w, h, m_qimage.format());
+
+ QPainter p(&m_qimage);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ p.drawImage(rect.topLeft(), img);
+ }
+ }
+ m_scrolledRegion = QRegion();
+ } else {
+ // Copy scrolled image region from client-side memory to server-side pixmap
+ ensureGC(m_xcb_pixmap);
+ if (hasShm())
+ shmPutImage(m_xcb_pixmap, m_scrolledRegion);
+ else
+ flushPixmap(m_scrolledRegion, true);
}
}
@@ -216,21 +274,28 @@ extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &o
bool QXcbShmImage::scroll(const QRegion &area, int dx, int dy)
{
- if (image()->isNull())
- return false;
+ const QRect bounds(QPoint(), size());
+ const QRegion scrollArea(area & bounds);
+ const QPoint delta(dx, dy);
- if (hasShm())
- preparePaint(area);
+ if (m_clientSideScroll) {
+ if (m_qimage.isNull())
+ return false;
- const QPoint delta(dx, dy);
- for (const QRect &rect : area)
- qt_scrollRectInImage(*image(), rect, delta);
+ if (hasShm())
+ preparePaint(scrollArea);
+
+ for (const QRect &rect : scrollArea)
+ qt_scrollRectInImage(m_qimage, rect, delta);
+ } else {
+ if (hasShm())
+ shmPutImage(m_xcb_pixmap, m_pendingFlush.intersected(scrollArea));
+ else
+ flushPixmap(scrollArea);
- if (m_xcb_pixmap) {
- flushPixmap(area);
ensureGC(m_xcb_pixmap);
- const QRect bounds(QPoint(0, 0), size());
- for (const QRect &src : area) {
+
+ for (const QRect &src : scrollArea) {
const QRect dst = src.translated(delta).intersected(bounds);
xcb_copy_area(xcb_connection(),
m_xcb_pixmap,
@@ -242,6 +307,12 @@ bool QXcbShmImage::scroll(const QRegion &area, int dx, int dy)
}
}
+ m_scrolledRegion |= scrollArea.translated(delta).intersected(bounds);
+ if (hasShm()) {
+ m_pendingFlush -= scrollArea;
+ m_pendingFlush -= m_scrolledRegion;
+ }
+
return true;
}
@@ -265,12 +336,10 @@ void QXcbShmImage::destroy()
if (m_gc)
xcb_free_gc(xcb_connection(), m_gc);
delete m_graphics_buffer;
- m_graphics_buffer = Q_NULLPTR;
+ m_graphics_buffer = nullptr;
- if (m_xcb_pixmap) {
- xcb_free_pixmap(xcb_connection(), m_xcb_pixmap);
- m_xcb_pixmap = 0;
- }
+ xcb_free_pixmap(xcb_connection(), m_xcb_pixmap);
+ m_xcb_pixmap = 0;
}
void QXcbShmImage::ensureGC(xcb_drawable_t dst)
@@ -353,10 +422,35 @@ static inline quint32 round_up_scanline(quint32 base, quint32 pad)
return (base + pad - 1) & -pad;
}
-void QXcbShmImage::flushPixmap(const QRegion &region)
+void QXcbShmImage::shmPutImage(xcb_drawable_t drawable, const QRegion &region, const QPoint &offset)
+{
+ for (const QRect &rect : region) {
+ const QPoint source = rect.translated(offset).topLeft();
+ xcb_shm_put_image(xcb_connection(),
+ drawable,
+ m_gc,
+ m_xcb_image->width,
+ m_xcb_image->height,
+ source.x(), source.y(),
+ rect.width(), rect.height(),
+ rect.x(), rect.y(),
+ m_xcb_image->depth,
+ m_xcb_image->format,
+ 0, // send event?
+ m_shm_info.shmseg,
+ m_xcb_image->data - m_shm_info.shmaddr);
+ }
+ m_dirtyShm |= region.translated(offset);
+}
+
+void QXcbShmImage::flushPixmap(const QRegion &region, bool fullRegion)
{
- const QVector<QRect> rects = m_pendingFlush.intersected(region).rects();
- m_pendingFlush -= region;
+ if (!fullRegion) {
+ auto actualRegion = m_pendingFlush.intersected(region);
+ m_pendingFlush -= region;
+ flushPixmap(actualRegion, true);
+ return;
+ }
xcb_image_t xcb_subimage;
memset(&xcb_subimage, 0, sizeof(xcb_image_t));
@@ -372,7 +466,7 @@ void QXcbShmImage::flushPixmap(const QRegion &region)
const bool needsByteSwap = xcb_subimage.byte_order != m_xcb_image->byte_order;
- for (const QRect &rect : rects) {
+ for (const QRect &rect : region) {
// We must make sure that each request is not larger than max_req_size.
// Each request takes req_size + m_xcb_image->stride * height bytes.
static const uint32_t req_size = sizeof(xcb_put_image_request_t);
@@ -425,16 +519,7 @@ void QXcbShmImage::setClip(const QRegion &region)
static const uint32_t values[] = { XCB_NONE };
xcb_change_gc(xcb_connection(), m_gc, mask, values);
} else {
- const QVector<QRect> qrects = region.rects();
- QVector<xcb_rectangle_t> xcb_rects(qrects.size());
-
- for (int i = 0; i < qrects.size(); i++) {
- xcb_rects[i].x = qrects[i].x();
- xcb_rects[i].y = qrects[i].y();
- xcb_rects[i].width = qrects[i].width();
- xcb_rects[i].height = qrects[i].height();
- }
-
+ const auto xcb_rects = qRegionToXcbRectangleList(region);
xcb_set_clip_rectangles(xcb_connection(),
XCB_CLIP_ORDERING_YX_BANDED,
m_gc,
@@ -445,29 +530,32 @@ void QXcbShmImage::setClip(const QRegion &region)
void QXcbShmImage::put(xcb_drawable_t dst, const QRegion &region, const QPoint &offset)
{
+ Q_ASSERT(!m_clientSideScroll);
+
ensureGC(dst);
setClip(region);
- const QRect bounds = region.boundingRect();
- const QPoint target = bounds.topLeft();
- const QRect source = bounds.translated(offset);
-
if (hasShm()) {
- xcb_shm_put_image(xcb_connection(),
+ // Copy scrolled area on server-side from pixmap to window
+ const QRegion scrolledRegion = m_scrolledRegion.translated(-offset);
+ for (const QRect &rect : scrolledRegion) {
+ const QPoint source = rect.translated(offset).topLeft();
+ xcb_copy_area(xcb_connection(),
+ m_xcb_pixmap,
dst,
m_gc,
- m_xcb_image->width,
- m_xcb_image->height,
source.x(), source.y(),
- source.width(), source.height(),
- target.x(), target.y(),
- m_xcb_image->depth,
- m_xcb_image->format,
- 0, // send event?
- m_shm_info.shmseg,
- m_xcb_image->data - m_shm_info.shmaddr);
- m_dirtyShm |= region.translated(offset);
+ rect.x(), rect.y(),
+ rect.width(), rect.height());
+ }
+
+ // Copy non-scrolled image from client-side memory to server-side window
+ const QRegion notScrolledArea = region - scrolledRegion;
+ shmPutImage(dst, notScrolledArea, offset);
} else {
+ const QRect bounds = region.boundingRect();
+ const QPoint target = bounds.topLeft();
+ const QRect source = bounds.translated(offset);
flushPixmap(region);
xcb_copy_area(xcb_connection(),
m_xcb_pixmap,
@@ -489,9 +577,9 @@ void QXcbShmImage::preparePaint(const QRegion &region)
connection()->sync();
m_dirtyShm = QRegion();
}
- } else {
- m_pendingFlush |= region;
}
+ m_scrolledRegion -= region;
+ m_pendingFlush |= region;
}
QXcbBackingStore::QXcbBackingStore(QWindow *window)
@@ -565,7 +653,7 @@ QImage QXcbBackingStore::toImage() const
QPlatformGraphicsBuffer *QXcbBackingStore::graphicsBuffer() const
{
- return m_image ? m_image->graphicsBuffer() : Q_NULLPTR;
+ return m_image ? m_image->graphicsBuffer() : nullptr;
}
void QXcbBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
@@ -573,6 +661,8 @@ void QXcbBackingStore::flush(QWindow *window, const QRegion &region, const QPoin
if (!m_image || m_image->size().isEmpty())
return;
+ m_image->flushScrolledRegion(false);
+
QSize imageSize = m_image->size();
QRegion clipped = region;
@@ -603,6 +693,11 @@ void QXcbBackingStore::composeAndFlush(QWindow *window, const QRegion &region, c
QPlatformTextureList *textures,
bool translucentBackground)
{
+ if (!m_image || m_image->size().isEmpty())
+ return;
+
+ m_image->flushScrolledRegion(true);
+
QPlatformBackingStore::composeAndFlush(window, region, offset, textures, translucentBackground);
QXcbWindow *platformWindow = static_cast<QXcbWindow *>(window->handle());
diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp
index 30ab669432..b091928e8c 100644
--- a/src/plugins/platforms/xcb/qxcbclipboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp
@@ -899,10 +899,7 @@ xcb_generic_event_t *QXcbClipboard::waitForClipboardEvent(xcb_window_t win, int
connection()->flush();
// sleep 50 ms, so we don't use up CPU cycles all the time.
- struct timeval usleep_tv;
- usleep_tv.tv_sec = 0;
- usleep_tv.tv_usec = 50000;
- select(0, 0, 0, 0, &usleep_tv);
+ QThread::msleep(50);
} while (timer.elapsed() < timeout);
return 0;
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
index 536c709dbe..c5eae20266 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -369,7 +369,7 @@ void QXcbConnection::destroyScreen(QXcbScreen *screen)
// If there are no other screens on the same virtual desktop,
// then transform the physical screen into a fake screen.
const QString nameWas = screen->name();
- screen->setOutput(XCB_NONE, Q_NULLPTR);
+ screen->setOutput(XCB_NONE, nullptr);
qCDebug(lcQpaScreen) << "transformed" << nameWas << "to fake" << screen;
} else {
// There is more than one screen on the same virtual desktop, remove the screen
@@ -395,7 +395,7 @@ void QXcbConnection::initializeScreens()
{
xcb_screen_iterator_t it = xcb_setup_roots_iterator(m_setup);
int xcbScreenNumber = 0; // screen number in the xcb sense
- QXcbScreen *primaryScreen = Q_NULLPTR;
+ QXcbScreen *primaryScreen = nullptr;
while (it.rem) {
// Each "screen" in xcb terminology is a virtual desktop,
// potentially a collection of separate juxtaposed monitors.
@@ -415,7 +415,7 @@ void QXcbConnection::initializeScreens()
qWarning("failed to get the current screen resources");
} else {
xcb_timestamp_t timestamp = 0;
- xcb_randr_output_t *outputs = Q_NULLPTR;
+ xcb_randr_output_t *outputs = nullptr;
int outputCount = xcb_randr_get_screen_resources_current_outputs_length(resources_current.get());
if (outputCount) {
timestamp = resources_current->config_timestamp;
@@ -487,7 +487,7 @@ void QXcbConnection::initializeScreens()
while (it.rem) {
xcb_xinerama_screen_info_t *screen_info = it.data;
QXcbScreen *screen = new QXcbScreen(this, virtualDesktop,
- XCB_NONE, Q_NULLPTR,
+ XCB_NONE, nullptr,
screen_info, it.index);
siblings << screen;
m_screens << screen;
@@ -498,7 +498,7 @@ void QXcbConnection::initializeScreens()
if (siblings.isEmpty()) {
// If there are no XRandR outputs or XRandR extension is missing,
// then create a fake/legacy screen.
- QXcbScreen *screen = new QXcbScreen(this, virtualDesktop, XCB_NONE, Q_NULLPTR);
+ QXcbScreen *screen = new QXcbScreen(this, virtualDesktop, XCB_NONE, nullptr);
qCDebug(lcQpaScreen) << "created fake screen" << screen;
m_screens << screen;
if (m_primaryScreenNumber == xcbScreenNumber) {
@@ -631,7 +631,7 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
if (m_glIntegration && !m_glIntegration->initialize(this)) {
qCDebug(lcQpaGl) << "Failed to initialize xcb gl-integration" << glIntegrationNames.at(i);
delete m_glIntegration;
- m_glIntegration = Q_NULLPTR;
+ m_glIntegration = nullptr;
}
}
if (!m_glIntegration)
@@ -689,7 +689,7 @@ QXcbScreen *QXcbConnection::primaryScreen() const
return m_screens.first();
}
- return Q_NULLPTR;
+ return nullptr;
}
void QXcbConnection::addWindowEventListener(xcb_window_t id, QXcbWindowEventListener *eventListener)
@@ -983,6 +983,12 @@ static Qt::MouseButtons translateMouseButtons(int s)
return ret;
}
+void QXcbConnection::setButtonState(Qt::MouseButton button, bool down)
+{
+ m_buttonState.setFlag(button, down);
+ m_button = button;
+}
+
Qt::MouseButton QXcbConnection::translateMouseButton(xcb_button_t s)
{
switch (s) {
@@ -1055,7 +1061,7 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
// the event explicitly contains the state of the three first buttons,
// the rest we need to manage ourselves
m_buttonState = (m_buttonState & ~0x7) | translateMouseButtons(ev->state);
- m_buttonState |= translateMouseButton(ev->detail);
+ setButtonState(translateMouseButton(ev->detail), true);
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
qCDebug(lcQpaXInputEvents, "legacy mouse press, button %d state %X", ev->detail, static_cast<unsigned int>(m_buttonState));
HANDLE_PLATFORM_WINDOW_EVENT(xcb_button_press_event_t, event, handleButtonPressEvent);
@@ -1064,7 +1070,7 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
xcb_button_release_event_t *ev = (xcb_button_release_event_t *)event;
m_keyboard->updateXKBStateFromCore(ev->state);
m_buttonState = (m_buttonState & ~0x7) | translateMouseButtons(ev->state);
- m_buttonState &= ~translateMouseButton(ev->detail);
+ setButtonState(translateMouseButton(ev->detail), false);
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
qCDebug(lcQpaXInputEvents, "legacy mouse release, button %d state %X", ev->detail, static_cast<unsigned int>(m_buttonState));
HANDLE_PLATFORM_WINDOW_EVENT(xcb_button_release_event_t, event, handleButtonReleaseEvent);
@@ -1413,7 +1419,7 @@ void QXcbConnection::setFocusWindow(QWindow *w)
void QXcbConnection::setMouseGrabber(QXcbWindow *w)
{
m_mouseGrabber = w;
- m_mousePressWindow = Q_NULLPTR;
+ m_mousePressWindow = nullptr;
}
void QXcbConnection::setMousePressWindow(QXcbWindow *w)
{
@@ -2070,7 +2076,8 @@ const xcb_format_t *QXcbConnection::formatForDepth(uint8_t depth) const
xcb_format_next(&iterator);
}
- return 0;
+ qWarning() << "XCB failed to find an xcb_format_t for depth:" << depth;
+ return nullptr;
}
void QXcbConnection::sync()
diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h
index 999dc0630c..07df963ec5 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.h
+++ b/src/plugins/platforms/xcb/qxcbconnection.h
@@ -409,6 +409,15 @@ public:
const xcb_setup_t *setup() const { return m_setup; }
const xcb_format_t *formatForDepth(uint8_t depth) const;
+ bool imageNeedsEndianSwap() const
+ {
+#if Q_BYTE_ORDER == Q_BIG_ENDIAN
+ return m_setup->image_byte_order != XCB_IMAGE_ORDER_MSB_FIRST;
+#else
+ return m_setup->image_byte_order != XCB_IMAGE_ORDER_LSB_FIRST;
+#endif
+ }
+
QXcbKeyboard *keyboard() const { return m_keyboard; }
#ifndef QT_NO_CLIPBOARD
@@ -476,8 +485,9 @@ public:
xcb_window_t getSelectionOwner(xcb_atom_t atom) const;
xcb_window_t getQtSelectionOwner();
- void setButtonState(Qt::MouseButton button, bool down) { m_buttonState.setFlag(button, down); }
+ void setButtonState(Qt::MouseButton button, bool down);
Qt::MouseButtons buttonState() const { return m_buttonState; }
+ Qt::MouseButton button() const { return m_button; }
Qt::MouseButton translateMouseButton(xcb_button_t s);
QXcbWindow *focusWindow() const { return m_focusWindow; }
@@ -513,7 +523,7 @@ public:
void xi2UpdateScrollingDevices();
#endif
#ifdef XCB_USE_XINPUT22
- bool startSystemResizeForTouchBegin(xcb_window_t window, const QPoint &point, Qt::Corner corner);
+ bool startSystemMoveResizeForTouchBegin(xcb_window_t window, const QPoint &point, int corner);
bool isTouchScreen(int id);
#endif
#endif
@@ -666,12 +676,12 @@ private:
#if QT_CONFIG(xinput2)
QHash<int, TouchDeviceData> m_touchDevices;
#ifdef XCB_USE_XINPUT22
- struct StartSystemResizeInfo {
+ struct StartSystemMoveResizeInfo {
xcb_window_t window = XCB_NONE;
uint16_t deviceid;
uint32_t pointid;
- Qt::Corner corner;
- } m_startSystemResizeInfo;
+ int corner;
+ } m_startSystemMoveResizeInfo;
#endif
#endif
WindowMapper m_mapper;
@@ -691,6 +701,7 @@ private:
bool has_render_extension = false;
Qt::MouseButtons m_buttonState = 0;
+ Qt::MouseButton m_button = Qt::NoButton;
QXcbWindow *m_focusWindow = nullptr;
QXcbWindow *m_mouseGrabber = nullptr;
@@ -701,6 +712,7 @@ private:
QXcbSystemTrayTracker *m_systemTrayTracker = nullptr;
QXcbGlIntegration *m_glIntegration = nullptr;
bool m_xiGrab = false;
+ QVector<int> m_xiMasterPointerIds;
xcb_window_t m_qtSelectionOwner = 0;
@@ -746,16 +758,18 @@ private:
#define Q_XCB_REPLY_CONNECTION_ARG(connection, ...) connection
+struct QStdFreeDeleter {
+ void operator()(void *p) const Q_DECL_NOTHROW { return std::free(p); }
+};
+
#define Q_XCB_REPLY(call, ...) \
- std::unique_ptr<call##_reply_t, decltype(std::free) *>( \
- call##_reply(Q_XCB_REPLY_CONNECTION_ARG(__VA_ARGS__), call(__VA_ARGS__), nullptr), \
- std::free \
+ std::unique_ptr<call##_reply_t, QStdFreeDeleter>( \
+ call##_reply(Q_XCB_REPLY_CONNECTION_ARG(__VA_ARGS__), call(__VA_ARGS__), nullptr) \
)
#define Q_XCB_REPLY_UNCHECKED(call, ...) \
- std::unique_ptr<call##_reply_t, decltype(std::free) *>( \
- call##_reply(Q_XCB_REPLY_CONNECTION_ARG(__VA_ARGS__), call##_unchecked(__VA_ARGS__), nullptr), \
- std::free \
+ std::unique_ptr<call##_reply_t, QStdFreeDeleter>( \
+ call##_reply(Q_XCB_REPLY_CONNECTION_ARG(__VA_ARGS__), call##_unchecked(__VA_ARGS__), nullptr) \
)
template <typename T>
diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
index 335ec344d5..39d2857212 100644
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
@@ -52,12 +52,6 @@
void QXcbConnection::initializeXInput2()
{
- // TODO Qt 6 (or perhaps earlier): remove these redundant env variables
- if (qEnvironmentVariableIsSet("QT_XCB_DEBUG_XINPUT"))
- const_cast<QLoggingCategory&>(lcQpaXInput()).setEnabled(QtDebugMsg, true);
- if (qEnvironmentVariableIsSet("QT_XCB_DEBUG_XINPUT_DEVICES"))
- const_cast<QLoggingCategory&>(lcQpaXInputDevices()).setEnabled(QtDebugMsg, true);
-
Display *xDisplay = static_cast<Display *>(m_xlib_display);
if (XQueryExtension(xDisplay, "XInputExtension", &m_xiOpCode, &m_xiEventBase, &m_xiErrorBase)) {
int xiMajor = 2;
@@ -325,12 +319,18 @@ void QXcbConnection::xi2SetupDevices()
Display *xDisplay = static_cast<Display *>(m_xlib_display);
int deviceCount = 0;
XIDeviceInfo *devices = XIQueryDevice(xDisplay, XIAllDevices, &deviceCount);
+ m_xiMasterPointerIds.clear();
for (int i = 0; i < deviceCount; ++i) {
- // Only non-master pointing devices are relevant here.
- if (devices[i].use != XISlavePointer)
+ XIDeviceInfo deviceInfo = devices[i];
+ if (deviceInfo.use == XIMasterPointer) {
+ m_xiMasterPointerIds.append(deviceInfo.deviceid);
continue;
- xi2SetupDevice(&devices[i], false);
+ }
+ if (deviceInfo.use == XISlavePointer) // only slave pointer devices are relevant here
+ xi2SetupDevice(&deviceInfo, false);
}
+ if (m_xiMasterPointerIds.size() > 1)
+ qCDebug(lcQpaXInputDevices) << "multi-pointer X detected";
XIFreeDeviceInfo(devices);
}
@@ -784,15 +784,15 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo
}
if (dev->qtTouchDevice->type() == QTouchDevice::TouchScreen &&
- xiDeviceEvent->event == m_startSystemResizeInfo.window &&
- xiDeviceEvent->sourceid == m_startSystemResizeInfo.deviceid &&
- xiDeviceEvent->detail == m_startSystemResizeInfo.pointid) {
- QXcbWindow *window = platformWindowFromId(m_startSystemResizeInfo.window);
+ xiDeviceEvent->event == m_startSystemMoveResizeInfo.window &&
+ xiDeviceEvent->sourceid == m_startSystemMoveResizeInfo.deviceid &&
+ xiDeviceEvent->detail == m_startSystemMoveResizeInfo.pointid) {
+ QXcbWindow *window = platformWindowFromId(m_startSystemMoveResizeInfo.window);
if (window) {
XIAllowTouchEvents(static_cast<Display *>(m_xlib_display), xiDeviceEvent->deviceid,
xiDeviceEvent->detail, xiDeviceEvent->event, XIRejectTouch);
- window->doStartSystemResize(QPoint(x, y), m_startSystemResizeInfo.corner);
- m_startSystemResizeInfo.window = XCB_NONE;
+ window->doStartSystemMoveResize(QPoint(x, y), m_startSystemMoveResizeInfo.corner);
+ m_startSystemMoveResizeInfo.window = XCB_NONE;
}
}
break;
@@ -825,7 +825,7 @@ void QXcbConnection::xi2ProcessTouch(void *xiDevEvent, QXcbWindow *platformWindo
touchPoint.state = Qt::TouchPointStationary;
}
-bool QXcbConnection::startSystemResizeForTouchBegin(xcb_window_t window, const QPoint &point, Qt::Corner corner)
+bool QXcbConnection::startSystemMoveResizeForTouchBegin(xcb_window_t window, const QPoint &point, int corner)
{
QHash<int, TouchDeviceData>::const_iterator devIt = m_touchDevices.constBegin();
for (; devIt != m_touchDevices.constEnd(); ++devIt) {
@@ -834,10 +834,10 @@ bool QXcbConnection::startSystemResizeForTouchBegin(xcb_window_t window, const Q
QHash<int, QPointF>::const_iterator pointIt = deviceData.pointPressedPosition.constBegin();
for (; pointIt != deviceData.pointPressedPosition.constEnd(); ++pointIt) {
if (pointIt.value().toPoint() == point) {
- m_startSystemResizeInfo.window = window;
- m_startSystemResizeInfo.deviceid = devIt.key();
- m_startSystemResizeInfo.pointid = pointIt.key();
- m_startSystemResizeInfo.corner = corner;
+ m_startSystemMoveResizeInfo.window = window;
+ m_startSystemMoveResizeInfo.deviceid = devIt.key();
+ m_startSystemMoveResizeInfo.pointid = pointIt.key();
+ m_startSystemMoveResizeInfo.corner = corner;
return true;
}
}
@@ -849,62 +849,54 @@ bool QXcbConnection::startSystemResizeForTouchBegin(xcb_window_t window, const Q
bool QXcbConnection::xi2SetMouseGrabEnabled(xcb_window_t w, bool grab)
{
- if (grab && !canGrab())
- return false;
-
- int num_devices = 0;
Display *xDisplay = static_cast<Display *>(xlib_display());
- XIDeviceInfo *info = XIQueryDevice(xDisplay, XIAllMasterDevices, &num_devices);
- if (!info)
- return false;
-
- XIEventMask evmask;
- unsigned char mask[XIMaskLen(XI_LASTEVENT)];
- evmask.mask = mask;
- evmask.mask_len = sizeof(mask);
- memset(mask, 0, sizeof(mask));
- evmask.deviceid = XIAllMasterDevices;
-
- XISetMask(mask, XI_ButtonPress);
- XISetMask(mask, XI_ButtonRelease);
- XISetMask(mask, XI_Motion);
- XISetMask(mask, XI_Enter);
- XISetMask(mask, XI_Leave);
- XISetMask(mask, XI_TouchBegin);
- XISetMask(mask, XI_TouchUpdate);
- XISetMask(mask, XI_TouchEnd);
-
- bool grabbed = true;
- for (int i = 0; i < num_devices; i++) {
- int id = info[i].deviceid, n = 0;
- XIDeviceInfo *deviceInfo = XIQueryDevice(xDisplay, id, &n);
- if (deviceInfo) {
- const bool grabbable = deviceInfo->use != XIMasterKeyboard;
- XIFreeDeviceInfo(deviceInfo);
- if (!grabbable)
- continue;
- }
- if (!grab) {
- Status result = XIUngrabDevice(xDisplay, id, CurrentTime);
- if (result != Success) {
- grabbed = false;
- qCDebug(lcQpaXInput, "XInput 2.2: failed to ungrab events for device %d (result %d)", id, result);
- }
- } else {
- Status result = XIGrabDevice(xDisplay, id, w, CurrentTime, None, XIGrabModeAsync,
- XIGrabModeAsync, False, &evmask);
+ bool ok = false;
+
+ if (grab) { // grab
+ XIEventMask evmask;
+ unsigned char mask[XIMaskLen(XI_LASTEVENT)];
+ evmask.mask = mask;
+ evmask.mask_len = sizeof(mask);
+ memset(mask, 0, sizeof(mask));
+ XISetMask(mask, XI_ButtonPress);
+ XISetMask(mask, XI_ButtonRelease);
+ XISetMask(mask, XI_Motion);
+ XISetMask(mask, XI_Enter);
+ XISetMask(mask, XI_Leave);
+ XISetMask(mask, XI_TouchBegin);
+ XISetMask(mask, XI_TouchUpdate);
+ XISetMask(mask, XI_TouchEnd);
+
+ for (int id : m_xiMasterPointerIds) {
+ evmask.deviceid = id;
+ Status result = XIGrabDevice(xDisplay, id, w, CurrentTime, None,
+ XIGrabModeAsync, XIGrabModeAsync, False, &evmask);
if (result != Success) {
- grabbed = false;
- qCDebug(lcQpaXInput, "XInput 2.2: failed to grab events for device %d on window %x (result %d)", id, w, result);
+ qCDebug(lcQpaXInput, "failed to grab events for device %d on window %x"
+ "(result %d)", id, w, result);
+ } else {
+ // Managed to grab at least one of master pointers, that should be enough
+ // to properly dismiss windows that rely on mouse grabbing.
+ ok = true;
}
}
+ } else { // ungrab
+ for (int id : m_xiMasterPointerIds) {
+ Status result = XIUngrabDevice(xDisplay, id, CurrentTime);
+ if (result != Success)
+ qCDebug(lcQpaXInput, "XIUngrabDevice failed - id: %d (result %d)", id, result);
+ }
+ // XIUngrabDevice does not seem to wait for a reply from X server (similar to
+ // xcb_ungrab_pointer). Ungrabbing won't fail, unless NoSuchExtension error
+ // has occurred due to a programming error somewhere else in the stack. That
+ // would mean that things will crash soon anyway.
+ ok = true;
}
- XIFreeDeviceInfo(info);
-
- m_xiGrab = grabbed;
+ if (ok)
+ m_xiGrab = grab;
- return grabbed;
+ return ok;
}
void QXcbConnection::xi2HandleHierarchyEvent(void *event)
@@ -1342,7 +1334,7 @@ QXcbConnection::TabletData *QXcbConnection::tabletDataForDevice(int id)
if (m_tabletData.at(i).deviceId == id)
return &m_tabletData[i];
}
- return Q_NULLPTR;
+ return nullptr;
}
#endif // QT_CONFIG(tabletevent)
diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp
index da63360333..34b7d0d236 100644
--- a/src/plugins/platforms/xcb/qxcbcursor.cpp
+++ b/src/plugins/platforms/xcb/qxcbcursor.cpp
@@ -255,29 +255,29 @@ static const uint8_t * const cursor_bits20[] = {
forbidden_bits, forbiddenm_bits
};
-static const char * const cursorNames[] = {
- "left_ptr",
- "up_arrow",
- "cross",
- "wait",
- "ibeam",
- "size_ver",
- "size_hor",
- "size_bdiag",
- "size_fdiag",
- "size_all",
- "blank",
- "split_v",
- "split_h",
- "pointing_hand",
- "forbidden",
- "whats_this",
- "left_ptr_watch",
- "openhand",
- "closedhand",
- "copy",
- "move",
- "link"
+static const std::vector<const char *> cursorNames[] = {
+ { "left_ptr", "default", "top_left_arrow", "left_arrow" },
+ { "up_arrow" },
+ { "cross" },
+ { "wait", "watch", "0426c94ea35c87780ff01dc239897213" },
+ { "ibeam", "text", "xterm" },
+ { "size_ver", "ns-resize", "v_double_arrow", "00008160000006810000408080010102" },
+ { "size_hor", "ew-resize", "h_double_arrow", "028006030e0e7ebffc7f7070c0600140" },
+ { "size_bdiag", "nesw-resize", "50585d75b494802d0151028115016902", "fcf1c3c7cd4491d801f1e1c78f100000" },
+ { "size_fdiag", "nwse-resize", "38c5dff7c7b8962045400281044508d2", "c7088f0f3e6c8088236ef8e1e3e70000" },
+ { "size_all" },
+ { "blank" },
+ { "split_v", "row-resize", "sb_v_double_arrow", "2870a09082c103050810ffdffffe0204", "c07385c7190e701020ff7ffffd08103c" },
+ { "split_h", "col-resize", "sb_h_double_arrow", "043a9f68147c53184671403ffa811cc5", "14fef782d02440884392942c11205230" },
+ { "pointing_hand", "pointer", "hand1", "e29285e634086352946a0e7090d73106" },
+ { "forbidden", "not-allowed", "crossed_circle", "circle", "03b6e0fcb3499374a867c041f52298f0" },
+ { "whats_this", "help", "question_arrow", "5c6cd98b3f3ebcb1f9c7f1c204630408", "d9ce0ab605698f320427677b458ad60b" },
+ { "left_ptr_watch", "half-busy", "progress", "00000000000000020006000e7e9ffc3f", "08e8e1c95fe2fc01f976f1e063a24ccd" },
+ { "openhand", "fleur", "5aca4d189052212118709018842178c0", "9d800788f1b08800ae810202380a0822" },
+ { "closedhand", "grabbing", "208530c400c041818281048008011002" },
+ { "dnd-copy", "copy" },
+ { "dnd-move", "move" },
+ { "dnd-link", "link" }
};
QXcbCursorCacheKey::QXcbCursorCacheKey(const QCursor &c)
@@ -535,22 +535,13 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape)
xcb_cursor_t cursor = XCB_NONE;
if (!ptrXcursorLibraryLoadCursor || !dpy)
return cursor;
- switch (cshape) {
- case Qt::DragCopyCursor:
- cursor = ptrXcursorLibraryLoadCursor(dpy, "dnd-copy");
- break;
- case Qt::DragMoveCursor:
- cursor = ptrXcursorLibraryLoadCursor(dpy, "dnd-move");
- break;
- case Qt::DragLinkCursor:
- cursor = ptrXcursorLibraryLoadCursor(dpy, "dnd-link");
- break;
- default:
- break;
- }
- if (!cursor) {
- cursor = ptrXcursorLibraryLoadCursor(dpy, cursorNames[cshape]);
+
+ for (const char *cursorName: cursorNames[cshape]) {
+ cursor = ptrXcursorLibraryLoadCursor(dpy, cursorName);
+ if (cursor != XCB_NONE)
+ break;
}
+
return cursor;
}
#endif // QT_CONFIG(xcb_xlib) / QT_CONFIG(library)
@@ -565,7 +556,6 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape)
#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library)
if (cshape >= 0 && cshape <= Qt::LastCursor) {
void *dpy = connection()->xlib_display();
- // special case for non-standard dnd-* cursors
cursor = loadCursor(dpy, cshape);
if (!cursor && !m_gtkCursorThemeInitialized && m_screen->xSettings()->initialized()) {
QByteArray gtkCursorTheme = m_screen->xSettings()->setting("Gtk/CursorThemeName").toByteArray();
@@ -598,7 +588,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape)
}
if (cursor && cshape >= 0 && cshape < Qt::LastCursor && connection()->hasXFixes()) {
- const char *name = cursorNames[cshape];
+ const char *name = cursorNames[cshape].front();
xcb_xfixes_set_cursor_name(conn, cursor, strlen(name), name);
}
@@ -660,7 +650,7 @@ QPoint QXcbCursor::pos() const
void QXcbCursor::setPos(const QPoint &pos)
{
- QXcbVirtualDesktop *virtualDesktop = Q_NULLPTR;
+ QXcbVirtualDesktop *virtualDesktop = nullptr;
queryPointer(connection(), &virtualDesktop, 0);
xcb_warp_pointer(xcb_connection(), XCB_NONE, virtualDesktop->root(), 0, 0, 0, 0, pos.x(), pos.y());
xcb_flush(xcb_connection());
diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp
index 1e963268ef..8ea0ebf966 100644
--- a/src/plugins/platforms/xcb/qxcbdrag.cpp
+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp
@@ -211,7 +211,7 @@ void QXcbDrag::startDrag()
setScreen(current_virtual_desktop->screens().constFirst()->screen());
initiatorWindow = QGuiApplicationPrivate::currentMouseWindow;
QBasicDrag::startDrag();
- if (connection()->mouseGrabber() == Q_NULLPTR)
+ if (connection()->mouseGrabber() == nullptr)
shapedPixmapWindow()->setMouseGrabEnabled(true);
}
@@ -315,7 +315,7 @@ void QXcbDrag::move(const QPoint &globalPos)
if (source_sameanswer.contains(globalPos) && source_sameanswer.isValid())
return;
- QXcbVirtualDesktop *virtualDesktop = Q_NULLPTR;
+ QXcbVirtualDesktop *virtualDesktop = nullptr;
QPoint cursorPos;
QXcbCursor::queryPointer(connection(), &virtualDesktop, &cursorPos);
QXcbScreen *screen = virtualDesktop->screenAt(cursorPos);
@@ -324,7 +324,7 @@ void QXcbDrag::move(const QPoint &globalPos)
if (virtualDesktop != current_virtual_desktop) {
setUseCompositing(virtualDesktop->compositingActive());
recreateShapedPixmapWindow(static_cast<QPlatformScreen*>(screen)->screen(), deviceIndependentPos);
- if (connection()->mouseGrabber() == Q_NULLPTR)
+ if (connection()->mouseGrabber() == nullptr)
shapedPixmapWindow()->setMouseGrabEnabled(true);
current_virtual_desktop = virtualDesktop;
diff --git a/src/plugins/platforms/xcb/qxcbimage.cpp b/src/plugins/platforms/xcb/qxcbimage.cpp
index 36536e0602..e18a08755b 100644
--- a/src/plugins/platforms/xcb/qxcbimage.cpp
+++ b/src/plugins/platforms/xcb/qxcbimage.cpp
@@ -38,6 +38,7 @@
****************************************************************************/
#include "qxcbimage.h"
+#include <QtCore/QtEndian>
#include <QtGui/QColor>
#include <QtGui/private/qimage_p.h>
#include <QtGui/private/qdrawhelper_p.h>
@@ -52,47 +53,108 @@ extern "C" {
#undef template
#endif
+#include "qxcbconnection.h"
+#include "qxcbintegration.h"
+
+namespace {
+
+QImage::Format imageFormatForMasks(int depth, int bits_per_pixel, int red_mask, int blue_mask)
+{
+ if (bits_per_pixel == 32) {
+ switch (depth) {
+ case 32:
+ if (red_mask == 0xff0000 && blue_mask == 0xff)
+ return QImage::Format_ARGB32_Premultiplied;
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ if (red_mask == 0xff && blue_mask == 0xff0000)
+ return QImage::Format_RGBA8888_Premultiplied;
+#else
+ if (red_mask == 0xff000000 && blue_mask == 0xff00)
+ return QImage::Format_RGBA8888_Premultiplied;
+#endif
+ if (red_mask == 0x3ff && blue_mask == 0x3ff00000)
+ return QImage::Format_A2BGR30_Premultiplied;
+ if (red_mask == 0x3ff00000 && blue_mask == 0x3ff)
+ return QImage::Format_A2RGB30_Premultiplied;
+ break;
+ case 30:
+ if (red_mask == 0x3ff && blue_mask == 0x3ff00000)
+ return QImage::Format_BGR30;
+ if (blue_mask == 0x3ff && red_mask == 0x3ff00000)
+ return QImage::Format_RGB30;
+ break;
+ case 24:
+ if (red_mask == 0xff0000 && blue_mask == 0xff)
+ return QImage::Format_RGB32;
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ if (red_mask == 0xff && blue_mask == 0xff0000)
+ return QImage::Format_RGBX8888;
+#else
+ if (red_mask == 0xff000000 && blue_mask == 0xff00)
+ return QImage::Format_RGBX8888;
+#endif
+ break;
+ }
+ } else if (bits_per_pixel == 16) {
+ if (depth == 16 && red_mask == 0xf800 && blue_mask == 0x1f)
+ return QImage::Format_RGB16;
+ if (depth == 15 && red_mask == 0x7c00 && blue_mask == 0x1f)
+ return QImage::Format_RGB555;
+ }
+ return QImage::Format_Invalid;
+}
+
+} // namespace
+
QT_BEGIN_NAMESPACE
-QImage::Format qt_xcb_imageFormatForVisual(QXcbConnection *connection, uint8_t depth,
- const xcb_visualtype_t *visual)
+bool qt_xcb_imageFormatForVisual(QXcbConnection *connection, uint8_t depth, const xcb_visualtype_t *visual,
+ QImage::Format *imageFormat, bool *needsRgbSwap)
{
+ Q_ASSERT(connection && visual && imageFormat);
+
+ if (needsRgbSwap)
+ *needsRgbSwap = false;
+ *imageFormat = QImage::Format_Invalid;
+
+ if (depth == 8) {
+ if (visual->_class == XCB_VISUAL_CLASS_GRAY_SCALE) {
+ *imageFormat = QImage::Format_Grayscale8;
+ return true;
+ }
+#if QT_CONFIG(xcb_native_painting)
+ if (QXcbIntegration::instance() && QXcbIntegration::instance()->nativePaintingEnabled()) {
+ *imageFormat = QImage::Format_Indexed8;
+ return true;
+ }
+#endif
+ return false;
+ }
+
const xcb_format_t *format = connection->formatForDepth(depth);
+ if (!format)
+ return false;
+
+ const bool connectionEndianSwap = connection->imageNeedsEndianSwap();
+ // We swap the masks and see if we can recognize it as a host format
+ const quint32 red_mask = connectionEndianSwap ? qbswap(visual->red_mask) : visual->red_mask;
+ const quint32 blue_mask = connectionEndianSwap ? qbswap(visual->blue_mask) : visual->blue_mask;
- if (!visual || !format)
- return QImage::Format_Invalid;
-
- if (depth == 32 && format->bits_per_pixel == 32 && visual->red_mask == 0xff0000
- && visual->green_mask == 0xff00 && visual->blue_mask == 0xff)
- return QImage::Format_ARGB32_Premultiplied;
-
- if (depth == 30 && format->bits_per_pixel == 32 && visual->red_mask == 0x3ff
- && visual->green_mask == 0x0ffc00 && visual->blue_mask == 0x3ff00000)
- return QImage::Format_BGR30;
-
- if (depth == 30 && format->bits_per_pixel == 32 && visual->blue_mask == 0x3ff
- && visual->green_mask == 0x0ffc00 && visual->red_mask == 0x3ff00000)
- return QImage::Format_RGB30;
-
- if (depth == 24 && format->bits_per_pixel == 32 && visual->red_mask == 0xff0000
- && visual->green_mask == 0xff00 && visual->blue_mask == 0xff)
- return QImage::Format_RGB32;
-
- if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
- if (depth == 24 && format->bits_per_pixel == 32 && visual->blue_mask == 0xff0000
- && visual->green_mask == 0xff00 && visual->red_mask == 0xff)
- return QImage::Format_RGBX8888;
- } else {
- if (depth == 24 && format->bits_per_pixel == 32 && visual->blue_mask == 0xff00
- && visual->green_mask == 0xff0000 && visual->red_mask == 0xff000000)
- return QImage::Format_RGBX8888;
+ *imageFormat = imageFormatForMasks(depth, format->bits_per_pixel, red_mask, blue_mask);
+ if (*imageFormat != QImage::Format_Invalid)
+ return true;
+
+ if (needsRgbSwap) {
+ *imageFormat = imageFormatForMasks(depth, format->bits_per_pixel, blue_mask, red_mask);
+ if (*imageFormat != QImage::Format_Invalid) {
+ *needsRgbSwap = true;
+ return true;
+ }
}
- if (depth == 16 && format->bits_per_pixel == 16 && visual->red_mask == 0xf800
- && visual->green_mask == 0x7e0 && visual->blue_mask == 0x1f)
- return QImage::Format_RGB16;
+ qWarning("Unsupported screen format: depth: %d, bits_per_pixel: %d, red_mask: %x, blue_mask: %x", depth, format->bits_per_pixel, red_mask, blue_mask);
- return QImage::Format_Invalid;
+ return false;
}
QPixmap qt_xcb_pixmapFromXPixmap(QXcbConnection *connection, xcb_pixmap_t pixmap,
@@ -112,44 +174,14 @@ QPixmap qt_xcb_pixmapFromXPixmap(QXcbConnection *connection, xcb_pixmap_t pixmap
QPixmap result;
- QImage::Format format = qt_xcb_imageFormatForVisual(connection, depth, visual);
- if (format != QImage::Format_Invalid) {
+ QImage::Format format;
+ bool needsRgbSwap;
+ if (qt_xcb_imageFormatForVisual(connection, depth, visual, &format, &needsRgbSwap)) {
uint32_t bytes_per_line = length / height;
QImage image(const_cast<uint8_t *>(data), width, height, bytes_per_line, format);
- uint8_t image_byte_order = connection->setup()->image_byte_order;
-
- // we may have to swap the byte order
- if ((QSysInfo::ByteOrder == QSysInfo::LittleEndian && image_byte_order == XCB_IMAGE_ORDER_MSB_FIRST)
- || (QSysInfo::ByteOrder == QSysInfo::BigEndian && image_byte_order == XCB_IMAGE_ORDER_LSB_FIRST))
- {
- for (int i=0; i < image.height(); i++) {
- switch (format) {
- case QImage::Format_RGB16: {
- ushort *p = (ushort*)image.scanLine(i);
- ushort *end = p + image.width();
- while (p < end) {
- *p = ((*p << 8) & 0xff00) | ((*p >> 8) & 0x00ff);
- p++;
- }
- break;
- }
- case QImage::Format_RGB32:
- case QImage::Format_ARGB32_Premultiplied:
- case QImage::Format_RGBX8888: {
- uint *p = (uint*)image.scanLine(i);
- uint *end = p + image.width();
- while (p < end) {
- *p = ((*p << 24) & 0xff000000) | ((*p << 8) & 0x00ff0000)
- | ((*p >> 8) & 0x0000ff00) | ((*p >> 24) & 0x000000ff);
- p++;
- }
- break;
- }
- default:
- Q_ASSERT(false);
- }
- }
- }
+
+ if (needsRgbSwap)
+ image = std::move(image).rgbSwapped();
// fix-up alpha channel
if (format == QImage::Format_RGB32 || format == QImage::Format_RGBX8888) {
diff --git a/src/plugins/platforms/xcb/qxcbimage.h b/src/plugins/platforms/xcb/qxcbimage.h
index a9071a45de..d718089ec2 100644
--- a/src/plugins/platforms/xcb/qxcbimage.h
+++ b/src/plugins/platforms/xcb/qxcbimage.h
@@ -48,8 +48,8 @@
QT_BEGIN_NAMESPACE
-QImage::Format qt_xcb_imageFormatForVisual(QXcbConnection *connection,
- uint8_t depth, const xcb_visualtype_t *visual);
+bool qt_xcb_imageFormatForVisual(QXcbConnection *connection, uint8_t depth, const xcb_visualtype_t *visual,
+ QImage::Format *imageFormat, bool *needsRgbSwap = nullptr);
QPixmap qt_xcb_pixmapFromXPixmap(QXcbConnection *connection, xcb_pixmap_t pixmap,
int width, int height, int depth,
const xcb_visualtype_t *visual);
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index 10f3000dd2..471287eb44 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -121,7 +121,7 @@ static bool runningUnderDebugger()
#endif
}
-QXcbIntegration *QXcbIntegration::m_instance = Q_NULLPTR;
+QXcbIntegration *QXcbIntegration::m_instance = nullptr;
QXcbIntegration::QXcbIntegration(const QStringList &parameters, int &argc, char **argv)
: m_services(new QGenericUnixServices)
@@ -222,7 +222,7 @@ QXcbIntegration::QXcbIntegration(const QStringList &parameters, int &argc, char
QXcbIntegration::~QXcbIntegration()
{
qDeleteAll(m_connections);
- m_instance = Q_NULLPTR;
+ m_instance = nullptr;
}
QPlatformPixmap *QXcbIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const
@@ -274,7 +274,7 @@ QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLCont
QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
if (!glIntegration) {
qWarning("QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled");
- return Q_NULLPTR;
+ return nullptr;
}
return glIntegration->createPlatformOpenGLContext(context);
}
@@ -296,7 +296,7 @@ QPlatformOffscreenSurface *QXcbIntegration::createPlatformOffscreenSurface(QOffs
QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
if (!glIntegration) {
qWarning("QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled");
- return Q_NULLPTR;
+ return nullptr;
}
return glIntegration->createPlatformOffscreenSurface(surface);
}
diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.cpp b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
index e24bd07b6f..2ed66394c9 100644
--- a/src/plugins/platforms/xcb/qxcbkeyboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbkeyboard.cpp
@@ -59,18 +59,85 @@
#undef KeyRelease
#endif
+#if QT_CONFIG(xcb_xlib)
+#include <X11/Xutil.h>
+#undef KeyPress
+#undef KeyRelease
+#endif
+
#ifndef XK_ISO_Left_Tab
#define XK_ISO_Left_Tab 0xFE20
#endif
-#ifndef XK_dead_hook
-#define XK_dead_hook 0xFE61
+#ifndef XK_dead_a
+#define XK_dead_a 0xFE80
+#endif
+
+#ifndef XK_dead_A
+#define XK_dead_A 0xFE81
+#endif
+
+#ifndef XK_dead_e
+#define XK_dead_e 0xFE82
+#endif
+
+#ifndef XK_dead_E
+#define XK_dead_E 0xFE83
+#endif
+
+#ifndef XK_dead_i
+#define XK_dead_i 0xFE84
+#endif
+
+#ifndef XK_dead_I
+#define XK_dead_I 0xFE85
+#endif
+
+#ifndef XK_dead_o
+#define XK_dead_o 0xFE86
+#endif
+
+#ifndef XK_dead_O
+#define XK_dead_O 0xFE87
+#endif
+
+#ifndef XK_dead_u
+#define XK_dead_u 0xFE88
+#endif
+
+#ifndef XK_dead_U
+#define XK_dead_U 0xFE89
+#endif
+
+#ifndef XK_dead_small_schwa
+#define XK_dead_small_schwa 0xFE8A
+#endif
+
+#ifndef XK_dead_capital_schwa
+#define XK_dead_capital_schwa 0xFE8B
+#endif
+
+#ifndef XK_dead_greek
+#define XK_dead_greek 0xFE8C
+#endif
+
+#ifndef XK_dead_lowline
+#define XK_dead_lowline 0xFE90
+#endif
+
+#ifndef XK_dead_aboveverticalline
+#define XK_dead_aboveverticalline 0xFE91
#endif
-#ifndef XK_dead_horn
-#define XK_dead_horn 0xFE62
+#ifndef XK_dead_belowverticalline
+#define XK_dead_belowverticalline 0xFE92
#endif
+#ifndef XK_dead_longsolidusoverlay
+#define XK_dead_longsolidusoverlay 0xFE93
+#endif
+
+
#ifndef XK_Codeinput
#define XK_Codeinput 0xFF37
#endif
@@ -429,6 +496,36 @@ static const unsigned int KeyTbl[] = {
XK_dead_belowdot, Qt::Key_Dead_Belowdot,
XK_dead_hook, Qt::Key_Dead_Hook,
XK_dead_horn, Qt::Key_Dead_Horn,
+ XK_dead_stroke, Qt::Key_Dead_Stroke,
+ XK_dead_abovecomma, Qt::Key_Dead_Abovecomma,
+ XK_dead_abovereversedcomma, Qt::Key_Dead_Abovereversedcomma,
+ XK_dead_doublegrave, Qt::Key_Dead_Doublegrave,
+ XK_dead_belowring, Qt::Key_Dead_Belowring,
+ XK_dead_belowmacron, Qt::Key_Dead_Belowmacron,
+ XK_dead_belowcircumflex, Qt::Key_Dead_Belowcircumflex,
+ XK_dead_belowtilde, Qt::Key_Dead_Belowtilde,
+ XK_dead_belowbreve, Qt::Key_Dead_Belowbreve,
+ XK_dead_belowdiaeresis, Qt::Key_Dead_Belowdiaeresis,
+ XK_dead_invertedbreve, Qt::Key_Dead_Invertedbreve,
+ XK_dead_belowcomma, Qt::Key_Dead_Belowcomma,
+ XK_dead_currency, Qt::Key_Dead_Currency,
+ XK_dead_a, Qt::Key_Dead_a,
+ XK_dead_A, Qt::Key_Dead_A,
+ XK_dead_e, Qt::Key_Dead_e,
+ XK_dead_E, Qt::Key_Dead_E,
+ XK_dead_i, Qt::Key_Dead_i,
+ XK_dead_I, Qt::Key_Dead_I,
+ XK_dead_o, Qt::Key_Dead_o,
+ XK_dead_O, Qt::Key_Dead_O,
+ XK_dead_u, Qt::Key_Dead_u,
+ XK_dead_U, Qt::Key_Dead_U,
+ XK_dead_small_schwa, Qt::Key_Dead_Small_Schwa,
+ XK_dead_capital_schwa, Qt::Key_Dead_Capital_Schwa,
+ XK_dead_greek, Qt::Key_Dead_Greek,
+ XK_dead_lowline, Qt::Key_Dead_Lowline,
+ XK_dead_aboveverticalline, Qt::Key_Dead_Aboveverticalline,
+ XK_dead_belowverticalline, Qt::Key_Dead_Belowverticalline,
+ XK_dead_longsolidusoverlay, Qt::Key_Dead_Longsolidusoverlay,
// Special keys from X.org - This include multimedia keys,
// wireless/bluetooth/uwb keys, special launcher keys, etc.
@@ -678,9 +775,303 @@ void QXcbKeyboard::printKeymapError(const char *error) const
"directory contains recent enough contents, to update please see http://cgit.freedesktop.org/xkeyboard-config/ .");
}
+#if QT_CONFIG(xcb_xlib)
+/* Look at a pair of unshifted and shifted key symbols.
+ * If the 'unshifted' symbol is uppercase and there is no shifted symbol,
+ * return the matching lowercase symbol; otherwise return 0.
+ * The caller can then use the previously 'unshifted' symbol as the new
+ * 'shifted' (uppercase) symbol and the symbol returned by the function
+ * as the new 'unshifted' (lowercase) symbol.) */
+static xcb_keysym_t getUnshiftedXKey(xcb_keysym_t unshifted, xcb_keysym_t shifted)
+{
+ if (shifted != XKB_KEY_NoSymbol) // Has a shifted symbol
+ return 0;
+
+ KeySym xlower;
+ KeySym xupper;
+ /* libxkbcommon >= 0.8.0 will have public API functions providing
+ * functionality equivalent to XConvertCase(), use these once the
+ * minimal libxkbcommon version is high enough. After that the
+ * xcb-xlib dependency can be removed */
+ XConvertCase(static_cast<KeySym>(unshifted), &xlower, &xupper);
+
+ if (xlower != xupper // Check if symbol is cased
+ && unshifted == static_cast<xcb_keysym_t>(xupper)) { // Unshifted must be upper case
+ return static_cast<xcb_keysym_t>(xlower);
+ }
+ return 0;
+}
+
+static QByteArray symbolsGroupString(const xcb_keysym_t *symbols, int count)
+{
+ // Don't output trailing NoSymbols
+ while (count > 0 && symbols[count - 1] == XKB_KEY_NoSymbol)
+ count--;
+
+ QByteArray groupString;
+ for (int symIndex = 0; symIndex < count; symIndex++) {
+ xcb_keysym_t sym = symbols[symIndex];
+ char symString[64];
+ if (sym == XKB_KEY_NoSymbol)
+ strcpy(symString, "NoSymbol");
+ else
+ xkb_keysym_get_name(sym, symString, sizeof(symString));
+
+ if (!groupString.isEmpty())
+ groupString += ", ";
+ groupString += symString;
+ }
+ return groupString;
+}
+
+struct xkb_keymap *QXcbKeyboard::keymapFromCore()
+{
+ /* Construct an XKB keymap string from information queried from
+ * the X server */
+ QByteArray keymap;
+ keymap += "xkb_keymap {\n";
+
+ const xcb_keycode_t minKeycode = connection()->setup()->min_keycode;
+ const xcb_keycode_t maxKeycode = connection()->setup()->max_keycode;
+
+ // Generate symbolic names from keycodes
+ {
+ keymap +=
+ "xkb_keycodes \"core\" {\n"
+ "\tminimum = " + QByteArray::number(minKeycode) + ";\n"
+ "\tmaximum = " + QByteArray::number(maxKeycode) + ";\n";
+ for (int code = minKeycode; code <= maxKeycode; code++) {
+ auto codeStr = QByteArray::number(code);
+ keymap += "<K" + codeStr + "> = " + codeStr + ";\n";
+ }
+ /* TODO: indicators?
+ */
+ keymap += "};\n"; // xkb_keycodes
+ }
+
+ /* Set up default types (xkbcommon automatically assigns these to
+ * symbols, but doesn't have shift info) */
+ keymap +=
+ "xkb_types \"core\" {\n"
+ "virtual_modifiers NumLock,Alt,LevelThree;\n"
+ "type \"ONE_LEVEL\" {\n"
+ "modifiers= none;\n"
+ "level_name[Level1] = \"Any\";\n"
+ "};\n"
+ "type \"TWO_LEVEL\" {\n"
+ "modifiers= Shift;\n"
+ "map[Shift]= Level2;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Shift\";\n"
+ "};\n"
+ "type \"ALPHABETIC\" {\n"
+ "modifiers= Shift+Lock;\n"
+ "map[Shift]= Level2;\n"
+ "map[Lock]= Level2;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Caps\";\n"
+ "};\n"
+ "type \"KEYPAD\" {\n"
+ "modifiers= Shift+NumLock;\n"
+ "map[Shift]= Level2;\n"
+ "map[NumLock]= Level2;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Number\";\n"
+ "};\n"
+ "type \"FOUR_LEVEL\" {\n"
+ "modifiers= Shift+LevelThree;\n"
+ "map[Shift]= Level2;\n"
+ "map[LevelThree]= Level3;\n"
+ "map[Shift+LevelThree]= Level4;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Shift\";\n"
+ "level_name[Level3] = \"Alt Base\";\n"
+ "level_name[Level4] = \"Shift Alt\";\n"
+ "};\n"
+ "type \"FOUR_LEVEL_ALPHABETIC\" {\n"
+ "modifiers= Shift+Lock+LevelThree;\n"
+ "map[Shift]= Level2;\n"
+ "map[Lock]= Level2;\n"
+ "map[LevelThree]= Level3;\n"
+ "map[Shift+LevelThree]= Level4;\n"
+ "map[Lock+LevelThree]= Level4;\n"
+ "map[Shift+Lock+LevelThree]= Level3;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Shift\";\n"
+ "level_name[Level3] = \"Alt Base\";\n"
+ "level_name[Level4] = \"Shift Alt\";\n"
+ "};\n"
+ "type \"FOUR_LEVEL_SEMIALPHABETIC\" {\n"
+ "modifiers= Shift+Lock+LevelThree;\n"
+ "map[Shift]= Level2;\n"
+ "map[Lock]= Level2;\n"
+ "map[LevelThree]= Level3;\n"
+ "map[Shift+LevelThree]= Level4;\n"
+ "map[Lock+LevelThree]= Level3;\n"
+ "preserve[Lock+LevelThree]= Lock;\n"
+ "map[Shift+Lock+LevelThree]= Level4;\n"
+ "preserve[Shift+Lock+LevelThree]= Lock;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Shift\";\n"
+ "level_name[Level3] = \"Alt Base\";\n"
+ "level_name[Level4] = \"Shift Alt\";\n"
+ "};\n"
+ "type \"FOUR_LEVEL_KEYPAD\" {\n"
+ "modifiers= Shift+NumLock+LevelThree;\n"
+ "map[Shift]= Level2;\n"
+ "map[NumLock]= Level2;\n"
+ "map[LevelThree]= Level3;\n"
+ "map[Shift+LevelThree]= Level4;\n"
+ "map[NumLock+LevelThree]= Level4;\n"
+ "map[Shift+NumLock+LevelThree]= Level3;\n"
+ "level_name[Level1] = \"Base\";\n"
+ "level_name[Level2] = \"Number\";\n"
+ "level_name[Level3] = \"Alt Base\";\n"
+ "level_name[Level4] = \"Alt Number\";\n"
+ "};\n"
+ "};\n"; // xkb_types
+
+ // Generate mapping between symbolic names and keysyms
+ {
+ QVector<xcb_keysym_t> xkeymap;
+ int keysymsPerKeycode = 0;
+ {
+ int keycodeCount = maxKeycode - minKeycode + 1;
+ if (auto keymapReply = Q_XCB_REPLY(xcb_get_keyboard_mapping, xcb_connection(),
+ minKeycode, keycodeCount)) {
+ keysymsPerKeycode = keymapReply->keysyms_per_keycode;
+ int numSyms = keycodeCount * keysymsPerKeycode;
+ auto keymapPtr = xcb_get_keyboard_mapping_keysyms(keymapReply.get());
+ xkeymap.resize(numSyms);
+ for (int i = 0; i < numSyms; i++)
+ xkeymap[i] = keymapPtr[i];
+ }
+ }
+ if (xkeymap.isEmpty())
+ return nullptr;
+
+ KeysymModifierMap keysymMods(keysymsToModifiers());
+ static const char *const builtinModifiers[] =
+ { "Shift", "Lock", "Control", "Mod1", "Mod2", "Mod3", "Mod4", "Mod5" };
+
+ /* Level 3 symbols (e.g. AltGr+something) seem to come in two flavors:
+ * - as a proper level 3 in group 1, at least on recent X.org versions
+ * - 'disguised' as group 2, on 'legacy' X servers
+ * In the 2nd case, remap group 2 to level 3, that seems to work better
+ * in practice */
+ bool mapGroup2ToLevel3 = keysymsPerKeycode < 5;
+
+ keymap += "xkb_symbols \"core\" {\n";
+ for (int code = minKeycode; code <= maxKeycode; code++) {
+ auto codeMap = xkeymap.constData() + (code - minKeycode) * keysymsPerKeycode;
+
+ const int maxGroup1 = 4; // We only support 4 shift states anyway
+ const int maxGroup2 = 2; // Only 3rd and 4th keysym are group 2
+ xcb_keysym_t symbolsGroup1[maxGroup1];
+ xcb_keysym_t symbolsGroup2[maxGroup2];
+ for (int i = 0; i < maxGroup1 + maxGroup2; i++) {
+ xcb_keysym_t sym = i < keysymsPerKeycode ? codeMap[i] : XKB_KEY_NoSymbol;
+ if (mapGroup2ToLevel3) {
+ // Merge into single group
+ if (i < maxGroup1)
+ symbolsGroup1[i] = sym;
+ } else {
+ // Preserve groups
+ if (i < 2)
+ symbolsGroup1[i] = sym;
+ else if (i < 4)
+ symbolsGroup2[i - 2] = sym;
+ else
+ symbolsGroup1[i - 2] = sym;
+ }
+ }
+
+ /* Fix symbols so the unshifted and shifted symbols have
+ * lower resp. upper case */
+ if (auto lowered = getUnshiftedXKey(symbolsGroup1[0], symbolsGroup1[1])) {
+ symbolsGroup1[1] = symbolsGroup1[0];
+ symbolsGroup1[0] = lowered;
+ }
+ if (auto lowered = getUnshiftedXKey(symbolsGroup2[0], symbolsGroup2[1])) {
+ symbolsGroup2[1] = symbolsGroup2[0];
+ symbolsGroup2[0] = lowered;
+ }
+
+ QByteArray groupStr1 = symbolsGroupString(symbolsGroup1, maxGroup1);
+ if (groupStr1.isEmpty())
+ continue;
+
+ keymap += "key <K" + QByteArray::number(code) + "> { ";
+ keymap += "symbols[Group1] = [ " + groupStr1 + " ]";
+ QByteArray groupStr2 = symbolsGroupString(symbolsGroup2, maxGroup2);
+ if (!groupStr2.isEmpty())
+ keymap += ", symbols[Group2] = [ " + groupStr2 + " ]";
+
+ // See if this key code is for a modifier
+ xcb_keysym_t modifierSym = XKB_KEY_NoSymbol;
+ for (int symIndex = 0; symIndex < keysymsPerKeycode; symIndex++) {
+ xcb_keysym_t sym = codeMap[symIndex];
+
+ if (sym == XKB_KEY_Alt_L
+ || sym == XKB_KEY_Meta_L
+ || sym == XKB_KEY_Mode_switch
+ || sym == XKB_KEY_Super_L
+ || sym == XKB_KEY_Super_R
+ || sym == XKB_KEY_Hyper_L
+ || sym == XKB_KEY_Hyper_R) {
+ modifierSym = sym;
+ break;
+ }
+ }
+
+ // AltGr
+ if (modifierSym == XKB_KEY_Mode_switch)
+ keymap += ", virtualMods=LevelThree";
+ keymap += " };\n"; // key
+
+ // Generate modifier mappings
+ int modNum = keysymMods.value(modifierSym, -1);
+ if (modNum != -1) {
+ // Here modNum is always < 8 (see keysymsToModifiers())
+ keymap += QByteArray("modifier_map ") + builtinModifiers[modNum]
+ + " { <K" + QByteArray::number(code) + "> };\n";
+ }
+ }
+ // TODO: indicators?
+ keymap += "};\n"; // xkb_symbols
+ }
+
+ // We need an "Alt" modifier, provide via the xkb_compatibility section
+ keymap +=
+ "xkb_compatibility \"core\" {\n"
+ "virtual_modifiers NumLock,Alt,LevelThree;\n"
+ "interpret Alt_L+AnyOf(all) {\n"
+ "virtualModifier= Alt;\n"
+ "action= SetMods(modifiers=modMapMods,clearLocks);\n"
+ "};\n"
+ "interpret Alt_R+AnyOf(all) {\n"
+ "virtualModifier= Alt;\n"
+ "action= SetMods(modifiers=modMapMods,clearLocks);\n"
+ "};\n"
+ "};\n";
+
+ /* TODO: There is an issue with modifier state not being handled
+ * correctly if using Xming with XKEYBOARD disabled. */
+
+ keymap += "};\n"; // xkb_keymap
+
+ return xkb_keymap_new_from_buffer(xkb_context,
+ keymap.constData(),
+ keymap.size(),
+ XKB_KEYMAP_FORMAT_TEXT_V1,
+ static_cast<xkb_keymap_compile_flags>(0));
+}
+#endif
+
void QXcbKeyboard::updateKeymap()
{
m_config = true;
+ m_keymap_is_core = false;
// set xkb context object
if (!xkb_context) {
if (qEnvironmentVariableIsSet("QT_XKB_CONFIG_ROOT")) {
@@ -714,9 +1105,23 @@ void QXcbKeyboard::updateKeymap()
}
#endif
if (!xkb_keymap) {
- // Compile a keymap from RMLVO (rules, models, layouts, variants and options) names
+ // Read xkb RMLVO (rules, models, layouts, variants and options) names
readXKBConfig();
- xkb_keymap = xkb_keymap_new_from_names(xkb_context, &xkb_names, (xkb_keymap_compile_flags)0);
+#if QT_CONFIG(xcb_xlib)
+ bool rmlvo_is_incomplete = !xkb_names.rules || !(*xkb_names.rules)
+ || !xkb_names.model || !(*xkb_names.model)
+ || !xkb_names.layout || !(*xkb_names.layout);
+ if (rmlvo_is_incomplete) {
+ // Try to build xkb map from core mapping information
+ xkb_keymap = keymapFromCore();
+ m_keymap_is_core = xkb_keymap != 0;
+ }
+#endif
+ if (!xkb_keymap) {
+ // Compile a keymap from RMLVO
+ xkb_keymap = xkb_keymap_new_from_names(xkb_context, &xkb_names,
+ static_cast<xkb_keymap_compile_flags> (0));
+ }
if (!xkb_keymap) {
// last fallback is to used hard-coded keymap name, see DEFAULT_XKB_* in xkbcommon.pri
qWarning() << "Qt: Could not determine keyboard configuration data"
@@ -908,9 +1313,11 @@ xkb_keysym_t QXcbKeyboard::lookupLatinKeysym(xkb_keycode_t keycode) const
// If user layouts don't contain any layout that results in a latin key, we query a
// key from "US" layout, this allows for latin-key-based shorcuts to work even when
// users have only one (non-latin) layout set.
+ // But don't do this if using keymap obtained through the core protocol, as the key
+ // codes may not match up with those expected by the XKB keymap.
xkb_mod_mask_t latchedMods = xkb_state_serialize_mods(xkb_state, XKB_STATE_MODS_LATCHED);
xkb_mod_mask_t lockedMods = xkb_state_serialize_mods(xkb_state, XKB_STATE_MODS_LOCKED);
- if (sym == XKB_KEY_NoSymbol && !m_hasLatinLayout) {
+ if (sym == XKB_KEY_NoSymbol && !m_hasLatinLayout && !m_keymap_is_core) {
if (!latin_keymap) {
const struct xkb_rule_names names = { xkb_names.rules, xkb_names.model, "us", 0, 0 };
latin_keymap = xkb_keymap_new_from_names(xkb_context, &names, (xkb_keymap_compile_flags)0);
@@ -1117,7 +1524,7 @@ int QXcbKeyboard::keysymToQtKey(xcb_keysym_t keysym, Qt::KeyboardModifiers &modi
modifiers |= Qt::KeypadModifier;
} else if (text.length() == 1 && text.unicode()->unicode() > 0x1f
&& text.unicode()->unicode() != 0x7f
- && !(keysym >= XK_dead_grave && keysym <= XK_dead_currency)) {
+ && !(keysym >= XK_dead_grave && keysym <= XK_dead_longsolidusoverlay)) {
code = text.unicode()->toUpper().unicode();
} else {
// any other keys
@@ -1289,20 +1696,56 @@ void QXcbKeyboard::updateVModToRModMapping()
#endif
}
+// Small helper: set modifier bit, if modifier position is valid
+static inline void applyModifier(uint *mask, int modifierBit)
+{
+ if (modifierBit >= 0 && modifierBit < 8)
+ *mask |= 1 << modifierBit;
+}
+
void QXcbKeyboard::updateModifiers()
{
+ memset(&rmod_masks, 0, sizeof(rmod_masks));
+
+ // Compute X modifier bits for Qt modifiers
+ KeysymModifierMap keysymMods(keysymsToModifiers());
+ applyModifier(&rmod_masks.alt, keysymMods.value(XK_Alt_L, -1));
+ applyModifier(&rmod_masks.alt, keysymMods.value(XK_Alt_R, -1));
+ applyModifier(&rmod_masks.meta, keysymMods.value(XK_Meta_L, -1));
+ applyModifier(&rmod_masks.meta, keysymMods.value(XK_Meta_R, -1));
+ applyModifier(&rmod_masks.altgr, keysymMods.value(XK_Mode_switch, -1));
+ applyModifier(&rmod_masks.super, keysymMods.value(XK_Super_L, -1));
+ applyModifier(&rmod_masks.super, keysymMods.value(XK_Super_R, -1));
+ applyModifier(&rmod_masks.hyper, keysymMods.value(XK_Hyper_L, -1));
+ applyModifier(&rmod_masks.hyper, keysymMods.value(XK_Hyper_R, -1));
+
+ resolveMaskConflicts();
+}
+
+// Small helper: check if an array of xcb_keycode_t contains a certain code
+static inline bool keycodes_contains(xcb_keycode_t *codes, xcb_keycode_t which)
+{
+ while (*codes != XCB_NO_SYMBOL) {
+ if (*codes == which) return true;
+ codes++;
+ }
+ return false;
+}
+
+QXcbKeyboard::KeysymModifierMap QXcbKeyboard::keysymsToModifiers()
+{
// The core protocol does not provide a convenient way to determine the mapping
// of modifier bits. Clients must retrieve and search the modifier map to determine
// the keycodes bound to each modifier, and then retrieve and search the keyboard
// mapping to determine the keysyms bound to the keycodes. They must repeat this
// process for all modifiers whenever any part of the modifier mapping is changed.
- memset(&rmod_masks, 0, sizeof(rmod_masks));
- xcb_connection_t *conn = xcb_connection();
- auto modMapReply = Q_XCB_REPLY(xcb_get_modifier_mapping, conn);
+ KeysymModifierMap map;
+
+ auto modMapReply = Q_XCB_REPLY(xcb_get_modifier_mapping, xcb_connection());
if (!modMapReply) {
qWarning("Qt: failed to get modifier mapping");
- return;
+ return map;
}
// for Alt and Meta L and R are the same
@@ -1318,34 +1761,62 @@ void QXcbKeyboard::updateModifiers()
modKeyCodes[i] = xcb_key_symbols_get_keycode(m_key_symbols, symbols[i]);
xcb_keycode_t *modMap = xcb_get_modifier_mapping_keycodes(modMapReply.get());
- const int w = modMapReply->keycodes_per_modifier;
- for (size_t i = 0; i < numSymbols; ++i) {
- for (int bit = 0; bit < 8; ++bit) {
- uint mask = 1 << bit;
- for (int x = 0; x < w; ++x) {
- xcb_keycode_t keyCode = modMap[x + bit * w];
- xcb_keycode_t *itk = modKeyCodes[i];
- while (itk && *itk != XCB_NO_SYMBOL)
- if (*itk++ == keyCode) {
- uint sym = symbols[i];
- if ((sym == XK_Alt_L || sym == XK_Alt_R))
- rmod_masks.alt = mask;
- if ((sym == XK_Meta_L || sym == XK_Meta_R))
- rmod_masks.meta = mask;
- if (sym == XK_Mode_switch)
- rmod_masks.altgr = mask;
- if ((sym == XK_Super_L) || (sym == XK_Super_R))
- rmod_masks.super = mask;
- if ((sym == XK_Hyper_L) || (sym == XK_Hyper_R))
- rmod_masks.hyper = mask;
- }
+ const int modMapLength = xcb_get_modifier_mapping_keycodes_length(modMapReply.get());
+ /* For each modifier of "Shift, Lock, Control, Mod1, Mod2, Mod3,
+ * Mod4, and Mod5" the modifier map contains keycodes_per_modifier
+ * key codes that are associated with a modifier.
+ *
+ * As an example, take this 'xmodmap' output:
+ * xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
+ *
+ * shift Shift_L (0x32), Shift_R (0x3e)
+ * lock Caps_Lock (0x42)
+ * control Control_L (0x25), Control_R (0x69)
+ * mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
+ * mod2 Num_Lock (0x4d)
+ * mod3
+ * mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
+ * mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
+ *
+ * The corresponding raw modifier map would contain keycodes for:
+ * Shift_L (0x32), Shift_R (0x3e), 0, 0,
+ * Caps_Lock (0x42), 0, 0, 0,
+ * Control_L (0x25), Control_R (0x69), 0, 0,
+ * Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd), 0,
+ * Num_Lock (0x4d), 0, 0, 0,
+ * 0,0,0,0,
+ * Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf),
+ * ISO_Level3_Shift (0x5c), Mode_switch (0xcb), 0, 0
+ */
+
+ /* Create a map between a modifier keysym (as per the symbols array)
+ * and the modifier bit it's associated with (if any).
+ * As modMap contains key codes, search modKeyCodes for a match;
+ * if one is found we can look up the associated keysym.
+ * Together with the modifier index this will be used
+ * to compute a mapping between X modifier bits and Qt's
+ * modifiers (Alt, Ctrl etc). */
+ for (int i = 0; i < modMapLength; i++) {
+ if (modMap[i] == XCB_NO_SYMBOL)
+ continue;
+ // Get key symbol for key code
+ for (size_t k = 0; k < numSymbols; k++) {
+ if (modKeyCodes[k] && keycodes_contains(modKeyCodes[k], modMap[i])) {
+ // Key code is for modifier. Record mapping
+ xcb_keysym_t sym = symbols[k];
+ /* As per modMap layout explanation above, dividing
+ * by keycodes_per_modifier gives the 'row' in the
+ * modifier map, which in turn is the modifier bit. */
+ map[sym] = i / modMapReply->keycodes_per_modifier;
+ break;
}
}
}
for (size_t i = 0; i < numSymbols; ++i)
free(modKeyCodes[i]);
- resolveMaskConflicts();
+
+ return map;
}
void QXcbKeyboard::resolveMaskConflicts()
diff --git a/src/plugins/platforms/xcb/qxcbkeyboard.h b/src/plugins/platforms/xcb/qxcbkeyboard.h
index 7f1c51fab8..7ee8e9e90d 100644
--- a/src/plugins/platforms/xcb/qxcbkeyboard.h
+++ b/src/plugins/platforms/xcb/qxcbkeyboard.h
@@ -94,8 +94,13 @@ protected:
void readXKBConfig();
void clearXKBConfig();
+#if QT_CONFIG(xcb_xlib)
+ struct xkb_keymap *keymapFromCore();
+#endif
// when XKEYBOARD not present on the X server
void updateModifiers();
+ typedef QMap<xcb_keysym_t, int> KeysymModifierMap;
+ KeysymModifierMap keysymsToModifiers();
// when XKEYBOARD is present on the X server
void updateVModMapping();
void updateVModToRModMapping();
@@ -107,6 +112,7 @@ private:
void updateXKBStateFromState(struct xkb_state *kb_state, quint16 state);
bool m_config = false;
+ bool m_keymap_is_core = false;
xcb_keycode_t m_autorepeat_code = 0;
struct xkb_context *xkb_context = nullptr;
diff --git a/src/plugins/platforms/xcb/qxcbmime.cpp b/src/plugins/platforms/xcb/qxcbmime.cpp
index 2848446098..58e2e8c0e6 100644
--- a/src/plugins/platforms/xcb/qxcbmime.cpp
+++ b/src/plugins/platforms/xcb/qxcbmime.cpp
@@ -160,9 +160,10 @@ QVector<xcb_atom_t> QXcbMime::mimeAtomsForFormat(QXcbConnection *connection, con
return atoms;
}
-QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, const QByteArray &data, const QString &format,
+QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a, const QByteArray &d, const QString &format,
QVariant::Type requestedType, const QByteArray &encoding)
{
+ QByteArray data = d;
QString atomName = mimeAtomToString(connection, a);
// qDebug() << "mimeConvertDataToFormat" << format << atomName << data;
@@ -182,8 +183,11 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
// special cases for string types
if (format == QLatin1String("text/plain")) {
- if (a == connection->atom(QXcbAtom::UTF8_STRING))
+ if (data.endsWith('\0'))
+ data.chop(1);
+ if (a == connection->atom(QXcbAtom::UTF8_STRING)) {
return QString::fromUtf8(data);
+ }
if (a == XCB_ATOM_STRING ||
a == connection->atom(QXcbAtom::TEXT))
return QString::fromLatin1(data);
@@ -221,6 +225,9 @@ QVariant QXcbMime::mimeConvertToFormat(QXcbConnection *connection, xcb_atom_t a,
}
}
}
+ // 8 byte encoding, remove a possible 0 at the end
+ if (data.endsWith('\0'))
+ data.chop(1);
}
if (atomName == format)
diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
index caa9499c45..22d90d6ac2 100644
--- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
+++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
@@ -101,7 +101,7 @@ QXcbNativeInterface::QXcbNativeInterface() :
static inline QXcbSystemTrayTracker *systemTrayTracker(const QScreen *s)
{
if (!s)
- return Q_NULLPTR;
+ return nullptr;
return static_cast<const QXcbScreen *>(s->handle())->connection()->systemTrayTracker();
}
@@ -194,7 +194,7 @@ void *QXcbNativeInterface::nativeResourceForScreen(const QByteArray &resourceStr
{
if (!screen) {
qWarning("nativeResourceForScreen: null screen");
- return Q_NULLPTR;
+ return nullptr;
}
QByteArray lowerCaseResource = resourceString.toLower();
@@ -236,7 +236,7 @@ void *QXcbNativeInterface::nativeResourceForScreen(const QByteArray &resourceStr
break;
case CompositingEnabled:
if (QXcbVirtualDesktop *vd = xcbScreen->virtualDesktop())
- result = vd->compositingActive() ? this : Q_NULLPTR;
+ result = vd->compositingActive() ? this : nullptr;
break;
default:
break;
@@ -294,7 +294,7 @@ void *QXcbNativeInterface::nativeResourceForCursor(const QByteArray &resource, c
}
}
}
- return Q_NULLPTR;
+ return nullptr;
}
#endif // !QT_NO_CURSOR
@@ -323,7 +323,7 @@ QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface::
QPlatformNativeInterface::NativeResourceForContextFunction func = handlerNativeResourceFunctionForContext(lowerCaseResource);
if (func)
return func;
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterface::nativeResourceFunctionForScreen(const QByteArray &resource)
@@ -390,13 +390,13 @@ QFunctionPointer QXcbNativeInterface::platformFunction(const QByteArray &functio
if (function == QXcbScreenFunctions::virtualDesktopNumberIdentifier())
return QFunctionPointer(QXcbScreenFunctions::VirtualDesktopNumber(QXcbScreen::virtualDesktopNumberStatic));
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::appTime(const QXcbScreen *screen)
{
if (!screen)
- return Q_NULLPTR;
+ return nullptr;
return reinterpret_cast<void *>(quintptr(screen->connection()->time()));
}
@@ -404,7 +404,7 @@ void *QXcbNativeInterface::appTime(const QXcbScreen *screen)
void *QXcbNativeInterface::appUserTime(const QXcbScreen *screen)
{
if (!screen)
- return Q_NULLPTR;
+ return nullptr;
return reinterpret_cast<void *>(quintptr(screen->connection()->netWmUserTime()));
}
@@ -412,7 +412,7 @@ void *QXcbNativeInterface::appUserTime(const QXcbScreen *screen)
void *QXcbNativeInterface::getTimestamp(const QXcbScreen *screen)
{
if (!screen)
- return Q_NULLPTR;
+ return nullptr;
return reinterpret_cast<void *>(quintptr(screen->connection()->getTimestamp()));
}
@@ -452,7 +452,7 @@ void *QXcbNativeInterface::display()
if (defaultConnection)
return defaultConnection->xlib_display();
#endif
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::connection()
@@ -525,10 +525,10 @@ QXcbScreen *QXcbNativeInterface::qPlatformScreenForWindow(QWindow *window)
QXcbScreen *screen;
if (window) {
QScreen *qs = window->screen();
- screen = static_cast<QXcbScreen *>(qs ? qs->handle() : Q_NULLPTR);
+ screen = static_cast<QXcbScreen *>(qs ? qs->handle() : nullptr);
} else {
QScreen *qs = QGuiApplication::primaryScreen();
- screen = static_cast<QXcbScreen *>(qs ? qs->handle() : Q_NULLPTR);
+ screen = static_cast<QXcbScreen *>(qs ? qs->handle() : nullptr);
}
return screen;
}
@@ -537,23 +537,23 @@ void *QXcbNativeInterface::displayForWindow(QWindow *window)
{
#if QT_CONFIG(xcb_xlib)
QXcbScreen *screen = qPlatformScreenForWindow(window);
- return screen ? screen->connection()->xlib_display() : Q_NULLPTR;
+ return screen ? screen->connection()->xlib_display() : nullptr;
#else
Q_UNUSED(window);
- return Q_NULLPTR;
+ return nullptr;
#endif
}
void *QXcbNativeInterface::connectionForWindow(QWindow *window)
{
QXcbScreen *screen = qPlatformScreenForWindow(window);
- return screen ? screen->xcb_connection() : Q_NULLPTR;
+ return screen ? screen->xcb_connection() : nullptr;
}
void *QXcbNativeInterface::screenForWindow(QWindow *window)
{
QXcbScreen *screen = qPlatformScreenForWindow(window);
- return screen ? screen->screen() : Q_NULLPTR;
+ return screen ? screen->screen() : nullptr;
}
void QXcbNativeInterface::addHandler(QXcbNativeInterfaceHandler *handler)
@@ -575,7 +575,7 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbNativeInterfa
if (result)
return result;
}
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface::handlerNativeResourceFunctionForContext(const QByteArray &resource) const
@@ -586,7 +586,7 @@ QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface::
if (result)
return result;
}
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterface::handlerNativeResourceFunctionForScreen(const QByteArray &resource) const
@@ -597,7 +597,7 @@ QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterface::h
if (result)
return result;
}
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForWindowFunction QXcbNativeInterface::handlerNativeResourceFunctionForWindow(const QByteArray &resource) const
@@ -608,7 +608,7 @@ QPlatformNativeInterface::NativeResourceForWindowFunction QXcbNativeInterface::h
if (result)
return result;
}
- return Q_NULLPTR;
+ return nullptr;
}
QPlatformNativeInterface::NativeResourceForBackingStoreFunction QXcbNativeInterface::handlerNativeResourceFunctionForBackingStore(const QByteArray &resource) const
@@ -619,7 +619,7 @@ QPlatformNativeInterface::NativeResourceForBackingStoreFunction QXcbNativeInterf
if (result)
return result;
}
- return Q_NULLPTR;
+ return nullptr;
}
QFunctionPointer QXcbNativeInterface::handlerPlatformFunction(const QByteArray &function) const
@@ -630,7 +630,7 @@ QFunctionPointer QXcbNativeInterface::handlerPlatformFunction(const QByteArray &
if (func)
return func;
}
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::handlerNativeResourceForIntegration(const QByteArray &resource) const
@@ -638,7 +638,7 @@ void *QXcbNativeInterface::handlerNativeResourceForIntegration(const QByteArray
NativeResourceForIntegrationFunction func = handlerNativeResourceFunctionForIntegration(resource);
if (func)
return func();
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::handlerNativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) const
@@ -646,7 +646,7 @@ void *QXcbNativeInterface::handlerNativeResourceForContext(const QByteArray &res
NativeResourceForContextFunction func = handlerNativeResourceFunctionForContext(resource);
if (func)
return func(context);
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::handlerNativeResourceForScreen(const QByteArray &resource, QScreen *screen) const
@@ -654,7 +654,7 @@ void *QXcbNativeInterface::handlerNativeResourceForScreen(const QByteArray &reso
NativeResourceForScreenFunction func = handlerNativeResourceFunctionForScreen(resource);
if (func)
return func(screen);
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::handlerNativeResourceForWindow(const QByteArray &resource, QWindow *window) const
@@ -662,7 +662,7 @@ void *QXcbNativeInterface::handlerNativeResourceForWindow(const QByteArray &reso
NativeResourceForWindowFunction func = handlerNativeResourceFunctionForWindow(resource);
if (func)
return func(window);
- return Q_NULLPTR;
+ return nullptr;
}
void *QXcbNativeInterface::handlerNativeResourceForBackingStore(const QByteArray &resource, QBackingStore *backingStore) const
@@ -670,7 +670,63 @@ void *QXcbNativeInterface::handlerNativeResourceForBackingStore(const QByteArray
NativeResourceForBackingStoreFunction func = handlerNativeResourceFunctionForBackingStore(resource);
if (func)
return func(backingStore);
- return Q_NULLPTR;
+ return nullptr;
+}
+
+static void dumpNativeWindowsRecursion(const QXcbConnection *connection, xcb_window_t window,
+ int level, QTextStream &str)
+{
+ if (level)
+ str << QByteArray(2 * level, ' ');
+
+ xcb_connection_t *conn = connection->xcb_connection();
+ auto geomReply = Q_XCB_REPLY(xcb_get_geometry, conn, window);
+ if (!geomReply)
+ return;
+ const QRect geom(geomReply->x, geomReply->y, geomReply->width, geomReply->height);
+ if (!geom.isValid() || (geom.width() <= 3 && geom.height() <= 3))
+ return; // Skip helper/dummy windows.
+ str << "0x";
+ const int oldFieldWidth = str.fieldWidth();
+ const QChar oldPadChar =str.padChar();
+ str.setFieldWidth(8);
+ str.setPadChar(QLatin1Char('0'));
+ str << hex << window;
+ str.setFieldWidth(oldFieldWidth);
+ str.setPadChar(oldPadChar);
+ str << dec << " \""
+ << QXcbWindow::windowTitle(connection, window) << "\" "
+ << geom.width() << 'x' << geom.height() << forcesign << geom.x() << geom.y()
+ << noforcesign << '\n';
+
+ auto reply = Q_XCB_REPLY(xcb_query_tree, conn, window);
+ if (reply) {
+ const int count = xcb_query_tree_children_length(reply.get());
+ const xcb_window_t *children = xcb_query_tree_children(reply.get());
+ for (int i = 0; i < count; ++i)
+ dumpNativeWindowsRecursion(connection, children[i], level + 1, str);
+ }
+}
+
+QString QXcbNativeInterface::dumpConnectionNativeWindows(const QXcbConnection *connection, WId root) const
+{
+ QString result;
+ QTextStream str(&result);
+ if (root) {
+ dumpNativeWindowsRecursion(connection, xcb_window_t(root), 0, str);
+ } else {
+ for (const QXcbScreen *screen : connection->screens()) {
+ str << "Screen: \"" << screen->name() << "\"\n";
+ dumpNativeWindowsRecursion(connection, screen->root(), 0, str);
+ str << '\n';
+ }
+ }
+ return result;
+}
+
+QString QXcbNativeInterface::dumpNativeWindows(WId root) const
+{
+ return dumpConnectionNativeWindows(QXcbIntegration::instance()->defaultConnection(), root);
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h
index fb0db727aa..6a752c68ca 100644
--- a/src/plugins/platforms/xcb/qxcbnativeinterface.h
+++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h
@@ -127,6 +127,8 @@ public:
Q_INVOKABLE bool systrayVisualHasAlphaChannel();
Q_INVOKABLE bool requestSystemTrayWindowDock(const QWindow *window);
Q_INVOKABLE QRect systemTrayWindowGlobalGeometry(const QWindow *window);
+ Q_INVOKABLE QString dumpConnectionNativeWindows(const QXcbConnection *connection, WId root) const;
+ Q_INVOKABLE QString dumpNativeWindows(WId root = 0) const;
void addHandler(QXcbNativeInterfaceHandler *handler);
void removeHandler(QXcbNativeInterfaceHandler *handler);
diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp
index 67c96b2d80..49bf5181cc 100644
--- a/src/plugins/platforms/xcb/qxcbscreen.cpp
+++ b/src/plugins/platforms/xcb/qxcbscreen.cpp
@@ -91,16 +91,8 @@ QXcbVirtualDesktop::QXcbVirtualDesktop(QXcbConnection *connection, xcb_screen_t
if (reply && reply->format == 32 && reply->type == XCB_ATOM_WINDOW) {
xcb_window_t windowManager = *((xcb_window_t *)xcb_get_property_value(reply.get()));
- if (windowManager != XCB_WINDOW_NONE) {
- auto windowManagerReply = Q_XCB_REPLY_UNCHECKED(xcb_get_property, xcb_connection(),
- false, windowManager,
- atom(QXcbAtom::_NET_WM_NAME),
- atom(QXcbAtom::UTF8_STRING), 0, 1024);
- if (windowManagerReply && windowManagerReply->format == 8 && windowManagerReply->type == atom(QXcbAtom::UTF8_STRING)) {
- m_windowManagerName = QString::fromUtf8((const char *)xcb_get_property_value(windowManagerReply.get()),
- xcb_get_property_value_length(windowManagerReply.get()));
- }
- }
+ if (windowManager != XCB_WINDOW_NONE)
+ m_windowManagerName = QXcbWindow::windowTitle(connection, windowManager);
}
const xcb_query_extension_reply_t *sync_reply = xcb_get_extension_data(xcb_connection(), &xcb_sync_id);
@@ -140,7 +132,7 @@ QXcbScreen *QXcbVirtualDesktop::screenAt(const QPoint &pos) const
if (screen->virtualDesktop() == this && screen->geometry().contains(pos))
return screen;
}
- return Q_NULLPTR;
+ return nullptr;
}
void QXcbVirtualDesktop::addScreen(QPlatformScreen *s)
@@ -590,7 +582,9 @@ QRect QXcbScreen::availableGeometry() const
QImage::Format QXcbScreen::format() const
{
- return qt_xcb_imageFormatForVisual(connection(), screen()->root_depth, visualForId(screen()->root_visual));
+ QImage::Format format;
+ qt_xcb_imageFormatForVisual(connection(), screen()->root_depth, visualForId(screen()->root_visual), &format);
+ return format;
}
QDpi QXcbScreen::virtualDpi() const
diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h
index 842738b622..4a9b1bd209 100644
--- a/src/plugins/platforms/xcb/qxcbscreen.h
+++ b/src/plugins/platforms/xcb/qxcbscreen.h
@@ -140,7 +140,7 @@ class Q_XCB_EXPORT QXcbScreen : public QXcbObject, public QPlatformScreen
public:
QXcbScreen(QXcbConnection *connection, QXcbVirtualDesktop *virtualDesktop,
xcb_randr_output_t outputId, xcb_randr_get_output_info_reply_t *outputInfo,
- const xcb_xinerama_screen_info_t *xineramaScreenInfo = Q_NULLPTR, int xineramaScreenIdx = -1);
+ const xcb_xinerama_screen_info_t *xineramaScreenInfo = nullptr, int xineramaScreenIdx = -1);
~QXcbScreen();
QString getOutputName(xcb_randr_get_output_info_reply_t *outputInfo);
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 5f282fe8c4..61cfed4db7 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -51,6 +51,7 @@
#include "qxcbscreen.h"
#include "qxcbdrag.h"
#include "qxcbkeyboard.h"
+#include "qxcbimage.h"
#include "qxcbwmsupport.h"
#include "qxcbimage.h"
#include "qxcbnativeinterface.h"
@@ -176,80 +177,23 @@ static inline bool isTransient(const QWindow *w)
|| w->type() == Qt::Popup;
}
-static inline QImage::Format imageFormatForVisual(int depth, quint32 red_mask, quint32 blue_mask, bool *rgbSwap)
+void QXcbWindow::setImageFormatForVisual(const xcb_visualtype_t *visual)
{
- if (rgbSwap)
- *rgbSwap = false;
- switch (depth) {
- case 32:
- if (blue_mask == 0xff)
- return QImage::Format_ARGB32_Premultiplied;
- if (red_mask == 0x3ff)
- return QImage::Format_A2BGR30_Premultiplied;
- if (blue_mask == 0x3ff)
- return QImage::Format_A2RGB30_Premultiplied;
- if (red_mask == 0xff) {
- if (rgbSwap)
- *rgbSwap = true;
- return QImage::Format_ARGB32_Premultiplied;
- }
- break;
- case 30:
- if (red_mask == 0x3ff)
- return QImage::Format_BGR30;
- if (blue_mask == 0x3ff)
- return QImage::Format_RGB30;
- break;
- case 24:
- if (blue_mask == 0xff)
- return QImage::Format_RGB32;
- if (red_mask == 0xff) {
- if (rgbSwap)
- *rgbSwap = true;
- return QImage::Format_RGB32;
- }
- break;
- case 16:
- if (blue_mask == 0x1f)
- return QImage::Format_RGB16;
- if (red_mask == 0x1f) {
- if (rgbSwap)
- *rgbSwap = true;
- return QImage::Format_RGB16;
- }
- break;
- case 15:
- if (blue_mask == 0x1f)
- return QImage::Format_RGB555;
- if (red_mask == 0x1f) {
- if (rgbSwap)
- *rgbSwap = true;
- return QImage::Format_RGB555;
- }
- break;
-#if QT_CONFIG(xcb_native_painting)
- case 8:
- if (QXcbIntegration::instance() && QXcbIntegration::instance()->nativePaintingEnabled())
- return QImage::Format_Indexed8;
- break;
-#endif
- default:
- break;
- }
- qWarning("Unsupported screen format: depth: %d, red_mask: %x, blue_mask: %x", depth, red_mask, blue_mask);
+ if (qt_xcb_imageFormatForVisual(connection(), m_depth, visual, &m_imageFormat, &m_imageRgbSwap))
+ return;
- switch (depth) {
+ switch (m_depth) {
+ case 32:
case 24:
qWarning("Using RGB32 fallback, if this works your X11 server is reporting a bad screen format.");
- return QImage::Format_RGB32;
+ m_imageFormat = QImage::Format_RGB32;
+ break;
case 16:
qWarning("Using RGB16 fallback, if this works your X11 server is reporting a bad screen format.");
- return QImage::Format_RGB16;
+ m_imageFormat = QImage::Format_RGB16;
default:
break;
}
-
- return QImage::Format_Invalid;
}
static inline bool positionIncludesFrame(QWindow *w)
@@ -287,7 +231,7 @@ static inline XTextProperty* qstringToXTP(Display *dpy, const QString& s)
if (!mapper || errCode < 0) {
mapper = QTextCodec::codecForName("latin1");
if (!mapper || !mapper->canEncode(s))
- return Q_NULLPTR;
+ return nullptr;
#endif
static QByteArray qcs;
qcs = s.toLatin1();
@@ -322,7 +266,7 @@ static QWindow *childWindowAt(QWindow *win, const QPoint &p)
&& win->geometry().contains(win->parent()->mapFromGlobal(p))) {
return win;
}
- return Q_NULLPTR;
+ return nullptr;
}
static const char *wm_window_type_property_id = "_q_xcb_wm_window_type";
@@ -381,7 +325,7 @@ void QXcbWindow::create()
}
if (!visual)
visual = platformScreen->visualForId(m_visualId);
- m_imageFormat = imageFormatForVisual(m_depth, visual->red_mask, visual->blue_mask, &m_imageRgbSwap);
+ setImageFormatForVisual(visual);
connection()->addWindowEventListener(m_window, this);
return;
}
@@ -418,7 +362,7 @@ void QXcbWindow::create()
resolveFormat(platformScreen->surfaceFormatFor(window()->requestedFormat()));
- const xcb_visualtype_t *visual = Q_NULLPTR;
+ const xcb_visualtype_t *visual = nullptr;
if (connection()->hasDefaultVisualId()) {
visual = platformScreen->visualForId(connection()->defaultVisualId());
@@ -451,7 +395,7 @@ void QXcbWindow::create()
m_visualId = visual->visual_id;
m_depth = platformScreen->depthOfVisual(m_visualId);
- m_imageFormat = imageFormatForVisual(m_depth, visual->red_mask, visual->blue_mask, &m_imageRgbSwap);
+ setImageFormatForVisual(visual);
quint32 mask = XCB_CW_BACK_PIXMAP
| XCB_CW_BORDER_PIXEL
@@ -641,7 +585,7 @@ void QXcbWindow::destroy()
if (connection()->focusWindow() == this)
doFocusOut();
if (connection()->mouseGrabber() == this)
- connection()->setMouseGrabber(Q_NULLPTR);
+ connection()->setMouseGrabber(nullptr);
if (m_syncCounter && m_usingSyncProtocol)
xcb_sync_destroy_counter(xcb_connection(), m_syncCounter);
@@ -700,6 +644,15 @@ void QXcbWindow::setGeometry(const QRect &rect)
qBound<qint32>(1, wmGeometry.height(), XCOORD_MAX),
};
xcb_configure_window(xcb_connection(), m_window, mask, reinterpret_cast<const quint32*>(values));
+ if (window()->parent() && !window()->transientParent()) {
+ // Wait for server reply for parented windows to ensure that a few window
+ // moves will come as a one event. This is important when native widget is
+ // moved a few times in X and Y directions causing native scroll. Widget
+ // must get single event to not trigger unwanted widget position changes
+ // and then expose events causing backingstore flushes with incorrect
+ // offset causing image crruption.
+ connection()->sync();
+ }
}
xcb_flush(xcb_connection());
@@ -877,12 +830,12 @@ void QXcbWindow::hide()
xcb_flush(xcb_connection());
if (connection()->mouseGrabber() == this)
- connection()->setMouseGrabber(Q_NULLPTR);
+ connection()->setMouseGrabber(nullptr);
if (QPlatformWindow *w = connection()->mousePressWindow()) {
// Unset mousePressWindow when it (or one of its parents) is unmapped
while (w) {
if (w == this) {
- connection()->setMousePressWindow(Q_NULLPTR);
+ connection()->setMousePressWindow(nullptr);
break;
}
w = w->parent();
@@ -900,7 +853,7 @@ void QXcbWindow::hide()
// Find the top level window at cursor position.
// Don't use QGuiApplication::topLevelAt(): search only the virtual siblings of this window's screen
- QWindow *enterWindow = Q_NULLPTR;
+ QWindow *enterWindow = nullptr;
const auto screens = xcbScreen()->virtualSiblings();
for (QPlatformScreen *screen : screens) {
if (screen->geometry().contains(cursorPos)) {
@@ -2000,13 +1953,14 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even
return;
if (event->type == atom(QXcbAtom::WM_PROTOCOLS)) {
- if (event->data.data32[0] == atom(QXcbAtom::WM_DELETE_WINDOW)) {
+ xcb_atom_t protocolAtom = event->data.data32[0];
+ if (protocolAtom == atom(QXcbAtom::WM_DELETE_WINDOW)) {
QWindowSystemInterface::handleCloseEvent(window());
- } else if (event->data.data32[0] == atom(QXcbAtom::WM_TAKE_FOCUS)) {
+ } else if (protocolAtom == atom(QXcbAtom::WM_TAKE_FOCUS)) {
connection()->setTime(event->data.data32[1]);
relayFocusToModalWindow();
return;
- } else if (event->data.data32[0] == atom(QXcbAtom::_NET_WM_PING)) {
+ } else if (protocolAtom == atom(QXcbAtom::_NET_WM_PING)) {
if (event->window == xcbScreen()->root())
return;
@@ -2015,20 +1969,23 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even
reply.response_type = XCB_CLIENT_MESSAGE;
reply.window = xcbScreen()->root();
- xcb_send_event(xcb_connection(), 0, xcbScreen()->root(), XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT, (const char *)&reply);
+ xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
+ XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
+ (const char *)&reply);
xcb_flush(xcb_connection());
- } else if (event->data.data32[0] == atom(QXcbAtom::_NET_WM_SYNC_REQUEST)) {
+ } else if (protocolAtom == atom(QXcbAtom::_NET_WM_SYNC_REQUEST)) {
connection()->setTime(event->data.data32[1]);
m_syncValue.lo = event->data.data32[2];
m_syncValue.hi = event->data.data32[3];
if (m_usingSyncProtocol)
m_syncState = SyncReceived;
#ifndef QT_NO_WHATSTHIS
- } else if (event->data.data32[0] == atom(QXcbAtom::_NET_WM_CONTEXT_HELP)) {
+ } else if (protocolAtom == atom(QXcbAtom::_NET_WM_CONTEXT_HELP)) {
QWindowSystemInterface::handleEnterWhatsThisEvent();
#endif
} else {
- qWarning() << "QXcbWindow: Unhandled WM_PROTOCOLS message:" << connection()->atomName(event->data.data32[0]);
+ qCWarning(lcQpaXcb, "Unhandled WM_PROTOCOLS (%s)",
+ connection()->atomName(protocolAtom).constData());
}
#ifndef QT_NO_DRAGANDDROP
} else if (event->type == atom(QXcbAtom::XdndEnter)) {
@@ -2056,7 +2013,7 @@ void QXcbWindow::handleClientMessageEvent(const xcb_client_message_event_t *even
|| event->type == atom(QXcbAtom::_GTK_LOAD_ICONTHEMES)) {
//silence the _COMPIZ and _GTK messages for now
} else {
- qWarning() << "QXcbWindow: Unhandled client message:" << connection()->atomName(event->type);
+ qCWarning(lcQpaXcb) << "Unhandled client message: " << connection()->atomName(event->type);
}
}
@@ -2165,7 +2122,8 @@ void QXcbWindow::handleUnmapNotifyEvent(const xcb_unmap_notify_event_t *event)
}
void QXcbWindow::handleButtonPressEvent(int event_x, int event_y, int root_x, int root_y,
- int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp, Qt::MouseEventSource source)
+ int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp,
+ QEvent::Type type, Qt::MouseEventSource source)
{
const bool isWheel = detail >= 4 && detail <= 7;
if (!isWheel && window() != QGuiApplication::focusWindow()) {
@@ -2214,11 +2172,12 @@ void QXcbWindow::handleButtonPressEvent(int event_x, int event_y, int root_x, in
connection()->setMousePressWindow(this);
- handleMouseEvent(timestamp, local, global, modifiers, source);
+ handleMouseEvent(timestamp, local, global, modifiers, type, source);
}
void QXcbWindow::handleButtonReleaseEvent(int event_x, int event_y, int root_x, int root_y,
- int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp, Qt::MouseEventSource source)
+ int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp,
+ QEvent::Type type, Qt::MouseEventSource source)
{
QPoint local(event_x, event_y);
QPoint global(root_x, root_y);
@@ -2229,9 +2188,9 @@ void QXcbWindow::handleButtonReleaseEvent(int event_x, int event_y, int root_x,
}
if (connection()->buttonState() == Qt::NoButton)
- connection()->setMousePressWindow(Q_NULLPTR);
+ connection()->setMousePressWindow(nullptr);
- handleMouseEvent(timestamp, local, global, modifiers, source);
+ handleMouseEvent(timestamp, local, global, modifiers, type, source);
}
static inline bool doCheckUnGrabAncestor(QXcbConnection *conn)
@@ -2254,7 +2213,7 @@ static inline bool doCheckUnGrabAncestor(QXcbConnection *conn)
return true;
}
-static bool ignoreLeaveEvent(quint8 mode, quint8 detail, QXcbConnection *conn = Q_NULLPTR)
+static bool ignoreLeaveEvent(quint8 mode, quint8 detail, QXcbConnection *conn = nullptr)
{
return ((doCheckUnGrabAncestor(conn)
&& mode == XCB_NOTIFY_MODE_GRAB && detail == XCB_NOTIFY_DETAIL_ANCESTOR)
@@ -2263,7 +2222,7 @@ static bool ignoreLeaveEvent(quint8 mode, quint8 detail, QXcbConnection *conn =
|| detail == XCB_NOTIFY_DETAIL_NONLINEAR_VIRTUAL);
}
-static bool ignoreEnterEvent(quint8 mode, quint8 detail, QXcbConnection *conn = Q_NULLPTR)
+static bool ignoreEnterEvent(quint8 mode, quint8 detail, QXcbConnection *conn = nullptr)
{
return ((doCheckUnGrabAncestor(conn)
&& mode == XCB_NOTIFY_MODE_UNGRAB && detail == XCB_NOTIFY_DETAIL_ANCESTOR)
@@ -2332,7 +2291,8 @@ void QXcbWindow::handleLeaveNotifyEvent(int root_x, int root_y,
}
void QXcbWindow::handleMotionNotifyEvent(int event_x, int event_y, int root_x, int root_y,
- Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp, Qt::MouseEventSource source)
+ Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp,
+ QEvent::Type type, Qt::MouseEventSource source)
{
QPoint local(event_x, event_y);
QPoint global(root_x, root_y);
@@ -2340,33 +2300,34 @@ void QXcbWindow::handleMotionNotifyEvent(int event_x, int event_y, int root_x, i
// "mousePressWindow" can be NULL i.e. if a window will be grabbed or unmapped, so set it again here.
// Unset "mousePressWindow" when mouse button isn't pressed - in some cases the release event won't arrive.
const bool isMouseButtonPressed = (connection()->buttonState() != Qt::NoButton);
- const bool hasMousePressWindow = (connection()->mousePressWindow() != Q_NULLPTR);
+ const bool hasMousePressWindow = (connection()->mousePressWindow() != nullptr);
if (isMouseButtonPressed && !hasMousePressWindow)
connection()->setMousePressWindow(this);
else if (hasMousePressWindow && !isMouseButtonPressed)
- connection()->setMousePressWindow(Q_NULLPTR);
+ connection()->setMousePressWindow(nullptr);
- handleMouseEvent(timestamp, local, global, modifiers, source);
+ handleMouseEvent(timestamp, local, global, modifiers, type, source);
}
void QXcbWindow::handleButtonPressEvent(const xcb_button_press_event_t *event)
{
Qt::KeyboardModifiers modifiers = connection()->keyboard()->translateModifiers(event->state);
handleButtonPressEvent(event->event_x, event->event_y, event->root_x, event->root_y, event->detail,
- modifiers, event->time);
+ modifiers, event->time, QEvent::MouseButtonPress);
}
void QXcbWindow::handleButtonReleaseEvent(const xcb_button_release_event_t *event)
{
Qt::KeyboardModifiers modifiers = connection()->keyboard()->translateModifiers(event->state);
handleButtonReleaseEvent(event->event_x, event->event_y, event->root_x, event->root_y, event->detail,
- modifiers, event->time);
+ modifiers, event->time, QEvent::MouseButtonRelease);
}
void QXcbWindow::handleMotionNotifyEvent(const xcb_motion_notify_event_t *event)
{
Qt::KeyboardModifiers modifiers = connection()->keyboard()->translateModifiers(event->state);
- handleMotionNotifyEvent(event->event_x, event->event_y, event->root_x, event->root_y, modifiers, event->time);
+ handleMotionNotifyEvent(event->event_x, event->event_y, event->root_x, event->root_y, modifiers,
+ event->time, QEvent::MouseMove);
}
#if QT_CONFIG(xinput2)
@@ -2417,18 +2378,18 @@ void QXcbWindow::handleXIMouseEvent(xcb_ge_event_t *event, Qt::MouseEventSource
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
qCDebug(lcQpaXInputEvents, "XI2 mouse press, button %d, time %d, source %s", button, ev->time, sourceName);
conn->setButtonState(button, true);
- handleButtonPressEvent(event_x, event_y, root_x, root_y, ev->detail, modifiers, ev->time, source);
+ handleButtonPressEvent(event_x, event_y, root_x, root_y, ev->detail, modifiers, ev->time, QEvent::MouseButtonPress, source);
break;
case XI_ButtonRelease:
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
qCDebug(lcQpaXInputEvents, "XI2 mouse release, button %d, time %d, source %s", button, ev->time, sourceName);
conn->setButtonState(button, false);
- handleButtonReleaseEvent(event_x, event_y, root_x, root_y, ev->detail, modifiers, ev->time, source);
+ handleButtonReleaseEvent(event_x, event_y, root_x, root_y, ev->detail, modifiers, ev->time, QEvent::MouseButtonRelease, source);
break;
case XI_Motion:
if (Q_UNLIKELY(lcQpaXInputEvents().isDebugEnabled()))
qCDebug(lcQpaXInputEvents, "XI2 mouse motion %d,%d, time %d, source %s", event_x, event_y, ev->time, sourceName);
- handleMotionNotifyEvent(event_x, event_y, root_x, root_y, modifiers, ev->time, source);
+ handleMotionNotifyEvent(event_x, event_y, root_x, root_y, modifiers, ev->time, QEvent::MouseMove, source);
break;
default:
qWarning() << "Unrecognized XI2 mouse event" << ev->evtype;
@@ -2473,10 +2434,13 @@ void QXcbWindow::handleXIEnterLeave(xcb_ge_event_t *event)
QXcbWindow *QXcbWindow::toWindow() { return this; }
void QXcbWindow::handleMouseEvent(xcb_timestamp_t time, const QPoint &local, const QPoint &global,
- Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source)
+ Qt::KeyboardModifiers modifiers, QEvent::Type type, Qt::MouseEventSource source)
{
connection()->setTime(time);
- QWindowSystemInterface::handleMouseEvent(window(), time, local, global, connection()->buttonState(), modifiers, source);
+ Qt::MouseButton button = type == QEvent::MouseMove ? Qt::NoButton : connection()->button();
+ QWindowSystemInterface::handleMouseEvent(window(), time, local, global,
+ connection()->buttonState(), button,
+ type, modifiers, source);
}
void QXcbWindow::handleEnterNotifyEvent(const xcb_enter_notify_event_t *event)
@@ -2526,7 +2490,7 @@ void QXcbWindow::handlePropertyNotifyEvent(const xcb_property_notify_event_t *ev
m_lastWindowStateEvent = newState;
m_windowState = newState;
if ((m_windowState & Qt::WindowMinimized) && connection()->mouseGrabber() == this)
- connection()->setMouseGrabber(Q_NULLPTR);
+ connection()->setMouseGrabber(nullptr);
}
return;
} else if (event->atom == atom(QXcbAtom::_NET_FRAME_EXTENTS)) {
@@ -2594,7 +2558,10 @@ bool QXcbWindow::setKeyboardGrabEnabled(bool grab)
bool QXcbWindow::setMouseGrabEnabled(bool grab)
{
if (!grab && connection()->mouseGrabber() == this)
- connection()->setMouseGrabber(Q_NULLPTR);
+ connection()->setMouseGrabber(nullptr);
+
+ if (grab && !connection()->canGrab())
+ return false;
#if QT_CONFIG(xinput2)
if (connection()->hasXInput2() && !connection()->xi2MouseEventsDisabled()) {
@@ -2604,8 +2571,6 @@ bool QXcbWindow::setMouseGrabEnabled(bool grab)
return result;
}
#endif
- if (grab && !connection()->canGrab())
- return false;
if (!grab) {
xcb_ungrab_pointer(xcb_connection(), XCB_TIME_CURRENT_TIME);
@@ -2675,18 +2640,28 @@ void QXcbWindow::windowEvent(QEvent *event)
bool QXcbWindow::startSystemResize(const QPoint &pos, Qt::Corner corner)
{
+ return startSystemMoveResize(pos, corner);
+}
+
+bool QXcbWindow::startSystemMove(const QPoint &pos)
+{
+ return startSystemMoveResize(pos, 4);
+}
+
+bool QXcbWindow::startSystemMoveResize(const QPoint &pos, int corner)
+{
const xcb_atom_t moveResize = connection()->atom(QXcbAtom::_NET_WM_MOVERESIZE);
if (!connection()->wmSupport()->isSupportedByWM(moveResize))
return false;
const QPoint globalPos = QHighDpi::toNativePixels(window()->mapToGlobal(pos), window()->screen());
#ifdef XCB_USE_XINPUT22
- if (connection()->startSystemResizeForTouchBegin(m_window, globalPos, corner))
+ if (connection()->startSystemMoveResizeForTouchBegin(m_window, globalPos, corner))
return true;
#endif
- return doStartSystemResize(globalPos, corner);
+ return doStartSystemMoveResize(globalPos, corner);
}
-bool QXcbWindow::doStartSystemResize(const QPoint &globalPos, Qt::Corner corner)
+bool QXcbWindow::doStartSystemMoveResize(const QPoint &globalPos, int corner)
{
const xcb_atom_t moveResize = connection()->atom(QXcbAtom::_NET_WM_MOVERESIZE);
xcb_client_message_event_t xev;
@@ -2697,12 +2672,16 @@ bool QXcbWindow::doStartSystemResize(const QPoint &globalPos, Qt::Corner corner)
xev.format = 32;
xev.data.data32[0] = globalPos.x();
xev.data.data32[1] = globalPos.y();
- const bool bottom = corner == Qt::BottomRightCorner || corner == Qt::BottomLeftCorner;
- const bool left = corner == Qt::BottomLeftCorner || corner == Qt::TopLeftCorner;
- if (bottom)
- xev.data.data32[2] = left ? 6 : 4; // bottomleft/bottomright
- else
- xev.data.data32[2] = left ? 0 : 2; // topleft/topright
+ if (corner == 4) {
+ xev.data.data32[2] = 8; // move
+ } else {
+ const bool bottom = corner == Qt::BottomRightCorner || corner == Qt::BottomLeftCorner;
+ const bool left = corner == Qt::BottomLeftCorner || corner == Qt::TopLeftCorner;
+ if (bottom)
+ xev.data.data32[2] = left ? 6 : 4; // bottomleft/bottomright
+ else
+ xev.data.data32[2] = left ? 0 : 2; // topleft/topright
+ }
xev.data.data32[3] = XCB_BUTTON_INDEX_1;
xev.data.data32[4] = 0;
xcb_ungrab_pointer(connection()->xcb_connection(), XCB_CURRENT_TIME);
@@ -2812,6 +2791,15 @@ void QXcbWindow::setOpacity(qreal level)
(uchar *)&value);
}
+QVector<xcb_rectangle_t> qRegionToXcbRectangleList(const QRegion &region)
+{
+ QVector<xcb_rectangle_t> rects;
+ rects.reserve(region.rectCount());
+ for (const QRect &r : region)
+ rects.push_back(qRectToXCBRectangle(r));
+ return rects;
+}
+
void QXcbWindow::setMask(const QRegion &region)
{
if (!connection()->hasXShape())
@@ -2820,10 +2808,7 @@ void QXcbWindow::setMask(const QRegion &region)
xcb_shape_mask(connection()->xcb_connection(), XCB_SHAPE_SO_SET,
XCB_SHAPE_SK_BOUNDING, xcb_window(), 0, 0, XCB_NONE);
} else {
- QVector<xcb_rectangle_t> rects;
- rects.reserve(region.rectCount());
- for (const QRect &r : region)
- rects.push_back(qRectToXCBRectangle(r));
+ const auto rects = qRegionToXcbRectangleList(region);
xcb_shape_rectangles(connection()->xcb_connection(), XCB_SHAPE_SO_SET,
XCB_SHAPE_SK_BOUNDING, XCB_CLIP_ORDERING_UNSORTED,
xcb_window(), 0, 0, rects.size(), &rects[0]);
@@ -2864,5 +2849,18 @@ QXcbScreen *QXcbWindow::xcbScreen() const
return static_cast<QXcbScreen *>(screen());
}
+QString QXcbWindow::windowTitle(const QXcbConnection *conn, xcb_window_t window)
+{
+ const xcb_atom_t utf8Atom = conn->atom(QXcbAtom::UTF8_STRING);
+ auto reply = Q_XCB_REPLY_UNCHECKED(xcb_get_property, conn->xcb_connection(),
+ false, window, conn->atom(QXcbAtom::_NET_WM_NAME),
+ utf8Atom, 0, 1024);
+ if (reply && reply->format == 8 && reply->type == utf8Atom) {
+ const char *name = reinterpret_cast<const char *>(xcb_get_property_value(reply.get()));
+ return QString::fromUtf8(name);
+ }
+ return QString();
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
index 1ce9b0a42f..957c4e9cbd 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.h
+++ b/src/plugins/platforms/xcb/qxcbwindow.h
@@ -110,6 +110,7 @@ public:
void windowEvent(QEvent *event) override;
bool startSystemResize(const QPoint &pos, Qt::Corner corner) override;
+ bool startSystemMove(const QPoint &pos) override;
void setOpacity(qreal level) override;
void setMask(const QRegion &region) override;
@@ -146,7 +147,7 @@ public:
QXcbWindow *toWindow() override;
void handleMouseEvent(xcb_timestamp_t time, const QPoint &local, const QPoint &global,
- Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source);
+ Qt::KeyboardModifiers modifiers, QEvent::Type type, Qt::MouseEventSource source);
void updateNetWmUserTime(xcb_timestamp_t timestamp);
@@ -177,17 +178,21 @@ public:
QXcbScreen *xcbScreen() const;
- bool doStartSystemResize(const QPoint &globalPos, Qt::Corner corner);
+ bool startSystemMoveResize(const QPoint &pos, int corner);
+ bool doStartSystemMoveResize(const QPoint &globalPos, int corner);
virtual void create();
virtual void destroy();
+ static QString windowTitle(const QXcbConnection *conn, xcb_window_t window);
+
public Q_SLOTS:
void updateSyncRequestCounter();
protected:
virtual void resolveFormat(const QSurfaceFormat &format) { m_format = format; }
virtual const xcb_visualtype_t *createVisual();
+ void setImageFormatForVisual(const xcb_visualtype_t *visual);
QXcbScreen *parentScreen();
@@ -220,13 +225,16 @@ protected:
bool compressExposeEvent(QRegion &exposeRegion);
void handleButtonPressEvent(int event_x, int event_y, int root_x, int root_y,
- int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+ int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp,
+ QEvent::Type type, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
void handleButtonReleaseEvent(int event_x, int event_y, int root_x, int root_y,
- int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+ int detail, Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp,
+ QEvent::Type type, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
void handleMotionNotifyEvent(int event_x, int event_y, int root_x, int root_y,
- Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+ Qt::KeyboardModifiers modifiers, xcb_timestamp_t timestamp,
+ QEvent::Type type, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
void handleEnterNotifyEvent(int event_x, int event_y, int root_x, int root_y,
quint8 mode, quint8 detail, xcb_timestamp_t timestamp);
@@ -292,6 +300,8 @@ protected:
void create() override {} // No-op
};
+QVector<xcb_rectangle_t> qRegionToXcbRectangleList(const QRegion &region);
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QXcbWindow*)
diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro
index 01d493156d..a2c56a3dcf 100644
--- a/src/plugins/platforms/xcb/xcb-plugin.pro
+++ b/src/plugins/platforms/xcb/xcb-plugin.pro
@@ -4,6 +4,8 @@ QT += core-private gui-private xcb_qpa_lib-private
DEFINES += QT_NO_FOREACH
+macos: CONFIG += no_app_extension_api_only
+
SOURCES = \
qxcbmain.cpp
OTHER_FILES += xcb.json README
diff --git a/src/plugins/platformthemes/flatpak/flatpak.json b/src/plugins/platformthemes/flatpak/flatpak.json
new file mode 100644
index 0000000000..71f834fd08
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/flatpak.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "flatpak" ]
+}
diff --git a/src/plugins/platformthemes/flatpak/flatpak.pro b/src/plugins/platformthemes/flatpak/flatpak.pro
new file mode 100644
index 0000000000..1e5dbb7a6c
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/flatpak.pro
@@ -0,0 +1,17 @@
+TARGET = qflatpak
+
+PLUGIN_TYPE = platformthemes
+PLUGIN_EXTENDS = -
+PLUGIN_CLASS_NAME = QFlatpakThemePlugin
+load(qt_plugin)
+
+QT += core-private dbus gui-private theme_support-private
+
+HEADERS += \
+ qflatpaktheme.h \
+ qflatpakfiledialog_p.h
+
+SOURCES += \
+ main.cpp \
+ qflatpaktheme.cpp \
+ qflatpakfiledialog.cpp
diff --git a/src/plugins/platformthemes/flatpak/main.cpp b/src/plugins/platformthemes/flatpak/main.cpp
new file mode 100644
index 0000000000..7888eed8b2
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/main.cpp
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Red Hat, Inc
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qpa/qplatformthemeplugin.h>
+#include "qflatpaktheme.h"
+
+QT_BEGIN_NAMESPACE
+
+class QFlatpakThemePlugin : public QPlatformThemePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QPlatformThemeFactoryInterface_iid FILE "flatpak.json")
+
+public:
+ QPlatformTheme *create(const QString &key, const QStringList &params) override;
+};
+
+QPlatformTheme *QFlatpakThemePlugin::create(const QString &key, const QStringList &params)
+{
+ Q_UNUSED(params);
+ if (!key.compare(QLatin1String("flatpak"), Qt::CaseInsensitive))
+ return new QFlatpakTheme;
+
+ return nullptr;
+}
+
+QT_END_NAMESPACE
+
+#include "main.moc"
diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp b/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp
new file mode 100644
index 0000000000..1a24015ce5
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/qflatpakfiledialog.cpp
@@ -0,0 +1,352 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Red Hat, Inc
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qflatpakfiledialog_p.h"
+
+#include <QtCore/qeventloop.h>
+
+#include <QtDBus/QtDBus>
+#include <QDBusConnection>
+#include <QDBusMessage>
+#include <QDBusPendingCall>
+#include <QDBusPendingCallWatcher>
+#include <QDBusPendingReply>
+
+#include <QMetaType>
+#include <QMimeType>
+#include <QMimeDatabase>
+#include <QWindow>
+
+QT_BEGIN_NAMESPACE
+
+QDBusArgument &operator <<(QDBusArgument &arg, const QFlatpakFileDialog::FilterCondition &filterCondition)
+{
+ arg.beginStructure();
+ arg << filterCondition.type << filterCondition.pattern;
+ arg.endStructure();
+ return arg;
+}
+
+const QDBusArgument &operator >>(const QDBusArgument &arg, QFlatpakFileDialog::FilterCondition &filterCondition)
+{
+ uint type;
+ QString filterPattern;
+ arg.beginStructure();
+ arg >> type >> filterPattern;
+ filterCondition.type = (QFlatpakFileDialog::ConditionType)type;
+ filterCondition.pattern = filterPattern;
+ arg.endStructure();
+
+ return arg;
+}
+
+QDBusArgument &operator <<(QDBusArgument &arg, const QFlatpakFileDialog::Filter filter)
+{
+ arg.beginStructure();
+ arg << filter.name << filter.filterConditions;
+ arg.endStructure();
+ return arg;
+}
+
+const QDBusArgument &operator >>(const QDBusArgument &arg, QFlatpakFileDialog::Filter &filter)
+{
+ QString name;
+ QFlatpakFileDialog::FilterConditionList filterConditions;
+ arg.beginStructure();
+ arg >> name >> filterConditions;
+ filter.name = name;
+ filter.filterConditions = filterConditions;
+ arg.endStructure();
+
+ return arg;
+}
+
+class QFlatpakFileDialogPrivate
+{
+public:
+ WId winId = 0;
+ bool modal = false;
+ bool multipleFiles = false;
+ bool saveFile = false;
+ QString acceptLabel;
+ QString directory;
+ QString title;
+ QStringList nameFilters;
+ QStringList mimeTypesFilters;
+ QStringList selectedFiles;
+};
+
+QFlatpakFileDialog::QFlatpakFileDialog()
+ : QPlatformFileDialogHelper()
+ , d_ptr(new QFlatpakFileDialogPrivate)
+{
+}
+
+QFlatpakFileDialog::~QFlatpakFileDialog()
+{
+}
+
+void QFlatpakFileDialog::initializeDialog()
+{
+ Q_D(QFlatpakFileDialog);
+
+ if (options()->fileMode() == QFileDialogOptions::ExistingFiles)
+ d->multipleFiles = true;
+
+ if (options()->isLabelExplicitlySet(QFileDialogOptions::Accept))
+ d->acceptLabel = options()->labelText(QFileDialogOptions::Accept);
+
+ if (!options()->windowTitle().isEmpty())
+ d->title = options()->windowTitle();
+
+ if (options()->acceptMode() == QFileDialogOptions::AcceptSave)
+ d->saveFile = true;
+
+ if (!options()->nameFilters().isEmpty())
+ d->nameFilters = options()->nameFilters();
+
+ if (!options()->mimeTypeFilters().isEmpty())
+ d->mimeTypesFilters = options()->mimeTypeFilters();
+
+ setDirectory(options()->initialDirectory());
+}
+
+void QFlatpakFileDialog::openPortal()
+{
+ Q_D(const QFlatpakFileDialog);
+
+ QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String("org.freedesktop.portal.Desktop"),
+ QLatin1String("/org/freedesktop/portal/desktop"),
+ QLatin1String("org.freedesktop.portal.FileChooser"),
+ d->saveFile ? QLatin1String("SaveFile") : QLatin1String("OpenFile"));
+ QString parentWindowId = QLatin1String("x11:") + QString::number(d->winId);
+
+ QVariantMap options;
+ if (!d->acceptLabel.isEmpty())
+ options.insert(QLatin1String("accept_label"), d->acceptLabel);
+
+ options.insert(QLatin1String("modal"), d->modal);
+ options.insert(QLatin1String("multiple"), d->multipleFiles);
+
+ if (d->saveFile) {
+ if (!d->directory.isEmpty())
+ options.insert(QLatin1String("current_folder"), d->directory.toLatin1());
+
+ if (!d->selectedFiles.isEmpty())
+ options.insert(QLatin1String("current_file"), d->selectedFiles.first().toLatin1());
+ }
+
+ // Insert filters
+ qDBusRegisterMetaType<FilterCondition>();
+ qDBusRegisterMetaType<FilterConditionList>();
+ qDBusRegisterMetaType<Filter>();
+ qDBusRegisterMetaType<FilterList>();
+
+ FilterList filterList;
+
+ if (!d->mimeTypesFilters.isEmpty()) {
+ for (const QString &mimeTypefilter : d->mimeTypesFilters) {
+ QMimeDatabase mimeDatabase;
+ QMimeType mimeType = mimeDatabase.mimeTypeForName(mimeTypefilter);
+
+ // Creates e.g. (1, "image/png")
+ FilterCondition filterCondition;
+ filterCondition.type = MimeType;
+ filterCondition.pattern = mimeTypefilter;
+
+ // Creates e.g. [((1, "image/png"))]
+ FilterConditionList filterConditions;
+ filterConditions << filterCondition;
+
+ // Creates e.g. [("Images", [((1, "image/png"))])]
+ Filter filter;
+ filter.name = mimeType.comment();
+ filter.filterConditions = filterConditions;
+
+ filterList << filter;
+ }
+ } else if (!d->nameFilters.isEmpty()) {
+ for (const QString &filter : d->nameFilters) {
+ // Do parsing:
+ // Supported format is ("Images (*.png *.jpg)")
+ QRegularExpression regexp(QPlatformFileDialogHelper::filterRegExp);
+ QRegularExpressionMatch match = regexp.match(filter);
+ if (match.hasMatch()) {
+ QString userVisibleName = match.captured(1);
+ QStringList filterStrings = match.captured(2).split(QLatin1String(" "));
+
+ FilterConditionList filterConditions;
+ for (const QString &filterString : filterStrings) {
+ FilterCondition filterCondition;
+ filterCondition.type = GlobalPattern;
+ filterCondition.pattern = filterString;
+ filterConditions << filterCondition;
+ }
+
+ Filter filter;
+ filter.name = userVisibleName;
+ filter.filterConditions = filterConditions;
+
+ filterList << filter;
+ }
+ }
+ }
+
+ if (!filterList.isEmpty())
+ options.insert(QLatin1String("filters"), QVariant::fromValue(filterList));
+
+ // TODO choices a(ssa(ss)s)
+ // List of serialized combo boxes to add to the file chooser.
+
+ message << parentWindowId << d->title << options;
+
+ QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message);
+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall);
+ connect(watcher, &QDBusPendingCallWatcher::finished, this, [this] (QDBusPendingCallWatcher *watcher) {
+ QDBusPendingReply<QDBusObjectPath> reply = *watcher;
+ if (reply.isError()) {
+ Q_EMIT reject();
+ } else {
+ QDBusConnection::sessionBus().connect(nullptr,
+ reply.value().path(),
+ QLatin1String("org.freedesktop.portal.Request"),
+ QLatin1String("Response"),
+ this,
+ SLOT(gotResponse(uint,QVariantMap)));
+ }
+ });
+}
+
+bool QFlatpakFileDialog::defaultNameFilterDisables() const
+{
+ return false;
+}
+
+void QFlatpakFileDialog::setDirectory(const QUrl &directory)
+{
+ Q_D(QFlatpakFileDialog);
+
+ d->directory = directory.path();
+}
+
+QUrl QFlatpakFileDialog::directory() const
+{
+ Q_D(const QFlatpakFileDialog);
+
+ return d->directory;
+}
+
+void QFlatpakFileDialog::selectFile(const QUrl &filename)
+{
+ Q_D(QFlatpakFileDialog);
+
+ d->selectedFiles << filename.path();
+}
+
+QList<QUrl> QFlatpakFileDialog::selectedFiles() const
+{
+ Q_D(const QFlatpakFileDialog);
+
+ QList<QUrl> files;
+ for (const QString &file : d->selectedFiles) {
+ files << QUrl(file);
+ }
+ return files;
+}
+
+void QFlatpakFileDialog::setFilter()
+{
+ // TODO
+}
+
+void QFlatpakFileDialog::selectNameFilter(const QString &filter)
+{
+ Q_UNUSED(filter);
+ // TODO
+}
+
+QString QFlatpakFileDialog::selectedNameFilter() const
+{
+ // TODO
+ return QString();
+}
+
+void QFlatpakFileDialog::exec()
+{
+ // HACK we have to avoid returning until we emit that the dialog was accepted or rejected
+ QEventLoop loop;
+ loop.connect(this, SIGNAL(accept()), SLOT(quit()));
+ loop.connect(this, SIGNAL(reject()), SLOT(quit()));
+ loop.exec();
+}
+
+void QFlatpakFileDialog::hide()
+{
+}
+
+bool QFlatpakFileDialog::show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent)
+{
+ Q_D(QFlatpakFileDialog);
+ Q_UNUSED(windowFlags);
+
+ initializeDialog();
+
+ d->modal = windowModality != Qt::NonModal;
+ d->winId = parent ? parent->winId() : 0;
+
+ openPortal();
+
+ return true;
+}
+
+void QFlatpakFileDialog::gotResponse(uint response, const QVariantMap &results)
+{
+ Q_D(QFlatpakFileDialog);
+
+ if (!response) {
+ if (results.contains(QLatin1String("uris")))
+ d->selectedFiles = results.value(QLatin1String("uris")).toStringList();
+
+ Q_EMIT accept();
+ } else {
+ Q_EMIT reject();
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h b/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h
new file mode 100644
index 0000000000..f3e195faa0
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/qflatpakfiledialog_p.h
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Red Hat, Inc
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QFLATPAKFILEDIALOG_P_H
+#define QFLATPAKFILEDIALOG_P_H
+
+#include <qpa/qplatformdialoghelper.h>
+#include <QVector>
+
+QT_BEGIN_NAMESPACE
+
+class QFlatpakFileDialogPrivate;
+
+class QFlatpakFileDialog : public QPlatformFileDialogHelper
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QFlatpakFileDialog)
+public:
+ enum ConditionType : uint {
+ GlobalPattern = 0,
+ MimeType = 1
+ };
+ // Filters a(sa(us))
+ // Example: [('Images', [(0, '*.ico'), (1, 'image/png')]), ('Text', [(0, '*.txt')])]
+ struct FilterCondition {
+ ConditionType type;
+ QString pattern; // E.g. '*ico' or 'image/png'
+ };
+ typedef QVector<FilterCondition> FilterConditionList;
+
+ struct Filter {
+ QString name; // E.g. 'Images' or 'Text
+ FilterConditionList filterConditions;; // E.g. [(0, '*.ico'), (1, 'image/png')] or [(0, '*.txt')]
+ };
+ typedef QVector<Filter> FilterList;
+
+ QFlatpakFileDialog();
+ ~QFlatpakFileDialog();
+
+ bool defaultNameFilterDisables() const override;
+ QUrl directory() const override;
+ void setDirectory(const QUrl &directory) override;
+ void selectFile(const QUrl &filename) override;
+ QList<QUrl> selectedFiles() const override;
+ void setFilter() override;
+ void selectNameFilter(const QString &filter) override;
+ QString selectedNameFilter() const override;
+
+ void exec() override;
+ bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override;
+ void hide() override;
+
+private Q_SLOTS:
+ void gotResponse(uint response, const QVariantMap &results);
+
+private:
+ void initializeDialog();
+ void openPortal();
+
+ QScopedPointer<QFlatpakFileDialogPrivate> d_ptr;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QFlatpakFileDialog::FilterCondition);
+Q_DECLARE_METATYPE(QFlatpakFileDialog::FilterConditionList);
+Q_DECLARE_METATYPE(QFlatpakFileDialog::Filter);
+Q_DECLARE_METATYPE(QFlatpakFileDialog::FilterList);
+
+#endif // QFLATPAKFILEDIALOG_P_H
+
diff --git a/src/plugins/platformthemes/flatpak/qflatpaktheme.cpp b/src/plugins/platformthemes/flatpak/qflatpaktheme.cpp
new file mode 100644
index 0000000000..04abd707e1
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/qflatpaktheme.cpp
@@ -0,0 +1,254 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qflatpaktheme.h"
+#include "qflatpakfiledialog_p.h"
+
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme_p.h>
+#include <qpa/qplatformthemefactory_p.h>
+#include <qpa/qplatformintegration.h>
+
+QT_BEGIN_NAMESPACE
+
+class QFlatpakThemePrivate : public QPlatformThemePrivate
+{
+public:
+ QFlatpakThemePrivate()
+ : QPlatformThemePrivate()
+ { }
+
+ ~QFlatpakThemePrivate()
+ {
+ delete baseTheme;
+ }
+
+ QPlatformTheme *baseTheme;
+};
+
+QFlatpakTheme::QFlatpakTheme()
+ : d_ptr(new QFlatpakThemePrivate)
+{
+ Q_D(QFlatpakTheme);
+
+ QStringList themeNames;
+ themeNames += QGuiApplicationPrivate::platform_integration->themeNames();
+ // 1) Look for a theme plugin.
+ for (const QString &themeName : qAsConst(themeNames)) {
+ d->baseTheme = QPlatformThemeFactory::create(themeName, nullptr);
+ if (d->baseTheme)
+ break;
+ }
+
+ // 2) If no theme plugin was found ask the platform integration to
+ // create a theme
+ if (!d->baseTheme) {
+ for (const QString &themeName : qAsConst(themeNames)) {
+ d->baseTheme = QGuiApplicationPrivate::platform_integration->createPlatformTheme(themeName);
+ if (d->baseTheme)
+ break;
+ }
+ // No error message; not having a theme plugin is allowed.
+ }
+
+ // 3) Fall back on the built-in "null" platform theme.
+ if (!d->baseTheme)
+ d->baseTheme = new QPlatformTheme;
+}
+
+QPlatformMenuItem* QFlatpakTheme::createPlatformMenuItem() const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->createPlatformMenuItem();
+
+ return QPlatformTheme::createPlatformMenuItem();
+}
+
+QPlatformMenu* QFlatpakTheme::createPlatformMenu() const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->createPlatformMenu();
+
+ return QPlatformTheme::createPlatformMenu();
+}
+
+QPlatformMenuBar* QFlatpakTheme::createPlatformMenuBar() const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->createPlatformMenuBar();
+
+ return QFlatpakTheme::createPlatformMenuBar();
+}
+
+void QFlatpakTheme::showPlatformMenuBar()
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->showPlatformMenuBar();
+
+ return QFlatpakTheme::showPlatformMenuBar();
+}
+
+bool QFlatpakTheme::usePlatformNativeDialog(DialogType type) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (type == FileDialog)
+ return true;
+
+ if (d->baseTheme)
+ return d->baseTheme->usePlatformNativeDialog(type);
+
+ return QFlatpakTheme::usePlatformNativeDialog(type);
+}
+
+QPlatformDialogHelper* QFlatpakTheme::createPlatformDialogHelper(DialogType type) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (type == FileDialog)
+ return new QFlatpakFileDialog;
+
+ if (d->baseTheme)
+ return d->baseTheme->createPlatformDialogHelper(type);
+
+ return QFlatpakTheme::createPlatformDialogHelper(type);
+}
+
+#ifndef QT_NO_SYSTEMTRAYICON
+QPlatformSystemTrayIcon* QFlatpakTheme::createPlatformSystemTrayIcon() const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->createPlatformSystemTrayIcon();
+
+ return QPlatformTheme::createPlatformSystemTrayIcon();
+}
+#endif
+
+const QPalette *QFlatpakTheme::palette(Palette type) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->palette(type);
+
+ return QPlatformTheme::palette(type);
+}
+
+const QFont* QFlatpakTheme::font(Font type) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->font(type);
+
+ return QPlatformTheme::font(type);
+}
+
+QVariant QFlatpakTheme::themeHint(ThemeHint hint) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->themeHint(hint);
+
+ return QPlatformTheme::themeHint(hint);
+}
+
+QPixmap QFlatpakTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->standardPixmap(sp, size);
+
+ return QPlatformTheme::standardPixmap(sp, size);
+}
+
+QIcon QFlatpakTheme::fileIcon(const QFileInfo &fileInfo,
+ QPlatformTheme::IconOptions iconOptions) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->fileIcon(fileInfo, iconOptions);
+
+ return QPlatformTheme::fileIcon(fileInfo, iconOptions);
+}
+
+QIconEngine * QFlatpakTheme::createIconEngine(const QString &iconName) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->createIconEngine(iconName);
+
+ return QPlatformTheme::createIconEngine(iconName);
+}
+
+QList<QKeySequence> QFlatpakTheme::keyBindings(QKeySequence::StandardKey key) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->keyBindings(key);
+
+ return QPlatformTheme::keyBindings(key);
+}
+
+QString QFlatpakTheme::standardButtonText(int button) const
+{
+ Q_D(const QFlatpakTheme);
+
+ if (d->baseTheme)
+ return d->baseTheme->standardButtonText(button);
+
+ return QPlatformTheme::standardButtonText(button);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platformthemes/flatpak/qflatpaktheme.h b/src/plugins/platformthemes/flatpak/qflatpaktheme.h
new file mode 100644
index 0000000000..87f79a2395
--- /dev/null
+++ b/src/plugins/platformthemes/flatpak/qflatpaktheme.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QFLATPAKTHEME_H
+#define QFLATPAKTHEME_H
+
+#include <qpa/qplatformtheme.h>
+
+QT_BEGIN_NAMESPACE
+
+class QFlatpakThemePrivate;
+
+class QFlatpakTheme : public QPlatformTheme
+{
+ Q_DECLARE_PRIVATE(QFlatpakTheme)
+public:
+ QFlatpakTheme();
+
+ QPlatformMenuItem *createPlatformMenuItem() const override;
+ QPlatformMenu *createPlatformMenu() const override;
+ QPlatformMenuBar *createPlatformMenuBar() const override;
+ void showPlatformMenuBar() override;
+
+ bool usePlatformNativeDialog(DialogType type) const override;
+ QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
+
+#ifndef QT_NO_SYSTEMTRAYICON
+ QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
+#endif
+
+ const QPalette *palette(Palette type = SystemPalette) const override;
+
+ const QFont *font(Font type = SystemFont) const override;
+
+ QVariant themeHint(ThemeHint hint) const override;
+
+ QPixmap standardPixmap(StandardPixmap sp, const QSizeF &size) const override;
+ QIcon fileIcon(const QFileInfo &fileInfo,
+ QPlatformTheme::IconOptions iconOptions = 0) const override;
+
+ QIconEngine *createIconEngine(const QString &iconName) const override;
+
+ QList<QKeySequence> keyBindings(QKeySequence::StandardKey key) const override;
+
+ QString standardButtonText(int button) const override;
+
+private:
+ QScopedPointer<QFlatpakThemePrivate> d_ptr;
+ Q_DISABLE_COPY(QFlatpakTheme)
+};
+
+QT_END_NAMESPACE
+
+#endif // QFLATPAKTHEME_H
diff --git a/src/plugins/platformthemes/gtk3/main.cpp b/src/plugins/platformthemes/gtk3/main.cpp
index c4cd66c33b..fb1c425d8e 100644
--- a/src/plugins/platformthemes/gtk3/main.cpp
+++ b/src/plugins/platformthemes/gtk3/main.cpp
@@ -48,7 +48,7 @@ class QGtk3ThemePlugin : public QPlatformThemePlugin
Q_PLUGIN_METADATA(IID QPlatformThemeFactoryInterface_iid FILE "gtk3.json")
public:
- QPlatformTheme *create(const QString &key, const QStringList &params) Q_DECL_OVERRIDE;
+ QPlatformTheme *create(const QString &key, const QStringList &params) override;
};
QPlatformTheme *QGtk3ThemePlugin::create(const QString &key, const QStringList &params)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.h b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.h
index ba43046e04..e78a7fc6d1 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.h
+++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.h
@@ -63,12 +63,12 @@ public:
QGtk3ColorDialogHelper();
~QGtk3ColorDialogHelper();
- bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE;
- void exec() Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
+ bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override;
+ void exec() override;
+ void hide() override;
- void setCurrentColor(const QColor &color) Q_DECL_OVERRIDE;
- QColor currentColor() const Q_DECL_OVERRIDE;
+ void setCurrentColor(const QColor &color) override;
+ QColor currentColor() const override;
private Q_SLOTS:
void onAccepted();
@@ -88,18 +88,18 @@ public:
QGtk3FileDialogHelper();
~QGtk3FileDialogHelper();
- bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE;
- void exec() Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
+ bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override;
+ void exec() override;
+ void hide() override;
- bool defaultNameFilterDisables() const Q_DECL_OVERRIDE;
- void setDirectory(const QUrl &directory) Q_DECL_OVERRIDE;
- QUrl directory() const Q_DECL_OVERRIDE;
- void selectFile(const QUrl &filename) Q_DECL_OVERRIDE;
- QList<QUrl> selectedFiles() const Q_DECL_OVERRIDE;
- void setFilter() Q_DECL_OVERRIDE;
- void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE;
- QString selectedNameFilter() const Q_DECL_OVERRIDE;
+ bool defaultNameFilterDisables() const override;
+ void setDirectory(const QUrl &directory) override;
+ QUrl directory() const override;
+ void selectFile(const QUrl &filename) override;
+ QList<QUrl> selectedFiles() const override;
+ void setFilter() override;
+ void selectNameFilter(const QString &filter) override;
+ QString selectedNameFilter() const override;
private Q_SLOTS:
void onAccepted();
@@ -128,12 +128,12 @@ public:
QGtk3FontDialogHelper();
~QGtk3FontDialogHelper();
- bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE;
- void exec() Q_DECL_OVERRIDE;
- void hide() Q_DECL_OVERRIDE;
+ bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override;
+ void exec() override;
+ void hide() override;
- void setCurrentFont(const QFont &font) Q_DECL_OVERRIDE;
- QFont currentFont() const Q_DECL_OVERRIDE;
+ void setCurrentFont(const QFont &font) override;
+ QFont currentFont() const override;
private Q_SLOTS:
void onAccepted();
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.h b/src/plugins/platformthemes/gtk3/qgtk3theme.h
index abc5dbfd17..54296d2ff1 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.h
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.h
@@ -49,14 +49,14 @@ class QGtk3Theme : public QGnomeTheme
public:
QGtk3Theme();
- virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
- virtual QString gtkFontName() const Q_DECL_OVERRIDE;
+ virtual QVariant themeHint(ThemeHint hint) const override;
+ virtual QString gtkFontName() const override;
- bool usePlatformNativeDialog(DialogType type) const Q_DECL_OVERRIDE;
- QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const Q_DECL_OVERRIDE;
+ bool usePlatformNativeDialog(DialogType type) const override;
+ QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
- QPlatformMenu* createPlatformMenu() const Q_DECL_OVERRIDE;
- QPlatformMenuItem* createPlatformMenuItem() const Q_DECL_OVERRIDE;
+ QPlatformMenu* createPlatformMenu() const override;
+ QPlatformMenuItem* createPlatformMenuItem() const override;
static const char *name;
private:
diff --git a/src/plugins/platformthemes/platformthemes.pro b/src/plugins/platformthemes/platformthemes.pro
index 0e2812bed3..ebf92ba9d5 100644
--- a/src/plugins/platformthemes/platformthemes.pro
+++ b/src/plugins/platformthemes/platformthemes.pro
@@ -1,4 +1,6 @@
TEMPLATE = subdirs
QT_FOR_CONFIG += widgets-private
+qtConfig(dbus): SUBDIRS += flatpak
+
qtHaveModule(widgets):qtConfig(gtk3): SUBDIRS += gtk3
diff --git a/src/plugins/printsupport/cups/main.cpp b/src/plugins/printsupport/cups/main.cpp
index 39309a0031..cf263a7f52 100644
--- a/src/plugins/printsupport/cups/main.cpp
+++ b/src/plugins/printsupport/cups/main.cpp
@@ -52,7 +52,7 @@ class QCupsPrinterSupportPlugin : public QPlatformPrinterSupportPlugin
public:
QStringList keys() const;
- QPlatformPrinterSupport *create(const QString &) Q_DECL_OVERRIDE;
+ QPlatformPrinterSupport *create(const QString &) override;
};
QStringList QCupsPrinterSupportPlugin::keys() const
diff --git a/src/plugins/printsupport/cups/qcupsprintengine.cpp b/src/plugins/printsupport/cups/qcupsprintengine.cpp
index 6a4eecb06d..bd0d641e79 100644
--- a/src/plugins/printsupport/cups/qcupsprintengine.cpp
+++ b/src/plugins/printsupport/cups/qcupsprintengine.cpp
@@ -104,10 +104,9 @@ void QCupsPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &v
break;
case PPK_QPageLayout: {
QPageLayout pageLayout = value.value<QPageLayout>();
- if (pageLayout.isValid() && d->m_printDevice.isValidPageLayout(pageLayout, d->resolution)) {
+ if (pageLayout.isValid() && (d->m_printDevice.isValidPageLayout(pageLayout, d->resolution) || d->m_printDevice.supportsCustomPageSizes())) {
d->m_pageLayout = pageLayout;
- // Replace the page size with the CUPS page size
- d->setPageSize(d->m_printDevice.supportedPageSize(pageLayout.pageSize()));
+ d->setPageSize(pageLayout.pageSize());
}
break;
}
@@ -239,47 +238,18 @@ void QCupsPrintEnginePrivate::closePrintDevice()
cupsOptStruct.append(opt);
}
- // Print the file.
+ // Print the file
+ // Cups expect the printer original name without instance, the full name is used only to retrieve the configuration
+ const auto parts = printerName.splitRef(QLatin1Char('/'));
+ const auto printerOriginalName = parts.at(0);
cups_option_t* optPtr = cupsOptStruct.size() ? &cupsOptStruct.first() : 0;
- cupsPrintFile(printerName.toLocal8Bit().constData(), tempFile.toLocal8Bit().constData(),
+ cupsPrintFile(printerOriginalName.toLocal8Bit().constData(), tempFile.toLocal8Bit().constData(),
title.toLocal8Bit().constData(), cupsOptStruct.size(), optPtr);
QFile::remove(tempFile);
}
}
-void QCupsPrintEnginePrivate::setupDefaultPrinter()
-{
- // Should never have reached here if no plugin available, but check just in case
- QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
- if (!ps)
- return;
-
- // Get default printer id, if no default then use the first available
- // TODO Find way to remove printerName from base class?
- printerName = ps->defaultPrintDeviceId();
- if (printerName.isEmpty()) {
- QStringList list = ps->availablePrintDeviceIds();
- if (list.size() > 0)
- printerName = list.at(0);
- }
-
- // Should never have reached here if no printers available, but check just in case
- if (printerName.isEmpty())
- return;
-
- m_printDevice = ps->createPrintDevice(printerName);
- if (!m_printDevice.isValid())
- return;
-
- // Setup the printer defaults
- duplex = m_printDevice.defaultDuplexMode();
- grayscale = m_printDevice.defaultColorMode() == QPrint::GrayScale;
- // CUPS server always supports collation, even if individual m_printDevice doesn't
- collate = true;
- setPageSize(m_printDevice.defaultPageSize());
-}
-
void QCupsPrintEnginePrivate::changePrinter(const QString &newPrinter)
{
// Don't waste time if same printer name
diff --git a/src/plugins/printsupport/cups/qcupsprintengine_p.h b/src/plugins/printsupport/cups/qcupsprintengine_p.h
index 0ebf6e7a0f..d5363bb8cc 100644
--- a/src/plugins/printsupport/cups/qcupsprintengine_p.h
+++ b/src/plugins/printsupport/cups/qcupsprintengine_p.h
@@ -72,8 +72,8 @@ public:
virtual ~QCupsPrintEngine();
// reimplementations QPdfPrintEngine
- void setProperty(PrintEnginePropertyKey key, const QVariant &value) Q_DECL_OVERRIDE;
- QVariant property(PrintEnginePropertyKey key) const Q_DECL_OVERRIDE;
+ void setProperty(PrintEnginePropertyKey key, const QVariant &value) override;
+ QVariant property(PrintEnginePropertyKey key) const override;
// end reimplementations QPdfPrintEngine
private:
@@ -87,13 +87,12 @@ public:
QCupsPrintEnginePrivate(QPrinter::PrinterMode m);
~QCupsPrintEnginePrivate();
- bool openPrintDevice() Q_DECL_OVERRIDE;
- void closePrintDevice() Q_DECL_OVERRIDE;
+ bool openPrintDevice() override;
+ void closePrintDevice() override;
private:
Q_DISABLE_COPY(QCupsPrintEnginePrivate)
- void setupDefaultPrinter();
void changePrinter(const QString &newPrinter);
void setPageSize(const QPageSize &pageSize);
diff --git a/src/plugins/printsupport/cups/qcupsprintersupport_p.h b/src/plugins/printsupport/cups/qcupsprintersupport_p.h
index df6507d324..42de28aec0 100644
--- a/src/plugins/printsupport/cups/qcupsprintersupport_p.h
+++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h
@@ -64,12 +64,12 @@ public:
QCupsPrinterSupport();
~QCupsPrinterSupport();
- QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) Q_DECL_OVERRIDE;
- QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) Q_DECL_OVERRIDE;
+ QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) override;
+ QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) override;
- QPrintDevice createPrintDevice(const QString &id) Q_DECL_OVERRIDE;
- QStringList availablePrintDeviceIds() const Q_DECL_OVERRIDE;
- QString defaultPrintDeviceId() const Q_DECL_OVERRIDE;
+ QPrintDevice createPrintDevice(const QString &id) override;
+ QStringList availablePrintDeviceIds() const override;
+ QString defaultPrintDeviceId() const override;
private:
QString cupsOption(int i, const QString &key) const;
diff --git a/src/plugins/printsupport/cups/qppdprintdevice.cpp b/src/plugins/printsupport/cups/qppdprintdevice.cpp
index 9efa83d409..340b1a1ff4 100644
--- a/src/plugins/printsupport/cups/qppdprintdevice.cpp
+++ b/src/plugins/printsupport/cups/qppdprintdevice.cpp
@@ -42,6 +42,8 @@
#include <QtCore/QMimeDatabase>
#include <qdebug.h>
+#include "private/qcups_p.h" // Only needed for PDPK_*
+
#ifndef QT_LINUXBASE // LSB merges everything into cups.h
#include <cups/language.h>
#endif
@@ -421,6 +423,46 @@ QPrint::ColorMode QPpdPrintDevice::defaultColorMode() const
return QPrint::GrayScale;
}
+QVariant QPpdPrintDevice::property(QPrintDevice::PrintDevicePropertyKey key) const
+{
+ if (key == PDPK_PpdFile)
+ return QVariant::fromValue<ppd_file_t *>(m_ppd);
+ else if (key == PDPK_CupsJobPriority)
+ return printerOption(QStringLiteral("job-priority"));
+ else if (key == PDPK_CupsJobSheets)
+ return printerOption(QStringLiteral("job-sheets"));
+ else if (key == PDPK_CupsJobBilling)
+ return printerOption(QStringLiteral("job-billing"));
+ else if (key == PDPK_CupsJobHoldUntil)
+ return printerOption(QStringLiteral("job-hold-until"));
+
+ return QPlatformPrintDevice::property(key);
+}
+
+bool QPpdPrintDevice::setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value)
+{
+ if (key == PDPK_PpdOption) {
+ const QStringList values = value.toStringList();
+ if (values.count() == 2) {
+ ppdMarkOption(m_ppd, values[0].toLatin1(), values[1].toLatin1());
+ return true;
+ }
+ }
+
+ return QPlatformPrintDevice::setProperty(key, value);
+}
+
+bool QPpdPrintDevice::isFeatureAvailable(QPrintDevice::PrintDevicePropertyKey key, const QVariant &params) const
+{
+ if (key == PDPK_PpdChoiceIsInstallableConflict) {
+ const QStringList values = params.toStringList();
+ if (values.count() == 2)
+ return ppdInstallableConflict(m_ppd, values[0].toLatin1(), values[1].toLatin1());
+ }
+
+ return QPlatformPrintDevice::isFeatureAvailable(key, params);
+}
+
#ifndef QT_NO_MIMETYPE
void QPpdPrintDevice::loadMimeTypes() const
{
@@ -452,7 +494,7 @@ void QPpdPrintDevice::loadPrinter()
}
// Get the print instance and PPD file
- m_cupsDest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, m_cupsName, m_cupsInstance);
+ m_cupsDest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, m_cupsName, m_cupsInstance.isNull() ? nullptr : m_cupsInstance.constData());
if (m_cupsDest) {
const char *ppdFile = cupsGetPPD(m_cupsName);
if (ppdFile) {
@@ -461,6 +503,8 @@ void QPpdPrintDevice::loadPrinter()
}
if (m_ppd) {
ppdMarkDefaults(m_ppd);
+ cupsMarkOptions(m_ppd, m_cupsDest->num_options, m_cupsDest->options);
+ ppdLocalize(m_ppd);
} else {
cupsFreeDests(1, m_cupsDest);
m_cupsDest = 0;
diff --git a/src/plugins/printsupport/cups/qppdprintdevice.h b/src/plugins/printsupport/cups/qppdprintdevice.h
index fab7077ce4..9867083bd7 100644
--- a/src/plugins/printsupport/cups/qppdprintdevice.h
+++ b/src/plugins/printsupport/cups/qppdprintdevice.h
@@ -69,35 +69,39 @@ public:
explicit QPpdPrintDevice(const QString &id);
virtual ~QPpdPrintDevice();
- bool isValid() const Q_DECL_OVERRIDE;
- bool isDefault() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
+ bool isDefault() const override;
- QPrint::DeviceState state() const Q_DECL_OVERRIDE;
+ QPrint::DeviceState state() const override;
- QPageSize defaultPageSize() const Q_DECL_OVERRIDE;
+ QPageSize defaultPageSize() const override;
QMarginsF printableMargins(const QPageSize &pageSize, QPageLayout::Orientation orientation,
- int resolution) const Q_DECL_OVERRIDE;
+ int resolution) const override;
- int defaultResolution() const Q_DECL_OVERRIDE;
+ int defaultResolution() const override;
- QPrint::InputSlot defaultInputSlot() const Q_DECL_OVERRIDE;
+ QPrint::InputSlot defaultInputSlot() const override;
- QPrint::OutputBin defaultOutputBin() const Q_DECL_OVERRIDE;
+ QPrint::OutputBin defaultOutputBin() const override;
- QPrint::DuplexMode defaultDuplexMode() const Q_DECL_OVERRIDE;
+ QPrint::DuplexMode defaultDuplexMode() const override;
- QPrint::ColorMode defaultColorMode() const Q_DECL_OVERRIDE;
+ QPrint::ColorMode defaultColorMode() const override;
+
+ QVariant property(QPrintDevice::PrintDevicePropertyKey key) const override;
+ bool setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value) override;
+ bool isFeatureAvailable(QPrintDevice::PrintDevicePropertyKey key, const QVariant &params) const override;
protected:
- void loadPageSizes() const Q_DECL_OVERRIDE;
- void loadResolutions() const Q_DECL_OVERRIDE;
- void loadInputSlots() const Q_DECL_OVERRIDE;
- void loadOutputBins() const Q_DECL_OVERRIDE;
- void loadDuplexModes() const Q_DECL_OVERRIDE;
- void loadColorModes() const Q_DECL_OVERRIDE;
+ void loadPageSizes() const override;
+ void loadResolutions() const override;
+ void loadInputSlots() const override;
+ void loadOutputBins() const override;
+ void loadDuplexModes() const override;
+ void loadColorModes() const override;
#ifndef QT_NO_MIMETYPE
- void loadMimeTypes() const Q_DECL_OVERRIDE;
+ void loadMimeTypes() const override;
#endif
private:
diff --git a/src/plugins/printsupport/windows/qwindowsprintdevice.cpp b/src/plugins/printsupport/windows/qwindowsprintdevice.cpp
index 1cb14514ee..b1589c0738 100644
--- a/src/plugins/printsupport/windows/qwindowsprintdevice.cpp
+++ b/src/plugins/printsupport/windows/qwindowsprintdevice.cpp
@@ -87,13 +87,13 @@ static LPDEVMODE getDevmode(HANDLE hPrinter, const QString &printerId)
// Allocate the required DEVMODE buffer
LONG dmSize = DocumentProperties(NULL, hPrinter, printerIdUtf16, NULL, NULL, 0);
if (dmSize <= 0)
- return Q_NULLPTR;
+ return nullptr;
LPDEVMODE pDevMode = reinterpret_cast<LPDEVMODE>(malloc(dmSize));
// Get the default DevMode
LONG result = DocumentProperties(NULL, hPrinter, printerIdUtf16, pDevMode, NULL, DM_OUT_BUFFER);
if (result != IDOK) {
free(pDevMode);
- pDevMode = Q_NULLPTR;
+ pDevMode = nullptr;
}
return pDevMode;
}
diff --git a/src/plugins/printsupport/windows/qwindowsprintdevice.h b/src/plugins/printsupport/windows/qwindowsprintdevice.h
index d95a4316cc..6b51ee8785 100644
--- a/src/plugins/printsupport/windows/qwindowsprintdevice.h
+++ b/src/plugins/printsupport/windows/qwindowsprintdevice.h
@@ -64,34 +64,34 @@ public:
explicit QWindowsPrintDevice(const QString &id);
virtual ~QWindowsPrintDevice();
- bool isValid() const Q_DECL_OVERRIDE;
- bool isDefault() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
+ bool isDefault() const override;
- QPrint::DeviceState state() const Q_DECL_OVERRIDE;
+ QPrint::DeviceState state() const override;
- QPageSize defaultPageSize() const Q_DECL_OVERRIDE;
+ QPageSize defaultPageSize() const override;
QMarginsF printableMargins(const QPageSize &pageSize, QPageLayout::Orientation orientation,
- int resolution) const Q_DECL_OVERRIDE;
+ int resolution) const override;
- int defaultResolution() const Q_DECL_OVERRIDE;
+ int defaultResolution() const override;
- QPrint::InputSlot defaultInputSlot() const Q_DECL_OVERRIDE;
+ QPrint::InputSlot defaultInputSlot() const override;
- QPrint::DuplexMode defaultDuplexMode() const Q_DECL_OVERRIDE;
+ QPrint::DuplexMode defaultDuplexMode() const override;
- QPrint::ColorMode defaultColorMode() const Q_DECL_OVERRIDE;
+ QPrint::ColorMode defaultColorMode() const override;
static QStringList availablePrintDeviceIds();
static QString defaultPrintDeviceId();
protected:
- void loadPageSizes() const Q_DECL_OVERRIDE;
- void loadResolutions() const Q_DECL_OVERRIDE;
- void loadInputSlots() const Q_DECL_OVERRIDE;
- void loadOutputBins() const Q_DECL_OVERRIDE;
- void loadDuplexModes() const Q_DECL_OVERRIDE;
- void loadColorModes() const Q_DECL_OVERRIDE;
+ void loadPageSizes() const override;
+ void loadResolutions() const override;
+ void loadInputSlots() const override;
+ void loadOutputBins() const override;
+ void loadDuplexModes() const override;
+ void loadColorModes() const override;
private:
HANDLE m_hPrinter;
diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.h b/src/plugins/printsupport/windows/qwindowsprintersupport.h
index 84b60a8207..c42e7aa551 100644
--- a/src/plugins/printsupport/windows/qwindowsprintersupport.h
+++ b/src/plugins/printsupport/windows/qwindowsprintersupport.h
@@ -50,12 +50,12 @@ public:
QWindowsPrinterSupport();
~QWindowsPrinterSupport();
- QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) Q_DECL_OVERRIDE;
- QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) Q_DECL_OVERRIDE;
+ QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode, const QString &deviceId = QString()) override;
+ QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode) override;
- QPrintDevice createPrintDevice(const QString &id) Q_DECL_OVERRIDE;
- QStringList availablePrintDeviceIds() const Q_DECL_OVERRIDE;
- QString defaultPrintDeviceId() const Q_DECL_OVERRIDE;
+ QPrintDevice createPrintDevice(const QString &id) override;
+ QStringList availablePrintDeviceIds() const override;
+ QString defaultPrintDeviceId() const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/sqldrivers/db2/qsql_db2.cpp b/src/plugins/sqldrivers/db2/qsql_db2.cpp
index 2bfd99cfa9..1d7e985731 100644
--- a/src/plugins/sqldrivers/db2/qsql_db2.cpp
+++ b/src/plugins/sqldrivers/db2/qsql_db2.cpp
@@ -92,24 +92,24 @@ class QDB2Result: public QSqlResult
public:
QDB2Result(const QDB2Driver *drv);
~QDB2Result();
- bool prepare(const QString &query) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ bool prepare(const QString &query) override;
+ bool exec() override;
+ QVariant handle() const override;
protected:
- QVariant data(int field) Q_DECL_OVERRIDE;
- bool reset(const QString &query) Q_DECL_OVERRIDE;
- bool fetch(int i) Q_DECL_OVERRIDE;
- bool fetchNext() Q_DECL_OVERRIDE;
- bool fetchFirst() Q_DECL_OVERRIDE;
- bool fetchLast() Q_DECL_OVERRIDE;
- bool isNull(int i) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
- void detachFromResultSet() Q_DECL_OVERRIDE;
- bool nextResult() Q_DECL_OVERRIDE;
+ QVariant data(int field) override;
+ bool reset(const QString &query) override;
+ bool fetch(int i) override;
+ bool fetchNext() override;
+ bool fetchFirst() override;
+ bool fetchLast() override;
+ bool isNull(int i) override;
+ int size() override;
+ int numRowsAffected() override;
+ QSqlRecord record() const override;
+ void virtual_hook(int id, void *data) override;
+ void detachFromResultSet() override;
+ bool nextResult() override;
};
class QDB2ResultPrivate: public QSqlResultPrivate
@@ -156,7 +156,7 @@ static SQLTCHAR* qToTChar(const QString& str)
return (SQLTCHAR*)str.utf16();
}
-static QString qWarnDB2Handle(int handleType, SQLHANDLE handle)
+static QString qWarnDB2Handle(int handleType, SQLHANDLE handle, int *errorCode)
{
SQLINTEGER nativeCode;
SQLSMALLINT msgLen;
@@ -171,22 +171,51 @@ static QString qWarnDB2Handle(int handleType, SQLHANDLE handle)
(SQLTCHAR*) description,
SQL_MAX_MESSAGE_LENGTH - 1, /* in bytes, not in characters */
&msgLen);
- if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO)
+ if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
+ if (errorCode)
+ *errorCode = nativeCode;
return QString(qFromTChar(description));
+ }
return QString();
}
-static QString qDB2Warn(const QDB2DriverPrivate* d)
+static QString qDB2Warn(const QDB2DriverPrivate* d, QStringList *errorCodes = nullptr)
{
- return (qWarnDB2Handle(SQL_HANDLE_ENV, d->hEnv) + QLatin1Char(' ')
- + qWarnDB2Handle(SQL_HANDLE_DBC, d->hDbc));
+ int errorCode = 0;
+ QString error = qWarnDB2Handle(SQL_HANDLE_ENV, d->hEnv, &errorCode);
+ if (errorCodes && errorCode != 0) {
+ *errorCodes << QString::number(errorCode);
+ errorCode = 0;
+ }
+ if (!error.isEmpty())
+ error += QLatin1Char(' ');
+ error += qWarnDB2Handle(SQL_HANDLE_DBC, d->hDbc, &errorCode);
+ if (errorCodes && errorCode != 0)
+ *errorCodes << QString::number(errorCode);
+ return error;
}
-static QString qDB2Warn(const QDB2ResultPrivate* d)
+static QString qDB2Warn(const QDB2ResultPrivate* d, QStringList *errorCodes = nullptr)
{
- return (qWarnDB2Handle(SQL_HANDLE_ENV, d->drv_d_func()->hEnv) + QLatin1Char(' ')
- + qWarnDB2Handle(SQL_HANDLE_DBC, d->drv_d_func()->hDbc)
- + qWarnDB2Handle(SQL_HANDLE_STMT, d->hStmt));
+ int errorCode = 0;
+ QString error = qWarnDB2Handle(SQL_HANDLE_ENV, d->drv_d_func()->hEnv, &errorCode);
+ if (errorCodes && errorCode != 0) {
+ *errorCodes << QString::number(errorCode);
+ errorCode = 0;
+ }
+ if (!error.isEmpty())
+ error += QLatin1Char(' ');
+ error += qWarnDB2Handle(SQL_HANDLE_DBC, d->drv_d_func()->hDbc, &errorCode);
+ if (errorCodes && errorCode != 0) {
+ *errorCodes << QString::number(errorCode);
+ errorCode = 0;
+ }
+ if (!error.isEmpty())
+ error += QLatin1Char(' ');
+ error += qWarnDB2Handle(SQL_HANDLE_STMT, d->hStmt, &errorCode);
+ if (errorCodes && errorCode != 0)
+ *errorCodes << QString::number(errorCode);
+ return error;
}
static void qSqlWarning(const QString& message, const QDB2DriverPrivate* d)
@@ -204,13 +233,19 @@ static void qSqlWarning(const QString& message, const QDB2ResultPrivate* d)
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
const QDB2DriverPrivate* p)
{
- return QSqlError(QLatin1String("QDB2: ") + err, qDB2Warn(p), type);
+ QStringList errorCodes;
+ const QString error = qDB2Warn(p, &errorCodes);
+ return QSqlError(QStringLiteral("QDB2: ") + err, error, type,
+ errorCodes.join(QLatin1Char(';')));
}
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
const QDB2ResultPrivate* p)
{
- return QSqlError(QLatin1String("QDB2: ") + err, qDB2Warn(p), type);
+ QStringList errorCodes;
+ const QString error = qDB2Warn(p, &errorCodes);
+ return QSqlError(QStringLiteral("QDB2: ") + err, error, type,
+ errorCodes.join(QLatin1Char(';')));
}
static QVariant::Type qDecodeDB2Type(SQLSMALLINT sqltype)
diff --git a/src/plugins/sqldrivers/db2/qsql_db2_p.h b/src/plugins/sqldrivers/db2/qsql_db2_p.h
index fa6d739479..79ae54ab2d 100644
--- a/src/plugins/sqldrivers/db2/qsql_db2_p.h
+++ b/src/plugins/sqldrivers/db2/qsql_db2_p.h
@@ -75,24 +75,24 @@ public:
explicit QDB2Driver(QObject* parent = 0);
QDB2Driver(Qt::HANDLE env, Qt::HANDLE con, QObject* parent = 0);
~QDB2Driver();
- bool hasFeature(DriverFeature) const Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QSqlRecord record(const QString &tableName) const Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType type) const Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString &tablename) const Q_DECL_OVERRIDE;
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
- QString formatValue(const QSqlField &field, bool trimStrings) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature) const override;
+ void close() override;
+ QSqlRecord record(const QString &tableName) const override;
+ QStringList tables(QSql::TableType type) const override;
+ QSqlResult *createResult() const override;
+ QSqlIndex primaryIndex(const QString &tablename) const override;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
+ QString formatValue(const QSqlField &field, bool trimStrings) const override;
+ QVariant handle() const override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port,
- const QString& connOpts) Q_DECL_OVERRIDE;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ const QString& connOpts) override;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const override;
private:
bool setAutoCommit(bool autoCommit);
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
index c50fc7916a..d89051191c 100644
--- a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
+++ b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
@@ -356,16 +356,16 @@ class QIBaseResult : public QSqlCachedResult
public:
explicit QIBaseResult(const QIBaseDriver* db);
- bool prepare(const QString &query) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ bool prepare(const QString &query) override;
+ bool exec() override;
+ QVariant handle() const override;
protected:
- bool gotoNext(QSqlCachedResult::ValueCache& row, int rowIdx) Q_DECL_OVERRIDE;
- bool reset (const QString &query) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
+ bool gotoNext(QSqlCachedResult::ValueCache& row, int rowIdx) override;
+ bool reset (const QString &query) override;
+ int size() override;
+ int numRowsAffected() override;
+ QSqlRecord record() const override;
};
class QIBaseResultPrivate: public QSqlCachedResultPrivate
@@ -388,7 +388,8 @@ public:
return false;
q->setLastError(QSqlError(QCoreApplication::translate("QIBaseResult", msg),
- imsg, typ, int(sqlcode)));
+ imsg, typ,
+ sqlcode != -1 ? QString::number(sqlcode) : QString()));
return true;
}
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase_p.h b/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
index c7cee41462..295f6c0cec 100644
--- a/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
+++ b/src/plugins/sqldrivers/ibase/qsql_ibase_p.h
@@ -74,36 +74,36 @@ public:
explicit QIBaseDriver(QObject *parent = 0);
explicit QIBaseDriver(isc_db_handle connection, QObject *parent = 0);
virtual ~QIBaseDriver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port,
- const QString &connOpts) Q_DECL_OVERRIDE;
+ const QString &connOpts) override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port) { return open(db, user, password, host, port, QString()); }
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
+ void close() override;
+ QSqlResult *createResult() const override;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
+ QStringList tables(QSql::TableType) const override;
- QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString &table) const Q_DECL_OVERRIDE;
+ QSqlRecord record(const QString& tablename) const override;
+ QSqlIndex primaryIndex(const QString &table) const override;
- QString formatValue(const QSqlField &field, bool trimStrings) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ QString formatValue(const QSqlField &field, bool trimStrings) const override;
+ QVariant handle() const override;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const override;
- bool subscribeToNotification(const QString &name) Q_DECL_OVERRIDE;
- bool unsubscribeFromNotification(const QString &name) Q_DECL_OVERRIDE;
- QStringList subscribedToNotifications() const Q_DECL_OVERRIDE;
+ bool subscribeToNotification(const QString &name) override;
+ bool unsubscribeFromNotification(const QString &name) override;
+ QStringList subscribedToNotifications() const override;
private Q_SLOTS:
void qHandleEventNotification(void* updatedResultBuffer);
diff --git a/src/plugins/sqldrivers/mysql/main.cpp b/src/plugins/sqldrivers/mysql/main.cpp
index 00d9c5bb34..d8d70483ef 100644
--- a/src/plugins/sqldrivers/mysql/main.cpp
+++ b/src/plugins/sqldrivers/mysql/main.cpp
@@ -51,7 +51,7 @@ class QMYSQLDriverPlugin : public QSqlDriverPlugin
public:
QMYSQLDriverPlugin();
- QSqlDriver* create(const QString &) Q_DECL_OVERRIDE;
+ QSqlDriver* create(const QString &) override;
};
QMYSQLDriverPlugin::QMYSQLDriverPlugin()
diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
index 365f89957a..53a72779a9 100644
--- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
+++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
@@ -175,26 +175,26 @@ public:
explicit QMYSQLResult(const QMYSQLDriver *db);
~QMYSQLResult();
- QVariant handle() const Q_DECL_OVERRIDE;
+ QVariant handle() const override;
protected:
void cleanup();
- bool fetch(int i) Q_DECL_OVERRIDE;
- bool fetchNext() Q_DECL_OVERRIDE;
- bool fetchLast() Q_DECL_OVERRIDE;
- bool fetchFirst() Q_DECL_OVERRIDE;
- QVariant data(int field) Q_DECL_OVERRIDE;
- bool isNull(int field) Q_DECL_OVERRIDE;
- bool reset (const QString& query) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QVariant lastInsertId() const Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
- bool nextResult() Q_DECL_OVERRIDE;
+ bool fetch(int i) override;
+ bool fetchNext() override;
+ bool fetchLast() override;
+ bool fetchFirst() override;
+ QVariant data(int field) override;
+ bool isNull(int field) override;
+ bool reset (const QString& query) override;
+ int size() override;
+ int numRowsAffected() override;
+ QVariant lastInsertId() const override;
+ QSqlRecord record() const override;
+ void virtual_hook(int id, void *data) override;
+ bool nextResult() override;
#if MYSQL_VERSION_ID >= 40108
- bool prepare(const QString &stmt) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
+ bool prepare(const QString &stmt) override;
+ bool exec() override;
#endif
};
@@ -269,7 +269,7 @@ static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
const char *cerr = p->mysql ? mysql_error(p->mysql) : 0;
return QSqlError(QLatin1String("QMYSQL: ") + err,
p->tc ? toUnicode(p->tc, cerr) : QString::fromLatin1(cerr),
- type, mysql_errno(p->mysql));
+ type, QString::number(mysql_errno(p->mysql)));
}
@@ -349,7 +349,7 @@ static QSqlError qMakeStmtError(const QString& err, QSqlError::ErrorType type,
const char *cerr = mysql_stmt_error(stmt);
return QSqlError(QLatin1String("QMYSQL3: ") + err,
QString::fromLatin1(cerr),
- type, mysql_stmt_errno(stmt));
+ type, QString::number(mysql_stmt_errno(stmt)));
}
static bool qIsBlob(int t)
diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql_p.h b/src/plugins/sqldrivers/mysql/qsql_mysql_p.h
index 7641f9aa34..48b04fb1f5 100644
--- a/src/plugins/sqldrivers/mysql/qsql_mysql_p.h
+++ b/src/plugins/sqldrivers/mysql/qsql_mysql_p.h
@@ -78,29 +78,29 @@ public:
explicit QMYSQLDriver(QObject *parent=0);
explicit QMYSQLDriver(MYSQL *con, QObject * parent=0);
~QMYSQLDriver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
bool open(const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
- const QString& connOpts) Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString& tablename) const Q_DECL_OVERRIDE;
- QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
+ const QString& connOpts) override;
+ void close() override;
+ QSqlResult *createResult() const override;
+ QStringList tables(QSql::TableType) const override;
+ QSqlIndex primaryIndex(const QString& tablename) const override;
+ QSqlRecord record(const QString& tablename) const override;
QString formatValue(const QSqlField &field,
- bool trimStrings) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ bool trimStrings) const override;
+ QVariant handle() const override;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const override;
- bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const override;
protected:
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
private:
void init();
};
diff --git a/src/plugins/sqldrivers/oci/qsql_oci.cpp b/src/plugins/sqldrivers/oci/qsql_oci.cpp
index 9ce2fc1b55..272e1bc083 100644
--- a/src/plugins/sqldrivers/oci/qsql_oci.cpp
+++ b/src/plugins/sqldrivers/oci/qsql_oci.cpp
@@ -55,6 +55,7 @@
#include <qvarlengtharray.h>
#include <qvector.h>
#include <qdebug.h>
+#include <qtimezone.h>
// This is needed for oracle oci when compiling with mingw-w64 headers
#if defined(__MINGW64_VERSION_MAJOR) && defined(_WIN64)
@@ -112,9 +113,6 @@ static const ub2 qOraCharset = OCI_UCS2ID;
typedef QVarLengthArray<sb2, 32> IndicatorArray;
typedef QVarLengthArray<ub2, 32> SizeArray;
-static QByteArray qMakeOraDate(const QDateTime& dt);
-static QDateTime qMakeDate(const char* oraDate);
-
static QByteArray qMakeOCINumber(const qlonglong &ll, OCIError *err);
static QByteArray qMakeOCINumber(const qulonglong& ull, OCIError* err);
@@ -156,6 +154,60 @@ QOCIRowId::~QOCIRowId()
OCIDescriptorFree(id, OCI_DTYPE_ROWID);
}
+class QOCIDateTime
+{
+public:
+ QOCIDateTime(OCIEnv *env, OCIError *err, const QDateTime &dt = QDateTime());
+ ~QOCIDateTime();
+ OCIDateTime *dateTime;
+ static QDateTime fromOCIDateTime(OCIEnv *env, OCIError *err, OCIDateTime *dt);
+};
+
+QOCIDateTime::QOCIDateTime(OCIEnv *env, OCIError *err, const QDateTime &dt)
+ : dateTime(nullptr)
+{
+ OCIDescriptorAlloc(env, reinterpret_cast<void**>(&dateTime), OCI_DTYPE_TIMESTAMP_TZ, 0, 0);
+ if (dt.isValid()) {
+ const QDate date = dt.date();
+ const QTime time = dt.time();
+ // Zone in +hh:mm format (stripping UTC prefix from OffsetName)
+ QString timeZone = dt.timeZone().displayName(dt, QTimeZone::OffsetName).mid(3);
+ const OraText *tz = reinterpret_cast<const OraText *>(timeZone.utf16());
+ OCIDateTimeConstruct(env, err, dateTime, date.year(), date.month(), date.day(), time.hour(),
+ time.minute(), time.second(), time.msec() * 1000000,
+ const_cast<OraText *>(tz), timeZone.length() * sizeof(QChar));
+ }
+}
+
+QOCIDateTime::~QOCIDateTime()
+{
+ if (dateTime != nullptr)
+ OCIDescriptorFree(dateTime, OCI_DTYPE_TIMESTAMP_TZ);
+}
+
+QDateTime QOCIDateTime::fromOCIDateTime(OCIEnv *env, OCIError *err, OCIDateTime *dateTime)
+{
+ sb2 year;
+ ub1 month, day, hour, minute, second;
+ ub4 nsec;
+ sb1 tzHour, tzMinute;
+
+ OCIDateTimeGetDate(env, err, dateTime, &year, &month, &day);
+ OCIDateTimeGetTime(env, err, dateTime, &hour, &minute, &second, &nsec);
+ OCIDateTimeGetTimeZoneOffset(env, err, dateTime, &tzHour, &tzMinute);
+ int secondsOffset = (qAbs(tzHour) * 60 + tzMinute) * 60;
+ if (tzHour < 0)
+ secondsOffset = -secondsOffset;
+ // OCIDateTimeGetTime gives "fractions of second" as nanoseconds
+ return QDateTime(QDate(year, month, day), QTime(hour, minute, second, nsec / 1000000),
+ Qt::OffsetFromUTC, secondsOffset);
+}
+
+struct TempStorage {
+ QList<QByteArray> rawData;
+ QList<QOCIDateTime *> dateTimes;
+};
+
typedef QSharedDataPointer<QOCIRowId> QOCIRowIdPointer;
QT_BEGIN_INCLUDE_NAMESPACE
Q_DECLARE_METATYPE(QOCIRowIdPointer)
@@ -193,19 +245,19 @@ class QOCIResult: public QSqlCachedResult
public:
QOCIResult(const QOCIDriver *db);
~QOCIResult();
- bool prepare(const QString &query) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ bool prepare(const QString &query) override;
+ bool exec() override;
+ QVariant handle() const override;
protected:
- bool gotoNext(ValueCache &values, int index) Q_DECL_OVERRIDE;
- bool reset(const QString &query) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- QVariant lastInsertId() const Q_DECL_OVERRIDE;
- bool execBatch(bool arrayBind = false) Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ bool gotoNext(ValueCache &values, int index) override;
+ bool reset(const QString &query) override;
+ int size() override;
+ int numRowsAffected() override;
+ QSqlRecord record() const override;
+ QVariant lastInsertId() const override;
+ bool execBatch(bool arrayBind = false) override;
+ void virtual_hook(int id, void *data) override;
bool fetchNext() override;
};
@@ -228,11 +280,11 @@ public:
void setStatementAttributes();
int bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
- const QVariant &val, dvoid *indPtr, ub2 *tmpSize, QList<QByteArray> &tmpStorage);
+ const QVariant &val, dvoid *indPtr, ub2 *tmpSize, TempStorage &tmpStorage);
int bindValues(QVector<QVariant> &values, IndicatorArray &indicators, SizeArray &tmpSizes,
- QList<QByteArray> &tmpStorage);
+ TempStorage &tmpStorage);
void outValues(QVector<QVariant> &values, IndicatorArray &indicators,
- QList<QByteArray> &tmpStorage);
+ TempStorage &tmpStorage);
inline bool isOutValue(int i) const
{ Q_Q(const QOCIResult); return q->bindValueType(i) & QSql::Out; }
inline bool isBinaryValue(int i) const
@@ -305,7 +357,7 @@ void QOCIResultPrivate::setStatementAttributes()
}
int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, int pos,
- const QVariant &val, dvoid *indPtr, ub2 *tmpSize, QList<QByteArray> &tmpStorage)
+ const QVariant &val, dvoid *indPtr, ub2 *tmpSize, TempStorage &tmpStorage)
{
int r = OCI_SUCCESS;
void *data = const_cast<void *>(val.constData());
@@ -323,14 +375,15 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
case QVariant::Time:
case QVariant::Date:
case QVariant::DateTime: {
- QByteArray ba = qMakeOraDate(val.toDateTime());
+ QOCIDateTime *ptr = new QOCIDateTime(env, err, val.toDateTime());
r = OCIBindByPos(sql, hbnd, err,
pos + 1,
- ba.data(),
- ba.size(),
- SQLT_DAT, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
- tmpStorage.append(ba);
- break; }
+ &ptr->dateTime,
+ sizeof(OCIDateTime *),
+ SQLT_TIMESTAMP_TZ, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
+ tmpStorage.dateTimes.append(ptr);
+ break;
+ }
case QVariant::Int:
r = OCIBindByPos(sql, hbnd, err,
pos + 1,
@@ -357,7 +410,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
ba.data(),
ba.size(),
SQLT_VNU, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
- tmpStorage.append(ba);
+ tmpStorage.rawData.append(ba);
break;
}
case QVariant::ULongLong:
@@ -368,7 +421,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
ba.data(),
ba.size(),
SQLT_VNU, indPtr, 0, 0, 0, 0, OCI_DEFAULT);
- tmpStorage.append(ba);
+ tmpStorage.rawData.append(ba);
break;
}
case QVariant::Double:
@@ -438,7 +491,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
}
if (r == OCI_SUCCESS)
setCharset(*hbnd, OCI_HTYPE_BIND);
- tmpStorage.append(ba);
+ tmpStorage.rawData.append(ba);
break;
} // default case
} // switch
@@ -448,7 +501,7 @@ int QOCIResultPrivate::bindValue(OCIStmt *sql, OCIBind **hbnd, OCIError *err, in
}
int QOCIResultPrivate::bindValues(QVector<QVariant> &values, IndicatorArray &indicators,
- SizeArray &tmpSizes, QList<QByteArray> &tmpStorage)
+ SizeArray &tmpSizes, TempStorage &tmpStorage)
{
int r = OCI_SUCCESS;
for (int i = 0; i < values.count(); ++i) {
@@ -466,27 +519,30 @@ int QOCIResultPrivate::bindValues(QVector<QVariant> &values, IndicatorArray &ind
}
// will assign out value and remove its temp storage.
-static void qOraOutValue(QVariant &value, QList<QByteArray> &storage, OCIError* err)
+static void qOraOutValue(QVariant &value, TempStorage &tmpStorage, OCIEnv *env, OCIError* err)
{
switch (value.type()) {
case QVariant::Time:
- value = qMakeDate(storage.takeFirst()).time();
+ value = QOCIDateTime::fromOCIDateTime(env, err,
+ tmpStorage.dateTimes.takeFirst()->dateTime).time();
break;
case QVariant::Date:
- value = qMakeDate(storage.takeFirst()).date();
+ value = QOCIDateTime::fromOCIDateTime(env, err,
+ tmpStorage.dateTimes.takeFirst()->dateTime).date();
break;
case QVariant::DateTime:
- value = qMakeDate(storage.takeFirst());
+ value = QOCIDateTime::fromOCIDateTime(env, err,
+ tmpStorage.dateTimes.takeFirst()->dateTime);
break;
case QVariant::LongLong:
- value = qMakeLongLong(storage.takeFirst(), err);
+ value = qMakeLongLong(tmpStorage.rawData.takeFirst(), err);
break;
case QVariant::ULongLong:
- value = qMakeULongLong(storage.takeFirst(), err);
+ value = qMakeULongLong(tmpStorage.rawData.takeFirst(), err);
break;
case QVariant::String:
value = QString(
- reinterpret_cast<const QChar *>(storage.takeFirst().constData()));
+ reinterpret_cast<const QChar *>(tmpStorage.rawData.takeFirst().constData()));
break;
default:
break; //nothing
@@ -494,14 +550,14 @@ static void qOraOutValue(QVariant &value, QList<QByteArray> &storage, OCIError*
}
void QOCIResultPrivate::outValues(QVector<QVariant> &values, IndicatorArray &indicators,
- QList<QByteArray> &tmpStorage)
+ TempStorage &tmpStorage)
{
for (int i = 0; i < values.count(); ++i) {
if (!isOutValue(i))
continue;
- qOraOutValue(values[i], tmpStorage, err);
+ qOraOutValue(values[i], tmpStorage, env, err);
QVariant::Type typ = values.at(i).type();
if (indicators[i] == -1) // NULL
@@ -588,7 +644,8 @@ QSqlError qMakeError(const QString& errString, QSqlError::ErrorType type, OCIErr
{
int errorCode = 0;
const QString oraErrorString = qOraWarn(err, &errorCode);
- return QSqlError(errString, oraErrorString, type, errorCode);
+ return QSqlError(errString, oraErrorString, type,
+ errorCode != -1 ? QString::number(errorCode) : QString());
}
QVariant::Type qDecodeOCIType(const QString& ocitype, QSql::NumericalPrecisionPolicy precisionPolicy)
@@ -693,11 +750,9 @@ QVariant::Type qDecodeOCIType(int ocitype, QSql::NumericalPrecisionPolicy precis
break;
case SQLT_DAT:
case SQLT_ODT:
-#ifdef SQLT_TIMESTAMP
case SQLT_TIMESTAMP:
case SQLT_TIMESTAMP_TZ:
case SQLT_TIMESTAMP_LTZ:
-#endif
type = QVariant::DateTime;
break;
default:
@@ -724,27 +779,6 @@ static QSqlField qFromOraInf(const OraFieldInfo &ofi)
}
/*!
- \internal
-
- Convert QDateTime to the internal Oracle DATE format NB!
- It does not handle BCE dates.
-*/
-QByteArray qMakeOraDate(const QDateTime& dt)
-{
- QByteArray ba;
- ba.resize(7);
- int year = dt.date().year();
- ba[0]= (year / 100) + 100; // century
- ba[1]= (year % 100) + 100; // year
- ba[2]= dt.date().month();
- ba[3]= dt.date().day();
- ba[4]= dt.time().hour() + 1;
- ba[5]= dt.time().minute() + 1;
- ba[6]= dt.time().second() + 1;
- return ba;
-}
-
-/*!
\internal
Convert qlonglong to the internal Oracle OCINumber format.
@@ -794,22 +828,6 @@ qulonglong qMakeULongLong(const char* ociNumber, OCIError* err)
return qull;
}
-QDateTime qMakeDate(const char* oraDate)
-{
- int century = uchar(oraDate[0]);
- if(century >= 100){
- int year = uchar(oraDate[1]);
- year = ((century-100)*100) + (year-100);
- int month = oraDate[2];
- int day = oraDate[3];
- int hour = oraDate[4] - 1;
- int min = oraDate[5] - 1;
- int sec = oraDate[6] - 1;
- return QDateTime(QDate(year,month,day), QTime(hour,min,sec));
- }
- return QDateTime();
-}
-
class QOCICols
{
public:
@@ -832,7 +850,7 @@ private:
class OraFieldInf
{
public:
- OraFieldInf(): data(0), len(0), ind(0), typ(QVariant::Invalid), oraType(0), def(0), lob(0)
+ OraFieldInf() : data(0), len(0), ind(0), typ(QVariant::Invalid), oraType(0), def(0), lob(0), dataPtr(nullptr)
{}
~OraFieldInf();
char *data;
@@ -842,6 +860,7 @@ private:
ub4 oraType;
OCIDefine *def;
OCILobLocator *lob;
+ void *dataPtr;
};
QVector<OraFieldInf> fieldInf;
@@ -856,6 +875,20 @@ QOCICols::OraFieldInf::~OraFieldInf()
if (r != 0)
qWarning("QOCICols: Cannot free LOB descriptor");
}
+ if (dataPtr) {
+ switch (typ) {
+ case QVariant::Date:
+ case QVariant::Time:
+ case QVariant::DateTime: {
+ int r = OCIDescriptorFree(dataPtr, OCI_DTYPE_TIMESTAMP_TZ);
+ if (r != OCI_SUCCESS)
+ qWarning("QOCICols: Cannot free OCIDateTime descriptor");
+ break;
+ }
+ default:
+ break;
+ }
+ }
}
QOCICols::QOCICols(int size, QOCIResultPrivate* dp)
@@ -902,13 +935,18 @@ QOCICols::QOCICols(int size, QOCIResultPrivate* dp)
switch (ofi.type) {
case QVariant::DateTime:
+ r = OCIDescriptorAlloc(d->env, (void **)&fieldInf[idx].dataPtr, OCI_DTYPE_TIMESTAMP_TZ, 0, 0);
+ if (r != OCI_SUCCESS) {
+ qWarning("QOCICols: Unable to allocate the OCIDateTime descriptor");
+ break;
+ }
r = OCIDefineByPos(d->sql,
&dfn,
d->err,
count,
- create(idx, dataSize+1),
- dataSize+1,
- SQLT_DAT,
+ &fieldInf[idx].dataPtr,
+ sizeof(OCIDateTime *),
+ SQLT_TIMESTAMP_TZ,
&(fieldInf[idx].ind),
0, 0, OCI_DEFAULT);
break;
@@ -1323,11 +1361,10 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
fieldTypes.append(tp == QVariant::List ? boundValues.at(i).toList().value(0).type()
: tp);
}
-
- QList<QByteArray> tmpStorage;
SizeArray tmpSizes(columnCount);
QVector<QOCIBatchColumn> columns(columnCount);
QOCIBatchCleanupHandler cleaner(columns);
+ TempStorage tmpStorage;
// figuring out buffer sizes
for (i = 0; i < columnCount; ++i) {
@@ -1364,8 +1401,8 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
case QVariant::Time:
case QVariant::Date:
case QVariant::DateTime:
- col.bindAs = SQLT_DAT;
- col.maxLen = 7;
+ col.bindAs = SQLT_TIMESTAMP_TZ;
+ col.maxLen = sizeof(OCIDateTime *);
break;
case QVariant::Int:
@@ -1433,7 +1470,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
for (uint row = 0; row < col.recordCount; ++row) {
const QVariant &val = boundValues.at(i).toList().at(row);
- if (val.isNull()){
+ if (val.isNull() && !d->isOutValue(i)) {
columns[i].indicators[row] = -1;
columns[i].lengths[row] = 0;
} else {
@@ -1444,9 +1481,8 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
case QVariant::Date:
case QVariant::DateTime:{
columns[i].lengths[row] = columns[i].maxLen;
- const QByteArray ba = qMakeOraDate(val.toDateTime());
- Q_ASSERT(ba.size() == int(columns[i].maxLen));
- memcpy(dataPtr, ba.constData(), columns[i].maxLen);
+ QOCIDateTime *date = new QOCIDateTime(d->env, d->err, val.toDateTime());
+ *reinterpret_cast<OCIDateTime**>(dataPtr) = date->dateTime;
break;
}
case QVariant::Int:
@@ -1582,7 +1618,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
QVariant::Type tp = boundValues.at(i).type();
if (tp != QVariant::List) {
- qOraOutValue(boundValues[i], tmpStorage, d->err);
+ qOraOutValue(boundValues[i], tmpStorage, d->env, d->err);
if (*columns[i].indicators == -1)
boundValues[i] = QVariant(tp);
continue;
@@ -1594,16 +1630,16 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
for (uint r = 0; r < columns[i].recordCount; ++r){
if (columns[i].indicators[r] == -1) {
- (*list)[r] = QVariant();
+ (*list)[r] = QVariant(fieldTypes[i]);
continue;
}
switch(columns[i].bindAs) {
- case SQLT_DAT:
- (*list)[r] = qMakeDate(data + r * columns[i].maxLen);
+ case SQLT_TIMESTAMP_TZ:
+ (*list)[r] = QOCIDateTime::fromOCIDateTime(d->env, d->err,
+ *reinterpret_cast<OCIDateTime **>(data + r * columns[i].maxLen));
break;
-
case SQLT_INT:
(*list)[r] = *reinterpret_cast<int*>(data + r * columns[i].maxLen);
break;
@@ -1647,6 +1683,7 @@ bool QOCICols::execBatch(QOCIResultPrivate *d, QVector<QVariant> &boundValues, b
d->q_func()->setAt(QSql::BeforeFirstRow);
d->q_func()->setActive(true);
+ qDeleteAll(tmpStorage.dateTimes);
return true;
}
@@ -1755,7 +1792,8 @@ void QOCICols::getValues(QVector<QVariant> &v, int index)
switch (fld.typ) {
case QVariant::DateTime:
- v[index + i] = QVariant(qMakeDate(fld.data));
+ v[index + i] = QVariant(QOCIDateTime::fromOCIDateTime(d->env, d->err,
+ reinterpret_cast<OCIDateTime *>(fld.dataPtr)));
break;
case QVariant::Double:
case QVariant::Int:
@@ -1985,7 +2023,7 @@ bool QOCIResult::exec()
ub2 stmtType=0;
ub4 iters;
ub4 mode;
- QList<QByteArray> tmpStorage;
+ TempStorage tmpStorage;
IndicatorArray indicators(boundValueCount());
SizeArray tmpSizes(boundValueCount());
@@ -2056,7 +2094,7 @@ bool QOCIResult::exec()
if (hasOutValues())
d->outValues(boundValues(), indicators, tmpStorage);
-
+ qDeleteAll(tmpStorage.dateTimes);
return true;
}
diff --git a/src/plugins/sqldrivers/oci/qsql_oci_p.h b/src/plugins/sqldrivers/oci/qsql_oci_p.h
index 69911f4bee..295c131f1a 100644
--- a/src/plugins/sqldrivers/oci/qsql_oci_p.h
+++ b/src/plugins/sqldrivers/oci/qsql_oci_p.h
@@ -84,21 +84,21 @@ public:
const QString &password,
const QString &host,
int port,
- const QString &connOpts) Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
- QSqlRecord record(const QString &tablename) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString& tablename) const Q_DECL_OVERRIDE;
+ const QString &connOpts) override;
+ void close() override;
+ QSqlResult *createResult() const override;
+ QStringList tables(QSql::TableType) const override;
+ QSqlRecord record(const QString &tablename) const override;
+ QSqlIndex primaryIndex(const QString& tablename) const override;
QString formatValue(const QSqlField &field,
- bool trimStrings) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
- QString escapeIdentifier(const QString &identifier, IdentifierType) const Q_DECL_OVERRIDE;
+ bool trimStrings) const override;
+ QVariant handle() const override;
+ QString escapeIdentifier(const QString &identifier, IdentifierType) const override;
protected:
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
index c32a29c5e7..547eb2043d 100644
--- a/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
+++ b/src/plugins/sqldrivers/odbc/qsql_odbc.cpp
@@ -163,27 +163,27 @@ public:
QODBCResult(const QODBCDriver *db);
virtual ~QODBCResult();
- bool prepare(const QString &query) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
+ bool prepare(const QString &query) override;
+ bool exec() override;
- QVariant lastInsertId() const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ QVariant lastInsertId() const override;
+ QVariant handle() const override;
protected:
- bool fetchNext() Q_DECL_OVERRIDE;
- bool fetchFirst() Q_DECL_OVERRIDE;
- bool fetchLast() Q_DECL_OVERRIDE;
- bool fetchPrevious() Q_DECL_OVERRIDE;
- bool fetch(int i) Q_DECL_OVERRIDE;
- bool reset(const QString &query) Q_DECL_OVERRIDE;
- QVariant data(int field) Q_DECL_OVERRIDE;
- bool isNull(int field) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
- void detachFromResultSet() Q_DECL_OVERRIDE;
- bool nextResult() Q_DECL_OVERRIDE;
+ bool fetchNext() override;
+ bool fetchFirst() override;
+ bool fetchLast() override;
+ bool fetchPrevious() override;
+ bool fetch(int i) override;
+ bool reset(const QString &query) override;
+ QVariant data(int field) override;
+ bool isNull(int field) override;
+ int size() override;
+ int numRowsAffected() override;
+ QSqlRecord record() const override;
+ void virtual_hook(int id, void *data) override;
+ void detachFromResultSet() override;
+ bool nextResult() override;
};
class QODBCResultPrivate: public QSqlResultPrivate
@@ -335,7 +335,8 @@ static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, const
{
int nativeCode = -1;
QString message = qODBCWarn(p, &nativeCode);
- return QSqlError(QLatin1String("QODBC3: ") + err, message, type, nativeCode);
+ return QSqlError(QLatin1String("QODBC3: ") + err, message, type,
+ nativeCode != -1 ? QString::number(nativeCode) : QString());
}
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
@@ -343,7 +344,8 @@ static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
{
int nativeCode = -1;
QString message = qODBCWarn(p, &nativeCode);
- return QSqlError(QLatin1String("QODBC3: ") + err, qODBCWarn(p), type, nativeCode);
+ return QSqlError(QLatin1String("QODBC3: ") + err, qODBCWarn(p), type,
+ nativeCode != -1 ? QString::number(nativeCode) : QString());
}
static QVariant::Type qDecodeODBCType(SQLSMALLINT sqltype, bool isSigned = true)
diff --git a/src/plugins/sqldrivers/odbc/qsql_odbc_p.h b/src/plugins/sqldrivers/odbc/qsql_odbc_p.h
index f4ce8bc243..ea0aa6fc8b 100644
--- a/src/plugins/sqldrivers/odbc/qsql_odbc_p.h
+++ b/src/plugins/sqldrivers/odbc/qsql_odbc_p.h
@@ -92,30 +92,30 @@ public:
explicit QODBCDriver(QObject *parent=0);
QODBCDriver(SQLHANDLE env, SQLHANDLE con, QObject * parent=0);
virtual ~QODBCDriver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
- QSqlRecord record(const QString &tablename) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString &tablename) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
+ void close() override;
+ QSqlResult *createResult() const override;
+ QStringList tables(QSql::TableType) const override;
+ QSqlRecord record(const QString &tablename) const override;
+ QSqlIndex primaryIndex(const QString &tablename) const override;
+ QVariant handle() const override;
QString formatValue(const QSqlField &field,
- bool trimStrings) const Q_DECL_OVERRIDE;
+ bool trimStrings) const override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port,
- const QString &connOpts) Q_DECL_OVERRIDE;
+ const QString &connOpts) override;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const override;
- bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const override;
protected:
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
private:
bool endTrans();
diff --git a/src/plugins/sqldrivers/psql/main.cpp b/src/plugins/sqldrivers/psql/main.cpp
index 7657fcbfdf..c5d546f6ff 100644
--- a/src/plugins/sqldrivers/psql/main.cpp
+++ b/src/plugins/sqldrivers/psql/main.cpp
@@ -51,7 +51,7 @@ class QPSQLDriverPlugin : public QSqlDriverPlugin
public:
QPSQLDriverPlugin();
- QSqlDriver* create(const QString &) Q_DECL_OVERRIDE;
+ QSqlDriver* create(const QString &) override;
};
QPSQLDriverPlugin::QPSQLDriverPlugin()
diff --git a/src/plugins/sqldrivers/psql/qsql_psql.cpp b/src/plugins/sqldrivers/psql/qsql_psql.cpp
index 35b0f9a3e3..6f105f79ca 100644
--- a/src/plugins/sqldrivers/psql/qsql_psql.cpp
+++ b/src/plugins/sqldrivers/psql/qsql_psql.cpp
@@ -125,6 +125,14 @@ inline void qPQfreemem(void *buffer)
PQfreemem(buffer);
}
+/* Missing declaration of PGRES_SINGLE_TUPLE for PSQL below 9.2 */
+#if !defined PG_VERSION_NUM || PG_VERSION_NUM-0 < 90200
+static const int PGRES_SINGLE_TUPLE = 9;
+#endif
+
+typedef int StatementId;
+static const StatementId InvalidStatementId = 0;
+
class QPSQLResultPrivate;
class QPSQLResult: public QSqlResult
@@ -135,23 +143,25 @@ public:
QPSQLResult(const QPSQLDriver *db);
~QPSQLResult();
- QVariant handle() const Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ QVariant handle() const override;
+ void virtual_hook(int id, void *data) override;
protected:
void cleanup();
- bool fetch(int i) Q_DECL_OVERRIDE;
- bool fetchFirst() Q_DECL_OVERRIDE;
- bool fetchLast() Q_DECL_OVERRIDE;
- QVariant data(int i) Q_DECL_OVERRIDE;
- bool isNull(int field) Q_DECL_OVERRIDE;
- bool reset (const QString &query) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- QVariant lastInsertId() const Q_DECL_OVERRIDE;
- bool prepare(const QString &query) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
+ bool fetch(int i) override;
+ bool fetchFirst() override;
+ bool fetchLast() override;
+ bool fetchNext() override;
+ bool nextResult() override;
+ QVariant data(int i) override;
+ bool isNull(int field) override;
+ bool reset (const QString &query) override;
+ int size() override;
+ int numRowsAffected() override;
+ QSqlRecord record() const override;
+ QVariant lastInsertId() const override;
+ bool prepare(const QString &query) override;
+ bool exec() override;
};
class QPSQLDriverPrivate : public QSqlDriverPrivate
@@ -164,7 +174,9 @@ public:
pro(QPSQLDriver::Version6),
sn(0),
pendingNotifyCheck(false),
- hasBackslashEscape(false)
+ hasBackslashEscape(false),
+ stmtCount(0),
+ currentStmtId(InvalidStatementId)
{ dbmsType = QSqlDriver::PostgreSQL; }
PGconn *connection;
@@ -174,10 +186,19 @@ public:
QStringList seid;
mutable bool pendingNotifyCheck;
bool hasBackslashEscape;
+ int stmtCount;
+ StatementId currentStmtId;
void appendTables(QStringList &tl, QSqlQuery &t, QChar type);
- PGresult * exec(const char * stmt) const;
- PGresult * exec(const QString & stmt) const;
+ PGresult *exec(const char *stmt);
+ PGresult *exec(const QString &stmt);
+ StatementId sendQuery(const QString &stmt);
+ bool setSingleRowMode() const;
+ PGresult *getResult(StatementId stmtId) const;
+ void finishQuery(StatementId stmtId);
+ void discardResults() const;
+ StatementId generateStatementId();
+ void checkPendingNotifications() const;
QPSQLDriver::Protocol getPSQLVersion();
bool setEncodingUtf8();
void setDatestyle();
@@ -187,18 +208,11 @@ public:
void QPSQLDriverPrivate::appendTables(QStringList &tl, QSqlQuery &t, QChar type)
{
- QString query;
- if (pro >= QPSQLDriver::Version7_3) {
- query = QString::fromLatin1("select pg_class.relname, pg_namespace.nspname from pg_class "
- "left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid) "
- "where (pg_class.relkind = '%1') and (pg_class.relname !~ '^Inv') "
- "and (pg_class.relname !~ '^pg_') "
- "and (pg_namespace.nspname != 'information_schema') ").arg(type);
- } else {
- query = QString::fromLatin1("select relname, null from pg_class where (relkind = '%1') "
- "and (relname !~ '^Inv') "
- "and (relname !~ '^pg_') ").arg(type);
- }
+ QString query = QString::fromLatin1("select pg_class.relname, pg_namespace.nspname from pg_class "
+ "left join pg_namespace on (pg_class.relnamespace = pg_namespace.oid) "
+ "where (pg_class.relkind = '%1') and (pg_class.relname !~ '^Inv') "
+ "and (pg_class.relname !~ '^pg_') "
+ "and (pg_namespace.nspname != 'information_schema')").arg(type);
t.exec(query);
while (t.next()) {
QString schema = t.value(1).toString();
@@ -209,20 +223,89 @@ void QPSQLDriverPrivate::appendTables(QStringList &tl, QSqlQuery &t, QChar type)
}
}
-PGresult * QPSQLDriverPrivate::exec(const char * stmt) const
+PGresult *QPSQLDriverPrivate::exec(const char *stmt)
{
- Q_Q(const QPSQLDriver);
+ // PQexec() silently discards any prior query results that the application didn't eat.
PGresult *result = PQexec(connection, stmt);
- if (seid.size() && !pendingNotifyCheck) {
- pendingNotifyCheck = true;
- QMetaObject::invokeMethod(const_cast<QPSQLDriver*>(q), "_q_handleNotification", Qt::QueuedConnection, Q_ARG(int,0));
+ currentStmtId = result ? generateStatementId() : InvalidStatementId;
+ checkPendingNotifications();
+ return result;
+}
+
+PGresult *QPSQLDriverPrivate::exec(const QString &stmt)
+{
+ return exec((isUtf8 ? stmt.toUtf8() : stmt.toLocal8Bit()).constData());
+}
+
+StatementId QPSQLDriverPrivate::sendQuery(const QString &stmt)
+{
+ // Discard any prior query results that the application didn't eat.
+ // This is required for PQsendQuery()
+ discardResults();
+ const int result = PQsendQuery(connection,
+ (isUtf8 ? stmt.toUtf8() : stmt.toLocal8Bit()).constData());
+ currentStmtId = result ? generateStatementId() : InvalidStatementId;
+ return currentStmtId;
+}
+
+bool QPSQLDriverPrivate::setSingleRowMode() const
+{
+ // Activates single-row mode for last sent query, see:
+ // https://www.postgresql.org/docs/9.2/static/libpq-single-row-mode.html
+ // This method should be called immediately after the sendQuery() call.
+#if defined PG_VERSION_NUM && PG_VERSION_NUM-0 >= 90200
+ return PQsetSingleRowMode(connection) > 0;
+#else
+ return false;
+#endif
+}
+
+PGresult *QPSQLDriverPrivate::getResult(StatementId stmtId) const
+{
+ // Make sure the results of stmtId weren't discaded. This might
+ // happen for forward-only queries if somebody executed another
+ // SQL query on the same db connection.
+ if (stmtId != currentStmtId) {
+ // If you change the following warning, remember to update it
+ // on sql-driver.html page too.
+ qWarning("QPSQLDriver::getResult: Query results lost - "
+ "probably discarded on executing another SQL query.");
+ return nullptr;
}
+ PGresult *result = PQgetResult(connection);
+ checkPendingNotifications();
return result;
}
-PGresult * QPSQLDriverPrivate::exec(const QString & stmt) const
+void QPSQLDriverPrivate::finishQuery(StatementId stmtId)
+{
+ if (stmtId != InvalidStatementId && stmtId == currentStmtId) {
+ discardResults();
+ currentStmtId = InvalidStatementId;
+ }
+}
+
+void QPSQLDriverPrivate::discardResults() const
+{
+ while (PGresult *result = PQgetResult(connection))
+ PQclear(result);
+}
+
+StatementId QPSQLDriverPrivate::generateStatementId()
{
- return exec(isUtf8 ? stmt.toUtf8().constData() : stmt.toLocal8Bit().constData());
+ int stmtId = ++stmtCount;
+ if (stmtId <= 0)
+ stmtId = stmtCount = 1;
+ return stmtId;
+}
+
+void QPSQLDriverPrivate::checkPendingNotifications() const
+{
+ Q_Q(const QPSQLDriver);
+ if (seid.size() && !pendingNotifyCheck) {
+ pendingNotifyCheck = true;
+ QMetaObject::invokeMethod(const_cast<QPSQLDriver*>(q), "_q_handleNotification", Qt::QueuedConnection, Q_ARG(int,0));
+ }
}
class QPSQLResultPrivate : public QSqlResultPrivate
@@ -234,14 +317,19 @@ public:
: QSqlResultPrivate(q, drv),
result(0),
currentSize(-1),
+ canFetchMoreRows(false),
+ stmtId(InvalidStatementId),
preparedQueriesEnabled(false)
{ }
- QString fieldSerial(int i) const Q_DECL_OVERRIDE { return QLatin1Char('$') + QString::number(i + 1); }
+ QString fieldSerial(int i) const override { return QLatin1Char('$') + QString::number(i + 1); }
void deallocatePreparedStmt();
PGresult *result;
+ QList<PGresult*> nextResultSets;
int currentSize;
+ bool canFetchMoreRows;
+ StatementId stmtId;
bool preparedQueriesEnabled;
QString preparedStmtId;
@@ -264,21 +352,45 @@ static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
bool QPSQLResultPrivate::processResults()
{
Q_Q(QPSQLResult);
- if (!result)
+ if (!result) {
+ q->setSelect(false);
+ q->setActive(false);
+ currentSize = -1;
+ canFetchMoreRows = false;
+ if (stmtId != drv_d_func()->currentStmtId) {
+ q->setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",
+ "Query results lost - probably discarded on executing "
+ "another SQL query."), QSqlError::StatementError, drv_d_func(), result));
+ }
return false;
-
+ }
int status = PQresultStatus(result);
- if (status == PGRES_TUPLES_OK) {
+ switch (status) {
+ case PGRES_TUPLES_OK:
q->setSelect(true);
q->setActive(true);
- currentSize = PQntuples(result);
+ currentSize = q->isForwardOnly() ? -1 : PQntuples(result);
+ canFetchMoreRows = false;
+ return true;
+ case PGRES_SINGLE_TUPLE:
+ q->setSelect(true);
+ q->setActive(true);
+ currentSize = -1;
+ canFetchMoreRows = true;
return true;
- } else if (status == PGRES_COMMAND_OK) {
+ case PGRES_COMMAND_OK:
q->setSelect(false);
q->setActive(true);
currentSize = -1;
+ canFetchMoreRows = false;
return true;
+ default:
+ break;
}
+ q->setSelect(false);
+ q->setActive(false);
+ currentSize = -1;
+ canFetchMoreRows = false;
q->setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",
"Unable to create query"), QSqlError::StatementError, drv_d_func(), result));
return false;
@@ -368,9 +480,15 @@ void QPSQLResult::cleanup()
Q_D(QPSQLResult);
if (d->result)
PQclear(d->result);
- d->result = 0;
+ d->result = nullptr;
+ while (!d->nextResultSets.isEmpty())
+ PQclear(d->nextResultSets.takeFirst());
+ if (d->stmtId != InvalidStatementId)
+ d->drv_d_func()->finishQuery(d->stmtId);
+ d->stmtId = InvalidStatementId;
setAt(QSql::BeforeFirstRow);
d->currentSize = -1;
+ d->canFetchMoreRows = false;
setActive(false);
}
@@ -381,23 +499,150 @@ bool QPSQLResult::fetch(int i)
return false;
if (i < 0)
return false;
- if (i >= d->currentSize)
- return false;
if (at() == i)
return true;
+
+ if (isForwardOnly()) {
+ if (i < at())
+ return false;
+ bool ok = true;
+ while (ok && i > at())
+ ok = fetchNext();
+ return ok;
+ }
+
+ if (i >= d->currentSize)
+ return false;
setAt(i);
return true;
}
bool QPSQLResult::fetchFirst()
{
+ Q_D(const QPSQLResult);
+ if (!isActive())
+ return false;
+ if (at() == 0)
+ return true;
+
+ if (isForwardOnly()) {
+ if (at() == QSql::BeforeFirstRow) {
+ // First result has been already fetched by exec() or
+ // nextResult(), just check it has at least one row.
+ if (d->result && PQntuples(d->result) > 0) {
+ setAt(0);
+ return true;
+ }
+ }
+ return false;
+ }
+
return fetch(0);
}
bool QPSQLResult::fetchLast()
{
Q_D(const QPSQLResult);
- return fetch(PQntuples(d->result) - 1);
+ if (!isActive())
+ return false;
+
+ if (isForwardOnly()) {
+ // Cannot seek to last row in forwardOnly mode, so we have to use brute force
+ int i = at();
+ if (i == QSql::AfterLastRow)
+ return false;
+ if (i == QSql::BeforeFirstRow)
+ i = 0;
+ while (fetchNext())
+ ++i;
+ setAt(i);
+ return true;
+ }
+
+ return fetch(d->currentSize - 1);
+}
+
+bool QPSQLResult::fetchNext()
+{
+ Q_D(QPSQLResult);
+ if (!isActive())
+ return false;
+
+ const int currentRow = at(); // Small optimalization
+ if (currentRow == QSql::BeforeFirstRow)
+ return fetchFirst();
+ if (currentRow == QSql::AfterLastRow)
+ return false;
+
+ if (isForwardOnly()) {
+ if (!d->canFetchMoreRows)
+ return false;
+ PQclear(d->result);
+ d->result = d->drv_d_func()->getResult(d->stmtId);
+ if (!d->result) {
+ setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",
+ "Unable to get result"), QSqlError::StatementError, d->drv_d_func(), d->result));
+ d->canFetchMoreRows = false;
+ return false;
+ }
+ int status = PQresultStatus(d->result);
+ switch (status) {
+ case PGRES_SINGLE_TUPLE:
+ // Fetched next row of current result set
+ Q_ASSERT(PQntuples(d->result) == 1);
+ Q_ASSERT(d->canFetchMoreRows);
+ setAt(currentRow + 1);
+ return true;
+ case PGRES_TUPLES_OK:
+ // In single-row mode PGRES_TUPLES_OK means end of current result set
+ Q_ASSERT(PQntuples(d->result) == 0);
+ d->canFetchMoreRows = false;
+ return false;
+ default:
+ setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",
+ "Unable to get result"), QSqlError::StatementError, d->drv_d_func(), d->result));
+ d->canFetchMoreRows = false;
+ return false;
+ }
+ }
+
+ if (currentRow + 1 >= d->currentSize)
+ return false;
+ setAt(currentRow + 1);
+ return true;
+}
+
+bool QPSQLResult::nextResult()
+{
+ Q_D(QPSQLResult);
+ if (!isActive())
+ return false;
+
+ setAt(QSql::BeforeFirstRow);
+
+ if (isForwardOnly()) {
+ if (d->canFetchMoreRows) {
+ // Skip all rows from current result set
+ while (d->result && PQresultStatus(d->result) == PGRES_SINGLE_TUPLE) {
+ PQclear(d->result);
+ d->result = d->drv_d_func()->getResult(d->stmtId);
+ }
+ d->canFetchMoreRows = false;
+ // Check for unexpected errors
+ if (d->result && PQresultStatus(d->result) == PGRES_FATAL_ERROR)
+ return d->processResults();
+ }
+ // Fetch first result from next result set
+ if (d->result)
+ PQclear(d->result);
+ d->result = d->drv_d_func()->getResult(d->stmtId);
+ return d->processResults();
+ }
+
+ if (d->result)
+ PQclear(d->result);
+ d->result = d->nextResultSets.isEmpty() ? nullptr : d->nextResultSets.takeFirst();
+ return d->processResults();
}
QVariant QPSQLResult::data(int i)
@@ -407,11 +652,12 @@ QVariant QPSQLResult::data(int i)
qWarning("QPSQLResult::data: column %d out of range", i);
return QVariant();
}
+ const int currentRow = isForwardOnly() ? 0 : at();
int ptype = PQftype(d->result, i);
QVariant::Type type = qDecodePSQLType(ptype);
- const char *val = PQgetvalue(d->result, at(), i);
- if (PQgetisnull(d->result, at(), i))
+ if (PQgetisnull(d->result, currentRow, i))
return QVariant(type);
+ const char *val = PQgetvalue(d->result, currentRow, i);
switch (type) {
case QVariant::Bool:
return QVariant((bool)(val[0] == 't'));
@@ -495,8 +741,8 @@ QVariant QPSQLResult::data(int i)
bool QPSQLResult::isNull(int field)
{
Q_D(const QPSQLResult);
- PQgetvalue(d->result, at(), field);
- return PQgetisnull(d->result, at(), field);
+ const int currentRow = isForwardOnly() ? 0 : at();
+ return PQgetisnull(d->result, currentRow, field);
}
bool QPSQLResult::reset (const QString& query)
@@ -507,7 +753,23 @@ bool QPSQLResult::reset (const QString& query)
return false;
if (!driver()->isOpen() || driver()->isOpenError())
return false;
- d->result = d->drv_d_func()->exec(query);
+
+ d->stmtId = d->drv_d_func()->sendQuery(query);
+ if (d->stmtId == InvalidStatementId) {
+ setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",
+ "Unable to send query"), QSqlError::StatementError, d->drv_d_func()));
+ return false;
+ }
+
+ if (isForwardOnly())
+ setForwardOnly(d->drv_d_func()->setSingleRowMode());
+
+ d->result = d->drv_d_func()->getResult(d->stmtId);
+ if (!isForwardOnly()) {
+ // Fetch all result sets right away
+ while (PGresult *nextResultSet = d->drv_d_func()->getResult(d->stmtId))
+ d->nextResultSets.append(nextResultSet);
+ }
return d->processResults();
}
@@ -553,10 +815,17 @@ QSqlRecord QPSQLResult::record() const
f.setName(QString::fromUtf8(PQfname(d->result, i)));
else
f.setName(QString::fromLocal8Bit(PQfname(d->result, i)));
- QSqlQuery qry(driver()->createResult());
- if (qry.exec(QStringLiteral("SELECT relname FROM pg_class WHERE pg_class.oid = %1")
- .arg(PQftable(d->result, i))) && qry.next()) {
- f.setTableName(qry.value(0).toString());
+
+ // WARNING: We cannot execute any other SQL queries on
+ // the same db connection while forward-only mode is active
+ // (this would discard all results of forward-only query).
+ // So we just skip this...
+ if (!isForwardOnly()) {
+ QSqlQuery qry(driver()->createResult());
+ if (qry.exec(QStringLiteral("SELECT relname FROM pg_class WHERE pg_class.oid = %1")
+ .arg(PQftable(d->result, i))) && qry.next()) {
+ f.setTableName(qry.value(0).toString());
+ }
}
int ptype = PQftype(d->result, i);
f.setType(qDecodePSQLType(ptype));
@@ -675,8 +944,22 @@ bool QPSQLResult::exec()
else
stmt = QString::fromLatin1("EXECUTE %1 (%2)").arg(d->preparedStmtId, params);
- d->result = d->drv_d_func()->exec(stmt);
+ d->stmtId = d->drv_d_func()->sendQuery(stmt);
+ if (d->stmtId == InvalidStatementId) {
+ setLastError(qMakeError(QCoreApplication::translate("QPSQLResult",
+ "Unable to send query"), QSqlError::StatementError, d->drv_d_func()));
+ return false;
+ }
+
+ if (isForwardOnly())
+ setForwardOnly(d->drv_d_func()->setSingleRowMode());
+ d->result = d->drv_d_func()->getResult(d->stmtId);
+ if (!isForwardOnly()) {
+ // Fetch all result sets right away
+ while (PGresult *nextResultSet = d->drv_d_func()->getResult(d->stmtId))
+ d->nextResultSets.append(nextResultSet);
+ }
return d->processResults();
}
@@ -895,6 +1178,8 @@ bool QPSQLDriver::hasFeature(DriverFeature f) const
case LastInsertId:
case LowPrecisionNumbers:
case EventNotifications:
+ case MultipleResultSets:
+ case BLOB:
return true;
case PreparedQueries:
case PositionalPlaceholders:
@@ -903,11 +1188,8 @@ bool QPSQLDriver::hasFeature(DriverFeature f) const
case NamedPlaceholders:
case SimpleLocking:
case FinishQuery:
- case MultipleResultSets:
case CancelQuery:
return false;
- case BLOB:
- return d->pro >= QPSQLDriver::Version7_1;
case Unicode:
return d->isUtf8;
}
@@ -1004,7 +1286,7 @@ QSqlResult *QPSQLDriver::createResult() const
bool QPSQLDriver::beginTransaction()
{
- Q_D(const QPSQLDriver);
+ Q_D(QPSQLDriver);
if (!isOpen()) {
qWarning("QPSQLDriver::beginTransaction: Database not open");
return false;
@@ -1101,12 +1383,10 @@ static void qSplitTableName(QString &tablename, QString &schema)
QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const
{
- Q_D(const QPSQLDriver);
QSqlIndex idx(tablename);
if (!isOpen())
return idx;
QSqlQuery i(createResult());
- QString stmt;
QString tbl = tablename;
QString schema;
@@ -1122,42 +1402,20 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const
else
schema = std::move(schema).toLower();
- if (d->pro == QPSQLDriver::Version6) {
- stmt = QLatin1String("select pg_att1.attname, int(pg_att1.atttypid), pg_cl.relname "
- "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
- "where pg_cl.relname = '%1_pkey' "
- "and pg_cl.oid = pg_ind.indexrelid "
- "and pg_att2.attrelid = pg_ind.indexrelid "
- "and pg_att1.attrelid = pg_ind.indrelid "
- "and pg_att1.attnum = pg_ind.indkey[pg_att2.attnum-1] "
- "order by pg_att2.attnum");
- } else if (d->pro == QPSQLDriver::Version7 || d->pro == QPSQLDriver::Version7_1) {
- stmt = QLatin1String("select pg_att1.attname, pg_att1.atttypid::int, pg_cl.relname "
- "from pg_attribute pg_att1, pg_attribute pg_att2, pg_class pg_cl, pg_index pg_ind "
- "where pg_cl.relname = '%1_pkey' "
- "and pg_cl.oid = pg_ind.indexrelid "
- "and pg_att2.attrelid = pg_ind.indexrelid "
- "and pg_att1.attrelid = pg_ind.indrelid "
- "and pg_att1.attnum = pg_ind.indkey[pg_att2.attnum-1] "
- "order by pg_att2.attnum");
- } else if (d->pro >= QPSQLDriver::Version7_3) {
- stmt = QLatin1String("SELECT pg_attribute.attname, pg_attribute.atttypid::int, "
- "pg_class.relname "
- "FROM pg_attribute, pg_class "
- "WHERE %1 pg_class.oid IN "
- "(SELECT indexrelid FROM pg_index WHERE indisprimary = true AND indrelid IN "
- " (SELECT oid FROM pg_class WHERE relname = '%2')) "
- "AND pg_attribute.attrelid = pg_class.oid "
- "AND pg_attribute.attisdropped = false "
- "ORDER BY pg_attribute.attnum");
- if (schema.isEmpty())
- stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid) AND"));
- else
- stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
- "pg_namespace where pg_namespace.nspname = '%1') AND ").arg(schema));
- } else {
- qFatal("QPSQLDriver::primaryIndex(tablename): unknown PSQL version, query statement not set");
- }
+ QString stmt = QLatin1String("SELECT pg_attribute.attname, pg_attribute.atttypid::int, "
+ "pg_class.relname "
+ "FROM pg_attribute, pg_class "
+ "WHERE %1 pg_class.oid IN "
+ "(SELECT indexrelid FROM pg_index WHERE indisprimary = true AND indrelid IN "
+ "(SELECT oid FROM pg_class WHERE relname = '%2')) "
+ "AND pg_attribute.attrelid = pg_class.oid "
+ "AND pg_attribute.attisdropped = false "
+ "ORDER BY pg_attribute.attnum");
+ if (schema.isEmpty())
+ stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid) AND"));
+ else
+ stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
+ "pg_namespace where pg_namespace.nspname = '%1') AND").arg(schema));
i.exec(stmt.arg(tbl));
while (i.isActive() && i.next()) {
@@ -1170,7 +1428,6 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const
QSqlRecord QPSQLDriver::record(const QString& tablename) const
{
- Q_D(const QPSQLDriver);
QSqlRecord info;
if (!isOpen())
return info;
@@ -1189,105 +1446,44 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const
else
schema = std::move(schema).toLower();
- QString stmt;
- if (d->pro == QPSQLDriver::Version6) {
- stmt = QLatin1String("select pg_attribute.attname, int(pg_attribute.atttypid), "
- "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
- "int(pg_attribute.attrelid), pg_attribute.attnum "
- "from pg_class, pg_attribute "
- "where pg_class.relname = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid ");
- } else if (d->pro == QPSQLDriver::Version7) {
- stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
- "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
- "pg_attribute.attrelid::int, pg_attribute.attnum "
- "from pg_class, pg_attribute "
- "where pg_class.relname = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid ");
- } else if (d->pro == QPSQLDriver::Version7_1) {
- stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
- "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
- "pg_attrdef.adsrc "
- "from pg_class, pg_attribute "
- "left join pg_attrdef on (pg_attrdef.adrelid = "
- "pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
- "where pg_class.relname = '%1' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid "
- "order by pg_attribute.attnum ");
- } else if (d->pro >= QPSQLDriver::Version7_3) {
- stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
- "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
- "pg_attrdef.adsrc "
- "from pg_class, pg_attribute "
- "left join pg_attrdef on (pg_attrdef.adrelid = "
- "pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
- "where %1 "
- "and pg_class.relname = '%2' "
- "and pg_attribute.attnum > 0 "
- "and pg_attribute.attrelid = pg_class.oid "
- "and pg_attribute.attisdropped = false "
- "order by pg_attribute.attnum ");
- if (schema.isEmpty())
- stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid)"));
- else
- stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
- "pg_namespace where pg_namespace.nspname = '%1')").arg(schema));
- } else {
- qFatal("QPSQLDriver::record(tablename): unknown PSQL version, query statement not set");
- }
+ QString stmt = QLatin1String("select pg_attribute.attname, pg_attribute.atttypid::int, "
+ "pg_attribute.attnotnull, pg_attribute.attlen, pg_attribute.atttypmod, "
+ "pg_attrdef.adsrc "
+ "from pg_class, pg_attribute "
+ "left join pg_attrdef on (pg_attrdef.adrelid = "
+ "pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) "
+ "where %1 "
+ "and pg_class.relname = '%2' "
+ "and pg_attribute.attnum > 0 "
+ "and pg_attribute.attrelid = pg_class.oid "
+ "and pg_attribute.attisdropped = false "
+ "order by pg_attribute.attnum");
+ if (schema.isEmpty())
+ stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid)"));
+ else
+ stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from "
+ "pg_namespace where pg_namespace.nspname = '%1')").arg(schema));
QSqlQuery query(createResult());
query.exec(stmt.arg(tbl));
- if (d->pro >= QPSQLDriver::Version7_1) {
- while (query.next()) {
- int len = query.value(3).toInt();
- int precision = query.value(4).toInt();
- // swap length and precision if length == -1
- if (len == -1 && precision > -1) {
- len = precision - 4;
- precision = -1;
- }
- QString defVal = query.value(5).toString();
- if (!defVal.isEmpty() && defVal.at(0) == QLatin1Char('\''))
- defVal = defVal.mid(1, defVal.length() - 2);
- QSqlField f(query.value(0).toString(), qDecodePSQLType(query.value(1).toInt()), tablename);
- f.setRequired(query.value(2).toBool());
- f.setLength(len);
- f.setPrecision(precision);
- f.setDefaultValue(defVal);
- f.setSqlType(query.value(1).toInt());
- info.append(f);
- }
- } else {
- // Postgres < 7.1 cannot handle outer joins
- while (query.next()) {
- QString defVal;
- QString stmt2 = QLatin1String("select pg_attrdef.adsrc from pg_attrdef where "
- "pg_attrdef.adrelid = %1 and pg_attrdef.adnum = %2 ");
- QSqlQuery query2(createResult());
- query2.exec(stmt2.arg(query.value(5).toInt()).arg(query.value(6).toInt()));
- if (query2.isActive() && query2.next())
- defVal = query2.value(0).toString();
- if (!defVal.isEmpty() && defVal.at(0) == QLatin1Char('\''))
- defVal = defVal.mid(1, defVal.length() - 2);
- int len = query.value(3).toInt();
- int precision = query.value(4).toInt();
- // swap length and precision if length == -1
- if (len == -1 && precision > -1) {
- len = precision - 4;
- precision = -1;
- }
- QSqlField f(query.value(0).toString(), qDecodePSQLType(query.value(1).toInt()), tablename);
- f.setRequired(query.value(2).toBool());
- f.setLength(len);
- f.setPrecision(precision);
- f.setDefaultValue(defVal);
- f.setSqlType(query.value(1).toInt());
- info.append(f);
+ while (query.next()) {
+ int len = query.value(3).toInt();
+ int precision = query.value(4).toInt();
+ // swap length and precision if length == -1
+ if (len == -1 && precision > -1) {
+ len = precision - 4;
+ precision = -1;
}
+ QString defVal = query.value(5).toString();
+ if (!defVal.isEmpty() && defVal.at(0) == QLatin1Char('\''))
+ defVal = defVal.mid(1, defVal.length() - 2);
+ QSqlField f(query.value(0).toString(), qDecodePSQLType(query.value(1).toInt()), tablename);
+ f.setRequired(query.value(2).toBool());
+ f.setLength(len);
+ f.setPrecision(precision);
+ f.setDefaultValue(defVal);
+ f.setSqlType(query.value(1).toInt());
+ info.append(f);
}
return info;
diff --git a/src/plugins/sqldrivers/psql/qsql_psql_p.h b/src/plugins/sqldrivers/psql/qsql_psql_p.h
index f5cb2e9bd0..2873a9f851 100644
--- a/src/plugins/sqldrivers/psql/qsql_psql_p.h
+++ b/src/plugins/sqldrivers/psql/qsql_psql_p.h
@@ -98,34 +98,34 @@ public:
explicit QPSQLDriver(QObject *parent=0);
explicit QPSQLDriver(PGconn *conn, QObject *parent=0);
~QPSQLDriver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
bool open(const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
- const QString& connOpts) Q_DECL_OVERRIDE;
- bool isOpen() const Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString& tablename) const Q_DECL_OVERRIDE;
- QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
+ const QString& connOpts) override;
+ bool isOpen() const override;
+ void close() override;
+ QSqlResult *createResult() const override;
+ QStringList tables(QSql::TableType) const override;
+ QSqlIndex primaryIndex(const QString& tablename) const override;
+ QSqlRecord record(const QString& tablename) const override;
Protocol protocol() const;
- QVariant handle() const Q_DECL_OVERRIDE;
+ QVariant handle() const override;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
- QString formatValue(const QSqlField &field, bool trimStrings) const Q_DECL_OVERRIDE;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const override;
+ QString formatValue(const QSqlField &field, bool trimStrings) const override;
- bool subscribeToNotification(const QString &name) Q_DECL_OVERRIDE;
- bool unsubscribeFromNotification(const QString &name) Q_DECL_OVERRIDE;
- QStringList subscribedToNotifications() const Q_DECL_OVERRIDE;
+ bool subscribeToNotification(const QString &name) override;
+ bool unsubscribeFromNotification(const QString &name) override;
+ QStringList subscribedToNotifications() const override;
protected:
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
private Q_SLOTS:
void _q_handleNotification(int);
diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
index 444b18686a..d1a6582c5a 100644
--- a/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
+++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp
@@ -123,19 +123,19 @@ class QSQLiteResult : public QSqlCachedResult
public:
explicit QSQLiteResult(const QSQLiteDriver* db);
~QSQLiteResult();
- QVariant handle() const Q_DECL_OVERRIDE;
+ QVariant handle() const override;
protected:
- bool gotoNext(QSqlCachedResult::ValueCache& row, int idx) Q_DECL_OVERRIDE;
- bool reset(const QString &query) Q_DECL_OVERRIDE;
- bool prepare(const QString &query) Q_DECL_OVERRIDE;
- bool exec() Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QVariant lastInsertId() const Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- void detachFromResultSet() Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ bool gotoNext(QSqlCachedResult::ValueCache& row, int idx) override;
+ bool reset(const QString &query) override;
+ bool prepare(const QString &query) override;
+ bool exec() override;
+ int size() override;
+ int numRowsAffected() override;
+ QVariant lastInsertId() const override;
+ QSqlRecord record() const override;
+ void detachFromResultSet() override;
+ void virtual_hook(int id, void *data) override;
};
class QSQLiteDriverPrivate : public QSqlDriverPrivate
diff --git a/src/plugins/sqldrivers/sqlite/qsql_sqlite_p.h b/src/plugins/sqldrivers/sqlite/qsql_sqlite_p.h
index ca969a4b53..61be4c937f 100644
--- a/src/plugins/sqldrivers/sqlite/qsql_sqlite_p.h
+++ b/src/plugins/sqldrivers/sqlite/qsql_sqlite_p.h
@@ -75,28 +75,28 @@ public:
explicit QSQLiteDriver(QObject *parent = 0);
explicit QSQLiteDriver(sqlite3 *connection, QObject *parent = 0);
~QSQLiteDriver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
bool open(const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
- const QString & connOpts) Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
+ const QString & connOpts) override;
+ void close() override;
+ QSqlResult *createResult() const override;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
+ QStringList tables(QSql::TableType) const override;
- QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString &table) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
- QString escapeIdentifier(const QString &identifier, IdentifierType) const Q_DECL_OVERRIDE;
+ QSqlRecord record(const QString& tablename) const override;
+ QSqlIndex primaryIndex(const QString &table) const override;
+ QVariant handle() const override;
+ QString escapeIdentifier(const QString &identifier, IdentifierType) const override;
- bool subscribeToNotification(const QString &name) Q_DECL_OVERRIDE;
- bool unsubscribeFromNotification(const QString &name) Q_DECL_OVERRIDE;
- QStringList subscribedToNotifications() const Q_DECL_OVERRIDE;
+ bool subscribeToNotification(const QString &name) override;
+ bool unsubscribeFromNotification(const QString &name) override;
+ QStringList subscribedToNotifications() const override;
private Q_SLOTS:
void handleNotification(const QString &tableName, qint64 rowid);
};
diff --git a/src/plugins/sqldrivers/sqlite/smain.cpp b/src/plugins/sqldrivers/sqlite/smain.cpp
index 2ad466a61e..092813990c 100644
--- a/src/plugins/sqldrivers/sqlite/smain.cpp
+++ b/src/plugins/sqldrivers/sqlite/smain.cpp
@@ -51,7 +51,7 @@ class QSQLiteDriverPlugin : public QSqlDriverPlugin
public:
QSQLiteDriverPlugin();
- QSqlDriver* create(const QString &) Q_DECL_OVERRIDE;
+ QSqlDriver* create(const QString &) override;
};
QSQLiteDriverPlugin::QSQLiteDriverPlugin()
diff --git a/src/plugins/sqldrivers/sqlite2/qsql_sqlite2.cpp b/src/plugins/sqldrivers/sqlite2/qsql_sqlite2.cpp
index 93f47e3f13..390f05c7aa 100644
--- a/src/plugins/sqldrivers/sqlite2/qsql_sqlite2.cpp
+++ b/src/plugins/sqldrivers/sqlite2/qsql_sqlite2.cpp
@@ -107,16 +107,16 @@ class QSQLite2Result : public QSqlCachedResult
public:
explicit QSQLite2Result(const QSQLite2Driver* db);
~QSQLite2Result();
- QVariant handle() const Q_DECL_OVERRIDE;
+ QVariant handle() const override;
protected:
- bool gotoNext(QSqlCachedResult::ValueCache &row, int idx) Q_DECL_OVERRIDE;
- bool reset(const QString &query) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
- void detachFromResultSet() Q_DECL_OVERRIDE;
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ bool gotoNext(QSqlCachedResult::ValueCache &row, int idx) override;
+ bool reset(const QString &query) override;
+ int size() override;
+ int numRowsAffected() override;
+ QSqlRecord record() const override;
+ void detachFromResultSet() override;
+ void virtual_hook(int id, void *data) override;
};
class QSQLite2ResultPrivate: public QSqlCachedResultPrivate
@@ -178,7 +178,8 @@ void QSQLite2ResultPrivate::finalize()
if (err) {
q->setLastError(QSqlError(QCoreApplication::translate("QSQLite2Result",
"Unable to fetch results"), QString::fromLatin1(err),
- QSqlError::StatementError, res));
+ QSqlError::StatementError,
+ res != -1 ? QString::number(res) : QString()));
sqlite_freemem(err);
}
currentMachine = 0;
diff --git a/src/plugins/sqldrivers/sqlite2/qsql_sqlite2_p.h b/src/plugins/sqldrivers/sqlite2/qsql_sqlite2_p.h
index 83b248ec6a..48c64536f1 100644
--- a/src/plugins/sqldrivers/sqlite2/qsql_sqlite2_p.h
+++ b/src/plugins/sqldrivers/sqlite2/qsql_sqlite2_p.h
@@ -79,29 +79,29 @@ public:
explicit QSQLite2Driver(QObject *parent = 0);
explicit QSQLite2Driver(sqlite *connection, QObject *parent = 0);
~QSQLite2Driver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port,
- const QString &connOpts) Q_DECL_OVERRIDE;
+ const QString &connOpts) override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port) { return open(db, user, password, host, port, QString()); }
- void close() Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
+ void close() override;
+ QSqlResult *createResult() const override;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
+ QStringList tables(QSql::TableType) const override;
- QSqlRecord record(const QString &tablename) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString &table) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
- QString escapeIdentifier(const QString &identifier, IdentifierType) const Q_DECL_OVERRIDE;
+ QSqlRecord record(const QString &tablename) const override;
+ QSqlIndex primaryIndex(const QString &table) const override;
+ QVariant handle() const override;
+ QString escapeIdentifier(const QString &identifier, IdentifierType) const override;
};
QT_END_NAMESPACE
diff --git a/src/plugins/sqldrivers/tds/qsql_tds.cpp b/src/plugins/sqldrivers/tds/qsql_tds.cpp
index 670198af81..ad95b097ef 100644
--- a/src/plugins/sqldrivers/tds/qsql_tds.cpp
+++ b/src/plugins/sqldrivers/tds/qsql_tds.cpp
@@ -132,7 +132,8 @@ QT_BEGIN_NAMESPACE
QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, int errNo = -1)
{
- return QSqlError(QLatin1String("QTDS: ") + err, QString(), type, errNo);
+ return QSqlError(QLatin1String("QTDS: ") + err, QString(), type,
+ errNo != -1 ? QString::number(errNo) : QString());
}
class QTDSDriverPrivate : public QSqlDriverPrivate
@@ -163,15 +164,15 @@ class QTDSResult : public QSqlCachedResult
public:
explicit QTDSResult(const QTDSDriver* db);
~QTDSResult();
- QVariant handle() const Q_DECL_OVERRIDE;
+ QVariant handle() const override;
protected:
void cleanup();
- bool reset(const QString &query) Q_DECL_OVERRIDE;
- int size() Q_DECL_OVERRIDE;
- int numRowsAffected() Q_DECL_OVERRIDE;
- bool gotoNext(QSqlCachedResult::ValueCache &values, int index) Q_DECL_OVERRIDE;
- QSqlRecord record() const Q_DECL_OVERRIDE;
+ bool reset(const QString &query) override;
+ int size() override;
+ int numRowsAffected() override;
+ bool gotoNext(QSqlCachedResult::ValueCache &values, int index) override;
+ QSqlRecord record() const override;
};
class QTDSResultPrivate: public QSqlCachedResultPrivate
diff --git a/src/plugins/sqldrivers/tds/qsql_tds_p.h b/src/plugins/sqldrivers/tds/qsql_tds_p.h
index d0914455a2..948e3c7024 100644
--- a/src/plugins/sqldrivers/tds/qsql_tds_p.h
+++ b/src/plugins/sqldrivers/tds/qsql_tds_p.h
@@ -88,29 +88,29 @@ public:
explicit QTDSDriver(QObject* parent = 0);
QTDSDriver(LOGINREC* rec, const QString& host, const QString &db, QObject* parent = 0);
~QTDSDriver();
- bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
+ bool hasFeature(DriverFeature f) const override;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port,
- const QString &connOpts) Q_DECL_OVERRIDE;
- void close() Q_DECL_OVERRIDE;
- QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
- QSqlResult *createResult() const Q_DECL_OVERRIDE;
- QSqlRecord record(const QString &tablename) const Q_DECL_OVERRIDE;
- QSqlIndex primaryIndex(const QString &tablename) const Q_DECL_OVERRIDE;
+ const QString &connOpts) override;
+ void close() override;
+ QStringList tables(QSql::TableType) const override;
+ QSqlResult *createResult() const override;
+ QSqlRecord record(const QString &tablename) const override;
+ QSqlIndex primaryIndex(const QString &tablename) const override;
QString formatValue(const QSqlField &field,
- bool trimStrings) const Q_DECL_OVERRIDE;
- QVariant handle() const Q_DECL_OVERRIDE;
+ bool trimStrings) const override;
+ QVariant handle() const override;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const override;
protected:
- bool beginTransaction() Q_DECL_OVERRIDE;
- bool commitTransaction() Q_DECL_OVERRIDE;
- bool rollbackTransaction() Q_DECL_OVERRIDE;
+ bool beginTransaction() override;
+ bool commitTransaction() override;
+ bool rollbackTransaction() override;
private:
void init();
};
diff --git a/src/plugins/styles/mac/qmacstyle.qdoc b/src/plugins/styles/mac/qmacstyle.qdoc
index fcbc813844..30b3d7775f 100644
--- a/src/plugins/styles/mac/qmacstyle.qdoc
+++ b/src/plugins/styles/mac/qmacstyle.qdoc
@@ -87,7 +87,7 @@
/*!
- \enum QMacStyle::WidgetSizePolicy
+ \enum QStyleHelper::WidgetSizePolicy
\value SizeSmall
\value SizeLarge
@@ -123,7 +123,7 @@
\reimp
*/
-/*! \fn int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QWidget *widget) const
+/*! \fn int QMacStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *opt, const QWidget *widget) const
\reimp
*/
@@ -131,7 +131,7 @@
\reimp
*/
-/*! \fn int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *hret) const
+/*! \fn int QMacStyle::styleHint(QStyle::StyleHint sh, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *hret) const
\reimp
*/
@@ -139,11 +139,11 @@
\reimp
*/
-/*! \fn QPixmap QMacStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const
+/*! \fn QPixmap QMacStyle::standardPixmap(QStyle::StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const
\reimp
*/
-/*! \fn void QMacStyle::setWidgetSizePolicy(const QWidget *widget, WidgetSizePolicy policy)
+/*! \fn void QStyleHelper::setWidgetSizePolicy(const QWidget *widget, QStyleHelper::WidgetSizePolicy policy)
\obsolete
@@ -151,41 +151,41 @@
or Qt::WA_MacNormalSize instead.
*/
-/*! \fn QMacStyle::WidgetSizePolicy QMacStyle::widgetSizePolicy(const QWidget *widget, const QStyleOption *opt = 0)
+/*! \fn QStyleHelper::WidgetSizePolicy QStyleHelper::widgetSizePolicy(const QWidget *widget, const QStyleOption *opt)
\obsolete
Call QWidget::testAttribute() with Qt::WA_MacMiniSize, Qt::WA_MacSmallSize,
or Qt::WA_MacNormalSize instead.
*/
-/*! \fn void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const
+/*! \fn void QMacStyle::drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const
\reimp
*/
-/*! \fn void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w) const
+/*! \fn void QMacStyle::drawControl(QStyle::ControlElement ce, const QStyleOption *opt, QPainter *p, const QWidget *w) const
\reimp
*/
-/*! \fn QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt, const QWidget *widget) const
+/*! \fn QRect QMacStyle::subElementRect(QStyle::SubElement sr, const QStyleOption *opt, const QWidget *widget) const
\reimp
*/
-/*! \fn void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const
+/*! \fn void QMacStyle::drawComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const
\reimp
*/
-/*! \fn QStyle::SubControl QMacStyle::hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget) const
+/*! \fn QStyle::SubControl QMacStyle::hitTestComplexControl(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt, const QWidget *widget) const
\reimp
*/
-/*! \fn QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const
+/*! \fn QRect QMacStyle::subControlRect(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, QStyle::SubControl sc, const QWidget *widget) const
\reimp
*/
-/*! \fn QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz, const QWidget *widget) const
+/*! \fn QSize QMacStyle::sizeFromContents(QStyle::ContentsType ct, const QStyleOption *opt, const QSize &csz, const QWidget *widget) const
\reimp
*/
@@ -197,7 +197,7 @@
\reimp
*/
-/*! \fn QIcon QMacStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget) const
+/*! \fn QIcon QMacStyle::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget) const
\reimp
*/
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index 1e68fbbc7a..9e8af78a8e 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -237,6 +237,19 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QIndeterminateProgressIndicator);
@end
+@interface QT_MANGLE_NAMESPACE(QVerticalSplitView) : NSSplitView
+- (BOOL)isVertical;
+@end
+
+QT_NAMESPACE_ALIAS_OBJC_CLASS(QVerticalSplitView);
+
+@implementation QVerticalSplitView
+- (BOOL)isVertical
+{
+ return YES;
+}
+@end
+
QT_BEGIN_NAMESPACE
// The following constants are used for adjusting the size
@@ -288,6 +301,10 @@ static const QColor mainWindowGradientEnd(200, 200, 200);
static const int DisclosureOffset = 4;
+static const qreal titleBarIconTitleSpacing = 5;
+static const qreal titleBarTitleRightMargin = 12;
+static const qreal titleBarButtonSpacing = 8;
+
// Tab bar colors
// active: window is active
// selected: tab is selected
@@ -596,8 +613,7 @@ static QString qt_mac_removeMnemonics(const QString &original)
int currPos = 0;
int l = original.length();
while (l) {
- if (original.at(currPos) == QLatin1Char('&')
- && (l == 1 || original.at(currPos + 1) != QLatin1Char('&'))) {
+ if (original.at(currPos) == QLatin1Char('&')) {
++currPos;
--l;
if (l == 0)
@@ -652,7 +668,6 @@ const int qt_mac_hitheme_version = 0; //the HITheme version we speak
const int macItemFrame = 2; // menu item frame width
const int macItemHMargin = 3; // menu item hor text margin
const int macRightBorder = 12; // right border on mac
-const ThemeWindowType QtWinType = kThemeDocumentWindow; // Window type we use for QTitleBar.
/*****************************************************************************
QMacCGStyle utility functions
@@ -922,7 +937,7 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg
height = qMax(height, qMax(iconSize.height(), pmSize.height()));
}
if (!bt->text().isNull() && bt->toolButtonStyle() != Qt::ToolButtonIconOnly) {
- int text_width = bt->fontMetrics().width(bt->text()),
+ int text_width = bt->fontMetrics().horizontalAdvance(bt->text()),
text_height = bt->fontMetrics().height();
if (bt->toolButtonStyle() == Qt::ToolButtonTextUnderIcon) {
width = qMax(width, text_width);
@@ -1127,46 +1142,33 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRect &targetRect, int h
static const QString keyFormat = QLatin1String("$qt_focusring%1-%2-%3-%4");
const QString &key = keyFormat.arg(hMargin).arg(vMargin).arg(radius).arg(pixelRatio);
QPixmap focusRingPixmap;
- const qreal size = radius * 2 + 5;
if (!QPixmapCache::find(key, focusRingPixmap)) {
+ const qreal size = radius * 2 + 5;
focusRingPixmap = QPixmap((QSize(size, size) + 2 * QSize(hMargin, vMargin)) * pixelRatio);
focusRingPixmap.fill(Qt::transparent);
focusRingPixmap.setDevicePixelRatio(pixelRatio);
- {
- const CGFloat focusRingWidth = radius > 0 ? 3.5 : 6;
- QMacAutoReleasePool pool;
- QMacCGContext ctx(&focusRingPixmap);
- setupNSGraphicsContext(ctx, NO);
-
- CGContextBeginTransparencyLayer(ctx, NULL);
- CGContextSetAlpha(ctx, 0.5); // As applied to the stroke color below
-
- CGRect focusRingRect = CGRectMake(hMargin, vMargin, size, size);
- NSBezierPath *focusRingPath;
- if (radius > 0) {
- const CGFloat roundedRectInset = -1.5;
- focusRingPath = [NSBezierPath bezierPathWithRoundedRect:NSRectFromCGRect(CGRectInset(focusRingRect, roundedRectInset, roundedRectInset))
- xRadius:radius
- yRadius:radius];
- } else {
- const CGFloat outerClipInset = -focusRingWidth / 2;
- NSBezierPath *focusRingClipPath = [NSBezierPath bezierPathWithRect:NSRectFromCGRect(CGRectInset(focusRingRect, outerClipInset, outerClipInset))];
- const CGFloat innerClipInset = 1;
- NSBezierPath *focusRingInnerClipPath = [NSBezierPath bezierPathWithRect:NSRectFromCGRect(CGRectInset(focusRingRect, innerClipInset, innerClipInset))];
- [focusRingClipPath appendBezierPath:focusRingInnerClipPath.bezierPathByReversingPath];
- [focusRingClipPath setClip];
- focusRingPath = [NSBezierPath bezierPathWithRect:NSRectFromCGRect(focusRingRect)];
- focusRingPath.lineJoinStyle = NSRoundLineJoinStyle;
- }
- focusRingPath.lineWidth = focusRingWidth;
- [[NSColor keyboardFocusIndicatorColor] setStroke];
- [focusRingPath stroke];
+ static const qreal focusRingWidth = 3.5;
+ const auto focusRingRect = QRectF(hMargin, vMargin, size, size);
+ QPainterPath focusRingPath;
+ focusRingPath.setFillRule(Qt::OddEvenFill);
+ const auto innerRect = radius > 0 ? focusRingRect : focusRingRect.adjusted(0.5, 0.5, -0.5, -0.5);
+ if (radius > 0)
+ focusRingPath.addRoundedRect(innerRect, radius, radius);
+ else
+ focusRingPath.addRect(innerRect);
+
+ const auto outterRect = innerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth);
+ const auto outterRadius = radius + focusRingWidth;
+ focusRingPath.addRoundedRect(outterRect, outterRadius, outterRadius);
+
+ QPainter pp(&focusRingPixmap);
+ pp.setOpacity(0.5);
+ pp.setRenderHint(QPainter::Antialiasing);
+ const auto focusRingColor = qt_mac_toQColor(NSColor.keyboardFocusIndicatorColor.CGColor);
+ pp.fillPath(focusRingPath, focusRingColor);
- CGContextEndTransparencyLayer(ctx);
- restoreNSGraphicsContext(ctx);
- }
QPixmapCache::insert(key, focusRingPixmap);
}
@@ -1201,6 +1203,109 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRect &targetRect, int h
QRect(focusRingPixmap.width() - shCornerSize, svCornerSize, shCornerSize, focusRingPixmap.width() - 2 * svCornerSize));
}
+void QMacStylePrivate::drawFocusRing(QPainter *p, const QRect &targetRect, int hMargin, int vMargin, const CocoaControl &cw) const
+{
+ static const auto focusRingWidth = 3.5;
+
+ QPainterPath focusRingPath;
+ qreal hOffset = 0.0;
+ qreal vOffset = 0.0;
+ switch (cw.first) {
+ case Button_CheckBox: {
+ const auto cbInnerRadius = (cw.second == QStyleHelper::SizeMini ? 2.0 : 3.0);
+ const auto cbSize = cw.second == QStyleHelper::SizeLarge ? 13 :
+ cw.second == QStyleHelper::SizeSmall ? 11 : 9; // As measured
+ hOffset = hMargin + (cw.second == QStyleHelper::SizeLarge ? 2.5 :
+ cw.second == QStyleHelper::SizeSmall ? 2.0 : 1.0); // As measured
+ vOffset = 0.5 * qreal(targetRect.height() - cbSize);
+ const auto cbInnerRect = QRectF(0, 0, cbSize, cbSize);
+ const auto cbOutterRadius = cbInnerRadius + focusRingWidth;
+ const auto cbOutterRect = cbInnerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth);
+ focusRingPath.setFillRule(Qt::OddEvenFill);
+ focusRingPath.addRoundedRect(cbOutterRect, cbOutterRadius, cbOutterRadius);
+ focusRingPath.addRoundedRect(cbInnerRect, cbInnerRadius, cbInnerRadius);
+ break;
+ }
+ case Button_RadioButton: {
+ const auto rbSize = cw.second == QStyleHelper::SizeLarge ? 15 :
+ cw.second == QStyleHelper::SizeSmall ? 13 : 9; // As measured
+ hOffset = hMargin + (cw.second == QStyleHelper::SizeLarge ? 1.5 :
+ cw.second == QStyleHelper::SizeSmall ? 1.0 : 1.0); // As measured
+ vOffset = 0.5 * qreal(targetRect.height() - rbSize);
+ const auto rbInnerRect = QRectF(0, 0, rbSize, rbSize);
+ const auto rbOutterRect = rbInnerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth);
+ focusRingPath.setFillRule(Qt::OddEvenFill);
+ focusRingPath.addEllipse(rbInnerRect);
+ focusRingPath.addEllipse(rbOutterRect);
+ break;
+ }
+ default:
+ Q_UNUSED(vMargin);
+ Q_UNREACHABLE();
+ }
+
+ const auto focusRingColor = qt_mac_toQColor(NSColor.keyboardFocusIndicatorColor.CGColor);
+
+ p->save();
+ p->setRenderHint(QPainter::Antialiasing);
+ p->setOpacity(0.5);
+ p->translate(hOffset, vOffset);
+ p->fillPath(focusRingPath, focusRingColor);
+ p->restore();
+}
+
+QPainterPath QMacStylePrivate::windowPanelPath(const QRectF &r) const
+{
+ static const qreal CornerPointOffset = 5.5;
+ static const qreal CornerControlOffset = 2.1;
+
+ QPainterPath path;
+ // Top-left corner
+ path.moveTo(r.left(), r.top() + CornerPointOffset);
+ path.cubicTo(r.left(), r.top() + CornerControlOffset,
+ r.left() + CornerControlOffset, r.top(),
+ r.left() + CornerPointOffset, r.top());
+ // Top-right corner
+ path.lineTo(r.right() - CornerPointOffset, r.top());
+ path.cubicTo(r.right() - CornerControlOffset, r.top(),
+ r.right(), r.top() + CornerControlOffset,
+ r.right(), r.top() + CornerPointOffset);
+ // Bottom-right corner
+ path.lineTo(r.right(), r.bottom() - CornerPointOffset);
+ path.cubicTo(r.right(), r.bottom() - CornerControlOffset,
+ r.right() - CornerControlOffset, r.bottom(),
+ r.right() - CornerPointOffset, r.bottom());
+ // Bottom-right corner
+ path.lineTo(r.left() + CornerPointOffset, r.bottom());
+ path.cubicTo(r.left() + CornerControlOffset, r.bottom(),
+ r.left(), r.bottom() - CornerControlOffset,
+ r.left(), r.bottom() - CornerPointOffset);
+ path.lineTo(r.left(), r.top() + CornerPointOffset);
+
+ return path;
+}
+
+QMacStylePrivate::CocoaControlType QMacStylePrivate::windowButtonCocoaControl(QStyle::SubControl sc) const
+{
+ struct WindowButtons {
+ QStyle::SubControl sc;
+ QMacStylePrivate::CocoaControlType ct;
+ };
+
+ static const WindowButtons buttons[] = {
+ { QStyle::SC_TitleBarCloseButton, QMacStylePrivate::Button_WindowClose },
+ { QStyle::SC_TitleBarMinButton, QMacStylePrivate::Button_WindowMiniaturize },
+ { QStyle::SC_TitleBarMaxButton, QMacStylePrivate::Button_WindowZoom }
+ };
+
+ for (const auto &wb : buttons)
+ if (wb.sc == sc)
+ return wb.ct;
+
+ return NoControl;
+}
+
+
#if QT_CONFIG(tabbar)
void QMacStylePrivate::tabLayout(const QStyleOptionTab *opt, const QWidget *widget, QRect *textRect, QRect *iconRect) const
{
@@ -1854,6 +1959,37 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
case Button_RadioButton:
bv = makeButton(NSRadioButton, NSRegularSquareBezelStyle);
break;
+ case Button_WindowClose:
+ case Button_WindowMiniaturize:
+ case Button_WindowZoom: {
+ const NSWindowButton button = [=] {
+ switch (widget.first) {
+ case Button_WindowClose:
+ return NSWindowCloseButton;
+ case Button_WindowMiniaturize:
+ return NSWindowMiniaturizeButton;
+ case Button_WindowZoom:
+ return NSWindowZoomButton;
+ default:
+ break;
+ }
+ Q_UNREACHABLE();
+ } ();
+#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_12)
+ const auto styleMask = NSWindowStyleMaskTitled
+ | NSWindowStyleMaskClosable
+ | NSWindowStyleMaskMiniaturizable
+ | NSWindowStyleMaskResizable;
+#else
+ const auto styleMask = NSTitledWindowMask
+ | NSClosableWindowMask
+ | NSMiniaturizableWindowMask
+ | NSResizableWindowMask;
+#endif
+ bv = [NSWindow standardWindowButton:button forStyleMask:styleMask];
+ [bv retain];
+ break;
+ }
case ComboBox:
bv = [[NSComboBox alloc] init];
break;
@@ -1879,6 +2015,15 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
// at construction time, and it cannot be changed later.
bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)];
break;
+ case SplitView_Horizontal:
+ bv = [[NSSplitView alloc] init];
+ break;
+ case SplitView_Vertical:
+ bv = [[QVerticalSplitView alloc] init];
+ break;
+ case TextField:
+ bv = [[NSTextField alloc] init];
+ break;
default:
break;
}
@@ -1953,22 +2098,11 @@ NSCell *QMacStylePrivate::cocoaCell(CocoaControl widget) const
return cell;
}
-void QMacStylePrivate::drawNSViewInRect(CocoaControl widget, NSView *view, const QRect &qtRect, QPainter *p, bool isQWidget, DrawRectBlock drawRectBlock) const
+void QMacStylePrivate::drawNSViewInRect(CocoaControl widget, NSView *view, const QRect &qtRect, QPainter *p, bool isQWidget, __attribute__((noescape)) DrawRectBlock drawRectBlock) const
{
QPoint offset;
- if (widget == CocoaControl(Button_RadioButton, QStyleHelper::SizeLarge))
- offset.setY(2);
- else if (widget == CocoaControl(Button_RadioButton, QStyleHelper::SizeSmall))
- offset = QPoint(-1, 2);
- else if (widget == CocoaControl(Button_RadioButton, QStyleHelper::SizeMini))
- offset.setY(2);
- else if (widget == CocoaControl(Button_PopupButton, QStyleHelper::SizeSmall)
- || widget == CocoaControl(Button_CheckBox, QStyleHelper::SizeLarge))
+ if (widget == CocoaControl(Button_PopupButton, QStyleHelper::SizeSmall))
offset.setY(1);
- else if (widget == CocoaControl(Button_CheckBox, QStyleHelper::SizeSmall))
- offset.setX(-1);
- else if (widget == CocoaControl(Button_CheckBox, QStyleHelper::SizeMini))
- offset = QPoint(7, 5);
else if (widget == CocoaControl(Button_PopupButton, QStyleHelper::SizeMini))
offset = QPoint(2, -1);
else if (widget == CocoaControl(Button_PullDown, QStyleHelper::SizeLarge))
@@ -2181,15 +2315,20 @@ void QMacStyle::unpolish(QApplication *)
void QMacStyle::polish(QWidget* w)
{
+ if (false
#if QT_CONFIG(menu)
- if (qobject_cast<QMenu*>(w)
-#if QT_CONFIG(combobox)
- || qobject_cast<QComboBoxPrivateContainer *>(w)
+ || qobject_cast<QMenu*>(w)
+# if QT_CONFIG(combobox)
+ || qobject_cast<QComboBoxPrivateContainer *>(w)
+# endif
#endif
- ) {
+#if QT_CONFIG(mdiarea)
+ || qobject_cast<QMdiSubWindow *>(w)
+#endif
+ ) {
w->setAttribute(Qt::WA_TranslucentBackground, true);
+ w->setAutoFillBackground(false);
}
-#endif
#if QT_CONFIG(tabbar)
if (QTabBar *tb = qobject_cast<QTabBar*>(w)) {
@@ -2325,7 +2464,15 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW
case PM_CheckBoxLabelSpacing:
case PM_RadioButtonLabelSpacing:
- ret = 2;
+ ret = [=] {
+ if (opt) {
+ if (opt->state & State_Mini)
+ return 4;
+ if (opt->state & State_Small)
+ return 3;
+ }
+ return 2;
+ } ();
break;
case PM_MenuScrollerHeight:
ret = 15; // I hate having magic numbers in here...
@@ -2353,14 +2500,6 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW
break;
case PM_SpinBoxFrameWidth:
ret = qt_mac_aqua_get_metric(EditTextFrameOutset);
- switch (d->aquaSizeConstrain(opt, widget)) {
- case QStyleHelper::SizeMini:
- ret += 1;
- break;
- default:
- ret += 2;
- break;
- }
break;
case PM_ButtonShiftHorizontal:
case PM_ButtonShiftVertical:
@@ -2867,19 +3006,7 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
ret = true;
break;
case SH_WindowFrame_Mask:
- ret = 1;
- if (QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask *>(hret)) {
- mask->region = opt->rect;
- mask->region -= QRect(opt->rect.left(), opt->rect.top(), 5, 1);
- mask->region -= QRect(opt->rect.left(), opt->rect.top() + 1, 3, 1);
- mask->region -= QRect(opt->rect.left(), opt->rect.top() + 2, 2, 1);
- mask->region -= QRect(opt->rect.left(), opt->rect.top() + 3, 1, 2);
-
- mask->region -= QRect(opt->rect.right() - 4, opt->rect.top(), 5, 1);
- mask->region -= QRect(opt->rect.right() - 2, opt->rect.top() + 1, 3, 1);
- mask->region -= QRect(opt->rect.right() - 1, opt->rect.top() + 2, 2, 1);
- mask->region -= QRect(opt->rect.right() , opt->rect.top() + 3, 1, 2);
- }
+ ret = false;
break;
case SH_TabBar_ElideMode:
ret = Qt::ElideRight;
@@ -2964,6 +3091,12 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
// min/max/close buttons on windows don't show tool tips
ret = false;
break;
+ case SH_ComboBox_AllowWheelScrolling:
+ ret = false;
+ break;
+ case SH_SpinBox_ButtonsInsideFrame:
+ ret = false;
+ break;
default:
ret = QCommonStyle::styleHint(sh, opt, w, hret);
break;
@@ -3156,6 +3289,15 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
}
break;
case PE_FrameWindow:
+ if (const QStyleOptionFrame *frame = qstyleoption_cast<const QStyleOptionFrame *>(opt)) {
+ if (w && w->inherits("QMdiSubWindow")) {
+ p->save();
+ p->setPen(QPen(frame->palette.dark().color(), frame->lineWidth));
+ p->setBrush(frame->palette.window());
+ p->drawRect(frame->rect);
+ p->restore();
+ }
+ }
break;
case PE_IndicatorDockWidgetResizeHandle: {
// The docwidget resize handle is drawn as a one-pixel wide line.
@@ -3263,49 +3405,28 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
case PE_IndicatorViewItemCheck:
case PE_IndicatorRadioButton:
case PE_IndicatorCheckBox: {
- bool drawColorless = tds == kThemeStateInactive;
- HIThemeButtonDrawInfo bdi;
- bdi.version = qt_mac_hitheme_version;
- bdi.state = tds;
- if (drawColorless)
- bdi.state = kThemeStateActive;
- bdi.adornment = kThemeDrawIndicatorOnly;
- if (opt->state & State_HasFocus)
- bdi.adornment |= kThemeAdornmentFocus;
- bool isRadioButton = (pe == PE_IndicatorRadioButton);
- switch (d->aquaSizeConstrain(opt, w)) {
- case QStyleHelper::SizeDefault:
- case QStyleHelper::SizeLarge:
- if (isRadioButton)
- bdi.kind = kThemeRadioButton;
- else
- bdi.kind = kThemeCheckBox;
- break;
- case QStyleHelper::SizeMini:
- if (isRadioButton)
- bdi.kind = kThemeMiniRadioButton;
- else
- bdi.kind = kThemeMiniCheckBox;
- break;
- case QStyleHelper::SizeSmall:
- if (isRadioButton)
- bdi.kind = kThemeSmallRadioButton;
- else
- bdi.kind = kThemeSmallCheckBox;
- break;
- }
- if (opt->state & State_NoChange)
- bdi.value = kThemeButtonMixed;
- else if (opt->state & State_On)
- bdi.value = kThemeButtonOn;
- else
- bdi.value = kThemeButtonOff;
- CGRect macRect = opt->rect.toCGRect();
- const QMacStylePrivate::CocoaControl cw = QMacStylePrivate::cocoaControlFromHIThemeButtonKind(bdi.kind);
- if (!drawColorless)
- HIThemeDrawButton(&macRect, &bdi, cg, kHIThemeOrientationNormal, 0);
- else
- d->drawColorlessButton(macRect, &bdi, cw, p, opt);
+ const bool isEnabled = opt->state & State_Enabled;
+ const bool isPressed = opt->state & State_Sunken;
+ const bool isRadioButton = (pe == PE_IndicatorRadioButton);
+ const auto ct = isRadioButton ? QMacStylePrivate::Button_RadioButton : QMacStylePrivate::Button_CheckBox;
+ const auto cs = d->effectiveAquaSizeConstrain(opt, w);
+ const auto cw = QMacStylePrivate::CocoaControl(ct, cs);
+ auto *tb = static_cast<NSButton *>(d->cocoaControl(cw));
+ tb.enabled = isEnabled;
+ tb.state = (opt->state & State_NoChange) ? NSMixedState :
+ (opt->state & State_On) ? NSOnState : NSOffState;
+ [tb highlight:isPressed];
+ const auto vOffset = [=] {
+ // As measured
+ if (cs == QStyleHelper::SizeMini)
+ return ct == QMacStylePrivate::Button_CheckBox ? -0.5 : 0.5;
+
+ return cs == QStyleHelper::SizeSmall ? 0.5 : 0.0;
+ } ();
+ d->drawNSViewInRect(cw, tb, opt->rect, p, w != nullptr, ^(CGContextRef ctx, const CGRect &rect) {
+ CGContextTranslateCTM(ctx, 0, vOffset);
+ [tb.cell drawInteriorWithFrame:rect inView:tb];
+ });
break; }
case PE_FrameFocusRect:
// Use the our own focus widget stuff.
@@ -3344,35 +3465,21 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
case PE_FrameLineEdit:
if (const QStyleOptionFrame *frame = qstyleoption_cast<const QStyleOptionFrame *>(opt)) {
if (frame->state & State_Sunken) {
- QColor baseColor(frame->palette.background().color());
- HIThemeFrameDrawInfo fdi;
- fdi.version = qt_mac_hitheme_version;
- fdi.state = tds;
- int frame_size;
- fdi.kind = frame->features & QStyleOptionFrame::Rounded ? kHIThemeFrameTextFieldRound :
- kHIThemeFrameTextFieldSquare;
- frame_size = qt_mac_aqua_get_metric(EditTextFrameOutset);
- if ((frame->state & State_ReadOnly) || !(frame->state & State_Enabled))
- fdi.state = kThemeStateInactive;
- else if (fdi.state == kThemeStatePressed)
- // This pressed state doesn't make sense for a line edit frame.
- // And Yosemite agrees with us. Otherwise it starts showing yellow pixels.
- fdi.state = kThemeStateActive;
- fdi.isFocused = (frame->state & State_HasFocus);
- int lw = frame->lineWidth;
- if (lw <= 0)
- lw = proxy()->pixelMetric(PM_DefaultFrameWidth, frame, w);
- { //clear to base color
- p->save();
- p->setPen(QPen(baseColor, lw));
- p->setBrush(Qt::NoBrush);
- p->drawRect(frame->rect);
- p->restore();
- }
- const auto frameMargins = QMargins(frame_size, frame_size, frame_size, frame_size);
- const CGRect cgRect = frame->rect.marginsRemoved(frameMargins).toCGRect();
-
- HIThemeDrawFrame(&cgRect, &fdi, cg, kHIThemeOrientationNormal);
+ const bool isEnabled = opt->state & State_Enabled;
+ const bool isReadOnly = opt->state & State_ReadOnly;
+ const bool isRounded = frame->features & QStyleOptionFrame::Rounded;
+ const auto cs = d->effectiveAquaSizeConstrain(opt, w, CT_LineEdit);
+ const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::TextField, cs);
+ auto *tf = static_cast<NSTextField *>(d->cocoaControl(cw));
+ tf.enabled = isEnabled;
+ tf.editable = !isReadOnly;
+ tf.bezeled = YES;
+ static_cast<NSTextFieldCell *>(tf.cell).bezelStyle = isRounded ? NSTextFieldRoundedBezel : NSTextFieldSquareBezel;
+ tf.frame = opt->rect.toCGRect();
+ d->drawNSViewInRect(cw, tf, opt->rect, p, w != nullptr, ^(CGContextRef ctx, const CGRect &rect) {
+ Q_UNUSED(ctx);
+ [tf.cell drawWithFrame:rect inView:tf];
+ });
} else {
QCommonStyle::drawPrimitive(pe, opt, p, w);
}
@@ -3464,31 +3571,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
p->setPen(Qt::transparent);
p->setBrush(opt->palette.window());
p->setRenderHint(QPainter::Antialiasing, true);
- QPainterPath path;
- static const qreal CornerPointOffset = 5.5;
- static const qreal CornerControlOffset = 2.1;
- QRectF r = opt->rect;
- // Top-left corner
- path.moveTo(r.left(), r.top() + CornerPointOffset);
- path.cubicTo(r.left(), r.top() + CornerControlOffset,
- r.left() + CornerControlOffset, r.top(),
- r.left() + CornerPointOffset, r.top());
- // Top-right corner
- path.lineTo(r.right() - CornerPointOffset, r.top());
- path.cubicTo(r.right() - CornerControlOffset, r.top(),
- r.right(), r.top() + CornerControlOffset,
- r.right(), r.top() + CornerPointOffset);
- // Bottom-right corner
- path.lineTo(r.right(), r.bottom() - CornerPointOffset);
- path.cubicTo(r.right(), r.bottom() - CornerControlOffset,
- r.right() - CornerControlOffset, r.bottom(),
- r.right() - CornerPointOffset, r.bottom());
- // Bottom-right corner
- path.lineTo(r.left() + CornerPointOffset, r.bottom());
- path.cubicTo(r.left() + CornerControlOffset, r.bottom(),
- r.left(), r.bottom() - CornerControlOffset,
- r.left(), r.bottom() - CornerPointOffset);
- path.lineTo(r.left(), r.top() + CornerPointOffset);
+ const QPainterPath path = d->windowPanelPath(opt->rect);
p->drawPath(path);
p->restore();
} break;
@@ -3792,7 +3875,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
}
}
- const qreal radius = bdi.kind == kThemeBevelButton ? 0 : 4;
+ const qreal radius = bdi.kind == kThemeBevelButton ? 0 : 3;
const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, btn, w);
const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, btn, w);
const QRect focusTargetRect(focusRect.origin.x, focusRect.origin.y, focusRect.size.width, focusRect.size.height);
@@ -4049,85 +4132,67 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
#endif
#if QT_CONFIG(dockwidget)
case CE_DockWidgetTitle:
- if (const QDockWidget *dockWidget = qobject_cast<const QDockWidget *>(w)) {
- bool floating = dockWidget->isFloating();
- if (floating) {
- ThemeDrawState tds = d->getDrawState(opt->state);
- HIThemeWindowDrawInfo wdi;
- wdi.version = qt_mac_hitheme_version;
- wdi.state = tds;
- wdi.windowType = kThemeMovableDialogWindow;
- wdi.titleHeight = opt->rect.height();
- wdi.titleWidth = opt->rect.width();
- wdi.attributes = 0;
-
- CGRect titleBarRect;
- CGRect tmpRect = opt->rect.toCGRect();
- {
- QCFType<HIShapeRef> titleRegion;
- QRect newr = opt->rect.adjusted(0, 0, 2, 0);
- HIThemeGetWindowShape(&tmpRect, &wdi, kWindowTitleBarRgn, &titleRegion);
- HIShapeGetBounds(titleRegion, &tmpRect);
- newr.translate(newr.x() - int(tmpRect.origin.x), newr.y() - int(tmpRect.origin.y));
- titleBarRect = newr.toCGRect();
- }
- QMacCGContext cg(p);
- HIThemeDrawWindowFrame(&titleBarRect, &wdi, cg, kHIThemeOrientationNormal, 0);
- } else {
- // fill title bar background
- QLinearGradient linearGrad(0, opt->rect.top(), 0, opt->rect.bottom());
- linearGrad.setColorAt(0, mainWindowGradientBegin);
- linearGrad.setColorAt(1, mainWindowGradientEnd);
- p->fillRect(opt->rect, linearGrad);
-
- // draw horizontal lines at top and bottom
- p->save();
- p->setPen(mainWindowGradientBegin.lighter(114));
- p->drawLine(opt->rect.topLeft(), opt->rect.topRight());
- p->setPen(mainWindowGradientEnd.darker(114));
- p->drawLine(opt->rect.bottomLeft(), opt->rect.bottomRight());
- p->restore();
+ if (const auto *dwOpt = qstyleoption_cast<const QStyleOptionDockWidget *>(opt)) {
+ const bool isVertical = dwOpt->verticalTitleBar;
+ const auto effectiveRect = isVertical ? opt->rect.transposed() : opt->rect;
+ p->save();
+ if (isVertical) {
+ p->translate(effectiveRect.left(), effectiveRect.top() + effectiveRect.width());
+ p->rotate(-90);
+ p->translate(-effectiveRect.left(), -effectiveRect.top());
}
- }
- // Draw the text...
- if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast<const QStyleOptionDockWidget *>(opt)) {
- if (!dwOpt->title.isEmpty()) {
+ // fill title bar background
+ QLinearGradient linearGrad;
+ linearGrad.setStart(QPointF(0, 0));
+ linearGrad.setFinalStop(QPointF(0, 2 * effectiveRect.height()));
+ linearGrad.setColorAt(0, opt->palette.button().color());
+ linearGrad.setColorAt(1, opt->palette.dark().color());
+ p->fillRect(effectiveRect, linearGrad);
- const bool verticalTitleBar = dwOpt->verticalTitleBar;
-
- QRect titleRect = subElementRect(SE_DockWidgetTitleBarText, opt, w);
- if (verticalTitleBar) {
- QRect rect = dwOpt->rect;
- QRect r = rect.transposed();
-
- titleRect = QRect(r.left() + rect.bottom()
- - titleRect.bottom(),
- r.top() + titleRect.left() - rect.left(),
- titleRect.height(), titleRect.width());
-
- p->translate(r.left(), r.top() + r.width());
- p->rotate(-90);
- p->translate(-r.left(), -r.top());
- }
+ // draw horizontal line at bottom
+ p->setPen(opt->palette.dark().color());
+ p->drawLine(effectiveRect.bottomLeft(), effectiveRect.bottomRight());
- QFont oldFont = p->font();
- p->setFont(qt_app_fonts_hash()->value("QToolButton", p->font()));
- QString text = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight,
- titleRect.width());
- drawItemText(p, titleRect,
- Qt::AlignCenter | Qt::TextShowMnemonic, dwOpt->palette,
- dwOpt->state & State_Enabled, text,
- QPalette::WindowText);
- p->setFont(oldFont);
+ if (!dwOpt->title.isEmpty()) {
+ auto titleRect = proxy()->subElementRect(SE_DockWidgetTitleBarText, opt, w);
+ if (isVertical)
+ titleRect = QRect(effectiveRect.left() + opt->rect.bottom() - titleRect.bottom(),
+ effectiveRect.top() + titleRect.left() - opt->rect.left(),
+ titleRect.height(),
+ titleRect.width());
+
+ const auto text = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width());
+ proxy()->drawItemText(p, titleRect, Qt::AlignCenter | Qt::TextShowMnemonic, dwOpt->palette,
+ dwOpt->state & State_Enabled, text, QPalette::WindowText);
}
+ p->restore();
}
break;
#endif
case CE_FocusFrame: {
+ const auto *ff = qobject_cast<const QFocusFrame *>(w);
+ const auto *ffw = ff ? ff->widget() : nullptr;
+ const auto ct = [=] {
+ if (ffw) {
+ if (ffw->inherits("QCheckBox"))
+ return QMacStylePrivate::Button_CheckBox;
+ if (ffw->inherits("QRadioButton"))
+ return QMacStylePrivate::Button_RadioButton;
+ }
+
+ return QMacStylePrivate::Box; // Not really, just make it the default
+ } ();
const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, opt, w);
const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, opt, w);
- d->drawFocusRing(p, opt->rect, hMargin, vMargin);
+ if (ct == QMacStylePrivate::Box) {
+ d->drawFocusRing(p, opt->rect, hMargin, vMargin);
+ } else if (ffw) {
+ const auto cs = ffw->testAttribute(Qt::WA_MacMiniSize) ? QStyleHelper::SizeMini :
+ ffw->testAttribute(Qt::WA_MacSmallSize) ? QStyleHelper::SizeSmall :
+ QStyleHelper::SizeLarge;
+ d->drawFocusRing(p, opt->rect, hMargin, vMargin, QMacStylePrivate::CocoaControl(ct, cs));
+ }
break; }
case CE_MenuEmptyArea:
// Skip: PE_PanelMenu fills in everything
@@ -4281,9 +4346,41 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
// and then the combo inherits it and passes it onward. At that point the resolve mask
// is very, very weak. This makes it stonger.
myFont.setPointSizeF(QFontInfo(mi->font).pointSizeF());
- p->setFont(myFont);
- p->drawText(xpos, yPos, mi->rect.width() - xm - tabwidth + 1,
- mi->rect.height(), text_flags, s);
+
+ // QTBUG-65653: Our own text rendering doesn't look good enough, especially on non-retina
+ // displays. Worked around here while waiting for a proper fix in QCoreTextFontEngine.
+ // Only if we're not using QCoreTextFontEngine we do fallback to our own text rendering.
+ const auto *fontEngine = QFontPrivate::get(myFont)->engineForScript(QChar::Script_Common);
+ Q_ASSERT(fontEngine);
+ if (fontEngine->type() == QFontEngine::Multi) {
+ fontEngine = static_cast<const QFontEngineMulti *>(fontEngine)->engine(0);
+ Q_ASSERT(fontEngine);
+ }
+ if (fontEngine->type() == QFontEngine::Mac) {
+ NSFont *f = (NSFont *)(CTFontRef)fontEngine->handle();
+
+ // Respect the menu item palette as set in the style option.
+ const auto pc = p->pen().color();
+ NSColor *c = [NSColor colorWithSRGBRed:pc.redF()
+ green:pc.greenF()
+ blue:pc.blueF()
+ alpha:pc.alphaF()];
+
+ s = qt_mac_removeMnemonics(s);
+ const auto textRect = CGRectMake(xpos, yPos, mi->rect.width() - xm - tabwidth + 1, mi->rect.height());
+
+ QMacCGContext cgCtx(p);
+ d->setupNSGraphicsContext(cgCtx, YES);
+
+ [s.toNSString() drawInRect:textRect
+ withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c }];
+
+ d->restoreNSGraphicsContext(cgCtx);
+ } else {
+ p->setFont(myFont);
+ p->drawText(xpos, yPos, mi->rect.width() - xm - tabwidth + 1,
+ mi->rect.height(), text_flags, s);
+ }
}
p->restore();
}
@@ -4409,13 +4506,16 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
break;
}
case CE_Splitter:
- if (opt->rect.width() > 1 && opt->rect.height() > 1){
- HIThemeSplitterDrawInfo sdi;
- sdi.version = qt_mac_hitheme_version;
- sdi.state = tds;
- sdi.adornment = kHIThemeSplitterAdornmentMetal;
- CGRect cgRect = opt->rect.toCGRect();
- HIThemeDrawPaneSplitter(&cgRect, &sdi, cg, kHIThemeOrientationNormal);
+ if (opt->rect.width() > 1 && opt->rect.height() > 1) {
+ const bool isVertical = !(opt->state & QStyle::State_Horizontal);
+ // Qt refers to the layout orientation, while Cocoa refers to the divider's.
+ const auto ct = isVertical ? QMacStylePrivate::SplitView_Horizontal : QMacStylePrivate::SplitView_Vertical;
+ const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge);
+ auto *sv = static_cast<NSSplitView *>(d->cocoaControl(cw));
+ sv.frame = opt->rect.toCGRect();
+ d->drawNSViewInRect(cw, sv, opt->rect, p, w != nullptr, ^(CGContextRef ctx, const CGRect &rect) {
+ [sv drawDividerInRect:rect];
+ });
} else {
QPen oldPen = p->pen();
p->setPen(opt->palette.dark().color());
@@ -4465,28 +4565,22 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
#if QT_CONFIG(mainwindow)
if (QMainWindow * mainWindow = qobject_cast<QMainWindow *>(w->window())) {
if (toolBar && toolBar->toolBarArea == Qt::TopToolBarArea && mainWindow->unifiedTitleAndToolBarOnMac()) {
-
// fill with transparent pixels.
p->save();
p->setCompositionMode(QPainter::CompositionMode_Source);
p->fillRect(opt->rect, Qt::transparent);
p->restore();
- // Drow a horizontal sepearator line at the toolBar bottom if the "unified" area ends here.
+ // Drow a horizontal separator line at the toolBar bottom if the "unified" area ends here.
// There might be additional toolbars or other widgets such as tab bars in document
// mode below. Determine this by making a unified toolbar area test for the row below
// this toolbar.
- QPoint windowToolbarEnd = w->mapTo(w->window(), opt->rect.bottomLeft());
- bool isEndOfUnifiedArea = !isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowToolbarEnd.y() + 1);
+ const QPoint windowToolbarEnd = w->mapTo(w->window(), opt->rect.bottomLeft());
+ const bool isEndOfUnifiedArea = !isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowToolbarEnd.y() + 1);
if (isEndOfUnifiedArea) {
- int margin;
- margin = qt_mac_aqua_get_metric(SeparatorSize);
- CGRect separatorRect = CGRectMake(opt->rect.left(), opt->rect.bottom(), opt->rect.width(), margin);
- HIThemeSeparatorDrawInfo separatorDrawInfo;
- separatorDrawInfo.version = 0;
- separatorDrawInfo.state = qt_macWindowMainWindow(mainWindow) ? kThemeStateActive : kThemeStateInactive;
- QMacCGContext cg(p);
- HIThemeDrawSeparator(&separatorRect, &separatorDrawInfo, cg, kHIThemeOrientationNormal);
+ const int margin = qt_mac_aqua_get_metric(SeparatorSize);
+ const auto separatorRect = QRect(opt->rect.left(), opt->rect.bottom(), opt->rect.width(), margin);
+ p->fillRect(separatorRect, opt->palette.dark().color());
}
break;
}
@@ -5368,19 +5462,16 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
case CC_SpinBox:
if (const QStyleOptionSpinBox *sb = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {
if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) {
- int frame_size;
- frame_size = qt_mac_aqua_get_metric(EditTextFrameOutset);
-
- QRect lineeditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField, widget);
- lineeditRect.adjust(-frame_size, -frame_size, +frame_size, +frame_size);
-
- HIThemeFrameDrawInfo fdi;
- fdi.version = qt_mac_hitheme_version;
- fdi.state = tds == kThemeStateInactive ? kThemeStateActive : tds;
- fdi.kind = kHIThemeFrameTextFieldSquare;
- fdi.isFocused = false;
- CGRect cgRect = lineeditRect.toCGRect();
- HIThemeDrawFrame(&cgRect, &fdi, cg, kHIThemeOrientationNormal);
+ const auto lineEditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField, widget);
+ QStyleOptionFrame frame;
+ static_cast<QStyleOption &>(frame) = *opt;
+ frame.rect = lineEditRect;
+ frame.state |= State_Sunken;
+ frame.lineWidth = 1;
+ frame.midLineWidth = 0;
+ frame.features = QStyleOptionFrame::None;
+ frame.frameShape = QFrame::Box;
+ drawPrimitive(PE_FrameLineEdit, &frame, p, widget);
}
if (sb->subControls & (SC_SpinBoxUp | SC_SpinBoxDown)) {
const QRect updown = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget)
@@ -5398,7 +5489,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
const bool upPressed = sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken);
const bool downPressed = sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken);
const CGFloat x = CGRectGetMidX(newRect);
- const CGFloat y = upPressed ? -3 : 3; // FIXME Weird coordinate shift going on
+ const CGFloat y = upPressed ? -3 : 3; // Weird coordinate shift going on. Verified with Hopper
const CGPoint pressPoint = CGPointMake(x, y);
// Pretend we're pressing the mouse on the right button. Unfortunately, NSStepperCell has no
// API to highlight a specific button. The highlighted property works only on the down button.
@@ -5435,115 +5526,74 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
}
break;
case CC_TitleBar:
- if (const QStyleOptionTitleBar *titlebar
- = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
- if (titlebar->state & State_Active) {
- if (titlebar->titleBarState & State_Active)
- tds = kThemeStateActive;
- else
- tds = kThemeStateInactive;
+ if (const auto *titlebar = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
+ const bool isActive = (titlebar->state & State_Active)
+ && (titlebar->titleBarState & State_Active);
+
+ p->fillRect(opt->rect, Qt::transparent);
+ p->setRenderHint(QPainter::Antialiasing);
+ p->setClipRect(opt->rect, Qt::IntersectClip);
+
+ // FIXME A single drawPath() with 0-sized pen
+ // doesn't look as good as this double fillPath().
+ const auto outterFrameRect = QRectF(opt->rect.adjusted(0, 0, 0, opt->rect.height()));
+ QPainterPath outterFramePath = d->windowPanelPath(outterFrameRect);
+ p->fillPath(outterFramePath, opt->palette.dark());
+
+ const auto frameAdjust = 1.0 / p->device()->devicePixelRatioF();
+ const auto innerFrameRect = outterFrameRect.adjusted(frameAdjust, frameAdjust, -frameAdjust, 0);
+ QPainterPath innerFramePath = d->windowPanelPath(innerFrameRect);
+ if (isActive) {
+ QLinearGradient g;
+ g.setStart(QPointF(0, 0));
+ g.setFinalStop(QPointF(0, 2 * opt->rect.height()));
+ g.setColorAt(0, opt->palette.button().color());
+ g.setColorAt(1, opt->palette.dark().color());
+ p->fillPath(innerFramePath, g);
} else {
- tds = kThemeStateInactive;
+ p->fillPath(innerFramePath, opt->palette.button());
}
- HIThemeWindowDrawInfo wdi;
- wdi.version = qt_mac_hitheme_version;
- wdi.state = tds;
- wdi.windowType = QtWinType;
- wdi.titleHeight = titlebar->rect.height();
- wdi.titleWidth = titlebar->rect.width();
- wdi.attributes = kThemeWindowHasTitleText;
- // It seems HIThemeDrawTitleBarWidget is not able to draw a dirty
- // close button, so use HIThemeDrawWindowFrame instead.
- if (widget && widget->isWindowModified() && titlebar->subControls & SC_TitleBarCloseButton)
- wdi.attributes |= kThemeWindowHasCloseBox | kThemeWindowHasDirty;
-
- CGRect titleBarRect;
- CGRect tmpRect = titlebar->rect.toCGRect();
- {
- QCFType<HIShapeRef> titleRegion;
- QRect newr = titlebar->rect.adjusted(0, 0, 2, 0);
- HIThemeGetWindowShape(&tmpRect, &wdi, kWindowTitleBarRgn, &titleRegion);
- HIShapeGetBounds(titleRegion, &tmpRect);
- newr.translate(newr.x() - int(tmpRect.origin.x), newr.y() - int(tmpRect.origin.y));
- titleBarRect = newr.toCGRect();
- }
- HIThemeDrawWindowFrame(&titleBarRect, &wdi, cg, kHIThemeOrientationNormal, 0);
if (titlebar->subControls & (SC_TitleBarCloseButton
| SC_TitleBarMaxButton
| SC_TitleBarMinButton
| SC_TitleBarNormalButton)) {
- HIThemeWindowWidgetDrawInfo wwdi;
- wwdi.version = qt_mac_hitheme_version;
- wwdi.widgetState = tds;
- if (titlebar->state & State_MouseOver)
- wwdi.widgetState = kThemeStateRollover;
- wwdi.windowType = QtWinType;
- wwdi.attributes = wdi.attributes | kThemeWindowHasFullZoom | kThemeWindowHasCloseBox | kThemeWindowHasCollapseBox;
- wwdi.windowState = wdi.state;
- wwdi.titleHeight = wdi.titleHeight;
- wwdi.titleWidth = wdi.titleWidth;
- ThemeDrawState savedControlState = wwdi.widgetState;
- uint sc = SC_TitleBarMinButton;
- ThemeTitleBarWidget tbw = kThemeWidgetCollapseBox;
- bool active = titlebar->state & State_Active;
-
- while (sc <= SC_TitleBarCloseButton) {
- if (sc & titlebar->subControls) {
- uint tmp = sc;
- wwdi.widgetState = savedControlState;
- wwdi.widgetType = tbw;
- if (sc == SC_TitleBarMinButton)
- tmp |= SC_TitleBarNormalButton;
- if (active && (titlebar->activeSubControls & tmp)
- && (titlebar->state & State_Sunken))
- wwdi.widgetState = kThemeStatePressed;
- // Draw all sub controllers except the dirty close button
- // (it is already handled by HIThemeDrawWindowFrame).
- if (!(widget && widget->isWindowModified() && tbw == kThemeWidgetCloseBox)) {
- HIThemeDrawTitleBarWidget(&titleBarRect, &wwdi, cg, kHIThemeOrientationNormal);
- p->paintEngine()->syncState();
- }
- }
- sc = sc << 1;
- tbw = tbw >> 1;
+ const bool isHovered = (titlebar->state & State_MouseOver);
+ static const SubControl buttons[] = {
+ SC_TitleBarCloseButton, SC_TitleBarMinButton, SC_TitleBarMaxButton
+ };
+ for (const auto sc : buttons) {
+ const auto ct = d->windowButtonCocoaControl(sc);
+ const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge);
+ auto *wb = static_cast<NSButton *>(d->cocoaControl(cw));
+ wb.enabled = (sc & titlebar->subControls);
+ [wb highlight:(titlebar->state & State_Sunken) && (sc & titlebar->activeSubControls)];
+ Q_UNUSED(isHovered); // FIXME No public API for this
+
+ const auto buttonRect = proxy()->subControlRect(CC_TitleBar, titlebar, sc, widget);
+ const auto drawBlock = ^ (CGContextRef ctx, const CGRect &rect) {
+ Q_UNUSED(ctx);
+ Q_UNUSED(rect);
+ auto *wbCell = static_cast<NSButtonCell *>(wb.cell);
+ [wbCell drawWithFrame:rect inView:wb];
+ };
+ d->drawNSViewInRect(cw, wb, buttonRect, p, widget != nullptr, drawBlock);
}
}
- p->paintEngine()->syncState();
+
if (titlebar->subControls & SC_TitleBarLabel) {
- int iw = 0;
+ const auto tr = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarLabel, widget);
if (!titlebar->icon.isNull()) {
- QCFType<HIShapeRef> titleRegion2;
- HIThemeGetWindowShape(&titleBarRect, &wdi, kWindowTitleProxyIconRgn,
- &titleRegion2);
- HIShapeGetBounds(titleRegion2, &tmpRect);
- if (tmpRect.size.width != 1) {
- int iconExtent = proxy()->pixelMetric(PM_SmallIconSize);
- iw = titlebar->icon.actualSize(QSize(iconExtent, iconExtent)).width();
- }
- }
- if (!titlebar->text.isEmpty()) {
- p->save();
- QCFType<HIShapeRef> titleRegion3;
- HIThemeGetWindowShape(&titleBarRect, &wdi, kWindowTitleTextRgn, &titleRegion3);
- HIShapeGetBounds(titleRegion3, &tmpRect);
- p->setClipRect(QRectF::fromCGRect(tmpRect).toRect());
- QRect br = p->clipRegion().boundingRect();
- int x = br.x(),
- y = br.y() + (titlebar->rect.height() / 2 - p->fontMetrics().height() / 2);
- if (br.width() <= (p->fontMetrics().width(titlebar->text) + iw * 2))
- x += iw;
- else
- x += br.width() / 2 - p->fontMetrics().width(titlebar->text) / 2;
- if (iw) {
- int iconExtent = proxy()->pixelMetric(PM_SmallIconSize);
- p->drawPixmap(x - iw, y,
- titlebar->icon.pixmap(window, QSize(iconExtent, iconExtent), QIcon::Normal));
- }
- drawItemText(p, br, Qt::AlignCenter, opt->palette, tds == kThemeStateActive,
- titlebar->text, QPalette::Text);
- p->restore();
+ const auto iconExtent = proxy()->pixelMetric(PM_SmallIconSize);
+ const auto iconSize = QSize(iconExtent, iconExtent);
+ const auto iconPos = tr.x() - titlebar->icon.actualSize(iconSize).width() - qRound(titleBarIconTitleSpacing);
+ // Only render the icon if it'll be fully visible
+ if (iconPos < tr.right() - titleBarIconTitleSpacing)
+ p->drawPixmap(iconPos, tr.y(), titlebar->icon.pixmap(window, iconSize, QIcon::Normal));
}
+
+ if (!titlebar->text.isEmpty())
+ drawItemText(p, tr, Qt::AlignCenter, opt->palette, isActive, titlebar->text, QPalette::Text);
}
}
break;
@@ -5790,50 +5840,6 @@ QStyle::SubControl QMacStyle::hitTestComplexControl(ComplexControl cc,
}
}
break;
-/*
- I don't know why, but we only get kWindowContentRgn here, which isn't what we want at all.
- It would be very nice if this would work.
- case QStyle::CC_TitleBar:
- if (const QStyleOptionTitleBar *tbar = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
- HIThemeWindowDrawInfo wdi;
- memset(&wdi, 0, sizeof(wdi));
- wdi.version = qt_mac_hitheme_version;
- wdi.state = kThemeStateActive;
- wdi.windowType = QtWinType;
- wdi.titleWidth = tbar->rect.width();
- wdi.titleHeight = tbar->rect.height();
- if (tbar->titleBarState)
- wdi.attributes |= kThemeWindowHasFullZoom | kThemeWindowHasCloseBox
- | kThemeWindowHasCollapseBox;
- else if (tbar->titleBarFlags & Qt::WindowSystemMenuHint)
- wdi.attributes |= kThemeWindowHasCloseBox;
- QRect tmpRect = tbar->rect;
- tmpRect.setHeight(tmpRect.height() + 100);
- CGRect cgRect = tmpRect.toCGRect();
- WindowRegionCode hit;
- CGPoint hipt = CGPointMake(pt.x(), pt.y());
- if (HIThemeGetWindowRegionHit(&cgRect, &wdi, &hipt, &hit)) {
- switch (hit) {
- case kWindowCloseBoxRgn:
- sc = QStyle::SC_TitleBarCloseButton;
- break;
- case kWindowCollapseBoxRgn:
- sc = QStyle::SC_TitleBarMinButton;
- break;
- case kWindowZoomBoxRgn:
- sc = QStyle::SC_TitleBarMaxButton;
- break;
- case kWindowTitleTextRgn:
- sc = QStyle::SC_TitleBarLabel;
- break;
- default:
- qDebug("got something else %d", hit);
- break;
- }
- }
- }
- break;
-*/
default:
sc = QCommonStyle::hitTestComplexControl(cc, opt, pt, widget);
break;
@@ -5927,49 +5933,47 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op
}
break;
case CC_TitleBar:
- if (const QStyleOptionTitleBar *titlebar
- = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
- HIThemeWindowDrawInfo wdi;
- memset(&wdi, 0, sizeof(wdi));
- wdi.version = qt_mac_hitheme_version;
- wdi.state = kThemeStateActive;
- wdi.windowType = QtWinType;
- wdi.titleHeight = titlebar->rect.height();
- wdi.titleWidth = titlebar->rect.width();
- wdi.attributes = kThemeWindowHasTitleText;
- if (titlebar->subControls & SC_TitleBarCloseButton)
- wdi.attributes |= kThemeWindowHasCloseBox;
- if (titlebar->subControls & SC_TitleBarMaxButton
- | SC_TitleBarNormalButton)
- wdi.attributes |= kThemeWindowHasFullZoom;
- if (titlebar->subControls & SC_TitleBarMinButton)
- wdi.attributes |= kThemeWindowHasCollapseBox;
- WindowRegionCode wrc = kWindowGlobalPortRgn;
-
- if (sc == SC_TitleBarCloseButton)
- wrc = kWindowCloseBoxRgn;
- else if (sc == SC_TitleBarMinButton)
- wrc = kWindowCollapseBoxRgn;
- else if (sc == SC_TitleBarMaxButton)
- wrc = kWindowZoomBoxRgn;
- else if (sc == SC_TitleBarLabel)
- wrc = kWindowTitleTextRgn;
- else if (sc == SC_TitleBarSysMenu)
- ret.setRect(-1024, -1024, 10, proxy()->pixelMetric(PM_TitleBarHeight,
- titlebar, widget));
- if (wrc != kWindowGlobalPortRgn) {
- QCFType<HIShapeRef> region;
- QRect tmpRect = titlebar->rect;
- CGRect titleRect = tmpRect.toCGRect();
- HIThemeGetWindowShape(&titleRect, &wdi, kWindowTitleBarRgn, &region);
- HIShapeGetBounds(region, &titleRect);
- CFRelease(region);
- tmpRect.translate(tmpRect.x() - int(titleRect.origin.x),
- tmpRect.y() - int(titleRect.origin.y));
- titleRect = tmpRect.toCGRect();
- HIThemeGetWindowShape(&titleRect, &wdi, wrc, &region);
- HIShapeGetBounds(region, &titleRect);
- ret = QRectF::fromCGRect(titleRect).toRect();
+ if (const auto *titlebar = qstyleoption_cast<const QStyleOptionTitleBar *>(opt)) {
+ // The title bar layout is as follows: close, min, zoom, icon, title
+ // [ x _ + @ Window Title ]
+ // Center the icon and title until it starts to overlap with the buttons.
+ // The icon doesn't count towards SC_TitleBarLabel, but it's still rendered
+ // next to the title text. See drawComplexControl().
+ if (sc == SC_TitleBarLabel) {
+ qreal labelWidth = titlebar->fontMetrics.horizontalAdvance(titlebar->text) + 1; // FIXME Rounding error?
+ qreal labelHeight = titlebar->fontMetrics.height();
+
+ const auto lastButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarMaxButton, widget);
+ qreal controlsSpacing = lastButtonRect.right() + titleBarButtonSpacing;
+ if (!titlebar->icon.isNull()) {
+ const auto iconSize = proxy()->pixelMetric(PM_SmallIconSize);
+ const auto actualIconSize = titlebar->icon.actualSize(QSize(iconSize, iconSize)).width();;
+ controlsSpacing += actualIconSize + titleBarIconTitleSpacing;
+ }
+
+ const qreal labelPos = qMax(controlsSpacing, (opt->rect.width() - labelWidth) / 2.0);
+ labelWidth = qMin(labelWidth, opt->rect.width() - (labelPos + titleBarTitleRightMargin));
+ ret = QRect(labelPos, (opt->rect.height() - labelHeight) / 2,
+ labelWidth, labelHeight);
+ } else {
+ const auto currentButton = d->windowButtonCocoaControl(sc);
+ if (currentButton == QMacStylePrivate::NoControl)
+ break;
+
+ QPointF buttonPos = titlebar->rect.topLeft() + QPointF(titleBarButtonSpacing, 0);
+ QSizeF buttonSize;
+ for (int ct = QMacStylePrivate::Button_WindowClose; ct <= currentButton; ct++) {
+ const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::CocoaControlType(ct),
+ QStyleHelper::SizeLarge);
+ auto *wb = static_cast<NSButton *>(d->cocoaControl(cw));
+ if (ct == currentButton)
+ buttonSize = QSizeF::fromCGSize(wb.frame.size);
+ else
+ buttonPos.rx() += wb.frame.size.width + titleBarButtonSpacing;
+ }
+
+ const auto vOffset = (opt->rect.height() - buttonSize.height()) / 2.0;
+ ret = QRectF(buttonPos, buttonSize).translated(0, vOffset).toRect();
}
}
break;
@@ -6100,9 +6104,9 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op
case CC_SpinBox:
if (const QStyleOptionSpinBox *spin = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {
QStyleHelper::WidgetSizePolicy aquaSize = d->effectiveAquaSizeConstrain(spin, widget);
+ const auto fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, spin, widget);
int spinner_w;
int spinBoxSep;
- int fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, spin, widget);
switch (aquaSize) {
case QStyleHelper::SizeLarge:
spinner_w = 14;
@@ -6165,16 +6169,11 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op
break;
}
case SC_SpinBoxEditField:
- if (spin->buttonSymbols == QAbstractSpinBox::NoButtons) {
- ret.setRect(fw, fw,
- spin->rect.width() - fw * 2,
- spin->rect.height() - fw * 2);
- } else {
- ret.setRect(fw, fw,
- spin->rect.width() - fw * 2 - spinBoxSep - spinner_w,
- spin->rect.height() - fw * 2);
+ ret = spin->rect.adjusted(fw, fw, -fw, -fw);
+ if (spin->buttonSymbols != QAbstractSpinBox::NoButtons) {
+ ret.setWidth(spin->rect.width() - spinBoxSep - spinner_w);
+ ret = visualRect(spin->direction, spin->rect, ret);
}
- ret = visualRect(spin->direction, spin->rect, ret);
break;
default:
ret = QCommonStyle::subControlRect(cc, spin, sc, widget);
@@ -6211,10 +6210,8 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
#if QT_CONFIG(spinbox)
case CT_SpinBox:
if (const QStyleOptionSpinBox *vopt = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {
- // Add button + frame widths
- int buttonWidth = 20;
- int fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, vopt, widget);
- sz += QSize(buttonWidth + 2*fw, 2*fw - 3);
+ const int buttonWidth = 20; // FIXME Use subControlRect()
+ sz += QSize(buttonWidth, -3);
}
break;
#endif
@@ -6557,24 +6554,14 @@ bool QMacStyle::event(QEvent *e)
}
}
#endif
+
if (focusWidget && focusWidget->testAttribute(Qt::WA_MacShowFocusRect)) {
- f = focusWidget;
- QWidget *top = f->parentWidget();
- while (top && !top->isWindow() && !(top->windowType() == Qt::SubWindow))
- top = top->parentWidget();
-#if QT_CONFIG(mainwindow)
- if (qobject_cast<QMainWindow *>(top)) {
- QWidget *central = static_cast<QMainWindow *>(top)->centralWidget();
- for (const QWidget *par = f; par; par = par->parentWidget()) {
- if (par == central) {
- top = central;
- break;
- }
- if (par->isWindow())
- break;
- }
- }
+#if QT_CONFIG(spinbox)
+ if (const auto sb = qobject_cast<QAbstractSpinBox *>(focusWidget))
+ f = sb->property("_q_spinbox_lineedit").value<QWidget *>();
+ else
#endif
+ f = focusWidget;
}
if (f) {
if(!d->focusWidget)
diff --git a/src/plugins/styles/mac/qmacstyle_mac_p_p.h b/src/plugins/styles/mac/qmacstyle_mac_p_p.h
index 078509d551..00dc8a9b53 100644
--- a/src/plugins/styles/mac/qmacstyle_mac_p_p.h
+++ b/src/plugins/styles/mac/qmacstyle_mac_p_p.h
@@ -182,6 +182,7 @@ class QMacStylePrivate : public QCommonStylePrivate
Q_DECLARE_PUBLIC(QMacStyle)
public:
enum CocoaControlType {
+ NoControl, // For when there's no such a control in Cocoa
Box, // QGroupBox
Button_CheckBox,
Button_Disclosure, // Disclosure triangle, like in QTreeView
@@ -189,6 +190,9 @@ public:
Button_PullDown, // QPushButton with menu
Button_PushButton,
Button_RadioButton,
+ Button_WindowClose,
+ Button_WindowMiniaturize,
+ Button_WindowZoom,
ComboBox, // Editable QComboBox
ProgressIndicator_Determinate,
ProgressIndicator_Indeterminate,
@@ -196,7 +200,10 @@ public:
Scroller_Vertical,
Slider_Horizontal,
Slider_Vertical,
- Stepper // QSpinBox buttons
+ SplitView_Horizontal,
+ SplitView_Vertical,
+ Stepper, // QSpinBox buttons
+ TextField
};
typedef QPair<CocoaControlType, QStyleHelper::WidgetSizePolicy> CocoaControl;
@@ -266,10 +273,15 @@ public:
void setupVerticalInvertedXform(CGContextRef cg, bool reverse, bool vertical, const CGRect &rect) const;
- void drawNSViewInRect(CocoaControl widget, NSView *view, const QRect &rect, QPainter *p, bool isQWidget = true, DrawRectBlock drawRectBlock = nil) const;
+ void drawNSViewInRect(CocoaControl widget, NSView *view, const QRect &rect, QPainter *p, bool isQWidget = true, __attribute__((noescape)) DrawRectBlock drawRectBlock = nil) const;
void resolveCurrentNSView(QWindow *window) const;
void drawFocusRing(QPainter *p, const QRect &targetRect, int hMargin, int vMargin, qreal radius = 0) const;
+ void drawFocusRing(QPainter *p, const QRect &targetRect, int hMargin, int vMargin, const CocoaControl &cw) const;
+
+ QPainterPath windowPanelPath(const QRectF &r) const;
+
+ CocoaControlType windowButtonCocoaControl(QStyle::SubControl sc) const;
#if QT_CONFIG(tabbar)
void tabLayout(const QStyleOptionTab *opt, const QWidget *widget, QRect *textRect, QRect *iconRect) const;
diff --git a/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp b/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp
index 078875033f..6add110249 100644
--- a/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp
+++ b/src/plugins/styles/windowsvista/qwindowsvistastyle.cpp
@@ -990,7 +990,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption
XPThemeData theme(widget, 0, QWindowsXPStylePrivate::ToolBarTheme,
TP_DROPDOWNBUTTON);
if (theme.isValid()) {
- const QSizeF size = theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget);
+ const QSizeF size = theme.size() * QStyleHelper::dpiScaled(1);
if (!size.isEmpty()) {
mbiw = qRound(size.width());
mbih = qRound(size.height());
@@ -1513,7 +1513,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle
if (d->transitionsEnabled() && canAnimate(option))
{
- if (control == CC_ScrollBar || control == CC_SpinBox ) {
+ if (control == CC_ScrollBar || control == CC_SpinBox || control == CC_ComboBox) {
QObject *styleObject = option->styleObject; // Can be widget or qquickitem
@@ -1643,12 +1643,28 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle
} else {
if (sub & SC_ComboBoxFrame) {
- QStyleOptionButton btn;
- btn.QStyleOption::operator=(*option);
- btn.rect = option->rect.adjusted(-1, -1, 1, 1);
- if (sub & SC_ComboBoxArrow)
- btn.features = QStyleOptionButton::HasMenu;
- proxy()->drawControl(QStyle::CE_PushButton, &btn, painter, widget);
+ XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme);
+ theme.rect = option->rect;
+ theme.partId = CP_READONLY;
+ if (!(cmb->state & State_Enabled))
+ theme.stateId = CBXS_DISABLED;
+ else if (cmb->state & State_Sunken || cmb->state & State_On)
+ theme.stateId = CBXS_PRESSED;
+ else if (cmb->state & State_MouseOver)
+ theme.stateId = CBXS_HOT;
+ else
+ theme.stateId = CBXS_NORMAL;
+ d->drawBackground(theme);
+ }
+ if (sub & SC_ComboBoxArrow) {
+ XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme);
+ theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget);
+ theme.partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT;
+ if (!(cmb->state & State_Enabled))
+ theme.stateId = CBXS_DISABLED;
+ else
+ theme.stateId = CBXS_NORMAL;
+ d->drawBackground(theme);
}
}
}
@@ -2123,15 +2139,12 @@ QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOpt
#if QT_CONFIG(combobox)
case CC_ComboBox:
if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
- int x = cb->rect.x(),
- y = cb->rect.y(),
- wi = cb->rect.width(),
- he = cb->rect.height();
- int xpos = x;
- int margin = cb->frame ? 3 : 0;
- int bmarg = cb->frame ? 2 : 0;
- int arrowButtonWidth = bmarg + 16;
- xpos += wi - arrowButtonWidth;
+ const int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height();
+ const int margin = cb->frame ? 3 : 0;
+ const int bmarg = cb->frame ? 2 : 0;
+ const int arrowWidth = qRound(QStyleHelper::dpiScaled(16));
+ const int arrowButtonWidth = bmarg + arrowWidth;
+ const int xpos = x + wi - arrowButtonWidth;
switch (subControl) {
case SC_ComboBoxFrame:
@@ -2141,7 +2154,7 @@ QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOpt
rect.setRect(xpos, y , arrowButtonWidth, he);
break;
case SC_ComboBoxEditField:
- rect.setRect(x + margin, y + margin, wi - 2 * margin - 16, he - 2 * margin);
+ rect.setRect(x + margin, y + margin, wi - 2 * margin - arrowWidth, he - 2 * margin);
break;
case SC_ComboBoxListBoxPopup:
rect = cb->rect;
diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
index 4c982c14f4..ff27cab98a 100644
--- a/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
+++ b/src/plugins/styles/windowsvista/qwindowsxpstyle.cpp
@@ -54,7 +54,6 @@
#include <private/qapplication_p.h>
#include <qpa/qplatformnativeinterface.h>
-#include <qdesktopwidget.h>
#if QT_CONFIG(toolbutton)
#include <qtoolbutton.h>
#endif
@@ -186,7 +185,6 @@ HRGN XPThemeData::mask(QWidget *widget)
// QWindowsXPStylePrivate -------------------------------------------------------------------------
// Static initializations
-QPixmap *QWindowsXPStylePrivate::tabbody = 0;
HWND QWindowsXPStylePrivate::m_vistaTreeViewHelper = 0;
HTHEME QWindowsXPStylePrivate::m_themes[NThemes];
bool QWindowsXPStylePrivate::use_xp = false;
@@ -266,8 +264,6 @@ void QWindowsXPStylePrivate::cleanup(bool force)
use_xp = false;
cleanupHandleMap();
- delete tabbody;
- tabbody = 0;
}
/* In order to obtain the correct VistaTreeViewTheme (arrows for PE_IndicatorBranch),
@@ -404,41 +400,16 @@ HWND QWindowsXPStylePrivate::winId(const QWidget *widget)
return hwnd;
// Find top level with native window (there might be dialogs that do not have one).
- const auto topLevels = QApplication::topLevelWidgets();
- for (const QWidget *toplevel : topLevels) {
- if (toplevel->windowHandle() && toplevel->windowHandle()->handle())
- if (const HWND topLevelHwnd = QApplicationPrivate::getHWNDForWidget(toplevel))
- return topLevelHwnd;
+ const auto allWindows = QGuiApplication::allWindows();
+ for (const QWindow *window : allWindows) {
+ if (window->isTopLevel() && window->type() != Qt::Desktop && window->handle() != nullptr)
+ return reinterpret_cast<HWND>(window->winId());
}
return GetDesktopWindow();
}
/*! \internal
- Returns the pointer to a tab widgets body pixmap, scaled to the
- height of the screen. This way the theme engine doesn't need to
- scale the body for every time we ask for it. (Speed optimization)
-*/
-const QPixmap *QWindowsXPStylePrivate::tabBody(QWidget *widget)
-{
- if (!tabbody) {
- XPThemeData theme(0, 0, QWindowsXPStylePrivate::TabTheme, TABP_BODY);
- const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget)).toSize();
-
- tabbody = new QPixmap(size.width(), QApplication::desktop()->screenGeometry().height());
- QPainter painter(tabbody);
- theme.rect = QRect(QPoint(0, 0), size);
- drawBackground(theme);
- // We fill with the last line of the themedata, that
- // way we don't get a tiled pixmap inside big tabs
- QPixmap temp(size.width(), 1);
- painter.drawPixmap(0, 0, temp, 0, size.height() - 1, -1, -1);
- painter.drawTiledPixmap(0, size.height(), size.width(), tabbody->height() - size.height(), temp);
- }
- return tabbody;
-}
-
-/*! \internal
Returns a native buffer (DIB section) of at least the size of
( \a x , \a y ). The buffer has a 32 bit depth, to not lose
the alpha values on proper alpha-pixmaps.
@@ -564,16 +535,6 @@ QRegion QWindowsXPStylePrivate::region(XPThemeData &themeData)
}
/*! \internal
- Sets the parts region on a window.
-*/
-void QWindowsXPStylePrivate::setTransparency(QWidget *widget, XPThemeData &themeData)
-{
- HRGN hrgn = themeData.mask(widget);
- if (hrgn && widget)
- SetWindowRgn(winId(widget), hrgn, true);
-}
-
-/*! \internal
Returns \c true if the native doublebuffer contains pixels with
varying alpha value.
*/
@@ -760,10 +721,8 @@ static QRegion scaleRegion(const QRegion &region, qreal factor)
{
if (region.isEmpty() || qFuzzyCompare(factor, qreal(1)))
return region;
- if (region.rectCount() == 1)
- return QRegion(scaleRect(QRectF(region.boundingRect()), factor).toRect());
QRegion result;
- foreach (const QRect &rect, region.rects())
+ for (const QRect &rect : region)
result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect();
return result;
}
@@ -928,6 +887,7 @@ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa
PROPERTYORIGIN origin = PO_NOTFOUND;
GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERSIZE, &origin);
GetThemeInt(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERSIZE, &borderSize);
+ borderSize *= additionalDevicePixelRatio;
// Clip away border region
if ((origin == PO_CLASS || origin == PO_PART || origin == PO_STATE) && borderSize > 0) {
@@ -1037,7 +997,7 @@ bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa
}
if (addBorderContentClipping)
- painter->setClipRegion(extraClip, Qt::IntersectClip);
+ painter->setClipRegion(scaleRegion(extraClip, 1.0 / additionalDevicePixelRatio), Qt::IntersectClip);
if (!themeData.mirrorHorizontally && !themeData.mirrorVertically && !themeData.rotate) {
if (!haveCachedPixmap)
@@ -1520,11 +1480,12 @@ case PE_Frame:
// GetThemeInt(theme.handle(), partId, stateId, TMT_BORDERCOLOR, &borderSize);
// Inner white border
- p->setPen(QPen(option->palette.base().color(), 1));
- p->drawRect(option->rect.adjusted(1, 1, -2, -2));
+ p->setPen(QPen(option->palette.base().color(), 0));
+ p->drawRect(QRectF(option->rect).adjusted(QStyleHelper::dpiScaled(0.5), QStyleHelper::dpiScaled(0.5),
+ QStyleHelper::dpiScaled(-1), QStyleHelper::dpiScaled(-1)));
// Outer dark border
- p->setPen(QPen(bordercolor, 1));
- p->drawRect(option->rect.adjusted(0, 0, -1, -1));
+ p->setPen(QPen(bordercolor, 0));
+ p->drawRect(QRectF(option->rect).adjusted(0, 0, QStyleHelper::dpiScaled(-0.5), QStyleHelper::dpiScaled(-0.5)));
p->setPen(oldPen);
return;
} else if (fillType == BT_NONE) {
@@ -3552,9 +3513,8 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl
case CC_ComboBox:
if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
- int x = cmb->rect.x(), y = cmb->rect.y(), wi = cmb->rect.width(), he = cmb->rect.height();
- int xpos = x;
- xpos += wi - 1 - 16;
+ const int x = cmb->rect.x(), y = cmb->rect.y(), wi = cmb->rect.width(), he = cmb->rect.height();
+ const int xpos = x + wi - qRound(QStyleHelper::dpiScaled(1 + 16));
switch (subControl) {
case SC_ComboBoxFrame:
@@ -3562,11 +3522,13 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl
break;
case SC_ComboBoxArrow:
- rect = QRect(xpos, y+1, 16, he-2);
+ rect = QRect(xpos, y + qRound(QStyleHelper::dpiScaled(1)),
+ qRound(QStyleHelper::dpiScaled(16)), he - qRound(QStyleHelper::dpiScaled(2)));
break;
case SC_ComboBoxEditField:
- rect = QRect(x+2, y+2, wi-3-16, he-4);
+ rect = QRect(x + qRound(QStyleHelper::dpiScaled(2)), y + qRound(QStyleHelper::dpiScaled(2)),
+ wi - qRound(QStyleHelper::dpiScaled(3 + 16)), he - qRound(QStyleHelper::dpiScaled(4)));
break;
case SC_ComboBoxListBoxPopup:
@@ -3963,6 +3925,40 @@ QWindowsXPStyle::QWindowsXPStyle(QWindowsXPStylePrivate &dd) : QWindowsStyle(dd)
{
}
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug d, const XPThemeData &t)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d << "XPThemeData(" << t.widget << ", theme=#" << t.theme << ", " << t.htheme
+ << ", partId=" << t.partId << ", stateId=" << t.stateId << ", rect=" << t.rect
+ << ", mirrorHorizontally=" << t.mirrorHorizontally << ", mirrorVertically="
+ << t.mirrorVertically << ", noBorder=" << t.noBorder << ", noContent=" << t.noContent
+ << ", rotate=" << t.rotate << ')';
+ return d;
+}
+
+QDebug operator<<(QDebug d, const ThemeMapKey &k)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d << "ThemeMapKey(theme=#" << k.theme
+ << ", partId=" << k.partId << ", stateId=" << k.stateId
+ << ", noBorder=" << k.noBorder << ", noContent=" << k.noContent << ')';
+ return d;
+}
+
+QDebug operator<<(QDebug d, const ThemeMapData &td)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d << "ThemeMapData(alphaType=" << td.alphaType
+ << ", dataValid=" << td.dataValid << ", partIsTransparent=" << td.partIsTransparent
+ << ", hasAlphaChannel=" << td.hasAlphaChannel << ", wasAlphaSwapped=" << td.wasAlphaSwapped
+ << ", hadInvalidAlpha=" << td.hadInvalidAlpha << ')';
+ return d;
+}
+#endif // QT_NO_DEBUG_STREAM
// Debugging code ---------------------------------------------------------------------[ START ]---
// The code for this point on is not compiled by default, but only used as assisting
diff --git a/src/plugins/styles/windowsvista/qwindowsxpstyle_p_p.h b/src/plugins/styles/windowsvista/qwindowsxpstyle_p_p.h
index 721a734829..60f9d7e9b7 100644
--- a/src/plugins/styles/windowsvista/qwindowsxpstyle_p_p.h
+++ b/src/plugins/styles/windowsvista/qwindowsxpstyle_p_p.h
@@ -64,6 +64,8 @@
QT_BEGIN_NAMESPACE
+class QDebug;
+
// TMT_TEXTSHADOWCOLOR is wrongly defined in mingw
#if TMT_TEXTSHADOWCOLOR != 3818
#undef TMT_TEXTSHADOWCOLOR
@@ -181,6 +183,12 @@ struct ThemeMapData {
hasAlphaChannel(false), wasAlphaSwapped(false), hadInvalidAlpha(false) {}
};
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug d, const XPThemeData &t);
+QDebug operator<<(QDebug d, const ThemeMapKey &k);
+QDebug operator<<(QDebug d, const ThemeMapData &td);
+#endif
+
class QWindowsXPStylePrivate : public QWindowsStylePrivate
{
Q_DECLARE_PUBLIC(QWindowsXPStyle)
@@ -224,7 +232,6 @@ public:
void init(bool force = false);
void cleanup(bool force = false);
void cleanupHandleMap();
- const QPixmap *tabBody(QWidget *widget);
HBITMAP buffer(int w = 0, int h = 0);
HDC bufferHDC()
@@ -236,7 +243,6 @@ public:
bool isTransparent(XPThemeData &themeData);
QRegion region(XPThemeData &themeData);
- void setTransparency(QWidget *widget, XPThemeData &themeData);
bool drawBackground(XPThemeData &themeData);
bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, qreal aditionalDevicePixelRatio);
bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal aditionalDevicePixelRatio);
@@ -269,7 +275,6 @@ private:
static QBasicAtomicInt ref;
static bool use_xp;
- static QPixmap *tabbody;
QHash<ThemeMapKey, ThemeMapData> alphaCache;
HDC bufferDC;
diff --git a/src/printsupport/dialogs/qpagesetupdialog.h b/src/printsupport/dialogs/qpagesetupdialog.h
index 70517dc844..a7aaa03134 100644
--- a/src/printsupport/dialogs/qpagesetupdialog.h
+++ b/src/printsupport/dialogs/qpagesetupdialog.h
@@ -62,14 +62,14 @@ public:
~QPageSetupDialog();
#if defined(Q_OS_MAC) || defined(Q_OS_WIN)
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
#endif
- int exec() Q_DECL_OVERRIDE;
+ int exec() override;
using QDialog::open;
void open(QObject *receiver, const char *member);
- void done(int result) Q_DECL_OVERRIDE;
+ void done(int result) override;
QPrinter *printer();
};
diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
index ee7bc62491..7e32f9aa57 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
+++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
@@ -59,6 +59,8 @@
QT_BEGIN_NAMESPACE
+extern QMarginsF qt_convertMargins(const QMarginsF &margins, QPageLayout::Unit fromUnits, QPageLayout::Unit toUnits);
+
// Disabled until we have support for papersources on unix
// #define PSD_ENABLE_PAPERSOURCE
@@ -117,7 +119,7 @@ public:
}
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE
+ void paintEvent(QPaintEvent *) override
{
QSize pageSize = m_pageLayout.fullRectPoints().size();
QSizeF scaledSize = pageSize.scaled(width() - 10, height() - 10, Qt::KeepAspectRatio);
@@ -210,7 +212,7 @@ void QUnixPageSetupDialogPrivate::init()
Q_Q(QPageSetupDialog);
widget = new QPageSetupWidget(q);
- widget->setPrinter(printer);
+ widget->setPrinter(printer, nullptr, printer->outputFormat(), printer->printerName());
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel,
@@ -232,12 +234,20 @@ QPageSetupWidget::QPageSetupWidget(QWidget *parent)
: QWidget(parent),
m_pagePreview(nullptr),
m_printer(nullptr),
+ m_printDevice(nullptr),
m_outputFormat(QPrinter::PdfFormat),
m_units(QPageLayout::Point),
- m_blockSignals(false)
+ m_savedUnits(QPageLayout::Point),
+ m_savedPagesPerSheet(-1),
+ m_savedPagesPerSheetLayout(-1),
+ m_blockSignals(false),
+ m_realCustomPageSizeIndex(-1)
{
m_ui.setupUi(this);
+ if (!QMetaType::hasRegisteredComparators<QPageSize>())
+ QMetaType::registerEqualsComparator<QPageSize>();
+
QVBoxLayout *lay = new QVBoxLayout(m_ui.preview);
m_pagePreview = new QPagePreview(m_ui.preview);
m_pagePreview->setPagePreviewLayout(1, 1);
@@ -341,15 +351,18 @@ void QPageSetupWidget::initPageSizes()
m_ui.pageSizeCombo->clear();
+ m_realCustomPageSizeIndex = -1;
+
if (m_outputFormat == QPrinter::NativeFormat && !m_printerName.isEmpty()) {
QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
if (ps) {
QPrintDevice printDevice = ps->createPrintDevice(m_printerName);
const auto pageSizes = printDevice.supportedPageSizes();
for (const QPageSize &pageSize : pageSizes)
- m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize.id()));
+ m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize));
if (m_ui.pageSizeCombo->count() > 0 && printDevice.supportsCustomPageSizes()) {
- m_ui.pageSizeCombo->addItem(tr("Custom"), QVariant::fromValue(QPageSize::Custom));
+ m_ui.pageSizeCombo->addItem(tr("Custom"));
+ m_realCustomPageSizeIndex = m_ui.pageSizeCombo->count() - 1;
m_blockSignals = false;
return;
}
@@ -359,10 +372,11 @@ void QPageSetupWidget::initPageSizes()
// If PdfFormat or no available printer page sizes, populate with all page sizes
for (int id = 0; id < QPageSize::LastPageSize; ++id) {
if (QPageSize::PageSizeId(id) == QPageSize::Custom) {
- m_ui.pageSizeCombo->addItem(tr("Custom"), QVariant::fromValue(QPageSize::Custom));
+ m_ui.pageSizeCombo->addItem(tr("Custom"));
+ m_realCustomPageSizeIndex = m_ui.pageSizeCombo->count() - 1;
} else {
QPageSize pageSize = QPageSize(QPageSize::PageSizeId(id));
- m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize.id()));
+ m_ui.pageSizeCombo->addItem(pageSize.name(), QVariant::fromValue(pageSize));
}
}
@@ -371,12 +385,21 @@ void QPageSetupWidget::initPageSizes()
// Set the dialog to use the given QPrinter
// Usually only called on first creation
-void QPageSetupWidget::setPrinter(QPrinter *printer)
+void QPageSetupWidget::setPrinter(QPrinter *printer, QPrintDevice *printDevice,
+ QPrinter::OutputFormat outputFormat, const QString &printerName)
{
m_printer = printer;
+ m_printDevice = printDevice;
// Initialize the layout to the current QPrinter layout
m_pageLayout = m_printer->pageLayout();
+
+ if (printDevice) {
+ const QPageSize pageSize = printDevice->defaultPageSize();
+ const QMarginsF printable = printDevice->printableMargins(pageSize, m_pageLayout.orientation(), m_printer->resolution());
+ m_pageLayout.setPageSize(pageSize, qt_convertMargins(printable, QPageLayout::Point, m_pageLayout.units()));
+ }
+
// Assume if margins are Points then is by default, so set to locale default units
if (m_pageLayout.units() == QPageLayout::Point) {
if (QLocale().measurementSystem() == QLocale::MetricSystem)
@@ -387,18 +410,11 @@ void QPageSetupWidget::setPrinter(QPrinter *printer)
m_units = m_pageLayout.units();
m_pagePreview->setPageLayout(m_pageLayout);
- // Then update the widget with the current printer details
- selectPrinter(m_printer->outputFormat(), m_printer->printerName());
-}
-
-// The printer selected in the QPrintDialog has been changed, update the widget to reflect this
-// Note the QPrinter is not updated at this time in case the user presses the Cancel button in QPrintDialog
-void QPageSetupWidget::selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName)
-{
m_outputFormat = outputFormat;
m_printerName = printerName;
initPageSizes();
updateWidget();
+ updateSavedValues();
}
// Update the widget with the current settings
@@ -437,7 +453,9 @@ void QPageSetupWidget::updateWidget()
m_ui.unitCombo->setCurrentIndex(m_ui.unitCombo->findData(QVariant::fromValue(m_units)));
- m_ui.pageSizeCombo->setCurrentIndex(m_ui.pageSizeCombo->findData(QVariant::fromValue(m_pageLayout.pageSize().id())));
+ const bool isCustom = m_ui.pageSizeCombo->currentIndex() == m_realCustomPageSizeIndex && m_realCustomPageSizeIndex != -1;
+ if (!isCustom)
+ m_ui.pageSizeCombo->setCurrentIndex(m_ui.pageSizeCombo->findData(QVariant::fromValue(m_pageLayout.pageSize())));
QMarginsF min;
QMarginsF max;
@@ -470,8 +488,6 @@ void QPageSetupWidget::updateWidget()
m_ui.bottomMargin->setMaximum(max.bottom());
m_ui.bottomMargin->setValue(m_pageLayout.margins().bottom());
- bool isCustom = m_ui.pageSizeCombo->currentData().value<QPageSize::PageSizeId>() == QPageSize::Custom;
-
m_ui.pageWidth->setSuffix(suffix);
m_ui.pageWidth->setValue(m_pageLayout.fullRect(m_units).width());
m_ui.pageWidth->setEnabled(isCustom);
@@ -482,6 +498,7 @@ void QPageSetupWidget::updateWidget()
m_ui.pageHeight->setEnabled(isCustom);
m_ui.heightLabel->setEnabled(isCustom);
+ m_ui.portrait->setChecked(m_pageLayout.orientation() == QPageLayout::Portrait);
m_ui.landscape->setChecked(m_pageLayout.orientation() == QPageLayout::Landscape);
m_ui.pagesPerSheetButtonGroup->setEnabled(m_outputFormat == QPrinter::NativeFormat);
@@ -510,25 +527,46 @@ void QPageSetupWidget::setupPrinter() const
#endif
}
+void QPageSetupWidget::updateSavedValues()
+{
+ m_savedUnits = m_units;
+ m_savedPageLayout = m_pageLayout;
+ m_savedPagesPerSheet = m_ui.pagesPerSheetCombo->currentIndex();
+ m_savedPagesPerSheetLayout = m_ui.pagesPerSheetLayoutCombo->currentIndex();
+}
+
+void QPageSetupWidget::revertToSavedValues()
+{
+ m_units = m_savedUnits;
+ m_pageLayout = m_savedPageLayout;
+ m_pagePreview->setPageLayout(m_pageLayout);
+
+ updateWidget();
+
+ m_ui.pagesPerSheetCombo->setCurrentIndex(m_savedPagesPerSheet);
+ m_ui.pagesPerSheetLayoutCombo->setCurrentIndex(m_savedPagesPerSheetLayout);
+}
+
// Updates size/preview after the combobox has been changed.
void QPageSetupWidget::pageSizeChanged()
{
if (m_blockSignals)
return;
- QPageSize::PageSizeId id = m_ui.pageSizeCombo->currentData().value<QPageSize::PageSizeId>();
- if (id != QPageSize::Custom) {
- // TODO Set layout margin min/max to printer custom min/max
- m_pageLayout.setPageSize(QPageSize(id));
+ QPageSize pageSize;
+ if (m_ui.pageSizeCombo->currentIndex() != m_realCustomPageSizeIndex) {
+ pageSize = m_ui.pageSizeCombo->currentData().value<QPageSize>();
} else {
QSizeF customSize;
if (m_pageLayout.orientation() == QPageLayout::Landscape)
customSize = QSizeF(m_ui.pageHeight->value(), m_ui.pageWidth->value());
else
customSize = QSizeF(m_ui.pageWidth->value(), m_ui.pageHeight->value());
- // TODO Set layout margin min/max to printer min/max for page size
- m_pageLayout.setPageSize(QPageSize(customSize, QPageSize::Unit(m_units)));
+ pageSize = QPageSize(customSize, QPageSize::Unit(m_units));
}
+ const QMarginsF printable = m_printDevice ? m_printDevice->printableMargins(pageSize, m_pageLayout.orientation(), m_printer->resolution())
+ : QMarginsF();
+ m_pageLayout.setPageSize(pageSize, qt_convertMargins(printable, QPageLayout::Point, m_pageLayout.units()));
m_pagePreview->setPageLayout(m_pageLayout);
updateWidget();
diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
index 4322b34690..bb33a0f587 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
+++ b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
@@ -64,17 +64,19 @@ QT_REQUIRE_CONFIG(printdialog);
QT_BEGIN_NAMESPACE
class QPrinter;
+class QPrintDevice;
class QPagePreview;
class QPageSetupWidget : public QWidget {
Q_OBJECT
public:
explicit QPageSetupWidget(QWidget *parent = nullptr);
- explicit QPageSetupWidget(QPrinter *printer, QWidget *parent = nullptr);
- void setPrinter(QPrinter *printer);
- void selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName);
+ void setPrinter(QPrinter *printer, QPrintDevice *printDevice,
+ QPrinter::OutputFormat outputFormat, const QString &printerName);
void setupPrinter() const;
+ void updateSavedValues();
+ void revertToSavedValues();
private slots:
void pageSizeChanged();
@@ -97,11 +99,17 @@ private:
Ui::QPageSetupWidget m_ui;
QPagePreview *m_pagePreview;
QPrinter *m_printer;
+ QPrintDevice *m_printDevice;
QPrinter::OutputFormat m_outputFormat;
QString m_printerName;
QPageLayout m_pageLayout;
+ QPageLayout m_savedPageLayout;
QPageLayout::Unit m_units;
+ QPageLayout::Unit m_savedUnits;
+ int m_savedPagesPerSheet;
+ int m_savedPagesPerSheetLayout;
bool m_blockSignals;
+ int m_realCustomPageSizeIndex;
};
QT_END_NAMESPACE
diff --git a/src/printsupport/dialogs/qprintdialog.h b/src/printsupport/dialogs/qprintdialog.h
index bbddc296e9..bbb12202f0 100644
--- a/src/printsupport/dialogs/qprintdialog.h
+++ b/src/printsupport/dialogs/qprintdialog.h
@@ -63,11 +63,11 @@ public:
explicit QPrintDialog(QWidget *parent = nullptr);
~QPrintDialog();
- int exec() Q_DECL_OVERRIDE;
+ int exec() override;
#if defined (Q_OS_UNIX) && !defined(Q_OS_MAC)
- virtual void accept() Q_DECL_OVERRIDE;
+ virtual void accept() override;
#endif
- void done(int result) Q_DECL_OVERRIDE;
+ void done(int result) override;
void setOption(PrintDialogOption option, bool on = true);
bool testOption(PrintDialogOption option) const;
@@ -75,7 +75,7 @@ public:
PrintDialogOptions options() const;
#if defined(Q_OS_UNIX) || defined(Q_OS_WIN)
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
#endif
using QDialog::open;
diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp
index 0b36dec003..caab7867dc 100644
--- a/src/printsupport/dialogs/qprintdialog_unix.cpp
+++ b/src/printsupport/dialogs/qprintdialog_unix.cpp
@@ -48,7 +48,9 @@
#if QT_CONFIG(filedialog)
#include "qfiledialog.h"
#endif
+#include <QtCore/qdebug.h>
#include <QtCore/qdir.h>
+#include <QtCore/qtextcodec.h>
#include <QtGui/qevent.h>
#if QT_CONFIG(filesystemmodel)
#include <QtWidgets/qfilesystemmodel.h>
@@ -108,6 +110,11 @@ Print dialog class declarations
allow editing of Page and Advanced tabs.
Layout in qprintpropertieswidget.ui
+
+ QPPDOptionsModel: Holds the PPD Options for the printer.
+
+ QPPDOptionsEditor: Edits the PPD Options for the printer.
+
*/
static void initResources()
@@ -124,22 +131,33 @@ class QPrintPropertiesDialog : public QDialog
{
Q_OBJECT
public:
- QPrintPropertiesDialog(QAbstractPrintDialog *parent = nullptr);
+ QPrintPropertiesDialog(QPrinter *printer, QPrintDevice *currentPrintDevice,
+ QPrinter::OutputFormat outputFormat, const QString &printerName,
+ QAbstractPrintDialog *parent);
~QPrintPropertiesDialog();
- void selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName);
-
- /// copy printer properties to the widget
- void applyPrinterProperties(QPrinter *p);
void setupPrinter() const;
+ void showEvent(QShowEvent *event) override;
+
+private slots:
+ void reject() override;
+ void accept() override;
+
private:
friend class QUnixPrintWidgetPrivate;
+ QPrinter *m_printer;
Ui::QPrintPropertiesWidget widget;
QDialogButtonBox *m_buttons;
#if QT_CONFIG(cupsjobwidget)
QCupsJobWidget *m_jobOptions;
#endif
+
+#if QT_CONFIG(cups)
+ void setCupsOptionsFromItems(QOptionTreeItem *parent) const;
+
+ QPPDOptionsModel *m_cupsOptionsModel;
+#endif
};
class QUnixPrintWidgetPrivate;
@@ -168,8 +186,6 @@ public:
QUnixPrintWidgetPrivate(QUnixPrintWidget *q, QPrinter *prn);
~QUnixPrintWidgetPrivate();
- /// copy printer properties to the widget
- void applyPrinterProperties();
bool checkFields();
void setupPrinter();
void setOptionsPane(QPrintDialogPrivate *pane);
@@ -191,7 +207,6 @@ public:
private:
QPrintDialogPrivate *optionsPane;
bool filePrintersAdded;
- bool propertiesDialogShown;
};
class QPrintDialogPrivate : public QAbstractPrintDialogPrivate
@@ -203,8 +218,6 @@ public:
~QPrintDialogPrivate();
void init();
- /// copy printer properties to the widget
- void applyPrinterProperties();
void selectPrinter(const QPrinter::OutputFormat outputFormat);
@@ -217,7 +230,7 @@ public:
void setupPrinter();
void updateWidgets();
- virtual void setTabs(const QList<QWidget*> &tabs) Q_DECL_OVERRIDE;
+ virtual void setTabs(const QList<QWidget*> &tabs) override;
Ui::QPrintSettingsOutput options;
QUnixPrintWidget *top;
@@ -227,6 +240,100 @@ public:
QPrinter::OutputFormat printerOutputFormat;
};
+#if QT_CONFIG(cups)
+class QOptionTreeItem
+{
+public:
+ enum ItemType { Root, Group, Option, Choice };
+
+ QOptionTreeItem(ItemType t, int i, const void *p, QOptionTreeItem *pi)
+ : type(t),
+ index(i),
+ ptr(p),
+ parentItem(pi) {}
+
+ ~QOptionTreeItem() {
+ qDeleteAll(childItems);
+ }
+
+ ItemType type;
+ int index;
+ const void *ptr;
+ QOptionTreeItem *parentItem;
+ QList<QOptionTreeItem*> childItems;
+};
+
+class QOptionTreeItemOption : public QOptionTreeItem
+{
+public:
+ QOptionTreeItemOption (int i, const void *p, QOptionTreeItem *pi)
+ : QOptionTreeItem(Option, i, p, pi)
+ {
+ }
+
+ // These indices are related to ppd_option_t::choices not to childItems
+ int selected;
+ int originallySelected;
+};
+
+class QPPDOptionsModel : public QAbstractItemModel
+{
+ Q_OBJECT
+
+public:
+ explicit QPPDOptionsModel(QPrintDevice *currentPrintDevice, QObject *parent);
+
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex &index) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
+
+ void setCupsOptionsFromItems(QPrinter *printer) const;
+ void reject();
+ void updateSavedValues();
+ void revertToSavedValues();
+
+ QPrintDevice *currentPrintDevice() const;
+ QTextCodec *cupsCodec() const;
+
+ void emitConflictsChanged();
+ bool hasConflicts() const;
+
+signals:
+ void hasConflictsChanged(bool conflicts);
+
+private:
+ void parseGroups(QOptionTreeItem *parent);
+ void parseOptions(QOptionTreeItem *parent);
+ void parseChoices(QOptionTreeItemOption *parent);
+
+ void setCupsOptionsFromItems(QPrinter *printer, QOptionTreeItem *parent) const;
+ void reject(QOptionTreeItem *item);
+ void updateSavedValues(QOptionTreeItem *item);
+ void revertToSavedValues(QOptionTreeItem *item);
+ void emitDataChanged(QOptionTreeItem *item, const QModelIndex &itemIndex, bool *conflictsFound);
+ bool hasConflicts(QOptionTreeItem *item) const;
+
+ QPrintDevice *m_currentPrintDevice;
+ QTextCodec *m_cupsCodec;
+ QOptionTreeItem *m_rootItem;
+};
+
+class QPPDOptionsEditor : public QStyledItemDelegate
+{
+ Q_OBJECT
+public:
+ explicit QPPDOptionsEditor(QObject *parent) : QStyledItemDelegate(parent) {}
+
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
+ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
+};
+
+#endif
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -240,8 +347,11 @@ public:
*/
-QPrintPropertiesDialog::QPrintPropertiesDialog(QAbstractPrintDialog *parent)
+QPrintPropertiesDialog::QPrintPropertiesDialog(QPrinter *printer, QPrintDevice *currentPrintDevice,
+ QPrinter::OutputFormat outputFormat, const QString &printerName,
+ QAbstractPrintDialog *parent)
: QDialog(parent)
+ , m_printer(printer)
{
setWindowTitle(tr("Printer Properties"));
QVBoxLayout *lay = new QVBoxLayout(this);
@@ -254,9 +364,36 @@ QPrintPropertiesDialog::QPrintPropertiesDialog(QAbstractPrintDialog *parent)
connect(m_buttons->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &QPrintPropertiesDialog::accept);
connect(m_buttons->button(QDialogButtonBox::Cancel), &QPushButton::clicked, this, &QPrintPropertiesDialog::reject);
+ widget.pageSetup->setPrinter(printer, currentPrintDevice, outputFormat, printerName);
+
#if QT_CONFIG(cupsjobwidget)
- m_jobOptions = new QCupsJobWidget();
- widget.tabs->addTab(m_jobOptions, tr("Job Options"));
+ m_jobOptions = new QCupsJobWidget(printer, currentPrintDevice);
+ widget.tabs->insertTab(1, m_jobOptions, tr("Job Options"));
+#endif
+
+ const int advancedTabIndex = widget.tabs->indexOf(widget.cupsPropertiesPage);
+#if QT_CONFIG(cups)
+ m_cupsOptionsModel = new QPPDOptionsModel(currentPrintDevice, this);
+
+ widget.treeView->setItemDelegate(new QPPDOptionsEditor(this));
+
+ if (m_cupsOptionsModel->rowCount() > 0) {
+ widget.treeView->setModel(m_cupsOptionsModel);
+
+ for (int i = 0; i < m_cupsOptionsModel->rowCount(); ++i)
+ widget.treeView->expand(m_cupsOptionsModel->index(i, 0));
+
+ widget.tabs->setTabEnabled(advancedTabIndex, true);
+ } else {
+ widget.treeView->setModel(nullptr);
+ widget.tabs->setTabEnabled(advancedTabIndex, false);
+ }
+
+ widget.conflictsLabel->setVisible(m_cupsOptionsModel->hasConflicts());
+ connect(m_cupsOptionsModel, &QPPDOptionsModel::hasConflictsChanged, widget.conflictsLabel, &QLabel::setVisible);
+#else
+ Q_UNUSED(currentPrintDevice)
+ widget.tabs->setTabEnabled(advancedTabIndex, false);
#endif
}
@@ -264,25 +401,66 @@ QPrintPropertiesDialog::~QPrintPropertiesDialog()
{
}
-void QPrintPropertiesDialog::applyPrinterProperties(QPrinter *p)
+void QPrintPropertiesDialog::setupPrinter() const
{
- widget.pageSetup->setPrinter(p);
+#if QT_CONFIG(cups)
+ QCUPSSupport::clearCupsOptions(m_printer);
+#endif
+
+ widget.pageSetup->setupPrinter();
#if QT_CONFIG(cupsjobwidget)
- m_jobOptions->setPrinter(p);
+ m_jobOptions->setupPrinter();
+#endif
+
+#if QT_CONFIG(cups)
+ // Set Color by default, that will change if the "ColorModel" property is available
+ m_printer->setColorMode(QPrinter::Color);
+
+ m_cupsOptionsModel->setCupsOptionsFromItems(m_printer);
#endif
}
-void QPrintPropertiesDialog::setupPrinter() const
+void QPrintPropertiesDialog::showEvent(QShowEvent *event)
{
- widget.pageSetup->setupPrinter();
+ widget.treeView->resizeColumnToContents(0);
+ QDialog::showEvent(event);
+}
+
+void QPrintPropertiesDialog::reject()
+{
+ widget.pageSetup->revertToSavedValues();
+
#if QT_CONFIG(cupsjobwidget)
- m_jobOptions->setupPrinter();
+ m_jobOptions->revertToSavedValues();
+#endif
+
+#if QT_CONFIG(cups)
+ m_cupsOptionsModel->revertToSavedValues();
#endif
+ QDialog::reject();
}
-void QPrintPropertiesDialog::selectPrinter(QPrinter::OutputFormat outputFormat, const QString &printerName)
+void QPrintPropertiesDialog::accept()
{
- widget.pageSetup->selectPrinter(outputFormat, printerName);
+#if QT_CONFIG(cups)
+ if (m_cupsOptionsModel->hasConflicts()) {
+ widget.tabs->setCurrentWidget(widget.cupsPropertiesPage);
+ const QMessageBox::StandardButton answer = QMessageBox::warning(this, tr("Advanced Option Conflicts"),
+ tr("There are conflicts in some advanced options. Do you want to fix them?"),
+ QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
+ if (answer != QMessageBox::No)
+ return;
+ }
+ m_cupsOptionsModel->updateSavedValues();
+#endif
+
+#if QT_CONFIG(cupsjobwidget)
+ m_jobOptions->updateSavedValues();
+#endif
+
+ widget.pageSetup->updateSavedValues();
+
+ QDialog::accept();
}
////////////////////////////////////////////////////////////////////////////////
@@ -323,6 +501,9 @@ void QPrintDialogPrivate::init()
options.pageSetCombo->addItem(tr("All Pages"), QVariant::fromValue(QCUPSSupport::AllPages));
options.pageSetCombo->addItem(tr("Odd Pages"), QVariant::fromValue(QCUPSSupport::OddPages));
options.pageSetCombo->addItem(tr("Even Pages"), QVariant::fromValue(QCUPSSupport::EvenPages));
+#else
+ for (int i = options.pagesLayout->count() - 1; i >= 0; --i)
+ delete options.pagesLayout->itemAt(i)->widget();
#endif
top->d->setOptionsPane(this);
@@ -364,6 +545,11 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma
QPrinter *p = q->printer();
printerOutputFormat = outputFormat;
+ // printer supports duplex mode?
+ const auto supportedDuplexMode = top->d->m_currentPrintDevice.supportedDuplexModes();
+ options.duplexLong->setEnabled(supportedDuplexMode.contains(QPrint::DuplexLongSide));
+ options.duplexShort->setEnabled(supportedDuplexMode.contains(QPrint::DuplexShortSide));
+
if (p->colorMode() == QPrinter::Color)
options.color->setChecked(true);
else
@@ -388,13 +574,94 @@ void QPrintDialogPrivate::selectPrinter(const QPrinter::OutputFormat outputForma
options.pageSetCombo->setEnabled(false);
else
options.pageSetCombo->setEnabled(true);
+
+#if QT_CONFIG(cups)
+ // Disable color options on main dialog if not printing to file, it will be handled by CUPS advanced dialog
+ options.colorMode->setVisible(outputFormat == QPrinter::PdfFormat);
+#endif
}
-void QPrintDialogPrivate::applyPrinterProperties()
+#if QT_CONFIG(cups)
+static std::vector<std::pair<int, int>> pageRangesFromString(const QString &pagesString) Q_DECL_NOTHROW
+{
+ std::vector<std::pair<int, int>> result;
+ const QStringList items = pagesString.split(',');
+ for (const QString item : items) {
+ if (item.isEmpty())
+ return {};
+
+ if (item.contains(QLatin1Char('-'))) {
+ const QStringList rangeItems = item.split('-');
+ if (rangeItems.count() != 2)
+ return {};
+
+ bool ok;
+ const int number1 = rangeItems[0].toInt(&ok);
+ if (!ok)
+ return {};
+
+ const int number2 = rangeItems[1].toInt(&ok);
+ if (!ok)
+ return {};
+
+ if (number1 < 1 || number2 < 1 || number2 < number1)
+ return {};
+
+ result.push_back(std::make_pair(number1, number2));
+
+ } else {
+ bool ok;
+ const int number = item.toInt(&ok);
+ if (!ok)
+ return {};
+
+ if (number < 1)
+ return {};
+
+ result.push_back(std::make_pair(number, number));
+ }
+ }
+
+ // check no range intersects with the next
+ std::sort(result.begin(), result.end(),
+ [](const std::pair<int, int> &it1, const std::pair<int, int> &it2) { return it1.first < it2.first; });
+ int previousSecond = -1;
+ for (auto pair : result) {
+ if (pair.first <= previousSecond)
+ return {};
+
+ previousSecond = pair.second;
+ }
+
+ return result;
+}
+
+static QString stringFromPageRanges(const std::vector<std::pair<int, int>> &pageRanges) Q_DECL_NOTHROW
+{
+ QString result;
+
+ for (auto pair : pageRanges) {
+ if (!result.isEmpty())
+ result += QLatin1Char(',');
+
+ if (pair.first == pair.second)
+ result += QString::number(pair.first);
+ else
+ result += QStringLiteral("%1-%2").arg(pair.first).arg(pair.second);
+ }
+
+ return result;
+}
+
+static bool isValidPagesString(const QString &pagesString) Q_DECL_NOTHROW
{
- // apply printer options to property dialog
- top->d->applyPrinterProperties();
+ if (pagesString.isEmpty())
+ return false;
+
+ auto pagesRanges = pageRangesFromString(pagesString);
+ return !pagesRanges.empty();
}
+#endif
void QPrintDialogPrivate::setupPrinter()
{
@@ -414,7 +681,12 @@ void QPrintDialogPrivate::setupPrinter()
p->setDuplex(QPrinter::DuplexShortSide);
}
- p->setColorMode(options.color->isChecked() ? QPrinter::Color : QPrinter::GrayScale);
+#if QT_CONFIG(cups)
+ // When printing to a device the colorMode will be set by the advanced panel
+ if (p->outputFormat() == QPrinter::PdfFormat)
+#endif
+ p->setColorMode(options.color->isChecked() ? QPrinter::Color : QPrinter::GrayScale);
+
p->setPageOrder(options.reverse->isChecked() ? QPrinter::LastPageFirst : QPrinter::FirstPageFirst);
// print range
@@ -440,6 +712,16 @@ void QPrintDialogPrivate::setupPrinter()
}
#if QT_CONFIG(cups)
+ if (options.pagesRadioButton->isChecked()) {
+ auto pageRanges = pageRangesFromString(options.pagesLineEdit->text());
+
+ p->setPrintRange(QPrinter::AllPages);
+ p->setFromTo(0, 0);
+
+ // server-side page filtering
+ QCUPSSupport::setPageRange(p, stringFromPageRanges(pageRanges));
+ }
+
// page set
if (p->printRange() == QPrinter::AllPages || p->printRange() == QPrinter::PageRange) {
//If the application is selecting pages and the first page number is even then need to adjust the odd-even accordingly
@@ -636,6 +918,16 @@ int QPrintDialog::exec()
void QPrintDialog::accept()
{
Q_D(QPrintDialog);
+#if QT_CONFIG(cups)
+ if (d->options.pagesRadioButton->isChecked() && !isValidPagesString(d->options.pagesLineEdit->text())) {
+ QMessageBox::critical(this, tr("Invalid Pages Definition"),
+ tr("%1 does not follow the correct syntax. Please use ',' to separate "
+ "ranges and pages, '-' to define ranges and make sure ranges do "
+ "not intersect with each other.").arg(d->options.pagesLineEdit->text()),
+ QMessageBox::Ok, QMessageBox::Ok);
+ return;
+ }
+#endif
d->setupPrinter();
QDialog::accept();
}
@@ -657,9 +949,9 @@ void QPrintDialog::accept()
*/
QUnixPrintWidgetPrivate::QUnixPrintWidgetPrivate(QUnixPrintWidget *p, QPrinter *prn)
: parent(p), propertiesDialog(nullptr), printer(prn), optionsPane(0),
- filePrintersAdded(false), propertiesDialogShown(false)
+ filePrintersAdded(false)
{
- q = 0;
+ q = nullptr;
if (parent)
q = qobject_cast<QAbstractPrintDialog*> (parent->parent());
@@ -745,7 +1037,6 @@ void QUnixPrintWidgetPrivate::_q_printerChanged(int index)
if (propertiesDialog){
delete propertiesDialog;
propertiesDialog = nullptr;
- propertiesDialogShown = false;
}
if (filePrintersAdded) {
@@ -760,14 +1051,20 @@ void QUnixPrintWidgetPrivate::_q_printerChanged(int index)
widget.lOutput->setEnabled(true);
if (optionsPane)
optionsPane->selectPrinter(QPrinter::PdfFormat);
+ printer->setOutputFormat(QPrinter::PdfFormat);
+ m_currentPrintDevice = QPrintDevice();
return;
}
}
if (printer) {
+ printer->setOutputFormat(QPrinter::NativeFormat);
+
QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
if (ps)
m_currentPrintDevice = ps->createPrintDevice(widget.printers->itemText(index));
+ else
+ m_currentPrintDevice = QPrintDevice();
printer->setPrinterName(m_currentPrintDevice.id());
@@ -800,48 +1097,6 @@ void QUnixPrintWidgetPrivate::_q_btnBrowseClicked()
}
}
-void QUnixPrintWidgetPrivate::applyPrinterProperties()
-{
- if (printer == nullptr)
- return;
- if (printer->outputFileName().isEmpty()) {
- QString home = QDir::homePath();
- QString cur = QDir::currentPath();
- if (home.at(home.length()-1) != QLatin1Char('/'))
- home += QLatin1Char('/');
- if (!cur.isEmpty() && cur.at(cur.length()-1) != QLatin1Char('/'))
- cur += QLatin1Char('/');
- if (!cur.startsWith(home))
- cur = home;
- if (QGuiApplication::platformName() == QLatin1String("xcb")) {
- if (printer->docName().isEmpty()) {
- cur += QLatin1String("print.pdf");
- } else {
- QRegExp re(QString::fromLatin1("(.*)\\.\\S+"));
- if (re.exactMatch(printer->docName()))
- cur += re.cap(1);
- else
- cur += printer->docName();
- cur += QLatin1String(".pdf");
- }
- } // xcb
-
- widget.filename->setText(cur);
- }
- else
- widget.filename->setText( printer->outputFileName() );
- QString printerName = printer->printerName();
- if (!printerName.isEmpty()) {
- const int i = widget.printers->findText(printerName);
- if (i >= 0)
- widget.printers->setCurrentIndex(i);
- }
- // PDF printer not added to the dialog yet, we'll handle those cases in QUnixPrintWidgetPrivate::updateWidget
-
- if (propertiesDialog)
- propertiesDialog->applyPrinterProperties(printer);
-}
-
#if QT_CONFIG(messagebox)
bool QUnixPrintWidgetPrivate::checkFields()
{
@@ -874,7 +1129,7 @@ bool QUnixPrintWidgetPrivate::checkFields()
}
#if QT_CONFIG(cups)
- if (propertiesDialogShown) {
+ if (propertiesDialog) {
QCUPSSupport::PagesPerSheet pagesPerSheet = propertiesDialog->widget.pageSetup->m_ui.pagesPerSheetCombo
->currentData().value<QCUPSSupport::PagesPerSheet>();
@@ -899,18 +1154,18 @@ void QUnixPrintWidgetPrivate::setupPrinterProperties()
{
delete propertiesDialog;
- propertiesDialog = new QPrintPropertiesDialog(q);
- propertiesDialog->setResult(QDialog::Rejected);
- propertiesDialogShown = false;
-
- propertiesDialog->applyPrinterProperties(q->printer());
+ QPrinter::OutputFormat outputFormat;
+ QString printerName;
if (q->isOptionEnabled(QPrintDialog::PrintToFile)
&& (widget.printers->currentIndex() == widget.printers->count() - 1)) {// PDF
- propertiesDialog->selectPrinter(QPrinter::PdfFormat, QString());
+ outputFormat = QPrinter::PdfFormat;
+ } else {
+ outputFormat = QPrinter::NativeFormat;
+ printerName = widget.printers->currentText();
}
- else
- propertiesDialog->selectPrinter(QPrinter::NativeFormat, widget.printers->currentText());
+
+ propertiesDialog = new QPrintPropertiesDialog(q->printer(), &m_currentPrintDevice, outputFormat, printerName, q);
}
void QUnixPrintWidgetPrivate::_q_btnPropertiesClicked()
@@ -918,15 +1173,6 @@ void QUnixPrintWidgetPrivate::_q_btnPropertiesClicked()
if (!propertiesDialog)
setupPrinterProperties();
propertiesDialog->exec();
- if (!propertiesDialogShown && propertiesDialog->result() == QDialog::Rejected) {
- // If properties dialog was rejected the dialog is deleted and
- // the properties are set to defaults when printer is setup
- delete propertiesDialog;
- propertiesDialog = nullptr;
- propertiesDialogShown = false;
- } else
- // properties dialog was shown and accepted
- propertiesDialogShown = true;
}
void QUnixPrintWidgetPrivate::setupPrinter()
@@ -951,8 +1197,7 @@ void QUnixPrintWidgetPrivate::setupPrinter()
if (!propertiesDialog)
setupPrinterProperties();
- if (propertiesDialog->result() == QDialog::Accepted || !propertiesDialogShown)
- propertiesDialog->setupPrinter();
+ propertiesDialog->setupPrinter();
}
/*! \internal
@@ -960,7 +1205,41 @@ void QUnixPrintWidgetPrivate::setupPrinter()
QUnixPrintWidget::QUnixPrintWidget(QPrinter *printer, QWidget *parent)
: QWidget(parent), d(new QUnixPrintWidgetPrivate(this, printer))
{
- d->applyPrinterProperties();
+ if (printer == nullptr)
+ return;
+ if (printer->outputFileName().isEmpty()) {
+ QString home = QDir::homePath();
+ QString cur = QDir::currentPath();
+ if (!home.endsWith(QLatin1Char('/')))
+ home += QLatin1Char('/');
+ if (!cur.startsWith(home))
+ cur = home;
+ else if (!cur.endsWith(QLatin1Char('/')))
+ cur += QLatin1Char('/');
+ if (QGuiApplication::platformName() == QStringLiteral("xcb")) {
+ if (printer->docName().isEmpty()) {
+ cur += QStringLiteral("print.pdf");
+ } else {
+ const QRegExp re(QStringLiteral("(.*)\\.\\S+"));
+ if (re.exactMatch(printer->docName()))
+ cur += re.cap(1);
+ else
+ cur += printer->docName();
+ cur += QStringLiteral(".pdf");
+ }
+ } // xcb
+
+ d->widget.filename->setText(cur);
+ }
+ else
+ d->widget.filename->setText(printer->outputFileName());
+ const QString printerName = printer->printerName();
+ if (!printerName.isEmpty()) {
+ const int i = d->widget.printers->findText(printerName);
+ if (i >= 0)
+ d->widget.printers->setCurrentIndex(i);
+ }
+ // PDF printer not added to the dialog yet, we'll handle those cases in QUnixPrintWidgetPrivate::updateWidget
}
/*! \internal
@@ -982,6 +1261,437 @@ void QUnixPrintWidget::updatePrinter()
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
+/*
+
+ QPPDOptionsModel
+
+ Holds the PPD Options for the printer.
+
+*/
+
+#if QT_CONFIG(cups)
+
+static bool isBlacklistedGroup(ppd_group_t *group) Q_DECL_NOTHROW
+{
+ return qstrcmp(group->name, "InstallableOptions") == 0;
+};
+
+QPPDOptionsModel::QPPDOptionsModel(QPrintDevice *currentPrintDevice, QObject *parent)
+ : QAbstractItemModel(parent)
+ , m_currentPrintDevice(currentPrintDevice)
+ , m_cupsCodec(nullptr)
+{
+ ppd_file_t *ppd = m_currentPrintDevice->property(PDPK_PpdFile).value<ppd_file_t*>();
+ m_rootItem = new QOptionTreeItem(QOptionTreeItem::Root, 0, ppd, nullptr);
+
+ if (ppd) {
+ m_cupsCodec = QTextCodec::codecForName(ppd->lang_encoding);
+ for (int i = 0; i < ppd->num_groups; ++i) {
+ if (!isBlacklistedGroup(&ppd->groups[i])) {
+ QOptionTreeItem *group = new QOptionTreeItem(QOptionTreeItem::Group, i, &ppd->groups[i], m_rootItem);
+ m_rootItem->childItems.append(group);
+ parseGroups(group); // parse possible subgroups
+ parseOptions(group); // parse options
+ }
+ }
+ }
+
+ if (!m_cupsCodec)
+ m_cupsCodec = QTextCodec::codecForLocale();
+}
+
+int QPPDOptionsModel::columnCount(const QModelIndex &) const
+{
+ return 2;
+}
+
+int QPPDOptionsModel::rowCount(const QModelIndex &parent) const
+{
+ QOptionTreeItem *itm;
+ if (!parent.isValid())
+ itm = m_rootItem;
+ else
+ itm = static_cast<QOptionTreeItem*>(parent.internalPointer());
+
+ if (itm->type == QOptionTreeItem::Option)
+ return 0;
+
+ return itm->childItems.count();
+}
+
+QVariant QPPDOptionsModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ QOptionTreeItem *itm = static_cast<QOptionTreeItem*>(index.internalPointer());
+
+ switch (role) {
+ case Qt::FontRole: {
+ if (itm->type == QOptionTreeItem::Group){
+ QFont font;
+ font.setBold(true);
+ return QVariant(font);
+ }
+ return QVariant();
+ }
+ break;
+
+ case Qt::DisplayRole: {
+ if (index.column() == 0) {
+ if (itm->type == QOptionTreeItem::Option) {
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(itm->ptr);
+ return m_cupsCodec->toUnicode(option->text);
+ } else if (itm->type == QOptionTreeItem::Group) {
+ const ppd_group_t *group = static_cast<const ppd_group_t*>(itm->ptr);
+ return m_cupsCodec->toUnicode(group->text);
+ }
+ } else if (itm->type == QOptionTreeItem::Option) {
+ QOptionTreeItemOption *itmOption = static_cast<QOptionTreeItemOption *>(itm);
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(itm->ptr);
+ if (itmOption->selected > -1)
+ return m_cupsCodec->toUnicode(option->choices[itmOption->selected].text);
+ }
+
+ return QVariant();
+ }
+ break;
+
+ case Qt::DecorationRole: {
+ if (itm->type == QOptionTreeItem::Option && index.column() == 1) {
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(itm->ptr);
+ if (option->conflicted) {
+ const QIcon warning = QApplication::style()->standardIcon(QStyle::SP_MessageBoxWarning, nullptr, nullptr);
+ if (!warning.isNull())
+ return warning;
+
+ qWarning() << "Current application style returned a null icon for SP_MessageBoxWarning.";
+ return QColor(Qt::red);
+ }
+ }
+ return QVariant();
+ }
+ break;
+
+ }
+
+ return QVariant();
+}
+
+QModelIndex QPPDOptionsModel::index(int row, int column, const QModelIndex &parent) const
+{
+ QOptionTreeItem *itm;
+ if (!parent.isValid())
+ itm = m_rootItem;
+ else
+ itm = static_cast<QOptionTreeItem*>(parent.internalPointer());
+
+ return createIndex(row, column, itm->childItems.at(row));
+}
+
+
+QModelIndex QPPDOptionsModel::parent(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return QModelIndex();
+
+ QOptionTreeItem *itm = static_cast<QOptionTreeItem*>(index.internalPointer());
+
+ if (itm->parentItem && itm->parentItem != m_rootItem)
+ return createIndex(itm->parentItem->index, 0, itm->parentItem);
+
+ return QModelIndex();
+}
+
+Qt::ItemFlags QPPDOptionsModel::flags(const QModelIndex &index) const
+{
+ if (!index.isValid() || static_cast<QOptionTreeItem*>(index.internalPointer())->type == QOptionTreeItem::Group)
+ return Qt::ItemIsEnabled;
+
+ if (index.column() == 1)
+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
+
+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
+}
+
+QPrintDevice *QPPDOptionsModel::currentPrintDevice() const
+{
+ return m_currentPrintDevice;
+}
+
+QTextCodec *QPPDOptionsModel::cupsCodec() const
+{
+ return m_cupsCodec;
+}
+
+void QPPDOptionsModel::setCupsOptionsFromItems(QPrinter *printer) const
+{
+ setCupsOptionsFromItems(printer, m_rootItem);
+}
+
+void QPPDOptionsModel::setCupsOptionsFromItems(QPrinter *printer, QOptionTreeItem *parent) const
+{
+ for (QOptionTreeItem *itm : qAsConst(parent->childItems)) {
+ if (itm->type == QOptionTreeItem::Option) {
+ QOptionTreeItemOption *itmOption = static_cast<QOptionTreeItemOption *>(itm);
+ const ppd_option_t *opt = static_cast<const ppd_option_t*>(itm->ptr);
+
+ if (qstrcmp(opt->keyword, "ColorModel") == 0)
+ printer->setColorMode(qstrcmp(opt->choices[itmOption->selected].choice, "Gray") == 0 ? QPrinter::GrayScale : QPrinter::Color);
+
+ if (qstrcmp(opt->defchoice, opt->choices[itmOption->selected].choice) != 0) {
+ QCUPSSupport::setCupsOption(printer, QString::fromLatin1(opt->keyword), QString::fromLatin1(opt->choices[itmOption->selected].choice));
+ }
+ } else {
+ setCupsOptionsFromItems(printer, itm);
+ }
+ }
+}
+
+void QPPDOptionsModel::parseGroups(QOptionTreeItem *parent)
+{
+ const ppd_group_t *group = static_cast<const ppd_group_t*>(parent->ptr);
+
+ if (group) {
+ for (int i = 0; i < group->num_subgroups; ++i) {
+ if (!isBlacklistedGroup(&group->subgroups[i])) {
+ QOptionTreeItem *subgroup = new QOptionTreeItem(QOptionTreeItem::Group, i, &group->subgroups[i], parent);
+ parent->childItems.append(subgroup);
+ parseGroups(subgroup); // parse possible subgroups
+ parseOptions(subgroup); // parse options
+ }
+ }
+ }
+}
+
+static bool isBlacklistedOption(const char *keyword) Q_DECL_NOTHROW
+{
+ // We already let the user set these options elsewhere
+ const char *cupsOptionBlacklist[] = {
+ "Collate",
+ "Copies",
+ "OutputOrder",
+ "PageRegion",
+ "PageSize",
+ "Duplex" // handled by the main dialog
+ };
+ auto equals = [](const char *keyword) {
+ return [keyword](const char *candidate) {
+ return qstrcmp(keyword, candidate) == 0;
+ };
+ };
+ return std::any_of(std::begin(cupsOptionBlacklist), std::end(cupsOptionBlacklist), equals(keyword));
+};
+
+void QPPDOptionsModel::parseOptions(QOptionTreeItem *parent)
+{
+ const ppd_group_t *group = static_cast<const ppd_group_t*>(parent->ptr);
+ for (int i = 0; i < group->num_options; ++i) {
+ if (!isBlacklistedOption(group->options[i].keyword)) {
+ QOptionTreeItemOption *opt = new QOptionTreeItemOption(i, &group->options[i], parent);
+ parseChoices(opt);
+
+ // Don't show options that are actually not options at all
+ // because they don't give the user any choice
+ if (opt->childItems.count() > 1)
+ parent->childItems.append(opt);
+ else
+ delete opt;
+ }
+ }
+}
+
+void QPPDOptionsModel::parseChoices(QOptionTreeItemOption *parent)
+{
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(parent->ptr);
+ bool marked = false;
+ for (int i = 0; i < option->num_choices; ++i) {
+ const auto values = QStringList{} << QString::fromLatin1(option->keyword) << QString::fromLatin1(option->choices[i].choice);
+ if (!m_currentPrintDevice->isFeatureAvailable(PDPK_PpdChoiceIsInstallableConflict, values)) {
+ QOptionTreeItem *choice = new QOptionTreeItem(QOptionTreeItem::Choice, i, &option->choices[i], parent);
+ if (static_cast<int>(option->choices[i].marked) == 1) {
+ parent->selected = i;
+ marked = true;
+ } else if (!marked && qstrcmp(option->choices[i].choice, option->defchoice) == 0) {
+ parent->selected = i;
+ }
+ parent->originallySelected = parent->selected;
+ parent->childItems.append(choice);
+ }
+ }
+}
+
+bool QPPDOptionsModel::hasConflicts() const
+{
+ return hasConflicts(m_rootItem);
+}
+
+bool QPPDOptionsModel::hasConflicts(QOptionTreeItem *item) const
+{
+ if (item->type == QOptionTreeItem::Option) {
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(item->ptr);
+ return option->conflicted;
+ }
+
+ for (QOptionTreeItem *child : qAsConst(item->childItems)) {
+ if (hasConflicts(child))
+ return true;
+ }
+
+ return false;
+}
+
+void QPPDOptionsModel::emitConflictsChanged()
+{
+ bool conflictsFound = false;
+ emitDataChanged(m_rootItem, QModelIndex(), &conflictsFound);
+
+ emit hasConflictsChanged(conflictsFound);
+}
+
+void QPPDOptionsModel::emitDataChanged(QOptionTreeItem *item, const QModelIndex &itemIndex, bool *conflictsFound)
+{
+ if (item->type == QOptionTreeItem::Option) {
+ // We just emit DecorationRole dataChanged for all the leaves
+ // and let the view requery the value
+ const QModelIndex secondColItem = index(itemIndex.row(), 1, itemIndex.parent());
+ emit dataChanged(secondColItem, secondColItem, QVector<int>() << Qt::DecorationRole);
+
+ if (conflictsFound && *conflictsFound == false) {
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(item->ptr);
+ if (option->conflicted && conflictsFound)
+ *conflictsFound = true;
+ }
+ }
+
+ for (int i = 0; i < item->childItems.count(); ++i) {
+ QOptionTreeItem *child = item->childItems.at(i);
+ emitDataChanged(child, index(i, 0, itemIndex), conflictsFound);
+ }
+}
+
+QVariant QPPDOptionsModel::headerData(int section, Qt::Orientation, int role) const
+{
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ switch (section) {
+ case 0:
+ return QVariant(tr("Name"));
+ case 1:
+ return QVariant(tr("Value"));
+ }
+
+ return QVariant();
+}
+
+void QPPDOptionsModel::revertToSavedValues()
+{
+ revertToSavedValues(m_rootItem);
+ emitConflictsChanged();
+}
+
+void QPPDOptionsModel::revertToSavedValues(QOptionTreeItem *item)
+{
+ if (item->type == QOptionTreeItem::Option) {
+ QOptionTreeItemOption *itemOption = static_cast<QOptionTreeItemOption *>(item);
+
+ const ppd_option_t *option = static_cast<const ppd_option_t*>(item->ptr);
+ const char *choice = itemOption->originallySelected != -1 ? option->choices[itemOption->originallySelected].choice
+ : option->defchoice;
+ const auto values = QStringList{} << QString::fromLatin1(option->keyword) << QString::fromLatin1(choice);
+ m_currentPrintDevice->setProperty(PDPK_PpdOption, values);
+ itemOption->selected = itemOption->originallySelected;
+ }
+
+ for (QOptionTreeItem *child : qAsConst(item->childItems))
+ revertToSavedValues(child);
+}
+
+void QPPDOptionsModel::updateSavedValues()
+{
+ updateSavedValues(m_rootItem);
+}
+
+void QPPDOptionsModel::updateSavedValues(QOptionTreeItem *item)
+{
+ if (item->type == QOptionTreeItem::Option) {
+ QOptionTreeItemOption *itemOption = static_cast<QOptionTreeItemOption *>(item);
+ itemOption->originallySelected = itemOption->selected;
+ }
+
+ for (QOptionTreeItem *child : qAsConst(item->childItems))
+ updateSavedValues(child);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+/*
+
+ QPPDOptionsEditor
+
+ Edits the PPD Options for the printer.
+
+*/
+
+QWidget *QPPDOptionsEditor::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ Q_UNUSED(option)
+
+ if (index.column() == 1 && static_cast<QOptionTreeItem*>(index.internalPointer())->type == QOptionTreeItem::Option)
+ return new QComboBox(parent);
+
+ return nullptr;
+}
+
+void QPPDOptionsEditor::setEditorData(QWidget *editor, const QModelIndex &index) const
+{
+ if (index.column() != 1)
+ return;
+
+ QComboBox *cb = static_cast<QComboBox*>(editor);
+ QOptionTreeItemOption *itm = static_cast<QOptionTreeItemOption*>(index.internalPointer());
+
+ if (itm->selected == -1)
+ cb->addItem(QString());
+
+ const QPPDOptionsModel *m = static_cast<const QPPDOptionsModel*>(index.model());
+ for (auto *childItem : qAsConst(itm->childItems)) {
+ const ppd_choice_t *choice = static_cast<const ppd_choice_t*>(childItem->ptr);
+ cb->addItem(m->cupsCodec()->toUnicode(choice->text), childItem->index);
+ if (childItem->index == itm->selected)
+ cb->setCurrentIndex(cb->count() - 1);
+ }
+}
+
+void QPPDOptionsEditor::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+{
+ QComboBox *cb = static_cast<QComboBox*>(editor);
+ QOptionTreeItemOption *itm = static_cast<QOptionTreeItemOption*>(index.internalPointer());
+
+ // We can't use cb->currentIndex() to know the index of the option in the choices[] array
+ // because some of them may not be present in the list because they conflict with the
+ // installable options so use the index passed on addItem
+ const int selectedChoiceIndex = cb->currentData().toInt();
+
+ if (itm->selected == selectedChoiceIndex || selectedChoiceIndex < 0)
+ return;
+
+ const ppd_option_t *opt = static_cast<const ppd_option_t*>(itm->ptr);
+ QPPDOptionsModel *m = static_cast<QPPDOptionsModel*>(model);
+
+ const auto values = QStringList{} << QString::fromLatin1(opt->keyword) << QString::fromLatin1(opt->choices[selectedChoiceIndex].choice);
+ m->currentPrintDevice()->setProperty(PDPK_PpdOption, values);
+ itm->selected = selectedChoiceIndex;
+
+ m->emitConflictsChanged();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
+#endif // QT_CONFIG(cups)
#endif // defined (Q_OS_UNIX)
QT_END_NAMESPACE
diff --git a/src/printsupport/dialogs/qprintpreviewdialog.cpp b/src/printsupport/dialogs/qprintpreviewdialog.cpp
index 906cb19043..a4f721fbc8 100644
--- a/src/printsupport/dialogs/qprintpreviewdialog.cpp
+++ b/src/printsupport/dialogs/qprintpreviewdialog.cpp
@@ -79,7 +79,7 @@ class QPrintPreviewMainWindow : public QMainWindow
{
public:
QPrintPreviewMainWindow(QWidget *parent) : QMainWindow(parent) {}
- QMenu *createPopupMenu() Q_DECL_OVERRIDE { return nullptr; }
+ QMenu *createPopupMenu() override { return nullptr; }
};
class ZoomFactorValidator : public QDoubleValidator
@@ -90,7 +90,7 @@ public:
ZoomFactorValidator(qreal bottom, qreal top, int decimals, QObject *parent)
: QDoubleValidator(bottom, top, decimals, parent) {}
- State validate(QString &input, int &pos) const Q_DECL_OVERRIDE
+ State validate(QString &input, int &pos) const override
{
bool replacePercent = false;
if (input.endsWith(QLatin1Char('%'))) {
@@ -123,13 +123,13 @@ public:
}
protected:
- void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE
+ void focusInEvent(QFocusEvent *e) override
{
origText = text();
QLineEdit::focusInEvent(e);
}
- void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE
+ void focusOutEvent(QFocusEvent *e) override
{
if (isModified() && !hasAcceptableInput())
setText(origText);
@@ -484,7 +484,7 @@ void QPrintPreviewDialogPrivate::updatePageNumLabel()
int numPages = preview->pageCount();
int maxChars = QString::number(numPages).length();
pageNumLabel->setText(QString::fromLatin1("/ %1").arg(numPages));
- int cyphersWidth = q->fontMetrics().width(QString().fill(QLatin1Char('8'), maxChars));
+ int cyphersWidth = q->fontMetrics().horizontalAdvance(QString().fill(QLatin1Char('8'), maxChars));
int maxWidth = pageNumEdit->minimumSizeHint().width() + cyphersWidth;
pageNumEdit->setMinimumWidth(maxWidth);
pageNumEdit->setMaximumWidth(maxWidth);
diff --git a/src/printsupport/dialogs/qprintpreviewdialog.h b/src/printsupport/dialogs/qprintpreviewdialog.h
index bacafcb734..53fede7e83 100644
--- a/src/printsupport/dialogs/qprintpreviewdialog.h
+++ b/src/printsupport/dialogs/qprintpreviewdialog.h
@@ -68,8 +68,8 @@ public:
QPrinter *printer();
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- void done(int result) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
+ void done(int result) override;
Q_SIGNALS:
void paintRequested(QPrinter *printer);
diff --git a/src/printsupport/dialogs/qprintpropertieswidget.ui b/src/printsupport/dialogs/qprintpropertieswidget.ui
index 66d7b80fcd..d8e526139b 100644
--- a/src/printsupport/dialogs/qprintpropertieswidget.ui
+++ b/src/printsupport/dialogs/qprintpropertieswidget.ui
@@ -14,7 +14,16 @@
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -32,6 +41,64 @@
</item>
</layout>
</widget>
+ <widget class="QWidget" name="cupsPropertiesPage">
+ <attribute name="title">
+ <string>Advanced</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QTreeView" name="treeView">
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="conflictsLabel">
+ <property name="palette">
+ <palette>
+ <active>
+ <colorrole role="WindowText">
+ <brush brushstyle="SolidPattern">
+ <color alpha="255">
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </active>
+ <inactive>
+ <colorrole role="WindowText">
+ <brush brushstyle="SolidPattern">
+ <color alpha="255">
+ <red>255</red>
+ <green>0</green>
+ <blue>0</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </inactive>
+ <disabled>
+ <colorrole role="WindowText">
+ <brush brushstyle="SolidPattern">
+ <color alpha="255">
+ <red>165</red>
+ <green>167</green>
+ <blue>169</blue>
+ </color>
+ </brush>
+ </colorrole>
+ </disabled>
+ </palette>
+ </property>
+ <property name="text">
+ <string>There are conflicts in some options. Please fix them.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
</layout>
diff --git a/src/printsupport/dialogs/qprintsettingsoutput.ui b/src/printsupport/dialogs/qprintsettingsoutput.ui
index 0fa34ab27f..290111a98c 100644
--- a/src/printsupport/dialogs/qprintsettingsoutput.ui
+++ b/src/printsupport/dialogs/qprintsettingsoutput.ui
@@ -6,15 +6,24 @@
<rect>
<x>0</x>
<y>0</y>
- <width>426</width>
- <height>187</height>
+ <width>432</width>
+ <height>251</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -42,7 +51,16 @@
<property name="spacing">
<number>4</number>
</property>
- <property name="margin">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
<number>6</number>
</property>
<item>
@@ -60,7 +78,16 @@
<property name="spacing">
<number>6</number>
</property>
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -119,6 +146,27 @@
</layout>
</item>
<item>
+ <layout class="QHBoxLayout" name="pagesLayout">
+ <item>
+ <widget class="QRadioButton" name="pagesRadioButton">
+ <property name="text">
+ <string>Pages</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="pagesLineEdit">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="toolTip">
+ <string>Specify pages or ranges separated by commas. Ranges are specified by two numbers separated by a hyphen. E.g: 3,5-7,9 prints pages 3, 5, 6, 7 and 9.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<widget class="QRadioButton" name="printCurrentPage">
<property name="text">
<string>Current Page</string>
@@ -361,12 +409,12 @@
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
- <x>76</x>
- <y>59</y>
+ <x>89</x>
+ <y>113</y>
</hint>
<hint type="destinationlabel">
- <x>122</x>
- <y>57</y>
+ <x>182</x>
+ <y>113</y>
</hint>
</hints>
</connection>
@@ -377,12 +425,28 @@
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
- <x>69</x>
- <y>67</y>
+ <x>82</x>
+ <y>113</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>267</x>
+ <y>113</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>pagesRadioButton</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>pagesLineEdit</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>58</x>
+ <y>132</y>
</hint>
<hint type="destinationlabel">
- <x>215</x>
- <y>67</y>
+ <x>163</x>
+ <y>128</y>
</hint>
</hints>
</connection>
diff --git a/src/printsupport/kernel/qcups.cpp b/src/printsupport/kernel/qcups.cpp
index b9e162abe9..7e8e1707b2 100644
--- a/src/printsupport/kernel/qcups.cpp
+++ b/src/printsupport/kernel/qcups.cpp
@@ -43,36 +43,45 @@
QT_BEGIN_NAMESPACE
-QStringList QCUPSSupport::cupsOptionsList(QPrinter *printer)
+static QStringList cupsOptionsList(QPrinter *printer) Q_DECL_NOTHROW
{
return printer->printEngine()->property(PPK_CupsOptions).toStringList();
}
-void QCUPSSupport::setCupsOptions(QPrinter *printer, const QStringList &cupsOptions)
+void setCupsOptions(QPrinter *printer, const QStringList &cupsOptions) Q_DECL_NOTHROW
{
printer->printEngine()->setProperty(PPK_CupsOptions, QVariant(cupsOptions));
}
-void QCUPSSupport::setCupsOption(QStringList &cupsOptions, const QString &option, const QString &value)
+void QCUPSSupport::setCupsOption(QPrinter *printer, const QString &option, const QString &value)
{
+ QStringList cupsOptions = cupsOptionsList(printer);
if (cupsOptions.contains(option)) {
cupsOptions.replace(cupsOptions.indexOf(option) + 1, value);
} else {
cupsOptions.append(option);
cupsOptions.append(value);
}
+ setCupsOptions(printer, cupsOptions);
}
-void QCUPSSupport::clearCupsOption(QStringList &cupsOptions, const QString &option)
+void QCUPSSupport::clearCupsOption(QPrinter *printer, const QString &option)
{
+ QStringList cupsOptions = cupsOptionsList(printer);
// ### use const_iterator once QList::erase takes them
const QStringList::iterator it = std::find(cupsOptions.begin(), cupsOptions.end(), option);
if (it != cupsOptions.end()) {
Q_ASSERT(it + 1 < cupsOptions.end());
cupsOptions.erase(it, it+1);
+ setCupsOptions(printer, cupsOptions);
}
}
+void QCUPSSupport::clearCupsOptions(QPrinter *printer)
+{
+ setCupsOptions(printer, QStringList());
+}
+
static inline QString jobHoldToString(const QCUPSSupport::JobHoldUntil jobHold, const QTime holdUntilTime)
{
switch (jobHold) {
@@ -107,32 +116,57 @@ static inline QString jobHoldToString(const QCUPSSupport::JobHoldUntil jobHold,
return QString();
}
+QCUPSSupport::JobHoldUntilWithTime QCUPSSupport::parseJobHoldUntil(const QString &jobHoldUntil)
+{
+ if (jobHoldUntil == QLatin1String("indefinite")) {
+ return { QCUPSSupport::Indefinite, QTime() };
+ } else if (jobHoldUntil == QLatin1String("day-time")) {
+ return { QCUPSSupport::DayTime, QTime() };
+ } else if (jobHoldUntil == QLatin1String("night")) {
+ return { QCUPSSupport::Night, QTime() };
+ } else if (jobHoldUntil == QLatin1String("second-shift")) {
+ return { QCUPSSupport::SecondShift, QTime() };
+ } else if (jobHoldUntil == QLatin1String("third-shift")) {
+ return { QCUPSSupport::ThirdShift, QTime() };
+ } else if (jobHoldUntil == QLatin1String("weekend")) {
+ return { QCUPSSupport::Weekend, QTime() };
+ }
+
+
+ QTime parsedTime = QTime::fromString(jobHoldUntil, QStringLiteral("h:m:s"));
+ if (!parsedTime.isValid())
+ parsedTime = QTime::fromString(jobHoldUntil, QStringLiteral("h:m"));
+ if (parsedTime.isValid()) {
+ // CUPS time is in UTC, user expects local time, so get the equivalent
+ QDateTime dateTimeUtc = QDateTime::currentDateTimeUtc();
+ dateTimeUtc.setTime(parsedTime);
+ return { QCUPSSupport::SpecificTime, dateTimeUtc.toLocalTime().time() };
+ }
+
+ return { QCUPSSupport::NoHold, QTime() };
+}
+
+
void QCUPSSupport::setJobHold(QPrinter *printer, const JobHoldUntil jobHold, const QTime &holdUntilTime)
{
- QStringList cupsOptions = cupsOptionsList(printer);
const QString jobHoldUntilArgument = jobHoldToString(jobHold, holdUntilTime);
if (!jobHoldUntilArgument.isEmpty()) {
- setCupsOption(cupsOptions,
+ setCupsOption(printer,
QStringLiteral("job-hold-until"),
jobHoldUntilArgument);
} else {
- clearCupsOption(cupsOptions, QStringLiteral("job-hold-until"));
+ clearCupsOption(printer, QStringLiteral("job-hold-until"));
}
- setCupsOptions(printer, cupsOptions);
}
void QCUPSSupport::setJobBilling(QPrinter *printer, const QString &jobBilling)
{
- QStringList cupsOptions = cupsOptionsList(printer);
- setCupsOption(cupsOptions, QStringLiteral("job-billing"), jobBilling);
- setCupsOptions(printer, cupsOptions);
+ setCupsOption(printer, QStringLiteral("job-billing"), jobBilling);
}
void QCUPSSupport::setJobPriority(QPrinter *printer, int priority)
{
- QStringList cupsOptions = cupsOptionsList(printer);
- setCupsOption(cupsOptions, QStringLiteral("job-priority"), QString::number(priority));
- setCupsOptions(printer, cupsOptions);
+ setCupsOption(printer, QStringLiteral("job-priority"), QString::number(priority));
}
static inline QString bannerPageToString(const QCUPSSupport::BannerPage bannerPage)
@@ -150,19 +184,42 @@ static inline QString bannerPageToString(const QCUPSSupport::BannerPage bannerPa
return QString();
}
+static inline QCUPSSupport::BannerPage stringToBannerPage(const QString &bannerPage)
+{
+ if (bannerPage == QLatin1String("none")) return QCUPSSupport::NoBanner;
+ else if (bannerPage == QLatin1String("standard")) return QCUPSSupport::Standard;
+ else if (bannerPage == QLatin1String("unclassified")) return QCUPSSupport::Unclassified;
+ else if (bannerPage == QLatin1String("confidential")) return QCUPSSupport::Confidential;
+ else if (bannerPage == QLatin1String("classified")) return QCUPSSupport::Classified;
+ else if (bannerPage == QLatin1String("secret")) return QCUPSSupport::Secret;
+ else if (bannerPage == QLatin1String("topsecret")) return QCUPSSupport::TopSecret;
+
+ return QCUPSSupport::NoBanner;
+}
+
+QCUPSSupport::JobSheets QCUPSSupport::parseJobSheets(const QString &jobSheets)
+{
+ JobSheets result;
+
+ const QStringList parts = jobSheets.split(QLatin1Char(','));
+ if (parts.count() == 2) {
+ result.startBannerPage = stringToBannerPage(parts[0]);
+ result.endBannerPage = stringToBannerPage(parts[1]);
+ }
+
+ return result;
+}
+
void QCUPSSupport::setBannerPages(QPrinter *printer, const BannerPage startBannerPage, const BannerPage endBannerPage)
{
- QStringList cupsOptions = cupsOptionsList(printer);
const QString startBanner = bannerPageToString(startBannerPage);
const QString endBanner = bannerPageToString(endBannerPage);
- setCupsOption(cupsOptions, QStringLiteral("job-sheets"), startBanner + QLatin1Char(',') + endBanner);
- setCupsOptions(printer, cupsOptions);
+ setCupsOption(printer, QStringLiteral("job-sheets"), startBanner + QLatin1Char(',') + endBanner);
}
void QCUPSSupport::setPageSet(QPrinter *printer, const PageSet pageSet)
{
- QStringList cupsOptions = cupsOptionsList(printer);
QString pageSetString;
switch (pageSet) {
@@ -177,29 +234,29 @@ void QCUPSSupport::setPageSet(QPrinter *printer, const PageSet pageSet)
break;
}
- setCupsOption(cupsOptions, QStringLiteral("page-set"), pageSetString);
- setCupsOptions(printer, cupsOptions);
+ setCupsOption(printer, QStringLiteral("page-set"), pageSetString);
}
void QCUPSSupport::setPagesPerSheetLayout(QPrinter *printer, const PagesPerSheet pagesPerSheet,
const PagesPerSheetLayout pagesPerSheetLayout)
{
- QStringList cupsOptions = cupsOptionsList(printer);
// WARNING: the following trick (with a [2]-extent) only works as
// WARNING: long as there's only one two-digit number in the list
// WARNING: and it is the last one (before the "\0")!
static const char pagesPerSheetData[][2] = { "1", "2", "4", "6", "9", {'1', '6'}, "\0" };
static const char pageLayoutData[][5] = {"lrtb", "lrbt", "rlbt", "rltb", "btlr", "btrl", "tblr", "tbrl"};
- setCupsOption(cupsOptions, QStringLiteral("number-up"), QLatin1String(pagesPerSheetData[pagesPerSheet]));
- setCupsOption(cupsOptions, QStringLiteral("number-up-layout"), QLatin1String(pageLayoutData[pagesPerSheetLayout]));
- setCupsOptions(printer, cupsOptions);
+ setCupsOption(printer, QStringLiteral("number-up"), QLatin1String(pagesPerSheetData[pagesPerSheet]));
+ setCupsOption(printer, QStringLiteral("number-up-layout"), QLatin1String(pageLayoutData[pagesPerSheetLayout]));
}
void QCUPSSupport::setPageRange(QPrinter *printer, int pageFrom, int pageTo)
{
- QStringList cupsOptions = cupsOptionsList(printer);
- setCupsOption(cupsOptions, QStringLiteral("page-ranges"), QStringLiteral("%1-%2").arg(pageFrom).arg(pageTo));
- setCupsOptions(printer, cupsOptions);
+ setPageRange(printer, QStringLiteral("%1-%2").arg(pageFrom).arg(pageTo));
+}
+
+void QCUPSSupport::setPageRange(QPrinter *printer, const QString &pageRange)
+{
+ setCupsOption(printer, QStringLiteral("page-ranges"), pageRange);
}
QT_END_NAMESPACE
diff --git a/src/printsupport/kernel/qcups_p.h b/src/printsupport/kernel/qcups_p.h
index 780115e350..9a71483bb9 100644
--- a/src/printsupport/kernel/qcups_p.h
+++ b/src/printsupport/kernel/qcups_p.h
@@ -67,6 +67,14 @@ QT_BEGIN_NAMESPACE
// removed from the dialogs.
#define PPK_CupsOptions QPrintEngine::PrintEnginePropertyKey(0xfe00)
+#define PDPK_PpdFile QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase)
+#define PDPK_PpdOption QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 1)
+#define PDPK_CupsJobPriority QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 2)
+#define PDPK_CupsJobSheets QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 3)
+#define PDPK_CupsJobBilling QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 4)
+#define PDPK_CupsJobHoldUntil QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 5)
+#define PDPK_PpdChoiceIsInstallableConflict QPrintDevice::PrintDevicePropertyKey(QPrintDevice::PDPK_CustomBase + 6)
+
class Q_PRINTSUPPORT_EXPORT QCUPSSupport
{
public:
@@ -122,10 +130,9 @@ public:
TopToBottomRightToLeft
};
- static QStringList cupsOptionsList(QPrinter *printer);
- static void setCupsOptions(QPrinter *printer, const QStringList &cupsOptions);
- static void setCupsOption(QStringList &cupsOptions, const QString &option, const QString &value);
- static void clearCupsOption(QStringList &cupsOptions, const QString &option);
+ static void setCupsOption(QPrinter *printer, const QString &option, const QString &value);
+ static void clearCupsOption(QPrinter *printer, const QString &option);
+ static void clearCupsOptions(QPrinter *printer);
static void setJobHold(QPrinter *printer, const JobHoldUntil jobHold = NoHold, const QTime &holdUntilTime = QTime());
static void setJobBilling(QPrinter *printer, const QString &jobBilling = QString());
@@ -135,6 +142,27 @@ public:
static void setPagesPerSheetLayout(QPrinter *printer, const PagesPerSheet pagesPerSheet,
const PagesPerSheetLayout pagesPerSheetLayout);
static void setPageRange(QPrinter *printer, int pageFrom, int pageTo);
+ static void setPageRange(QPrinter *printer, const QString &pageRange);
+
+ struct JobSheets
+ {
+ JobSheets(BannerPage s = NoBanner, BannerPage e = NoBanner)
+ : startBannerPage(s), endBannerPage(e) {}
+
+ BannerPage startBannerPage;
+ BannerPage endBannerPage;
+ };
+ static JobSheets parseJobSheets(const QString &jobSheets);
+
+ struct JobHoldUntilWithTime
+ {
+ JobHoldUntilWithTime(JobHoldUntil jh = NoHold, const QTime &t = QTime())
+ : jobHold(jh), time(t) {}
+
+ JobHoldUntil jobHold;
+ QTime time;
+ };
+ static JobHoldUntilWithTime parseJobHoldUntil(const QString &jobHoldUntil);
};
Q_DECLARE_TYPEINFO(QCUPSSupport::JobHoldUntil, Q_PRIMITIVE_TYPE);
Q_DECLARE_TYPEINFO(QCUPSSupport::BannerPage, Q_PRIMITIVE_TYPE);
diff --git a/src/printsupport/kernel/qpaintengine_alpha.cpp b/src/printsupport/kernel/qpaintengine_alpha.cpp
index cae5c2f522..410051df2a 100644
--- a/src/printsupport/kernel/qpaintengine_alpha.cpp
+++ b/src/printsupport/kernel/qpaintengine_alpha.cpp
@@ -306,15 +306,12 @@ void QAlphaPaintEngine::flushAndInit(bool init)
d->m_alphargn = d->m_alphargn.intersected(QRect(0, 0, d->m_pdev->width(), d->m_pdev->height()));
// just use the bounding rect if it's a complex region..
- QVector<QRect> rects = d->m_alphargn.rects();
- if (rects.size() > 10) {
+ if (d->m_alphargn.rectCount() > 10) {
QRect br = d->m_alphargn.boundingRect();
d->m_alphargn = QRegion(br);
- rects.clear();
- rects.append(br);
}
- d->m_cliprgn = d->m_alphargn;
+ const auto oldAlphaRegion = d->m_cliprgn = d->m_alphargn;
// now replay the QPicture
++d->m_pass; // we are now doing pass #2
@@ -336,7 +333,7 @@ void QAlphaPaintEngine::flushAndInit(bool init)
d->resetState(painter());
// fill in the alpha images
- for (const auto &rect : qAsConst(rects))
+ for (const auto &rect : oldAlphaRegion)
d->drawAlphaImage(rect);
d->m_alphargn = QRegion();
diff --git a/src/printsupport/kernel/qplatformprintdevice.cpp b/src/printsupport/kernel/qplatformprintdevice.cpp
index e2d4a08de3..8dba402a6e 100644
--- a/src/printsupport/kernel/qplatformprintdevice.cpp
+++ b/src/printsupport/kernel/qplatformprintdevice.cpp
@@ -167,7 +167,7 @@ QList<QPageSize> QPlatformPrintDevice::supportedPageSizes() const
{
if (!m_havePageSizes)
loadPageSizes();
- return m_pageSizes.toList();
+ return m_pageSizes;
}
QPageSize QPlatformPrintDevice::supportedPageSize(const QPageSize &pageSize) const
@@ -293,7 +293,7 @@ QList<int> QPlatformPrintDevice::supportedResolutions() const
{
if (!m_haveResolutions)
loadResolutions();
- return m_resolutions.toList();
+ return m_resolutions;
}
void QPlatformPrintDevice::loadInputSlots() const
@@ -313,11 +313,11 @@ QPrint::InputSlot QPlatformPrintDevice::defaultInputSlot() const
return input;
}
-QList<QPrint::InputSlot> QPlatformPrintDevice::supportedInputSlots() const
+QVector<QPrint::InputSlot> QPlatformPrintDevice::supportedInputSlots() const
{
if (!m_haveInputSlots)
loadInputSlots();
- return m_inputSlots.toList();
+ return m_inputSlots;
}
void QPlatformPrintDevice::loadOutputBins() const
@@ -337,11 +337,11 @@ QPrint::OutputBin QPlatformPrintDevice::defaultOutputBin() const
return output;
}
-QList<QPrint::OutputBin> QPlatformPrintDevice::supportedOutputBins() const
+QVector<QPrint::OutputBin> QPlatformPrintDevice::supportedOutputBins() const
{
if (!m_haveOutputBins)
loadOutputBins();
- return m_outputBins.toList();
+ return m_outputBins;
}
void QPlatformPrintDevice::loadDuplexModes() const
@@ -353,11 +353,11 @@ QPrint::DuplexMode QPlatformPrintDevice::defaultDuplexMode() const
return QPrint::DuplexNone;
}
-QList<QPrint::DuplexMode> QPlatformPrintDevice::supportedDuplexModes() const
+QVector<QPrint::DuplexMode> QPlatformPrintDevice::supportedDuplexModes() const
{
if (!m_haveDuplexModes)
loadDuplexModes();
- return m_duplexModes.toList();
+ return m_duplexModes;
}
void QPlatformPrintDevice::loadColorModes() const
@@ -369,11 +369,11 @@ QPrint::ColorMode QPlatformPrintDevice::defaultColorMode() const
return QPrint::GrayScale;
}
-QList<QPrint::ColorMode> QPlatformPrintDevice::supportedColorModes() const
+QVector<QPrint::ColorMode> QPlatformPrintDevice::supportedColorModes() const
{
if (!m_haveColorModes)
loadColorModes();
- return m_colorModes.toList();
+ return m_colorModes;
}
#ifndef QT_NO_MIMETYPE
@@ -381,11 +381,34 @@ void QPlatformPrintDevice::loadMimeTypes() const
{
}
+QVariant QPlatformPrintDevice::property(QPrintDevice::PrintDevicePropertyKey key) const
+{
+ Q_UNUSED(key)
+
+ return QVariant();
+}
+
+bool QPlatformPrintDevice::setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value)
+{
+ Q_UNUSED(key)
+ Q_UNUSED(value)
+
+ return false;
+}
+
+bool QPlatformPrintDevice::isFeatureAvailable(QPrintDevice::PrintDevicePropertyKey key, const QVariant &params) const
+{
+ Q_UNUSED(key)
+ Q_UNUSED(params)
+
+ return false;
+}
+
QList<QMimeType> QPlatformPrintDevice::supportedMimeTypes() const
{
if (!m_haveMimeTypes)
loadMimeTypes();
- return m_mimeTypes.toList();
+ return m_mimeTypes;
}
#endif // QT_NO_MIMETYPE
diff --git a/src/printsupport/kernel/qplatformprintdevice.h b/src/printsupport/kernel/qplatformprintdevice.h
index 44a3a966f4..a988518547 100644
--- a/src/printsupport/kernel/qplatformprintdevice.h
+++ b/src/printsupport/kernel/qplatformprintdevice.h
@@ -53,11 +53,14 @@
#include <QtPrintSupport/qtprintsupportglobal.h>
#include <private/qprint_p.h>
+#include <private/qprintdevice_p.h>
+#include <QtCore/qvariant.h>
#include <QtCore/qvector.h>
#include <QtCore/qmimetype.h>
#include <QtGui/qpagelayout.h>
+
QT_BEGIN_NAMESPACE
#ifndef QT_NO_PRINTER
@@ -107,16 +110,20 @@ public:
virtual QList<int> supportedResolutions() const;
virtual QPrint::InputSlot defaultInputSlot() const;
- virtual QList<QPrint::InputSlot> supportedInputSlots() const;
+ virtual QVector<QPrint::InputSlot> supportedInputSlots() const;
virtual QPrint::OutputBin defaultOutputBin() const;
- virtual QList<QPrint::OutputBin> supportedOutputBins() const;
+ virtual QVector<QPrint::OutputBin> supportedOutputBins() const;
virtual QPrint::DuplexMode defaultDuplexMode() const;
- virtual QList<QPrint::DuplexMode> supportedDuplexModes() const;
+ virtual QVector<QPrint::DuplexMode> supportedDuplexModes() const;
virtual QPrint::ColorMode defaultColorMode() const;
- virtual QList<QPrint::ColorMode> supportedColorModes() const;
+ virtual QVector<QPrint::ColorMode> supportedColorModes() const;
+
+ virtual QVariant property(QPrintDevice::PrintDevicePropertyKey key) const;
+ virtual bool setProperty(QPrintDevice::PrintDevicePropertyKey key, const QVariant &value);
+ virtual bool isFeatureAvailable(QPrintDevice::PrintDevicePropertyKey key, const QVariant &params) const;
#ifndef QT_NO_MIMETYPE
virtual QList<QMimeType> supportedMimeTypes() const;
@@ -149,7 +156,7 @@ protected:
bool m_supportsCollateCopies;
mutable bool m_havePageSizes;
- mutable QVector<QPageSize> m_pageSizes;
+ mutable QList<QPageSize> m_pageSizes;
bool m_supportsCustomPageSizes;
@@ -157,7 +164,7 @@ protected:
QSize m_maximumPhysicalPageSize;
mutable bool m_haveResolutions;
- mutable QVector<int> m_resolutions;
+ mutable QList<int> m_resolutions;
mutable bool m_haveInputSlots;
mutable QVector<QPrint::InputSlot> m_inputSlots;
@@ -173,7 +180,7 @@ protected:
#ifndef QT_NO_MIMETYPE
mutable bool m_haveMimeTypes;
- mutable QVector<QMimeType> m_mimeTypes;
+ mutable QList<QMimeType> m_mimeTypes;
#endif
};
diff --git a/src/printsupport/kernel/qplatformprintersupport.cpp b/src/printsupport/kernel/qplatformprintersupport.cpp
index e12a292aec..a25dc6d45c 100644
--- a/src/printsupport/kernel/qplatformprintersupport.cpp
+++ b/src/printsupport/kernel/qplatformprintersupport.cpp
@@ -89,11 +89,6 @@ QPrintDevice QPlatformPrinterSupport::createPrintDevice(const QString &id)
return QPrintDevice();
}
-QPrintDevice QPlatformPrinterSupport::createDefaultPrintDevice()
-{
- return createPrintDevice(defaultPrintDeviceId());
-}
-
QStringList QPlatformPrinterSupport::availablePrintDeviceIds() const
{
return QStringList();
diff --git a/src/printsupport/kernel/qplatformprintersupport.h b/src/printsupport/kernel/qplatformprintersupport.h
index 6a4246adc0..413c1067c2 100644
--- a/src/printsupport/kernel/qplatformprintersupport.h
+++ b/src/printsupport/kernel/qplatformprintersupport.h
@@ -76,7 +76,6 @@ public:
virtual QPaintEngine *createPaintEngine(QPrintEngine *, QPrinter::PrinterMode printerMode);
virtual QPrintDevice createPrintDevice(const QString &id);
- virtual QPrintDevice createDefaultPrintDevice();
virtual QStringList availablePrintDeviceIds() const;
virtual QString defaultPrintDeviceId() const;
diff --git a/src/printsupport/kernel/qprint_p.h b/src/printsupport/kernel/qprint_p.h
index 280c2d7608..4956775461 100644
--- a/src/printsupport/kernel/qprint_p.h
+++ b/src/printsupport/kernel/qprint_p.h
@@ -59,6 +59,7 @@
#if (defined Q_OS_MACOS) || (defined Q_OS_UNIX && QT_CONFIG(cups))
#include <cups/ppd.h> // Use for type defs only, don't want to actually link in main module
+Q_DECLARE_METATYPE(ppd_file_t *)
#endif
QT_BEGIN_NAMESPACE
diff --git a/src/printsupport/kernel/qprintdevice.cpp b/src/printsupport/kernel/qprintdevice.cpp
index 26799a6f13..50fc14169d 100644
--- a/src/printsupport/kernel/qprintdevice.cpp
+++ b/src/printsupport/kernel/qprintdevice.cpp
@@ -210,9 +210,9 @@ QPrint::InputSlot QPrintDevice::defaultInputSlot() const
return isValid() ? d->defaultInputSlot() : QPrint::InputSlot();
}
-QList<QPrint::InputSlot> QPrintDevice::supportedInputSlots() const
+QVector<QPrint::InputSlot> QPrintDevice::supportedInputSlots() const
{
- return isValid() ? d->supportedInputSlots() : QList<QPrint::InputSlot>();
+ return isValid() ? d->supportedInputSlots() : QVector<QPrint::InputSlot>{};
}
QPrint::OutputBin QPrintDevice::defaultOutputBin() const
@@ -220,9 +220,9 @@ QPrint::OutputBin QPrintDevice::defaultOutputBin() const
return isValid() ? d->defaultOutputBin() : QPrint::OutputBin();
}
-QList<QPrint::OutputBin> QPrintDevice::supportedOutputBins() const
+QVector<QPrint::OutputBin> QPrintDevice::supportedOutputBins() const
{
- return isValid() ? d->supportedOutputBins() : QList<QPrint::OutputBin>();
+ return isValid() ? d->supportedOutputBins() : QVector<QPrint::OutputBin>{};
}
QPrint::DuplexMode QPrintDevice::defaultDuplexMode() const
@@ -230,9 +230,9 @@ QPrint::DuplexMode QPrintDevice::defaultDuplexMode() const
return isValid() ? d->defaultDuplexMode() : QPrint::DuplexNone;
}
-QList<QPrint::DuplexMode> QPrintDevice::supportedDuplexModes() const
+QVector<QPrint::DuplexMode> QPrintDevice::supportedDuplexModes() const
{
- return isValid() ? d->supportedDuplexModes() : QList<QPrint::DuplexMode>();
+ return isValid() ? d->supportedDuplexModes() : QVector<QPrint::DuplexMode>{};
}
QPrint::ColorMode QPrintDevice::defaultColorMode() const
@@ -240,9 +240,24 @@ QPrint::ColorMode QPrintDevice::defaultColorMode() const
return isValid() ? d->defaultColorMode() : QPrint::GrayScale;
}
-QList<QPrint::ColorMode> QPrintDevice::supportedColorModes() const
+QVector<QPrint::ColorMode> QPrintDevice::supportedColorModes() const
{
- return isValid() ? d->supportedColorModes() : QList<QPrint::ColorMode>();
+ return isValid() ? d->supportedColorModes() : QVector<QPrint::ColorMode>{};
+}
+
+QVariant QPrintDevice::property(PrintDevicePropertyKey key) const
+{
+ return isValid() ? d->property(key) : QVariant();
+}
+
+bool QPrintDevice::setProperty(PrintDevicePropertyKey key, const QVariant &value)
+{
+ return isValid() ? d->setProperty(key, value) : false;
+}
+
+bool QPrintDevice::isFeatureAvailable(PrintDevicePropertyKey key, const QVariant &params) const
+{
+ return isValid() ? d->isFeatureAvailable(key, params) : false;
}
#ifndef QT_NO_MIMETYPE
diff --git a/src/printsupport/kernel/qprintdevice_p.h b/src/printsupport/kernel/qprintdevice_p.h
index 1e0d3983e9..562ccd2057 100644
--- a/src/printsupport/kernel/qprintdevice_p.h
+++ b/src/printsupport/kernel/qprintdevice_p.h
@@ -120,16 +120,24 @@ public:
QList<int> supportedResolutions() const;
QPrint::InputSlot defaultInputSlot() const;
- QList<QPrint::InputSlot> supportedInputSlots() const;
+ QVector<QPrint::InputSlot> supportedInputSlots() const;
QPrint::OutputBin defaultOutputBin() const;
- QList<QPrint::OutputBin> supportedOutputBins() const;
+ QVector<QPrint::OutputBin> supportedOutputBins() const;
QPrint::DuplexMode defaultDuplexMode() const;
- QList<QPrint::DuplexMode> supportedDuplexModes() const;
+ QVector<QPrint::DuplexMode> supportedDuplexModes() const;
QPrint::ColorMode defaultColorMode() const;
- QList<QPrint::ColorMode> supportedColorModes() const;
+ QVector<QPrint::ColorMode> supportedColorModes() const;
+
+ enum PrintDevicePropertyKey {
+ PDPK_CustomBase = 0xff00
+ };
+
+ QVariant property(PrintDevicePropertyKey key) const;
+ bool setProperty(PrintDevicePropertyKey key, const QVariant &value);
+ bool isFeatureAvailable(PrintDevicePropertyKey key, const QVariant &params) const;
#ifndef QT_NO_MIMETYPE
QList<QMimeType> supportedMimeTypes() const;
diff --git a/src/printsupport/kernel/qprintengine_pdf.cpp b/src/printsupport/kernel/qprintengine_pdf.cpp
index 873e146eec..0230ebddc8 100644
--- a/src/printsupport/kernel/qprintengine_pdf.cpp
+++ b/src/printsupport/kernel/qprintengine_pdf.cpp
@@ -374,7 +374,7 @@ void QPdfPrintEnginePrivate::closePrintDevice()
if (outDevice) {
outDevice->close();
if (fd >= 0)
- #if defined(Q_OS_WIN) && defined(_MSC_VER) && _MSC_VER >= 1400
+ #if defined(Q_OS_WIN) && defined(Q_CC_MSVC)
::_close(fd);
#else
::close(fd);
diff --git a/src/printsupport/kernel/qprintengine_pdf_p.h b/src/printsupport/kernel/qprintengine_pdf_p.h
index e9e81bdf68..bb01a2e9e1 100644
--- a/src/printsupport/kernel/qprintengine_pdf_p.h
+++ b/src/printsupport/kernel/qprintengine_pdf_p.h
@@ -87,18 +87,18 @@ public:
virtual ~QPdfPrintEngine();
// reimplementations QPaintEngine
- bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
- bool end() Q_DECL_OVERRIDE;
+ bool begin(QPaintDevice *pdev) override;
+ bool end() override;
// end reimplementations QPaintEngine
// reimplementations QPrintEngine
- bool abort() Q_DECL_OVERRIDE {return false;}
- QPrinter::PrinterState printerState() const Q_DECL_OVERRIDE {return state;}
+ bool abort() override {return false;}
+ QPrinter::PrinterState printerState() const override {return state;}
- bool newPage() Q_DECL_OVERRIDE;
- int metric(QPaintDevice::PaintDeviceMetric) const Q_DECL_OVERRIDE;
- virtual void setProperty(PrintEnginePropertyKey key, const QVariant &value) Q_DECL_OVERRIDE;
- virtual QVariant property(PrintEnginePropertyKey key) const Q_DECL_OVERRIDE;
+ bool newPage() override;
+ int metric(QPaintDevice::PaintDeviceMetric) const override;
+ virtual void setProperty(PrintEnginePropertyKey key, const QVariant &value) override;
+ virtual QVariant property(PrintEnginePropertyKey key) const override;
// end reimplementations QPrintEngine
QPrinter::PrinterState state;
diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp
index b479ecacb1..a943d24cb1 100644
--- a/src/printsupport/kernel/qprintengine_win.cpp
+++ b/src/printsupport/kernel/qprintengine_win.cpp
@@ -1024,7 +1024,7 @@ bool QWin32PrintEnginePrivate::resetDC()
return hdc != 0;
}
-static int indexOfId(const QList<QPrint::InputSlot> &inputSlots, QPrint::InputSlotId id)
+static int indexOfId(const QVector<QPrint::InputSlot> &inputSlots, QPrint::InputSlotId id)
{
for (int i = 0; i < inputSlots.size(); ++i) {
if (inputSlots.at(i).id == id)
@@ -1033,7 +1033,7 @@ static int indexOfId(const QList<QPrint::InputSlot> &inputSlots, QPrint::InputSl
return -1;
}
-static int indexOfWindowsId(const QList<QPrint::InputSlot> &inputSlots, int windowsId)
+static int indexOfWindowsId(const QVector<QPrint::InputSlot> &inputSlots, int windowsId)
{
for (int i = 0; i < inputSlots.size(); ++i) {
if (inputSlots.at(i).windowsId == windowsId)
@@ -1210,7 +1210,7 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
case PPK_PaperSource: {
if (!d->devMode)
break;
- const QList<QPrint::InputSlot> inputSlots = d->m_printDevice.supportedInputSlots();
+ const auto inputSlots = d->m_printDevice.supportedInputSlots();
const int paperSource = value.toInt();
const int index = paperSource >= DMBIN_USER ?
indexOfWindowsId(inputSlots, paperSource) : indexOfId(inputSlots, QPrint::InputSlotId(paperSource));
@@ -1465,7 +1465,7 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
if (d->devMode->dmDefaultSource >= DMBIN_USER) {
value = int(d->devMode->dmDefaultSource);
} else {
- const QList<QPrint::InputSlot> inputSlots = d->m_printDevice.supportedInputSlots();
+ const auto inputSlots = d->m_printDevice.supportedInputSlots();
const int index = indexOfWindowsId(inputSlots, d->devMode->dmDefaultSource);
value = index >= 0 ? inputSlots.at(index).id : QPrint::Auto;
}
diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp
index d439fcbbbc..8a2cdcb34f 100644
--- a/src/printsupport/kernel/qprinter.cpp
+++ b/src/printsupport/kernel/qprinter.cpp
@@ -231,7 +231,7 @@ public:
virtual ~QPrinterPagedPaintDevicePrivate()
{}
- bool setPageLayout(const QPageLayout &newPageLayout) Q_DECL_OVERRIDE
+ bool setPageLayout(const QPageLayout &newPageLayout) override
{
if (pd->paintEngine->type() != QPaintEngine::Pdf
&& pd->printEngine->printerState() == QPrinter::Active) {
@@ -248,7 +248,7 @@ public:
return pageLayout().isEquivalentTo(newPageLayout);
}
- bool setPageSize(const QPageSize &pageSize) Q_DECL_OVERRIDE
+ bool setPageSize(const QPageSize &pageSize) override
{
if (pd->paintEngine->type() != QPaintEngine::Pdf
&& pd->printEngine->printerState() == QPrinter::Active) {
@@ -266,7 +266,7 @@ public:
return pageLayout().pageSize().isEquivalentTo(pageSize);
}
- bool setPageOrientation(QPageLayout::Orientation orientation) Q_DECL_OVERRIDE
+ bool setPageOrientation(QPageLayout::Orientation orientation) override
{
// Set the print engine value
pd->setProperty(QPrintEngine::PPK_Orientation, orientation);
@@ -277,12 +277,12 @@ public:
return pageLayout().orientation() == orientation;
}
- bool setPageMargins(const QMarginsF &margins) Q_DECL_OVERRIDE
+ bool setPageMargins(const QMarginsF &margins) override
{
return setPageMargins(margins, pageLayout().units());
}
- bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units) Q_DECL_OVERRIDE
+ bool setPageMargins(const QMarginsF &margins, QPageLayout::Unit units) override
{
// Try to set print engine margins
QPair<QMarginsF, QPageLayout::Unit> pair = qMakePair(margins, units);
@@ -294,7 +294,7 @@ public:
return pageLayout().margins() == margins && pageLayout().units() == units;
}
- QPageLayout pageLayout() const Q_DECL_OVERRIDE
+ QPageLayout pageLayout() const override
{
return pd->printEngine->property(QPrintEngine::PPK_QPageLayout).value<QPageLayout>();
}
diff --git a/src/printsupport/kernel/qprinter.h b/src/printsupport/kernel/qprinter.h
index bfe2d346ae..28dca78a63 100644
--- a/src/printsupport/kernel/qprinter.h
+++ b/src/printsupport/kernel/qprinter.h
@@ -72,7 +72,7 @@ public:
explicit QPrinter(const QPrinterInfo& printer, PrinterMode mode = ScreenResolution);
~QPrinter();
- int devType() const Q_DECL_OVERRIDE;
+ int devType() const override;
enum Orientation { Portrait, Landscape };
@@ -170,10 +170,10 @@ public:
void setOrientation(Orientation);
Orientation orientation() const;
- void setPageSize(PageSize) Q_DECL_OVERRIDE;
+ void setPageSize(PageSize) override;
PageSize pageSize() const;
- void setPageSizeMM(const QSizeF &size) Q_DECL_OVERRIDE;
+ void setPageSizeMM(const QSizeF &size) override;
void setPaperSize(PaperSize);
PaperSize paperSize() const;
@@ -237,12 +237,12 @@ public:
QString printerSelectionOption() const;
void setPrinterSelectionOption(const QString &);
- bool newPage() Q_DECL_OVERRIDE;
+ bool newPage() override;
bool abort();
PrinterState printerState() const;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
QPrintEngine *printEngine() const;
void setFromTo(int fromPage, int toPage);
@@ -252,13 +252,13 @@ public:
void setPrintRange(PrintRange range);
PrintRange printRange() const;
- void setMargins(const Margins &m) Q_DECL_OVERRIDE;
+ void setMargins(const Margins &m) override;
void setPageMargins(qreal left, qreal top, qreal right, qreal bottom, Unit unit);
void getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, Unit unit) const;
protected:
- int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric) const override;
void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine);
private:
diff --git a/src/printsupport/kernel/qprinterinfo.cpp b/src/printsupport/kernel/qprinterinfo.cpp
index d271e069ad..49a0c9ece4 100644
--- a/src/printsupport/kernel/qprinterinfo.cpp
+++ b/src/printsupport/kernel/qprinterinfo.cpp
@@ -380,7 +380,7 @@ QList<QPrinter::DuplexMode> QPrinterInfo::supportedDuplexModes() const
{
Q_D(const QPrinterInfo);
QList<QPrinter::DuplexMode> list;
- const QList<QPrint::DuplexMode> supportedDuplexModes = d->m_printDevice.supportedDuplexModes();
+ const auto supportedDuplexModes = d->m_printDevice.supportedDuplexModes();
list.reserve(supportedDuplexModes.size());
for (QPrint::DuplexMode mode : supportedDuplexModes)
list << QPrinter::DuplexMode(mode);
diff --git a/src/printsupport/widgets/qcupsjobwidget.cpp b/src/printsupport/widgets/qcupsjobwidget.cpp
index 39acac020c..dcdb933f73 100644
--- a/src/printsupport/widgets/qcupsjobwidget.cpp
+++ b/src/printsupport/widgets/qcupsjobwidget.cpp
@@ -52,6 +52,8 @@
#include <QPrinter>
#include <QPrintEngine>
+#include <kernel/qprintdevice_p.h>
+
QT_BEGIN_NAMESPACE
/*!
@@ -64,25 +66,23 @@ QT_BEGIN_NAMESPACE
\inmodule QtPrintSupport
*/
-QCupsJobWidget::QCupsJobWidget(QWidget *parent)
- : QWidget(parent)
+QCupsJobWidget::QCupsJobWidget(QPrinter *printer, QPrintDevice *printDevice, QWidget *parent)
+ : QWidget(parent),
+ m_printer(printer),
+ m_printDevice(printDevice)
{
m_ui.setupUi(this);
//set all the default values
- //TODO restore last used values
initJobHold();
initJobBilling();
initJobPriority();
initBannerPages();
-}
-QCupsJobWidget::~QCupsJobWidget()
-{
+ updateSavedValues();
}
-void QCupsJobWidget::setPrinter(QPrinter *printer)
+QCupsJobWidget::~QCupsJobWidget()
{
- m_printer = printer;
}
void QCupsJobWidget::setupPrinter()
@@ -93,6 +93,27 @@ void QCupsJobWidget::setupPrinter()
QCUPSSupport::setBannerPages(m_printer, startBannerPage(), endBannerPage());
}
+void QCupsJobWidget::updateSavedValues()
+{
+ m_savedJobHoldWithTime = { jobHold(), jobHoldTime() };
+ m_savedJobBilling = jobBilling();
+ m_savedPriority = jobPriority();
+ m_savedJobSheets = { startBannerPage(), endBannerPage() };
+}
+
+void QCupsJobWidget::revertToSavedValues()
+{
+ setJobHold(m_savedJobHoldWithTime.jobHold, m_savedJobHoldWithTime.time);
+ toggleJobHoldTime();
+
+ setJobBilling(m_savedJobBilling);
+
+ setJobPriority(m_savedPriority);
+
+ setStartBannerPage(m_savedJobSheets.startBannerPage);
+ setEndBannerPage(m_savedJobSheets.endBannerPage);
+}
+
void QCupsJobWidget::initJobHold()
{
m_ui.jobHoldComboBox->addItem(tr("Print Immediately"), QVariant::fromValue(QCUPSSupport::NoHold));
@@ -106,7 +127,14 @@ void QCupsJobWidget::initJobHold()
connect(m_ui.jobHoldComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &QCupsJobWidget::toggleJobHoldTime);
- setJobHold(QCUPSSupport::NoHold, QTime());
+ QCUPSSupport::JobHoldUntilWithTime jobHoldWithTime;
+
+ if (m_printDevice) {
+ const QString jobHoldUntilString = m_printDevice->property(PDPK_CupsJobHoldUntil).toString();
+ jobHoldWithTime = QCUPSSupport::parseJobHoldUntil(jobHoldUntilString);
+ }
+
+ setJobHold(jobHoldWithTime.jobHold, jobHoldWithTime.time);
toggleJobHoldTime();
}
@@ -140,12 +168,16 @@ QTime QCupsJobWidget::jobHoldTime() const
void QCupsJobWidget::initJobBilling()
{
- setJobBilling(QString());
+ QString jobBilling;
+ if (m_printDevice)
+ jobBilling = m_printDevice->property(PDPK_CupsJobBilling).toString();
+
+ setJobBilling(jobBilling);
}
void QCupsJobWidget::setJobBilling(const QString &jobBilling)
{
- m_ui.jobBillingLineEdit->insert(jobBilling);
+ m_ui.jobBillingLineEdit->setText(jobBilling);
}
QString QCupsJobWidget::jobBilling() const
@@ -155,7 +187,18 @@ QString QCupsJobWidget::jobBilling() const
void QCupsJobWidget::initJobPriority()
{
- setJobPriority(50);
+ int priority = -1;
+ if (m_printDevice) {
+ bool ok;
+ priority = m_printDevice->property(PDPK_CupsJobPriority).toInt(&ok);
+ if (!ok)
+ priority = -1;
+ }
+
+ if (priority < 0 || priority > 100)
+ priority = 50;
+
+ setJobPriority(priority);
}
void QCupsJobWidget::setJobPriority(int jobPriority)
@@ -186,8 +229,15 @@ void QCupsJobWidget::initBannerPages()
m_ui.endBannerPageCombo->addItem(tr("Secret", "CUPS Banner page"), QVariant::fromValue(QCUPSSupport::Secret));
m_ui.endBannerPageCombo->addItem(tr("Top Secret", "CUPS Banner page"), QVariant::fromValue(QCUPSSupport::TopSecret));
- setStartBannerPage(QCUPSSupport::NoBanner);
- setEndBannerPage(QCUPSSupport::NoBanner);
+ QCUPSSupport::JobSheets jobSheets;
+
+ if (m_printDevice) {
+ const QString jobSheetsString = m_printDevice->property(PDPK_CupsJobSheets).toString();
+ jobSheets = QCUPSSupport::parseJobSheets(jobSheetsString);
+ }
+
+ setStartBannerPage(jobSheets.startBannerPage);
+ setEndBannerPage(jobSheets.endBannerPage);
}
void QCupsJobWidget::setStartBannerPage(const QCUPSSupport::BannerPage bannerPage)
diff --git a/src/printsupport/widgets/qcupsjobwidget_p.h b/src/printsupport/widgets/qcupsjobwidget_p.h
index d66a472509..4b6b047e26 100644
--- a/src/printsupport/widgets/qcupsjobwidget_p.h
+++ b/src/printsupport/widgets/qcupsjobwidget_p.h
@@ -65,16 +65,18 @@ QT_BEGIN_NAMESPACE
class QString;
class QTime;
class QPrinter;
+class QPrintDevice;
class QCupsJobWidget : public QWidget
{
Q_OBJECT
public:
- explicit QCupsJobWidget(QWidget *parent = nullptr);
+ explicit QCupsJobWidget(QPrinter *printer, QPrintDevice *printDevice, QWidget *parent = nullptr);
~QCupsJobWidget();
- void setPrinter(QPrinter *printer);
void setupPrinter();
+ void updateSavedValues();
+ void revertToSavedValues();
private Q_SLOTS:
void toggleJobHoldTime();
@@ -103,8 +105,14 @@ private:
void initBannerPages();
QPrinter *m_printer;
+ QPrintDevice *m_printDevice;
Ui::QCupsJobWidget m_ui;
+ QCUPSSupport::JobHoldUntilWithTime m_savedJobHoldWithTime;
+ QString m_savedJobBilling;
+ int m_savedPriority;
+ QCUPSSupport::JobSheets m_savedJobSheets;
+
Q_DISABLE_COPY(QCupsJobWidget)
};
diff --git a/src/printsupport/widgets/qprintpreviewwidget.cpp b/src/printsupport/widgets/qprintpreviewwidget.cpp
index dc07517397..92370be2bd 100644
--- a/src/printsupport/widgets/qprintpreviewwidget.cpp
+++ b/src/printsupport/widgets/qprintpreviewwidget.cpp
@@ -64,13 +64,13 @@ public:
setCacheMode(DeviceCoordinateCache);
}
- QRectF boundingRect() const Q_DECL_OVERRIDE
+ QRectF boundingRect() const override
{ return brect; }
inline int pageNumber() const
{ return pageNum; }
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget) override;
private:
int pageNum;
@@ -156,7 +156,7 @@ signals:
void resized();
protected:
- void resizeEvent(QResizeEvent* e) Q_DECL_OVERRIDE
+ void resizeEvent(QResizeEvent* e) override
{
{
const QSignalBlocker blocker(verticalScrollBar()); // Don't change page, QTBUG-14517
@@ -165,7 +165,7 @@ protected:
emit resized();
}
- void showEvent(QShowEvent* e) Q_DECL_OVERRIDE
+ void showEvent(QShowEvent* e) override
{
QGraphicsView::showEvent(e);
emit resized();
diff --git a/src/printsupport/widgets/qprintpreviewwidget.h b/src/printsupport/widgets/qprintpreviewwidget.h
index d45cc1a9fb..f11d686602 100644
--- a/src/printsupport/widgets/qprintpreviewwidget.h
+++ b/src/printsupport/widgets/qprintpreviewwidget.h
@@ -80,7 +80,7 @@ public:
ZoomMode zoomMode() const;
int currentPage() const;
int pageCount() const;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
public Q_SLOTS:
void print();
diff --git a/src/sql/doc/snippets/code/doc_src_sql-driver.cpp b/src/sql/doc/snippets/code/doc_src_sql-driver.cpp
index 9fdb49eb45..2c0e824db3 100644
--- a/src/sql/doc/snippets/code/doc_src_sql-driver.cpp
+++ b/src/sql/doc/snippets/code/doc_src_sql-driver.cpp
@@ -97,7 +97,39 @@ column.contains(QRegularExpression("pattern"));
//! [34]
-//! [35]
+//! [36]
+QSqlQuery query(db);
+query.setForwardOnly(true);
+query.exec("SELECT * FROM table");
+while (query.next()) {
+ // Handle changes in every iteration of the loop
+ QVariant v = query.result()->handle();
+ if (qstrcmp(v.typeName(), "PGresult*") == 0) {
+ PGresult *handle = *static_cast<PGresult **>(v.data());
+ if (handle != 0) {
+ // Do something...
+ }
+ }
+}
+//! [36]
+
+
+//! [37]
+int value;
+QSqlQuery query1(db);
+query1.setForwardOnly(true);
+query1.exec("select * FROM table1");
+while (query1.next()) {
+ value = query1.value(0).toInt();
+ if (value == 1) {
+ QSqlQuery query2(db);
+ query2.exec("update table2 set col=2"); // WRONG: This will discard all results of
+ } // query1, and cause the loop to quit
+}
+//! [37]
+
+
+//! [39]
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3");
QString connectString = QStringLiteral(
"DRIVER=/path/to/installation/libodbcHDB.so;"
@@ -106,4 +138,4 @@ QString connectString = QStringLiteral(
"PWD=PASSWORD;"
"SCROLLABLERESULT=true");
db.setDatabaseName(connectString);
-//! [35]
+//! [39]
diff --git a/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc b/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc
index 04ea30915d..d127bdf8a5 100644
--- a/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc
+++ b/src/sql/doc/snippets/code/doc_src_sql-driver.qdoc
@@ -225,3 +225,15 @@ cd $QTDIR/qtbase/src/plugins/sqldrivers
qmake -- OCI_INCDIR=/usr/include/oracle/10.1.0.3/client OCI_LIBDIR=/usr/lib/oracle/10.1.0.3/client/lib "OCI_LIBS=-Wl,-rpath,/usr/lib/oracle/10.1.0.3/client/lib -lclntsh -lnnz10"
make sub-oci
//! [33]
+
+
+//! [35]
+QSqlDatabase: QPSQL driver not loaded
+QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
+Could not create database object
+//! [35]
+
+
+//! [38]
+QPSQLDriver::getResult: Query results lost - probably discarded on executing another SQL query.
+//! [38]
diff --git a/src/sql/doc/src/sql-driver.qdoc b/src/sql/doc/src/sql-driver.qdoc
index 44acb79c46..fd95e89812 100644
--- a/src/sql/doc/src/sql-driver.qdoc
+++ b/src/sql/doc/src/sql-driver.qdoc
@@ -303,7 +303,7 @@
established using the option "SCROLLABLERESULT=TRUE", as the
HANA ODBC driver does not provide scrollable results by default, e.g.:
- \snippet code/doc_src_sql-driver.cpp 35
+ \snippet code/doc_src_sql-driver.cpp 39
If you experience very slow access of the ODBC datasource, make sure
that ODBC call tracing is turned off in the ODBC datasource manager.
@@ -386,6 +386,45 @@
Binary Large Objects are supported through the \c BYTEA field type in
PostgreSQL server versions >= 7.1.
+ \section3 QPSQL Forward-only query support
+
+ To use forward-only queries, you must build the QPSQL plugin with
+ PostreSQL client library version 9.2 or later. If the plugin is
+ built with an older version, then forward-only mode will not be
+ available - calling QSqlQuery::setForwardOnly() with \c true will
+ have no effect.
+
+ \warning If you build the QPSQL plugin with PostgreSQL version 9.2 or later,
+ then you must distribute your application with libpq version 9.2 or later.
+ Otherwise, loading the QPSQL plugin will fail with the following message:
+
+ \snippet code/doc_src_sql-driver.qdoc 35
+
+ While navigating the results in forward-only mode, the handle of
+ QSqlResult may change. Applications that use the low-level handle of
+ SQL result must get a new handle after each call to any of QSqlResult
+ fetch functions. Example:
+
+ \snippet code/doc_src_sql-driver.cpp 36
+
+ While reading the results of a forward-only query with PostgreSQL,
+ the database connection cannot be used to execute other queries.
+ This is a limitation of libpq library. Example:
+
+ \snippet code/doc_src_sql-driver.cpp 37
+
+ This problem will not occur if query1 and query2 use different
+ database connections, or if we execute query2 after the while loop.
+
+ \note Some methods of QSqlDatabase like tables(), primaryIndex()
+ implicity execute SQL queries, so these also cannot be used while
+ navigating the results of forward-only query.
+
+ \note QPSQL will print the following warning if it detects a loss of
+ query results:
+
+ \snippet code/doc_src_sql-driver.qdoc 38
+
\section3 How to Build the QPSQL Plugin on Unix and \macos
You need the PostgreSQL client library and headers installed.
@@ -410,7 +449,7 @@
\target QTDS
\section2 QTDS for Sybase Adaptive Server
- \note TDS is no longer used by MS Sql Server, and is superceded by
+ \note TDS is no longer used by MS Sql Server, and is superseded by
\l{QODBC}{ODBC}. QTDS is obsolete from Qt 4.7.
It is not possible to set the port with QSqlDatabase::setPort() due to limitations in the
diff --git a/src/sql/kernel/qsqlcachedresult_p.h b/src/sql/kernel/qsqlcachedresult_p.h
index 9bcfd49f1a..543a902554 100644
--- a/src/sql/kernel/qsqlcachedresult_p.h
+++ b/src/sql/kernel/qsqlcachedresult_p.h
@@ -78,20 +78,20 @@ protected:
virtual bool gotoNext(ValueCache &values, int index) = 0;
- QVariant data(int i) Q_DECL_OVERRIDE;
- bool isNull(int i) Q_DECL_OVERRIDE;
- bool fetch(int i) Q_DECL_OVERRIDE;
- bool fetchNext() Q_DECL_OVERRIDE;
- bool fetchPrevious() Q_DECL_OVERRIDE;
- bool fetchFirst() Q_DECL_OVERRIDE;
- bool fetchLast() Q_DECL_OVERRIDE;
+ QVariant data(int i) override;
+ bool isNull(int i) override;
+ bool fetch(int i) override;
+ bool fetchNext() override;
+ bool fetchPrevious() override;
+ bool fetchFirst() override;
+ bool fetchLast() override;
int colCount() const;
ValueCache &cache();
- void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
- void detachFromResultSet() Q_DECL_OVERRIDE;
- void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy) Q_DECL_OVERRIDE;
+ void virtual_hook(int id, void *data) override;
+ void detachFromResultSet() override;
+ void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy) override;
private:
bool cacheNext();
};
diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp
index 14374c7ca9..291b35f8a6 100644
--- a/src/sql/kernel/qsqldatabase.cpp
+++ b/src/sql/kernel/qsqldatabase.cpp
@@ -50,6 +50,7 @@
#include "private/qsqlnulldriver_p.h"
#include "qmutex.h"
#include "qhash.h"
+#include "qthread.h"
#include <stdlib.h>
QT_BEGIN_NAMESPACE
@@ -58,11 +59,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QSqlDriverFactoryInterface_iid,
QLatin1String("/sqldrivers")))
-#if !defined(Q_CC_MSVC) || _MSC_VER >= 1900
-// ### Qt6: remove the #ifdef
-const
-#endif
-char *QSqlDatabase::defaultConnection = const_cast<char *>("qt_sql_default_connection");
+const char *QSqlDatabase::defaultConnection = const_cast<char *>("qt_sql_default_connection");
typedef QHash<QString, QSqlDriverCreatorBase*> DriverDict;
@@ -135,6 +132,8 @@ QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) : ref
connOptions = other.connOptions;
driver = other.driver;
precisionPolicy = other.precisionPolicy;
+ if (driver)
+ driver->setNumericalPrecisionPolicy(other.driver->numericalPrecisionPolicy());
}
QSqlDatabasePrivate::~QSqlDatabasePrivate()
@@ -230,6 +229,11 @@ QSqlDatabase QSqlDatabasePrivate::database(const QString& name, bool open)
dict->lock.lockForRead();
QSqlDatabase db = dict->value(name);
dict->lock.unlock();
+ if (db.driver() && db.driver()->thread() != QThread::currentThread()) {
+ qWarning("QSqlDatabasePrivate::database: requested database does not belong to the calling thread.");
+ return QSqlDatabase();
+ }
+
if (db.isValid() && !db.isOpen() && open) {
if (!db.open())
qWarning() << "QSqlDatabasePrivate::database: unable to open database:" << db.lastError().text();
@@ -253,6 +257,8 @@ void QSqlDatabasePrivate::copy(const QSqlDatabasePrivate *other)
port = other->port;
connOptions = other->connOptions;
precisionPolicy = other->precisionPolicy;
+ if (driver)
+ driver->setNumericalPrecisionPolicy(other->driver->numericalPrecisionPolicy());
}
void QSqlDatabasePrivate::disable()
@@ -307,7 +313,7 @@ void QSqlDatabasePrivate::disable()
*/
/*!
- \fn QSqlDriver *QSqlDriverCreator::createObject() const
+ \fn template <class T> QSqlDriver *QSqlDriverCreator<T>::createObject() const
\reimp
*/
diff --git a/src/sql/kernel/qsqldatabase.h b/src/sql/kernel/qsqldatabase.h
index 0b4aca8cdd..3aadab9b2f 100644
--- a/src/sql/kernel/qsqldatabase.h
+++ b/src/sql/kernel/qsqldatabase.h
@@ -64,7 +64,7 @@ template <class T>
class QSqlDriverCreator : public QSqlDriverCreatorBase
{
public:
- QSqlDriver *createObject() const Q_DECL_OVERRIDE { return new T; }
+ QSqlDriver *createObject() const override { return new T; }
};
class Q_SQL_EXPORT QSqlDatabase
@@ -111,12 +111,7 @@ public:
QSqlDriver* driver() const;
- static
-#if !defined(Q_CC_MSVC) || _MSC_VER >= 1900
- // ### Qt6: remove the #ifdef
- const
-#endif
- char *defaultConnection;
+ static const char *defaultConnection;
static QSqlDatabase addDatabase(const QString& type,
const QString& connectionName = QLatin1String(defaultConnection));
diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp
index 6fe5b351dc..2d306e9fae 100644
--- a/src/sql/kernel/qsqldriver.cpp
+++ b/src/sql/kernel/qsqldriver.cpp
@@ -672,7 +672,7 @@ QString QSqlDriver::formatValue(const QSqlField &field, bool trimStrings) const
break;
}
}
- // fall through
+ Q_FALLTHROUGH();
default:
r = field.value().toString();
break;
diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h
index 1296bd5d51..1e03be48d3 100644
--- a/src/sql/kernel/qsqldriver.h
+++ b/src/sql/kernel/qsqldriver.h
@@ -89,7 +89,7 @@ public:
DB2
};
- explicit QSqlDriver(QObject *parent = Q_NULLPTR);
+ explicit QSqlDriver(QObject *parent = nullptr);
~QSqlDriver();
virtual bool isOpen() const;
bool isOpenError() const;
@@ -139,7 +139,7 @@ Q_SIGNALS:
void notification(const QString &name, QSqlDriver::NotificationSource source, const QVariant &payload);
protected:
- QSqlDriver(QSqlDriverPrivate &dd, QObject *parent = Q_NULLPTR);
+ QSqlDriver(QSqlDriverPrivate &dd, QObject *parent = nullptr);
virtual void setOpen(bool o);
virtual void setOpenError(bool e);
virtual void setLastError(const QSqlError& e);
diff --git a/src/sql/kernel/qsqldriverplugin.h b/src/sql/kernel/qsqldriverplugin.h
index c0f4c00943..001368a291 100644
--- a/src/sql/kernel/qsqldriverplugin.h
+++ b/src/sql/kernel/qsqldriverplugin.h
@@ -55,7 +55,7 @@ class Q_SQL_EXPORT QSqlDriverPlugin : public QObject
{
Q_OBJECT
public:
- explicit QSqlDriverPlugin(QObject *parent = Q_NULLPTR);
+ explicit QSqlDriverPlugin(QObject *parent = nullptr);
~QSqlDriverPlugin();
virtual QSqlDriver *create(const QString &key) = 0;
diff --git a/src/sql/kernel/qsqlerror.cpp b/src/sql/kernel/qsqlerror.cpp
index 50b10aab40..41ea497ad7 100644
--- a/src/sql/kernel/qsqlerror.cpp
+++ b/src/sql/kernel/qsqlerror.cpp
@@ -91,6 +91,7 @@ public:
*/
/*!
+ \fn QSqlError::QSqlError(const QString &driverText, const QString &databaseText, ErrorType type, int number)
\obsolete
Constructs an error containing the driver error text \a
@@ -144,6 +145,9 @@ QSqlError::QSqlError(const QString& driverText, const QString& databaseText, Err
Constructs an error containing the driver error text \a
driverText, the database-specific error text \a databaseText, the
type \a type and the error code \a code.
+
+ \note DB2: It is possible for DB2 to report more than one error code.
+ When this happens, \c ; is used as separator between the error codes.
*/
QSqlError::QSqlError(const QString &driverText, const QString &databaseText,
ErrorType type, const QString &code)
diff --git a/src/sql/kernel/qsqlfield.cpp b/src/sql/kernel/qsqlfield.cpp
index a258d44df7..782ab0d71c 100644
--- a/src/sql/kernel/qsqlfield.cpp
+++ b/src/sql/kernel/qsqlfield.cpp
@@ -588,7 +588,6 @@ void QSqlField::setAutoValue(bool autoVal)
\sa tableName()
*/
-
void QSqlField::setTableName(const QString &table)
{
detach();
@@ -598,9 +597,12 @@ void QSqlField::setTableName(const QString &table)
/*!
Returns the tableName of the field.
+ \note When using the QPSQL driver, due to limitations in the libpq library,
+ the \c tableName() field is not populated in a QSqlField resulting
+ from a QSqlRecord obtained by QSqlQuery::record() of a forward-only query.
+
\sa setTableName()
*/
-
QString QSqlField::tableName() const
{
return d->table;
diff --git a/src/sql/kernel/qsqlnulldriver_p.h b/src/sql/kernel/qsqlnulldriver_p.h
index 92d8d30485..7a40199d71 100644
--- a/src/sql/kernel/qsqlnulldriver_p.h
+++ b/src/sql/kernel/qsqlnulldriver_p.h
@@ -66,27 +66,27 @@ public:
{ QSqlResult::setLastError(
QSqlError(QLatin1String("Driver not loaded"), QLatin1String("Driver not loaded"), QSqlError::ConnectionError)); }
protected:
- inline QVariant data(int) Q_DECL_OVERRIDE { return QVariant(); }
- inline bool reset (const QString&) Q_DECL_OVERRIDE { return false; }
- inline bool fetch(int) Q_DECL_OVERRIDE { return false; }
- inline bool fetchFirst() Q_DECL_OVERRIDE { return false; }
- inline bool fetchLast() Q_DECL_OVERRIDE { return false; }
- inline bool isNull(int) Q_DECL_OVERRIDE { return false; }
- inline int size() Q_DECL_OVERRIDE { return -1; }
- inline int numRowsAffected() Q_DECL_OVERRIDE { return 0; }
+ inline QVariant data(int) override { return QVariant(); }
+ inline bool reset (const QString&) override { return false; }
+ inline bool fetch(int) override { return false; }
+ inline bool fetchFirst() override { return false; }
+ inline bool fetchLast() override { return false; }
+ inline bool isNull(int) override { return false; }
+ inline int size() override { return -1; }
+ inline int numRowsAffected() override { return 0; }
- inline void setAt(int) Q_DECL_OVERRIDE {}
- inline void setActive(bool) Q_DECL_OVERRIDE {}
- inline void setLastError(const QSqlError&) Q_DECL_OVERRIDE {}
- inline void setQuery(const QString&) Q_DECL_OVERRIDE {}
- inline void setSelect(bool) Q_DECL_OVERRIDE {}
- inline void setForwardOnly(bool) Q_DECL_OVERRIDE {}
+ inline void setAt(int) override {}
+ inline void setActive(bool) override {}
+ inline void setLastError(const QSqlError&) override {}
+ inline void setQuery(const QString&) override {}
+ inline void setSelect(bool) override {}
+ inline void setForwardOnly(bool) override {}
- inline bool exec() Q_DECL_OVERRIDE { return false; }
- inline bool prepare(const QString&) Q_DECL_OVERRIDE { return false; }
- inline bool savePrepare(const QString&) Q_DECL_OVERRIDE { return false; }
- inline void bindValue(int, const QVariant&, QSql::ParamType) Q_DECL_OVERRIDE {}
- inline void bindValue(const QString&, const QVariant&, QSql::ParamType) Q_DECL_OVERRIDE {}
+ inline bool exec() override { return false; }
+ inline bool prepare(const QString&) override { return false; }
+ inline bool savePrepare(const QString&) override { return false; }
+ inline void bindValue(int, const QVariant&, QSql::ParamType) override {}
+ inline void bindValue(const QString&, const QVariant&, QSql::ParamType) override {}
};
class QSqlNullDriver : public QSqlDriver
@@ -95,16 +95,16 @@ public:
inline QSqlNullDriver(): QSqlDriver()
{ QSqlDriver::setLastError(
QSqlError(QLatin1String("Driver not loaded"), QLatin1String("Driver not loaded"), QSqlError::ConnectionError)); }
- inline bool hasFeature(DriverFeature) const Q_DECL_OVERRIDE { return false; }
- inline bool open(const QString &, const QString &, const QString &, const QString &, int, const QString&) Q_DECL_OVERRIDE
+ inline bool hasFeature(DriverFeature) const override { return false; }
+ inline bool open(const QString &, const QString &, const QString &, const QString &, int, const QString&) override
{ return false; }
- inline void close() Q_DECL_OVERRIDE {}
- inline QSqlResult *createResult() const Q_DECL_OVERRIDE { return new QSqlNullResult(this); }
+ inline void close() override {}
+ inline QSqlResult *createResult() const override { return new QSqlNullResult(this); }
protected:
- inline void setOpen(bool) Q_DECL_OVERRIDE {}
- inline void setOpenError(bool) Q_DECL_OVERRIDE {}
- inline void setLastError(const QSqlError&) Q_DECL_OVERRIDE {}
+ inline void setOpen(bool) override {}
+ inline void setOpenError(bool) override {}
+ inline void setLastError(const QSqlError&) override {}
};
QT_END_NAMESPACE
diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp
index b89d20976f..628bfa1880 100644
--- a/src/sql/kernel/qsqlquery.cpp
+++ b/src/sql/kernel/qsqlquery.cpp
@@ -878,6 +878,14 @@ bool QSqlQuery::isForwardOnly() const
\note Calling setForwardOnly after execution of the query will result
in unexpected results at best, and crashes at worst.
+ \note To make sure the forward-only query completed successfully,
+ the application should check lastError() for an error not only after
+ executing the query, but also after navigating the query results.
+
+ \warning PostgreSQL: While navigating the query results in forward-only
+ mode, do not execute any other SQL command on the same database
+ connection. This will cause the query results to be lost.
+
\sa isForwardOnly(), next(), seek(), QSqlResult::setForwardOnly()
*/
void QSqlQuery::setForwardOnly(bool forward)
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp
index f79c1c71cd..cdb1379502 100644
--- a/src/sql/kernel/qsqlresult.cpp
+++ b/src/sql/kernel/qsqlresult.cpp
@@ -565,6 +565,14 @@ bool QSqlResult::isForwardOnly() const
\note Calling setForwardOnly after execution of the query will result
in unexpected results at best, and crashes at worst.
+ \note To make sure the forward-only query completed successfully,
+ the application should check lastError() for an error not only after
+ executing the query, but also after navigating the query results.
+
+ \warning PostgreSQL: While navigating the query results in forward-only
+ mode, do not execute any other SQL command on the same database
+ connection. This will cause the query results to be lost.
+
\sa isForwardOnly(), fetchNext(), QSqlQuery::setForwardOnly()
*/
void QSqlResult::setForwardOnly(bool forward)
@@ -1002,6 +1010,10 @@ bool QSqlResult::nextResult()
\warning The handle can be NULL if the result was not executed yet.
+ \warning PostgreSQL: in forward-only mode, the handle of QSqlResult can change
+ after calling fetch(), fetchFirst(), fetchLast(), fetchNext(), fetchPrevious(),
+ nextResult().
+
The handle returned here is database-dependent, you should query the type
name of the variant before accessing it.
diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp
index 9d6daa2634..1f590c4ab2 100644
--- a/src/sql/models/qsqlrelationaltablemodel.cpp
+++ b/src/sql/models/qsqlrelationaltablemodel.cpp
@@ -100,6 +100,12 @@ typedef QSqlRelationalTableModelSql Sql;
*/
/*!
+ \fn void QSqlRelation::swap(QSqlRelation &other)
+
+ Swaps \c this with \a other.
+ */
+
+/*!
\fn QString QSqlRelation::tableName() const
Returns the name of the table to which a foreign key refers.
@@ -156,7 +162,7 @@ class QRelatedTableModel : public QSqlTableModel
{
public:
QRelatedTableModel(QRelation *rel, QObject *parent = 0, QSqlDatabase db = QSqlDatabase());
- bool select() Q_DECL_OVERRIDE;
+ bool select() override;
private:
bool firstSelect;
QRelation *relation;
@@ -268,12 +274,12 @@ public:
{}
QString fullyQualifiedFieldName(const QString &tableName, const QString &fieldName) const;
- int nameToIndex(const QString &name) const Q_DECL_OVERRIDE;
+ int nameToIndex(const QString &name) const override;
mutable QVector<QRelation> relations;
QSqlRecord baseRec; // the record without relations
void clearChanges();
- void clearCache() Q_DECL_OVERRIDE;
- void revertCachedRow(int row) Q_DECL_OVERRIDE;
+ void clearCache() override;
+ void revertCachedRow(int row) override;
void translateFieldNames(QSqlRecord &values) const;
QSqlRelationalTableModel::JoinMode joinMode;
diff --git a/src/sql/models/qsqlrelationaltablemodel.h b/src/sql/models/qsqlrelationaltablemodel.h
index f8b08b089f..90b7a6481f 100644
--- a/src/sql/models/qsqlrelationaltablemodel.h
+++ b/src/sql/models/qsqlrelationaltablemodel.h
@@ -88,31 +88,31 @@ public:
LeftJoin
};
- explicit QSqlRelationalTableModel(QObject *parent = Q_NULLPTR,
+ explicit QSqlRelationalTableModel(QObject *parent = nullptr,
QSqlDatabase db = QSqlDatabase());
virtual ~QSqlRelationalTableModel();
- QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::EditRole) override;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
- void clear() Q_DECL_OVERRIDE;
- bool select() Q_DECL_OVERRIDE;
+ void clear() override;
+ bool select() override;
- void setTable(const QString &tableName) Q_DECL_OVERRIDE;
+ void setTable(const QString &tableName) override;
virtual void setRelation(int column, const QSqlRelation &relation);
QSqlRelation relation(int column) const;
virtual QSqlTableModel *relationModel(int column) const;
void setJoinMode( QSqlRelationalTableModel::JoinMode joinMode );
public Q_SLOTS:
- void revertRow(int row) Q_DECL_OVERRIDE;
+ void revertRow(int row) override;
protected:
- QString selectStatement() const Q_DECL_OVERRIDE;
- bool updateRowInTable(int row, const QSqlRecord &values) Q_DECL_OVERRIDE;
- bool insertRowIntoTable(const QSqlRecord &values) Q_DECL_OVERRIDE;
- QString orderByClause() const Q_DECL_OVERRIDE;
+ QString selectStatement() const override;
+ bool updateRowInTable(int row, const QSqlRecord &values) override;
+ bool insertRowIntoTable(const QSqlRecord &values) override;
+ QString orderByClause() const override;
private:
Q_DECLARE_PRIVATE(QSqlRelationalTableModel)
diff --git a/src/sql/models/qsqltablemodel.h b/src/sql/models/qsqltablemodel.h
index 6a62c6993d..77b0517c74 100644
--- a/src/sql/models/qsqltablemodel.h
+++ b/src/sql/models/qsqltablemodel.h
@@ -60,25 +60,25 @@ class Q_SQL_EXPORT QSqlTableModel: public QSqlQueryModel
public:
enum EditStrategy {OnFieldChange, OnRowChange, OnManualSubmit};
- explicit QSqlTableModel(QObject *parent = Q_NULLPTR, QSqlDatabase db = QSqlDatabase());
+ explicit QSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase());
virtual ~QSqlTableModel();
virtual void setTable(const QString &tableName);
QString tableName() const;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
QSqlRecord record() const;
QSqlRecord record(int row) const;
- QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
bool isDirty() const;
bool isDirty(const QModelIndex &index) const;
- void clear() Q_DECL_OVERRIDE;
+ void clear() override;
virtual void setEditStrategy(EditStrategy strategy);
EditStrategy editStrategy() const;
@@ -87,17 +87,17 @@ public:
QSqlDatabase database() const;
int fieldIndex(const QString &fieldName) const;
- void sort(int column, Qt::SortOrder order) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order) override;
virtual void setSort(int column, Qt::SortOrder order);
QString filter() const;
virtual void setFilter(const QString &filter);
- int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
bool insertRecord(int row, const QSqlRecord &record);
bool setRecord(int row, const QSqlRecord &record);
@@ -108,8 +108,8 @@ public Q_SLOTS:
virtual bool select();
virtual bool selectRow(int row);
- bool submit() Q_DECL_OVERRIDE;
- void revert() Q_DECL_OVERRIDE;
+ bool submit() override;
+ void revert() override;
bool submitAll();
void revertAll();
@@ -122,7 +122,7 @@ Q_SIGNALS:
void beforeDelete(int row);
protected:
- QSqlTableModel(QSqlTableModelPrivate &dd, QObject *parent = Q_NULLPTR, QSqlDatabase db = QSqlDatabase());
+ QSqlTableModel(QSqlTableModelPrivate &dd, QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase());
virtual bool updateRowInTable(int row, const QSqlRecord &values);
virtual bool insertRowIntoTable(const QSqlRecord &values);
@@ -132,7 +132,7 @@ protected:
void setPrimaryKey(const QSqlIndex &key);
void setQuery(const QSqlQuery &query);
- QModelIndex indexInQuery(const QModelIndex &item) const Q_DECL_OVERRIDE;
+ QModelIndex indexInQuery(const QModelIndex &item) const override;
QSqlRecord primaryValues(int row) const;
};
diff --git a/src/src.pro b/src/src.pro
index a73729a760..1f7c5d99c1 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -1,6 +1,6 @@
TEMPLATE = subdirs
-QT_FOR_CONFIG += gui-private
+QT_FOR_CONFIG += core-private gui-private
include($$OUT_PWD/corelib/qtcore-config.pri)
include($$OUT_PWD/gui/qtgui-config.pri)
@@ -30,6 +30,10 @@ src_tools_qlalr.target = sub-qlalr
force_bootstrap: src_tools_qlalr.depends = src_tools_bootstrap
else: src_tools_qlalr.depends = src_corelib
+src_tools_tracegen.subdir = tools/tracegen
+src_tools_tracegen.target = sub-tracegen
+src_tools_tracegen.depends = src_tools_bootstrap
+
src_tools_uic.subdir = tools/uic
src_tools_uic.target = sub-uic
force_bootstrap: src_tools_uic.depends = src_tools_bootstrap
@@ -152,8 +156,13 @@ qtConfig(regularexpression):pcre2 {
SUBDIRS += src_3rdparty_pcre2
src_corelib.depends += src_3rdparty_pcre2
}
-SUBDIRS += src_corelib src_tools_qlalr
TOOLS = src_tools_moc src_tools_rcc src_tools_qlalr src_tools_qfloat16_tables
+!force_bootstrap:if(qtConfig(lttng)|qtConfig(etw)) {
+ SUBDIRS += src_tools_tracegen
+ src_corelib.depends += src_tools_tracegen
+ TOOLS += src_tools_tracegen
+}
+SUBDIRS += src_corelib src_tools_qlalr
win32:SUBDIRS += src_winmain
qtConfig(network) {
SUBDIRS += src_network
@@ -222,7 +231,8 @@ android:!android-embedded: SUBDIRS += src_android src_3rdparty_gradle
TR_EXCLUDE = \
src_tools_bootstrap src_tools_moc src_tools_rcc src_tools_uic src_tools_qlalr \
src_tools_bootstrap_dbus src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml \
- src_3rdparty_pcre2 src_3rdparty_harfbuzzng src_3rdparty_freetype
+ src_3rdparty_pcre2 src_3rdparty_harfbuzzng src_3rdparty_freetype \
+ src_tools_tracegen
sub-tools.depends = $$TOOLS
QMAKE_EXTRA_TARGETS = sub-tools
diff --git a/src/testlib/3rdparty/cycle_p.h b/src/testlib/3rdparty/cycle_p.h
index a2924230ad..95e741a82a 100644
--- a/src/testlib/3rdparty/cycle_p.h
+++ b/src/testlib/3rdparty/cycle_p.h
@@ -493,21 +493,4 @@ INLINE_ELAPSED(inline)
#define HAVE_TICK_COUNTER
#endif
-/*----------------------------------------------------------------*/
-/* Symbian */
-#if defined(__SYMBIAN32__) && !defined(HAVE_TICK_COUNTER)
-#include <e32std.h>
-
-typedef TUint32 CycleCounterTicks;
-
-static inline CycleCounterTicks getticks(void)
-{
- return User::FastCounter();
-}
-
-INLINE_ELAPSED(inline)
-
-#define HAVE_TICK_COUNTER
-#endif
-
#endif // QBENCHLIB_CYCLE_H
diff --git a/src/testlib/doc/qttestlib.qdocconf b/src/testlib/doc/qttestlib.qdocconf
index 899f94ec53..1fdb136e78 100644
--- a/src/testlib/doc/qttestlib.qdocconf
+++ b/src/testlib/doc/qttestlib.qdocconf
@@ -1,6 +1,7 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
project = QtTestLib
+moduleheader = QtTest
description = Qt Test Reference Documentation
version = $QT_VERSION
diff --git a/src/testlib/doc/src/qttest-index.qdoc b/src/testlib/doc/src/qttest-index.qdoc
index f5b077e8e8..b3c2be7375 100644
--- a/src/testlib/doc/src/qttest-index.qdoc
+++ b/src/testlib/doc/src/qttest-index.qdoc
@@ -31,7 +31,9 @@
Qt Test provides classes for unit testing Qt applications and libraries.
All public methods are in the \l QTest namespace. In addition, the
- \l QSignalSpy class provides easy introspection for Qt's signals and slots.
+ \l QSignalSpy class provides easy introspection for Qt's signals and slots,
+ and the \l QAbstractItemModelTester allows for non-destructive testing
+ of item models.
\section1 Getting Started
diff --git a/src/testlib/qabstractitemmodeltester.cpp b/src/testlib/qabstractitemmodeltester.cpp
new file mode 100644
index 0000000000..18ae14be3a
--- /dev/null
+++ b/src/testlib/qabstractitemmodeltester.cpp
@@ -0,0 +1,807 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qabstractitemmodeltester.h"
+
+#include <private/qobject_p.h>
+#include <QtCore/QPointer>
+#include <QtCore/QAbstractItemModel>
+#include <QtCore/QStack>
+#include <QtTest/QtTest>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcModelTest, "qt.modeltest")
+
+#define MODELTESTER_VERIFY(statement) \
+do { \
+ if (!verify(static_cast<bool>(statement), #statement, "", __FILE__, __LINE__)) \
+ return; \
+} while (false)
+
+#define MODELTESTER_COMPARE(actual, expected) \
+do { \
+ if (!compare((actual), (expected), #actual, #expected, __FILE__, __LINE__)) \
+ return; \
+} while (false)
+
+class QAbstractItemModelTesterPrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QAbstractItemModelTester)
+public:
+ QAbstractItemModelTesterPrivate(QAbstractItemModel *model, QAbstractItemModelTester::FailureReportingMode failureReportingMode);
+
+ void nonDestructiveBasicTest();
+ void rowAndColumnCount();
+ void hasIndex();
+ void index();
+ void parent();
+ void data();
+
+ void runAllTests();
+ void layoutAboutToBeChanged();
+ void layoutChanged();
+ void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end);
+ void rowsInserted(const QModelIndex &parent, int start, int end);
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+ void rowsRemoved(const QModelIndex &parent, int start, int end);
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
+ void headerDataChanged(Qt::Orientation orientation, int start, int end);
+
+private:
+ void checkChildren(const QModelIndex &parent, int currentDepth = 0);
+
+ bool verify(bool statement, const char *statementStr, const char *description, const char *file, int line);
+
+ template<typename T1, typename T2>
+ bool compare(const T1 &t1, const T2 &t2,
+ const char *actual, const char *expected,
+ const char *file, int line);
+
+ QPointer<QAbstractItemModel> model;
+ QAbstractItemModelTester::FailureReportingMode failureReportingMode;
+
+ struct Changing {
+ QModelIndex parent;
+ int oldSize;
+ QVariant last;
+ QVariant next;
+ };
+ QStack<Changing> insert;
+ QStack<Changing> remove;
+
+ bool fetchingMore;
+
+ QList<QPersistentModelIndex> changing;
+};
+
+/*!
+ \class QAbstractItemModelTester
+ \since 5.11
+ \inmodule QtTest
+
+ \brief The QAbstractItemModelTester class helps testing QAbstractItemModel subclasses.
+
+ The QAbstractItemModelTester class is a utility class to test item models.
+
+ When implementing an item model (that is, a concrete QAbstractItemModel
+ subclass) one must abide to a very strict set of rules that ensure
+ consistency for users of the model (views, proxy models, and so on).
+
+ For instance, for a given index, a model's reimplementation of
+ \l{QAbstractItemModel::hasChildren()}{hasChildren()} must be consistent
+ with the values returned by \l{QAbstractItemModel::rowCount()}{rowCount()}
+ and \l{QAbstractItemModel::columnCount()}{columnCount()}.
+
+ QAbstractItemModelTester helps catching the most common errors in custom
+ item model classes. By performing a series of tests, it
+ will try to check that the model status is consistent at all times. The
+ tests will be repeated automatically every time the model is modified.
+
+ QAbstractItemModelTester employs non-destructive tests, which typically
+ consist in reading data and metadata out of a given item model.
+ QAbstractItemModelTester will also attempt illegal modifications of
+ the model. In models which are properly implemented, such attempts
+ should be rejected, and no data should be changed as a consequence.
+
+ \section1 Usage
+
+ Using QAbstractItemModelTester is straightforward. In a \l{Qt Test Overview}{test case}
+ it is sufficient to create an instance, passing the model that
+ needs to be tested to the constructor:
+
+ \code
+ MyModel *modelToBeTested = ...;
+ auto tester = new QAbstractItemModelTester(modelToBeTested);
+ \endcode
+
+ QAbstractItemModelTester will report testing failures through the
+ Qt Test logging mechanisms.
+
+ It is also possible to use QAbstractItemModelTester outside of a test case.
+ For instance, it may be useful to test an item model used by an application
+ without the need of building an explicit unit test for such a model (which
+ might be challenging). In order to use QAbstractItemModelTester outside of
+ a test case, pass one of the \c QAbstractItemModelTester::FailureReportingMode
+ enumerators to its constructor, therefore specifying how failures should
+ be logged.
+
+ QAbstractItemModelTester may also report additional debugging information
+ as logging messages under the \c qt.modeltest logging category. Such
+ debug logging is disabled by default; refer to the
+ QLoggingCategory documentation to learn how to enable it.
+
+ \note While QAbstractItemModelTester is a valid help for development and
+ testing of custom item models, it does not (and cannot) catch all possible
+ problems in QAbstractItemModel subclasses. Notably, it will never perform
+ meaningful destructive testing of a model, which must be therefore tested
+ separately.
+
+ \sa {Model/View Programming}, QAbstractItemModel
+*/
+
+/*!
+ \enum QAbstractItemModelTester::FailureReportingMode
+
+ This enumeration specifies how QAbstractItemModelTester should report
+ a failure when it tests a QAbstractItemModel subclass.
+
+ \value QtTest The failures will be reported through
+ QtTest's logging mechanism.
+
+ \value Warning The failures will be reported as
+ warning messages in the \c{qt.modeltest} logging category.
+
+ \value Fatal A failure will cause immediate and
+ abnormal program termination. The reason for the failure will be reported
+ using \c{qFatal()}.
+*/
+
+/*!
+ Creates a model tester instance, with the given \a parent, that will test
+ the model \a model.
+*/
+QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent)
+ : QAbstractItemModelTester(model, FailureReportingMode::QtTest, parent)
+{
+}
+
+/*!
+ Creates a model tester instance, with the given \a parent, that will test
+ the model \a model, using the specified \a mode to report test failures.
+
+ \sa QAbstractItemModelTester::FailureReportingMode
+*/
+QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, FailureReportingMode mode, QObject *parent)
+ : QObject(*new QAbstractItemModelTesterPrivate(model, mode), parent)
+{
+ if (!model)
+ qFatal("%s: model must not be null", Q_FUNC_INFO);
+
+ Q_D(QAbstractItemModelTester);
+
+ const auto &runAllTests = [d] { d->runAllTests(); };
+
+ connect(model, &QAbstractItemModel::columnsAboutToBeInserted,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::columnsAboutToBeRemoved,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::columnsInserted,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::columnsRemoved,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::dataChanged,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::headerDataChanged,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::layoutAboutToBeChanged,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::layoutChanged,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::modelReset,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::rowsAboutToBeInserted,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::rowsAboutToBeRemoved,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::rowsInserted,
+ this, runAllTests);
+ connect(model, &QAbstractItemModel::rowsRemoved,
+ this, runAllTests);
+
+ // Special checks for changes
+ connect(model, &QAbstractItemModel::layoutAboutToBeChanged,
+ this, [d]{ d->layoutAboutToBeChanged(); });
+ connect(model, &QAbstractItemModel::layoutChanged,
+ this, [d]{ d->layoutChanged(); });
+
+ connect(model, &QAbstractItemModel::rowsAboutToBeInserted,
+ this, [d](const QModelIndex &parent, int start, int end) { d->rowsAboutToBeInserted(parent, start, end); });
+ connect(model, &QAbstractItemModel::rowsAboutToBeRemoved,
+ this, [d](const QModelIndex &parent, int start, int end) { d->rowsAboutToBeRemoved(parent, start, end); });
+ connect(model, &QAbstractItemModel::rowsInserted,
+ this, [d](const QModelIndex &parent, int start, int end) { d->rowsInserted(parent, start, end); });
+ connect(model, &QAbstractItemModel::rowsRemoved,
+ this, [d](const QModelIndex &parent, int start, int end) { d->rowsRemoved(parent, start, end); });
+ connect(model, &QAbstractItemModel::dataChanged,
+ this, [d](const QModelIndex &topLeft, const QModelIndex &bottomRight) { d->dataChanged(topLeft, bottomRight); });
+ connect(model, &QAbstractItemModel::headerDataChanged,
+ this, [d](Qt::Orientation orientation, int start, int end) { d->headerDataChanged(orientation, start, end); });
+
+ runAllTests();
+}
+
+/*!
+ Returns the model that this instance is testing.
+*/
+QAbstractItemModel *QAbstractItemModelTester::model() const
+{
+ Q_D(const QAbstractItemModelTester);
+ return d->model.data();
+}
+
+/*!
+ Returns the mode that this instancing is using to report test failures.
+
+ \sa QAbstractItemModelTester::FailureReportingMode
+*/
+QAbstractItemModelTester::FailureReportingMode QAbstractItemModelTester::failureReportingMode() const
+{
+ Q_D(const QAbstractItemModelTester);
+ return d->failureReportingMode;
+}
+
+QAbstractItemModelTesterPrivate::QAbstractItemModelTesterPrivate(QAbstractItemModel *model, QAbstractItemModelTester::FailureReportingMode failureReportingMode)
+ : model(model),
+ failureReportingMode(failureReportingMode),
+ fetchingMore(false)
+{
+}
+
+void QAbstractItemModelTesterPrivate::runAllTests()
+{
+ if (fetchingMore)
+ return;
+ nonDestructiveBasicTest();
+ rowAndColumnCount();
+ hasIndex();
+ index();
+ parent();
+ data();
+}
+
+/*
+ nonDestructiveBasicTest tries to call a number of the basic functions (not all)
+ to make sure the model doesn't outright segfault, testing the functions that makes sense.
+*/
+void QAbstractItemModelTesterPrivate::nonDestructiveBasicTest()
+{
+ MODELTESTER_VERIFY(!model->buddy(QModelIndex()).isValid());
+ model->canFetchMore(QModelIndex());
+ MODELTESTER_VERIFY(model->columnCount(QModelIndex()) >= 0);
+ fetchingMore = true;
+ model->fetchMore(QModelIndex());
+ fetchingMore = false;
+ Qt::ItemFlags flags = model->flags(QModelIndex());
+ MODELTESTER_VERIFY(flags == Qt::ItemIsDropEnabled || flags == 0);
+ model->hasChildren(QModelIndex());
+ model->hasIndex(0, 0);
+ QVariant cache;
+ model->match(QModelIndex(), -1, cache);
+ model->mimeTypes();
+ MODELTESTER_VERIFY(!model->parent(QModelIndex()).isValid());
+ MODELTESTER_VERIFY(model->rowCount() >= 0);
+ model->span(QModelIndex());
+ model->supportedDropActions();
+ model->roleNames();
+}
+
+/*
+ Tests model's implementation of QAbstractItemModel::rowCount(),
+ columnCount() and hasChildren().
+
+ Models that are dynamically populated are not as fully tested here.
+ */
+void QAbstractItemModelTesterPrivate::rowAndColumnCount()
+{
+ if (!model->hasChildren())
+ return;
+
+ QModelIndex topIndex = model->index(0, 0, QModelIndex());
+
+ // check top row
+ int rows = model->rowCount(topIndex);
+ MODELTESTER_VERIFY(rows >= 0);
+
+ int columns = model->columnCount(topIndex);
+ MODELTESTER_VERIFY(columns >= 0);
+
+ if (rows == 0 || columns == 0)
+ return;
+
+ MODELTESTER_VERIFY(model->hasChildren(topIndex));
+
+ QModelIndex secondLevelIndex = model->index(0, 0, topIndex);
+ MODELTESTER_VERIFY(secondLevelIndex.isValid());
+
+ rows = model->rowCount(secondLevelIndex);
+ MODELTESTER_VERIFY(rows >= 0);
+
+ columns = model->columnCount(secondLevelIndex);
+ MODELTESTER_VERIFY(columns >= 0);
+
+ if (rows == 0 || columns == 0)
+ return;
+
+ MODELTESTER_VERIFY(model->hasChildren(secondLevelIndex));
+
+ // rowCount() / columnCount() are tested more extensively in checkChildren()
+}
+
+/*
+ Tests model's implementation of QAbstractItemModel::hasIndex()
+ */
+void QAbstractItemModelTesterPrivate::hasIndex()
+{
+ // Make sure that invalid values returns an invalid index
+ MODELTESTER_VERIFY(!model->hasIndex(-2, -2));
+ MODELTESTER_VERIFY(!model->hasIndex(-2, 0));
+ MODELTESTER_VERIFY(!model->hasIndex(0, -2));
+
+ const int rows = model->rowCount();
+ const int columns = model->columnCount();
+
+ // check out of bounds
+ MODELTESTER_VERIFY(!model->hasIndex(rows, columns));
+ MODELTESTER_VERIFY(!model->hasIndex(rows + 1, columns + 1));
+
+ if (rows > 0 && columns > 0)
+ MODELTESTER_VERIFY(model->hasIndex(0, 0));
+
+ // hasIndex() is tested more extensively in checkChildren(),
+ // but this catches the big mistakes
+}
+
+/*
+ Tests model's implementation of QAbstractItemModel::index()
+ */
+void QAbstractItemModelTesterPrivate::index()
+{
+ const int rows = model->rowCount();
+ const int columns = model->columnCount();
+
+ for (int row = 0; row < rows; ++row) {
+ for (int column = 0; column < columns; ++column) {
+ // Make sure that the same index is *always* returned
+ QModelIndex a = model->index(row, column);
+ QModelIndex b = model->index(row, column);
+ MODELTESTER_VERIFY(a.isValid());
+ MODELTESTER_VERIFY(b.isValid());
+ MODELTESTER_COMPARE(a, b);
+ }
+ }
+
+ // index() is tested more extensively in checkChildren(),
+ // but this catches the big mistakes
+}
+
+/*
+ Tests model's implementation of QAbstractItemModel::parent()
+ */
+void QAbstractItemModelTesterPrivate::parent()
+{
+ // Make sure the model won't crash and will return an invalid QModelIndex
+ // when asked for the parent of an invalid index.
+ MODELTESTER_VERIFY(!model->parent(QModelIndex()).isValid());
+
+ if (!model->hasChildren())
+ return;
+
+ // Column 0 | Column 1 |
+ // QModelIndex() | |
+ // \- topIndex | topIndex1 |
+ // \- childIndex | childIndex1 |
+
+ // Common error test #1, make sure that a top level index has a parent
+ // that is a invalid QModelIndex.
+ QModelIndex topIndex = model->index(0, 0, QModelIndex());
+ MODELTESTER_VERIFY(!model->parent(topIndex).isValid());
+
+ // Common error test #2, make sure that a second level index has a parent
+ // that is the first level index.
+ if (model->hasChildren(topIndex)) {
+ QModelIndex childIndex = model->index(0, 0, topIndex);
+ MODELTESTER_VERIFY(childIndex.isValid());
+ MODELTESTER_COMPARE(model->parent(childIndex), topIndex);
+ }
+
+ // Common error test #3, the second column should NOT have the same children
+ // as the first column in a row.
+ // Usually the second column shouldn't have children.
+ if (model->hasIndex(0, 1)) {
+ QModelIndex topIndex1 = model->index(0, 1, QModelIndex());
+ MODELTESTER_VERIFY(topIndex1.isValid());
+ if (model->hasChildren(topIndex) && model->hasChildren(topIndex1)) {
+ QModelIndex childIndex = model->index(0, 0, topIndex);
+ MODELTESTER_VERIFY(childIndex.isValid());
+ QModelIndex childIndex1 = model->index(0, 0, topIndex1);
+ MODELTESTER_VERIFY(childIndex1.isValid());
+ MODELTESTER_VERIFY(childIndex != childIndex1);
+ }
+ }
+
+ // Full test, walk n levels deep through the model making sure that all
+ // parent's children correctly specify their parent.
+ checkChildren(QModelIndex());
+}
+
+/*
+ Called from the parent() test.
+
+ A model that returns an index of parent X should also return X when asking
+ for the parent of the index.
+
+ This recursive function does pretty extensive testing on the whole model in an
+ effort to catch edge cases.
+
+ This function assumes that rowCount(), columnCount() and index() already work.
+ If they have a bug it will point it out, but the above tests should have already
+ found the basic bugs because it is easier to figure out the problem in
+ those tests then this one.
+ */
+void QAbstractItemModelTesterPrivate::checkChildren(const QModelIndex &parent, int currentDepth)
+{
+ // First just try walking back up the tree.
+ QModelIndex p = parent;
+ while (p.isValid())
+ p = p.parent();
+
+ // For models that are dynamically populated
+ if (model->canFetchMore(parent)) {
+ fetchingMore = true;
+ model->fetchMore(parent);
+ fetchingMore = false;
+ }
+
+ const int rows = model->rowCount(parent);
+ const int columns = model->columnCount(parent);
+
+ if (rows > 0)
+ MODELTESTER_VERIFY(model->hasChildren(parent));
+
+ // Some further testing against rows(), columns(), and hasChildren()
+ MODELTESTER_VERIFY(rows >= 0);
+ MODELTESTER_VERIFY(columns >= 0);
+ if (rows > 0 && columns > 0)
+ MODELTESTER_VERIFY(model->hasChildren(parent));
+
+ const QModelIndex topLeftChild = model->index(0, 0, parent);
+
+ MODELTESTER_VERIFY(!model->hasIndex(rows, 0, parent));
+ MODELTESTER_VERIFY(!model->hasIndex(rows + 1, 0, parent));
+
+ for (int r = 0; r < rows; ++r) {
+ MODELTESTER_VERIFY(!model->hasIndex(r, columns, parent));
+ MODELTESTER_VERIFY(!model->hasIndex(r, columns + 1, parent));
+ for (int c = 0; c < columns; ++c) {
+ MODELTESTER_VERIFY(model->hasIndex(r, c, parent));
+ QModelIndex index = model->index(r, c, parent);
+ // rowCount() and columnCount() said that it existed...
+ if (!index.isValid())
+ qCWarning(lcModelTest) << "Got invalid index at row=" << r << "col=" << c << "parent=" << parent;
+ MODELTESTER_VERIFY(index.isValid());
+
+ // index() should always return the same index when called twice in a row
+ QModelIndex modifiedIndex = model->index(r, c, parent);
+ MODELTESTER_COMPARE(index, modifiedIndex);
+
+ {
+ const QModelIndex sibling = model->sibling(r, c, topLeftChild);
+ MODELTESTER_COMPARE(index, sibling);
+ }
+ {
+ const QModelIndex sibling = topLeftChild.sibling(r, c);
+ MODELTESTER_COMPARE(index, sibling);
+ }
+
+ // Some basic checking on the index that is returned
+ MODELTESTER_COMPARE(index.model(), model);
+ MODELTESTER_COMPARE(index.row(), r);
+ MODELTESTER_COMPARE(index.column(), c);
+
+ // If the next test fails here is some somewhat useful debug you play with.
+ if (model->parent(index) != parent) {
+ qCWarning(lcModelTest) << "Inconsistent parent() implementation detected:";
+ qCWarning(lcModelTest) << " index=" << index << "exp. parent=" << parent << "act. parent=" << model->parent(index);
+ qCWarning(lcModelTest) << " row=" << r << "col=" << c << "depth=" << currentDepth;
+ qCWarning(lcModelTest) << " data for child" << model->data(index).toString();
+ qCWarning(lcModelTest) << " data for parent" << model->data(parent).toString();
+ }
+
+ // Check that we can get back our real parent.
+ MODELTESTER_COMPARE(model->parent(index), parent);
+
+ QPersistentModelIndex persistentIndex = index;
+
+ // recursively go down the children
+ if (model->hasChildren(index) && currentDepth < 10)
+ checkChildren(index, ++currentDepth);
+
+ // make sure that after testing the children that the index doesn't change.
+ QModelIndex newerIndex = model->index(r, c, parent);
+ MODELTESTER_COMPARE(persistentIndex, newerIndex);
+ }
+ }
+}
+
+/*
+ Tests model's implementation of QAbstractItemModel::data()
+ */
+void QAbstractItemModelTesterPrivate::data()
+{
+ if (!model->hasChildren())
+ return;
+
+ MODELTESTER_VERIFY(model->index(0, 0).isValid());
+
+ // General Purpose roles that should return a QString
+ QVariant variant;
+ variant = model->data(model->index(0, 0), Qt::DisplayRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QString>());
+ variant = model->data(model->index(0, 0), Qt::ToolTipRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QString>());
+ variant = model->data(model->index(0, 0), Qt::StatusTipRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QString>());
+ variant = model->data(model->index(0, 0), Qt::WhatsThisRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QString>());
+
+ // General Purpose roles that should return a QSize
+ variant = model->data(model->index(0, 0), Qt::SizeHintRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QSize>());
+
+ // Check that the alignment is one we know about
+ QVariant textAlignmentVariant = model->data(model->index(0, 0), Qt::TextAlignmentRole);
+ if (textAlignmentVariant.isValid()) {
+ Qt::Alignment alignment = textAlignmentVariant.value<Qt::Alignment>();
+ MODELTESTER_COMPARE(alignment, (alignment & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask)));
+ }
+
+ // Check that the "check state" is one we know about.
+ QVariant checkStateVariant = model->data(model->index(0, 0), Qt::CheckStateRole);
+ if (checkStateVariant.isValid()) {
+ int state = checkStateVariant.toInt();
+ MODELTESTER_VERIFY(state == Qt::Unchecked
+ || state == Qt::PartiallyChecked
+ || state == Qt::Checked);
+ }
+
+ Q_Q(QAbstractItemModelTester);
+
+ if (!QTestPrivate::testDataGuiRoles(q))
+ return;
+}
+
+/*
+ Store what is about to be inserted to make sure it actually happens
+
+ \sa rowsInserted()
+ */
+void QAbstractItemModelTesterPrivate::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
+{
+ qCDebug(lcModelTest) << "rowsAboutToBeInserted"
+ << "start=" << start << "end=" << end << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent)
+ << "last before insertion=" << model->index(start - 1, 0, parent) << model->data(model->index(start - 1, 0, parent));
+
+ Changing c;
+ c.parent = parent;
+ c.oldSize = model->rowCount(parent);
+ c.last = (start - 1 >= 0) ? model->index(start - 1, 0, parent).data() : QVariant();
+ c.next = (start < c.oldSize) ? model->index(start, 0, parent).data() : QVariant();
+ insert.push(c);
+}
+
+/*
+ Confirm that what was said was going to happen actually did
+
+ \sa rowsAboutToBeInserted()
+ */
+void QAbstractItemModelTesterPrivate::rowsInserted(const QModelIndex &parent, int start, int end)
+{
+ qCDebug(lcModelTest) << "rowsInserted"
+ << "start=" << start << "end=" << end << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent);
+
+ for (int i = start; i <= end; ++i) {
+ qCDebug(lcModelTest) << " itemWasInserted:" << i
+ << model->index(i, 0, parent).data();
+ }
+
+
+ Changing c = insert.pop();
+ MODELTESTER_COMPARE(parent, c.parent);
+
+ MODELTESTER_COMPARE(model->rowCount(parent), c.oldSize + (end - start + 1));
+ if (start - 1 >= 0)
+ MODELTESTER_COMPARE(model->data(model->index(start - 1, 0, c.parent)), c.last);
+
+ if (end + 1 < model->rowCount(c.parent)) {
+ if (c.next != model->data(model->index(end + 1, 0, c.parent))) {
+ qDebug() << start << end;
+ for (int i = 0; i < model->rowCount(); ++i)
+ qDebug() << model->index(i, 0).data().toString();
+ qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent));
+ }
+
+ MODELTESTER_COMPARE(model->data(model->index(end + 1, 0, c.parent)), c.next);
+ }
+}
+
+void QAbstractItemModelTesterPrivate::layoutAboutToBeChanged()
+{
+ for (int i = 0; i < qBound(0, model->rowCount(), 100); ++i)
+ changing.append(QPersistentModelIndex(model->index(i, 0)));
+}
+
+void QAbstractItemModelTesterPrivate::layoutChanged()
+{
+ for (int i = 0; i < changing.count(); ++i) {
+ QPersistentModelIndex p = changing[i];
+ MODELTESTER_COMPARE(model->index(p.row(), p.column(), p.parent()), QModelIndex(p));
+ }
+ changing.clear();
+}
+
+/*
+ Store what is about to be inserted to make sure it actually happens
+
+ \sa rowsRemoved()
+ */
+void QAbstractItemModelTesterPrivate::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
+{
+ qCDebug(lcModelTest) << "rowsAboutToBeRemoved"
+ << "start=" << start << "end=" << end << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent)
+ << "last before removal=" << model->index(start - 1, 0, parent) << model->data(model->index(start - 1, 0, parent));
+
+ Changing c;
+ c.parent = parent;
+ c.oldSize = model->rowCount(parent);
+ c.last = model->data(model->index(start - 1, 0, parent));
+ c.next = model->data(model->index(end + 1, 0, parent));
+ remove.push(c);
+}
+
+/*
+ Confirm that what was said was going to happen actually did
+
+ \sa rowsAboutToBeRemoved()
+ */
+void QAbstractItemModelTesterPrivate::rowsRemoved(const QModelIndex &parent, int start, int end)
+{
+ qCDebug(lcModelTest) << "rowsRemoved"
+ << "start=" << start << "end=" << end << "parent=" << parent
+ << "parent data=" << model->data(parent).toString()
+ << "current count of parent=" << model->rowCount(parent);
+
+ Changing c = remove.pop();
+ MODELTESTER_COMPARE(parent, c.parent);
+ MODELTESTER_COMPARE(model->rowCount(parent), c.oldSize - (end - start + 1));
+ MODELTESTER_COMPARE(model->data(model->index(start - 1, 0, c.parent)), c.last);
+ MODELTESTER_COMPARE(model->data(model->index(start, 0, c.parent)), c.next);
+}
+
+void QAbstractItemModelTesterPrivate::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+{
+ MODELTESTER_VERIFY(topLeft.isValid());
+ MODELTESTER_VERIFY(bottomRight.isValid());
+ QModelIndex commonParent = bottomRight.parent();
+ MODELTESTER_COMPARE(topLeft.parent(), commonParent);
+ MODELTESTER_VERIFY(topLeft.row() <= bottomRight.row());
+ MODELTESTER_VERIFY(topLeft.column() <= bottomRight.column());
+ int rowCount = model->rowCount(commonParent);
+ int columnCount = model->columnCount(commonParent);
+ MODELTESTER_VERIFY(bottomRight.row() < rowCount);
+ MODELTESTER_VERIFY(bottomRight.column() < columnCount);
+}
+
+void QAbstractItemModelTesterPrivate::headerDataChanged(Qt::Orientation orientation, int start, int end)
+{
+ MODELTESTER_VERIFY(start >= 0);
+ MODELTESTER_VERIFY(end >= 0);
+ MODELTESTER_VERIFY(start <= end);
+ int itemCount = orientation == Qt::Vertical ? model->rowCount() : model->columnCount();
+ MODELTESTER_VERIFY(start < itemCount);
+ MODELTESTER_VERIFY(end < itemCount);
+}
+
+bool QAbstractItemModelTesterPrivate::verify(bool statement,
+ const char *statementStr, const char *description,
+ const char *file, int line)
+{
+ static const char formatString[] = "FAIL! %s (%s) returned FALSE (%s:%d)";
+
+ switch (failureReportingMode) {
+ case QAbstractItemModelTester::FailureReportingMode::QtTest:
+ return QTest::qVerify(statement, statementStr, description, file, line);
+ break;
+
+ case QAbstractItemModelTester::FailureReportingMode::Warning:
+ if (!statement)
+ qCWarning(lcModelTest, formatString, statementStr, description, file, line);
+ break;
+
+ case QAbstractItemModelTester::FailureReportingMode::Fatal:
+ if (!statement)
+ qFatal(formatString, statementStr, description, file, line);
+ break;
+ }
+
+ return statement;
+}
+
+
+template<typename T1, typename T2>
+bool QAbstractItemModelTesterPrivate::compare(const T1 &t1, const T2 &t2,
+ const char *actual, const char *expected,
+ const char *file, int line)
+{
+ const bool result = static_cast<bool>(t1 == t2);
+
+ static const char formatString[] = "FAIL! Compared values are not the same:\n Actual (%s) %s\n Expected (%s) %s\n (%s:%d)";
+
+ switch (failureReportingMode) {
+ case QAbstractItemModelTester::FailureReportingMode::QtTest:
+ return QTest::qCompare(t1, t2, actual, expected, file, line);
+ break;
+
+ case QAbstractItemModelTester::FailureReportingMode::Warning:
+ if (!result)
+ qCWarning(lcModelTest, formatString, actual, QTest::toString(t1), expected, QTest::toString(t2), file, line);
+ break;
+
+ case QAbstractItemModelTester::FailureReportingMode::Fatal:
+ if (!result)
+ qFatal(formatString, actual, QTest::toString(t1), expected, QTest::toString(t2), file, line);
+ break;
+ }
+
+ return result;
+}
+
+
+QT_END_NAMESPACE
diff --git a/src/testlib/qabstractitemmodeltester.h b/src/testlib/qabstractitemmodeltester.h
new file mode 100644
index 0000000000..617e189817
--- /dev/null
+++ b/src/testlib/qabstractitemmodeltester.h
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTITEMMODELTESTER_H
+#define QABSTRACTITEMMODELTESTER_H
+
+#include <QtCore/QObject>
+#include <QtTest/qtest_global.h>
+
+#ifdef QT_GUI_LIB
+#include <QtGui/QFont>
+#include <QtGui/QColor>
+#include <QtGui/QBrush>
+#include <QtGui/QPixmap>
+#include <QtGui/QImage>
+#include <QtGui/QIcon>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class QAbstractItemModel;
+class QAbstractItemModelTester;
+class QAbstractItemModelTesterPrivate;
+
+namespace QTestPrivate {
+inline bool testDataGuiRoles(QAbstractItemModelTester *tester);
+}
+
+class Q_TESTLIB_EXPORT QAbstractItemModelTester : public QObject
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QAbstractItemModelTester)
+
+public:
+ enum class FailureReportingMode {
+ QtTest,
+ Warning,
+ Fatal
+ };
+
+ QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent = nullptr);
+ QAbstractItemModelTester(QAbstractItemModel *model, FailureReportingMode mode, QObject *parent = nullptr);
+
+ QAbstractItemModel *model() const;
+ FailureReportingMode failureReportingMode() const;
+
+private:
+ friend inline bool QTestPrivate::testDataGuiRoles(QAbstractItemModelTester *tester);
+ bool verify(bool statement, const char *statementStr, const char *description, const char *file, int line);
+};
+
+namespace QTestPrivate {
+inline bool testDataGuiRoles(QAbstractItemModelTester *tester)
+{
+#ifdef QT_GUI_LIB
+
+#define MODELTESTER_VERIFY(statement) \
+do { \
+ if (!tester->verify(static_cast<bool>(statement), #statement, "", __FILE__, __LINE__)) \
+ return false; \
+} while (false)
+
+ const auto model = tester->model();
+ Q_ASSERT(model);
+
+ if (!model->hasChildren())
+ return true;
+
+ QVariant variant;
+
+ variant = model->data(model->index(0, 0), Qt::DecorationRole);
+ if (variant.isValid()) {
+ MODELTESTER_VERIFY(variant.canConvert<QPixmap>()
+ || variant.canConvert<QImage>()
+ || variant.canConvert<QIcon>()
+ || variant.canConvert<QColor>()
+ || variant.canConvert<QBrush>());
+ }
+
+ // General Purpose roles that should return a QFont
+ variant = model->data(model->index(0, 0), Qt::FontRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QFont>());
+
+ // General Purpose roles that should return a QColor or a QBrush
+ variant = model->data(model->index(0, 0), Qt::BackgroundColorRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QColor>() || variant.canConvert<QBrush>());
+
+ variant = model->data(model->index(0, 0), Qt::TextColorRole);
+ if (variant.isValid())
+ MODELTESTER_VERIFY(variant.canConvert<QColor>() || variant.canConvert<QBrush>());
+
+#undef MODELTESTER_VERIFY
+
+#else
+ Q_UNUSED(tester);
+#endif // QT_GUI_LIB
+
+ return true;
+}
+} // namespaceQTestPrivate
+
+QT_END_NAMESPACE
+
+#endif // QABSTRACTITEMMODELTESTER_H
diff --git a/src/testlib/qbenchmarkperfevents.cpp b/src/testlib/qbenchmarkperfevents.cpp
index d6db40ce52..91f0792338 100644
--- a/src/testlib/qbenchmarkperfevents.cpp
+++ b/src/testlib/qbenchmarkperfevents.cpp
@@ -106,7 +106,9 @@ static void initPerf()
}
}
-/*!
+// This class does not exist in the API so it's qdoc comment marker was removed.
+
+/*
\class QBenchmarkPerfEvents
\brief The Linux perf events benchmark backend
diff --git a/src/testlib/qbenchmarkperfevents_p.h b/src/testlib/qbenchmarkperfevents_p.h
index 085dc620d7..86ba556549 100644
--- a/src/testlib/qbenchmarkperfevents_p.h
+++ b/src/testlib/qbenchmarkperfevents_p.h
@@ -60,16 +60,16 @@ class QBenchmarkPerfEventsMeasurer : public QBenchmarkMeasurerBase
public:
QBenchmarkPerfEventsMeasurer();
~QBenchmarkPerfEventsMeasurer();
- virtual void init() Q_DECL_OVERRIDE;
- virtual void start() Q_DECL_OVERRIDE;
- virtual qint64 checkpoint() Q_DECL_OVERRIDE;
- virtual qint64 stop() Q_DECL_OVERRIDE;
- virtual bool isMeasurementAccepted(qint64 measurement) Q_DECL_OVERRIDE;
- virtual int adjustIterationCount(int suggestion) Q_DECL_OVERRIDE;
- virtual int adjustMedianCount(int suggestion) Q_DECL_OVERRIDE;
- virtual bool repeatCount() Q_DECL_OVERRIDE { return 1; }
- virtual bool needsWarmupIteration() Q_DECL_OVERRIDE { return true; }
- virtual QTest::QBenchmarkMetric metricType() Q_DECL_OVERRIDE;
+ virtual void init() override;
+ virtual void start() override;
+ virtual qint64 checkpoint() override;
+ virtual qint64 stop() override;
+ virtual bool isMeasurementAccepted(qint64 measurement) override;
+ virtual int adjustIterationCount(int suggestion) override;
+ virtual int adjustMedianCount(int suggestion) override;
+ virtual bool repeatCount() override { return 1; }
+ virtual bool needsWarmupIteration() override { return true; }
+ virtual QTest::QBenchmarkMetric metricType() override;
static bool isAvailable();
static QTest::QBenchmarkMetric metricForEvent(quint32 type, quint64 event_id);
diff --git a/src/testlib/qcsvbenchmarklogger_p.h b/src/testlib/qcsvbenchmarklogger_p.h
index f321494e8a..5840aee0f5 100644
--- a/src/testlib/qcsvbenchmarklogger_p.h
+++ b/src/testlib/qcsvbenchmarklogger_p.h
@@ -61,18 +61,18 @@ public:
QCsvBenchmarkLogger(const char *filename);
~QCsvBenchmarkLogger();
- void startLogging() Q_DECL_OVERRIDE;
- void stopLogging() Q_DECL_OVERRIDE;
+ void startLogging() override;
+ void stopLogging() override;
- void enterTestFunction(const char *function) Q_DECL_OVERRIDE;
- void leaveTestFunction() Q_DECL_OVERRIDE;
+ void enterTestFunction(const char *function) override;
+ void leaveTestFunction() override;
void addIncident(IncidentTypes type, const char *description,
- const char *file = 0, int line = 0) Q_DECL_OVERRIDE;
- void addBenchmarkResult(const QBenchmarkResult &result) Q_DECL_OVERRIDE;
+ const char *file = 0, int line = 0) override;
+ void addBenchmarkResult(const QBenchmarkResult &result) override;
void addMessage(MessageTypes type, const QString &message,
- const char *file = 0, int line = 0) Q_DECL_OVERRIDE;
+ const char *file = 0, int line = 0) override;
};
QT_END_NAMESPACE
diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp
index 77959341cf..25c9655691 100644
--- a/src/testlib/qplaintestlogger.cpp
+++ b/src/testlib/qplaintestlogger.cpp
@@ -223,38 +223,47 @@ void QPlainTestLogger::outputMessage(const char *str)
outputString(str);
}
+static QTestCharBuffer testIdentifier()
+{
+ QTestCharBuffer identifier;
+
+ const char *testObject = QTestResult::currentTestObjectName();
+ const char *testFunction = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction() : "UnknownTestFunc";
+
+ const char *dataTag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : "";
+ const char *globalDataTag = QTestResult::currentGlobalDataTag() ? QTestResult::currentGlobalDataTag() : "";
+ const char *tagFiller = (dataTag[0] && globalDataTag[0]) ? ":" : "";
+
+ QTest::qt_asprintf(&identifier, "%s::%s(%s%s%s)", testObject, testFunction, globalDataTag, tagFiller, dataTag);
+ return identifier;
+}
+
void QPlainTestLogger::printMessage(const char *type, const char *msg, const char *file, int line)
{
QTEST_ASSERT(type);
QTEST_ASSERT(msg);
- QTestCharBuffer buf;
+ QTestCharBuffer messagePrefix;
- const char *fn = QTestResult::currentTestFunction() ? QTestResult::currentTestFunction()
- : "UnknownTestFunc";
- const char *tag = QTestResult::currentDataTag() ? QTestResult::currentDataTag() : "";
- const char *gtag = QTestResult::currentGlobalDataTag()
- ? QTestResult::currentGlobalDataTag()
- : "";
- const char *filler = (tag[0] && gtag[0]) ? ":" : "";
+ QTestCharBuffer failureLocation;
if (file) {
- QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n"
#ifdef Q_OS_WIN
- "%s(%d) : failure location\n"
+#define FAILURE_LOCATION_STR "\n%s(%d) : failure location"
#else
- " Loc: [%s(%d)]\n"
+#define FAILURE_LOCATION_STR "\n Loc: [%s(%d)]"
#endif
- , type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag,
- msg[0] ? " " : "", msg, file, line);
- } else {
- QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n",
- type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag,
- msg[0] ? " " : "", msg);
+ QTest::qt_asprintf(&failureLocation, FAILURE_LOCATION_STR, file, line);
}
+
+ const char *msgFiller = msg[0] ? " " : "";
+ QTest::qt_asprintf(&messagePrefix, "%s: %s%s%s%s\n",
+ type, testIdentifier().data(), msgFiller, msg, failureLocation.data());
+
// In colored mode, printf above stripped our nonprintable control characters.
// Put them back.
- memcpy(buf.data(), type, strlen(type));
- outputMessage(buf.data());
+ memcpy(messagePrefix.data(), type, strlen(type));
+
+ outputMessage(messagePrefix.data());
}
void QPlainTestLogger::printBenchmarkResult(const QBenchmarkResult &result)
diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h
index 6b1b7e6922..824dc6aaed 100644
--- a/src/testlib/qsignalspy.h
+++ b/src/testlib/qsignalspy.h
@@ -88,7 +88,7 @@ public:
}
if (!QMetaObject::connect(obj, sigIndex, this, memberOffset,
- Qt::DirectConnection, Q_NULLPTR)) {
+ Qt::DirectConnection, nullptr)) {
qWarning("QSignalSpy: QMetaObject::connect returned false. Unable to connect.");
return;
}
@@ -96,7 +96,8 @@ public:
initArgs(mo->method(sigIndex), obj);
}
-#ifdef Q_QDOC
+#ifdef Q_CLANG_QDOC
+ template <typename PointerToMemberFunction>
QSignalSpy(const QObject *object, PointerToMemberFunction signal);
#else
template <typename Func>
@@ -136,7 +137,7 @@ public:
sig = signalMetaMethod.methodSignature();
initArgs(mo->method(sigIndex), obj);
}
-#endif // Q_QDOC
+#endif // Q_CLANG_QDOC
inline bool isValid() const { return !sig.isEmpty(); }
inline QByteArray signal() const { return sig; }
@@ -151,7 +152,7 @@ public:
return count() > origCount;
}
- int qt_metacall(QMetaObject::Call call, int methodId, void **a) Q_DECL_OVERRIDE
+ int qt_metacall(QMetaObject::Call call, int methodId, void **a) override
{
methodId = QObject::qt_metacall(call, methodId, a);
if (methodId < 0)
diff --git a/src/testlib/qsignalspy.qdoc b/src/testlib/qsignalspy.qdoc
index f5c8ad32b3..77affc9a4b 100644
--- a/src/testlib/qsignalspy.qdoc
+++ b/src/testlib/qsignalspy.qdoc
@@ -72,7 +72,7 @@
\snippet code/doc_src_qsignalspy.cpp 4
*/
-/*! \fn QSignalSpy::QSignalSpy(const QObject *object, PointerToMemberFunction signal)
+/*! \fn template <typename PointerToMemberFunction> QSignalSpy::QSignalSpy(const QObject *object, PointerToMemberFunction signal)
\since 5.4
Constructs a new QSignalSpy that listens for emissions of the \a signal
diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h
index ca045120d5..a5df27e3b9 100644
--- a/src/testlib/qtest.h
+++ b/src/testlib/qtest.h
@@ -263,7 +263,7 @@ inline bool qCompare(QList<T> const &t1, QList<T> const &t2, const char *actual,
delete [] val2;
}
}
- return compare_helper(isOk, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(isOk, msg, nullptr, nullptr, actual, expected, file, line);
}
template <>
diff --git a/src/testlib/qtest_gui.h b/src/testlib/qtest_gui.h
index d4b2de2214..e5101e6955 100644
--- a/src/testlib/qtest_gui.h
+++ b/src/testlib/qtest_gui.h
@@ -62,10 +62,7 @@
#include <QtGui/qvector2d.h>
#include <QtGui/qvector3d.h>
#include <QtGui/qvector4d.h>
-
-#ifdef QT_WIDGETS_LIB
#include <QtGui/qicon.h>
-#endif
#if 0
// inform syncqt
@@ -78,9 +75,6 @@ QT_BEGIN_NAMESPACE
namespace QTest
{
-/*!
- \internal
- */
template<> inline char *toString(const QColor &color)
{
return qstrdup(color.name(QColor::HexArgb).toLocal8Bit().constData());
@@ -94,8 +88,8 @@ template<> inline char *toString(const QRegion &region)
} else if (region.isEmpty()) {
result += "empty";
} else {
- const QVector<QRect> &rects = region.rects();
- const int rectCount = rects.size();
+ const auto rects = region.begin();
+ const int rectCount = region.rectCount();
if (rectCount > 1) {
result += QByteArray::number(rectCount);
result += " rectangles, ";
@@ -103,7 +97,7 @@ template<> inline char *toString(const QRegion &region)
for (int i = 0; i < rectCount; ++i) {
if (i)
result += ", ";
- const QRect &r = rects.at(i);
+ const QRect &r = rects[i];
result += QByteArray::number(r.width());
result += 'x';
result += QByteArray::number(r.height());
@@ -119,7 +113,7 @@ template<> inline char *toString(const QRegion &region)
return qstrdup(result.constData());
}
-#ifndef QT_NO_VECTOR2D
+#if !defined(QT_NO_VECTOR2D) || defined(Q_CLANG_QDOC)
template<> inline char *toString(const QVector2D &v)
{
QByteArray result = "QVector2D(" + QByteArray::number(double(v.x())) + ", "
@@ -127,7 +121,7 @@ template<> inline char *toString(const QVector2D &v)
return qstrdup(result.constData());
}
#endif // !QT_NO_VECTOR2D
-#ifndef QT_NO_VECTOR3D
+#if !defined(QT_NO_VECTOR3D) || defined(Q_CLANG_QDOC)
template<> inline char *toString(const QVector3D &v)
{
QByteArray result = "QVector3D(" + QByteArray::number(double(v.x())) + ", "
@@ -135,7 +129,7 @@ template<> inline char *toString(const QVector3D &v)
return qstrdup(result.constData());
}
#endif // !QT_NO_VECTOR3D
-#ifndef QT_NO_VECTOR4D
+#if !defined(QT_NO_VECTOR4D) || defined(Q_CLANG_QDOC)
template<> inline char *toString(const QVector4D &v)
{
QByteArray result = "QVector4D(" + QByteArray::number(double(v.x())) + ", "
@@ -164,24 +158,24 @@ inline bool qCompare(QImage const &t1, QImage const &t2,
qsnprintf(msg, 1024, "Compared QImages differ.\n"
" Actual (%s).isNull(): %d\n"
" Expected (%s).isNull(): %d", actual, t1Null, expected, t2Null);
- return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line);
}
if (t1Null && t2Null)
- return compare_helper(true, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(true, nullptr, nullptr, nullptr, actual, expected, file, line);
if (t1.width() != t2.width() || t1.height() != t2.height()) {
qsnprintf(msg, 1024, "Compared QImages differ in size.\n"
" Actual (%s): %dx%d\n"
" Expected (%s): %dx%d",
actual, t1.width(), t1.height(),
expected, t2.width(), t2.height());
- return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line);
}
if (t1.format() != t2.format()) {
qsnprintf(msg, 1024, "Compared QImages differ in format.\n"
" Actual (%s): %d\n"
" Expected (%s): %d",
actual, t1.format(), expected, t2.format());
- return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line);
}
return compare_helper(t1 == t2, "Compared values are not the same",
toString(t1), toString(t2), actual, expected, file, line);
@@ -198,17 +192,17 @@ inline bool qCompare(QPixmap const &t1, QPixmap const &t2, const char *actual, c
qsnprintf(msg, 1024, "Compared QPixmaps differ.\n"
" Actual (%s).isNull(): %d\n"
" Expected (%s).isNull(): %d", actual, t1Null, expected, t2Null);
- return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line);
}
if (t1Null && t2Null)
- return compare_helper(true, Q_NULLPTR, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(true, nullptr, nullptr, nullptr, actual, expected, file, line);
if (t1.width() != t2.width() || t1.height() != t2.height()) {
qsnprintf(msg, 1024, "Compared QPixmaps differ in size.\n"
" Actual (%s): %dx%d\n"
" Expected (%s): %dx%d",
actual, t1.width(), t1.height(),
expected, t2.width(), t2.height());
- return compare_helper(false, msg, Q_NULLPTR, Q_NULLPTR, actual, expected, file, line);
+ return compare_helper(false, msg, nullptr, nullptr, actual, expected, file, line);
}
return qCompare(t1.toImage(), t2.toImage(), actual, expected, file, line);
}
diff --git a/src/testlib/qtest_network.h b/src/testlib/qtest_network.h
index 57a37734fc..b417f03a7f 100644
--- a/src/testlib/qtest_network.h
+++ b/src/testlib/qtest_network.h
@@ -64,9 +64,6 @@ QT_BEGIN_NAMESPACE
namespace QTest
{
-/*!
- \internal
- */
template<>
inline char *toString<QHostAddress>(const QHostAddress &addr)
{
@@ -83,9 +80,6 @@ inline char *toString<QHostAddress>(const QHostAddress &addr)
return toString(addr.toString());
}
-/*!
- \internal
- */
inline char *toString(QNetworkReply::NetworkError code)
{
const QMetaObject *mo = &QNetworkReply::staticMetaObject;
@@ -97,17 +91,11 @@ inline char *toString(QNetworkReply::NetworkError code)
return qstrdup(qme.valueToKey(code));
}
-/*!
- \internal
- */
inline char *toString(const QNetworkCookie &cookie)
{
return toString(cookie.toRawForm());
}
-/*!
- \internal
- */
inline char *toString(const QList<QNetworkCookie> &list)
{
QByteArray result = "QList(";
diff --git a/src/testlib/qtestaccessible.h b/src/testlib/qtestaccessible.h
index 464f87fb5c..0470d15ed7 100644
--- a/src/testlib/qtestaccessible.h
+++ b/src/testlib/qtestaccessible.h
@@ -132,7 +132,7 @@ public:
static void cleanup()
{
delete instance();
- instance() = Q_NULLPTR;
+ instance() = nullptr;
}
static void clearEvents() { eventList().clear(); }
static EventList events() { return eventList(); }
@@ -167,8 +167,8 @@ private:
~QTestAccessibility()
{
- QAccessible::installUpdateHandler(Q_NULLPTR);
- QAccessible::installRootObjectHandler(Q_NULLPTR);
+ QAccessible::installUpdateHandler(nullptr);
+ QAccessible::installRootObjectHandler(nullptr);
}
static void rootObjectHandler(QObject *object)
@@ -273,7 +273,7 @@ private:
static QTestAccessibility *&instance()
{
- static QTestAccessibility *ta = Q_NULLPTR;
+ static QTestAccessibility *ta = nullptr;
return ta;
}
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index 3b5acb6b95..497470464f 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -583,6 +583,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
" -plugins dir : Specify a directory where to search for plugins.\n"
" -input dir/file : Specify the root directory for test cases or a single test case file.\n"
" -translation file : Specify the translation file.\n"
+ " -file-selector dir : Specify a file selector for the QML engine.\n"
);
}
@@ -901,6 +902,10 @@ void TestMethods::invokeTestOnData(int index) const
if (m_cleanupMethod.isValid())
m_cleanupMethod.invoke(QTest::currentTestObject, Qt::DirectConnection);
+ // Process any deleteLater(), like event-loop based apps would do. Fixes memleak reports.
+ if (QCoreApplication::instance())
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+
// If the test isn't a benchmark, finalize the result after cleanup() has finished.
if (!isBenchmark)
QTestResult::finishedCurrentTestDataCleanup();
@@ -1385,7 +1390,7 @@ void TestMethods::invokeTests(QObject *testObject) const
if (!QTestResult::skipCurrentTest() && !previousFailed) {
for (int i = 0, count = int(m_methods.size()); i < count; ++i) {
- const char *data = Q_NULLPTR;
+ const char *data = nullptr;
if (i < QTest::testTags.size() && !QTest::testTags.at(i).isEmpty())
data = qstrdup(QTest::testTags.at(i).toLatin1().constData());
const bool ok = invokeTest(i, data, watchDog.data());
@@ -1530,7 +1535,7 @@ class DebugSymbolResolver
Q_DISABLE_COPY(DebugSymbolResolver)
public:
struct Symbol {
- Symbol() : name(Q_NULLPTR), address(0) {}
+ Symbol() : name(nullptr), address(0) {}
const char *name; // Must be freed by caller.
DWORD64 address;
@@ -1578,11 +1583,11 @@ void DebugSymbolResolver::cleanup()
if (m_dbgHelpLib)
FreeLibrary(m_dbgHelpLib);
m_dbgHelpLib = 0;
- m_symFromAddr = Q_NULLPTR;
+ m_symFromAddr = nullptr;
}
DebugSymbolResolver::DebugSymbolResolver(HANDLE process)
- : m_process(process), m_dbgHelpLib(0), m_symFromAddr(Q_NULLPTR)
+ : m_process(process), m_dbgHelpLib(0), m_symFromAddr(nullptr)
{
bool success = false;
m_dbgHelpLib = LoadLibraryW(L"dbghelp.dll");
@@ -1662,15 +1667,8 @@ static LONG WINAPI windowsFaultHandler(struct _EXCEPTION_POINTERS *exInfo)
}
#endif // Q_OS_WIN) && !Q_OS_WINRT
-static void qputenvIfEmpty(const char *name, const QByteArray &value)
-{
- if (qEnvironmentVariableIsEmpty(name))
- qputenv(name, value);
-}
-
static void initEnvironment()
{
- qputenvIfEmpty("QT_LOGGING_TO_CONSOLE", "1");
qputenv("QT_QTESTLIB_RUNNING", "1");
}
@@ -2288,7 +2286,7 @@ QTestData &QTest::addRow(const char *format, ...)
return *tbl->newData(buf);
}
-/*! \fn void QTest::addColumn(const char *name, T *dummy = 0)
+/*! \fn template <typename T> void QTest::addColumn(const char *name, T *dummy = 0)
Adds a column with type \c{T} to the current test data.
\a name is the name of the column. \a dummy is a workaround
@@ -2419,7 +2417,7 @@ bool QTest::compare_helper(bool success, const char *failureMsg,
return QTestResult::compare(success, failureMsg, val1, val2, actual, expected, file, line);
}
-/*! \fn bool QTest::qCompare(float const &t1, float const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const float &t1, const float &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
bool QTest::qCompare(float const &t1, float const &t2, const char *actual, const char *expected,
@@ -2429,7 +2427,7 @@ bool QTest::qCompare(float const &t1, float const &t2, const char *actual, const
toString(t1), toString(t2), actual, expected, file, line);
}
-/*! \fn bool QTest::qCompare(double const &t1, double const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const double &t1, const double &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
bool QTest::qCompare(double const &t1, double const &t2, const char *actual, const char *expected,
@@ -2439,11 +2437,11 @@ bool QTest::qCompare(double const &t1, double const &t2, const char *actual, con
toString(t1), toString(t2), actual, expected, file, line);
}
-/*! \fn bool QTest::qCompare(double const &t1, float const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const double &t1, const float &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(float const &t1, double const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const float &t1, const double &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
@@ -2540,6 +2538,30 @@ char *QTest::toString(const void *p)
return msg;
}
+/*! \fn char *QTest::toString(const QColor &color)
+ \internal
+ */
+
+/*! \fn char *QTest::toString(const QRegion &region)
+ \internal
+ */
+
+/*! \fn char *QTest::toString(const QHostAddress &addr)
+ \internal
+ */
+
+/*! \fn char *QTest::toString(QNetworkReply::NetworkError code)
+ \internal
+ */
+
+/*! \fn char *QTest::toString(const QNetworkCookie &cookie)
+ \internal
+ */
+
+/*! \fn char *QTest::toString(const QList<QNetworkCookie> &list)
+ \internal
+ */
+
/*! \internal
*/
bool QTest::compare_string_helper(const char *t1, const char *t2, const char *actual,
@@ -2554,51 +2576,59 @@ bool QTest::compare_string_helper(const char *t1, const char *t2, const char *ac
\internal
*/
-/*! \fn bool QTest::compare_ptr_helper(const void *t1, const void *t2, const char *actual, const char *expected, const char *file, int line);
+/*! \fn bool QTest::compare_ptr_helper(const volatile void *t1, const volatile void *t2, const char *actual, const char *expected, const char *file, int line)
+ \internal
+*/
+
+/*! \fn bool QTest::compare_ptr_helper(const volatile void *t1, std::nullptr_t, const char *actual, const char *expected, const char *file, int line)
+ \internal
+*/
+
+/*! \fn bool QTest::compare_ptr_helper(std::nullptr_t, const volatile void *t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(T1 const &, T2 const &, const char *, const char *, const char *, int);
+/*! \fn template <typename T1, typename T2> bool QTest::qCompare(const T1 &t1, const T2 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QIcon const &t1, QIcon const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const QIcon &t1, const QIcon &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QImage const &t1, QImage const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const QImage &t1, const QImage &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QPixmap const &t1, QPixmap const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const QPixmap &t1, const QPixmap &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(T const &t1, T const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(const T &t1, const T &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(const T *t1, const T *t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(const T *t1, const T *t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(T *t, std::nullptr_t, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(T *t, std::nullptr_t, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(std::nullptr_t, T *t, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(std::nullptr_t, T *t, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(T *t1, T *t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(T *t1, T *t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(const T1 *t1, const T2 *t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T1, typename T2> bool QTest::qCompare(const T1 *t1, const T2 *t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(T1 *t1, T2 *t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T1, typename T2> bool QTest::qCompare(T1 *t1, T2 *t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
@@ -2618,55 +2648,55 @@ bool QTest::compare_string_helper(const char *t1, const char *t2, const char *ac
\internal
*/
-/*! \fn bool QTest::qCompare(QString const &t1, QLatin1String const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const QString &t1, const QLatin1String &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QLatin1String const &t1, QString const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const QLatin1String &t1, const QString &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QStringList const &t1, QStringList const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const QStringList &t1, const QStringList &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QList<T> const &t1, QList<T> const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(const QList<T> &t1, const QList<T> &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QFlags<T> const &t1, T const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(const QFlags<T> &t1, const T &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(QFlags<T> const &t1, int const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qCompare(const QFlags<T> &t1, const int &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(qint64 const &t1, qint32 const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const qint64 &t1, const qint32 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(qint64 const &t1, quint32 const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const qint64 &t1, const quint32 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(quint64 const &t1, quint32 const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const quint64 &t1, const quint32 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(qint32 const &t1, qint64 const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const qint32 &t1, const qint64 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(quint32 const &t1, qint64 const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const quint32 &t1, const qint64 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qCompare(quint32 const &t1, quint64 const &t2, const char *actual, const char *expected, const char *file, int line)
+/*! \fn bool QTest::qCompare(const quint32 &t1, const quint64 &t2, const char *actual, const char *expected, const char *file, int line)
\internal
*/
-/*! \fn bool QTest::qTest(const T& actual, const char *elementName, const char *actualStr, const char *expected, const char *file, int line)
+/*! \fn template <typename T> bool QTest::qTest(const T& actual, const char *elementName, const char *actualStr, const char *expected, const char *file, int line)
\internal
*/
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index 2605325a94..f38f7ed4df 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -250,7 +250,7 @@ namespace QTest
template <typename T> // Fallback
inline typename std::enable_if<!QtPrivate::IsQEnumHelper<T>::Value, char*>::type toString(const T &)
{
- return Q_NULLPTR;
+ return nullptr;
}
} // namespace Internal
@@ -273,14 +273,14 @@ namespace QTest
Q_TESTLIB_EXPORT char *toString(const char *);
Q_TESTLIB_EXPORT char *toString(const void *);
- Q_TESTLIB_EXPORT void qInit(QObject *testObject, int argc = 0, char **argv = Q_NULLPTR);
+ Q_TESTLIB_EXPORT void qInit(QObject *testObject, int argc = 0, char **argv = nullptr);
Q_TESTLIB_EXPORT int qRun();
Q_TESTLIB_EXPORT void qCleanup();
- Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = Q_NULLPTR);
+ Q_TESTLIB_EXPORT int qExec(QObject *testObject, int argc = 0, char **argv = nullptr);
Q_TESTLIB_EXPORT int qExec(QObject *testObject, const QStringList &arguments);
- Q_TESTLIB_EXPORT void setMainSourcePath(const char *file, const char *builddir = Q_NULLPTR);
+ Q_TESTLIB_EXPORT void setMainSourcePath(const char *file, const char *builddir = nullptr);
Q_TESTLIB_EXPORT bool qVerify(bool statement, const char *statementStr, const char *description,
const char *file, int line);
@@ -288,7 +288,7 @@ namespace QTest
Q_TESTLIB_EXPORT void qSkip(const char *message, const char *file, int line);
Q_TESTLIB_EXPORT bool qExpectFail(const char *dataIndex, const char *comment, TestFailMode mode,
const char *file, int line);
- Q_TESTLIB_EXPORT void qWarn(const char *message, const char *file = Q_NULLPTR, int line = 0);
+ Q_TESTLIB_EXPORT void qWarn(const char *message, const char *file = nullptr, int line = 0);
Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const char *message);
#ifndef QT_NO_REGULAREXPRESSION
Q_TESTLIB_EXPORT void ignoreMessage(QtMsgType type, const QRegularExpression &messagePattern);
@@ -297,8 +297,8 @@ namespace QTest
#if QT_CONFIG(temporaryfile)
Q_TESTLIB_EXPORT QSharedPointer<QTemporaryDir> qExtractTestData(const QString &dirName);
#endif
- Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = Q_NULLPTR, int line = 0, const char* builddir = Q_NULLPTR);
- Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = Q_NULLPTR, int line = 0, const char* builddir = Q_NULLPTR);
+ Q_TESTLIB_EXPORT QString qFindTestData(const char* basepath, const char* file = nullptr, int line = 0, const char* builddir = nullptr);
+ Q_TESTLIB_EXPORT QString qFindTestData(const QString& basepath, const char* file = nullptr, int line = 0, const char* builddir = nullptr);
Q_TESTLIB_EXPORT void *qData(const char *tagName, int typeId);
Q_TESTLIB_EXPORT void *qGlobalData(const char *tagName, int typeId);
diff --git a/src/testlib/qtestcase.qdoc b/src/testlib/qtestcase.qdoc
index 5b90419e28..9a3c770e31 100644
--- a/src/testlib/qtestcase.qdoc
+++ b/src/testlib/qtestcase.qdoc
@@ -103,7 +103,7 @@
to catch an exception thrown from the \a expression. If the \a expression
throws an exception and its type is the same as \a exceptiontype
or \a exceptiontype is substitutable with the type of thrown exception
- (i.e. usually the type of thrown exception is publically derived
+ (i.e. usually the type of thrown exception is publicly derived
from \a exceptiontype) then execution will be continued. If not-substitutable
type of exception is thrown or the \a expression doesn't throw an exception
at all, then a failure will be recorded in the test log and
@@ -877,7 +877,42 @@
*/
/*!
- \fn char *QTest::toString(const T &value)
+ \fn template <typename T1, typename T2> char *QTest::toString(const QPair<T1, T2> &pair)
+ \overload
+ \since 5.11
+ Returns a textual representation of the \a pair.
+*/
+
+/*!
+ \fn template <typename T1, typename T2> char *QTest::toString(const std::pair<T1, T2> &pair)
+ \overload
+ \since 5.11
+ Returns a textual representation of the \a pair.
+*/
+
+/*!
+ \fn char *QTest::toString(const QVector2D &v)
+ \overload
+ \since 5.11
+ Returns a textual representation of the 2D vector \a v.
+*/
+
+/*!
+ \fn char *QTest::toString(const QVector3D &v)
+ \overload
+ \since 5.11
+ Returns a textual representation of the 3D vector \a v.
+*/
+
+/*!
+ \fn char *QTest::toString(const QVector4D &v)
+ \overload
+ \since 5.11
+ Returns a textual representation of the 4D vector \a v.
+*/
+
+/*!
+ \fn template<typename T> char *QTest::toString(const T &value)
Returns a textual representation of \a value. This function is used by
\l QCOMPARE() to output verbose information in case of a test failure.
@@ -928,6 +963,22 @@
*/
/*!
+ \fn char *QTest::toString(const QStringView &string)
+ \overload
+ \since 5.11
+
+ Returns a textual representation of the given \a string.
+*/
+
+/*!
+ \fn char *QTest::toString(const QUuid &uuid)
+ \overload
+ \since 5.11
+
+ Returns a textual representation of the given \a uuid.
+*/
+
+/*!
\fn char *QTest::toString(const QString &string)
\overload
@@ -1075,7 +1126,7 @@
\sa QTest::qSleep(), QSignalSpy::wait()
*/
-/*! \fn void QTest::qWaitFor(Functor predicate, int timeout)
+/*! \fn template <typename Functor> bool QTest::qWaitFor(Functor predicate, int timeout)
Waits for \a timeout milliseconds or until the \a predicate returns true.
@@ -1327,10 +1378,6 @@
// Internals of qtestmouse.h:
-/*! \fn void QTest::waitForEvents()
- \internal
-*/
-
/*! \fn void QTest::mouseEvent(MouseAction action, QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers stateKey, QPoint pos, int delay=-1)
\internal
*/
diff --git a/src/testlib/qtesteventloop.h b/src/testlib/qtesteventloop.h
index bcf4a4be2d..81c0b9126c 100644
--- a/src/testlib/qtesteventloop.h
+++ b/src/testlib/qtesteventloop.h
@@ -56,8 +56,8 @@ class Q_TESTLIB_EXPORT QTestEventLoop : public QObject
Q_OBJECT
public:
- inline QTestEventLoop(QObject *aParent = Q_NULLPTR)
- : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(Q_NULLPTR) {}
+ inline QTestEventLoop(QObject *aParent = nullptr)
+ : QObject(aParent), inLoop(false), _timeout(false), timerId(-1), loop(nullptr) {}
inline void enterLoopMSecs(int ms);
inline void enterLoop(int secs) { enterLoopMSecs(secs * 1000); }
@@ -103,7 +103,7 @@ inline void QTestEventLoop::enterLoopMSecs(int ms)
loop = &l;
l.exec();
- loop = Q_NULLPTR;
+ loop = nullptr;
}
inline void QTestEventLoop::exitLoop()
diff --git a/src/testlib/qtestmouse.h b/src/testlib/qtestmouse.h
index 8f55c1801f..fa524fd8ca 100644
--- a/src/testlib/qtestmouse.h
+++ b/src/testlib/qtestmouse.h
@@ -64,7 +64,9 @@
QT_BEGIN_NAMESPACE
-Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *w, const QPointF &local, const QPointF &global, Qt::MouseButtons b, Qt::KeyboardModifiers mods, int timestamp);
+Q_GUI_EXPORT void qt_handleMouseEvent(QWindow *window, const QPointF &local, const QPointF &global,
+ Qt::MouseButtons state, Qt::MouseButton button,
+ QEvent::Type type, Qt::KeyboardModifiers mods, int timestamp);
namespace QTest
{
@@ -78,15 +80,13 @@ namespace QTest
// to depend on platform themes.
static const int mouseDoubleClickInterval = 500;
- static void waitForEvents()
- {
-#ifdef Q_OS_MAC
- QTest::qWait(20);
-#else
- qApp->processEvents();
-#endif
- }
+/*! \internal
+ This function mocks all mouse events by bypassing the windowing system. The
+ result is that the mouse events do not come from the system via Qt platform
+ plugins, but are created on the spot and immediately available for processing
+ by Qt.
+*/
static void mouseEvent(MouseAction action, QWindow *window, Qt::MouseButton button,
Qt::KeyboardModifiers stateKey, QPoint pos, int delay=-1)
{
@@ -120,30 +120,33 @@ namespace QTest
switch (action)
{
case MouseDClick:
- qt_handleMouseEvent(w, pos, global, button, stateKey, ++lastMouseTimestamp);
- qt_handleMouseEvent(w, pos, global, Qt::NoButton, stateKey, ++lastMouseTimestamp);
+ qt_handleMouseEvent(w, pos, global, button, button, QEvent::MouseButtonPress,
+ stateKey, ++lastMouseTimestamp);
+ qt_handleMouseEvent(w, pos, global, Qt::NoButton, button, QEvent::MouseButtonRelease,
+ stateKey, ++lastMouseTimestamp);
Q_FALLTHROUGH();
case MousePress:
case MouseClick:
- qt_handleMouseEvent(w, pos, global, button, stateKey, ++lastMouseTimestamp);
+ qt_handleMouseEvent(w, pos, global, button, button, QEvent::MouseButtonPress,
+ stateKey, ++lastMouseTimestamp);
lastMouseButton = button;
if (action == MousePress)
break;
Q_FALLTHROUGH();
case MouseRelease:
- qt_handleMouseEvent(w, pos, global, Qt::NoButton, stateKey, ++lastMouseTimestamp);
+ qt_handleMouseEvent(w, pos, global, Qt::NoButton, button, QEvent::MouseButtonRelease,
+ stateKey, ++lastMouseTimestamp);
lastMouseTimestamp += mouseDoubleClickInterval; // avoid double clicks being generated
lastMouseButton = Qt::NoButton;
break;
case MouseMove:
- qt_handleMouseEvent(w, pos, global, lastMouseButton, stateKey, ++lastMouseTimestamp);
- // No QCursor::setPos() call here. That could potentially result in mouse events sent by the windowing system
- // which is highly undesired here. Tests must avoid relying on QCursor.
+ qt_handleMouseEvent(w, pos, global, lastMouseButton, Qt::NoButton, QEvent::MouseMove,
+ stateKey, ++lastMouseTimestamp);
break;
default:
QTEST_ASSERT(false);
}
- waitForEvents();
+ qApp->processEvents();
}
inline void mousePress(QWindow *window, Qt::MouseButton button,
diff --git a/src/testlib/qtesttable.cpp b/src/testlib/qtesttable.cpp
index 1afe2f7af5..953495a18a 100644
--- a/src/testlib/qtesttable.cpp
+++ b/src/testlib/qtesttable.cpp
@@ -58,7 +58,7 @@ public:
}
struct Element {
- Element() : name(Q_NULLPTR), type(0) {}
+ Element() : name(nullptr), type(0) {}
Element(const char *n, int t) : name(n), type(t) {}
const char *name;
@@ -130,12 +130,12 @@ int QTestTable::elementTypeId(int index) const
const char *QTestTable::dataTag(int index) const
{
- return size_t(index) < d->elementList.size() ? d->elementList[index].name : Q_NULLPTR;
+ return size_t(index) < d->elementList.size() ? d->elementList[index].name : nullptr;
}
QTestData *QTestTable::testData(int index) const
{
- return size_t(index) < d->dataList.size() ? d->dataList[index] : Q_NULLPTR;
+ return size_t(index) < d->dataList.size() ? d->dataList[index] : nullptr;
}
class NamePredicate : public std::unary_function<QTestTablePrivate::Element, bool>
diff --git a/src/testlib/qtesttouch.h b/src/testlib/qtesttouch.h
index bda185bfee..83ca83602e 100644
--- a/src/testlib/qtesttouch.h
+++ b/src/testlib/qtesttouch.h
@@ -75,21 +75,21 @@ namespace QTest
if (commitWhenDestroyed)
commit();
}
- QTouchEventSequence& press(int touchId, const QPoint &pt, QWindow *window = Q_NULLPTR)
+ QTouchEventSequence& press(int touchId, const QPoint &pt, QWindow *window = nullptr)
{
QTouchEvent::TouchPoint &p = point(touchId);
p.setScreenPos(mapToScreen(window, pt));
p.setState(Qt::TouchPointPressed);
return *this;
}
- QTouchEventSequence& move(int touchId, const QPoint &pt, QWindow *window = Q_NULLPTR)
+ QTouchEventSequence& move(int touchId, const QPoint &pt, QWindow *window = nullptr)
{
QTouchEvent::TouchPoint &p = point(touchId);
p.setScreenPos(mapToScreen(window, pt));
p.setState(Qt::TouchPointMoved);
return *this;
}
- QTouchEventSequence& release(int touchId, const QPoint &pt, QWindow *window = Q_NULLPTR)
+ QTouchEventSequence& release(int touchId, const QPoint &pt, QWindow *window = nullptr)
{
QTouchEvent::TouchPoint &p = point(touchId);
p.setScreenPos(mapToScreen(window, pt));
@@ -104,21 +104,21 @@ namespace QTest
}
#ifdef QT_WIDGETS_LIB
- QTouchEventSequence& press(int touchId, const QPoint &pt, QWidget *widget = Q_NULLPTR)
+ QTouchEventSequence& press(int touchId, const QPoint &pt, QWidget *widget = nullptr)
{
QTouchEvent::TouchPoint &p = point(touchId);
p.setScreenPos(mapToScreen(widget, pt));
p.setState(Qt::TouchPointPressed);
return *this;
}
- QTouchEventSequence& move(int touchId, const QPoint &pt, QWidget *widget = Q_NULLPTR)
+ QTouchEventSequence& move(int touchId, const QPoint &pt, QWidget *widget = nullptr)
{
QTouchEvent::TouchPoint &p = point(touchId);
p.setScreenPos(mapToScreen(widget, pt));
p.setState(Qt::TouchPointMoved);
return *this;
}
- QTouchEventSequence& release(int touchId, const QPoint &pt, QWidget *widget = Q_NULLPTR)
+ QTouchEventSequence& release(int touchId, const QPoint &pt, QWidget *widget = nullptr)
{
QTouchEvent::TouchPoint &p = point(touchId);
p.setScreenPos(mapToScreen(widget, pt));
@@ -151,14 +151,14 @@ namespace QTest
private:
#ifdef QT_WIDGETS_LIB
QTouchEventSequence(QWidget *widget, QTouchDevice *aDevice, bool autoCommit)
- : targetWidget(widget), targetWindow(Q_NULLPTR), device(aDevice), commitWhenDestroyed(autoCommit)
+ : targetWidget(widget), targetWindow(nullptr), device(aDevice), commitWhenDestroyed(autoCommit)
{
}
#endif
QTouchEventSequence(QWindow *window, QTouchDevice *aDevice, bool autoCommit)
:
#ifdef QT_WIDGETS_LIB
- targetWidget(Q_NULLPTR),
+ targetWidget(nullptr),
#endif
targetWindow(window), device(aDevice), commitWhenDestroyed(autoCommit)
{
@@ -205,13 +205,13 @@ private:
QWindow *targetWindow;
QTouchDevice *device;
bool commitWhenDestroyed;
-#ifdef QT_WIDGETS_LIB
- friend QTouchEventSequence touchEvent(QWidget *, QTouchDevice*, bool);
+#if defined(QT_WIDGETS_LIB) || defined(Q_CLANG_QDOC)
+ friend QTouchEventSequence touchEvent(QWidget *widget, QTouchDevice *device, bool autoCommit);
#endif
- friend QTouchEventSequence touchEvent(QWindow *, QTouchDevice*, bool);
+ friend QTouchEventSequence touchEvent(QWindow *window, QTouchDevice *device, bool autoCommit);
};
-#ifdef QT_WIDGETS_LIB
+#if defined(QT_WIDGETS_LIB) || defined(Q_CLANG_QDOC)
inline
QTouchEventSequence touchEvent(QWidget *widget,
QTouchDevice *device,
diff --git a/src/testlib/qxctestlogger_p.h b/src/testlib/qxctestlogger_p.h
index 2bbd5ad296..1b641f18af 100644
--- a/src/testlib/qxctestlogger_p.h
+++ b/src/testlib/qxctestlogger_p.h
@@ -65,21 +65,21 @@ class QXcodeTestLogger : public QAbstractTestLogger
{
public:
QXcodeTestLogger();
- ~QXcodeTestLogger() Q_DECL_OVERRIDE;
+ ~QXcodeTestLogger() override;
- void startLogging() Q_DECL_OVERRIDE;
- void stopLogging() Q_DECL_OVERRIDE;
+ void startLogging() override;
+ void stopLogging() override;
- void enterTestFunction(const char *function) Q_DECL_OVERRIDE;
- void leaveTestFunction() Q_DECL_OVERRIDE;
+ void enterTestFunction(const char *function) override;
+ void leaveTestFunction() override;
void addIncident(IncidentTypes type, const char *description,
- const char *file = 0, int line = 0) Q_DECL_OVERRIDE;
+ const char *file = 0, int line = 0) override;
void addMessage(MessageTypes type, const QString &message,
- const char *file = 0, int line = 0) Q_DECL_OVERRIDE;
+ const char *file = 0, int line = 0) override;
- void addBenchmarkResult(const QBenchmarkResult &result) Q_DECL_OVERRIDE;
+ void addBenchmarkResult(const QBenchmarkResult &result) override;
static bool canLogTestProgress();
static int parseCommandLineArgument(const char *argument);
diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro
index f99f28ca84..109feee630 100644
--- a/src/testlib/testlib.pro
+++ b/src/testlib/testlib.pro
@@ -11,7 +11,9 @@ unix:!embedded:QMAKE_PKGCONFIG_DESCRIPTION = Qt \
QMAKE_DOCS = $$PWD/doc/qttestlib.qdocconf
-HEADERS = qbenchmark.h \
+HEADERS = \
+ qabstractitemmodeltester.h \
+ qbenchmark.h \
qbenchmark_p.h \
qbenchmarkmeasurement_p.h \
qbenchmarktimemeasurers_p.h \
@@ -40,7 +42,9 @@ HEADERS = qbenchmark.h \
qtestblacklist_p.h \
qtesthelpers_p.h
-SOURCES = qtestcase.cpp \
+SOURCES = \
+ qabstractitemmodeltester.cpp \
+ qtestcase.cpp \
qtestlog.cpp \
qtesttable.cpp \
qtestdata.cpp \
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index 042ad7adb9..a45382106a 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -32,7 +32,6 @@ SOURCES += \
../../corelib/global/qrandom.cpp \
../../corelib/io/qabstractfileengine.cpp \
../../corelib/io/qbuffer.cpp \
- ../../corelib/io/qdatastream.cpp \
../../corelib/io/qdebug.cpp \
../../corelib/io/qdir.cpp \
../../corelib/io/qdiriterator.cpp \
@@ -45,8 +44,8 @@ SOURCES += \
../../corelib/io/qiodevice.cpp \
../../corelib/io/qfiledevice.cpp \
../../corelib/io/qresource.cpp \
+ ../../corelib/io/qtemporarydir.cpp \
../../corelib/io/qtemporaryfile.cpp \
- ../../corelib/io/qtextstream.cpp \
../../corelib/io/qsavefile.cpp \
../../corelib/io/qstandardpaths.cpp \
../../corelib/io/qloggingcategory.cpp \
@@ -57,6 +56,17 @@ SOURCES += \
../../corelib/kernel/qvariant.cpp \
../../corelib/kernel/qsystemerror.cpp \
../../corelib/plugin/quuid.cpp \
+ ../../corelib/serialization/qdatastream.cpp \
+ ../../corelib/serialization/qjson.cpp \
+ ../../corelib/serialization/qjsondocument.cpp \
+ ../../corelib/serialization/qjsonobject.cpp \
+ ../../corelib/serialization/qjsonarray.cpp \
+ ../../corelib/serialization/qjsonvalue.cpp \
+ ../../corelib/serialization/qjsonparser.cpp \
+ ../../corelib/serialization/qjsonwriter.cpp \
+ ../../corelib/serialization/qtextstream.cpp \
+ ../../corelib/serialization/qxmlutils.cpp \
+ ../../corelib/serialization/qxmlstream.cpp \
../../corelib/tools/qbitarray.cpp \
../../corelib/tools/qbytearray.cpp \
../../corelib/tools/qarraydata.cpp \
@@ -83,15 +93,6 @@ SOURCES += \
../../corelib/tools/qstringlist.cpp \
../../corelib/tools/qversionnumber.cpp \
../../corelib/tools/qvsnprintf.cpp \
- ../../corelib/xml/qxmlutils.cpp \
- ../../corelib/xml/qxmlstream.cpp \
- ../../corelib/json/qjson.cpp \
- ../../corelib/json/qjsondocument.cpp \
- ../../corelib/json/qjsonobject.cpp \
- ../../corelib/json/qjsonarray.cpp \
- ../../corelib/json/qjsonvalue.cpp \
- ../../corelib/json/qjsonparser.cpp \
- ../../corelib/json/qjsonwriter.cpp \
../../xml/dom/qdom.cpp \
../../xml/sax/qxml.cpp
@@ -146,8 +147,5 @@ win32 {
load(qt_module)
-# otherwise mingw headers do not declare common functions like putenv
-mingw: CONFIG -= strict_c++
-
lib.CONFIG = dummy_install
INSTALLS += lib
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index 1e17e00050..d299cdad51 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -1269,7 +1269,7 @@ void Generator::generateStaticMetacall()
continue;
anythingUsed = true;
fprintf(out, " {\n");
- fprintf(out, " typedef %s (%s::*_t)(",f.type.rawName.constData() , cdef->classname.constData());
+ fprintf(out, " using _t = %s (%s::*)(",f.type.rawName.constData() , cdef->classname.constData());
int argsCount = f.arguments.count();
for (int j = 0; j < argsCount; ++j) {
diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp
index a6725af924..e83125925d 100644
--- a/src/tools/moc/preprocessor.cpp
+++ b/src/tools/moc/preprocessor.cpp
@@ -1131,14 +1131,14 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
Token lastToken = HASH; // skip shitespace at the beginning
for (int i = start; i < index - 1; ++i) {
Token token = symbols.at(i).token;
- if (token == PP_WHITESPACE || token == WHITESPACE) {
+ if (token == WHITESPACE) {
if (lastToken == PP_HASH || lastToken == HASH ||
lastToken == PP_HASHHASH ||
- lastToken == PP_WHITESPACE || lastToken == WHITESPACE)
+ lastToken == WHITESPACE)
continue;
} else if (token == PP_HASHHASH) {
if (!macro.symbols.isEmpty() &&
- (lastToken == PP_WHITESPACE || lastToken == WHITESPACE))
+ lastToken == WHITESPACE)
macro.symbols.pop_back();
}
macro.symbols.append(symbols.at(i));
diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp
index 84fe6ef5c7..92d3c5c171 100644
--- a/src/tools/rcc/rcc.cpp
+++ b/src/tools/rcc/rcc.cpp
@@ -207,7 +207,11 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib)
if (lib.formatVersion() >= 2) {
// last modified time stamp
const QDateTime lastModified = m_fileInfo.lastModified();
- lib.writeNumber8(quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0));
+ quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0);
+ static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong();
+ if (sourceDate != 0)
+ lastmod = sourceDate;
+ lib.writeNumber8(lastmod);
if (text || pass1)
lib.writeChar('\n');
}
diff --git a/src/tools/tracegen/etw.cpp b/src/tools/tracegen/etw.cpp
new file mode 100644
index 0000000000..07f2d114b6
--- /dev/null
+++ b/src/tools/tracegen/etw.cpp
@@ -0,0 +1,228 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "etw.h"
+#include "provider.h"
+#include "helpers.h"
+#include "qtheaders.h"
+
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+#include <qregexp.h>
+#include <quuid.h>
+
+static inline QString providerVar(const QString &providerName)
+{
+ return providerName + QLatin1String("_provider");
+}
+
+static void writeEtwMacro(QTextStream &stream, const Tracepoint::Field &field)
+{
+ const QString &name = field.name;
+
+ switch (field.backendType) {
+ case Tracepoint::Field::QtString:
+ stream << "TraceLoggingCountedWideString(reinterpret_cast<LPCWSTR>("
+ << name << ".utf16()), " << name << ".size(), \"" << name << "\")";
+ return;
+ case Tracepoint::Field::QtByteArray:
+ stream << "TraceLoggingBinary(" << name << ".constData(), "
+ << name << ".size(), \"" << name << "\")";
+ return;
+ case Tracepoint::Field::QtUrl:
+ stream << "TraceLoggingValue(" << name << ".toEncoded().constData(), \"" << name << "\")";
+ return;
+ case Tracepoint::Field::QtRect:
+ stream << "TraceLoggingValue(" << name << ".x(), \"x\"), "
+ << "TraceLoggingValue(" << name << ".y(), \"y\"), "
+ << "TraceLoggingValue(" << name << ".width(), \"width\"), "
+ << "TraceLoggingValue(" << name << ".height(), \"height\")";
+ return;
+ default:
+ break;
+ }
+
+ stream << "TraceLoggingValue(" << name << ", \"" << name << "\")";
+}
+
+static QString createGuid(const QUuid &uuid)
+{
+ QString guid;
+
+ QTextStream stream(&guid);
+
+ hex(stream);
+
+ stream << "("
+ << "0x" << uuid.data1 << ", "
+ << "0x" << uuid.data2 << ", "
+ << "0x" << uuid.data3 << ", "
+ << "0x" << uuid.data4[0] << ", "
+ << "0x" << uuid.data4[1] << ", "
+ << "0x" << uuid.data4[2] << ", "
+ << "0x" << uuid.data4[3] << ", "
+ << "0x" << uuid.data4[4] << ", "
+ << "0x" << uuid.data4[5] << ", "
+ << "0x" << uuid.data4[6] << ", "
+ << "0x" << uuid.data4[7]
+ << ")";
+
+ return guid;
+}
+
+static void writePrologue(QTextStream &stream, const QString &fileName, const QString &providerName)
+{
+ QUuid uuid = QUuid::createUuidV5(QUuid(), providerName.toLocal8Bit());
+
+ const QString provider = providerVar(providerName);
+ const QString guard = includeGuard(fileName);
+ const QString guid = createGuid(uuid);
+ const QString guidString = uuid.toString();
+
+ stream << "#ifndef " << guard << "\n"
+ << "#define " << guard << "\n"
+ << "#include <windows.h>\n"
+ << "#include <TraceLoggingProvider.h>\n";
+
+ /* TraceLogging API macros cannot deal with UTF8
+ * source files, so we work around it like this
+ */
+ stream << "#undef _TlgPragmaUtf8Begin\n"
+ "#undef _TlgPragmaUtf8End\n"
+ "#define _TlgPragmaUtf8Begin\n"
+ "#define _TlgPragmaUtf8End\n";
+
+ stream << qtHeaders();
+
+ stream << "\n";
+
+ stream << "#ifdef TRACEPOINT_DEFINE\n"
+ << "/* " << guidString << " */\n"
+ << "TRACELOGGING_DEFINE_PROVIDER(" << provider << ", \""
+ << providerName <<"\", " << guid << ");\n\n";
+
+ stream << "static inline void registerProvider()\n"
+ << "{\n"
+ << " TraceLoggingRegister(" << provider << ");\n"
+ << "}\n\n";
+
+ stream << "static inline void unregisterProvider()\n"
+ << "{\n"
+ << " TraceLoggingUnregister(" << provider << ");\n"
+ << "}\n";
+
+ stream << "Q_CONSTRUCTOR_FUNCTION(registerProvider)\n"
+ << "Q_DESTRUCTOR_FUNCTION(unregisterProvider)\n\n";
+
+ stream << "#else\n"
+ << "TRACELOGGING_DECLARE_PROVIDER(" << provider << ");\n"
+ << "#endif // TRACEPOINT_DEFINE\n\n";
+}
+
+static void writeEpilogue(QTextStream &stream, const QString &fileName)
+{
+ stream << "\n#endif // " << includeGuard(fileName) << "\n"
+ << "#include <private/qtrace_p.h>\n";
+}
+
+static void writeWrapper(QTextStream &stream, const Tracepoint &tracepoint,
+ const QString &providerName)
+{
+ const QString argList = formatFunctionSignature(tracepoint.args);
+ const QString paramList = formatParameterList(tracepoint.args, ETW);
+ const QString &name = tracepoint.name;
+ const QString includeGuard = QStringLiteral("TP_%1_%2").arg(providerName).arg(name).toUpper();
+ const QString provider = providerVar(providerName);
+
+ stream << "\n";
+
+ stream << "inline void trace_" << name << "(" << argList << ")\n"
+ << "{\n"
+ << " TraceLoggingWrite(" << provider << ", \"" << name << "\"";
+
+ for (const Tracepoint::Field &field : tracepoint.fields) {
+ stream << ",\n";
+ stream << " ";
+ writeEtwMacro(stream, field);
+ }
+
+ stream << ");\n"
+ << "}\n\n";
+
+ stream << "inline void do_trace_" << name << "(" << argList << ")\n"
+ << "{\n"
+ << " trace_" << name << "(" << paramList << ");\n"
+ << "}\n";
+
+ stream << "inline bool trace_" << name << "_enabled()\n"
+ << "{\n"
+ << " return TraceLoggingProviderEnabled(" << provider << ", 0, 0);\n"
+ << "}\n";
+}
+
+static void writeTracepoints(QTextStream &stream, const Provider &provider)
+{
+ if (provider.tracepoints.isEmpty())
+ return;
+
+ const QString includeGuard = QStringLiteral("TP_%1_PROVIDER").arg(provider.name).toUpper();
+
+ stream << "#if !defined(" << includeGuard << ") && !defined(TRACEPOINT_DEFINE)\n"
+ << "#define " << includeGuard << "\n"
+ << "namespace QtPrivate {\n";
+
+ for (const Tracepoint &t : provider.tracepoints)
+ writeWrapper(stream, t, provider.name);
+
+ stream << "} // namespace QtPrivate\n"
+ << "#endif // " << includeGuard << "\n\n";
+}
+
+void writeEtw(QFile &file, const Provider &provider)
+{
+ QTextStream stream(&file);
+
+ const QString fileName = QFileInfo(file.fileName()).fileName();
+
+ writePrologue(stream, fileName, provider.name);
+ writeTracepoints(stream, provider);
+ writeEpilogue(stream, fileName);
+}
+
diff --git a/src/tools/tracegen/etw.h b/src/tools/tracegen/etw.h
new file mode 100644
index 0000000000..5fc9b57eaa
--- /dev/null
+++ b/src/tools/tracegen/etw.h
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ETW_H
+#define ETW_H
+
+struct Provider;
+class QFile;
+
+void writeEtw(QFile &device, const Provider &p);
+
+#endif // ETW_H
diff --git a/src/tools/tracegen/helpers.cpp b/src/tools/tracegen/helpers.cpp
new file mode 100644
index 0000000000..f0ac7ed47f
--- /dev/null
+++ b/src/tools/tracegen/helpers.cpp
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "helpers.h"
+#include <qdebug.h>
+
+QString includeGuard(const QString &filename)
+{
+ QString guard = filename.toUpper();
+
+ for (int i = 0; i < guard.size(); ++i) {
+ if (!guard.at(i).isLetterOrNumber())
+ guard[i] = QChar('_');
+ }
+
+ return guard;
+}
+
+template <typename T>
+static QString joinArguments(const QVector<Tracepoint::Argument> &args, T joinFunction)
+{
+ QString ret;
+ bool first = true;
+
+ for (const Tracepoint::Argument &arg : args) {
+ if (!first)
+ ret += QLatin1String(", ");
+
+ ret += joinFunction(arg);
+
+ first = false;
+ }
+
+ return ret;
+}
+
+QString formatFunctionSignature(const QVector<Tracepoint::Argument> &args)
+{
+ return joinArguments(args, [](const Tracepoint::Argument &arg) {
+ return QStringLiteral("%1 %2").arg(arg.type).arg(arg.name);
+ });
+}
+
+QString formatParameterList(const QVector<Tracepoint::Argument> &args, ParamType type)
+{
+ if (type == LTTNG) {
+ QString ret;
+
+ for (const Tracepoint::Argument &arg : args)
+ ret += QLatin1String(", ") + arg.name;
+
+ return ret;
+ }
+
+ return joinArguments(args, [](const Tracepoint::Argument &arg) { return arg.name; });
+}
diff --git a/src/tools/tracegen/helpers.h b/src/tools/tracegen/helpers.h
new file mode 100644
index 0000000000..77f16a0da6
--- /dev/null
+++ b/src/tools/tracegen/helpers.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef HELPERS_H
+#define HELPERS_H
+
+#include "provider.h"
+
+#include <qvector.h>
+#include <qstring.h>
+
+enum ParamType {
+ LTTNG,
+ ETW
+};
+
+QString includeGuard(const QString &filename);
+QString formatFunctionSignature(const QVector<Tracepoint::Argument> &args);
+QString formatParameterList(const QVector<Tracepoint::Argument> &args, ParamType type);
+
+#endif // HELPERS_H
diff --git a/src/tools/tracegen/lttng.cpp b/src/tools/tracegen/lttng.cpp
new file mode 100644
index 0000000000..6c0d8cc88b
--- /dev/null
+++ b/src/tools/tracegen/lttng.cpp
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "lttng.h"
+#include "provider.h"
+#include "helpers.h"
+#include "panic.h"
+#include "qtheaders.h"
+
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+#include <qregexp.h>
+#include <qdebug.h>
+
+static void writeCtfMacro(QTextStream &stream, const Tracepoint::Field &field)
+{
+ const QString &paramType = field.paramType;
+ const QString &name = field.name;
+ const QString &seqLen = field.seqLen;
+ const int arrayLen = field.arrayLen;
+
+ switch (field.backendType) {
+ case Tracepoint::Field::Array:
+ stream << "ctf_array(" <<paramType << ", "
+ << name << ", " << name << ", " << arrayLen << ")";
+ return;
+ case Tracepoint::Field::Sequence:
+ stream << "ctf_sequence(" << paramType
+ << ", " << name << ", " << name
+ << ", unsigned int, " << seqLen << ")";
+ return;
+ case Tracepoint::Field::Integer:
+ stream << "ctf_integer(" << paramType << ", " << name << ", " << name << ")";
+ return;
+ case Tracepoint::Field::Float:
+ stream << "ctf_float(" << paramType << ", " << name << ", " << name << ")";
+ return;
+ case Tracepoint::Field::String:
+ stream << "ctf_string(" << name << ", " << name << ")";
+ return;
+ case Tracepoint::Field::QtString:
+ stream << "ctf_sequence(const ushort, " << name << ", "
+ << name << ".utf16(), unsigned int, " << name << ".size())";
+ return;
+ case Tracepoint::Field::QtByteArray:
+ stream << "ctf_sequence(const char, " << name << ", "
+ << name << ".constData(), unsigned int, " << name << ".size())";
+ return;
+ case Tracepoint::Field::QtUrl:
+ stream << "ctf_sequence(const char, " << name << ", "
+ << name << ".toEncoded().constData(), unsigned int, "
+ << name << ".toEncoded().size())";
+ return;
+ case Tracepoint::Field::QtRect:
+ stream << "ctf_integer(int, x, " << name << ".x()) "
+ << "ctf_integer(int, y, " << name << ".y()) "
+ << "ctf_integer(int, width, " << name << ".width()) "
+ << "ctf_integer(int, height, " << name << ".height()) ";
+ return;
+ case Tracepoint::Field::Unknown:
+ panic("Cannot deduce CTF type for '%s %s", qPrintable(paramType), qPrintable(name));
+ break;
+ }
+}
+
+static void writePrologue(QTextStream &stream, const QString &fileName, const QString &providerName)
+{
+ stream << "#undef TRACEPOINT_PROVIDER\n";
+ stream << "#define TRACEPOINT_PROVIDER " << providerName << "\n\n";
+
+ stream << qtHeaders();
+
+ const QString guard = includeGuard(fileName);
+
+ stream << "\n";
+
+ /* the first guard is the usual one, the second is required
+ * by LTTNG to force the re-evaluation of TRACEPOINT_* macros
+ */
+ stream << "#if !defined(" << guard << ") || defined(TRACEPOINT_HEADER_MULTI_READ)\n";
+
+ stream << "#define " << guard << "\n\n"
+ << "#undef TRACEPOINT_INCLUDE\n"
+ << "#define TRACEPOINT_INCLUDE \"" << fileName << "\"\n\n";
+
+ stream << "#include <lttng/tracepoint.h>\n\n";
+}
+
+static void writeEpilogue(QTextStream &stream, const QString &fileName)
+{
+ stream << "\n";
+ stream << "#endif // " << includeGuard(fileName) << "\n"
+ << "#include <lttng/tracepoint-event.h>\n"
+ << "#include <private/qtrace_p.h>\n";
+}
+
+static void writeWrapper(QTextStream &stream,
+ const Tracepoint &tracepoint, const QString &providerName)
+{
+ const QString argList = formatFunctionSignature(tracepoint.args);
+ const QString paramList = formatParameterList(tracepoint.args, LTTNG);
+ const QString &name = tracepoint.name;
+ const QString includeGuard = QStringLiteral("TP_%1_%2").arg(providerName).arg(name).toUpper();
+
+ /* prevents the redefinion of the inline wrapper functions
+ * once LTTNG recursively includes this header file
+ */
+ stream << "\n"
+ << "#ifndef " << includeGuard << "\n"
+ << "#define " << includeGuard << "\n"
+ << "namespace QtPrivate {\n";
+
+ stream << "inline void trace_" << name << "(" << argList << ")\n"
+ << "{\n"
+ << " tracepoint(" << providerName << ", " << name << paramList << ");\n"
+ << "}\n";
+
+ stream << "inline void do_trace_" << name << "(" << argList << ")\n"
+ << "{\n"
+ << " do_tracepoint(" << providerName << ", " << name << paramList << ");\n"
+ << "}\n";
+
+ stream << "inline bool trace_" << name << "_enabled()\n"
+ << "{\n"
+ << " return tracepoint_enabled(" << providerName << ", " << name << ");\n"
+ << "}\n";
+
+ stream << "} // namespace QtPrivate\n"
+ << "#endif // " << includeGuard << "\n\n";
+}
+
+static void writeTracepoint(QTextStream &stream,
+ const Tracepoint &tracepoint, const QString &providerName)
+{
+ stream << "TRACEPOINT_EVENT(\n"
+ << " " << providerName << ",\n"
+ << " " << tracepoint.name << ",\n"
+ << " TP_ARGS(";
+
+ const char *comma = nullptr;
+
+ for (const Tracepoint::Argument &arg : tracepoint.args) {
+ stream << comma << arg.type << ", " << arg.name;
+ comma = ", ";
+ }
+
+ stream << "),\n"
+ << " TP_FIELDS(";
+
+ const char *newline = nullptr;
+
+ for (const Tracepoint::Field &f : tracepoint.fields) {
+ stream << newline;
+ writeCtfMacro(stream, f);
+ newline = "\n ";
+ }
+
+ stream << ")\n)\n\n";
+}
+
+static void writeTracepoints(QTextStream &stream, const Provider &provider)
+{
+ for (const Tracepoint &t : provider.tracepoints) {
+ writeTracepoint(stream, t, provider.name);
+ writeWrapper(stream, t, provider.name);
+ }
+}
+
+void writeLttng(QFile &file, const Provider &provider)
+{
+ QTextStream stream(&file);
+
+ const QString fileName = QFileInfo(file.fileName()).fileName();
+
+ writePrologue(stream, fileName, provider.name);
+ writeTracepoints(stream, provider);
+ writeEpilogue(stream, fileName);
+}
diff --git a/src/tools/tracegen/lttng.h b/src/tools/tracegen/lttng.h
new file mode 100644
index 0000000000..0307b375bc
--- /dev/null
+++ b/src/tools/tracegen/lttng.h
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef LTTNG_H
+#define LTTNG_H
+
+struct Provider;
+class QFile;
+
+void writeLttng(QFile &device, const Provider &p);
+
+#endif // LTTNG_H
diff --git a/src/tools/tracegen/panic.cpp b/src/tools/tracegen/panic.cpp
new file mode 100644
index 0000000000..d1e207764e
--- /dev/null
+++ b/src/tools/tracegen/panic.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "panic.h"
+
+#include <cstdarg>
+#include <cstdio>
+#include <cstdlib>
+
+void panic(const char *fmt, ...)
+{
+ va_list ap;
+
+ fprintf(stderr, "tracegen: fatal: ");
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ fputc('\n', stderr);
+
+ exit(EXIT_FAILURE);
+}
diff --git a/src/tools/tracegen/panic.h b/src/tools/tracegen/panic.h
new file mode 100644
index 0000000000..c6b195af00
--- /dev/null
+++ b/src/tools/tracegen/panic.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PANIC_H
+#define PANIC_H
+
+void panic(const char *fmt, ...);
+
+#endif // PANIC_H
diff --git a/src/tools/tracegen/provider.cpp b/src/tools/tracegen/provider.cpp
new file mode 100644
index 0000000000..00e105377e
--- /dev/null
+++ b/src/tools/tracegen/provider.cpp
@@ -0,0 +1,304 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "provider.h"
+#include "panic.h"
+
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtextstream.h>
+#include <qregexp.h>
+#include <qstring.h>
+
+#ifdef TRACEGEN_DEBUG
+#include <qdebug.h>
+
+static void dumpTracepoint(const Tracepoint &t)
+{
+ qDebug() << "=== BEGIN TRACEPOINT ===";
+ qDebug() << "name:" << t.name;
+ qDebug() << "ARGS\n";
+
+ int j = 0;
+
+ for (auto i = t.args.constBegin(); i != t.args.constEnd(); ++i) {
+ qDebug() << "ARG[" << j << "] type:" << i->type;
+ qDebug() << "ARG[" << j << "] name:" << i->name;
+ qDebug() << "ARG[" << j << "] arrayLen:" << i->arrayLen;
+ ++j;
+ }
+
+ qDebug() << "\nFIELDS\n";
+
+ j = 0;
+
+ for (auto i = t.fields.constBegin(); i != t.fields.constEnd(); ++i) {
+ qDebug() << "FIELD[" << j << "] backend_type" << static_cast<int>(i->backendType);
+ qDebug() << "FIELD[" << j << "] param_type" << i->paramType;
+ qDebug() << "FIELD[" << j << "] name" << i->name;
+ qDebug() << "FIELD[" << j << "] arrayLen" << i->arrayLen;
+ qDebug() << "FIELD[" << j << "] seqLen" << i->seqLen;
+ ++j;
+ }
+
+ qDebug() << "=== END TRACEPOINT ===\n";
+
+}
+#endif
+
+static inline int arrayLength(const QString &rawType)
+{
+ /* matches the length of an ordinary array type
+ * Ex: foo[10] yields '10'
+ */
+ static const QRegExp rx(QStringLiteral(".*\\[([0-9]+)\\].*"));
+
+ if (!rx.exactMatch(rawType.trimmed()))
+ return 0;
+
+ return rx.cap(1).toInt();
+}
+
+static inline QString sequenceLength(const QString &rawType)
+{
+ /* matches the identifier pointing to length of a CTF sequence type, which is
+ * a dynamic sized array.
+ * Ex: in qcoreapplication_foo(const char[len], some_string, unsigned int, * len)
+ * it will match the 'len' part of 'const char[len]')
+ */
+ static const QRegExp rx(QStringLiteral(".*\\[([A-Za-z_][A-Za-z_0-9]*)\\].*"));
+
+ if (!rx.exactMatch(rawType.trimmed()))
+ return QString();
+
+ return rx.cap(1);
+}
+
+static QString decayArrayToPointer(QString type)
+{
+ /* decays an array to a pointer, i.e., if 'type' holds int[10],
+ * this function returns 'int *'
+ */
+ static QRegExp rx(QStringLiteral("\\[(.+)\\]"));
+
+ rx.setMinimal(true);
+ return type.replace(rx, QStringLiteral("*"));
+}
+
+static QString removeBraces(QString type)
+{
+ static const QRegExp rx(QStringLiteral("\\[.*\\]"));
+
+ return type.remove(rx);
+}
+
+static Tracepoint::Field::BackendType backendType(QString rawType)
+{
+ static const struct {
+ const char *type;
+ Tracepoint::Field::BackendType backendType;
+ } typeTable[] = {
+ { "bool", Tracepoint::Field::Integer },
+ { "short_int", Tracepoint::Field::Integer },
+ { "signed_short", Tracepoint::Field::Integer },
+ { "signed_short_int", Tracepoint::Field::Integer },
+ { "unsigned_short", Tracepoint::Field::Integer },
+ { "unsigned_short_int", Tracepoint::Field::Integer },
+ { "int", Tracepoint::Field::Integer },
+ { "signed", Tracepoint::Field::Integer },
+ { "signed_int", Tracepoint::Field::Integer },
+ { "unsigned", Tracepoint::Field::Integer },
+ { "unsigned_int", Tracepoint::Field::Integer },
+ { "long", Tracepoint::Field::Integer },
+ { "long_int", Tracepoint::Field::Integer },
+ { "signed_long", Tracepoint::Field::Integer },
+ { "signed_long_int", Tracepoint::Field::Integer },
+ { "unsigned_long", Tracepoint::Field::Integer },
+ { "unsigned_long_int", Tracepoint::Field::Integer },
+ { "long_long", Tracepoint::Field::Integer },
+ { "long_long_int", Tracepoint::Field::Integer },
+ { "signed_long_long", Tracepoint::Field::Integer },
+ { "signed_long_long_int", Tracepoint::Field::Integer },
+ { "unsigned_long_long", Tracepoint::Field::Integer },
+ { "char", Tracepoint::Field::Integer },
+ { "float", Tracepoint::Field::Float },
+ { "double", Tracepoint::Field::Float },
+ { "long_double", Tracepoint::Field::Float },
+ { "char_ptr", Tracepoint::Field::String },
+ { "QString", Tracepoint::Field::QtString },
+ { "QByteArray", Tracepoint::Field::QtByteArray },
+ { "QUrl", Tracepoint::Field::QtUrl },
+ { "QRect", Tracepoint::Field::QtRect }
+ };
+
+ auto backendType = [](const QString &rawType) {
+
+ static const size_t tableSize = sizeof (typeTable) / sizeof (typeTable[0]);
+
+ for (size_t i = 0; i < tableSize; ++i) {
+ if (rawType == QLatin1String(typeTable[i].type))
+ return typeTable[i].backendType;
+ }
+
+ return Tracepoint::Field::Unknown;
+ };
+
+ if (arrayLength(rawType) > 0)
+ return Tracepoint::Field::Array;
+
+ if (!sequenceLength(rawType).isNull())
+ return Tracepoint::Field::Sequence;
+
+ static const QRegExp constMatch(QStringLiteral("\\bconst\\b"));
+ rawType.remove(constMatch);
+ rawType.remove(QLatin1Char('&'));
+
+ static const QRegExp ptrMatch(QStringLiteral("\\s*\\*\\s*"));
+ rawType.replace(ptrMatch, QStringLiteral("_ptr"));
+ rawType = rawType.trimmed();
+ rawType.replace(QStringLiteral(" "), QStringLiteral("_"));
+
+ return backendType(rawType.trimmed());
+}
+
+static Tracepoint parseTracepoint(const QString &name, const QStringList &args,
+ const QString &fileName, const int lineNumber)
+{
+ Tracepoint t;
+ t.name = name;
+
+ if (args.isEmpty())
+ return t;
+
+ auto i = args.constBegin();
+ auto end = args.constEnd();
+ int argc = 0;
+
+ static const QRegExp rx(QStringLiteral("(.*)\\b([A-Za-z_][A-Za-z0-9_]*)$"));
+
+ while (i != end) {
+ rx.exactMatch(*i);
+
+ const QString type = rx.cap(1).trimmed();
+
+ if (type.isNull()) {
+ panic("Missing parameter type for argument %d of %s (%s:%d)",
+ argc, qPrintable(name), qPrintable(fileName), lineNumber);
+ }
+
+ const QString name = rx.cap(2).trimmed();
+
+ if (name.isNull()) {
+ panic("Missing parameter name for argument %d of %s (%s:%d)",
+ argc, qPrintable(name), qPrintable(fileName), lineNumber);
+ }
+
+ int arrayLen = arrayLength(type);
+
+ Tracepoint::Argument a;
+ a.arrayLen = arrayLen;
+ a.name = name;
+ a.type = decayArrayToPointer(type);
+
+ t.args << std::move(a);
+
+ Tracepoint::Field f;
+ f.backendType = backendType(type);
+ f.paramType = removeBraces(type);
+ f.name = name;
+ f.arrayLen = arrayLen;
+ f.seqLen = sequenceLength(type);
+
+ t.fields << std::move(f);
+
+ ++i;
+ }
+
+ return t;
+}
+
+Provider parseProvider(const QString &filename)
+{
+ QFile f(filename);
+
+ if (!f.open(QIODevice::ReadOnly | QIODevice::Text))
+ panic("Cannot open %s: %s", qPrintable(filename), qPrintable(f.errorString()));
+
+ QTextStream s(&f);
+
+ static const QRegExp tracedef(QStringLiteral("([A-Za-z][A-Za-z0-9_]*)\\((.*)\\)"));
+
+ int lineNumber = 0;
+
+ Provider provider;
+ provider.name = QFileInfo(filename).baseName();
+
+ for (;;) {
+ QString line = s.readLine().trimmed();
+
+ if (line.isNull())
+ break;
+
+ if (line.isEmpty() || line.startsWith(QStringLiteral("#"))) {
+ ++lineNumber;
+ continue;
+ }
+
+ if (tracedef.exactMatch(line)) {
+ const QString name = tracedef.cap(1);
+ QStringList args = tracedef.cap(2).split(QStringLiteral(","), QString::SkipEmptyParts);
+
+ if (args.at(0).isNull())
+ args.clear();
+
+ provider.tracepoints << parseTracepoint(name, args, filename, lineNumber);
+ } else {
+ panic("Syntax error whilre processing %s on line %d", qPrintable(filename), lineNumber);
+ }
+
+ ++lineNumber;
+ }
+
+#ifdef TRACEGEN_DEBUG
+ for (auto i = provider.tracepoints.constBegin(); i != provider.tracepoints.constEnd(); ++i)
+ dumpTracepoint(*i);
+#endif
+
+ return provider;
+}
diff --git a/src/tools/tracegen/provider.h b/src/tools/tracegen/provider.h
new file mode 100644
index 0000000000..d8cbd2662d
--- /dev/null
+++ b/src/tools/tracegen/provider.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PROVIDER_H
+#define PROVIDER_H
+
+#include <qvector.h>
+#include <qstring.h>
+#include <qtypeinfo.h>
+
+struct Tracepoint
+{
+ struct Argument
+ {
+ QString type;
+ QString name;
+ int arrayLen;
+ };
+
+ struct Field
+ {
+ enum BackendType {
+ Array,
+ Sequence,
+ Integer,
+ Float,
+ String,
+ QtString,
+ QtByteArray,
+ QtUrl,
+ QtRect,
+ Unknown
+ };
+
+ BackendType backendType;
+ QString paramType;
+ QString name;
+ int arrayLen;
+ QString seqLen;
+ };
+
+ QString name;
+ QVector<Argument> args;
+ QVector<Field> fields;
+};
+
+struct Provider
+{
+ QString name;
+ QVector<Tracepoint> tracepoints;
+};
+
+Provider parseProvider(const QString &filename);
+
+Q_DECLARE_TYPEINFO(Tracepoint::Argument, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(Tracepoint::Field, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(Tracepoint, Q_MOVABLE_TYPE);
+
+#endif // PROVIDER_H
diff --git a/src/tools/tracegen/qtheaders.cpp b/src/tools/tracegen/qtheaders.cpp
new file mode 100644
index 0000000000..eec3488a6d
--- /dev/null
+++ b/src/tools/tracegen/qtheaders.cpp
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qtheaders.h"
+
+const char *qtHeaders()
+{
+ static const char headers[] = ""
+ "#include <QString>\n"
+ "#include <QByteArray>\n"
+ "#include <QUrl>\n"
+ "#include <QRect>\n";
+
+ return headers;
+}
diff --git a/src/tools/tracegen/qtheaders.h b/src/tools/tracegen/qtheaders.h
new file mode 100644
index 0000000000..b80d374ca8
--- /dev/null
+++ b/src/tools/tracegen/qtheaders.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTHEADERS_H
+#define QTHEADERS_H
+
+const char *qtHeaders();
+
+#endif // QTHEADERS_H
diff --git a/src/tools/tracegen/tracegen.cpp b/src/tools/tracegen/tracegen.cpp
new file mode 100644
index 0000000000..978fe406d0
--- /dev/null
+++ b/src/tools/tracegen/tracegen.cpp
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the tools applications of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "provider.h"
+#include "lttng.h"
+#include "etw.h"
+#include "panic.h"
+
+#include <qstring.h>
+#include <qfile.h>
+
+enum class Target
+{
+ LTTNG,
+ ETW
+};
+
+static inline void usage(int status)
+{
+ printf("Usage: tracegen <lttng|etw> <input file> <output file>\n");
+ exit(status);
+}
+
+static void parseArgs(int argc, char *argv[], Target *target, QString *inFile, QString *outFile)
+{
+ if (argc == 1)
+ usage(EXIT_SUCCESS);
+ if (argc != 4)
+ usage(EXIT_FAILURE);
+
+ const char *targetString = argv[1];
+
+ if (qstrcmp(targetString, "lttng") == 0) {
+ *target = Target::LTTNG;
+ } else if (qstrcmp(targetString, "etw") == 0) {
+ *target = Target::ETW;
+ } else {
+ fprintf(stderr, "Invalid target: %s\n", targetString);
+ usage(EXIT_FAILURE);
+ }
+
+ *inFile = QLatin1String(argv[2]);
+ *outFile = QLatin1String(argv[3]);
+}
+
+int main(int argc, char *argv[])
+{
+ Target target = Target::LTTNG;
+ QString inFile;
+ QString outFile;
+
+ parseArgs(argc, argv, &target, &inFile, &outFile);
+
+ Provider p = parseProvider(inFile);
+
+ QFile out(outFile);
+
+ if (!out.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
+ panic("Cannot open '%s' for writing: %s",
+ qPrintable(outFile), qPrintable(out.errorString()));
+ }
+
+ switch (target) {
+ case Target::LTTNG:
+ writeLttng(out, p);
+ break;
+ case Target::ETW:
+ writeEtw(out, p);
+ break;
+ }
+
+ return 0;
+}
diff --git a/src/tools/tracegen/tracegen.pro b/src/tools/tracegen/tracegen.pro
new file mode 100644
index 0000000000..20f0bb2914
--- /dev/null
+++ b/src/tools/tracegen/tracegen.pro
@@ -0,0 +1,21 @@
+option(host_build)
+CONFIG += force_bootstrap
+
+SOURCES += \
+ etw.cpp \
+ helpers.cpp \
+ lttng.cpp \
+ panic.cpp \
+ provider.cpp \
+ qtheaders.cpp \
+ tracegen.cpp
+
+HEADERS += \
+ etw.h \
+ helpers.h \
+ lttng.h \
+ panic.h \
+ provider.h \
+ qtheaders.h
+
+load(qt_tool)
diff --git a/src/tools/uic/cpp/cppwritedeclaration.h b/src/tools/uic/cpp/cppwritedeclaration.h
index ca2122293c..f83bfe8f50 100644
--- a/src/tools/uic/cpp/cppwritedeclaration.h
+++ b/src/tools/uic/cpp/cppwritedeclaration.h
@@ -45,13 +45,13 @@ struct WriteDeclaration : public TreeWalker
{
WriteDeclaration(Uic *uic);
- void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
- void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
- void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
- void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
- void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
- void acceptButtonGroup(const DomButtonGroup *buttonGroup) Q_DECL_OVERRIDE;
+ void acceptUI(DomUI *node) override;
+ void acceptWidget(DomWidget *node) override;
+ void acceptSpacer(DomSpacer *node) override;
+ void acceptLayout(DomLayout *node) override;
+ void acceptActionGroup(DomActionGroup *node) override;
+ void acceptAction(DomAction *node) override;
+ void acceptButtonGroup(const DomButtonGroup *buttonGroup) override;
private:
Uic *m_uic;
diff --git a/src/tools/uic/cpp/cppwriteincludes.cpp b/src/tools/uic/cpp/cppwriteincludes.cpp
index de64b85219..0ba9d28642 100644
--- a/src/tools/uic/cpp/cppwriteincludes.cpp
+++ b/src/tools/uic/cpp/cppwriteincludes.cpp
@@ -106,10 +106,9 @@ void WriteIncludes::acceptUI(DomUI *node)
add(QLatin1String("QApplication"));
add(QLatin1String("QVariant"));
- add(QLatin1String("QAction"));
- add(QLatin1String("QButtonGroup")); // ### only if it is really necessary
- add(QLatin1String("QHeaderView"));
+ if (node->elementButtonGroups())
+ add(QLatin1String("QButtonGroup"));
TreeWalker::acceptUI(node);
@@ -212,6 +211,14 @@ void WriteIncludes::add(const QString &className, bool determineHeader, const QS
m_knownClasses.insert(className);
+ const CustomWidgetsInfo *cwi = m_uic->customWidgetsInfo();
+ if (cwi->extends(className, QLatin1String("QTreeView"))
+ || cwi->extends(className, QLatin1String("QTreeWidget"))
+ || cwi->extends(className, QLatin1String("QTableView"))
+ || cwi->extends(className, QLatin1String("QTableWidget"))) {
+ add(QLatin1String("QHeaderView"));
+ }
+
if (!m_laidOut && m_uic->customWidgetsInfo()->extends(className, QLatin1String("QToolBox")))
add(QLatin1String("QLayout")); // spacing property of QToolBox)
@@ -244,6 +251,24 @@ void WriteIncludes::acceptCustomWidget(DomCustomWidget *node)
}
}
+void WriteIncludes::acceptActionGroup(DomActionGroup *node)
+{
+ add(QLatin1String("QAction"));
+ TreeWalker::acceptActionGroup(node);
+}
+
+void WriteIncludes::acceptAction(DomAction *node)
+{
+ add(QLatin1String("QAction"));
+ TreeWalker::acceptAction(node);
+}
+
+void WriteIncludes::acceptActionRef(DomActionRef *node)
+{
+ add(QLatin1String("QAction"));
+ TreeWalker::acceptActionRef(node);
+}
+
void WriteIncludes::acceptCustomWidgets(DomCustomWidgets *node)
{
Q_UNUSED(node);
diff --git a/src/tools/uic/cpp/cppwriteincludes.h b/src/tools/uic/cpp/cppwriteincludes.h
index 0d9c293efc..7f03849798 100644
--- a/src/tools/uic/cpp/cppwriteincludes.h
+++ b/src/tools/uic/cpp/cppwriteincludes.h
@@ -49,23 +49,30 @@ struct WriteIncludes : public TreeWalker
{
WriteIncludes(Uic *uic);
- void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
- void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
- void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
- void acceptProperty(DomProperty *node) Q_DECL_OVERRIDE;
+ void acceptUI(DomUI *node) override;
+ void acceptWidget(DomWidget *node) override;
+ void acceptLayout(DomLayout *node) override;
+ void acceptSpacer(DomSpacer *node) override;
+ void acceptProperty(DomProperty *node) override;
+
+//
+// actions
+//
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
+ void acceptActionRef(DomActionRef *node) Q_DECL_OVERRIDE;
//
// custom widgets
//
- void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
- void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidgets(DomCustomWidgets *node) override;
+ void acceptCustomWidget(DomCustomWidget *node) override;
//
// include hints
//
- void acceptIncludes(DomIncludes *node) Q_DECL_OVERRIDE;
- void acceptInclude(DomInclude *node) Q_DECL_OVERRIDE;
+ void acceptIncludes(DomIncludes *node) override;
+ void acceptInclude(DomInclude *node) override;
private:
void add(const QString &className, bool determineHeader = true, const QString &header = QString(), bool global = false);
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 86908147d8..9ab5fd4eb0 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -2261,7 +2261,7 @@ void WriteInitialization::initializeTableWidget(DomWidget *w)
enableSorting(w, varName, tempName);
}
-QString WriteInitialization::trCall(const QString &str, const QString &commentHint) const
+QString WriteInitialization::trCall(const QString &str, const QString &commentHint, const QString &id) const
{
if (str.isEmpty())
return QLatin1String("QString()");
@@ -2269,8 +2269,9 @@ QString WriteInitialization::trCall(const QString &str, const QString &commentHi
QString result;
const QString comment = commentHint.isEmpty() ? QString(QLatin1String("nullptr")) : fixString(commentHint, m_dindent);
+ const bool idBasedTranslations = m_driver->useIdBasedTranslations();
if (m_option.translateFunction.isEmpty()) {
- if (m_option.idBased) {
+ if (idBasedTranslations || m_option.idBased) {
result += QLatin1String("qtTrId(");
} else {
result += QLatin1String("QApplication::translate(\"")
@@ -2281,9 +2282,9 @@ QString WriteInitialization::trCall(const QString &str, const QString &commentHi
result += m_option.translateFunction + QLatin1Char('(');
}
- result += fixString(str, m_dindent);
+ result += fixString(idBasedTranslations ? id : str, m_dindent);
- if (!m_option.idBased) {
+ if (!idBasedTranslations && !m_option.idBased) {
result += QLatin1String(", ") + comment;
}
@@ -2306,11 +2307,13 @@ QString WriteInitialization::trCall(DomString *str, const QString &defaultString
{
QString value = defaultString;
QString comment;
+ QString id;
if (str) {
value = toString(str);
comment = str->attributeComment();
+ id = str->attributeId();
}
- return trCall(value, comment);
+ return trCall(value, comment, id);
}
QString WriteInitialization::noTrCall(DomString *str, const QString &defaultString) const
diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h
index b26f51875d..21116057d4 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.h
+++ b/src/tools/uic/cpp/cppwriteinitialization.h
@@ -93,41 +93,41 @@ struct WriteInitialization : public TreeWalker
//
// widgets
//
- void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptUI(DomUI *node) override;
+ void acceptWidget(DomWidget *node) override;
- void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
- void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
- void acceptLayoutItem(DomLayoutItem *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) override;
+ void acceptSpacer(DomSpacer *node) override;
+ void acceptLayoutItem(DomLayoutItem *node) override;
//
// actions
//
- void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
- void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
- void acceptActionRef(DomActionRef *node) Q_DECL_OVERRIDE;
+ void acceptActionGroup(DomActionGroup *node) override;
+ void acceptAction(DomAction *node) override;
+ void acceptActionRef(DomActionRef *node) override;
//
// tab stops
//
- void acceptTabStops(DomTabStops *tabStops) Q_DECL_OVERRIDE;
+ void acceptTabStops(DomTabStops *tabStops) override;
//
// custom widgets
//
- void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
- void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidgets(DomCustomWidgets *node) override;
+ void acceptCustomWidget(DomCustomWidget *node) override;
//
// layout defaults/functions
//
- void acceptLayoutDefault(DomLayoutDefault *node) Q_DECL_OVERRIDE { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
- void acceptLayoutFunction(DomLayoutFunction *node) Q_DECL_OVERRIDE { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
+ void acceptLayoutDefault(DomLayoutDefault *node) override { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
+ void acceptLayoutFunction(DomLayoutFunction *node) override { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
//
// signal/slot connections
//
- void acceptConnection(DomConnection *connection) Q_DECL_OVERRIDE;
+ void acceptConnection(DomConnection *connection) override;
enum {
Use43UiFile = 0,
@@ -144,7 +144,7 @@ private:
QString iconCall(const DomProperty *prop);
QString pixCall(const DomProperty *prop) const;
QString pixCall(const QString &type, const QString &text) const;
- QString trCall(const QString &str, const QString &comment = QString()) const;
+ QString trCall(const QString &str, const QString &comment = QString(), const QString &id = QString()) const;
QString trCall(DomString *str, const QString &defaultString = QString()) const;
QString noTrCall(DomString *str, const QString &defaultString = QString()) const;
QString autoTrCall(DomString *str, const QString &defaultString = QString()) const;
diff --git a/src/tools/uic/customwidgetsinfo.h b/src/tools/uic/customwidgetsinfo.h
index 3ce27d546c..944ed59215 100644
--- a/src/tools/uic/customwidgetsinfo.h
+++ b/src/tools/uic/customwidgetsinfo.h
@@ -43,10 +43,10 @@ class CustomWidgetsInfo : public TreeWalker
public:
CustomWidgetsInfo();
- void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptUI(DomUI *node) override;
- void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
- void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidgets(DomCustomWidgets *node) override;
+ void acceptCustomWidget(DomCustomWidget *node) override;
inline QStringList customWidgets() const
{ return m_customWidgets.keys(); }
diff --git a/src/tools/uic/databaseinfo.h b/src/tools/uic/databaseinfo.h
index c313681278..bebf139c5a 100644
--- a/src/tools/uic/databaseinfo.h
+++ b/src/tools/uic/databaseinfo.h
@@ -42,8 +42,8 @@ class DatabaseInfo : public TreeWalker
public:
DatabaseInfo();
- void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptUI(DomUI *node) override;
+ void acceptWidget(DomWidget *node) override;
inline QStringList connections() const
{ return m_connections; }
diff --git a/src/tools/uic/driver.cpp b/src/tools/uic/driver.cpp
index 5f56007f6c..72be667468 100644
--- a/src/tools/uic/driver.cpp
+++ b/src/tools/uic/driver.cpp
@@ -251,6 +251,7 @@ bool Driver::printDependencies(const QString &fileName)
bool Driver::uic(const QString &fileName, DomUI *ui, QTextStream *out)
{
m_option.inputFile = fileName;
+ setUseIdBasedTranslations(ui->attributeIdbasedtr());
QTextStream *oldOutput = m_output;
diff --git a/src/tools/uic/driver.h b/src/tools/uic/driver.h
index 56de89aa05..41c1572860 100644
--- a/src/tools/uic/driver.h
+++ b/src/tools/uic/driver.h
@@ -103,6 +103,9 @@ public:
void insertPixmap(const QString &pixmap);
bool containsPixmap(const QString &pixmap) const;
+ bool useIdBasedTranslations() const { return m_idBasedTranslations; }
+ void setUseIdBasedTranslations(bool u) { m_idBasedTranslations = u; }
+
private:
Option m_option;
QTextStream m_stdout;
@@ -120,6 +123,7 @@ private:
QHash<DomAction*, QString> m_actions;
QHash<QString, bool> m_nameRepository;
QHash<QString, bool> m_pixmaps;
+ bool m_idBasedTranslations = false;
};
QT_END_NAMESPACE
diff --git a/src/tools/uic/ui4.cpp b/src/tools/uic/ui4.cpp
index bc1039871e..7a1d755bb4 100644
--- a/src/tools/uic/ui4.cpp
+++ b/src/tools/uic/ui4.cpp
@@ -72,6 +72,10 @@ void DomUI::read(QXmlStreamReader &reader)
setAttributeDisplayname(attribute.value().toString());
continue;
}
+ if (name == QLatin1String("idbasedtr")) {
+ setAttributeIdbasedtr(attribute.value() == QLatin1String("true"));
+ continue;
+ }
if (name == QLatin1String("stdsetdef")) {
setAttributeStdsetdef(attribute.value().toInt());
continue;
@@ -202,6 +206,9 @@ void DomUI::write(QXmlStreamWriter &writer, const QString &tagName) const
if (hasAttributeDisplayname())
writer.writeAttribute(QStringLiteral("displayname"), attributeDisplayname());
+ if (hasAttributeIdbasedtr())
+ writer.writeAttribute(QStringLiteral("idbasedtr"), (attributeIdbasedtr() ? QLatin1String("true") : QLatin1String("false")));
+
if (hasAttributeStdsetdef())
writer.writeAttribute(QStringLiteral("stdsetdef"), QString::number(attributeStdsetdef()));
@@ -4027,6 +4034,10 @@ void DomStringList::read(QXmlStreamReader &reader)
setAttributeExtraComment(attribute.value().toString());
continue;
}
+ if (name == QLatin1String("id")) {
+ setAttributeId(attribute.value().toString());
+ continue;
+ }
reader.raiseError(QLatin1String("Unexpected attribute ") + name);
}
@@ -4062,6 +4073,9 @@ void DomStringList::write(QXmlStreamWriter &writer, const QString &tagName) cons
if (hasAttributeExtraComment())
writer.writeAttribute(QStringLiteral("extracomment"), attributeExtraComment());
+ if (hasAttributeId())
+ writer.writeAttribute(QStringLiteral("id"), attributeId());
+
for (const QString &v : m_string)
writer.writeTextElement(QStringLiteral("string"), v);
@@ -4461,6 +4475,10 @@ void DomString::read(QXmlStreamReader &reader)
setAttributeExtraComment(attribute.value().toString());
continue;
}
+ if (name == QLatin1String("id")) {
+ setAttributeId(attribute.value().toString());
+ continue;
+ }
reader.raiseError(QLatin1String("Unexpected attribute ") + name);
}
@@ -4496,6 +4514,9 @@ void DomString::write(QXmlStreamWriter &writer, const QString &tagName) const
if (hasAttributeExtraComment())
writer.writeAttribute(QStringLiteral("extracomment"), attributeExtraComment());
+ if (hasAttributeId())
+ writer.writeAttribute(QStringLiteral("id"), attributeId());
+
if (!m_text.isEmpty())
writer.writeCharacters(m_text);
diff --git a/src/tools/uic/ui4.h b/src/tools/uic/ui4.h
index 08a5ed01d5..1710147342 100644
--- a/src/tools/uic/ui4.h
+++ b/src/tools/uic/ui4.h
@@ -164,6 +164,11 @@ public:
inline void setAttributeDisplayname(const QString &a) { m_attr_displayname = a; m_has_attr_displayname = true; }
inline void clearAttributeDisplayname() { m_has_attr_displayname = false; }
+ inline bool hasAttributeIdbasedtr() const { return m_has_attr_idbasedtr; }
+ inline bool attributeIdbasedtr() const { return m_attr_idbasedtr; }
+ inline void setAttributeIdbasedtr(bool a) { m_attr_idbasedtr = a; m_has_attr_idbasedtr = true; }
+ inline void clearAttributeIdbasedtr() { m_has_attr_idbasedtr = false; }
+
inline bool hasAttributeStdsetdef() const { return m_has_attr_stdsetdef; }
inline int attributeStdsetdef() const { return m_attr_stdsetdef; }
inline void setAttributeStdsetdef(int a) { m_attr_stdsetdef = a; m_has_attr_stdsetdef = true; }
@@ -277,6 +282,9 @@ private:
QString m_attr_displayname;
bool m_has_attr_displayname = false;
+ bool m_attr_idbasedtr = false;
+ bool m_has_attr_idbasedtr = false;
+
int m_attr_stdsetdef = 0;
bool m_has_attr_stdsetdef = false;
@@ -2056,6 +2064,11 @@ public:
inline void setAttributeExtraComment(const QString &a) { m_attr_extraComment = a; m_has_attr_extraComment = true; }
inline void clearAttributeExtraComment() { m_has_attr_extraComment = false; }
+ inline bool hasAttributeId() const { return m_has_attr_id; }
+ inline QString attributeId() const { return m_attr_id; }
+ inline void setAttributeId(const QString &a) { m_attr_id = a; m_has_attr_id = true; }
+ inline void clearAttributeId() { m_has_attr_id = false; }
+
// child element accessors
inline QStringList elementString() const { return m_string; }
void setElementString(const QStringList &a);
@@ -2071,6 +2084,9 @@ private:
QString m_attr_extraComment;
bool m_has_attr_extraComment = false;
+ QString m_attr_id;
+ bool m_has_attr_id = false;
+
// child element data
uint m_children = 0;
QStringList m_string;
@@ -2247,6 +2263,11 @@ public:
inline void setAttributeExtraComment(const QString &a) { m_attr_extraComment = a; m_has_attr_extraComment = true; }
inline void clearAttributeExtraComment() { m_has_attr_extraComment = false; }
+ inline bool hasAttributeId() const { return m_has_attr_id; }
+ inline QString attributeId() const { return m_attr_id; }
+ inline void setAttributeId(const QString &a) { m_attr_id = a; m_has_attr_id = true; }
+ inline void clearAttributeId() { m_has_attr_id = false; }
+
private:
QString m_text;
@@ -2259,6 +2280,9 @@ private:
QString m_attr_extraComment;
bool m_has_attr_extraComment = false;
+
+ QString m_attr_id;
+ bool m_has_attr_id = false;
};
class QDESIGNER_UILIB_EXPORT DomPointF {
diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp
index 48756db651..8e4709c831 100644
--- a/src/tools/uic/uic.cpp
+++ b/src/tools/uic/uic.cpp
@@ -198,7 +198,7 @@ bool Uic::write(QIODevice *in)
}
QString language = ui->attributeLanguage();
-
+ driver()->setUseIdBasedTranslations(ui->attributeIdbasedtr());
bool rtn = false;
diff --git a/src/tools/uic/validator.h b/src/tools/uic/validator.h
index e0a99b47ef..f7f7401991 100644
--- a/src/tools/uic/validator.h
+++ b/src/tools/uic/validator.h
@@ -43,14 +43,14 @@ struct Validator : public TreeWalker
{
Validator(Uic *uic);
- void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptUI(DomUI *node) override;
+ void acceptWidget(DomWidget *node) override;
- void acceptLayoutItem(DomLayoutItem *node) Q_DECL_OVERRIDE;
- void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptLayoutItem(DomLayoutItem *node) override;
+ void acceptLayout(DomLayout *node) override;
- void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
- void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
+ void acceptActionGroup(DomActionGroup *node) override;
+ void acceptAction(DomAction *node) override;
private:
Driver *m_driver;
diff --git a/src/widgets/accessible/complexwidgets.cpp b/src/widgets/accessible/complexwidgets.cpp
index 0f88554415..6cdc06d702 100644
--- a/src/widgets/accessible/complexwidgets.cpp
+++ b/src/widgets/accessible/complexwidgets.cpp
@@ -93,16 +93,16 @@ public:
: m_parent(parent), m_index(index)
{}
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE {
+ void *interface_cast(QAccessible::InterfaceType t) override {
if (t == QAccessible::ActionInterface) {
return static_cast<QAccessibleActionInterface*>(this);
}
return 0;
}
- QObject *object() const Q_DECL_OVERRIDE { return 0; }
- QAccessible::Role role() const Q_DECL_OVERRIDE { return QAccessible::PageTab; }
- QAccessible::State state() const Q_DECL_OVERRIDE {
+ QObject *object() const override { return 0; }
+ QAccessible::Role role() const override { return QAccessible::PageTab; }
+ QAccessible::State state() const override {
if (!isValid()) {
QAccessible::State s;
s.invalid = true;
@@ -110,7 +110,7 @@ public:
}
return parent()->state();
}
- QRect rect() const Q_DECL_OVERRIDE {
+ QRect rect() const override {
if (!isValid())
return QRect();
@@ -120,13 +120,13 @@ public:
return rec;
}
- bool isValid() const Q_DECL_OVERRIDE { return m_parent.data() && m_parent->count() > m_index; }
+ bool isValid() const override { return m_parent.data() && m_parent->count() > m_index; }
- QAccessibleInterface *childAt(int, int) const Q_DECL_OVERRIDE { return 0; }
- int childCount() const Q_DECL_OVERRIDE { return 0; }
- int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE { return -1; }
+ QAccessibleInterface *childAt(int, int) const override { return 0; }
+ int childCount() const override { return 0; }
+ int indexOfChild(const QAccessibleInterface *) const override { return -1; }
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE
+ QString text(QAccessible::Text t) const override
{
if (!isValid())
return QString();
@@ -156,26 +156,26 @@ public:
return str;
}
- void setText(QAccessible::Text, const QString &) Q_DECL_OVERRIDE {}
+ void setText(QAccessible::Text, const QString &) override {}
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE {
+ QAccessibleInterface *parent() const override {
return QAccessible::queryAccessibleInterface(m_parent.data());
}
- QAccessibleInterface *child(int) const Q_DECL_OVERRIDE { return 0; }
+ QAccessibleInterface *child(int) const override { return 0; }
// action interface
- QStringList actionNames() const Q_DECL_OVERRIDE
+ QStringList actionNames() const override
{
return QStringList(pressAction());
}
- void doAction(const QString &actionName) Q_DECL_OVERRIDE
+ void doAction(const QString &actionName) override
{
if (isValid() && actionName == pressAction())
m_parent->setCurrentIndex(m_index);
}
- QStringList keyBindingsForAction(const QString &) const Q_DECL_OVERRIDE
+ QStringList keyBindingsForAction(const QString &) const override
{
return QStringList();
}
diff --git a/src/widgets/accessible/complexwidgets_p.h b/src/widgets/accessible/complexwidgets_p.h
index 1887f98dca..96db2dab70 100644
--- a/src/widgets/accessible/complexwidgets_p.h
+++ b/src/widgets/accessible/complexwidgets_p.h
@@ -85,11 +85,11 @@ public:
Undefined
};
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *child(int index) const override;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ bool isValid() const override;
+ QAccessibleInterface *childAt(int x, int y) const override;
//protected:
QAbstractScrollArea *abstractScrollArea() const;
@@ -114,11 +114,11 @@ public:
explicit QAccessibleTabBar(QWidget *w);
~QAccessibleTabBar();
- int childCount() const Q_DECL_OVERRIDE;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ QString text(QAccessible::Text t) const override;
- QAccessibleInterface* child(int index) const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
+ QAccessibleInterface* child(int index) const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
protected:
QTabBar *tabBar() const;
@@ -132,18 +132,18 @@ class QAccessibleComboBox : public QAccessibleWidget
public:
explicit QAccessibleComboBox(QWidget *w);
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- QAccessibleInterface* child(int index) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ QAccessibleInterface *childAt(int x, int y) const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ QAccessibleInterface* child(int index) const override;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
// QAccessibleActionInterface
- QStringList actionNames() const Q_DECL_OVERRIDE;
- QString localizedActionDescription(const QString &actionName) const Q_DECL_OVERRIDE;
- void doAction(const QString &actionName) Q_DECL_OVERRIDE;
- QStringList keyBindingsForAction(const QString &actionName) const Q_DECL_OVERRIDE;
+ QStringList actionNames() const override;
+ QString localizedActionDescription(const QString &actionName) const override;
+ void doAction(const QString &actionName) override;
+ QStringList keyBindingsForAction(const QString &actionName) const override;
protected:
QComboBox *comboBox() const;
diff --git a/src/widgets/accessible/itemviews_p.h b/src/widgets/accessible/itemviews_p.h
index 72841b8a0f..683ae9c948 100644
--- a/src/widgets/accessible/itemviews_p.h
+++ b/src/widgets/accessible/itemviews_p.h
@@ -71,48 +71,48 @@ class QAccessibleTable :public QAccessibleTableInterface, public QAccessibleObje
{
public:
explicit QAccessibleTable(QWidget *w);
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- QRect rect() const Q_DECL_OVERRIDE;
+ QAccessible::Role role() const override;
+ QAccessible::State state() const override;
+ QString text(QAccessible::Text t) const override;
+ QRect rect() const override;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *childAt(int x, int y) const override;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *) const override;
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *parent() const override;
+ QAccessibleInterface *child(int index) const override;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// table interface
- virtual QAccessibleInterface *cellAt(int row, int column) const Q_DECL_OVERRIDE;
- virtual QAccessibleInterface *caption() const Q_DECL_OVERRIDE;
- virtual QAccessibleInterface *summary() const Q_DECL_OVERRIDE;
- virtual QString columnDescription(int column) const Q_DECL_OVERRIDE;
- virtual QString rowDescription(int row) const Q_DECL_OVERRIDE;
- virtual int columnCount() const Q_DECL_OVERRIDE;
- virtual int rowCount() const Q_DECL_OVERRIDE;
+ virtual QAccessibleInterface *cellAt(int row, int column) const override;
+ virtual QAccessibleInterface *caption() const override;
+ virtual QAccessibleInterface *summary() const override;
+ virtual QString columnDescription(int column) const override;
+ virtual QString rowDescription(int row) const override;
+ virtual int columnCount() const override;
+ virtual int rowCount() const override;
// selection
- virtual int selectedCellCount() const Q_DECL_OVERRIDE;
- virtual int selectedColumnCount() const Q_DECL_OVERRIDE;
- virtual int selectedRowCount() const Q_DECL_OVERRIDE;
- virtual QList<QAccessibleInterface*> selectedCells() const Q_DECL_OVERRIDE;
- virtual QList<int> selectedColumns() const Q_DECL_OVERRIDE;
- virtual QList<int> selectedRows() const Q_DECL_OVERRIDE;
- virtual bool isColumnSelected(int column) const Q_DECL_OVERRIDE;
- virtual bool isRowSelected(int row) const Q_DECL_OVERRIDE;
- virtual bool selectRow(int row) Q_DECL_OVERRIDE;
- virtual bool selectColumn(int column) Q_DECL_OVERRIDE;
- virtual bool unselectRow(int row) Q_DECL_OVERRIDE;
- virtual bool unselectColumn(int column) Q_DECL_OVERRIDE;
+ virtual int selectedCellCount() const override;
+ virtual int selectedColumnCount() const override;
+ virtual int selectedRowCount() const override;
+ virtual QList<QAccessibleInterface*> selectedCells() const override;
+ virtual QList<int> selectedColumns() const override;
+ virtual QList<int> selectedRows() const override;
+ virtual bool isColumnSelected(int column) const override;
+ virtual bool isRowSelected(int row) const override;
+ virtual bool selectRow(int row) override;
+ virtual bool selectColumn(int column) override;
+ virtual bool unselectRow(int row) override;
+ virtual bool unselectColumn(int column) override;
QAbstractItemView *view() const;
- void modelChange(QAccessibleTableModelChangeEvent *event) Q_DECL_OVERRIDE;
+ void modelChange(QAccessibleTableModelChangeEvent *event) override;
protected:
inline QAccessible::Role cellRole() const {
@@ -153,19 +153,19 @@ public:
{}
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *childAt(int x, int y) const override;
+ int childCount() const override;
+ QAccessibleInterface *child(int index) const override;
- int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE;
+ int indexOfChild(const QAccessibleInterface *) const override;
- int rowCount() const Q_DECL_OVERRIDE;
+ int rowCount() const override;
// table interface
- QAccessibleInterface *cellAt(int row, int column) const Q_DECL_OVERRIDE;
- QString rowDescription(int row) const Q_DECL_OVERRIDE;
- bool isRowSelected(int row) const Q_DECL_OVERRIDE;
- bool selectRow(int row) Q_DECL_OVERRIDE;
+ QAccessibleInterface *cellAt(int row, int column) const override;
+ QString rowDescription(int row) const override;
+ bool isRowSelected(int row) const override;
+ bool selectRow(int row) override;
private:
QModelIndex indexFromLogical(int row, int column = 0) const;
@@ -179,37 +179,37 @@ class QAccessibleTableCell: public QAccessibleInterface, public QAccessibleTable
public:
QAccessibleTableCell(QAbstractItemView *view, const QModelIndex &m_index, QAccessible::Role role);
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
- QObject *object() const Q_DECL_OVERRIDE { return Q_NULLPTR; }
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QRect rect() const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
+ QObject *object() const override { return nullptr; }
+ QAccessible::Role role() const override;
+ QAccessible::State state() const override;
+ QRect rect() const override;
+ bool isValid() const override;
- QAccessibleInterface *childAt(int, int) const Q_DECL_OVERRIDE { return Q_NULLPTR; }
- int childCount() const Q_DECL_OVERRIDE { return 0; }
- int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE { return -1; }
+ QAccessibleInterface *childAt(int, int) const override { return nullptr; }
+ int childCount() const override { return 0; }
+ int indexOfChild(const QAccessibleInterface *) const override { return -1; }
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ void setText(QAccessible::Text t, const QString &text) override;
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *parent() const override;
+ QAccessibleInterface *child(int) const override;
// cell interface
- virtual int columnExtent() const Q_DECL_OVERRIDE;
- virtual QList<QAccessibleInterface*> columnHeaderCells() const Q_DECL_OVERRIDE;
- virtual int columnIndex() const Q_DECL_OVERRIDE;
- virtual int rowExtent() const Q_DECL_OVERRIDE;
- virtual QList<QAccessibleInterface*> rowHeaderCells() const Q_DECL_OVERRIDE;
- virtual int rowIndex() const Q_DECL_OVERRIDE;
- virtual bool isSelected() const Q_DECL_OVERRIDE;
- virtual QAccessibleInterface* table() const Q_DECL_OVERRIDE;
+ virtual int columnExtent() const override;
+ virtual QList<QAccessibleInterface*> columnHeaderCells() const override;
+ virtual int columnIndex() const override;
+ virtual int rowExtent() const override;
+ virtual QList<QAccessibleInterface*> rowHeaderCells() const override;
+ virtual int rowIndex() const override;
+ virtual bool isSelected() const override;
+ virtual QAccessibleInterface* table() const override;
//action interface
- virtual QStringList actionNames() const Q_DECL_OVERRIDE;
- virtual void doAction(const QString &actionName) Q_DECL_OVERRIDE;
- virtual QStringList keyBindingsForAction(const QString &actionName) const Q_DECL_OVERRIDE;
+ virtual QStringList actionNames() const override;
+ virtual void doAction(const QString &actionName) override;
+ virtual QStringList keyBindingsForAction(const QString &actionName) const override;
private:
QHeaderView *verticalHeader() const;
@@ -234,21 +234,21 @@ public:
// For header cells, pass the header view in addition
QAccessibleTableHeaderCell(QAbstractItemView *view, int index, Qt::Orientation orientation);
- QObject *object() const Q_DECL_OVERRIDE { return Q_NULLPTR; }
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QRect rect() const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
+ QObject *object() const override { return nullptr; }
+ QAccessible::Role role() const override;
+ QAccessible::State state() const override;
+ QRect rect() const override;
+ bool isValid() const override;
- QAccessibleInterface *childAt(int, int) const Q_DECL_OVERRIDE { return Q_NULLPTR; }
- int childCount() const Q_DECL_OVERRIDE { return 0; }
- int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE { return -1; }
+ QAccessibleInterface *childAt(int, int) const override { return nullptr; }
+ int childCount() const override { return 0; }
+ int indexOfChild(const QAccessibleInterface *) const override { return -1; }
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ void setText(QAccessible::Text t, const QString &text) override;
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *parent() const override;
+ QAccessibleInterface *child(int index) const override;
private:
QHeaderView *headerView() const;
@@ -273,24 +273,24 @@ public:
:view(view_)
{}
- QObject *object() const Q_DECL_OVERRIDE { return Q_NULLPTR; }
- QAccessible::Role role() const Q_DECL_OVERRIDE { return QAccessible::Pane; }
- QAccessible::State state() const Q_DECL_OVERRIDE { return QAccessible::State(); }
- QRect rect() const Q_DECL_OVERRIDE { return QRect(); }
- bool isValid() const Q_DECL_OVERRIDE { return true; }
+ QObject *object() const override { return nullptr; }
+ QAccessible::Role role() const override { return QAccessible::Pane; }
+ QAccessible::State state() const override { return QAccessible::State(); }
+ QRect rect() const override { return QRect(); }
+ bool isValid() const override { return true; }
- QAccessibleInterface *childAt(int, int) const Q_DECL_OVERRIDE { return Q_NULLPTR; }
- int childCount() const Q_DECL_OVERRIDE { return 0; }
- int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE { return -1; }
+ QAccessibleInterface *childAt(int, int) const override { return nullptr; }
+ int childCount() const override { return 0; }
+ int indexOfChild(const QAccessibleInterface *) const override { return -1; }
- QString text(QAccessible::Text) const Q_DECL_OVERRIDE { return QString(); }
- void setText(QAccessible::Text, const QString &) Q_DECL_OVERRIDE {}
+ QString text(QAccessible::Text) const override { return QString(); }
+ void setText(QAccessible::Text, const QString &) override {}
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE {
+ QAccessibleInterface *parent() const override {
return QAccessible::queryAccessibleInterface(view);
}
- QAccessibleInterface *child(int) const Q_DECL_OVERRIDE {
- return Q_NULLPTR;
+ QAccessibleInterface *child(int) const override {
+ return nullptr;
}
private:
diff --git a/src/widgets/accessible/qaccessiblemenu.cpp b/src/widgets/accessible/qaccessiblemenu.cpp
index d20c5bfc71..8b3353f625 100644
--- a/src/widgets/accessible/qaccessiblemenu.cpp
+++ b/src/widgets/accessible/qaccessiblemenu.cpp
@@ -242,7 +242,7 @@ QObject *QAccessibleMenuItem::object() const
/*! \reimp */
QWindow *QAccessibleMenuItem::window() const
{
- QWindow *result = Q_NULLPTR;
+ QWindow *result = nullptr;
if (!m_owner.isNull()) {
result = m_owner->windowHandle();
if (!result) {
diff --git a/src/widgets/accessible/qaccessiblemenu_p.h b/src/widgets/accessible/qaccessiblemenu_p.h
index 8b37e23333..9acd2a42f9 100644
--- a/src/widgets/accessible/qaccessiblemenu_p.h
+++ b/src/widgets/accessible/qaccessiblemenu_p.h
@@ -69,14 +69,14 @@ class QAccessibleMenu : public QAccessibleWidget
public:
explicit QAccessibleMenu(QWidget *w);
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ QAccessibleInterface *childAt(int x, int y) const override;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- int indexOfChild( const QAccessibleInterface *child ) const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ QAccessible::Role role() const override;
+ QAccessibleInterface *child(int index) const override;
+ QAccessibleInterface *parent() const override;
+ int indexOfChild( const QAccessibleInterface *child ) const override;
protected:
QMenu *menu() const;
@@ -88,10 +88,10 @@ class QAccessibleMenuBar : public QAccessibleWidget
public:
explicit QAccessibleMenuBar(QWidget *w);
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
+ QAccessibleInterface *child(int index) const override;
+ int childCount() const override;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
+ int indexOfChild(const QAccessibleInterface *child) const override;
protected:
QMenuBar *menuBar() const;
@@ -105,28 +105,28 @@ public:
explicit QAccessibleMenuItem(QWidget *owner, QAction *w);
~QAccessibleMenuItem();
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
- bool isValid() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface * child) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ QAccessibleInterface *childAt(int x, int y) const override;
+ bool isValid() const override;
+ int indexOfChild(const QAccessibleInterface * child) const override;
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- QObject * object() const Q_DECL_OVERRIDE;
- QWindow *window() const Q_DECL_OVERRIDE;
+ QAccessibleInterface *parent() const override;
+ QAccessibleInterface *child(int index) const override;
+ QObject * object() const override;
+ QWindow *window() const override;
- QRect rect() const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString & text) Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QRect rect() const override;
+ QAccessible::Role role() const override;
+ void setText(QAccessible::Text t, const QString & text) override;
+ QAccessible::State state() const override;
+ QString text(QAccessible::Text t) const override;
// QAccessibleActionInterface
- QStringList actionNames() const Q_DECL_OVERRIDE;
- void doAction(const QString &actionName) Q_DECL_OVERRIDE;
- QStringList keyBindingsForAction(const QString &actionName) const Q_DECL_OVERRIDE;
+ QStringList actionNames() const override;
+ void doAction(const QString &actionName) override;
+ QStringList keyBindingsForAction(const QString &actionName) const override;
QWidget *owner() const;
protected:
diff --git a/src/widgets/accessible/qaccessiblewidget.h b/src/widgets/accessible/qaccessiblewidget.h
index e09c3ff489..63789a595f 100644
--- a/src/widgets/accessible/qaccessiblewidget.h
+++ b/src/widgets/accessible/qaccessiblewidget.h
@@ -54,32 +54,32 @@ class Q_WIDGETS_EXPORT QAccessibleWidget : public QAccessibleObject, public QAcc
{
public:
explicit QAccessibleWidget(QWidget *o, QAccessible::Role r = QAccessible::Client, const QString& name = QString());
- bool isValid() const Q_DECL_OVERRIDE;
+ bool isValid() const override;
- QWindow *window() const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > relations(QAccessible::Relation match = QAccessible::AllRelations) const Q_DECL_OVERRIDE;
- QAccessibleInterface *focusChild() const Q_DECL_OVERRIDE;
+ QWindow *window() const override;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > relations(QAccessible::Relation match = QAccessible::AllRelations) const override;
+ QAccessibleInterface *focusChild() const override;
- QRect rect() const Q_DECL_OVERRIDE;
+ QRect rect() const override;
- QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *parent() const override;
+ QAccessibleInterface *child(int index) const override;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ QAccessible::Role role() const override;
+ QAccessible::State state() const override;
- QColor foregroundColor() const Q_DECL_OVERRIDE;
- QColor backgroundColor() const Q_DECL_OVERRIDE;
+ QColor foregroundColor() const override;
+ QColor backgroundColor() const override;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleActionInterface
- QStringList actionNames() const Q_DECL_OVERRIDE;
- void doAction(const QString &actionName) Q_DECL_OVERRIDE;
- QStringList keyBindingsForAction(const QString &actionName) const Q_DECL_OVERRIDE;
+ QStringList actionNames() const override;
+ void doAction(const QString &actionName) override;
+ QStringList keyBindingsForAction(const QString &actionName) const override;
protected:
~QAccessibleWidget();
QWidget *widget() const;
diff --git a/src/widgets/accessible/qaccessiblewidgets.cpp b/src/widgets/accessible/qaccessiblewidgets.cpp
index f869ab1129..872ddcded5 100644
--- a/src/widgets/accessible/qaccessiblewidgets.cpp
+++ b/src/widgets/accessible/qaccessiblewidgets.cpp
@@ -716,7 +716,7 @@ QRect QAccessibleTextWidget::characterRect(int offset) const
QFontMetrics fm(format.font());
const QString ch = text(offset, offset + 1);
if (!ch.isEmpty()) {
- int w = fm.width(ch);
+ int w = fm.horizontalAdvance(ch);
int h = fm.height();
r = QRect(layoutPosition.x() + x, layoutPosition.y() + line.y() + line.ascent() + fm.descent() - h,
w, h);
diff --git a/src/widgets/accessible/qaccessiblewidgets_p.h b/src/widgets/accessible/qaccessiblewidgets_p.h
index 75e1eff694..87f0b888a0 100644
--- a/src/widgets/accessible/qaccessiblewidgets_p.h
+++ b/src/widgets/accessible/qaccessiblewidgets_p.h
@@ -85,40 +85,40 @@ class QAccessibleTextWidget : public QAccessibleWidget,
public:
QAccessibleTextWidget(QWidget *o, QAccessible::Role r = QAccessible::EditableText, const QString &name = QString());
- QAccessible::State state() const Q_DECL_OVERRIDE;
+ QAccessible::State state() const override;
// QAccessibleTextInterface
// selection
- void selection(int selectionIndex, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- int selectionCount() const Q_DECL_OVERRIDE;
- void addSelection(int startOffset, int endOffset) Q_DECL_OVERRIDE;
- void removeSelection(int selectionIndex) Q_DECL_OVERRIDE;
- void setSelection(int selectionIndex, int startOffset, int endOffset) Q_DECL_OVERRIDE;
+ void selection(int selectionIndex, int *startOffset, int *endOffset) const override;
+ int selectionCount() const override;
+ void addSelection(int startOffset, int endOffset) override;
+ void removeSelection(int selectionIndex) override;
+ void setSelection(int selectionIndex, int startOffset, int endOffset) override;
// cursor
- int cursorPosition() const Q_DECL_OVERRIDE;
- void setCursorPosition(int position) Q_DECL_OVERRIDE;
+ int cursorPosition() const override;
+ void setCursorPosition(int position) override;
// text
- QString text(int startOffset, int endOffset) const Q_DECL_OVERRIDE;
+ QString text(int startOffset, int endOffset) const override;
QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- int characterCount() const Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
+ int characterCount() const override;
// character <-> geometry
- QRect characterRect(int offset) const Q_DECL_OVERRIDE;
- int offsetAtPoint(const QPoint &point) const Q_DECL_OVERRIDE;
+ QRect characterRect(int offset) const override;
+ int offsetAtPoint(const QPoint &point) const override;
- QString attributes(int offset, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
+ QString attributes(int offset, int *startOffset, int *endOffset) const override;
// QAccessibleEditableTextInterface
- void deleteText(int startOffset, int endOffset) Q_DECL_OVERRIDE;
- void insertText(int offset, const QString &text) Q_DECL_OVERRIDE;
- void replaceText(int startOffset, int endOffset, const QString &text) Q_DECL_OVERRIDE;
+ void deleteText(int startOffset, int endOffset) override;
+ void insertText(int offset, const QString &text) override;
+ void replaceText(int startOffset, int endOffset, const QString &text) override;
using QAccessibleWidget::text;
@@ -138,25 +138,25 @@ class QAccessiblePlainTextEdit : public QAccessibleTextWidget
public:
explicit QAccessiblePlainTextEdit(QWidget *o);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ void setText(QAccessible::Text t, const QString &text) override;
+ QAccessible::State state() const override;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleTextInterface
- void scrollToSubstring(int startIndex, int endIndex) Q_DECL_OVERRIDE;
+ void scrollToSubstring(int startIndex, int endIndex) override;
using QAccessibleTextWidget::text;
protected:
QPlainTextEdit *plainTextEdit() const;
- QPoint scrollBarPosition() const Q_DECL_OVERRIDE;
- QTextCursor textCursor() const Q_DECL_OVERRIDE;
- void setTextCursor(const QTextCursor &textCursor) Q_DECL_OVERRIDE;
- QTextDocument *textDocument() const Q_DECL_OVERRIDE;
- QWidget *viewport() const Q_DECL_OVERRIDE;
+ QPoint scrollBarPosition() const override;
+ QTextCursor textCursor() const override;
+ void setTextCursor(const QTextCursor &textCursor) override;
+ QTextDocument *textDocument() const override;
+ QWidget *viewport() const override;
};
class QAccessibleTextEdit : public QAccessibleTextWidget
@@ -164,25 +164,25 @@ class QAccessibleTextEdit : public QAccessibleTextWidget
public:
explicit QAccessibleTextEdit(QWidget *o);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ void setText(QAccessible::Text t, const QString &text) override;
+ QAccessible::State state() const override;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleTextInterface
- void scrollToSubstring(int startIndex, int endIndex) Q_DECL_OVERRIDE;
+ void scrollToSubstring(int startIndex, int endIndex) override;
using QAccessibleTextWidget::text;
protected:
QTextEdit *textEdit() const;
- QPoint scrollBarPosition() const Q_DECL_OVERRIDE;
- QTextCursor textCursor() const Q_DECL_OVERRIDE;
- void setTextCursor(const QTextCursor &textCursor) Q_DECL_OVERRIDE;
- QTextDocument *textDocument() const Q_DECL_OVERRIDE;
- QWidget *viewport() const Q_DECL_OVERRIDE;
+ QPoint scrollBarPosition() const override;
+ QTextCursor textCursor() const override;
+ void setTextCursor(const QTextCursor &textCursor) override;
+ QTextDocument *textDocument() const override;
+ QWidget *viewport() const override;
};
#endif // QT_CONFIG(textedit)
#endif //QT_NO_CURSOR
@@ -192,10 +192,10 @@ class QAccessibleStackedWidget : public QAccessibleWidget
public:
explicit QAccessibleStackedWidget(QWidget *widget);
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *childAt(int x, int y) const override;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ QAccessibleInterface *child(int index) const override;
protected:
QStackedWidget *stackedWidget() const;
@@ -222,9 +222,9 @@ class QAccessibleMdiArea : public QAccessibleWidget
public:
explicit QAccessibleMdiArea(QWidget *widget);
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ QAccessibleInterface *child(int index) const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
protected:
QMdiArea *mdiArea() const;
@@ -235,13 +235,13 @@ class QAccessibleMdiSubWindow : public QAccessibleWidget
public:
explicit QAccessibleMdiSubWindow(QWidget *widget);
- QString text(QAccessible::Text textType) const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text textType, const QString &text) Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- QRect rect() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text textType) const override;
+ void setText(QAccessible::Text textType, const QString &text) override;
+ QAccessible::State state() const override;
+ int childCount() const override;
+ QAccessibleInterface *child(int index) const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ QRect rect() const override;
protected:
QMdiSubWindow *mdiSubWindow() const;
@@ -262,7 +262,7 @@ class QAccessibleTextBrowser : public QAccessibleTextEdit
public:
explicit QAccessibleTextBrowser(QWidget *widget);
- QAccessible::Role role() const Q_DECL_OVERRIDE;
+ QAccessible::Role role() const override;
};
#endif // QT_CONFIG(textbrowser) && QT_NO_CURSOR
@@ -272,10 +272,10 @@ class QAccessibleCalendarWidget : public QAccessibleWidget
public:
explicit QAccessibleCalendarWidget(QWidget *widget);
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *child(int index) const override;
protected:
QCalendarWidget *calendarWidget() const;
@@ -291,11 +291,11 @@ class QAccessibleDockWidget: public QAccessibleWidget
{
public:
explicit QAccessibleDockWidget(QWidget *widget);
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- QRect rect () const Q_DECL_OVERRIDE;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *child(int index) const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ int childCount() const override;
+ QRect rect () const override;
+ QString text(QAccessible::Text t) const override;
QDockWidget *dockWidget() const;
protected:
@@ -310,10 +310,10 @@ class QAccessibleMainWindow : public QAccessibleWidget
public:
explicit QAccessibleMainWindow(QWidget *widget);
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *iface) const Q_DECL_OVERRIDE;
- QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
+ QAccessibleInterface *child(int index) const override;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *iface) const override;
+ QAccessibleInterface *childAt(int x, int y) const override;
QMainWindow *mainWindow() const;
};
diff --git a/src/widgets/accessible/rangecontrols.cpp b/src/widgets/accessible/rangecontrols.cpp
index 190f0aa02f..b5b8608418 100644
--- a/src/widgets/accessible/rangecontrols.cpp
+++ b/src/widgets/accessible/rangecontrols.cpp
@@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE
#if QT_CONFIG(spinbox)
QAccessibleAbstractSpinBox::QAccessibleAbstractSpinBox(QWidget *w)
-: QAccessibleWidget(w, QAccessible::SpinBox), lineEdit(Q_NULLPTR)
+: QAccessibleWidget(w, QAccessible::SpinBox), lineEdit(nullptr)
{
Q_ASSERT(abstractSpinBox());
}
diff --git a/src/widgets/accessible/rangecontrols_p.h b/src/widgets/accessible/rangecontrols_p.h
index 8af86681a0..1eada8e456 100644
--- a/src/widgets/accessible/rangecontrols_p.h
+++ b/src/widgets/accessible/rangecontrols_p.h
@@ -78,41 +78,41 @@ public:
explicit QAccessibleAbstractSpinBox(QWidget *w);
virtual ~QAccessibleAbstractSpinBox();
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleValueInterface
- QVariant currentValue() const Q_DECL_OVERRIDE;
- void setCurrentValue(const QVariant &value) Q_DECL_OVERRIDE;
- QVariant maximumValue() const Q_DECL_OVERRIDE;
- QVariant minimumValue() const Q_DECL_OVERRIDE;
- QVariant minimumStepSize() const Q_DECL_OVERRIDE;
+ QVariant currentValue() const override;
+ void setCurrentValue(const QVariant &value) override;
+ QVariant maximumValue() const override;
+ QVariant minimumValue() const override;
+ QVariant minimumStepSize() const override;
// QAccessibleTextInterface
- void addSelection(int startOffset, int endOffset) Q_DECL_OVERRIDE;
- QString attributes(int offset, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- int cursorPosition() const Q_DECL_OVERRIDE;
- QRect characterRect(int offset) const Q_DECL_OVERRIDE;
- int selectionCount() const Q_DECL_OVERRIDE;
- int offsetAtPoint(const QPoint &point) const Q_DECL_OVERRIDE;
- void selection(int selectionIndex, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- QString text(int startOffset, int endOffset) const Q_DECL_OVERRIDE;
+ void addSelection(int startOffset, int endOffset) override;
+ QString attributes(int offset, int *startOffset, int *endOffset) const override;
+ int cursorPosition() const override;
+ QRect characterRect(int offset) const override;
+ int selectionCount() const override;
+ int offsetAtPoint(const QPoint &point) const override;
+ void selection(int selectionIndex, int *startOffset, int *endOffset) const override;
+ QString text(int startOffset, int endOffset) const override;
QString textBeforeOffset (int offset, QAccessible::TextBoundaryType boundaryType,
- int *endOffset, int *startOffset) const Q_DECL_OVERRIDE;
+ int *endOffset, int *startOffset) const override;
QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- void removeSelection(int selectionIndex) Q_DECL_OVERRIDE;
- void setCursorPosition(int position) Q_DECL_OVERRIDE;
- void setSelection(int selectionIndex, int startOffset, int endOffset) Q_DECL_OVERRIDE;
- int characterCount() const Q_DECL_OVERRIDE;
- void scrollToSubstring(int startIndex, int endIndex) Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
+ void removeSelection(int selectionIndex) override;
+ void setCursorPosition(int position) override;
+ void setSelection(int selectionIndex, int startOffset, int endOffset) override;
+ int characterCount() const override;
+ void scrollToSubstring(int startIndex, int endIndex) override;
// QAccessibleEditableTextInterface
- void deleteText(int startOffset, int endOffset) Q_DECL_OVERRIDE;
- void insertText(int offset, const QString &text) Q_DECL_OVERRIDE;
- void replaceText(int startOffset, int endOffset, const QString &text) Q_DECL_OVERRIDE;
+ void deleteText(int startOffset, int endOffset) override;
+ void insertText(int offset, const QString &text) override;
+ void replaceText(int startOffset, int endOffset, const QString &text) override;
protected:
QAbstractSpinBox *abstractSpinBox() const;
@@ -135,7 +135,7 @@ class QAccessibleDoubleSpinBox : public QAccessibleAbstractSpinBox
public:
explicit QAccessibleDoubleSpinBox(QWidget *widget);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
using QAccessibleAbstractSpinBox::text;
protected:
@@ -148,14 +148,14 @@ class QAccessibleAbstractSlider: public QAccessibleWidget, public QAccessibleVal
{
public:
explicit QAccessibleAbstractSlider(QWidget *w, QAccessible::Role r = QAccessible::Slider);
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleValueInterface
- QVariant currentValue() const Q_DECL_OVERRIDE;
- void setCurrentValue(const QVariant &value) Q_DECL_OVERRIDE;
- QVariant maximumValue() const Q_DECL_OVERRIDE;
- QVariant minimumValue() const Q_DECL_OVERRIDE;
- QVariant minimumStepSize() const Q_DECL_OVERRIDE;
+ QVariant currentValue() const override;
+ void setCurrentValue(const QVariant &value) override;
+ QVariant maximumValue() const override;
+ QVariant minimumValue() const override;
+ QVariant minimumStepSize() const override;
protected:
QAbstractSlider *abstractSlider() const;
@@ -167,7 +167,7 @@ class QAccessibleScrollBar : public QAccessibleAbstractSlider
{
public:
explicit QAccessibleScrollBar(QWidget *w);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
protected:
QScrollBar *scrollBar() const;
@@ -179,7 +179,7 @@ class QAccessibleSlider : public QAccessibleAbstractSlider
{
public:
explicit QAccessibleSlider(QWidget *w);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
protected:
QSlider *slider() const;
@@ -192,7 +192,7 @@ class QAccessibleDial : public QAccessibleAbstractSlider
public:
explicit QAccessibleDial(QWidget *w);
- QString text(QAccessible::Text textType) const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text textType) const override;
protected:
QDial *dial() const;
diff --git a/src/widgets/accessible/simplewidgets.cpp b/src/widgets/accessible/simplewidgets.cpp
index bacb00fe2e..efcf4cdc8b 100644
--- a/src/widgets/accessible/simplewidgets.cpp
+++ b/src/widgets/accessible/simplewidgets.cpp
@@ -170,7 +170,7 @@ QAccessible::State QAccessibleButton::state() const
if (b->isChecked())
state.checked = true;
#if QT_CONFIG(checkbox)
- else if (cb && cb->checkState() == Qt::PartiallyChecked)
+ if (cb && cb->checkState() == Qt::PartiallyChecked)
state.checkStateMixed = true;
#endif
if (b->isDown())
@@ -704,6 +704,8 @@ QString QAccessibleLineEdit::text(QAccessible::Text t) const
}
if (str.isEmpty())
str = QAccessibleWidget::text(t);
+ if (str.isEmpty() && t == QAccessible::Description)
+ str = lineEdit()->placeholderText();
return str;
}
@@ -777,7 +779,7 @@ QRect QAccessibleLineEdit::characterRect(int offset) const
const QString ch = text(offset, offset + 1);
if (ch.isEmpty())
return QRect();
- int w = fm.width(ch);
+ int w = fm.horizontalAdvance(ch);
int h = fm.height();
QRect r(x, y, w, h);
r.moveTo(lineEdit()->mapToGlobal(r.topLeft()));
diff --git a/src/widgets/accessible/simplewidgets_p.h b/src/widgets/accessible/simplewidgets_p.h
index 902b403d5b..fcd0e7df47 100644
--- a/src/widgets/accessible/simplewidgets_p.h
+++ b/src/widgets/accessible/simplewidgets_p.h
@@ -72,14 +72,14 @@ class QAccessibleButton : public QAccessibleWidget
public:
QAccessibleButton(QWidget *w);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QRect rect() const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ QAccessible::State state() const override;
+ QRect rect() const override;
+ QAccessible::Role role() const override;
- QStringList actionNames() const Q_DECL_OVERRIDE;
- void doAction(const QString &actionName) Q_DECL_OVERRIDE;
- QStringList keyBindingsForAction(const QString &actionName) const Q_DECL_OVERRIDE;
+ QStringList actionNames() const override;
+ void doAction(const QString &actionName) override;
+ QStringList keyBindingsForAction(const QString &actionName) const override;
protected:
QAbstractButton *button() const;
@@ -92,15 +92,15 @@ class QAccessibleToolButton : public QAccessibleButton
public:
QAccessibleToolButton(QWidget *w);
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
+ QAccessible::State state() const override;
+ QAccessible::Role role() const override;
- int childCount() const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ QAccessibleInterface *child(int index) const override;
// QAccessibleActionInterface
- QStringList actionNames() const Q_DECL_OVERRIDE;
- void doAction(const QString &actionName) Q_DECL_OVERRIDE;
+ QStringList actionNames() const override;
+ void doAction(const QString &actionName) override;
protected:
QToolButton *toolButton() const;
@@ -114,16 +114,16 @@ class QAccessibleDisplay : public QAccessibleWidget, public QAccessibleImageInte
public:
explicit QAccessibleDisplay(QWidget *w, QAccessible::Role role = QAccessible::StaticText);
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ QAccessible::Role role() const override;
- QVector<QPair<QAccessibleInterface*, QAccessible::Relation> >relations(QAccessible::Relation match = QAccessible::AllRelations) const Q_DECL_OVERRIDE;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ QVector<QPair<QAccessibleInterface*, QAccessible::Relation> >relations(QAccessible::Relation match = QAccessible::AllRelations) const override;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleImageInterface
- QString imageDescription() const Q_DECL_OVERRIDE;
- QSize imageSize() const Q_DECL_OVERRIDE;
- QPoint imagePosition() const Q_DECL_OVERRIDE;
+ QString imageDescription() const override;
+ QSize imageSize() const override;
+ QPoint imagePosition() const override;
};
#if QT_CONFIG(groupbox)
@@ -132,16 +132,16 @@ class QAccessibleGroupBox : public QAccessibleWidget
public:
explicit QAccessibleGroupBox(QWidget *w);
- QAccessible::State state() const Q_DECL_OVERRIDE;
- QAccessible::Role role() const Q_DECL_OVERRIDE;
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ QAccessible::State state() const override;
+ QAccessible::Role role() const override;
+ QString text(QAccessible::Text t) const override;
- QVector<QPair<QAccessibleInterface*, QAccessible::Relation> >relations(QAccessible::Relation match = QAccessible::AllRelations) const Q_DECL_OVERRIDE;
+ QVector<QPair<QAccessibleInterface*, QAccessible::Relation> >relations(QAccessible::Relation match = QAccessible::AllRelations) const override;
//QAccessibleActionInterface
- QStringList actionNames() const Q_DECL_OVERRIDE;
- void doAction(const QString &actionName) Q_DECL_OVERRIDE;
- QStringList keyBindingsForAction(const QString &) const Q_DECL_OVERRIDE;
+ QStringList actionNames() const override;
+ void doAction(const QString &actionName) override;
+ QStringList keyBindingsForAction(const QString &) const override;
private:
QGroupBox *groupBox() const;
@@ -154,36 +154,36 @@ class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInte
public:
explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString());
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
- void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
- QAccessible::State state() const Q_DECL_OVERRIDE;
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ QString text(QAccessible::Text t) const override;
+ void setText(QAccessible::Text t, const QString &text) override;
+ QAccessible::State state() const override;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleTextInterface
- void addSelection(int startOffset, int endOffset) Q_DECL_OVERRIDE;
- QString attributes(int offset, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- int cursorPosition() const Q_DECL_OVERRIDE;
- QRect characterRect(int offset) const Q_DECL_OVERRIDE;
- int selectionCount() const Q_DECL_OVERRIDE;
- int offsetAtPoint(const QPoint &point) const Q_DECL_OVERRIDE;
- void selection(int selectionIndex, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- QString text(int startOffset, int endOffset) const Q_DECL_OVERRIDE;
+ void addSelection(int startOffset, int endOffset) override;
+ QString attributes(int offset, int *startOffset, int *endOffset) const override;
+ int cursorPosition() const override;
+ QRect characterRect(int offset) const override;
+ int selectionCount() const override;
+ int offsetAtPoint(const QPoint &point) const override;
+ void selection(int selectionIndex, int *startOffset, int *endOffset) const override;
+ QString text(int startOffset, int endOffset) const override;
QString textBeforeOffset (int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
- int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- void removeSelection(int selectionIndex) Q_DECL_OVERRIDE;
- void setCursorPosition(int position) Q_DECL_OVERRIDE;
- void setSelection(int selectionIndex, int startOffset, int endOffset) Q_DECL_OVERRIDE;
- int characterCount() const Q_DECL_OVERRIDE;
- void scrollToSubstring(int startIndex, int endIndex) Q_DECL_OVERRIDE;
+ int *startOffset, int *endOffset) const override;
+ void removeSelection(int selectionIndex) override;
+ void setCursorPosition(int position) override;
+ void setSelection(int selectionIndex, int startOffset, int endOffset) override;
+ int characterCount() const override;
+ void scrollToSubstring(int startIndex, int endIndex) override;
// QAccessibleEditableTextInterface
- void deleteText(int startOffset, int endOffset) Q_DECL_OVERRIDE;
- void insertText(int offset, const QString &text) Q_DECL_OVERRIDE;
- void replaceText(int startOffset, int endOffset, const QString &text) Q_DECL_OVERRIDE;
+ void deleteText(int startOffset, int endOffset) override;
+ void insertText(int offset, const QString &text) override;
+ void replaceText(int startOffset, int endOffset, const QString &text) override;
protected:
QLineEdit *lineEdit() const;
friend class QAccessibleAbstractSpinBox;
@@ -195,14 +195,14 @@ class QAccessibleProgressBar : public QAccessibleDisplay, public QAccessibleValu
{
public:
explicit QAccessibleProgressBar(QWidget *o);
- void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE;
+ void *interface_cast(QAccessible::InterfaceType t) override;
// QAccessibleValueInterface
- QVariant currentValue() const Q_DECL_OVERRIDE;
- QVariant maximumValue() const Q_DECL_OVERRIDE;
- QVariant minimumValue() const Q_DECL_OVERRIDE;
- QVariant minimumStepSize() const Q_DECL_OVERRIDE;
- void setCurrentValue(const QVariant &) Q_DECL_OVERRIDE {}
+ QVariant currentValue() const override;
+ QVariant maximumValue() const override;
+ QVariant minimumValue() const override;
+ QVariant minimumStepSize() const override;
+ void setCurrentValue(const QVariant &) override {}
protected:
QProgressBar *progressBar() const;
@@ -214,9 +214,9 @@ class QAccessibleWindowContainer : public QAccessibleWidget
{
public:
QAccessibleWindowContainer(QWidget *w);
- int childCount() const Q_DECL_OVERRIDE;
- int indexOfChild(const QAccessibleInterface *child) const Q_DECL_OVERRIDE;
- QAccessibleInterface *child(int i) const Q_DECL_OVERRIDE;
+ int childCount() const override;
+ int indexOfChild(const QAccessibleInterface *child) const override;
+ QAccessibleInterface *child(int i) const override;
private:
QWindowContainer *container() const;
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp
index f3b198fdc2..896baed6c5 100644
--- a/src/widgets/dialogs/qcolordialog.cpp
+++ b/src/widgets/dialogs/qcolordialog.cpp
@@ -119,6 +119,7 @@ public:
void retranslateStrings();
void _q_addCustom();
+ void _q_setCustom(int index, QRgb color);
void _q_newHsv(int h, int s, int v);
void _q_newColorTypedIn(QRgb rgb);
@@ -134,7 +135,7 @@ public:
bool handleColorPickingMouseButtonRelease(QMouseEvent *e);
bool handleColorPickingKeyPress(QKeyEvent *e);
- bool canBeNativeDialog() const Q_DECL_OVERRIDE;
+ bool canBeNativeDialog() const override;
QWellArray *custom;
QWellArray *standard;
@@ -167,8 +168,8 @@ public:
#endif
private:
- virtual void initHelper(QPlatformDialogHelper *h) Q_DECL_OVERRIDE;
- virtual void helperPrepareShow(QPlatformDialogHelper *h) Q_DECL_OVERRIDE;
+ virtual void initHelper(QPlatformDialogHelper *h) override;
+ virtual void helperPrepareShow(QPlatformDialogHelper *h) override;
};
//////////// QWellArray BEGIN
@@ -192,7 +193,7 @@ public:
virtual void setCurrent(int row, int col);
virtual void setSelected(int row, int col);
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
inline int cellWidth() const
{ return cellw; }
@@ -237,17 +238,18 @@ public:
signals:
void selected(int row, int col);
void currentChanged(int row, int col);
+ void colorChanged(int index, QRgb color);
protected:
virtual void paintCell(QPainter *, int row, int col, const QRect&);
virtual void paintCellContents(QPainter *, int row, int col, const QRect&);
- void mousePressEvent(QMouseEvent*) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent*) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent*) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent*) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent*) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent*) override;
+ void mouseReleaseEvent(QMouseEvent*) override;
+ void keyPressEvent(QKeyEvent*) override;
+ void focusInEvent(QFocusEvent*) override;
+ void focusOutEvent(QFocusEvent*) override;
+ void paintEvent(QPaintEvent *) override;
private:
Q_DISABLE_COPY(QWellArray)
@@ -495,7 +497,7 @@ class QColorPickingEventFilter : public QObject {
public:
explicit QColorPickingEventFilter(QColorDialogPrivate *dp, QObject *parent = 0) : QObject(parent), m_dp(dp) {}
- bool eventFilter(QObject *, QEvent *event) Q_DECL_OVERRIDE
+ bool eventFilter(QObject *, QEvent *event) override
{
switch (event->type()) {
case QEvent::MouseMove:
@@ -581,24 +583,24 @@ namespace {
class QColorWell : public QWellArray
{
public:
- QColorWell(QWidget *parent, int r, int c, QRgb *vals)
+ QColorWell(QWidget *parent, int r, int c, const QRgb *vals)
:QWellArray(r, c, parent), values(vals), mousePressed(false), oldCurrent(-1, -1)
{ setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); }
protected:
- void paintCellContents(QPainter *, int row, int col, const QRect&) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void paintCellContents(QPainter *, int row, int col, const QRect&) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseMoveEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
- void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *e) override;
+ void dragLeaveEvent(QDragLeaveEvent *e) override;
+ void dragMoveEvent(QDragMoveEvent *e) override;
+ void dropEvent(QDropEvent *e) override;
#endif
private:
- QRgb *values;
+ const QRgb *values;
bool mousePressed;
QPoint pressPos;
QPoint oldCurrent;
@@ -675,8 +677,7 @@ void QColorWell::dropEvent(QDropEvent *e)
QColor col = qvariant_cast<QColor>(e->mimeData()->colorData());
if (col.isValid()) {
int i = rowAt(e->pos().y()) + columnAt(e->pos().x()) * numRows();
- values[i] = col.rgb();
- update();
+ emit colorChanged(i, col.rgb());
e->accept();
} else {
e->ignore();
@@ -708,11 +709,11 @@ signals:
void newCol(int h, int s);
protected:
- QSize sizeHint() const Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ void paintEvent(QPaintEvent*) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
private:
int hue;
@@ -745,9 +746,9 @@ signals:
void newHsv(int h, int s, int v);
protected:
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent*) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
private:
enum { foff = 3, coff = 4 }; //frame and contents offset
@@ -1067,14 +1068,14 @@ signals:
void colorDropped(QRgb);
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseMoveEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *e) override;
+ void dragLeaveEvent(QDragLeaveEvent *e) override;
+ void dropEvent(QDropEvent *e) override;
#endif
private:
@@ -1560,8 +1561,7 @@ bool QColorDialogPrivate::selectColor(const QColor &col)
QColor QColorDialogPrivate::grabScreenColor(const QPoint &p)
{
const QDesktopWidget *desktop = QApplication::desktop();
- const QPixmap pixmap = QGuiApplication::screens().at(desktop->screenNumber())->grabWindow(desktop->winId(),
- p.x(), p.y(), 1, 1);
+ const QPixmap pixmap = QGuiApplication::primaryScreen()->grabWindow(desktop->winId(), p.x(), p.y(), 1, 1);
QImage i = pixmap.toImage();
return i.pixel(0, 0);
}
@@ -1734,6 +1734,13 @@ void QColorDialogPrivate::initWidgets()
q->connect(custom, SIGNAL(selected(int,int)), SLOT(_q_newCustom(int,int)));
q->connect(custom, SIGNAL(currentChanged(int,int)), SLOT(_q_nextCustom(int,int)));
+
+ q->connect(custom, &QWellArray::colorChanged, [=] (int index, QRgb color) {
+ QColorDialogOptions::setCustomColor(index, color);
+ if (custom)
+ custom->update();
+ });
+
lblCustomColors = new QLabel(q);
#ifndef QT_NO_SHORTCUT
lblCustomColors->setBuddy(custom);
diff --git a/src/widgets/dialogs/qcolordialog.h b/src/widgets/dialogs/qcolordialog.h
index a27cfaf953..6451ff9bde 100644
--- a/src/widgets/dialogs/qcolordialog.h
+++ b/src/widgets/dialogs/qcolordialog.h
@@ -68,8 +68,8 @@ public:
Q_DECLARE_FLAGS(ColorDialogOptions, ColorDialogOption)
- explicit QColorDialog(QWidget *parent = Q_NULLPTR);
- explicit QColorDialog(const QColor &initial, QWidget *parent = Q_NULLPTR);
+ explicit QColorDialog(QWidget *parent = nullptr);
+ explicit QColorDialog(const QColor &initial, QWidget *parent = nullptr);
~QColorDialog();
void setCurrentColor(const QColor &color);
@@ -85,15 +85,15 @@ public:
using QDialog::open;
void open(QObject *receiver, const char *member);
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
static QColor getColor(const QColor &initial = Qt::white,
- QWidget *parent = Q_NULLPTR,
+ QWidget *parent = nullptr,
const QString &title = QString(),
ColorDialogOptions options = ColorDialogOptions());
// obsolete
- static QRgb getRgba(QRgb rgba = 0xffffffff, bool *ok = Q_NULLPTR, QWidget *parent = Q_NULLPTR);
+ static QRgb getRgba(QRgb rgba = 0xffffffff, bool *ok = nullptr, QWidget *parent = nullptr);
static int customCount();
static QColor customColor(int index);
@@ -106,8 +106,8 @@ Q_SIGNALS:
void colorSelected(const QColor &color);
protected:
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- void done(int result) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) override;
+ void done(int result) override;
private:
Q_DISABLE_COPY(QColorDialog)
diff --git a/src/widgets/dialogs/qdialog.h b/src/widgets/dialogs/qdialog.h
index 72250172d3..7f267dd939 100644
--- a/src/widgets/dialogs/qdialog.h
+++ b/src/widgets/dialogs/qdialog.h
@@ -60,7 +60,7 @@ class Q_WIDGETS_EXPORT QDialog : public QWidget
Q_PROPERTY(bool modal READ isModal WRITE setModal)
public:
- explicit QDialog(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ explicit QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~QDialog();
enum DialogCode { Rejected, Accepted };
diff --git a/src/widgets/dialogs/qdialog_p.h b/src/widgets/dialogs/qdialog_p.h
index 2ed414bd45..99fff08e65 100644
--- a/src/widgets/dialogs/qdialog_p.h
+++ b/src/widgets/dialogs/qdialog_p.h
@@ -143,7 +143,7 @@ public:
T *operator->() const Q_DECL_NOTHROW { return get(); }
T *get() const Q_DECL_NOTHROW { return o; }
T &operator*() const { return *get(); }
- operator RestrictedBool() const Q_DECL_NOTHROW { return o ? &internal::func : Q_NULLPTR; }
+ operator RestrictedBool() const Q_DECL_NOTHROW { return o ? &internal::func : nullptr; }
bool operator!() const Q_DECL_NOTHROW { return !o; }
private:
Q_DISABLE_COPY(QAutoPointer);
diff --git a/src/widgets/dialogs/qerrormessage.cpp b/src/widgets/dialogs/qerrormessage.cpp
index 39035b743d..fd68f19680 100644
--- a/src/widgets/dialogs/qerrormessage.cpp
+++ b/src/widgets/dialogs/qerrormessage.cpp
@@ -95,8 +95,8 @@ public:
QErrorMessageTextView(QWidget *parent)
: QTextEdit(parent) { setReadOnly(true); }
- virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
- virtual QSize sizeHint() const Q_DECL_OVERRIDE;
+ virtual QSize minimumSizeHint() const override;
+ virtual QSize sizeHint() const override;
};
} // unnamed namespace
diff --git a/src/widgets/dialogs/qerrormessage.h b/src/widgets/dialogs/qerrormessage.h
index 4cb1fad845..220694e54e 100644
--- a/src/widgets/dialogs/qerrormessage.h
+++ b/src/widgets/dialogs/qerrormessage.h
@@ -55,7 +55,7 @@ class Q_WIDGETS_EXPORT QErrorMessage: public QDialog
Q_OBJECT
Q_DECLARE_PRIVATE(QErrorMessage)
public:
- explicit QErrorMessage(QWidget* parent = Q_NULLPTR);
+ explicit QErrorMessage(QWidget* parent = nullptr);
~QErrorMessage();
static QErrorMessage * qtHandler();
@@ -65,8 +65,8 @@ public Q_SLOTS:
void showMessage(const QString &message, const QString &type);
protected:
- void done(int) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void done(int) override;
+ void changeEvent(QEvent *e) override;
private:
Q_DISABLE_COPY(QErrorMessage)
diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index cb2c534b24..3d91bdef34 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -1994,7 +1994,7 @@ QFileIconProvider *QFileDialog::iconProvider() const
{
Q_D(const QFileDialog);
if (!d->model)
- return Q_NULLPTR;
+ return nullptr;
return d->model->iconProvider();
}
@@ -2953,10 +2953,10 @@ void QFileDialogPrivate::createWidgets()
qFileDialogUi->treeView->setModel(model);
QHeaderView *treeHeader = qFileDialogUi->treeView->header();
QFontMetrics fm(q->font());
- treeHeader->resizeSection(0, fm.width(QLatin1String("wwwwwwwwwwwwwwwwwwwwwwwwww")));
- treeHeader->resizeSection(1, fm.width(QLatin1String("128.88 GB")));
- treeHeader->resizeSection(2, fm.width(QLatin1String("mp3Folder")));
- treeHeader->resizeSection(3, fm.width(QLatin1String("10/29/81 02:02PM")));
+ treeHeader->resizeSection(0, fm.horizontalAdvance(QLatin1String("wwwwwwwwwwwwwwwwwwwwwwwwww")));
+ treeHeader->resizeSection(1, fm.horizontalAdvance(QLatin1String("128.88 GB")));
+ treeHeader->resizeSection(2, fm.horizontalAdvance(QLatin1String("mp3Folder")));
+ treeHeader->resizeSection(3, fm.horizontalAdvance(QLatin1String("10/29/81 02:02PM")));
treeHeader->setContextMenuPolicy(Qt::ActionsContextMenu);
QActionGroup *showActionGroup = new QActionGroup(q);
@@ -3624,7 +3624,7 @@ void QFileDialogPrivate::_q_enterDirectory(const QModelIndex &index)
}
} else {
// Do not accept when shift-clicking to multi-select a file in environments with single-click-activation (KDE)
- if (!q->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, Q_NULLPTR, qFileDialogUi->treeView)
+ if (!q->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick, nullptr, qFileDialogUi->treeView)
|| q->fileMode() != QFileDialog::ExistingFiles || !(QGuiApplication::keyboardModifiers() & Qt::CTRL)) {
q->accept();
}
diff --git a/src/widgets/dialogs/qfiledialog.h b/src/widgets/dialogs/qfiledialog.h
index b9092e036d..1cbd690f24 100644
--- a/src/widgets/dialogs/qfiledialog.h
+++ b/src/widgets/dialogs/qfiledialog.h
@@ -98,7 +98,7 @@ public:
Q_FLAG(Options)
QFileDialog(QWidget *parent, Qt::WindowFlags f);
- explicit QFileDialog(QWidget *parent = Q_NULLPTR,
+ explicit QFileDialog(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &directory = QString(),
const QString &filter = QString());
@@ -190,7 +190,7 @@ public:
using QDialog::open;
void open(QObject *receiver, const char *member);
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
Q_SIGNALS:
void fileSelected(const QString &file);
@@ -207,68 +207,68 @@ Q_SIGNALS:
public:
- static QString getOpenFileName(QWidget *parent = Q_NULLPTR,
+ static QString getOpenFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
- QString *selectedFilter = Q_NULLPTR,
+ QString *selectedFilter = nullptr,
Options options = Options());
- static QUrl getOpenFileUrl(QWidget *parent = Q_NULLPTR,
+ static QUrl getOpenFileUrl(QWidget *parent = nullptr,
const QString &caption = QString(),
const QUrl &dir = QUrl(),
const QString &filter = QString(),
- QString *selectedFilter = Q_NULLPTR,
+ QString *selectedFilter = nullptr,
Options options = Options(),
const QStringList &supportedSchemes = QStringList());
- static QString getSaveFileName(QWidget *parent = Q_NULLPTR,
+ static QString getSaveFileName(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
- QString *selectedFilter = Q_NULLPTR,
+ QString *selectedFilter = nullptr,
Options options = Options());
- static QUrl getSaveFileUrl(QWidget *parent = Q_NULLPTR,
+ static QUrl getSaveFileUrl(QWidget *parent = nullptr,
const QString &caption = QString(),
const QUrl &dir = QUrl(),
const QString &filter = QString(),
- QString *selectedFilter = Q_NULLPTR,
+ QString *selectedFilter = nullptr,
Options options = Options(),
const QStringList &supportedSchemes = QStringList());
- static QString getExistingDirectory(QWidget *parent = Q_NULLPTR,
+ static QString getExistingDirectory(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
Options options = ShowDirsOnly);
- static QUrl getExistingDirectoryUrl(QWidget *parent = Q_NULLPTR,
+ static QUrl getExistingDirectoryUrl(QWidget *parent = nullptr,
const QString &caption = QString(),
const QUrl &dir = QUrl(),
Options options = ShowDirsOnly,
const QStringList &supportedSchemes = QStringList());
- static QStringList getOpenFileNames(QWidget *parent = Q_NULLPTR,
+ static QStringList getOpenFileNames(QWidget *parent = nullptr,
const QString &caption = QString(),
const QString &dir = QString(),
const QString &filter = QString(),
- QString *selectedFilter = Q_NULLPTR,
+ QString *selectedFilter = nullptr,
Options options = Options());
- static QList<QUrl> getOpenFileUrls(QWidget *parent = Q_NULLPTR,
+ static QList<QUrl> getOpenFileUrls(QWidget *parent = nullptr,
const QString &caption = QString(),
const QUrl &dir = QUrl(),
const QString &filter = QString(),
- QString *selectedFilter = Q_NULLPTR,
+ QString *selectedFilter = nullptr,
Options options = Options(),
const QStringList &supportedSchemes = QStringList());
protected:
QFileDialog(const QFileDialogArgs &args);
- void done(int result) Q_DECL_OVERRIDE;
- void accept() Q_DECL_OVERRIDE;
- void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void done(int result) override;
+ void accept() override;
+ void changeEvent(QEvent *e) override;
private:
Q_DECLARE_PRIVATE(QFileDialog)
diff --git a/src/widgets/dialogs/qfiledialog_p.h b/src/widgets/dialogs/qfiledialog_p.h
index 371826eccc..17290381d3 100644
--- a/src/widgets/dialogs/qfiledialog_p.h
+++ b/src/widgets/dialogs/qfiledialog_p.h
@@ -254,7 +254,7 @@ public:
// setVisible_sys returns true if it ends up showing a native
// dialog. Returning false means that a non-native dialog must be
// used instead.
- bool canBeNativeDialog() const Q_DECL_OVERRIDE;
+ bool canBeNativeDialog() const override;
inline bool usingWidgets() const;
inline void setDirectory_sys(const QUrl &directory);
@@ -286,9 +286,9 @@ public:
~QFileDialogPrivate();
private:
- virtual void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
- virtual void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
- virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ virtual void initHelper(QPlatformDialogHelper *) override;
+ virtual void helperPrepareShow(QPlatformDialogHelper *) override;
+ virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) override;
Q_DISABLE_COPY(QFileDialogPrivate)
};
@@ -298,7 +298,7 @@ class QFileDialogLineEdit : public QLineEdit
public:
QFileDialogLineEdit(QWidget *parent = 0) : QLineEdit(parent), d_ptr(0){}
void setFileDialogPrivate(QFileDialogPrivate *d_pointer) {d_ptr = d_pointer; }
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) override;
bool hideOnEsc;
private:
QFileDialogPrivate *d_ptr;
@@ -309,10 +309,10 @@ class QFileDialogComboBox : public QComboBox
public:
QFileDialogComboBox(QWidget *parent = 0) : QComboBox(parent), urlModel(0) {}
void setFileDialogPrivate(QFileDialogPrivate *d_pointer);
- void showPopup() Q_DECL_OVERRIDE;
+ void showPopup() override;
void setHistory(const QStringList &paths);
QStringList history() const { return m_history; }
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
private:
QUrlModel *urlModel;
@@ -325,9 +325,9 @@ class QFileDialogListView : public QListView
public:
QFileDialogListView(QWidget *parent = 0);
void setFileDialogPrivate(QFileDialogPrivate *d_pointer);
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
protected:
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) override;
private:
QFileDialogPrivate *d_ptr;
};
@@ -337,10 +337,10 @@ class QFileDialogTreeView : public QTreeView
public:
QFileDialogTreeView(QWidget *parent);
void setFileDialogPrivate(QFileDialogPrivate *d_pointer);
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
protected:
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) override;
private:
QFileDialogPrivate *d_ptr;
};
diff --git a/src/widgets/dialogs/qfileinfogatherer_p.h b/src/widgets/dialogs/qfileinfogatherer_p.h
index 0cf2ed1f58..cc82f42850 100644
--- a/src/widgets/dialogs/qfileinfogatherer_p.h
+++ b/src/widgets/dialogs/qfileinfogatherer_p.h
@@ -167,6 +167,13 @@ public:
explicit QFileInfoGatherer(QObject *parent = 0);
~QFileInfoGatherer();
+#if QT_CONFIG(filesystemwatcher) && defined(Q_OS_WIN)
+ QStringList watchedFiles() const { return watcher->files(); }
+ QStringList watchedDirectories() const { return watcher->directories(); }
+ void watchPaths(const QStringList &paths) { watcher->addPaths(paths); }
+ void unwatchPaths(const QStringList &paths) { watcher->removePaths(paths); }
+#endif // filesystemwatcher && Q_OS_WIN
+
// only callable from this->thread():
void clear();
void removePath(const QString &path);
@@ -186,7 +193,7 @@ private Q_SLOTS:
void driveRemoved();
private:
- void run() Q_DECL_OVERRIDE;
+ void run() override;
// called by run():
void getFileInfos(const QString &path, const QStringList &files);
void fetch(const QFileInfo &info, QElapsedTimer &base, bool &firstTime, QVector<QPair<QString, QFileInfo> > &updatedFiles, const QString &path);
diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp
index 14ac6ad31b..33b8b51216 100644
--- a/src/widgets/dialogs/qfilesystemmodel.cpp
+++ b/src/widgets/dialogs/qfilesystemmodel.cpp
@@ -207,14 +207,17 @@ bool QFileSystemModel::remove(const QModelIndex &aindex)
const QString path = d->filePath(aindex);
const QFileInfo fileInfo(path);
+#if QT_CONFIG(filesystemwatcher) && defined(Q_OS_WIN)
+ // QTBUG-65683: Remove file system watchers prior to deletion to prevent
+ // failure due to locked files on Windows.
+ const QStringList watchedPaths = d->unwatchPathsAt(aindex);
+#endif // filesystemwatcher && Q_OS_WIN
const bool success = (fileInfo.isFile() || fileInfo.isSymLink())
? QFile::remove(path) : QDir(path).removeRecursively();
-#ifndef QT_NO_FILESYSTEMWATCHER
- if (success) {
- QFileSystemModelPrivate * d = const_cast<QFileSystemModelPrivate*>(d_func());
- d->fileInfoGatherer.removePath(path);
- }
-#endif
+#if QT_CONFIG(filesystemwatcher) && defined(Q_OS_WIN)
+ if (!success)
+ d->watchPaths(watchedPaths);
+#endif // filesystemwatcher && Q_OS_WIN
return success;
}
@@ -851,6 +854,20 @@ QIcon QFileSystemModelPrivate::icon(const QModelIndex &index) const
return node(index)->icon();
}
+static void displayRenameFailedMessage(const QString &newName)
+{
+#if QT_CONFIG(messagebox)
+ const QString message =
+ QFileSystemModel::tr("<b>The name \"%1\" cannot be used.</b>"
+ "<p>Try using another name, with fewer characters or no punctuation marks.")
+ .arg(newName);
+ QMessageBox::information(nullptr, QFileSystemModel::tr("Invalid filename"),
+ message, QMessageBox::Ok);
+#else
+ Q_UNUSED(newName)
+#endif // QT_CONFIG(messagebox)
+}
+
/*!
\reimp
*/
@@ -871,15 +888,21 @@ bool QFileSystemModel::setData(const QModelIndex &idx, const QVariant &value, in
const QString parentPath = filePath(parent(idx));
- if (newName.isEmpty()
- || QDir::toNativeSeparators(newName).contains(QDir::separator())
- || !QDir(parentPath).rename(oldName, newName)) {
-#if QT_CONFIG(messagebox)
- QMessageBox::information(0, QFileSystemModel::tr("Invalid filename"),
- QFileSystemModel::tr("<b>The name \"%1\" can not be used.</b><p>Try using another name, with fewer characters or no punctuations marks.")
- .arg(newName),
- QMessageBox::Ok);
-#endif // QT_CONFIG(messagebox)
+ if (newName.isEmpty() || QDir::toNativeSeparators(newName).contains(QDir::separator())) {
+ displayRenameFailedMessage(newName);
+ return false;
+ }
+
+#if QT_CONFIG(filesystemwatcher) && defined(Q_OS_WIN)
+ // QTBUG-65683: Remove file system watchers prior to renaming to prevent
+ // failure due to locked files on Windows.
+ const QStringList watchedPaths = d->unwatchPathsAt(idx);
+#endif // filesystemwatcher && Q_OS_WIN
+ if (!QDir(parentPath).rename(oldName, newName)) {
+#if QT_CONFIG(filesystemwatcher) && defined(Q_OS_WIN)
+ d->watchPaths(watchedPaths);
+#endif
+ displayRenameFailedMessage(newName);
return false;
} else {
/*
@@ -1882,6 +1905,46 @@ void QFileSystemModelPrivate::_q_resolvedName(const QString &fileName, const QSt
resolvedSymLinks[fileName] = resolvedName;
}
+#if QT_CONFIG(filesystemwatcher) && defined(Q_OS_WIN)
+// Remove file system watchers at/below the index and return a list of previously
+// watched files. This should be called prior to operations like rename/remove
+// which might fail due to watchers on platforms like Windows. The watchers
+// should be restored on failure.
+QStringList QFileSystemModelPrivate::unwatchPathsAt(const QModelIndex &index)
+{
+ const QFileSystemModelPrivate::QFileSystemNode *indexNode = node(index);
+ if (indexNode == nullptr)
+ return QStringList();
+ const Qt::CaseSensitivity caseSensitivity = indexNode->caseSensitive()
+ ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ const QString path = indexNode->fileInfo().absoluteFilePath();
+
+ QStringList result;
+ const auto filter = [path, caseSensitivity] (const QString &watchedPath)
+ {
+ const int pathSize = path.size();
+ if (pathSize == watchedPath.size()) {
+ return path.compare(watchedPath, caseSensitivity) == 0;
+ } else if (watchedPath.size() > pathSize) {
+ return watchedPath.at(pathSize) == QLatin1Char('/')
+ && watchedPath.startsWith(path, caseSensitivity);
+ }
+ return false;
+ };
+
+ const QStringList &watchedFiles = fileInfoGatherer.watchedFiles();
+ std::copy_if(watchedFiles.cbegin(), watchedFiles.cend(),
+ std::back_inserter(result), filter);
+
+ const QStringList &watchedDirectories = fileInfoGatherer.watchedDirectories();
+ std::copy_if(watchedDirectories.cbegin(), watchedDirectories.cend(),
+ std::back_inserter(result), filter);
+
+ fileInfoGatherer.unwatchPaths(result);
+ return result;
+}
+#endif // filesystemwatcher && Q_OS_WIN
+
/*!
\internal
*/
diff --git a/src/widgets/dialogs/qfilesystemmodel.h b/src/widgets/dialogs/qfilesystemmodel.h
index a5f23c9220..c2c8b8818e 100644
--- a/src/widgets/dialogs/qfilesystemmodel.h
+++ b/src/widgets/dialogs/qfilesystemmodel.h
@@ -75,36 +75,36 @@ public:
FilePermissions = Qt::UserRole + 3
};
- explicit QFileSystemModel(QObject *parent = Q_NULLPTR);
+ explicit QFileSystemModel(QObject *parent = nullptr);
~QFileSystemModel();
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex index(const QString &path, int column = 0) const;
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const override;
using QObject::parent;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- bool canFetchMore(const QModelIndex &parent) const Q_DECL_OVERRIDE;
- void fetchMore(const QModelIndex &parent) Q_DECL_OVERRIDE;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
+ bool canFetchMore(const QModelIndex &parent) const override;
+ void fetchMore(const QModelIndex &parent) override;
- int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant myComputer(int role = Qt::DisplayRole) const;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ QStringList mimeTypes() const override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
+ Qt::DropActions supportedDropActions() const override;
// QFileSystemModel specific API
QModelIndex setRootPath(const QString &path);
@@ -144,9 +144,9 @@ public:
bool remove(const QModelIndex &index);
protected:
- QFileSystemModel(QFileSystemModelPrivate &, QObject *parent = Q_NULLPTR);
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ QFileSystemModel(QFileSystemModelPrivate &, QObject *parent = nullptr);
+ void timerEvent(QTimerEvent *event) override;
+ bool event(QEvent *event) override;
private:
Q_DECLARE_PRIVATE(QFileSystemModel)
diff --git a/src/widgets/dialogs/qfilesystemmodel_p.h b/src/widgets/dialogs/qfilesystemmodel_p.h
index e8bae4f659..a2a02e2d41 100644
--- a/src/widgets/dialogs/qfilesystemmodel_p.h
+++ b/src/widgets/dialogs/qfilesystemmodel_p.h
@@ -297,9 +297,13 @@ public:
static int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs);
QDir rootDir;
-#ifndef QT_NO_FILESYSTEMWATCHER
+#if QT_CONFIG(filesystemwatcher)
+# ifdef Q_OS_WIN
+ QStringList unwatchPathsAt(const QModelIndex &);
+ void watchPaths(const QStringList &paths) { fileInfoGatherer.watchPaths(paths); }
+# endif // Q_OS_WIN
QFileInfoGatherer fileInfoGatherer;
-#endif
+#endif // filesystemwatcher
QTimer delayedSortTimer;
bool forceSort;
int sortColumn;
diff --git a/src/widgets/dialogs/qfontdialog.cpp b/src/widgets/dialogs/qfontdialog.cpp
index 587e31d8c5..5f912c582f 100644
--- a/src/widgets/dialogs/qfontdialog.cpp
+++ b/src/widgets/dialogs/qfontdialog.cpp
@@ -84,7 +84,7 @@ public:
int row = QListView::currentIndex().row();
return row < 0 ? QString() : model()->stringList().at(row);
}
- void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE {
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) override {
QListView::currentChanged(current, previous);
if (current.isValid())
emit highlighted(current.row());
diff --git a/src/widgets/dialogs/qfontdialog.h b/src/widgets/dialogs/qfontdialog.h
index 3fb3997b85..ae1320e779 100644
--- a/src/widgets/dialogs/qfontdialog.h
+++ b/src/widgets/dialogs/qfontdialog.h
@@ -72,8 +72,8 @@ public:
Q_DECLARE_FLAGS(FontDialogOptions, FontDialogOption)
- explicit QFontDialog(QWidget *parent = Q_NULLPTR);
- explicit QFontDialog(const QFont &initial, QWidget *parent = Q_NULLPTR);
+ explicit QFontDialog(QWidget *parent = nullptr);
+ explicit QFontDialog(const QFont &initial, QWidget *parent = nullptr);
~QFontDialog();
void setCurrentFont(const QFont &font);
@@ -89,10 +89,10 @@ public:
using QDialog::open;
void open(QObject *receiver, const char *member);
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
- static QFont getFont(bool *ok, QWidget *parent = Q_NULLPTR);
- static QFont getFont(bool *ok, const QFont &initial, QWidget *parent = Q_NULLPTR, const QString &title = QString(),
+ static QFont getFont(bool *ok, QWidget *parent = nullptr);
+ static QFont getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(),
FontDialogOptions options = FontDialogOptions());
Q_SIGNALS:
@@ -100,9 +100,9 @@ Q_SIGNALS:
void fontSelected(const QFont &font);
protected:
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- void done(int result) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) override;
+ void done(int result) override;
+ bool eventFilter(QObject *object, QEvent *event) override;
private:
Q_DISABLE_COPY(QFontDialog)
diff --git a/src/widgets/dialogs/qfontdialog_p.h b/src/widgets/dialogs/qfontdialog_p.h
index ae923d94ed..202247a3b4 100644
--- a/src/widgets/dialogs/qfontdialog_p.h
+++ b/src/widgets/dialogs/qfontdialog_p.h
@@ -141,12 +141,12 @@ public:
QPointer<QObject> receiverToDisconnectOnClose;
QByteArray memberToDisconnectOnClose;
- bool canBeNativeDialog() const Q_DECL_OVERRIDE;
+ bool canBeNativeDialog() const override;
void _q_runNativeAppModalPanel();
private:
- virtual void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
- virtual void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ virtual void initHelper(QPlatformDialogHelper *) override;
+ virtual void helperPrepareShow(QPlatformDialogHelper *) override;
};
QT_END_NAMESPACE
diff --git a/src/widgets/dialogs/qfscompleter_p.h b/src/widgets/dialogs/qfscompleter_p.h
index ce0612f293..3b829d4a52 100644
--- a/src/widgets/dialogs/qfscompleter_p.h
+++ b/src/widgets/dialogs/qfscompleter_p.h
@@ -71,8 +71,8 @@ public:
setCaseSensitivity(Qt::CaseInsensitive);
#endif
}
- QString pathFromIndex(const QModelIndex &index) const Q_DECL_OVERRIDE;
- QStringList splitPath(const QString& path) const Q_DECL_OVERRIDE;
+ QString pathFromIndex(const QModelIndex &index) const override;
+ QStringList splitPath(const QString& path) const override;
QAbstractProxyModel *proxyModel;
QFileSystemModel *sourceModel;
diff --git a/src/widgets/dialogs/qinputdialog.cpp b/src/widgets/dialogs/qinputdialog.cpp
index 4c0f22ae97..5c6e0f45a5 100644
--- a/src/widgets/dialogs/qinputdialog.cpp
+++ b/src/widgets/dialogs/qinputdialog.cpp
@@ -71,10 +71,11 @@ static const char *candidateSignal(int which)
case IntValueSelectedSignal: return SIGNAL(intValueSelected(int));
case DoubleValueSelectedSignal: return SIGNAL(doubleValueSelected(double));
- case NumCandidateSignals: ; // fall through
+ case NumCandidateSignals:
+ break;
};
Q_UNREACHABLE();
- return Q_NULLPTR;
+ return nullptr;
}
static const char *signalForMember(const char *member)
@@ -115,7 +116,7 @@ private slots:
void notifyTextChanged() { emit textChanged(hasAcceptableInput()); }
private:
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE {
+ void keyPressEvent(QKeyEvent *event) override {
if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && !hasAcceptableInput()) {
#ifndef QT_NO_PROPERTIES
setProperty("value", property("value"));
@@ -126,7 +127,7 @@ private:
notifyTextChanged();
}
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE {
+ void mousePressEvent(QMouseEvent *event) override {
QSpinBox::mousePressEvent(event);
notifyTextChanged();
}
@@ -150,7 +151,7 @@ private slots:
void notifyTextChanged() { emit textChanged(hasAcceptableInput()); }
private:
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE {
+ void keyPressEvent(QKeyEvent *event) override {
if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && !hasAcceptableInput()) {
#ifndef QT_NO_PROPERTIES
setProperty("value", property("value"));
@@ -161,7 +162,7 @@ private:
notifyTextChanged();
}
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE {
+ void mousePressEvent(QMouseEvent *event) override {
QDoubleSpinBox::mousePressEvent(event);
notifyTextChanged();
}
@@ -239,7 +240,6 @@ void QInputDialogPrivate::ensureLayout()
QObject::connect(buttonBox, SIGNAL(rejected()), q, SLOT(reject()));
mainLayout = new QVBoxLayout(q);
- //we want to let the input dialog grow to available size on Symbian.
mainLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
mainLayout->addWidget(label);
mainLayout->addWidget(inputWidget);
@@ -1312,7 +1312,7 @@ int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &l
}
/*!
- \fn QInputDialog::getInteger(QWidget *parent, const QString &title, const QString &label, int value, int min, int max, int step, bool *ok, Qt::WindowFlags flags)
+ \fn int QInputDialog::getInteger(QWidget *parent, const QString &title, const QString &label, int value, int min, int max, int step, bool *ok, Qt::WindowFlags flags)
\deprecated use getInt()
Static convenience function to get an integer input from the user.
diff --git a/src/widgets/dialogs/qinputdialog.h b/src/widgets/dialogs/qinputdialog.h
index e41d442498..c3a5e59d53 100644
--- a/src/widgets/dialogs/qinputdialog.h
+++ b/src/widgets/dialogs/qinputdialog.h
@@ -91,7 +91,7 @@ public:
DoubleInput
};
- QInputDialog(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ QInputDialog(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~QInputDialog();
void setInputMode(InputMode mode);
@@ -154,31 +154,31 @@ public:
using QDialog::open;
void open(QObject *receiver, const char *member);
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const override;
+ QSize sizeHint() const override;
- void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
static QString getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode echo = QLineEdit::Normal,
- const QString &text = QString(), bool *ok = Q_NULLPTR,
+ const QString &text = QString(), bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,
- const QString &text = QString(), bool *ok = Q_NULLPTR,
+ const QString &text = QString(), bool *ok = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
static QString getItem(QWidget *parent, const QString &title, const QString &label,
const QStringList &items, int current = 0, bool editable = true,
- bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(),
+ bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(),
Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
int minValue = -2147483647, int maxValue = 2147483647,
- int step = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
double minValue = -2147483647, double maxValue = 2147483647,
- int decimals = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
// ### Qt 6: merge overloads
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value,
double minValue, double maxValue, int decimals, bool *ok, Qt::WindowFlags flags,
@@ -187,7 +187,7 @@ public:
#if QT_DEPRECATED_SINCE(5, 0)
QT_DEPRECATED static inline int getInteger(QWidget *parent, const QString &title, const QString &label, int value = 0,
int minValue = -2147483647, int maxValue = 2147483647,
- int step = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())
+ int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
{
return getInt(parent, title, label, value, minValue, maxValue, step, ok, flags);
}
@@ -206,7 +206,7 @@ Q_SIGNALS:
void doubleValueSelected(double value);
public:
- void done(int result) Q_DECL_OVERRIDE;
+ void done(int result) override;
private:
Q_DISABLE_COPY(QInputDialog)
diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp
index fdfffb45cf..cb8ac1ccbf 100644
--- a/src/widgets/dialogs/qmessagebox.cpp
+++ b/src/widgets/dialogs/qmessagebox.cpp
@@ -98,7 +98,7 @@ public:
public:
TextEdit(QWidget *parent=0) : QTextEdit(parent) { }
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent * e) Q_DECL_OVERRIDE
+ void contextMenuEvent(QContextMenuEvent * e) override
{
QMenu *menu = createStandardContextMenu();
menu->setAttribute(Qt::WA_DeleteOnClose);
@@ -173,7 +173,7 @@ public:
void setLabel(DetailButtonLabel lbl)
{ setText(label(lbl)); }
- QSize sizeHint() const Q_DECL_OVERRIDE
+ QSize sizeHint() const override
{
ensurePolished();
QStyleOptionButton opt;
@@ -259,9 +259,9 @@ public:
QByteArray signalToDisconnectOnClose;
QSharedPointer<QMessageDialogOptions> options;
private:
- void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
- void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
- void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ void initHelper(QPlatformDialogHelper *) override;
+ void helperPrepareShow(QPlatformDialogHelper *) override;
+ void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) override;
};
void QMessageBoxPrivate::init(const QString &title, const QString &text)
@@ -415,7 +415,7 @@ void QMessageBoxPrivate::updateSize()
}
QFontMetrics fm(QApplication::font("QMdiSubWindowTitleBar"));
- int windowTitleWidth = qMin(fm.width(q->windowTitle()) + 50, hardLimit);
+ int windowTitleWidth = qMin(fm.horizontalAdvance(q->windowTitle()) + 50, hardLimit);
if (windowTitleWidth > width)
width = windowTitleWidth;
@@ -2608,7 +2608,7 @@ QPixmap QMessageBoxPrivate::standardIcon(QMessageBox::Icon icon, QMessageBox *mb
break;
}
if (!tmpIcon.isNull()) {
- QWindow *window = Q_NULLPTR;
+ QWindow *window = nullptr;
if (mb) {
window = mb->windowHandle();
if (!window) {
diff --git a/src/widgets/dialogs/qmessagebox.h b/src/widgets/dialogs/qmessagebox.h
index fd7d7936b6..4b993a9e65 100644
--- a/src/widgets/dialogs/qmessagebox.h
+++ b/src/widgets/dialogs/qmessagebox.h
@@ -132,9 +132,9 @@ public:
Q_DECLARE_FLAGS(StandardButtons, StandardButton)
Q_FLAG(StandardButtons)
- explicit QMessageBox(QWidget *parent = Q_NULLPTR);
+ explicit QMessageBox(QWidget *parent = nullptr);
QMessageBox(Icon icon, const QString &title, const QString &text,
- StandardButtons buttons = NoButton, QWidget *parent = Q_NULLPTR,
+ StandardButtons buttons = NoButton, QWidget *parent = nullptr,
Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
~QMessageBox();
@@ -201,7 +201,7 @@ public:
QMessageBox(const QString &title, const QString &text, Icon icon,
int button0, int button1, int button2,
- QWidget *parent = Q_NULLPTR,
+ QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
static int information(QWidget *parent, const QString &title,
@@ -290,12 +290,12 @@ public Q_SLOTS:
#endif
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
- void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void showEvent(QShowEvent *event) override;
+ void closeEvent(QCloseEvent *event) override;
+ void keyPressEvent(QKeyEvent *event) override;
+ void changeEvent(QEvent *event) override;
private:
Q_PRIVATE_SLOT(d_func(), void _q_buttonClicked(QAbstractButton *))
diff --git a/src/widgets/dialogs/qprogressdialog.h b/src/widgets/dialogs/qprogressdialog.h
index 902a4de5d2..74adb6bd84 100644
--- a/src/widgets/dialogs/qprogressdialog.h
+++ b/src/widgets/dialogs/qprogressdialog.h
@@ -68,9 +68,9 @@ class Q_WIDGETS_EXPORT QProgressDialog : public QDialog
Q_PROPERTY(QString labelText READ labelText WRITE setLabelText)
public:
- explicit QProgressDialog(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ explicit QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
QProgressDialog(const QString &labelText, const QString &cancelButtonText,
- int minimum, int maximum, QWidget *parent = Q_NULLPTR,
+ int minimum, int maximum, QWidget *parent = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags());
~QProgressDialog();
@@ -85,7 +85,7 @@ public:
int value() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
QString labelText() const;
int minimumDuration() const;
@@ -113,10 +113,10 @@ Q_SIGNALS:
void canceled();
protected:
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) override;
+ void closeEvent(QCloseEvent *event) override;
+ void changeEvent(QEvent *event) override;
+ void showEvent(QShowEvent *event) override;
protected Q_SLOTS:
void forceShow();
diff --git a/src/widgets/dialogs/qsidebar_p.h b/src/widgets/dialogs/qsidebar_p.h
index 1f27d477a8..07aaa5abd2 100644
--- a/src/widgets/dialogs/qsidebar_p.h
+++ b/src/widgets/dialogs/qsidebar_p.h
@@ -69,7 +69,7 @@ class QSideBarDelegate : public QStyledItemDelegate
public:
QSideBarDelegate(QWidget *parent = 0) : QStyledItemDelegate(parent) {}
void initStyleOption(QStyleOptionViewItem *option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
};
class Q_AUTOTEST_EXPORT QUrlModel : public QStandardItemModel
@@ -84,14 +84,14 @@ public:
QUrlModel(QObject *parent = 0);
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ QStringList mimeTypes() const override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
#ifndef QT_NO_DRAGANDDROP
bool canDrop(QDragEnterEvent *event);
- bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
#endif
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override;
void setUrls(const QList<QUrl> &list);
void addUrls(const QList<QUrl> &urls, int row = -1, bool move = true);
@@ -131,7 +131,7 @@ public:
void setModelAndUrls(QFileSystemModel *model, const QList<QUrl> &newUrls);
~QSidebar();
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
void setUrls(const QList<QUrl> &list) { urlModel->setUrls(list); }
void addUrls(const QList<QUrl> &list, int row) { urlModel->addUrls(list, row); }
@@ -140,10 +140,10 @@ public:
void selectUrl(const QUrl &url);
protected:
- bool event(QEvent * e) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent * e) override;
+ void focusInEvent(QFocusEvent *event) override;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *event) override;
#endif
private Q_SLOTS:
diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp
index 890069ca1a..3876cf16c6 100644
--- a/src/widgets/dialogs/qwizard.cpp
+++ b/src/widgets/dialogs/qwizard.cpp
@@ -298,7 +298,7 @@ public:
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat);
protected:
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) override;
#if QT_CONFIG(style_windowsvista)
private:
bool vistaDisabled() const;
@@ -454,7 +454,7 @@ public:
m_layout->addWidget(m_sideWidget);
}
- QSize minimumSizeHint() const Q_DECL_OVERRIDE {
+ QSize minimumSizeHint() const override {
if (pixmap() && !pixmap()->isNull())
return pixmap()->size();
return QFrame::minimumSizeHint();
@@ -579,7 +579,7 @@ public:
, bottomRuler(0)
#if QT_CONFIG(style_windowsvista)
, vistaHelper(0)
- , vistaInitPending(false)
+ , vistaInitPending(true)
, vistaState(QVistaHelper::Dirty)
, vistaStateChanged(false)
, inHandleAeroStyleChange(false)
@@ -590,12 +590,6 @@ public:
, maximumHeight(QWIDGETSIZE_MAX)
{
std::fill(btns, btns + QWizard::NButtons, static_cast<QAbstractButton *>(0));
-
-#if QT_CONFIG(style_windowsvista)
- if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA
- && (QSysInfo::WindowsVersion & QSysInfo::WV_NT_based))
- vistaInitPending = true;
-#endif
}
void init();
diff --git a/src/widgets/dialogs/qwizard.h b/src/widgets/dialogs/qwizard.h
index 4d03bf91d4..0dd837b197 100644
--- a/src/widgets/dialogs/qwizard.h
+++ b/src/widgets/dialogs/qwizard.h
@@ -120,7 +120,7 @@ public:
Q_DECLARE_FLAGS(WizardOptions, WizardOption)
Q_FLAG(WizardOptions)
- explicit QWizard(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ explicit QWizard(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~QWizard();
int addPage(QWizardPage *page);
@@ -168,8 +168,8 @@ public:
void setDefaultProperty(const char *className, const char *property,
const char *changedSignal);
- void setVisible(bool visible) Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ void setVisible(bool visible) override;
+ QSize sizeHint() const override;
Q_SIGNALS:
void currentIdChanged(int id);
@@ -184,13 +184,13 @@ public Q_SLOTS:
void restart();
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
- bool nativeEvent(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
+ bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
#endif
- void done(int result) Q_DECL_OVERRIDE;
+ void done(int result) override;
virtual void initializePage(int id);
virtual void cleanupPage(int id);
@@ -215,7 +215,7 @@ class Q_WIDGETS_EXPORT QWizardPage : public QWidget
Q_PROPERTY(QString subTitle READ subTitle WRITE setSubTitle)
public:
- explicit QWizardPage(QWidget *parent = Q_NULLPTR);
+ explicit QWizardPage(QWidget *parent = nullptr);
~QWizardPage();
void setTitle(const QString &title);
@@ -243,8 +243,8 @@ Q_SIGNALS:
protected:
void setField(const QString &name, const QVariant &value);
QVariant field(const QString &name) const;
- void registerField(const QString &name, QWidget *widget, const char *property = Q_NULLPTR,
- const char *changedSignal = Q_NULLPTR);
+ void registerField(const QString &name, QWidget *widget, const char *property = nullptr,
+ const char *changedSignal = nullptr);
QWizard *wizard() const;
private:
diff --git a/src/widgets/dialogs/qwizard_win.cpp b/src/widgets/dialogs/qwizard_win.cpp
index bedcd1b0c2..6f0e436ae0 100644
--- a/src/widgets/dialogs/qwizard_win.cpp
+++ b/src/widgets/dialogs/qwizard_win.cpp
@@ -154,10 +154,7 @@ QVistaHelper::QVistaHelper(QWizard *wizard)
backButton_ = new QVistaBackButton(wizard);
backButton_->hide();
- // Handle diff between Windows 7 and Vista
iconSpacing = QStyleHelper::dpiScaled(7);
- textSpacing = QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ?
- iconSpacing : QStyleHelper::dpiScaled(20);
}
QVistaHelper::~QVistaHelper()
@@ -666,12 +663,12 @@ bool QVistaHelper::drawBlackRect(const QRect &rect, HDC hdc)
return value;
}
-#if !defined(_MSC_VER) || _MSC_VER < 1700
+#ifndef Q_CC_MSVC
static inline int getWindowBottomMargin()
{
return GetSystemMetrics(SM_CYSIZEFRAME);
}
-#else // !_MSC_VER || _MSC_VER < 1700
+#else
// QTBUG-36192, GetSystemMetrics(SM_CYSIZEFRAME) returns bogus values
// for MSVC2012 which leads to the custom margin having no effect since
// that only works when removing the entire margin.
@@ -681,7 +678,7 @@ static inline int getWindowBottomMargin()
AdjustWindowRectEx(&rect, WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_THICKFRAME | WS_DLGFRAME, FALSE, 0);
return qAbs(rect.bottom);
}
-#endif // _MSC_VER >= 1700
+#endif // Q_CC_MSVC
int QVistaHelper::frameSizeDp()
{
@@ -695,7 +692,7 @@ int QVistaHelper::captionSizeDp()
int QVistaHelper::titleOffset()
{
- int iconOffset = wizard ->windowIcon().isNull() ? 0 : iconSize() + textSpacing;
+ int iconOffset = wizard ->windowIcon().isNull() ? 0 : iconSize() + iconSpacing;
return leftMargin() + iconOffset;
}
diff --git a/src/widgets/dialogs/qwizard_win_p.h b/src/widgets/dialogs/qwizard_win_p.h
index f9122865c2..7ca4899a1f 100644
--- a/src/widgets/dialogs/qwizard_win_p.h
+++ b/src/widgets/dialogs/qwizard_win_p.h
@@ -104,8 +104,7 @@ public:
static int titleBarSize() { return QVistaHelper::titleBarSizeDp() / QVistaHelper::m_devicePixelRatio; }
static int titleBarSizeDp() { return QVistaHelper::frameSizeDp() + QVistaHelper::captionSizeDp(); }
static int topPadding() { // padding under text
- return int(QStyleHelper::dpiScaled(
- QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ? 4 : 6));
+ return int(QStyleHelper::dpiScaled(4));
}
static int topOffset();
@@ -150,7 +149,6 @@ private:
int titleBarOffset; // Extra spacing above the text
int iconSpacing; // Space between button and icon
- int textSpacing; // Space between icon and text
static int m_devicePixelRatio;
};
diff --git a/src/widgets/doc/qtwidgets.qdocconf b/src/widgets/doc/qtwidgets.qdocconf
index 88957b0f94..4700ee29bf 100644
--- a/src/widgets/doc/qtwidgets.qdocconf
+++ b/src/widgets/doc/qtwidgets.qdocconf
@@ -26,7 +26,7 @@ qhp.QtWidgets.subprojects.classes.sortPages = true
tagfile = ../../../doc/qtwidgets/qtwidgets.tags
-depends += qtcore qtgui qtdoc qtsql qtdesigner qtquick qmake qtplatformheaders qtsvg
+depends += qtcore qtgui qtdoc qtsql qtdesigner qtquick qmake qtplatformheaders qtsvg qtlinguist
headerdirs += ..
diff --git a/src/widgets/doc/snippets/common-table-model/model.cpp b/src/widgets/doc/snippets/common-table-model/model.cpp
index 96df100f26..2f6e9f1144 100644
--- a/src/widgets/doc/snippets/common-table-model/model.cpp
+++ b/src/widgets/doc/snippets/common-table-model/model.cpp
@@ -68,7 +68,7 @@ TableModel::TableModel(int rows, int columns, QObject *parent)
QStringList newList;
for (int column = 0; column < qMax(1, columns); ++column) {
- newList.append("");
+ newList.append(QString());
}
for (int row = 0; row < qMax(1, rows); ++row) {
@@ -129,9 +129,9 @@ QVariant TableModel::headerData(int section, Qt::Orientation orientation,
return QVariant();
if (orientation == Qt::Horizontal)
- return QString("Column %1").arg(section);
+ return QStringLiteral("Column %1").arg(section);
else
- return QString("Row %1").arg(section);
+ return QStringLiteral("Row %1").arg(section);
}
/*!
@@ -164,7 +164,7 @@ bool TableModel::setData(const QModelIndex &index,
return false;
rowList[index.row()][index.column()] = value.toString();
- emit dataChanged(index, index);
+ emit dataChanged(index, index, {role});
return true;
}
@@ -180,7 +180,7 @@ bool TableModel::insertRows(int position, int rows, const QModelIndex &parent)
for (int row = 0; row < rows; ++row) {
QStringList items;
for (int column = 0; column < columns; ++column)
- items.append("");
+ items.append(QString());
rowList.insert(position, items);
}
@@ -202,7 +202,7 @@ bool TableModel::insertColumns(int position, int columns,
for (int row = 0; row < rows; ++row) {
for (int column = position; column < columns; ++column) {
- rowList[row].insert(position, "");
+ rowList[row].insert(position, QString());
}
}
diff --git a/src/widgets/doc/snippets/common-table-model/model.h b/src/widgets/doc/snippets/common-table-model/model.h
index 68e6c00702..5f152e0e78 100644
--- a/src/widgets/doc/snippets/common-table-model/model.h
+++ b/src/widgets/doc/snippets/common-table-model/model.h
@@ -60,22 +60,22 @@ class TableModel : public QAbstractTableModel
Q_OBJECT
public:
- TableModel(int rows = 1, int columns = 1, QObject *parent = 0);
+ TableModel(int rows = 1, int columns = 1, QObject *parent = nullptr);
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role) const override;
QVariant headerData(int section, Qt::Orientation orientation,
- int role = Qt::DisplayRole) const;
+ int role = Qt::DisplayRole) const override;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
bool setData(const QModelIndex &index, const QVariant &value,
- int role = Qt::EditRole);
+ int role = Qt::EditRole) override;
- bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex());
- bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex());
- bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex());
- bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex());
+ bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()) override;
+ bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()) override;
+ bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()) override;
+ bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()) override;
private:
QList<QStringList> rowList;
diff --git a/src/widgets/doc/snippets/javastyle.cpp b/src/widgets/doc/snippets/javastyle.cpp
index bddc303f71..8657d5ed29 100644
--- a/src/widgets/doc/snippets/javastyle.cpp
+++ b/src/widgets/doc/snippets/javastyle.cpp
@@ -214,7 +214,7 @@ void JavaStyle::drawControl(ControlElement control, const QStyleOption *option,
painter->translate(box->rect.width(), -box->rect.height());
}
- int textWidth = box->fontMetrics.width(box->text) + 20;
+ int textWidth = box->fontMetrics.horizontalAdvance(box->text) + 20;
QPolygon innerLine;
innerLine << (box->rect.topLeft() + QPoint(0, 1)) <<
@@ -1016,7 +1016,7 @@ void JavaStyle::drawControl(ControlElement control, const QStyleOption *option,
int h = pixmap.height();
if (!button->text.isEmpty())
- w += button->fontMetrics.width(button->text) + 2;
+ w += button->fontMetrics.horizontalAdvance(button->text) + 2;
point = QPoint(ir.x() + ir.width() / 2 - w / 2,
ir.y() + ir.height() / 2 - h / 2);
@@ -2453,7 +2453,7 @@ QRect JavaStyle::subElementRect(SubElement element,
rect.moveTopLeft(box->rect.topLeft() + QPoint(0, 2));
rect.setHeight(box->rect.height() - 4);
- rect.setWidth(box->fontMetrics.width(box->text) + 15);
+ rect.setWidth(box->fontMetrics.horizontalAdvance(box->text) + 15);
break;
}
case SE_ProgressBarLabel:
@@ -2467,7 +2467,7 @@ QRect JavaStyle::subElementRect(SubElement element,
qstyleoption_cast<const QStyleOptionButton *>(option);
rect = btn->fontMetrics.boundingRect(btn->text);
- rect = QRect(0, 0, btn->fontMetrics.width(btn->text),
+ rect = QRect(0, 0, btn->fontMetrics.horizontalAdvance(btn->text),
rect.height());
if (!btn->icon.isNull()) {
diff --git a/src/widgets/doc/snippets/stringlistmodel/model.cpp b/src/widgets/doc/snippets/stringlistmodel/model.cpp
index f07f6b254f..52e78847d2 100644
--- a/src/widgets/doc/snippets/stringlistmodel/model.cpp
+++ b/src/widgets/doc/snippets/stringlistmodel/model.cpp
@@ -135,9 +135,9 @@ QVariant StringListModel::headerData(int section, Qt::Orientation orientation,
return QVariant();
if (orientation == Qt::Horizontal)
- return QString("Column %1").arg(section);
+ return QStringLiteral("Column %1").arg(section);
else
- return QString("Row %1").arg(section);
+ return QStringLiteral("Row %1").arg(section);
}
//! [2]
@@ -174,7 +174,7 @@ bool StringListModel::setData(const QModelIndex &index,
if (index.isValid() && role == Qt::EditRole) {
stringList.replace(index.row(), value.toString());
- emit dataChanged(index, index);
+ emit dataChanged(index, index, {role});
return true;
}
//! [4] //! [5]
diff --git a/src/widgets/doc/snippets/stringlistmodel/model.h b/src/widgets/doc/snippets/stringlistmodel/model.h
index 50769ef67f..7012152b27 100644
--- a/src/widgets/doc/snippets/stringlistmodel/model.h
+++ b/src/widgets/doc/snippets/stringlistmodel/model.h
@@ -61,26 +61,26 @@ class StringListModel : public QAbstractListModel
Q_OBJECT
public:
- StringListModel(const QStringList &strings, QObject *parent = 0)
+ StringListModel(const QStringList &strings, QObject *parent = nullptr)
: QAbstractListModel(parent), stringList(strings) {}
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- QVariant data(const QModelIndex &index, int role) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role) const override;
QVariant headerData(int section, Qt::Orientation orientation,
//! [0] //! [1]
- int role = Qt::DisplayRole) const;
+ int role = Qt::DisplayRole) const override;
//! [1]
//! [2]
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
bool setData(const QModelIndex &index, const QVariant &value,
//! [2] //! [3]
- int role = Qt::EditRole);
+ int role = Qt::EditRole) override;
//! [3]
//! [4]
- bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex());
- bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex());
+ bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
+ bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()) override;
//! [4]
//! [5]
diff --git a/src/widgets/effects/qgraphicseffect.h b/src/widgets/effects/qgraphicseffect.h
index 78d025ded5..f7c0769778 100644
--- a/src/widgets/effects/qgraphicseffect.h
+++ b/src/widgets/effects/qgraphicseffect.h
@@ -79,7 +79,7 @@ public:
PadToEffectiveBoundingRect
};
- QGraphicsEffect(QObject *parent = Q_NULLPTR);
+ QGraphicsEffect(QObject *parent = nullptr);
virtual ~QGraphicsEffect();
virtual QRectF boundingRectFor(const QRectF &sourceRect) const;
@@ -95,7 +95,7 @@ Q_SIGNALS:
void enabledChanged(bool enabled);
protected:
- QGraphicsEffect(QGraphicsEffectPrivate &d, QObject *parent = Q_NULLPTR);
+ QGraphicsEffect(QGraphicsEffectPrivate &d, QObject *parent = nullptr);
virtual void draw(QPainter *painter) = 0;
virtual void sourceChanged(ChangeFlags flags);
void updateBoundingRect();
@@ -104,7 +104,7 @@ protected:
QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const;
void drawSource(QPainter *painter);
QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates,
- QPoint *offset = Q_NULLPTR,
+ QPoint *offset = nullptr,
PixmapPadMode mode = PadToEffectiveBoundingRect) const;
private:
@@ -129,7 +129,7 @@ class Q_WIDGETS_EXPORT QGraphicsColorizeEffect: public QGraphicsEffect
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
Q_PROPERTY(qreal strength READ strength WRITE setStrength NOTIFY strengthChanged)
public:
- QGraphicsColorizeEffect(QObject *parent = Q_NULLPTR);
+ QGraphicsColorizeEffect(QObject *parent = nullptr);
~QGraphicsColorizeEffect();
QColor color() const;
@@ -144,7 +144,7 @@ Q_SIGNALS:
void strengthChanged(qreal strength);
protected:
- void draw(QPainter *painter) Q_DECL_OVERRIDE;
+ void draw(QPainter *painter) override;
private:
Q_DECLARE_PRIVATE(QGraphicsColorizeEffect)
@@ -167,10 +167,10 @@ public:
Q_DECLARE_FLAGS(BlurHints, BlurHint)
Q_FLAG(BlurHints)
- QGraphicsBlurEffect(QObject *parent = Q_NULLPTR);
+ QGraphicsBlurEffect(QObject *parent = nullptr);
~QGraphicsBlurEffect();
- QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
+ QRectF boundingRectFor(const QRectF &rect) const override;
qreal blurRadius() const;
BlurHints blurHints() const;
@@ -183,7 +183,7 @@ Q_SIGNALS:
void blurHintsChanged(BlurHints hints);
protected:
- void draw(QPainter *painter) Q_DECL_OVERRIDE;
+ void draw(QPainter *painter) override;
private:
Q_DECLARE_PRIVATE(QGraphicsBlurEffect)
@@ -202,10 +202,10 @@ class Q_WIDGETS_EXPORT QGraphicsDropShadowEffect: public QGraphicsEffect
Q_PROPERTY(qreal blurRadius READ blurRadius WRITE setBlurRadius NOTIFY blurRadiusChanged)
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
public:
- QGraphicsDropShadowEffect(QObject *parent = Q_NULLPTR);
+ QGraphicsDropShadowEffect(QObject *parent = nullptr);
~QGraphicsDropShadowEffect();
- QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
+ QRectF boundingRectFor(const QRectF &rect) const override;
QPointF offset() const;
inline qreal xOffset() const
@@ -241,7 +241,7 @@ Q_SIGNALS:
void colorChanged(const QColor &color);
protected:
- void draw(QPainter *painter) Q_DECL_OVERRIDE;
+ void draw(QPainter *painter) override;
private:
Q_DECLARE_PRIVATE(QGraphicsDropShadowEffect)
@@ -255,7 +255,7 @@ class Q_WIDGETS_EXPORT QGraphicsOpacityEffect: public QGraphicsEffect
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged)
Q_PROPERTY(QBrush opacityMask READ opacityMask WRITE setOpacityMask NOTIFY opacityMaskChanged)
public:
- QGraphicsOpacityEffect(QObject *parent = Q_NULLPTR);
+ QGraphicsOpacityEffect(QObject *parent = nullptr);
~QGraphicsOpacityEffect();
qreal opacity() const;
@@ -270,7 +270,7 @@ Q_SIGNALS:
void opacityMaskChanged(const QBrush &mask);
protected:
- void draw(QPainter *painter) Q_DECL_OVERRIDE;
+ void draw(QPainter *painter) override;
private:
Q_DECLARE_PRIVATE(QGraphicsOpacityEffect)
diff --git a/src/widgets/effects/qpixmapfilter_p.h b/src/widgets/effects/qpixmapfilter_p.h
index 399a835142..0f582bde60 100644
--- a/src/widgets/effects/qpixmapfilter_p.h
+++ b/src/widgets/effects/qpixmapfilter_p.h
@@ -105,8 +105,8 @@ public:
void setConvolutionKernel(const qreal *matrix, int rows, int columns);
- QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
- void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const Q_DECL_OVERRIDE;
+ QRectF boundingRectFor(const QRectF &rect) const override;
+ void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const override;
private:
friend class QGLPixmapConvolutionFilter;
@@ -133,8 +133,8 @@ public:
qreal radius() const;
QGraphicsBlurEffect::BlurHints blurHints() const;
- QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
- void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const Q_DECL_OVERRIDE;
+ QRectF boundingRectFor(const QRectF &rect) const override;
+ void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const override;
private:
friend class QGLPixmapBlurFilter;
@@ -157,7 +157,7 @@ public:
void setStrength(qreal strength);
qreal strength() const;
- void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const Q_DECL_OVERRIDE;
+ void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const override;
};
class QPixmapDropShadowFilterPrivate;
@@ -171,8 +171,8 @@ public:
QPixmapDropShadowFilter(QObject *parent = 0);
~QPixmapDropShadowFilter();
- QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
- void draw(QPainter *p, const QPointF &pos, const QPixmap &px, const QRectF &src = QRectF()) const Q_DECL_OVERRIDE;
+ QRectF boundingRectFor(const QRectF &rect) const override;
+ void draw(QPainter *p, const QPointF &pos, const QPixmap &px, const QRectF &src = QRectF()) const override;
qreal blurRadius() const;
void setBlurRadius(qreal radius);
diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout.h b/src/widgets/graphicsview/qgraphicsanchorlayout.h
index 01dc30718a..e392be1568 100644
--- a/src/widgets/graphicsview/qgraphicsanchorlayout.h
+++ b/src/widgets/graphicsview/qgraphicsanchorlayout.h
@@ -76,7 +76,7 @@ private:
class Q_WIDGETS_EXPORT QGraphicsAnchorLayout : public QGraphicsLayout
{
public:
- QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = Q_NULLPTR);
+ QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr);
virtual ~QGraphicsAnchorLayout();
QGraphicsAnchor *addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge,
@@ -97,14 +97,14 @@ public:
qreal horizontalSpacing() const;
qreal verticalSpacing() const;
- void removeAt(int index) Q_DECL_OVERRIDE;
- void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
- QGraphicsLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ void removeAt(int index) override;
+ void setGeometry(const QRectF &rect) override;
+ int count() const override;
+ QGraphicsLayoutItem *itemAt(int index) const override;
- void invalidate() Q_DECL_OVERRIDE;
+ void invalidate() override;
protected:
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
private:
Q_DISABLE_COPY(QGraphicsAnchorLayout)
diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.h b/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
index e785b486bb..6b2408b2eb 100644
--- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
@@ -198,7 +198,7 @@ struct SequentialAnchorData : public AnchorData
#endif
}
- virtual void updateChildrenSizes() Q_DECL_OVERRIDE;
+ virtual void updateChildrenSizes() override;
void calculateSizeHints();
QVector<AnchorVertex*> m_children; // list of vertices in the sequence
@@ -226,7 +226,7 @@ struct ParallelAnchorData : public AnchorData
#endif
}
- virtual void updateChildrenSizes() Q_DECL_OVERRIDE;
+ virtual void updateChildrenSizes() override;
bool calculateSizeHints();
bool secondForward() const {
diff --git a/src/widgets/graphicsview/qgraphicsgridlayout.h b/src/widgets/graphicsview/qgraphicsgridlayout.h
index fb9bc2e32c..4c0a1b4527 100644
--- a/src/widgets/graphicsview/qgraphicsgridlayout.h
+++ b/src/widgets/graphicsview/qgraphicsgridlayout.h
@@ -53,7 +53,7 @@ class QGraphicsGridLayoutPrivate;
class Q_WIDGETS_EXPORT QGraphicsGridLayout : public QGraphicsLayout
{
public:
- QGraphicsGridLayout(QGraphicsLayoutItem *parent = Q_NULLPTR);
+ QGraphicsGridLayout(QGraphicsLayoutItem *parent = nullptr);
virtual ~QGraphicsGridLayout();
void addItem(QGraphicsLayoutItem *item, int row, int column, int rowSpan, int columnSpan,
@@ -106,16 +106,16 @@ public:
QGraphicsLayoutItem *itemAt(int row, int column) const;
// inherited from QGraphicsLayout
- int count() const Q_DECL_OVERRIDE;
- QGraphicsLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- void removeAt(int index) Q_DECL_OVERRIDE;
+ int count() const override;
+ QGraphicsLayoutItem *itemAt(int index) const override;
+ void removeAt(int index) override;
void removeItem(QGraphicsLayoutItem *item);
- void invalidate() Q_DECL_OVERRIDE;
+ void invalidate() override;
// inherited from QGraphicsLayoutItem
- void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
+ void setGeometry(const QRectF &rect) override;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
// ####
//QRect cellRect(int row, int column, int rowSpan = 1, int columnSpan = 1) const;
diff --git a/src/widgets/graphicsview/qgraphicsgridlayoutengine_p.h b/src/widgets/graphicsview/qgraphicsgridlayoutengine_p.h
index d797f784b8..370df9eed7 100644
--- a/src/widgets/graphicsview/qgraphicsgridlayoutengine_p.h
+++ b/src/widgets/graphicsview/qgraphicsgridlayoutengine_p.h
@@ -71,35 +71,35 @@ public:
Qt::Alignment alignment = 0)
: QGridLayoutItem(row, columns, rowSpan, columnSpan, alignment), q_layoutItem(item) {}
- virtual QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation) const Q_DECL_OVERRIDE
+ virtual QLayoutPolicy::Policy sizePolicy(Qt::Orientation orientation) const override
{
QSizePolicy sizePolicy(q_layoutItem->sizePolicy());
return (QLayoutPolicy::Policy)((orientation == Qt::Horizontal) ? sizePolicy.horizontalPolicy()
: sizePolicy.verticalPolicy());
}
- virtual QLayoutPolicy::ControlTypes controlTypes(LayoutSide) const Q_DECL_OVERRIDE
+ virtual QLayoutPolicy::ControlTypes controlTypes(LayoutSide) const override
{
const QSizePolicy::ControlType ct = q_layoutItem->sizePolicy().controlType();
return (QLayoutPolicy::ControlTypes)ct;
}
- virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const Q_DECL_OVERRIDE
+ virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint) const override
{
return q_layoutItem->effectiveSizeHint(which, constraint);
}
bool isHidden() const;
- virtual bool isIgnored() const Q_DECL_OVERRIDE;
+ virtual bool isIgnored() const override;
- virtual void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE
+ virtual void setGeometry(const QRectF &rect) override
{
q_layoutItem->setGeometry(rect);
}
- virtual bool hasDynamicConstraint() const Q_DECL_OVERRIDE;
- virtual Qt::Orientation dynamicConstraintOrientation() const Q_DECL_OVERRIDE;
+ virtual bool hasDynamicConstraint() const override;
+ virtual Qt::Orientation dynamicConstraintOrientation() const override;
QGraphicsLayoutItem *layoutItem() const { return q_layoutItem; }
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index a649d61135..0bc3af2f77 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -268,27 +268,93 @@
*/
/*!
- \variable QGraphicsItem::Type
+ \enum QGraphicsItem::anonymous
- The type value returned by the virtual type() function in standard
- graphics item classes in Qt. All such standard graphics item
- classes in Qt are associated with a unique value for Type,
- e.g. the value returned by QGraphicsPathItem::type() is 2.
+ The value returned by the virtual type() function in standard
+ graphics item classes in Qt. All such standard graphics item classes
+ in Qt are associated with a unique value for Type, e.g. the value
+ returned by QGraphicsPathItem::type() is 2.
+
+ \value Type
\snippet code/src_gui_graphicsview_qgraphicsitem.cpp 18
+
+ \value UserType The lowest value returned by the virtual type()
+ function for custom subclasses of QGraphicsItem.
+
+ \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 1
*/
/*!
- \variable QGraphicsItem::UserType
+ \enum QGraphicsPathItem::anonymous
- The lowest permitted type value for custom items (subclasses
- of QGraphicsItem or any of the standard items). This value is
- used in conjunction with a reimplementation of QGraphicsItem::type()
- and declaring a Type enum value. Example:
+ The value returned by the virtual type() function.
- \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 1
+ \value Type A graphics path item
+*/
+
+/*!
+ \enum QGraphicsRectItem::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics rect item
+*/
+
+/*!
+ \enum QGraphicsEllipseItem::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics ellipse item
+*/
+
+/*!
+ \enum QGraphicsPolygonItem::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics polygon item
+*/
+
+/*!
+ \enum QGraphicsPixmapItem::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics pixmap item
+*/
+
+/*!
+ \enum QGraphicsTextItem::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics text item
+*/
+
+/*!
+ \enum QGraphicsSimpleTextItem::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics simple text item
+*/
+
+/*!
+ \enum QGraphicsItemGroup::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics item group
+*/
+
+/*!
+ \enum QGraphicsLineItem::anonymous
+
+ The value returned by the virtual type() function.
- \note UserType = 65536
+ \value Type A graphics line item
*/
/*!
@@ -10574,7 +10640,7 @@ bool QGraphicsTextItemPrivate::_q_mouseOnEdge(QGraphicsSceneMouseEvent *event)
}
/*!
- \fn QGraphicsTextItem::linkActivated(const QString &link)
+ \fn void QGraphicsTextItem::linkActivated(const QString &link)
This signal is emitted when the user clicks on a link on a text item
that enables Qt::LinksAccessibleByMouse or Qt::LinksAccessibleByKeyboard.
@@ -10584,7 +10650,7 @@ bool QGraphicsTextItemPrivate::_q_mouseOnEdge(QGraphicsSceneMouseEvent *event)
*/
/*!
- \fn QGraphicsTextItem::linkHovered(const QString &link)
+ \fn void QGraphicsTextItem::linkHovered(const QString &link)
This signal is emitted when the user hovers over a link on a text item
that enables Qt::LinksAccessibleByMouse. \a link is
diff --git a/src/widgets/graphicsview/qgraphicsitem.h b/src/widgets/graphicsview/qgraphicsitem.h
index 11d872f6e6..c228e765d8 100644
--- a/src/widgets/graphicsview/qgraphicsitem.h
+++ b/src/widgets/graphicsview/qgraphicsitem.h
@@ -158,7 +158,7 @@ public:
SceneModal
};
- explicit QGraphicsItem(QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsItem(QGraphicsItem *parent = nullptr);
virtual ~QGraphicsItem();
QGraphicsScene *scene() const;
@@ -194,7 +194,7 @@ public:
PanelModality panelModality() const;
void setPanelModality(PanelModality panelModality);
- bool isBlockedByModalPanel(QGraphicsItem **blockingPanel = Q_NULLPTR) const;
+ bool isBlockedByModalPanel(QGraphicsItem **blockingPanel = nullptr) const;
#ifndef QT_NO_TOOLTIP
QString toolTip() const;
@@ -290,7 +290,7 @@ public:
QTransform transform() const;
QTransform sceneTransform() const;
QTransform deviceTransform(const QTransform &viewportTransform) const;
- QTransform itemTransform(const QGraphicsItem *other, bool *ok = Q_NULLPTR) const;
+ QTransform itemTransform(const QGraphicsItem *other, bool *ok = nullptr) const;
void setTransform(const QTransform &matrix, bool combine = false);
void resetTransform();
#if QT_DEPRECATED_SINCE(5, 0)
@@ -341,7 +341,7 @@ public:
void setBoundingRegionGranularity(qreal granularity);
// Drawing
- virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) = 0;
+ virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) = 0;
void update(const QRectF &rect = QRectF());
inline void update(qreal x, qreal y, qreal width, qreal height);
void scroll(qreal dx, qreal dy, const QRectF &rect = QRectF());
@@ -538,7 +538,7 @@ inline QRectF QGraphicsItem::mapRectFromScene(qreal ax, qreal ay, qreal w, qreal
class Q_WIDGETS_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
{
Q_OBJECT
- Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged DESIGNABLE false)
+ Q_PROPERTY(QGraphicsObject* parent READ parentObject WRITE setParentItem NOTIFY parentChanged DESIGNABLE false)
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
@@ -558,7 +558,7 @@ class Q_WIDGETS_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
Q_CLASSINFO("DefaultProperty", "children")
Q_INTERFACES(QGraphicsItem)
public:
- explicit QGraphicsObject(QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsObject(QGraphicsItem *parent = nullptr);
~QGraphicsObject();
using QObject::children;
@@ -588,7 +588,7 @@ Q_SIGNALS:
protected:
QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent);
- bool event(QEvent *ev) Q_DECL_OVERRIDE;
+ bool event(QEvent *ev) override;
private:
friend class QGraphicsItem;
@@ -600,7 +600,7 @@ class QAbstractGraphicsShapeItemPrivate;
class Q_WIDGETS_EXPORT QAbstractGraphicsShapeItem : public QGraphicsItem
{
public:
- explicit QAbstractGraphicsShapeItem(QGraphicsItem *parent = Q_NULLPTR);
+ explicit QAbstractGraphicsShapeItem(QGraphicsItem *parent = nullptr);
~QAbstractGraphicsShapeItem();
QPen pen() const;
@@ -609,8 +609,8 @@ public:
QBrush brush() const;
void setBrush(const QBrush &brush);
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
protected:
QAbstractGraphicsShapeItem(QAbstractGraphicsShapeItemPrivate &dd,
@@ -625,29 +625,29 @@ class QGraphicsPathItemPrivate;
class Q_WIDGETS_EXPORT QGraphicsPathItem : public QAbstractGraphicsShapeItem
{
public:
- explicit QGraphicsPathItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsPathItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsPathItem(const QPainterPath &path, QGraphicsItem *parent = nullptr);
~QGraphicsPathItem();
QPainterPath path() const;
void setPath(const QPainterPath &path);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 2 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsPathItem)
@@ -658,31 +658,31 @@ class QGraphicsRectItemPrivate;
class Q_WIDGETS_EXPORT QGraphicsRectItem : public QAbstractGraphicsShapeItem
{
public:
- explicit QGraphicsRectItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsRectItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsRectItem(const QRectF &rect, QGraphicsItem *parent = nullptr);
+ explicit QGraphicsRectItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = nullptr);
~QGraphicsRectItem();
QRectF rect() const;
void setRect(const QRectF &rect);
inline void setRect(qreal x, qreal y, qreal w, qreal h);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 3 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsRectItem)
@@ -696,9 +696,9 @@ class QGraphicsEllipseItemPrivate;
class Q_WIDGETS_EXPORT QGraphicsEllipseItem : public QAbstractGraphicsShapeItem
{
public:
- explicit QGraphicsEllipseItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsEllipseItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsEllipseItem(const QRectF &rect, QGraphicsItem *parent = nullptr);
+ explicit QGraphicsEllipseItem(qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent = nullptr);
~QGraphicsEllipseItem();
QRectF rect() const;
@@ -711,22 +711,22 @@ public:
int spanAngle() const;
void setSpanAngle(int angle);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 4 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsEllipseItem)
@@ -740,9 +740,9 @@ class QGraphicsPolygonItemPrivate;
class Q_WIDGETS_EXPORT QGraphicsPolygonItem : public QAbstractGraphicsShapeItem
{
public:
- explicit QGraphicsPolygonItem(QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsPolygonItem(QGraphicsItem *parent = nullptr);
explicit QGraphicsPolygonItem(const QPolygonF &polygon,
- QGraphicsItem *parent = Q_NULLPTR);
+ QGraphicsItem *parent = nullptr);
~QGraphicsPolygonItem();
QPolygonF polygon() const;
@@ -751,22 +751,22 @@ public:
Qt::FillRule fillRule() const;
void setFillRule(Qt::FillRule rule);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 5 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsPolygonItem)
@@ -777,9 +777,9 @@ class QGraphicsLineItemPrivate;
class Q_WIDGETS_EXPORT QGraphicsLineItem : public QGraphicsItem
{
public:
- explicit QGraphicsLineItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsLineItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsLineItem(const QLineF &line, QGraphicsItem *parent = nullptr);
+ explicit QGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = nullptr);
~QGraphicsLineItem();
QPen pen() const;
@@ -790,22 +790,22 @@ public:
inline void setLine(qreal x1, qreal y1, qreal x2, qreal y2)
{ setLine(QLineF(x1, y1, x2, y2)); }
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 6 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsLineItem)
@@ -822,8 +822,8 @@ public:
HeuristicMaskShape
};
- explicit QGraphicsPixmapItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsPixmapItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = nullptr);
~QGraphicsPixmapItem();
QPixmap pixmap() const;
@@ -836,25 +836,25 @@ public:
void setOffset(const QPointF &offset);
inline void setOffset(qreal x, qreal y);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 7 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
ShapeMode shapeMode() const;
void setShapeMode(ShapeMode mode);
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsPixmapItem)
@@ -874,8 +874,8 @@ class Q_WIDGETS_EXPORT QGraphicsTextItem : public QGraphicsObject
QDOC_PROPERTY(QTextCursor textCursor READ textCursor WRITE setTextCursor)
public:
- explicit QGraphicsTextItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsTextItem(const QString &text, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsTextItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsTextItem(const QString &text, QGraphicsItem *parent = nullptr);
~QGraphicsTextItem();
QString toHtml() const;
@@ -890,17 +890,17 @@ public:
void setDefaultTextColor(const QColor &c);
QColor defaultTextColor() const;
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 8 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
void setTextWidth(qreal width);
qreal textWidth() const;
@@ -927,30 +927,30 @@ Q_SIGNALS:
void linkHovered(const QString &);
protected:
- bool sceneEvent(QEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void dragEnterEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void dragMoveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void dropEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
- void hoverEnterEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
- void hoverMoveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
-
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
-
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool sceneEvent(QEvent *event) override;
+ void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
+ void keyPressEvent(QKeyEvent *event) override;
+ void keyReleaseEvent(QKeyEvent *event) override;
+ void focusInEvent(QFocusEvent *event) override;
+ void focusOutEvent(QFocusEvent *event) override;
+ void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override;
+ void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) override;
+ void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override;
+ void dropEvent(QGraphicsSceneDragDropEvent *event) override;
+ void inputMethodEvent(QInputMethodEvent *event) override;
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
+ void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
+
+ QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
+
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsTextItem)
@@ -965,8 +965,8 @@ class QGraphicsSimpleTextItemPrivate;
class Q_WIDGETS_EXPORT QGraphicsSimpleTextItem : public QAbstractGraphicsShapeItem
{
public:
- explicit QGraphicsSimpleTextItem(QGraphicsItem *parent = Q_NULLPTR);
- explicit QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsSimpleTextItem(QGraphicsItem *parent = nullptr);
+ explicit QGraphicsSimpleTextItem(const QString &text, QGraphicsItem *parent = nullptr);
~QGraphicsSimpleTextItem();
void setText(const QString &text);
@@ -975,22 +975,22 @@ public:
void setFont(const QFont &font);
QFont font() const;
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ bool contains(const QPointF &point) const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 9 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
protected:
- bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
- void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
- QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const override;
+ void setExtension(Extension extension, const QVariant &variant) override;
+ QVariant extension(const QVariant &variant) const override;
private:
Q_DISABLE_COPY(QGraphicsSimpleTextItem)
@@ -1001,20 +1001,20 @@ class QGraphicsItemGroupPrivate;
class Q_WIDGETS_EXPORT QGraphicsItemGroup : public QGraphicsItem
{
public:
- explicit QGraphicsItemGroup(QGraphicsItem *parent = Q_NULLPTR);
+ explicit QGraphicsItemGroup(QGraphicsItem *parent = nullptr);
~QGraphicsItemGroup();
void addToGroup(QGraphicsItem *item);
void removeFromGroup(QGraphicsItem *item);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
+ QRectF boundingRect() const override;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
- bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
- QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
+ bool isObscuredBy(const QGraphicsItem *item) const override;
+ QPainterPath opaqueArea() const override;
enum { Type = 10 };
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
private:
Q_DISABLE_COPY(QGraphicsItemGroup)
diff --git a/src/widgets/graphicsview/qgraphicsitem_p.h b/src/widgets/graphicsview/qgraphicsitem_p.h
index 86414263a7..bae38473f9 100644
--- a/src/widgets/graphicsview/qgraphicsitem_p.h
+++ b/src/widgets/graphicsview/qgraphicsitem_p.h
@@ -595,28 +595,28 @@ public:
: QGraphicsEffectSourcePrivate(), item(i), info(0)
{}
- void detach() Q_DECL_OVERRIDE
+ void detach() override
{
item->d_ptr->graphicsEffect = 0;
item->prepareGeometryChange();
}
- const QGraphicsItem *graphicsItem() const Q_DECL_OVERRIDE
+ const QGraphicsItem *graphicsItem() const override
{ return item; }
- const QWidget *widget() const Q_DECL_OVERRIDE
+ const QWidget *widget() const override
{ return 0; }
- void update() Q_DECL_OVERRIDE {
+ void update() override {
item->d_ptr->updateDueToGraphicsEffect = true;
item->update();
item->d_ptr->updateDueToGraphicsEffect = false;
}
- void effectBoundingRectChanged() Q_DECL_OVERRIDE
+ void effectBoundingRectChanged() override
{ item->prepareGeometryChange(); }
- bool isPixmap() const Q_DECL_OVERRIDE
+ bool isPixmap() const override
{
return item->type() == QGraphicsPixmapItem::Type
&& !(item->flags() & QGraphicsItem::ItemIsSelectable)
@@ -624,10 +624,10 @@ public:
//|| (item->d_ptr->isObject && qobject_cast<QDeclarativeImage *>(q_func()));
}
- const QStyleOption *styleOption() const Q_DECL_OVERRIDE
+ const QStyleOption *styleOption() const override
{ return info ? info->option : 0; }
- QRect deviceRect() const Q_DECL_OVERRIDE
+ QRect deviceRect() const override
{
if (!info || !info->widget) {
qWarning("QGraphicsEffectSource::deviceRect: Not yet implemented, lacking device context");
@@ -636,11 +636,11 @@ public:
return info->widget->rect();
}
- QRectF boundingRect(Qt::CoordinateSystem system) const Q_DECL_OVERRIDE;
- void draw(QPainter *) Q_DECL_OVERRIDE;
+ QRectF boundingRect(Qt::CoordinateSystem system) const override;
+ void draw(QPainter *) override;
QPixmap pixmap(Qt::CoordinateSystem system,
QPoint *offset,
- QGraphicsEffect::PixmapPadMode mode) const Q_DECL_OVERRIDE;
+ QGraphicsEffect::PixmapPadMode mode) const override;
QRect paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const;
QGraphicsItem *item;
diff --git a/src/widgets/graphicsview/qgraphicsitemanimation.h b/src/widgets/graphicsview/qgraphicsitemanimation.h
index a819acc880..7417d7729c 100644
--- a/src/widgets/graphicsview/qgraphicsitemanimation.h
+++ b/src/widgets/graphicsview/qgraphicsitemanimation.h
@@ -58,7 +58,7 @@ class Q_WIDGETS_EXPORT QGraphicsItemAnimation : public QObject
{
Q_OBJECT
public:
- QGraphicsItemAnimation(QObject *parent = Q_NULLPTR);
+ QGraphicsItemAnimation(QObject *parent = nullptr);
virtual ~QGraphicsItemAnimation();
QGraphicsItem *item() const;
diff --git a/src/widgets/graphicsview/qgraphicslayout.h b/src/widgets/graphicsview/qgraphicslayout.h
index bbe45bbdd6..28b335ceaa 100644
--- a/src/widgets/graphicsview/qgraphicslayout.h
+++ b/src/widgets/graphicsview/qgraphicslayout.h
@@ -54,16 +54,16 @@ class QGraphicsWidget;
class Q_WIDGETS_EXPORT QGraphicsLayout : public QGraphicsLayoutItem
{
public:
- QGraphicsLayout(QGraphicsLayoutItem *parent = Q_NULLPTR);
+ QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr);
~QGraphicsLayout();
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom);
- void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const Q_DECL_OVERRIDE;
+ void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override;
void activate();
bool isActivated() const;
virtual void invalidate();
- virtual void updateGeometry() Q_DECL_OVERRIDE;
+ virtual void updateGeometry() override;
virtual void widgetEvent(QEvent *e);
diff --git a/src/widgets/graphicsview/qgraphicslayoutitem.h b/src/widgets/graphicsview/qgraphicslayoutitem.h
index 10c7870412..44f430034b 100644
--- a/src/widgets/graphicsview/qgraphicslayoutitem.h
+++ b/src/widgets/graphicsview/qgraphicslayoutitem.h
@@ -54,7 +54,7 @@ class QGraphicsItem;
class Q_WIDGETS_EXPORT QGraphicsLayoutItem
{
public:
- QGraphicsLayoutItem(QGraphicsLayoutItem *parent = Q_NULLPTR, bool isLayout = false);
+ QGraphicsLayoutItem(QGraphicsLayoutItem *parent = nullptr, bool isLayout = false);
virtual ~QGraphicsLayoutItem();
void setSizePolicy(const QSizePolicy &policy);
diff --git a/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h b/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h
index 3463ae71bf..7886de432c 100644
--- a/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h
+++ b/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h
@@ -70,17 +70,17 @@ public:
virtual qreal combinedLayoutSpacing(QLayoutPolicy::ControlTypes controls1,
QLayoutPolicy::ControlTypes controls2,
- Qt::Orientation orientation) const Q_DECL_OVERRIDE;
+ Qt::Orientation orientation) const override;
virtual qreal perItemSpacing(QLayoutPolicy::ControlType control1,
QLayoutPolicy::ControlType control2,
- Qt::Orientation orientation) const Q_DECL_OVERRIDE;
+ Qt::Orientation orientation) const override;
- virtual qreal spacing(Qt::Orientation orientation) const Q_DECL_OVERRIDE;
+ virtual qreal spacing(Qt::Orientation orientation) const override;
- virtual qreal windowMargin(Qt::Orientation orientation) const Q_DECL_OVERRIDE;
+ virtual qreal windowMargin(Qt::Orientation orientation) const override;
- virtual void invalidate() Q_DECL_OVERRIDE
+ virtual void invalidate() override
{
m_style = 0;
QAbstractLayoutStyleInfo::invalidate();
diff --git a/src/widgets/graphicsview/qgraphicslinearlayout.h b/src/widgets/graphicsview/qgraphicslinearlayout.h
index 8186eea987..d27191adb3 100644
--- a/src/widgets/graphicsview/qgraphicslinearlayout.h
+++ b/src/widgets/graphicsview/qgraphicslinearlayout.h
@@ -53,8 +53,8 @@ class QGraphicsLinearLayoutPrivate;
class Q_WIDGETS_EXPORT QGraphicsLinearLayout : public QGraphicsLayout
{
public:
- QGraphicsLinearLayout(QGraphicsLayoutItem *parent = Q_NULLPTR);
- QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent = Q_NULLPTR);
+ QGraphicsLinearLayout(QGraphicsLayoutItem *parent = nullptr);
+ QGraphicsLinearLayout(Qt::Orientation orientation, QGraphicsLayoutItem *parent = nullptr);
virtual ~QGraphicsLinearLayout();
void setOrientation(Qt::Orientation orientation);
@@ -67,7 +67,7 @@ public:
void insertStretch(int index, int stretch = 1);
void removeItem(QGraphicsLayoutItem *item);
- void removeAt(int index) Q_DECL_OVERRIDE;
+ void removeAt(int index) override;
void setSpacing(qreal spacing);
qreal spacing() const;
@@ -80,13 +80,13 @@ public:
void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment);
Qt::Alignment alignment(QGraphicsLayoutItem *item) const;
- void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
+ void setGeometry(const QRectF &rect) override;
- int count() const Q_DECL_OVERRIDE;
- QGraphicsLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ int count() const override;
+ QGraphicsLayoutItem *itemAt(int index) const override;
- void invalidate() Q_DECL_OVERRIDE;
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
+ void invalidate() override;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
#if 0 // ###
Q5SizePolicy::ControlTypes controlTypes(LayoutSide side) const;
diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.cpp b/src/widgets/graphicsview/qgraphicsproxywidget.cpp
index 94ce102a68..442f08325d 100644
--- a/src/widgets/graphicsview/qgraphicsproxywidget.cpp
+++ b/src/widgets/graphicsview/qgraphicsproxywidget.cpp
@@ -1537,6 +1537,14 @@ void QGraphicsProxyWidget::paint(QPainter *painter, const QStyleOptionGraphicsIt
}
/*!
+ \enum QGraphicsProxyWidget::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics proxy widget
+*/
+
+/*!
\reimp
*/
int QGraphicsProxyWidget::type() const
diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.h b/src/widgets/graphicsview/qgraphicsproxywidget.h
index fd6369a1fd..76fdf8aeba 100644
--- a/src/widgets/graphicsview/qgraphicsproxywidget.h
+++ b/src/widgets/graphicsview/qgraphicsproxywidget.h
@@ -53,7 +53,7 @@ class Q_WIDGETS_EXPORT QGraphicsProxyWidget : public QGraphicsWidget
{
Q_OBJECT
public:
- QGraphicsProxyWidget(QGraphicsItem *parent = Q_NULLPTR, Qt::WindowFlags wFlags = Qt::WindowFlags());
+ QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags());
~QGraphicsProxyWidget();
void setWidget(QWidget *widget);
@@ -61,63 +61,63 @@ public:
QRectF subWidgetRect(const QWidget *widget) const;
- void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
+ void setGeometry(const QRectF &rect) override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
enum {
Type = 12
};
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
QGraphicsProxyWidget *createProxyForChildWidget(QWidget *child);
protected:
- QVariant itemChange(GraphicsItemChange change, const QVariant &value) Q_DECL_OVERRIDE;
+ QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ bool eventFilter(QObject *object, QEvent *event) override;
- void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *event) override;
+ void hideEvent(QHideEvent *event) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
#endif
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void dragMoveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
- void dropEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override;
+ void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) override;
+ void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override;
+ void dropEvent(QGraphicsSceneDragDropEvent *event) override;
#endif
- void hoverEnterEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
- void hoverMoveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
- void grabMouseEvent(QEvent *event) Q_DECL_OVERRIDE;
- void ungrabMouseEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
+ void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
+ void grabMouseEvent(QEvent *event) override;
+ void ungrabMouseEvent(QEvent *event) override;
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
+ void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QGraphicsSceneWheelEvent *event) Q_DECL_OVERRIDE;
+ void wheelEvent(QGraphicsSceneWheelEvent *event) override;
#endif
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) override;
+ void keyReleaseEvent(QKeyEvent *event) override;
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) override;
+ void focusOutEvent(QFocusEvent *event) override;
+ bool focusNextPrevChild(bool next) override;
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
- void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
+ QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
+ void inputMethodEvent(QInputMethodEvent *event) override;
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
- void resizeEvent(QGraphicsSceneResizeEvent *event) Q_DECL_OVERRIDE;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
+ void resizeEvent(QGraphicsSceneResizeEvent *event) override;
protected Q_SLOTS:
QGraphicsProxyWidget *newProxyWidget(const QWidget *);
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index 8b088e7c01..25b77aa02f 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -5521,7 +5521,7 @@ bool QGraphicsScene::focusNextPrevChild(bool next)
*/
/*!
- \fn QGraphicsScene::focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
+ \fn void QGraphicsScene::focusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
This signal is emitted by QGraphicsScene whenever focus changes in the
scene (i.e., when an item gains or loses input focus, or when focus
diff --git a/src/widgets/graphicsview/qgraphicsscene.h b/src/widgets/graphicsview/qgraphicsscene.h
index d515585067..8efbcd273e 100644
--- a/src/widgets/graphicsview/qgraphicsscene.h
+++ b/src/widgets/graphicsview/qgraphicsscene.h
@@ -121,9 +121,9 @@ public:
};
Q_DECLARE_FLAGS(SceneLayers, SceneLayer)
- QGraphicsScene(QObject *parent = Q_NULLPTR);
- QGraphicsScene(const QRectF &sceneRect, QObject *parent = Q_NULLPTR);
- QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = Q_NULLPTR);
+ QGraphicsScene(QObject *parent = nullptr);
+ QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr);
+ QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr);
virtual ~QGraphicsScene();
QRectF sceneRect() const;
@@ -159,7 +159,7 @@ public:
#if QT_DEPRECATED_SINCE(5, 0)
QT_DEPRECATED inline QGraphicsItem *itemAt(const QPointF &position) const {
QList<QGraphicsItem *> itemsAtPoint = items(position);
- return itemsAtPoint.isEmpty() ? Q_NULLPTR : itemsAtPoint.first();
+ return itemsAtPoint.isEmpty() ? nullptr : itemsAtPoint.first();
}
#endif
QGraphicsItem *itemAt(const QPointF &pos, const QTransform &deviceTransform) const;
@@ -173,7 +173,7 @@ public:
#if QT_DEPRECATED_SINCE(5, 0)
QT_DEPRECATED inline QGraphicsItem *itemAt(qreal x, qreal y) const {
QList<QGraphicsItem *> itemsAtPoint = items(QPointF(x, y));
- return itemsAtPoint.isEmpty() ? Q_NULLPTR : itemsAtPoint.first();
+ return itemsAtPoint.isEmpty() ? nullptr : itemsAtPoint.first();
}
#endif
inline QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
@@ -261,8 +261,8 @@ public Q_SLOTS:
void clear();
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ bool eventFilter(QObject *watched, QEvent *event) override;
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
@@ -285,14 +285,10 @@ protected:
virtual void drawItems(QPainter *painter, int numItems,
QGraphicsItem *items[],
const QStyleOptionGraphicsItem options[],
- QWidget *widget = Q_NULLPTR);
+ QWidget *widget = nullptr);
protected Q_SLOTS:
- // ### Qt 6: make unconditional
-#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
- virtual
-#endif
- bool focusNextPrevChild(bool next);
+ QT6_VIRTUAL bool focusNextPrevChild(bool next);
Q_SIGNALS:
void changed(const QList<QRectF> &region);
diff --git a/src/widgets/graphicsview/qgraphicsscene_bsp.cpp b/src/widgets/graphicsview/qgraphicsscene_bsp.cpp
index 81d2953d8f..75eb50a3ac 100644
--- a/src/widgets/graphicsview/qgraphicsscene_bsp.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene_bsp.cpp
@@ -49,7 +49,7 @@ class QGraphicsSceneInsertItemBspTreeVisitor : public QGraphicsSceneBspTreeVisit
public:
QGraphicsItem *item;
- void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE
+ void visit(QList<QGraphicsItem *> *items) override
{ items->prepend(item); }
};
@@ -58,7 +58,7 @@ class QGraphicsSceneRemoveItemBspTreeVisitor : public QGraphicsSceneBspTreeVisit
public:
QGraphicsItem *item;
- void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE
+ void visit(QList<QGraphicsItem *> *items) override
{ items->removeAll(item); }
};
@@ -68,7 +68,7 @@ public:
QList<QGraphicsItem *> *foundItems;
bool onlyTopLevelItems;
- void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE
+ void visit(QList<QGraphicsItem *> *items) override
{
for (int i = 0; i < items->size(); ++i) {
QGraphicsItem *item = items->at(i);
diff --git a/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h b/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h
index 8e78407762..b6387a2c56 100644
--- a/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h
+++ b/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h
@@ -77,25 +77,25 @@ public:
QGraphicsSceneBspTreeIndex(QGraphicsScene *scene = 0);
~QGraphicsSceneBspTreeIndex();
- QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const Q_DECL_OVERRIDE;
- QList<QGraphicsItem *> estimateTopLevelItems(const QRectF &rect, Qt::SortOrder order) const Q_DECL_OVERRIDE;
- QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const Q_DECL_OVERRIDE;
+ QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const override;
+ QList<QGraphicsItem *> estimateTopLevelItems(const QRectF &rect, Qt::SortOrder order) const override;
+ QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const override;
int bspTreeDepth() const;
void setBspTreeDepth(int depth);
protected Q_SLOTS:
- void updateSceneRect(const QRectF &rect) Q_DECL_OVERRIDE;
+ void updateSceneRect(const QRectF &rect) override;
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void clear() Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ void clear() override;
- void addItem(QGraphicsItem *item) Q_DECL_OVERRIDE;
- void removeItem(QGraphicsItem *item) Q_DECL_OVERRIDE;
- void prepareBoundingRectChange(const QGraphicsItem *item) Q_DECL_OVERRIDE;
+ void addItem(QGraphicsItem *item) override;
+ void removeItem(QGraphicsItem *item) override;
+ void prepareBoundingRectChange(const QGraphicsItem *item) override;
- void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value) Q_DECL_OVERRIDE;
+ void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value) override;
private :
Q_DECLARE_PRIVATE(QGraphicsSceneBspTreeIndex)
diff --git a/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h b/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h
index a59a8ac1b0..07d5d80ef1 100644
--- a/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h
+++ b/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h
@@ -70,10 +70,10 @@ public:
QGraphicsSceneLinearIndex(QGraphicsScene *scene = 0) : QGraphicsSceneIndex(scene), m_numSortedElements(0)
{ }
- QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const Q_DECL_OVERRIDE
+ QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const override
{ Q_UNUSED(order); return m_items; }
- virtual QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const Q_DECL_OVERRIDE
+ virtual QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const override
{
Q_UNUSED(rect);
Q_UNUSED(order);
@@ -81,16 +81,16 @@ public:
}
protected :
- virtual void clear() Q_DECL_OVERRIDE
+ virtual void clear() override
{
m_items.clear();
m_numSortedElements = 0;
}
- virtual void addItem(QGraphicsItem *item) Q_DECL_OVERRIDE
+ virtual void addItem(QGraphicsItem *item) override
{ m_items << item; }
- virtual void removeItem(QGraphicsItem *item) Q_DECL_OVERRIDE
+ virtual void removeItem(QGraphicsItem *item) override
{
// Sort m_items if needed
if (m_numSortedElements < m_items.size())
diff --git a/src/widgets/graphicsview/qgraphicstransform.h b/src/widgets/graphicsview/qgraphicstransform.h
index ceeb314c86..b8455781c5 100644
--- a/src/widgets/graphicsview/qgraphicstransform.h
+++ b/src/widgets/graphicsview/qgraphicstransform.h
@@ -57,7 +57,7 @@ class Q_WIDGETS_EXPORT QGraphicsTransform : public QObject
{
Q_OBJECT
public:
- QGraphicsTransform(QObject *parent = Q_NULLPTR);
+ QGraphicsTransform(QObject *parent = nullptr);
~QGraphicsTransform();
virtual void applyTo(QMatrix4x4 *matrix) const = 0;
@@ -85,7 +85,7 @@ class Q_WIDGETS_EXPORT QGraphicsScale : public QGraphicsTransform
Q_PROPERTY(qreal yScale READ yScale WRITE setYScale NOTIFY yScaleChanged)
Q_PROPERTY(qreal zScale READ zScale WRITE setZScale NOTIFY zScaleChanged)
public:
- QGraphicsScale(QObject *parent = Q_NULLPTR);
+ QGraphicsScale(QObject *parent = nullptr);
~QGraphicsScale();
QVector3D origin() const;
@@ -100,7 +100,7 @@ public:
qreal zScale() const;
void setZScale(qreal);
- void applyTo(QMatrix4x4 *matrix) const Q_DECL_OVERRIDE;
+ void applyTo(QMatrix4x4 *matrix) const override;
Q_SIGNALS:
void originChanged();
@@ -123,7 +123,7 @@ class Q_WIDGETS_EXPORT QGraphicsRotation : public QGraphicsTransform
Q_PROPERTY(qreal angle READ angle WRITE setAngle NOTIFY angleChanged)
Q_PROPERTY(QVector3D axis READ axis WRITE setAxis NOTIFY axisChanged)
public:
- QGraphicsRotation(QObject *parent = Q_NULLPTR);
+ QGraphicsRotation(QObject *parent = nullptr);
~QGraphicsRotation();
QVector3D origin() const;
@@ -136,7 +136,7 @@ public:
void setAxis(const QVector3D &axis);
void setAxis(Qt::Axis axis);
- void applyTo(QMatrix4x4 *matrix) const Q_DECL_OVERRIDE;
+ void applyTo(QMatrix4x4 *matrix) const override;
Q_SIGNALS:
void originChanged();
diff --git a/src/widgets/graphicsview/qgraphicsview.h b/src/widgets/graphicsview/qgraphicsview.h
index a9e4efefaf..e02fba69c9 100644
--- a/src/widgets/graphicsview/qgraphicsview.h
+++ b/src/widgets/graphicsview/qgraphicsview.h
@@ -114,11 +114,11 @@ public:
};
Q_DECLARE_FLAGS(OptimizationFlags, OptimizationFlag)
- QGraphicsView(QWidget *parent = Q_NULLPTR);
- QGraphicsView(QGraphicsScene *scene, QWidget *parent = Q_NULLPTR);
+ QGraphicsView(QWidget *parent = nullptr);
+ QGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr);
~QGraphicsView();
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
QPainter::RenderHints renderHints() const;
void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
@@ -214,7 +214,7 @@ public:
inline QPoint mapFromScene(qreal x, qreal y) const;
inline QPolygon mapFromScene(qreal x, qreal y, qreal w, qreal h) const;
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
+ QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
QBrush backgroundBrush() const;
void setBackgroundBrush(const QBrush &brush);
@@ -233,39 +233,39 @@ Q_SIGNALS:
#endif
protected Q_SLOTS:
- void setupViewport(QWidget *widget) Q_DECL_OVERRIDE;
+ void setupViewport(QWidget *widget) override;
protected:
- QGraphicsView(QGraphicsViewPrivate &, QWidget *parent = Q_NULLPTR);
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
+ QGraphicsView(QGraphicsViewPrivate &, QWidget *parent = nullptr);
+ bool event(QEvent *event) override;
+ bool viewportEvent(QEvent *event) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *event) override;
#endif
#if QT_CONFIG(draganddrop)
- void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE;
- void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragLeaveEvent(QDragLeaveEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
#endif
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) override;
+ bool focusNextPrevChild(bool next) override;
+ void focusOutEvent(QFocusEvent *event) override;
+ void keyPressEvent(QKeyEvent *event) override;
+ void keyReleaseEvent(QKeyEvent *event) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *event) override;
#endif
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
- void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void scrollContentsBy(int dx, int dy) override;
+ void showEvent(QShowEvent *event) override;
+ void inputMethodEvent(QInputMethodEvent *event) override;
virtual void drawBackground(QPainter *painter, const QRectF &rect);
virtual void drawForeground(QPainter *painter, const QRectF &rect);
diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp
index c658e40a9e..a4534c73dd 100644
--- a/src/widgets/graphicsview/qgraphicswidget.cpp
+++ b/src/widgets/graphicsview/qgraphicswidget.cpp
@@ -276,7 +276,7 @@ QGraphicsWidget::~QGraphicsWidget()
// Unset the parent here, when we're still a QGraphicsWidget.
// It is otherwise done in ~QGraphicsItem() where we'd be
// calling QGraphicsWidget members on an ex-QGraphicsWidget object
- setParentItem(Q_NULLPTR);
+ setParentItem(nullptr);
}
/*!
@@ -2228,6 +2228,14 @@ bool QGraphicsWidget::testAttribute(Qt::WidgetAttribute attribute) const
}
/*!
+ \enum QGraphicsWidget::anonymous
+
+ The value returned by the virtual type() function.
+
+ \value Type A graphics widget item
+*/
+
+/*!
\reimp
*/
int QGraphicsWidget::type() const
diff --git a/src/widgets/graphicsview/qgraphicswidget.h b/src/widgets/graphicsview/qgraphicswidget.h
index 831511d14a..481fb55db3 100644
--- a/src/widgets/graphicsview/qgraphicswidget.h
+++ b/src/widgets/graphicsview/qgraphicswidget.h
@@ -80,7 +80,7 @@ class Q_WIDGETS_EXPORT QGraphicsWidget : public QGraphicsObject, public QGraphic
Q_PROPERTY(bool autoFillBackground READ autoFillBackground WRITE setAutoFillBackground)
Q_PROPERTY(QGraphicsLayout* layout READ layout WRITE setLayout NOTIFY layoutChanged)
public:
- QGraphicsWidget(QGraphicsItem *parent = Q_NULLPTR, Qt::WindowFlags wFlags = Qt::WindowFlags());
+ QGraphicsWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags());
~QGraphicsWidget();
QGraphicsLayout *layout() const;
void setLayout(QGraphicsLayout *layout);
@@ -106,12 +106,12 @@ public:
inline void resize(qreal w, qreal h) { resize(QSizeF(w, h)); }
QSizeF size() const;
- void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
+ void setGeometry(const QRectF &rect) override;
inline void setGeometry(qreal x, qreal y, qreal w, qreal h);
inline QRectF rect() const { return QRectF(QPointF(), size()); }
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom);
- void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const Q_DECL_OVERRIDE;
+ void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override;
void setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom);
void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
@@ -161,12 +161,12 @@ public:
enum {
Type = 11
};
- int type() const Q_DECL_OVERRIDE;
+ int type() const override;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR) Q_DECL_OVERRIDE;
- virtual void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR);
- QRectF boundingRect() const Q_DECL_OVERRIDE;
- QPainterPath shape() const Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
+ virtual void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr);
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
#if 0
void dumpFocusChain();
@@ -184,28 +184,28 @@ public Q_SLOTS:
protected:
virtual void initStyleOption(QStyleOption *option) const;
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
- void updateGeometry() Q_DECL_OVERRIDE;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
+ void updateGeometry() override;
// Notification
- QVariant itemChange(GraphicsItemChange change, const QVariant &value) Q_DECL_OVERRIDE;
+ QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
virtual QVariant propertyChange(const QString &propertyName, const QVariant &value);
// Scene events
- bool sceneEvent(QEvent *event) Q_DECL_OVERRIDE;
+ bool sceneEvent(QEvent *event) override;
virtual bool windowFrameEvent(QEvent *e);
virtual Qt::WindowFrameSection windowFrameSectionAt(const QPointF& pos) const;
// Base event handlers
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
//virtual void actionEvent(QActionEvent *event);
virtual void changeEvent(QEvent *event);
virtual void closeEvent(QCloseEvent *event);
//void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true);
//void destroy(bool destroyWindow = true, bool destroySubWindows = true);
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) override;
virtual bool focusNextPrevChild(bool next);
- void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *event) override;
virtual void hideEvent(QHideEvent *event);
//virtual int metric(PaintDeviceMetric m ) const;
virtual void moveEvent(QGraphicsSceneMoveEvent *event);
@@ -214,8 +214,8 @@ protected:
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void showEvent(QShowEvent *event);
//virtual void tabletEvent(QTabletEvent *event);
- virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
- virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
+ virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
virtual void grabMouseEvent(QEvent *event);
virtual void ungrabMouseEvent(QEvent *event);
virtual void grabKeyboardEvent(QEvent *event);
diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp
index c913e210b9..1514fca456 100644
--- a/src/widgets/graphicsview/qgraphicswidget_p.cpp
+++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp
@@ -406,7 +406,7 @@ void QGraphicsWidgetPrivate::windowFrameMousePressEvent(QGraphicsSceneMouseEvent
event->setAccepted(windowData->grabbedSection != Qt::NoSection);
}
-/*!
+/*
Used to calculate the
Precondition:
\a widget should support either hfw or wfh
diff --git a/src/widgets/graphicsview/qgraphicswidget_p.h b/src/widgets/graphicsview/qgraphicswidget_p.h
index 0fb9fbba07..505a2a24c0 100644
--- a/src/widgets/graphicsview/qgraphicswidget_p.h
+++ b/src/widgets/graphicsview/qgraphicswidget_p.h
@@ -94,13 +94,13 @@ public:
QPalette palette;
uint inheritedPaletteResolveMask;
void setPalette_helper(const QPalette &palette);
- void resolvePalette(uint inheritedMask) Q_DECL_OVERRIDE;
+ void resolvePalette(uint inheritedMask) override;
void updatePalette(const QPalette &palette);
QPalette naturalWidgetPalette() const;
QFont font;
uint inheritedFontResolveMask;
void setFont_helper(const QFont &font);
- void resolveFont(uint inheritedMask) Q_DECL_OVERRIDE;
+ void resolveFont(uint inheritedMask) override;
void updateFont(const QFont &font);
QFont naturalWidgetFont() const;
@@ -115,13 +115,13 @@ public:
bool hasDecoration() const;
// Private Properties
- qreal width() const Q_DECL_OVERRIDE;
- void setWidth(qreal) Q_DECL_OVERRIDE;
- void resetWidth() Q_DECL_OVERRIDE;
+ qreal width() const override;
+ void setWidth(qreal) override;
+ void resetWidth() override;
- qreal height() const Q_DECL_OVERRIDE;
- void setHeight(qreal) Q_DECL_OVERRIDE;
- void resetHeight() Q_DECL_OVERRIDE;
+ qreal height() const override;
+ void setHeight(qreal) override;
+ void resetHeight() override;
void setGeometryFromSetPos();
// State
diff --git a/src/widgets/graphicsview/qsimplex_p.cpp b/src/widgets/graphicsview/qsimplex_p.cpp
index 1e847489bb..e6ffa856f1 100644
--- a/src/widgets/graphicsview/qsimplex_p.cpp
+++ b/src/widgets/graphicsview/qsimplex_p.cpp
@@ -209,7 +209,7 @@ bool QSimplex::setConstraints(const QList<QSimplexConstraint *> &newConstraints)
surplus->index = ++variableIndex;
constraints[i]->helper.first = surplus;
constraints[i]->helper.second = -1.0;
- // fall through
+ Q_FALLTHROUGH();
case QSimplexConstraint::Equal:
artificial = new QSimplexVariable;
constraints[i]->artificial = artificial;
diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp
index d532221092..3268fda2fc 100644
--- a/src/widgets/itemviews/qabstractitemdelegate.cpp
+++ b/src/widgets/itemviews/qabstractitemdelegate.cpp
@@ -58,6 +58,7 @@
#endif
#include <qapplication.h>
#include <qvalidator.h>
+#include <qjsonvalue.h>
#include <private/qtextengine_p.h>
#include <private/qabstractitemdelegate_p.h>
@@ -585,18 +586,26 @@ QString QAbstractItemDelegatePrivate::textForRole(Qt::ItemDataRole role, const Q
case QVariant::Time:
text = locale.toString(value.toTime(), formatType);
break;
- case QVariant::DateTime: {
- const QDateTime dateTime = value.toDateTime();
- text = locale.toString(dateTime.date(), formatType)
- + QLatin1Char(' ')
- + locale.toString(dateTime.time(), formatType);
- break; }
- default:
- text = value.toString();
+ case QVariant::DateTime:
+ text = locale.toString(value.toDateTime(), formatType);
+ break;
+ default: {
+ if (value.canConvert<QJsonValue>()) {
+ const QJsonValue val = value.toJsonValue();
+ if (val.isBool())
+ text = QVariant(val.toBool()).toString();
+ else if (val.isDouble())
+ text = locale.toString(val.toDouble(), 'g', precision);
+ else if (val.isString())
+ text = val.toString();
+ } else {
+ text = value.toString();
+ }
if (role == Qt::DisplayRole)
text.replace(QLatin1Char('\n'), QChar::LineSeparator);
break;
}
+ }
return text;
}
diff --git a/src/widgets/itemviews/qabstractitemdelegate.h b/src/widgets/itemviews/qabstractitemdelegate.h
index 9b6bde1c87..575728e806 100644
--- a/src/widgets/itemviews/qabstractitemdelegate.h
+++ b/src/widgets/itemviews/qabstractitemdelegate.h
@@ -69,7 +69,7 @@ public:
RevertModelCache
};
- explicit QAbstractItemDelegate(QObject *parent = Q_NULLPTR);
+ explicit QAbstractItemDelegate(QObject *parent = nullptr);
virtual ~QAbstractItemDelegate();
// painting
@@ -119,7 +119,7 @@ Q_SIGNALS:
void sizeHintChanged(const QModelIndex &);
protected:
- QAbstractItemDelegate(QObjectPrivate &, QObject *parent = Q_NULLPTR);
+ QAbstractItemDelegate(QObjectPrivate &, QObject *parent = nullptr);
private:
Q_DECLARE_PRIVATE(QAbstractItemDelegate)
Q_DISABLE_COPY(QAbstractItemDelegate)
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp
index 23e727e670..a07297863d 100644
--- a/src/widgets/itemviews/qabstractitemview.cpp
+++ b/src/widgets/itemviews/qabstractitemview.cpp
@@ -219,7 +219,7 @@ void QAbstractItemViewPrivate::_q_scrollerStateChanged()
q->selectionModel()->select(oldSelection, QItemSelectionModel::ClearAndSelect);
q->selectionModel()->setCurrentIndex(oldCurrent, QItemSelectionModel::NoUpdate);
}
- // fall through
+ Q_FALLTHROUGH();
default:
oldSelection = QItemSelection();
@@ -3217,12 +3217,14 @@ void QAbstractItemView::setIndexWidget(const QModelIndex &index, QWidget *widget
if (QWidget *oldWidget = indexWidget(index)) {
d->persistent.remove(oldWidget);
d->removeEditor(oldWidget);
+ oldWidget->removeEventFilter(this);
oldWidget->deleteLater();
}
if (widget) {
widget->setParent(viewport());
d->persistent.insert(widget);
d->addEditor(index, widget, true);
+ widget->installEventFilter(this);
widget->show();
dataChanged(index, index); // update the geometry
if (!d->delayedPendingLayout)
@@ -4499,6 +4501,24 @@ QModelIndexList QAbstractItemViewPrivate::selectedDraggableIndexes() const
return indexes;
}
+/*!
+ \reimp
+*/
+
+bool QAbstractItemView::eventFilter(QObject *object, QEvent *event)
+{
+ Q_D(QAbstractItemView);
+ if (object == this || object == viewport() || event->type() != QEvent::FocusIn)
+ return QAbstractScrollArea::eventFilter(object, event);
+ QWidget *widget = qobject_cast<QWidget *>(object);
+ // If it is not a persistent widget then we did not install
+ // the event filter on it, so assume a base implementation is
+ // filtering
+ if (!widget || !d->persistent.contains(widget))
+ return QAbstractScrollArea::eventFilter(object, event);
+ setCurrentIndex(d->indexForEditor(widget));
+ return false;
+}
QT_END_NAMESPACE
diff --git a/src/widgets/itemviews/qabstractitemview.h b/src/widgets/itemviews/qabstractitemview.h
index 6a007da348..8a138bdb67 100644
--- a/src/widgets/itemviews/qabstractitemview.h
+++ b/src/widgets/itemviews/qabstractitemview.h
@@ -124,7 +124,7 @@ public:
};
Q_ENUM(ScrollMode)
- explicit QAbstractItemView(QWidget *parent = Q_NULLPTR);
+ explicit QAbstractItemView(QWidget *parent = nullptr);
~QAbstractItemView();
virtual void setModel(QAbstractItemModel *model);
@@ -225,7 +225,7 @@ public:
QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const;
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
+ virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
using QAbstractScrollArea::update;
@@ -270,7 +270,7 @@ Q_SIGNALS:
void iconSizeChanged(const QSize &size);
protected:
- QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = Q_NULLPTR);
+ QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = nullptr);
void setHorizontalStepsPerItem(int steps);
int horizontalStepsPerItem() const;
@@ -295,7 +295,7 @@ protected:
virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event);
virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index,
- const QEvent *event = Q_NULLPTR) const;
+ const QEvent *event = nullptr) const;
#ifndef QT_NO_DRAGANDDROP
virtual void startDrag(Qt::DropActions supportedActions);
@@ -327,32 +327,33 @@ protected:
void stopAutoScroll();
void doAutoScroll();
- bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ bool focusNextPrevChild(bool next) override;
+ bool event(QEvent *event) override;
+ bool viewportEvent(QEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
- void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent *event) override;
+ void dragLeaveEvent(QDragLeaveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
#endif
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
- void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) override;
+ void focusOutEvent(QFocusEvent *event) override;
+ void keyPressEvent(QKeyEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void timerEvent(QTimerEvent *event) override;
+ void inputMethodEvent(QInputMethodEvent *event) override;
+ bool eventFilter(QObject *object, QEvent *event) override;
#ifndef QT_NO_DRAGANDDROP
enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport };
DropIndicatorPosition dropIndicatorPosition() const;
#endif
- QSize viewportSizeHint() const Q_DECL_OVERRIDE;
+ QSize viewportSizeHint() const override;
private:
Q_DECLARE_PRIVATE(QAbstractItemView)
diff --git a/src/widgets/itemviews/qcolumnview.h b/src/widgets/itemviews/qcolumnview.h
index 42eac7426a..5c62f9c9af 100644
--- a/src/widgets/itemviews/qcolumnview.h
+++ b/src/widgets/itemviews/qcolumnview.h
@@ -58,18 +58,18 @@ Q_SIGNALS:
void updatePreviewWidget(const QModelIndex &index);
public:
- explicit QColumnView(QWidget *parent = Q_NULLPTR);
+ explicit QColumnView(QWidget *parent = nullptr);
~QColumnView();
// QAbstractItemView overloads
- QModelIndex indexAt(const QPoint &point) const Q_DECL_OVERRIDE;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
- void setSelectionModel(QItemSelectionModel * selectionModel) Q_DECL_OVERRIDE;
- void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
- void selectAll() Q_DECL_OVERRIDE;
+ QModelIndex indexAt(const QPoint &point) const override;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
+ QSize sizeHint() const override;
+ QRect visualRect(const QModelIndex &index) const override;
+ void setModel(QAbstractItemModel *model) override;
+ void setSelectionModel(QItemSelectionModel * selectionModel) override;
+ void setRootIndex(const QModelIndex &index) override;
+ void selectAll() override;
// QColumnView functions
void setResizeGripsVisible(bool visible);
@@ -82,21 +82,21 @@ public:
QList<int> columnWidths() const;
protected:
- QColumnView(QColumnViewPrivate &dd, QWidget *parent = Q_NULLPTR);
+ QColumnView(QColumnViewPrivate &dd, QWidget *parent = nullptr);
// QAbstractItemView overloads
- bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void setSelection(const QRect & rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
- QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
- int horizontalOffset() const Q_DECL_OVERRIDE;
- int verticalOffset() const Q_DECL_OVERRIDE;
- void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
- void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
+ bool isIndexHidden(const QModelIndex &index) const override;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void setSelection(const QRect & rect, QItemSelectionModel::SelectionFlags command) override;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const override;
+ int horizontalOffset() const override;
+ int verticalOffset() const override;
+ void rowsInserted(const QModelIndex &parent, int start, int end) override;
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
// QColumnView functions
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) override;
virtual QAbstractItemView* createColumn(const QModelIndex &rootIndex);
void initializeColumn(QAbstractItemView *column) const;
diff --git a/src/widgets/itemviews/qcolumnview_p.h b/src/widgets/itemviews/qcolumnview_p.h
index fa276075fe..850ab02747 100644
--- a/src/widgets/itemviews/qcolumnview_p.h
+++ b/src/widgets/itemviews/qcolumnview_p.h
@@ -80,7 +80,7 @@ public:
setMinimumWidth(previewWidget->minimumWidth());
}
- void resizeEvent(QResizeEvent * event) Q_DECL_OVERRIDE{
+ void resizeEvent(QResizeEvent * event) override{
if (!previewWidget)
return;
previewWidget->resize(
@@ -96,7 +96,7 @@ public:
QAbstractScrollArea::resizeEvent(event);
}
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE
+ void scrollContentsBy(int dx, int dy) override
{
if (!previewWidget)
return;
@@ -106,36 +106,36 @@ public:
QAbstractItemView::scrollContentsBy(dx, dy);
}
- QRect visualRect(const QModelIndex &) const Q_DECL_OVERRIDE
+ QRect visualRect(const QModelIndex &) const override
{
return QRect();
}
- void scrollTo(const QModelIndex &, ScrollHint) Q_DECL_OVERRIDE
+ void scrollTo(const QModelIndex &, ScrollHint) override
{
}
- QModelIndex indexAt(const QPoint &) const Q_DECL_OVERRIDE
+ QModelIndex indexAt(const QPoint &) const override
{
return QModelIndex();
}
- QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) Q_DECL_OVERRIDE
+ QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) override
{
return QModelIndex();
}
- int horizontalOffset () const Q_DECL_OVERRIDE {
+ int horizontalOffset () const override {
return 0;
}
- int verticalOffset () const Q_DECL_OVERRIDE {
+ int verticalOffset () const override {
return 0;
}
- QRegion visualRegionForSelection(const QItemSelection &) const Q_DECL_OVERRIDE
+ QRegion visualRegionForSelection(const QItemSelection &) const override
{
return QRegion();
}
- bool isIndexHidden(const QModelIndex &) const Q_DECL_OVERRIDE
+ bool isIndexHidden(const QModelIndex &) const override
{
return false;
}
- void setSelection(const QRect &, QItemSelectionModel::SelectionFlags) Q_DECL_OVERRIDE
+ void setSelection(const QRect &, QItemSelectionModel::SelectionFlags) override
{
}
private:
@@ -163,7 +163,7 @@ public:
void _q_gripMoved(int offset);
void _q_changeCurrentColumn();
void _q_clicked(const QModelIndex &index);
- void _q_columnsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ void _q_columnsInserted(const QModelIndex &parent, int start, int end) override;
QList<QAbstractItemView*> columns;
QVector<int> columnSizes; // used during init and corner moving
@@ -188,7 +188,7 @@ public:
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
};
QT_END_NAMESPACE
diff --git a/src/widgets/itemviews/qcolumnviewgrip_p.h b/src/widgets/itemviews/qcolumnviewgrip_p.h
index 16c0aefada..7e2793074b 100644
--- a/src/widgets/itemviews/qcolumnviewgrip_p.h
+++ b/src/widgets/itemviews/qcolumnviewgrip_p.h
@@ -74,11 +74,11 @@ public:
protected:
QColumnViewGrip(QColumnViewGripPrivate &, QWidget *parent = 0, Qt::WindowFlags f = 0);
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
private:
Q_DECLARE_PRIVATE(QColumnViewGrip)
diff --git a/src/widgets/itemviews/qdatawidgetmapper.h b/src/widgets/itemviews/qdatawidgetmapper.h
index 7d4d61378a..2d75b63a5e 100644
--- a/src/widgets/itemviews/qdatawidgetmapper.h
+++ b/src/widgets/itemviews/qdatawidgetmapper.h
@@ -61,7 +61,7 @@ class Q_WIDGETS_EXPORT QDataWidgetMapper: public QObject
Q_PROPERTY(SubmitPolicy submitPolicy READ submitPolicy WRITE setSubmitPolicy)
public:
- explicit QDataWidgetMapper(QObject *parent = Q_NULLPTR);
+ explicit QDataWidgetMapper(QObject *parent = nullptr);
~QDataWidgetMapper();
void setModel(QAbstractItemModel *model);
diff --git a/src/widgets/itemviews/qdirmodel.h b/src/widgets/itemviews/qdirmodel.h
index 30810cf4f6..ab91bbd763 100644
--- a/src/widgets/itemviews/qdirmodel.h
+++ b/src/widgets/itemviews/qdirmodel.h
@@ -66,31 +66,31 @@ public:
};
QDirModel(const QStringList &nameFilters, QDir::Filters filters,
- QDir::SortFlags sort, QObject *parent = Q_NULLPTR);
- explicit QDirModel(QObject *parent = Q_NULLPTR);
+ QDir::SortFlags sort, QObject *parent = nullptr);
+ explicit QDirModel(QObject *parent = nullptr);
~QDirModel();
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
- int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
- bool hasChildren(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &index = QModelIndex()) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ QStringList mimeTypes() const override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
+ Qt::DropActions supportedDropActions() const override;
// QDirModel specific API
@@ -133,7 +133,7 @@ public Q_SLOTS:
void refresh(const QModelIndex &parent = QModelIndex());
protected:
- QDirModel(QDirModelPrivate &, QObject *parent = Q_NULLPTR);
+ QDirModel(QDirModelPrivate &, QObject *parent = nullptr);
friend class QFileDialogPrivate;
private:
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp
index 60457f7254..c90a61d4ff 100644
--- a/src/widgets/itemviews/qheaderview.cpp
+++ b/src/widgets/itemviews/qheaderview.cpp
@@ -361,7 +361,9 @@ void QHeaderView::setModel(QAbstractItemModel *model)
QObject::disconnect(d->model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
this, SLOT(_q_sectionsRemoved(QModelIndex,int,int)));
QObject::disconnect(d->model, SIGNAL(columnsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(_q_layoutAboutToBeChanged()));
+ this, SLOT(_q_sectionsAboutToBeChanged()));
+ QObject::disconnect(d->model, SIGNAL(columnsMoved(QModelIndex,int,int,QModelIndex,int)),
+ this, SLOT(_q_sectionsChanged()));
} else {
QObject::disconnect(d->model, SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(sectionsInserted(QModelIndex,int,int)));
@@ -370,12 +372,16 @@ void QHeaderView::setModel(QAbstractItemModel *model)
QObject::disconnect(d->model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(_q_sectionsRemoved(QModelIndex,int,int)));
QObject::disconnect(d->model, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(_q_layoutAboutToBeChanged()));
+ this, SLOT(_q_sectionsAboutToBeChanged()));
+ QObject::disconnect(d->model, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
+ this, SLOT(_q_sectionsChanged()));
}
QObject::disconnect(d->model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
this, SLOT(headerDataChanged(Qt::Orientation,int,int)));
QObject::disconnect(d->model, SIGNAL(layoutAboutToBeChanged()),
- this, SLOT(_q_layoutAboutToBeChanged()));
+ this, SLOT(_q_sectionsAboutToBeChanged()));
+ QObject::disconnect(d->model, SIGNAL(layoutChanged()),
+ this, SLOT(_q_sectionsChanged()));
}
if (model && model != QAbstractItemModelPrivate::staticEmptyModel()) {
@@ -387,7 +393,9 @@ void QHeaderView::setModel(QAbstractItemModel *model)
QObject::connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
this, SLOT(_q_sectionsRemoved(QModelIndex,int,int)));
QObject::connect(model, SIGNAL(columnsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(_q_layoutAboutToBeChanged()));
+ this, SLOT(_q_sectionsAboutToBeChanged()));
+ QObject::connect(model, SIGNAL(columnsMoved(QModelIndex,int,int,QModelIndex,int)),
+ this, SLOT(_q_sectionsChanged()));
} else {
QObject::connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(sectionsInserted(QModelIndex,int,int)));
@@ -396,12 +404,16 @@ void QHeaderView::setModel(QAbstractItemModel *model)
QObject::connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(_q_sectionsRemoved(QModelIndex,int,int)));
QObject::connect(model, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(_q_layoutAboutToBeChanged()));
+ this, SLOT(_q_sectionsAboutToBeChanged()));
+ QObject::connect(model, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
+ this, SLOT(_q_sectionsChanged()));
}
QObject::connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
this, SLOT(headerDataChanged(Qt::Orientation,int,int)));
QObject::connect(model, SIGNAL(layoutAboutToBeChanged()),
- this, SLOT(_q_layoutAboutToBeChanged()));
+ this, SLOT(_q_sectionsAboutToBeChanged()));
+ QObject::connect(model, SIGNAL(layoutChanged()),
+ this, SLOT(_q_sectionsChanged()));
}
d->state = QHeaderViewPrivate::NoClear;
@@ -608,7 +620,7 @@ int QHeaderView::visualIndexAt(int position) const
return -1;
if (d->reverse())
- vposition = d->viewport->width() - vposition;
+ vposition = d->viewport->width() - vposition - 1;
vposition += d->offset;
if (vposition > d->length)
@@ -874,6 +886,10 @@ void QHeaderView::resizeSection(int logical, int size)
if (logical < 0 || logical >= count() || size < 0 || size > maxSizeSection)
return;
+ // make sure to not exceed bounds when setting size programmatically
+ if (size > 0)
+ size = qBound(minimumSectionSize(), size, maximumSectionSize());
+
if (isSectionHidden(logical)) {
d->hiddenSectionSize.insert(logical, size);
return;
@@ -1103,10 +1119,15 @@ int QHeaderView::logicalIndex(int visualIndex) const
/*!
\since 5.0
- If \a movable is true, the header may be moved by the user; otherwise it
- is fixed in place.
+ If \a movable is true, the header sections may be moved by the user;
+ otherwise they are fixed in place.
+
+ When used in combination with QTreeView, the first column is not
+ movable (since it contains the tree structure), by default.
+ You can make it movable with setFirstSectionMovable(true).
\sa sectionsMovable(), sectionMoved()
+ \sa setFirstSectionMovable()
*/
void QHeaderView::setSectionsMovable(bool movable)
@@ -1131,6 +1152,9 @@ void QHeaderView::setSectionsMovable(bool movable)
Returns \c true if the header can be moved by the user; otherwise returns
false.
+ By default, sections are movable in QTreeView (except for the first one),
+ and not movable in QTableView.
+
\sa setSectionsMovable()
*/
@@ -1151,6 +1175,39 @@ bool QHeaderView::sectionsMovable() const
*/
/*!
+ \since 5.10
+
+ If \a movable is true, the first column can be moved by the user.
+ In a QTreeView, the first column holds the tree structure and is
+ therefore non-movable by default, even after setSectionsMovable(true).
+
+ It can be made movable again, for instance in the case of flat lists
+ without a tree structure, by calling this method.
+ In such a scenario, it is recommended to call QTreeView::setRootIsDecorated(false)
+ as well.
+
+ This method has no effect unless setSectionsMovable(true) is called as well.
+ \sa setSectionsMovable()
+*/
+void QHeaderView::setFirstSectionMovable(bool movable)
+{
+ Q_D(QHeaderView);
+ d->allowUserMoveOfSection0 = movable;
+}
+
+/*!
+ \since 5.10
+
+ Returns \c true if the first column can be moved by the user,
+ when this header is used in a QTreeView.
+*/
+bool QHeaderView::firstSectionMovable() const
+{
+ Q_D(const QHeaderView);
+ return d->allowUserMoveOfSection0;
+}
+
+/*!
\since 5.0
If \a clickable is true, the header will respond to single clicks.
@@ -1608,9 +1665,25 @@ void QHeaderView::setMinimumSectionSize(int size)
Q_D(QHeaderView);
if (size < -1 || size > maxSizeSection)
return;
+ // larger new min size - check current section sizes
+ const bool needSizeCheck = size > d->minimumSectionSize;
d->minimumSectionSize = size;
if (d->minimumSectionSize > maximumSectionSize())
- d->maximumSectionSize = size;
+ setMaximumSectionSize(size);
+
+ if (needSizeCheck) {
+ if (d->hasAutoResizeSections()) {
+ d->doDelayedResizeSections();
+ } else {
+ for (int visual = 0; visual < d->sectionCount(); ++visual) {
+ if (d->isVisualIndexHidden(visual))
+ continue;
+ if (d->headerSectionSize(visual) < d->minimumSectionSize)
+ resizeSection(logicalIndex(visual), size);
+ }
+ }
+ }
+
}
/*!
@@ -1647,7 +1720,22 @@ void QHeaderView::setMaximumSectionSize(int size)
if (minimumSectionSize() > size)
d->minimumSectionSize = size;
+ // smaller new max size - check current section sizes
+ const bool needSizeCheck = size < d->maximumSectionSize;
d->maximumSectionSize = size;
+
+ if (needSizeCheck) {
+ if (d->hasAutoResizeSections()) {
+ d->doDelayedResizeSections();
+ } else {
+ for (int visual = 0; visual < d->sectionCount(); ++visual) {
+ if (d->isVisualIndexHidden(visual))
+ continue;
+ if (d->headerSectionSize(visual) > d->maximumSectionSize)
+ resizeSection(logicalIndex(visual), size);
+ }
+ }
+ }
}
@@ -2062,7 +2150,7 @@ void QHeaderViewPrivate::_q_sectionsRemoved(const QModelIndex &parent,
viewport->update();
}
-void QHeaderViewPrivate::_q_layoutAboutToBeChanged()
+void QHeaderViewPrivate::_q_sectionsAboutToBeChanged()
{
//if there is no row/column we can't have mapping for columns
//because no QModelIndex in the model would be valid
@@ -2096,7 +2184,7 @@ void QHeaderViewPrivate::_q_layoutAboutToBeChanged()
}
}
-void QHeaderViewPrivate::_q_layoutChanged()
+void QHeaderViewPrivate::_q_sectionsChanged()
{
Q_Q(QHeaderView);
viewport->update();
@@ -2806,14 +2894,18 @@ void QHeaderView::paintSection(QPainter *painter, const QRect &rect, int logical
if (isSortIndicatorShown() && sortIndicatorSection() == logicalIndex && isHeaderArrowOnTheSide)
margin += style()->pixelMetric(QStyle::PM_HeaderMarkSize, 0, this);
- if (d->textElideMode != Qt::ElideNone)
- opt.text = opt.fontMetrics.elidedText(opt.text, d->textElideMode , rect.width() - margin);
-
- QVariant variant = d->model->headerData(logicalIndex, d->orientation,
- Qt::DecorationRole);
+ const QVariant variant = d->model->headerData(logicalIndex, d->orientation,
+ Qt::DecorationRole);
opt.icon = qvariant_cast<QIcon>(variant);
if (opt.icon.isNull())
opt.icon = qvariant_cast<QPixmap>(variant);
+ if (!opt.icon.isNull()) // see CT_HeaderSection
+ margin += style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this) +
+ style()->pixelMetric(QStyle::PM_HeaderMargin, 0, this);
+
+ if (d->textElideMode != Qt::ElideNone)
+ opt.text = opt.fontMetrics.elidedText(opt.text, d->textElideMode , rect.width() - margin);
+
QVariant foregroundBrush = d->model->headerData(logicalIndex, d->orientation,
Qt::ForegroundRole);
if (foregroundBrush.canConvert<QBrush>())
@@ -3424,9 +3516,11 @@ void QHeaderViewPrivate::resizeSections(QHeaderView::ResizeMode globalMode, bool
int logicalIndex = q->logicalIndex(i);
sectionSize = qMax(viewSectionSizeHint(logicalIndex),
q->sectionSizeHint(logicalIndex));
- if (sectionSize > q->maximumSectionSize())
- sectionSize = q->maximumSectionSize();
}
+ sectionSize = qBound(q->minimumSectionSize(),
+ sectionSize,
+ q->maximumSectionSize());
+
section_sizes.append(sectionSize);
lengthToStretch -= sectionSize;
}
diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h
index ec4500d81e..cfe2d24453 100644
--- a/src/widgets/itemviews/qheaderview.h
+++ b/src/widgets/itemviews/qheaderview.h
@@ -74,16 +74,16 @@ public:
};
Q_ENUM(ResizeMode)
- explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR);
+ explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr);
virtual ~QHeaderView();
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) override;
Qt::Orientation orientation() const;
int offset() const;
int length() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- void setVisible(bool v) Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ void setVisible(bool v) override;
int sectionSizeHint(int logicalIndex) const;
int visualIndexAt(int position) const;
@@ -118,6 +118,8 @@ public:
inline QT_DEPRECATED void setMovable(bool movable) { setSectionsMovable(movable); }
inline QT_DEPRECATED bool isMovable() const { return sectionsMovable(); }
#endif
+ void setFirstSectionMovable(bool movable);
+ bool firstSectionMovable() const;
void setSectionsClickable(bool clickable);
bool sectionsClickable() const;
@@ -172,7 +174,7 @@ public:
Qt::Alignment defaultAlignment() const;
void setDefaultAlignment(Qt::Alignment alignment);
- void doItemsLayout() Q_DECL_OVERRIDE;
+ void doItemsLayout() override;
bool sectionsMoved() const;
bool sectionsHidden() const;
@@ -181,7 +183,7 @@ public:
bool restoreState(const QByteArray &state);
#endif
- void reset() Q_DECL_OVERRIDE;
+ void reset() override;
public Q_SLOTS:
void setOffset(int offset);
@@ -208,41 +210,41 @@ protected Q_SLOTS:
void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast);
protected:
- QHeaderView(QHeaderViewPrivate &dd, Qt::Orientation orientation, QWidget *parent = Q_NULLPTR);
+ QHeaderView(QHeaderViewPrivate &dd, Qt::Orientation orientation, QWidget *parent = nullptr);
void initialize();
void initializeSections();
void initializeSections(int start, int end);
- void currentChanged(const QModelIndex &current, const QModelIndex &old) Q_DECL_OVERRIDE;
+ void currentChanged(const QModelIndex &current, const QModelIndex &old) override;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- bool viewportEvent(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *e) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseMoveEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
+ void mouseDoubleClickEvent(QMouseEvent *e) override;
+ bool viewportEvent(QEvent *e) override;
virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
virtual QSize sectionSizeFromContents(int logicalIndex) const;
- int horizontalOffset() const Q_DECL_OVERRIDE;
- int verticalOffset() const Q_DECL_OVERRIDE;
- void updateGeometries() Q_DECL_OVERRIDE;
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ int horizontalOffset() const override;
+ int verticalOffset() const override;
+ void updateGeometries() override;
+ void scrollContentsBy(int dx, int dy) override;
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) Q_DECL_OVERRIDE;
- void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) override;
+ void rowsInserted(const QModelIndex &parent, int start, int end) override;
- QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void scrollTo(const QModelIndex &index, ScrollHint hint) Q_DECL_OVERRIDE;
+ QRect visualRect(const QModelIndex &index) const override;
+ void scrollTo(const QModelIndex &index, ScrollHint hint) override;
- QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
- bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QModelIndex indexAt(const QPoint &p) const override;
+ bool isIndexHidden(const QModelIndex &index) const override;
- QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) Q_DECL_OVERRIDE;
- void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags) Q_DECL_OVERRIDE;
- QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
+ QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) override;
+ void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags) override;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const override;
void initStyleOption(QStyleOptionHeader *option) const;
friend class QTableView;
@@ -250,7 +252,8 @@ protected:
private:
Q_PRIVATE_SLOT(d_func(), void _q_sectionsRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast))
- Q_PRIVATE_SLOT(d_func(), void _q_layoutAboutToBeChanged())
+ Q_PRIVATE_SLOT(d_func(), void _q_sectionsAboutToBeChanged())
+ Q_PRIVATE_SLOT(d_func(), void _q_sectionsChanged())
Q_DECLARE_PRIVATE(QHeaderView)
Q_DISABLE_COPY(QHeaderView)
};
diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h
index c9c2cf8493..24dc3bf075 100644
--- a/src/widgets/itemviews/qheaderview_p.h
+++ b/src/widgets/itemviews/qheaderview_p.h
@@ -120,8 +120,8 @@ public:
void updateHiddenSections(int logicalFirst, int logicalLast);
void resizeSections(QHeaderView::ResizeMode globalMode, bool useGlobalMode = false);
void _q_sectionsRemoved(const QModelIndex &,int,int);
- void _q_layoutAboutToBeChanged();
- void _q_layoutChanged() override;
+ void _q_sectionsAboutToBeChanged();
+ void _q_sectionsChanged();
bool isSectionSelected(int section) const;
bool isFirstVisibleSection(int section) const;
@@ -242,10 +242,6 @@ public:
}
}
- inline void setAllowUserMoveOfSection0(bool b) {
- allowUserMoveOfSection0 = b;
- }
-
void clear();
void flipSortIndicator(int section);
void cascadingResize(int visual, int newSize);
diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp
index d9caebec8a..91122283a4 100644
--- a/src/widgets/itemviews/qitemdelegate.cpp
+++ b/src/widgets/itemviews/qitemdelegate.cpp
@@ -94,10 +94,7 @@ public:
inline static QString replaceNewLine(QString text)
{
- const QChar nl = QLatin1Char('\n');
- for (int i = 0; i < text.count(); ++i)
- if (text.at(i) == nl)
- text[i] = QChar::LineSeparator;
+ text.replace(QLatin1Char('\n'), QChar::LineSeparator);
return text;
}
@@ -806,11 +803,14 @@ void QItemDelegate::doLayout(const QStyleOptionViewItem &option,
const bool hasCheck = checkRect->isValid();
const bool hasPixmap = pixmapRect->isValid();
const bool hasText = textRect->isValid();
- const int textMargin = hasText ? style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, widget) + 1 : 0;
- const int pixmapMargin = hasPixmap ? style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, widget) + 1 : 0;
- const int checkMargin = hasCheck ? style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, widget) + 1 : 0;
- int x = option.rect.left();
- int y = option.rect.top();
+ const bool hasMargin = (hasText | hasPixmap | hasCheck);
+ const int frameHMargin = hasMargin ?
+ style->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, widget) + 1 : 0;
+ const int textMargin = hasText ? frameHMargin : 0;
+ const int pixmapMargin = hasPixmap ? frameHMargin : 0;
+ const int checkMargin = hasCheck ? frameHMargin : 0;
+ const int x = option.rect.left();
+ const int y = option.rect.top();
int w, h;
textRect->adjust(-textMargin, 0, textMargin, 0); // add width padding
@@ -845,7 +845,7 @@ void QItemDelegate::doLayout(const QStyleOptionViewItem &option,
if (option.direction == Qt::RightToLeft) {
check.setRect(x + w - cw, y, cw, h);
} else {
- check.setRect(x + checkMargin, y, cw, h);
+ check.setRect(x, y, cw, h);
}
}
@@ -1090,7 +1090,7 @@ QRect QItemDelegate::textRectangle(QPainter * /*painter*/, const QRect &rect,
\endlist
In the case of \uicontrol Tab, \uicontrol Backtab, \uicontrol Enter and \uicontrol Return
- key press events, the \a editor's data is comitted to the model
+ key press events, the \a editor's data is committed to the model
and the editor is closed. If the \a event is a \uicontrol Tab key press
the view will open an editor on the next item in the
view. Likewise, if the \a event is a \uicontrol Backtab key press the
diff --git a/src/widgets/itemviews/qitemdelegate.h b/src/widgets/itemviews/qitemdelegate.h
index 21594327ef..539dec4374 100644
--- a/src/widgets/itemviews/qitemdelegate.h
+++ b/src/widgets/itemviews/qitemdelegate.h
@@ -59,7 +59,7 @@ class Q_WIDGETS_EXPORT QItemDelegate : public QAbstractItemDelegate
Q_PROPERTY(bool clipping READ hasClipping WRITE setClipping)
public:
- explicit QItemDelegate(QObject *parent = Q_NULLPTR);
+ explicit QItemDelegate(QObject *parent = nullptr);
~QItemDelegate();
bool hasClipping() const;
@@ -68,21 +68,21 @@ public:
// painting
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
// editing
QWidget *createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
- void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
- void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
+ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
// editor factory
QItemEditorFactory *itemEditorFactory() const;
@@ -105,9 +105,9 @@ protected:
QRect rect(const QStyleOptionViewItem &option, const QModelIndex &index, int role) const;
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) override;
bool editorEvent(QEvent *event, QAbstractItemModel *model,
- const QStyleOptionViewItem &option, const QModelIndex &index) Q_DECL_OVERRIDE;
+ const QStyleOptionViewItem &option, const QModelIndex &index) override;
QStyleOptionViewItem setOptions(const QModelIndex &index,
const QStyleOptionViewItem &option) const;
diff --git a/src/widgets/itemviews/qitemeditorfactory.cpp b/src/widgets/itemviews/qitemeditorfactory.cpp
index b580f0e840..0986da9707 100644
--- a/src/widgets/itemviews/qitemeditorfactory.cpp
+++ b/src/widgets/itemviews/qitemeditorfactory.cpp
@@ -233,8 +233,8 @@ class QDefaultItemEditorFactory : public QItemEditorFactory
{
public:
inline QDefaultItemEditorFactory() {}
- QWidget *createEditor(int userType, QWidget *parent) const Q_DECL_OVERRIDE;
- QByteArray valuePropertyName(int) const Q_DECL_OVERRIDE;
+ QWidget *createEditor(int userType, QWidget *parent) const override;
+ QByteArray valuePropertyName(int) const override;
};
QWidget *QDefaultItemEditorFactory::createEditor(int userType, QWidget *parent) const
@@ -468,7 +468,7 @@ QItemEditorCreatorBase::~QItemEditorCreatorBase()
*/
/*!
- \fn QItemEditorCreator::QItemEditorCreator(const QByteArray &valuePropertyName)
+ \fn template <class T> QItemEditorCreator<T>::QItemEditorCreator(const QByteArray &valuePropertyName)
Constructs an editor creator object using \a valuePropertyName
as the name of the property to be used for editing. The
@@ -480,12 +480,12 @@ QItemEditorCreatorBase::~QItemEditorCreatorBase()
*/
/*!
- \fn QWidget *QItemEditorCreator::createWidget(QWidget *parent) const
+ \fn template <class T> QWidget *QItemEditorCreator<T>::createWidget(QWidget *parent) const
\reimp
*/
/*!
- \fn QByteArray QItemEditorCreator::valuePropertyName() const
+ \fn template <class T> QByteArray QItemEditorCreator<T>::valuePropertyName() const
\reimp
*/
@@ -524,18 +524,18 @@ QItemEditorCreatorBase::~QItemEditorCreatorBase()
*/
/*!
- \fn QStandardItemEditorCreator::QStandardItemEditorCreator()
+ \fn template <class T> QStandardItemEditorCreator<T>::QStandardItemEditorCreator()
Constructs an editor creator object.
*/
/*!
- \fn QWidget *QStandardItemEditorCreator::createWidget(QWidget *parent) const
+ \fn template <class T> QWidget *QStandardItemEditorCreator<T>::createWidget(QWidget *parent) const
\reimp
*/
/*!
- \fn QByteArray QStandardItemEditorCreator::valuePropertyName() const
+ \fn template <class T> QByteArray QStandardItemEditorCreator<T>::valuePropertyName() const
\reimp
*/
@@ -587,7 +587,7 @@ void QExpandingLineEdit::resizeToContents()
originalWidth = oldWidth;
if (QWidget *parent = parentWidget()) {
QPoint position = pos();
- int hintWidth = minimumWidth() + fontMetrics().width(displayText());
+ int hintWidth = minimumWidth() + fontMetrics().horizontalAdvance(displayText());
int parentWidth = parent->width();
int maxWidth = isRightToLeft() ? position.x() + oldWidth : parentWidth - position.x();
int newWidth = qBound(originalWidth, hintWidth, maxWidth);
diff --git a/src/widgets/itemviews/qitemeditorfactory_p.h b/src/widgets/itemviews/qitemeditorfactory_p.h
index 46a8da1d8f..e78f42b729 100644
--- a/src/widgets/itemviews/qitemeditorfactory_p.h
+++ b/src/widgets/itemviews/qitemeditorfactory_p.h
@@ -74,7 +74,7 @@ public:
}
protected:
- void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *e) override;
public Q_SLOTS:
void resizeToContents();
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index 7f027595b7..6777b09043 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -980,9 +980,18 @@ void QListView::paintEvent(QPaintEvent *e)
? qMax(viewport()->size().width(), d->contentsSize().width()) - 2 * d->spacing()
: qMax(viewport()->size().height(), d->contentsSize().height()) - 2 * d->spacing();
+ const int rowCount = d->commonListView->rowCount();
QVector<QModelIndex>::const_iterator end = toBeRendered.constEnd();
for (QVector<QModelIndex>::const_iterator it = toBeRendered.constBegin(); it != end; ++it) {
Q_ASSERT((*it).isValid());
+ if (rowCount == 1)
+ option.viewItemPosition = QStyleOptionViewItem::OnlyOne;
+ else if ((*it).row() == 0)
+ option.viewItemPosition = QStyleOptionViewItem::Beginning;
+ else if ((*it).row() == rowCount - 1)
+ option.viewItemPosition = QStyleOptionViewItem::End;
+ else
+ option.viewItemPosition = QStyleOptionViewItem::Middle;
option.rect = visualRect(*it);
if (flow() == TopToBottom)
diff --git a/src/widgets/itemviews/qlistview.h b/src/widgets/itemviews/qlistview.h
index 66ec9b18b1..2da510facf 100644
--- a/src/widgets/itemviews/qlistview.h
+++ b/src/widgets/itemviews/qlistview.h
@@ -78,7 +78,7 @@ public:
enum ViewMode { ListMode, IconMode };
Q_ENUM(ViewMode)
- explicit QListView(QWidget *parent = Q_NULLPTR);
+ explicit QListView(QWidget *parent = nullptr);
~QListView();
void setMovement(Movement movement);
@@ -125,67 +125,67 @@ public:
void setSelectionRectVisible(bool show);
bool isSelectionRectVisible() const;
- QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
- QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
+ QRect visualRect(const QModelIndex &index) const override;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
+ QModelIndex indexAt(const QPoint &p) const override;
- void doItemsLayout() Q_DECL_OVERRIDE;
- void reset() Q_DECL_OVERRIDE;
- void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
+ void doItemsLayout() override;
+ void reset() override;
+ void setRootIndex(const QModelIndex &index) override;
Q_SIGNALS:
void indexesMoved(const QModelIndexList &indexes);
protected:
- QListView(QListViewPrivate &, QWidget *parent = Q_NULLPTR);
+ QListView(QListViewPrivate &, QWidget *parent = nullptr);
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) override;
void resizeContents(int width, int height);
QSize contentsSize() const;
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) Q_DECL_OVERRIDE;
- void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
- void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) override;
+ void rowsInserted(const QModelIndex &parent, int start, int end) override;
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override;
- void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *e) override;
#endif
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) override;
+ void resizeEvent(QResizeEvent *e) override;
#ifndef QT_NO_DRAGANDDROP
- void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
- void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *e) override;
+ void dragLeaveEvent(QDragLeaveEvent *e) override;
+ void dropEvent(QDropEvent *e) override;
+ void startDrag(Qt::DropActions supportedActions) override;
#endif // QT_NO_DRAGANDDROP
- QStyleOptionViewItem viewOptions() const Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ QStyleOptionViewItem viewOptions() const override;
+ void paintEvent(QPaintEvent *e) override;
- int horizontalOffset() const Q_DECL_OVERRIDE;
- int verticalOffset() const Q_DECL_OVERRIDE;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
+ int horizontalOffset() const override;
+ int verticalOffset() const override;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override;
QRect rectForIndex(const QModelIndex &index) const;
void setPositionForIndex(const QPoint &position, const QModelIndex &index);
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
- QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
- QModelIndexList selectedIndexes() const Q_DECL_OVERRIDE;
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const override;
+ QModelIndexList selectedIndexes() const override;
- void updateGeometries() Q_DECL_OVERRIDE;
+ void updateGeometries() override;
- bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool isIndexHidden(const QModelIndex &index) const override;
- void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) Q_DECL_OVERRIDE;
- void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
+ void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override;
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
- QSize viewportSizeHint() const Q_DECL_OVERRIDE;
+ QSize viewportSizeHint() const override;
private:
int visualIndex(const QModelIndex &index) const;
diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp
index 61b2c5e78f..1fedad80aa 100644
--- a/src/widgets/itemviews/qlistwidget.cpp
+++ b/src/widgets/itemviews/qlistwidget.cpp
@@ -189,8 +189,9 @@ int QListModel::rowCount(const QModelIndex &parent) const
return parent.isValid() ? 0 : items.count();
}
-QModelIndex QListModel::index(QListWidgetItem *item) const
+QModelIndex QListModel::index(const QListWidgetItem *item_) const
{
+ QListWidgetItem *item = const_cast<QListWidgetItem *>(item_);
if (!item || !item->view || static_cast<const QListModel *>(item->view->model()) != this
|| items.isEmpty())
return QModelIndex();
@@ -411,10 +412,10 @@ QList<QListWidgetItem*>::iterator QListModel::sortedInsertionIterator(
return std::lower_bound(begin, end, item, QListModelGreaterThan());
}
-void QListModel::itemChanged(QListWidgetItem *item)
+void QListModel::itemChanged(QListWidgetItem *item, const QVector<int> &roles)
{
- QModelIndex idx = index(item);
- emit dataChanged(idx, idx);
+ const QModelIndex idx = index(item);
+ emit dataChanged(idx, idx, roles);
}
QStringList QListModel::mimeTypes() const
@@ -710,8 +711,12 @@ void QListWidgetItem::setData(int role, const QVariant &value)
}
if (!found)
d->values.append(QWidgetItemData(role, value));
- if (QListModel *model = (view ? qobject_cast<QListModel*>(view->model()) : 0))
- model->itemChanged(this);
+ if (QListModel *model = (view ? qobject_cast<QListModel*>(view->model()) : nullptr)) {
+ const QVector<int> roles((role == Qt::DisplayRole) ?
+ QVector<int>({Qt::DisplayRole, Qt::EditRole}) :
+ QVector<int>({role}));
+ model->itemChanged(this, roles);
+ }
}
/*!
@@ -953,7 +958,8 @@ QDataStream &operator>>(QDataStream &in, QListWidgetItem &item)
\sa Qt::ItemFlags
*/
-void QListWidgetItem::setFlags(Qt::ItemFlags aflags) {
+void QListWidgetItem::setFlags(Qt::ItemFlags aflags)
+{
itemFlags = aflags;
if (QListModel *model = (view ? qobject_cast<QListModel*>(view->model()) : 0))
model->itemChanged(this);
@@ -1196,7 +1202,7 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
new current item and the item that was previously current.
\sa QListWidgetItem, QListView, QTreeView, {Model/View Programming},
- {Config Dialog Example}
+ {Tab Dialog Example}
*/
/*!
@@ -1945,14 +1951,28 @@ QList<QListWidgetItem*> QListWidget::items(const QMimeData *data) const
/*!
Returns the QModelIndex associated with the given \a item.
+
+ \note In Qt versions prior to 5.10, this function took a non-\c{const} \a item.
*/
-QModelIndex QListWidget::indexFromItem(QListWidgetItem *item) const
+QModelIndex QListWidget::indexFromItem(const QListWidgetItem *item) const
{
Q_D(const QListWidget);
return d->listModel()->index(item);
}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+/*!
+ \internal
+ \obsolete
+ \overload
+*/
+QModelIndex QListWidget::indexFromItem(QListWidgetItem *item) const
+{
+ return indexFromItem(const_cast<const QListWidgetItem *>(item));
+}
+#endif
+
/*!
Returns a pointer to the QListWidgetItem associated with the given \a index.
*/
diff --git a/src/widgets/itemviews/qlistwidget.h b/src/widgets/itemviews/qlistwidget.h
index 50f4e2ac84..8a31411429 100644
--- a/src/widgets/itemviews/qlistwidget.h
+++ b/src/widgets/itemviews/qlistwidget.h
@@ -61,10 +61,10 @@ class Q_WIDGETS_EXPORT QListWidgetItem
friend class QListWidget;
public:
enum ItemType { Type = 0, UserType = 1000 };
- explicit QListWidgetItem(QListWidget *view = Q_NULLPTR, int type = Type);
- explicit QListWidgetItem(const QString &text, QListWidget *view = Q_NULLPTR, int type = Type);
+ explicit QListWidgetItem(QListWidget *view = nullptr, int type = Type);
+ explicit QListWidgetItem(const QString &text, QListWidget *view = nullptr, int type = Type);
explicit QListWidgetItem(const QIcon &icon, const QString &text,
- QListWidget *view = Q_NULLPTR, int type = Type);
+ QListWidget *view = nullptr, int type = Type);
QListWidgetItem(const QListWidgetItem &other);
virtual ~QListWidgetItem();
@@ -204,10 +204,10 @@ class Q_WIDGETS_EXPORT QListWidget : public QListView
friend class QListWidgetItem;
friend class QListModel;
public:
- explicit QListWidget(QWidget *parent = Q_NULLPTR);
+ explicit QListWidget(QWidget *parent = nullptr);
~QListWidget();
- void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
+ void setSelectionModel(QItemSelectionModel *selectionModel) override;
QListWidgetItem *item(int row) const;
int row(const QListWidgetItem *item) const;
@@ -257,7 +257,7 @@ public:
protected:
#endif
#if QT_CONFIG(draganddrop)
- void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *event) override;
#endif
public Q_SLOTS:
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
@@ -269,6 +269,7 @@ Q_SIGNALS:
void itemDoubleClicked(QListWidgetItem *item);
void itemActivated(QListWidgetItem *item);
void itemEntered(QListWidgetItem *item);
+ // ### Qt 6: add changed roles
void itemChanged(QListWidgetItem *item);
void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
@@ -278,7 +279,7 @@ Q_SIGNALS:
void itemSelectionChanged();
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
virtual QStringList mimeTypes() const;
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
virtual QMimeData *mimeData(const QList<QListWidgetItem *> &items) const;
@@ -297,11 +298,14 @@ protected:
#endif
QList<QListWidgetItem*> items(const QMimeData *data) const;
- QModelIndex indexFromItem(QListWidgetItem *item) const;
+ QModelIndex indexFromItem(const QListWidgetItem *item) const;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QModelIndex indexFromItem(QListWidgetItem *item) const; // ### Qt 6: remove
+#endif
QListWidgetItem *itemFromIndex(const QModelIndex &index) const;
private:
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) override;
Qt::SortOrder sortOrder() const;
Q_DECLARE_PRIVATE(QListWidget)
@@ -319,7 +323,7 @@ private:
};
inline void QListWidget::removeItemWidget(QListWidgetItem *aItem)
-{ setItemWidget(aItem, Q_NULLPTR); }
+{ setItemWidget(aItem, nullptr); }
inline void QListWidget::addItem(QListWidgetItem *aitem)
{ insertItem(count(), aitem); }
diff --git a/src/widgets/itemviews/qlistwidget_p.h b/src/widgets/itemviews/qlistwidget_p.h
index e8f5540f9c..30b5016db6 100644
--- a/src/widgets/itemviews/qlistwidget_p.h
+++ b/src/widgets/itemviews/qlistwidget_p.h
@@ -95,7 +95,7 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
- QModelIndex index(QListWidgetItem *item) const;
+ QModelIndex index(const QListWidgetItem *item) const;
QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
@@ -119,7 +119,7 @@ public:
const QList<QListWidgetItem*>::iterator &end,
Qt::SortOrder order, QListWidgetItem *item);
- void itemChanged(QListWidgetItem *item);
+ void itemChanged(QListWidgetItem *item, const QVector<int> &roles = QVector<int>());
// dnd
QStringList mimeTypes() const override;
diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp
index 716df2c729..0f7566e8ec 100644
--- a/src/widgets/itemviews/qstyleditemdelegate.cpp
+++ b/src/widgets/itemviews/qstyleditemdelegate.cpp
@@ -514,12 +514,13 @@ void QStyledItemDelegate::updateEditorGeometry(QWidget *editor,
QStyle *style = widget ? widget->style() : QApplication::style();
QRect geom = style->subElementRect(QStyle::SE_ItemViewItemText, &opt, widget);
- if ( editor->layoutDirection() == Qt::RightToLeft) {
- const int delta = qSmartMinSize(editor).width() - geom.width();
- if (delta > 0) {
- //we need to widen the geometry
+ const int delta = qSmartMinSize(editor).width() - geom.width();
+ if (delta > 0) {
+ //we need to widen the geometry
+ if (editor->layoutDirection() == Qt::RightToLeft)
geom.adjust(-delta, 0, 0, 0);
- }
+ else
+ geom.adjust(0, 0, delta, 0);
}
editor->setGeometry(geom);
@@ -570,7 +571,7 @@ void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
\uicontrol Return keys are \e not handled.
In the case of \uicontrol Tab, \uicontrol Backtab, \uicontrol Enter and \uicontrol Return
- key press events, the \a editor's data is comitted to the model
+ key press events, the \a editor's data is committed to the model
and the editor is closed. If the \a event is a \uicontrol Tab key press
the view will open an editor on the next item in the
view. Likewise, if the \a event is a \uicontrol Backtab key press the
diff --git a/src/widgets/itemviews/qstyleditemdelegate.h b/src/widgets/itemviews/qstyleditemdelegate.h
index f3b7c4d1f4..2df2450f07 100644
--- a/src/widgets/itemviews/qstyleditemdelegate.h
+++ b/src/widgets/itemviews/qstyleditemdelegate.h
@@ -58,28 +58,28 @@ class Q_WIDGETS_EXPORT QStyledItemDelegate : public QAbstractItemDelegate
Q_OBJECT
public:
- explicit QStyledItemDelegate(QObject *parent = Q_NULLPTR);
+ explicit QStyledItemDelegate(QObject *parent = nullptr);
~QStyledItemDelegate();
// painting
void paint(QPainter *painter,
- const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QStyleOptionViewItem &option, const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
// editing
QWidget *createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
- void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
void setModelData(QWidget *editor,
QAbstractItemModel *model,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
// editor factory
QItemEditorFactory *itemEditorFactory() const;
@@ -91,9 +91,9 @@ protected:
virtual void initStyleOption(QStyleOptionViewItem *option,
const QModelIndex &index) const;
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) override;
bool editorEvent(QEvent *event, QAbstractItemModel *model,
- const QStyleOptionViewItem &option, const QModelIndex &index) Q_DECL_OVERRIDE;
+ const QStyleOptionViewItem &option, const QModelIndex &index) override;
private:
Q_DECLARE_PRIVATE(QStyledItemDelegate)
diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp
index 8ab811e9f7..ec25ccdb12 100644
--- a/src/widgets/itemviews/qtableview.cpp
+++ b/src/widgets/itemviews/qtableview.cpp
@@ -585,7 +585,7 @@ class QTableCornerButton : public QAbstractButton
Q_OBJECT
public:
QTableCornerButton(QWidget *parent) : QAbstractButton(parent) {}
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE {
+ void paintEvent(QPaintEvent*) override {
QStyleOptionHeader opt;
opt.init(this);
QStyle::State state = QStyle::State_None;
@@ -971,6 +971,9 @@ int QTableViewPrivate::heightHintForIndex(const QModelIndex &index, int hint, QS
option.rect.setHeight(height);
option.rect.setX(q->columnViewportPosition(index.column()));
option.rect.setWidth(q->columnWidth(index.column()));
+ // 1px less space when grid is shown (see drawCell)
+ if (showGrid)
+ option.rect.setWidth(option.rect.width() - 1);
}
hint = qMax(hint, q->itemDelegate(index)->sizeHint(option, index).height());
return hint;
@@ -1226,7 +1229,7 @@ void QTableView::setHorizontalHeader(QHeaderView *header)
delete d->horizontalHeader;
d->horizontalHeader = header;
d->horizontalHeader->setParent(this);
- d->horizontalHeader->d_func()->setAllowUserMoveOfSection0(true);
+ d->horizontalHeader->setFirstSectionMovable(true);
if (!d->horizontalHeader->model()) {
d->horizontalHeader->setModel(d->model);
if (d->selectionModel)
@@ -1264,7 +1267,7 @@ void QTableView::setVerticalHeader(QHeaderView *header)
delete d->verticalHeader;
d->verticalHeader = header;
d->verticalHeader->setParent(this);
- d->verticalHeader->d_func()->setAllowUserMoveOfSection0(true);
+ d->verticalHeader->setFirstSectionMovable(true);
if (!d->verticalHeader->model()) {
d->verticalHeader->setModel(d->model);
if (d->selectionModel)
@@ -1362,8 +1365,8 @@ void QTableView::paintEvent(QPaintEvent *event)
if (horizontalHeader->count() == 0 || verticalHeader->count() == 0 || !d->itemDelegate)
return;
- uint x = horizontalHeader->length() - horizontalHeader->offset() - (rightToLeft ? 0 : 1);
- uint y = verticalHeader->length() - verticalHeader->offset() - 1;
+ const int x = horizontalHeader->length() - horizontalHeader->offset() - (rightToLeft ? 0 : 1);
+ const int y = verticalHeader->length() - verticalHeader->offset() - 1;
//firstVisualRow is the visual index of the first visible row. lastVisualRow is the visual index of the last visible Row.
//same goes for ...VisualColumn
@@ -1415,10 +1418,10 @@ void QTableView::paintEvent(QPaintEvent *event)
int top = 0;
bool alternateBase = false;
if (alternate && verticalHeader->sectionsHidden()) {
- uint verticalOffset = verticalHeader->offset();
+ const int verticalOffset = verticalHeader->offset();
int row = verticalHeader->logicalIndex(top);
for (int y = 0;
- ((uint)(y += verticalHeader->sectionSize(top)) <= verticalOffset) && (top < bottom);
+ ((y += verticalHeader->sectionSize(top)) <= verticalOffset) && (top < bottom);
++top) {
row = verticalHeader->logicalIndex(top);
if (alternate && !verticalHeader->isSectionHidden(row))
@@ -2131,9 +2134,9 @@ void QTableView::updateGeometries()
// ### move this block into the if
QSize vsize = d->viewport->size();
QSize max = maximumViewportSize();
- uint horizontalLength = d->horizontalHeader->length();
- uint verticalLength = d->verticalHeader->length();
- if ((uint)max.width() >= horizontalLength && (uint)max.height() >= verticalLength)
+ const int horizontalLength = d->horizontalHeader->length();
+ const int verticalLength = d->verticalHeader->length();
+ if (max.width() >= horizontalLength && max.height() >= verticalLength)
vsize = max;
// horizontal scroll bar
diff --git a/src/widgets/itemviews/qtableview.h b/src/widgets/itemviews/qtableview.h
index 75f2e7b44c..60c2f34103 100644
--- a/src/widgets/itemviews/qtableview.h
+++ b/src/widgets/itemviews/qtableview.h
@@ -62,13 +62,13 @@ class Q_WIDGETS_EXPORT QTableView : public QAbstractItemView
#endif
public:
- explicit QTableView(QWidget *parent = Q_NULLPTR);
+ explicit QTableView(QWidget *parent = nullptr);
~QTableView();
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
- void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
- void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
- void doItemsLayout() Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) override;
+ void setRootIndex(const QModelIndex &index) override;
+ void setSelectionModel(QItemSelectionModel *selectionModel) override;
+ void doItemsLayout() override;
QHeaderView *horizontalHeader() const;
QHeaderView *verticalHeader() const;
@@ -109,9 +109,9 @@ public:
bool isCornerButtonEnabled() const;
#endif
- QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
- QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
+ QRect visualRect(const QModelIndex &index) const override;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
+ QModelIndex indexAt(const QPoint &p) const override;
void setSpan(int row, int column, int rowSpan, int columnSpan);
int rowSpan(int row, int column) const;
@@ -144,37 +144,37 @@ protected Q_SLOTS:
protected:
QTableView(QTableViewPrivate &, QWidget *parent);
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) override;
- QStyleOptionViewItem viewOptions() const Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ QStyleOptionViewItem viewOptions() const override;
+ void paintEvent(QPaintEvent *e) override;
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *event) override;
- int horizontalOffset() const Q_DECL_OVERRIDE;
- int verticalOffset() const Q_DECL_OVERRIDE;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
+ int horizontalOffset() const override;
+ int verticalOffset() const override;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override;
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
- QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
- QModelIndexList selectedIndexes() const Q_DECL_OVERRIDE;
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const override;
+ QModelIndexList selectedIndexes() const override;
- void updateGeometries() Q_DECL_OVERRIDE;
+ void updateGeometries() override;
- QSize viewportSizeHint() const Q_DECL_OVERRIDE;
+ QSize viewportSizeHint() const override;
- int sizeHintForRow(int row) const Q_DECL_OVERRIDE;
- int sizeHintForColumn(int column) const Q_DECL_OVERRIDE;
+ int sizeHintForRow(int row) const override;
+ int sizeHintForColumn(int column) const override;
- void verticalScrollbarAction(int action) Q_DECL_OVERRIDE;
- void horizontalScrollbarAction(int action) Q_DECL_OVERRIDE;
+ void verticalScrollbarAction(int action) override;
+ void horizontalScrollbarAction(int action) override;
- bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool isIndexHidden(const QModelIndex &index) const override;
void selectionChanged(const QItemSelection &selected,
- const QItemSelection &deselected) Q_DECL_OVERRIDE;
+ const QItemSelection &deselected) override;
void currentChanged(const QModelIndex &current,
- const QModelIndex &previous) Q_DECL_OVERRIDE;
+ const QModelIndex &previous) override;
private:
friend class QAccessibleItemView;
diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp
index 892a8d3a22..1cb88cbeeb 100644
--- a/src/widgets/itemviews/qtablewidget.cpp
+++ b/src/widgets/itemviews/qtablewidget.cpp
@@ -2655,14 +2655,28 @@ QList<QTableWidgetItem*> QTableWidget::items(const QMimeData *data) const
/*!
Returns the QModelIndex associated with the given \a item.
+
+ \note In Qt versions prior to 5.10, this function took a non-\c{const} \a item.
*/
-QModelIndex QTableWidget::indexFromItem(QTableWidgetItem *item) const
+QModelIndex QTableWidget::indexFromItem(const QTableWidgetItem *item) const
{
Q_D(const QTableWidget);
return d->tableModel()->index(item);
}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+/*!
+ \internal
+ \obsolete
+ \overload
+*/
+QModelIndex QTableWidget::indexFromItem(QTableWidgetItem *item) const
+{
+ return indexFromItem(const_cast<const QTableWidgetItem *>(item));
+}
+#endif
+
/*!
Returns a pointer to the QTableWidgetItem associated with the given \a index.
*/
diff --git a/src/widgets/itemviews/qtablewidget.h b/src/widgets/itemviews/qtablewidget.h
index 9c231d5127..7322e3aed7 100644
--- a/src/widgets/itemviews/qtablewidget.h
+++ b/src/widgets/itemviews/qtablewidget.h
@@ -219,8 +219,8 @@ class Q_WIDGETS_EXPORT QTableWidget : public QTableView
friend class QTableModel;
public:
- explicit QTableWidget(QWidget *parent = Q_NULLPTR);
- QTableWidget(int rows, int columns, QWidget *parent = Q_NULLPTR);
+ explicit QTableWidget(QWidget *parent = nullptr);
+ QTableWidget(int rows, int columns, QWidget *parent = nullptr);
~QTableWidget();
void setRowCount(int rows);
@@ -318,7 +318,7 @@ Q_SIGNALS:
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
virtual QStringList mimeTypes() const;
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
virtual QMimeData *mimeData(const QList<QTableWidgetItem *> &items) const;
@@ -335,15 +335,18 @@ protected:
#endif
QList<QTableWidgetItem*> items(const QMimeData *data) const;
- QModelIndex indexFromItem(QTableWidgetItem *item) const;
+ QModelIndex indexFromItem(const QTableWidgetItem *item) const;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+ QModelIndex indexFromItem(QTableWidgetItem *item) const; // ### Qt 6: remove
+#endif
QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
protected:
#if QT_CONFIG(draganddrop)
- void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *event) override;
#endif
private:
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) override;
Q_DECLARE_PRIVATE(QTableWidget)
Q_DISABLE_COPY(QTableWidget)
@@ -360,7 +363,7 @@ private:
};
inline void QTableWidget::removeCellWidget(int arow, int acolumn)
-{ setCellWidget(arow, acolumn, Q_NULLPTR); }
+{ setCellWidget(arow, acolumn, nullptr); }
inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const
{ return itemAt(QPoint(ax, ay)); }
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp
index 6892a5aba1..ebeefad682 100644
--- a/src/widgets/itemviews/qtreeview.cpp
+++ b/src/widgets/itemviews/qtreeview.cpp
@@ -311,7 +311,7 @@ void QTreeView::setHeader(QHeaderView *header)
delete d->header;
d->header = header;
d->header->setParent(this);
- d->header->d_func()->setAllowUserMoveOfSection0(false);
+ d->header->setFirstSectionMovable(false);
if (!d->header->model()) {
d->header->setModel(d->model);
@@ -4006,6 +4006,27 @@ int QTreeView::visualIndex(const QModelIndex &index) const
return d->viewIndex(index);
}
+/*!
+ \internal
+*/
+
+void QTreeView::verticalScrollbarValueChanged(int value)
+{
+ Q_D(QTreeView);
+ if (!d->viewItems.isEmpty() && value == verticalScrollBar()->maximum()) {
+ QModelIndex ret = d->viewItems.last().index;
+ // Root index will be handled by base class implementation
+ while (ret.isValid()) {
+ if (isExpanded(ret) && d->model->canFetchMore(ret)) {
+ d->model->fetchMore(ret);
+ break;
+ }
+ ret = ret.parent();
+ }
+ }
+ QAbstractItemView::verticalScrollbarValueChanged(value);
+}
+
QT_END_NAMESPACE
#include "moc_qtreeview.cpp"
diff --git a/src/widgets/itemviews/qtreeview.h b/src/widgets/itemviews/qtreeview.h
index c32c127cd1..e7ee55aa2a 100644
--- a/src/widgets/itemviews/qtreeview.h
+++ b/src/widgets/itemviews/qtreeview.h
@@ -68,12 +68,12 @@ class Q_WIDGETS_EXPORT QTreeView : public QAbstractItemView
Q_PROPERTY(bool expandsOnDoubleClick READ expandsOnDoubleClick WRITE setExpandsOnDoubleClick)
public:
- explicit QTreeView(QWidget *parent = Q_NULLPTR);
+ explicit QTreeView(QWidget *parent = nullptr);
~QTreeView();
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
- void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
- void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) override;
+ void setRootIndex(const QModelIndex &index) override;
+ void setSelectionModel(QItemSelectionModel *selectionModel) override;
QHeaderView *header() const;
void setHeader(QHeaderView *header);
@@ -132,21 +132,21 @@ public:
void setTreePosition(int logicalIndex);
int treePosition() const;
- void keyboardSearch(const QString &search) Q_DECL_OVERRIDE;
+ void keyboardSearch(const QString &search) override;
- QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
- QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
+ QRect visualRect(const QModelIndex &index) const override;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
+ QModelIndex indexAt(const QPoint &p) const override;
QModelIndex indexAbove(const QModelIndex &index) const;
QModelIndex indexBelow(const QModelIndex &index) const;
- void doItemsLayout() Q_DECL_OVERRIDE;
- void reset() Q_DECL_OVERRIDE;
+ void doItemsLayout() override;
+ void reset() override;
void sortByColumn(int column, Qt::SortOrder order);
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) Q_DECL_OVERRIDE;
- void selectAll() Q_DECL_OVERRIDE;
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) override;
+ void selectAll() override;
Q_SIGNALS:
void expanded(const QModelIndex &index);
@@ -169,23 +169,24 @@ protected Q_SLOTS:
void columnMoved();
void reexpand();
void rowsRemoved(const QModelIndex &parent, int first, int last);
+ void verticalScrollbarValueChanged(int value) override;
protected:
- QTreeView(QTreeViewPrivate &dd, QWidget *parent = Q_NULLPTR);
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
- void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
- void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ QTreeView(QTreeViewPrivate &dd, QWidget *parent = nullptr);
+ void scrollContentsBy(int dx, int dy) override;
+ void rowsInserted(const QModelIndex &parent, int start, int end) override;
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
- int horizontalOffset() const Q_DECL_OVERRIDE;
- int verticalOffset() const Q_DECL_OVERRIDE;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override;
+ int horizontalOffset() const override;
+ int verticalOffset() const override;
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
- QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
- QModelIndexList selectedIndexes() const Q_DECL_OVERRIDE;
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) override;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const override;
+ QModelIndexList selectedIndexes() const override;
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
void drawTree(QPainter *painter, const QRegion &region) const;
virtual void drawRow(QPainter *painter,
@@ -195,30 +196,30 @@ protected:
const QRect &rect,
const QModelIndex &index) const;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void keyPressEvent(QKeyEvent *event) override;
#ifndef QT_NO_DRAGANDDROP
- void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *event) override;
#endif
- bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
+ bool viewportEvent(QEvent *event) override;
- void updateGeometries() Q_DECL_OVERRIDE;
+ void updateGeometries() override;
- QSize viewportSizeHint() const Q_DECL_OVERRIDE;
+ QSize viewportSizeHint() const override;
- int sizeHintForColumn(int column) const Q_DECL_OVERRIDE;
+ int sizeHintForColumn(int column) const override;
int indexRowSizeHint(const QModelIndex &index) const;
int rowHeight(const QModelIndex &index) const;
- void horizontalScrollbarAction(int action) Q_DECL_OVERRIDE;
+ void horizontalScrollbarAction(int action) override;
- bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool isIndexHidden(const QModelIndex &index) const override;
void selectionChanged(const QItemSelection &selected,
- const QItemSelection &deselected) Q_DECL_OVERRIDE;
- void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
+ const QItemSelection &deselected) override;
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) override;
private:
friend class ::tst_QTreeView;
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp
index b253abac73..de7f7c0b77 100644
--- a/src/widgets/itemviews/qtreewidget.cpp
+++ b/src/widgets/itemviews/qtreewidget.cpp
@@ -145,7 +145,7 @@ QTreeModel::QTreeModel(QTreeModelPrivate &dd, QTreeWidget *parent)
QTreeModel::~QTreeModel()
{
clear();
- headerItem->view = Q_NULLPTR;
+ headerItem->view = nullptr;
delete headerItem;
rootItem->view = 0;
delete rootItem;
@@ -2012,6 +2012,9 @@ void QTreeWidgetItem::addChildren(const QList<QTreeWidgetItem*> &children)
*/
void QTreeWidgetItem::insertChildren(int index, const QList<QTreeWidgetItem*> &children)
{
+ if (index < 0 || index > this->children.count() || children.isEmpty())
+ return;
+
if (view && view->isSortingEnabled()) {
for (int n = 0; n < children.count(); ++n)
insertChild(index, children.at(n));
@@ -2729,14 +2732,14 @@ void QTreeWidget::setHeaderItem(QTreeWidgetItem *item)
int oldCount = columnCount();
if (oldCount < item->columnCount())
- d->treeModel()->beginInsertColumns(QModelIndex(), oldCount, item->columnCount());
- else
- d->treeModel()->beginRemoveColumns(QModelIndex(), item->columnCount(), oldCount);
+ d->treeModel()->beginInsertColumns(QModelIndex(), oldCount, item->columnCount() - 1);
+ else if (oldCount > item->columnCount())
+ d->treeModel()->beginRemoveColumns(QModelIndex(), item->columnCount(), oldCount - 1);
delete d->treeModel()->headerItem;
d->treeModel()->headerItem = item;
if (oldCount < item->columnCount())
d->treeModel()->endInsertColumns();
- else
+ else if (oldCount > item->columnCount())
d->treeModel()->endRemoveColumns();
d->treeModel()->headerDataChanged(Qt::Horizontal, 0, oldCount);
}
@@ -2859,11 +2862,11 @@ QRect QTreeWidget::visualItemRect(const QTreeWidgetItem *item) const
Q_D(const QTreeWidget);
//the visual rect for an item is across all columns. So we need to determine
//what is the first and last column and get their visual index rects
- QModelIndex base = d->index(item);
+ const QModelIndex base = d->index(item);
const int firstVisiblesection = header()->logicalIndexAt(- header()->offset());
const int lastVisibleSection = header()->logicalIndexAt(header()->length() - header()->offset() - 1);
- QModelIndex first = base.sibling(base.row(), header()->logicalIndex(firstVisiblesection));
- QModelIndex last = base.sibling(base.row(), header()->logicalIndex(lastVisibleSection));
+ const QModelIndex first = base.sibling(base.row(), firstVisiblesection);
+ const QModelIndex last = base.sibling(base.row(), lastVisibleSection);
return visualRect(first) | visualRect(last);
}
@@ -3369,6 +3372,7 @@ QModelIndex QTreeWidget::indexFromItem(const QTreeWidgetItem *item, int column)
return d->index(item, column);
}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
/*!
\overload
\internal
@@ -3377,6 +3381,7 @@ QModelIndex QTreeWidget::indexFromItem(QTreeWidgetItem *item, int column) const
{
return indexFromItem(const_cast<const QTreeWidgetItem *>(item), column);
}
+#endif
/*!
Returns a pointer to the QTreeWidgetItem associated with the given \a index.
diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h
index 783627cde9..a31af0428a 100644
--- a/src/widgets/itemviews/qtreewidget.h
+++ b/src/widgets/itemviews/qtreewidget.h
@@ -178,7 +178,7 @@ public:
inline QTreeWidgetItem *parent() const { return par; }
inline QTreeWidgetItem *child(int index) const {
if (index < 0 || index >= children.size())
- return Q_NULLPTR;
+ return nullptr;
executePendingSort();
return children.at(index);
}
@@ -261,7 +261,7 @@ class Q_WIDGETS_EXPORT QTreeWidget : public QTreeView
friend class QTreeModel;
friend class QTreeWidgetItem;
public:
- explicit QTreeWidget(QWidget *parent = Q_NULLPTR);
+ explicit QTreeWidget(QWidget *parent = nullptr);
~QTreeWidget();
int columnCount() const;
@@ -324,7 +324,7 @@ public:
QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
- void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
+ void setSelectionModel(QItemSelectionModel *selectionModel) override;
public Q_SLOTS:
void scrollToItem(const QTreeWidgetItem *item,
@@ -346,7 +346,7 @@ Q_SIGNALS:
void itemSelectionChanged();
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
virtual QStringList mimeTypes() const;
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
virtual QMimeData *mimeData(const QList<QTreeWidgetItem *> &items) const;
@@ -365,15 +365,17 @@ protected:
QList<QTreeWidgetItem*> items(const QMimeData *data) const;
QModelIndex indexFromItem(const QTreeWidgetItem *item, int column = 0) const;
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const; // ### Qt 6: remove
+#endif
QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
protected:
#if QT_CONFIG(draganddrop)
- void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *event) override;
#endif
private:
- void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) override;
Q_DECLARE_PRIVATE(QTreeWidget)
Q_DISABLE_COPY(QTreeWidget)
@@ -393,7 +395,7 @@ private:
};
inline void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)
-{ setItemWidget(item, column, Q_NULLPTR); }
+{ setItemWidget(item, column, nullptr); }
inline QTreeWidgetItem *QTreeWidget::itemAt(int ax, int ay) const
{ return itemAt(QPoint(ax, ay)); }
diff --git a/src/widgets/itemviews/qtreewidget_p.h b/src/widgets/itemviews/qtreewidget_p.h
index 7aa4daefc0..f4625842ef 100644
--- a/src/widgets/itemviews/qtreewidget_p.h
+++ b/src/widgets/itemviews/qtreewidget_p.h
@@ -91,24 +91,24 @@ public:
void itemChanged(QTreeWidgetItem *item);
QModelIndex index(const QTreeWidgetItem *item, int column) const;
- QModelIndex index(int row, int column, const QModelIndex &parent) const Q_DECL_OVERRIDE;
- QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex &parent) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ bool hasChildren(const QModelIndex &parent) const override;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role) override;
- QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QMap<int, QVariant> itemData(const QModelIndex &index) const override;
- QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
- int role) Q_DECL_OVERRIDE;
+ int role) override;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- void sort(int column, Qt::SortOrder order) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order) override;
void ensureSorted(int column, Qt::SortOrder order,
int start, int end, const QModelIndex &parent);
static bool itemLessThan(const QPair<QTreeWidgetItem*,int> &left,
@@ -120,17 +120,17 @@ public:
const QList<QTreeWidgetItem*>::iterator &end,
Qt::SortOrder order, QTreeWidgetItem *item);
- bool insertRows(int row, int count, const QModelIndex &) Q_DECL_OVERRIDE;
- bool insertColumns(int column, int count, const QModelIndex &) Q_DECL_OVERRIDE;
+ bool insertRows(int row, int count, const QModelIndex &) override;
+ bool insertColumns(int column, int count, const QModelIndex &) override;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
// dnd
- QStringList mimeTypes() const Q_DECL_OVERRIDE;
- QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ QStringList mimeTypes() const override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
- Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
+ int row, int column, const QModelIndex &parent) override;
+ Qt::DropActions supportedDropActions() const override;
QMimeData *internalMimeData() const;
@@ -145,7 +145,7 @@ protected:
void beginRemoveItems(QTreeWidgetItem *parent, int row, int count);
void endRemoveItems();
void sortItems(QList<QTreeWidgetItem*> *items, int column, Qt::SortOrder order);
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
private:
QTreeWidgetItem *rootItem;
diff --git a/src/widgets/kernel/mac.pri b/src/widgets/kernel/mac.pri
index 8c694c5e05..f7e7aa869a 100644
--- a/src/widgets/kernel/mac.pri
+++ b/src/widgets/kernel/mac.pri
@@ -1,4 +1,4 @@
-!x11:osx {
+macos {
LIBS_PRIVATE += -framework AppKit -lz
*-mwerks:INCLUDEPATH += compat
}
diff --git a/src/widgets/kernel/qaction.cpp b/src/widgets/kernel/qaction.cpp
index a48eb90048..8c8217bb75 100644
--- a/src/widgets/kernel/qaction.cpp
+++ b/src/widgets/kernel/qaction.cpp
@@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE
*/
static QString qt_strippedText(QString s)
{
- s.remove(QStringLiteral("..."));
+ s.remove(QLatin1String("..."));
for (int i = 0; i < s.size(); ++i) {
if (s.at(i) == QLatin1Char('&'))
s.remove(i, 1);
@@ -1332,9 +1332,8 @@ bool QAction::isShortcutVisibleInContextMenu() const
{
Q_D(const QAction);
if (d->shortcutVisibleInContextMenu == -1) {
- if (QApplication::instance()->testAttribute(Qt::AA_DontShowShortcutsInContextMenus))
- return false;
- return qApp->styleHints()->showShortcutsInContextMenus();
+ return !QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus)
+ && QGuiApplication::styleHints()->showShortcutsInContextMenus();
}
return d->shortcutVisibleInContextMenu;
}
diff --git a/src/widgets/kernel/qaction.h b/src/widgets/kernel/qaction.h
index e1d431100e..84bf92d2ac 100644
--- a/src/widgets/kernel/qaction.h
+++ b/src/widgets/kernel/qaction.h
@@ -161,7 +161,7 @@ public:
enum ActionEvent { Trigger, Hover };
void activate(ActionEvent event);
- bool showStatusText(QWidget *widget = Q_NULLPTR);
+ bool showStatusText(QWidget *widget = nullptr);
void setMenuRole(MenuRole menuRole);
MenuRole menuRole() const;
@@ -180,7 +180,7 @@ public:
#endif
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
QAction(QActionPrivate &dd, QObject *parent);
public Q_SLOTS:
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index 0a12d1f6cf..b855e32f2d 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -152,20 +152,6 @@ static void clearSystemPalette()
QApplicationPrivate::sys_pal = 0;
}
-static QByteArray get_style_class_name()
-{
- QScopedPointer<QStyle> s(QStyleFactory::create(QApplicationPrivate::desktopStyleKey()));
- if (!s.isNull())
- return s->metaObject()->className();
- return QByteArray();
-}
-
-static QByteArray nativeStyleClassName()
-{
- static QByteArray name = get_style_class_name();
- return name;
-}
-
bool QApplicationPrivate::autoSipEnabled = true;
QApplicationPrivate::QApplicationPrivate(int &argc, char **argv, int flags)
@@ -395,8 +381,6 @@ void qt_init_tooltip_palette();
void qt_cleanup();
QStyle *QApplicationPrivate::app_style = 0; // default application style
-bool QApplicationPrivate::overrides_native_style = false; // whether native QApplication style is
- // overridden, i.e. not native
#ifndef QT_NO_STYLE_STYLESHEET
QString QApplicationPrivate::styleSheet; // default application stylesheet
#endif
@@ -1091,8 +1075,6 @@ QStyle *QApplication::style()
Q_ASSERT(!"No styles available!");
return 0;
}
- QApplicationPrivate::overrides_native_style =
- app_style->objectName() != QApplicationPrivate::desktopStyleKey();
}
// take ownership of the style
QApplicationPrivate::app_style->setParent(qApp);
@@ -1157,9 +1139,6 @@ void QApplication::setStyle(QStyle *style)
QStyle *old = QApplicationPrivate::app_style; // save
- QApplicationPrivate::overrides_native_style =
- nativeStyleClassName() == QByteArray(style->metaObject()->className());
-
#ifndef QT_NO_STYLE_STYLESHEET
if (!QApplicationPrivate::styleSheet.isEmpty() && !qobject_cast<QStyleSheetStyle *>(style)) {
// we have a stylesheet already and a new style is being set
@@ -2804,7 +2783,7 @@ void QApplicationPrivate::sendSyntheticEnterLeave(QWidget *widget)
*/
QDesktopWidget *QApplication::desktop()
{
- CHECK_QAPP_INSTANCE(Q_NULLPTR)
+ CHECK_QAPP_INSTANCE(nullptr)
if (!qt_desktopWidget || // not created yet
!(qt_desktopWidget->windowType() == Qt::Desktop)) { // reparented away
qt_desktopWidget = new QDesktopWidget();
@@ -3078,7 +3057,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
case QEvent::MouseButtonRelease:
case QEvent::MouseButtonDblClick:
d->toolTipFallAsleep.stop();
- // fall-through
+ Q_FALLTHROUGH();
case QEvent::Leave:
d->toolTipWakeUp.stop();
default:
@@ -3284,7 +3263,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
// sequence, so we reset wheel_widget in case no one accepts the event
// or if we didn't get (or missed) a ScrollEnd previously.
if (spontaneous && phase == Qt::ScrollBegin)
- QApplicationPrivate::wheel_widget = Q_NULLPTR;
+ QApplicationPrivate::wheel_widget = nullptr;
const QPoint &relpos = wheel->pos();
@@ -3334,7 +3313,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
d->notify_helper(QApplicationPrivate::wheel_widget, &we);
wheel->setAccepted(we.isAccepted());
if (phase == Qt::ScrollEnd)
- QApplicationPrivate::wheel_widget = Q_NULLPTR;
+ QApplicationPrivate::wheel_widget = nullptr;
}
}
break;
diff --git a/src/widgets/kernel/qapplication.h b/src/widgets/kernel/qapplication.h
index 396d0c9474..7a5d7ba1a9 100644
--- a/src/widgets/kernel/qapplication.h
+++ b/src/widgets/kernel/qapplication.h
@@ -110,11 +110,11 @@ public:
using QGuiApplication::palette;
static QPalette palette(const QWidget *);
static QPalette palette(const char *className);
- static void setPalette(const QPalette &, const char* className = Q_NULLPTR);
+ static void setPalette(const QPalette &, const char* className = nullptr);
static QFont font();
static QFont font(const QWidget*);
static QFont font(const char *className);
- static void setFont(const QFont &, const char* className = Q_NULLPTR);
+ static void setFont(const QFont &, const char* className = nullptr);
static QFontMetrics fontMetrics();
#if QT_VERSION < 0x060000 // remove these forwarders in Qt 6
@@ -177,7 +177,7 @@ public:
#endif
static int exec();
- bool notify(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool notify(QObject *, QEvent *) override;
#ifdef QT_KEYPAD_NAVIGATION
static Q_DECL_DEPRECATED void setKeypadNavigationEnabled(bool);
@@ -201,8 +201,8 @@ public Q_SLOTS:
static void aboutQt();
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
- bool compressEvent(QEvent *, QObject *receiver, QPostEventList *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
+ bool compressEvent(QEvent *, QObject *receiver, QPostEventList *) override;
private:
Q_DISABLE_COPY(QApplication)
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 5dca2e85f1..9983cc7d9e 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -106,11 +106,11 @@ public:
QApplicationPrivate(int &argc, char **argv, int flags);
~QApplicationPrivate();
- virtual void notifyLayoutDirectionChange() Q_DECL_OVERRIDE;
- virtual void notifyActiveWindowChange(QWindow *) Q_DECL_OVERRIDE;
+ virtual void notifyLayoutDirectionChange() override;
+ virtual void notifyActiveWindowChange(QWindow *) override;
- virtual bool shouldQuit() Q_DECL_OVERRIDE;
- bool tryCloseAllWindows() Q_DECL_OVERRIDE;
+ virtual bool shouldQuit() override;
+ bool tryCloseAllWindows() override;
#if 0 // Used to be included in Qt4 for Q_WS_X11
#ifndef QT_NO_SETTINGS
@@ -122,13 +122,13 @@ public:
static QString desktopStyleKey();
- void createEventDispatcher() Q_DECL_OVERRIDE;
+ void createEventDispatcher() override;
static void dispatchEnterLeave(QWidget *enter, QWidget *leave, const QPointF &globalPosF);
- void notifyWindowIconChanged() Q_DECL_OVERRIDE;
+ void notifyWindowIconChanged() override;
//modality
- bool isWindowBlocked(QWindow *window, QWindow **blockingWindow = 0) const Q_DECL_OVERRIDE;
+ bool isWindowBlocked(QWindow *window, QWindow **blockingWindow = 0) const override;
static bool isBlockedByModal(QWidget *widget);
static bool modalState();
static bool tryModalHelper(QWidget *widget, QWidget **rettop = 0);
@@ -137,12 +137,6 @@ public:
bool canQuit();
#endif
- //style
- static bool usesNativeStyle()
- {
- return !overrides_native_style;
- }
-
bool notify_helper(QObject *receiver, QEvent * e);
void init(
@@ -158,7 +152,7 @@ public:
#endif
static bool inPopupMode();
- bool popupActive() Q_DECL_OVERRIDE { return inPopupMode(); }
+ bool popupActive() override { return inPopupMode(); }
void closePopup(QWidget *popup);
void openPopup(QWidget *popup);
static void setFocusWidget(QWidget *focus, Qt::FocusReason reason);
@@ -178,14 +172,13 @@ public:
static QSize app_strut;
static QWidgetList *popupWidgets;
static QStyle *app_style;
- static bool overrides_native_style;
static QPalette *sys_pal;
static QPalette *set_pal;
protected:
- void notifyThemeChanged() Q_DECL_OVERRIDE;
+ void notifyThemeChanged() override;
#ifndef QT_NO_DRAGANDDROP
- void notifyDragStarted(const QDrag *) Q_DECL_OVERRIDE;
+ void notifyDragStarted(const QDrag *) override;
#endif // QT_NO_DRAGANDDROP
public:
@@ -284,7 +277,7 @@ public:
ulong timestamp);
static void translateTouchCancel(QTouchDevice *device, ulong timestamp);
- QPixmap applyQIconStyleHelper(QIcon::Mode mode, const QPixmap& base) const Q_DECL_OVERRIDE;
+ QPixmap applyQIconStyleHelper(QIcon::Mode mode, const QPixmap& base) const override;
private:
static QApplicationPrivate *self;
static bool tryCloseAllWidgetWindows(QWindowList *processedWindows);
diff --git a/src/widgets/kernel/qboxlayout.cpp b/src/widgets/kernel/qboxlayout.cpp
index 588cec2b95..a368f379ad 100644
--- a/src/widgets/kernel/qboxlayout.cpp
+++ b/src/widgets/kernel/qboxlayout.cpp
@@ -124,7 +124,7 @@ public:
void calcHfw(int);
void effectiveMargins(int *left, int *top, int *right, int *bottom) const;
- QLayoutItem* replaceAt(int index, QLayoutItem*) Q_DECL_OVERRIDE;
+ QLayoutItem* replaceAt(int index, QLayoutItem*) override;
};
QBoxLayoutPrivate::~QBoxLayoutPrivate()
diff --git a/src/widgets/kernel/qboxlayout.h b/src/widgets/kernel/qboxlayout.h
index 9c7d0e593f..6bb8f8aafa 100644
--- a/src/widgets/kernel/qboxlayout.h
+++ b/src/widgets/kernel/qboxlayout.h
@@ -61,7 +61,7 @@ public:
enum Direction { LeftToRight, RightToLeft, TopToBottom, BottomToTop,
Down = TopToBottom, Up = BottomToTop };
- explicit QBoxLayout(Direction, QWidget *parent = Q_NULLPTR);
+ explicit QBoxLayout(Direction, QWidget *parent = nullptr);
~QBoxLayout();
@@ -74,7 +74,7 @@ public:
void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = Qt::Alignment());
void addLayout(QLayout *layout, int stretch = 0);
void addStrut(int);
- void addItem(QLayoutItem *) Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *) override;
void insertSpacing(int index, int size);
void insertStretch(int index, int stretch = 0);
@@ -91,20 +91,20 @@ public:
void setStretch(int index, int stretch);
int stretch(int index) const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize maximumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSize() const override;
+ QSize maximumSize() const override;
- bool hasHeightForWidth() const Q_DECL_OVERRIDE;
- int heightForWidth(int) const Q_DECL_OVERRIDE;
- int minimumHeightForWidth(int) const Q_DECL_OVERRIDE;
+ bool hasHeightForWidth() const override;
+ int heightForWidth(int) const override;
+ int minimumHeightForWidth(int) const override;
- Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
- void invalidate() Q_DECL_OVERRIDE;
- QLayoutItem *itemAt(int) const Q_DECL_OVERRIDE;
- QLayoutItem *takeAt(int) Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
- void setGeometry(const QRect&) Q_DECL_OVERRIDE;
+ Qt::Orientations expandingDirections() const override;
+ void invalidate() override;
+ QLayoutItem *itemAt(int) const override;
+ QLayoutItem *takeAt(int) override;
+ int count() const override;
+ void setGeometry(const QRect&) override;
private:
Q_DISABLE_COPY(QBoxLayout)
diff --git a/src/widgets/kernel/qdesktopwidget.cpp b/src/widgets/kernel/qdesktopwidget.cpp
index 1b9cf88efe..5fb7882932 100644
--- a/src/widgets/kernel/qdesktopwidget.cpp
+++ b/src/widgets/kernel/qdesktopwidget.cpp
@@ -50,7 +50,7 @@
QT_BEGIN_NAMESPACE
QDesktopScreenWidget::QDesktopScreenWidget(QScreen *screen, const QRect &geometry)
- : QWidget(Q_NULLPTR, Qt::Desktop), m_screen(screen)
+ : QWidget(nullptr, Qt::Desktop), m_screen(screen)
{
setVisible(false);
if (QWindow *winHandle = windowHandle())
@@ -114,7 +114,7 @@ QDesktopScreenWidget *QDesktopWidgetPrivate::widgetForScreen(QScreen *qScreen) c
if (widget->screen() == qScreen)
return widget;
}
- return Q_NULLPTR;
+ return nullptr;
}
void QDesktopWidgetPrivate::_q_updateScreens()
@@ -176,17 +176,26 @@ void QDesktopWidgetPrivate::_q_updateScreens()
// Notice that we trigger screenCountChanged even if a screen was removed and another one added,
// in which case the total number of screens did not change. This is the only way for applications
// to notice that a screen was swapped out against another one.
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit q->screenCountChanged(targetLength);
+QT_WARNING_POP
}
foreach (int changedScreen, changedScreens)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit q->resized(changedScreen);
+QT_WARNING_POP
}
void QDesktopWidgetPrivate::_q_availableGeometryChanged()
{
Q_Q(QDesktopWidget);
if (QScreen *screen = qobject_cast<QScreen *>(q->sender()))
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
emit q->workAreaResized(QGuiApplication::screens().indexOf(screen));
+QT_WARNING_POP
}
QDesktopWidget::QDesktopWidget()
@@ -268,13 +277,8 @@ const QRect QDesktopWidget::availableGeometry(int screenNo) const
const QRect QDesktopWidgetPrivate::availableGeometry(int screenNo)
{
- QList<QScreen *> screens = QGuiApplication::screens();
- if (screenNo == -1)
- screenNo = 0;
- if (screenNo < 0 || screenNo >= screens.size())
- return QRect();
- else
- return screens.at(screenNo)->availableGeometry();
+ const QScreen *screen = QDesktopWidgetPrivate::screen(screenNo);
+ return screen ? screen->availableGeometry() : QRect();
}
const QRect QDesktopWidget::screenGeometry(int screenNo) const
@@ -284,13 +288,8 @@ const QRect QDesktopWidget::screenGeometry(int screenNo) const
const QRect QDesktopWidgetPrivate::screenGeometry(int screenNo)
{
- QList<QScreen *> screens = QGuiApplication::screens();
- if (screenNo == -1)
- screenNo = 0;
- if (screenNo < 0 || screenNo >= screens.size())
- return QRect();
- else
- return screens.at(screenNo)->geometry();
+ const QScreen *screen = QDesktopWidgetPrivate::screen(screenNo);
+ return screen ? screen->geometry() : QRect();
}
int QDesktopWidget::screenNumber(const QWidget *w) const
@@ -330,7 +329,7 @@ int QDesktopWidgetPrivate::screenNumber(const QWidget *w)
if (!w->isWindow())
frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0)));
- QScreen *widgetScreen = Q_NULLPTR;
+ QScreen *widgetScreen = nullptr;
int largestArea = 0;
foreach (QScreen *screen, screens) {
const QRect deviceIndependentScreenGeometry =
@@ -356,6 +355,16 @@ int QDesktopWidgetPrivate::screenNumber(const QPoint &p)
return screen ? QGuiApplication::screens().indexOf(screen) : primaryScreen();
}
+QScreen *QDesktopWidgetPrivate::screen(int screenNo)
+{
+ QList<QScreen *> screens = QGuiApplication::screens();
+ if (screenNo == -1)
+ screenNo = 0;
+ if (screenNo < 0 || screenNo >= screens.size())
+ return nullptr;
+ return screens.at(screenNo);
+}
+
void QDesktopWidget::resizeEvent(QResizeEvent *)
{
}
diff --git a/src/widgets/kernel/qdesktopwidget.h b/src/widgets/kernel/qdesktopwidget.h
index 64e1c568eb..f53d0fe9bb 100644
--- a/src/widgets/kernel/qdesktopwidget.h
+++ b/src/widgets/kernel/qdesktopwidget.h
@@ -59,35 +59,48 @@ public:
QDesktopWidget();
~QDesktopWidget();
- bool isVirtualDesktop() const;
+ int screenNumber(const QWidget *widget = nullptr) const;
+ const QRect screenGeometry(const QWidget *widget) const;
+ const QRect availableGeometry(const QWidget *widget) const;
- int numScreens() const;
- int screenCount() const;
- int primaryScreen() const;
+#if QT_DEPRECATED_SINCE(5, 11)
+ QT_DEPRECATED_X("Use QScreen::virtualSiblings() of primary screen") bool isVirtualDesktop() const;
- int screenNumber(const QWidget *widget = Q_NULLPTR) const;
- int screenNumber(const QPoint &) const;
+ QT_DEPRECATED_X("Use QGuiApplication::screens()") int numScreens() const;
+ QT_DEPRECATED_X("Use QGuiApplication::screens()") int screenCount() const;
+ QT_DEPRECATED_X("Use QGuiApplication::primaryScreen()") int primaryScreen() const;
- QWidget *screen(int screen = -1);
+ QT_DEPRECATED_X("Use QGuiApplication::screenAt()") int screenNumber(const QPoint &) const;
- const QRect screenGeometry(int screen = -1) const;
- const QRect screenGeometry(const QWidget *widget) const;
- const QRect screenGeometry(const QPoint &point) const
- { return screenGeometry(screenNumber(point)); }
+ QT_DEPRECATED_X("Use QScreen") QWidget *screen(int screen = -1);
- const QRect availableGeometry(int screen = -1) const;
- const QRect availableGeometry(const QWidget *widget) const;
- const QRect availableGeometry(const QPoint &point) const
- { return availableGeometry(screenNumber(point)); }
+ QT_DEPRECATED_X("Use QGuiApplication::screens()") const QRect screenGeometry(int screen = -1) const;
+ QT_DEPRECATED_X("Use QGuiApplication::screenAt()") const QRect screenGeometry(const QPoint &point) const
+ {
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+ return screenGeometry(screenNumber(point));
+QT_WARNING_POP
+ }
+
+ QT_DEPRECATED_X("Use QGuiApplication::screens()") const QRect availableGeometry(int screen = -1) const;
+ QT_DEPRECATED_X("Use QGuiApplication::screenAt()") const QRect availableGeometry(const QPoint &point) const
+ {
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+ return availableGeometry(screenNumber(point));
+QT_WARNING_POP
+ }
Q_SIGNALS:
- void resized(int);
- void workAreaResized(int);
- void screenCountChanged(int);
- void primaryScreenChanged();
+ QT_DEPRECATED_X("Use QScreen::geometryChanged()") void resized(int);
+ QT_DEPRECATED_X("Use QScreen::availableGeometryChanged()") void workAreaResized(int);
+ QT_DEPRECATED_X("Use QGuiApplication::screenAdded/Removed()") void screenCountChanged(int);
+ QT_DEPRECATED_X("Use QGuiApplication::primaryScreenChanged()") void primaryScreenChanged();
+#endif
protected:
- void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *e) override;
private:
Q_DISABLE_COPY(QDesktopWidget)
@@ -100,7 +113,12 @@ private:
};
inline int QDesktopWidget::screenCount() const
-{ return numScreens(); }
+{
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+ return numScreens();
+QT_WARNING_POP
+}
QT_END_NAMESPACE
diff --git a/src/widgets/kernel/qdesktopwidget.qdoc b/src/widgets/kernel/qdesktopwidget.qdoc
index fdf6a27597..dd2d9535ae 100644
--- a/src/widgets/kernel/qdesktopwidget.qdoc
+++ b/src/widgets/kernel/qdesktopwidget.qdoc
@@ -32,6 +32,7 @@
\ingroup advanced
\ingroup desktop
\inmodule QtWidgets
+ \obsolete
Systems with more than one graphics card and monitor can manage the
physical screen space available either as multiple desktops, or as a
@@ -125,7 +126,7 @@
\obsolete
- This function is deprecated. Use screenCount instead.
+ Use QGuiApplication::screens() instead.
\sa primaryScreen
*/
@@ -140,6 +141,10 @@
have the geometry of the entire virtual desktop; i.e., bounding
every \a screen.
+ \obsolete
+
+ Use QScreen instead.
+
\sa primaryScreen, screenCount, virtualDesktop
*/
@@ -152,6 +157,10 @@
on \macos, or the task bar on Windows). The default screen is used if
\a screen is -1.
+ \obsolete
+
+ Use QGuiApplication::screens() instead.
+
\sa screenNumber(), screenGeometry(), QScreen::availableGeometry()
*/
@@ -170,6 +179,10 @@
Returns the available geometry of the screen which contains \a p.
+ \obsolete
+
+ Use QGuiApplication::screenAt() instead.
+
\sa screenGeometry()
*/
@@ -180,6 +193,10 @@
Returns the geometry of the screen with index \a screen. The default
screen is used if \a screen is -1.
+ \obsolete
+
+ Use QGuiApplication::screens() instead.
+
\sa screenNumber()
*/
@@ -195,6 +212,10 @@
\overload
Returns the geometry of the screen which contains \a p.
+
+ \obsolete
+
+ Use QGuiApplication::screenAt() instead.
*/
@@ -214,30 +235,47 @@
Returns the index of the screen that contains the \a point, or the
screen which is the shortest distance from the \a point.
+ \obsolete
+
+ Use QGuiApplication::screenAt() instead.
+
\sa primaryScreen
*/
/*!
\fn void QDesktopWidget::resizeEvent(QResizeEvent *event)
\reimp
+ \internal
*/
/*!
\fn void QDesktopWidget::resized(int screen)
This signal is emitted when the size of \a screen changes.
+
+ \obsolete
+
+ Use QScreen::geometryChanged() instead.
*/
/*!
\fn void QDesktopWidget::workAreaResized(int screen)
This signal is emitted when the work area available on \a screen changes.
+
+ \obsolete
+
+ Use QScreen::availableGeometryChanged() instead.
*/
/*!
\property QDesktopWidget::screenCount
\brief the number of screens currently available on the system.
+ \obsolete
+
+ Use QGuiApplication::screens() instead.
+
\since 4.6
*/
@@ -245,6 +283,10 @@
\property QDesktopWidget::primaryScreen
\brief the index of the screen that is configured to be the primary screen
on the system.
+
+ \obsolete
+
+ Use QGuiApplication::primaryScreen() instead.
*/
/*!
@@ -255,6 +297,10 @@
For virtual desktops, screen() will always return the same widget.
The size of the virtual desktop is the size of this desktop
widget.
+
+ \obsolete
+
+ Use QScreen::virtualSiblings() of primary screen instead.
*/
/*!
@@ -264,6 +310,10 @@
This signal is emitted when the number of screens changes to \a newCount.
+ \obsolete
+
+ Use QGuiApplication::screenAdded and QGuiApplication::screenRemoved() instead.
+
\sa screenCount
*/
@@ -278,5 +328,9 @@
\note This doesn't mean the QDesktopWidget::primaryScreen index will
necessarily be different, but now it will refer to the new primary screen.
+ \obsolete
+
+ Use QGuiApplication::primaryScreenChanged() instead.
+
\sa primaryScreen, screenGeometry()
*/
diff --git a/src/widgets/kernel/qdesktopwidget_p.h b/src/widgets/kernel/qdesktopwidget_p.h
index 7a66661771..69f87337b3 100644
--- a/src/widgets/kernel/qdesktopwidget_p.h
+++ b/src/widgets/kernel/qdesktopwidget_p.h
@@ -100,6 +100,8 @@ public:
static int screenNumber(const QWidget *widget = nullptr);
static int screenNumber(const QPoint &);
+ static QScreen *screen(int screenNo = -1);
+
static const QRect screenGeometry(int screen = -1);
static const QRect screenGeometry(const QWidget *widget);
static const QRect screenGeometry(const QPoint &point)
diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp
index 868ac17b6f..8a5b863bb5 100644
--- a/src/widgets/kernel/qformlayout.cpp
+++ b/src/widgets/kernel/qformlayout.cpp
@@ -224,7 +224,7 @@ public:
int hSpacing;
int vSpacing;
- QLayoutItem* replaceAt(int index, QLayoutItem*) Q_DECL_OVERRIDE;
+ QLayoutItem* replaceAt(int index, QLayoutItem*) override;
};
QFormLayoutPrivate::QFormLayoutPrivate()
diff --git a/src/widgets/kernel/qformlayout.h b/src/widgets/kernel/qformlayout.h
index 5ec27433d3..40424f2a49 100644
--- a/src/widgets/kernel/qformlayout.h
+++ b/src/widgets/kernel/qformlayout.h
@@ -88,7 +88,7 @@ public:
QLayoutItem *fieldItem;
};
- explicit QFormLayout(QWidget *parent = Q_NULLPTR);
+ explicit QFormLayout(QWidget *parent = nullptr);
~QFormLayout();
void setFieldGrowthPolicy(FieldGrowthPolicy policy);
@@ -142,19 +142,19 @@ public:
QWidget *labelForField(QLayout *field) const;
// reimplemented from QLayout
- void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
- QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
-
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- void invalidate() Q_DECL_OVERRIDE;
-
- bool hasHeightForWidth() const Q_DECL_OVERRIDE;
- int heightForWidth(int width) const Q_DECL_OVERRIDE;
- Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *item) override;
+ QLayoutItem *itemAt(int index) const override;
+ QLayoutItem *takeAt(int index) override;
+
+ void setGeometry(const QRect &rect) override;
+ QSize minimumSize() const override;
+ QSize sizeHint() const override;
+ void invalidate() override;
+
+ bool hasHeightForWidth() const override;
+ int heightForWidth(int width) const override;
+ Qt::Orientations expandingDirections() const override;
+ int count() const override;
int rowCount() const;
diff --git a/src/widgets/kernel/qgesture.h b/src/widgets/kernel/qgesture.h
index 1eda611d64..c5b2cee83d 100644
--- a/src/widgets/kernel/qgesture.h
+++ b/src/widgets/kernel/qgesture.h
@@ -70,7 +70,7 @@ class Q_WIDGETS_EXPORT QGesture : public QObject
Q_PROPERTY(bool hasHotSpot READ hasHotSpot)
public:
- explicit QGesture(QObject *parent = Q_NULLPTR);
+ explicit QGesture(QObject *parent = nullptr);
~QGesture();
Qt::GestureType gestureType() const;
@@ -114,7 +114,7 @@ class Q_WIDGETS_EXPORT QPanGesture : public QGesture
Q_PRIVATE_PROPERTY(QPanGesture::d_func(), qreal verticalVelocity READ verticalVelocity WRITE setVerticalVelocity)
public:
- explicit QPanGesture(QObject *parent = Q_NULLPTR);
+ explicit QPanGesture(QObject *parent = nullptr);
~QPanGesture();
QPointF lastOffset() const;
@@ -162,7 +162,7 @@ public:
Q_PROPERTY(QPointF centerPoint READ centerPoint WRITE setCenterPoint)
public:
- explicit QPinchGesture(QObject *parent = Q_NULLPTR);
+ explicit QPinchGesture(QObject *parent = nullptr);
~QPinchGesture();
ChangeFlags totalChangeFlags() const;
@@ -218,7 +218,7 @@ public:
enum SwipeDirection { NoDirection, Left, Right, Up, Down };
Q_ENUM(SwipeDirection)
- explicit QSwipeGesture(QObject *parent = Q_NULLPTR);
+ explicit QSwipeGesture(QObject *parent = nullptr);
~QSwipeGesture();
SwipeDirection horizontalDirection() const;
@@ -239,7 +239,7 @@ class Q_WIDGETS_EXPORT QTapGesture : public QGesture
Q_PROPERTY(QPointF position READ position WRITE setPosition)
public:
- explicit QTapGesture(QObject *parent = Q_NULLPTR);
+ explicit QTapGesture(QObject *parent = nullptr);
~QTapGesture();
QPointF position() const;
@@ -257,7 +257,7 @@ class Q_WIDGETS_EXPORT QTapAndHoldGesture : public QGesture
Q_PROPERTY(QPointF position READ position WRITE setPosition)
public:
- explicit QTapAndHoldGesture(QObject *parent = Q_NULLPTR);
+ explicit QTapAndHoldGesture(QObject *parent = nullptr);
~QTapAndHoldGesture();
QPointF position() const;
diff --git a/src/widgets/kernel/qgesturerecognizer.cpp b/src/widgets/kernel/qgesturerecognizer.cpp
index e7873d455e..65c46a5e56 100644
--- a/src/widgets/kernel/qgesturerecognizer.cpp
+++ b/src/widgets/kernel/qgesturerecognizer.cpp
@@ -193,7 +193,7 @@ void QGestureRecognizer::reset(QGesture *gesture)
}
/*!
- \fn QGestureRecognizer::recognize(QGesture *gesture, QObject *watched, QEvent *event)
+ \fn QGestureRecognizer::Result QGestureRecognizer::recognize(QGesture *gesture, QObject *watched, QEvent *event)
Handles the given \a event for the \a watched object, updating the state of the \a gesture
object as required, and returns a suitable result for the current recognition step.
diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp
index 29df38f19c..db8ef89477 100644
--- a/src/widgets/kernel/qgridlayout.cpp
+++ b/src/widgets/kernel/qgridlayout.cpp
@@ -170,7 +170,7 @@ public:
}
return 0;
}
- QLayoutItem* replaceAt(int index, QLayoutItem *newitem) Q_DECL_OVERRIDE
+ QLayoutItem* replaceAt(int index, QLayoutItem *newitem) override
{
if (!newitem)
return 0;
diff --git a/src/widgets/kernel/qgridlayout.h b/src/widgets/kernel/qgridlayout.h
index 51dd65d181..0283ec2028 100644
--- a/src/widgets/kernel/qgridlayout.h
+++ b/src/widgets/kernel/qgridlayout.h
@@ -66,9 +66,9 @@ public:
~QGridLayout();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize maximumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSize() const override;
+ QSize maximumSize() const override;
void setHorizontalSpacing(int spacing);
int horizontalSpacing() const;
@@ -92,12 +92,12 @@ public:
QRect cellRect(int row, int column) const;
- bool hasHeightForWidth() const Q_DECL_OVERRIDE;
- int heightForWidth(int) const Q_DECL_OVERRIDE;
- int minimumHeightForWidth(int) const Q_DECL_OVERRIDE;
+ bool hasHeightForWidth() const override;
+ int heightForWidth(int) const override;
+ int minimumHeightForWidth(int) const override;
- Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
- void invalidate() Q_DECL_OVERRIDE;
+ Qt::Orientations expandingDirections() const override;
+ void invalidate() override;
inline void addWidget(QWidget *w) { QLayout::addWidget(w); }
void addWidget(QWidget *, int row, int column, Qt::Alignment = Qt::Alignment());
@@ -108,11 +108,11 @@ public:
void setOriginCorner(Qt::Corner);
Qt::Corner originCorner() const;
- QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int index) const override;
QLayoutItem *itemAtPosition(int row, int column) const;
- QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
- void setGeometry(const QRect&) Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int index) override;
+ int count() const override;
+ void setGeometry(const QRect&) override;
void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment = Qt::Alignment());
@@ -120,7 +120,7 @@ public:
void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan) const;
protected:
- void addItem(QLayoutItem *) Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *) override;
private:
Q_DISABLE_COPY(QGridLayout)
diff --git a/src/widgets/kernel/qlayout.h b/src/widgets/kernel/qlayout.h
index 2de12b4f99..bcc33a0811 100644
--- a/src/widgets/kernel/qlayout.h
+++ b/src/widgets/kernel/qlayout.h
@@ -104,8 +104,8 @@ public:
QWidget *parentWidget() const;
- void invalidate() Q_DECL_OVERRIDE;
- QRect geometry() const Q_DECL_OVERRIDE;
+ void invalidate() override;
+ QRect geometry() const override;
bool activate();
void update();
@@ -115,25 +115,25 @@ public:
void removeWidget(QWidget *w);
void removeItem(QLayoutItem *);
- Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize maximumSize() const Q_DECL_OVERRIDE;
- virtual void setGeometry(const QRect&) Q_DECL_OVERRIDE;
+ Qt::Orientations expandingDirections() const override;
+ QSize minimumSize() const override;
+ QSize maximumSize() const override;
+ virtual void setGeometry(const QRect&) override;
virtual QLayoutItem *itemAt(int index) const = 0;
virtual QLayoutItem *takeAt(int index) = 0;
virtual int indexOf(QWidget *) const;
virtual int count() const = 0;
- bool isEmpty() const Q_DECL_OVERRIDE;
- QSizePolicy::ControlTypes controlTypes() const Q_DECL_OVERRIDE;
+ bool isEmpty() const override;
+ QSizePolicy::ControlTypes controlTypes() const override;
- // ### Qt 6 make this function virtual
- QLayoutItem *replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively);
+ QT6_VIRTUAL QLayoutItem *replaceWidget(QWidget *from, QWidget *to,
+ Qt::FindChildOptions options = Qt::FindChildrenRecursively);
int totalHeightForWidth(int w) const;
QSize totalMinimumSize() const;
QSize totalMaximumSize() const;
QSize totalSizeHint() const;
- QLayout *layout() Q_DECL_OVERRIDE;
+ QLayout *layout() override;
void setEnabled(bool);
bool isEnabled() const;
@@ -143,7 +143,7 @@ public:
protected:
void widgetEvent(QEvent *);
- void childEvent(QChildEvent *e) Q_DECL_OVERRIDE;
+ void childEvent(QChildEvent *e) override;
void addChildLayout(QLayout *l);
void addChildWidget(QWidget *w);
bool adoptLayout(QLayout *layout);
diff --git a/src/widgets/kernel/qlayoutitem.cpp b/src/widgets/kernel/qlayoutitem.cpp
index 0bdac43c56..5c4fc20687 100644
--- a/src/widgets/kernel/qlayoutitem.cpp
+++ b/src/widgets/kernel/qlayoutitem.cpp
@@ -400,8 +400,8 @@ int QLayoutItem::minimumHeightForWidth(int w) const
/*!
- Returns the preferred height for this layout item, given the width
- \a w.
+ Returns the preferred height for this layout item, given the
+ width, which is not used in this default implementation.
The default implementation returns -1, indicating that the
preferred height is independent of the width of the item. Using
diff --git a/src/widgets/kernel/qopenglwidget.cpp b/src/widgets/kernel/qopenglwidget.cpp
index 5bc408a8cd..c96b6812c4 100644
--- a/src/widgets/kernel/qopenglwidget.cpp
+++ b/src/widgets/kernel/qopenglwidget.cpp
@@ -381,7 +381,7 @@ QT_BEGIN_NAMESPACE
QOpenGLContext. By connecting a slot, using direct connection, to this signal,
it is possible to perform cleanup whenever the the underlying native context
handle, or the entire QOpenGLContext instance, is going to be released. The
- following snippet is in principal equivalent to the previous one:
+ following snippet is in principle equivalent to the previous one:
\snippet code/doc_gui_widgets_qopenglwidget.cpp 5
@@ -536,8 +536,8 @@ public:
: QOpenGLPaintDevicePrivate(QSize()),
w(widget) { }
- void beginPaint() Q_DECL_OVERRIDE;
- void endPaint() Q_DECL_OVERRIDE;
+ void beginPaint() override;
+ void endPaint() override;
QOpenGLWidget *w;
};
@@ -547,7 +547,7 @@ class QOpenGLWidgetPaintDevice : public QOpenGLPaintDevice
public:
QOpenGLWidgetPaintDevice(QOpenGLWidget *widget)
: QOpenGLPaintDevice(*new QOpenGLWidgetPaintDevicePrivate(widget)) { }
- void ensureActiveTarget() Q_DECL_OVERRIDE;
+ void ensureActiveTarget() override;
};
class QOpenGLWidgetPrivate : public QWidgetPrivate
@@ -576,8 +576,8 @@ public:
void reset();
void recreateFbo();
- GLuint textureId() const Q_DECL_OVERRIDE;
- QPlatformTextureList::Flags textureListFlags() Q_DECL_OVERRIDE;
+ GLuint textureId() const override;
+ QPlatformTextureList::Flags textureListFlags() override;
void initialize();
void invokeUserPaint();
@@ -585,14 +585,14 @@ public:
void invalidateFbo();
- QImage grabFramebuffer() Q_DECL_OVERRIDE;
- void beginBackingStorePainting() Q_DECL_OVERRIDE { inBackingStorePaint = true; }
- void endBackingStorePainting() Q_DECL_OVERRIDE { inBackingStorePaint = false; }
- void beginCompose() Q_DECL_OVERRIDE;
- void endCompose() Q_DECL_OVERRIDE;
- void initializeViewportFramebuffer() Q_DECL_OVERRIDE;
- void resizeViewportFramebuffer() Q_DECL_OVERRIDE;
- void resolveSamples() Q_DECL_OVERRIDE;
+ QImage grabFramebuffer() override;
+ void beginBackingStorePainting() override { inBackingStorePaint = true; }
+ void endBackingStorePainting() override { inBackingStorePaint = false; }
+ void beginCompose() override;
+ void endCompose() override;
+ void initializeViewportFramebuffer() override;
+ void resizeViewportFramebuffer() override;
+ void resolveSamples() override;
QOpenGLContext *context;
QOpenGLFramebufferObject *fbo;
@@ -1429,7 +1429,7 @@ bool QOpenGLWidget::event(QEvent *e)
d->reset();
if (isHidden())
break;
- // FALLTHROUGH
+ Q_FALLTHROUGH();
case QEvent::Show: // reparenting may not lead to a resize so reinitalize on Show too
if (d->initialized && window()->windowHandle()
&& d->context->shareContext() != QWidgetPrivate::get(window())->shareContext())
diff --git a/src/widgets/kernel/qopenglwidget.h b/src/widgets/kernel/qopenglwidget.h
index c0a6e41522..9eb4a9ba5a 100644
--- a/src/widgets/kernel/qopenglwidget.h
+++ b/src/widgets/kernel/qopenglwidget.h
@@ -63,7 +63,7 @@ public:
PartialUpdate
};
- explicit QOpenGLWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ explicit QOpenGLWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~QOpenGLWidget();
void setUpdateBehavior(UpdateBehavior updateBehavior);
@@ -96,13 +96,13 @@ protected:
virtual void resizeGL(int w, int h);
virtual void paintGL();
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) override;
+ void resizeEvent(QResizeEvent *e) override;
+ bool event(QEvent *e) override;
- int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
- QPaintDevice *redirected(QPoint *p) const Q_DECL_OVERRIDE;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const override;
+ QPaintDevice *redirected(QPoint *p) const override;
+ QPaintEngine *paintEngine() const override;
private:
Q_DISABLE_COPY(QOpenGLWidget)
diff --git a/src/widgets/kernel/qshortcut.h b/src/widgets/kernel/qshortcut.h
index 22c667c9c1..6dcf4971b2 100644
--- a/src/widgets/kernel/qshortcut.h
+++ b/src/widgets/kernel/qshortcut.h
@@ -62,7 +62,7 @@ class Q_WIDGETS_EXPORT QShortcut : public QObject
public:
explicit QShortcut(QWidget *parent);
QShortcut(const QKeySequence& key, QWidget *parent,
- const char *member = Q_NULLPTR, const char *ambiguousMember = Q_NULLPTR,
+ const char *member = nullptr, const char *ambiguousMember = nullptr,
Qt::ShortcutContext context = Qt::WindowShortcut);
~QShortcut();
@@ -91,7 +91,7 @@ Q_SIGNALS:
void activatedAmbiguously();
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
};
#endif // QT_NO_SHORTCUT
diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp
index b8b6f4302d..7430d833db 100644
--- a/src/widgets/kernel/qstackedlayout.cpp
+++ b/src/widgets/kernel/qstackedlayout.cpp
@@ -51,7 +51,7 @@ class QStackedLayoutPrivate : public QLayoutPrivate
Q_DECLARE_PUBLIC(QStackedLayout)
public:
QStackedLayoutPrivate() : index(-1), stackingMode(QStackedLayout::StackOne) {}
- QLayoutItem* replaceAt(int index, QLayoutItem *newitem) Q_DECL_OVERRIDE;
+ QLayoutItem* replaceAt(int index, QLayoutItem *newitem) override;
QList<QLayoutItem *> list;
int index;
QStackedLayout::StackingMode stackingMode;
diff --git a/src/widgets/kernel/qstackedlayout.h b/src/widgets/kernel/qstackedlayout.h
index 6f5eded1f0..966ee2aae4 100644
--- a/src/widgets/kernel/qstackedlayout.h
+++ b/src/widgets/kernel/qstackedlayout.h
@@ -75,20 +75,20 @@ public:
int currentIndex() const;
using QLayout::widget;
QWidget *widget(int) const;
- int count() const Q_DECL_OVERRIDE;
+ int count() const override;
StackingMode stackingMode() const;
void setStackingMode(StackingMode stackingMode);
// abstract virtual functions:
- void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QLayoutItem *itemAt(int) const Q_DECL_OVERRIDE;
- QLayoutItem *takeAt(int) Q_DECL_OVERRIDE;
- void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- bool hasHeightForWidth() const Q_DECL_OVERRIDE;
- int heightForWidth(int width) const Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *item) override;
+ QSize sizeHint() const override;
+ QSize minimumSize() const override;
+ QLayoutItem *itemAt(int) const override;
+ QLayoutItem *takeAt(int) override;
+ void setGeometry(const QRect &rect) override;
+ bool hasHeightForWidth() const override;
+ int heightForWidth(int width) const override;
Q_SIGNALS:
void widgetRemoved(int index);
diff --git a/src/widgets/kernel/qstandardgestures_p.h b/src/widgets/kernel/qstandardgestures_p.h
index 9b2cffaa9a..6de09361fe 100644
--- a/src/widgets/kernel/qstandardgestures_p.h
+++ b/src/widgets/kernel/qstandardgestures_p.h
@@ -64,9 +64,9 @@ class QPanGestureRecognizer : public QGestureRecognizer
public:
explicit QPanGestureRecognizer(int pointCount = 2) : m_pointCount(pointCount) {}
- QGesture *create(QObject *target) Q_DECL_OVERRIDE;
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
- void reset(QGesture *state) Q_DECL_OVERRIDE;
+ QGesture *create(QObject *target) override;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) override;
+ void reset(QGesture *state) override;
private:
const int m_pointCount;
@@ -77,9 +77,9 @@ class QPinchGestureRecognizer : public QGestureRecognizer
public:
QPinchGestureRecognizer();
- QGesture *create(QObject *target) Q_DECL_OVERRIDE;
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
- void reset(QGesture *state) Q_DECL_OVERRIDE;
+ QGesture *create(QObject *target) override;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) override;
+ void reset(QGesture *state) override;
};
class QSwipeGestureRecognizer : public QGestureRecognizer
@@ -87,9 +87,9 @@ class QSwipeGestureRecognizer : public QGestureRecognizer
public:
QSwipeGestureRecognizer();
- QGesture *create(QObject *target) Q_DECL_OVERRIDE;
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
- void reset(QGesture *state) Q_DECL_OVERRIDE;
+ QGesture *create(QObject *target) override;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) override;
+ void reset(QGesture *state) override;
};
class QTapGestureRecognizer : public QGestureRecognizer
@@ -97,9 +97,9 @@ class QTapGestureRecognizer : public QGestureRecognizer
public:
QTapGestureRecognizer();
- QGesture *create(QObject *target) Q_DECL_OVERRIDE;
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
- void reset(QGesture *state) Q_DECL_OVERRIDE;
+ QGesture *create(QObject *target) override;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) override;
+ void reset(QGesture *state) override;
};
class QTapAndHoldGestureRecognizer : public QGestureRecognizer
@@ -107,9 +107,9 @@ class QTapAndHoldGestureRecognizer : public QGestureRecognizer
public:
QTapAndHoldGestureRecognizer();
- QGesture *create(QObject *target) Q_DECL_OVERRIDE;
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
- void reset(QGesture *state) Q_DECL_OVERRIDE;
+ QGesture *create(QObject *target) override;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) override;
+ void reset(QGesture *state) override;
};
QT_END_NAMESPACE
diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp
index 80dc65e2d2..69b62ff7d7 100644
--- a/src/widgets/kernel/qtooltip.cpp
+++ b/src/widgets/kernel/qtooltip.cpp
@@ -127,7 +127,7 @@ public:
~QTipLabel();
static QTipLabel *instance;
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) override;
QBasicTimer hideTimer, expireTimer;
@@ -143,10 +143,10 @@ public:
static int getTipScreen(const QPoint &pos, QWidget *w);
protected:
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) override;
+ void paintEvent(QPaintEvent *e) override;
+ void mouseMoveEvent(QMouseEvent *e) override;
+ void resizeEvent(QResizeEvent *e) override;
#ifndef QT_NO_STYLE_STYLESHEET
public slots:
@@ -501,7 +501,10 @@ void QToolTip::showText(const QPoint &pos, const QString &text, QWidget *w, cons
#ifdef Q_OS_WIN32
// On windows, we can't use the widget as parent otherwise the window will be
// raised when the tooltip will be shown
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
new QTipLabel(text, QApplication::desktop()->screen(QTipLabel::getTipScreen(pos, w)), msecDisplayTime);
+QT_WARNING_POP
#else
new QTipLabel(text, w, msecDisplayTime); // sets QTipLabel::instance to itself
#endif
diff --git a/src/widgets/kernel/qtooltip.h b/src/widgets/kernel/qtooltip.h
index 5e68eef0a7..edf1de0c1d 100644
--- a/src/widgets/kernel/qtooltip.h
+++ b/src/widgets/kernel/qtooltip.h
@@ -53,7 +53,7 @@ class Q_WIDGETS_EXPORT QToolTip
QToolTip() Q_DECL_EQ_DELETE;
public:
// ### Qt 6 - merge the three showText functions below
- static void showText(const QPoint &pos, const QString &text, QWidget *w = Q_NULLPTR);
+ static void showText(const QPoint &pos, const QString &text, QWidget *w = nullptr);
static void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect);
static void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect, int msecShowTime);
static inline void hideText() { showText(QPoint(), QString()); }
diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp
index 91d2b503e0..96d0cf61c4 100644
--- a/src/widgets/kernel/qwhatsthis.cpp
+++ b/src/widgets/kernel/qwhatsthis.cpp
@@ -145,12 +145,12 @@ public:
static QWhatsThat *instance;
protected:
- void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent*) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent*) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent*) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent*) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *e) override;
+ void mousePressEvent(QMouseEvent*) override;
+ void mouseReleaseEvent(QMouseEvent*) override;
+ void mouseMoveEvent(QMouseEvent*) override;
+ void keyPressEvent(QKeyEvent*) override;
+ void paintEvent(QPaintEvent*) override;
private:
QPointer<QWidget>widget;
@@ -365,7 +365,7 @@ class QWhatsThisPrivate : public QObject
QWhatsThisPrivate();
~QWhatsThisPrivate();
static QWhatsThisPrivate *instance;
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) override;
QPointer<QAction> action;
static void say(QWidget *, const QString &, int x = 0, int y = 0);
static void notifyToplevels(QEvent *e);
diff --git a/src/widgets/kernel/qwhatsthis.h b/src/widgets/kernel/qwhatsthis.h
index 3211796d3e..1f0f82b2a2 100644
--- a/src/widgets/kernel/qwhatsthis.h
+++ b/src/widgets/kernel/qwhatsthis.h
@@ -59,10 +59,10 @@ public:
static bool inWhatsThisMode();
static void leaveWhatsThisMode();
- static void showText(const QPoint &pos, const QString &text, QWidget *w = Q_NULLPTR);
+ static void showText(const QPoint &pos, const QString &text, QWidget *w = nullptr);
static void hideText();
- static QAction *createAction(QObject *parent = Q_NULLPTR);
+ static QAction *createAction(QObject *parent = nullptr);
};
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index a973bee2cd..74f2dc0c41 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2017 The Qt Company Ltd.
** Copyright (C) 2016 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
@@ -1155,7 +1155,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f)
if (targetScreen >= 0) {
topData()->initialScreenIndex = targetScreen;
if (QWindow *window = q->windowHandle())
- window->setScreen(QGuiApplication::screens().value(targetScreen, Q_NULLPTR));
+ window->setScreen(QGuiApplication::screens().value(targetScreen, nullptr));
}
data.fstrut_dirty = true;
@@ -1454,7 +1454,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
screenNumber = q->windowType() != Qt::Desktop
? QDesktopWidgetPrivate::screenNumber(q) : 0;
}
- win->setScreen(QGuiApplication::screens().value(screenNumber, Q_NULLPTR));
+ win->setScreen(QGuiApplication::screens().value(screenNumber, nullptr));
}
QSurfaceFormat format = win->requestedFormat();
@@ -1496,7 +1496,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
QBackingStore *store = q->backingStore();
if (!store) {
- if (win && q->windowType() != Qt::Desktop) {
+ if (q->windowType() != Qt::Desktop) {
if (q->isTopLevel())
q->setBackingStore(new QBackingStore(win));
} else {
@@ -7985,7 +7985,7 @@ void QWidgetPrivate::show_helper()
const bool isWindow = q->isWindow();
#if QT_CONFIG(graphicsview)
- bool isEmbedded = isWindow && q->graphicsProxyWidget() != Q_NULLPTR;
+ bool isEmbedded = isWindow && q->graphicsProxyWidget() != nullptr;
#else
bool isEmbedded = false;
#endif
@@ -11220,10 +11220,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
case Qt::WA_NoChildEventsFromChildren:
d->receiveChildEvents = !on;
break;
- case Qt::WA_MacBrushedMetal:
#if 0 // Used to be included in Qt4 for Q_WS_MAC
- d->setStyle_helper(style(), false, true); // Make sure things get unpolished/polished correctly.
- // fall through since changing the metal attribute affects the opaque size grip.
case Qt::WA_MacOpaqueSizeGrip:
d->macUpdateOpaqueSizeGrip();
break;
@@ -11236,12 +11233,10 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
case Qt::WA_Hover:
qt_mac_update_mouseTracking(this);
break;
-#endif
case Qt::WA_MacAlwaysShowToolWindow:
-#if 0 // Used to be included in Qt4 for Q_WS_MAC
d->macUpdateHideOnSuspend();
-#endif
break;
+#endif
case Qt::WA_MacNormalSize:
case Qt::WA_MacSmallSize:
case Qt::WA_MacMiniSize:
@@ -12506,7 +12501,7 @@ static inline bool canMapPosition(QWindow *window)
#if QT_CONFIG(graphicsview)
static inline QGraphicsProxyWidget *graphicsProxyWidget(const QWidget *w)
{
- QGraphicsProxyWidget *result = Q_NULLPTR;
+ QGraphicsProxyWidget *result = nullptr;
const QWidgetPrivate *d = qt_widget_private(const_cast<QWidget *>(w));
if (d->extra)
result = d->extra->proxyWidget;
@@ -12522,7 +12517,7 @@ struct MapToGlobalTransformResult {
static MapToGlobalTransformResult mapToGlobalTransform(const QWidget *w)
{
MapToGlobalTransformResult result;
- result.window = Q_NULLPTR;
+ result.window = nullptr;
for ( ; w ; w = w->parentWidget()) {
#if QT_CONFIG(graphicsview)
if (QGraphicsProxyWidget *qgpw = graphicsProxyWidget(w)) {
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index 732af4de09..5087d330ee 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -211,10 +211,10 @@ public:
};
Q_DECLARE_FLAGS(RenderFlags, RenderFlag)
- explicit QWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ explicit QWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~QWidget();
- int devType() const Q_DECL_OVERRIDE;
+ int devType() const override;
WId winId() const;
void createWinId(); // internal, going away
@@ -578,7 +578,7 @@ public:
void setAttribute(Qt::WidgetAttribute, bool on = true);
inline bool testAttribute(Qt::WidgetAttribute) const;
- QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
+ QPaintEngine *paintEngine() const override;
void ensurePolished() const;
@@ -596,7 +596,7 @@ public:
QWindow *windowHandle() const;
- static QWidget *createWindowContainer(QWindow *window, QWidget *parent=Q_NULLPTR, Qt::WindowFlags flags=Qt::WindowFlags());
+ static QWidget *createWindowContainer(QWindow *window, QWidget *parent=nullptr, Qt::WindowFlags flags=Qt::WindowFlags());
friend class QDesktopScreenWidget;
@@ -608,7 +608,7 @@ Q_SIGNALS:
protected:
// Event handlers
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void mouseDoubleClickEvent(QMouseEvent *event);
@@ -650,10 +650,10 @@ protected:
// Misc. protected functions
virtual void changeEvent(QEvent *);
- int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
- void initPainter(QPainter *painter) const Q_DECL_OVERRIDE;
- QPaintDevice *redirected(QPoint *offset) const Q_DECL_OVERRIDE;
- QPainter *sharedPainter() const Q_DECL_OVERRIDE;
+ int metric(PaintDeviceMetric) const override;
+ void initPainter(QPainter *painter) const override;
+ QPaintDevice *redirected(QPoint *offset) const override;
+ QPainter *sharedPainter() const override;
virtual void inputMethodEvent(QInputMethodEvent *);
public:
@@ -738,12 +738,12 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(QWidget::RenderFlags)
#ifndef Q_QDOC
template <> inline QWidget *qobject_cast<QWidget*>(QObject *o)
{
- if (!o || !o->isWidgetType()) return Q_NULLPTR;
+ if (!o || !o->isWidgetType()) return nullptr;
return static_cast<QWidget*>(o);
}
template <> inline const QWidget *qobject_cast<const QWidget*>(const QObject *o)
{
- if (!o || !o->isWidgetType()) return Q_NULLPTR;
+ if (!o || !o->isWidgetType()) return nullptr;
return static_cast<const QWidget*>(o);
}
#endif // !Q_QDOC
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index 37690b9719..a9c73c6a26 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -913,26 +913,26 @@ public:
: QGraphicsEffectSourcePrivate(), m_widget(widget), context(0), updateDueToGraphicsEffect(false)
{}
- void detach() Q_DECL_OVERRIDE
+ void detach() override
{ m_widget->d_func()->graphicsEffect = 0; }
- const QGraphicsItem *graphicsItem() const Q_DECL_OVERRIDE
+ const QGraphicsItem *graphicsItem() const override
{ return 0; }
- const QWidget *widget() const Q_DECL_OVERRIDE
+ const QWidget *widget() const override
{ return m_widget; }
- void update() Q_DECL_OVERRIDE
+ void update() override
{
updateDueToGraphicsEffect = true;
m_widget->update();
updateDueToGraphicsEffect = false;
}
- bool isPixmap() const Q_DECL_OVERRIDE
+ bool isPixmap() const override
{ return false; }
- void effectBoundingRectChanged() Q_DECL_OVERRIDE
+ void effectBoundingRectChanged() override
{
// ### This function should take a rect parameter; then we can avoid
// updating too much on the parent widget.
@@ -942,16 +942,16 @@ public:
update();
}
- const QStyleOption *styleOption() const Q_DECL_OVERRIDE
+ const QStyleOption *styleOption() const override
{ return 0; }
- QRect deviceRect() const Q_DECL_OVERRIDE
+ QRect deviceRect() const override
{ return m_widget->window()->rect(); }
- QRectF boundingRect(Qt::CoordinateSystem system) const Q_DECL_OVERRIDE;
- void draw(QPainter *p) Q_DECL_OVERRIDE;
+ QRectF boundingRect(Qt::CoordinateSystem system) const override;
+ void draw(QPainter *p) override;
QPixmap pixmap(Qt::CoordinateSystem system, QPoint *offset,
- QGraphicsEffect::PixmapPadMode mode) const Q_DECL_OVERRIDE;
+ QGraphicsEffect::PixmapPadMode mode) const override;
QWidget *m_widget;
QWidgetPaintContext *context;
diff --git a/src/widgets/kernel/qwidgetaction.h b/src/widgets/kernel/qwidgetaction.h
index 3da691a430..4769332a23 100644
--- a/src/widgets/kernel/qwidgetaction.h
+++ b/src/widgets/kernel/qwidgetaction.h
@@ -66,8 +66,8 @@ public:
void releaseWidget(QWidget *widget);
protected:
- virtual bool event(QEvent *) Q_DECL_OVERRIDE;
- virtual bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *) override;
+ virtual bool eventFilter(QObject *, QEvent *) override;
virtual QWidget *createWidget(QWidget *parent);
virtual void deleteWidget(QWidget *widget);
QList<QWidget *> createdWidgets() const;
diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp
index 52080fe05f..3b093283cd 100644
--- a/src/widgets/kernel/qwidgetbackingstore.cpp
+++ b/src/widgets/kernel/qwidgetbackingstore.cpp
@@ -1058,7 +1058,7 @@ static QPlatformTextureList *widgetTexturesFor(QWidget *tlw, QWidget *widget)
{
Q_UNUSED(tlw);
Q_UNUSED(widget);
- return Q_NULLPTR;
+ return nullptr;
}
#endif // QT_NO_OPENGL
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index 34b12a74b2..1078652234 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -78,7 +78,7 @@ public:
QWindowPrivate::setVisible(visible);
}
- QWindow *eventReceiver() Q_DECL_OVERRIDE {
+ QWindow *eventReceiver() override {
Q_Q(QWidgetWindow);
QWindow *w = q;
while (w->parent() && qobject_cast<QWidgetWindow *>(w) && qobject_cast<QWidgetWindow *>(w->parent())) {
@@ -87,7 +87,7 @@ public:
return w;
}
- void clearFocusObject() Q_DECL_OVERRIDE
+ void clearFocusObject() override
{
Q_Q(QWidgetWindow);
QWidget *widget = q->widget();
@@ -95,7 +95,7 @@ public:
widget->focusWidget()->clearFocus();
}
- QRectF closestAcceptableGeometry(const QRectF &rect) const Q_DECL_OVERRIDE;
+ QRectF closestAcceptableGeometry(const QRectF &rect) const override;
#if QT_CONFIG(opengl)
QOpenGLContext *shareContext() const override;
#endif
@@ -178,7 +178,7 @@ QObject *QWidgetWindow::focusObject() const
{
QWidget *windowWidget = m_widget;
if (!windowWidget)
- return Q_NULLPTR;
+ return nullptr;
// A window can't have a focus object if it's being destroyed.
if (QWidgetPrivate::get(windowWidget)->data.in_destructor)
@@ -248,7 +248,7 @@ bool QWidgetWindow::event(QEvent *event)
// are sent by QApplicationPrivate::notifyActiveWindowChange()
case QEvent::FocusIn:
handleFocusInEvent(static_cast<QFocusEvent *>(event));
- // Fallthrough
+ Q_FALLTHROUGH();
case QEvent::FocusOut: {
#ifndef QT_NO_ACCESSIBILITY
QAccessible::State state;
@@ -429,7 +429,7 @@ void QWidgetWindow::handleEnterLeaveEvent(QEvent *event)
const QEnterEvent *ee = static_cast<QEnterEvent *>(event);
QWidget *child = m_widget->childAt(ee->pos());
QWidget *receiver = child ? child : m_widget.data();
- QWidget *leave = Q_NULLPTR;
+ QWidget *leave = nullptr;
if (QApplicationPrivate::inPopupMode() && receiver == m_widget
&& qt_last_mouse_receiver != m_widget) {
// This allows to deliver the leave event to the native widget
@@ -536,11 +536,11 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
// Prevent negative mouse position on enter event - this event
// should be properly handled in "handleEnterLeaveEvent()".
if (receiverMapped.x() >= 0 && receiverMapped.y() >= 0) {
- QApplicationPrivate::dispatchEnterLeave(receiver, Q_NULLPTR, event->screenPos());
+ QApplicationPrivate::dispatchEnterLeave(receiver, nullptr, event->screenPos());
qt_last_mouse_receiver = receiver;
}
} else {
- QApplicationPrivate::dispatchEnterLeave(Q_NULLPTR, qt_last_mouse_receiver, event->screenPos());
+ QApplicationPrivate::dispatchEnterLeave(nullptr, qt_last_mouse_receiver, event->screenPos());
qt_last_mouse_receiver = receiver;
receiver = activePopupWidget;
}
@@ -644,12 +644,9 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
QWidget *receiver = QApplicationPrivate::pickMouseReceiver(m_widget, event->windowPos().toPoint(), &mapped, event->type(), event->buttons(),
qt_button_down, widget);
-
- if (!receiver) {
- if (event->type() == QEvent::MouseButtonRelease)
- QApplicationPrivate::mouse_buttons &= ~event->button();
+ if (!receiver)
return;
- }
+
if ((event->type() != QEvent::MouseButtonPress)
|| !(event->flags().testFlag(Qt::MouseEventCreatedDoubleClick))) {
diff --git a/src/widgets/kernel/qwidgetwindow_p.h b/src/widgets/kernel/qwidgetwindow_p.h
index be3f808a22..d0f1d55c2a 100644
--- a/src/widgets/kernel/qwidgetwindow_p.h
+++ b/src/widgets/kernel/qwidgetwindow_p.h
@@ -75,13 +75,13 @@ public:
QWidget *widget() const { return m_widget; }
#ifndef QT_NO_ACCESSIBILITY
- QAccessibleInterface *accessibleRoot() const Q_DECL_OVERRIDE;
+ QAccessibleInterface *accessibleRoot() const override;
#endif
- QObject *focusObject() const Q_DECL_OVERRIDE;
+ QObject *focusObject() const override;
void setNativeWindowVisibility(bool visible);
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
void handleCloseEvent(QCloseEvent *);
void handleEnterLeaveEvent(QEvent *);
@@ -102,7 +102,7 @@ protected:
#endif
void handleExposeEvent(QExposeEvent *);
void handleWindowStateChangedEvent(QWindowStateChangeEvent *event);
- bool nativeEvent(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
+ bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
#if QT_CONFIG(tabletevent)
void handleTabletEvent(QTabletEvent *);
#endif
diff --git a/src/widgets/kernel/qwindowcontainer_p.h b/src/widgets/kernel/qwindowcontainer_p.h
index 1d838c8dd6..a8754232a8 100644
--- a/src/widgets/kernel/qwindowcontainer_p.h
+++ b/src/widgets/kernel/qwindowcontainer_p.h
@@ -75,7 +75,7 @@ public:
static void parentWasLowered(QWidget *parent);
protected:
- bool event(QEvent *ev) Q_DECL_OVERRIDE;
+ bool event(QEvent *ev) override;
private slots:
void focusWindowChanged(QWindow *focusWindow);
diff --git a/src/widgets/statemachine/qbasickeyeventtransition_p.h b/src/widgets/statemachine/qbasickeyeventtransition_p.h
index d3b90f6104..5007b79739 100644
--- a/src/widgets/statemachine/qbasickeyeventtransition_p.h
+++ b/src/widgets/statemachine/qbasickeyeventtransition_p.h
@@ -80,8 +80,8 @@ public:
void setModifierMask(Qt::KeyboardModifiers modifiers);
protected:
- bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
- void onTransition(QEvent *) Q_DECL_OVERRIDE;
+ bool eventTest(QEvent *event) override;
+ void onTransition(QEvent *) override;
private:
Q_DISABLE_COPY(QBasicKeyEventTransition)
diff --git a/src/widgets/statemachine/qbasicmouseeventtransition_p.h b/src/widgets/statemachine/qbasicmouseeventtransition_p.h
index d6d37eb03e..93d2a5ec61 100644
--- a/src/widgets/statemachine/qbasicmouseeventtransition_p.h
+++ b/src/widgets/statemachine/qbasicmouseeventtransition_p.h
@@ -83,8 +83,8 @@ public:
void setHitTestPath(const QPainterPath &path);
protected:
- bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
- void onTransition(QEvent *) Q_DECL_OVERRIDE;
+ bool eventTest(QEvent *event) override;
+ void onTransition(QEvent *) override;
private:
Q_DISABLE_COPY(QBasicMouseEventTransition)
diff --git a/src/widgets/statemachine/qkeyeventtransition.h b/src/widgets/statemachine/qkeyeventtransition.h
index 23ce3c40be..676f5f7846 100644
--- a/src/widgets/statemachine/qkeyeventtransition.h
+++ b/src/widgets/statemachine/qkeyeventtransition.h
@@ -54,9 +54,9 @@ class Q_WIDGETS_EXPORT QKeyEventTransition : public QEventTransition
Q_PROPERTY(int key READ key WRITE setKey)
Q_PROPERTY(Qt::KeyboardModifiers modifierMask READ modifierMask WRITE setModifierMask)
public:
- QKeyEventTransition(QState *sourceState = Q_NULLPTR);
+ QKeyEventTransition(QState *sourceState = nullptr);
QKeyEventTransition(QObject *object, QEvent::Type type, int key,
- QState *sourceState = Q_NULLPTR);
+ QState *sourceState = nullptr);
~QKeyEventTransition();
int key() const;
@@ -66,8 +66,8 @@ public:
void setModifierMask(Qt::KeyboardModifiers modifiers);
protected:
- void onTransition(QEvent *event) Q_DECL_OVERRIDE;
- bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
+ void onTransition(QEvent *event) override;
+ bool eventTest(QEvent *event) override;
private:
Q_DISABLE_COPY(QKeyEventTransition)
diff --git a/src/widgets/statemachine/qmouseeventtransition.h b/src/widgets/statemachine/qmouseeventtransition.h
index 3f40224d8c..41f738d894 100644
--- a/src/widgets/statemachine/qmouseeventtransition.h
+++ b/src/widgets/statemachine/qmouseeventtransition.h
@@ -55,9 +55,9 @@ class Q_WIDGETS_EXPORT QMouseEventTransition : public QEventTransition
Q_PROPERTY(Qt::MouseButton button READ button WRITE setButton)
Q_PROPERTY(Qt::KeyboardModifiers modifierMask READ modifierMask WRITE setModifierMask)
public:
- QMouseEventTransition(QState *sourceState = Q_NULLPTR);
+ QMouseEventTransition(QState *sourceState = nullptr);
QMouseEventTransition(QObject *object, QEvent::Type type,
- Qt::MouseButton button, QState *sourceState = Q_NULLPTR);
+ Qt::MouseButton button, QState *sourceState = nullptr);
~QMouseEventTransition();
Qt::MouseButton button() const;
@@ -70,8 +70,8 @@ public:
void setHitTestPath(const QPainterPath &path);
protected:
- void onTransition(QEvent *event) Q_DECL_OVERRIDE;
- bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
+ void onTransition(QEvent *event) override;
+ bool eventTest(QEvent *event) override;
private:
Q_DISABLE_COPY(QMouseEventTransition)
diff --git a/src/widgets/styles/images/closedock-10.png b/src/widgets/styles/images/closedock-10.png
new file mode 100644
index 0000000000..ee2af34550
--- /dev/null
+++ b/src/widgets/styles/images/closedock-10.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-16.png b/src/widgets/styles/images/closedock-16.png
index ab9d669eee..570012fc9a 100644
--- a/src/widgets/styles/images/closedock-16.png
+++ b/src/widgets/styles/images/closedock-16.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-20.png b/src/widgets/styles/images/closedock-20.png
new file mode 100644
index 0000000000..b5ea92d1de
--- /dev/null
+++ b/src/widgets/styles/images/closedock-20.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-32.png b/src/widgets/styles/images/closedock-32.png
new file mode 100644
index 0000000000..95a1ad014d
--- /dev/null
+++ b/src/widgets/styles/images/closedock-32.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-48.png b/src/widgets/styles/images/closedock-48.png
new file mode 100644
index 0000000000..3ca36d1394
--- /dev/null
+++ b/src/widgets/styles/images/closedock-48.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-64.png b/src/widgets/styles/images/closedock-64.png
new file mode 100644
index 0000000000..cbec2052ad
--- /dev/null
+++ b/src/widgets/styles/images/closedock-64.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-down-16.png b/src/widgets/styles/images/closedock-down-macstyle-16.png
index c1791dd2cc..c1791dd2cc 100644
--- a/src/widgets/styles/images/closedock-down-16.png
+++ b/src/widgets/styles/images/closedock-down-macstyle-16.png
Binary files differ
diff --git a/src/widgets/styles/images/closedock-macstyle-16.png b/src/widgets/styles/images/closedock-macstyle-16.png
new file mode 100644
index 0000000000..ab9d669eee
--- /dev/null
+++ b/src/widgets/styles/images/closedock-macstyle-16.png
Binary files differ
diff --git a/src/widgets/styles/images/dockdock-down-16.png b/src/widgets/styles/images/dockdock-down-macstyle-16.png
index 2e85a679be..2e85a679be 100644
--- a/src/widgets/styles/images/dockdock-down-16.png
+++ b/src/widgets/styles/images/dockdock-down-macstyle-16.png
Binary files differ
diff --git a/src/widgets/styles/images/dockdock-16.png b/src/widgets/styles/images/dockdock-macstyle-16.png
index 4ac9483176..4ac9483176 100644
--- a/src/widgets/styles/images/dockdock-16.png
+++ b/src/widgets/styles/images/dockdock-macstyle-16.png
Binary files differ
diff --git a/src/widgets/styles/images/normalizedockup-10.png b/src/widgets/styles/images/normalizedockup-10.png
new file mode 100644
index 0000000000..f380c65035
--- /dev/null
+++ b/src/widgets/styles/images/normalizedockup-10.png
Binary files differ
diff --git a/src/widgets/styles/images/normalizedockup-16.png b/src/widgets/styles/images/normalizedockup-16.png
new file mode 100644
index 0000000000..1b795a9e84
--- /dev/null
+++ b/src/widgets/styles/images/normalizedockup-16.png
Binary files differ
diff --git a/src/widgets/styles/images/normalizedockup-20.png b/src/widgets/styles/images/normalizedockup-20.png
new file mode 100644
index 0000000000..857338427f
--- /dev/null
+++ b/src/widgets/styles/images/normalizedockup-20.png
Binary files differ
diff --git a/src/widgets/styles/images/normalizedockup-32.png b/src/widgets/styles/images/normalizedockup-32.png
new file mode 100644
index 0000000000..d8993a1067
--- /dev/null
+++ b/src/widgets/styles/images/normalizedockup-32.png
Binary files differ
diff --git a/src/widgets/styles/images/normalizedockup-48.png b/src/widgets/styles/images/normalizedockup-48.png
new file mode 100644
index 0000000000..be48c9524c
--- /dev/null
+++ b/src/widgets/styles/images/normalizedockup-48.png
Binary files differ
diff --git a/src/widgets/styles/images/normalizedockup-64.png b/src/widgets/styles/images/normalizedockup-64.png
new file mode 100644
index 0000000000..7b540f04f8
--- /dev/null
+++ b/src/widgets/styles/images/normalizedockup-64.png
Binary files differ
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index 0ad508afd2..557277b9e0 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -743,8 +743,9 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
% QLatin1String(metaObject()->className()), opt, QSize(size, size))
% HexString<uint>(pe);
if (!QPixmapCache::find(pixmapName, pixmap)) {
- int border = size/5;
- int sqsize = 2*(size/2);
+ qreal pixelRatio = p->device()->devicePixelRatioF();
+ int border = qRound(pixelRatio*(size/5));
+ int sqsize = qRound(pixelRatio*(2*(size/2)));
QImage image(sqsize, sqsize, QImage::Format_ARGB32_Premultiplied);
image.fill(0);
QPainter imagePainter(&image);
@@ -796,6 +797,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
imagePainter.drawPolygon(a);
imagePainter.end();
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(pixelRatio);
QPixmapCache::insert(pixmapName, pixmap);
}
int xOffset = r.x() + (r.width() - size)/2;
@@ -889,6 +891,13 @@ QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int
break;
}
+ if (wrapText) {
+ if (option->features & QStyleOptionViewItem::HasCheckIndicator)
+ bounds.setWidth(bounds.width() - proxyStyle->pixelMetric(QStyle::PM_IndicatorWidth) - 2 * textMargin);
+ if (option->features & QStyleOptionViewItem::HasDecoration)
+ bounds.setWidth(bounds.width() - option->decorationSize.width() - 2 * textMargin);
+ }
+
const int lineWidth = bounds.width();
const QSizeF size = viewItemTextLayout(textLayout, lineWidth);
return QSize(qCeil(size.width()) + 2 * textMargin, qCeil(size.height()));
@@ -994,11 +1003,14 @@ void QCommonStylePrivate::viewItemLayout(const QStyleOptionViewItem *opt, QRect
const bool hasCheck = checkRect->isValid();
const bool hasPixmap = pixmapRect->isValid();
const bool hasText = textRect->isValid();
- const int textMargin = hasText ? proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, opt, widget) + 1 : 0;
- const int pixmapMargin = hasPixmap ? proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, opt, widget) + 1 : 0;
- const int checkMargin = hasCheck ? proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, opt, widget) + 1 : 0;
- int x = opt->rect.left();
- int y = opt->rect.top();
+ const bool hasMargin = (hasText | hasPixmap | hasCheck);
+ const int frameHMargin = hasMargin ?
+ proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, opt, widget) + 1 : 0;
+ const int textMargin = hasText ? frameHMargin : 0;
+ const int pixmapMargin = hasPixmap ? frameHMargin : 0;
+ const int checkMargin = hasCheck ? frameHMargin : 0;
+ const int x = opt->rect.left();
+ const int y = opt->rect.top();
int w, h;
if (textRect->height() == 0 && (!hasPixmap || !sizehint)) {
@@ -1571,10 +1583,11 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
aligned.width() * pixmap.devicePixelRatio(),
pixmap.height() * pixmap.devicePixelRatio());
+ const int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget);
if (header->direction == Qt::LeftToRight)
- rect.setLeft(rect.left() + pixw + 2);
+ rect.setLeft(rect.left() + pixw + margin);
else
- rect.setRight(rect.right() - pixw - 2);
+ rect.setRight(rect.right() - pixw - margin);
}
if (header->state & QStyle::State_On) {
QFont fnt = p->font();
@@ -2499,7 +2512,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt,
const bool vertical = pb->orientation == Qt::Vertical;
if (!vertical) {
if (pb->textVisible)
- textw = qMax(pb->fontMetrics.width(pb->text), pb->fontMetrics.width(QLatin1String("100%"))) + 6;
+ textw = qMax(pb->fontMetrics.horizontalAdvance(pb->text), pb->fontMetrics.horizontalAdvance(QLatin1String("100%"))) + 6;
}
if ((pb->textAlignment & Qt::AlignCenter) == 0) {
@@ -3411,6 +3424,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl
QRect ir = toolbutton->rect;
QStyleOptionToolButton newBtn = *toolbutton;
newBtn.rect = QRect(ir.right() + 5 - mbi, ir.y() + ir.height() - mbi + 4, mbi - 6, mbi - 6);
+ newBtn.rect = visualRect(toolbutton->direction, button, newBtn.rect);
proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget);
}
}
@@ -4154,14 +4168,10 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex
#if QT_CONFIG(combobox)
case CC_ComboBox:
if (const QStyleOptionComboBox *cb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
- int x = cb->rect.x(),
- y = cb->rect.y(),
- wi = cb->rect.width(),
- he = cb->rect.height();
- int xpos = x;
- int margin = cb->frame ? 3 : 0;
- int bmarg = cb->frame ? 2 : 0;
- xpos += wi - bmarg - 16;
+ const int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height();
+ const int margin = cb->frame ? qRound(QStyleHelper::dpiScaled(3)) : 0;
+ const int bmarg = cb->frame ? qRound(QStyleHelper::dpiScaled(2)) : 0;
+ const int xpos = x + wi - bmarg - qRound(QStyleHelper::dpiScaled(16));
switch (sc) {
@@ -4169,10 +4179,10 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex
ret = cb->rect;
break;
case SC_ComboBoxArrow:
- ret.setRect(xpos, y + bmarg, 16, he - 2*bmarg);
+ ret.setRect(xpos, y + bmarg, qRound(QStyleHelper::dpiScaled(16)), he - 2*bmarg);
break;
case SC_ComboBoxEditField:
- ret.setRect(x + margin, y + margin, wi - 2 * margin - 16, he - 2 * margin);
+ ret.setRect(x + margin, y + margin, wi - 2 * margin - qRound(QStyleHelper::dpiScaled(16)), he - 2 * margin);
break;
case SC_ComboBoxListBoxPopup:
ret = cb->rect;
@@ -5289,6 +5299,12 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget
case SH_Widget_Animation_Duration:
ret = styleHint(SH_Widget_Animate, opt, widget, hret) ? 200 : 0;
break;
+ case SH_ComboBox_AllowWheelScrolling:
+ ret = true;
+ break;
+ case SH_SpinBox_ButtonsInsideFrame:
+ ret = true;
+ break;
default:
ret = 0;
break;
@@ -5695,6 +5711,22 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti
return QPixmap();
}
+#if QT_CONFIG(imageformat_png)
+static inline QString iconResourcePrefix() { return QStringLiteral(":/qt-project.org/styles/commonstyle/images/"); }
+static inline QString iconPngSuffix() { return QStringLiteral(".png"); }
+
+static void addIconFiles(const QString &prefix, const int sizes[], size_t count, QIcon &icon)
+{
+ for (size_t i = 0; i < count; ++i) {
+ const int size = sizes[i];
+ icon.addFile(prefix + QString::number(size) + iconPngSuffix(), QSize(size, size));
+ }
+}
+
+static const int dockTitleIconSizes[] = {10, 16, 20, 32, 48, 64};
+
+#endif // imageformat_png
+
/*!
\internal
*/
@@ -6201,12 +6233,20 @@ QIcon QCommonStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption
case SP_MediaVolumeMuted:
icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png"), QSize(16, 16));
break;
+ case SP_TitleBarCloseButton:
+ addIconFiles(iconResourcePrefix() + QStringLiteral("closedock-"),
+ dockTitleIconSizes, sizeof(dockTitleIconSizes)/sizeof(dockTitleIconSizes[0]), icon);
+ break;
case SP_TitleBarMenuButton:
# ifndef QT_NO_IMAGEFORMAT_XPM
icon.addPixmap(titleBarMenuCachedPixmapFromXPM());
# endif
icon.addFile(QLatin1String(":/qt-project.org/qmessagebox/images/qtlogo-64.png"));
break;
+ case SP_TitleBarNormalButton:
+ addIconFiles(iconResourcePrefix() + QStringLiteral("normalizedockup-"),
+ dockTitleIconSizes, sizeof(dockTitleIconSizes)/sizeof(dockTitleIconSizes[0]), icon);
+ break;
#endif // QT_NO_IMAGEFORMAT_PNG
default:
icon.addPixmap(proxy()->standardPixmap(standardIcon, option, widget));
@@ -6251,7 +6291,7 @@ QPixmap QCommonStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &p
// High intensity colors needs dark shifting in the color table, while
// low intensity colors needs light shifting. This is to increase the
- // percieved contrast.
+ // perceived contrast.
if ((red - factor > green && red - factor > blue)
|| (green - factor > red && green - factor > blue)
|| (blue - factor > red && blue - factor > green))
diff --git a/src/widgets/styles/qcommonstyle.h b/src/widgets/styles/qcommonstyle.h
index ed880a150f..f39915295e 100644
--- a/src/widgets/styles/qcommonstyle.h
+++ b/src/widgets/styles/qcommonstyle.h
@@ -56,40 +56,40 @@ public:
~QCommonStyle();
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QWidget *w = nullptr) const override;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = Q_NULLPTR) const Q_DECL_OVERRIDE;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QWidget *w = nullptr) const override;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = nullptr) const override;
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *w = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QWidget *w = nullptr) const override;
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QPoint &pt, const QWidget *w = nullptr) const override;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc,
- const QWidget *w = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QWidget *w = nullptr) const override;
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QSize &contentsSize, const QWidget *widget = nullptr) const override;
- int pixelMetric(PixelMetric m, const QStyleOption *opt = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ int pixelMetric(PixelMetric m, const QStyleOption *opt = nullptr, const QWidget *widget = nullptr) const override;
- int styleHint(StyleHint sh, const QStyleOption *opt = Q_NULLPTR, const QWidget *w = Q_NULLPTR,
- QStyleHintReturn *shret = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ int styleHint(StyleHint sh, const QStyleOption *opt = nullptr, const QWidget *w = nullptr,
+ QStyleHintReturn *shret = nullptr) const override;
- QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
- QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = nullptr,
+ const QWidget *widget = nullptr) const override;
+ QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt = nullptr,
+ const QWidget *widget = nullptr) const override;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *opt) const Q_DECL_OVERRIDE;
+ const QStyleOption *opt) const override;
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2,
- Qt::Orientation orientation, const QStyleOption *option = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
-
- void polish(QPalette &) Q_DECL_OVERRIDE;
- void polish(QApplication *app) Q_DECL_OVERRIDE;
- void polish(QWidget *widget) Q_DECL_OVERRIDE;
- void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
- void unpolish(QApplication *application) Q_DECL_OVERRIDE;
+ Qt::Orientation orientation, const QStyleOption *option = nullptr,
+ const QWidget *widget = nullptr) const override;
+
+ void polish(QPalette &) override;
+ void polish(QApplication *app) override;
+ void polish(QWidget *widget) override;
+ void unpolish(QWidget *widget) override;
+ void unpolish(QApplication *application) override;
protected:
QCommonStyle(QCommonStylePrivate &dd);
diff --git a/src/widgets/styles/qdrawutil.h b/src/widgets/styles/qdrawutil.h
index d5582f2c90..346029e1b4 100644
--- a/src/widgets/styles/qdrawutil.h
+++ b/src/widgets/styles/qdrawutil.h
@@ -70,42 +70,42 @@ Q_WIDGETS_EXPORT void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint
Q_WIDGETS_EXPORT void qDrawShadeRect(QPainter *p, int x, int y, int w, int h,
const QPalette &pal, bool sunken = false,
int lineWidth = 1, int midLineWidth = 0,
- const QBrush *fill = Q_NULLPTR);
+ const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawShadeRect(QPainter *p, const QRect &r,
const QPalette &pal, bool sunken = false,
int lineWidth = 1, int midLineWidth = 0,
- const QBrush *fill = Q_NULLPTR);
+ const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawShadePanel(QPainter *p, int x, int y, int w, int h,
const QPalette &pal, bool sunken = false,
- int lineWidth = 1, const QBrush *fill = Q_NULLPTR);
+ int lineWidth = 1, const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawShadePanel(QPainter *p, const QRect &r,
const QPalette &pal, bool sunken = false,
- int lineWidth = 1, const QBrush *fill = Q_NULLPTR);
+ int lineWidth = 1, const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawWinButton(QPainter *p, int x, int y, int w, int h,
const QPalette &pal, bool sunken = false,
- const QBrush *fill = Q_NULLPTR);
+ const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawWinButton(QPainter *p, const QRect &r,
const QPalette &pal, bool sunken = false,
- const QBrush *fill = Q_NULLPTR);
+ const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawWinPanel(QPainter *p, int x, int y, int w, int h,
const QPalette &pal, bool sunken = false,
- const QBrush *fill = Q_NULLPTR);
+ const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawWinPanel(QPainter *p, const QRect &r,
const QPalette &pal, bool sunken = false,
- const QBrush *fill = Q_NULLPTR);
+ const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &,
- int lineWidth = 1, const QBrush *fill = Q_NULLPTR);
+ int lineWidth = 1, const QBrush *fill = nullptr);
Q_WIDGETS_EXPORT void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &,
- int lineWidth = 1, const QBrush *fill = Q_NULLPTR);
+ int lineWidth = 1, const QBrush *fill = nullptr);
diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp
index c2bf1cf545..554c45d570 100644
--- a/src/widgets/styles/qfusionstyle.cpp
+++ b/src/widgets/styles/qfusionstyle.cpp
@@ -1536,7 +1536,7 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
proxy()->drawItemText(painter, menuItem->rect.adjusted(margin, 0, -margin, 0), Qt::AlignLeft | Qt::AlignVCenter,
menuItem->palette, menuItem->state & State_Enabled, menuItem->text,
QPalette::Text);
- w = menuItem->fontMetrics.width(menuItem->text) + margin;
+ w = menuItem->fontMetrics.horizontalAdvance(menuItem->text) + margin;
}
painter->setPen(shadow.lighter(106));
bool reverse = menuItem->direction == Qt::RightToLeft;
@@ -2735,6 +2735,8 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption
pixmapName += QLatin1String("-editable");
if (isEnabled)
pixmapName += QLatin1String("-enabled");
+ if (!comboBox->frame)
+ pixmapName += QLatin1String("-frameless");
if (!QPixmapCache::find(pixmapName, cache)) {
cache = styleCachePixmap(comboBox->rect.size());
@@ -2760,7 +2762,8 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption
buttonOption.state &= ~State_MouseOver;
}
- proxy()->drawPrimitive(PE_FrameLineEdit, &buttonOption, &cachePainter, widget);
+ if (comboBox->frame)
+ proxy()->drawPrimitive(PE_FrameLineEdit, &buttonOption, &cachePainter, widget);
// Draw button clipped
cachePainter.save();
@@ -3215,7 +3218,7 @@ QSize QFusionStyle::sizeFromContents(ContentsType type, const QStyleOption *opti
QFont fontBold = menuItem->font;
fontBold.setBold(true);
QFontMetrics fmBold(fontBold);
- w += fmBold.width(menuItem->text) - fm.width(menuItem->text);
+ w += fmBold.width(menuItem->text) - fm.horizontalAdvance(menuItem->text);
}
const int checkcol = qMax<int>(maxpmw, QStyleHelper::dpiScaled(QFusionStylePrivate::menuCheckMarkWidth)); // Windows always shows a check column
w += checkcol;
@@ -3767,6 +3770,19 @@ QRect QFusionStyle::subElementRect(SubElement sr, const QStyleOption *opt, const
QIcon QFusionStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option,
const QWidget *widget) const
{
+#if QT_CONFIG(imageformat_xpm)
+ switch (standardIcon) {
+ case SP_TitleBarNormalButton:
+ return QIcon(QPixmap(dock_widget_restore_xpm));
+ case SP_TitleBarMinButton:
+ return QIcon(QPixmap(workspace_minimize));
+ case SP_TitleBarCloseButton:
+ case SP_DockWidgetCloseButton:
+ return QIcon(QPixmap(dock_widget_close_xpm));
+ default:
+ break;
+ }
+#endif // imageformat_xpm
return QCommonStyle::standardIcon(standardIcon, option, widget);
}
diff --git a/src/widgets/styles/qfusionstyle_p.h b/src/widgets/styles/qfusionstyle_p.h
index 10f76045d5..e67e792727 100644
--- a/src/widgets/styles/qfusionstyle_p.h
+++ b/src/widgets/styles/qfusionstyle_p.h
@@ -69,41 +69,41 @@ public:
QFusionStyle();
~QFusionStyle();
- QPalette standardPalette () const Q_DECL_OVERRIDE;
+ QPalette standardPalette () const override;
void drawPrimitive(PrimitiveElement elem,
const QStyleOption *option,
- QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ QPainter *painter, const QWidget *widget = 0) const override;
void drawControl(ControlElement ce, const QStyleOption *option, QPainter *painter,
- const QWidget *widget) const Q_DECL_OVERRIDE;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget) const override;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const override;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
- QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ QPainter *painter, const QWidget *widget) const override;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const override;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
- const QSize &size, const QWidget *widget) const Q_DECL_OVERRIDE;
+ const QSize &size, const QWidget *widget) const override;
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ const QPoint &pt, const QWidget *w = 0) const override;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt,
- SubControl sc, const QWidget *widget) const Q_DECL_OVERRIDE;
+ SubControl sc, const QWidget *widget) const override;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *opt) const Q_DECL_OVERRIDE;
+ const QStyleOption *opt) const override;
int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0,
- QStyleHintReturn *returnData = 0) const Q_DECL_OVERRIDE;
- QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
+ QStyleHintReturn *returnData = 0) const override;
+ QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const override;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
- const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget = 0) const override;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
- const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget = 0) const override;
void drawItemPixmap(QPainter *painter, const QRect &rect,
- int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
+ int alignment, const QPixmap &pixmap) const override;
void drawItemText(QPainter *painter, const QRect &rect,
int flags, const QPalette &pal, bool enabled,
- const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE;
- void polish(QWidget *widget) Q_DECL_OVERRIDE;
- void polish(QApplication *app) Q_DECL_OVERRIDE;
- void polish(QPalette &pal) Q_DECL_OVERRIDE;
- void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
- void unpolish(QApplication *app) Q_DECL_OVERRIDE;
+ const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override;
+ void polish(QWidget *widget) override;
+ void polish(QApplication *app) override;
+ void polish(QPalette &pal) override;
+ void unpolish(QWidget *widget) override;
+ void unpolish(QApplication *app) override;
protected:
QFusionStyle(QFusionStylePrivate &dd);
diff --git a/src/widgets/styles/qpixmapstyle_p.h b/src/widgets/styles/qpixmapstyle_p.h
index 618d6d2f50..590434d95e 100644
--- a/src/widgets/styles/qpixmapstyle_p.h
+++ b/src/widgets/styles/qpixmapstyle_p.h
@@ -136,34 +136,34 @@ public:
QPixmapStyle();
~QPixmapStyle();
- void polish(QApplication *application) Q_DECL_OVERRIDE;
- void polish(QPalette &palette) Q_DECL_OVERRIDE;
- void polish(QWidget *widget) Q_DECL_OVERRIDE;
- void unpolish(QApplication *application) Q_DECL_OVERRIDE;
- void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+ void polish(QApplication *application) override;
+ void polish(QPalette &palette) override;
+ void polish(QWidget *widget) override;
+ void unpolish(QApplication *application) override;
+ void unpolish(QWidget *widget) override;
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
- QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ QPainter *painter, const QWidget *widget = nullptr) const override;
void drawControl(ControlElement element, const QStyleOption *option,
- QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ QPainter *painter, const QWidget *widget = nullptr) const override;
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option,
- QPainter *painter, const QWidget *widget=0) const Q_DECL_OVERRIDE;
+ QPainter *painter, const QWidget *widget=0) const override;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
- const QSize &contentsSize, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QSize &contentsSize, const QWidget *widget = nullptr) const override;
QRect subElementRect(SubElement element, const QStyleOption *option,
- const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ const QWidget *widget = nullptr) const override;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option,
- SubControl sc, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ SubControl sc, const QWidget *widget = nullptr) const override;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr,
+ const QWidget *widget = nullptr) const override;
int styleHint(StyleHint hint, const QStyleOption *option,
- const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE;
+ const QWidget *widget, QStyleHintReturn *returnData) const override;
SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
- const QPoint &pos, const QWidget *widget) const Q_DECL_OVERRIDE;
+ const QPoint &pos, const QWidget *widget) const override;
- bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *watched, QEvent *event) override;
void addDescriptor(ControlDescriptor control, const QString &fileName,
QMargins margins = QMargins(),
diff --git a/src/widgets/styles/qproxystyle.h b/src/widgets/styles/qproxystyle.h
index 20a0f12868..c26d9abf59 100644
--- a/src/widgets/styles/qproxystyle.h
+++ b/src/widgets/styles/qproxystyle.h
@@ -54,47 +54,47 @@ class Q_WIDGETS_EXPORT QProxyStyle : public QCommonStyle
Q_OBJECT
public:
- QProxyStyle(QStyle *style = Q_NULLPTR);
+ QProxyStyle(QStyle *style = nullptr);
QProxyStyle(const QString &key);
~QProxyStyle();
QStyle *baseStyle() const;
void setBaseStyle(QStyle *style);
- void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
- void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
- void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override;
+ void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override;
+ void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override;
void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled,
- const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE;
- virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
+ const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override;
+ virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const override;
- QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const Q_DECL_OVERRIDE;
+ QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const override;
- QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE;
- QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const Q_DECL_OVERRIDE;
- QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const Q_DECL_OVERRIDE;
- QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const override;
+ QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override;
+ QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const override;
+ QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const override;
- SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
- int styleHint(StyleHint hint, const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR, QStyleHintReturn *returnData = Q_NULLPTR) const Q_DECL_OVERRIDE;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = nullptr) const override;
+ int styleHint(StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override;
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2,
- Qt::Orientation orientation, const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
+ Qt::Orientation orientation, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override;
- QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
- QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = Q_NULLPTR) const Q_DECL_OVERRIDE;
- QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const Q_DECL_OVERRIDE;
- QPalette standardPalette() const Q_DECL_OVERRIDE;
+ QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override;
+ QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = nullptr) const override;
+ QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override;
+ QPalette standardPalette() const override;
- void polish(QWidget *widget) Q_DECL_OVERRIDE;
- void polish(QPalette &pal) Q_DECL_OVERRIDE;
- void polish(QApplication *app) Q_DECL_OVERRIDE;
+ void polish(QWidget *widget) override;
+ void polish(QPalette &pal) override;
+ void polish(QApplication *app) override;
- void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
- void unpolish(QApplication *app) Q_DECL_OVERRIDE;
+ void unpolish(QWidget *widget) override;
+ void unpolish(QApplication *app) override;
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
private:
Q_DISABLE_COPY(QProxyStyle)
diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp
index faa5f1e67e..73a6554f1a 100644
--- a/src/widgets/styles/qstyle.cpp
+++ b/src/widgets/styles/qstyle.cpp
@@ -765,8 +765,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
*/
/*!
- \fn void QStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, \
- QPainter *painter, const QWidget *widget) const
+ \fn void QStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
Draws the given primitive \a element with the provided \a painter using the style
options specified by \a option.
@@ -1592,8 +1591,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
*/
/*!
- \fn QSize QStyle::sizeFromContents(ContentsType type, const QStyleOption *option, \
- const QSize &contentsSize, const QWidget *widget) const
+ \fn QSize QStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const
Returns the size of the element described by the specified
\a option and \a type, based on the provided \a contentsSize.
@@ -1994,12 +1992,20 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
A value equal to zero means that the animations will be disabled.
This enum value has been introduced in Qt 5.10.
+ \value SH_ComboBox_AllowWheelScrolling
+ Determines if the mouse wheel can be used to scroll inside a QComboBox.
+ This is on by default in all styles except the Mac style.
+ This enum value has been introduced in Qt 5.10.
+
+ \value SH_SpinBox_ButtonsInsideFrame
+ Determnines if the spin box buttons are inside the line edit frame.
+ This enum value has been introduced in Qt 5.11.
+
\sa styleHint()
*/
/*!
- \fn int QStyle::styleHint(StyleHint hint, const QStyleOption *option, \
- const QWidget *widget, QStyleHintReturn *returnData) const
+ \fn int QStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const
Returns an integer representing the specified style \a hint for
the given \a widget described by the provided style \a option.
@@ -2111,8 +2117,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
*/
/*!
- \fn QPixmap QStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option, \
- const QWidget *widget) const
+ \fn QPixmap QStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option, const QWidget *widget) const
\obsolete
Returns a pixmap for the given \a standardPixmap.
diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h
index b4936a3e0a..cef569d514 100644
--- a/src/widgets/styles/qstyle.h
+++ b/src/widgets/styles/qstyle.h
@@ -202,7 +202,7 @@ public:
Q_ENUM(PrimitiveElement)
virtual void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = Q_NULLPTR) const = 0;
+ const QWidget *w = nullptr) const = 0;
enum ControlElement {
CE_PushButton,
CE_PushButtonBevel,
@@ -273,7 +273,7 @@ public:
Q_ENUM(ControlElement)
virtual void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = Q_NULLPTR) const = 0;
+ const QWidget *w = nullptr) const = 0;
enum SubElement {
SE_PushButtonContents,
@@ -362,7 +362,7 @@ public:
Q_ENUM(SubElement)
virtual QRect subElementRect(SubElement subElement, const QStyleOption *option,
- const QWidget *widget = Q_NULLPTR) const = 0;
+ const QWidget *widget = nullptr) const = 0;
enum ComplexControl {
@@ -441,11 +441,11 @@ public:
virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *widget = Q_NULLPTR) const = 0;
+ const QWidget *widget = nullptr) const = 0;
virtual SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *widget = Q_NULLPTR) const = 0;
+ const QPoint &pt, const QWidget *widget = nullptr) const = 0;
virtual QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt,
- SubControl sc, const QWidget *widget = Q_NULLPTR) const = 0;
+ SubControl sc, const QWidget *widget = nullptr) const = 0;
enum PixelMetric {
PM_ButtonMargin,
@@ -579,8 +579,8 @@ public:
};
Q_ENUM(PixelMetric)
- virtual int pixelMetric(PixelMetric metric, const QStyleOption *option = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const = 0;
+ virtual int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr,
+ const QWidget *widget = nullptr) const = 0;
enum ContentsType {
CT_PushButton,
@@ -612,7 +612,7 @@ public:
Q_ENUM(ContentsType)
virtual QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *w = Q_NULLPTR) const = 0;
+ const QSize &contentsSize, const QWidget *w = nullptr) const = 0;
enum RequestSoftwareInputPanel {
RSIP_OnMouseClickAndAlreadyFocused,
@@ -739,14 +739,16 @@ public:
SH_ItemView_ScrollMode,
SH_TitleBar_ShowToolTipsOnButtons,
SH_Widget_Animation_Duration,
+ SH_ComboBox_AllowWheelScrolling,
+ SH_SpinBox_ButtonsInsideFrame,
// Add new style hint values here
SH_CustomBase = 0xf0000000
};
Q_ENUM(StyleHint)
- virtual int styleHint(StyleHint stylehint, const QStyleOption *opt = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR, QStyleHintReturn* returnData = Q_NULLPTR) const = 0;
+ virtual int styleHint(StyleHint stylehint, const QStyleOption *opt = nullptr,
+ const QWidget *widget = nullptr, QStyleHintReturn* returnData = nullptr) const = 0;
enum StandardPixmap {
SP_TitleBarMenuButton,
@@ -825,11 +827,11 @@ public:
};
Q_ENUM(StandardPixmap)
- virtual QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const = 0;
+ virtual QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt = nullptr,
+ const QWidget *widget = nullptr) const = 0;
- virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = Q_NULLPTR,
- const QWidget *widget = Q_NULLPTR) const = 0;
+ virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr,
+ const QWidget *widget = nullptr) const = 0;
virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
const QStyleOption *opt) const = 0;
@@ -848,10 +850,10 @@ public:
virtual int layoutSpacing(QSizePolicy::ControlType control1,
QSizePolicy::ControlType control2, Qt::Orientation orientation,
- const QStyleOption *option = Q_NULLPTR, const QWidget *widget = Q_NULLPTR) const = 0;
+ const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const = 0;
int combinedLayoutSpacing(QSizePolicy::ControlTypes controls1,
QSizePolicy::ControlTypes controls2, Qt::Orientation orientation,
- QStyleOption *option = Q_NULLPTR, QWidget *widget = Q_NULLPTR) const;
+ QStyleOption *option = nullptr, QWidget *widget = nullptr) const;
const QStyle * proxy() const;
diff --git a/src/widgets/styles/qstyle.qrc b/src/widgets/styles/qstyle.qrc
index c2d200adc4..2dc3207e6d 100644
--- a/src/widgets/styles/qstyle.qrc
+++ b/src/widgets/styles/qstyle.qrc
@@ -128,12 +128,24 @@
<file>images/media-volume-16.png</file>
<file>images/media-volume-muted-16.png</file>
<file>images/fusion_groupbox.png</file>
+ <file>images/closedock-10.png</file>
+ <file>images/closedock-16.png</file>
+ <file>images/closedock-20.png</file>
+ <file>images/closedock-32.png</file>
+ <file>images/closedock-48.png</file>
+ <file>images/closedock-64.png</file>
+ <file>images/normalizedockup-10.png</file>
+ <file>images/normalizedockup-16.png</file>
+ <file>images/normalizedockup-20.png</file>
+ <file>images/normalizedockup-32.png</file>
+ <file>images/normalizedockup-48.png</file>
+ <file>images/normalizedockup-64.png</file>
</qresource>
<qresource prefix="/qt-project.org/styles/macstyle">
- <file>images/closedock-16.png</file>
- <file>images/closedock-down-16.png</file>
- <file>images/dockdock-16.png</file>
- <file>images/dockdock-down-16.png</file>
+ <file alias="images/closedock-16.png">images/closedock-macstyle-16.png</file>
+ <file alias="images/closedock-down-16.png">images/closedock-down-macstyle-16.png</file>
+ <file alias="images/dockdock-16.png">images/dockdock-macstyle-16.png</file>
+ <file alias="images/dockdock-down-16.png">images/dockdock-down-macstyle-16.png</file>
<file>images/toolbar-ext.png</file>
<file>images/toolbar-ext@2x.png</file>
</qresource>
diff --git a/src/widgets/styles/qstyleanimation_p.h b/src/widgets/styles/qstyleanimation_p.h
index bb1ab9d877..a2ad4a91da 100644
--- a/src/widgets/styles/qstyleanimation_p.h
+++ b/src/widgets/styles/qstyleanimation_p.h
@@ -70,7 +70,7 @@ public:
QObject *target() const;
- int duration() const Q_DECL_OVERRIDE;
+ int duration() const override;
void setDuration(int duration);
int delay() const;
@@ -97,7 +97,7 @@ public Q_SLOTS:
protected:
virtual bool isUpdateNeeded() const;
- virtual void updateCurrentTime(int time) Q_DECL_OVERRIDE;
+ virtual void updateCurrentTime(int time) override;
private:
int _delay;
@@ -121,7 +121,7 @@ public:
void setSpeed(int speed);
protected:
- bool isUpdateNeeded() const Q_DECL_OVERRIDE;
+ bool isUpdateNeeded() const override;
private:
int _speed;
@@ -144,7 +144,7 @@ public:
qreal currentValue() const;
protected:
- bool isUpdateNeeded() const Q_DECL_OVERRIDE;
+ bool isUpdateNeeded() const override;
private:
qreal _start;
@@ -170,7 +170,7 @@ public:
QImage currentImage() const;
protected:
- virtual void updateCurrentTime(int time) Q_DECL_OVERRIDE;
+ virtual void updateCurrentTime(int time) override;
private:
Type _type;
@@ -194,7 +194,7 @@ public:
void setActive(bool active);
private slots:
- void updateCurrentTime(int time) Q_DECL_OVERRIDE;
+ void updateCurrentTime(int time) override;
private:
Mode _mode;
diff --git a/src/widgets/styles/qstylehelper.cpp b/src/widgets/styles/qstylehelper.cpp
index 373699a7aa..8679d96eda 100644
--- a/src/widgets/styles/qstylehelper.cpp
+++ b/src/widgets/styles/qstylehelper.cpp
@@ -411,14 +411,6 @@ QWindow *styleObjectWindow(QObject *so)
return 0;
}
-void setWidgetSizePolicy(const QWidget *widget, WidgetSizePolicy policy)
-{
- QWidget *wadget = const_cast<QWidget *>(widget);
- wadget->setAttribute(Qt::WA_MacNormalSize, policy == SizeLarge);
- wadget->setAttribute(Qt::WA_MacSmallSize, policy == SizeSmall);
- wadget->setAttribute(Qt::WA_MacMiniSize, policy == SizeMini);
-}
-
WidgetSizePolicy widgetSizePolicy(const QWidget *widget, const QStyleOption *opt)
{
while (widget) {
diff --git a/src/widgets/styles/qstylehelper_p.h b/src/widgets/styles/qstylehelper_p.h
index bd263cea7b..260860bf4d 100644
--- a/src/widgets/styles/qstylehelper_p.h
+++ b/src/widgets/styles/qstylehelper_p.h
@@ -94,7 +94,6 @@ namespace QStyleHelper
enum WidgetSizePolicy { SizeLarge = 0, SizeSmall = 1, SizeMini = 2, SizeDefault = -1 };
- void setWidgetSizePolicy(const QWidget *w, WidgetSizePolicy policy);
Q_WIDGETS_EXPORT WidgetSizePolicy widgetSizePolicy(const QWidget *w, const QStyleOption *opt = 0);
}
diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp
index 28bdadcdd1..3666bce205 100644
--- a/src/widgets/styles/qstyleoption.cpp
+++ b/src/widgets/styles/qstyleoption.cpp
@@ -3265,7 +3265,7 @@ QStyleOptionViewItem::QStyleOptionViewItem(int version)
#endif // QT_CONFIG(itemviews)
/*!
- \fn T qstyleoption_cast<T>(const QStyleOption *option)
+ \fn template <typename T> T qstyleoption_cast<T>(const QStyleOption *option)
\relates QStyleOption
Returns a T or 0 depending on the \l{QStyleOption::type}{type} and
@@ -3279,7 +3279,7 @@ QStyleOptionViewItem::QStyleOptionViewItem(int version)
*/
/*!
- \fn T qstyleoption_cast<T>(QStyleOption *option)
+ \fn template <typename T> T qstyleoption_cast<T>(QStyleOption *option)
\overload
\relates QStyleOption
@@ -4001,7 +4001,7 @@ QStyleHintReturnVariant::~QStyleHintReturnVariant()
*/
/*!
- \fn T qstyleoption_cast<T>(const QStyleHintReturn *hint)
+ \fn template <typename T> T qstyleoption_cast<T>(const QStyleHintReturn *hint)
\relates QStyleHintReturn
Returns a T or 0 depending on the \l{QStyleHintReturn::type}{type}
@@ -4015,7 +4015,7 @@ QStyleHintReturnVariant::~QStyleHintReturnVariant()
*/
/*!
- \fn T qstyleoption_cast<T>(QStyleHintReturn *hint)
+ \fn template <typename T> T qstyleoption_cast<T>(QStyleHintReturn *hint)
\overload
\relates QStyleHintReturn
diff --git a/src/widgets/styles/qstyleoption.h b/src/widgets/styles/qstyleoption.h
index f703c56917..2880917510 100644
--- a/src/widgets/styles/qstyleoption.h
+++ b/src/widgets/styles/qstyleoption.h
@@ -682,7 +682,7 @@ T qstyleoption_cast(const QStyleOption *opt)
|| (int(Opt::Type) == QStyleOption::SO_Complex
&& opt->type > QStyleOption::SO_Complex)))
return static_cast<T>(opt);
- return Q_NULLPTR;
+ return nullptr;
}
template <typename T>
@@ -694,7 +694,7 @@ T qstyleoption_cast(QStyleOption *opt)
|| (int(Opt::Type) == QStyleOption::SO_Complex
&& opt->type > QStyleOption::SO_Complex)))
return static_cast<T>(opt);
- return Q_NULLPTR;
+ return nullptr;
}
// -------------------------- QStyleHintReturn -------------------------------
@@ -743,7 +743,7 @@ T qstyleoption_cast(const QStyleHintReturn *hint)
if (hint && hint->version <= Opt::Version &&
(hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
return static_cast<T>(hint);
- return Q_NULLPTR;
+ return nullptr;
}
template <typename T>
@@ -753,7 +753,7 @@ T qstyleoption_cast(QStyleHintReturn *hint)
if (hint && hint->version <= Opt::Version &&
(hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default))
return static_cast<T>(hint);
- return Q_NULLPTR;
+ return nullptr;
}
#if !defined(QT_NO_DEBUG_STREAM)
diff --git a/src/widgets/styles/qstylepainter.h b/src/widgets/styles/qstylepainter.h
index 191360727e..b5e7956cb1 100644
--- a/src/widgets/styles/qstylepainter.h
+++ b/src/widgets/styles/qstylepainter.h
@@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
class QStylePainter : public QPainter
{
public:
- inline QStylePainter() : QPainter(), widget(Q_NULLPTR), wstyle(Q_NULLPTR) {}
+ inline QStylePainter() : QPainter(), widget(nullptr), wstyle(nullptr) {}
inline explicit QStylePainter(QWidget *w) { begin(w, w); }
inline QStylePainter(QPaintDevice *pd, QWidget *w) { begin(pd, w); }
inline bool begin(QWidget *w) { return begin(w, w); }
diff --git a/src/widgets/styles/qstyleplugin.h b/src/widgets/styles/qstyleplugin.h
index d44f57d208..e9a26f9127 100644
--- a/src/widgets/styles/qstyleplugin.h
+++ b/src/widgets/styles/qstyleplugin.h
@@ -55,7 +55,7 @@ class Q_WIDGETS_EXPORT QStylePlugin : public QObject
{
Q_OBJECT
public:
- explicit QStylePlugin(QObject *parent = Q_NULLPTR);
+ explicit QStylePlugin(QObject *parent = nullptr);
~QStylePlugin();
virtual QStyle *create(const QString &key) = 0;
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index ec479100cf..e12aeb900b 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -833,7 +833,7 @@ QHash<QStyle::SubControl, QRect> QStyleSheetStyle::titleBarLayout(const QWidget
continue;
}
if (info.element == PseudoElement_TitleBar) {
- info.width = tb->fontMetrics.width(tb->text) + 6;
+ info.width = tb->fontMetrics.horizontalAdvance(tb->text) + 6;
subRule.geo = new QStyleSheetGeometryData(info.width, tb->fontMetrics.height(), -1, -1, -1, -1);
} else {
subRule = renderRule(w, tb, info.element);
@@ -1463,7 +1463,7 @@ class QStyleSheetStyleSelector : public StyleSelector
public:
QStyleSheetStyleSelector() { }
- QStringList nodeNames(NodePtr node) const Q_DECL_OVERRIDE
+ QStringList nodeNames(NodePtr node) const override
{
if (isNullNode(node))
return QStringList();
@@ -1479,7 +1479,7 @@ public:
} while (metaObject != 0);
return result;
}
- QString attribute(NodePtr node, const QString& name) const Q_DECL_OVERRIDE
+ QString attribute(NodePtr node, const QString& name) const override
{
if (isNullNode(node))
return QString();
@@ -1516,7 +1516,7 @@ public:
cache[name] = valueStr;
return valueStr;
}
- bool nodeNameEquals(NodePtr node, const QString& nodeName) const Q_DECL_OVERRIDE
+ bool nodeNameEquals(NodePtr node, const QString& nodeName) const override
{
if (isNullNode(node))
return false;
@@ -1539,19 +1539,19 @@ public:
} while (metaObject != 0);
return false;
}
- bool hasAttributes(NodePtr) const Q_DECL_OVERRIDE
+ bool hasAttributes(NodePtr) const override
{ return true; }
- QStringList nodeIds(NodePtr node) const Q_DECL_OVERRIDE
+ QStringList nodeIds(NodePtr node) const override
{ return isNullNode(node) ? QStringList() : QStringList(OBJECT_PTR(node)->objectName()); }
- bool isNullNode(NodePtr node) const Q_DECL_OVERRIDE
+ bool isNullNode(NodePtr node) const override
{ return node.ptr == 0; }
- NodePtr parentNode(NodePtr node) const Q_DECL_OVERRIDE
+ NodePtr parentNode(NodePtr node) const override
{ NodePtr n; n.ptr = isNullNode(node) ? 0 : parentObject(OBJECT_PTR(node)); return n; }
- NodePtr previousSiblingNode(NodePtr) const Q_DECL_OVERRIDE
+ NodePtr previousSiblingNode(NodePtr) const override
{ NodePtr n; n.ptr = 0; return n; }
- NodePtr duplicateNode(NodePtr node) const Q_DECL_OVERRIDE
+ NodePtr duplicateNode(NodePtr node) const override
{ return node; }
- void freeNode(NodePtr) const Q_DECL_OVERRIDE
+ void freeNode(NodePtr) const override
{ }
private:
@@ -2692,24 +2692,19 @@ void QStyleSheetStyle::unsetStyleSheetFont(QWidget *w) const
static void updateObjects(const QList<const QObject *>& objects)
{
if (!styleSheetCaches->styleRulesCache.isEmpty() || !styleSheetCaches->hasStyleRuleCache.isEmpty() || !styleSheetCaches->renderRulesCache.isEmpty()) {
- for (int i = 0; i < objects.size(); ++i) {
- const QObject *object = objects.at(i);
+ for (const QObject *object : objects) {
styleSheetCaches->styleRulesCache.remove(object);
styleSheetCaches->hasStyleRuleCache.remove(object);
styleSheetCaches->renderRulesCache.remove(object);
}
}
- QWidgetList widgets;
- foreach (const QObject *object, objects) {
- if (QWidget *w = qobject_cast<QWidget*>(const_cast<QObject*>(object)))
- widgets << w;
- }
-
QEvent event(QEvent::StyleChange);
- foreach (QWidget *widget, widgets) {
- widget->style()->polish(widget);
- QApplication::sendEvent(widget, &event);
+ for (const QObject *object : objects) {
+ if (auto widget = qobject_cast<QWidget*>(const_cast<QObject*>(object))) {
+ widget->style()->polish(widget);
+ QApplication::sendEvent(widget, &event);
+ }
}
}
@@ -4264,7 +4259,7 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
switch (pe) {
case PE_FrameStatusBar: {
- QRenderRule subRule = renderRule(w ? w->parentWidget() : Q_NULLPTR, opt, PseudoElement_Item);
+ QRenderRule subRule = renderRule(w ? w->parentWidget() : nullptr, opt, PseudoElement_Item);
if (subRule.hasDrawable()) {
subRule.drawRule(p, opt->rect);
return;
@@ -4622,7 +4617,7 @@ QStyle::SubControl QStyleSheetStyle::hitTestComplexControl(ComplexControl cc, co
if (!rule.hasDrawable() && !rule.hasBox())
break;
}
- // intentionally falls through
+ Q_FALLTHROUGH();
case CC_SpinBox:
case CC_GroupBox:
case CC_ComboBox:
@@ -5487,7 +5482,7 @@ QRect QStyleSheetStyle::subControlRect(ComplexControl cc, const QStyleOptionComp
groupBox.rect = rule.borderRect(opt->rect);
return baseStyle()->subControlRect(cc, &groupBox, sc, w);
}
- int tw = opt->fontMetrics.width(gb->text);
+ int tw = opt->fontMetrics.horizontalAdvance(gb->text);
int th = opt->fontMetrics.height();
int spacing = pixelMetric(QStyle::PM_CheckBoxLabelSpacing, opt, w);
int iw = pixelMetric(QStyle::PM_IndicatorWidth, opt, w);
@@ -5788,7 +5783,7 @@ QRect QStyleSheetStyle::subElementRect(SubElement se, const QStyleOption *opt, c
if (!qstyleoption_cast<const QStyleOptionViewItem *>(opt)) {
return subElementRect(SE_CheckBoxIndicator, opt, w);
}
- // intentionally falls through
+ Q_FALLTHROUGH();
case SE_ItemViewItemText:
case SE_ItemViewItemDecoration:
case SE_ItemViewItemFocusRect:
@@ -5848,15 +5843,15 @@ QRect QStyleSheetStyle::subElementRect(SubElement se, const QStyleOption *opt, c
#if QT_CONFIG(tabbar)
case SE_TabWidgetLeftCorner:
pe = PseudoElement_TabWidgetLeftCorner;
- // intentionally falls through
+ Q_FALLTHROUGH();
case SE_TabWidgetRightCorner:
if (pe == PseudoElement_None)
pe = PseudoElement_TabWidgetRightCorner;
- // intentionally falls through
+ Q_FALLTHROUGH();
case SE_TabWidgetTabBar:
if (pe == PseudoElement_None)
pe = PseudoElement_TabWidgetTabBar;
- // intentionally falls through
+ Q_FALLTHROUGH();
case SE_TabWidgetTabPane:
case SE_TabWidgetTabContents:
if (pe == PseudoElement_None)
diff --git a/src/widgets/styles/qstylesheetstyle_p.h b/src/widgets/styles/qstylesheetstyle_p.h
index 2d302305bd..042abf5c22 100644
--- a/src/widgets/styles/qstylesheetstyle_p.h
+++ b/src/widgets/styles/qstylesheetstyle_p.h
@@ -82,48 +82,48 @@ public:
~QStyleSheetStyle();
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
- void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
+ void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const override;
void drawItemText(QPainter *painter, const QRect& rect, int alignment, const QPalette &pal,
- bool enabled, const QString& text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE;
+ bool enabled, const QString& text, QPalette::ColorRole textRole = QPalette::NoRole) const override;
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *option) const Q_DECL_OVERRIDE;
+ const QStyleOption *option) const override;
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w = 0) const Q_DECL_OVERRIDE;
- QRect itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
+ const QPoint &pt, const QWidget *w = 0) const override;
+ QRect itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pixmap) const override;
QRect itemTextRect(const QFontMetrics &metrics, const QRect &rect, int alignment, bool enabled,
- const QString &text) const Q_DECL_OVERRIDE;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
- void polish(QWidget *widget) Q_DECL_OVERRIDE;
- void polish(QApplication *app) Q_DECL_OVERRIDE;
- void polish(QPalette &pal) Q_DECL_OVERRIDE;
+ const QString &text) const override;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const override;
+ void polish(QWidget *widget) override;
+ void polish(QApplication *app) override;
+ void polish(QPalette &pal) override;
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
- QPalette standardPalette() const Q_DECL_OVERRIDE;
+ const QSize &contentsSize, const QWidget *widget = 0) const override;
+ QPalette standardPalette() const override;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = 0,
- const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget = 0) const override;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option = 0,
- const QWidget *w = 0 ) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0 ) const override;
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2,
Qt::Orientation orientation, const QStyleOption *option = 0,
- const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget = 0) const override;
int styleHint(StyleHint sh, const QStyleOption *opt = 0, const QWidget *w = 0,
- QStyleHintReturn *shret = 0) const Q_DECL_OVERRIDE;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ QStyleHintReturn *shret = 0) const override;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const override;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
// These functions are called from QApplication/QWidget. Be careful.
QStyle *baseStyle() const;
void repolish(QWidget *widget);
void repolish(QApplication *app);
- void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
- void unpolish(QApplication *app) Q_DECL_OVERRIDE;
+ void unpolish(QWidget *widget) override;
+ void unpolish(QApplication *app) override;
QStyle *base;
void ref() { ++refcount; }
@@ -136,7 +136,7 @@ public:
bool styleSheetPalette(const QWidget* w, const QStyleOption* opt, QPalette* pal);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
private:
int refcount;
diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp
index 657166fc8d..89011350ec 100644
--- a/src/widgets/styles/qwindowsstyle.cpp
+++ b/src/widgets/styles/qwindowsstyle.cpp
@@ -380,7 +380,7 @@ int QWindowsStylePrivate::fixedPixelMetric(QStyle::PixelMetric pm)
static QWindow *windowOf(const QWidget *w)
{
- QWindow *result = Q_NULLPTR;
+ QWindow *result = nullptr;
if (w) {
result = w->windowHandle();
if (!result) {
@@ -798,9 +798,10 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt,
break;
case PE_FrameDefaultButton: {
QPen oldPen = p->pen();
- p->setPen(opt->palette.shadow().color());
- QRect rect = opt->rect;
- rect.adjust(0, 0, -1, -1);
+ p->setPen(QPen(opt->palette.shadow().color(), 0));
+ QRectF rect = opt->rect;
+ rect.adjust(QStyleHelper::dpiScaled(0.5), QStyleHelper::dpiScaled(0.5),
+ QStyleHelper::dpiScaled(-1.5), QStyleHelper::dpiScaled(-1.5));
p->drawRect(rect);
p->setPen(oldPen);
break;
@@ -843,22 +844,16 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt,
}
#endif // QT_CONFIG(itemviews)
if (!(opt->state & State_Off)) {
- QLineF lines[7];
- int i, xx, yy;
- xx = opt->rect.x() + 3;
- yy = opt->rect.y() + 5;
- for (i = 0; i < 3; ++i) {
- lines[i] = QLineF(xx, yy, xx, yy + 2);
- ++xx;
- ++yy;
- }
- yy -= 2;
- for (i = 3; i < 7; ++i) {
- lines[i] = QLineF(xx, yy, xx, yy + 2);
- ++xx;
- --yy;
- }
- p->drawLines(lines, 7);
+ QPointF points[6];
+ points[0] = { opt->rect.x() + QStyleHelper::dpiScaled(3.5), opt->rect.y() + QStyleHelper::dpiScaled(5.5) };
+ points[1] = { points[0].x(), points[0].y() + QStyleHelper::dpiScaled(2) };
+ points[2] = { points[1].x() + QStyleHelper::dpiScaled(2), points[1].y() + QStyleHelper::dpiScaled(2) };
+ points[3] = { points[2].x() + QStyleHelper::dpiScaled(4), points[2].y() - QStyleHelper::dpiScaled(4) };
+ points[4] = { points[3].x(), points[3].y() - QStyleHelper::dpiScaled(2) };
+ points[5] = { points[4].x() - QStyleHelper::dpiScaled(4), points[4].y() + QStyleHelper::dpiScaled(4) };
+ p->setPen(QPen(opt->palette.text().color(), 0));
+ p->setBrush(opt->palette.text().color());
+ p->drawPolygon(points, 6);
}
if (doRestore)
p->restore();
@@ -890,86 +885,57 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt,
break;
case PE_IndicatorRadioButton:
{
-#define PTSARRLEN(x) sizeof(x)/(sizeof(QPoint))
- static const QPoint pts1[] = { // dark lines
- QPoint(1, 9), QPoint(1, 8), QPoint(0, 7), QPoint(0, 4), QPoint(1, 3), QPoint(1, 2),
- QPoint(2, 1), QPoint(3, 1), QPoint(4, 0), QPoint(7, 0), QPoint(8, 1), QPoint(9, 1)
- };
- static const QPoint pts2[] = { // black lines
- QPoint(2, 8), QPoint(1, 7), QPoint(1, 4), QPoint(2, 3), QPoint(2, 2), QPoint(3, 2),
- QPoint(4, 1), QPoint(7, 1), QPoint(8, 2), QPoint(9, 2)
- };
- static const QPoint pts3[] = { // background lines
- QPoint(2, 9), QPoint(3, 9), QPoint(4, 10), QPoint(7, 10), QPoint(8, 9), QPoint(9, 9),
- QPoint(9, 8), QPoint(10, 7), QPoint(10, 4), QPoint(9, 3)
- };
- static const QPoint pts4[] = { // white lines
- QPoint(2, 10), QPoint(3, 10), QPoint(4, 11), QPoint(7, 11), QPoint(8, 10),
- QPoint(9, 10), QPoint(10, 9), QPoint(10, 8), QPoint(11, 7), QPoint(11, 4),
- QPoint(10, 3), QPoint(10, 2)
- };
- static const QPoint pts5[] = { // inner fill
- QPoint(4, 2), QPoint(7, 2), QPoint(9, 4), QPoint(9, 7), QPoint(7, 9), QPoint(4, 9),
- QPoint(2, 7), QPoint(2, 4)
- };
-
- // make sure the indicator is square
- QRect ir = opt->rect;
-
- if (opt->rect.width() < opt->rect.height()) {
- ir.setTop(opt->rect.top() + (opt->rect.height() - opt->rect.width()) / 2);
- ir.setHeight(opt->rect.width());
- } else if (opt->rect.height() < opt->rect.width()) {
- ir.setLeft(opt->rect.left() + (opt->rect.width() - opt->rect.height()) / 2);
- ir.setWidth(opt->rect.height());
- }
-
+ QRect r = opt->rect;
p->save();
- p->setRenderHint(QPainter::Qt4CompatiblePainting);
- bool down = opt->state & State_Sunken;
- bool enabled = opt->state & State_Enabled;
- bool on = opt->state & State_On;
- QPolygon a;
-
- //center when rect is larger than indicator size
- int xOffset = 0;
- int yOffset = 0;
- int indicatorWidth = proxy()->pixelMetric(PM_ExclusiveIndicatorWidth);
- int indicatorHeight = proxy()->pixelMetric(PM_ExclusiveIndicatorHeight);
- if (ir.width() > indicatorWidth)
- xOffset += (ir.width() - indicatorWidth)/2;
- if (ir.height() > indicatorHeight)
- yOffset += (ir.height() - indicatorHeight)/2;
- p->translate(xOffset, yOffset);
-
- p->translate(ir.x(), ir.y());
-
+ p->setRenderHint(QPainter::Antialiasing, true);
+
+ QPointF circleCenter = r.center() + QPoint(1, 1);
+ qreal radius = (r.width() + (r.width() + 1) % 2) / 2.0 - 1;
+
+ QPainterPath path1;
+ path1.addEllipse(circleCenter, radius, radius);
+ radius *= 0.85;
+ QPainterPath path2;
+ path2.addEllipse(circleCenter, radius, radius);
+ radius *= 0.85;
+ QPainterPath path3;
+ path3.addEllipse(circleCenter, radius, radius);
+ radius *= 0.5;
+ QPainterPath path4;
+ path4.addEllipse(circleCenter, radius, radius);
+
+ QPolygon topLeftPol, bottomRightPol;
+ topLeftPol.setPoints(3, r.x(), r.y(), r.x(), r.y() + r.height(), r.x() + r.width(), r.y());
+ bottomRightPol.setPoints(3, r.x(), r.y() + r.height(), r.x() + r.width(), r.y() + r.height(), r.x() + r.width(), r.y());
+
+ p->setClipRegion(QRegion(topLeftPol));
p->setPen(opt->palette.dark().color());
- p->drawPolyline(pts1, PTSARRLEN(pts1));
-
+ p->setBrush(opt->palette.dark().color());
+ p->drawPath(path1);
p->setPen(opt->palette.shadow().color());
- p->drawPolyline(pts2, PTSARRLEN(pts2));
+ p->setBrush(opt->palette.shadow().color());
+ p->drawPath(path2);
+ p->setClipRegion(QRegion(bottomRightPol));
+ p->setPen(opt->palette.light().color());
+ p->setBrush(opt->palette.light().color());
+ p->drawPath(path1);
p->setPen(opt->palette.midlight().color());
- p->drawPolyline(pts3, PTSARRLEN(pts3));
+ p->setBrush(opt->palette.midlight().color());
+ p->drawPath(path2);
- p->setPen(opt->palette.light().color());
- p->drawPolyline(pts4, PTSARRLEN(pts4));
+ QColor fillColor = ((opt->state & State_Sunken) || !(opt->state & State_Enabled)) ?
+ opt->palette.button().color() : opt->palette.base().color();
- QColor fillColor = (down || !enabled)
- ? opt->palette.button().color()
- : opt->palette.base().color();
+ p->setClipping(false);
p->setPen(fillColor);
- p->setBrush(fillColor) ;
- p->drawPolygon(pts5, PTSARRLEN(pts5));
+ p->setBrush(fillColor);
+ p->drawPath(path3);
- p->translate(-ir.x(), -ir.y()); // restore translate
-
- if (on) {
- p->setPen(Qt::NoPen);
+ if (opt->state & State_On) {
+ p->setPen(opt->palette.text().color());
p->setBrush(opt->palette.text());
- p->drawRect(ir.x() + 5, ir.y() + 4, 2, 4);
- p->drawRect(ir.x() + 4, ir.y() + 5, 4, 2);
+ p->drawPath(path4);
}
p->restore();
break;
@@ -2388,7 +2354,7 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
QFont fontBold = mi->font;
fontBold.setBold(true);
QFontMetrics fmBold(fontBold);
- w += fmBold.width(mi->text) - fm.width(mi->text);
+ w += fmBold.horizontalAdvance(mi->text) - fm.horizontalAdvance(mi->text);
}
int checkcol = qMax<int>(maxpmw, QWindowsStylePrivate::windowsCheckMarkWidth); // Windows always shows a check column
diff --git a/src/widgets/styles/qwindowsstyle_p.h b/src/widgets/styles/qwindowsstyle_p.h
index 12a682f330..7993b9f1c6 100644
--- a/src/widgets/styles/qwindowsstyle_p.h
+++ b/src/widgets/styles/qwindowsstyle_p.h
@@ -68,37 +68,37 @@ public:
QWindowsStyle();
~QWindowsStyle();
- void polish(QApplication*) Q_DECL_OVERRIDE;
- void unpolish(QApplication*) Q_DECL_OVERRIDE;
+ void polish(QApplication*) override;
+ void unpolish(QApplication*) override;
- void polish(QWidget*) Q_DECL_OVERRIDE;
- void unpolish(QWidget*) Q_DECL_OVERRIDE;
+ void polish(QWidget*) override;
+ void unpolish(QWidget*) override;
- void polish(QPalette &) Q_DECL_OVERRIDE;
+ void polish(QPalette &) override;
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const override;
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ const QWidget *w = 0) const override;
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QSize &contentsSize, const QWidget *widget = 0) const override;
- int pixelMetric(PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ int pixelMetric(PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const override;
int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0,
- QStyleHintReturn *returnData = 0) const Q_DECL_OVERRIDE;
+ QStyleHintReturn *returnData = 0) const override;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
- const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget = 0) const override;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
- const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ const QWidget *widget = 0) const override;
protected:
- bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *o, QEvent *e) override;
QWindowsStyle(QWindowsStylePrivate &dd);
private:
diff --git a/src/widgets/styles/qwindowsstyle_p_p.h b/src/widgets/styles/qwindowsstyle_p_p.h
index 8b387b6ab9..67fa6a2f86 100644
--- a/src/widgets/styles/qwindowsstyle_p_p.h
+++ b/src/widgets/styles/qwindowsstyle_p_p.h
@@ -73,7 +73,7 @@ public:
static int fixedPixelMetric(QStyle::PixelMetric pm);
static qreal devicePixelRatio(const QWidget *widget = 0)
{ return widget ? widget->devicePixelRatioF() : QWindowsStylePrivate::appDevicePixelRatio(); }
- static qreal nativeMetricScaleFactor(const QWidget *widget = Q_NULLPTR);
+ static qreal nativeMetricScaleFactor(const QWidget *widget = nullptr);
bool hasSeenAlt(const QWidget *widget) const;
bool altDown() const { return alt_down; }
diff --git a/src/widgets/util/qcompleter.h b/src/widgets/util/qcompleter.h
index 1a2c2440f5..de79302e15 100644
--- a/src/widgets/util/qcompleter.h
+++ b/src/widgets/util/qcompleter.h
@@ -82,10 +82,10 @@ public:
CaseInsensitivelySortedModel
};
- QCompleter(QObject *parent = Q_NULLPTR);
- QCompleter(QAbstractItemModel *model, QObject *parent = Q_NULLPTR);
+ QCompleter(QObject *parent = nullptr);
+ QCompleter(QAbstractItemModel *model, QObject *parent = nullptr);
#ifndef QT_NO_STRINGLISTMODEL
- QCompleter(const QStringList& completions, QObject *parent = Q_NULLPTR);
+ QCompleter(const QStringList& completions, QObject *parent = nullptr);
#endif
~QCompleter();
@@ -142,8 +142,8 @@ public:
virtual QStringList splitPath(const QString &path) const;
protected:
- bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *o, QEvent *e) override;
+ bool event(QEvent *) override;
Q_SIGNALS:
void activated(const QString &text);
diff --git a/src/widgets/util/qcompleter_p.h b/src/widgets/util/qcompleter_p.h
index e76dcdc8bc..765363744b 100644
--- a/src/widgets/util/qcompleter_p.h
+++ b/src/widgets/util/qcompleter_p.h
@@ -177,7 +177,7 @@ class QSortedModelEngine : public QCompletionEngine
{
public:
QSortedModelEngine(QCompleterPrivate *c) : QCompletionEngine(c) { }
- QMatchData filter(const QString&, const QModelIndex&, int) Q_DECL_OVERRIDE;
+ QMatchData filter(const QString&, const QModelIndex&, int) override;
QIndexMapper indexHint(QString, const QModelIndex&, Qt::SortOrder);
Qt::SortOrder sortOrder(const QModelIndex&) const;
};
@@ -187,8 +187,8 @@ class QUnsortedModelEngine : public QCompletionEngine
public:
QUnsortedModelEngine(QCompleterPrivate *c) : QCompletionEngine(c) { }
- void filterOnDemand(int) Q_DECL_OVERRIDE;
- QMatchData filter(const QString&, const QModelIndex&, int) Q_DECL_OVERRIDE;
+ void filterOnDemand(int) override;
+ QMatchData filter(const QString&, const QModelIndex&, int) override;
private:
int buildIndices(const QString& str, const QModelIndex& parent, int n,
const QIndexMapper& iv, QMatchData* m);
@@ -199,7 +199,7 @@ class QCompleterItemDelegate : public QItemDelegate
public:
QCompleterItemDelegate(QAbstractItemView *view)
: QItemDelegate(view), view(view) { }
- void paint(QPainter *p, const QStyleOptionViewItem& opt, const QModelIndex& idx) const Q_DECL_OVERRIDE {
+ void paint(QPainter *p, const QStyleOptionViewItem& opt, const QModelIndex& idx) const override {
QStyleOptionViewItem optCopy = opt;
optCopy.showDecorationSelected = true;
if (view->currentIndex() == idx)
@@ -228,16 +228,16 @@ public:
bool setCurrentRow(int row);
QModelIndex currentIndex(bool) const;
- QModelIndex index(int row, int column, const QModelIndex & = QModelIndex()) const Q_DECL_OVERRIDE;
- int rowCount(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE;
- int columnCount(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QModelIndex parent(const QModelIndex & = QModelIndex()) const Q_DECL_OVERRIDE { return QModelIndex(); }
- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex & = QModelIndex()) const override;
+ int rowCount(const QModelIndex &index = QModelIndex()) const override;
+ int columnCount(const QModelIndex &index = QModelIndex()) const override;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex & = QModelIndex()) const override { return QModelIndex(); }
+ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
- void setSourceModel(QAbstractItemModel *sourceModel) Q_DECL_OVERRIDE;
- QModelIndex mapToSource(const QModelIndex& proxyIndex) const Q_DECL_OVERRIDE;
- QModelIndex mapFromSource(const QModelIndex& sourceIndex) const Q_DECL_OVERRIDE;
+ void setSourceModel(QAbstractItemModel *sourceModel) override;
+ QModelIndex mapToSource(const QModelIndex& proxyIndex) const override;
+ QModelIndex mapFromSource(const QModelIndex& sourceIndex) const override;
QCompleterPrivate *c;
QScopedPointer<QCompletionEngine> engine;
diff --git a/src/widgets/util/qflickgesture.cpp b/src/widgets/util/qflickgesture.cpp
index 549b130c9d..b59fe0d504 100644
--- a/src/widgets/util/qflickgesture.cpp
+++ b/src/widgets/util/qflickgesture.cpp
@@ -256,7 +256,7 @@ public:
}
protected:
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE
+ void timerEvent(QTimerEvent *e) override
{
if (e->timerId() == pressDelayTimer) {
if (pressDelayEvent && mouseTarget) {
diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp
index d8ac686fb9..903a141e49 100644
--- a/src/widgets/util/qscroller.cpp
+++ b/src/widgets/util/qscroller.cpp
@@ -58,6 +58,7 @@
#include <QGraphicsView>
#endif
#include <QDesktopWidget>
+#include <private/qdesktopwidget_p.h>
#include <QVector2D>
#include <QtCore/qmath.h>
#include <QtGui/qevent.h>
@@ -198,7 +199,7 @@ public:
: QAbstractAnimation(_d), d(_d), ignoreUpdate(false), skip(0)
{ }
- int duration() const Q_DECL_OVERRIDE
+ int duration() const override
{
return -1;
}
@@ -214,7 +215,7 @@ public:
}
protected:
- void updateCurrentTime(int /*currentTime*/) Q_DECL_OVERRIDE
+ void updateCurrentTime(int /*currentTime*/) override
{
if (!ignoreUpdate) {
if (++skip >= d->frameRateSkip()) {
@@ -280,10 +281,9 @@ private:
*/
typedef QMap<QObject *, QScroller *> ScrollerHash;
-typedef QSet<QScroller *> ScrollerSet;
Q_GLOBAL_STATIC(ScrollerHash, qt_allScrollers)
-Q_GLOBAL_STATIC(ScrollerSet, qt_activeScrollers)
+Q_GLOBAL_STATIC(QList<QScroller *>, qt_activeScrollers)
/*!
Returns \c true if a QScroller object was already created for \a target; \c false otherwise.
@@ -334,7 +334,7 @@ const QScroller *QScroller::scroller(const QObject *target)
*/
QList<QScroller *> QScroller::activeScrollers()
{
- return qt_activeScrollers()->toList();
+ return *qt_activeScrollers();
}
/*!
@@ -348,7 +348,7 @@ QObject *QScroller::target() const
}
/*!
- \fn QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties);
+ \fn void QScroller::scrollerPropertiesChanged(const QScrollerProperties &newProperties);
QScroller emits this signal whenever its scroller properties change.
\a newProperties are the new scroller properties.
@@ -511,14 +511,14 @@ QScroller::~QScroller()
d->recognizer = 0;
#endif
qt_allScrollers()->remove(d->target);
- qt_activeScrollers()->remove(this);
+ qt_activeScrollers()->removeOne(this);
delete d_ptr;
}
/*!
- \fn QScroller::stateChanged(QScroller::State newState);
+ \fn void QScroller::stateChanged(QScroller::State newState);
QScroller emits this signal whenever the state changes. \a newState is the new State.
@@ -1013,40 +1013,6 @@ bool QScroller::handleInput(Input input, const QPointF &position, qint64 timesta
return false;
}
-#if 1 // Used to be excluded in Qt4 for Q_WS_MAC
-// the Mac version is implemented in qscroller_mac.mm
-
-QPointF QScrollerPrivate::realDpi(int screen) const
-{
-# if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && !defined(QT_NO_XRANDR)
- if (X11 && X11->use_xrandr && X11->ptrXRRSizes && X11->ptrXRRRootToScreen) {
- int nsizes = 0;
- // QDesktopWidget is based on Xinerama screens, which do not always
- // correspond to RandR screens: NVidia's TwinView e.g. will show up
- // as 2 screens in QDesktopWidget, but libXRandR will only see 1 screen.
- // (although with the combined size of the Xinerama screens).
- // Additionally, libXrandr will simply crash when calling XRRSizes
- // for (the non-existent) screen 1 in this scenario.
- Window root = RootWindow(X11->display, screen == -1 ? X11->defaultScreen : screen);
- int randrscreen = (root != XNone) ? X11->ptrXRRRootToScreen(X11->display, root) : -1;
-
- XRRScreenSize *sizes = X11->ptrXRRSizes(X11->display, randrscreen == -1 ? 0 : randrscreen, &nsizes);
- if (nsizes > 0 && sizes && sizes->width && sizes->height && sizes->mwidth && sizes->mheight) {
- qScrollerDebug() << "XRandR DPI:" << QPointF(qreal(25.4) * qreal(sizes->width) / qreal(sizes->mwidth),
- qreal(25.4) * qreal(sizes->height) / qreal(sizes->mheight));
- return QPointF(qreal(25.4) * qreal(sizes->width) / qreal(sizes->mwidth),
- qreal(25.4) * qreal(sizes->height) / qreal(sizes->mheight));
- }
- }
-# endif
-
- QWidget *w = QApplication::desktop()->screen(screen);
- return QPointF(w->physicalDpiX(), w->physicalDpiY());
-}
-
-#endif
-
-
/*! \internal
Returns the resolution of the used screen.
*/
@@ -1071,8 +1037,8 @@ void QScrollerPrivate::setDpi(const QPointF &dpi)
*/
void QScrollerPrivate::setDpiFromWidget(QWidget *widget)
{
- QDesktopWidget *dw = QApplication::desktop();
- setDpi(realDpi(widget ? dw->screenNumber(widget) : dw->primaryScreen()));
+ const QScreen *screen = QGuiApplication::screens().at(QApplication::desktop()->screenNumber(widget));
+ setDpi(QPointF(screen->physicalDotsPerInchX(), screen->physicalDotsPerInchY()));
}
/*! \internal
@@ -1767,9 +1733,9 @@ void QScrollerPrivate::setState(QScroller::State newstate)
firstScroll = true;
}
if (state == QScroller::Dragging || state == QScroller::Scrolling)
- qt_activeScrollers()->insert(q);
+ qt_activeScrollers()->push_back(q);
else
- qt_activeScrollers()->remove(q);
+ qt_activeScrollers()->removeOne(q);
emit q->stateChanged(state);
}
diff --git a/src/widgets/util/qscroller_p.h b/src/widgets/util/qscroller_p.h
index 4557e7cc33..5e0c359514 100644
--- a/src/widgets/util/qscroller_p.h
+++ b/src/widgets/util/qscroller_p.h
@@ -119,7 +119,6 @@ public:
bool prepareScrolling(const QPointF &position);
void handleDrag(const QPointF &position, qint64 timestamp);
- QPointF realDpi(int screen) const;
QPointF dpi() const;
void setDpi(const QPointF &dpi);
void setDpiFromWidget(QWidget *widget);
diff --git a/src/widgets/util/qsystemtrayicon.h b/src/widgets/util/qsystemtrayicon.h
index 81f396ed83..e4652b742c 100644
--- a/src/widgets/util/qsystemtrayicon.h
+++ b/src/widgets/util/qsystemtrayicon.h
@@ -66,8 +66,8 @@ class Q_WIDGETS_EXPORT QSystemTrayIcon : public QObject
Q_PROPERTY(bool visible READ isVisible WRITE setVisible DESIGNABLE false)
public:
- QSystemTrayIcon(QObject *parent = Q_NULLPTR);
- QSystemTrayIcon(const QIcon &icon, QObject *parent = Q_NULLPTR);
+ QSystemTrayIcon(QObject *parent = nullptr);
+ QSystemTrayIcon(const QIcon &icon, QObject *parent = nullptr);
~QSystemTrayIcon();
enum ActivationReason {
@@ -110,7 +110,7 @@ Q_SIGNALS:
void messageClicked();
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
private:
Q_DISABLE_COPY(QSystemTrayIcon)
diff --git a/src/widgets/util/qsystemtrayicon_p.h b/src/widgets/util/qsystemtrayicon_p.h
index 318edbd1e3..5bdf020a47 100644
--- a/src/widgets/util/qsystemtrayicon_p.h
+++ b/src/widgets/util/qsystemtrayicon_p.h
@@ -127,10 +127,10 @@ private:
void balloon(const QPoint&, int, bool);
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void timerEvent(QTimerEvent *e) override;
private:
QSystemTrayIcon *trayIcon;
diff --git a/src/widgets/util/qsystemtrayicon_x11.cpp b/src/widgets/util/qsystemtrayicon_x11.cpp
index cd593d8d98..df93e15f80 100644
--- a/src/widgets/util/qsystemtrayicon_x11.cpp
+++ b/src/widgets/util/qsystemtrayicon_x11.cpp
@@ -87,12 +87,12 @@ public:
QRect globalGeometry() const;
protected:
- virtual void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- virtual void mouseDoubleClickEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- virtual bool event(QEvent *) Q_DECL_OVERRIDE;
- virtual void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- virtual void moveEvent(QMoveEvent *) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *ev) override;
+ virtual void mouseDoubleClickEvent(QMouseEvent *ev) override;
+ virtual bool event(QEvent *) override;
+ virtual void paintEvent(QPaintEvent *) override;
+ virtual void resizeEvent(QResizeEvent *) override;
+ virtual void moveEvent(QMoveEvent *) override;
private slots:
void systemTrayWindowChanged(QScreen *screen);
diff --git a/src/widgets/util/qundogroup.h b/src/widgets/util/qundogroup.h
index dba79ea706..1845f7e057 100644
--- a/src/widgets/util/qundogroup.h
+++ b/src/widgets/util/qundogroup.h
@@ -58,7 +58,7 @@ class Q_WIDGETS_EXPORT QUndoGroup : public QObject
Q_DECLARE_PRIVATE(QUndoGroup)
public:
- explicit QUndoGroup(QObject *parent = Q_NULLPTR);
+ explicit QUndoGroup(QObject *parent = nullptr);
~QUndoGroup();
void addStack(QUndoStack *stack);
diff --git a/src/widgets/util/qundostack.h b/src/widgets/util/qundostack.h
index 7ab90b507a..4be24eadab 100644
--- a/src/widgets/util/qundostack.h
+++ b/src/widgets/util/qundostack.h
@@ -57,8 +57,8 @@ class Q_WIDGETS_EXPORT QUndoCommand
QUndoCommandPrivate *d;
public:
- explicit QUndoCommand(QUndoCommand *parent = Q_NULLPTR);
- explicit QUndoCommand(const QString &text, QUndoCommand *parent = Q_NULLPTR);
+ explicit QUndoCommand(QUndoCommand *parent = nullptr);
+ explicit QUndoCommand(const QString &text, QUndoCommand *parent = nullptr);
virtual ~QUndoCommand();
virtual void undo();
@@ -92,7 +92,7 @@ class Q_WIDGETS_EXPORT QUndoStack : public QObject
Q_PROPERTY(int undoLimit READ undoLimit WRITE setUndoLimit)
public:
- explicit QUndoStack(QObject *parent = Q_NULLPTR);
+ explicit QUndoStack(QObject *parent = nullptr);
~QUndoStack();
void clear();
diff --git a/src/widgets/util/qundoview.cpp b/src/widgets/util/qundoview.cpp
index b56aa42aed..31f6c0dff2 100644
--- a/src/widgets/util/qundoview.cpp
+++ b/src/widgets/util/qundoview.cpp
@@ -59,11 +59,11 @@ public:
QUndoStack *stack() const;
virtual QModelIndex index(int row, int column,
- const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- virtual QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- virtual int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ const QModelIndex &parent = QModelIndex()) const override;
+ virtual QModelIndex parent(const QModelIndex &child) const override;
+ virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QModelIndex selectedIndex() const;
QItemSelectionModel *selectionModel() const;
diff --git a/src/widgets/util/qundoview.h b/src/widgets/util/qundoview.h
index 0bfcdd0c18..403f05d2e4 100644
--- a/src/widgets/util/qundoview.h
+++ b/src/widgets/util/qundoview.h
@@ -62,10 +62,10 @@ class Q_WIDGETS_EXPORT QUndoView : public QListView
Q_PROPERTY(QIcon cleanIcon READ cleanIcon WRITE setCleanIcon)
public:
- explicit QUndoView(QWidget *parent = Q_NULLPTR);
- explicit QUndoView(QUndoStack *stack, QWidget *parent = Q_NULLPTR);
+ explicit QUndoView(QWidget *parent = nullptr);
+ explicit QUndoView(QUndoStack *stack, QWidget *parent = nullptr);
#if QT_CONFIG(undogroup)
- explicit QUndoView(QUndoGroup *group, QWidget *parent = Q_NULLPTR);
+ explicit QUndoView(QUndoGroup *group, QWidget *parent = nullptr);
#endif
~QUndoView();
diff --git a/src/widgets/widgets.pro b/src/widgets/widgets.pro
index 8181817787..e028a691c8 100644
--- a/src/widgets/widgets.pro
+++ b/src/widgets/widgets.pro
@@ -5,7 +5,6 @@ MODULE_CONFIG = uic
CONFIG += $$MODULE_CONFIG
DEFINES += QT_NO_USING_NAMESPACE
msvc:equals(QT_ARCH, i386): QMAKE_LFLAGS += /BASE:0x65000000
-irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused
QMAKE_DOCS = $$PWD/doc/qtwidgets.qdocconf
diff --git a/src/widgets/widgets/qabstractbutton.h b/src/widgets/widgets/qabstractbutton.h
index 01dbf4e92d..e8dee142f2 100644
--- a/src/widgets/widgets/qabstractbutton.h
+++ b/src/widgets/widgets/qabstractbutton.h
@@ -72,7 +72,7 @@ class Q_WIDGETS_EXPORT QAbstractButton : public QWidget
Q_PROPERTY(bool down READ isDown WRITE setDown DESIGNABLE false)
public:
- explicit QAbstractButton(QWidget *parent = Q_NULLPTR);
+ explicit QAbstractButton(QWidget *parent = nullptr);
~QAbstractButton();
void setText(const QString &text);
@@ -126,25 +126,25 @@ Q_SIGNALS:
void toggled(bool checked);
protected:
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE = 0;
+ void paintEvent(QPaintEvent *e) override = 0;
virtual bool hitButton(const QPoint &pos) const;
virtual void checkStateSet();
virtual void nextCheckState();
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void keyPressEvent(QKeyEvent *e) override;
+ void keyReleaseEvent(QKeyEvent *e) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
+ void mouseMoveEvent(QMouseEvent *e) override;
+ void focusInEvent(QFocusEvent *e) override;
+ void focusOutEvent(QFocusEvent *e) override;
+ void changeEvent(QEvent *e) override;
+ void timerEvent(QTimerEvent *e) override;
protected:
- QAbstractButton(QAbstractButtonPrivate &dd, QWidget* parent = Q_NULLPTR);
+ QAbstractButton(QAbstractButtonPrivate &dd, QWidget* parent = nullptr);
private:
Q_DECLARE_PRIVATE(QAbstractButton)
diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp
index c6d66bafd4..917cddce6f 100644
--- a/src/widgets/widgets/qabstractscrollarea.cpp
+++ b/src/widgets/widgets/qabstractscrollarea.cpp
@@ -1163,7 +1163,7 @@ bool QAbstractScrollArea::event(QEvent *e)
case QEvent::ApplicationLayoutDirectionChange:
case QEvent::LayoutRequest:
d->layoutChildren();
- // fall through
+ Q_FALLTHROUGH();
default:
return QFrame::event(e);
}
diff --git a/src/widgets/widgets/qabstractscrollarea.h b/src/widgets/widgets/qabstractscrollarea.h
index cee8481e6f..8a17036fb2 100644
--- a/src/widgets/widgets/qabstractscrollarea.h
+++ b/src/widgets/widgets/qabstractscrollarea.h
@@ -61,7 +61,7 @@ class Q_WIDGETS_EXPORT QAbstractScrollArea : public QFrame
Q_PROPERTY(SizeAdjustPolicy sizeAdjustPolicy READ sizeAdjustPolicy WRITE setSizeAdjustPolicy)
public:
- explicit QAbstractScrollArea(QWidget *parent = Q_NULLPTR);
+ explicit QAbstractScrollArea(QWidget *parent = nullptr);
~QAbstractScrollArea();
enum SizeAdjustPolicy {
@@ -91,9 +91,9 @@ public:
void setViewport(QWidget *widget);
QSize maximumViewportSize() const;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const override;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
virtual void setupViewport(QWidget *viewport);
@@ -101,35 +101,35 @@ public:
void setSizeAdjustPolicy(SizeAdjustPolicy policy);
protected:
- QAbstractScrollArea(QAbstractScrollAreaPrivate &dd, QWidget *parent = Q_NULLPTR);
+ QAbstractScrollArea(QAbstractScrollAreaPrivate &dd, QWidget *parent = nullptr);
void setViewportMargins(int left, int top, int right, int bottom);
void setViewportMargins(const QMargins &margins);
QMargins viewportMargins() const;
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) override;
+ bool event(QEvent *) override;
virtual bool viewportEvent(QEvent *);
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) override;
+ void paintEvent(QPaintEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+ void mouseDoubleClickEvent(QMouseEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *) override;
#endif
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *) override;
#endif
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *) Q_DECL_OVERRIDE;
- void dragMoveEvent(QDragMoveEvent *) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *) override;
+ void dragMoveEvent(QDragMoveEvent *) override;
+ void dragLeaveEvent(QDragLeaveEvent *) override;
+ void dropEvent(QDropEvent *) override;
#endif
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *) override;
virtual void scrollContentsBy(int dx, int dy);
diff --git a/src/widgets/widgets/qabstractscrollarea_p.h b/src/widgets/widgets/qabstractscrollarea_p.h
index 49f97bcb61..732a2ab40d 100644
--- a/src/widgets/widgets/qabstractscrollarea_p.h
+++ b/src/widgets/widgets/qabstractscrollarea_p.h
@@ -125,7 +125,7 @@ class QAbstractScrollAreaFilter : public QObject
public:
QAbstractScrollAreaFilter(QAbstractScrollAreaPrivate *p) : d(p)
{ setObjectName(QLatin1String("qt_abstractscrollarea_filter")); }
- bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE
+ bool eventFilter(QObject *o, QEvent *e) override
{ return (o == d->viewport ? d->viewportEvent(e) : false); }
private:
QAbstractScrollAreaPrivate *d;
diff --git a/src/widgets/widgets/qabstractslider.h b/src/widgets/widgets/qabstractslider.h
index d26d6a879c..7791d30d10 100644
--- a/src/widgets/widgets/qabstractslider.h
+++ b/src/widgets/widgets/qabstractslider.h
@@ -67,7 +67,7 @@ class Q_WIDGETS_EXPORT QAbstractSlider : public QWidget
Q_PROPERTY(bool sliderDown READ isSliderDown WRITE setSliderDown DESIGNABLE false)
public:
- explicit QAbstractSlider(QWidget *parent = Q_NULLPTR);
+ explicit QAbstractSlider(QWidget *parent = nullptr);
~QAbstractSlider();
Qt::Orientation orientation() const;
@@ -131,7 +131,7 @@ Q_SIGNALS:
void actionTriggered(int action);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
void setRepeatAction(SliderAction action, int thresholdTime = 500, int repeatTime = 50);
SliderAction repeatAction() const;
@@ -144,16 +144,16 @@ protected:
};
virtual void sliderChange(SliderChange change);
- void keyPressEvent(QKeyEvent *ev) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *ev) override;
+ void timerEvent(QTimerEvent *) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *e) override;
#endif
- void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *e) override;
protected:
- QAbstractSlider(QAbstractSliderPrivate &dd, QWidget *parent = Q_NULLPTR);
+ QAbstractSlider(QAbstractSliderPrivate &dd, QWidget *parent = nullptr);
private:
Q_DISABLE_COPY(QAbstractSlider)
diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp
index 3427579d1f..7ca47e9f0f 100644
--- a/src/widgets/widgets/qabstractspinbox.cpp
+++ b/src/widgets/widgets/qabstractspinbox.cpp
@@ -678,15 +678,20 @@ void QAbstractSpinBox::setLineEdit(QLineEdit *lineEdit)
Q_ASSERT(lineEdit);
return;
}
+
+ if (lineEdit == d->edit)
+ return;
+
delete d->edit;
d->edit = lineEdit;
+ setProperty("_q_spinbox_lineedit", QVariant::fromValue<QWidget *>(d->edit));
if (!d->edit->validator())
d->edit->setValidator(d->validator);
if (d->edit->parent() != this)
d->edit->setParent(this);
- d->edit->setFrame(false);
+ d->edit->setFrame(!style()->styleHint(QStyle::SH_SpinBox_ButtonsInsideFrame, nullptr, this));
d->edit->setFocusProxy(this);
d->edit->setAcceptDrops(false);
@@ -818,6 +823,8 @@ void QAbstractSpinBox::changeEvent(QEvent *event)
d->spinClickTimerInterval = style()->styleHint(QStyle::SH_SpinBox_ClickAutoRepeatRate, 0, this);
d->spinClickThresholdTimerInterval =
style()->styleHint(QStyle::SH_SpinBox_ClickAutoRepeatThreshold, 0, this);
+ if (d->edit)
+ d->edit->setFrame(!style()->styleHint(QStyle::SH_SpinBox_ButtonsInsideFrame, nullptr, this));
d->reset();
d->updateEditFieldGeometry();
break;
@@ -870,15 +877,15 @@ QSize QAbstractSpinBox::sizeHint() const
s = d->textFromValue(d->minimum);
s.truncate(18);
s += fixedContent;
- w = qMax(w, fm.width(s));
+ w = qMax(w, fm.horizontalAdvance(s));
s = d->textFromValue(d->maximum);
s.truncate(18);
s += fixedContent;
- w = qMax(w, fm.width(s));
+ w = qMax(w, fm.horizontalAdvance(s));
if (d->specialValueText.size()) {
s = d->specialValueText;
- w = qMax(w, fm.width(s));
+ w = qMax(w, fm.horizontalAdvance(s));
}
w += 2; // cursor blinking space
@@ -911,15 +918,15 @@ QSize QAbstractSpinBox::minimumSizeHint() const
s = d->textFromValue(d->minimum);
s.truncate(18);
s += fixedContent;
- w = qMax(w, fm.width(s));
+ w = qMax(w, fm.horizontalAdvance(s));
s = d->textFromValue(d->maximum);
s.truncate(18);
s += fixedContent;
- w = qMax(w, fm.width(s));
+ w = qMax(w, fm.horizontalAdvance(s));
if (d->specialValueText.size()) {
s = d->specialValueText;
- w = qMax(w, fm.width(s));
+ w = qMax(w, fm.horizontalAdvance(s));
}
w += 2; // cursor blinking space
@@ -1644,7 +1651,9 @@ void QAbstractSpinBox::initStyleOption(QStyleOptionSpinBox *option) const
option->initFrom(this);
option->activeSubControls = QStyle::SC_None;
option->buttonSymbols = d->buttonSymbols;
- option->subControls = QStyle::SC_SpinBoxFrame | QStyle::SC_SpinBoxEditField;
+ option->subControls = QStyle::SC_SpinBoxEditField;
+ if (!style()->styleHint(QStyle::SH_SpinBox_ButtonsInsideFrame, nullptr, this))
+ option->subControls |= QStyle::SC_SpinBoxFrame;
if (d->buttonSymbols != QAbstractSpinBox::NoButtons) {
option->subControls |= QStyle::SC_SpinBoxUp | QStyle::SC_SpinBoxDown;
if (d->buttonState & Up) {
diff --git a/src/widgets/widgets/qabstractspinbox.h b/src/widgets/widgets/qabstractspinbox.h
index 88735baf1c..83bf83d779 100644
--- a/src/widgets/widgets/qabstractspinbox.h
+++ b/src/widgets/widgets/qabstractspinbox.h
@@ -70,7 +70,7 @@ class Q_WIDGETS_EXPORT QAbstractSpinBox : public QWidget
Q_PROPERTY(bool keyboardTracking READ keyboardTracking WRITE setKeyboardTracking)
Q_PROPERTY(bool showGroupSeparator READ isGroupSeparatorShown WRITE setGroupSeparatorShown)
public:
- explicit QAbstractSpinBox(QWidget *parent = Q_NULLPTR);
+ explicit QAbstractSpinBox(QWidget *parent = nullptr);
~QAbstractSpinBox();
enum StepEnabledFlag { StepNone = 0x00, StepUpEnabled = 0x01,
@@ -162,7 +162,7 @@ protected:
Q_SIGNALS:
void editingFinished();
protected:
- QAbstractSpinBox(QAbstractSpinBoxPrivate &dd, QWidget *parent = Q_NULLPTR);
+ QAbstractSpinBox(QAbstractSpinBoxPrivate &dd, QWidget *parent = nullptr);
private:
Q_PRIVATE_SLOT(d_func(), void _q_editorTextChanged(const QString &))
diff --git a/src/widgets/widgets/qbuttongroup.h b/src/widgets/widgets/qbuttongroup.h
index 1b4f2377ae..fec94ccb3e 100644
--- a/src/widgets/widgets/qbuttongroup.h
+++ b/src/widgets/widgets/qbuttongroup.h
@@ -57,7 +57,7 @@ class Q_WIDGETS_EXPORT QButtonGroup : public QObject
Q_PROPERTY(bool exclusive READ exclusive WRITE setExclusive)
public:
- explicit QButtonGroup(QObject *parent = Q_NULLPTR);
+ explicit QButtonGroup(QObject *parent = nullptr);
~QButtonGroup();
void setExclusive(bool);
diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp
index 94911d1cb1..059fb21295 100644
--- a/src/widgets/widgets/qcalendarwidget.cpp
+++ b/src/widgets/widgets/qcalendarwidget.cpp
@@ -115,11 +115,11 @@ class QCalendarDayValidator : public QCalendarDateSectionValidator
public:
QCalendarDayValidator();
- virtual Section handleKey(int key) Q_DECL_OVERRIDE;
- virtual QDate applyToDate(const QDate &date) const Q_DECL_OVERRIDE;
- virtual void setDate(const QDate &date) Q_DECL_OVERRIDE;
- virtual QString text() const Q_DECL_OVERRIDE;
- virtual QString text(const QDate &date, int repeat) const Q_DECL_OVERRIDE;
+ virtual Section handleKey(int key) override;
+ virtual QDate applyToDate(const QDate &date) const override;
+ virtual void setDate(const QDate &date) override;
+ virtual QString text() const override;
+ virtual QString text(const QDate &date, int repeat) const override;
private:
int m_pos;
int m_day;
@@ -223,11 +223,11 @@ class QCalendarMonthValidator : public QCalendarDateSectionValidator
public:
QCalendarMonthValidator();
- virtual Section handleKey(int key) Q_DECL_OVERRIDE;
- virtual QDate applyToDate(const QDate &date) const Q_DECL_OVERRIDE;
- virtual void setDate(const QDate &date) Q_DECL_OVERRIDE;
- virtual QString text() const Q_DECL_OVERRIDE;
- virtual QString text(const QDate &date, int repeat) const Q_DECL_OVERRIDE;
+ virtual Section handleKey(int key) override;
+ virtual QDate applyToDate(const QDate &date) const override;
+ virtual void setDate(const QDate &date) override;
+ virtual QString text() const override;
+ virtual QString text(const QDate &date, int repeat) const override;
private:
int m_pos;
int m_month;
@@ -333,11 +333,11 @@ class QCalendarYearValidator : public QCalendarDateSectionValidator
public:
QCalendarYearValidator();
- virtual Section handleKey(int key) Q_DECL_OVERRIDE;
- virtual QDate applyToDate(const QDate &date) const Q_DECL_OVERRIDE;
- virtual void setDate(const QDate &date) Q_DECL_OVERRIDE;
- virtual QString text() const Q_DECL_OVERRIDE;
- virtual QString text(const QDate &date, int repeat) const Q_DECL_OVERRIDE;
+ virtual Section handleKey(int key) override;
+ virtual QDate applyToDate(const QDate &date) const override;
+ virtual void setDate(const QDate &date) override;
+ virtual QString text() const override;
+ virtual QString text(const QDate &date, int repeat) const override;
private:
int pow10(int n);
int m_pos;
@@ -654,8 +654,8 @@ public:
void setDate(const QDate &date);
- bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *o, QEvent *e) override;
+ void timerEvent(QTimerEvent *e) override;
signals:
void dateChanged(const QDate &date);
@@ -861,32 +861,32 @@ class QCalendarModel : public QAbstractTableModel
public:
QCalendarModel(QObject *parent = 0);
- int rowCount(const QModelIndex &) const Q_DECL_OVERRIDE
+ int rowCount(const QModelIndex &) const override
{ return RowCount + m_firstRow; }
- int columnCount(const QModelIndex &) const Q_DECL_OVERRIDE
+ int columnCount(const QModelIndex &) const override
{ return ColumnCount + m_firstColumn; }
- QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QVariant data(const QModelIndex &index, int role) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
{
beginInsertRows(parent, row, row + count - 1);
endInsertRows();
return true;
}
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
{
beginInsertColumns(parent, column, column + count - 1);
endInsertColumns();
return true;
}
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
{
beginRemoveRows(parent, row, row + count - 1);
endRemoveRows();
return true;
}
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
{
beginRemoveColumns(parent, column, column + count - 1);
endRemoveColumns();
@@ -947,7 +947,7 @@ public:
void internalUpdate() { updateGeometries(); }
void setReadOnly(bool enable);
- virtual void keyboardSearch(const QString & search) Q_DECL_OVERRIDE { Q_UNUSED(search) }
+ virtual void keyboardSearch(const QString & search) override { Q_UNUSED(search) }
signals:
void showDate(const QDate &date);
@@ -955,16 +955,16 @@ signals:
void clicked(const QDate &date);
void editingFinished();
protected:
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) override;
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *event) override;
#endif
- void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) override;
+ bool event(QEvent *event) override;
QDate handleMouseEvent(QMouseEvent *event);
public:
@@ -982,13 +982,13 @@ QCalendarModel::QCalendarModel(QObject *parent)
m_firstRow(1),
m_date(QDate::currentDate()),
m_minimumDate(QDate::fromJulianDay(1)),
- m_maximumDate(7999, 12, 31),
+ m_maximumDate(9999, 12, 31),
m_shownYear(m_date.year()),
m_shownMonth(m_date.month()),
m_firstDay(QLocale().firstDayOfWeek()),
m_horizontalHeaderFormat(QCalendarWidget::ShortDayNames),
m_weekNumbersShown(true),
- m_view(Q_NULLPTR)
+ m_view(nullptr)
{
}
@@ -1563,7 +1563,7 @@ public:
: QItemDelegate(parent), calendarWidgetPrivate(w)
{ }
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const;
private:
@@ -1579,7 +1579,7 @@ public:
: QToolButton(parent)
{ }
protected:
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE
+ void paintEvent(QPaintEvent *e) override
{
Q_UNUSED(e)
@@ -1607,7 +1607,7 @@ class QPrevNextCalButton : public QToolButton
public:
QPrevNextCalButton(QWidget *parent) : QToolButton(parent) {}
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE {
+ void paintEvent(QPaintEvent *) override {
QStylePainter painter(this);
QStyleOptionToolButton opt;
initStyleOption(&opt);
@@ -2196,7 +2196,7 @@ QSize QCalendarWidget::minimumSizeHint() const
} else {
for (int i = 1; i <= 7; i++) {
QFontMetrics fm(d->m_model->formatForCell(0, i).font());
- w = qMax(w, fm.width(d->m_model->dayName(d->m_model->dayOfWeekForColumn(i))) + marginH);
+ w = qMax(w, fm.horizontalAdvance(d->m_model->dayName(d->m_model->dayOfWeekForColumn(i))) + marginH);
h = qMax(h, fm.height());
}
}
@@ -2207,14 +2207,14 @@ QSize QCalendarWidget::minimumSizeHint() const
for (int i = 1; i <= 6; i++) {
QFontMetrics fm(d->m_model->formatForCell(i, 0).font());
for (int j = 1; j < end; j++)
- w = qMax(w, fm.width(QString::number(j)) + marginH);
+ w = qMax(w, fm.horizontalAdvance(QString::number(j)) + marginH);
h = qMax(h, fm.height());
}
}
QFontMetrics fm(d->m_model->formatForCell(1, 1).font());
for (int i = 1; i <= end; i++) {
- w = qMax(w, fm.width(QString::number(i)) + marginH);
+ w = qMax(w, fm.horizontalAdvance(QString::number(i)) + marginH);
h = qMax(h, fm.height());
}
diff --git a/src/widgets/widgets/qcalendarwidget.h b/src/widgets/widgets/qcalendarwidget.h
index 29e2ff698b..44ba340289 100644
--- a/src/widgets/widgets/qcalendarwidget.h
+++ b/src/widgets/widgets/qcalendarwidget.h
@@ -89,11 +89,11 @@ public:
};
Q_ENUM(SelectionMode)
- explicit QCalendarWidget(QWidget *parent = Q_NULLPTR);
+ explicit QCalendarWidget(QWidget *parent = nullptr);
~QCalendarWidget();
- virtual QSize sizeHint() const Q_DECL_OVERRIDE;
- virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ virtual QSize sizeHint() const override;
+ virtual QSize minimumSizeHint() const override;
QDate selectedDate() const;
@@ -138,11 +138,11 @@ public:
void setDateEditAcceptDelay(int delay);
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent * event) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent * event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ bool eventFilter(QObject *watched, QEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void resizeEvent(QResizeEvent * event) override;
+ void keyPressEvent(QKeyEvent * event) override;
virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const;
void updateCell(const QDate &date);
diff --git a/src/widgets/widgets/qcheckbox.cpp b/src/widgets/widgets/qcheckbox.cpp
index 9b49916774..81bfd3af35 100644
--- a/src/widgets/widgets/qcheckbox.cpp
+++ b/src/widgets/widgets/qcheckbox.cpp
@@ -45,6 +45,9 @@
#include "qstyle.h"
#include "qstyleoption.h"
#include "qevent.h"
+#ifndef QT_NO_ACCESSIBILITY
+#include "qaccessible.h"
+#endif
#include "private/qabstractbutton_p.h"
@@ -144,6 +147,7 @@ void QCheckBoxPrivate::init()
q->setCheckable(true);
q->setMouseTracking(true);
q->setForegroundRole(QPalette::WindowText);
+ q->setAttribute(Qt::WA_MacShowFocusRect);
setLayoutItemMargins(QStyle::SE_CheckBoxLayoutItem);
}
@@ -243,6 +247,9 @@ Qt::CheckState QCheckBox::checkState() const
void QCheckBox::setCheckState(Qt::CheckState state)
{
Q_D(QCheckBox);
+#ifndef QT_NO_ACCESSIBILITY
+ bool noChange = d->noChange;
+#endif
if (state == Qt::PartiallyChecked) {
d->tristate = true;
d->noChange = true;
@@ -257,6 +264,15 @@ void QCheckBox::setCheckState(Qt::CheckState state)
d->publishedState = state;
emit stateChanged(state);
}
+
+#ifndef QT_NO_ACCESSIBILITY
+ if (noChange != d->noChange) {
+ QAccessible::State s;
+ s.checkStateMixed = true;
+ QAccessibleStateChangeEvent event(this, s);
+ QAccessible::updateAccessibility(&event);
+ }
+#endif
}
diff --git a/src/widgets/widgets/qcheckbox.h b/src/widgets/widgets/qcheckbox.h
index 8543c4c86f..80cb22b82e 100644
--- a/src/widgets/widgets/qcheckbox.h
+++ b/src/widgets/widgets/qcheckbox.h
@@ -58,12 +58,12 @@ class Q_WIDGETS_EXPORT QCheckBox : public QAbstractButton
Q_PROPERTY(bool tristate READ isTristate WRITE setTristate)
public:
- explicit QCheckBox(QWidget *parent = Q_NULLPTR);
- explicit QCheckBox(const QString &text, QWidget *parent = Q_NULLPTR);
+ explicit QCheckBox(QWidget *parent = nullptr);
+ explicit QCheckBox(const QString &text, QWidget *parent = nullptr);
~QCheckBox();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
void setTristate(bool y = true);
bool isTristate() const;
@@ -75,12 +75,12 @@ Q_SIGNALS:
void stateChanged(int);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- bool hitButton(const QPoint &pos) const Q_DECL_OVERRIDE;
- void checkStateSet() Q_DECL_OVERRIDE;
- void nextCheckState() Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ bool hitButton(const QPoint &pos) const override;
+ void checkStateSet() override;
+ void nextCheckState() override;
+ void paintEvent(QPaintEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
void initStyleOption(QStyleOptionButton *option) const;
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 15d3027acb..e70d096e04 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -313,7 +313,7 @@ int QComboBoxPrivate::computeWidthHint() const
const QFontMetrics &fontMetrics = q->fontMetrics();
for (int i = 0; i < count; ++i) {
- const int textWidth = fontMetrics.width(q->itemText(i));
+ const int textWidth = fontMetrics.horizontalAdvance(q->itemText(i));
if (q->itemIcon(i).isNull())
width = (qMax(width, textWidth));
else
@@ -342,7 +342,7 @@ QSize QComboBoxPrivate::recomputeSizeHint(QSize &sh) const
case QComboBox::AdjustToContents:
case QComboBox::AdjustToContentsOnFirstShow:
if (count == 0) {
- sh.rwidth() = 7 * fm.width(QLatin1Char('x'));
+ sh.rwidth() = 7 * fm.horizontalAdvance(QLatin1Char('x'));
} else {
for (int i = 0; i < count; ++i) {
if (!q->itemIcon(i).isNull()) {
@@ -365,7 +365,7 @@ QSize QComboBoxPrivate::recomputeSizeHint(QSize &sh) const
hasIcon = !q->itemIcon(i).isNull();
}
if (minimumContentsLength > 0)
- sh.setWidth(qMax(sh.width(), minimumContentsLength * fm.width(QLatin1Char('X')) + (hasIcon ? iconSize.width() + 4 : 0)));
+ sh.setWidth(qMax(sh.width(), minimumContentsLength * fm.horizontalAdvance(QLatin1Char('X')) + (hasIcon ? iconSize.width() + 4 : 0)));
// height
@@ -3217,7 +3217,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
case Qt::Key_Up:
if (e->modifiers() & Qt::ControlModifier)
break; // pass to line edit for auto completion
- // fall through
+ Q_FALLTHROUGH();
case Qt::Key_PageUp:
#ifdef QT_KEYPAD_NAVIGATION
if (QApplication::keypadNavigationEnabled())
@@ -3305,7 +3305,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
switch (move) {
case MoveFirst:
newIndex = -1;
- // fall through
+ Q_FALLTHROUGH();
case MoveDown:
newIndex++;
while (newIndex < rowCount && !(d->model->index(newIndex, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled))
@@ -3313,7 +3313,7 @@ void QComboBox::keyPressEvent(QKeyEvent *e)
break;
case MoveLast:
newIndex = rowCount;
- // fall through
+ Q_FALLTHROUGH();
case MoveUp:
newIndex--;
while ((newIndex >= 0) && !(d->model->flags(d->model->index(newIndex,d->modelColumn,d->root)) & Qt::ItemIsEnabled))
@@ -3352,11 +3352,11 @@ void QComboBox::keyReleaseEvent(QKeyEvent *e)
#if QT_CONFIG(wheelevent)
void QComboBox::wheelEvent(QWheelEvent *e)
{
-#ifdef Q_OS_DARWIN
- Q_UNUSED(e);
-#else
Q_D(QComboBox);
- if (!d->viewContainer()->isVisible()) {
+ QStyleOptionComboBox opt;
+ initStyleOption(&opt);
+ if (style()->styleHint(QStyle::SH_ComboBox_AllowWheelScrolling, &opt, this) &&
+ !d->viewContainer()->isVisible()) {
const int rowCount = count();
int newIndex = currentIndex();
@@ -3376,7 +3376,6 @@ void QComboBox::wheelEvent(QWheelEvent *e)
}
e->accept();
}
-#endif
}
#endif
diff --git a/src/widgets/widgets/qcombobox.h b/src/widgets/widgets/qcombobox.h
index 59f2a425a0..671c883584 100644
--- a/src/widgets/widgets/qcombobox.h
+++ b/src/widgets/widgets/qcombobox.h
@@ -82,7 +82,7 @@ class Q_WIDGETS_EXPORT QComboBox : public QWidget
Q_PROPERTY(int modelColumn READ modelColumn WRITE setModelColumn)
public:
- explicit QComboBox(QWidget *parent = Q_NULLPTR);
+ explicit QComboBox(QWidget *parent = nullptr);
~QComboBox();
int maxVisibleItems() const;
@@ -196,14 +196,14 @@ public:
QAbstractItemView *view() const;
void setView(QAbstractItemView *itemView);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
virtual void showPopup();
virtual void hidePopup();
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- QVariant inputMethodQuery(Qt::InputMethodQuery) const Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, const QVariant &argument) const;
public Q_SLOTS:
@@ -224,24 +224,24 @@ Q_SIGNALS:
void currentTextChanged(const QString &);
protected:
- void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *e) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *e) override;
+ void focusOutEvent(QFocusEvent *e) override;
+ void changeEvent(QEvent *e) override;
+ void resizeEvent(QResizeEvent *e) override;
+ void paintEvent(QPaintEvent *e) override;
+ void showEvent(QShowEvent *e) override;
+ void hideEvent(QHideEvent *e) override;
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
+ void keyPressEvent(QKeyEvent *e) override;
+ void keyReleaseEvent(QKeyEvent *e) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *e) override;
#endif
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *e) override;
#endif // QT_NO_CONTEXTMENU
- void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *) override;
void initStyleOption(QStyleOptionComboBox *option) const;
diff --git a/src/widgets/widgets/qcommandlinkbutton.cpp b/src/widgets/widgets/qcommandlinkbutton.cpp
index b6ec2a8d31..68dfefb3b7 100644
--- a/src/widgets/widgets/qcommandlinkbutton.cpp
+++ b/src/widgets/widgets/qcommandlinkbutton.cpp
@@ -318,7 +318,7 @@ QSize QCommandLinkButton::sizeHint() const
QSize size = QPushButton::sizeHint();
QFontMetrics fm(d->titleFont());
- int textWidth = qMax(fm.width(text()), 135);
+ int textWidth = qMax(fm.horizontalAdvance(text()), 135);
int buttonWidth = textWidth + d->textOffset() + d->rightMargin();
int heightWithoutDescription = d->descriptionOffset() + d->bottomMargin();
diff --git a/src/widgets/widgets/qcommandlinkbutton.h b/src/widgets/widgets/qcommandlinkbutton.h
index d8215a256e..2d01d63df8 100644
--- a/src/widgets/widgets/qcommandlinkbutton.h
+++ b/src/widgets/widgets/qcommandlinkbutton.h
@@ -58,20 +58,20 @@ class Q_WIDGETS_EXPORT QCommandLinkButton: public QPushButton
Q_PROPERTY(bool flat READ isFlat WRITE setFlat DESIGNABLE false)
public:
- explicit QCommandLinkButton(QWidget *parent = Q_NULLPTR);
- explicit QCommandLinkButton(const QString &text, QWidget *parent = Q_NULLPTR);
- explicit QCommandLinkButton(const QString &text, const QString &description, QWidget *parent = Q_NULLPTR);
+ explicit QCommandLinkButton(QWidget *parent = nullptr);
+ explicit QCommandLinkButton(const QString &text, QWidget *parent = nullptr);
+ explicit QCommandLinkButton(const QString &text, const QString &description, QWidget *parent = nullptr);
~QCommandLinkButton();
QString description() const;
void setDescription(const QString &description);
protected:
- QSize sizeHint() const Q_DECL_OVERRIDE;
- int heightForWidth(int) const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ int heightForWidth(int) const override;
+ QSize minimumSizeHint() const override;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *) override;
private:
Q_DISABLE_COPY(QCommandLinkButton)
diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp
index b6ec6b4065..fca81bec48 100644
--- a/src/widgets/widgets/qdatetimeedit.cpp
+++ b/src/widgets/widgets/qdatetimeedit.cpp
@@ -363,7 +363,7 @@ void QDateTimeEdit::setMinimumDateTime(const QDateTime &dt)
clearMaximumDateTime().
By default, this property contains a date that refers to 31 December,
- 7999 and a time of 23:59:59 and 999 milliseconds.
+ 9999 and a time of 23:59:59 and 999 milliseconds.
\sa minimumDateTime(), minimumTime(), maximumTime(), minimumDate(),
maximumDate(), setDateTimeRange(), setDateRange(), setTimeRange(),
@@ -466,7 +466,7 @@ void QDateTimeEdit::clearMinimumDate()
necessary to ensure that the range remains valid. If the date is
not a valid QDate object, this function does nothing.
- By default, this property contains a date that refers to December 31, 7999.
+ By default, this property contains a date that refers to December 31, 9999.
\sa minimumDate, minimumTime, maximumTime, setDateRange()
*/
@@ -966,12 +966,12 @@ QSize QDateTimeEdit::sizeHint() const
int w = 0;
QString s;
s = d->textFromValue(d->minimum) + QLatin1Char(' ');
- w = qMax<int>(w, fm.width(s));
+ w = qMax<int>(w, fm.horizontalAdvance(s));
s = d->textFromValue(d->maximum) + QLatin1Char(' ');
- w = qMax<int>(w, fm.width(s));
+ w = qMax<int>(w, fm.horizontalAdvance(s));
if (d->specialValueText.size()) {
s = d->specialValueText;
- w = qMax<int>(w, fm.width(s));
+ w = qMax<int>(w, fm.horizontalAdvance(s));
}
w += 2; // cursor blinking space
@@ -1129,7 +1129,7 @@ void QDateTimeEdit::keyPressEvent(QKeyEvent *event)
}
#endif
}
- // else fall through
+ Q_FALLTHROUGH();
case Qt::Key_Backtab:
case Qt::Key_Tab: {
event->accept();
diff --git a/src/widgets/widgets/qdatetimeedit.h b/src/widgets/widgets/qdatetimeedit.h
index b46434c1a4..b6fb35fc71 100644
--- a/src/widgets/widgets/qdatetimeedit.h
+++ b/src/widgets/widgets/qdatetimeedit.h
@@ -92,10 +92,10 @@ public:
Q_DECLARE_FLAGS(Sections, Section)
Q_FLAG(Sections)
- explicit QDateTimeEdit(QWidget *parent = Q_NULLPTR);
- explicit QDateTimeEdit(const QDateTime &dt, QWidget *parent = Q_NULLPTR);
- explicit QDateTimeEdit(const QDate &d, QWidget *parent = Q_NULLPTR);
- explicit QDateTimeEdit(const QTime &t, QWidget *parent = Q_NULLPTR);
+ explicit QDateTimeEdit(QWidget *parent = nullptr);
+ explicit QDateTimeEdit(const QDateTime &dt, QWidget *parent = nullptr);
+ explicit QDateTimeEdit(const QDate &d, QWidget *parent = nullptr);
+ explicit QDateTimeEdit(const QTime &t, QWidget *parent = nullptr);
~QDateTimeEdit();
QDateTime dateTime() const;
@@ -191,7 +191,7 @@ protected:
void paintEvent(QPaintEvent *event) override;
void initStyleOption(QStyleOptionSpinBox *option) const;
- QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = Q_NULLPTR);
+ QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = nullptr);
private:
Q_DECLARE_PRIVATE(QDateTimeEdit)
Q_DISABLE_COPY(QDateTimeEdit)
@@ -204,8 +204,8 @@ class Q_WIDGETS_EXPORT QTimeEdit : public QDateTimeEdit
Q_OBJECT
Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY userTimeChanged USER true)
public:
- explicit QTimeEdit(QWidget *parent = Q_NULLPTR);
- explicit QTimeEdit(const QTime &time, QWidget *parent = Q_NULLPTR);
+ explicit QTimeEdit(QWidget *parent = nullptr);
+ explicit QTimeEdit(const QTime &time, QWidget *parent = nullptr);
~QTimeEdit();
Q_SIGNALS:
@@ -217,8 +217,8 @@ class Q_WIDGETS_EXPORT QDateEdit : public QDateTimeEdit
Q_OBJECT
Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY userDateChanged USER true)
public:
- explicit QDateEdit(QWidget *parent = Q_NULLPTR);
- explicit QDateEdit(const QDate &date, QWidget *parent = Q_NULLPTR);
+ explicit QDateEdit(QWidget *parent = nullptr);
+ explicit QDateEdit(const QDate &date, QWidget *parent = nullptr);
~QDateEdit();
Q_SIGNALS:
diff --git a/src/widgets/widgets/qdatetimeedit_p.h b/src/widgets/widgets/qdatetimeedit_p.h
index 5ac5a9db6a..1ebc98dedf 100644
--- a/src/widgets/widgets/qdatetimeedit_p.h
+++ b/src/widgets/widgets/qdatetimeedit_p.h
@@ -80,25 +80,25 @@ public:
void clearSection(int index);
// Override QAbstractSpinBoxPrivate:
- void emitSignals(EmitPolicy ep, const QVariant &old) Q_DECL_OVERRIDE;
- QString textFromValue(const QVariant &f) const Q_DECL_OVERRIDE;
- QVariant valueFromText(const QString &f) const Q_DECL_OVERRIDE;
- void _q_editorCursorPositionChanged(int oldpos, int newpos) Q_DECL_OVERRIDE;
- void interpret(EmitPolicy ep) Q_DECL_OVERRIDE;
- void clearCache() const Q_DECL_OVERRIDE;
- QStyle::SubControl newHoverControl(const QPoint &pos) Q_DECL_OVERRIDE;
- void updateEditFieldGeometry() Q_DECL_OVERRIDE;
- QVariant getZeroVariant() const Q_DECL_OVERRIDE;
- void setRange(const QVariant &min, const QVariant &max) Q_DECL_OVERRIDE;
- void updateEdit() Q_DECL_OVERRIDE;
+ void emitSignals(EmitPolicy ep, const QVariant &old) override;
+ QString textFromValue(const QVariant &f) const override;
+ QVariant valueFromText(const QString &f) const override;
+ void _q_editorCursorPositionChanged(int oldpos, int newpos) override;
+ void interpret(EmitPolicy ep) override;
+ void clearCache() const override;
+ QStyle::SubControl newHoverControl(const QPoint &pos) override;
+ void updateEditFieldGeometry() override;
+ QVariant getZeroVariant() const override;
+ void setRange(const QVariant &min, const QVariant &max) override;
+ void updateEdit() override;
// Override QDateTimeParser:
- QString displayText() const Q_DECL_OVERRIDE { return edit->text(); }
- QDateTime getMinimum() const Q_DECL_OVERRIDE { return minimum.toDateTime(); }
- QDateTime getMaximum() const Q_DECL_OVERRIDE { return maximum.toDateTime(); }
- QLocale locale() const Q_DECL_OVERRIDE { return q_func()->locale(); }
- QString getAmPmText(AmPm ap, Case cs) const Q_DECL_OVERRIDE;
- int cursorPosition() const Q_DECL_OVERRIDE { return edit ? edit->cursorPosition() : -1; }
+ QString displayText() const override { return edit->text(); }
+ QDateTime getMinimum() const override { return minimum.toDateTime(); }
+ QDateTime getMaximum() const override { return maximum.toDateTime(); }
+ QLocale locale() const override { return q_func()->locale(); }
+ QString getAmPmText(AmPm ap, Case cs) const override;
+ int cursorPosition() const override { return edit ? edit->cursorPosition() : -1; }
int absoluteIndex(QDateTimeEdit::Section s, int index) const;
int absoluteIndex(const SectionNode &s) const;
diff --git a/src/widgets/widgets/qdial.cpp b/src/widgets/widgets/qdial.cpp
index c08c820127..25d57970bf 100644
--- a/src/widgets/widgets/qdial.cpp
+++ b/src/widgets/widgets/qdial.cpp
@@ -79,7 +79,7 @@ public:
int valueFromPoint(const QPoint &) const;
double angle(const QPoint &, const QPoint &) const;
void init();
- virtual int bound(int val) const Q_DECL_OVERRIDE;
+ virtual int bound(int val) const override;
};
void QDialPrivate::init()
diff --git a/src/widgets/widgets/qdial.h b/src/widgets/widgets/qdial.h
index ed753d86b0..1db1f9bb07 100644
--- a/src/widgets/widgets/qdial.h
+++ b/src/widgets/widgets/qdial.h
@@ -61,7 +61,7 @@ class Q_WIDGETS_EXPORT QDial: public QAbstractSlider
Q_PROPERTY(qreal notchTarget READ notchTarget WRITE setNotchTarget)
Q_PROPERTY(bool notchesVisible READ notchesVisible WRITE setNotchesVisible)
public:
- explicit QDial(QWidget *parent = Q_NULLPTR);
+ explicit QDial(QWidget *parent = nullptr);
~QDial();
@@ -73,23 +73,23 @@ public:
qreal notchTarget() const;
bool notchesVisible() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
public Q_SLOTS:
void setNotchesVisible(bool visible);
void setWrapping(bool on);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *re) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *pe) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void resizeEvent(QResizeEvent *re) override;
+ void paintEvent(QPaintEvent *pe) override;
- void mousePressEvent(QMouseEvent *me) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *me) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *me) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *me) override;
+ void mouseReleaseEvent(QMouseEvent *me) override;
+ void mouseMoveEvent(QMouseEvent *me) override;
- void sliderChange(SliderChange change) Q_DECL_OVERRIDE;
+ void sliderChange(SliderChange change) override;
void initStyleOption(QStyleOptionSlider *option) const;
diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp
index 788ec67fb2..9f5b739230 100644
--- a/src/widgets/widgets/qdialogbuttonbox.cpp
+++ b/src/widgets/widgets/qdialogbuttonbox.cpp
@@ -927,8 +927,8 @@ void QDialogButtonBox::changeEvent(QEvent *event)
for (StandardButtonHash::iterator it = d->standardButtonHash.begin(); it != end; ++it)
it.key()->setStyle(newStyle);
}
- // fallthrough intended
#ifdef Q_OS_MAC
+ Q_FALLTHROUGH();
case QEvent::MacSizeChange:
#endif
d->resetLayout();
diff --git a/src/widgets/widgets/qdialogbuttonbox.h b/src/widgets/widgets/qdialogbuttonbox.h
index 02d14dee7c..a9a1a3453d 100644
--- a/src/widgets/widgets/qdialogbuttonbox.h
+++ b/src/widgets/widgets/qdialogbuttonbox.h
@@ -117,11 +117,11 @@ public:
AndroidLayout = GnomeLayout + 2 // ### Qt 6: reorder
};
- QDialogButtonBox(QWidget *parent = Q_NULLPTR);
- QDialogButtonBox(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR);
- explicit QDialogButtonBox(StandardButtons buttons, QWidget *parent = Q_NULLPTR);
+ QDialogButtonBox(QWidget *parent = nullptr);
+ QDialogButtonBox(Qt::Orientation orientation, QWidget *parent = nullptr);
+ explicit QDialogButtonBox(StandardButtons buttons, QWidget *parent = nullptr);
QDialogButtonBox(StandardButtons buttons, Qt::Orientation orientation,
- QWidget *parent = Q_NULLPTR);
+ QWidget *parent = nullptr);
~QDialogButtonBox();
void setOrientation(Qt::Orientation orientation);
@@ -151,8 +151,8 @@ Q_SIGNALS:
void rejected();
protected:
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) override;
+ bool event(QEvent *event) override;
private:
Q_DISABLE_COPY(QDialogButtonBox)
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index bfb3a98d7e..e17c2c1f4c 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -53,6 +53,7 @@
#include <qdebug.h>
#include <private/qwidgetresizehandler_p.h>
+#include <private/qstylesheetstyle_p.h>
#include "qdockwidget_p.h"
#include "qmainwindowlayout_p.h"
@@ -73,7 +74,7 @@ static inline QMainWindowLayout *qt_mainwindow_layout_from_dock(const QDockWidge
return qt_mainwindow_layout(window);
p = p->parentWidget();
}
- return Q_NULLPTR;
+ return nullptr;
}
static inline bool hasFeature(const QDockWidgetPrivate *priv, QDockWidget::DockWidgetFeature feature)
@@ -120,15 +121,22 @@ class QDockWidgetTitleButton : public QAbstractButton
public:
QDockWidgetTitleButton(QDockWidget *dockWidget);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override
{ return sizeHint(); }
- void enterEvent(QEvent *event) Q_DECL_OVERRIDE;
- void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
-};
+ void enterEvent(QEvent *event) override;
+ void leaveEvent(QEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+
+protected:
+ bool event(QEvent *event) override;
+
+private:
+ QSize dockButtonIconSize() const;
+ mutable int m_iconSize = -1;
+};
QDockWidgetTitleButton::QDockWidgetTitleButton(QDockWidget *dockWidget)
: QAbstractButton(dockWidget)
@@ -136,14 +144,49 @@ QDockWidgetTitleButton::QDockWidgetTitleButton(QDockWidget *dockWidget)
setFocusPolicy(Qt::NoFocus);
}
+bool QDockWidgetTitleButton::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::StyleChange:
+ case QEvent::ScreenChangeInternal:
+ m_iconSize = -1;
+ break;
+ default:
+ break;
+ }
+ return QAbstractButton::event(event);
+}
+
+static inline bool isWindowsStyle(const QStyle *style)
+{
+ // Note: QStyleSheetStyle inherits QWindowsStyle
+ const QStyle *effectiveStyle = style->inherits("QStyleSheetStyle")
+ ? static_cast<const QStyleSheetStyle *>(style)->baseStyle()
+ : style;
+ return effectiveStyle->inherits("QWindowsStyle");
+}
+
+QSize QDockWidgetTitleButton::dockButtonIconSize() const
+{
+ if (m_iconSize < 0) {
+ m_iconSize = style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, this);
+ // Dock Widget title buttons on Windows where historically limited to size 10
+ // (from small icon size 16) since only a 10x10 XPM was provided.
+ // Adding larger pixmaps to the icons thus caused the icons to grow; limit
+ // this to qpiScaled(10) here.
+ if (isWindowsStyle(style()))
+ m_iconSize = qMin((10 * logicalDpiX()) / 96, m_iconSize);
+ }
+ return QSize(m_iconSize, m_iconSize);
+}
+
QSize QDockWidgetTitleButton::sizeHint() const
{
ensurePolished();
int size = 2*style()->pixelMetric(QStyle::PM_DockWidgetTitleBarButtonMargin, 0, this);
if (!icon().isNull()) {
- int iconSize = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this);
- QSize sz = icon().actualSize(QSize(iconSize, iconSize));
+ const QSize sz = icon().actualSize(dockButtonIconSize());
size += qMax(sz.width(), sz.height());
}
@@ -186,8 +229,7 @@ void QDockWidgetTitleButton::paintEvent(QPaintEvent *)
opt.activeSubControls = 0;
opt.features = QStyleOptionToolButton::None;
opt.arrowType = Qt::NoArrow;
- int size = style()->pixelMetric(QStyle::PM_SmallIconSize, 0, this);
- opt.iconSize = QSize(size, size);
+ opt.iconSize = dockButtonIconSize();
style()->drawComplexControl(QStyle::CC_ToolButton, &opt, &p, this);
}
@@ -611,6 +653,8 @@ void QDockWidgetPrivate::init()
QObject::connect(button, SIGNAL(clicked()), q, SLOT(close()));
layout->setWidgetForRole(QDockWidgetLayout::CloseButton, button);
+ font = QApplication::font("QDockWidgetTitle");
+
#ifndef QT_NO_ACTION
toggleViewAction = new QAction(q);
toggleViewAction->setCheckable(true);
@@ -643,6 +687,7 @@ void QDockWidget::initStyleOption(QStyleOptionDockWidget *option) const
// If we are in a floating tab, init from the parent because the attributes and the geometry
// of the title bar should be taken from the floating window.
option->initFrom(floatingTab && !isFloating() ? parentWidget() : this);
+ option->fontMetrics = QFontMetrics(d->font);
option->rect = dwlayout->titleArea();
option->title = d->fixedWindowTitle;
option->closable = hasFeature(this, QDockWidget::DockWidgetClosable);
@@ -1439,6 +1484,7 @@ void QDockWidget::paintEvent(QPaintEvent *event)
// the title may wish to extend out to all sides (eg. Vista style)
QStyleOptionDockWidget titleOpt;
initStyleOption(&titleOpt);
+ p.setFont(d_func()->font);
p.drawControl(QStyle::CE_DockWidgetTitle, titleOpt);
}
}
diff --git a/src/widgets/widgets/qdockwidget.h b/src/widgets/widgets/qdockwidget.h
index b53fa19a03..b53a991dae 100644
--- a/src/widgets/widgets/qdockwidget.h
+++ b/src/widgets/widgets/qdockwidget.h
@@ -63,9 +63,9 @@ class Q_WIDGETS_EXPORT QDockWidget : public QWidget
Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle DESIGNABLE true)
public:
- explicit QDockWidget(const QString &title, QWidget *parent = Q_NULLPTR,
+ explicit QDockWidget(const QString &title, QWidget *parent = nullptr,
Qt::WindowFlags flags = Qt::WindowFlags());
- explicit QDockWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ explicit QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~QDockWidget();
QWidget *widget() const;
@@ -113,10 +113,10 @@ Q_SIGNALS:
void dockLocationChanged(Qt::DockWidgetArea area);
protected:
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) override;
+ void closeEvent(QCloseEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+ bool event(QEvent *event) override;
void initStyleOption(QStyleOptionDockWidget *option) const;
private:
diff --git a/src/widgets/widgets/qdockwidget_p.h b/src/widgets/widgets/qdockwidget_p.h
index 2c16176c37..766e4ed161 100644
--- a/src/widgets/widgets/qdockwidget_p.h
+++ b/src/widgets/widgets/qdockwidget_p.h
@@ -99,6 +99,8 @@ public:
QDockWidget::DockWidgetFeatures features;
Qt::DockWidgetAreas allowedAreas;
+ QFont font;
+
#ifndef QT_NO_ACTION
QAction *toggleViewAction;
#endif
@@ -135,18 +137,18 @@ class Q_WIDGETS_EXPORT QDockWidgetLayout : public QLayout
public:
QDockWidgetLayout(QWidget *parent = 0);
~QDockWidgetLayout();
- void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
- QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *item) override;
+ QLayoutItem *itemAt(int index) const override;
+ QLayoutItem *takeAt(int index) override;
+ int count() const override;
- QSize maximumSize() const Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize maximumSize() const override;
+ QSize minimumSize() const override;
+ QSize sizeHint() const override;
QSize sizeFromContent(const QSize &content, bool floating) const;
- void setGeometry(const QRect &r) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &r) override;
enum Role { Content, CloseButton, FloatButton, TitleBar, RoleCount };
QWidget *widgetForRole(Role r) const;
@@ -178,9 +180,9 @@ class QDockWidgetItem : public QWidgetItem
{
public:
QDockWidgetItem(QDockWidget *dockWidget);
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize maximumSize() const Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const override;
+ QSize maximumSize() const override;
+ QSize sizeHint() const override;
private:
inline QLayoutItem *dockWidgetChildItem() const;
diff --git a/src/widgets/widgets/qeffects.cpp b/src/widgets/widgets/qeffects.cpp
index d4ef33966b..bcc8d7815d 100644
--- a/src/widgets/widgets/qeffects.cpp
+++ b/src/widgets/widgets/qeffects.cpp
@@ -71,10 +71,10 @@ public:
void run(int time);
protected:
- void paintEvent(QPaintEvent* e) Q_DECL_OVERRIDE;
- void closeEvent(QCloseEvent*) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent* e) override;
+ void closeEvent(QCloseEvent*) override;
void alphaBlend();
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) override;
protected slots:
void render();
@@ -98,9 +98,12 @@ static QAlphaWidget* q_blend = 0;
/*
Constructs a QAlphaWidget.
*/
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED // QDesktopWidget::screen()
QAlphaWidget::QAlphaWidget(QWidget* w, Qt::WindowFlags f)
: QWidget(QApplication::desktop()->screen(QDesktopWidgetPrivate::screenNumber(w)), f)
{
+QT_WARNING_POP
#ifndef Q_OS_WIN
setEnabled(false);
#endif
@@ -348,8 +351,8 @@ public:
void run(int time);
protected:
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
- void closeEvent(QCloseEvent*) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent*) override;
+ void closeEvent(QCloseEvent*) override;
private slots:
void scroll();
diff --git a/src/widgets/widgets/qfocusframe.h b/src/widgets/widgets/qfocusframe.h
index a1fc6d345d..73d5b42bd8 100644
--- a/src/widgets/widgets/qfocusframe.h
+++ b/src/widgets/widgets/qfocusframe.h
@@ -53,17 +53,17 @@ class Q_WIDGETS_EXPORT QFocusFrame : public QWidget
{
Q_OBJECT
public:
- QFocusFrame(QWidget *parent = Q_NULLPTR);
+ QFocusFrame(QWidget *parent = nullptr);
~QFocusFrame();
void setWidget(QWidget *widget);
QWidget *widget() const;
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) override;
+ void paintEvent(QPaintEvent *) override;
void initStyleOption(QStyleOption *option) const;
private:
diff --git a/src/widgets/widgets/qfontcombobox.cpp b/src/widgets/widgets/qfontcombobox.cpp
index 1c56c19c8f..957a464b71 100644
--- a/src/widgets/widgets/qfontcombobox.cpp
+++ b/src/widgets/widgets/qfontcombobox.cpp
@@ -189,10 +189,10 @@ public:
// painting
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const Q_DECL_OVERRIDE;
+ const QModelIndex &index) const override;
const QIcon truetype;
const QIcon bitmap;
@@ -263,7 +263,7 @@ void QFontFamilyDelegate::paint(QPainter *painter,
system = writingSystem;
if (system != QFontDatabase::Any) {
- int w = painter->fontMetrics().width(text + QLatin1String(" "));
+ int w = painter->fontMetrics().horizontalAdvance(text + QLatin1String(" "));
painter->setFont(font2);
QString sample = QFontDatabase().writingSystemSample(system);
if (option.direction == Qt::RightToLeft)
@@ -287,7 +287,7 @@ QSize QFontFamilyDelegate::sizeHint(const QStyleOptionViewItem &option,
// font.setFamily(text);
font.setPointSize(QFontInfo(font).pointSize() * 3/2);
QFontMetrics fontMetrics(font);
- return QSize(fontMetrics.width(text), fontMetrics.height());
+ return QSize(fontMetrics.horizontalAdvance(text), fontMetrics.height());
}
@@ -524,7 +524,7 @@ void QFontComboBox::setCurrentFont(const QFont &font)
}
/*!
- \fn QFontComboBox::currentFontChanged(const QFont &font)
+ \fn void QFontComboBox::currentFontChanged(const QFont &font)
This signal is emitted whenever the current font changes, with
the new \a font.
@@ -554,7 +554,7 @@ QSize QFontComboBox::sizeHint() const
{
QSize sz = QComboBox::sizeHint();
QFontMetrics fm(font());
- sz.setWidth(fm.width(QLatin1Char('m'))*14);
+ sz.setWidth(fm.horizontalAdvance(QLatin1Char('m'))*14);
return sz;
}
diff --git a/src/widgets/widgets/qfontcombobox.h b/src/widgets/widgets/qfontcombobox.h
index 1e4555ce2d..6c1871dd2d 100644
--- a/src/widgets/widgets/qfontcombobox.h
+++ b/src/widgets/widgets/qfontcombobox.h
@@ -58,7 +58,7 @@ class Q_WIDGETS_EXPORT QFontComboBox : public QComboBox
Q_PROPERTY(QFont currentFont READ currentFont WRITE setCurrentFont NOTIFY currentFontChanged)
public:
- explicit QFontComboBox(QWidget *parent = Q_NULLPTR);
+ explicit QFontComboBox(QWidget *parent = nullptr);
~QFontComboBox();
void setWritingSystem(QFontDatabase::WritingSystem);
@@ -78,7 +78,7 @@ public:
FontFilters fontFilters() const;
QFont currentFont() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
public Q_SLOTS:
void setCurrentFont(const QFont &f);
@@ -87,7 +87,7 @@ Q_SIGNALS:
void currentFontChanged(const QFont &f);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
private:
Q_DISABLE_COPY(QFontComboBox)
diff --git a/src/widgets/widgets/qframe.h b/src/widgets/widgets/qframe.h
index 986915a28f..595dfa929d 100644
--- a/src/widgets/widgets/qframe.h
+++ b/src/widgets/widgets/qframe.h
@@ -61,7 +61,7 @@ class Q_WIDGETS_EXPORT QFrame : public QWidget
Q_PROPERTY(QRect frameRect READ frameRect WRITE setFrameRect DESIGNABLE false)
public:
- explicit QFrame(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ explicit QFrame(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~QFrame();
int frameStyle() const;
@@ -69,7 +69,7 @@ public:
int frameWidth() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
enum Shape {
NoFrame = 0, // no frame
@@ -108,14 +108,14 @@ public:
void setFrameRect(const QRect &);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *) override;
+ void changeEvent(QEvent *) override;
void drawFrame(QPainter *);
protected:
- QFrame(QFramePrivate &dd, QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ QFrame(QFramePrivate &dd, QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
void initStyleOption(QStyleOptionFrame *option) const;
private:
diff --git a/src/widgets/widgets/qgroupbox.cpp b/src/widgets/widgets/qgroupbox.cpp
index 611f3f88db..69eac1ebf7 100644
--- a/src/widgets/widgets/qgroupbox.cpp
+++ b/src/widgets/widgets/qgroupbox.cpp
@@ -484,7 +484,7 @@ QSize QGroupBox::minimumSizeHint() const
QFontMetrics metrics(fontMetrics());
- int baseWidth = metrics.width(d->title) + metrics.width(QLatin1Char(' '));
+ int baseWidth = metrics.horizontalAdvance(d->title) + metrics.horizontalAdvance(QLatin1Char(' '));
int baseHeight = metrics.height();
if (d->checkable) {
baseWidth += style()->pixelMetric(QStyle::PM_IndicatorWidth);
diff --git a/src/widgets/widgets/qgroupbox.h b/src/widgets/widgets/qgroupbox.h
index 668dc03f3d..deaeba4656 100644
--- a/src/widgets/widgets/qgroupbox.h
+++ b/src/widgets/widgets/qgroupbox.h
@@ -59,8 +59,8 @@ class Q_WIDGETS_EXPORT QGroupBox : public QWidget
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)
public:
- explicit QGroupBox(QWidget *parent = Q_NULLPTR);
- explicit QGroupBox(const QString &title, QWidget *parent = Q_NULLPTR);
+ explicit QGroupBox(QWidget *parent = nullptr);
+ explicit QGroupBox(const QString &title, QWidget *parent = nullptr);
~QGroupBox();
QString title() const;
@@ -69,7 +69,7 @@ public:
Qt::Alignment alignment() const;
void setAlignment(int alignment);
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const override;
bool isFlat() const;
void setFlat(bool flat);
@@ -85,15 +85,15 @@ Q_SIGNALS:
void toggled(bool);
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void childEvent(QChildEvent *event) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ void childEvent(QChildEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+ void focusInEvent(QFocusEvent *event) override;
+ void changeEvent(QEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
void initStyleOption(QStyleOptionGroupBox *option) const;
diff --git a/src/widgets/widgets/qkeysequenceedit.h b/src/widgets/widgets/qkeysequenceedit.h
index d5b4b199cd..85d76f14a3 100644
--- a/src/widgets/widgets/qkeysequenceedit.h
+++ b/src/widgets/widgets/qkeysequenceedit.h
@@ -55,8 +55,8 @@ class Q_WIDGETS_EXPORT QKeySequenceEdit : public QWidget
Q_PROPERTY(QKeySequence keySequence READ keySequence WRITE setKeySequence NOTIFY keySequenceChanged USER true)
public:
- explicit QKeySequenceEdit(QWidget *parent = Q_NULLPTR);
- explicit QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent = Q_NULLPTR);
+ explicit QKeySequenceEdit(QWidget *parent = nullptr);
+ explicit QKeySequenceEdit(const QKeySequence &keySequence, QWidget *parent = nullptr);
~QKeySequenceEdit();
QKeySequence keySequence() const;
@@ -72,10 +72,10 @@ Q_SIGNALS:
protected:
QKeySequenceEdit(QKeySequenceEditPrivate &d, QWidget *parent, Qt::WindowFlags f);
- bool event(QEvent *) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void keyReleaseEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
+ void keyPressEvent(QKeyEvent *) override;
+ void keyReleaseEvent(QKeyEvent *) override;
+ void timerEvent(QTimerEvent *) override;
private:
Q_DISABLE_COPY(QKeySequenceEdit)
diff --git a/src/widgets/widgets/qlabel.cpp b/src/widgets/widgets/qlabel.cpp
index e3225800cc..ee4825d3e5 100644
--- a/src/widgets/widgets/qlabel.cpp
+++ b/src/widgets/widgets/qlabel.cpp
@@ -66,16 +66,16 @@ QLabelPrivate::QLabelPrivate()
sh(),
msh(),
text(),
- pixmap(Q_NULLPTR),
- scaledpixmap(Q_NULLPTR),
- cachedimage(Q_NULLPTR),
+ pixmap(nullptr),
+ scaledpixmap(nullptr),
+ cachedimage(nullptr),
#ifndef QT_NO_PICTURE
- picture(Q_NULLPTR),
+ picture(nullptr),
#endif
#if QT_CONFIG(movie)
movie(),
#endif
- control(Q_NULLPTR),
+ control(nullptr),
shortcutCursor(),
#ifndef QT_NO_CURSOR
cursor(),
@@ -583,7 +583,7 @@ QSize QLabelPrivate::sizeForWidth(int w) const
int m = indent;
if (m < 0 && q->frameWidth()) // no indent, but we do have a frame
- m = fm.width(QLatin1Char('x')) - margin*2;
+ m = fm.horizontalAdvance(QLatin1Char('x')) - margin*2;
if (m > 0) {
if ((align & Qt::AlignLeft) || (align & Qt::AlignRight))
hextra += m;
@@ -1440,7 +1440,7 @@ QRect QLabelPrivate::documentRect() const
: q->layoutDirection(), QFlag(this->align));
int m = indent;
if (m < 0 && q->frameWidth()) // no indent, but we do have a frame
- m = q->fontMetrics().width(QLatin1Char('x')) / 2 - margin;
+ m = q->fontMetrics().horizontalAdvance(QLatin1Char('x')) / 2 - margin;
if (m > 0) {
if (align & Qt::AlignLeft)
cr.setLeft(cr.left() + m);
diff --git a/src/widgets/widgets/qlabel.h b/src/widgets/widgets/qlabel.h
index 469254a145..e1cc333a1c 100644
--- a/src/widgets/widgets/qlabel.h
+++ b/src/widgets/widgets/qlabel.h
@@ -67,8 +67,8 @@ class Q_WIDGETS_EXPORT QLabel : public QFrame
Q_PROPERTY(QString selectedText READ selectedText)
public:
- explicit QLabel(QWidget *parent=Q_NULLPTR, Qt::WindowFlags f=Qt::WindowFlags());
- explicit QLabel(const QString &text, QWidget *parent=Q_NULLPTR, Qt::WindowFlags f=Qt::WindowFlags());
+ explicit QLabel(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags());
+ explicit QLabel(const QString &text, QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags());
~QLabel();
QString text() const;
@@ -97,13 +97,13 @@ public:
bool hasScaledContents() const;
void setScaledContents(bool);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
#ifndef QT_NO_SHORTCUT
void setBuddy(QWidget *);
QWidget *buddy() const;
#endif
- int heightForWidth(int) const Q_DECL_OVERRIDE;
+ int heightForWidth(int) const override;
bool openExternalLinks() const;
void setOpenExternalLinks(bool open);
@@ -134,19 +134,19 @@ Q_SIGNALS:
void linkHovered(const QString& link);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *ev) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void keyPressEvent(QKeyEvent *ev) override;
+ void paintEvent(QPaintEvent *) override;
+ void changeEvent(QEvent *) override;
+ void mousePressEvent(QMouseEvent *ev) override;
+ void mouseMoveEvent(QMouseEvent *ev) override;
+ void mouseReleaseEvent(QMouseEvent *ev) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *ev) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *ev) override;
#endif // QT_NO_CONTEXTMENU
- void focusInEvent(QFocusEvent *ev) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *ev) Q_DECL_OVERRIDE;
- bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *ev) override;
+ void focusOutEvent(QFocusEvent *ev) override;
+ bool focusNextPrevChild(bool next) override;
private:
diff --git a/src/widgets/widgets/qlcdnumber.h b/src/widgets/widgets/qlcdnumber.h
index 28fd530e6e..644c39eaf3 100644
--- a/src/widgets/widgets/qlcdnumber.h
+++ b/src/widgets/widgets/qlcdnumber.h
@@ -59,8 +59,8 @@ class Q_WIDGETS_EXPORT QLCDNumber : public QFrame // LCD number widget
Q_PROPERTY(int intValue READ intValue WRITE display)
public:
- explicit QLCDNumber(QWidget* parent = Q_NULLPTR);
- explicit QLCDNumber(uint numDigits, QWidget* parent = Q_NULLPTR);
+ explicit QLCDNumber(QWidget* parent = nullptr);
+ explicit QLCDNumber(uint numDigits, QWidget* parent = nullptr);
~QLCDNumber();
enum Mode {
@@ -88,7 +88,7 @@ public:
double value() const;
int intValue() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
public Q_SLOTS:
void display(const QString &str);
@@ -104,8 +104,8 @@ Q_SIGNALS:
void overflow();
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *) override;
public:
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp
index d0a794222e..bdeef7cdf7 100644
--- a/src/widgets/widgets/qlineedit.cpp
+++ b/src/widgets/widgets/qlineedit.cpp
@@ -80,9 +80,8 @@
#include "private/qapplication_p.h"
#include "private/qshortcutmap_p.h"
#include "qkeysequence.h"
-#define ACCEL_KEY(k) ((qApp->testAttribute(Qt::AA_DontShowIconsInMenus) \
- ? false \
- : qApp->styleHints()->showShortcutsInContextMenus()) \
+#define ACCEL_KEY(k) ((!QCoreApplication::testAttribute(Qt::AA_DontShowIconsInMenus) \
+ && QGuiApplication::styleHints()->showShortcutsInContextMenus()) \
&& !qApp->d_func()->shortcutMap.hasShortcutForKeySequence(k) ? \
QLatin1Char('\t') + QKeySequence(k).toString(QKeySequence::NativeText) : QString())
#else
@@ -231,10 +230,10 @@ void QLineEdit::initStyleOption(QStyleOptionFrame *option) const
*/
/*!
- \fn void QLineEdit::cursorPositionChanged(int old, int new)
+ \fn void QLineEdit::cursorPositionChanged(int oldPos, int newPos)
This signal is emitted whenever the cursor moves. The previous
- position is given by \a old, and the new position by \a new.
+ position is given by \a oldPos, and the new position by \a newPos.
\sa setCursorPosition(), cursorPosition()
*/
@@ -682,7 +681,7 @@ QSize QLineEdit::sizeHint() const
int h = qMax(fm.height(), 14) + 2*d->verticalMargin
+ d->topTextMargin + d->bottomTextMargin
+ d->topmargin + d->bottommargin;
- int w = fm.width(QLatin1Char('x')) * 17 + 2*d->horizontalMargin
+ int w = fm.horizontalAdvance(QLatin1Char('x')) * 17 + 2*d->horizontalMargin
+ d->effectiveLeftTextMargin() + d->effectiveRightTextMargin()
+ d->leftmargin + d->rightmargin; // "some"
QStyleOptionFrame opt;
@@ -1466,6 +1465,8 @@ bool QLineEdit::event(QEvent * e)
#endif
} else if (e->type() == QEvent::Resize) {
d->positionSideWidgets();
+ } else if (e->type() == QEvent::StyleChange) {
+ d->initMouseYThreshold();
}
#ifdef QT_KEYPAD_NAVIGATION
if (QApplication::keypadNavigationEnabled()) {
@@ -1546,7 +1547,17 @@ void QLineEdit::mouseMoveEvent(QMouseEvent * e)
const bool select = (d->imHints & Qt::ImhNoPredictiveText);
#endif
#ifndef QT_NO_IM
- if (d->control->composeMode() && select) {
+ if (d->mouseYThreshold > 0 && e->pos().y() > d->mousePressPos.y() + d->mouseYThreshold) {
+ if (layoutDirection() == Qt::RightToLeft)
+ d->control->home(select);
+ else
+ d->control->end(select);
+ } else if (d->mouseYThreshold > 0 && e->pos().y() + d->mouseYThreshold < d->mousePressPos.y()) {
+ if (layoutDirection() == Qt::RightToLeft)
+ d->control->end(select);
+ else
+ d->control->home(select);
+ } else if (d->control->composeMode() && select) {
int startPos = d->xToPos(d->mousePressPos.x());
int currentPos = d->xToPos(e->pos().x());
if (startPos != currentPos)
diff --git a/src/widgets/widgets/qlineedit.h b/src/widgets/widgets/qlineedit.h
index b98307390c..099bf4bb18 100644
--- a/src/widgets/widgets/qlineedit.h
+++ b/src/widgets/widgets/qlineedit.h
@@ -90,8 +90,8 @@ public:
};
Q_ENUM(ActionPosition)
- explicit QLineEdit(QWidget *parent = Q_NULLPTR);
- explicit QLineEdit(const QString &, QWidget *parent = Q_NULLPTR);
+ explicit QLineEdit(QWidget *parent = nullptr);
+ explicit QLineEdit(const QString &, QWidget *parent = nullptr);
~QLineEdit();
QString text() const;
@@ -128,8 +128,8 @@ public:
QCompleter *completer() const;
#endif
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
int cursorPosition() const;
void setCursorPosition(int);
@@ -209,31 +209,31 @@ Q_SIGNALS:
void selectionChanged();
protected:
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+ void mouseDoubleClickEvent(QMouseEvent *) override;
+ void keyPressEvent(QKeyEvent *) override;
+ void focusInEvent(QFocusEvent *) override;
+ void focusOutEvent(QFocusEvent *) override;
+ void paintEvent(QPaintEvent *) override;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *) Q_DECL_OVERRIDE;
- void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *) override;
+ void dragMoveEvent(QDragMoveEvent *e) override;
+ void dragLeaveEvent(QDragLeaveEvent *e) override;
+ void dropEvent(QDropEvent *) override;
#endif
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *) override;
#endif
- void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *) override;
void initStyleOption(QStyleOptionFrame *option) const;
public:
- QVariant inputMethodQuery(Qt::InputMethodQuery) const Q_DECL_OVERRIDE;
+ QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery property, QVariant argument) const;
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
protected:
QRect cursorRect() const;
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp
index 5b352f5554..6a8af53c97 100644
--- a/src/widgets/widgets/qlineedit_p.cpp
+++ b/src/widgets/widgets/qlineedit_p.cpp
@@ -56,6 +56,7 @@
#endif
#include <qpainter.h>
#include <qpropertyanimation.h>
+#include <qstylehints.h>
#include <qvalidator.h>
QT_BEGIN_NAMESPACE
@@ -232,6 +233,13 @@ void QLineEditPrivate::init(const QString& txt)
q->setAcceptDrops(true);
q->setAttribute(Qt::WA_MacShowFocusRect);
+
+ initMouseYThreshold();
+}
+
+void QLineEditPrivate::initMouseYThreshold()
+{
+ mouseYThreshold = QGuiApplication::styleHints()->mouseQuickSelectionThreshold();
}
QRect QLineEditPrivate::adjustedContentsRect() const
@@ -330,13 +338,13 @@ QLineEditIconButton::QLineEditIconButton(QWidget *parent)
QLineEditPrivate *QLineEditIconButton::lineEditPrivate() const
{
QLineEdit *le = qobject_cast<QLineEdit *>(parentWidget());
- return le ? static_cast<QLineEditPrivate *>(qt_widget_private(le)) : Q_NULLPTR;
+ return le ? static_cast<QLineEditPrivate *>(qt_widget_private(le)) : nullptr;
}
void QLineEditIconButton::paintEvent(QPaintEvent *)
{
QPainter painter(this);
- QWindow *window = Q_NULLPTR;
+ QWindow *window = nullptr;
if (const QWidget *nativeParent = nativeParentWidget())
window = nativeParent->windowHandle();
// Note isDown should really use the active state but in most styles
diff --git a/src/widgets/widgets/qlineedit_p.h b/src/widgets/widgets/qlineedit_p.h
index 77a91880df..39f670b0b0 100644
--- a/src/widgets/widgets/qlineedit_p.h
+++ b/src/widgets/widgets/qlineedit_p.h
@@ -94,8 +94,8 @@ public:
#endif
protected:
- void actionEvent(QActionEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void actionEvent(QActionEvent *e) override;
+ void paintEvent(QPaintEvent *event) override;
private slots:
void updateCursor();
@@ -141,7 +141,7 @@ public:
dragEnabled(0), clickCausedFocus(0), hscroll(0), vscroll(0),
alignment(Qt::AlignLeading | Qt::AlignVCenter),
leftTextMargin(0), topTextMargin(0), rightTextMargin(0), bottomTextMargin(0),
- lastTextSize(0)
+ lastTextSize(0), mouseYThreshold(0)
{
}
@@ -155,6 +155,7 @@ public:
QPointer<QAction> selectAllAction;
#endif
void init(const QString&);
+ void initMouseYThreshold();
QRect adjustedControlRect(const QRect &) const;
@@ -253,6 +254,7 @@ private:
SideWidgetEntryList leadingSideWidgets;
SideWidgetEntryList trailingSideWidgets;
int lastTextSize;
+ int mouseYThreshold;
};
Q_DECLARE_TYPEINFO(QLineEditPrivate::SideWidgetEntry, Q_PRIMITIVE_TYPE);
Q_DECLARE_TYPEINFO(QLineEditPrivate::SideWidgetLocation, Q_PRIMITIVE_TYPE);
diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.h b/src/widgets/widgets/qmaccocoaviewcontainer_mac.h
index d926ef8569..0de3989167 100644
--- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.h
+++ b/src/widgets/widgets/qmaccocoaviewcontainer_mac.h
@@ -52,7 +52,7 @@ class Q_WIDGETS_EXPORT QMacCocoaViewContainer : public QWidget
{
Q_OBJECT
public:
- QMacCocoaViewContainer(NSView *cocoaViewToWrap, QWidget *parent = Q_NULLPTR);
+ QMacCocoaViewContainer(NSView *cocoaViewToWrap, QWidget *parent = nullptr);
virtual ~QMacCocoaViewContainer();
void setCocoaView(NSView *view);
diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
index 610df2125b..98ee90deb7 100644
--- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
+++ b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm
@@ -108,11 +108,9 @@ QMacCocoaViewContainerPrivate::~QMacCocoaViewContainerPrivate()
}
/*!
- \fn QMacCocoaViewContainer::QMacCocoaViewContainer(NSView *cocoaViewToWrap, QWidget *parent)
-
- Create a new QMacCocoaViewContainer using the NSView pointer in \a
- cocoaViewToWrap with parent, \a parent. QMacCocoaViewContainer will
- retain \a cocoaViewToWrap.
+ Create a new QMacCocoaViewContainer using the NSView pointer in
+ the \a view with parent, \a parent. QMacCocoaViewContainer will
+ retain the \a view.
*/
QMacCocoaViewContainer::QMacCocoaViewContainer(NSView *view, QWidget *parent)
diff --git a/src/widgets/widgets/qmacnativewidget_mac.h b/src/widgets/widgets/qmacnativewidget_mac.h
index a8faffd6be..6fd90516ac 100644
--- a/src/widgets/widgets/qmacnativewidget_mac.h
+++ b/src/widgets/widgets/qmacnativewidget_mac.h
@@ -51,7 +51,7 @@ class Q_WIDGETS_EXPORT QMacNativeWidget : public QWidget
{
Q_OBJECT
public:
- QMacNativeWidget(NSView *parentView = Q_NULLPTR);
+ QMacNativeWidget(NSView *parentView = nullptr);
~QMacNativeWidget();
QSize sizeHint() const override;
diff --git a/src/widgets/widgets/qmacnativewidget_mac.mm b/src/widgets/widgets/qmacnativewidget_mac.mm
index 9ad8aa1305..874ca84b61 100644
--- a/src/widgets/widgets/qmacnativewidget_mac.mm
+++ b/src/widgets/widgets/qmacnativewidget_mac.mm
@@ -145,8 +145,7 @@ QSize QMacNativeWidget::sizeHint() const
return QWidget::sizeHint();
}
-/*! \fn NSView *QMacNativeWidget::nativeView() const
-
+/*!
Returns the native view backing the QMacNativeWidget.
*/
diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp
index 00ee0a9d10..bf0a88e7fb 100644
--- a/src/widgets/widgets/qmainwindow.cpp
+++ b/src/widgets/widgets/qmainwindow.cpp
@@ -951,7 +951,9 @@ void QMainWindow::setDockNestingEnabled(bool enabled)
}
#if 0
-/*! \property QMainWindow::verticalTabsEnabled
+// If added back in, add the '!' to the qdoc comment marker as well.
+/*
+ \property QMainWindow::verticalTabsEnabled
\brief whether left and right dock areas use vertical tabs
\since 4.2
diff --git a/src/widgets/widgets/qmainwindow.h b/src/widgets/widgets/qmainwindow.h
index 50d840cf61..069683d4ac 100644
--- a/src/widgets/widgets/qmainwindow.h
+++ b/src/widgets/widgets/qmainwindow.h
@@ -91,7 +91,7 @@ public:
Q_DECLARE_FLAGS(DockOptions, DockOption)
Q_FLAG(DockOptions)
- explicit QMainWindow(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ explicit QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~QMainWindow();
QSize iconSize() const;
@@ -203,9 +203,9 @@ Q_SIGNALS:
protected:
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *event) override;
#endif
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
private:
Q_DECLARE_PRIVATE(QMainWindow)
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index 1767a8458f..9b38da340c 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -202,14 +202,14 @@ public:
layoutState.deleteAllLayoutItems();
}
- void addItem(QLayoutItem*) Q_DECL_OVERRIDE { Q_UNREACHABLE(); }
- int count() const Q_DECL_OVERRIDE { return 0; }
- QLayoutItem* itemAt(int index) const Q_DECL_OVERRIDE
+ void addItem(QLayoutItem*) override { Q_UNREACHABLE(); }
+ int count() const override { return 0; }
+ QLayoutItem* itemAt(int index) const override
{
int x = 0;
return layoutState.itemAt(&x, index);
}
- QLayoutItem* takeAt(int index) Q_DECL_OVERRIDE
+ QLayoutItem* takeAt(int index) override
{
int x = 0;
QLayoutItem *ret = layoutState.takeAt(&x, index);
@@ -225,22 +225,22 @@ public:
}
return ret;
}
- QSize sizeHint() const Q_DECL_OVERRIDE
+ QSize sizeHint() const override
{
int fw = frameWidth();
return layoutState.sizeHint() + QSize(fw, fw);
}
- QSize minimumSize() const Q_DECL_OVERRIDE
+ QSize minimumSize() const override
{
int fw = frameWidth();
return layoutState.minimumSize() + QSize(fw, fw);
}
- QSize maximumSize() const Q_DECL_OVERRIDE
+ QSize maximumSize() const override
{
int fw = frameWidth();
return layoutState.maximumSize() + QSize(fw, fw);
}
- void setGeometry(const QRect&r) Q_DECL_OVERRIDE
+ void setGeometry(const QRect&r) override
{
groupWindow()->destroyOrHideIfEmpty();
QDockAreaLayoutInfo *li = dockAreaLayoutInfo();
@@ -1658,9 +1658,9 @@ class QMainWindowTabBar : public QTabBar
public:
QMainWindowTabBar(QMainWindow *parent);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent*) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent*) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent*) override;
+ void mouseMoveEvent(QMouseEvent*) override;
};
diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h
index c61c4f6aa8..168d4444b9 100644
--- a/src/widgets/widgets/qmainwindowlayout_p.h
+++ b/src/widgets/widgets/qmainwindowlayout_p.h
@@ -345,8 +345,8 @@ public:
QList<int> currentGapPos;
protected:
- bool event(QEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
+ void paintEvent(QPaintEvent*) override;
private:
QSize m_removedFrameSize;
@@ -358,9 +358,9 @@ class QDockWidgetGroupWindowItem : public QWidgetItem
{
public:
explicit QDockWidgetGroupWindowItem(QDockWidgetGroupWindow *parent) : QWidgetItem(parent) {}
- QSize minimumSize() const Q_DECL_OVERRIDE { return lay()->minimumSize(); }
- QSize maximumSize() const Q_DECL_OVERRIDE { return lay()->maximumSize(); }
- QSize sizeHint() const Q_DECL_OVERRIDE { return lay()->sizeHint(); }
+ QSize minimumSize() const override { return lay()->minimumSize(); }
+ QSize maximumSize() const override { return lay()->maximumSize(); }
+ QSize sizeHint() const override { return lay()->sizeHint(); }
private:
QLayout *lay() const { return const_cast<QDockWidgetGroupWindowItem *>(this)->widget()->layout(); }
@@ -533,17 +533,17 @@ public:
// QLayout interface
- void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
- void setGeometry(const QRect &r) Q_DECL_OVERRIDE;
- QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *item) override;
+ void setGeometry(const QRect &r) override;
+ QLayoutItem *itemAt(int index) const override;
+ QLayoutItem *takeAt(int index) override;
+ int count() const override;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSize() const override;
mutable QSize szHint;
mutable QSize minSize;
- void invalidate() Q_DECL_OVERRIDE;
+ void invalidate() override;
// animations
diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp
index 4e7925556a..45c01dec80 100644
--- a/src/widgets/widgets/qmdiarea.cpp
+++ b/src/widgets/widgets/qmdiarea.cpp
@@ -100,7 +100,7 @@
*/
/*!
- \fn QMdiArea::subWindowActivated(QMdiSubWindow *window)
+ \fn void QMdiArea::subWindowActivated(QMdiSubWindow *window)
QMdiArea emits this signal after \a window has been activated. When \a
window is 0, QMdiArea has just deactivated its last active window, and
@@ -570,9 +570,9 @@ public:
QMdiAreaTabBar(QWidget *parent) : QTabBar(parent) {}
protected:
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *event) override;
#endif
private:
@@ -2638,7 +2638,7 @@ bool QMdiArea::eventFilter(QObject *object, QEvent *event)
d->tabBar->setTabEnabled(tabIndex, true);
}
#endif // QT_CONFIG(tabbar)
- // fall through
+ Q_FALLTHROUGH();
case QEvent::Hide:
d->isSubWindowsTiled = false;
break;
diff --git a/src/widgets/widgets/qmdiarea.h b/src/widgets/widgets/qmdiarea.h
index 05deb9e21f..35edde9eb8 100644
--- a/src/widgets/widgets/qmdiarea.h
+++ b/src/widgets/widgets/qmdiarea.h
@@ -87,11 +87,11 @@ public:
};
Q_ENUM(ViewMode)
- QMdiArea(QWidget *parent = Q_NULLPTR);
+ QMdiArea(QWidget *parent = nullptr);
~QMdiArea();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
QMdiSubWindow *currentSubWindow() const;
QMdiSubWindow *activeSubWindow() const;
@@ -143,18 +143,18 @@ public Q_SLOTS:
void activatePreviousSubWindow();
protected Q_SLOTS:
- void setupViewport(QWidget *viewport) Q_DECL_OVERRIDE;
+ void setupViewport(QWidget *viewport) override;
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *paintEvent) Q_DECL_OVERRIDE;
- void childEvent(QChildEvent *childEvent) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *resizeEvent) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *timerEvent) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *showEvent) Q_DECL_OVERRIDE;
- bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ bool eventFilter(QObject *object, QEvent *event) override;
+ void paintEvent(QPaintEvent *paintEvent) override;
+ void childEvent(QChildEvent *childEvent) override;
+ void resizeEvent(QResizeEvent *resizeEvent) override;
+ void timerEvent(QTimerEvent *timerEvent) override;
+ void showEvent(QShowEvent *showEvent) override;
+ bool viewportEvent(QEvent *event) override;
+ void scrollContentsBy(int dx, int dy) override;
private:
Q_DISABLE_COPY(QMdiArea)
diff --git a/src/widgets/widgets/qmdiarea_p.h b/src/widgets/widgets/qmdiarea_p.h
index 4740993af7..fd00118ec6 100644
--- a/src/widgets/widgets/qmdiarea_p.h
+++ b/src/widgets/widgets/qmdiarea_p.h
@@ -88,8 +88,8 @@ class RegularTiler : public Rearranger
// Rearranges widgets according to a regular tiling pattern
// covering the entire domain.
// Both positions and sizes may change.
- void rearrange(QList<QWidget *> &widgets, const QRect &domain) const Q_DECL_OVERRIDE;
- Type type() const Q_DECL_OVERRIDE { return Rearranger::RegularTiler; }
+ void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
+ Type type() const override { return Rearranger::RegularTiler; }
};
class SimpleCascader : public Rearranger
@@ -97,8 +97,8 @@ class SimpleCascader : public Rearranger
// Rearranges widgets according to a simple, regular cascading pattern.
// Widgets are resized to minimumSize.
// Both positions and sizes may change.
- void rearrange(QList<QWidget *> &widgets, const QRect &domain) const Q_DECL_OVERRIDE;
- Type type() const Q_DECL_OVERRIDE { return Rearranger::SimpleCascader; }
+ void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
+ Type type() const override { return Rearranger::SimpleCascader; }
};
class IconTiler : public Rearranger
@@ -106,8 +106,8 @@ class IconTiler : public Rearranger
// Rearranges icons (assumed to be the same size) according to a regular
// tiling pattern filling up the domain from the bottom.
// Only positions may change.
- void rearrange(QList<QWidget *> &widgets, const QRect &domain) const Q_DECL_OVERRIDE;
- Type type() const Q_DECL_OVERRIDE { return Rearranger::IconTiler; }
+ void rearrange(QList<QWidget *> &widgets, const QRect &domain) const override;
+ Type type() const override { return Rearranger::IconTiler; }
};
class Placer
@@ -122,7 +122,7 @@ public:
class MinOverlapPlacer : public Placer
{
- QPoint place(const QSize &size, const QVector<QRect> &rects, const QRect &domain) const Q_DECL_OVERRIDE;
+ QPoint place(const QSize &size, const QVector<QRect> &rects, const QRect &domain) const override;
static int accumulatedOverlap(const QRect &source, const QVector<QRect> &rects);
static QRect findMinOverlapRect(const QVector<QRect> &source, const QVector<QRect> &rects);
static QVector<QRect> getCandidatePlacements(const QSize &size, const QVector<QRect> &rects, const QRect &domain);
@@ -206,7 +206,7 @@ public:
bool lastWindowAboutToBeDestroyed() const;
void setChildActivationEnabled(bool enable = true, bool onlyNextActivationEvent = false) const;
QRect resizeToMinimumTileSize(const QSize &minSubWindowSize, int subWindowCount);
- void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) Q_DECL_OVERRIDE; // reimp
+ void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) override; // reimp
QMdiSubWindow *nextVisibleSubWindow(int increaseFactor, QMdiArea::WindowOrder,
int removed = -1, int fromIndex = -1) const;
void highlightNextSubWindow(int increaseFactor);
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp
index 129898a08d..794674c427 100644
--- a/src/widgets/widgets/qmdisubwindow.cpp
+++ b/src/widgets/widgets/qmdisubwindow.cpp
@@ -373,18 +373,18 @@ class ControlLabel : public QWidget
public:
ControlLabel(QMdiSubWindow *subWindow, QWidget *parent = 0);
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
signals:
void _q_clicked();
void _q_doubleClicked();
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *paintEvent) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ void paintEvent(QPaintEvent *paintEvent) override;
+ void mousePressEvent(QMouseEvent *mouseEvent) override;
+ void mouseDoubleClickEvent(QMouseEvent *mouseEvent) override;
+ void mouseReleaseEvent(QMouseEvent *mouseEvent) override;
private:
QPixmap label;
@@ -504,7 +504,7 @@ class ControllerWidget : public QWidget
Q_OBJECT
public:
ControllerWidget(QMdiSubWindow *subWindow, QWidget *parent = 0);
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
void setControlVisible(QMdiSubWindowPrivate::WindowStateAction action, bool visible);
inline bool hasVisibleControls() const
{
@@ -519,12 +519,12 @@ signals:
void _q_close();
protected:
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void leaveEvent(QEvent *event) override;
+ bool event(QEvent *event) override;
private:
QStyle::SubControl activeControl;
@@ -1986,6 +1986,13 @@ void QMdiSubWindowPrivate::updateActions()
for (int i = 0; i < NumWindowStateActions; ++i)
setVisible(WindowStateAction(i), false);
+#ifdef Q_OS_MACOS
+ if (q_func()->style()->inherits("QMacStyle"))
+ for (int i = 0; i < NumWindowStateActions; ++i)
+ if (QAction *action = actions[i])
+ action->setIconVisibleInMenu(false);
+#endif
+
if (windowFlags & Qt::FramelessWindowHint)
return;
diff --git a/src/widgets/widgets/qmdisubwindow.h b/src/widgets/widgets/qmdisubwindow.h
index adaafa352a..302522e1c3 100644
--- a/src/widgets/widgets/qmdisubwindow.h
+++ b/src/widgets/widgets/qmdisubwindow.h
@@ -66,11 +66,11 @@ public:
};
Q_DECLARE_FLAGS(SubWindowOptions, SubWindowOption)
- QMdiSubWindow(QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
+ QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~QMdiSubWindow();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
void setWidget(QWidget *widget);
QWidget *widget() const;
@@ -107,28 +107,28 @@ public Q_SLOTS:
void showShaded();
protected:
- bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *showEvent) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *hideEvent) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *changeEvent) Q_DECL_OVERRIDE;
- void closeEvent(QCloseEvent *closeEvent) Q_DECL_OVERRIDE;
- void leaveEvent(QEvent *leaveEvent) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *resizeEvent) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *timerEvent) Q_DECL_OVERRIDE;
- void moveEvent(QMoveEvent *moveEvent) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *paintEvent) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void mouseDoubleClickEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *keyEvent) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) override;
+ bool event(QEvent *event) override;
+ void showEvent(QShowEvent *showEvent) override;
+ void hideEvent(QHideEvent *hideEvent) override;
+ void changeEvent(QEvent *changeEvent) override;
+ void closeEvent(QCloseEvent *closeEvent) override;
+ void leaveEvent(QEvent *leaveEvent) override;
+ void resizeEvent(QResizeEvent *resizeEvent) override;
+ void timerEvent(QTimerEvent *timerEvent) override;
+ void moveEvent(QMoveEvent *moveEvent) override;
+ void paintEvent(QPaintEvent *paintEvent) override;
+ void mousePressEvent(QMouseEvent *mouseEvent) override;
+ void mouseDoubleClickEvent(QMouseEvent *mouseEvent) override;
+ void mouseReleaseEvent(QMouseEvent *mouseEvent) override;
+ void mouseMoveEvent(QMouseEvent *mouseEvent) override;
+ void keyPressEvent(QKeyEvent *keyEvent) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *contextMenuEvent) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *contextMenuEvent) override;
#endif
- void focusInEvent(QFocusEvent *focusInEvent) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *focusOutEvent) Q_DECL_OVERRIDE;
- void childEvent(QChildEvent *childEvent) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *focusInEvent) override;
+ void focusOutEvent(QFocusEvent *focusOutEvent) override;
+ void childEvent(QChildEvent *childEvent) override;
private:
Q_DISABLE_COPY(QMdiSubWindow)
diff --git a/src/widgets/widgets/qmdisubwindow_p.h b/src/widgets/widgets/qmdisubwindow_p.h
index d03aca168b..719984c8d4 100644
--- a/src/widgets/widgets/qmdisubwindow_p.h
+++ b/src/widgets/widgets/qmdisubwindow_p.h
@@ -271,7 +271,7 @@ public:
void setFocusWidget();
bool restoreFocus();
void storeFocusWidget();
- void setWindowFlags(Qt::WindowFlags windowFlags) Q_DECL_OVERRIDE;
+ void setWindowFlags(Qt::WindowFlags windowFlags) override;
void setVisible(WindowStateAction, bool visible = true);
#ifndef QT_NO_ACTION
void setEnabled(WindowStateAction, bool enable = true);
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 57d7fb1bc8..024f9a75a1 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -116,7 +116,7 @@ class QTornOffMenu : public QMenu
q->setFixedSize(size);
}
- QVector<QPointer<QWidget> > calcCausedStack() const Q_DECL_OVERRIDE { return causedStack; }
+ QVector<QPointer<QWidget> > calcCausedStack() const override { return causedStack; }
QPointer<QMenu> causedMenu;
QVector<QPointer<QWidget> > causedStack;
bool initialized;
@@ -162,7 +162,7 @@ public:
} else if (act->type() == QEvent::ActionRemoved)
removeAction(act->action());
}
- void actionEvent(QActionEvent *e) Q_DECL_OVERRIDE
+ void actionEvent(QActionEvent *e) override
{
Q_D(QTornOffMenu);
QMenu::actionEvent(e);
@@ -240,7 +240,7 @@ void QMenuPrivate::syncPlatformMenu()
if (platformMenu.isNull())
return;
- QPlatformMenuItem *beforeItem = Q_NULLPTR;
+ QPlatformMenuItem *beforeItem = nullptr;
const QList<QAction*> actions = q->actions();
for (QList<QAction*>::const_reverse_iterator it = actions.rbegin(), end = actions.rend(); it != end; ++it) {
QPlatformMenuItem *menuItem = insertActionInPlatformMenu(*it, beforeItem);
@@ -435,13 +435,13 @@ void QMenuPrivate::updateActionRects(const QRect &screen) const
QString s = action->text();
int t = s.indexOf(QLatin1Char('\t'));
if (t != -1) {
- tabWidth = qMax(int(tabWidth), qfm.width(s.mid(t+1)));
+ tabWidth = qMax(int(tabWidth), qfm.horizontalAdvance(s.mid(t+1)));
s = s.left(t);
#ifndef QT_NO_SHORTCUT
} else if (action->isShortcutVisibleInContextMenu() || !contextMenu) {
QKeySequence seq = action->shortcut();
if (!seq.isEmpty())
- tabWidth = qMax(int(tabWidth), qfm.width(seq.toString(QKeySequence::NativeText)));
+ tabWidth = qMax(int(tabWidth), qfm.horizontalAdvance(seq.toString(QKeySequence::NativeText)));
#endif
}
sz.setWidth(fm.boundingRect(QRect(), Qt::TextSingleLine | Qt::TextShowMnemonic, s).width());
@@ -665,7 +665,7 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
if (action
&& (action->isSeparator()
|| (!action->isEnabled() && !q->style()->styleHint(QStyle::SH_Menu_AllowActiveAndDisabled, 0, q))))
- action = Q_NULLPTR;
+ action = nullptr;
// Reselect the currently active action in case mouse moved over other menu items when
// moving from sub menu action to sub menu (QTBUG-20094).
@@ -739,13 +739,13 @@ void QMenuSloppyState::reset()
m_use_reset_action = true;
m_uni_dir_discarded_count = 0;
m_time.stop();
- m_reset_action = Q_NULLPTR;
- m_origin_action = Q_NULLPTR;
+ m_reset_action = nullptr;
+ m_origin_action = nullptr;
m_action_rect = QRect();
m_previous_point = QPointF();
if (m_sub_menu) {
- QMenuPrivate::get(m_sub_menu)->sloppyState.m_parent = Q_NULLPTR;
- m_sub_menu = Q_NULLPTR;
+ QMenuPrivate::get(m_sub_menu)->sloppyState.m_parent = nullptr;
+ m_sub_menu = nullptr;
}
}
void QMenuSloppyState::enter()
@@ -854,7 +854,7 @@ void QMenuSloppyState::timeout()
if (m_use_reset_action)
menu_priv->setCurrentAction(m_reset_action, 0);
} else {
- menu_priv->setCurrentAction(Q_NULLPTR, 0);
+ menu_priv->setCurrentAction(nullptr, 0);
}
}
@@ -903,8 +903,7 @@ void QMenuPrivate::adjustMenuScreen(const QPoint &p)
// The (item) size calculations depend on the menu screen,
// so a wrong screen would often cause wrong sizes (on high DPI)
const QScreen *currentScreen = q->windowHandle() ? q->windowHandle()->screen() : nullptr;
- const int screenNumberForPoint = QApplication::desktop()->screenNumber(p);
- QScreen *actualScreen = QGuiApplication::screens().at(screenNumberForPoint);
+ QScreen *actualScreen = QGuiApplication::screenAt(p);
if (actualScreen && currentScreen != actualScreen) {
if (!q->windowHandle()) // Try to create a window handle if not created.
createWinId();
@@ -1803,7 +1802,7 @@ QAction *QMenu::addAction(const QString &text, const QObject *receiver, const ch
return action;
}
-/*!\fn QAction *QMenu::addAction(const QString &text, const QObject *receiver, PointerToMemberFunction method, const QKeySequence &shortcut = 0)
+/*!\fn template<typename PointerToMemberFunction> QAction *QMenu::addAction(const QString &text, const QObject *receiver, PointerToMemberFunction method, const QKeySequence &shortcut = 0)
\since 5.6
@@ -1818,7 +1817,7 @@ QAction *QMenu::addAction(const QString &text, const QObject *receiver, const ch
QMenu takes ownership of the returned QAction.
*/
-/*!\fn QAction *QMenu::addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
+/*!\fn template<typename Functor> QAction *QMenu::addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
\since 5.6
@@ -1833,7 +1832,7 @@ QAction *QMenu::addAction(const QString &text, const QObject *receiver, const ch
QMenu takes ownership of the returned QAction.
*/
-/*!\fn QAction *QMenu::addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
+/*!\fn template<typename Functor> QAction *QMenu::addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut)
\since 5.6
@@ -1850,7 +1849,7 @@ QAction *QMenu::addAction(const QString &text, const QObject *receiver, const ch
QMenu takes ownership of the returned QAction.
*/
-/*!\fn QAction *QMenu::addAction(const QIcon &icon, const QString &text, const QObject *receiver, PointerToMemberFunction method, const QKeySequence &shortcut = 0)
+/*!\fn template<typename PointerToMemberFunction> QAction *QMenu::addAction(const QIcon &icon, const QString &text, const QObject *receiver, PointerToMemberFunction method, const QKeySequence &shortcut = 0)
\since 5.6
@@ -1865,7 +1864,7 @@ QAction *QMenu::addAction(const QString &text, const QObject *receiver, const ch
QMenu takes ownership of the returned QAction.
*/
-/*!\fn QAction *QMenu::addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
+/*!\fn template<typename Functor> QAction *QMenu::addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
\since 5.6
@@ -1880,7 +1879,7 @@ QAction *QMenu::addAction(const QString &text, const QObject *receiver, const ch
QMenu takes ownership of the returned QAction.
*/
-/*!\fn QAction *QMenu::addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
+/*!\fn template<typename Functor> QAction *QMenu::addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut)
\since 5.6
@@ -2226,7 +2225,7 @@ void QMenu::hideTearOffMenu()
// should consider the torn-off menu deleted.
// This way showTearOffMenu() will not try to
// reuse the dying torn-off menu.
- d->tornPopup = Q_NULLPTR;
+ d->tornPopup = nullptr;
}
}
@@ -3535,9 +3534,13 @@ void QMenu::actionEvent(QActionEvent *e)
if (d->tornPopup)
d->tornPopup->syncWithMenu(this, e);
if (e->type() == QEvent::ActionAdded) {
- if(!d->tornoff) {
- connect(e->action(), SIGNAL(triggered()), this, SLOT(_q_actionTriggered()));
- connect(e->action(), SIGNAL(hovered()), this, SLOT(_q_actionHovered()));
+
+ if (!d->tornoff
+ && !qobject_cast<QMenuBar*>(e->action()->parent())) {
+ // Only connect if the action was not directly added by QMenuBar::addAction(const QString &text)
+ // to avoid the signal being emitted twice
+ connect(e->action(), SIGNAL(triggered()), this, SLOT(_q_actionTriggered()), Qt::UniqueConnection);
+ connect(e->action(), SIGNAL(hovered()), this, SLOT(_q_actionHovered()), Qt::UniqueConnection);
}
if (QWidgetAction *wa = qobject_cast<QWidgetAction *>(e->action())) {
QWidget *widget = wa->requestWidget(this);
diff --git a/src/widgets/widgets/qmenu.h b/src/widgets/widgets/qmenu.h
index 7cf73f55b3..86d927e919 100644
--- a/src/widgets/widgets/qmenu.h
+++ b/src/widgets/widgets/qmenu.h
@@ -71,8 +71,8 @@ private:
Q_PROPERTY(bool toolTipsVisible READ toolTipsVisible WRITE setToolTipsVisible)
public:
- explicit QMenu(QWidget *parent = Q_NULLPTR);
- explicit QMenu(const QString &title, QWidget *parent = Q_NULLPTR);
+ explicit QMenu(QWidget *parent = nullptr);
+ explicit QMenu(const QString &title, QWidget *parent = nullptr);
~QMenu();
using QWidget::addAction;
@@ -184,17 +184,17 @@ public:
void setActiveAction(QAction *act);
QAction *activeAction() const;
- void popup(const QPoint &pos, QAction *at = Q_NULLPTR);
+ void popup(const QPoint &pos, QAction *at = nullptr);
QAction *exec();
- QAction *exec(const QPoint &pos, QAction *at = Q_NULLPTR);
+ QAction *exec(const QPoint &pos, QAction *at = nullptr);
#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
- static QAction *exec(const QList<QAction *> &actions, const QPoint &pos, QAction *at = Q_NULLPTR, QWidget *parent = Q_NULLPTR);
+ static QAction *exec(const QList<QAction *> &actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr);
#else
- static QAction *exec(QList<QAction*> actions, const QPoint &pos, QAction *at = Q_NULLPTR, QWidget *parent = Q_NULLPTR);
+ static QAction *exec(QList<QAction*> actions, const QPoint &pos, QAction *at = nullptr, QWidget *parent = nullptr);
#endif
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
QRect actionGeometry(QAction *) const;
QAction *actionAt(const QPoint &) const;
@@ -231,22 +231,22 @@ Q_SIGNALS:
protected:
int columnCount() const;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) override;
+ void keyPressEvent(QKeyEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *) override;
#endif
- void enterEvent(QEvent *) Q_DECL_OVERRIDE;
- void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void actionEvent(QActionEvent *) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *) Q_DECL_OVERRIDE;
- bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ void enterEvent(QEvent *) override;
+ void leaveEvent(QEvent *) override;
+ void hideEvent(QHideEvent *) override;
+ void paintEvent(QPaintEvent *) override;
+ void actionEvent(QActionEvent *) override;
+ void timerEvent(QTimerEvent *) override;
+ bool event(QEvent *) override;
+ bool focusNextPrevChild(bool next) override;
void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const;
private Q_SLOTS:
@@ -259,7 +259,7 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_platformMenuAboutToShow())
protected:
- QMenu(QMenuPrivate &dd, QWidget* parent = Q_NULLPTR);
+ QMenu(QMenuPrivate &dd, QWidget* parent = nullptr);
private:
Q_DISABLE_COPY(QMenu)
diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h
index ce5134958e..b6afb05e3a 100644
--- a/src/widgets/widgets/qmenu_p.h
+++ b/src/widgets/widgets/qmenu_p.h
@@ -177,7 +177,7 @@ public:
QSetValueOnDestroy<QPointF> setPreviousPoint(m_previous_point, mousePos);
if (resetAction && resetAction->isSeparator()) {
- m_reset_action = Q_NULLPTR;
+ m_reset_action = nullptr;
m_use_reset_action = true;
} else if (m_reset_action != resetAction) {
if (m_use_reset_action && resetAction) {
@@ -442,8 +442,8 @@ public:
public:
enum Type { ScrollUp, ScrollDown };
ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate,
- QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
+ void paintEvent(QPaintEvent *e) override;
void updateScrollerRects(const QRect &rect);
private:
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp
index ece2a0a9c9..b0a75288e8 100644
--- a/src/widgets/widgets/qmenubar.cpp
+++ b/src/widgets/widgets/qmenubar.cpp
@@ -75,8 +75,8 @@ class QMenuBarExtension : public QToolButton
public:
explicit QMenuBarExtension(QWidget *parent);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ void paintEvent(QPaintEvent *) override;
};
QMenuBarExtension::QMenuBarExtension(QWidget *parent)
@@ -781,6 +781,40 @@ QAction *QMenuBar::addAction(const QString &text, const QObject *receiver, const
}
/*!
+ \fn template<typename Obj, typename PointerToMemberFunctionOrFunctor> QAction *QMenuBar::addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
+
+ \since 5.11
+
+ \overload
+
+ This convenience function creates a new action with the given \a
+ text. The action's triggered() signal is connected to the
+ \a method of the \a receiver. The function adds the newly created
+ action to the menu's list of actions and returns it.
+
+ QMenuBar takes ownership of the returned QAction.
+
+ \sa QWidget::addAction(), QWidget::actions()
+*/
+
+/*!
+ \fn template<typename Functor> QAction *QMenuBar::addAction(const QString &text, Functor functor)
+
+ \since 5.11
+
+ \overload
+
+ This convenience function creates a new action with the given \a
+ text. The action's triggered() signal is connected to the
+ \a functor. The function adds the newly created
+ action to the menu's list of actions and returns it.
+
+ QMenuBar takes ownership of the returned QAction.
+
+ \sa QWidget::addAction(), QWidget::actions()
+*/
+
+/*!
Appends a new QMenu with \a title to the menu bar. The menu bar
takes ownership of the menu. Returns the new menu.
@@ -1046,6 +1080,10 @@ void QMenuBar::mouseReleaseEvent(QMouseEvent *e)
d->mouseDown = false;
QAction *action = d->actionAt(e->pos());
+
+ // do noting if the action is hidden
+ if (!d->isVisible(action))
+ return;
if((d->closePopupMode && action == d->currentAction) || !action || !action->menu()) {
//we set the current action before activating
//so that we let the leave event set the current back to 0
@@ -1331,7 +1369,7 @@ void QMenuBarPrivate::handleReparent()
//Note: if parent is reparented, then window may change even if parent doesn't.
// We need to install an avent filter on each parent up to the parent that is
// also a window (for shortcuts)
- QWidget *newWindow = newParent ? newParent->window() : Q_NULLPTR;
+ QWidget *newWindow = newParent ? newParent->window() : nullptr;
QVector<QPointer<QWidget> > newParents;
// Remove event filters on ex-parents, keep them on still-parents
@@ -1506,7 +1544,7 @@ bool QMenuBar::eventFilter(QObject *object, QEvent *event)
d->setKeyboardMode(!d->keyboardState);
}
}
- // fall through
+ Q_FALLTHROUGH();
case QEvent::MouseButtonPress:
case QEvent::MouseButtonRelease:
case QEvent::MouseMove:
@@ -1710,7 +1748,7 @@ void QMenuBarPrivate::_q_internalShortcutActivated(int id)
QAction *act = actions.at(id);
if (act && act->menu()) {
if (QPlatformMenu *platformMenu = act->menu()->platformMenu()) {
- platformMenu->showPopup(q->windowHandle(), actionRects.at(id), Q_NULLPTR);
+ platformMenu->showPopup(q->windowHandle(), actionRects.at(id), nullptr);
return;
}
}
diff --git a/src/widgets/widgets/qmenubar.h b/src/widgets/widgets/qmenubar.h
index be70f4ea48..2f071e7e3b 100644
--- a/src/widgets/widgets/qmenubar.h
+++ b/src/widgets/widgets/qmenubar.h
@@ -60,13 +60,39 @@ class Q_WIDGETS_EXPORT QMenuBar : public QWidget
Q_PROPERTY(bool nativeMenuBar READ isNativeMenuBar WRITE setNativeMenuBar)
public:
- explicit QMenuBar(QWidget *parent = Q_NULLPTR);
+ explicit QMenuBar(QWidget *parent = nullptr);
~QMenuBar();
using QWidget::addAction;
QAction *addAction(const QString &text);
QAction *addAction(const QString &text, const QObject *receiver, const char* member);
+#ifdef Q_QDOC
+ template<typename Obj, typename PointerToMemberFunctionOrFunctor>
+ QAction *addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method);
+ template<typename Functor>
+ QAction *addAction(const QString &text, Functor functor);
+#else
+ // addAction(QString): Connect to a QObject slot / functor or function pointer (with context)
+ template<typename Obj, typename Func1>
+ inline typename std::enable_if<!std::is_same<const char*, Func1>::value
+ && QtPrivate::IsPointerToTypeDerivedFromQObject<Obj*>::Value, QAction *>::type
+ addAction(const QString &text, const Obj *object, Func1 slot)
+ {
+ QAction *result = addAction(text);
+ connect(result, &QAction::triggered, object, std::move(slot));
+ return result;
+ }
+ // addAction(QString): Connect to a functor or function pointer (without context)
+ template <typename Func1>
+ inline QAction *addAction(const QString &text, Func1 slot)
+ {
+ QAction *result = addAction(text);
+ connect(result, &QAction::triggered, std::move(slot));
+ return result;
+ }
+#endif // !Q_QDOC
+
QAction *addMenu(QMenu *menu);
QMenu *addMenu(const QString &title);
QMenu *addMenu(const QIcon &icon, const QString &title);
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 555b1f94ad..e66b702ffd 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -364,7 +364,7 @@ void QPlainTextDocumentLayout::layoutBlock(const QTextBlock &block)
int extraMargin = 0;
if (option.flags() & QTextOption::AddSpaceForLineAndParagraphSeparators) {
QFontMetrics fm(block.charFormat().font());
- extraMargin += fm.width(QChar(0x21B5));
+ extraMargin += fm.horizontalAdvance(QChar(0x21B5));
}
tl->beginLayout();
qreal availableWidth = d->width;
@@ -747,7 +747,8 @@ QPlainTextEditPrivate::QPlainTextEditPrivate()
tabChangesFocus(false),
lineWrap(QPlainTextEdit::WidgetWidth),
wordWrap(QTextOption::WrapAtWordBoundaryOrAnywhere),
- clickCausedFocus(0),topLine(0),topLineFracture(0),
+ clickCausedFocus(0), placeholderVisible(1),
+ topLine(0), topLineFracture(0),
pageUpDownLastCursorYIsValid(false)
{
showCursorOnInitialShow = true;
@@ -784,6 +785,7 @@ void QPlainTextEditPrivate::init(const QString &txt)
QObject::connect(control, SIGNAL(selectionChanged()), q, SIGNAL(selectionChanged()));
QObject::connect(control, SIGNAL(cursorPositionChanged()), q, SLOT(_q_cursorPositionChanged()));
+ QObject::connect(control, SIGNAL(textChanged()), q, SLOT(_q_textChanged()));
QObject::connect(control, SIGNAL(textChanged()), q, SLOT(updateMicroFocus()));
// set a null page size initially to avoid any relayouting until the textedit
@@ -816,6 +818,24 @@ void QPlainTextEditPrivate::init(const QString &txt)
#endif
}
+void QPlainTextEditPrivate::_q_textChanged()
+{
+ Q_Q(QPlainTextEdit);
+
+ // We normally only repaint the part of view that contains text in the
+ // document that has changed (in _q_repaintContents). But the placeholder
+ // text is not a part of the document, but is drawn on separately. So whenever
+ // we either show or hide the placeholder text, we issue a full update.
+ bool placeholderCurrentyVisible = placeholderVisible;
+
+ placeholderVisible = !placeholderText.isEmpty()
+ && q->document()->isEmpty()
+ && q->firstVisibleBlock().layout()->preeditAreaText().isEmpty();
+
+ if (placeholderCurrentyVisible != placeholderVisible)
+ viewport->update();
+}
+
void QPlainTextEditPrivate::_q_repaintContents(const QRectF &contentsRect)
{
Q_Q(QPlainTextEdit);
@@ -1881,6 +1901,7 @@ static void fillBackground(QPainter *p, const QRectF &rect, QBrush brush, const
*/
void QPlainTextEdit::paintEvent(QPaintEvent *e)
{
+ Q_D(QPlainTextEdit);
QPainter painter(viewport());
Q_ASSERT(qobject_cast<QPlainTextDocumentLayout*>(document()->documentLayout()));
@@ -1903,6 +1924,15 @@ void QPlainTextEdit::paintEvent(QPaintEvent *e)
er.setRight(qMin(er.right(), maxX));
painter.setClipRect(er);
+ if (d->placeholderVisible) {
+ QColor col = d->control->palette().text().color();
+ col.setAlpha(128);
+ painter.setPen(col);
+ painter.setClipRect(e->rect());
+ const int margin = int(document()->documentMargin());
+ QRectF textRect = viewportRect.adjusted(margin, margin, 0, 0);
+ painter.drawText(textRect, Qt::AlignTop | Qt::TextWordWrap, placeholderText());
+ }
QAbstractTextDocumentLayout::PaintContext context = getPaintContext();
@@ -1977,17 +2007,8 @@ void QPlainTextEdit::paintEvent(QPaintEvent *e)
}
}
+ layout->draw(&painter, offset, selections, er);
- if (!placeholderText().isEmpty() && document()->isEmpty() && layout->preeditAreaText().isEmpty()) {
- Q_D(QPlainTextEdit);
- QColor col = d->control->palette().text().color();
- col.setAlpha(128);
- painter.setPen(col);
- const int margin = int(document()->documentMargin());
- painter.drawText(r.adjusted(margin, 0, 0, 0), Qt::AlignTop | Qt::TextWordWrap, placeholderText());
- } else {
- layout->draw(&painter, offset, selections, er);
- }
if ((drawCursor && !drawCursorAsBlock)
|| (editable && context.cursorPosition < -1
&& !layout->preeditAreaText().isEmpty())) {
diff --git a/src/widgets/widgets/qplaintextedit.h b/src/widgets/widgets/qplaintextedit.h
index cd25b45d50..34ec96715e 100644
--- a/src/widgets/widgets/qplaintextedit.h
+++ b/src/widgets/widgets/qplaintextedit.h
@@ -91,8 +91,8 @@ public:
};
Q_ENUM(LineWrapMode)
- explicit QPlainTextEdit(QWidget *parent = Q_NULLPTR);
- explicit QPlainTextEdit(const QString &text, QWidget *parent = Q_NULLPTR);
+ explicit QPlainTextEdit(QWidget *parent = nullptr);
+ explicit QPlainTextEdit(const QString &text, QWidget *parent = nullptr);
virtual ~QPlainTextEdit();
void setDocument(QTextDocument *document);
@@ -191,7 +191,7 @@ public:
void print(QPagedPaintDevice *printer) const;
int blockCount() const;
- QVariant inputMethodQuery(Qt::InputMethodQuery property) const Q_DECL_OVERRIDE;
+ QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
public Q_SLOTS:
@@ -233,43 +233,43 @@ Q_SIGNALS:
void modificationChanged(bool);
protected:
- virtual bool event(QEvent *e) Q_DECL_OVERRIDE;
- virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
- virtual void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- virtual void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- virtual void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
- virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- virtual void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *e) override;
+ virtual void timerEvent(QTimerEvent *e) override;
+ virtual void keyPressEvent(QKeyEvent *e) override;
+ virtual void keyReleaseEvent(QKeyEvent *e) override;
+ virtual void resizeEvent(QResizeEvent *e) override;
+ virtual void paintEvent(QPaintEvent *e) override;
+ virtual void mousePressEvent(QMouseEvent *e) override;
+ virtual void mouseMoveEvent(QMouseEvent *e) override;
+ virtual void mouseReleaseEvent(QMouseEvent *e) override;
+ virtual void mouseDoubleClickEvent(QMouseEvent *e) override;
+ virtual bool focusNextPrevChild(bool next) override;
#ifndef QT_NO_CONTEXTMENU
- virtual void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
+ virtual void contextMenuEvent(QContextMenuEvent *e) override;
#endif
#ifndef QT_NO_DRAGANDDROP
- virtual void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
- virtual void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
- virtual void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
- virtual void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
+ virtual void dragEnterEvent(QDragEnterEvent *e) override;
+ virtual void dragLeaveEvent(QDragLeaveEvent *e) override;
+ virtual void dragMoveEvent(QDragMoveEvent *e) override;
+ virtual void dropEvent(QDropEvent *e) override;
#endif
- virtual void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- virtual void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- virtual void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
- virtual void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ virtual void focusInEvent(QFocusEvent *e) override;
+ virtual void focusOutEvent(QFocusEvent *e) override;
+ virtual void showEvent(QShowEvent *) override;
+ virtual void changeEvent(QEvent *e) override;
#if QT_CONFIG(wheelevent)
- virtual void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
+ virtual void wheelEvent(QWheelEvent *e) override;
#endif
virtual QMimeData *createMimeDataFromSelection() const;
virtual bool canInsertFromMimeData(const QMimeData *source) const;
virtual void insertFromMimeData(const QMimeData *source);
- virtual void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
+ virtual void inputMethodEvent(QInputMethodEvent *) override;
QPlainTextEdit(QPlainTextEditPrivate &dd, QWidget *parent);
- virtual void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ virtual void scrollContentsBy(int dx, int dy) override;
virtual void doSetTextCursor(const QTextCursor &cursor);
QTextBlock firstVisibleBlock() const;
@@ -283,6 +283,7 @@ protected:
private:
Q_DISABLE_COPY(QPlainTextEdit)
Q_PRIVATE_SLOT(d_func(), void _q_repaintContents(const QRectF &r))
+ Q_PRIVATE_SLOT(d_func(), void _q_textChanged())
Q_PRIVATE_SLOT(d_func(), void _q_adjustScrollbars())
Q_PRIVATE_SLOT(d_func(), void _q_verticalScrollbarActionTriggered(int))
Q_PRIVATE_SLOT(d_func(), void _q_cursorPositionChanged())
@@ -302,14 +303,14 @@ public:
QPlainTextDocumentLayout(QTextDocument *document);
~QPlainTextDocumentLayout();
- void draw(QPainter *, const PaintContext &) Q_DECL_OVERRIDE;
- int hitTest(const QPointF &, Qt::HitTestAccuracy ) const Q_DECL_OVERRIDE;
+ void draw(QPainter *, const PaintContext &) override;
+ int hitTest(const QPointF &, Qt::HitTestAccuracy ) const override;
- int pageCount() const Q_DECL_OVERRIDE;
- QSizeF documentSize() const Q_DECL_OVERRIDE;
+ int pageCount() const override;
+ QSizeF documentSize() const override;
- QRectF frameBoundingRect(QTextFrame *) const Q_DECL_OVERRIDE;
- QRectF blockBoundingRect(const QTextBlock &block) const Q_DECL_OVERRIDE;
+ QRectF frameBoundingRect(QTextFrame *) const override;
+ QRectF blockBoundingRect(const QTextBlock &block) const override;
void ensureBlockLayout(const QTextBlock &block) const;
@@ -319,7 +320,7 @@ public:
void requestUpdate();
protected:
- void documentChanged(int from, int /*charsRemoved*/, int charsAdded) Q_DECL_OVERRIDE;
+ void documentChanged(int from, int /*charsRemoved*/, int charsAdded) override;
private:
diff --git a/src/widgets/widgets/qplaintextedit_p.h b/src/widgets/widgets/qplaintextedit_p.h
index 3d6e7781ed..534f0d4681 100644
--- a/src/widgets/widgets/qplaintextedit_p.h
+++ b/src/widgets/widgets/qplaintextedit_p.h
@@ -84,19 +84,19 @@ public:
QPlainTextEditControl(QPlainTextEdit *parent);
- QMimeData *createMimeDataFromSelection() const Q_DECL_OVERRIDE;
- bool canInsertFromMimeData(const QMimeData *source) const Q_DECL_OVERRIDE;
- void insertFromMimeData(const QMimeData *source) Q_DECL_OVERRIDE;
- int hitTest(const QPointF &point, Qt::HitTestAccuracy = Qt::FuzzyHit) const Q_DECL_OVERRIDE;
- QRectF blockBoundingRect(const QTextBlock &block) const Q_DECL_OVERRIDE;
- QString anchorAt(const QPointF &pos) const Q_DECL_OVERRIDE;
+ QMimeData *createMimeDataFromSelection() const override;
+ bool canInsertFromMimeData(const QMimeData *source) const override;
+ void insertFromMimeData(const QMimeData *source) override;
+ int hitTest(const QPointF &point, Qt::HitTestAccuracy = Qt::FuzzyHit) const override;
+ QRectF blockBoundingRect(const QTextBlock &block) const override;
+ QString anchorAt(const QPointF &pos) const override;
inline QRectF cursorRect(const QTextCursor &cursor) const {
QRectF r = QWidgetTextControl::cursorRect(cursor);
r.setLeft(qMax(r.left(), (qreal) 0.));
return r;
}
inline QRectF cursorRect() { return cursorRect(textCursor()); }
- void ensureCursorVisible() Q_DECL_OVERRIDE {
+ void ensureCursorVisible() override {
textEdit->ensureCursorVisible();
emit microFocusChanged();
}
@@ -106,7 +106,7 @@ public:
int topBlock;
QTextBlock firstVisibleBlock() const;
- QVariant loadResource(int type, const QUrl &name) Q_DECL_OVERRIDE {
+ QVariant loadResource(int type, const QUrl &name) override {
return textEdit->loadResource(type, name);
}
@@ -121,6 +121,7 @@ public:
void init(const QString &txt = QString());
void _q_repaintContents(const QRectF &contentsRect);
+ void _q_textChanged();
inline QPoint mapToContents(const QPoint &point) const
{ return QPoint(point.x() + horizontalOffset(), point.y() + verticalOffset()); }
@@ -157,6 +158,7 @@ public:
uint centerOnScroll : 1;
uint inDrag : 1;
uint clickCausedFocus : 1;
+ uint placeholderVisible : 1;
int topLine;
qreal topLineFracture; // for non-int sized fonts
diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp
index 91f7efa08c..56253b8e44 100644
--- a/src/widgets/widgets/qprogressbar.cpp
+++ b/src/widgets/widgets/qprogressbar.cpp
@@ -421,7 +421,7 @@ QSize QProgressBar::sizeHint() const
QStyleOptionProgressBar opt;
initStyleOption(&opt);
int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, this);
- QSize size = QSize(qMax(9, cw) * 7 + fm.width(QLatin1Char('0')) * 4, fm.height() + 8);
+ QSize size = QSize(qMax(9, cw) * 7 + fm.horizontalAdvance(QLatin1Char('0')) * 4, fm.height() + 8);
if (opt.orientation == Qt::Vertical)
size = size.transposed();
return style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, size, this);
diff --git a/src/widgets/widgets/qprogressbar.h b/src/widgets/widgets/qprogressbar.h
index e0f5e9084b..ec9686068c 100644
--- a/src/widgets/widgets/qprogressbar.h
+++ b/src/widgets/widgets/qprogressbar.h
@@ -68,7 +68,7 @@ public:
enum Direction { TopToBottom, BottomToTop };
Q_ENUM(Direction)
- explicit QProgressBar(QWidget *parent = Q_NULLPTR);
+ explicit QProgressBar(QWidget *parent = nullptr);
~QProgressBar();
int minimum() const;
@@ -83,8 +83,8 @@ public:
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment alignment);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
Qt::Orientation orientation() const;
@@ -109,8 +109,8 @@ Q_SIGNALS:
void valueChanged(int value);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *) override;
void initStyleOption(QStyleOptionProgressBar *option) const;
private:
diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp
index 8187b8f35c..afb17f533b 100644
--- a/src/widgets/widgets/qpushbutton.cpp
+++ b/src/widgets/widgets/qpushbutton.cpp
@@ -461,7 +461,7 @@ void QPushButton::keyPressEvent(QKeyEvent *e)
click();
break;
}
- // fall through
+ Q_FALLTHROUGH();
default:
QAbstractButton::keyPressEvent(e);
}
diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h
index c005f320cc..b02ba63d07 100644
--- a/src/widgets/widgets/qpushbutton.h
+++ b/src/widgets/widgets/qpushbutton.h
@@ -61,13 +61,13 @@ class Q_WIDGETS_EXPORT QPushButton : public QAbstractButton
Q_PROPERTY(bool flat READ isFlat WRITE setFlat)
public:
- explicit QPushButton(QWidget *parent = Q_NULLPTR);
- explicit QPushButton(const QString &text, QWidget *parent = Q_NULLPTR);
- QPushButton(const QIcon& icon, const QString &text, QWidget *parent = Q_NULLPTR);
+ explicit QPushButton(QWidget *parent = nullptr);
+ explicit QPushButton(const QString &text, QWidget *parent = nullptr);
+ QPushButton(const QIcon& icon, const QString &text, QWidget *parent = nullptr);
~QPushButton();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
bool autoDefault() const;
void setAutoDefault(bool);
@@ -88,13 +88,13 @@ public Q_SLOTS:
#endif
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE;
- void focusOutEvent(QFocusEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *) override;
+ void keyPressEvent(QKeyEvent *) override;
+ void focusInEvent(QFocusEvent *) override;
+ void focusOutEvent(QFocusEvent *) override;
void initStyleOption(QStyleOptionButton *option) const;
- QPushButton(QPushButtonPrivate &dd, QWidget* parent = Q_NULLPTR);
+ QPushButton(QPushButtonPrivate &dd, QWidget* parent = nullptr);
public:
diff --git a/src/widgets/widgets/qradiobutton.cpp b/src/widgets/widgets/qradiobutton.cpp
index dfba32d3e8..fd8922ed28 100644
--- a/src/widgets/widgets/qradiobutton.cpp
+++ b/src/widgets/widgets/qradiobutton.cpp
@@ -72,6 +72,7 @@ void QRadioButtonPrivate::init()
q->setAutoExclusive(true);
q->setMouseTracking(true);
q->setForegroundRole(QPalette::WindowText);
+ q->setAttribute(Qt::WA_MacShowFocusRect);
setLayoutItemMargins(QStyle::SE_RadioButtonLayoutItem);
}
diff --git a/src/widgets/widgets/qradiobutton.h b/src/widgets/widgets/qradiobutton.h
index 137ae01380..c6b5ddce84 100644
--- a/src/widgets/widgets/qradiobutton.h
+++ b/src/widgets/widgets/qradiobutton.h
@@ -56,18 +56,18 @@ class Q_WIDGETS_EXPORT QRadioButton : public QAbstractButton
Q_OBJECT
public:
- explicit QRadioButton(QWidget *parent = Q_NULLPTR);
- explicit QRadioButton(const QString &text, QWidget *parent = Q_NULLPTR);
+ explicit QRadioButton(QWidget *parent = nullptr);
+ explicit QRadioButton(const QString &text, QWidget *parent = nullptr);
~QRadioButton();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- bool hitButton(const QPoint &) const Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ bool hitButton(const QPoint &) const override;
+ void paintEvent(QPaintEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
void initStyleOption(QStyleOptionButton *button) const;
diff --git a/src/widgets/widgets/qrubberband.h b/src/widgets/widgets/qrubberband.h
index a05eb0d543..c683c24a18 100644
--- a/src/widgets/widgets/qrubberband.h
+++ b/src/widgets/widgets/qrubberband.h
@@ -56,7 +56,7 @@ class Q_WIDGETS_EXPORT QRubberBand : public QWidget
public:
enum Shape { Line, Rectangle };
- explicit QRubberBand(Shape, QWidget * = Q_NULLPTR);
+ explicit QRubberBand(Shape, QWidget * = nullptr);
~QRubberBand();
Shape shape() const;
@@ -73,12 +73,12 @@ public:
{ resize(s.width(), s.height()); }
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void moveEvent(QMoveEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void paintEvent(QPaintEvent *) override;
+ void changeEvent(QEvent *) override;
+ void showEvent(QShowEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+ void moveEvent(QMoveEvent *) override;
void initStyleOption(QStyleOptionRubberBand *option) const;
private:
diff --git a/src/widgets/widgets/qscrollarea.h b/src/widgets/widgets/qscrollarea.h
index d38bced2f2..6d252821c5 100644
--- a/src/widgets/widgets/qscrollarea.h
+++ b/src/widgets/widgets/qscrollarea.h
@@ -56,7 +56,7 @@ class Q_WIDGETS_EXPORT QScrollArea : public QAbstractScrollArea
Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment)
public:
- explicit QScrollArea(QWidget *parent = Q_NULLPTR);
+ explicit QScrollArea(QWidget *parent = nullptr);
~QScrollArea();
QWidget *widget() const;
@@ -66,9 +66,9 @@ public:
bool widgetResizable() const;
void setWidgetResizable(bool resizable);
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
- bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ bool focusNextPrevChild(bool next) override;
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment);
@@ -77,13 +77,13 @@ public:
void ensureWidgetVisible(QWidget *childWidget, int xmargin = 50, int ymargin = 50);
protected:
- QScrollArea(QScrollAreaPrivate &dd, QWidget *parent = Q_NULLPTR);
- bool event(QEvent *) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ QScrollArea(QScrollAreaPrivate &dd, QWidget *parent = nullptr);
+ bool event(QEvent *) override;
+ bool eventFilter(QObject *, QEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+ void scrollContentsBy(int dx, int dy) override;
- QSize viewportSizeHint() const Q_DECL_OVERRIDE;
+ QSize viewportSizeHint() const override;
private:
Q_DECLARE_PRIVATE(QScrollArea)
diff --git a/src/widgets/widgets/qscrollbar.h b/src/widgets/widgets/qscrollbar.h
index 22b9bfcddb..171195fd24 100644
--- a/src/widgets/widgets/qscrollbar.h
+++ b/src/widgets/widgets/qscrollbar.h
@@ -56,25 +56,25 @@ class Q_WIDGETS_EXPORT QScrollBar : public QAbstractSlider
{
Q_OBJECT
public:
- explicit QScrollBar(QWidget *parent = Q_NULLPTR);
- explicit QScrollBar(Qt::Orientation, QWidget *parent = Q_NULLPTR);
+ explicit QScrollBar(QWidget *parent = nullptr);
+ explicit QScrollBar(Qt::Orientation, QWidget *parent = nullptr);
~QScrollBar();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ bool event(QEvent *event) override;
protected:
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *) override;
#endif
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent*) Q_DECL_OVERRIDE;
- void sliderChange(SliderChange change) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void hideEvent(QHideEvent*) override;
+ void sliderChange(SliderChange change) override;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *) override;
#endif
void initStyleOption(QStyleOptionSlider *option) const;
diff --git a/src/widgets/widgets/qsizegrip.h b/src/widgets/widgets/qsizegrip.h
index 6ad2405339..5285ffdfb8 100644
--- a/src/widgets/widgets/qsizegrip.h
+++ b/src/widgets/widgets/qsizegrip.h
@@ -55,19 +55,19 @@ public:
explicit QSizeGrip(QWidget *parent);
~QSizeGrip();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- void setVisible(bool) Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ void setVisible(bool) override;
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
- void moveEvent(QMoveEvent *moveEvent) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *showEvent) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *hideEvent) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *mouseEvent) override;
+ void moveEvent(QMoveEvent *moveEvent) override;
+ void showEvent(QShowEvent *showEvent) override;
+ void hideEvent(QHideEvent *hideEvent) override;
+ bool eventFilter(QObject *, QEvent *) override;
+ bool event(QEvent *) override;
public:
diff --git a/src/widgets/widgets/qslider.h b/src/widgets/widgets/qslider.h
index 642e836af7..f74f9c8576 100644
--- a/src/widgets/widgets/qslider.h
+++ b/src/widgets/widgets/qslider.h
@@ -68,13 +68,13 @@ public:
};
Q_ENUM(TickPosition)
- explicit QSlider(QWidget *parent = Q_NULLPTR);
- explicit QSlider(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR);
+ explicit QSlider(QWidget *parent = nullptr);
+ explicit QSlider(Qt::Orientation orientation, QWidget *parent = nullptr);
~QSlider();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
void setTickPosition(TickPosition position);
TickPosition tickPosition() const;
@@ -82,13 +82,13 @@ public:
void setTickInterval(int ti);
int tickInterval() const;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
protected:
- void paintEvent(QPaintEvent *ev) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *ev) override;
+ void mousePressEvent(QMouseEvent *ev) override;
+ void mouseReleaseEvent(QMouseEvent *ev) override;
+ void mouseMoveEvent(QMouseEvent *ev) override;
void initStyleOption(QStyleOptionSlider *option) const;
diff --git a/src/widgets/widgets/qspinbox.cpp b/src/widgets/widgets/qspinbox.cpp
index b62a7768ce..561215ec85 100644
--- a/src/widgets/widgets/qspinbox.cpp
+++ b/src/widgets/widgets/qspinbox.cpp
@@ -61,10 +61,10 @@ class QSpinBoxPrivate : public QAbstractSpinBoxPrivate
Q_DECLARE_PUBLIC(QSpinBox)
public:
QSpinBoxPrivate();
- void emitSignals(EmitPolicy ep, const QVariant &) Q_DECL_OVERRIDE;
+ void emitSignals(EmitPolicy ep, const QVariant &) override;
- virtual QVariant valueFromText(const QString &n) const Q_DECL_OVERRIDE;
- virtual QString textFromValue(const QVariant &n) const Q_DECL_OVERRIDE;
+ virtual QVariant valueFromText(const QString &n) const override;
+ virtual QString textFromValue(const QVariant &n) const override;
QVariant validateAndInterpret(QString &input, int &pos,
QValidator::State &state) const;
@@ -82,10 +82,10 @@ class QDoubleSpinBoxPrivate : public QAbstractSpinBoxPrivate
Q_DECLARE_PUBLIC(QDoubleSpinBox)
public:
QDoubleSpinBoxPrivate();
- void emitSignals(EmitPolicy ep, const QVariant &) Q_DECL_OVERRIDE;
+ void emitSignals(EmitPolicy ep, const QVariant &) override;
- virtual QVariant valueFromText(const QString &n) const Q_DECL_OVERRIDE;
- virtual QString textFromValue(const QVariant &n) const Q_DECL_OVERRIDE;
+ virtual QVariant valueFromText(const QString &n) const override;
+ virtual QString textFromValue(const QVariant &n) const override;
QVariant validateAndInterpret(QString &input, int &pos,
QValidator::State &state) const;
double round(double input) const;
diff --git a/src/widgets/widgets/qspinbox.h b/src/widgets/widgets/qspinbox.h
index b61e665413..73489c9a68 100644
--- a/src/widgets/widgets/qspinbox.h
+++ b/src/widgets/widgets/qspinbox.h
@@ -62,7 +62,7 @@ class Q_WIDGETS_EXPORT QSpinBox : public QAbstractSpinBox
Q_PROPERTY(int displayIntegerBase READ displayIntegerBase WRITE setDisplayIntegerBase)
public:
- explicit QSpinBox(QWidget *parent = Q_NULLPTR);
+ explicit QSpinBox(QWidget *parent = nullptr);
~QSpinBox();
int value() const;
@@ -123,7 +123,7 @@ class Q_WIDGETS_EXPORT QDoubleSpinBox : public QAbstractSpinBox
Q_PROPERTY(double singleStep READ singleStep WRITE setSingleStep)
Q_PROPERTY(double value READ value WRITE setValue NOTIFY valueChanged USER true)
public:
- explicit QDoubleSpinBox(QWidget *parent = Q_NULLPTR);
+ explicit QDoubleSpinBox(QWidget *parent = nullptr);
~QDoubleSpinBox();
double value() const;
diff --git a/src/widgets/widgets/qsplashscreen.h b/src/widgets/widgets/qsplashscreen.h
index 1971b8bacf..8bdf4e7749 100644
--- a/src/widgets/widgets/qsplashscreen.h
+++ b/src/widgets/widgets/qsplashscreen.h
@@ -73,9 +73,9 @@ Q_SIGNALS:
void messageChanged(const QString &message);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
virtual void drawContents(QPainter *painter);
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) override;
private:
Q_DISABLE_COPY(QSplashScreen)
diff --git a/src/widgets/widgets/qsplitter.cpp b/src/widgets/widgets/qsplitter.cpp
index 5f49623941..8e4c846402 100644
--- a/src/widgets/widgets/qsplitter.cpp
+++ b/src/widgets/widgets/qsplitter.cpp
@@ -1372,7 +1372,7 @@ bool QSplitter::event(QEvent *e)
if (!d->firstShow)
break;
d->firstShow = false;
- // fall through
+ Q_FALLTHROUGH();
case QEvent::HideToParent:
case QEvent::ShowToParent:
case QEvent::LayoutRequest:
diff --git a/src/widgets/widgets/qsplitter.h b/src/widgets/widgets/qsplitter.h
index bc4d7bca39..16fac48d1c 100644
--- a/src/widgets/widgets/qsplitter.h
+++ b/src/widgets/widgets/qsplitter.h
@@ -64,8 +64,8 @@ class Q_WIDGETS_EXPORT QSplitter : public QFrame
Q_PROPERTY(bool childrenCollapsible READ childrenCollapsible WRITE setChildrenCollapsible)
public:
- explicit QSplitter(QWidget* parent = Q_NULLPTR);
- explicit QSplitter(Qt::Orientation, QWidget* parent = Q_NULLPTR);
+ explicit QSplitter(QWidget* parent = nullptr);
+ explicit QSplitter(Qt::Orientation, QWidget* parent = nullptr);
~QSplitter();
void addWidget(QWidget *widget);
@@ -84,8 +84,8 @@ public:
bool opaqueResize() const;
void refresh();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
QList<int> sizes() const;
void setSizes(const QList<int> &list);
@@ -111,12 +111,12 @@ Q_SIGNALS:
protected:
virtual QSplitterHandle *createHandle();
- void childEvent(QChildEvent *) Q_DECL_OVERRIDE;
+ void childEvent(QChildEvent *) override;
- bool event(QEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) override;
void moveSplitter(int pos, int index);
void setRubberBand(int position);
int closestLegalPosition(int, int);
@@ -145,15 +145,15 @@ public:
bool opaqueResize() const;
QSplitter *splitter() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
protected:
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+ bool event(QEvent *) override;
void moveSplitter(int p);
int closestLegalPosition(int p);
diff --git a/src/widgets/widgets/qstackedwidget.cpp b/src/widgets/widgets/qstackedwidget.cpp
index 9d92855a40..2217dab870 100644
--- a/src/widgets/widgets/qstackedwidget.cpp
+++ b/src/widgets/widgets/qstackedwidget.cpp
@@ -101,7 +101,7 @@ public:
widget is removed from the stacked widget, the currentChanged()
and widgetRemoved() signals are emitted respectively.
- \sa QStackedLayout, QTabWidget, {Config Dialog Example}
+ \sa QStackedLayout, QTabWidget
*/
/*!
diff --git a/src/widgets/widgets/qstackedwidget.h b/src/widgets/widgets/qstackedwidget.h
index 29df145b70..5508f905d4 100644
--- a/src/widgets/widgets/qstackedwidget.h
+++ b/src/widgets/widgets/qstackedwidget.h
@@ -56,7 +56,7 @@ class Q_WIDGETS_EXPORT QStackedWidget : public QFrame
Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentChanged)
Q_PROPERTY(int count READ count)
public:
- explicit QStackedWidget(QWidget *parent = Q_NULLPTR);
+ explicit QStackedWidget(QWidget *parent = nullptr);
~QStackedWidget();
int addWidget(QWidget *w);
@@ -79,7 +79,7 @@ Q_SIGNALS:
void widgetRemoved(int index);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
private:
Q_DISABLE_COPY(QStackedWidget)
diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp
index 4635b73a81..fb551158bf 100644
--- a/src/widgets/widgets/qstatusbar.cpp
+++ b/src/widgets/widgets/qstatusbar.cpp
@@ -601,7 +601,7 @@ QString QStatusBar::currentMessage() const
}
/*!
- \fn QStatusBar::messageChanged(const QString &message)
+ \fn void QStatusBar::messageChanged(const QString &message)
This signal is emitted whenever the temporary status message
changes. The new temporary message is passed in the \a message
diff --git a/src/widgets/widgets/qstatusbar.h b/src/widgets/widgets/qstatusbar.h
index 9ac637931c..2492e8487f 100644
--- a/src/widgets/widgets/qstatusbar.h
+++ b/src/widgets/widgets/qstatusbar.h
@@ -56,7 +56,7 @@ class Q_WIDGETS_EXPORT QStatusBar: public QWidget
Q_PROPERTY(bool sizeGripEnabled READ isSizeGripEnabled WRITE setSizeGripEnabled)
public:
- explicit QStatusBar(QWidget *parent = Q_NULLPTR);
+ explicit QStatusBar(QWidget *parent = nullptr);
virtual ~QStatusBar();
void addWidget(QWidget *widget, int stretch = 0);
@@ -79,14 +79,14 @@ Q_SIGNALS:
void messageChanged(const QString &text);
protected:
- void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *) override;
+ void paintEvent(QPaintEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
// ### Qt 6: consider making reformat() and hideOrShow() private
void reformat();
void hideOrShow();
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
private:
Q_DISABLE_COPY(QStatusBar)
diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp
index adaafc7d21..258e018151 100644
--- a/src/widgets/widgets/qtabbar.cpp
+++ b/src/widgets/widgets/qtabbar.cpp
@@ -1034,7 +1034,7 @@ void QTabBar::removeTab(int index)
newIndex--;
if (d->validIndex(newIndex))
break;
- // else fallthrough
+ Q_FALLTHROUGH();
case SelectRightTab:
newIndex = index;
if (newIndex >= d->tabList.size())
@@ -2221,7 +2221,7 @@ void QTabBar::changeEvent(QEvent *event)
d->elideMode = Qt::TextElideMode(style()->styleHint(QStyle::SH_TabBar_ElideMode, 0, this));
if (!d->useScrollButtonsSetByUser)
d->useScrollButtons = !style()->styleHint(QStyle::SH_TabBar_PreferNoArrows, 0, this);
- // fallthrough
+ Q_FALLTHROUGH();
case QEvent::FontChange:
d->textSizes.clear();
d->refresh();
diff --git a/src/widgets/widgets/qtabbar.h b/src/widgets/widgets/qtabbar.h
index ebcd1094ef..fc619355f0 100644
--- a/src/widgets/widgets/qtabbar.h
+++ b/src/widgets/widgets/qtabbar.h
@@ -71,7 +71,7 @@ class Q_WIDGETS_EXPORT QTabBar: public QWidget
Q_PROPERTY(bool changeCurrentOnDrag READ changeCurrentOnDrag WRITE setChangeCurrentOnDrag)
public:
- explicit QTabBar(QWidget *parent = Q_NULLPTR);
+ explicit QTabBar(QWidget *parent = nullptr);
~QTabBar();
enum Shape { RoundedNorth, RoundedSouth, RoundedWest, RoundedEast,
@@ -136,8 +136,8 @@ public:
int currentIndex() const;
int count() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
void setDrawBase(bool drawTheBase);
bool drawBase() const;
@@ -194,20 +194,20 @@ protected:
virtual void tabRemoved(int index);
virtual void tabLayoutChange();
- bool event(QEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void mousePressEvent (QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseMoveEvent (QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent (QMouseEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+ void showEvent(QShowEvent *) override;
+ void hideEvent(QHideEvent *) override;
+ void paintEvent(QPaintEvent *) override;
+ void mousePressEvent (QMouseEvent *) override;
+ void mouseMoveEvent (QMouseEvent *) override;
+ void mouseReleaseEvent (QMouseEvent *) override;
#if QT_CONFIG(wheelevent)
- void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *event) override;
#endif
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *) override;
+ void changeEvent(QEvent *) override;
+ void timerEvent(QTimerEvent *event) override;
void initStyleOption(QStyleOptionTab *option, int tabIndex) const;
#ifndef QT_NO_ACCESSIBILITY
diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h
index 195ff79c5d..1092878f2c 100644
--- a/src/widgets/widgets/qtabbar_p.h
+++ b/src/widgets/widgets/qtabbar_p.h
@@ -71,11 +71,11 @@ QT_BEGIN_NAMESPACE
class QMovableTabWidget : public QWidget
{
public:
- explicit QMovableTabWidget(QWidget *parent = Q_NULLPTR);
+ explicit QMovableTabWidget(QWidget *parent = nullptr);
void setPixmap(const QPixmap &pixmap);
protected:
- void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) override;
private:
QPixmap m_pixmap;
@@ -142,9 +142,9 @@ public:
TabBarAnimation(Tab *t, QTabBarPrivate *_priv) : tab(t), priv(_priv)
{ setEasingCurve(QEasingCurve::InOutQuad); }
- void updateCurrentValue(const QVariant &current) Q_DECL_OVERRIDE;
+ void updateCurrentValue(const QVariant &current) override;
- void updateState(State, State newState) Q_DECL_OVERRIDE;
+ void updateState(State, State newState) override;
private:
//these are needed for the callbacks
Tab *tab;
@@ -278,12 +278,12 @@ class CloseButton : public QAbstractButton
public:
explicit CloseButton(QWidget *parent = 0);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override
{ return sizeHint(); }
- void enterEvent(QEvent *event) Q_DECL_OVERRIDE;
- void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void enterEvent(QEvent *event) override;
+ void leaveEvent(QEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
};
QT_END_NAMESPACE
diff --git a/src/widgets/widgets/qtabwidget.h b/src/widgets/widgets/qtabwidget.h
index b80fdba1fb..f55e71488b 100644
--- a/src/widgets/widgets/qtabwidget.h
+++ b/src/widgets/widgets/qtabwidget.h
@@ -68,7 +68,7 @@ class Q_WIDGETS_EXPORT QTabWidget : public QWidget
Q_PROPERTY(bool tabBarAutoHide READ tabBarAutoHide WRITE setTabBarAutoHide)
public:
- explicit QTabWidget(QWidget *parent = Q_NULLPTR);
+ explicit QTabWidget(QWidget *parent = nullptr);
~QTabWidget();
int addTab(QWidget *widget, const QString &);
@@ -120,10 +120,10 @@ public:
TabShape tabShape() const;
void setTabShape(TabShape s);
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
- int heightForWidth(int width) const Q_DECL_OVERRIDE;
- bool hasHeightForWidth() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
+ int heightForWidth(int width) const override;
+ bool hasHeightForWidth() const override;
void setCornerWidget(QWidget * w, Qt::Corner corner = Qt::TopRightCorner);
QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const;
@@ -161,13 +161,13 @@ protected:
virtual void tabInserted(int index);
virtual void tabRemoved(int index);
- void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+ void keyPressEvent(QKeyEvent *) override;
+ void paintEvent(QPaintEvent *) override;
void setTabBar(QTabBar *);
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) override;
+ bool event(QEvent *) override;
void initStyleOption(QStyleOptionTabWidgetFrame *option) const;
diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp
index 0797120960..fa4dd14c92 100644
--- a/src/widgets/widgets/qtextbrowser.cpp
+++ b/src/widgets/widgets/qtextbrowser.cpp
@@ -135,7 +135,7 @@ public:
void setSource(const QUrl &url);
// re-imlemented from QTextEditPrivate
- virtual QUrl resolveUrl(const QUrl &url) const Q_DECL_OVERRIDE;
+ virtual QUrl resolveUrl(const QUrl &url) const override;
inline QUrl resolveUrl(const QString &url) const
{ return resolveUrl(QUrl(url)); }
diff --git a/src/widgets/widgets/qtextbrowser.h b/src/widgets/widgets/qtextbrowser.h
index f36c86bc86..ea81256f50 100644
--- a/src/widgets/widgets/qtextbrowser.h
+++ b/src/widgets/widgets/qtextbrowser.h
@@ -63,7 +63,7 @@ class Q_WIDGETS_EXPORT QTextBrowser : public QTextEdit
Q_PROPERTY(bool openLinks READ openLinks WRITE setOpenLinks)
public:
- explicit QTextBrowser(QWidget* parent = Q_NULLPTR);
+ explicit QTextBrowser(QWidget* parent = nullptr);
virtual ~QTextBrowser();
QUrl source() const;
@@ -71,7 +71,7 @@ public:
QStringList searchPaths() const;
void setSearchPaths(const QStringList &paths);
- virtual QVariant loadResource(int type, const QUrl &name) Q_DECL_OVERRIDE;
+ virtual QVariant loadResource(int type, const QUrl &name) override;
bool isBackwardAvailable() const;
bool isForwardAvailable() const;
@@ -104,14 +104,14 @@ Q_SIGNALS:
void anchorClicked(const QUrl &);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- virtual void keyPressEvent(QKeyEvent *ev) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- virtual void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
- virtual void focusOutEvent(QFocusEvent *ev) Q_DECL_OVERRIDE;
- virtual bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
- virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ virtual void keyPressEvent(QKeyEvent *ev) override;
+ virtual void mouseMoveEvent(QMouseEvent *ev) override;
+ virtual void mousePressEvent(QMouseEvent *ev) override;
+ virtual void mouseReleaseEvent(QMouseEvent *ev) override;
+ virtual void focusOutEvent(QFocusEvent *ev) override;
+ virtual bool focusNextPrevChild(bool next) override;
+ virtual void paintEvent(QPaintEvent *e) override;
private:
Q_DISABLE_COPY(QTextBrowser)
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index df8ecba112..95c85dc4fe 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -84,19 +84,19 @@ class QTextEditControl : public QWidgetTextControl
public:
inline QTextEditControl(QObject *parent) : QWidgetTextControl(parent) {}
- virtual QMimeData *createMimeDataFromSelection() const Q_DECL_OVERRIDE {
+ virtual QMimeData *createMimeDataFromSelection() const override {
QTextEdit *ed = qobject_cast<QTextEdit *>(parent());
if (!ed)
return QWidgetTextControl::createMimeDataFromSelection();
return ed->createMimeDataFromSelection();
}
- virtual bool canInsertFromMimeData(const QMimeData *source) const Q_DECL_OVERRIDE {
+ virtual bool canInsertFromMimeData(const QMimeData *source) const override {
QTextEdit *ed = qobject_cast<QTextEdit *>(parent());
if (!ed)
return QWidgetTextControl::canInsertFromMimeData(source);
return ed->canInsertFromMimeData(source);
}
- virtual void insertFromMimeData(const QMimeData *source) Q_DECL_OVERRIDE {
+ virtual void insertFromMimeData(const QMimeData *source) override {
QTextEdit *ed = qobject_cast<QTextEdit *>(parent());
if (!ed)
QWidgetTextControl::insertFromMimeData(source);
diff --git a/src/widgets/widgets/qtextedit.h b/src/widgets/widgets/qtextedit.h
index 954f0167ae..9e0913160d 100644
--- a/src/widgets/widgets/qtextedit.h
+++ b/src/widgets/widgets/qtextedit.h
@@ -102,8 +102,8 @@ public:
Q_DECLARE_FLAGS(AutoFormatting, AutoFormattingFlag)
Q_FLAG(AutoFormatting)
- explicit QTextEdit(QWidget *parent = Q_NULLPTR);
- explicit QTextEdit(const QString &text, QWidget *parent = Q_NULLPTR);
+ explicit QTextEdit(QWidget *parent = nullptr);
+ explicit QTextEdit(const QString &text, QWidget *parent = nullptr);
virtual ~QTextEdit();
void setDocument(QTextDocument *document);
@@ -216,7 +216,7 @@ public:
void print(QPagedPaintDevice *printer) const;
- QVariant inputMethodQuery(Qt::InputMethodQuery property) const Q_DECL_OVERRIDE;
+ QVariant inputMethodQuery(Qt::InputMethodQuery property) const override;
Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
public Q_SLOTS:
@@ -270,43 +270,43 @@ Q_SIGNALS:
void cursorPositionChanged();
protected:
- virtual bool event(QEvent *e) Q_DECL_OVERRIDE;
- virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
- virtual void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- virtual void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
- virtual void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
- virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- virtual void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- virtual bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *e) override;
+ virtual void timerEvent(QTimerEvent *e) override;
+ virtual void keyPressEvent(QKeyEvent *e) override;
+ virtual void keyReleaseEvent(QKeyEvent *e) override;
+ virtual void resizeEvent(QResizeEvent *e) override;
+ virtual void paintEvent(QPaintEvent *e) override;
+ virtual void mousePressEvent(QMouseEvent *e) override;
+ virtual void mouseMoveEvent(QMouseEvent *e) override;
+ virtual void mouseReleaseEvent(QMouseEvent *e) override;
+ virtual void mouseDoubleClickEvent(QMouseEvent *e) override;
+ virtual bool focusNextPrevChild(bool next) override;
#ifndef QT_NO_CONTEXTMENU
- virtual void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
+ virtual void contextMenuEvent(QContextMenuEvent *e) override;
#endif
#ifndef QT_NO_DRAGANDDROP
- virtual void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
- virtual void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
- virtual void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
- virtual void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
+ virtual void dragEnterEvent(QDragEnterEvent *e) override;
+ virtual void dragLeaveEvent(QDragLeaveEvent *e) override;
+ virtual void dragMoveEvent(QDragMoveEvent *e) override;
+ virtual void dropEvent(QDropEvent *e) override;
#endif
- virtual void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- virtual void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
- virtual void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
- virtual void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ virtual void focusInEvent(QFocusEvent *e) override;
+ virtual void focusOutEvent(QFocusEvent *e) override;
+ virtual void showEvent(QShowEvent *) override;
+ virtual void changeEvent(QEvent *e) override;
#if QT_CONFIG(wheelevent)
- virtual void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
+ virtual void wheelEvent(QWheelEvent *e) override;
#endif
virtual QMimeData *createMimeDataFromSelection() const;
virtual bool canInsertFromMimeData(const QMimeData *source) const;
virtual void insertFromMimeData(const QMimeData *source);
- virtual void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
+ virtual void inputMethodEvent(QInputMethodEvent *) override;
QTextEdit(QTextEditPrivate &dd, QWidget *parent);
- virtual void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ virtual void scrollContentsBy(int dx, int dy) override;
virtual void doSetTextCursor(const QTextCursor &cursor);
void zoomInF(float range);
diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp
index a00557c34e..7b6a2a329f 100644
--- a/src/widgets/widgets/qtoolbar.cpp
+++ b/src/widgets/widgets/qtoolbar.cpp
@@ -803,7 +803,7 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text,
return action;
}
-/*!\fn QAction *QToolBar::addAction(const QString &text, const QObject *receiver, PointerToMemberFunction method)
+/*!\fn template<typename PointerToMemberFunction> QAction *QToolBar::addAction(const QString &text, const QObject *receiver, PointerToMemberFunction method)
\since 5.6
@@ -815,7 +815,7 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text,
\a method of the \a receiver.
*/
-/*!\fn QAction *QToolBar::addAction(const QString &text, Functor functor)
+/*!\fn template<typename Functor> QAction *QToolBar::addAction(const QString &text, Functor functor)
\since 5.6
@@ -827,7 +827,7 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text,
\a functor.
*/
-/*!\fn QAction *QToolBar::addAction(const QString &text, const QObject *context, Functor functor)
+/*!\fn template<typename Functor> QAction *QToolBar::addAction(const QString &text, const QObject *context, Functor functor)
\since 5.6
@@ -841,7 +841,7 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text,
If \a context is destroyed, the functor will not be called.
*/
-/*!\fn QAction *QToolBar::addAction(const QIcon &icon, const QString &text, const QObject *receiver, PointerToMemberFunction method)
+/*!\fn template<typename PointerToMemberFunction> QAction *QToolBar::addAction(const QIcon &icon, const QString &text, const QObject *receiver, PointerToMemberFunction method)
\since 5.6
@@ -853,7 +853,7 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text,
\a method of the \a receiver.
*/
-/*!\fn QAction *QToolBar::addAction(const QIcon &icon, const QString &text, Functor functor)
+/*!\fn template<typename Functor> QAction *QToolBar::addAction(const QIcon &icon, const QString &text, Functor functor)
\since 5.6
@@ -865,7 +865,7 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text,
\a functor.
*/
-/*!\fn QAction *QToolBar::addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor)
+/*!\fn template<typename Functor> QAction *QToolBar::addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor)
\since 5.6
diff --git a/src/widgets/widgets/qtoolbar.h b/src/widgets/widgets/qtoolbar.h
index 9ffb472c76..0253541a2e 100644
--- a/src/widgets/widgets/qtoolbar.h
+++ b/src/widgets/widgets/qtoolbar.h
@@ -76,8 +76,8 @@ class Q_WIDGETS_EXPORT QToolBar : public QWidget
Q_PROPERTY(bool floatable READ isFloatable WRITE setFloatable)
public:
- explicit QToolBar(const QString &title, QWidget *parent = Q_NULLPTR);
- explicit QToolBar(QWidget *parent = Q_NULLPTR);
+ explicit QToolBar(const QString &title, QWidget *parent = nullptr);
+ explicit QToolBar(QWidget *parent = nullptr);
~QToolBar();
void setMovable(bool movable);
@@ -188,10 +188,10 @@ Q_SIGNALS:
void visibilityChanged(bool visible);
protected:
- void actionEvent(QActionEvent *event) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void actionEvent(QActionEvent *event) override;
+ void changeEvent(QEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+ bool event(QEvent *event) override;
void initStyleOption(QStyleOptionToolBar *option) const;
diff --git a/src/widgets/widgets/qtoolbarextension_p.h b/src/widgets/widgets/qtoolbarextension_p.h
index b6223107c4..a388f1e40f 100644
--- a/src/widgets/widgets/qtoolbarextension_p.h
+++ b/src/widgets/widgets/qtoolbarextension_p.h
@@ -64,8 +64,8 @@ class Q_AUTOTEST_EXPORT QToolBarExtension : public QToolButton
public:
explicit QToolBarExtension(QWidget *parent);
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
+ QSize sizeHint() const override;
public Q_SLOTS:
void setOrientation(Qt::Orientation o);
diff --git a/src/widgets/widgets/qtoolbarlayout_p.h b/src/widgets/widgets/qtoolbarlayout_p.h
index 9a81c4e50e..8c60164439 100644
--- a/src/widgets/widgets/qtoolbarlayout_p.h
+++ b/src/widgets/widgets/qtoolbarlayout_p.h
@@ -68,7 +68,7 @@ class QToolBarItem : public QWidgetItem
{
public:
QToolBarItem(QWidget *widget);
- bool isEmpty() const Q_DECL_OVERRIDE;
+ bool isEmpty() const override;
QAction *action;
bool customWidget;
@@ -82,22 +82,22 @@ public:
QToolBarLayout(QWidget *parent = 0);
~QToolBarLayout();
- void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
- QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
- int count() const Q_DECL_OVERRIDE;
+ void addItem(QLayoutItem *item) override;
+ QLayoutItem *itemAt(int index) const override;
+ QLayoutItem *takeAt(int index) override;
+ int count() const override;
- bool isEmpty() const Q_DECL_OVERRIDE;
- void invalidate() Q_DECL_OVERRIDE;
- Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
+ bool isEmpty() const override;
+ void invalidate() override;
+ Qt::Orientations expandingDirections() const override;
- void setGeometry(const QRect &r) Q_DECL_OVERRIDE;
- QSize minimumSize() const Q_DECL_OVERRIDE;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &r) override;
+ QSize minimumSize() const override;
+ QSize sizeHint() const override;
void insertAction(int index, QAction *action);
int indexOf(QAction *action) const;
- int indexOf(QWidget *widget) const Q_DECL_OVERRIDE { return QLayout::indexOf(widget); }
+ int indexOf(QWidget *widget) const override { return QLayout::indexOf(widget); }
bool layoutActions(const QSize &size);
QSize expandedSize(const QSize &size) const;
diff --git a/src/widgets/widgets/qtoolbarseparator_p.h b/src/widgets/widgets/qtoolbarseparator_p.h
index 8c9cf9f46a..d52b4fa6ae 100644
--- a/src/widgets/widgets/qtoolbarseparator_p.h
+++ b/src/widgets/widgets/qtoolbarseparator_p.h
@@ -71,9 +71,9 @@ public:
Qt::Orientation orientation() const;
- QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
void initStyleOption(QStyleOption *option) const;
public Q_SLOTS:
diff --git a/src/widgets/widgets/qtoolbox.cpp b/src/widgets/widgets/qtoolbox.cpp
index fdcd07eb06..46ade0277c 100644
--- a/src/widgets/widgets/qtoolbox.cpp
+++ b/src/widgets/widgets/qtoolbox.cpp
@@ -69,12 +69,12 @@ public:
inline void setSelected(bool b) { selected = b; update(); }
inline void setIndex(int newIndex) { indexInPage = newIndex; }
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
protected:
void initStyleOption(QStyleOptionToolBox *opt) const;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) override;
private:
bool selected;
diff --git a/src/widgets/widgets/qtoolbox.h b/src/widgets/widgets/qtoolbox.h
index 321507ba07..2796631b94 100644
--- a/src/widgets/widgets/qtoolbox.h
+++ b/src/widgets/widgets/qtoolbox.h
@@ -57,7 +57,7 @@ class Q_WIDGETS_EXPORT QToolBox : public QFrame
Q_PROPERTY(int count READ count)
public:
- explicit QToolBox(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+ explicit QToolBox(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
~QToolBox();
int addItem(QWidget *widget, const QString &text);
@@ -95,11 +95,11 @@ Q_SIGNALS:
void currentChanged(int index);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
virtual void itemInserted(int index);
virtual void itemRemoved(int index);
- void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *e) override;
+ void changeEvent(QEvent *) override;
private:
diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp
index 96b88340cd..c2bf13a3e9 100644
--- a/src/widgets/widgets/qtoolbutton.cpp
+++ b/src/widgets/widgets/qtoolbutton.cpp
@@ -348,7 +348,7 @@ QSize QToolButton::sizeHint() const
if (opt.toolButtonStyle != Qt::ToolButtonIconOnly) {
QSize textSize = fm.size(Qt::TextShowMnemonic, text());
- textSize.setWidth(textSize.width() + fm.width(QLatin1Char(' '))*2);
+ textSize.setWidth(textSize.width() + fm.horizontalAdvance(QLatin1Char(' '))*2);
if (opt.toolButtonStyle == Qt::ToolButtonTextUnderIcon) {
h += 4 + textSize.height();
if (textSize.width() > w)
diff --git a/src/widgets/widgets/qtoolbutton.h b/src/widgets/widgets/qtoolbutton.h
index dd9964cb94..52bd2d5f7a 100644
--- a/src/widgets/widgets/qtoolbutton.h
+++ b/src/widgets/widgets/qtoolbutton.h
@@ -71,11 +71,11 @@ public:
};
Q_ENUM(ToolButtonPopupMode)
- explicit QToolButton(QWidget *parent = Q_NULLPTR);
+ explicit QToolButton(QWidget *parent = nullptr);
~QToolButton();
- QSize sizeHint() const Q_DECL_OVERRIDE;
- QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
Qt::ToolButtonStyle toolButtonStyle() const;
@@ -106,19 +106,19 @@ Q_SIGNALS:
void triggered(QAction *);
protected:
- bool event(QEvent *e) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void actionEvent(QActionEvent *) Q_DECL_OVERRIDE;
-
- void enterEvent(QEvent *) Q_DECL_OVERRIDE;
- void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *) Q_DECL_OVERRIDE;
-
- bool hitButton(const QPoint &pos) const Q_DECL_OVERRIDE;
- void nextCheckState() Q_DECL_OVERRIDE;
+ bool event(QEvent *e) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+ void paintEvent(QPaintEvent *) override;
+ void actionEvent(QActionEvent *) override;
+
+ void enterEvent(QEvent *) override;
+ void leaveEvent(QEvent *) override;
+ void timerEvent(QTimerEvent *) override;
+ void changeEvent(QEvent *) override;
+
+ bool hitButton(const QPoint &pos) const override;
+ void nextCheckState() override;
void initStyleOption(QStyleOptionToolButton *option) const;
private:
diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp
index fe6497a052..623ca5b0a1 100644
--- a/src/widgets/widgets/qwidgetlinecontrol.cpp
+++ b/src/widgets/widgets/qwidgetlinecontrol.cpp
@@ -1179,9 +1179,9 @@ bool QWidgetLineControl::hasAcceptableInput(const QString &str) const
that blanks will be used, false that previous input is used.
Calling this when no inputMask is set is undefined.
*/
-QString QWidgetLineControl::maskString(uint pos, const QString &str, bool clear) const
+QString QWidgetLineControl::maskString(int pos, const QString &str, bool clear) const
{
- if (pos >= (uint)m_maxLength)
+ if (pos >= m_maxLength)
return QString::fromLatin1("");
QString fill;
@@ -1254,13 +1254,13 @@ QString QWidgetLineControl::maskString(uint pos, const QString &str, bool clear)
Returns a "cleared" string with only separators and blank chars.
Calling this when no inputMask is set is undefined.
*/
-QString QWidgetLineControl::clearString(uint pos, uint len) const
+QString QWidgetLineControl::clearString(int pos, int len) const
{
- if (pos >= (uint)m_maxLength)
+ if (pos >= m_maxLength)
return QString();
QString s;
- int end = qMin((uint)m_maxLength, pos + len);
+ int end = qMin(m_maxLength, pos + len);
for (int i = pos; i < end; ++i)
if (m_maskData[i].separator)
s += m_maskData[i].maskChar;
diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h
index 16c9cc71eb..ca70e2c02f 100644
--- a/src/widgets/widgets/qwidgetlinecontrol_p.h
+++ b/src/widgets/widgets/qwidgetlinecontrol_p.h
@@ -500,8 +500,8 @@ private:
void parseInputMask(const QString &maskFields);
bool isValidInput(QChar key, QChar mask) const;
bool hasAcceptableInput(const QString &text) const;
- QString maskString(uint pos, const QString &str, bool clear = false) const;
- QString clearString(uint pos, uint len) const;
+ QString maskString(int pos, const QString &str, bool clear = false) const;
+ QString clearString(int pos, int len) const;
QString stripString(const QString &str) const;
int findInMask(int pos, bool forward, bool findSeparator, QChar searchChar = QChar()) const;
@@ -550,7 +550,7 @@ Q_SIGNALS:
void editFocusChange(bool);
#endif
protected:
- virtual void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ virtual void timerEvent(QTimerEvent *event) override;
private Q_SLOTS:
void _q_deleteSelected();
diff --git a/src/widgets/widgets/qwidgetresizehandler_p.h b/src/widgets/widgets/qwidgetresizehandler_p.h
index 669cb6f256..b87bbd6229 100644
--- a/src/widgets/widgets/qwidgetresizehandler_p.h
+++ b/src/widgets/widgets/qwidgetresizehandler_p.h
@@ -95,7 +95,7 @@ Q_SIGNALS:
void activate();
protected:
- bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *o, QEvent *e) override;
void mouseMoveEvent(QMouseEvent *e);
void keyPressEvent(QKeyEvent *e);
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index aa5a3329e9..d3203e180b 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -93,9 +93,8 @@
#include "private/qapplication_p.h"
#include "private/qshortcutmap_p.h"
#include <qkeysequence.h>
-#define ACCEL_KEY(k) ((qApp->testAttribute(Qt::AA_DontShowIconsInMenus) \
- ? false \
- : qApp->styleHints()->showShortcutsInContextMenus()) \
+#define ACCEL_KEY(k) ((!QCoreApplication::testAttribute(Qt::AA_DontShowShortcutsInContextMenus) \
+ && QGuiApplication::styleHints()->showShortcutsInContextMenus()) \
&& !qApp->d_func()->shortcutMap.hasShortcutForKeySequence(k) ? \
QLatin1Char('\t') + QKeySequence(k).toString(QKeySequence::NativeText) : QString())
@@ -1414,7 +1413,7 @@ QRectF QWidgetTextControlPrivate::rectForPosition(int position) const
if (relativePos < line.textLength() - line.textStart())
w = line.cursorToX(relativePos + 1) - x;
else
- w = QFontMetrics(block.layout()->font()).width(QLatin1Char(' ')); // in sync with QTextLine::draw()
+ w = QFontMetrics(block.layout()->font()).horizontalAdvance(QLatin1Char(' ')); // in sync with QTextLine::draw()
}
r = QRectF(layoutPos.x() + x, layoutPos.y() + line.y(),
cursorWidth + w, line.height());
@@ -1427,10 +1426,6 @@ QRectF QWidgetTextControlPrivate::rectForPosition(int position) const
namespace {
struct QTextFrameComparator {
-#if defined(Q_CC_MSVC) && _MSC_VER < 1600
-//The STL implementation of MSVC 2008 requires the definition
- bool operator()(QTextFrame *frame1, QTextFrame *frame2) { return frame1->firstPosition() < frame2->firstPosition(); }
-#endif
bool operator()(QTextFrame *frame, int position) { return frame->firstPosition() < position; }
bool operator()(int position, QTextFrame *frame) { return position < frame->firstPosition(); }
};
@@ -1887,8 +1882,6 @@ void QWidgetTextControlPrivate::contextMenuEvent(const QPoint &screenPos, const
Q_UNUSED(contextWidget);
#else
Q_Q(QWidgetTextControl);
- if (!hasFocus)
- return;
QMenu *menu = q->createStandardContextMenu(docPos, contextWidget);
if (!menu)
return;
diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h
index 11ff63c5e4..4b2acbd934 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p.h
@@ -258,9 +258,9 @@ public:
bool findNextPrevAnchor(const QTextCursor& from, bool next, QTextCursor& newAnchor);
protected:
- virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ virtual void timerEvent(QTimerEvent *e) override;
- virtual bool event(QEvent *e) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *e) override;
private:
Q_DISABLE_COPY(QWidgetTextControl)
@@ -296,9 +296,9 @@ class QTextEditMimeData : public QMimeData
public:
inline QTextEditMimeData(const QTextDocumentFragment &aFragment) : fragment(aFragment) {}
- virtual QStringList formats() const Q_DECL_OVERRIDE;
+ virtual QStringList formats() const override;
protected:
- virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE;
+ virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const override;
private:
void setup() const;
diff --git a/src/winmain/qtmain_win.cpp b/src/winmain/qtmain_win.cpp
index 5f90055762..3dc1ac0fba 100644
--- a/src/winmain/qtmain_win.cpp
+++ b/src/winmain/qtmain_win.cpp
@@ -99,7 +99,7 @@ extern "C" int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR /*cmdParamarg*/, int
char **argv = new char *[argc + 1];
for (int i = 0; i < argc; ++i)
argv[i] = wideToMulti(CP_ACP, argvW[i]);
- argv[argc] = Q_NULLPTR;
+ argv[argc] = nullptr;
LocalFree(argvW);
const int exitCode = main(argc, argv);
for (int i = 0; i < argc && argv[i]; ++i)
diff --git a/src/winmain/qtmain_winrt.cpp b/src/winmain/qtmain_winrt.cpp
index 1a3ad33322..79ecf30b70 100644
--- a/src/winmain/qtmain_winrt.cpp
+++ b/src/winmain/qtmain_winrt.cpp
@@ -229,12 +229,12 @@ private:
return S_OK;
}
- HRESULT __stdcall OnActivated(IActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnActivated(IActivatedEventArgs *args) override
{
return activatedLaunch(args);
}
- HRESULT __stdcall OnLaunched(ILaunchActivatedEventArgs *launchArgs) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnLaunched(ILaunchActivatedEventArgs *launchArgs) override
{
ComPtr<IPrelaunchActivatedEventArgs> preArgs;
HRESULT hr = launchArgs->QueryInterface(preArgs.GetAddressOf());
@@ -328,41 +328,41 @@ private:
return S_OK;
}
- HRESULT __stdcall OnFileActivated(IFileActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnFileActivated(IFileActivatedEventArgs *args) override
{
return activatedLaunch(args);
}
- HRESULT __stdcall OnSearchActivated(ISearchActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnSearchActivated(ISearchActivatedEventArgs *args) override
{
Q_UNUSED(args);
return S_OK;
}
- HRESULT __stdcall OnShareTargetActivated(IShareTargetActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnShareTargetActivated(IShareTargetActivatedEventArgs *args) override
{
return activatedLaunch(args);
}
- HRESULT __stdcall OnFileOpenPickerActivated(IFileOpenPickerActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnFileOpenPickerActivated(IFileOpenPickerActivatedEventArgs *args) override
{
Q_UNUSED(args);
return S_OK;
}
- HRESULT __stdcall OnFileSavePickerActivated(IFileSavePickerActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnFileSavePickerActivated(IFileSavePickerActivatedEventArgs *args) override
{
Q_UNUSED(args);
return S_OK;
}
- HRESULT __stdcall OnCachedFileUpdaterActivated(ICachedFileUpdaterActivatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnCachedFileUpdaterActivated(ICachedFileUpdaterActivatedEventArgs *args) override
{
Q_UNUSED(args);
return S_OK;
}
- HRESULT __stdcall OnWindowCreated(Xaml::IWindowCreatedEventArgs *args) Q_DECL_OVERRIDE
+ HRESULT __stdcall OnWindowCreated(Xaml::IWindowCreatedEventArgs *args) override
{
Q_UNUSED(args);
return S_OK;
diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp
index 9affd697a0..df2d7c3ce8 100644
--- a/src/xml/dom/qdom.cpp
+++ b/src/xml/dom/qdom.cpp
@@ -291,16 +291,16 @@ public:
void init();
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNodePrivate* insertBefore(QDomNodePrivate* newChild, QDomNodePrivate* refChild) Q_DECL_OVERRIDE;
- QDomNodePrivate* insertAfter(QDomNodePrivate* newChild, QDomNodePrivate* refChild) Q_DECL_OVERRIDE;
- QDomNodePrivate* replaceChild(QDomNodePrivate* newChild, QDomNodePrivate* oldChild) Q_DECL_OVERRIDE;
- QDomNodePrivate* removeChild(QDomNodePrivate* oldChild) Q_DECL_OVERRIDE;
- QDomNodePrivate* appendChild(QDomNodePrivate* newChild) Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNodePrivate* insertBefore(QDomNodePrivate* newChild, QDomNodePrivate* refChild) override;
+ QDomNodePrivate* insertAfter(QDomNodePrivate* newChild, QDomNodePrivate* refChild) override;
+ QDomNodePrivate* replaceChild(QDomNodePrivate* newChild, QDomNodePrivate* oldChild) override;
+ QDomNodePrivate* removeChild(QDomNodePrivate* oldChild) override;
+ QDomNodePrivate* appendChild(QDomNodePrivate* newChild) override;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::DocumentTypeNode; }
+ QDomNode::NodeType nodeType() const override { return QDomNode::DocumentTypeNode; }
- void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ void save(QTextStream& s, int, int) const override;
// Variables
QDomNamedNodeMapPrivate* entities;
@@ -317,8 +317,8 @@ public:
QDomDocumentFragmentPrivate(QDomNodePrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- virtual QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::DocumentFragmentNode; }
+ virtual QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::DocumentFragmentNode; }
};
class QDomCharacterDataPrivate : public QDomNodePrivate
@@ -335,8 +335,8 @@ public:
void replaceData(unsigned long offset, unsigned long count, const QString& arg);
// Reimplemented from QDomNodePrivate
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::CharacterDataNode; }
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const override { return QDomNode::CharacterDataNode; }
+ QDomNodePrivate* cloneNode(bool deep = true) override;
};
class QDomTextPrivate : public QDomCharacterDataPrivate
@@ -348,9 +348,9 @@ public:
QDomTextPrivate* splitText(int offset);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::TextNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::TextNode; }
+ virtual void save(QTextStream& s, int, int) const override;
};
class QDomAttrPrivate : public QDomNodePrivate
@@ -363,10 +363,10 @@ public:
bool specified() const;
// Reimplemented from QDomNodePrivate
- void setNodeValue(const QString& v) Q_DECL_OVERRIDE;
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::AttributeNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ void setNodeValue(const QString& v) override;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::AttributeNode; }
+ virtual void save(QTextStream& s, int, int) const override;
// Variables
bool m_specified;
@@ -398,9 +398,9 @@ public:
// Reimplemented from QDomNodePrivate
QDomNamedNodeMapPrivate* attributes() { return m_attr; }
bool hasAttributes() { return (m_attr->length() > 0); }
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::ElementNode; }
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const override { return QDomNode::ElementNode; }
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ virtual void save(QTextStream& s, int, int) const override;
// Variables
QDomNamedNodeMapPrivate* m_attr;
@@ -414,9 +414,9 @@ public:
QDomCommentPrivate(QDomCommentPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::CommentNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::CommentNode; }
+ virtual void save(QTextStream& s, int, int) const override;
};
class QDomCDATASectionPrivate : public QDomTextPrivate
@@ -426,9 +426,9 @@ public:
QDomCDATASectionPrivate(QDomCDATASectionPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::CDATASectionNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::CDATASectionNode; }
+ virtual void save(QTextStream& s, int, int) const override;
};
class QDomNotationPrivate : public QDomNodePrivate
@@ -439,9 +439,9 @@ public:
QDomNotationPrivate(QDomNotationPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::NotationNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::NotationNode; }
+ virtual void save(QTextStream& s, int, int) const override;
// Variables
QString m_sys;
@@ -456,9 +456,9 @@ public:
QDomEntityPrivate(QDomEntityPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::EntityNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::EntityNode; }
+ virtual void save(QTextStream& s, int, int) const override;
// Variables
QString m_sys;
@@ -473,9 +473,9 @@ public:
QDomEntityReferencePrivate(QDomNodePrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::EntityReferenceNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::EntityReferenceNode; }
+ virtual void save(QTextStream& s, int, int) const override;
};
class QDomProcessingInstructionPrivate : public QDomNodePrivate
@@ -486,9 +486,9 @@ public:
QDomProcessingInstructionPrivate(QDomProcessingInstructionPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::ProcessingInstructionNode; }
- virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::ProcessingInstructionNode; }
+ virtual void save(QTextStream& s, int, int) const override;
};
class QDomDocumentPrivate : public QDomNodePrivate
@@ -523,9 +523,9 @@ public:
QDomNodePrivate* importNode(QDomNodePrivate* importedNode, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::DocumentNode; }
- void clear() Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) override;
+ QDomNode::NodeType nodeType() const override { return QDomNode::DocumentNode; }
+ void clear() override;
// Variables
QExplicitlySharedDataPointer<QDomImplementationPrivate> impl;
@@ -576,32 +576,32 @@ public:
~QDomHandler();
// content handler
- bool endDocument() Q_DECL_OVERRIDE;
- bool startElement(const QString& nsURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) Q_DECL_OVERRIDE;
- bool endElement(const QString& nsURI, const QString& localName, const QString& qName) Q_DECL_OVERRIDE;
- bool characters(const QString& ch) Q_DECL_OVERRIDE;
- bool processingInstruction(const QString& target, const QString& data) Q_DECL_OVERRIDE;
- bool skippedEntity(const QString& name) Q_DECL_OVERRIDE;
+ bool endDocument() override;
+ bool startElement(const QString& nsURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) override;
+ bool endElement(const QString& nsURI, const QString& localName, const QString& qName) override;
+ bool characters(const QString& ch) override;
+ bool processingInstruction(const QString& target, const QString& data) override;
+ bool skippedEntity(const QString& name) override;
// error handler
- bool fatalError(const QXmlParseException& exception) Q_DECL_OVERRIDE;
+ bool fatalError(const QXmlParseException& exception) override;
// lexical handler
- bool startCDATA() Q_DECL_OVERRIDE;
- bool endCDATA() Q_DECL_OVERRIDE;
- bool startEntity(const QString &) Q_DECL_OVERRIDE;
- bool endEntity(const QString &) Q_DECL_OVERRIDE;
- bool startDTD(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
- bool comment(const QString& ch) Q_DECL_OVERRIDE;
+ bool startCDATA() override;
+ bool endCDATA() override;
+ bool startEntity(const QString &) override;
+ bool endEntity(const QString &) override;
+ bool startDTD(const QString& name, const QString& publicId, const QString& systemId) override;
+ bool comment(const QString& ch) override;
// decl handler
- bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId) Q_DECL_OVERRIDE ;
+ bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId) override ;
// DTD handler
- bool notationDecl(const QString & name, const QString & publicId, const QString & systemId) Q_DECL_OVERRIDE;
- bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString &notationName) Q_DECL_OVERRIDE ;
+ bool notationDecl(const QString & name, const QString & publicId, const QString & systemId) override;
+ bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString &notationName) override ;
- void setDocumentLocator(QXmlLocator *locator) Q_DECL_OVERRIDE;
+ void setDocumentLocator(QXmlLocator *locator) override;
QString errorMsg;
int errorLine;
diff --git a/src/xml/dom/qdom.h b/src/xml/dom/qdom.h
index 464c8ebfc2..0a7db7dcd7 100644
--- a/src/xml/dom/qdom.h
+++ b/src/xml/dom/qdom.h
@@ -335,14 +335,14 @@ public:
inline QDomNode::NodeType nodeType() const { return DocumentNode; }
// Qt extensions
- bool setContent(const QByteArray& text, bool namespaceProcessing, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(const QString& text, bool namespaceProcessing, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(const QByteArray& text, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(const QString& text, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(QIODevice* dev, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
- bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg=Q_NULLPTR, int *errorLine=Q_NULLPTR, int *errorColumn=Q_NULLPTR );
+ bool setContent(const QByteArray& text, bool namespaceProcessing, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(const QString& text, bool namespaceProcessing, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(QIODevice* dev, bool namespaceProcessing, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(QXmlInputSource *source, bool namespaceProcessing, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(const QByteArray& text, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(const QString& text, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(QIODevice* dev, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
+ bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg=nullptr, int *errorLine=nullptr, int *errorColumn=nullptr );
// Qt extensions
QString toString(int = 1) const;
diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
index 717a8c327d..168e8c3cb4 100644
--- a/src/xml/sax/qxml.cpp
+++ b/src/xml/sax/qxml.cpp
@@ -448,11 +448,11 @@ public:
{
}
- int columnNumber() const Q_DECL_OVERRIDE
+ int columnNumber() const override
{
return (reader->d_ptr->columnNr == -1 ? -1 : reader->d_ptr->columnNr + 1);
}
- int lineNumber() const Q_DECL_OVERRIDE
+ int lineNumber() const override
{
return (reader->d_ptr->lineNr == -1 ? -1 : reader->d_ptr->lineNr + 1);
}
@@ -776,6 +776,11 @@ QXmlAttributes::~QXmlAttributes()
{
}
+/*!
+ \fn void QXmlAttributes::swap(QXmlAttributes &other)
+
+ Swaps \c this with \a other.
+ */
/*!
Looks up the index of an attribute by the qualified name \a qName.
diff --git a/src/xml/sax/qxml.h b/src/xml/sax/qxml.h
index 77a5a78650..94dc8dfb8e 100644
--- a/src/xml/sax/qxml.h
+++ b/src/xml/sax/qxml.h
@@ -122,10 +122,8 @@ public:
QXmlAttributes &operator=(const QXmlAttributes &) = default;
QXmlAttributes &operator=(QXmlAttributes &&) Q_DECL_NOTHROW = default;
#endif // default members
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- virtual // ### Qt 6: this value class don't need no virtual dtor
-#endif
- ~QXmlAttributes();
+
+ QT6_NOT_VIRTUAL ~QXmlAttributes();
void swap(QXmlAttributes &other) Q_DECL_NOTHROW
{
@@ -225,10 +223,10 @@ class Q_XML_EXPORT QXmlReader
{
public:
virtual ~QXmlReader() {}
- virtual bool feature(const QString& name, bool *ok = Q_NULLPTR) const = 0;
+ virtual bool feature(const QString& name, bool *ok = nullptr) const = 0;
virtual void setFeature(const QString& name, bool value) = 0;
virtual bool hasFeature(const QString& name) const = 0;
- virtual void* property(const QString& name, bool *ok = Q_NULLPTR) const = 0;
+ virtual void* property(const QString& name, bool *ok = nullptr) const = 0;
virtual void setProperty(const QString& name, void* value) = 0;
virtual bool hasProperty(const QString& name) const = 0;
virtual void setEntityResolver(QXmlEntityResolver* handler) = 0;
@@ -253,29 +251,29 @@ public:
QXmlSimpleReader();
virtual ~QXmlSimpleReader();
- bool feature(const QString& name, bool *ok = Q_NULLPTR) const Q_DECL_OVERRIDE;
- void setFeature(const QString& name, bool value) Q_DECL_OVERRIDE;
- bool hasFeature(const QString& name) const Q_DECL_OVERRIDE;
-
- void* property(const QString& name, bool *ok = Q_NULLPTR) const Q_DECL_OVERRIDE;
- void setProperty(const QString& name, void* value) Q_DECL_OVERRIDE;
- bool hasProperty(const QString& name) const Q_DECL_OVERRIDE;
-
- void setEntityResolver(QXmlEntityResolver* handler) Q_DECL_OVERRIDE;
- QXmlEntityResolver* entityResolver() const Q_DECL_OVERRIDE;
- void setDTDHandler(QXmlDTDHandler* handler) Q_DECL_OVERRIDE;
- QXmlDTDHandler* DTDHandler() const Q_DECL_OVERRIDE;
- void setContentHandler(QXmlContentHandler* handler) Q_DECL_OVERRIDE;
- QXmlContentHandler* contentHandler() const Q_DECL_OVERRIDE;
- void setErrorHandler(QXmlErrorHandler* handler) Q_DECL_OVERRIDE;
- QXmlErrorHandler* errorHandler() const Q_DECL_OVERRIDE;
- void setLexicalHandler(QXmlLexicalHandler* handler) Q_DECL_OVERRIDE;
- QXmlLexicalHandler* lexicalHandler() const Q_DECL_OVERRIDE;
- void setDeclHandler(QXmlDeclHandler* handler) Q_DECL_OVERRIDE;
- QXmlDeclHandler* declHandler() const Q_DECL_OVERRIDE;
-
- bool parse(const QXmlInputSource& input) Q_DECL_OVERRIDE;
- bool parse(const QXmlInputSource* input) Q_DECL_OVERRIDE;
+ bool feature(const QString& name, bool *ok = nullptr) const override;
+ void setFeature(const QString& name, bool value) override;
+ bool hasFeature(const QString& name) const override;
+
+ void* property(const QString& name, bool *ok = nullptr) const override;
+ void setProperty(const QString& name, void* value) override;
+ bool hasProperty(const QString& name) const override;
+
+ void setEntityResolver(QXmlEntityResolver* handler) override;
+ QXmlEntityResolver* entityResolver() const override;
+ void setDTDHandler(QXmlDTDHandler* handler) override;
+ QXmlDTDHandler* DTDHandler() const override;
+ void setContentHandler(QXmlContentHandler* handler) override;
+ QXmlContentHandler* contentHandler() const override;
+ void setErrorHandler(QXmlErrorHandler* handler) override;
+ QXmlErrorHandler* errorHandler() const override;
+ void setLexicalHandler(QXmlLexicalHandler* handler) override;
+ QXmlLexicalHandler* lexicalHandler() const override;
+ void setDeclHandler(QXmlDeclHandler* handler) override;
+ QXmlDeclHandler* declHandler() const override;
+
+ bool parse(const QXmlInputSource& input) override;
+ bool parse(const QXmlInputSource* input) override;
virtual bool parse(const QXmlInputSource* input, bool incremental);
virtual bool parseContinue();
@@ -385,40 +383,40 @@ public:
QXmlDefaultHandler();
virtual ~QXmlDefaultHandler();
- void setDocumentLocator(QXmlLocator* locator) Q_DECL_OVERRIDE;
- bool startDocument() Q_DECL_OVERRIDE;
- bool endDocument() Q_DECL_OVERRIDE;
- bool startPrefixMapping(const QString& prefix, const QString& uri) Q_DECL_OVERRIDE;
- bool endPrefixMapping(const QString& prefix) Q_DECL_OVERRIDE;
- bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) Q_DECL_OVERRIDE;
- bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) Q_DECL_OVERRIDE;
- bool characters(const QString& ch) Q_DECL_OVERRIDE;
- bool ignorableWhitespace(const QString& ch) Q_DECL_OVERRIDE;
- bool processingInstruction(const QString& target, const QString& data) Q_DECL_OVERRIDE;
- bool skippedEntity(const QString& name) Q_DECL_OVERRIDE;
-
- bool warning(const QXmlParseException& exception) Q_DECL_OVERRIDE;
- bool error(const QXmlParseException& exception) Q_DECL_OVERRIDE;
- bool fatalError(const QXmlParseException& exception) Q_DECL_OVERRIDE;
-
- bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
- bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) Q_DECL_OVERRIDE;
-
- bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) Q_DECL_OVERRIDE;
-
- bool startDTD(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
- bool endDTD() Q_DECL_OVERRIDE;
- bool startEntity(const QString& name) Q_DECL_OVERRIDE;
- bool endEntity(const QString& name) Q_DECL_OVERRIDE;
- bool startCDATA() Q_DECL_OVERRIDE;
- bool endCDATA() Q_DECL_OVERRIDE;
- bool comment(const QString& ch) Q_DECL_OVERRIDE;
-
- bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) Q_DECL_OVERRIDE;
- bool internalEntityDecl(const QString& name, const QString& value) Q_DECL_OVERRIDE;
- bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
-
- QString errorString() const Q_DECL_OVERRIDE;
+ void setDocumentLocator(QXmlLocator* locator) override;
+ bool startDocument() override;
+ bool endDocument() override;
+ bool startPrefixMapping(const QString& prefix, const QString& uri) override;
+ bool endPrefixMapping(const QString& prefix) override;
+ bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) override;
+ bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) override;
+ bool characters(const QString& ch) override;
+ bool ignorableWhitespace(const QString& ch) override;
+ bool processingInstruction(const QString& target, const QString& data) override;
+ bool skippedEntity(const QString& name) override;
+
+ bool warning(const QXmlParseException& exception) override;
+ bool error(const QXmlParseException& exception) override;
+ bool fatalError(const QXmlParseException& exception) override;
+
+ bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) override;
+ bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) override;
+
+ bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) override;
+
+ bool startDTD(const QString& name, const QString& publicId, const QString& systemId) override;
+ bool endDTD() override;
+ bool startEntity(const QString& name) override;
+ bool endEntity(const QString& name) override;
+ bool startCDATA() override;
+ bool endCDATA() override;
+ bool comment(const QString& ch) override;
+
+ bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) override;
+ bool internalEntityDecl(const QString& name, const QString& value) override;
+ bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) override;
+
+ QString errorString() const override;
private:
QXmlDefaultHandlerPrivate *d;
diff --git a/sync.profile b/sync.profile
index a696be5e54..6a50e31102 100644
--- a/sync.profile
+++ b/sync.profile
@@ -11,6 +11,7 @@
"QtDBus" => "$basedir/src/dbus",
"QtConcurrent" => "$basedir/src/concurrent",
"QtAccessibilitySupport" => "$basedir/src/platformsupport/accessibility",
+ "QtWindowsUIAutomationSupport" => "$basedir/src/platformsupport/windowsuiautomation",
"QtLinuxAccessibilitySupport" => "$basedir/src/platformsupport/linuxaccessibility",
"QtClipboardSupport" => "$basedir/src/platformsupport/clipboard",
"QtDeviceDiscoverySupport" => "$basedir/src/platformsupport/devicediscovery",
diff --git a/tests/auto/concurrent/qtconcurrentmap/BLACKLIST b/tests/auto/concurrent/qtconcurrentmap/BLACKLIST
index 7cd8961f6f..0320f61fab 100644
--- a/tests/auto/concurrent/qtconcurrentmap/BLACKLIST
+++ b/tests/auto/concurrent/qtconcurrentmap/BLACKLIST
@@ -1,2 +1,3 @@
[qFutureAssignmentLeak]
ci opensuse
+ci ubuntu-16.04
diff --git a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp
index 4e3668d72e..1596a9fafd 100644
--- a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp
+++ b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp
@@ -572,7 +572,7 @@ class SlowTask : public QRunnable
{
public:
static QAtomicInt cancel;
- void run() Q_DECL_OVERRIDE {
+ void run() override {
int iter = 60;
while (--iter && !cancel.load())
QThread::currentThread()->msleep(25);
diff --git a/tests/auto/corelib/animation/qpauseanimation/BLACKLIST b/tests/auto/corelib/animation/qpauseanimation/BLACKLIST
index a49ed2a617..e223ec82e2 100644
--- a/tests/auto/corelib/animation/qpauseanimation/BLACKLIST
+++ b/tests/auto/corelib/animation/qpauseanimation/BLACKLIST
@@ -1,5 +1,3 @@
-[multiplePauseAnimations]
-osx-10.9
[pauseAndPropertyAnimations]
*
[multipleSequentialGroups]
diff --git a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp
index c3b53a2fc0..f8f9387abb 100644
--- a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp
+++ b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp
@@ -2406,16 +2406,16 @@ void tst_QTextCodec::shiftJis()
struct UserCodec : public QTextCodec
{
// implement pure virtuals
- QByteArray name() const Q_DECL_OVERRIDE
+ QByteArray name() const override
{ return "UserCodec"; }
- QList<QByteArray> aliases() const Q_DECL_OVERRIDE
+ QList<QByteArray> aliases() const override
{ return QList<QByteArray>() << "usercodec" << "user-codec"; }
- int mibEnum() const Q_DECL_OVERRIDE
+ int mibEnum() const override
{ return 5000; }
- virtual QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE
+ virtual QString convertToUnicode(const char *, int, ConverterState *) const override
{ return QString(); }
- virtual QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE
+ virtual QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override
{ return QByteArray(); }
};
diff --git a/tests/auto/corelib/corelib.pro b/tests/auto/corelib/corelib.pro
index 169579bd6b..44e1c519b0 100644
--- a/tests/auto/corelib/corelib.pro
+++ b/tests/auto/corelib/corelib.pro
@@ -9,10 +9,9 @@ SUBDIRS = \
global \
io \
itemmodels \
- json \
mimetypes \
plugin \
+ serialization \
statemachine \
thread \
- tools \
- xml
+ tools
diff --git a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
index 6b98e3a823..241dccb90e 100644
--- a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
+++ b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
@@ -46,6 +46,8 @@ private slots:
void promotionTests();
void arithOps_data();
void arithOps();
+ void floatToFloat16();
+ void floatFromFloat16();
};
void tst_qfloat16::fuzzyCompare_data()
@@ -307,5 +309,41 @@ void tst_qfloat16::arithOps()
QVERIFY(qFuzzyCompare(r4,1.f/val2));
}
+void tst_qfloat16::floatToFloat16()
+{
+ float in[63];
+ qfloat16 out[63];
+ qfloat16 expected[63];
+
+ for (int i = 0; i < 63; ++i)
+ in[i] = i * (1/13.f);
+
+ for (int i = 0; i < 63; ++i)
+ expected[i] = qfloat16(in[i]);
+
+ qFloatToFloat16(out, in, 63);
+
+ for (int i = 0; i < 63; ++i)
+ QVERIFY(qFuzzyCompare(out[i], expected[i]));
+}
+
+void tst_qfloat16::floatFromFloat16()
+{
+ qfloat16 in[35];
+ float out[35];
+ float expected[35];
+
+ for (int i = 0; i < 35; ++i)
+ in[i] = qfloat16(i * (17.f / 3));
+
+ for (int i = 0; i < 35; ++i)
+ expected[i] = float(in[i]);
+
+ qFloatFromFloat16(out, in, 35);
+
+ for (int i = 0; i < 35; ++i)
+ QCOMPARE(out[i], expected[i]);
+}
+
QTEST_APPLESS_MAIN(tst_qfloat16)
#include "tst_qfloat16.moc"
diff --git a/tests/auto/corelib/global/qglobal/qglobal.c b/tests/auto/corelib/global/qglobal/qglobal.c
new file mode 100644
index 0000000000..af42efa7f6
--- /dev/null
+++ b/tests/auto/corelib/global/qglobal/qglobal.c
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Intel Corporation.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/qglobal.h>
+
+#if QT_HAS_INCLUDE(<stdbool.h>) || __STDC_VERSION__ >= 199901L
+# include <stdbool.h>
+#else
+# undef true
+# define true 1
+# undef false
+# define false 0
+#endif
+
+#ifdef Q_COMPILER_THREAD_LOCAL
+# include <threads.h>
+#endif
+
+/*
+ * Certain features of qglobal.h must work in C mode too. We test that
+ * everything works.
+ */
+
+/* Types and Q_UNUSED */
+void tst_GlobalTypes()
+{
+ qint8 s8;
+ qint16 s16;
+ qint32 s32;
+ qint64 s64;
+ qlonglong sll;
+ Q_UNUSED(s8); Q_UNUSED(s16); Q_UNUSED(s32); Q_UNUSED(s64); Q_UNUSED(sll);
+
+ quint8 u8;
+ quint16 u16;
+ quint32 u32;
+ quint64 u64;
+ qulonglong ull;
+ Q_UNUSED(u8); Q_UNUSED(u16); Q_UNUSED(u32); Q_UNUSED(u64); Q_UNUSED(ull);
+
+ uchar uc;
+ ushort us;
+ uint ui;
+ ulong ul;
+ Q_UNUSED(uc); Q_UNUSED(us); Q_UNUSED(ui); Q_UNUSED(ul);
+
+ qreal qr;
+ Q_UNUSED(qr);
+
+ qsizetype qs;
+ qptrdiff qp;
+ qintptr qip;
+ quintptr qup;
+ Q_UNUSED(qs); Q_UNUSED(qp); Q_UNUSED(qip); Q_UNUSED(qup);
+}
+
+/* Qt version */
+int tst_QtVersion()
+{
+ return QT_VERSION;
+}
+
+const char *tst_qVersion() Q_DECL_NOTHROW
+{
+#if !defined(QT_NAMESPACE)
+ return qVersion();
+#else
+ return NULL;
+#endif
+}
+
+/* Static assertion */
+Q_STATIC_ASSERT(true);
+Q_STATIC_ASSERT(1);
+Q_STATIC_ASSERT_X(true, "Message");
+Q_STATIC_ASSERT_X(1, "Message");
+
+Q_STATIC_ASSERT(!false);
+Q_STATIC_ASSERT(!0);
+
+Q_STATIC_ASSERT(!!true);
+Q_STATIC_ASSERT(!!1);
+
+#ifdef Q_COMPILER_THREAD_LOCAL
+static thread_local int gt_var;
+void thread_local_test()
+{
+ thread_local int t_var;
+ t_var = gt_var;
+}
+#endif
+
diff --git a/tests/auto/corelib/global/qglobal/qglobal.pro b/tests/auto/corelib/global/qglobal/qglobal.pro
index b8ed7761f5..a40cb9a288 100644
--- a/tests/auto/corelib/global/qglobal/qglobal.pro
+++ b/tests/auto/corelib/global/qglobal/qglobal.pro
@@ -1,4 +1,4 @@
CONFIG += testcase
TARGET = tst_qglobal
QT = core testlib
-SOURCES = tst_qglobal.cpp
+SOURCES = tst_qglobal.cpp qglobal.c
diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
index 083526fdc4..78b954f373 100644
--- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
+++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
@@ -39,6 +39,7 @@ class tst_QGlobal: public QObject
Q_OBJECT
private slots:
+ void cMode();
void qIsNull();
void for_each();
void qassert();
@@ -56,6 +57,22 @@ private slots:
void testqOverload();
};
+extern "C" { // functions in qglobal.c
+void tst_GlobalTypes();
+int tst_QtVersion();
+const char *tst_qVersion();
+}
+
+void tst_QGlobal::cMode()
+{
+ tst_GlobalTypes();
+ QCOMPARE(tst_QtVersion(), QT_VERSION);
+
+#ifndef QT_NAMESPACE
+ QCOMPARE(tst_qVersion(), qVersion());
+#endif
+}
+
void tst_QGlobal::qIsNull()
{
double d = 0.0;
diff --git a/tests/auto/corelib/global/qlogging/qlogging.pro b/tests/auto/corelib/global/qlogging/qlogging.pro
index f1ca6570a0..bbe75297d5 100644
--- a/tests/auto/corelib/global/qlogging/qlogging.pro
+++ b/tests/auto/corelib/global/qlogging/qlogging.pro
@@ -1,6 +1,8 @@
TEMPLATE = subdirs
-CONFIG += ordered
-!winrt: SUBDIRS += app
+!winrt {
+ test.depends = app
+ SUBDIRS += app
+}
SUBDIRS += test
diff --git a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp
index 8232ca8fba..03300c6dbe 100644
--- a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp
+++ b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp
@@ -223,11 +223,20 @@ void tst_QNumeric::floatDistance_double()
void tst_QNumeric::addOverflow_data()
{
QTest::addColumn<int>("size");
+
+ // for unsigned, all sizes are supported
QTest::newRow("quint8") << 8;
QTest::newRow("quint16") << 16;
QTest::newRow("quint32") << 32;
QTest::newRow("quint64") << 64;
QTest::newRow("ulong") << 48; // it's either 32- or 64-bit, so on average it's 48 :-)
+
+ // for signed, we can't guarantee 64-bit
+ QTest::newRow("qint8") << -8;
+ QTest::newRow("qint16") << -16;
+ QTest::newRow("qint32") << -32;
+ if (sizeof(void *) == sizeof(qint64))
+ QTest::newRow("qint64") << -64;
}
// Note: in release mode, all the tests may be statically determined and only the calls
@@ -238,6 +247,7 @@ template <typename Int> static void addOverflow_template()
QSKIP("Test disabled, this test generates an Internal Compiler Error compiling in release mode");
#else
const Int max = std::numeric_limits<Int>::max();
+ const Int min = std::numeric_limits<Int>::min();
Int r;
// basic values
@@ -248,15 +258,50 @@ template <typename Int> static void addOverflow_template()
QCOMPARE(add_overflow(Int(0), Int(1), &r), false);
QCOMPARE(r, Int(1));
+ QCOMPARE(sub_overflow(Int(0), Int(0), &r), false);
+ QCOMPARE(r, Int(0));
+ QCOMPARE(sub_overflow(Int(1), Int(0), &r), false);
+ QCOMPARE(r, Int(1));
+ QCOMPARE(sub_overflow(Int(1), Int(1), &r), false);
+ QCOMPARE(r, Int(0));
+ QCOMPARE(sub_overflow(Int(0), Int(1), &r), !min);
+ if (min)
+ QCOMPARE(r, Int(-1));
+
// half-way through max
QCOMPARE(add_overflow(Int(max/2), Int(max/2), &r), false);
QCOMPARE(r, Int(max / 2 * 2));
+ QCOMPARE(sub_overflow(Int(max/2), Int(max/2), &r), false);
+ QCOMPARE(r, Int(0));
QCOMPARE(add_overflow(Int(max/2 - 1), Int(max/2 + 1), &r), false);
QCOMPARE(r, Int(max / 2 * 2));
+ QCOMPARE(sub_overflow(Int(max/2 - 1), Int(max/2 + 1), &r), !min);
+ if (min)
+ QCOMPARE(r, Int(-2));
QCOMPARE(add_overflow(Int(max/2 + 1), Int(max/2), &r), false);
QCOMPARE(r, max);
+ QCOMPARE(sub_overflow(Int(max/2 + 1), Int(max/2), &r), false);
+ QCOMPARE(r, Int(1));
QCOMPARE(add_overflow(Int(max/2), Int(max/2 + 1), &r), false);
QCOMPARE(r, max);
+ QCOMPARE(sub_overflow(Int(max/2), Int(max/2 + 1), &r), !min);
+ if (min)
+ QCOMPARE(r, Int(-1));
+
+ QCOMPARE(add_overflow(Int(min/2), Int(min/2), &r), false);
+ QCOMPARE(r, Int(min / 2 * 2));
+ QCOMPARE(sub_overflow(Int(min/2), Int(min/2), &r), false);
+ QCOMPARE(r, Int(0));
+ QCOMPARE(add_overflow(Int(min/2 - 1), Int(min/2 + 1), &r), !min);
+ if (min)
+ QCOMPARE(r, Int(min / 2 * 2));
+ QCOMPARE(sub_overflow(Int(min/2 - 1), Int(min/2 + 1), &r), false);
+ QCOMPARE(r, Int(-2));
+ QCOMPARE(sub_overflow(Int(min/2 + 1), Int(min/2), &r), false);
+ QCOMPARE(r, Int(1));
+ QCOMPARE(sub_overflow(Int(min/2), Int(min/2 + 1), &r), !min);
+ if (min)
+ QCOMPARE(r, Int(-1));
// more than half
QCOMPARE(add_overflow(Int(max/4 * 3), Int(max/4), &r), false);
@@ -265,19 +310,55 @@ template <typename Int> static void addOverflow_template()
// max
QCOMPARE(add_overflow(max, Int(0), &r), false);
QCOMPARE(r, max);
+ QCOMPARE(sub_overflow(max, Int(0), &r), false);
+ QCOMPARE(r, max);
QCOMPARE(add_overflow(Int(0), max, &r), false);
QCOMPARE(r, max);
+ QCOMPARE(sub_overflow(Int(0), max, &r), !min);
+ if (min)
+ QCOMPARE(r, Int(-max));
+
+ QCOMPARE(add_overflow(min, Int(0), &r), false);
+ QCOMPARE(r, min);
+ QCOMPARE(sub_overflow(min, Int(0), &r), false);
+ QCOMPARE(r, min);
+ QCOMPARE(add_overflow(Int(0), min, &r), false);
+ QCOMPARE(r, min);
+ QCOMPARE(sub_overflow(Int(0), Int(min+1), &r), !min);
+ if (min)
+ QCOMPARE(r, Int(-(min+1)));
// 64-bit issues
if (max > std::numeric_limits<uint>::max()) {
QCOMPARE(add_overflow(Int(std::numeric_limits<uint>::max()), Int(std::numeric_limits<uint>::max()), &r), false);
QCOMPARE(r, Int(2 * Int(std::numeric_limits<uint>::max())));
+ QCOMPARE(sub_overflow(Int(std::numeric_limits<uint>::max()), Int(std::numeric_limits<uint>::max()), &r), false);
+ QCOMPARE(r, Int(0));
+ }
+ if (min && min < -Int(std::numeric_limits<uint>::max())) {
+ QCOMPARE(add_overflow(Int(-Int(std::numeric_limits<uint>::max())), Int(-Int(std::numeric_limits<uint>::max())), &r), false);
+ QCOMPARE(r, Int(-2 * Int(std::numeric_limits<uint>::max())));
+ QCOMPARE(sub_overflow(Int(-Int(std::numeric_limits<uint>::max())), Int(-Int(std::numeric_limits<uint>::max())), &r), false);
+ QCOMPARE(r, Int(0));
}
- // overflows
+ // overflows past max
QCOMPARE(add_overflow(max, Int(1), &r), true);
QCOMPARE(add_overflow(Int(1), max, &r), true);
QCOMPARE(add_overflow(Int(max/2 + 1), Int(max/2 + 1), &r), true);
+ if (!min) {
+ QCOMPARE(sub_overflow(Int(-max), Int(-2), &r), true);
+ QCOMPARE(sub_overflow(Int(max/2 - 1), Int(max/2 + 1), &r), true);
+ }
+
+ // overflows past min (in case of min == 0, repeats some tests above)
+ if (min) {
+ QCOMPARE(sub_overflow(min, Int(1), &r), true);
+ QCOMPARE(sub_overflow(Int(1), min, &r), true);
+ QCOMPARE(sub_overflow(Int(min/2 - 1), Int(-Int(min/2)), &r), true);
+ QCOMPARE(add_overflow(min, Int(-1), &r), true);
+ QCOMPARE(add_overflow(Int(-1), min, &r), true);
+ }
#endif
}
@@ -294,6 +375,15 @@ void tst_QNumeric::addOverflow()
addOverflow_template<ulong>(); // not really 48-bit
if (size == 64)
addOverflow_template<quint64>();
+
+ if (size == -8)
+ addOverflow_template<qint8>();
+ if (size == -16)
+ addOverflow_template<qint16>();
+ if (size == -32)
+ addOverflow_template<qint32>();
+ if (size == -64)
+ addOverflow_template<qint64>();
}
void tst_QNumeric::mulOverflow_data()
@@ -309,7 +399,13 @@ template <typename Int> static void mulOverflow_template()
QSKIP("Test disabled, this test generates an Internal Compiler Error compiling");
#else
const Int max = std::numeric_limits<Int>::max();
- const Int middle = Int(max >> (sizeof(Int) * CHAR_BIT / 2));
+ const Int min = std::numeric_limits<Int>::min();
+
+ // for unsigned (even number of significant bits): mid2 = mid1 - 1
+ // for signed (odd number of significant bits): mid2 = mid1 / 2 - 1
+ const Int mid1 = Int(Int(1) << sizeof(Int) * CHAR_BIT / 2);
+ const Int mid2 = (std::numeric_limits<Int>::digits % 2 ? mid1 / 2 : mid1) - 1;
+
Int r;
// basic multiplications
@@ -323,6 +419,10 @@ template <typename Int> static void mulOverflow_template()
QCOMPARE(r, Int(0));
QCOMPARE(mul_overflow(Int(0), max, &r), false);
QCOMPARE(r, Int(0));
+ QCOMPARE(mul_overflow(min, Int(0), &r), false);
+ QCOMPARE(r, Int(0));
+ QCOMPARE(mul_overflow(Int(0), min, &r), false);
+ QCOMPARE(r, Int(0));
QCOMPARE(mul_overflow(Int(1), Int(1), &r), false);
QCOMPARE(r, Int(1));
@@ -330,23 +430,45 @@ template <typename Int> static void mulOverflow_template()
QCOMPARE(r, max);
QCOMPARE(mul_overflow(max, Int(1), &r), false);
QCOMPARE(r, max);
+ QCOMPARE(mul_overflow(Int(1), min, &r), false);
+ QCOMPARE(r, min);
+ QCOMPARE(mul_overflow(min, Int(1), &r), false);
+ QCOMPARE(r, min);
// almost max
- QCOMPARE(mul_overflow(middle, middle, &r), false);
- QCOMPARE(r, Int(max - 2 * middle));
- QCOMPARE(mul_overflow(Int(middle + 1), middle, &r), false);
- QCOMPARE(r, Int(middle << (sizeof(Int) * CHAR_BIT / 2)));
- QCOMPARE(mul_overflow(middle, Int(middle + 1), &r), false);
- QCOMPARE(r, Int(middle << (sizeof(Int) * CHAR_BIT / 2)));
+ QCOMPARE(mul_overflow(mid1, mid2, &r), false);
+ QCOMPARE(r, Int(max - mid1 + 1));
QCOMPARE(mul_overflow(Int(max / 2), Int(2), &r), false);
QCOMPARE(r, Int(max & ~Int(1)));
QCOMPARE(mul_overflow(Int(max / 4), Int(4), &r), false);
QCOMPARE(r, Int(max & ~Int(3)));
+ if (min) {
+ QCOMPARE(mul_overflow(Int(-mid1), mid2, &r), false);
+ QCOMPARE(r, Int(-max + mid1 - 1));
+ QCOMPARE(mul_overflow(Int(-max / 2), Int(2), &r), false);
+ QCOMPARE(r, Int(-max + 1));
+ QCOMPARE(mul_overflow(Int(-max / 4), Int(4), &r), false);
+ QCOMPARE(r, Int(-max + 3));
+
+ QCOMPARE(mul_overflow(Int(-mid1), Int(mid2 + 1), &r), false);
+ QCOMPARE(r, min);
+ QCOMPARE(mul_overflow(mid1, Int(-mid2 - 1), &r), false);
+ QCOMPARE(r, min);
+ }
// overflows
QCOMPARE(mul_overflow(max, Int(2), &r), true);
QCOMPARE(mul_overflow(Int(max / 2), Int(3), &r), true);
- QCOMPARE(mul_overflow(Int(middle + 1), Int(middle + 1), &r), true);
+ QCOMPARE(mul_overflow(mid1, Int(mid2 + 1), &r), true);
+ QCOMPARE(mul_overflow(Int(max / 2 + 2), Int(2), &r), true);
+ QCOMPARE(mul_overflow(Int(1ULL << (std::numeric_limits<Int>::digits - 1)), Int(2), &r), true);
+
+ if (min) {
+ QCOMPARE(mul_overflow(min, Int(2), &r), true);
+ QCOMPARE(mul_overflow(Int(min / 2), Int(3), &r), true);
+ QCOMPARE(mul_overflow(Int(min / 2 - 1), Int(2), &r), true);
+ QCOMPARE(mul_overflow(Int(min + min/2), Int(2), &r), true);
+ }
#endif
}
@@ -373,6 +495,20 @@ void tst_QNumeric::mulOverflow()
MulOverflowDispatch<ulong>()(); // not really 48-bit
if (size == 64)
MulOverflowDispatch<quint64>()();
+
+ if (size == -8)
+ MulOverflowDispatch<qint8>()();
+ if (size == -16)
+ MulOverflowDispatch<qint16>()();
+ if (size == -32)
+ MulOverflowDispatch<qint32>()();
+ if (size == -64) {
+#if QT_POINTER_SIZE == 8
+ MulOverflowDispatch<qint64>()();
+#else
+ QFAIL("128-bit multiplication not supported on this platform");
+#endif
+ }
}
void tst_QNumeric::signedOverflow()
diff --git a/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp b/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp
index 220ec9a2f8..7a6842d144 100644
--- a/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp
+++ b/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp
@@ -840,10 +840,6 @@ void tst_QRandomGenerator::stdUniformIntDistribution()
void tst_QRandomGenerator::stdGenerateCanonical()
{
-#if defined(Q_CC_MSVC) && Q_CC_MSVC < 1900
- // see https://connect.microsoft.com/VisualStudio/feedback/details/811611
- QSKIP("MSVC 2013's std::generate_canonical is broken");
-#else
QFETCH(uint, control);
RandomGenerator rng(control);
@@ -858,7 +854,6 @@ void tst_QRandomGenerator::stdGenerateCanonical()
for (int i = 0; i < 4; ++i)
QVERIFY_3TIMES(std::generate_canonical<qreal COMMA 32>(rng) !=
std::generate_canonical<qreal COMMA 32>(rng));
-#endif
}
void tst_QRandomGenerator::stdUniformRealDistribution_data()
diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro
index bd2a9f4c8e..5618a42203 100644
--- a/tests/auto/corelib/io/io.pro
+++ b/tests/auto/corelib/io/io.pro
@@ -2,7 +2,6 @@ TEMPLATE=subdirs
SUBDIRS=\
qabstractfileengine \
qbuffer \
- qdatastream \
qdataurl \
qdebug \
qdir \
@@ -30,19 +29,16 @@ SUBDIRS=\
qstorageinfo \
qtemporarydir \
qtemporaryfile \
- qtextstream \
qurl \
qurlinternal \
qurlquery \
!qtHaveModule(gui): SUBDIRS -= \
- qdatastream \
qsettings
!qtHaveModule(network): SUBDIRS -= \
qiodevice \
- qprocess \
- qtextstream
+ qprocess
!qtHaveModule(concurrent): SUBDIRS -= \
qdebug \
diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp
index c173a87a41..cd13e2bd19 100644
--- a/tests/auto/corelib/io/qfile/tst_qfile.cpp
+++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp
@@ -68,8 +68,6 @@ QT_END_NAMESPACE
#elif defined(Q_OS_FREEBSD)
# include <sys/param.h>
# include <sys/mount.h>
-#elif defined(Q_OS_IRIX)
-# include <sys/statfs.h>
#elif defined(Q_OS_VXWORKS)
# include <fcntl.h>
#if defined(_WRS_KERNEL)
@@ -170,6 +168,8 @@ private slots:
void getch();
void ungetChar();
void createFile();
+ void createFileNewOnly();
+ void openFileExistingOnly();
void append();
void permissions_data();
void permissions();
@@ -1213,6 +1213,48 @@ void tst_QFile::createFile()
QVERIFY( QFile::exists( "createme.txt" ) );
}
+void tst_QFile::createFileNewOnly()
+{
+ QFile::remove("createme.txt");
+ QVERIFY(!QFile::exists("createme.txt"));
+
+ QFile f("createme.txt");
+ QVERIFY2(f.open(QIODevice::NewOnly), msgOpenFailed(f).constData());
+ f.close();
+ QVERIFY(QFile::exists("createme.txt"));
+
+ QVERIFY(!f.open(QIODevice::NewOnly));
+ QVERIFY(QFile::exists("createme.txt"));
+ QFile::remove("createme.txt");
+}
+
+void tst_QFile::openFileExistingOnly()
+{
+ QFile::remove("dontcreateme.txt");
+ QVERIFY(!QFile::exists("dontcreateme.txt"));
+
+ QFile f("dontcreateme.txt");
+ QVERIFY(!f.open(QIODevice::ExistingOnly | QIODevice::ReadOnly));
+ QVERIFY(!f.open(QIODevice::ExistingOnly | QIODevice::WriteOnly));
+ QVERIFY(!f.open(QIODevice::ExistingOnly | QIODevice::ReadWrite));
+ QVERIFY(!f.open(QIODevice::ExistingOnly));
+ QVERIFY(!QFile::exists("dontcreateme.txt"));
+
+ QVERIFY2(f.open(QIODevice::NewOnly), msgOpenFailed(f).constData());
+ f.close();
+ QVERIFY(QFile::exists("dontcreateme.txt"));
+
+ QVERIFY2(f.open(QIODevice::ExistingOnly | QIODevice::ReadOnly), msgOpenFailed(f).constData());
+ f.close();
+ QVERIFY2(f.open(QIODevice::ExistingOnly | QIODevice::WriteOnly), msgOpenFailed(f).constData());
+ f.close();
+ QVERIFY2(f.open(QIODevice::ExistingOnly | QIODevice::ReadWrite), msgOpenFailed(f).constData());
+ f.close();
+ QVERIFY(!f.open(QIODevice::ExistingOnly));
+ QVERIFY(QFile::exists("dontcreateme.txt"));
+ QFile::remove("dontcreateme.txt");
+}
+
void tst_QFile::append()
{
const QString name("appendme.txt");
@@ -1642,6 +1684,15 @@ static bool fOpen(const QByteArray &fileName, const char *mode, FILE **file)
void tst_QFile::largeUncFileSupport()
{
+ // Currently there is a single network test server that is used by all VMs running tests in
+ // the CI. This test accesses a file shared with Samba on that server. Unfortunately many
+ // clients accessing the file at the same time is a sharing violation. This test already
+ // attempted to deal with the problem with retries, but that has led to the test timing out,
+ // not eventually succeeding. Due to the timeouts blacklisting the test wouldn't help.
+ // See https://bugreports.qt.io/browse/QTQAINFRA-1727 which will be resolved by the new
+ // test server architecture where the server is no longer shared.
+ QSKIP("Multiple instances of running this test at the same time fail due to QTQAINFRA-1727");
+
qint64 size = Q_INT64_C(8589934592);
qint64 dataOffset = Q_INT64_C(8589914592);
QByteArray knownData("LargeFile content at offset 8589914592");
@@ -1957,10 +2008,6 @@ void tst_QFile::largeFileSupport()
if (::GetDiskFreeSpaceEx((wchar_t*)QDir::currentPath().utf16(), &free, 0, 0))
freespace = free.QuadPart;
if (freespace != 0) {
-#elif defined(Q_OS_IRIX)
- struct statfs info;
- if (statfs(QDir::currentPath().local8Bit(), &info, sizeof(struct statfs), 0) == 0) {
- freespace = qlonglong(info.f_bfree * info.f_bsize);
#else
struct statfs info;
if (statfs(const_cast<char *>(QDir::currentPath().toLocal8Bit().constData()), &info) == 0) {
diff --git a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
index 618b7f338e..4923baa0ca 100644
--- a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
+++ b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
@@ -551,18 +551,18 @@ public:
: QIODevice(), buf(byteArray), offset(0), ownbuf(false) { }
virtual ~SequentialReadBuffer() { if (ownbuf) delete buf; }
- bool isSequential() const Q_DECL_OVERRIDE { return true; }
+ bool isSequential() const override { return true; }
const QByteArray &buffer() const { return *buf; }
protected:
- qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE
+ qint64 readData(char *data, qint64 maxSize) override
{
maxSize = qMin(maxSize, qint64(buf->size() - offset));
memcpy(data, buf->constData() + offset, maxSize);
offset += maxSize;
return maxSize;
}
- qint64 writeData(const char * /* data */, qint64 /* maxSize */) Q_DECL_OVERRIDE
+ qint64 writeData(const char * /* data */, qint64 /* maxSize */) override
{
return -1;
}
@@ -598,13 +598,13 @@ public:
RandomAccessBuffer(const char *data) : QIODevice(), buf(data) { }
protected:
- qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE
+ qint64 readData(char *data, qint64 maxSize) override
{
maxSize = qMin(maxSize, qint64(buf.size() - pos()));
memcpy(data, buf.constData() + pos(), maxSize);
return maxSize;
}
- qint64 writeData(const char *data, qint64 maxSize) Q_DECL_OVERRIDE
+ qint64 writeData(const char *data, qint64 maxSize) override
{
maxSize = qMin(maxSize, qint64(buf.size() - pos()));
memcpy(buf.data() + pos(), data, maxSize);
diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
index be523c8c0d..eeeb3bc6e2 100644
--- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
+++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
@@ -39,6 +39,8 @@
# include <qt_windows.h>
#endif
+#include <private/qlockfile_p.h> // for getLockFileHandle()
+
class tst_QLockFile : public QObject
{
Q_OBJECT
@@ -61,8 +63,12 @@ private slots:
void noPermissionsWindows();
void corruptedLockFile();
void corruptedLockFileInTheFuture();
+ void hostnameChange();
+ void differentMachines();
+ void reboot();
private:
+ static bool overwriteLineInLockFile(QFile &f, int line, const QString &newLine);
static bool overwritePidInLockFile(const QString &filePath, qint64 pid);
public:
@@ -295,7 +301,7 @@ void tst_QLockFile::staleLockFromCrashedProcessReusedPid()
QLockFile secondLock(fileName);
qint64 pid = 0;
- secondLock.getLockInfo(&pid, 0, 0);
+ QVERIFY(secondLock.getLockInfo(&pid, 0, 0));
QCOMPARE(pid, QCoreApplication::applicationPid());
secondLock.setStaleLockTime(0);
QVERIFY(secondLock.tryLock());
@@ -549,22 +555,109 @@ void tst_QLockFile::corruptedLockFileInTheFuture()
#endif
}
+void tst_QLockFile::hostnameChange()
+{
+ const QByteArray hostid = QSysInfo::machineUniqueId();
+ if (hostid.isEmpty())
+ QSKIP("Could not get a unique host ID on this machine");
+
+ QString lockFile = dir.path() + "/hostnameChangeLock";
+ QLockFile lock1(lockFile);
+ QVERIFY(lock1.lock());
+
+ {
+ // now modify it
+ QFile f;
+ QVERIFY(f.open(QLockFilePrivate::getLockFileHandle(&lock1),
+ QIODevice::ReadWrite | QIODevice::Text,
+ QFile::DontCloseHandle));
+ QVERIFY(overwriteLineInLockFile(f, 3, "this is not a hostname"));
+ }
+
+ {
+ // we should fail to lock
+ QLockFile lock2(lockFile);
+ QVERIFY(!lock2.tryLock(1000));
+ }
+}
+
+void tst_QLockFile::differentMachines()
+{
+ const QByteArray hostid = QSysInfo::machineUniqueId();
+ if (hostid.isEmpty())
+ QSKIP("Could not get a unique host ID on this machine");
+
+ QString lockFile = dir.path() + "/differentMachinesLock";
+ QLockFile lock1(lockFile);
+ QVERIFY(lock1.lock());
+
+ {
+ // now modify it
+ QFile f;
+ QVERIFY(f.open(QLockFilePrivate::getLockFileHandle(&lock1),
+ QIODevice::ReadWrite | QIODevice::Text,
+ QFile::DontCloseHandle));
+ QVERIFY(overwriteLineInLockFile(f, 1, QT_STRINGIFY(INT_MAX)));
+ QVERIFY(overwriteLineInLockFile(f, 4, "this is not a UUID"));
+ }
+
+ {
+ // we should fail to lock
+ QLockFile lock2(lockFile);
+ QVERIFY(!lock2.tryLock(1000));
+ }
+}
+
+void tst_QLockFile::reboot()
+{
+ const QByteArray bootid = QSysInfo::bootUniqueId();
+ if (bootid.isEmpty())
+ QSKIP("Could not get a unique boot ID on this machine");
+
+ // create a lock so we can get its contents
+ QString lockFile = dir.path() + "/rebootLock";
+ QLockFile lock1(lockFile);
+ QVERIFY(lock1.lock());
+
+ QFile f(lockFile);
+ QVERIFY(f.open(QFile::ReadOnly | QFile::Text));
+ auto lines = f.readAll().split('\n');
+ f.close();
+
+ lock1.unlock();
+
+ // now recreate the file simulating a reboot
+ QVERIFY(f.open(QFile::WriteOnly | QFile::Text));
+ lines[4] = "this is not a UUID";
+ f.write(lines.join('\n'));
+ f.close();
+
+ // we should succeed in locking
+ QVERIFY(lock1.tryLock(0));
+}
+
bool tst_QLockFile::overwritePidInLockFile(const QString &filePath, qint64 pid)
{
QFile f(filePath);
- if (!f.open(QFile::ReadWrite)) {
- qWarning("Cannot open %s.", qPrintable(filePath));
+ if (!f.open(QFile::ReadWrite | QFile::Text)) {
+ qErrnoWarning("Cannot open %s", qPrintable(filePath));
return false;
}
+ return overwriteLineInLockFile(f, 1, QString::number(pid));
+}
+
+bool tst_QLockFile::overwriteLineInLockFile(QFile &f, int line, const QString &newLine)
+{
+ f.seek(0);
QByteArray buf = f.readAll();
- int i = buf.indexOf('\n');
- if (i < 0) {
+ QStringList lines = QString::fromUtf8(buf).split('\n');
+ if (lines.size() < 3 && lines.size() < line - 1) {
qWarning("Unexpected lockfile content.");
return false;
}
- buf.remove(0, i);
- buf.prepend(QByteArray::number(pid));
+ lines[line - 1] = newLine;
f.seek(0);
+ buf = lines.join('\n').toUtf8();
f.resize(buf.size());
return f.write(buf) == buf.size();
}
diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro b/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro
index 7a304fe779..da2660fd02 100644
--- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro
+++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.pro
@@ -2,5 +2,5 @@ CONFIG += testcase
TARGET = tst_qlockfile
SOURCES += tst_qlockfile.cpp
-QT = core testlib concurrent
+QT = core-private testlib concurrent
win32:!winrt:LIBS += -ladvapi32
diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
index de6eb28503..6b4d292fe3 100644
--- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
+++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
@@ -285,7 +285,7 @@ void tst_QProcess::startWithOldOpen()
class OverriddenOpen : public QProcess
{
public:
- virtual bool open(OpenMode mode) Q_DECL_OVERRIDE
+ virtual bool open(OpenMode mode) override
{ return QIODevice::open(mode); }
};
@@ -708,7 +708,7 @@ void tst_QProcess::restartProcessDeadlock()
QCOMPARE(process.write("", 1), qlonglong(1));
QVERIFY(process.waitForFinished(5000));
- QObject::disconnect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), Q_NULLPTR, Q_NULLPTR);
+ QObject::disconnect(&process, static_cast<QProcessFinishedSignal1>(&QProcess::finished), nullptr, nullptr);
QCOMPARE(process.write("", 1), qlonglong(1));
QVERIFY(process.waitForFinished(5000));
@@ -847,7 +847,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives()
QVERIFY(QTestEventLoop::instance().timeout());
QVERIFY(!proc.waitForReadyRead(250));
- QObject::disconnect(&proc, &QIODevice::readyRead, Q_NULLPTR, Q_NULLPTR);
+ QObject::disconnect(&proc, &QIODevice::readyRead, nullptr, nullptr);
proc.write("B");
QVERIFY(proc.waitForReadyRead(5000));
diff --git a/tests/auto/corelib/io/qsettings/BLACKLIST b/tests/auto/corelib/io/qsettings/BLACKLIST
index 317e97730e..36d68bd918 100644
--- a/tests/auto/corelib/io/qsettings/BLACKLIST
+++ b/tests/auto/corelib/io/qsettings/BLACKLIST
@@ -1,3 +1,2 @@
[isWritable:native]
-osx-10.10
osx-10.11
diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
index 012ce5f2f5..db756ada39 100644
--- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
+++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
@@ -207,7 +207,7 @@ void tst_QSettings::getSetCheck()
QCOMPARE(true, obj1.fallbacksEnabled());
}
-static QString settingsPath(const char *path = Q_NULLPTR)
+static QString settingsPath(const char *path = nullptr)
{
// Temporary path for files that are specified explicitly in the constructor.
#ifndef Q_OS_WINRT
diff --git a/tests/auto/corelib/io/qstorageinfo/BLACKLIST b/tests/auto/corelib/io/qstorageinfo/BLACKLIST
deleted file mode 100644
index ab4f888dd9..0000000000
--- a/tests/auto/corelib/io/qstorageinfo/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[storageList]
-opensuse-42.1
diff --git a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp
deleted file mode 100644
index 0e423a56ca..0000000000
--- a/tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp
+++ /dev/null
@@ -1,3057 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-
-#ifdef Q_OS_UNIX
-#include <locale.h>
-#endif
-
-#include <QBuffer>
-#include <QByteArray>
-#include <QDebug>
-#include <QFile>
-#include <QTcpSocket>
-#include <QTemporaryDir>
-#include <QTextStream>
-#include <QTextCodec>
-#if QT_CONFIG(process)
-# include <QProcess>
-#endif
-#include "../../../network-settings.h"
-
-
-QT_BEGIN_NAMESPACE
-template<> struct QMetaTypeId<QIODevice::OpenModeFlag>
-{ enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } };
-QT_END_NAMESPACE
-
-class tst_QTextStream : public QObject
-{
- Q_OBJECT
-
-public:
- tst_QTextStream();
-
-public slots:
- void initTestCase();
- void cleanup();
- void cleanupTestCase();
-
-private slots:
- void getSetCheck();
- void construction();
-
- // lines
- void readLineFromDevice_data();
- void readLineFromDevice();
- void readLineFromString_data();
- void readLineFromString();
- void readLineFromTextDevice_data();
- void readLineFromTextDevice();
- void readLineUntilNull();
- void readLineMaxlen_data();
- void readLineMaxlen();
- void readLinesFromBufferCRCR();
- void readLineInto();
-
- // all
- void readAllFromDevice_data();
- void readAllFromDevice();
- void readAllFromString_data();
- void readAllFromString();
- void readLineFromStringThenChangeString();
-
- // device tests
- void setDevice();
-
- // char operators
- void QChar_operators_FromDevice_data();
- void QChar_operators_FromDevice();
- void char_operators_FromDevice_data();
- void char_operators_FromDevice();
-
- // natural number read operator
- void signedShort_read_operator_FromDevice_data();
- void signedShort_read_operator_FromDevice();
- void unsignedShort_read_operator_FromDevice_data();
- void unsignedShort_read_operator_FromDevice();
- void signedInt_read_operator_FromDevice_data();
- void signedInt_read_operator_FromDevice();
- void unsignedInt_read_operator_FromDevice_data();
- void unsignedInt_read_operator_FromDevice();
- void qlonglong_read_operator_FromDevice_data();
- void qlonglong_read_operator_FromDevice();
- void qulonglong_read_operator_FromDevice_data();
- void qulonglong_read_operator_FromDevice();
-
- // natural number write operator
- void signedShort_write_operator_ToDevice_data();
- void signedShort_write_operator_ToDevice();
- void unsignedShort_write_operator_ToDevice_data();
- void unsignedShort_write_operator_ToDevice();
- void signedInt_write_operator_ToDevice_data();
- void signedInt_write_operator_ToDevice();
- void unsignedInt_write_operator_ToDevice_data();
- void unsignedInt_write_operator_ToDevice();
- void qlonglong_write_operator_ToDevice_data();
- void qlonglong_write_operator_ToDevice();
- void qulonglong_write_operator_ToDevice_data();
- void qulonglong_write_operator_ToDevice();
-
- void int_read_with_locale_data();
- void int_read_with_locale();
-
- void int_write_with_locale_data();
- void int_write_with_locale();
-
- // real number read operator
- void float_read_operator_FromDevice_data();
- void float_read_operator_FromDevice();
- void double_read_operator_FromDevice_data();
- void double_read_operator_FromDevice();
-
- // real number write operator
- void float_write_operator_ToDevice_data();
- void float_write_operator_ToDevice();
- void double_write_operator_ToDevice_data();
- void double_write_operator_ToDevice();
-
- void double_write_with_flags_data();
- void double_write_with_flags();
-
- void double_write_with_precision_data();
- void double_write_with_precision();
-
- // text read operators
- void charPtr_read_operator_FromDevice_data();
- void charPtr_read_operator_FromDevice();
- void stringRef_read_operator_FromDevice_data();
- void stringRef_read_operator_FromDevice();
- void byteArray_read_operator_FromDevice_data();
- void byteArray_read_operator_FromDevice();
-
- // text write operators
- void string_write_operator_ToDevice_data();
- void string_write_operator_ToDevice();
- void latin1String_write_operator_ToDevice();
- void stringref_write_operator_ToDevice();
-
- // other
- void skipWhiteSpace_data();
- void skipWhiteSpace();
- void lineCount_data();
- void lineCount();
- void performance();
- void hexTest_data();
- void hexTest();
- void binTest_data();
- void binTest();
- void octTest_data();
- void octTest();
- void zeroTermination();
- void ws_manipulator();
- void stillOpenWhenAtEnd();
- void readNewlines_data();
- void readNewlines();
- void seek();
- void pos();
- void pos2();
- void pos3LargeFile();
- void readStdin();
- void readAllFromStdin();
- void readLineFromStdin();
- void read();
- void qbool();
- void forcePoint();
- void forceSign();
- void read0d0d0a();
- void numeralCase_data();
- void numeralCase();
- void nanInf();
- void utf8IncompleteAtBufferBoundary_data();
- void utf8IncompleteAtBufferBoundary();
- void writeSeekWriteNoBOM();
-
- // status
- void status_real_read_data();
- void status_real_read();
- void status_integer_read();
- void status_word_read();
- void status_write_error();
-
- // use case tests
- void useCase1();
- void useCase2();
-
- // manipulators
- void manipulators_data();
- void manipulators();
-
- // UTF-16 BOM (Byte Order Mark)
- void generateBOM();
- void readBomSeekBackReadBomAgain();
-
- // Regression tests for old bugs
- void alignAccountingStyle();
- void setCodec();
-
- void textModeOnEmptyRead();
-
-private:
- void generateLineData(bool for_QString);
- void generateAllData(bool for_QString);
- void generateOperatorCharData(bool for_QString);
- void generateNaturalNumbersData(bool for_QString);
- void generateRealNumbersData(bool for_QString);
- void generateStringData(bool for_QString);
- void generateRealNumbersDataWrite();
-
- QTemporaryDir tempDir;
- QString testFileName;
-#ifdef BUILTIN_TESTDATA
- QSharedPointer<QTemporaryDir> m_dataDir;
-#endif
- const QString m_rfc3261FilePath;
- const QString m_shiftJisFilePath;
-};
-
-void runOnExit()
-{
- QByteArray buffer;
- QTextStream(&buffer) << "This will try to use QTextCodec::codecForLocale" << endl;
-}
-Q_DESTRUCTOR_FUNCTION(runOnExit)
-
-tst_QTextStream::tst_QTextStream()
- : tempDir(QDir::tempPath() + "/tst_qtextstream.XXXXXX")
- , m_rfc3261FilePath(QFINDTESTDATA("rfc3261.txt"))
- , m_shiftJisFilePath(QFINDTESTDATA("shift-jis.txt"))
-{
-}
-
-void tst_QTextStream::initTestCase()
-{
- QVERIFY2(tempDir.isValid(), qPrintable(tempDir.errorString()));
- QVERIFY(!m_rfc3261FilePath.isEmpty());
- QVERIFY(!m_shiftJisFilePath.isEmpty());
-
- testFileName = tempDir.path() + "/testfile";
-
-#ifdef BUILTIN_TESTDATA
- m_dataDir = QEXTRACTTESTDATA("/");
- QVERIFY2(QDir::setCurrent(m_dataDir->path()), qPrintable("Could not chdir to " + m_dataDir->path()));
-#else
- // chdir into the testdata dir and refer to our helper apps with relative paths
- QString testdata_dir = QFileInfo(QFINDTESTDATA("stdinProcess")).absolutePath();
- QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir));
-#endif
-}
-
-// Testing get/set functions
-void tst_QTextStream::getSetCheck()
-{
- // Initialize codecs
- QTextStream obj1;
- // QTextCodec * QTextStream::codec()
- // void QTextStream::setCodec(QTextCodec *)
- QTextCodec *var1 = QTextCodec::codecForName("en");
- obj1.setCodec(var1);
- QCOMPARE(var1, obj1.codec());
- obj1.setCodec((QTextCodec *)0);
- QCOMPARE((QTextCodec *)0, obj1.codec());
-
- // bool QTextStream::autoDetectUnicode()
- // void QTextStream::setAutoDetectUnicode(bool)
- obj1.setAutoDetectUnicode(false);
- QCOMPARE(false, obj1.autoDetectUnicode());
- obj1.setAutoDetectUnicode(true);
- QCOMPARE(true, obj1.autoDetectUnicode());
-
- // bool QTextStream::generateByteOrderMark()
- // void QTextStream::setGenerateByteOrderMark(bool)
- obj1.setGenerateByteOrderMark(false);
- QCOMPARE(false, obj1.generateByteOrderMark());
- obj1.setGenerateByteOrderMark(true);
- QCOMPARE(true, obj1.generateByteOrderMark());
-
- // QIODevice * QTextStream::device()
- // void QTextStream::setDevice(QIODevice *)
- QFile *var4 = new QFile;
- obj1.setDevice(var4);
- QCOMPARE(static_cast<QIODevice *>(var4), obj1.device());
- obj1.setDevice((QIODevice *)0);
- QCOMPARE((QIODevice *)0, obj1.device());
- delete var4;
-
- // Status QTextStream::status()
- // void QTextStream::setStatus(Status)
- obj1.setStatus(QTextStream::Status(QTextStream::Ok));
- QCOMPARE(QTextStream::Status(QTextStream::Ok), obj1.status());
- obj1.setStatus(QTextStream::Status(QTextStream::ReadPastEnd));
- QCOMPARE(QTextStream::Status(QTextStream::ReadPastEnd), obj1.status());
- obj1.resetStatus();
- obj1.setStatus(QTextStream::Status(QTextStream::ReadCorruptData));
- QCOMPARE(QTextStream::Status(QTextStream::ReadCorruptData), obj1.status());
-
- // FieldAlignment QTextStream::fieldAlignment()
- // void QTextStream::setFieldAlignment(FieldAlignment)
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignLeft));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignLeft), obj1.fieldAlignment());
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignRight));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignRight), obj1.fieldAlignment());
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignCenter));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignCenter), obj1.fieldAlignment());
- obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignAccountingStyle));
- QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignAccountingStyle), obj1.fieldAlignment());
-
- // QChar QTextStream::padChar()
- // void QTextStream::setPadChar(QChar)
- QChar var7 = 'Q';
- obj1.setPadChar(var7);
- QCOMPARE(var7, obj1.padChar());
- obj1.setPadChar(QChar());
- QCOMPARE(QChar(), obj1.padChar());
-
- // int QTextStream::fieldWidth()
- // void QTextStream::setFieldWidth(int)
- obj1.setFieldWidth(0);
- QCOMPARE(0, obj1.fieldWidth());
- obj1.setFieldWidth(INT_MIN);
- QCOMPARE(INT_MIN, obj1.fieldWidth());
- obj1.setFieldWidth(INT_MAX);
- QCOMPARE(INT_MAX, obj1.fieldWidth());
-
- // NumberFlags QTextStream::numberFlags()
- // void QTextStream::setNumberFlags(NumberFlags)
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ShowBase));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::ShowBase), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ForcePoint));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::ForcePoint), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ForceSign));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::ForceSign), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::UppercaseBase));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::UppercaseBase), obj1.numberFlags());
- obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::UppercaseDigits));
- QCOMPARE(QTextStream::NumberFlags(QTextStream::UppercaseDigits), obj1.numberFlags());
-
- // int QTextStream::integerBase()
- // void QTextStream::setIntegerBase(int)
- obj1.setIntegerBase(0);
- QCOMPARE(0, obj1.integerBase());
- obj1.setIntegerBase(INT_MIN);
- QCOMPARE(INT_MIN, obj1.integerBase());
- obj1.setIntegerBase(INT_MAX);
- QCOMPARE(INT_MAX, obj1.integerBase());
-
- // RealNumberNotation QTextStream::realNumberNotation()
- // void QTextStream::setRealNumberNotation(RealNumberNotation)
- obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::SmartNotation));
- QCOMPARE(QTextStream::RealNumberNotation(QTextStream::SmartNotation), obj1.realNumberNotation());
- obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::FixedNotation));
- QCOMPARE(QTextStream::RealNumberNotation(QTextStream::FixedNotation), obj1.realNumberNotation());
- obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::ScientificNotation));
- QCOMPARE(QTextStream::RealNumberNotation(QTextStream::ScientificNotation), obj1.realNumberNotation());
-
- // int QTextStream::realNumberPrecision()
- // void QTextStream::setRealNumberPrecision(int)
- obj1.setRealNumberPrecision(0);
- QCOMPARE(0, obj1.realNumberPrecision());
- obj1.setRealNumberPrecision(INT_MIN);
- QCOMPARE(6, obj1.realNumberPrecision()); // Setting a negative precision reverts it to the default value (6).
- obj1.setRealNumberPrecision(INT_MAX);
- QCOMPARE(INT_MAX, obj1.realNumberPrecision());
-}
-
-void tst_QTextStream::cleanup()
-{
- QCoreApplication::instance()->processEvents();
-}
-
-void tst_QTextStream::cleanupTestCase()
-{
-#ifdef BUILTIN_TESTDATA
- QDir::setCurrent(QCoreApplication::applicationDirPath());
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::construction()
-{
- QTextStream stream;
- QCOMPARE(stream.codec(), QTextCodec::codecForLocale());
- QCOMPARE(stream.device(), static_cast<QIODevice *>(0));
- QCOMPARE(stream.string(), static_cast<QString *>(0));
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- QVERIFY(stream.atEnd());
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- QCOMPARE(stream.readAll(), QString());
-
-}
-
-void tst_QTextStream::generateLineData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QStringList>("lines");
-
- // latin-1
- QTest::newRow("emptyer") << QByteArray() << QStringList();
- QTest::newRow("lf") << QByteArray("\n") << (QStringList() << "");
- QTest::newRow("crlf") << QByteArray("\r\n") << (QStringList() << "");
- QTest::newRow("oneline/nothing") << QByteArray("ole") << (QStringList() << "ole");
- QTest::newRow("oneline/lf") << QByteArray("ole\n") << (QStringList() << "ole");
- QTest::newRow("oneline/crlf") << QByteArray("ole\r\n") << (QStringList() << "ole");
- QTest::newRow("twolines/lf/lf") << QByteArray("ole\ndole\n") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/crlf/crlf") << QByteArray("ole\r\ndole\r\n") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/lf/crlf") << QByteArray("ole\ndole\r\n") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/lf/nothing") << QByteArray("ole\ndole") << (QStringList() << "ole" << "dole");
- QTest::newRow("twolines/crlf/nothing") << QByteArray("ole\r\ndole") << (QStringList() << "ole" << "dole");
- QTest::newRow("threelines/lf/lf/lf") << QByteArray("ole\ndole\ndoffen\n") << (QStringList() << "ole" << "dole" << "doffen");
- QTest::newRow("threelines/crlf/crlf/crlf") << QByteArray("ole\r\ndole\r\ndoffen\r\n") << (QStringList() << "ole" << "dole" << "doffen");
- QTest::newRow("threelines/crlf/crlf/nothing") << QByteArray("ole\r\ndole\r\ndoffen") << (QStringList() << "ole" << "dole" << "doffen");
-
- if (!for_QString) {
- // utf-8
- QTest::newRow("utf8/twolines")
- << QByteArray("\xef\xbb\xbf"
- "\x66\x67\x65\x0a"
- "\x66\x67\x65\x0a", 11)
- << (QStringList() << "fge" << "fge");
-
- // utf-16
- // one line
- QTest::newRow("utf16-BE/nothing")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65", 8) << (QStringList() << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/nothing")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00", 8) << (QStringList() << QLatin1String("\345ge"));
- QTest::newRow("utf16-BE/lf")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 10) << (QStringList() << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/lf")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 10) << (QStringList() << QLatin1String("\345ge"));
-
- // two lines
- QTest::newRow("utf16-BE/twolines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 18)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/twolines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 18)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
-
- // three lines
- QTest::newRow("utf16-BE/threelines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 26)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge") << QLatin1String("\345ge"));
- QTest::newRow("utf16-LE/threelines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 26)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge") << QLatin1String("\345ge"));
-
- // utf-32
- QTest::newRow("utf32-BE/twolines")
- << QByteArray("\x00\x00\xfe\xff"
- "\x00\x00\x00\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a"
- "\x00\x00\x00\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a", 36)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
- QTest::newRow("utf32-LE/twolines")
- << QByteArray("\xff\xfe\x00\x00"
- "\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a\x00\x00\x00"
- "\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a\x00\x00\x00", 36)
- << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
- }
-
- // partials
- QTest::newRow("cr") << QByteArray("\r") << (QStringList() << "");
- QTest::newRow("oneline/cr") << QByteArray("ole\r") << (QStringList() << "ole");
- if (!for_QString)
- QTest::newRow("utf16-BE/cr") << QByteArray("\xfe\xff\x00\xe5\x00\x67\x00\x65\x00\x0d", 10) << (QStringList() << QLatin1String("\345ge"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromDevice_data()
-{
- generateLineData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromDevice()
-{
- QFETCH(QByteArray, data);
- QFETCH(QStringList, lines);
-
- QFile::remove(testFileName);
- QFile file(testFileName);
- QVERIFY(file.open(QFile::ReadWrite));
- QCOMPARE(file.write(data), qlonglong(data.size()));
- QVERIFY(file.flush());
- file.seek(0);
-
- QTextStream stream(&file);
- QStringList list;
- while (!stream.atEnd())
- list << stream.readLine();
-
- QCOMPARE(list, lines);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineMaxlen_data()
-{
- QTest::addColumn<QString>("input");
- QTest::addColumn<QStringList>("lines");
-
- QTest::newRow("Hey")
- << QString("Hey")
- << (QStringList() << QString("Hey") << QString(""));
- QTest::newRow("Hey\\n")
- << QString("Hey\n")
- << (QStringList() << QString("Hey") << QString(""));
- QTest::newRow("HelloWorld")
- << QString("HelloWorld")
- << (QStringList() << QString("Hello") << QString("World"));
- QTest::newRow("Helo\\nWorlds")
- << QString("Helo\nWorlds")
- << (QStringList() << QString("Helo") << QString("World"));
- QTest::newRow("AAAAA etc.")
- << QString(16385, QLatin1Char('A'))
- << (QStringList() << QString("AAAAA") << QString("AAAAA"));
- QTest::newRow("multibyte string")
- << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240\n")
- << (QStringList() << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242")
- << QString::fromUtf8("\341\233\232\341\232\240"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineMaxlen()
-{
- QFETCH(QString, input);
- QFETCH(QStringList, lines);
- for (int i = 0; i < 2; ++i) {
- bool useDevice = (i == 1);
- QTextStream stream;
- QFile::remove("testfile");
- QFile file("testfile");
- if (useDevice) {
- file.open(QIODevice::ReadWrite);
- file.write(input.toUtf8());
- file.seek(0);
- stream.setDevice(&file);
- stream.setCodec("utf-8");
- } else {
- stream.setString(&input);
- }
-
- QStringList list;
- list << stream.readLine(5);
- list << stream.readLine(5);
-
- QCOMPARE(list, lines);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLinesFromBufferCRCR()
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
- QByteArray data("0123456789\r\r\n");
-
- for (int i = 0; i < 10000; ++i)
- buffer.write(data);
-
- buffer.close();
- if (buffer.open(QIODevice::ReadOnly|QIODevice::Text)) {
- QTextStream stream(&buffer);
- while (!stream.atEnd())
- QCOMPARE(stream.readLine(), QString("0123456789"));
- }
-}
-
-class ErrorDevice : public QIODevice
-{
-protected:
- qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE
- {
- Q_UNUSED(data)
- Q_UNUSED(maxlen)
- return -1;
- }
-
- qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE
- {
- Q_UNUSED(data)
- Q_UNUSED(len)
- return -1;
- }
-};
-
-void tst_QTextStream::readLineInto()
-{
- QByteArray data = "1\n2\n3";
-
- QTextStream ts(&data);
- QString line;
-
- ts.readLineInto(&line);
- QCOMPARE(line, QStringLiteral("1"));
-
- ts.readLineInto(Q_NULLPTR, 0); // read the second line, but don't store it
-
- ts.readLineInto(&line);
- QCOMPARE(line, QStringLiteral("3"));
-
- QVERIFY(!ts.readLineInto(&line));
- QVERIFY(line.isEmpty());
-
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- ts.setDevice(&file);
- line.reserve(1);
- int maxLineCapacity = line.capacity();
-
- while (ts.readLineInto(&line)) {
- QVERIFY(line.capacity() >= maxLineCapacity);
- maxLineCapacity = line.capacity();
- }
-
- line = "Test string";
- ErrorDevice errorDevice;
- QVERIFY(errorDevice.open(QIODevice::ReadOnly));
- ts.setDevice(&errorDevice);
-
- QVERIFY(!ts.readLineInto(&line));
- QVERIFY(line.isEmpty());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromString_data()
-{
- generateLineData(true);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromString()
-{
- QFETCH(QByteArray, data);
- QFETCH(QStringList, lines);
-
- QString dataString = data;
-
- QTextStream stream(&dataString, QIODevice::ReadOnly);
- QStringList list;
- while (!stream.atEnd())
- list << stream.readLine();
-
- QCOMPARE(list, lines);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromStringThenChangeString()
-{
- QString first = "First string";
- QString second = "Second string";
-
- QTextStream stream(&first, QIODevice::ReadOnly);
- QString result = stream.readLine();
- QCOMPARE(first, result);
-
- stream.setString(&second, QIODevice::ReadOnly);
- result = stream.readLine();
- QCOMPARE(second, result);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::setDevice()
-{
- // Check that the read buffer is reset after setting a new device
- QByteArray data1("Hello World");
- QByteArray data2("How are you");
-
- QBuffer bufferOld(&data1);
- bufferOld.open(QIODevice::ReadOnly);
-
- QBuffer bufferNew(&data2);
- bufferNew.open(QIODevice::ReadOnly);
-
- QString text;
- QTextStream stream(&bufferOld);
- stream >> text;
- QCOMPARE(text, QString("Hello"));
-
- stream.setDevice(&bufferNew);
- stream >> text;
- QCOMPARE(text, QString("How"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromTextDevice_data()
-{
- generateLineData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromTextDevice()
-{
- QFETCH(QByteArray, data);
- QFETCH(QStringList, lines);
-
- for (int i = 0; i < 8; ++i) {
- QBuffer buffer(&data);
- if (i < 4)
- QVERIFY(buffer.open(QIODevice::ReadOnly | QIODevice::Text));
- else
- QVERIFY(buffer.open(QIODevice::ReadOnly));
-
- QTextStream stream(&buffer);
- QStringList list;
- while (!stream.atEnd()) {
- stream.pos(); // <- triggers side effects
- QString line;
-
- if (i & 1) {
- QChar c;
- while (!stream.atEnd()) {
- stream >> c;
- if (stream.status() == QTextStream::Ok) {
- if (c != QLatin1Char('\n') && c != QLatin1Char('\r'))
- line += c;
- if (c == QLatin1Char('\n'))
- break;
- }
- }
- } else {
- line = stream.readLine();
- }
-
- if ((i & 3) == 3 && !QString(QTest::currentDataTag()).contains("utf16"))
- stream.seek(stream.pos());
- list << line;
- }
- QCOMPARE(list, lines);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateAllData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QString>("output");
-
- // latin-1
- QTest::newRow("empty") << QByteArray() << QString();
- QTest::newRow("latin1-a") << QByteArray("a") << QString("a");
- QTest::newRow("latin1-a\\r") << QByteArray("a\r") << QString("a\r");
- QTest::newRow("latin1-a\\r\\n") << QByteArray("a\r\n") << QString("a\r\n");
- QTest::newRow("latin1-a\\n") << QByteArray("a\n") << QString("a\n");
-
- // utf-16
- if (!for_QString) {
- // one line
- QTest::newRow("utf16-BE/nothing")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65", 8) << QString::fromLatin1("\345ge");
- QTest::newRow("utf16-LE/nothing")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00", 8) << QString::fromLatin1("\345ge");
- QTest::newRow("utf16-BE/lf")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 10) << QString::fromLatin1("\345ge\n");
- QTest::newRow("utf16-LE/lf")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 10) << QString::fromLatin1("\345ge\n");
- QTest::newRow("utf16-BE/crlf")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0d\x00\x0a", 12) << QString::fromLatin1("\345ge\r\n");
- QTest::newRow("utf16-LE/crlf")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0d\x00\x0a\x00", 12) << QString::fromLatin1("\345ge\r\n");
-
- // two lines
- QTest::newRow("utf16-BE/twolines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 18)
- << QString::fromLatin1("\345ge\n\345ge\n");
- QTest::newRow("utf16-LE/twolines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 18)
- << QString::fromLatin1("\345ge\n\345ge\n");
-
- // three lines
- QTest::newRow("utf16-BE/threelines")
- << QByteArray("\xfe\xff"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a"
- "\x00\xe5\x00\x67\x00\x65\x00\x0a", 26)
- << QString::fromLatin1("\345ge\n\345ge\n\345ge\n");
- QTest::newRow("utf16-LE/threelines")
- << QByteArray("\xff\xfe"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00"
- "\xe5\x00\x67\x00\x65\x00\x0a\x00", 26)
- << QString::fromLatin1("\345ge\n\345ge\n\345ge\n");
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineUntilNull()
-{
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- QTextStream stream(&file);
- for (int i = 0; i < 15066; ++i) {
- QString line = stream.readLine();
- QVERIFY(!line.isNull());
- QVERIFY(!line.isNull());
- }
- QVERIFY(!stream.readLine().isNull());
- QVERIFY(stream.readLine().isNull());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromDevice_data()
-{
- generateAllData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
-
- QTextStream stream(&buffer);
- QCOMPARE(stream.readAll(), output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromString_data()
-{
- generateAllData(true);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromString()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, output);
-
- QString str = input;
-
- QTextStream stream(&str);
- QCOMPARE(stream.readAll(), output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::skipWhiteSpace_data()
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QChar>("output");
-
- // latin1
- QTest::newRow("empty") << QByteArray() << QChar('\0');
- QTest::newRow(" one") << QByteArray(" one") << QChar('o');
- QTest::newRow("\\none") << QByteArray("\none") << QChar('o');
- QTest::newRow("\\n one") << QByteArray("\n one") << QChar('o');
- QTest::newRow(" \\r\\n one") << QByteArray(" \r\n one") << QChar('o');
-
- // utf-16
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xfe\xff", 2) << QChar('\0');
- QTest::newRow("utf16-BE ( one)") << QByteArray("\xfe\xff\x00 \x00o\x00n\x00e", 10) << QChar('o');
- QTest::newRow("utf16-BE (\\none)") << QByteArray("\xfe\xff\x00\n\x00o\x00n\x00e", 10) << QChar('o');
- QTest::newRow("utf16-BE (\\n one)") << QByteArray("\xfe\xff\x00\n\x00 \x00o\x00n\x00e", 12) << QChar('o');
- QTest::newRow("utf16-BE ( \\r\\n one)") << QByteArray("\xfe\xff\x00 \x00\r\x00\n\x00 \x00o\x00n\x00e", 16) << QChar('o');
-
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xff\xfe", 2) << QChar('\0');
- QTest::newRow("utf16-LE ( one)") << QByteArray("\xff\xfe \x00o\x00n\x00e\x00", 10) << QChar('o');
- QTest::newRow("utf16-LE (\\none)") << QByteArray("\xff\xfe\n\x00o\x00n\x00e\x00", 10) << QChar('o');
- QTest::newRow("utf16-LE (\\n one)") << QByteArray("\xff\xfe\n\x00 \x00o\x00n\x00e\x00", 12) << QChar('o');
- QTest::newRow("utf16-LE ( \\r\\n one)") << QByteArray("\xff\xfe \x00\r\x00\n\x00 \x00o\x00n\x00e\x00", 16) << QChar('o');
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::skipWhiteSpace()
-{
- QFETCH(QByteArray, input);
- QFETCH(QChar, output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
-
- QTextStream stream(&buffer);
- stream.skipWhiteSpace();
-
- QChar tmp;
- stream >> tmp;
-
- QCOMPARE(tmp, output);
-
- QString str = input;
- QTextStream stream2(&input);
- stream2.skipWhiteSpace();
-
- stream2 >> tmp;
-
- QCOMPARE(tmp, output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::lineCount_data()
-{
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<int>("lineCount");
-
- QTest::newRow("empty") << QByteArray() << 0;
- QTest::newRow("oneline") << QByteArray("a\n") << 1;
- QTest::newRow("twolines") << QByteArray("a\nb\n") << 2;
- QTest::newRow("oneemptyline") << QByteArray("\n") << 1;
- QTest::newRow("twoemptylines") << QByteArray("\n\n") << 2;
- QTest::newRow("buffersize-1 line") << QByteArray(16382, '\n') << 16382;
- QTest::newRow("buffersize line") << QByteArray(16383, '\n') << 16383;
- QTest::newRow("buffersize+1 line") << QByteArray(16384, '\n') << 16384;
- QTest::newRow("buffersize+2 line") << QByteArray(16385, '\n') << 16385;
-
- QFile file(m_rfc3261FilePath); file.open(QFile::ReadOnly);
- QTest::newRow("rfc3261") << file.readAll() << 15067;
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::lineCount()
-{
- QFETCH(QByteArray, data);
- QFETCH(int, lineCount);
-
- QFile out("out.txt");
- out.open(QFile::WriteOnly);
-
- QTextStream lineReader(data);
- int lines = 0;
- while (!lineReader.atEnd()) {
- QString line = lineReader.readLine();
- out.write(line.toLatin1() + "\n");
- ++lines;
- }
-
- out.close();
- QCOMPARE(lines, lineCount);
-}
-
-// ------------------------------------------------------------------------------
-struct CompareIndicesForArray
-{
- int *array;
- CompareIndicesForArray(int *array) : array(array) {}
- bool operator() (const int i1, const int i2)
- {
- return array[i1] < array[i2];
- }
-};
-
-void tst_QTextStream::performance()
-{
- // Phase #1 - test speed of reading a huge text file with QFile.
- QTime stopWatch;
-
- const int N = 3;
- const char * readMethods[N] = {
- "QFile::readLine()",
- "QTextStream::readLine()",
- "QTextStream::readLine(QString *)"
- };
- int elapsed[N] = {0, 0, 0};
-
- stopWatch.restart();
- int nlines1 = 0;
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- while (!file.atEnd()) {
- ++nlines1;
- file.readLine();
- }
-
- elapsed[0] = stopWatch.elapsed();
- stopWatch.restart();
-
- int nlines2 = 0;
- QFile file2(m_rfc3261FilePath);
- QVERIFY(file2.open(QFile::ReadOnly));
-
- QTextStream stream(&file2);
- while (!stream.atEnd()) {
- ++nlines2;
- stream.readLine();
- }
-
- elapsed[1] = stopWatch.elapsed();
- stopWatch.restart();
-
- int nlines3 = 0;
- QFile file3(m_rfc3261FilePath);
- QVERIFY(file3.open(QFile::ReadOnly));
-
- QTextStream stream2(&file3);
- QString line;
- while (stream2.readLineInto(&line))
- ++nlines3;
-
- elapsed[2] = stopWatch.elapsed();
-
- QCOMPARE(nlines1, nlines2);
- QCOMPARE(nlines2, nlines3);
-
- for (int i = 0; i < N; i++) {
- qDebug("%s used %.3f seconds to read the file", readMethods[i],
- elapsed[i] / 1000.0);
- }
-
- int idx[N] = {0, 1, 2};
- std::sort(idx, idx + N, CompareIndicesForArray(elapsed));
-
- for (int i = 0; i < N-1; i++) {
- int i1 = idx[i];
- int i2 = idx[i+1];
- qDebug("Reading by %s is %.2fx faster than by %s",
- readMethods[i1],
- double(elapsed[i2]) / double(elapsed[i1]),
- readMethods[i2]);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::hexTest_data()
-{
- QTest::addColumn<qlonglong>("number");
- QTest::addColumn<QByteArray>("data");
-
- QTest::newRow("0") << Q_INT64_C(0) << QByteArray("0x0");
- QTest::newRow("1") << Q_INT64_C(1) << QByteArray("0x1");
- QTest::newRow("2") << Q_INT64_C(2) << QByteArray("0x2");
- QTest::newRow("3") << Q_INT64_C(3) << QByteArray("0x3");
- QTest::newRow("4") << Q_INT64_C(4) << QByteArray("0x4");
- QTest::newRow("5") << Q_INT64_C(5) << QByteArray("0x5");
- QTest::newRow("6") << Q_INT64_C(6) << QByteArray("0x6");
- QTest::newRow("7") << Q_INT64_C(7) << QByteArray("0x7");
- QTest::newRow("8") << Q_INT64_C(8) << QByteArray("0x8");
- QTest::newRow("9") << Q_INT64_C(9) << QByteArray("0x9");
- QTest::newRow("a") << Q_INT64_C(0xa) << QByteArray("0xa");
- QTest::newRow("b") << Q_INT64_C(0xb) << QByteArray("0xb");
- QTest::newRow("c") << Q_INT64_C(0xc) << QByteArray("0xc");
- QTest::newRow("d") << Q_INT64_C(0xd) << QByteArray("0xd");
- QTest::newRow("e") << Q_INT64_C(0xe) << QByteArray("0xe");
- QTest::newRow("f") << Q_INT64_C(0xf) << QByteArray("0xf");
- QTest::newRow("-1") << Q_INT64_C(-1) << QByteArray("-0x1");
- QTest::newRow("0xffffffff") << Q_INT64_C(0xffffffff) << QByteArray("0xffffffff");
- QTest::newRow("0xfffffffffffffffe") << Q_INT64_C(0xfffffffffffffffe) << QByteArray("-0x2");
- QTest::newRow("0xffffffffffffffff") << Q_INT64_C(0xffffffffffffffff) << QByteArray("-0x1");
- QTest::newRow("0x7fffffffffffffff") << Q_INT64_C(0x7fffffffffffffff) << QByteArray("0x7fffffffffffffff");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::hexTest()
-{
- QFETCH(qlonglong, number);
- QFETCH(QByteArray, data);
-
- QByteArray array;
- QTextStream stream(&array);
-
- stream << showbase << hex << number;
- stream.flush();
- QCOMPARE(array, data);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::binTest_data()
-{
- QTest::addColumn<int>("number");
- QTest::addColumn<QByteArray>("data");
-
- QTest::newRow("0") << 0 << QByteArray("0b0");
- QTest::newRow("1") << 1 << QByteArray("0b1");
- QTest::newRow("2") << 2 << QByteArray("0b10");
- QTest::newRow("5") << 5 << QByteArray("0b101");
- QTest::newRow("-1") << -1 << QByteArray("-0b1");
- QTest::newRow("11111111") << 0xff << QByteArray("0b11111111");
- QTest::newRow("1111111111111111") << 0xffff << QByteArray("0b1111111111111111");
- QTest::newRow("1111111011111110") << 0xfefe << QByteArray("0b1111111011111110");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::binTest()
-{
- QFETCH(int, number);
- QFETCH(QByteArray, data);
-
- QByteArray array;
- QTextStream stream(&array);
-
- stream << showbase << bin << number;
- stream.flush();
- QCOMPARE(array.constData(), data.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::octTest_data()
-{
- QTest::addColumn<int>("number");
- QTest::addColumn<QByteArray>("data");
-
- QTest::newRow("0") << 0 << QByteArray("00");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::octTest()
-{
- QFETCH(int, number);
- QFETCH(QByteArray, data);
-
- QByteArray array;
- QTextStream stream(&array);
-
- stream << showbase << oct << number;
- stream.flush();
- QCOMPARE(array, data);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::zeroTermination()
-{
- QTextStream stream;
- char c = '@';
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- stream >> c;
- QCOMPARE(c, '\0');
-
- c = '@';
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
- stream >> &c;
- QCOMPARE(c, '\0');
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::ws_manipulator()
-{
- {
- QString string = "a b c d";
- QTextStream stream(&string);
-
- char a, b, c, d;
- stream >> a >> b >> c >> d;
- QCOMPARE(a, 'a');
- QCOMPARE(b, ' ');
- QCOMPARE(c, 'b');
- QCOMPARE(d, ' ');
- }
- {
- QString string = "a b c d";
- QTextStream stream(&string);
-
- char a, b, c, d;
- stream >> a >> ws >> b >> ws >> c >> ws >> d;
- QCOMPARE(a, 'a');
- QCOMPARE(b, 'b');
- QCOMPARE(c, 'c');
- QCOMPARE(d, 'd');
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::stillOpenWhenAtEnd()
-{
- QFile file(QFINDTESTDATA("tst_qtextstream.cpp"));
- QVERIFY(file.open(QFile::ReadOnly));
-
- QTextStream stream(&file);
- while (!stream.readLine().isNull()) {}
- QVERIFY(file.isOpen());
-
- if (!QtNetworkSettings::verifyTestNetworkSettings())
- QSKIP("No network test server available");
-
- QTcpSocket socket;
- socket.connectToHost(QtNetworkSettings::serverName(), 143);
- QVERIFY(socket.waitForReadyRead(5000));
-
- QTextStream stream2(&socket);
- while (!stream2.readLine().isNull()) {}
- QVERIFY(socket.isOpen());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readNewlines_data()
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QString>("output");
-
- QTest::newRow("empty") << QByteArray() << QString();
- QTest::newRow("\\r\\n") << QByteArray("\r\n") << QString("\n");
- QTest::newRow("\\r\\r\\n") << QByteArray("\r\r\n") << QString("\n");
- QTest::newRow("\\r\\n\\r\\n") << QByteArray("\r\n\r\n") << QString("\n\n");
- QTest::newRow("\\n") << QByteArray("\n") << QString("\n");
- QTest::newRow("\\n\\n") << QByteArray("\n\n") << QString("\n\n");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readNewlines()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly | QBuffer::Text);
- QTextStream stream(&buffer);
- QCOMPARE(stream.readAll(), output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::seek()
-{
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QFile::ReadOnly));
-
- QTextStream stream(&file);
- QString tmp;
- stream >> tmp;
- QCOMPARE(tmp, QString::fromLatin1("Network"));
-
- // QTextStream::seek(0) should both clear its internal read/write buffers
- // and seek the device.
- for (int i = 0; i < 4; ++i) {
- stream.seek(12 + i);
- stream >> tmp;
- QCOMPARE(tmp, QString("Network").mid(i));
- }
- for (int i = 0; i < 4; ++i) {
- stream.seek(16 - i);
- stream >> tmp;
- QCOMPARE(tmp, QString("Network").mid(4 - i));
- }
- stream.seek(139181);
- stream >> tmp;
- QCOMPARE(tmp, QString("information"));
- stream.seek(388683);
- stream >> tmp;
- QCOMPARE(tmp, QString("telephone"));
-
- // Also test this with a string
- QString words = QLatin1String("thisisa");
- QTextStream stream2(&words, QIODevice::ReadOnly);
- stream2 >> tmp;
- QCOMPARE(tmp, QString::fromLatin1("thisisa"));
-
- for (int i = 0; i < 4; ++i) {
- stream2.seek(i);
- stream2 >> tmp;
- QCOMPARE(tmp, QString("thisisa").mid(i));
- }
- for (int i = 0; i < 4; ++i) {
- stream2.seek(4 - i);
- stream2 >> tmp;
- QCOMPARE(tmp, QString("thisisa").mid(4 - i));
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::pos()
-{
- {
- // Strings
- QString str("this is a test");
- QTextStream stream(&str, QIODevice::ReadWrite);
-
- QCOMPARE(stream.pos(), qint64(0));
- for (int i = 0; i <= str.size(); ++i) {
- QVERIFY(stream.seek(i));
- QCOMPARE(stream.pos(), qint64(i));
- }
- for (int j = str.size(); j >= 0; --j) {
- QVERIFY(stream.seek(j));
- QCOMPARE(stream.pos(), qint64(j));
- }
-
- QVERIFY(stream.seek(0));
-
- QChar ch;
- stream >> ch;
- QCOMPARE(ch, QChar('t'));
-
- QCOMPARE(stream.pos(), qint64(1));
- QVERIFY(stream.seek(1));
- QCOMPARE(stream.pos(), qint64(1));
- QVERIFY(stream.seek(0));
-
- QString strtmp;
- stream >> strtmp;
- QCOMPARE(strtmp, QString("this"));
-
- QCOMPARE(stream.pos(), qint64(4));
- stream.seek(0);
- stream.seek(4);
-
- stream >> ch;
- QCOMPARE(ch, QChar(' '));
- QCOMPARE(stream.pos(), qint64(5));
-
- stream.seek(10);
- stream >> strtmp;
- QCOMPARE(strtmp, QString("test"));
- QCOMPARE(stream.pos(), qint64(14));
- }
- {
- // Latin1 device
- QFile file(m_rfc3261FilePath);
- QVERIFY(file.open(QIODevice::ReadOnly));
-
- QTextStream stream(&file);
-
- QCOMPARE(stream.pos(), qint64(0));
-
- for (int i = 0; i <= file.size(); i += 7) {
- QVERIFY(stream.seek(i));
- QCOMPARE(stream.pos(), qint64(i));
- }
- for (int j = file.size(); j >= 0; j -= 7) {
- QVERIFY(stream.seek(j));
- QCOMPARE(stream.pos(), qint64(j));
- }
-
- stream.seek(0);
-
- QString strtmp;
- stream >> strtmp;
- QCOMPARE(strtmp, QString("Network"));
- QCOMPARE(stream.pos(), qint64(19));
-
- stream.seek(2598);
- QCOMPARE(stream.pos(), qint64(2598));
- stream >> strtmp;
- QCOMPARE(stream.pos(), qint64(2607));
- QCOMPARE(strtmp, QString("locations"));
- }
- {
- // Shift-JIS device
- for (int i = 0; i < 2; ++i) {
- QFile file(m_shiftJisFilePath);
- if (i == 0)
- QVERIFY(file.open(QIODevice::ReadOnly));
- else
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
-
- QTextStream stream(&file);
- stream.setCodec("Shift-JIS");
- QVERIFY(stream.codec());
-
- QCOMPARE(stream.pos(), qint64(0));
- for (int i = 0; i <= file.size(); i += 7) {
- QVERIFY(stream.seek(i));
- QCOMPARE(stream.pos(), qint64(i));
- }
- for (int j = file.size(); j >= 0; j -= 7) {
- QVERIFY(stream.seek(j));
- QCOMPARE(stream.pos(), qint64(j));
- }
-
- stream.seek(2089);
- QString strtmp;
- stream >> strtmp;
- QCOMPARE(strtmp, QString("AUnicode"));
- QCOMPARE(stream.pos(), qint64(2097));
-
- stream.seek(43325);
- stream >> strtmp;
- QCOMPARE(strtmp, QString("Shift-JIS"));
- stream >> strtmp;
- QCOMPARE(strtmp, QString::fromUtf8("\343\201\247\346\233\270\343\201\213\343\202\214\343\201\237"));
- QCOMPARE(stream.pos(), qint64(43345));
- stream >> strtmp;
- QCOMPARE(strtmp, QString("POD"));
- QCOMPARE(stream.pos(), qint64(43349));
- }
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::pos2()
-{
- QByteArray data("abcdef\r\nghijkl\r\n");
- QBuffer buffer(&data);
- QVERIFY(buffer.open(QIODevice::ReadOnly | QIODevice::Text));
-
- QTextStream stream(&buffer);
-
- QChar ch;
-
- QCOMPARE(stream.pos(), qint64(0));
- stream >> ch;
- QCOMPARE(ch, QChar('a'));
- QCOMPARE(stream.pos(), qint64(1));
-
- QString str;
- stream >> str;
- QCOMPARE(str, QString("bcdef"));
- QCOMPARE(stream.pos(), qint64(6));
-
- stream >> str;
- QCOMPARE(str, QString("ghijkl"));
- QCOMPARE(stream.pos(), qint64(14));
-
- // Seek back and try again
- stream.seek(1);
- QCOMPARE(stream.pos(), qint64(1));
- stream >> str;
- QCOMPARE(str, QString("bcdef"));
- QCOMPARE(stream.pos(), qint64(6));
-
- stream.seek(6);
- stream >> str;
- QCOMPARE(str, QString("ghijkl"));
- QCOMPARE(stream.pos(), qint64(14));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::pos3LargeFile()
-{
- {
- QFile file(testFileName);
- file.open(QIODevice::WriteOnly | QIODevice::Text);
- QTextStream out( &file );
- // NOTE: The unusual spacing is to ensure non-1-character whitespace.
- QString lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n";
- // Approximate 50kb text file
- const int NbLines = (50*1024) / lineString.length() + 1;
- for (int line = 0; line < NbLines; ++line)
- out << lineString;
- // File is automatically flushed and closed on destruction.
- }
- QFile file(testFileName);
- file.open(QIODevice::ReadOnly | QIODevice::Text);
- QTextStream in( &file );
- const int testValues[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
- int value;
- while (true) {
- in.pos();
- for ( int i = 0; i < 10; ++i ) {
- in >> value;
- if (in.status() != QTextStream::Ok) {
- // End case, i == 0 && eof reached.
- QCOMPARE(i, 0);
- QCOMPARE(in.status(), QTextStream::ReadPastEnd);
- return;
- }
- QCOMPARE(value, testValues[i]);
- }
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readStdin()
-{
-#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
-#else
- QProcess stdinProcess;
- stdinProcess.start("stdinProcess/stdinProcess");
- stdinProcess.setReadChannel(QProcess::StandardError);
-
- QTextStream stream(&stdinProcess);
- stream << "1" << endl;
- stream << "2" << endl;
- stream << "3" << endl;
-
- stdinProcess.closeWriteChannel();
-
- QVERIFY(stdinProcess.waitForFinished(5000));
-
- int a, b, c;
- stream >> a >> b >> c;
- QCOMPARE(a, 1);
- QCOMPARE(b, 2);
- QCOMPARE(c, 3);
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readAllFromStdin()
-{
-#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
-#else
- QProcess stdinProcess;
- stdinProcess.start("readAllStdinProcess/readAllStdinProcess", QIODevice::ReadWrite | QIODevice::Text);
- stdinProcess.setReadChannel(QProcess::StandardError);
-
- QTextStream stream(&stdinProcess);
- stream.setCodec("ISO-8859-1");
- stream << "hello world" << flush;
-
- stdinProcess.closeWriteChannel();
-
- QVERIFY(stdinProcess.waitForFinished(5000));
- QCOMPARE(stream.readAll(), QString::fromLatin1("hello world\n"));
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::readLineFromStdin()
-{
-#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
-#else
- QProcess stdinProcess;
- stdinProcess.start("readLineStdinProcess/readLineStdinProcess", QIODevice::ReadWrite | QIODevice::Text);
- stdinProcess.setReadChannel(QProcess::StandardError);
-
- stdinProcess.write("abc\n");
- QVERIFY(stdinProcess.waitForReadyRead(5000));
- QCOMPARE(stdinProcess.readAll().data(), QByteArray("abc").data());
-
- stdinProcess.write("def\n");
- QVERIFY(stdinProcess.waitForReadyRead(5000));
- QCOMPARE(stdinProcess.readAll(), QByteArray("def"));
-
- stdinProcess.closeWriteChannel();
-
- QVERIFY(stdinProcess.waitForFinished(5000));
-#endif
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::read()
-{
- {
- QFile::remove("testfile");
- QFile file("testfile");
- file.open(QFile::WriteOnly);
- file.write("4.15 abc ole");
- file.close();
-
- QVERIFY(file.open(QFile::ReadOnly));
- QTextStream stream(&file);
- QCOMPARE(stream.read(0), QString(""));
- QCOMPARE(stream.read(4), QString("4.15"));
- QCOMPARE(stream.read(4), QString(" abc"));
- stream.seek(1);
- QCOMPARE(stream.read(4), QString(".15 "));
- stream.seek(1);
- QCOMPARE(stream.read(4), QString(".15 "));
- stream.seek(2);
- QCOMPARE(stream.read(4), QString("15 a"));
- // ### add tests for reading \r\n etc..
- }
-
- {
- // File larger than QTEXTSTREAM_BUFFERSIZE
- QFile::remove("testfile");
- QFile file("testfile");
- file.open(QFile::WriteOnly);
- for (int i = 0; i < 16384 / 8; ++i)
- file.write("01234567");
- file.write("0");
- file.close();
-
- QVERIFY(file.open(QFile::ReadOnly));
- QTextStream stream(&file);
- QCOMPARE(stream.read(10), QString("0123456701"));
- QCOMPARE(stream.read(10), QString("2345670123"));
- QCOMPARE(stream.readAll().size(), 16385-20);
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::qbool()
-{
- QString s;
- QTextStream stream(&s);
- stream << s.contains(QString("hei"));
- QCOMPARE(s, QString("0"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::forcePoint()
-{
- QString str;
- QTextStream stream(&str);
- stream << fixed << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
- QCOMPARE(str, QString("1.000000 1 0 -1.000000 -1"));
-
- str.clear();
- stream.seek(0);
- stream << scientific << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
- QCOMPARE(str, QString("1.000000e+00 1 0 -1.000000e+00 -1"));
-
- str.clear();
- stream.seek(0);
- stream.setRealNumberNotation(QTextStream::SmartNotation);
- stream << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
- QCOMPARE(str, QString("1.00000 1 0 -1.00000 -1"));
-
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::forceSign()
-{
- QString str;
- QTextStream stream(&str);
- stream << forcesign << 1.2 << ' ' << -1.2 << ' ' << 0;
- QCOMPARE(str, QString("+1.2 -1.2 +0"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::read0d0d0a()
-{
- QFile file("task113817.txt");
- file.open(QIODevice::ReadOnly | QIODevice::Text);
-
- QTextStream stream(&file);
- while (!stream.atEnd())
- stream.readLine();
-}
-
-// ------------------------------------------------------------------------------
-
-Q_DECLARE_METATYPE(QTextStreamFunction);
-
-QTextStream &noop(QTextStream &s) { return s; }
-
-void tst_QTextStream::numeralCase_data()
-{
- QTextStreamFunction noop_ = noop;
- QTextStreamFunction bin_ = bin;
- QTextStreamFunction oct_ = oct;
- QTextStreamFunction hex_ = hex;
- QTextStreamFunction base = showbase;
- QTextStreamFunction ucb = uppercasebase;
- QTextStreamFunction lcb = lowercasebase;
- QTextStreamFunction ucd = uppercasedigits;
- QTextStreamFunction lcd = lowercasedigits;
-
- QTest::addColumn<QTextStreamFunction>("func1");
- QTest::addColumn<QTextStreamFunction>("func2");
- QTest::addColumn<QTextStreamFunction>("func3");
- QTest::addColumn<QTextStreamFunction>("func4");
- QTest::addColumn<int>("value");
- QTest::addColumn<QString>("expected");
- QTest::newRow("dec 1") << noop_ << noop_ << noop_ << noop_ << 31 << "31";
- QTest::newRow("dec 2") << noop_ << base << noop_ << noop_ << 31 << "31";
-
- QTest::newRow("hex 1") << hex_ << noop_ << noop_ << noop_ << 31 << "1f";
- QTest::newRow("hex 2") << hex_ << noop_ << noop_ << lcd << 31 << "1f";
- QTest::newRow("hex 3") << hex_ << noop_ << ucb << noop_ << 31 << "1f";
- QTest::newRow("hex 4") << hex_ << noop_ << noop_ << ucd << 31 << "1F";
- QTest::newRow("hex 5") << hex_ << noop_ << lcb << ucd << 31 << "1F";
- QTest::newRow("hex 6") << hex_ << noop_ << ucb << ucd << 31 << "1F";
- QTest::newRow("hex 7") << hex_ << base << noop_ << noop_ << 31 << "0x1f";
- QTest::newRow("hex 8") << hex_ << base << lcb << lcd << 31 << "0x1f";
- QTest::newRow("hex 9") << hex_ << base << ucb << noop_ << 31 << "0X1f";
- QTest::newRow("hex 10") << hex_ << base << ucb << lcd << 31 << "0X1f";
- QTest::newRow("hex 11") << hex_ << base << noop_ << ucd << 31 << "0x1F";
- QTest::newRow("hex 12") << hex_ << base << lcb << ucd << 31 << "0x1F";
- QTest::newRow("hex 13") << hex_ << base << ucb << ucd << 31 << "0X1F";
-
- QTest::newRow("bin 1") << bin_ << noop_ << noop_ << noop_ << 31 << "11111";
- QTest::newRow("bin 2") << bin_ << base << noop_ << noop_ << 31 << "0b11111";
- QTest::newRow("bin 3") << bin_ << base << lcb << noop_ << 31 << "0b11111";
- QTest::newRow("bin 4") << bin_ << base << ucb << noop_ << 31 << "0B11111";
- QTest::newRow("bin 5") << bin_ << base << noop_ << ucd << 31 << "0b11111";
- QTest::newRow("bin 6") << bin_ << base << lcb << ucd << 31 << "0b11111";
- QTest::newRow("bin 7") << bin_ << base << ucb << ucd << 31 << "0B11111";
-
- QTest::newRow("oct 1") << oct_ << noop_ << noop_ << noop_ << 31 << "37";
- QTest::newRow("oct 2") << oct_ << base << noop_ << noop_ << 31 << "037";
-}
-
-void tst_QTextStream::numeralCase()
-{
- QFETCH(QTextStreamFunction, func1);
- QFETCH(QTextStreamFunction, func2);
- QFETCH(QTextStreamFunction, func3);
- QFETCH(QTextStreamFunction, func4);
- QFETCH(int, value);
- QFETCH(QString, expected);
-
- QString str;
- QTextStream stream(&str);
- stream << func1 << func2 << func3 << func4 << value;
- QCOMPARE(str, expected);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::nanInf()
-{
- // Cannot use test data in this function, as comparing nans and infs isn't
- // well defined.
- QString str("nan NAN nAn +nan +NAN +nAn -nan -NAN -nAn"
- " inf INF iNf +inf +INF +iNf -inf -INF -iNf");
-
- QTextStream stream(&str);
-
- double tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
- stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
-
- stream.seek(0);
-
- float tmpF = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0); tmpD = 0;
- stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0);
-
- QString s;
- QTextStream out(&s);
- out << qInf() << ' ' << -qInf() << ' ' << qQNaN()
- << uppercasedigits << ' '
- << qInf() << ' ' << -qInf() << ' ' << qQNaN()
- << flush;
-
- QCOMPARE(s, QString("inf -inf nan INF -INF NAN"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::utf8IncompleteAtBufferBoundary_data()
-{
- QTest::addColumn<bool>("useLocale");
-
- QTest::newRow("utf8") << false;
-
- // is this locale UTF-8?
- if (QString(QChar::ReplacementCharacter).toLocal8Bit() == "\xef\xbf\xbd")
- QTest::newRow("locale") << true;
-}
-
-void tst_QTextStream::utf8IncompleteAtBufferBoundary()
-{
- QFile::remove(testFileName);
- QFile data(testFileName);
-
- QTextCodec *utf8Codec = QTextCodec::codecForMib(106);
- QString lineContents = QString::fromUtf8("\342\200\223" // U+2013 EN DASH
- "\342\200\223"
- "\342\200\223"
- "\342\200\223"
- "\342\200\223"
- "\342\200\223");
-
- data.open(QFile::WriteOnly | QFile::Truncate);
- {
- QTextStream out(&data);
- out.setCodec(utf8Codec);
- out.setFieldWidth(3);
-
- for (int i = 0; i < 1000; ++i) {
- out << i << lineContents << endl;
- }
- }
- data.close();
-
- data.open(QFile::ReadOnly);
- QTextStream in(&data);
-
- QFETCH(bool, useLocale);
- if (!useLocale)
- in.setCodec(utf8Codec); // QUtf8Codec
- else
- in.setCodec(QTextCodec::codecForLocale());
-
- int i = 0;
- do {
- QString line = in.readLine().trimmed();
- ++i;
- QVERIFY2(line.endsWith(lineContents), QString("Line %1: %2").arg(i).arg(line).toLocal8Bit());
- } while (!in.atEnd());
-}
-
-// ------------------------------------------------------------------------------
-
-// Make sure we don't write a BOM after seek()ing
-
-void tst_QTextStream::writeSeekWriteNoBOM()
-{
-
- //First with the default codec (normally either latin-1 or UTF-8)
-
- QBuffer out;
- out.open(QIODevice::WriteOnly);
- QTextStream stream(&out);
-
- int number = 0;
- QString sizeStr = QLatin1String("Size=")
- + QString::number(number).rightJustified(10, QLatin1Char('0'));
- stream << sizeStr << endl;
- stream << "Version=" << QString::number(14) << endl;
- stream << "blah blah blah" << endl;
- stream.flush();
-
- QCOMPARE(out.buffer().constData(), "Size=0000000000\nVersion=14\nblah blah blah\n");
-
- // Now overwrite the size header item
- number = 42;
- stream.seek(0);
- sizeStr = QLatin1String("Size=")
- + QString::number(number).rightJustified(10, QLatin1Char('0'));
- stream << sizeStr << endl;
- stream.flush();
-
- // Check buffer is still OK
- QCOMPARE(out.buffer().constData(), "Size=0000000042\nVersion=14\nblah blah blah\n");
-
-
- //Then UTF-16
-
- QBuffer out16;
- out16.open(QIODevice::WriteOnly);
- QTextStream stream16(&out16);
- stream16.setCodec("UTF-16");
-
- stream16 << "one" << "two" << QLatin1String("three");
- stream16.flush();
-
- // save that output
- QByteArray first = out16.buffer();
-
- stream16.seek(0);
- stream16 << "one";
- stream16.flush();
-
- QCOMPARE(out16.buffer(), first);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateOperatorCharData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QChar>("qchar_output");
- QTest::addColumn<char>("char_output");
- QTest::addColumn<QByteArray>("write_output");
-
- QTest::newRow("empty") << QByteArray() << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("a") << QByteArray("a") << QChar('a') << 'a' << QByteArray("a");
- QTest::newRow("\\na") << QByteArray("\na") << QChar('\n') << '\n' << QByteArray("\n");
- QTest::newRow("\\0") << QByteArray("\0") << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("\\xff") << QByteArray("\xff") << QChar('\xff') << '\xff' << QByteArray("\xff");
- QTest::newRow("\\xfe") << QByteArray("\xfe") << QChar('\xfe') << '\xfe' << QByteArray("\xfe");
-
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("utf16-BE (a)") << QByteArray("\xff\xfe\x61\x00", 4) << QChar('a') << 'a' << QByteArray("a");
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << QChar('\0') << '\0' << QByteArray("\0", 1);
- QTest::newRow("utf16-LE (a)") << QByteArray("\xfe\xff\x00\x61", 4) << QChar('a') << 'a' << QByteArray("a");
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::QChar_operators_FromDevice_data()
-{
- generateOperatorCharData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::QChar_operators_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QChar, qchar_output);
- QFETCH(QByteArray, write_output);
-
- QBuffer buf(&input);
- buf.open(QBuffer::ReadOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- QChar tmp;
- stream >> tmp;
- QCOMPARE(tmp, qchar_output);
-
- QBuffer writeBuf;
- writeBuf.open(QBuffer::WriteOnly);
-
- QTextStream writeStream(&writeBuf);
- writeStream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- writeStream << qchar_output;
- writeStream.flush();
-
- QCOMPARE(writeBuf.buffer().size(), write_output.size());
- QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::char_operators_FromDevice_data()
-{
- generateOperatorCharData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::char_operators_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(char, char_output);
- QFETCH(QByteArray, write_output);
-
- QBuffer buf(&input);
- buf.open(QBuffer::ReadOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- char tmp;
- stream >> tmp;
- QCOMPARE(tmp, char_output);
-
- QBuffer writeBuf;
- writeBuf.open(QBuffer::WriteOnly);
-
- QTextStream writeStream(&writeBuf);
- writeStream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- writeStream << char_output;
- writeStream.flush();
-
- QCOMPARE(writeBuf.buffer().size(), write_output.size());
- QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateNaturalNumbersData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<qulonglong>("output");
-
- QTest::newRow("empty") << QByteArray() << qulonglong(0);
- QTest::newRow("a") << QByteArray("a") << qulonglong(0);
- QTest::newRow(" ") << QByteArray(" ") << qulonglong(0);
- QTest::newRow("0") << QByteArray("0") << qulonglong(0);
- QTest::newRow("1") << QByteArray("1") << qulonglong(1);
- QTest::newRow("12") << QByteArray("12") << qulonglong(12);
- QTest::newRow("-12") << QByteArray("-12") << qulonglong(-12);
- QTest::newRow("-0") << QByteArray("-0") << qulonglong(0);
- QTest::newRow(" 1") << QByteArray(" 1") << qulonglong(1);
- QTest::newRow(" \\r\\n\\r\\n123") << QByteArray(" \r\n\r\n123") << qulonglong(123);
-
- // bit boundary tests
- QTest::newRow("127") << QByteArray("127") << qulonglong(127);
- QTest::newRow("128") << QByteArray("128") << qulonglong(128);
- QTest::newRow("129") << QByteArray("129") << qulonglong(129);
- QTest::newRow("-127") << QByteArray("-127") << qulonglong(-127);
- QTest::newRow("-128") << QByteArray("-128") << qulonglong(-128);
- QTest::newRow("-129") << QByteArray("-129") << qulonglong(-129);
- QTest::newRow("32767") << QByteArray("32767") << qulonglong(32767);
- QTest::newRow("32768") << QByteArray("32768") << qulonglong(32768);
- QTest::newRow("32769") << QByteArray("32769") << qulonglong(32769);
- QTest::newRow("-32767") << QByteArray("-32767") << qulonglong(-32767);
- QTest::newRow("-32768") << QByteArray("-32768") << qulonglong(-32768);
- QTest::newRow("-32769") << QByteArray("-32769") << qulonglong(-32769);
- QTest::newRow("65537") << QByteArray("65537") << qulonglong(65537);
- QTest::newRow("65536") << QByteArray("65536") << qulonglong(65536);
- QTest::newRow("65535") << QByteArray("65535") << qulonglong(65535);
- QTest::newRow("-65537") << QByteArray("-65537") << qulonglong(-65537);
- QTest::newRow("-65536") << QByteArray("-65536") << qulonglong(-65536);
- QTest::newRow("-65535") << QByteArray("-65535") << qulonglong(-65535);
- QTest::newRow("2147483646") << QByteArray("2147483646") << qulonglong(2147483646);
- QTest::newRow("2147483647") << QByteArray("2147483647") << qulonglong(2147483647);
- QTest::newRow("2147483648") << QByteArray("2147483648") << Q_UINT64_C(2147483648);
- QTest::newRow("-2147483646") << QByteArray("-2147483646") << qulonglong(-2147483646);
- QTest::newRow("-2147483647") << QByteArray("-2147483647") << qulonglong(-2147483647);
- QTest::newRow("-2147483648") << QByteArray("-2147483648") << quint64(-2147483648LL);
- QTest::newRow("4294967296") << QByteArray("4294967296") << Q_UINT64_C(4294967296);
- QTest::newRow("4294967297") << QByteArray("4294967297") << Q_UINT64_C(4294967297);
- QTest::newRow("4294967298") << QByteArray("4294967298") << Q_UINT64_C(4294967298);
- QTest::newRow("-4294967296") << QByteArray("-4294967296") << quint64(-4294967296);
- QTest::newRow("-4294967297") << QByteArray("-4294967297") << quint64(-4294967297);
- QTest::newRow("-4294967298") << QByteArray("-4294967298") << quint64(-4294967298);
- QTest::newRow("9223372036854775807") << QByteArray("9223372036854775807") << Q_UINT64_C(9223372036854775807);
- QTest::newRow("9223372036854775808") << QByteArray("9223372036854775808") << Q_UINT64_C(9223372036854775808);
- QTest::newRow("9223372036854775809") << QByteArray("9223372036854775809") << Q_UINT64_C(9223372036854775809);
- QTest::newRow("18446744073709551615") << QByteArray("18446744073709551615") << Q_UINT64_C(18446744073709551615);
- QTest::newRow("18446744073709551616") << QByteArray("18446744073709551616") << Q_UINT64_C(0);
- QTest::newRow("18446744073709551617") << QByteArray("18446744073709551617") << Q_UINT64_C(1);
- // 18446744073709551617 bytes should be enough for anyone.... ;-)
-
- // hex tests
- QTest::newRow("0x0") << QByteArray("0x0") << qulonglong(0);
- QTest::newRow("0x") << QByteArray("0x") << qulonglong(0);
- QTest::newRow("0x1") << QByteArray("0x1") << qulonglong(1);
- QTest::newRow("0xf") << QByteArray("0xf") << qulonglong(15);
- QTest::newRow("0xdeadbeef") << QByteArray("0xdeadbeef") << Q_UINT64_C(3735928559);
- QTest::newRow("0XDEADBEEF") << QByteArray("0XDEADBEEF") << Q_UINT64_C(3735928559);
- QTest::newRow("0xdeadbeefZzzzz") << QByteArray("0xdeadbeefZzzzz") << Q_UINT64_C(3735928559);
- QTest::newRow(" 0xdeadbeefZzzzz") << QByteArray(" 0xdeadbeefZzzzz") << Q_UINT64_C(3735928559);
-
- // oct tests
- QTest::newRow("00") << QByteArray("00") << qulonglong(0);
- QTest::newRow("0141") << QByteArray("0141") << qulonglong(97);
- QTest::newRow("01419999") << QByteArray("01419999") << qulonglong(97);
- QTest::newRow(" 01419999") << QByteArray(" 01419999") << qulonglong(97);
-
- // bin tests
- QTest::newRow("0b0") << QByteArray("0b0") << qulonglong(0);
- QTest::newRow("0b1") << QByteArray("0b1") << qulonglong(1);
- QTest::newRow("0b10") << QByteArray("0b10") << qulonglong(2);
- QTest::newRow("0B10") << QByteArray("0B10") << qulonglong(2);
- QTest::newRow("0b101010") << QByteArray("0b101010") << qulonglong(42);
- QTest::newRow("0b1010102345") << QByteArray("0b1010102345") << qulonglong(42);
- QTest::newRow(" 0b1010102345") << QByteArray(" 0b1010102345") << qulonglong(42);
-
- // utf-16 tests
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xfe\xff", 2) << qulonglong(0);
- QTest::newRow("utf16-BE (0xdeadbeef)")
- << QByteArray("\xfe\xff"
- "\x00\x30\x00\x78\x00\x64\x00\x65\x00\x61\x00\x64\x00\x62\x00\x65\x00\x65\x00\x66", 22)
- << Q_UINT64_C(3735928559);
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xff\xfe", 2) << Q_UINT64_C(0);
- QTest::newRow("utf16-LE (0xdeadbeef)")
- << QByteArray("\xff\xfe"
- "\x30\x00\x78\x00\x64\x00\x65\x00\x61\x00\x64\x00\x62\x00\x65\x00\x65\x00\x66\x00", 22)
- << Q_UINT64_C(3735928559);
- }
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_read_operator_FromDevice_data() \
- { generateNaturalNumbersData(false); } \
- void tst_QTextStream:: texttype##_read_operator_FromDevice() \
- { \
- QFETCH(QByteArray, input); \
- QFETCH(qulonglong, output); \
- type sh; \
- QTextStream stream(&input); \
- stream >> sh; \
- QCOMPARE(sh, (type)output); \
- }
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(signedShort, signed short)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(unsignedShort, unsigned short)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(signedInt, signed int)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(unsignedInt, unsigned int)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(qlonglong, qlonglong)
-IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(qulonglong, qulonglong)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateRealNumbersData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<double>("output");
-
- QTest::newRow("empty") << QByteArray() << 0.0;
- QTest::newRow("a") << QByteArray("a") << 0.0;
- QTest::newRow("1.0") << QByteArray("1.0") << 1.0;
- QTest::newRow(" 1") << QByteArray(" 1") << 1.0;
- QTest::newRow(" \\r\\n1.2") << QByteArray(" \r\n1.2") << 1.2;
- QTest::newRow("3.14") << QByteArray("3.14") << 3.14;
- QTest::newRow("-3.14") << QByteArray("-3.14") << -3.14;
- QTest::newRow(" -3.14") << QByteArray(" -3.14") << -3.14;
- QTest::newRow("314e-02") << QByteArray("314e-02") << 3.14;
- QTest::newRow("314E-02") << QByteArray("314E-02") << 3.14;
- QTest::newRow("314e+02") << QByteArray("314e+02") << 31400.;
- QTest::newRow("314E+02") << QByteArray("314E+02") << 31400.;
-
- // ### add numbers with exponents
-
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << 0.0;
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << 0.0;
- }
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_read_operator_FromDevice_data() \
- { generateRealNumbersData(false); } \
- void tst_QTextStream:: texttype##_read_operator_FromDevice() \
- { \
- QFETCH(QByteArray, input); \
- QFETCH(double, output); \
- type sh; \
- QTextStream stream(&input); \
- stream >> sh; \
- QCOMPARE(sh, (type)output); \
- }
-IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(float, float)
-IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(double, double)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateStringData(bool for_QString)
-{
- QTest::addColumn<QByteArray>("input");
- QTest::addColumn<QByteArray>("array_output");
- QTest::addColumn<QString>("string_output");
-
- QTest::newRow("empty") << QByteArray() << QByteArray() << QString();
- QTest::newRow("a") << QByteArray("a") << QByteArray("a") << QString("a");
- QTest::newRow("a b") << QByteArray("a b") << QByteArray("a") << QString("a");
- QTest::newRow(" a b") << QByteArray(" a b") << QByteArray("a") << QString("a");
- QTest::newRow("a1") << QByteArray("a1") << QByteArray("a1") << QString("a1");
- QTest::newRow("a1 b1") << QByteArray("a1 b1") << QByteArray("a1") << QString("a1");
- QTest::newRow(" a1 b1") << QByteArray(" a1 b1") << QByteArray("a1") << QString("a1");
- QTest::newRow("\\n\\n\\nole i dole\\n") << QByteArray("\n\n\nole i dole\n") << QByteArray("ole") << QString("ole");
-
- if (!for_QString) {
- QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << QByteArray() << QString();
- QTest::newRow("utf16-BE (corrupt)") << QByteArray("\xff", 1) << QByteArray("\xff") << QString::fromLatin1("\xff");
- QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << QByteArray() << QString();
- QTest::newRow("utf16-LE (corrupt)") << QByteArray("\xfe", 1) << QByteArray("\xfe") << QString::fromLatin1("\xfe");
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::charPtr_read_operator_FromDevice_data()
-{
- generateStringData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::charPtr_read_operator_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QByteArray, array_output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- char buf[1024];
- stream >> buf;
-
- QCOMPARE((const char *)buf, array_output.constData());
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::stringRef_read_operator_FromDevice_data()
-{
- generateStringData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::stringRef_read_operator_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QString, string_output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- QString tmp;
- stream >> tmp;
-
- QCOMPARE(tmp, string_output);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::byteArray_read_operator_FromDevice_data()
-{
- generateStringData(false);
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::byteArray_read_operator_FromDevice()
-{
- QFETCH(QByteArray, input);
- QFETCH(QByteArray, array_output);
-
- QBuffer buffer(&input);
- buffer.open(QBuffer::ReadOnly);
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- QByteArray array;
- stream >> array;
-
- QCOMPARE(array, array_output);
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_write_operator_ToDevice() \
- { \
- QFETCH(qulonglong, number); \
- QFETCH(QByteArray, data); \
- QFETCH(QByteArray, dataWithSeparators); \
- \
- QBuffer buffer; \
- buffer.open(QBuffer::WriteOnly); \
- QTextStream stream(&buffer); \
- stream.setLocale(QLocale::c()); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data().constData(), data.constData()); \
- \
- QLocale locale("en-US"); \
- buffer.reset(); buffer.buffer().clear(); \
- stream.setLocale(locale); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data(), dataWithSeparators); \
- \
- locale.setNumberOptions(QLocale::OmitGroupSeparator); \
- buffer.reset(); buffer.buffer().clear(); \
- stream.setLocale(locale); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data().constData(), data.constData()); \
- \
- locale = QLocale("de-DE"); \
- buffer.reset(); buffer.buffer().clear(); \
- stream.setLocale(locale); \
- stream << (type)number; \
- stream.flush(); \
- QCOMPARE(buffer.data(), dataWithSeparators.replace(',', '.')); \
- }
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::signedShort_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("-32768") << QByteArray("-32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("-32767") << QByteArray("-32,767");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("0") << QByteArray("0");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(signedShort, signed short)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::unsignedShort_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("0") << QByteArray("0");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(unsignedShort, unsigned short)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::signedInt_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("-2147483648") << QByteArray("-2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("-2147483647") << QByteArray("-2,147,483,647");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("0") << QByteArray("0");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(signedInt, signed int)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::unsignedInt_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("0") << QByteArray("0");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("1") << QByteArray("1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(unsignedInt, unsigned int)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::qlonglong_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("4294967296") << QByteArray("4,294,967,296");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("4294967297") << QByteArray("4,294,967,297");
- QTest::newRow("9223372036854775807") << Q_UINT64_C(9223372036854775807) << QByteArray("9223372036854775807") << QByteArray("9,223,372,036,854,775,807");
- QTest::newRow("9223372036854775808") << Q_UINT64_C(9223372036854775808) << QByteArray("-9223372036854775808") << QByteArray("-9,223,372,036,854,775,808");
- QTest::newRow("9223372036854775809") << Q_UINT64_C(9223372036854775809) << QByteArray("-9223372036854775807") << QByteArray("-9,223,372,036,854,775,807");
- QTest::newRow("18446744073709551615") << Q_UINT64_C(18446744073709551615) << QByteArray("-1") << QByteArray("-1");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(qlonglong, qlonglong)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::qulonglong_write_operator_ToDevice_data()
-{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
- QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
- QTest::newRow("-1") << quint64(-1) << QByteArray("18446744073709551615") << QByteArray("18,446,744,073,709,551,615");
- QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
- QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
- QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
- QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
- QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
- QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
- QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
- QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
- QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
- QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
- QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("4294967296") << QByteArray("4,294,967,296");
- QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("4294967297") << QByteArray("4,294,967,297");
- QTest::newRow("9223372036854775807") << Q_UINT64_C(9223372036854775807) << QByteArray("9223372036854775807") << QByteArray("9,223,372,036,854,775,807");
- QTest::newRow("9223372036854775808") << Q_UINT64_C(9223372036854775808) << QByteArray("9223372036854775808") << QByteArray("9,223,372,036,854,775,808");
- QTest::newRow("9223372036854775809") << Q_UINT64_C(9223372036854775809) << QByteArray("9223372036854775809") << QByteArray("9,223,372,036,854,775,809");
- QTest::newRow("18446744073709551615") << Q_UINT64_C(18446744073709551615) << QByteArray("18446744073709551615") << QByteArray("18,446,744,073,709,551,615");
-}
-IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(qulonglong, qulonglong)
- ;
-
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::generateRealNumbersDataWrite()
-{
- QTest::addColumn<double>("number");
- QTest::addColumn<QByteArray>("data");
- QTest::addColumn<QByteArray>("dataWithSeparators");
-
- QTest::newRow("0") << 0.0 << QByteArray("0") << QByteArray("0");
- QTest::newRow("3.14") << 3.14 << QByteArray("3.14") << QByteArray("3.14");
- QTest::newRow("-3.14") << -3.14 << QByteArray("-3.14") << QByteArray("-3.14");
- QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10") << QByteArray("1.2e+10");
- QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10") << QByteArray("-1.2e+10");
- QTest::newRow("12345") << 12345. << QByteArray("12345") << QByteArray("12,345");
-}
-
-// ------------------------------------------------------------------------------
-#define IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(texttype, type) \
- void tst_QTextStream:: texttype##_write_operator_ToDevice_data() \
- { generateRealNumbersDataWrite(); } \
- void tst_QTextStream:: texttype##_write_operator_ToDevice() \
- { \
- QFETCH(double, number); \
- QFETCH(QByteArray, data); \
- QFETCH(QByteArray, dataWithSeparators); \
- \
- QBuffer buffer; \
- buffer.open(QBuffer::WriteOnly); \
- QTextStream stream(&buffer); \
- stream.setLocale(QLocale::c()); \
- float f = (float)number; \
- stream << f; \
- stream.flush(); \
- QCOMPARE(buffer.data().constData(), data.constData()); \
- \
- buffer.reset(); \
- stream.setLocale(QLocale("en-US")); \
- stream << f; \
- stream.flush(); \
- QCOMPARE(buffer.data(), dataWithSeparators); \
- }
-IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(float, float)
-IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(double, float)
- ;
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::string_write_operator_ToDevice_data()
-{
- QTest::addColumn<QByteArray>("bytedata");
- QTest::addColumn<QString>("stringdata");
- QTest::addColumn<QByteArray>("result");
-
- QTest::newRow("empty") << QByteArray("", 1) << QString(1, '\0') << QByteArray("", 1);
- QTest::newRow("a") << QByteArray("a") << QString("a") << QByteArray("a");
- QTest::newRow("a cow jumped over the moon")
- << QByteArray("a cow jumped over the moon")
- << QString("a cow jumped over the moon")
- << QByteArray("a cow jumped over the moon");
-
- // ### get the utf16-be test on its legs.
- /*
- QTest::newRow("utf16-BE (a cow jumped over the moon)")
- << QByteArray("\xff\xfe\x00\x61\x00\x20\x00\x63\x00\x6f\x00\x77\x00\x20\x00\x6a\x00\x75\x00\x6d\x00\x70\x00\x65\x00\x64\x00\x20\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x20\x00\x74\x00\x68\x00\x65\x00\x20\x00\x6d\x00\x6f\x00\x6f\x00\x6e\x00\x0a", 56)
- << QString("a cow jumped over the moon")
- << QByteArray("a cow jumped over the moon");
- */
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::string_write_operator_ToDevice()
-{
- QFETCH(QByteArray, bytedata);
- QFETCH(QString, stringdata);
- QFETCH(QByteArray, result);
-
- {
- // char*
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << bytedata.constData();
- stream.flush();
- QCOMPARE(buf.buffer().constData(), result.constData());
- }
- {
- // QByteArray
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << bytedata;
- stream.flush();
- QCOMPARE(buf.buffer().constData(), result.constData());
- }
- {
- // QString
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << stringdata;
- stream.flush();
- QCOMPARE(buf.buffer().constData(), result.constData());
- }
-}
-
-void tst_QTextStream::latin1String_write_operator_ToDevice()
-{
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << QLatin1String("No explicit length");
- stream << QLatin1String("Explicit length - ignore this part", 15);
- stream.flush();
- QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
-}
-
-void tst_QTextStream::stringref_write_operator_ToDevice()
-{
- QBuffer buf;
- buf.open(QBuffer::WriteOnly);
- QTextStream stream(&buf);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- const QString expected = "No explicit lengthExplicit length";
-
- stream << expected.leftRef(18);
- stream << expected.midRef(18);
- stream.flush();
- QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::useCase1()
-{
- QFile::remove("testfile");
- QFile file("testfile");
- QVERIFY(file.open(QFile::ReadWrite));
-
- {
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << 4.15 << ' ' << QByteArray("abc") << ' ' << QString("ole");
- }
-
- file.seek(0);
- QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
- file.seek(0);
-
- {
- double d;
- QByteArray a;
- QString s;
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream >> d;
- stream >> a;
- stream >> s;
-
- QCOMPARE(d, 4.15);
- QCOMPARE(a, QByteArray("abc"));
- QCOMPARE(s, QString("ole"));
- }
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::useCase2()
-{
- QFile::remove("testfile");
- QFile file("testfile");
- QVERIFY(file.open(QFile::ReadWrite));
-
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
- stream << 4.15 << ' ' << QByteArray("abc") << ' ' << QString("ole");
-
- file.close();
- QVERIFY(file.open(QFile::ReadWrite));
-
- QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
-
- file.close();
- QVERIFY(file.open(QFile::ReadWrite));
-
- double d;
- QByteArray a;
- QString s;
- QTextStream stream2(&file);
- stream2.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream2.setAutoDetectUnicode(true);
-
- stream2 >> d;
- stream2 >> a;
- stream2 >> s;
-
- QCOMPARE(d, 4.15);
- QCOMPARE(a, QByteArray("abc"));
- QCOMPARE(s, QString("ole"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::manipulators_data()
-{
- QTest::addColumn<int>("flags");
- QTest::addColumn<int>("width");
- QTest::addColumn<double>("realNumber");
- QTest::addColumn<int>("intNumber");
- QTest::addColumn<QString>("textData");
- QTest::addColumn<QByteArray>("result");
-
- QTest::newRow("no flags") << 0 << 0 << 5.0 << 5 << QString("five") << QByteArray("55five");
- QTest::newRow("rightadjust") << 0 << 10 << 5.0 << 5 << QString("five") << QByteArray(" 5 5 five");
-
- // ### FIX
-// QTest::newRow("leftadjust") << int(QTextStream::left) << 10 << 5.0 << 5 << QString("five") << QByteArray("5 5 five ");
-// QTest::newRow("showpos") << int(QTextStream::showpos) << 10 << 5.0 << 5 << QString("five") << QByteArray(" +5 +5 five");
-// QTest::newRow("showpos2") << int(QTextStream::showpos) << 5 << 3.14 << -5 << QString("five") << QByteArray("+3.14 -5 five");
-// QTest::newRow("hex") << int(QTextStream::hex | QTextStream::showbase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0x5 five");
-// QTest::newRow("hex uppercase") << int(QTextStream::hex | QTextStream::uppercase | QTextStream::showbase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0X5 five");
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::manipulators()
-{
-// QFETCH(int, flags);
- QFETCH(int, width);
- QFETCH(double, realNumber);
- QFETCH(int, intNumber);
- QFETCH(QString, textData);
- QFETCH(QByteArray, result);
-
- QBuffer buffer;
- buffer.open(QBuffer::WriteOnly);
-
- QTextStream stream(&buffer);
- stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
- stream.setAutoDetectUnicode(true);
-
-// stream.setFlags(flags);
- stream.setFieldWidth(width);
- stream << realNumber;
- stream << intNumber;
- stream << textData;
- stream.flush();
-
- QCOMPARE(buffer.data().constData(), result.constData());
-}
-
-void tst_QTextStream::generateBOM()
-{
- QFile::remove("bom.txt");
- {
- QFile file("bom.txt");
- QVERIFY(file.open(QFile::ReadWrite | QFile::Truncate));
-
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("UTF-16LE"));
- stream << "Hello" << endl;
-
- file.close();
- QVERIFY(file.open(QFile::ReadOnly));
- QCOMPARE(file.readAll(), QByteArray("\x48\x00\x65\00\x6c\00\x6c\00\x6f\x00\x0a\x00", 12));
- }
-
- QFile::remove("bom.txt");
- {
- QFile file("bom.txt");
- QVERIFY(file.open(QFile::ReadWrite | QFile::Truncate));
-
- QTextStream stream(&file);
- stream.setCodec(QTextCodec::codecForName("UTF-16LE"));
- stream << bom << "Hello" << endl;
-
- file.close();
- QVERIFY(file.open(QFile::ReadOnly));
- QCOMPARE(file.readAll(), QByteArray("\xff\xfe\x48\x00\x65\00\x6c\00\x6c\00\x6f\x00\x0a\x00", 14));
- }
-}
-
-void tst_QTextStream::readBomSeekBackReadBomAgain()
-{
- QFile::remove("utf8bom");
- QFile file("utf8bom");
- QVERIFY(file.open(QFile::ReadWrite));
- file.write("\xef\xbb\xbf""Andreas");
- file.seek(0);
- QCOMPARE(file.pos(), qint64(0));
-
- QTextStream stream(&file);
- stream.setCodec("UTF-8");
- QString Andreas;
- stream >> Andreas;
- QCOMPARE(Andreas, QString("Andreas"));
- stream.seek(0);
- stream >> Andreas;
- QCOMPARE(Andreas, QString("Andreas"));
-}
-
-// ------------------------------------------------------------------------------
-void tst_QTextStream::status_real_read_data()
-{
- QTest::addColumn<QString>("input");
- QTest::addColumn<double>("expected_f");
- QTest::addColumn<QString>("expected_w");
- QTest::addColumn<QList<int> >("results");
-
- QTest::newRow("1.23 abc ") << QString("1.23 abc ") << 1.23 << QString("abc")
- << (QList<int>()
- << (int)QTextStream::Ok
- << (int)QTextStream::ReadCorruptData
- << (int)QTextStream::Ok
- << (int)QTextStream::Ok
- << (int)QTextStream::ReadPastEnd);
-}
-
-void tst_QTextStream::status_real_read()
-{
- QFETCH(QString, input);
- QFETCH(double, expected_f);
- QFETCH(QString, expected_w);
- QFETCH(QList<int>, results);
-
- QTextStream s(&input);
- double f = 0.0;
- QString w;
- s >> f;
- QCOMPARE((int)s.status(), results.at(0));
- QCOMPARE(f, expected_f);
- s >> f;
- QCOMPARE((int)s.status(), results.at(1));
- s.resetStatus();
- QCOMPARE((int)s.status(), results.at(2));
- s >> w;
- QCOMPARE((int)s.status(), results.at(3));
- QCOMPARE(w, expected_w);
- s >> f;
- QCOMPARE((int)s.status(), results.at(4));
-}
-
-void tst_QTextStream::status_integer_read()
-{
- QTextStream s("123 abc ");
- int i;
- QString w;
- s >> i;
- QCOMPARE(s.status(), QTextStream::Ok);
- s >> i;
- QCOMPARE(s.status(), QTextStream::ReadCorruptData);
- s.resetStatus();
- QCOMPARE(s.status(), QTextStream::Ok);
- s >> w;
- QCOMPARE(s.status(), QTextStream::Ok);
- QCOMPARE(w, QString("abc"));
- s >> i;
- QCOMPARE(s.status(), QTextStream::ReadPastEnd);
-}
-
-void tst_QTextStream::status_word_read()
-{
- QTextStream s("abc ");
- QString w;
- s >> w;
- QCOMPARE(s.status(), QTextStream::Ok);
- s >> w;
- QCOMPARE(s.status(), QTextStream::ReadPastEnd);
-}
-
-class FakeBuffer : public QBuffer
-{
-protected:
- qint64 writeData(const char *c, qint64 i) { return m_lock ? 0 : QBuffer::writeData(c, i); }
-public:
- FakeBuffer(bool locked = false) : m_lock(locked) {}
- void setLocked(bool locked) { m_lock = locked; }
-private:
- bool m_lock;
-};
-
-void tst_QTextStream::status_write_error()
-{
- FakeBuffer fb(false);
- QVERIFY(fb.open(QBuffer::ReadWrite));
- QTextStream fs(&fb);
- fs.setCodec(QTextCodec::codecForName("latin1"));
- /* first write some initial content */
- fs << "hello";
- fs.flush();
- QCOMPARE(fs.status(), QTextStream::Ok);
- QCOMPARE(fb.data(), QByteArray("hello"));
- /* then test that writing can cause an error */
- fb.setLocked(true);
- fs << "error";
- fs.flush();
- QCOMPARE(fs.status(), QTextStream::WriteFailed);
- QCOMPARE(fb.data(), QByteArray("hello"));
- /* finally test that writing after an error doesn't change the stream any more */
- fb.setLocked(false);
- fs << "can't do that";
- fs.flush();
- QCOMPARE(fs.status(), QTextStream::WriteFailed);
- QCOMPARE(fb.data(), QByteArray("hello"));
-}
-
-void tst_QTextStream::alignAccountingStyle()
-{
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(4);
- out.setPadChar('0');
- out << -1;
- QCOMPARE(result, QLatin1String("-001"));
- }
-
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(4);
- out.setPadChar('0');
- out << "-1";
- QCOMPARE(result, QLatin1String("00-1"));
- }
-
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(6);
- out.setPadChar('0');
- out << -1.2;
- QCOMPARE(result, QLatin1String("-001.2"));
- }
-
- {
- QString result;
- QTextStream out(&result);
- out.setFieldAlignment(QTextStream::AlignAccountingStyle);
- out.setFieldWidth(6);
- out.setPadChar('0');
- out << "-1.2";
- QCOMPARE(result, QLatin1String("00-1.2"));
- }
-}
-
-void tst_QTextStream::setCodec()
-{
- QByteArray ba("\xe5 v\xe6r\n\xc3\xa5 v\xc3\xa6r\n");
- QString res = QLatin1String("\xe5 v\xe6r");
-
- QTextStream stream(ba);
- stream.setCodec("ISO 8859-1");
- QCOMPARE(stream.readLine(),res);
- stream.setCodec("UTF-8");
- QCOMPARE(stream.readLine(),res);
-}
-
-void tst_QTextStream::double_write_with_flags_data()
-{
- QTest::addColumn<double>("number");
- QTest::addColumn<QString>("output");
- QTest::addColumn<int>("numberFlags");
- QTest::addColumn<int>("realNumberNotation");
-
- QTest::newRow("-ForceSign") << -1.23 << QString("-1.23") << (int)QTextStream::ForceSign << 0;
- QTest::newRow("+ForceSign") << 1.23 << QString("+1.23") << (int)QTextStream::ForceSign << 0;
- QTest::newRow("inf") << qInf() << QString("inf") << 0 << 0;
- QTest::newRow("-inf") << -qInf() << QString("-inf") << 0 << 0;
- QTest::newRow("inf uppercase") << qInf() << QString("INF") << (int)QTextStream::UppercaseDigits << 0;
- QTest::newRow("-inf uppercase") << -qInf() << QString("-INF") << (int)QTextStream::UppercaseDigits << 0;
- QTest::newRow("nan") << qQNaN() << QString("nan") << 0 << 0;
- QTest::newRow("NAN") << qQNaN() << QString("NAN") << (int)QTextStream::UppercaseDigits << 0;
- QTest::newRow("scientific") << 1.234567e+02 << QString("1.234567e+02") << 0 << (int)QTextStream::ScientificNotation;
- QTest::newRow("scientific2") << 1.234567e+02 << QString("1.234567e+02") << (int)QTextStream::UppercaseBase << (int)QTextStream::ScientificNotation;
- QTest::newRow("scientific uppercase") << 1.234567e+02 << QString("1.234567E+02") << (int)QTextStream::UppercaseDigits << (int)QTextStream::ScientificNotation;
-}
-
-void tst_QTextStream::double_write_with_flags()
-{
- QFETCH(double, number);
- QFETCH(QString, output);
- QFETCH(int, numberFlags);
- QFETCH(int, realNumberNotation);
-
- QString buf;
- QTextStream stream(&buf);
- if (numberFlags)
- stream.setNumberFlags(QTextStream::NumberFlag(numberFlags));
- if (realNumberNotation)
- stream.setRealNumberNotation(QTextStream::RealNumberNotation(realNumberNotation));
- stream << number;
- QCOMPARE(buf, output);
-}
-
-void tst_QTextStream::double_write_with_precision_data()
-{
- QTest::addColumn<int>("precision");
- QTest::addColumn<double>("value");
- QTest::addColumn<QString>("result");
-
- QTest::ignoreMessage(QtWarningMsg, "QTextStream::setRealNumberPrecision: Invalid precision (-1)");
- QTest::newRow("-1") << -1 << 3.14159 << QString("3.14159");
- QTest::newRow("0") << 0 << 3.14159 << QString("3");
- QTest::newRow("1") << 1 << 3.14159 << QString("3");
- QTest::newRow("2") << 2 << 3.14159 << QString("3.1");
- QTest::newRow("3") << 3 << 3.14159 << QString("3.14");
- QTest::newRow("5") << 5 << 3.14159 << QString("3.1416");
- QTest::newRow("6") << 6 << 3.14159 << QString("3.14159");
- QTest::newRow("7") << 7 << 3.14159 << QString("3.14159");
- QTest::newRow("10") << 10 << 3.14159 << QString("3.14159");
-}
-
-void tst_QTextStream::double_write_with_precision()
-{
- QFETCH(int, precision);
- QFETCH(double, value);
- QFETCH(QString, result);
-
- QString buf;
- QTextStream stream(&buf);
- stream.setRealNumberPrecision(precision);
- stream << value;
- QCOMPARE(buf, result);
-}
-
-void tst_QTextStream::int_read_with_locale_data()
-{
- QTest::addColumn<QString>("locale");
- QTest::addColumn<QString>("input");
- QTest::addColumn<int>("output");
-
- QTest::newRow("C -123") << QString("C") << QString("-123") << -123;
- QTest::newRow("C +123") << QString("C") << QString("+123") << 123;
- QTest::newRow("C 12345") << QString("C") << QString("12345") << 12345;
- QTest::newRow("C 12,345") << QString("C") << QString("12,345") << 12;
- QTest::newRow("C 12.345") << QString("C") << QString("12.345") << 12;
-
- QTest::newRow("de_DE -123") << QString("de_DE") << QString("-123") << -123;
- QTest::newRow("de_DE +123") << QString("de_DE") << QString("+123") << 123;
- QTest::newRow("de_DE 12345") << QString("de_DE") << QString("12345") << 12345;
- QTest::newRow("de_DE 12.345") << QString("de_DE") << QString("12.345") << 12345;
- QTest::newRow("de_DE .12345") << QString("de_DE") << QString(".12345") << 0;
-}
-
-void tst_QTextStream::int_read_with_locale()
-{
- QFETCH(QString, locale);
- QFETCH(QString, input);
- QFETCH(int, output);
-
- QTextStream stream(&input);
- stream.setLocale(locale);
- int result;
- stream >> result;
- QCOMPARE(result, output);
-}
-
-void tst_QTextStream::int_write_with_locale_data()
-{
- QTest::addColumn<QString>("locale");
- QTest::addColumn<int>("numberFlags");
- QTest::addColumn<int>("input");
- QTest::addColumn<QString>("output");
-
- QTest::newRow("C -123") << QString("C") << 0 << -123 << QString("-123");
- QTest::newRow("C +123") << QString("C") << (int)QTextStream::ForceSign << 123 << QString("+123");
- QTest::newRow("C 12345") << QString("C") << 0 << 12345 << QString("12345");
-
- QTest::newRow("de_DE -123") << QString("de_DE") << 0 << -123 << QString("-123");
- QTest::newRow("de_DE +123") << QString("de_DE") << (int)QTextStream::ForceSign << 123 << QString("+123");
- QTest::newRow("de_DE 12345") << QString("de_DE") << 0 << 12345 << QString("12.345");
-}
-
-void tst_QTextStream::int_write_with_locale()
-{
- QFETCH(QString, locale);
- QFETCH(int, numberFlags);
- QFETCH(int, input);
- QFETCH(QString, output);
-
- QString result;
- QTextStream stream(&result);
- stream.setLocale(locale);
- if (numberFlags)
- stream.setNumberFlags(QTextStream::NumberFlags(numberFlags));
- stream << input;
- QCOMPARE(result, output);
-}
-
-void tst_QTextStream::textModeOnEmptyRead()
-{
- const QString filename(tempDir.path() + QLatin1String("/textmodetest.txt"));
-
- QFile file(filename);
- QVERIFY2(file.open(QIODevice::ReadWrite | QIODevice::Text), qPrintable(file.errorString()));
- QTextStream stream(&file);
- QVERIFY(file.isTextModeEnabled());
- QString emptyLine = stream.readLine(); // Text mode flag cleared here
- QVERIFY(file.isTextModeEnabled());
-}
-
-
-// ------------------------------------------------------------------------------
-
-QTEST_MAIN(tst_QTextStream)
-#include "tst_qtextstream.moc"
-
diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro b/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro
index 7480bd45f6..da1f87e76a 100644
--- a/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro
+++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/qabstractitemmodel.pro
@@ -1,9 +1,9 @@
CONFIG += testcase
TARGET = tst_qabstractitemmodel
-QT = core testlib
+QT = core testlib gui
-mtdir = ../../../other/modeltest
+mtdir = ../../../other/qabstractitemmodelutils
INCLUDEPATH += $$PWD/$${mtdir}
-SOURCES = tst_qabstractitemmodel.cpp $${mtdir}/dynamictreemodel.cpp $${mtdir}/modeltest.cpp
-HEADERS = $${mtdir}/dynamictreemodel.h $${mtdir}/modeltest.h
+SOURCES = tst_qabstractitemmodel.cpp $${mtdir}/dynamictreemodel.cpp
+HEADERS = $${mtdir}/dynamictreemodel.h
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp
index 9f67ccd9c9..b960ca9220 100644
--- a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp
@@ -31,6 +31,7 @@
#include <QtCore/QSortFilterProxyModel>
#include <QtCore/QStringListModel>
+#include <QtGui/QStandardItemModel>
#include "dynamictreemodel.h"
@@ -105,6 +106,8 @@ private slots:
void testFunctionPointerSignalConnection();
+ void checkIndex();
+
private:
DynamicTreeModel *m_model;
};
@@ -2283,6 +2286,75 @@ void tst_QAbstractItemModel::testFunctionPointerSignalConnection()
// model.rowsInserted(QModelIndex(), 0, 0);
}
+void tst_QAbstractItemModel::checkIndex()
+{
+ const QRegularExpression ignorePattern("^Index QModelIndex");
+
+ // checkIndex is QAbstractItemModel API; using QStandardItem as an easy
+ // way to build a tree model
+ QStandardItemModel model;
+ QStandardItem *topLevel = new QStandardItem("topLevel");
+ model.appendRow(topLevel);
+
+ topLevel->appendRow(new QStandardItem("child1"));
+ topLevel->appendRow(new QStandardItem("child2"));
+
+ QVERIFY(model.checkIndex(QModelIndex()));
+ QVERIFY(model.checkIndex(QModelIndex(), QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QVERIFY(model.checkIndex(QModelIndex(), QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(QModelIndex(), QAbstractItemModel::CheckIndexOption::IndexIsValid));
+
+ QModelIndex topLevelIndex = model.index(0, 0);
+ QVERIFY(topLevelIndex.isValid());
+ QVERIFY(model.checkIndex(topLevelIndex));
+ QVERIFY(model.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QVERIFY(model.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QVERIFY(model.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+
+ QModelIndex childIndex = model.index(0, 0, topLevelIndex);
+ QVERIFY(childIndex.isValid());
+ QVERIFY(model.checkIndex(childIndex));
+ QVERIFY(model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QVERIFY(model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+
+ childIndex = model.index(1, 0, topLevelIndex);
+ QVERIFY(childIndex.isValid());
+ QVERIFY(model.checkIndex(childIndex));
+ QVERIFY(model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QVERIFY(model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+
+ topLevel->removeRow(1);
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(childIndex));
+ QVERIFY(model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(childIndex, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+
+ QStandardItemModel model2;
+ model2.appendRow(new QStandardItem("otherTopLevel"));
+ topLevelIndex = model2.index(0, 0);
+ QVERIFY(topLevelIndex.isValid());
+ QVERIFY(model2.checkIndex(topLevelIndex));
+ QVERIFY(model2.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QVERIFY(model2.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QVERIFY(model2.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(topLevelIndex));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::DoNotUseParent));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::ParentIsInvalid));
+ QTest::ignoreMessage(QtWarningMsg, ignorePattern);
+ QVERIFY(!model.checkIndex(topLevelIndex, QAbstractItemModel::CheckIndexOption::IndexIsValid));
+}
QTEST_MAIN(tst_QAbstractItemModel)
#include "tst_qabstractitemmodel.moc"
diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
index 6c870737da..886941bff6 100644
--- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
@@ -477,8 +477,8 @@ void tst_QAbstractProxyModel::testSwappingRowsProxy()
for (int row = 0; row < defaultModel.rowCount(); ++row) {
QModelIndex left = proxy.index(row, 0, QModelIndex());
QModelIndex right = proxy.index(row, 1, QModelIndex());
- QCOMPARE(left.sibling(left.row(), 1), right);
- QCOMPARE(right.sibling(right.row(), 0), left);
+ QCOMPARE(left.siblingAtColumn(1), right);
+ QCOMPARE(right.siblingAtColumn(0), left);
}
}
diff --git a/tests/auto/corelib/itemmodels/qidentityproxymodel/qidentityproxymodel.pro b/tests/auto/corelib/itemmodels/qidentityproxymodel/qidentityproxymodel.pro
index ba32f02962..ddec0d2354 100644
--- a/tests/auto/corelib/itemmodels/qidentityproxymodel/qidentityproxymodel.pro
+++ b/tests/auto/corelib/itemmodels/qidentityproxymodel/qidentityproxymodel.pro
@@ -1,8 +1,8 @@
CONFIG += testcase
TARGET = tst_qidentityproxymodel
-mtdir = ../../../other/modeltest
+mtdir = ../../../other/qabstractitemmodelutils
INCLUDEPATH += $$PWD/$${mtdir}
QT += testlib
-SOURCES += tst_qidentityproxymodel.cpp $${mtdir}/dynamictreemodel.cpp $${mtdir}/modeltest.cpp
-HEADERS += $${mtdir}/dynamictreemodel.h $${mtdir}/modeltest.h
+SOURCES += tst_qidentityproxymodel.cpp $${mtdir}/dynamictreemodel.cpp
+HEADERS += $${mtdir}/dynamictreemodel.h
diff --git a/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp b/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp
index 564b8547b1..f8c5c92677 100644
--- a/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp
@@ -360,7 +360,7 @@ class AppendStringProxy : public QIdentityProxyModel
public:
QVariant data(const QModelIndex &index, int role) const
{
- const QVariant result = sourceModel()->data(index, role);
+ const QVariant result = QIdentityProxyModel::data(index, role);
if (role != Qt::DisplayRole)
return result;
return result.toString() + "_appended";
diff --git a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp
index 8ebb860edd..7cd220e684 100644
--- a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp
@@ -428,6 +428,14 @@ void checkChildren(QAbstractItemModel *currentModel, const QModelIndex &parent,
const QModelIndex sibling = topLeftChild.sibling( r, c );
QVERIFY( index == sibling );
}
+ if (r == topLeftChild.row()) {
+ const QModelIndex sibling = topLeftChild.siblingAtColumn( c );
+ QVERIFY( index == sibling );
+ }
+ if (c == topLeftChild.column()) {
+ const QModelIndex sibling = topLeftChild.siblingAtRow( r );
+ QVERIFY( index == sibling );
+ }
// Some basic checking on the index that is returned
QCOMPARE(index.model(), currentModel);
@@ -533,9 +541,6 @@ void tst_QItemModel::data()
// A valid index should have a valid qvariant data
QVERIFY(currentModel->index(0,0).isValid());
- // shouldn't be able to set data on an invalid index
- QCOMPARE(currentModel->setData(QModelIndex(), "foo", Qt::DisplayRole), false);
-
// General Purpose roles
QVariant variant = currentModel->data(currentModel->index(0,0), Qt::ToolTipRole);
if (variant.isValid()) {
@@ -605,7 +610,6 @@ void tst_QItemModel::setData()
QVERIFY(currentModel);
QSignalSpy spy(currentModel, &QAbstractItemModel::dataChanged);
QVERIFY(spy.isValid());
- QCOMPARE(currentModel->setData(QModelIndex(), QVariant()), false);
QCOMPARE(spy.count(), 0);
QFETCH(bool, isEmpty);
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/qsortfilterproxymodel.pro b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/qsortfilterproxymodel.pro
index 099f666def..dfa8b9fa1b 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/qsortfilterproxymodel.pro
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/qsortfilterproxymodel.pro
@@ -2,8 +2,8 @@ CONFIG += testcase
TARGET = tst_qsortfilterproxymodel
QT += widgets testlib
-mtdir = ../../../other/modeltest
+mtdir = ../../../other/qabstractitemmodelutils
INCLUDEPATH += $$PWD/$${mtdir}
-SOURCES += tst_qsortfilterproxymodel.cpp $${mtdir}/dynamictreemodel.cpp $${mtdir}/modeltest.cpp
-HEADERS += $${mtdir}/dynamictreemodel.h $${mtdir}/modeltest.h
+SOURCES += tst_qsortfilterproxymodel.cpp $${mtdir}/dynamictreemodel.cpp
+HEADERS += $${mtdir}/dynamictreemodel.h
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index 1fb51490db..1acedf4271 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -28,7 +28,6 @@
#include <QtTest/QtTest>
#include "dynamictreemodel.h"
-#include "modeltest.h"
#include <QtCore/QCoreApplication>
#include <QtGui/QStandardItem>
@@ -152,6 +151,7 @@ private slots:
void emitLayoutChangedOnlyIfSortingChanged_data();
void emitLayoutChangedOnlyIfSortingChanged();
+ void checkSetNewModel();
protected:
void buildHierarchy(const QStringList &data, QAbstractItemModel *model);
void checkHierarchy(const QStringList &data, const QAbstractItemModel *model);
@@ -1873,9 +1873,6 @@ void tst_QSortFilterProxyModel::changeFilter()
QCOMPARE(args.at(2).toInt(), finalRemoveIntervals.at(i).second);
}
-#ifdef Q_OS_IRIX
- QEXPECT_FAIL("filter (2)", "Not reliable on IRIX", Abort);
-#endif
QCOMPARE(finalInsertSpy.count(), insertIntervals.count());
for (int i = 0; i < finalInsertSpy.count(); ++i) {
QList<QVariant> args = finalInsertSpy.at(i);
@@ -3314,7 +3311,7 @@ void tst_QSortFilterProxyModel::filteredColumns()
FilteredColumnProxyModel *proxy = new FilteredColumnProxyModel(this);
proxy->setSourceModel(model);
- new ModelTest(proxy, this);
+ new QAbstractItemModelTester(proxy, this);
ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
insertCommand->setNumCols(2);
@@ -3353,7 +3350,7 @@ void tst_QSortFilterProxyModel::headerDataChanged()
QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this);
proxy->setSourceModel(model);
- new ModelTest(proxy, this);
+ new QAbstractItemModelTester(proxy, this);
model->emitHeaderDataChanged();
}
@@ -4072,11 +4069,11 @@ public:
}
bool canDropMimeData(const QMimeData *, Qt::DropAction,
- int row, int /* column */, const QModelIndex & /* parent */) const Q_DECL_OVERRIDE
+ int row, int /* column */, const QModelIndex & /* parent */) const override
{ return row == 1; }
bool dropMimeData(const QMimeData *, Qt::DropAction,
- int row, int /* column */, const QModelIndex & /* parent */) Q_DECL_OVERRIDE
+ int row, int /* column */, const QModelIndex & /* parent */) override
{ return row == 1; }
};
@@ -4131,7 +4128,7 @@ void tst_QSortFilterProxyModel::resortingDoesNotBreakTreeModels()
proxy.sort(0);
proxy.setSourceModel(treeModel);
- ModelTest modelTest(&proxy);
+ QAbstractItemModelTester modelTester(&proxy);
QCOMPARE(proxy.rowCount(), 2);
e1->setText("entry1");
@@ -4230,6 +4227,10 @@ public:
QModelIndex index(int, int, const QModelIndex& parent = QModelIndex()) const override
{
+ // QTBUG-44962: Would we always expect the parent to belong to the model
+ qDebug() << parent.model() << this;
+ Q_ASSERT(!parent.isValid() || parent.model() == this);
+
quintptr parentId = (parent.isValid()) ? parent.internalId() : 0;
if (parentId >= m_depth)
return QModelIndex();
@@ -4510,5 +4511,21 @@ void tst_QSortFilterProxyModel::dynamicFilterWithoutSort()
QCOMPARE(resetSpy.count(), 1);
}
+void tst_QSortFilterProxyModel::checkSetNewModel()
+{
+ QTreeView tv;
+ StepTreeModel model1;
+ model1.setDepth(4);
+ StepTreeModel model2;
+ model2.setDepth(4);
+
+ QSortFilterProxyModel proxy;
+ proxy.setSourceModel(&model1);
+ tv.setModel(&proxy);
+ tv.show();
+ tv.expandAll(); // create persistent indexes
+ proxy.setSourceModel(&model2);
+}
+
QTEST_MAIN(tst_QSortFilterProxyModel)
#include "tst_qsortfilterproxymodel.moc"
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp
index 852d9adb46..7cae554963 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp
@@ -34,6 +34,8 @@
Q_DECLARE_METATYPE(QModelIndex)
+static const int s_filterRole = Qt::UserRole + 1;
+
class ModelSignalSpy : public QObject {
Q_OBJECT
public:
@@ -67,7 +69,7 @@ private Q_SLOTS:
mSignals << QStringLiteral("rowsMoved");
}
void onDataChanged(const QModelIndex &from, const QModelIndex& ) {
- mSignals << QStringLiteral("dataChanged(%1)").arg(from.data().toString());
+ mSignals << QStringLiteral("dataChanged(%1)").arg(from.data(Qt::DisplayRole).toString());
}
void onLayoutChanged() {
mSignals << QStringLiteral("layoutChanged");
@@ -78,7 +80,7 @@ private Q_SLOTS:
private:
QString textForRowSpy(const QModelIndex &parent, int start, int end)
{
- QString txt = parent.data().toString();
+ QString txt = parent.data(Qt::DisplayRole).toString();
if (!txt.isEmpty())
txt += QLatin1Char('.');
txt += QString::number(start+1);
@@ -95,13 +97,14 @@ public:
TestModel(QAbstractItemModel *sourceModel)
: QSortFilterProxyModel()
{
+ setFilterRole(s_filterRole);
setRecursiveFilteringEnabled(true);
setSourceModel(sourceModel);
}
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
{
- return sourceModel()->index(sourceRow, 0, sourceParent).data(Qt::UserRole +1).toBool()
+ return sourceModel()->index(sourceRow, 0, sourceParent).data(s_filterRole).toBool()
&& QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
}
};
@@ -114,7 +117,7 @@ public:
// - - E
// as a single string, englobing children in brackets, like this:
// [A[B[C D] E]]
-// In addition, items that match the filtering (data(UserRole+1) == true) have a * after their value.
+// In addition, items that match the filtering (data(s_filterRole) == true) have a * after their value.
static QString treeAsString(const QAbstractItemModel &model, const QModelIndex &parent = QModelIndex())
{
QString ret;
@@ -126,8 +129,8 @@ static QString treeAsString(const QAbstractItemModel &model, const QModelIndex &
ret += ' ';
}
const QModelIndex child = model.index(row, 0, parent);
- ret += child.data().toString();
- if (child.data(Qt::UserRole+1).toBool())
+ ret += child.data(Qt::DisplayRole).toString();
+ if (child.data(s_filterRole).toBool())
ret += QLatin1Char('*');
ret += treeAsString(model, child);
}
@@ -146,7 +149,7 @@ static void fillModel(QStandardItemModel &model, const QString &str)
const QChar ch = str.at(i);
if ((ch == '[' || ch == ']' || ch == ' ') && !data.isEmpty()) {
if (data.endsWith('*')) {
- item->setData(true, Qt::UserRole + 1);
+ item->setData(true, s_filterRole);
data.chop(1);
}
item->setText(data);
@@ -231,10 +234,10 @@ private Q_SLOTS:
QCOMPARE(treeAsString(proxy), QStringLiteral("[1[1.1[ME*]]]"));
+ // filterRole is Qt::UserRole + 1, so parents are not checked and
+ // therefore no dataChanged for parents
QCOMPARE(spy.mSignals, QStringList()
- << QStringLiteral("dataChanged(ME)")
- << QStringLiteral("dataChanged(1.1)")
- << QStringLiteral("dataChanged(1)"));
+ << QStringLiteral("dataChanged(ME)"));
}
// Test changing a role that is unrelated to the filtering, in a hidden item.
@@ -319,8 +322,8 @@ private Q_SLOTS:
ModelSignalSpy spy(proxy);
// When changing the data on the designated item to show this row
QStandardItem *itemToChange = itemByText(model, add);
- QVERIFY(!itemToChange->data().toBool());
- itemToChange->setData(true);
+ QVERIFY(!itemToChange->data(s_filterRole).toBool());
+ itemToChange->setData(true, s_filterRole);
// The proxy should update as expected
QCOMPARE(treeAsString(proxy), expectedProxyStr);
@@ -408,8 +411,8 @@ private Q_SLOTS:
// When changing the data on the designated item to exclude this row again
QStandardItem *itemToChange = itemByText(model, remove);
- QVERIFY(itemToChange->data().toBool());
- itemToChange->setData(false);
+ QVERIFY(itemToChange->data(s_filterRole).toBool());
+ itemToChange->setData(false, s_filterRole);
// The proxy should update as expected
QCOMPARE(treeAsString(proxy), expectedProxyStr);
@@ -431,7 +434,7 @@ private Q_SLOTS:
ModelSignalSpy spy(proxy);
QStandardItem *item_1_1_1 = model.item(0)->child(0)->child(0);
QStandardItem *item_1_1_1_1 = new QStandardItem(QStringLiteral("1.1.1.1"));
- item_1_1_1_1->setData(true);
+ item_1_1_1_1->setData(true, s_filterRole);
item_1_1_1->appendRow(item_1_1_1_1);
QCOMPARE(treeAsString(proxy), QStringLiteral("[1[1.1[1.1.1[1.1.1.1*]]]]"));
@@ -456,7 +459,7 @@ private Q_SLOTS:
ModelSignalSpy spy(proxy);
{
QStandardItem *item_1_1_1_1 = new QStandardItem(QStringLiteral("1.1.1.1"));
- item_1_1_1_1->setData(true);
+ item_1_1_1_1->setData(true, s_filterRole);
QStandardItem *item_1_1_1 = model.item(0)->child(0)->child(0);
item_1_1_1->appendRow(item_1_1_1_1);
}
@@ -484,7 +487,7 @@ private Q_SLOTS:
{
QStandardItem *item_1_1_1 = new QStandardItem(QStringLiteral("1.1.1"));
QStandardItem *item_1_1_1_1 = new QStandardItem(QStringLiteral("1.1.1.1"));
- item_1_1_1_1->setData(true);
+ item_1_1_1_1->setData(true, s_filterRole);
item_1_1_1->appendRow(item_1_1_1_1);
QStandardItem *item_1_1 = model.item(0)->child(0);
@@ -511,7 +514,7 @@ private Q_SLOTS:
{
QStandardItem *item_1_1_2 = new QStandardItem(QStringLiteral("1.1.2"));
QStandardItem *item_1_1_2_1 = new QStandardItem(QStringLiteral("1.1.2.1"));
- item_1_1_2_1->setData(true);
+ item_1_1_2_1->setData(true, s_filterRole);
item_1_1_2->appendRow(item_1_1_2_1);
QStandardItem *item_1_1 = model.item(0)->child(0);
@@ -706,6 +709,7 @@ private Q_SLOTS:
ModelSignalSpy spy(proxy);
//qDebug() << "setFilterFixedString";
+ proxy.setFilterRole(Qt::DisplayRole);
proxy.setFilterFixedString(filter);
QCOMPARE(treeAsString(proxy), expectedProxyStr);
diff --git a/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp b/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
index adc8c59bf7..9a54c0a70d 100644
--- a/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
@@ -112,12 +112,6 @@ void tst_QStringListModel::rowsAboutToBeRemoved_rowsRemoved_data()
QStringList res3;
QTest::newRow( "data3" ) << strings3 << 0 << 5 << aboutto3 << res3;
- /* Not sure if this is a valid test */
- QStringList strings4; strings4 << "One" << "Two" << "Three" << "Four" << "Five";
- QStringList aboutto4; aboutto4 << "Five" << "";
- QStringList res4; res4 << "One" << "Two" << "Three" << "Four";
- QTest::newRow( "data4" ) << strings4 << 4 << 2 << aboutto4 << res4;
-
/*
* Keep this, template to add more data
QStringList strings2; strings2 << "One" << "Two" << "Three" << "Four" << "Five";
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index 22f0d8ecaa..5e9dbdd226 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -56,7 +56,7 @@ class ThreadedEventReceiver : public QObject
Q_OBJECT
public:
QList<int> recordedEvents;
- bool event(QEvent *event) Q_DECL_OVERRIDE
+ bool event(QEvent *event) override
{
if (event->type() != QEvent::Type(QEvent::User + 1))
return QObject::event(event);
@@ -70,7 +70,7 @@ public:
class Thread : public QDaemonThread
{
- void run() Q_DECL_OVERRIDE
+ void run() override
{
QThreadData *data = QThreadData::current();
QVERIFY(!data->requiresCoreApplication); // daemon thread
diff --git a/tests/auto/corelib/kernel/qeventloop/BLACKLIST b/tests/auto/corelib/kernel/qeventloop/BLACKLIST
index 9f837aa197..6ea6314b0a 100644
--- a/tests/auto/corelib/kernel/qeventloop/BLACKLIST
+++ b/tests/auto/corelib/kernel/qeventloop/BLACKLIST
@@ -1,3 +1,2 @@
[testQuitLock]
windows
-osx
diff --git a/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp b/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
index 87196eaef1..4584b6ce31 100644
--- a/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
+++ b/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
@@ -763,7 +763,7 @@ void tst_QMetaMethod::gadget()
{
// Call with null should not crash
- MyGadget *gadget = Q_NULLPTR;
+ MyGadget *gadget = nullptr;
QString string;
QVERIFY(!setValueMethod.invokeOnGadget(gadget, Q_ARG(QString, QLatin1String("hi"))));
QVERIFY(!getValueMethod.invokeOnGadget(gadget, Q_RETURN_ARG(QString, string)));
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
index 076610a0c5..cc628ee26e 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
@@ -39,12 +39,6 @@
#include <algorithm>
-// At least these specific versions of MSVC2010 has a severe performance problem with this file,
-// taking about 1 hour to compile if the portion making use of variadic macros is enabled.
-#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 160030319) && (_MSC_FULL_VER <= 160040219)
-# define TST_QMETATYPE_BROKEN_COMPILER
-#endif
-
// mingw gcc 4.8 also takes way too long, letting the CI system abort the test
#if defined(__MINGW32__)
# define TST_QMETATYPE_BROKEN_COMPILER
diff --git a/tests/auto/corelib/kernel/qobject/qobject.pro b/tests/auto/corelib/kernel/qobject/qobject.pro
index bd83396ca0..978aab86c1 100644
--- a/tests/auto/corelib/kernel/qobject/qobject.pro
+++ b/tests/auto/corelib/kernel/qobject/qobject.pro
@@ -1,6 +1,8 @@
TEMPLATE = subdirs
-CONFIG += ordered
-!winrt: SUBDIRS+= signalbug
+!winrt {
+ test.depends = signalbug
+ SUBDIRS += signalbug
+}
SUBDIRS += test
diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
index 1f98f64340..c734cfe4dd 100644
--- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
+++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
@@ -6016,7 +6016,7 @@ public:
struct SlotArgFunctor
{
- SlotArgFunctor(int *s) : status(s), context(Q_NULLPTR), sender(Q_NULLPTR) {}
+ SlotArgFunctor(int *s) : status(s), context(nullptr), sender(nullptr) {}
SlotArgFunctor(ContextObject *context, QObject *sender, int *s) : status(s), context(context), sender(sender) {}
void operator()() { *status = 2; if (context) context->compareSender(sender); }
@@ -6454,7 +6454,7 @@ Q_SIGNALS:
static int countedStructObjectsCount = 0;
struct CountedStruct
{
- CountedStruct() : sender(Q_NULLPTR) { ++countedStructObjectsCount; }
+ CountedStruct() : sender(nullptr) { ++countedStructObjectsCount; }
CountedStruct(GetSenderObject *sender) : sender(sender) { ++countedStructObjectsCount; }
CountedStruct(const CountedStruct &o) : sender(o.sender) { ++countedStructObjectsCount; }
CountedStruct &operator=(const CountedStruct &) { return *this; }
@@ -6770,7 +6770,7 @@ class CountedExceptionThrower : public QObject
Q_OBJECT
public:
- explicit CountedExceptionThrower(bool throwException, QObject *parent = Q_NULLPTR)
+ explicit CountedExceptionThrower(bool throwException, QObject *parent = nullptr)
: QObject(parent)
{
if (throwException)
@@ -6856,7 +6856,7 @@ void tst_QObject::exceptions()
try {
class ParentObject : public QObject {
public:
- explicit ParentObject(QObject *parent = Q_NULLPTR)
+ explicit ParentObject(QObject *parent = nullptr)
: QObject(parent)
{
new CountedExceptionThrower(false, this);
diff --git a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
index 3b25000b22..f81324b894 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
+++ b/tests/auto/corelib/kernel/qsharedmemory/test/tst_qsharedmemory.cpp
@@ -815,6 +815,7 @@ void tst_QSharedMemory::uniqueKey_data()
QTest::newRow("key != key1") << QString("key") << QString("key1");
QTest::newRow("ke1y != key1") << QString("ke1y") << QString("key1");
QTest::newRow("key1 != key2") << QString("key1") << QString("key2");
+ QTest::newRow("Noël -> Nol") << QString::fromUtf8("N\xc3\xabl") << QString("Nol");
}
void tst_QSharedMemory::uniqueKey()
diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
index b921c0f13d..2c6d9ea7c0 100644
--- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
+++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
@@ -754,7 +754,7 @@ void tst_QTimer::recurseOnTimeoutAndStopTimer()
struct CountedStruct
{
- CountedStruct(int *count, QThread *t = Q_NULLPTR) : count(count), thread(t) { }
+ CountedStruct(int *count, QThread *t = nullptr) : count(count), thread(t) { }
~CountedStruct() { }
void operator()() const { ++(*count); if (thread) QCOMPARE(QThread::currentThread(), thread); }
@@ -763,7 +763,7 @@ struct CountedStruct
};
static QScopedPointer<QEventLoop> _e;
-static QThread *_t = Q_NULLPTR;
+static QThread *_t = nullptr;
class StaticEventLoop
{
@@ -827,7 +827,7 @@ void tst_QTimer::singleShotToFunctors()
_t->quit();
_t->wait();
_t->deleteLater();
- _t = Q_NULLPTR;
+ _t = nullptr;
{
QObject c3;
@@ -865,7 +865,7 @@ void tst_QTimer::singleShotToFunctors()
QCOMPARE(count, 5);
_e.reset();
- _t = Q_NULLPTR;
+ _t = nullptr;
}
void tst_QTimer::singleShot_chrono()
diff --git a/tests/auto/corelib/kernel/qvariant/qvariant.pro b/tests/auto/corelib/kernel/qvariant/qvariant.pro
index 96071f9f73..a620be0091 100644
--- a/tests/auto/corelib/kernel/qvariant/qvariant.pro
+++ b/tests/auto/corelib/kernel/qvariant/qvariant.pro
@@ -5,7 +5,8 @@ INCLUDEPATH += $$PWD/../../../other/qvariant_common
SOURCES = tst_qvariant.cpp
RESOURCES += qvariant.qrc
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
-qtConfig(c++11): CONFIG += c++11
+qtConfig(c++14): CONFIG += c++14
+qtConfig(c++1z): CONFIG += c++1z
!qtConfig(doubleconversion):!qtConfig(system-doubleconversion) {
DEFINES += QT_NO_DOUBLECONVERSION
}
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 0d45159d09..0780fb9172 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -45,7 +45,9 @@
#include <limits.h>
#include <float.h>
#include <cmath>
-
+#if QT_HAS_INCLUDE(<variant>) && __cplusplus >= 201703L
+#include <variant>
+#endif
#include <QLinkedList>
#include <QRegularExpression>
#include <QDir>
@@ -281,6 +283,8 @@ private slots:
void accessSequentialContainerKey();
+ void fromStdVariant();
+
private:
void dataStream_data(QDataStream::Version version);
void loadQVariantFromDataStream(QDataStream::Version version);
@@ -1099,8 +1103,9 @@ void tst_QVariant::toString_data()
QTest::newRow( "bool" ) << QVariant( true ) << QString( "true" );
QTest::newRow( "qdate" ) << QVariant( QDate( 2002, 1, 1 ) ) << QString( "2002-01-01" );
- QTest::newRow( "qtime" ) << QVariant( QTime( 12, 34, 56 ) ) << QString( "12:34:56" );
- QTest::newRow( "qdatetime" ) << QVariant( QDateTime( QDate( 2002, 1, 1 ), QTime( 12, 34, 56 ) ) ) << QString( "2002-01-01T12:34:56" );
+ QTest::newRow( "qtime" ) << QVariant( QTime( 12, 34, 56 ) ) << QString( "12:34:56.000" );
+ QTest::newRow( "qtime-with-ms" ) << QVariant( QTime( 12, 34, 56, 789 ) ) << QString( "12:34:56.789" );
+ QTest::newRow( "qdatetime" ) << QVariant( QDateTime( QDate( 2002, 1, 1 ), QTime( 12, 34, 56, 789 ) ) ) << QString( "2002-01-01T12:34:56.789" );
QTest::newRow( "llong" ) << QVariant( (qlonglong)Q_INT64_C(123456789012) ) <<
QString( "123456789012" );
QTest::newRow("QJsonValue") << QVariant(QJsonValue(QString("hello"))) << QString("hello");
@@ -1151,6 +1156,7 @@ void tst_QVariant::toTime_data()
QTest::newRow( "qtime" ) << QVariant( QTime( 12, 34, 56 ) ) << QTime( 12, 34, 56 );
QTest::newRow( "qdatetime" ) << QVariant( QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ) ) ) << QTime( 12, 34, 56 );
QTest::newRow( "qstring" ) << QVariant( QString( "12:34:56" ) ) << QTime( 12, 34, 56 );
+ QTest::newRow( "qstring-with-ms" ) << QVariant( QString( "12:34:56.789" ) ) << QTime( 12, 34, 56, 789 );
}
void tst_QVariant::toTime()
@@ -1171,6 +1177,10 @@ void tst_QVariant::toDateTime_data()
<< QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ) );
QTest::newRow( "qdate" ) << QVariant( QDate( 2002, 10, 10 ) ) << QDateTime( QDate( 2002, 10, 10 ), QTime( 0, 0, 0 ) );
QTest::newRow( "qstring" ) << QVariant( QString( "2002-10-10T12:34:56" ) ) << QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ) );
+ QTest::newRow( "qstring-utc" ) << QVariant( QString( "2002-10-10T12:34:56Z" ) )
+ << QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ), Qt::UTC );
+ QTest::newRow( "qstring-with-ms" ) << QVariant( QString( "2002-10-10T12:34:56.789" ) )
+ << QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56, 789 ) );
}
void tst_QVariant::toDateTime()
@@ -4927,7 +4937,7 @@ void tst_QVariant::accessSequentialContainerKey()
{
QMap<QString, QObject*> mapping;
QString name = QString::fromLatin1("Seven");
- mapping.insert(name, Q_NULLPTR);
+ mapping.insert(name, nullptr);
QVariant variant = QVariant::fromValue(mapping);
@@ -4944,5 +4954,41 @@ void tst_QVariant::accessSequentialContainerKey()
QCOMPARE(nameResult, QStringLiteral("Seven"));
}
+void tst_QVariant::fromStdVariant()
+{
+#if QT_HAS_INCLUDE(<variant>) && __cplusplus >= 201703L
+ {
+ typedef std::variant<int, bool> intorbool_t;
+ intorbool_t stdvar = 5;
+ QVariant qvar = QVariant::fromStdVariant(stdvar);
+ QVERIFY(!qvar.isNull());
+ QCOMPARE(qvar.type(), QVariant::Int);
+ QCOMPARE(qvar.value<int>(), std::get<int>(stdvar));
+ stdvar = true;
+ qvar = QVariant::fromStdVariant(stdvar);
+ QVERIFY(!qvar.isNull());
+ QCOMPARE(qvar.type(), QVariant::Bool);
+ QCOMPARE(qvar.value<bool>(), std::get<bool>(stdvar));
+ }
+ {
+ std::variant<std::monostate, int> stdvar;
+ QVariant qvar = QVariant::fromStdVariant(stdvar);
+ QVERIFY(!qvar.isValid());
+ stdvar = -4;
+ qvar = QVariant::fromStdVariant(stdvar);
+ QVERIFY(!qvar.isNull());
+ QCOMPARE(qvar.type(), QVariant::Int);
+ QCOMPARE(qvar.value<int>(), std::get<int>(stdvar));
+ }
+ {
+ std::variant<int, bool, QChar> stdvar = QChar::fromLatin1(' ');
+ QVariant qvar = QVariant::fromStdVariant(stdvar);
+ QVERIFY(!qvar.isNull());
+ QCOMPARE(qvar.type(), QVariant::Char);
+ QCOMPARE(qvar.value<QChar>(), std::get<QChar>(stdvar));
+ }
+#endif
+}
+
QTEST_MAIN(tst_QVariant)
#include "tst_qvariant.moc"
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro
index e661ff8412..53bb012f7c 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro
@@ -1,5 +1,7 @@
CONFIG += testcase
+requires(qtConfig(private_tests))
+
TARGET = tst_qmimedatabase-cache
QT = core testlib concurrent
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro
index 160f359116..7b27ee4217 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro
@@ -1,5 +1,7 @@
CONFIG += testcase
+requires(qtConfig(private_tests))
+
TARGET = tst_qmimedatabase-xml
QT = core testlib concurrent
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
index 8883b6360f..e3504de732 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
@@ -148,7 +148,7 @@ void tst_QMimeDatabase::initTestCase()
qDebug() << "\nGlobal XDG_DATA_DIRS: " << m_globalXdgDir;
const QString freeDesktopXml = QStringLiteral("freedesktop.org.xml");
- const QString xmlFileName = QLatin1String(RESOURCE_PREFIX) + freeDesktopXml;
+ const QString xmlFileName = QLatin1String(RESOURCE_PREFIX "packages/") + freeDesktopXml;
const QString xmlTargetFileName = globalPackageDir + QLatin1Char('/') + freeDesktopXml;
QVERIFY2(copyResourceFile(xmlFileName, xmlTargetFileName, &errorMessage), qPrintable(errorMessage));
#endif
@@ -635,6 +635,7 @@ void tst_QMimeDatabase::suffixes_data()
QTest::newRow("mimetype with multiple patterns") << "text/plain" << "*.asc;*.txt;*,v" << "txt";
QTest::newRow("mimetype with uncommon pattern") << "text/x-readme" << "README*" << QString();
QTest::newRow("mimetype with no patterns") << "application/x-ole-storage" << QString() << QString();
+ QTest::newRow("default_mimetype") << "application/octet-stream" << "*.bin" << QString();
}
void tst_QMimeDatabase::suffixes()
@@ -1042,17 +1043,21 @@ void tst_QMimeDatabase::installNewLocalMimeType()
QCOMPARE(db.mimeTypeForFile(qmlTestFile).name(),
QString::fromLatin1("text/x-qml"));
- // Now test removing the local mimetypes again (note, this leaves a mostly-empty mime.cache file)
- for (int i = 0; i < m_additionalMimeFileNames.size(); ++i)
- QFile::remove(destDir + m_additionalMimeFileNames.at(i));
+ // Now test removing local mimetypes
+ for (int i = 1 ; i <= 3 ; ++i)
+ QFile::remove(destDir + QStringLiteral("invalid-magic%1.xml").arg(i));
if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(m_localMimeDir))
QSKIP("shared-mime-info not found, skipping mime.cache test");
- QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(),
- QString::fromLatin1("application/octet-stream"));
- QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid());
+ QVERIFY(!db.mimeTypeForName(QLatin1String("text/invalid-magic1")).isValid()); // deleted
+ QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); // still present
- // And now the user goes wild and uses rm -rf
+ // The user deletes the cache -> the XML provider makes things still work
QFile::remove(m_localMimeDir + QString::fromLatin1("/mime.cache"));
+ QVERIFY(!db.mimeTypeForName(QLatin1String("text/invalid-magic1")).isValid()); // deleted
+ QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); // still present
+
+ // Finally, the user deletes the whole local dir
+ QVERIFY2(QDir(m_localMimeDir).removeRecursively(), qPrintable(m_localMimeDir + ": " + qt_error_string()));
QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(),
QString::fromLatin1("application/octet-stream"));
QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid());
diff --git a/tests/auto/corelib/plugin/qfactoryloader/qfactoryloader.pro b/tests/auto/corelib/plugin/qfactoryloader/qfactoryloader.pro
index ace9fe8fd0..f0430d55e6 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/qfactoryloader.pro
+++ b/tests/auto/corelib/plugin/qfactoryloader/qfactoryloader.pro
@@ -1,6 +1,7 @@
QT = core-private
TEMPLATE = subdirs
-CONFIG += ordered
+
+test.depends = plugin1 plugin2
SUBDIRS = \
plugin1 \
plugin2 \
diff --git a/tests/auto/corelib/plugin/qlibrary/qlibrary.pro b/tests/auto/corelib/plugin/qlibrary/qlibrary.pro
index ec58838e71..44f791f582 100644
--- a/tests/auto/corelib/plugin/qlibrary/qlibrary.pro
+++ b/tests/auto/corelib/plugin/qlibrary/qlibrary.pro
@@ -1,6 +1,7 @@
QT = core
TEMPLATE = subdirs
-CONFIG += ordered
+
+tst.depends = lib lib2
SUBDIRS = lib \
lib2 \
diff --git a/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt1.elf64.so b/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt1.elf64.so
index 12ce7362dc..12ce7362dc 100755..100644
--- a/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt1.elf64.so
+++ b/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt1.elf64.so
Binary files differ
diff --git a/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt2.elf64.so b/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt2.elf64.so
index 11fdc2c118..11fdc2c118 100755..100644
--- a/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt2.elf64.so
+++ b/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt2.elf64.so
Binary files differ
diff --git a/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt3.elf64.so b/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt3.elf64.so
index 94a2bc3560..94a2bc3560 100755..100644
--- a/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt3.elf64.so
+++ b/tests/auto/corelib/plugin/qpluginloader/elftest/corrupt3.elf64.so
Binary files differ
diff --git a/tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro b/tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro
index c681f5585c..541e73636c 100644
--- a/tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro
+++ b/tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro
@@ -1,12 +1,18 @@
QT = core
-TEMPLATE = subdirs
-CONFIG += ordered
-SUBDIRS = lib \
- theplugin \
- tst
-!android: !win32: !mac: SUBDIRS += almostplugin
-macx-*: qtConfig(private_tests): SUBDIRS += machtest
-TARGET = tst_qpluginloader
+TEMPLATE = subdirs
+
+tst.depends = lib theplugin
+SUBDIRS = lib \
+ theplugin \
+ tst
+!android:!win32:!darwin {
+ tst.depends += almostplugin
+ SUBDIRS += almostplugin
+}
+macos:qtConfig(private_tests) {
+ tst.depends += machtest
+ SUBDIRS += machtest
+}
# no special install rule for subdir
INSTALLS =
diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
index 9e3edc96ec..bad72c081b 100644
--- a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
+++ b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
@@ -124,8 +124,16 @@ void tst_QUuid::fromChar()
void tst_QUuid::toString()
{
QCOMPARE(uuidA.toString(), QString("{fc69b59e-cc34-4436-a43c-ee95d128b8c5}"));
+ QCOMPARE(uuidA.toString(QUuid::WithoutBraces),
+ QString("fc69b59e-cc34-4436-a43c-ee95d128b8c5"));
+ QCOMPARE(uuidA.toString(QUuid::Id128),
+ QString("fc69b59ecc344436a43cee95d128b8c5"));
QCOMPARE(uuidB.toString(), QString("{1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b}"));
+ QCOMPARE(uuidB.toString(QUuid::WithoutBraces),
+ QString("1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b"));
+ QCOMPARE(uuidB.toString(QUuid::Id128),
+ QString("1ab6e93ab1cb4a87ba47ec7e99039a7b"));
}
void tst_QUuid::fromString_data()
@@ -185,8 +193,16 @@ void tst_QUuid::fromString()
void tst_QUuid::toByteArray()
{
QCOMPARE(uuidA.toByteArray(), QByteArray("{fc69b59e-cc34-4436-a43c-ee95d128b8c5}"));
+ QCOMPARE(uuidA.toByteArray(QUuid::WithoutBraces),
+ QByteArray("fc69b59e-cc34-4436-a43c-ee95d128b8c5"));
+ QCOMPARE(uuidA.toByteArray(QUuid::Id128),
+ QByteArray("fc69b59ecc344436a43cee95d128b8c5"));
QCOMPARE(uuidB.toByteArray(), QByteArray("{1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b}"));
+ QCOMPARE(uuidB.toByteArray(QUuid::WithoutBraces),
+ QByteArray("1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b"));
+ QCOMPARE(uuidB.toByteArray(QUuid::Id128),
+ QByteArray("1ab6e93ab1cb4a87ba47ec7e99039a7b"));
}
void tst_QUuid::fromByteArray()
diff --git a/tests/auto/corelib/json/bom.json b/tests/auto/corelib/serialization/json/bom.json
index d1e8d90e28..d1e8d90e28 100644
--- a/tests/auto/corelib/json/bom.json
+++ b/tests/auto/corelib/serialization/json/bom.json
diff --git a/tests/auto/corelib/json/invalidBinaryData/10.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/10.bjson
index 12b29b7aa5..12b29b7aa5 100644
--- a/tests/auto/corelib/json/invalidBinaryData/10.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/10.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/11.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/11.bjson
index cf2b612111..cf2b612111 100644
--- a/tests/auto/corelib/json/invalidBinaryData/11.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/11.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/12.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/12.bjson
index 9c2403350e..9c2403350e 100644
--- a/tests/auto/corelib/json/invalidBinaryData/12.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/12.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/13.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/13.bjson
index db6308b1fd..db6308b1fd 100644
--- a/tests/auto/corelib/json/invalidBinaryData/13.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/13.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/14.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/14.bjson
index 347da4572c..347da4572c 100644
--- a/tests/auto/corelib/json/invalidBinaryData/14.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/14.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/15.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/15.bjson
index c6c5558934..c6c5558934 100644
--- a/tests/auto/corelib/json/invalidBinaryData/15.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/15.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/16.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/16.bjson
index ae8b57446d..ae8b57446d 100644
--- a/tests/auto/corelib/json/invalidBinaryData/16.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/16.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/17.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/17.bjson
index 32f0cc0e23..32f0cc0e23 100644
--- a/tests/auto/corelib/json/invalidBinaryData/17.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/17.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/18.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/18.bjson
index 50c89169eb..50c89169eb 100644
--- a/tests/auto/corelib/json/invalidBinaryData/18.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/18.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/19.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/19.bjson
index b922212f45..b922212f45 100644
--- a/tests/auto/corelib/json/invalidBinaryData/19.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/19.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/20.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/20.bjson
index c965a0d294..c965a0d294 100644
--- a/tests/auto/corelib/json/invalidBinaryData/20.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/20.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/21.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/21.bjson
index 98165ee40c..98165ee40c 100644
--- a/tests/auto/corelib/json/invalidBinaryData/21.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/21.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/22.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/22.bjson
index 151f773a81..151f773a81 100644
--- a/tests/auto/corelib/json/invalidBinaryData/22.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/22.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/23.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/23.bjson
index 6eb5269470..6eb5269470 100644
--- a/tests/auto/corelib/json/invalidBinaryData/23.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/23.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/24.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/24.bjson
index c55a2a3e3b..c55a2a3e3b 100644
--- a/tests/auto/corelib/json/invalidBinaryData/24.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/24.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/25.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/25.bjson
index 6c619f2ae1..6c619f2ae1 100644
--- a/tests/auto/corelib/json/invalidBinaryData/25.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/25.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/26.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/26.bjson
index 3bf303215a..3bf303215a 100644
--- a/tests/auto/corelib/json/invalidBinaryData/26.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/26.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/27.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/27.bjson
index d2656c2287..d2656c2287 100644
--- a/tests/auto/corelib/json/invalidBinaryData/27.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/27.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/28.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/28.bjson
index 6797cf8c40..6797cf8c40 100644
--- a/tests/auto/corelib/json/invalidBinaryData/28.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/28.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/29.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/29.bjson
index 0645dfc3b2..0645dfc3b2 100644
--- a/tests/auto/corelib/json/invalidBinaryData/29.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/29.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/30.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/30.bjson
index f77fe1efd0..f77fe1efd0 100644
--- a/tests/auto/corelib/json/invalidBinaryData/30.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/30.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/31.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/31.bjson
index d9840b6582..d9840b6582 100644
--- a/tests/auto/corelib/json/invalidBinaryData/31.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/31.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/32.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/32.bjson
index 1de4cb829f..1de4cb829f 100644
--- a/tests/auto/corelib/json/invalidBinaryData/32.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/32.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/33.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/33.bjson
index 532a31dc08..532a31dc08 100644
--- a/tests/auto/corelib/json/invalidBinaryData/33.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/33.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/34.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/34.bjson
index f498558eff..f498558eff 100644
--- a/tests/auto/corelib/json/invalidBinaryData/34.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/34.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/35.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/35.bjson
index 8701210755..8701210755 100644
--- a/tests/auto/corelib/json/invalidBinaryData/35.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/35.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/36.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/36.bjson
index ef5864e911..ef5864e911 100644
--- a/tests/auto/corelib/json/invalidBinaryData/36.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/36.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/invalidBinaryData/37.bjson b/tests/auto/corelib/serialization/json/invalidBinaryData/37.bjson
index f4dd4ae12f..f4dd4ae12f 100644
--- a/tests/auto/corelib/json/invalidBinaryData/37.bjson
+++ b/tests/auto/corelib/serialization/json/invalidBinaryData/37.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/json.pro b/tests/auto/corelib/serialization/json/json.pro
index 8fa17c5c38..8fa17c5c38 100644
--- a/tests/auto/corelib/json/json.pro
+++ b/tests/auto/corelib/serialization/json/json.pro
diff --git a/tests/auto/corelib/json/json.qrc b/tests/auto/corelib/serialization/json/json.qrc
index eb122a1779..eb122a1779 100644
--- a/tests/auto/corelib/json/json.qrc
+++ b/tests/auto/corelib/serialization/json/json.qrc
diff --git a/tests/auto/corelib/json/test.bjson b/tests/auto/corelib/serialization/json/test.bjson
index 137b4dfeff..137b4dfeff 100644
--- a/tests/auto/corelib/json/test.bjson
+++ b/tests/auto/corelib/serialization/json/test.bjson
Binary files differ
diff --git a/tests/auto/corelib/json/test.json b/tests/auto/corelib/serialization/json/test.json
index 330756894a..330756894a 100644
--- a/tests/auto/corelib/json/test.json
+++ b/tests/auto/corelib/serialization/json/test.json
diff --git a/tests/auto/corelib/json/test2.json b/tests/auto/corelib/serialization/json/test2.json
index 303f879b62..303f879b62 100644
--- a/tests/auto/corelib/json/test2.json
+++ b/tests/auto/corelib/serialization/json/test2.json
diff --git a/tests/auto/corelib/json/test3.json b/tests/auto/corelib/serialization/json/test3.json
index 48cb29a47f..48cb29a47f 100644
--- a/tests/auto/corelib/json/test3.json
+++ b/tests/auto/corelib/serialization/json/test3.json
diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
index 1e3604ac9e..1e3604ac9e 100644
--- a/tests/auto/corelib/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
diff --git a/tests/auto/corelib/io/qdatastream/.gitignore b/tests/auto/corelib/serialization/qdatastream/.gitignore
index cdcbaa591e..cdcbaa591e 100644
--- a/tests/auto/corelib/io/qdatastream/.gitignore
+++ b/tests/auto/corelib/serialization/qdatastream/.gitignore
diff --git a/tests/auto/corelib/io/qdatastream/datastream.q42 b/tests/auto/corelib/serialization/qdatastream/datastream.q42
index 5c83f5c7fc..5c83f5c7fc 100644
--- a/tests/auto/corelib/io/qdatastream/datastream.q42
+++ b/tests/auto/corelib/serialization/qdatastream/datastream.q42
Binary files differ
diff --git a/tests/auto/corelib/io/qdatastream/qdatastream.pro b/tests/auto/corelib/serialization/qdatastream/qdatastream.pro
index 25f8b889a0..25f8b889a0 100644
--- a/tests/auto/corelib/io/qdatastream/qdatastream.pro
+++ b/tests/auto/corelib/serialization/qdatastream/qdatastream.pro
diff --git a/tests/auto/corelib/io/qdatastream/testdata.qrc b/tests/auto/corelib/serialization/qdatastream/testdata.qrc
index fb63cb3438..fb63cb3438 100644
--- a/tests/auto/corelib/io/qdatastream/testdata.qrc
+++ b/tests/auto/corelib/serialization/qdatastream/testdata.qrc
diff --git a/tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
index 14a2528cc6..14a2528cc6 100644
--- a/tests/auto/corelib/io/qdatastream/tst_qdatastream.cpp
+++ b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
diff --git a/tests/auto/corelib/io/qtextstream/.gitattributes b/tests/auto/corelib/serialization/qtextstream/.gitattributes
index eb78a3cecf..eb78a3cecf 100644
--- a/tests/auto/corelib/io/qtextstream/.gitattributes
+++ b/tests/auto/corelib/serialization/qtextstream/.gitattributes
diff --git a/tests/auto/corelib/io/qtextstream/.gitignore b/tests/auto/corelib/serialization/qtextstream/.gitignore
index 01f26ae749..01f26ae749 100644
--- a/tests/auto/corelib/io/qtextstream/.gitignore
+++ b/tests/auto/corelib/serialization/qtextstream/.gitignore
diff --git a/tests/auto/corelib/io/qtextstream/BLACKLIST b/tests/auto/corelib/serialization/qtextstream/BLACKLIST
index b54b53cd74..b54b53cd74 100644
--- a/tests/auto/corelib/io/qtextstream/BLACKLIST
+++ b/tests/auto/corelib/serialization/qtextstream/BLACKLIST
diff --git a/tests/auto/corelib/io/qtextstream/qtextstream.pro b/tests/auto/corelib/serialization/qtextstream/qtextstream.pro
index 19853b74ad..19853b74ad 100644
--- a/tests/auto/corelib/io/qtextstream/qtextstream.pro
+++ b/tests/auto/corelib/serialization/qtextstream/qtextstream.pro
diff --git a/tests/auto/corelib/io/qtextstream/qtextstream.qrc b/tests/auto/corelib/serialization/qtextstream/qtextstream.qrc
index a750e35d4a..a750e35d4a 100644
--- a/tests/auto/corelib/io/qtextstream/qtextstream.qrc
+++ b/tests/auto/corelib/serialization/qtextstream/qtextstream.qrc
diff --git a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp
index 08d2bf8183..08d2bf8183 100644
--- a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp
diff --git a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/readAllStdinProcess.pro
index 4a4c091dcb..4a4c091dcb 100644
--- a/tests/auto/corelib/io/qtextstream/readAllStdinProcess/readAllStdinProcess.pro
+++ b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/readAllStdinProcess.pro
diff --git a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp
index 41ea5e56f0..41ea5e56f0 100644
--- a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/main.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp
diff --git a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/readLineStdinProcess.pro
index 4a4c091dcb..4a4c091dcb 100644
--- a/tests/auto/corelib/io/qtextstream/readLineStdinProcess/readLineStdinProcess.pro
+++ b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/readLineStdinProcess.pro
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
index 849ecb39ed..849ecb39ed 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
index 8b9647f06f..8b9647f06f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
index d73722e724..d73722e724 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
index fcb209d377..fcb209d377 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
index 7939963f78..7939963f78 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
index d155ca2863..d155ca2863 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
index 104e45f940..104e45f940 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
index 3135276780..3135276780 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
index 993d0b9e19..993d0b9e19 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data
index fcb209d377..fcb209d377 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data
index 7939963f78..7939963f78 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data
index d155ca2863..d155ca2863 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QByteArray_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data
index fa7af8bf5f..fa7af8bf5f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data
index b516b2c489..b516b2c489 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data
index fa7af8bf5f..fa7af8bf5f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data
index b516b2c489..b516b2c489 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data
index 6def16c99e..6def16c99e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data
index 57302ad8e7..57302ad8e7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data
index 239c14d498..239c14d498 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data
index 8fbd3327c8..8fbd3327c8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data
index d745e1be7b..d745e1be7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
index db52135603..db52135603 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
index 0a4ca93c16..0a4ca93c16 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
index e7c7d5a76b..e7c7d5a76b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
index 7501b59181..7501b59181 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
index 1565aaa95f..1565aaa95f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
index 9ac3ad9a6b..9ac3ad9a6b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
index bb28df16b9..bb28df16b9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
index 8c0f57437b..8c0f57437b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
index d494004e64..d494004e64 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
index de421979ea..de421979ea 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
index fa7af8bf5f..fa7af8bf5f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
index b516b2c489..b516b2c489 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data
index db52135603..db52135603 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data
index 0a4ca93c16..0a4ca93c16 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data
index e7c7d5a76b..e7c7d5a76b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data
index 7501b59181..7501b59181 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data
index 1565aaa95f..1565aaa95f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QChar_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data
index 849ecb39ed..849ecb39ed 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data
index 8b9647f06f..8b9647f06f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data
index d73722e724..d73722e724 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
index fcb209d377..fcb209d377 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
index 7939963f78..7939963f78 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
index d155ca2863..d155ca2863 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data
index 104e45f940..104e45f940 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data
index 3135276780..3135276780 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data
index 993d0b9e19..993d0b9e19 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data
index fcb209d377..fcb209d377 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data
index 7939963f78..7939963f78 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data
index d155ca2863..d155ca2863 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_QString_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data
index 9280c0d31d..9280c0d31d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data
index c227083464..c227083464 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data
index 9280c0d31d..9280c0d31d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data
index c227083464..c227083464 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data
index 6def16c99e..6def16c99e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data
index 57302ad8e7..57302ad8e7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data
index 239c14d498..239c14d498 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data
index 819b31d1f2..819b31d1f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data
index a6ff072af1..a6ff072af1 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
index db52135603..db52135603 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
index 0a4ca93c16..0a4ca93c16 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
index e7c7d5a76b..e7c7d5a76b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
index bf9cec8ea7..bf9cec8ea7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
index ec4665f7ff..ec4665f7ff 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data
index 9ac3ad9a6b..9ac3ad9a6b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data
index bb28df16b9..bb28df16b9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data
index 8c0f57437b..8c0f57437b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data
index 878dc8a26e..878dc8a26e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data
index fd0779e0f3..fd0779e0f3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data
index 9280c0d31d..9280c0d31d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data
index c227083464..c227083464 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data
index db52135603..db52135603 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data
index 0a4ca93c16..0a4ca93c16 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data
index e7c7d5a76b..e7c7d5a76b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data
index bf9cec8ea7..bf9cec8ea7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data
index ec4665f7ff..ec4665f7ff 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_char_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data
index 80aed3622e..80aed3622e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data
index aec027753d..aec027753d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Latin1_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data
index 80aed3622e..80aed3622e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data
index aec027753d..aec027753d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Locale_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data
index 67ce8d83c8..67ce8d83c8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data
index 9662a9aaa1..9662a9aaa1 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data
index a74511b101..a74511b101 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data
index bdc06a6ec2..bdc06a6ec2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data
index 79b15d4d8a..79b15d4d8a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data
index 2141e65843..2141e65843 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_RawUnicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
index 61cc689e1e..61cc689e1e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
index cf914bc67e..cf914bc67e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
index 5e08ff706a..5e08ff706a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
index b6f4541bb8..b6f4541bb8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
index f4a50d829a..f4a50d829a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
index 2d8f67152c..2d8f67152c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data
index e6b94bbeb3..e6b94bbeb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data
index fb0a550264..fb0a550264 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data
index 48fe53930f..48fe53930f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data
index 811e93212d..811e93212d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data
index 7041fa9b4d..7041fa9b4d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data
index 9fd21fade0..9fd21fade0 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeReverse_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data
index 80aed3622e..80aed3622e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data
index aec027753d..aec027753d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_UnicodeUTF8_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data
index 61cc689e1e..61cc689e1e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data
index cf914bc67e..cf914bc67e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data
index 5e08ff706a..5e08ff706a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data
index b6f4541bb8..b6f4541bb8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data
index f4a50d829a..f4a50d829a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data
index 2d8f67152c..2d8f67152c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_double_resource_Unicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data
index 67ce8d83c8..67ce8d83c8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data
index 9662a9aaa1..9662a9aaa1 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data
index a74511b101..a74511b101 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data
index bdc06a6ec2..bdc06a6ec2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
index 61cc689e1e..61cc689e1e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
index cf914bc67e..cf914bc67e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
index 5e08ff706a..5e08ff706a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
index b6f4541bb8..b6f4541bb8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data
index e6b94bbeb3..e6b94bbeb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data
index fb0a550264..fb0a550264 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data
index 48fe53930f..48fe53930f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data
index 811e93212d..811e93212d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data
index 61cc689e1e..61cc689e1e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data
index cf914bc67e..cf914bc67e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data
index 5e08ff706a..5e08ff706a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data
index b6f4541bb8..b6f4541bb8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_float_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data
index f4aefab396..f4aefab396 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Latin1_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data
index f4aefab396..f4aefab396 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Locale_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data
index 815d4fc7db..815d4fc7db 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data
index c933a04c07..c933a04c07 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data
index 69de5ef2bd..69de5ef2bd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data
index c45139955a..c45139955a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data
index 396352f4d6..396352f4d6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data
index ea73fac731..ea73fac731 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data
index 1f4f1a58de..1f4f1a58de 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data
index 9469ca407f..9469ca407f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_RawUnicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
index 18c3344c26..18c3344c26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
index 5193701ae3..5193701ae3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
index fab38d24ef..fab38d24ef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data
index ebb14b2fbd..ebb14b2fbd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data
index a9e1432ca9..a9e1432ca9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data
index b7e6743c28..b7e6743c28 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeReverse_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data
index f4aefab396..f4aefab396 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_UnicodeUTF8_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data
index 18c3344c26..18c3344c26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data
index 5193701ae3..5193701ae3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data
index fab38d24ef..fab38d24ef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_int_resource_Unicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data
index cab2ee4938..cab2ee4938 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Latin1_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data
index cab2ee4938..cab2ee4938 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Locale_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data
index 815d4fc7db..815d4fc7db 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data
index c933a04c07..c933a04c07 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data
index 69de5ef2bd..69de5ef2bd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data
index 40269f4e0c..40269f4e0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data
index 396352f4d6..396352f4d6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data
index ea73fac731..ea73fac731 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data
index 1f4f1a58de..1f4f1a58de 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data
index e8051f8906..e8051f8906 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_RawUnicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
index e50e2d02a9..e50e2d02a9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
index 18c3344c26..18c3344c26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
index 5193701ae3..5193701ae3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
index 5a9cb07f57..5a9cb07f57 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data
index e20c76a82c..e20c76a82c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data
index ebb14b2fbd..ebb14b2fbd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data
index a9e1432ca9..a9e1432ca9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data
index f8ec5bc443..f8ec5bc443 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeReverse_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data
index cab2ee4938..cab2ee4938 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_UnicodeUTF8_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data
index e50e2d02a9..e50e2d02a9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data
index 18c3344c26..18c3344c26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data
index 5193701ae3..5193701ae3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data
index 5a9cb07f57..5a9cb07f57 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_long_resource_Unicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data
index 02b7f3ab7b..02b7f3ab7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data
index 02b7f3ab7b..02b7f3ab7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data
index 396352f4d6..396352f4d6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data
index 815d4fc7db..815d4fc7db 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data
index 69de5ef2bd..69de5ef2bd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data
index 0dc83d2713..0dc83d2713 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
index b951b56531..b951b56531 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data
index 80d3ca2ef1..80d3ca2ef1 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data
index 02b7f3ab7b..02b7f3ab7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data
index b951b56531..b951b56531 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_short_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data
index 815d4fc7db..815d4fc7db 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data
index c933a04c07..c933a04c07 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data
index 69de5ef2bd..69de5ef2bd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data
index c45139955a..c45139955a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_uint_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data
index 815d4fc7db..815d4fc7db 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data
index c933a04c07..c933a04c07 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data
index 69de5ef2bd..69de5ef2bd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data
index 40269f4e0c..40269f4e0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
index e50e2d02a9..e50e2d02a9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
index e20c76a82c..e20c76a82c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data
index e50e2d02a9..e50e2d02a9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ulong_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data
index feac21f921..feac21f921 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data
index 815d4fc7db..815d4fc7db 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data
index c933a04c07..c933a04c07 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data
index 69de5ef2bd..69de5ef2bd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data
index c45139955a..c45139955a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shift_ushort_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource0.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource1.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource10.data
index 597f94465c..597f94465c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource10.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource10.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource11.data
index 597f94465c..597f94465c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource11.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource11.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource12.data
index 597f94465c..597f94465c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource12.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource12.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource2.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource20.data
index b9e3a5a7c7..b9e3a5a7c7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource20.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource20.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource21.data
index 7014dc882f..7014dc882f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource21.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource21.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource3.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource4.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource5.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource6.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource7.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource8.data
index 4f3af7006e..4f3af7006e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource9.data
index 4f3af7006e..4f3af7006e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/big_endian/operator_shiftright_resource9.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/big_endian/operator_shiftright_resource9.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
index 4d5bdc553e..4d5bdc553e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
index 3cf181c23c..3cf181c23c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
index f7f74e56a0..f7f74e56a0 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
index e2df5e2ee7..e2df5e2ee7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
index fcb209d377..fcb209d377 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
index 7939963f78..7939963f78 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
index d155ca2863..d155ca2863 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
index 104e45f940..104e45f940 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
index 3135276780..3135276780 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
index 993d0b9e19..993d0b9e19 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data
index 104e45f940..104e45f940 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data
index 3135276780..3135276780 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data
index 993d0b9e19..993d0b9e19 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QByteArray_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data
index fa7af8bf5f..fa7af8bf5f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data
index b516b2c489..b516b2c489 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data
index fa7af8bf5f..fa7af8bf5f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data
index b516b2c489..b516b2c489 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data
index e2b43e3781..e2b43e3781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data
index 962fc922ad..962fc922ad 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data
index 839cc09ec8..839cc09ec8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data
index f71ac66a63..f71ac66a63 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data
index 88f99805e3..88f99805e3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
index db52135603..db52135603 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
index 0a4ca93c16..0a4ca93c16 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
index e7c7d5a76b..e7c7d5a76b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
index 7501b59181..7501b59181 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
index 1565aaa95f..1565aaa95f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
index 9ac3ad9a6b..9ac3ad9a6b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
index bb28df16b9..bb28df16b9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
index 8c0f57437b..8c0f57437b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
index d494004e64..d494004e64 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
index de421979ea..de421979ea 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
index fa7af8bf5f..fa7af8bf5f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
index b516b2c489..b516b2c489 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data
index 9ac3ad9a6b..9ac3ad9a6b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data
index bb28df16b9..bb28df16b9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data
index 8c0f57437b..8c0f57437b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data
index d494004e64..d494004e64 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data
index de421979ea..de421979ea 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QChar_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data
index 4d5bdc553e..4d5bdc553e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data
index 3cf181c23c..3cf181c23c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data
index f7f74e56a0..f7f74e56a0 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
index fcb209d377..fcb209d377 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
index 7939963f78..7939963f78 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
index d155ca2863..d155ca2863 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data
index 104e45f940..104e45f940 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data
index 3135276780..3135276780 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data
index 993d0b9e19..993d0b9e19 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
index 1910281566..1910281566 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
index a907ec3f43..a907ec3f43 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
index 61cd46aacc..61cd46aacc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data
index 46b134b197..46b134b197 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data
index 104e45f940..104e45f940 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data
index 3135276780..3135276780 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data
index 993d0b9e19..993d0b9e19 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_QString_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data
index 9280c0d31d..9280c0d31d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data
index c227083464..c227083464 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data
index 9280c0d31d..9280c0d31d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data
index c227083464..c227083464 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data
index e2b43e3781..e2b43e3781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data
index 962fc922ad..962fc922ad 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data
index 839cc09ec8..839cc09ec8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data
index c33473a370..c33473a370 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data
index def7fcb589..def7fcb589 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
index db52135603..db52135603 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
index 0a4ca93c16..0a4ca93c16 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
index e7c7d5a76b..e7c7d5a76b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
index bf9cec8ea7..bf9cec8ea7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
index ec4665f7ff..ec4665f7ff 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data
index 9ac3ad9a6b..9ac3ad9a6b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data
index bb28df16b9..bb28df16b9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data
index 8c0f57437b..8c0f57437b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data
index 878dc8a26e..878dc8a26e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data
index fd0779e0f3..fd0779e0f3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data
index 8c7e5a667f..8c7e5a667f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data
index 7371f47a6f..7371f47a6f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data
index 9280c0d31d..9280c0d31d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data
index c227083464..c227083464 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data
index 9ac3ad9a6b..9ac3ad9a6b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data
index bb28df16b9..bb28df16b9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data
index 8c0f57437b..8c0f57437b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data
index 878dc8a26e..878dc8a26e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data
index fd0779e0f3..fd0779e0f3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_char_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data
index 80aed3622e..80aed3622e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data
index aec027753d..aec027753d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Latin1_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data
index 80aed3622e..80aed3622e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data
index aec027753d..aec027753d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Locale_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data
index fb911f7352..fb911f7352 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data
index efbc06bf26..efbc06bf26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data
index 4d857caa13..4d857caa13 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data
index b125e2084f..b125e2084f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data
index f39fbde113..f39fbde113 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data
index 5436b427ed..5436b427ed 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_RawUnicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
index 61cc689e1e..61cc689e1e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
index cf914bc67e..cf914bc67e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
index 5e08ff706a..5e08ff706a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
index b6f4541bb8..b6f4541bb8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
index f4a50d829a..f4a50d829a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
index 2d8f67152c..2d8f67152c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeNetworkOrder_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data
index e6b94bbeb3..e6b94bbeb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data
index fb0a550264..fb0a550264 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data
index 48fe53930f..48fe53930f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data
index 811e93212d..811e93212d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data
index 7041fa9b4d..7041fa9b4d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data
index 9fd21fade0..9fd21fade0 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeReverse_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data
index 80aed3622e..80aed3622e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data
index aec027753d..aec027753d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_UnicodeUTF8_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data
index e6b94bbeb3..e6b94bbeb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data
index fb0a550264..fb0a550264 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data
index 48fe53930f..48fe53930f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data
index 811e93212d..811e93212d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data
index 7041fa9b4d..7041fa9b4d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data
index 9fd21fade0..9fd21fade0 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_double_resource_Unicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data
index fb911f7352..fb911f7352 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data
index efbc06bf26..efbc06bf26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data
index 4d857caa13..4d857caa13 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data
index b125e2084f..b125e2084f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
index 61cc689e1e..61cc689e1e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
index cf914bc67e..cf914bc67e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
index 5e08ff706a..5e08ff706a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
index b6f4541bb8..b6f4541bb8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data
index e6b94bbeb3..e6b94bbeb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data
index fb0a550264..fb0a550264 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data
index 48fe53930f..48fe53930f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data
index 811e93212d..811e93212d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data
index d2fa166d7d..d2fa166d7d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data
index 1d0fa9e6a6..1d0fa9e6a6 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data
index e47d45c143..e47d45c143 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data
index 47ce07d283..47ce07d283 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data
index e6b94bbeb3..e6b94bbeb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data
index fb0a550264..fb0a550264 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data
index 48fe53930f..48fe53930f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data
index 811e93212d..811e93212d 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_float_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data
index f4aefab396..f4aefab396 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Latin1_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data
index f4aefab396..f4aefab396 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Locale_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data
index ee113d1cf3..ee113d1cf3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data
index 1e07040ef4..1e07040ef4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data
index cc7ab7dff8..cc7ab7dff8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data
index 450072bc4e..450072bc4e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data
index 73f5f259f8..73f5f259f8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data
index 9805422dfb..9805422dfb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data
index 77f557a494..77f557a494 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data
index 8dd6a4b38e..8dd6a4b38e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_RawUnicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
index 18c3344c26..18c3344c26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
index 5193701ae3..5193701ae3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
index fab38d24ef..fab38d24ef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeNetworkOrder_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data
index ebb14b2fbd..ebb14b2fbd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data
index a9e1432ca9..a9e1432ca9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data
index b7e6743c28..b7e6743c28 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeReverse_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data
index f4aefab396..f4aefab396 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_UnicodeUTF8_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data
index ebb14b2fbd..ebb14b2fbd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data
index a9e1432ca9..a9e1432ca9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data
index b7e6743c28..b7e6743c28 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_int_resource_Unicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data
index cab2ee4938..cab2ee4938 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Latin1_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data
index cab2ee4938..cab2ee4938 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Locale_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data
index ee113d1cf3..ee113d1cf3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data
index 1e07040ef4..1e07040ef4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data
index cc7ab7dff8..cc7ab7dff8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data
index beea1c3663..beea1c3663 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data
index 73f5f259f8..73f5f259f8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data
index 9805422dfb..9805422dfb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data
index 77f557a494..77f557a494 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data
index be6f22a5ea..be6f22a5ea 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_RawUnicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
index e50e2d02a9..e50e2d02a9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
index 18c3344c26..18c3344c26 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
index 5193701ae3..5193701ae3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
index 5a9cb07f57..5a9cb07f57 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeNetworkOrder_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data
index e20c76a82c..e20c76a82c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data
index ebb14b2fbd..ebb14b2fbd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data
index a9e1432ca9..a9e1432ca9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data
index f8ec5bc443..f8ec5bc443 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeReverse_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data
index f171cb6c0c..f171cb6c0c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data
index de18d40ee8..de18d40ee8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data
index cab2ee4938..cab2ee4938 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_UnicodeUTF8_8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data
index e20c76a82c..e20c76a82c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_5.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data
index ebb14b2fbd..ebb14b2fbd 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_6.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data
index a9e1432ca9..a9e1432ca9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_7.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data
index f8ec5bc443..f8ec5bc443 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_long_resource_Unicode_8.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data
index 02b7f3ab7b..02b7f3ab7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data
index 02b7f3ab7b..02b7f3ab7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data
index 73f5f259f8..73f5f259f8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data
index ee113d1cf3..ee113d1cf3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data
index cc7ab7dff8..cc7ab7dff8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data
index 584b17ea18..584b17ea18 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
index c52b277d9c..c52b277d9c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
index b951b56531..b951b56531 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data
index 80d3ca2ef1..80d3ca2ef1 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data
index ef70e7dc3a..ef70e7dc3a 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data
index 02b7f3ab7b..02b7f3ab7b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data
index 95742ec8f2..95742ec8f2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data
index 80d3ca2ef1..80d3ca2ef1 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_short_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data
index ee113d1cf3..ee113d1cf3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data
index 1e07040ef4..1e07040ef4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data
index cc7ab7dff8..cc7ab7dff8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data
index 450072bc4e..450072bc4e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_uint_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data
index ee113d1cf3..ee113d1cf3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data
index 1e07040ef4..1e07040ef4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data
index cc7ab7dff8..cc7ab7dff8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data
index beea1c3663..beea1c3663 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
index e50e2d02a9..e50e2d02a9 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
index e20c76a82c..e20c76a82c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
index f667f77c45..f667f77c45 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data
index e20c76a82c..e20c76a82c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ulong_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Latin1_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Locale_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data
index 775ae0f25b..775ae0f25b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data
index ee113d1cf3..ee113d1cf3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data
index 1e07040ef4..1e07040ef4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data
index cc7ab7dff8..cc7ab7dff8 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data
index 450072bc4e..450072bc4e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_RawUnicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
index 2262f5ecdb..2262f5ecdb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
index d7a098948e..d7a098948e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
index e333a695b7..e333a695b7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
index 18bb47b042..18bb47b042 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
index 9a9a22daef..9a9a22daef 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeNetworkOrder_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeReverse_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
index 35282318cb..35282318cb 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
index 30c3a50213..30c3a50213 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
index 9d64c07ef2..9d64c07ef2 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
index 6b37eb602b..6b37eb602b 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
index c0e22423bc..c0e22423bc 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_UnicodeUTF8_4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data
index 379e87b914..379e87b914 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_0.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data
index 2785156fb3..2785156fb3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_1.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data
index 6dc818abc3..6dc818abc3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_2.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data
index d41a1f75d3..d41a1f75d3 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_3.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data
index f5a0d874d4..f5a0d874d4 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shift_ushort_resource_Unicode_4.data
Binary files differ
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource0.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource0.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource0.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource1.data
index 0f13712411..0f13712411 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource1.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource1.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource10.data
index 597f94465c..597f94465c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource10.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource10.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource11.data
index 597f94465c..597f94465c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource11.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource11.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource12.data
index 597f94465c..597f94465c 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource12.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource12.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource2.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource2.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource2.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource20.data
index b9e3a5a7c7..b9e3a5a7c7 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource20.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource20.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource21.data
index 7014dc882f..7014dc882f 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource21.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource21.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource3.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource3.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource3.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource4.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource4.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource4.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource5.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource5.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource5.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource6.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource6.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource6.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource7.data
index bd41cba781..bd41cba781 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource7.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource7.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource8.data
index 4f3af7006e..4f3af7006e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource8.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource8.data
diff --git a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource9.data
index 4f3af7006e..4f3af7006e 100644
--- a/tests/auto/corelib/io/qtextstream/resources/little_endian/operator_shiftright_resource9.data
+++ b/tests/auto/corelib/serialization/qtextstream/resources/little_endian/operator_shiftright_resource9.data
diff --git a/tests/auto/corelib/io/qtextstream/rfc3261.txt b/tests/auto/corelib/serialization/qtextstream/rfc3261.txt
index 4cf4df93bc..4cf4df93bc 100644
--- a/tests/auto/corelib/io/qtextstream/rfc3261.txt
+++ b/tests/auto/corelib/serialization/qtextstream/rfc3261.txt
diff --git a/tests/auto/corelib/io/qtextstream/shift-jis.txt b/tests/auto/corelib/serialization/qtextstream/shift-jis.txt
index 51f161ab1a..51f161ab1a 100644
--- a/tests/auto/corelib/io/qtextstream/shift-jis.txt
+++ b/tests/auto/corelib/serialization/qtextstream/shift-jis.txt
diff --git a/tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp b/tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp
index a3c1fc525b..a3c1fc525b 100644
--- a/tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp
diff --git a/tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro b/tests/auto/corelib/serialization/qtextstream/stdinProcess/stdinProcess.pro
index 4a4c091dcb..4a4c091dcb 100644
--- a/tests/auto/corelib/io/qtextstream/stdinProcess/stdinProcess.pro
+++ b/tests/auto/corelib/serialization/qtextstream/stdinProcess/stdinProcess.pro
diff --git a/tests/auto/corelib/io/qtextstream/task113817.txt b/tests/auto/corelib/serialization/qtextstream/task113817.txt
index 281ae8c9f2..281ae8c9f2 100644
--- a/tests/auto/corelib/io/qtextstream/task113817.txt
+++ b/tests/auto/corelib/serialization/qtextstream/task113817.txt
diff --git a/tests/auto/corelib/io/qtextstream/test/test.pro b/tests/auto/corelib/serialization/qtextstream/test/test.pro
index 3dcfa0b414..3dcfa0b414 100644
--- a/tests/auto/corelib/io/qtextstream/test/test.pro
+++ b/tests/auto/corelib/serialization/qtextstream/test/test.pro
diff --git a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
new file mode 100644
index 0000000000..df8746e518
--- /dev/null
+++ b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
@@ -0,0 +1,3057 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+
+#ifdef Q_OS_UNIX
+#include <locale.h>
+#endif
+
+#include <QBuffer>
+#include <QByteArray>
+#include <QDebug>
+#include <QFile>
+#include <QTcpSocket>
+#include <QTemporaryDir>
+#include <QTextStream>
+#include <QTextCodec>
+#if QT_CONFIG(process)
+# include <QProcess>
+#endif
+#include "../../../network-settings.h"
+
+
+QT_BEGIN_NAMESPACE
+template<> struct QMetaTypeId<QIODevice::OpenModeFlag>
+{ enum { Defined = 1 }; static inline int qt_metatype_id() { return QMetaType::Int; } };
+QT_END_NAMESPACE
+
+class tst_QTextStream : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QTextStream();
+
+public slots:
+ void initTestCase();
+ void cleanup();
+ void cleanupTestCase();
+
+private slots:
+ void getSetCheck();
+ void construction();
+
+ // lines
+ void readLineFromDevice_data();
+ void readLineFromDevice();
+ void readLineFromString_data();
+ void readLineFromString();
+ void readLineFromTextDevice_data();
+ void readLineFromTextDevice();
+ void readLineUntilNull();
+ void readLineMaxlen_data();
+ void readLineMaxlen();
+ void readLinesFromBufferCRCR();
+ void readLineInto();
+
+ // all
+ void readAllFromDevice_data();
+ void readAllFromDevice();
+ void readAllFromString_data();
+ void readAllFromString();
+ void readLineFromStringThenChangeString();
+
+ // device tests
+ void setDevice();
+
+ // char operators
+ void QChar_operators_FromDevice_data();
+ void QChar_operators_FromDevice();
+ void char_operators_FromDevice_data();
+ void char_operators_FromDevice();
+
+ // natural number read operator
+ void signedShort_read_operator_FromDevice_data();
+ void signedShort_read_operator_FromDevice();
+ void unsignedShort_read_operator_FromDevice_data();
+ void unsignedShort_read_operator_FromDevice();
+ void signedInt_read_operator_FromDevice_data();
+ void signedInt_read_operator_FromDevice();
+ void unsignedInt_read_operator_FromDevice_data();
+ void unsignedInt_read_operator_FromDevice();
+ void qlonglong_read_operator_FromDevice_data();
+ void qlonglong_read_operator_FromDevice();
+ void qulonglong_read_operator_FromDevice_data();
+ void qulonglong_read_operator_FromDevice();
+
+ // natural number write operator
+ void signedShort_write_operator_ToDevice_data();
+ void signedShort_write_operator_ToDevice();
+ void unsignedShort_write_operator_ToDevice_data();
+ void unsignedShort_write_operator_ToDevice();
+ void signedInt_write_operator_ToDevice_data();
+ void signedInt_write_operator_ToDevice();
+ void unsignedInt_write_operator_ToDevice_data();
+ void unsignedInt_write_operator_ToDevice();
+ void qlonglong_write_operator_ToDevice_data();
+ void qlonglong_write_operator_ToDevice();
+ void qulonglong_write_operator_ToDevice_data();
+ void qulonglong_write_operator_ToDevice();
+
+ void int_read_with_locale_data();
+ void int_read_with_locale();
+
+ void int_write_with_locale_data();
+ void int_write_with_locale();
+
+ // real number read operator
+ void float_read_operator_FromDevice_data();
+ void float_read_operator_FromDevice();
+ void double_read_operator_FromDevice_data();
+ void double_read_operator_FromDevice();
+
+ // real number write operator
+ void float_write_operator_ToDevice_data();
+ void float_write_operator_ToDevice();
+ void double_write_operator_ToDevice_data();
+ void double_write_operator_ToDevice();
+
+ void double_write_with_flags_data();
+ void double_write_with_flags();
+
+ void double_write_with_precision_data();
+ void double_write_with_precision();
+
+ // text read operators
+ void charPtr_read_operator_FromDevice_data();
+ void charPtr_read_operator_FromDevice();
+ void stringRef_read_operator_FromDevice_data();
+ void stringRef_read_operator_FromDevice();
+ void byteArray_read_operator_FromDevice_data();
+ void byteArray_read_operator_FromDevice();
+
+ // text write operators
+ void string_write_operator_ToDevice_data();
+ void string_write_operator_ToDevice();
+ void latin1String_write_operator_ToDevice();
+ void stringref_write_operator_ToDevice();
+
+ // other
+ void skipWhiteSpace_data();
+ void skipWhiteSpace();
+ void lineCount_data();
+ void lineCount();
+ void performance();
+ void hexTest_data();
+ void hexTest();
+ void binTest_data();
+ void binTest();
+ void octTest_data();
+ void octTest();
+ void zeroTermination();
+ void ws_manipulator();
+ void stillOpenWhenAtEnd();
+ void readNewlines_data();
+ void readNewlines();
+ void seek();
+ void pos();
+ void pos2();
+ void pos3LargeFile();
+ void readStdin();
+ void readAllFromStdin();
+ void readLineFromStdin();
+ void read();
+ void qbool();
+ void forcePoint();
+ void forceSign();
+ void read0d0d0a();
+ void numeralCase_data();
+ void numeralCase();
+ void nanInf();
+ void utf8IncompleteAtBufferBoundary_data();
+ void utf8IncompleteAtBufferBoundary();
+ void writeSeekWriteNoBOM();
+
+ // status
+ void status_real_read_data();
+ void status_real_read();
+ void status_integer_read();
+ void status_word_read();
+ void status_write_error();
+
+ // use case tests
+ void useCase1();
+ void useCase2();
+
+ // manipulators
+ void manipulators_data();
+ void manipulators();
+
+ // UTF-16 BOM (Byte Order Mark)
+ void generateBOM();
+ void readBomSeekBackReadBomAgain();
+
+ // Regression tests for old bugs
+ void alignAccountingStyle();
+ void setCodec();
+
+ void textModeOnEmptyRead();
+
+private:
+ void generateLineData(bool for_QString);
+ void generateAllData(bool for_QString);
+ void generateOperatorCharData(bool for_QString);
+ void generateNaturalNumbersData(bool for_QString);
+ void generateRealNumbersData(bool for_QString);
+ void generateStringData(bool for_QString);
+ void generateRealNumbersDataWrite();
+
+ QTemporaryDir tempDir;
+ QString testFileName;
+#ifdef BUILTIN_TESTDATA
+ QSharedPointer<QTemporaryDir> m_dataDir;
+#endif
+ const QString m_rfc3261FilePath;
+ const QString m_shiftJisFilePath;
+};
+
+void runOnExit()
+{
+ QByteArray buffer;
+ QTextStream(&buffer) << "This will try to use QTextCodec::codecForLocale" << endl;
+}
+Q_DESTRUCTOR_FUNCTION(runOnExit)
+
+tst_QTextStream::tst_QTextStream()
+ : tempDir(QDir::tempPath() + "/tst_qtextstream.XXXXXX")
+ , m_rfc3261FilePath(QFINDTESTDATA("rfc3261.txt"))
+ , m_shiftJisFilePath(QFINDTESTDATA("shift-jis.txt"))
+{
+}
+
+void tst_QTextStream::initTestCase()
+{
+ QVERIFY2(tempDir.isValid(), qPrintable(tempDir.errorString()));
+ QVERIFY(!m_rfc3261FilePath.isEmpty());
+ QVERIFY(!m_shiftJisFilePath.isEmpty());
+
+ testFileName = tempDir.path() + "/testfile";
+
+#ifdef BUILTIN_TESTDATA
+ m_dataDir = QEXTRACTTESTDATA("/");
+ QVERIFY2(QDir::setCurrent(m_dataDir->path()), qPrintable("Could not chdir to " + m_dataDir->path()));
+#else
+ // chdir into the testdata dir and refer to our helper apps with relative paths
+ QString testdata_dir = QFileInfo(QFINDTESTDATA("stdinProcess")).absolutePath();
+ QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir));
+#endif
+}
+
+// Testing get/set functions
+void tst_QTextStream::getSetCheck()
+{
+ // Initialize codecs
+ QTextStream obj1;
+ // QTextCodec * QTextStream::codec()
+ // void QTextStream::setCodec(QTextCodec *)
+ QTextCodec *var1 = QTextCodec::codecForName("en");
+ obj1.setCodec(var1);
+ QCOMPARE(var1, obj1.codec());
+ obj1.setCodec((QTextCodec *)0);
+ QCOMPARE((QTextCodec *)0, obj1.codec());
+
+ // bool QTextStream::autoDetectUnicode()
+ // void QTextStream::setAutoDetectUnicode(bool)
+ obj1.setAutoDetectUnicode(false);
+ QCOMPARE(false, obj1.autoDetectUnicode());
+ obj1.setAutoDetectUnicode(true);
+ QCOMPARE(true, obj1.autoDetectUnicode());
+
+ // bool QTextStream::generateByteOrderMark()
+ // void QTextStream::setGenerateByteOrderMark(bool)
+ obj1.setGenerateByteOrderMark(false);
+ QCOMPARE(false, obj1.generateByteOrderMark());
+ obj1.setGenerateByteOrderMark(true);
+ QCOMPARE(true, obj1.generateByteOrderMark());
+
+ // QIODevice * QTextStream::device()
+ // void QTextStream::setDevice(QIODevice *)
+ QFile *var4 = new QFile;
+ obj1.setDevice(var4);
+ QCOMPARE(static_cast<QIODevice *>(var4), obj1.device());
+ obj1.setDevice((QIODevice *)0);
+ QCOMPARE((QIODevice *)0, obj1.device());
+ delete var4;
+
+ // Status QTextStream::status()
+ // void QTextStream::setStatus(Status)
+ obj1.setStatus(QTextStream::Status(QTextStream::Ok));
+ QCOMPARE(QTextStream::Status(QTextStream::Ok), obj1.status());
+ obj1.setStatus(QTextStream::Status(QTextStream::ReadPastEnd));
+ QCOMPARE(QTextStream::Status(QTextStream::ReadPastEnd), obj1.status());
+ obj1.resetStatus();
+ obj1.setStatus(QTextStream::Status(QTextStream::ReadCorruptData));
+ QCOMPARE(QTextStream::Status(QTextStream::ReadCorruptData), obj1.status());
+
+ // FieldAlignment QTextStream::fieldAlignment()
+ // void QTextStream::setFieldAlignment(FieldAlignment)
+ obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignLeft));
+ QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignLeft), obj1.fieldAlignment());
+ obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignRight));
+ QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignRight), obj1.fieldAlignment());
+ obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignCenter));
+ QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignCenter), obj1.fieldAlignment());
+ obj1.setFieldAlignment(QTextStream::FieldAlignment(QTextStream::AlignAccountingStyle));
+ QCOMPARE(QTextStream::FieldAlignment(QTextStream::AlignAccountingStyle), obj1.fieldAlignment());
+
+ // QChar QTextStream::padChar()
+ // void QTextStream::setPadChar(QChar)
+ QChar var7 = 'Q';
+ obj1.setPadChar(var7);
+ QCOMPARE(var7, obj1.padChar());
+ obj1.setPadChar(QChar());
+ QCOMPARE(QChar(), obj1.padChar());
+
+ // int QTextStream::fieldWidth()
+ // void QTextStream::setFieldWidth(int)
+ obj1.setFieldWidth(0);
+ QCOMPARE(0, obj1.fieldWidth());
+ obj1.setFieldWidth(INT_MIN);
+ QCOMPARE(INT_MIN, obj1.fieldWidth());
+ obj1.setFieldWidth(INT_MAX);
+ QCOMPARE(INT_MAX, obj1.fieldWidth());
+
+ // NumberFlags QTextStream::numberFlags()
+ // void QTextStream::setNumberFlags(NumberFlags)
+ obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ShowBase));
+ QCOMPARE(QTextStream::NumberFlags(QTextStream::ShowBase), obj1.numberFlags());
+ obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ForcePoint));
+ QCOMPARE(QTextStream::NumberFlags(QTextStream::ForcePoint), obj1.numberFlags());
+ obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::ForceSign));
+ QCOMPARE(QTextStream::NumberFlags(QTextStream::ForceSign), obj1.numberFlags());
+ obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::UppercaseBase));
+ QCOMPARE(QTextStream::NumberFlags(QTextStream::UppercaseBase), obj1.numberFlags());
+ obj1.setNumberFlags(QTextStream::NumberFlags(QTextStream::UppercaseDigits));
+ QCOMPARE(QTextStream::NumberFlags(QTextStream::UppercaseDigits), obj1.numberFlags());
+
+ // int QTextStream::integerBase()
+ // void QTextStream::setIntegerBase(int)
+ obj1.setIntegerBase(0);
+ QCOMPARE(0, obj1.integerBase());
+ obj1.setIntegerBase(INT_MIN);
+ QCOMPARE(INT_MIN, obj1.integerBase());
+ obj1.setIntegerBase(INT_MAX);
+ QCOMPARE(INT_MAX, obj1.integerBase());
+
+ // RealNumberNotation QTextStream::realNumberNotation()
+ // void QTextStream::setRealNumberNotation(RealNumberNotation)
+ obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::SmartNotation));
+ QCOMPARE(QTextStream::RealNumberNotation(QTextStream::SmartNotation), obj1.realNumberNotation());
+ obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::FixedNotation));
+ QCOMPARE(QTextStream::RealNumberNotation(QTextStream::FixedNotation), obj1.realNumberNotation());
+ obj1.setRealNumberNotation(QTextStream::RealNumberNotation(QTextStream::ScientificNotation));
+ QCOMPARE(QTextStream::RealNumberNotation(QTextStream::ScientificNotation), obj1.realNumberNotation());
+
+ // int QTextStream::realNumberPrecision()
+ // void QTextStream::setRealNumberPrecision(int)
+ obj1.setRealNumberPrecision(0);
+ QCOMPARE(0, obj1.realNumberPrecision());
+ obj1.setRealNumberPrecision(INT_MIN);
+ QCOMPARE(6, obj1.realNumberPrecision()); // Setting a negative precision reverts it to the default value (6).
+ obj1.setRealNumberPrecision(INT_MAX);
+ QCOMPARE(INT_MAX, obj1.realNumberPrecision());
+}
+
+void tst_QTextStream::cleanup()
+{
+ QCoreApplication::instance()->processEvents();
+}
+
+void tst_QTextStream::cleanupTestCase()
+{
+#ifdef BUILTIN_TESTDATA
+ QDir::setCurrent(QCoreApplication::applicationDirPath());
+#endif
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::construction()
+{
+ QTextStream stream;
+ QCOMPARE(stream.codec(), QTextCodec::codecForLocale());
+ QCOMPARE(stream.device(), static_cast<QIODevice *>(0));
+ QCOMPARE(stream.string(), static_cast<QString *>(0));
+
+ QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
+ QVERIFY(stream.atEnd());
+
+ QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
+ QCOMPARE(stream.readAll(), QString());
+
+}
+
+void tst_QTextStream::generateLineData(bool for_QString)
+{
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QStringList>("lines");
+
+ // latin-1
+ QTest::newRow("emptyer") << QByteArray() << QStringList();
+ QTest::newRow("lf") << QByteArray("\n") << (QStringList() << "");
+ QTest::newRow("crlf") << QByteArray("\r\n") << (QStringList() << "");
+ QTest::newRow("oneline/nothing") << QByteArray("ole") << (QStringList() << "ole");
+ QTest::newRow("oneline/lf") << QByteArray("ole\n") << (QStringList() << "ole");
+ QTest::newRow("oneline/crlf") << QByteArray("ole\r\n") << (QStringList() << "ole");
+ QTest::newRow("twolines/lf/lf") << QByteArray("ole\ndole\n") << (QStringList() << "ole" << "dole");
+ QTest::newRow("twolines/crlf/crlf") << QByteArray("ole\r\ndole\r\n") << (QStringList() << "ole" << "dole");
+ QTest::newRow("twolines/lf/crlf") << QByteArray("ole\ndole\r\n") << (QStringList() << "ole" << "dole");
+ QTest::newRow("twolines/lf/nothing") << QByteArray("ole\ndole") << (QStringList() << "ole" << "dole");
+ QTest::newRow("twolines/crlf/nothing") << QByteArray("ole\r\ndole") << (QStringList() << "ole" << "dole");
+ QTest::newRow("threelines/lf/lf/lf") << QByteArray("ole\ndole\ndoffen\n") << (QStringList() << "ole" << "dole" << "doffen");
+ QTest::newRow("threelines/crlf/crlf/crlf") << QByteArray("ole\r\ndole\r\ndoffen\r\n") << (QStringList() << "ole" << "dole" << "doffen");
+ QTest::newRow("threelines/crlf/crlf/nothing") << QByteArray("ole\r\ndole\r\ndoffen") << (QStringList() << "ole" << "dole" << "doffen");
+
+ if (!for_QString) {
+ // utf-8
+ QTest::newRow("utf8/twolines")
+ << QByteArray("\xef\xbb\xbf"
+ "\x66\x67\x65\x0a"
+ "\x66\x67\x65\x0a", 11)
+ << (QStringList() << "fge" << "fge");
+
+ // utf-16
+ // one line
+ QTest::newRow("utf16-BE/nothing")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65", 8) << (QStringList() << QLatin1String("\345ge"));
+ QTest::newRow("utf16-LE/nothing")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00", 8) << (QStringList() << QLatin1String("\345ge"));
+ QTest::newRow("utf16-BE/lf")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a", 10) << (QStringList() << QLatin1String("\345ge"));
+ QTest::newRow("utf16-LE/lf")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00", 10) << (QStringList() << QLatin1String("\345ge"));
+
+ // two lines
+ QTest::newRow("utf16-BE/twolines")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a", 18)
+ << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
+ QTest::newRow("utf16-LE/twolines")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00", 18)
+ << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
+
+ // three lines
+ QTest::newRow("utf16-BE/threelines")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a", 26)
+ << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge") << QLatin1String("\345ge"));
+ QTest::newRow("utf16-LE/threelines")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00", 26)
+ << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge") << QLatin1String("\345ge"));
+
+ // utf-32
+ QTest::newRow("utf32-BE/twolines")
+ << QByteArray("\x00\x00\xfe\xff"
+ "\x00\x00\x00\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a"
+ "\x00\x00\x00\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a", 36)
+ << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
+ QTest::newRow("utf32-LE/twolines")
+ << QByteArray("\xff\xfe\x00\x00"
+ "\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a\x00\x00\x00"
+ "\xe5\x00\x00\x00\x67\x00\x00\x00\x65\x00\x00\x00\x0a\x00\x00\x00", 36)
+ << (QStringList() << QLatin1String("\345ge") << QLatin1String("\345ge"));
+ }
+
+ // partials
+ QTest::newRow("cr") << QByteArray("\r") << (QStringList() << "");
+ QTest::newRow("oneline/cr") << QByteArray("ole\r") << (QStringList() << "ole");
+ if (!for_QString)
+ QTest::newRow("utf16-BE/cr") << QByteArray("\xfe\xff\x00\xe5\x00\x67\x00\x65\x00\x0d", 10) << (QStringList() << QLatin1String("\345ge"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromDevice_data()
+{
+ generateLineData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromDevice()
+{
+ QFETCH(QByteArray, data);
+ QFETCH(QStringList, lines);
+
+ QFile::remove(testFileName);
+ QFile file(testFileName);
+ QVERIFY(file.open(QFile::ReadWrite));
+ QCOMPARE(file.write(data), qlonglong(data.size()));
+ QVERIFY(file.flush());
+ file.seek(0);
+
+ QTextStream stream(&file);
+ QStringList list;
+ while (!stream.atEnd())
+ list << stream.readLine();
+
+ QCOMPARE(list, lines);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineMaxlen_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QStringList>("lines");
+
+ QTest::newRow("Hey")
+ << QString("Hey")
+ << (QStringList() << QString("Hey") << QString(""));
+ QTest::newRow("Hey\\n")
+ << QString("Hey\n")
+ << (QStringList() << QString("Hey") << QString(""));
+ QTest::newRow("HelloWorld")
+ << QString("HelloWorld")
+ << (QStringList() << QString("Hello") << QString("World"));
+ QTest::newRow("Helo\\nWorlds")
+ << QString("Helo\nWorlds")
+ << (QStringList() << QString("Helo") << QString("World"));
+ QTest::newRow("AAAAA etc.")
+ << QString(16385, QLatin1Char('A'))
+ << (QStringList() << QString("AAAAA") << QString("AAAAA"));
+ QTest::newRow("multibyte string")
+ << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240\n")
+ << (QStringList() << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242")
+ << QString::fromUtf8("\341\233\232\341\232\240"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineMaxlen()
+{
+ QFETCH(QString, input);
+ QFETCH(QStringList, lines);
+ for (int i = 0; i < 2; ++i) {
+ bool useDevice = (i == 1);
+ QTextStream stream;
+ QFile::remove("testfile");
+ QFile file("testfile");
+ if (useDevice) {
+ file.open(QIODevice::ReadWrite);
+ file.write(input.toUtf8());
+ file.seek(0);
+ stream.setDevice(&file);
+ stream.setCodec("utf-8");
+ } else {
+ stream.setString(&input);
+ }
+
+ QStringList list;
+ list << stream.readLine(5);
+ list << stream.readLine(5);
+
+ QCOMPARE(list, lines);
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLinesFromBufferCRCR()
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+ QByteArray data("0123456789\r\r\n");
+
+ for (int i = 0; i < 10000; ++i)
+ buffer.write(data);
+
+ buffer.close();
+ if (buffer.open(QIODevice::ReadOnly|QIODevice::Text)) {
+ QTextStream stream(&buffer);
+ while (!stream.atEnd())
+ QCOMPARE(stream.readLine(), QString("0123456789"));
+ }
+}
+
+class ErrorDevice : public QIODevice
+{
+protected:
+ qint64 readData(char *data, qint64 maxlen) override
+ {
+ Q_UNUSED(data)
+ Q_UNUSED(maxlen)
+ return -1;
+ }
+
+ qint64 writeData(const char *data, qint64 len) override
+ {
+ Q_UNUSED(data)
+ Q_UNUSED(len)
+ return -1;
+ }
+};
+
+void tst_QTextStream::readLineInto()
+{
+ QByteArray data = "1\n2\n3";
+
+ QTextStream ts(&data);
+ QString line;
+
+ ts.readLineInto(&line);
+ QCOMPARE(line, QStringLiteral("1"));
+
+ ts.readLineInto(nullptr, 0); // read the second line, but don't store it
+
+ ts.readLineInto(&line);
+ QCOMPARE(line, QStringLiteral("3"));
+
+ QVERIFY(!ts.readLineInto(&line));
+ QVERIFY(line.isEmpty());
+
+ QFile file(m_rfc3261FilePath);
+ QVERIFY(file.open(QFile::ReadOnly));
+
+ ts.setDevice(&file);
+ line.reserve(1);
+ int maxLineCapacity = line.capacity();
+
+ while (ts.readLineInto(&line)) {
+ QVERIFY(line.capacity() >= maxLineCapacity);
+ maxLineCapacity = line.capacity();
+ }
+
+ line = "Test string";
+ ErrorDevice errorDevice;
+ QVERIFY(errorDevice.open(QIODevice::ReadOnly));
+ ts.setDevice(&errorDevice);
+
+ QVERIFY(!ts.readLineInto(&line));
+ QVERIFY(line.isEmpty());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromString_data()
+{
+ generateLineData(true);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromString()
+{
+ QFETCH(QByteArray, data);
+ QFETCH(QStringList, lines);
+
+ QString dataString = data;
+
+ QTextStream stream(&dataString, QIODevice::ReadOnly);
+ QStringList list;
+ while (!stream.atEnd())
+ list << stream.readLine();
+
+ QCOMPARE(list, lines);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromStringThenChangeString()
+{
+ QString first = "First string";
+ QString second = "Second string";
+
+ QTextStream stream(&first, QIODevice::ReadOnly);
+ QString result = stream.readLine();
+ QCOMPARE(first, result);
+
+ stream.setString(&second, QIODevice::ReadOnly);
+ result = stream.readLine();
+ QCOMPARE(second, result);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::setDevice()
+{
+ // Check that the read buffer is reset after setting a new device
+ QByteArray data1("Hello World");
+ QByteArray data2("How are you");
+
+ QBuffer bufferOld(&data1);
+ bufferOld.open(QIODevice::ReadOnly);
+
+ QBuffer bufferNew(&data2);
+ bufferNew.open(QIODevice::ReadOnly);
+
+ QString text;
+ QTextStream stream(&bufferOld);
+ stream >> text;
+ QCOMPARE(text, QString("Hello"));
+
+ stream.setDevice(&bufferNew);
+ stream >> text;
+ QCOMPARE(text, QString("How"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromTextDevice_data()
+{
+ generateLineData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromTextDevice()
+{
+ QFETCH(QByteArray, data);
+ QFETCH(QStringList, lines);
+
+ for (int i = 0; i < 8; ++i) {
+ QBuffer buffer(&data);
+ if (i < 4)
+ QVERIFY(buffer.open(QIODevice::ReadOnly | QIODevice::Text));
+ else
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+
+ QTextStream stream(&buffer);
+ QStringList list;
+ while (!stream.atEnd()) {
+ stream.pos(); // <- triggers side effects
+ QString line;
+
+ if (i & 1) {
+ QChar c;
+ while (!stream.atEnd()) {
+ stream >> c;
+ if (stream.status() == QTextStream::Ok) {
+ if (c != QLatin1Char('\n') && c != QLatin1Char('\r'))
+ line += c;
+ if (c == QLatin1Char('\n'))
+ break;
+ }
+ }
+ } else {
+ line = stream.readLine();
+ }
+
+ if ((i & 3) == 3 && !QString(QTest::currentDataTag()).contains("utf16"))
+ stream.seek(stream.pos());
+ list << line;
+ }
+ QCOMPARE(list, lines);
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::generateAllData(bool for_QString)
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QString>("output");
+
+ // latin-1
+ QTest::newRow("empty") << QByteArray() << QString();
+ QTest::newRow("latin1-a") << QByteArray("a") << QString("a");
+ QTest::newRow("latin1-a\\r") << QByteArray("a\r") << QString("a\r");
+ QTest::newRow("latin1-a\\r\\n") << QByteArray("a\r\n") << QString("a\r\n");
+ QTest::newRow("latin1-a\\n") << QByteArray("a\n") << QString("a\n");
+
+ // utf-16
+ if (!for_QString) {
+ // one line
+ QTest::newRow("utf16-BE/nothing")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65", 8) << QString::fromLatin1("\345ge");
+ QTest::newRow("utf16-LE/nothing")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00", 8) << QString::fromLatin1("\345ge");
+ QTest::newRow("utf16-BE/lf")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a", 10) << QString::fromLatin1("\345ge\n");
+ QTest::newRow("utf16-LE/lf")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00", 10) << QString::fromLatin1("\345ge\n");
+ QTest::newRow("utf16-BE/crlf")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0d\x00\x0a", 12) << QString::fromLatin1("\345ge\r\n");
+ QTest::newRow("utf16-LE/crlf")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0d\x00\x0a\x00", 12) << QString::fromLatin1("\345ge\r\n");
+
+ // two lines
+ QTest::newRow("utf16-BE/twolines")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a", 18)
+ << QString::fromLatin1("\345ge\n\345ge\n");
+ QTest::newRow("utf16-LE/twolines")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00", 18)
+ << QString::fromLatin1("\345ge\n\345ge\n");
+
+ // three lines
+ QTest::newRow("utf16-BE/threelines")
+ << QByteArray("\xfe\xff"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a"
+ "\x00\xe5\x00\x67\x00\x65\x00\x0a", 26)
+ << QString::fromLatin1("\345ge\n\345ge\n\345ge\n");
+ QTest::newRow("utf16-LE/threelines")
+ << QByteArray("\xff\xfe"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00"
+ "\xe5\x00\x67\x00\x65\x00\x0a\x00", 26)
+ << QString::fromLatin1("\345ge\n\345ge\n\345ge\n");
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineUntilNull()
+{
+ QFile file(m_rfc3261FilePath);
+ QVERIFY(file.open(QFile::ReadOnly));
+
+ QTextStream stream(&file);
+ for (int i = 0; i < 15066; ++i) {
+ QString line = stream.readLine();
+ QVERIFY(!line.isNull());
+ QVERIFY(!line.isNull());
+ }
+ QVERIFY(!stream.readLine().isNull());
+ QVERIFY(stream.readLine().isNull());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readAllFromDevice_data()
+{
+ generateAllData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readAllFromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QString, output);
+
+ QBuffer buffer(&input);
+ buffer.open(QBuffer::ReadOnly);
+
+ QTextStream stream(&buffer);
+ QCOMPARE(stream.readAll(), output);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readAllFromString_data()
+{
+ generateAllData(true);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readAllFromString()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QString, output);
+
+ QString str = input;
+
+ QTextStream stream(&str);
+ QCOMPARE(stream.readAll(), output);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::skipWhiteSpace_data()
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QChar>("output");
+
+ // latin1
+ QTest::newRow("empty") << QByteArray() << QChar('\0');
+ QTest::newRow(" one") << QByteArray(" one") << QChar('o');
+ QTest::newRow("\\none") << QByteArray("\none") << QChar('o');
+ QTest::newRow("\\n one") << QByteArray("\n one") << QChar('o');
+ QTest::newRow(" \\r\\n one") << QByteArray(" \r\n one") << QChar('o');
+
+ // utf-16
+ QTest::newRow("utf16-BE (empty)") << QByteArray("\xfe\xff", 2) << QChar('\0');
+ QTest::newRow("utf16-BE ( one)") << QByteArray("\xfe\xff\x00 \x00o\x00n\x00e", 10) << QChar('o');
+ QTest::newRow("utf16-BE (\\none)") << QByteArray("\xfe\xff\x00\n\x00o\x00n\x00e", 10) << QChar('o');
+ QTest::newRow("utf16-BE (\\n one)") << QByteArray("\xfe\xff\x00\n\x00 \x00o\x00n\x00e", 12) << QChar('o');
+ QTest::newRow("utf16-BE ( \\r\\n one)") << QByteArray("\xfe\xff\x00 \x00\r\x00\n\x00 \x00o\x00n\x00e", 16) << QChar('o');
+
+ QTest::newRow("utf16-LE (empty)") << QByteArray("\xff\xfe", 2) << QChar('\0');
+ QTest::newRow("utf16-LE ( one)") << QByteArray("\xff\xfe \x00o\x00n\x00e\x00", 10) << QChar('o');
+ QTest::newRow("utf16-LE (\\none)") << QByteArray("\xff\xfe\n\x00o\x00n\x00e\x00", 10) << QChar('o');
+ QTest::newRow("utf16-LE (\\n one)") << QByteArray("\xff\xfe\n\x00 \x00o\x00n\x00e\x00", 12) << QChar('o');
+ QTest::newRow("utf16-LE ( \\r\\n one)") << QByteArray("\xff\xfe \x00\r\x00\n\x00 \x00o\x00n\x00e\x00", 16) << QChar('o');
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::skipWhiteSpace()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QChar, output);
+
+ QBuffer buffer(&input);
+ buffer.open(QBuffer::ReadOnly);
+
+ QTextStream stream(&buffer);
+ stream.skipWhiteSpace();
+
+ QChar tmp;
+ stream >> tmp;
+
+ QCOMPARE(tmp, output);
+
+ QString str = input;
+ QTextStream stream2(&input);
+ stream2.skipWhiteSpace();
+
+ stream2 >> tmp;
+
+ QCOMPARE(tmp, output);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::lineCount_data()
+{
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<int>("lineCount");
+
+ QTest::newRow("empty") << QByteArray() << 0;
+ QTest::newRow("oneline") << QByteArray("a\n") << 1;
+ QTest::newRow("twolines") << QByteArray("a\nb\n") << 2;
+ QTest::newRow("oneemptyline") << QByteArray("\n") << 1;
+ QTest::newRow("twoemptylines") << QByteArray("\n\n") << 2;
+ QTest::newRow("buffersize-1 line") << QByteArray(16382, '\n') << 16382;
+ QTest::newRow("buffersize line") << QByteArray(16383, '\n') << 16383;
+ QTest::newRow("buffersize+1 line") << QByteArray(16384, '\n') << 16384;
+ QTest::newRow("buffersize+2 line") << QByteArray(16385, '\n') << 16385;
+
+ QFile file(m_rfc3261FilePath); file.open(QFile::ReadOnly);
+ QTest::newRow("rfc3261") << file.readAll() << 15067;
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::lineCount()
+{
+ QFETCH(QByteArray, data);
+ QFETCH(int, lineCount);
+
+ QFile out("out.txt");
+ out.open(QFile::WriteOnly);
+
+ QTextStream lineReader(data);
+ int lines = 0;
+ while (!lineReader.atEnd()) {
+ QString line = lineReader.readLine();
+ out.write(line.toLatin1() + "\n");
+ ++lines;
+ }
+
+ out.close();
+ QCOMPARE(lines, lineCount);
+}
+
+// ------------------------------------------------------------------------------
+struct CompareIndicesForArray
+{
+ int *array;
+ CompareIndicesForArray(int *array) : array(array) {}
+ bool operator() (const int i1, const int i2)
+ {
+ return array[i1] < array[i2];
+ }
+};
+
+void tst_QTextStream::performance()
+{
+ // Phase #1 - test speed of reading a huge text file with QFile.
+ QTime stopWatch;
+
+ const int N = 3;
+ const char * readMethods[N] = {
+ "QFile::readLine()",
+ "QTextStream::readLine()",
+ "QTextStream::readLine(QString *)"
+ };
+ int elapsed[N] = {0, 0, 0};
+
+ stopWatch.restart();
+ int nlines1 = 0;
+ QFile file(m_rfc3261FilePath);
+ QVERIFY(file.open(QFile::ReadOnly));
+
+ while (!file.atEnd()) {
+ ++nlines1;
+ file.readLine();
+ }
+
+ elapsed[0] = stopWatch.elapsed();
+ stopWatch.restart();
+
+ int nlines2 = 0;
+ QFile file2(m_rfc3261FilePath);
+ QVERIFY(file2.open(QFile::ReadOnly));
+
+ QTextStream stream(&file2);
+ while (!stream.atEnd()) {
+ ++nlines2;
+ stream.readLine();
+ }
+
+ elapsed[1] = stopWatch.elapsed();
+ stopWatch.restart();
+
+ int nlines3 = 0;
+ QFile file3(m_rfc3261FilePath);
+ QVERIFY(file3.open(QFile::ReadOnly));
+
+ QTextStream stream2(&file3);
+ QString line;
+ while (stream2.readLineInto(&line))
+ ++nlines3;
+
+ elapsed[2] = stopWatch.elapsed();
+
+ QCOMPARE(nlines1, nlines2);
+ QCOMPARE(nlines2, nlines3);
+
+ for (int i = 0; i < N; i++) {
+ qDebug("%s used %.3f seconds to read the file", readMethods[i],
+ elapsed[i] / 1000.0);
+ }
+
+ int idx[N] = {0, 1, 2};
+ std::sort(idx, idx + N, CompareIndicesForArray(elapsed));
+
+ for (int i = 0; i < N-1; i++) {
+ int i1 = idx[i];
+ int i2 = idx[i+1];
+ qDebug("Reading by %s is %.2fx faster than by %s",
+ readMethods[i1],
+ double(elapsed[i2]) / double(elapsed[i1]),
+ readMethods[i2]);
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::hexTest_data()
+{
+ QTest::addColumn<qlonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+
+ QTest::newRow("0") << Q_INT64_C(0) << QByteArray("0x0");
+ QTest::newRow("1") << Q_INT64_C(1) << QByteArray("0x1");
+ QTest::newRow("2") << Q_INT64_C(2) << QByteArray("0x2");
+ QTest::newRow("3") << Q_INT64_C(3) << QByteArray("0x3");
+ QTest::newRow("4") << Q_INT64_C(4) << QByteArray("0x4");
+ QTest::newRow("5") << Q_INT64_C(5) << QByteArray("0x5");
+ QTest::newRow("6") << Q_INT64_C(6) << QByteArray("0x6");
+ QTest::newRow("7") << Q_INT64_C(7) << QByteArray("0x7");
+ QTest::newRow("8") << Q_INT64_C(8) << QByteArray("0x8");
+ QTest::newRow("9") << Q_INT64_C(9) << QByteArray("0x9");
+ QTest::newRow("a") << Q_INT64_C(0xa) << QByteArray("0xa");
+ QTest::newRow("b") << Q_INT64_C(0xb) << QByteArray("0xb");
+ QTest::newRow("c") << Q_INT64_C(0xc) << QByteArray("0xc");
+ QTest::newRow("d") << Q_INT64_C(0xd) << QByteArray("0xd");
+ QTest::newRow("e") << Q_INT64_C(0xe) << QByteArray("0xe");
+ QTest::newRow("f") << Q_INT64_C(0xf) << QByteArray("0xf");
+ QTest::newRow("-1") << Q_INT64_C(-1) << QByteArray("-0x1");
+ QTest::newRow("0xffffffff") << Q_INT64_C(0xffffffff) << QByteArray("0xffffffff");
+ QTest::newRow("0xfffffffffffffffe") << Q_INT64_C(0xfffffffffffffffe) << QByteArray("-0x2");
+ QTest::newRow("0xffffffffffffffff") << Q_INT64_C(0xffffffffffffffff) << QByteArray("-0x1");
+ QTest::newRow("0x7fffffffffffffff") << Q_INT64_C(0x7fffffffffffffff) << QByteArray("0x7fffffffffffffff");
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::hexTest()
+{
+ QFETCH(qlonglong, number);
+ QFETCH(QByteArray, data);
+
+ QByteArray array;
+ QTextStream stream(&array);
+
+ stream << showbase << hex << number;
+ stream.flush();
+ QCOMPARE(array, data);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::binTest_data()
+{
+ QTest::addColumn<int>("number");
+ QTest::addColumn<QByteArray>("data");
+
+ QTest::newRow("0") << 0 << QByteArray("0b0");
+ QTest::newRow("1") << 1 << QByteArray("0b1");
+ QTest::newRow("2") << 2 << QByteArray("0b10");
+ QTest::newRow("5") << 5 << QByteArray("0b101");
+ QTest::newRow("-1") << -1 << QByteArray("-0b1");
+ QTest::newRow("11111111") << 0xff << QByteArray("0b11111111");
+ QTest::newRow("1111111111111111") << 0xffff << QByteArray("0b1111111111111111");
+ QTest::newRow("1111111011111110") << 0xfefe << QByteArray("0b1111111011111110");
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::binTest()
+{
+ QFETCH(int, number);
+ QFETCH(QByteArray, data);
+
+ QByteArray array;
+ QTextStream stream(&array);
+
+ stream << showbase << bin << number;
+ stream.flush();
+ QCOMPARE(array.constData(), data.constData());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::octTest_data()
+{
+ QTest::addColumn<int>("number");
+ QTest::addColumn<QByteArray>("data");
+
+ QTest::newRow("0") << 0 << QByteArray("00");
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::octTest()
+{
+ QFETCH(int, number);
+ QFETCH(QByteArray, data);
+
+ QByteArray array;
+ QTextStream stream(&array);
+
+ stream << showbase << oct << number;
+ stream.flush();
+ QCOMPARE(array, data);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::zeroTermination()
+{
+ QTextStream stream;
+ char c = '@';
+
+ QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
+ stream >> c;
+ QCOMPARE(c, '\0');
+
+ c = '@';
+
+ QTest::ignoreMessage(QtWarningMsg, "QTextStream: No device");
+ stream >> &c;
+ QCOMPARE(c, '\0');
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::ws_manipulator()
+{
+ {
+ QString string = "a b c d";
+ QTextStream stream(&string);
+
+ char a, b, c, d;
+ stream >> a >> b >> c >> d;
+ QCOMPARE(a, 'a');
+ QCOMPARE(b, ' ');
+ QCOMPARE(c, 'b');
+ QCOMPARE(d, ' ');
+ }
+ {
+ QString string = "a b c d";
+ QTextStream stream(&string);
+
+ char a, b, c, d;
+ stream >> a >> ws >> b >> ws >> c >> ws >> d;
+ QCOMPARE(a, 'a');
+ QCOMPARE(b, 'b');
+ QCOMPARE(c, 'c');
+ QCOMPARE(d, 'd');
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::stillOpenWhenAtEnd()
+{
+ QFile file(QFINDTESTDATA("tst_qtextstream.cpp"));
+ QVERIFY(file.open(QFile::ReadOnly));
+
+ QTextStream stream(&file);
+ while (!stream.readLine().isNull()) {}
+ QVERIFY(file.isOpen());
+
+ if (!QtNetworkSettings::verifyTestNetworkSettings())
+ QSKIP("No network test server available");
+
+ QTcpSocket socket;
+ socket.connectToHost(QtNetworkSettings::serverName(), 143);
+ QVERIFY(socket.waitForReadyRead(5000));
+
+ QTextStream stream2(&socket);
+ while (!stream2.readLine().isNull()) {}
+ QVERIFY(socket.isOpen());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readNewlines_data()
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QString>("output");
+
+ QTest::newRow("empty") << QByteArray() << QString();
+ QTest::newRow("\\r\\n") << QByteArray("\r\n") << QString("\n");
+ QTest::newRow("\\r\\r\\n") << QByteArray("\r\r\n") << QString("\n");
+ QTest::newRow("\\r\\n\\r\\n") << QByteArray("\r\n\r\n") << QString("\n\n");
+ QTest::newRow("\\n") << QByteArray("\n") << QString("\n");
+ QTest::newRow("\\n\\n") << QByteArray("\n\n") << QString("\n\n");
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readNewlines()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QString, output);
+
+ QBuffer buffer(&input);
+ buffer.open(QBuffer::ReadOnly | QBuffer::Text);
+ QTextStream stream(&buffer);
+ QCOMPARE(stream.readAll(), output);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::seek()
+{
+ QFile file(m_rfc3261FilePath);
+ QVERIFY(file.open(QFile::ReadOnly));
+
+ QTextStream stream(&file);
+ QString tmp;
+ stream >> tmp;
+ QCOMPARE(tmp, QString::fromLatin1("Network"));
+
+ // QTextStream::seek(0) should both clear its internal read/write buffers
+ // and seek the device.
+ for (int i = 0; i < 4; ++i) {
+ stream.seek(12 + i);
+ stream >> tmp;
+ QCOMPARE(tmp, QString("Network").mid(i));
+ }
+ for (int i = 0; i < 4; ++i) {
+ stream.seek(16 - i);
+ stream >> tmp;
+ QCOMPARE(tmp, QString("Network").mid(4 - i));
+ }
+ stream.seek(139181);
+ stream >> tmp;
+ QCOMPARE(tmp, QString("information"));
+ stream.seek(388683);
+ stream >> tmp;
+ QCOMPARE(tmp, QString("telephone"));
+
+ // Also test this with a string
+ QString words = QLatin1String("thisisa");
+ QTextStream stream2(&words, QIODevice::ReadOnly);
+ stream2 >> tmp;
+ QCOMPARE(tmp, QString::fromLatin1("thisisa"));
+
+ for (int i = 0; i < 4; ++i) {
+ stream2.seek(i);
+ stream2 >> tmp;
+ QCOMPARE(tmp, QString("thisisa").mid(i));
+ }
+ for (int i = 0; i < 4; ++i) {
+ stream2.seek(4 - i);
+ stream2 >> tmp;
+ QCOMPARE(tmp, QString("thisisa").mid(4 - i));
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::pos()
+{
+ {
+ // Strings
+ QString str("this is a test");
+ QTextStream stream(&str, QIODevice::ReadWrite);
+
+ QCOMPARE(stream.pos(), qint64(0));
+ for (int i = 0; i <= str.size(); ++i) {
+ QVERIFY(stream.seek(i));
+ QCOMPARE(stream.pos(), qint64(i));
+ }
+ for (int j = str.size(); j >= 0; --j) {
+ QVERIFY(stream.seek(j));
+ QCOMPARE(stream.pos(), qint64(j));
+ }
+
+ QVERIFY(stream.seek(0));
+
+ QChar ch;
+ stream >> ch;
+ QCOMPARE(ch, QChar('t'));
+
+ QCOMPARE(stream.pos(), qint64(1));
+ QVERIFY(stream.seek(1));
+ QCOMPARE(stream.pos(), qint64(1));
+ QVERIFY(stream.seek(0));
+
+ QString strtmp;
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString("this"));
+
+ QCOMPARE(stream.pos(), qint64(4));
+ stream.seek(0);
+ stream.seek(4);
+
+ stream >> ch;
+ QCOMPARE(ch, QChar(' '));
+ QCOMPARE(stream.pos(), qint64(5));
+
+ stream.seek(10);
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString("test"));
+ QCOMPARE(stream.pos(), qint64(14));
+ }
+ {
+ // Latin1 device
+ QFile file(m_rfc3261FilePath);
+ QVERIFY(file.open(QIODevice::ReadOnly));
+
+ QTextStream stream(&file);
+
+ QCOMPARE(stream.pos(), qint64(0));
+
+ for (int i = 0; i <= file.size(); i += 7) {
+ QVERIFY(stream.seek(i));
+ QCOMPARE(stream.pos(), qint64(i));
+ }
+ for (int j = file.size(); j >= 0; j -= 7) {
+ QVERIFY(stream.seek(j));
+ QCOMPARE(stream.pos(), qint64(j));
+ }
+
+ stream.seek(0);
+
+ QString strtmp;
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString("Network"));
+ QCOMPARE(stream.pos(), qint64(19));
+
+ stream.seek(2598);
+ QCOMPARE(stream.pos(), qint64(2598));
+ stream >> strtmp;
+ QCOMPARE(stream.pos(), qint64(2607));
+ QCOMPARE(strtmp, QString("locations"));
+ }
+ {
+ // Shift-JIS device
+ for (int i = 0; i < 2; ++i) {
+ QFile file(m_shiftJisFilePath);
+ if (i == 0)
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ else
+ QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+
+ QTextStream stream(&file);
+ stream.setCodec("Shift-JIS");
+ QVERIFY(stream.codec());
+
+ QCOMPARE(stream.pos(), qint64(0));
+ for (int i = 0; i <= file.size(); i += 7) {
+ QVERIFY(stream.seek(i));
+ QCOMPARE(stream.pos(), qint64(i));
+ }
+ for (int j = file.size(); j >= 0; j -= 7) {
+ QVERIFY(stream.seek(j));
+ QCOMPARE(stream.pos(), qint64(j));
+ }
+
+ stream.seek(2089);
+ QString strtmp;
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString("AUnicode"));
+ QCOMPARE(stream.pos(), qint64(2097));
+
+ stream.seek(43325);
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString("Shift-JIS"));
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString::fromUtf8("\343\201\247\346\233\270\343\201\213\343\202\214\343\201\237"));
+ QCOMPARE(stream.pos(), qint64(43345));
+ stream >> strtmp;
+ QCOMPARE(strtmp, QString("POD"));
+ QCOMPARE(stream.pos(), qint64(43349));
+ }
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::pos2()
+{
+ QByteArray data("abcdef\r\nghijkl\r\n");
+ QBuffer buffer(&data);
+ QVERIFY(buffer.open(QIODevice::ReadOnly | QIODevice::Text));
+
+ QTextStream stream(&buffer);
+
+ QChar ch;
+
+ QCOMPARE(stream.pos(), qint64(0));
+ stream >> ch;
+ QCOMPARE(ch, QChar('a'));
+ QCOMPARE(stream.pos(), qint64(1));
+
+ QString str;
+ stream >> str;
+ QCOMPARE(str, QString("bcdef"));
+ QCOMPARE(stream.pos(), qint64(6));
+
+ stream >> str;
+ QCOMPARE(str, QString("ghijkl"));
+ QCOMPARE(stream.pos(), qint64(14));
+
+ // Seek back and try again
+ stream.seek(1);
+ QCOMPARE(stream.pos(), qint64(1));
+ stream >> str;
+ QCOMPARE(str, QString("bcdef"));
+ QCOMPARE(stream.pos(), qint64(6));
+
+ stream.seek(6);
+ stream >> str;
+ QCOMPARE(str, QString("ghijkl"));
+ QCOMPARE(stream.pos(), qint64(14));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::pos3LargeFile()
+{
+ {
+ QFile file(testFileName);
+ file.open(QIODevice::WriteOnly | QIODevice::Text);
+ QTextStream out( &file );
+ // NOTE: The unusual spacing is to ensure non-1-character whitespace.
+ QString lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n";
+ // Approximate 50kb text file
+ const int NbLines = (50*1024) / lineString.length() + 1;
+ for (int line = 0; line < NbLines; ++line)
+ out << lineString;
+ // File is automatically flushed and closed on destruction.
+ }
+ QFile file(testFileName);
+ file.open(QIODevice::ReadOnly | QIODevice::Text);
+ QTextStream in( &file );
+ const int testValues[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+ int value;
+ while (true) {
+ in.pos();
+ for ( int i = 0; i < 10; ++i ) {
+ in >> value;
+ if (in.status() != QTextStream::Ok) {
+ // End case, i == 0 && eof reached.
+ QCOMPARE(i, 0);
+ QCOMPARE(in.status(), QTextStream::ReadPastEnd);
+ return;
+ }
+ QCOMPARE(value, testValues[i]);
+ }
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readStdin()
+{
+#if !QT_CONFIG(process)
+ QSKIP("No qprocess support", SkipAll);
+#else
+ QProcess stdinProcess;
+ stdinProcess.start("stdinProcess/stdinProcess");
+ stdinProcess.setReadChannel(QProcess::StandardError);
+
+ QTextStream stream(&stdinProcess);
+ stream << "1" << endl;
+ stream << "2" << endl;
+ stream << "3" << endl;
+
+ stdinProcess.closeWriteChannel();
+
+ QVERIFY(stdinProcess.waitForFinished(5000));
+
+ int a, b, c;
+ stream >> a >> b >> c;
+ QCOMPARE(a, 1);
+ QCOMPARE(b, 2);
+ QCOMPARE(c, 3);
+#endif
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readAllFromStdin()
+{
+#if !QT_CONFIG(process)
+ QSKIP("No qprocess support", SkipAll);
+#else
+ QProcess stdinProcess;
+ stdinProcess.start("readAllStdinProcess/readAllStdinProcess", QIODevice::ReadWrite | QIODevice::Text);
+ stdinProcess.setReadChannel(QProcess::StandardError);
+
+ QTextStream stream(&stdinProcess);
+ stream.setCodec("ISO-8859-1");
+ stream << "hello world" << flush;
+
+ stdinProcess.closeWriteChannel();
+
+ QVERIFY(stdinProcess.waitForFinished(5000));
+ QCOMPARE(stream.readAll(), QString::fromLatin1("hello world\n"));
+#endif
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::readLineFromStdin()
+{
+#if !QT_CONFIG(process)
+ QSKIP("No qprocess support", SkipAll);
+#else
+ QProcess stdinProcess;
+ stdinProcess.start("readLineStdinProcess/readLineStdinProcess", QIODevice::ReadWrite | QIODevice::Text);
+ stdinProcess.setReadChannel(QProcess::StandardError);
+
+ stdinProcess.write("abc\n");
+ QVERIFY(stdinProcess.waitForReadyRead(5000));
+ QCOMPARE(stdinProcess.readAll().data(), QByteArray("abc").data());
+
+ stdinProcess.write("def\n");
+ QVERIFY(stdinProcess.waitForReadyRead(5000));
+ QCOMPARE(stdinProcess.readAll(), QByteArray("def"));
+
+ stdinProcess.closeWriteChannel();
+
+ QVERIFY(stdinProcess.waitForFinished(5000));
+#endif
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::read()
+{
+ {
+ QFile::remove("testfile");
+ QFile file("testfile");
+ file.open(QFile::WriteOnly);
+ file.write("4.15 abc ole");
+ file.close();
+
+ QVERIFY(file.open(QFile::ReadOnly));
+ QTextStream stream(&file);
+ QCOMPARE(stream.read(0), QString(""));
+ QCOMPARE(stream.read(4), QString("4.15"));
+ QCOMPARE(stream.read(4), QString(" abc"));
+ stream.seek(1);
+ QCOMPARE(stream.read(4), QString(".15 "));
+ stream.seek(1);
+ QCOMPARE(stream.read(4), QString(".15 "));
+ stream.seek(2);
+ QCOMPARE(stream.read(4), QString("15 a"));
+ // ### add tests for reading \r\n etc..
+ }
+
+ {
+ // File larger than QTEXTSTREAM_BUFFERSIZE
+ QFile::remove("testfile");
+ QFile file("testfile");
+ file.open(QFile::WriteOnly);
+ for (int i = 0; i < 16384 / 8; ++i)
+ file.write("01234567");
+ file.write("0");
+ file.close();
+
+ QVERIFY(file.open(QFile::ReadOnly));
+ QTextStream stream(&file);
+ QCOMPARE(stream.read(10), QString("0123456701"));
+ QCOMPARE(stream.read(10), QString("2345670123"));
+ QCOMPARE(stream.readAll().size(), 16385-20);
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::qbool()
+{
+ QString s;
+ QTextStream stream(&s);
+ stream << s.contains(QString("hei"));
+ QCOMPARE(s, QString("0"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::forcePoint()
+{
+ QString str;
+ QTextStream stream(&str);
+ stream << fixed << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
+ QCOMPARE(str, QString("1.000000 1 0 -1.000000 -1"));
+
+ str.clear();
+ stream.seek(0);
+ stream << scientific << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
+ QCOMPARE(str, QString("1.000000e+00 1 0 -1.000000e+00 -1"));
+
+ str.clear();
+ stream.seek(0);
+ stream.setRealNumberNotation(QTextStream::SmartNotation);
+ stream << forcepoint << 1.0 << ' ' << 1 << ' ' << 0 << ' ' << -1.0 << ' ' << -1;
+ QCOMPARE(str, QString("1.00000 1 0 -1.00000 -1"));
+
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::forceSign()
+{
+ QString str;
+ QTextStream stream(&str);
+ stream << forcesign << 1.2 << ' ' << -1.2 << ' ' << 0;
+ QCOMPARE(str, QString("+1.2 -1.2 +0"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::read0d0d0a()
+{
+ QFile file("task113817.txt");
+ file.open(QIODevice::ReadOnly | QIODevice::Text);
+
+ QTextStream stream(&file);
+ while (!stream.atEnd())
+ stream.readLine();
+}
+
+// ------------------------------------------------------------------------------
+
+Q_DECLARE_METATYPE(QTextStreamFunction);
+
+QTextStream &noop(QTextStream &s) { return s; }
+
+void tst_QTextStream::numeralCase_data()
+{
+ QTextStreamFunction noop_ = noop;
+ QTextStreamFunction bin_ = bin;
+ QTextStreamFunction oct_ = oct;
+ QTextStreamFunction hex_ = hex;
+ QTextStreamFunction base = showbase;
+ QTextStreamFunction ucb = uppercasebase;
+ QTextStreamFunction lcb = lowercasebase;
+ QTextStreamFunction ucd = uppercasedigits;
+ QTextStreamFunction lcd = lowercasedigits;
+
+ QTest::addColumn<QTextStreamFunction>("func1");
+ QTest::addColumn<QTextStreamFunction>("func2");
+ QTest::addColumn<QTextStreamFunction>("func3");
+ QTest::addColumn<QTextStreamFunction>("func4");
+ QTest::addColumn<int>("value");
+ QTest::addColumn<QString>("expected");
+ QTest::newRow("dec 1") << noop_ << noop_ << noop_ << noop_ << 31 << "31";
+ QTest::newRow("dec 2") << noop_ << base << noop_ << noop_ << 31 << "31";
+
+ QTest::newRow("hex 1") << hex_ << noop_ << noop_ << noop_ << 31 << "1f";
+ QTest::newRow("hex 2") << hex_ << noop_ << noop_ << lcd << 31 << "1f";
+ QTest::newRow("hex 3") << hex_ << noop_ << ucb << noop_ << 31 << "1f";
+ QTest::newRow("hex 4") << hex_ << noop_ << noop_ << ucd << 31 << "1F";
+ QTest::newRow("hex 5") << hex_ << noop_ << lcb << ucd << 31 << "1F";
+ QTest::newRow("hex 6") << hex_ << noop_ << ucb << ucd << 31 << "1F";
+ QTest::newRow("hex 7") << hex_ << base << noop_ << noop_ << 31 << "0x1f";
+ QTest::newRow("hex 8") << hex_ << base << lcb << lcd << 31 << "0x1f";
+ QTest::newRow("hex 9") << hex_ << base << ucb << noop_ << 31 << "0X1f";
+ QTest::newRow("hex 10") << hex_ << base << ucb << lcd << 31 << "0X1f";
+ QTest::newRow("hex 11") << hex_ << base << noop_ << ucd << 31 << "0x1F";
+ QTest::newRow("hex 12") << hex_ << base << lcb << ucd << 31 << "0x1F";
+ QTest::newRow("hex 13") << hex_ << base << ucb << ucd << 31 << "0X1F";
+
+ QTest::newRow("bin 1") << bin_ << noop_ << noop_ << noop_ << 31 << "11111";
+ QTest::newRow("bin 2") << bin_ << base << noop_ << noop_ << 31 << "0b11111";
+ QTest::newRow("bin 3") << bin_ << base << lcb << noop_ << 31 << "0b11111";
+ QTest::newRow("bin 4") << bin_ << base << ucb << noop_ << 31 << "0B11111";
+ QTest::newRow("bin 5") << bin_ << base << noop_ << ucd << 31 << "0b11111";
+ QTest::newRow("bin 6") << bin_ << base << lcb << ucd << 31 << "0b11111";
+ QTest::newRow("bin 7") << bin_ << base << ucb << ucd << 31 << "0B11111";
+
+ QTest::newRow("oct 1") << oct_ << noop_ << noop_ << noop_ << 31 << "37";
+ QTest::newRow("oct 2") << oct_ << base << noop_ << noop_ << 31 << "037";
+}
+
+void tst_QTextStream::numeralCase()
+{
+ QFETCH(QTextStreamFunction, func1);
+ QFETCH(QTextStreamFunction, func2);
+ QFETCH(QTextStreamFunction, func3);
+ QFETCH(QTextStreamFunction, func4);
+ QFETCH(int, value);
+ QFETCH(QString, expected);
+
+ QString str;
+ QTextStream stream(&str);
+ stream << func1 << func2 << func3 << func4 << value;
+ QCOMPARE(str, expected);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::nanInf()
+{
+ // Cannot use test data in this function, as comparing nans and infs isn't
+ // well defined.
+ QString str("nan NAN nAn +nan +NAN +nAn -nan -NAN -nAn"
+ " inf INF iNf +inf +INF +iNf -inf -INF -iNf");
+
+ QTextStream stream(&str);
+
+ double tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsNaN(tmpD)); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD > 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
+ stream >> tmpD; QVERIFY(qIsInf(tmpD)); QVERIFY(tmpD < 0); tmpD = 0;
+
+ stream.seek(0);
+
+ float tmpF = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsNaN(tmpF)); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF > 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0); tmpD = 0;
+ stream >> tmpF; QVERIFY(qIsInf(tmpF)); QVERIFY(tmpF < 0);
+
+ QString s;
+ QTextStream out(&s);
+ out << qInf() << ' ' << -qInf() << ' ' << qQNaN()
+ << uppercasedigits << ' '
+ << qInf() << ' ' << -qInf() << ' ' << qQNaN()
+ << flush;
+
+ QCOMPARE(s, QString("inf -inf nan INF -INF NAN"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::utf8IncompleteAtBufferBoundary_data()
+{
+ QTest::addColumn<bool>("useLocale");
+
+ QTest::newRow("utf8") << false;
+
+ // is this locale UTF-8?
+ if (QString(QChar::ReplacementCharacter).toLocal8Bit() == "\xef\xbf\xbd")
+ QTest::newRow("locale") << true;
+}
+
+void tst_QTextStream::utf8IncompleteAtBufferBoundary()
+{
+ QFile::remove(testFileName);
+ QFile data(testFileName);
+
+ QTextCodec *utf8Codec = QTextCodec::codecForMib(106);
+ QString lineContents = QString::fromUtf8("\342\200\223" // U+2013 EN DASH
+ "\342\200\223"
+ "\342\200\223"
+ "\342\200\223"
+ "\342\200\223"
+ "\342\200\223");
+
+ data.open(QFile::WriteOnly | QFile::Truncate);
+ {
+ QTextStream out(&data);
+ out.setCodec(utf8Codec);
+ out.setFieldWidth(3);
+
+ for (int i = 0; i < 1000; ++i) {
+ out << i << lineContents << endl;
+ }
+ }
+ data.close();
+
+ data.open(QFile::ReadOnly);
+ QTextStream in(&data);
+
+ QFETCH(bool, useLocale);
+ if (!useLocale)
+ in.setCodec(utf8Codec); // QUtf8Codec
+ else
+ in.setCodec(QTextCodec::codecForLocale());
+
+ int i = 0;
+ do {
+ QString line = in.readLine().trimmed();
+ ++i;
+ QVERIFY2(line.endsWith(lineContents), QString("Line %1: %2").arg(i).arg(line).toLocal8Bit());
+ } while (!in.atEnd());
+}
+
+// ------------------------------------------------------------------------------
+
+// Make sure we don't write a BOM after seek()ing
+
+void tst_QTextStream::writeSeekWriteNoBOM()
+{
+
+ //First with the default codec (normally either latin-1 or UTF-8)
+
+ QBuffer out;
+ out.open(QIODevice::WriteOnly);
+ QTextStream stream(&out);
+
+ int number = 0;
+ QString sizeStr = QLatin1String("Size=")
+ + QString::number(number).rightJustified(10, QLatin1Char('0'));
+ stream << sizeStr << endl;
+ stream << "Version=" << QString::number(14) << endl;
+ stream << "blah blah blah" << endl;
+ stream.flush();
+
+ QCOMPARE(out.buffer().constData(), "Size=0000000000\nVersion=14\nblah blah blah\n");
+
+ // Now overwrite the size header item
+ number = 42;
+ stream.seek(0);
+ sizeStr = QLatin1String("Size=")
+ + QString::number(number).rightJustified(10, QLatin1Char('0'));
+ stream << sizeStr << endl;
+ stream.flush();
+
+ // Check buffer is still OK
+ QCOMPARE(out.buffer().constData(), "Size=0000000042\nVersion=14\nblah blah blah\n");
+
+
+ //Then UTF-16
+
+ QBuffer out16;
+ out16.open(QIODevice::WriteOnly);
+ QTextStream stream16(&out16);
+ stream16.setCodec("UTF-16");
+
+ stream16 << "one" << "two" << QLatin1String("three");
+ stream16.flush();
+
+ // save that output
+ QByteArray first = out16.buffer();
+
+ stream16.seek(0);
+ stream16 << "one";
+ stream16.flush();
+
+ QCOMPARE(out16.buffer(), first);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::generateOperatorCharData(bool for_QString)
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QChar>("qchar_output");
+ QTest::addColumn<char>("char_output");
+ QTest::addColumn<QByteArray>("write_output");
+
+ QTest::newRow("empty") << QByteArray() << QChar('\0') << '\0' << QByteArray("\0", 1);
+ QTest::newRow("a") << QByteArray("a") << QChar('a') << 'a' << QByteArray("a");
+ QTest::newRow("\\na") << QByteArray("\na") << QChar('\n') << '\n' << QByteArray("\n");
+ QTest::newRow("\\0") << QByteArray("\0") << QChar('\0') << '\0' << QByteArray("\0", 1);
+ QTest::newRow("\\xff") << QByteArray("\xff") << QChar('\xff') << '\xff' << QByteArray("\xff");
+ QTest::newRow("\\xfe") << QByteArray("\xfe") << QChar('\xfe') << '\xfe' << QByteArray("\xfe");
+
+ if (!for_QString) {
+ QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << QChar('\0') << '\0' << QByteArray("\0", 1);
+ QTest::newRow("utf16-BE (a)") << QByteArray("\xff\xfe\x61\x00", 4) << QChar('a') << 'a' << QByteArray("a");
+ QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << QChar('\0') << '\0' << QByteArray("\0", 1);
+ QTest::newRow("utf16-LE (a)") << QByteArray("\xfe\xff\x00\x61", 4) << QChar('a') << 'a' << QByteArray("a");
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::QChar_operators_FromDevice_data()
+{
+ generateOperatorCharData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::QChar_operators_FromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QChar, qchar_output);
+ QFETCH(QByteArray, write_output);
+
+ QBuffer buf(&input);
+ buf.open(QBuffer::ReadOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ QChar tmp;
+ stream >> tmp;
+ QCOMPARE(tmp, qchar_output);
+
+ QBuffer writeBuf;
+ writeBuf.open(QBuffer::WriteOnly);
+
+ QTextStream writeStream(&writeBuf);
+ writeStream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ writeStream << qchar_output;
+ writeStream.flush();
+
+ QCOMPARE(writeBuf.buffer().size(), write_output.size());
+ QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::char_operators_FromDevice_data()
+{
+ generateOperatorCharData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::char_operators_FromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(char, char_output);
+ QFETCH(QByteArray, write_output);
+
+ QBuffer buf(&input);
+ buf.open(QBuffer::ReadOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ char tmp;
+ stream >> tmp;
+ QCOMPARE(tmp, char_output);
+
+ QBuffer writeBuf;
+ writeBuf.open(QBuffer::WriteOnly);
+
+ QTextStream writeStream(&writeBuf);
+ writeStream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ writeStream << char_output;
+ writeStream.flush();
+
+ QCOMPARE(writeBuf.buffer().size(), write_output.size());
+ QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::generateNaturalNumbersData(bool for_QString)
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<qulonglong>("output");
+
+ QTest::newRow("empty") << QByteArray() << qulonglong(0);
+ QTest::newRow("a") << QByteArray("a") << qulonglong(0);
+ QTest::newRow(" ") << QByteArray(" ") << qulonglong(0);
+ QTest::newRow("0") << QByteArray("0") << qulonglong(0);
+ QTest::newRow("1") << QByteArray("1") << qulonglong(1);
+ QTest::newRow("12") << QByteArray("12") << qulonglong(12);
+ QTest::newRow("-12") << QByteArray("-12") << qulonglong(-12);
+ QTest::newRow("-0") << QByteArray("-0") << qulonglong(0);
+ QTest::newRow(" 1") << QByteArray(" 1") << qulonglong(1);
+ QTest::newRow(" \\r\\n\\r\\n123") << QByteArray(" \r\n\r\n123") << qulonglong(123);
+
+ // bit boundary tests
+ QTest::newRow("127") << QByteArray("127") << qulonglong(127);
+ QTest::newRow("128") << QByteArray("128") << qulonglong(128);
+ QTest::newRow("129") << QByteArray("129") << qulonglong(129);
+ QTest::newRow("-127") << QByteArray("-127") << qulonglong(-127);
+ QTest::newRow("-128") << QByteArray("-128") << qulonglong(-128);
+ QTest::newRow("-129") << QByteArray("-129") << qulonglong(-129);
+ QTest::newRow("32767") << QByteArray("32767") << qulonglong(32767);
+ QTest::newRow("32768") << QByteArray("32768") << qulonglong(32768);
+ QTest::newRow("32769") << QByteArray("32769") << qulonglong(32769);
+ QTest::newRow("-32767") << QByteArray("-32767") << qulonglong(-32767);
+ QTest::newRow("-32768") << QByteArray("-32768") << qulonglong(-32768);
+ QTest::newRow("-32769") << QByteArray("-32769") << qulonglong(-32769);
+ QTest::newRow("65537") << QByteArray("65537") << qulonglong(65537);
+ QTest::newRow("65536") << QByteArray("65536") << qulonglong(65536);
+ QTest::newRow("65535") << QByteArray("65535") << qulonglong(65535);
+ QTest::newRow("-65537") << QByteArray("-65537") << qulonglong(-65537);
+ QTest::newRow("-65536") << QByteArray("-65536") << qulonglong(-65536);
+ QTest::newRow("-65535") << QByteArray("-65535") << qulonglong(-65535);
+ QTest::newRow("2147483646") << QByteArray("2147483646") << qulonglong(2147483646);
+ QTest::newRow("2147483647") << QByteArray("2147483647") << qulonglong(2147483647);
+ QTest::newRow("2147483648") << QByteArray("2147483648") << Q_UINT64_C(2147483648);
+ QTest::newRow("-2147483646") << QByteArray("-2147483646") << qulonglong(-2147483646);
+ QTest::newRow("-2147483647") << QByteArray("-2147483647") << qulonglong(-2147483647);
+ QTest::newRow("-2147483648") << QByteArray("-2147483648") << quint64(-2147483648LL);
+ QTest::newRow("4294967296") << QByteArray("4294967296") << Q_UINT64_C(4294967296);
+ QTest::newRow("4294967297") << QByteArray("4294967297") << Q_UINT64_C(4294967297);
+ QTest::newRow("4294967298") << QByteArray("4294967298") << Q_UINT64_C(4294967298);
+ QTest::newRow("-4294967296") << QByteArray("-4294967296") << quint64(-4294967296);
+ QTest::newRow("-4294967297") << QByteArray("-4294967297") << quint64(-4294967297);
+ QTest::newRow("-4294967298") << QByteArray("-4294967298") << quint64(-4294967298);
+ QTest::newRow("9223372036854775807") << QByteArray("9223372036854775807") << Q_UINT64_C(9223372036854775807);
+ QTest::newRow("9223372036854775808") << QByteArray("9223372036854775808") << Q_UINT64_C(9223372036854775808);
+ QTest::newRow("9223372036854775809") << QByteArray("9223372036854775809") << Q_UINT64_C(9223372036854775809);
+ QTest::newRow("18446744073709551615") << QByteArray("18446744073709551615") << Q_UINT64_C(18446744073709551615);
+ QTest::newRow("18446744073709551616") << QByteArray("18446744073709551616") << Q_UINT64_C(0);
+ QTest::newRow("18446744073709551617") << QByteArray("18446744073709551617") << Q_UINT64_C(1);
+ // 18446744073709551617 bytes should be enough for anyone.... ;-)
+
+ // hex tests
+ QTest::newRow("0x0") << QByteArray("0x0") << qulonglong(0);
+ QTest::newRow("0x") << QByteArray("0x") << qulonglong(0);
+ QTest::newRow("0x1") << QByteArray("0x1") << qulonglong(1);
+ QTest::newRow("0xf") << QByteArray("0xf") << qulonglong(15);
+ QTest::newRow("0xdeadbeef") << QByteArray("0xdeadbeef") << Q_UINT64_C(3735928559);
+ QTest::newRow("0XDEADBEEF") << QByteArray("0XDEADBEEF") << Q_UINT64_C(3735928559);
+ QTest::newRow("0xdeadbeefZzzzz") << QByteArray("0xdeadbeefZzzzz") << Q_UINT64_C(3735928559);
+ QTest::newRow(" 0xdeadbeefZzzzz") << QByteArray(" 0xdeadbeefZzzzz") << Q_UINT64_C(3735928559);
+
+ // oct tests
+ QTest::newRow("00") << QByteArray("00") << qulonglong(0);
+ QTest::newRow("0141") << QByteArray("0141") << qulonglong(97);
+ QTest::newRow("01419999") << QByteArray("01419999") << qulonglong(97);
+ QTest::newRow(" 01419999") << QByteArray(" 01419999") << qulonglong(97);
+
+ // bin tests
+ QTest::newRow("0b0") << QByteArray("0b0") << qulonglong(0);
+ QTest::newRow("0b1") << QByteArray("0b1") << qulonglong(1);
+ QTest::newRow("0b10") << QByteArray("0b10") << qulonglong(2);
+ QTest::newRow("0B10") << QByteArray("0B10") << qulonglong(2);
+ QTest::newRow("0b101010") << QByteArray("0b101010") << qulonglong(42);
+ QTest::newRow("0b1010102345") << QByteArray("0b1010102345") << qulonglong(42);
+ QTest::newRow(" 0b1010102345") << QByteArray(" 0b1010102345") << qulonglong(42);
+
+ // utf-16 tests
+ if (!for_QString) {
+ QTest::newRow("utf16-BE (empty)") << QByteArray("\xfe\xff", 2) << qulonglong(0);
+ QTest::newRow("utf16-BE (0xdeadbeef)")
+ << QByteArray("\xfe\xff"
+ "\x00\x30\x00\x78\x00\x64\x00\x65\x00\x61\x00\x64\x00\x62\x00\x65\x00\x65\x00\x66", 22)
+ << Q_UINT64_C(3735928559);
+ QTest::newRow("utf16-LE (empty)") << QByteArray("\xff\xfe", 2) << Q_UINT64_C(0);
+ QTest::newRow("utf16-LE (0xdeadbeef)")
+ << QByteArray("\xff\xfe"
+ "\x30\x00\x78\x00\x64\x00\x65\x00\x61\x00\x64\x00\x62\x00\x65\x00\x65\x00\x66\x00", 22)
+ << Q_UINT64_C(3735928559);
+ }
+}
+
+// ------------------------------------------------------------------------------
+#define IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(texttype, type) \
+ void tst_QTextStream:: texttype##_read_operator_FromDevice_data() \
+ { generateNaturalNumbersData(false); } \
+ void tst_QTextStream:: texttype##_read_operator_FromDevice() \
+ { \
+ QFETCH(QByteArray, input); \
+ QFETCH(qulonglong, output); \
+ type sh; \
+ QTextStream stream(&input); \
+ stream >> sh; \
+ QCOMPARE(sh, (type)output); \
+ }
+IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(signedShort, signed short)
+IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(unsignedShort, unsigned short)
+IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(signedInt, signed int)
+IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(unsignedInt, unsigned int)
+IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(qlonglong, qlonglong)
+IMPLEMENT_STREAM_RIGHT_INT_OPERATOR_TEST(qulonglong, qulonglong)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::generateRealNumbersData(bool for_QString)
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<double>("output");
+
+ QTest::newRow("empty") << QByteArray() << 0.0;
+ QTest::newRow("a") << QByteArray("a") << 0.0;
+ QTest::newRow("1.0") << QByteArray("1.0") << 1.0;
+ QTest::newRow(" 1") << QByteArray(" 1") << 1.0;
+ QTest::newRow(" \\r\\n1.2") << QByteArray(" \r\n1.2") << 1.2;
+ QTest::newRow("3.14") << QByteArray("3.14") << 3.14;
+ QTest::newRow("-3.14") << QByteArray("-3.14") << -3.14;
+ QTest::newRow(" -3.14") << QByteArray(" -3.14") << -3.14;
+ QTest::newRow("314e-02") << QByteArray("314e-02") << 3.14;
+ QTest::newRow("314E-02") << QByteArray("314E-02") << 3.14;
+ QTest::newRow("314e+02") << QByteArray("314e+02") << 31400.;
+ QTest::newRow("314E+02") << QByteArray("314E+02") << 31400.;
+
+ // ### add numbers with exponents
+
+ if (!for_QString) {
+ QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << 0.0;
+ QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << 0.0;
+ }
+}
+
+// ------------------------------------------------------------------------------
+#define IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(texttype, type) \
+ void tst_QTextStream:: texttype##_read_operator_FromDevice_data() \
+ { generateRealNumbersData(false); } \
+ void tst_QTextStream:: texttype##_read_operator_FromDevice() \
+ { \
+ QFETCH(QByteArray, input); \
+ QFETCH(double, output); \
+ type sh; \
+ QTextStream stream(&input); \
+ stream >> sh; \
+ QCOMPARE(sh, (type)output); \
+ }
+IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(float, float)
+IMPLEMENT_STREAM_RIGHT_REAL_OPERATOR_TEST(double, double)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::generateStringData(bool for_QString)
+{
+ QTest::addColumn<QByteArray>("input");
+ QTest::addColumn<QByteArray>("array_output");
+ QTest::addColumn<QString>("string_output");
+
+ QTest::newRow("empty") << QByteArray() << QByteArray() << QString();
+ QTest::newRow("a") << QByteArray("a") << QByteArray("a") << QString("a");
+ QTest::newRow("a b") << QByteArray("a b") << QByteArray("a") << QString("a");
+ QTest::newRow(" a b") << QByteArray(" a b") << QByteArray("a") << QString("a");
+ QTest::newRow("a1") << QByteArray("a1") << QByteArray("a1") << QString("a1");
+ QTest::newRow("a1 b1") << QByteArray("a1 b1") << QByteArray("a1") << QString("a1");
+ QTest::newRow(" a1 b1") << QByteArray(" a1 b1") << QByteArray("a1") << QString("a1");
+ QTest::newRow("\\n\\n\\nole i dole\\n") << QByteArray("\n\n\nole i dole\n") << QByteArray("ole") << QString("ole");
+
+ if (!for_QString) {
+ QTest::newRow("utf16-BE (empty)") << QByteArray("\xff\xfe", 2) << QByteArray() << QString();
+ QTest::newRow("utf16-BE (corrupt)") << QByteArray("\xff", 1) << QByteArray("\xff") << QString::fromLatin1("\xff");
+ QTest::newRow("utf16-LE (empty)") << QByteArray("\xfe\xff", 2) << QByteArray() << QString();
+ QTest::newRow("utf16-LE (corrupt)") << QByteArray("\xfe", 1) << QByteArray("\xfe") << QString::fromLatin1("\xfe");
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::charPtr_read_operator_FromDevice_data()
+{
+ generateStringData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::charPtr_read_operator_FromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QByteArray, array_output);
+
+ QBuffer buffer(&input);
+ buffer.open(QBuffer::ReadOnly);
+ QTextStream stream(&buffer);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ char buf[1024];
+ stream >> buf;
+
+ QCOMPARE((const char *)buf, array_output.constData());
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::stringRef_read_operator_FromDevice_data()
+{
+ generateStringData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::stringRef_read_operator_FromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QString, string_output);
+
+ QBuffer buffer(&input);
+ buffer.open(QBuffer::ReadOnly);
+ QTextStream stream(&buffer);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ QString tmp;
+ stream >> tmp;
+
+ QCOMPARE(tmp, string_output);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::byteArray_read_operator_FromDevice_data()
+{
+ generateStringData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::byteArray_read_operator_FromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(QByteArray, array_output);
+
+ QBuffer buffer(&input);
+ buffer.open(QBuffer::ReadOnly);
+ QTextStream stream(&buffer);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ QByteArray array;
+ stream >> array;
+
+ QCOMPARE(array, array_output);
+}
+
+// ------------------------------------------------------------------------------
+#define IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(texttype, type) \
+ void tst_QTextStream:: texttype##_write_operator_ToDevice() \
+ { \
+ QFETCH(qulonglong, number); \
+ QFETCH(QByteArray, data); \
+ QFETCH(QByteArray, dataWithSeparators); \
+ \
+ QBuffer buffer; \
+ buffer.open(QBuffer::WriteOnly); \
+ QTextStream stream(&buffer); \
+ stream.setLocale(QLocale::c()); \
+ stream << (type)number; \
+ stream.flush(); \
+ QCOMPARE(buffer.data().constData(), data.constData()); \
+ \
+ QLocale locale("en-US"); \
+ buffer.reset(); buffer.buffer().clear(); \
+ stream.setLocale(locale); \
+ stream << (type)number; \
+ stream.flush(); \
+ QCOMPARE(buffer.data(), dataWithSeparators); \
+ \
+ locale.setNumberOptions(QLocale::OmitGroupSeparator); \
+ buffer.reset(); buffer.buffer().clear(); \
+ stream.setLocale(locale); \
+ stream << (type)number; \
+ stream.flush(); \
+ QCOMPARE(buffer.data().constData(), data.constData()); \
+ \
+ locale = QLocale("de-DE"); \
+ buffer.reset(); buffer.buffer().clear(); \
+ stream.setLocale(locale); \
+ stream << (type)number; \
+ stream.flush(); \
+ QCOMPARE(buffer.data(), dataWithSeparators.replace(',', '.')); \
+ }
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::signedShort_write_operator_ToDevice_data()
+{
+ QTest::addColumn<qulonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
+ QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
+ QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
+ QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("-32768") << QByteArray("-32,768");
+ QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("-32767") << QByteArray("-32,767");
+ QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("-1") << QByteArray("-1");
+ QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("1") << QByteArray("1");
+}
+IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(signedShort, signed short)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::unsignedShort_write_operator_ToDevice_data()
+{
+ QTest::addColumn<qulonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
+ QTest::newRow("-1") << quint64(-1) << QByteArray("65535") << QByteArray("65,535");
+ QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
+ QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
+ QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
+ QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
+ QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("1") << QByteArray("1");
+}
+IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(unsignedShort, unsigned short)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::signedInt_write_operator_ToDevice_data()
+{
+ QTest::addColumn<qulonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
+ QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
+ QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
+ QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
+ QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
+ QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
+ QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
+ QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
+ QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
+ QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("-2147483648") << QByteArray("-2,147,483,648");
+ QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("-2147483647") << QByteArray("-2,147,483,647");
+ QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("-1") << QByteArray("-1");
+ QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("1") << QByteArray("1");
+}
+IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(signedInt, signed int)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::unsignedInt_write_operator_ToDevice_data()
+{
+ QTest::addColumn<qulonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
+ QTest::newRow("-1") << quint64(-1) << QByteArray("4294967295") << QByteArray("4,294,967,295");
+ QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
+ QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
+ QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
+ QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
+ QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
+ QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
+ QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
+ QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
+ QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
+ QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
+ QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("1") << QByteArray("1");
+}
+IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(unsignedInt, unsigned int)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::qlonglong_write_operator_ToDevice_data()
+{
+ QTest::addColumn<qulonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
+ QTest::newRow("-1") << quint64(-1) << QByteArray("-1") << QByteArray("-1");
+ QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
+ QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
+ QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
+ QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
+ QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
+ QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
+ QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
+ QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
+ QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
+ QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
+ QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("4294967296") << QByteArray("4,294,967,296");
+ QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("4294967297") << QByteArray("4,294,967,297");
+ QTest::newRow("9223372036854775807") << Q_UINT64_C(9223372036854775807) << QByteArray("9223372036854775807") << QByteArray("9,223,372,036,854,775,807");
+ QTest::newRow("9223372036854775808") << Q_UINT64_C(9223372036854775808) << QByteArray("-9223372036854775808") << QByteArray("-9,223,372,036,854,775,808");
+ QTest::newRow("9223372036854775809") << Q_UINT64_C(9223372036854775809) << QByteArray("-9223372036854775807") << QByteArray("-9,223,372,036,854,775,807");
+ QTest::newRow("18446744073709551615") << Q_UINT64_C(18446744073709551615) << QByteArray("-1") << QByteArray("-1");
+}
+IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(qlonglong, qlonglong)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::qulonglong_write_operator_ToDevice_data()
+{
+ QTest::addColumn<qulonglong>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << Q_UINT64_C(0) << QByteArray("0") << QByteArray("0");
+ QTest::newRow("1") << Q_UINT64_C(1) << QByteArray("1") << QByteArray("1");
+ QTest::newRow("-1") << quint64(-1) << QByteArray("18446744073709551615") << QByteArray("18,446,744,073,709,551,615");
+ QTest::newRow("32767") << Q_UINT64_C(32767) << QByteArray("32767") << QByteArray("32,767");
+ QTest::newRow("32768") << Q_UINT64_C(32768) << QByteArray("32768") << QByteArray("32,768");
+ QTest::newRow("32769") << Q_UINT64_C(32769) << QByteArray("32769") << QByteArray("32,769");
+ QTest::newRow("65535") << Q_UINT64_C(65535) << QByteArray("65535") << QByteArray("65,535");
+ QTest::newRow("65536") << Q_UINT64_C(65536) << QByteArray("65536") << QByteArray("65,536");
+ QTest::newRow("65537") << Q_UINT64_C(65537) << QByteArray("65537") << QByteArray("65,537");
+ QTest::newRow("2147483647") << Q_UINT64_C(2147483647) << QByteArray("2147483647") << QByteArray("2,147,483,647");
+ QTest::newRow("2147483648") << Q_UINT64_C(2147483648) << QByteArray("2147483648") << QByteArray("2,147,483,648");
+ QTest::newRow("2147483649") << Q_UINT64_C(2147483649) << QByteArray("2147483649") << QByteArray("2,147,483,649");
+ QTest::newRow("4294967295") << Q_UINT64_C(4294967295) << QByteArray("4294967295") << QByteArray("4,294,967,295");
+ QTest::newRow("4294967296") << Q_UINT64_C(4294967296) << QByteArray("4294967296") << QByteArray("4,294,967,296");
+ QTest::newRow("4294967297") << Q_UINT64_C(4294967297) << QByteArray("4294967297") << QByteArray("4,294,967,297");
+ QTest::newRow("9223372036854775807") << Q_UINT64_C(9223372036854775807) << QByteArray("9223372036854775807") << QByteArray("9,223,372,036,854,775,807");
+ QTest::newRow("9223372036854775808") << Q_UINT64_C(9223372036854775808) << QByteArray("9223372036854775808") << QByteArray("9,223,372,036,854,775,808");
+ QTest::newRow("9223372036854775809") << Q_UINT64_C(9223372036854775809) << QByteArray("9223372036854775809") << QByteArray("9,223,372,036,854,775,809");
+ QTest::newRow("18446744073709551615") << Q_UINT64_C(18446744073709551615) << QByteArray("18446744073709551615") << QByteArray("18,446,744,073,709,551,615");
+}
+IMPLEMENT_STREAM_LEFT_INT_OPERATOR_TEST(qulonglong, qulonglong)
+ ;
+
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::generateRealNumbersDataWrite()
+{
+ QTest::addColumn<double>("number");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("dataWithSeparators");
+
+ QTest::newRow("0") << 0.0 << QByteArray("0") << QByteArray("0");
+ QTest::newRow("3.14") << 3.14 << QByteArray("3.14") << QByteArray("3.14");
+ QTest::newRow("-3.14") << -3.14 << QByteArray("-3.14") << QByteArray("-3.14");
+ QTest::newRow("1.2e+10") << 1.2e+10 << QByteArray("1.2e+10") << QByteArray("1.2e+10");
+ QTest::newRow("-1.2e+10") << -1.2e+10 << QByteArray("-1.2e+10") << QByteArray("-1.2e+10");
+ QTest::newRow("12345") << 12345. << QByteArray("12345") << QByteArray("12,345");
+}
+
+// ------------------------------------------------------------------------------
+#define IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(texttype, type) \
+ void tst_QTextStream:: texttype##_write_operator_ToDevice_data() \
+ { generateRealNumbersDataWrite(); } \
+ void tst_QTextStream:: texttype##_write_operator_ToDevice() \
+ { \
+ QFETCH(double, number); \
+ QFETCH(QByteArray, data); \
+ QFETCH(QByteArray, dataWithSeparators); \
+ \
+ QBuffer buffer; \
+ buffer.open(QBuffer::WriteOnly); \
+ QTextStream stream(&buffer); \
+ stream.setLocale(QLocale::c()); \
+ float f = (float)number; \
+ stream << f; \
+ stream.flush(); \
+ QCOMPARE(buffer.data().constData(), data.constData()); \
+ \
+ buffer.reset(); \
+ stream.setLocale(QLocale("en-US")); \
+ stream << f; \
+ stream.flush(); \
+ QCOMPARE(buffer.data(), dataWithSeparators); \
+ }
+IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(float, float)
+IMPLEMENT_STREAM_LEFT_REAL_OPERATOR_TEST(double, float)
+ ;
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::string_write_operator_ToDevice_data()
+{
+ QTest::addColumn<QByteArray>("bytedata");
+ QTest::addColumn<QString>("stringdata");
+ QTest::addColumn<QByteArray>("result");
+
+ QTest::newRow("empty") << QByteArray("", 1) << QString(1, '\0') << QByteArray("", 1);
+ QTest::newRow("a") << QByteArray("a") << QString("a") << QByteArray("a");
+ QTest::newRow("a cow jumped over the moon")
+ << QByteArray("a cow jumped over the moon")
+ << QString("a cow jumped over the moon")
+ << QByteArray("a cow jumped over the moon");
+
+ // ### get the utf16-be test on its legs.
+ /*
+ QTest::newRow("utf16-BE (a cow jumped over the moon)")
+ << QByteArray("\xff\xfe\x00\x61\x00\x20\x00\x63\x00\x6f\x00\x77\x00\x20\x00\x6a\x00\x75\x00\x6d\x00\x70\x00\x65\x00\x64\x00\x20\x00\x6f\x00\x76\x00\x65\x00\x72\x00\x20\x00\x74\x00\x68\x00\x65\x00\x20\x00\x6d\x00\x6f\x00\x6f\x00\x6e\x00\x0a", 56)
+ << QString("a cow jumped over the moon")
+ << QByteArray("a cow jumped over the moon");
+ */
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::string_write_operator_ToDevice()
+{
+ QFETCH(QByteArray, bytedata);
+ QFETCH(QString, stringdata);
+ QFETCH(QByteArray, result);
+
+ {
+ // char*
+ QBuffer buf;
+ buf.open(QBuffer::WriteOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream << bytedata.constData();
+ stream.flush();
+ QCOMPARE(buf.buffer().constData(), result.constData());
+ }
+ {
+ // QByteArray
+ QBuffer buf;
+ buf.open(QBuffer::WriteOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream << bytedata;
+ stream.flush();
+ QCOMPARE(buf.buffer().constData(), result.constData());
+ }
+ {
+ // QString
+ QBuffer buf;
+ buf.open(QBuffer::WriteOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream << stringdata;
+ stream.flush();
+ QCOMPARE(buf.buffer().constData(), result.constData());
+ }
+}
+
+void tst_QTextStream::latin1String_write_operator_ToDevice()
+{
+ QBuffer buf;
+ buf.open(QBuffer::WriteOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream << QLatin1String("No explicit length");
+ stream << QLatin1String("Explicit length - ignore this part", 15);
+ stream.flush();
+ QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
+}
+
+void tst_QTextStream::stringref_write_operator_ToDevice()
+{
+ QBuffer buf;
+ buf.open(QBuffer::WriteOnly);
+ QTextStream stream(&buf);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ const QString expected = "No explicit lengthExplicit length";
+
+ stream << expected.leftRef(18);
+ stream << expected.midRef(18);
+ stream.flush();
+ QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::useCase1()
+{
+ QFile::remove("testfile");
+ QFile file("testfile");
+ QVERIFY(file.open(QFile::ReadWrite));
+
+ {
+ QTextStream stream(&file);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream << 4.15 << ' ' << QByteArray("abc") << ' ' << QString("ole");
+ }
+
+ file.seek(0);
+ QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
+ file.seek(0);
+
+ {
+ double d;
+ QByteArray a;
+ QString s;
+ QTextStream stream(&file);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream >> d;
+ stream >> a;
+ stream >> s;
+
+ QCOMPARE(d, 4.15);
+ QCOMPARE(a, QByteArray("abc"));
+ QCOMPARE(s, QString("ole"));
+ }
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::useCase2()
+{
+ QFile::remove("testfile");
+ QFile file("testfile");
+ QVERIFY(file.open(QFile::ReadWrite));
+
+ QTextStream stream(&file);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+ stream << 4.15 << ' ' << QByteArray("abc") << ' ' << QString("ole");
+
+ file.close();
+ QVERIFY(file.open(QFile::ReadWrite));
+
+ QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
+
+ file.close();
+ QVERIFY(file.open(QFile::ReadWrite));
+
+ double d;
+ QByteArray a;
+ QString s;
+ QTextStream stream2(&file);
+ stream2.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream2.setAutoDetectUnicode(true);
+
+ stream2 >> d;
+ stream2 >> a;
+ stream2 >> s;
+
+ QCOMPARE(d, 4.15);
+ QCOMPARE(a, QByteArray("abc"));
+ QCOMPARE(s, QString("ole"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::manipulators_data()
+{
+ QTest::addColumn<int>("flags");
+ QTest::addColumn<int>("width");
+ QTest::addColumn<double>("realNumber");
+ QTest::addColumn<int>("intNumber");
+ QTest::addColumn<QString>("textData");
+ QTest::addColumn<QByteArray>("result");
+
+ QTest::newRow("no flags") << 0 << 0 << 5.0 << 5 << QString("five") << QByteArray("55five");
+ QTest::newRow("rightadjust") << 0 << 10 << 5.0 << 5 << QString("five") << QByteArray(" 5 5 five");
+
+ // ### FIX
+// QTest::newRow("leftadjust") << int(QTextStream::left) << 10 << 5.0 << 5 << QString("five") << QByteArray("5 5 five ");
+// QTest::newRow("showpos") << int(QTextStream::showpos) << 10 << 5.0 << 5 << QString("five") << QByteArray(" +5 +5 five");
+// QTest::newRow("showpos2") << int(QTextStream::showpos) << 5 << 3.14 << -5 << QString("five") << QByteArray("+3.14 -5 five");
+// QTest::newRow("hex") << int(QTextStream::hex | QTextStream::showbase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0x5 five");
+// QTest::newRow("hex uppercase") << int(QTextStream::hex | QTextStream::uppercase | QTextStream::showbase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0X5 five");
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::manipulators()
+{
+// QFETCH(int, flags);
+ QFETCH(int, width);
+ QFETCH(double, realNumber);
+ QFETCH(int, intNumber);
+ QFETCH(QString, textData);
+ QFETCH(QByteArray, result);
+
+ QBuffer buffer;
+ buffer.open(QBuffer::WriteOnly);
+
+ QTextStream stream(&buffer);
+ stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
+ stream.setAutoDetectUnicode(true);
+
+// stream.setFlags(flags);
+ stream.setFieldWidth(width);
+ stream << realNumber;
+ stream << intNumber;
+ stream << textData;
+ stream.flush();
+
+ QCOMPARE(buffer.data().constData(), result.constData());
+}
+
+void tst_QTextStream::generateBOM()
+{
+ QFile::remove("bom.txt");
+ {
+ QFile file("bom.txt");
+ QVERIFY(file.open(QFile::ReadWrite | QFile::Truncate));
+
+ QTextStream stream(&file);
+ stream.setCodec(QTextCodec::codecForName("UTF-16LE"));
+ stream << "Hello" << endl;
+
+ file.close();
+ QVERIFY(file.open(QFile::ReadOnly));
+ QCOMPARE(file.readAll(), QByteArray("\x48\x00\x65\00\x6c\00\x6c\00\x6f\x00\x0a\x00", 12));
+ }
+
+ QFile::remove("bom.txt");
+ {
+ QFile file("bom.txt");
+ QVERIFY(file.open(QFile::ReadWrite | QFile::Truncate));
+
+ QTextStream stream(&file);
+ stream.setCodec(QTextCodec::codecForName("UTF-16LE"));
+ stream << bom << "Hello" << endl;
+
+ file.close();
+ QVERIFY(file.open(QFile::ReadOnly));
+ QCOMPARE(file.readAll(), QByteArray("\xff\xfe\x48\x00\x65\00\x6c\00\x6c\00\x6f\x00\x0a\x00", 14));
+ }
+}
+
+void tst_QTextStream::readBomSeekBackReadBomAgain()
+{
+ QFile::remove("utf8bom");
+ QFile file("utf8bom");
+ QVERIFY(file.open(QFile::ReadWrite));
+ file.write("\xef\xbb\xbf""Andreas");
+ file.seek(0);
+ QCOMPARE(file.pos(), qint64(0));
+
+ QTextStream stream(&file);
+ stream.setCodec("UTF-8");
+ QString Andreas;
+ stream >> Andreas;
+ QCOMPARE(Andreas, QString("Andreas"));
+ stream.seek(0);
+ stream >> Andreas;
+ QCOMPARE(Andreas, QString("Andreas"));
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::status_real_read_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<double>("expected_f");
+ QTest::addColumn<QString>("expected_w");
+ QTest::addColumn<QList<int> >("results");
+
+ QTest::newRow("1.23 abc ") << QString("1.23 abc ") << 1.23 << QString("abc")
+ << (QList<int>()
+ << (int)QTextStream::Ok
+ << (int)QTextStream::ReadCorruptData
+ << (int)QTextStream::Ok
+ << (int)QTextStream::Ok
+ << (int)QTextStream::ReadPastEnd);
+}
+
+void tst_QTextStream::status_real_read()
+{
+ QFETCH(QString, input);
+ QFETCH(double, expected_f);
+ QFETCH(QString, expected_w);
+ QFETCH(QList<int>, results);
+
+ QTextStream s(&input);
+ double f = 0.0;
+ QString w;
+ s >> f;
+ QCOMPARE((int)s.status(), results.at(0));
+ QCOMPARE(f, expected_f);
+ s >> f;
+ QCOMPARE((int)s.status(), results.at(1));
+ s.resetStatus();
+ QCOMPARE((int)s.status(), results.at(2));
+ s >> w;
+ QCOMPARE((int)s.status(), results.at(3));
+ QCOMPARE(w, expected_w);
+ s >> f;
+ QCOMPARE((int)s.status(), results.at(4));
+}
+
+void tst_QTextStream::status_integer_read()
+{
+ QTextStream s("123 abc ");
+ int i;
+ QString w;
+ s >> i;
+ QCOMPARE(s.status(), QTextStream::Ok);
+ s >> i;
+ QCOMPARE(s.status(), QTextStream::ReadCorruptData);
+ s.resetStatus();
+ QCOMPARE(s.status(), QTextStream::Ok);
+ s >> w;
+ QCOMPARE(s.status(), QTextStream::Ok);
+ QCOMPARE(w, QString("abc"));
+ s >> i;
+ QCOMPARE(s.status(), QTextStream::ReadPastEnd);
+}
+
+void tst_QTextStream::status_word_read()
+{
+ QTextStream s("abc ");
+ QString w;
+ s >> w;
+ QCOMPARE(s.status(), QTextStream::Ok);
+ s >> w;
+ QCOMPARE(s.status(), QTextStream::ReadPastEnd);
+}
+
+class FakeBuffer : public QBuffer
+{
+protected:
+ qint64 writeData(const char *c, qint64 i) { return m_lock ? 0 : QBuffer::writeData(c, i); }
+public:
+ FakeBuffer(bool locked = false) : m_lock(locked) {}
+ void setLocked(bool locked) { m_lock = locked; }
+private:
+ bool m_lock;
+};
+
+void tst_QTextStream::status_write_error()
+{
+ FakeBuffer fb(false);
+ QVERIFY(fb.open(QBuffer::ReadWrite));
+ QTextStream fs(&fb);
+ fs.setCodec(QTextCodec::codecForName("latin1"));
+ /* first write some initial content */
+ fs << "hello";
+ fs.flush();
+ QCOMPARE(fs.status(), QTextStream::Ok);
+ QCOMPARE(fb.data(), QByteArray("hello"));
+ /* then test that writing can cause an error */
+ fb.setLocked(true);
+ fs << "error";
+ fs.flush();
+ QCOMPARE(fs.status(), QTextStream::WriteFailed);
+ QCOMPARE(fb.data(), QByteArray("hello"));
+ /* finally test that writing after an error doesn't change the stream any more */
+ fb.setLocked(false);
+ fs << "can't do that";
+ fs.flush();
+ QCOMPARE(fs.status(), QTextStream::WriteFailed);
+ QCOMPARE(fb.data(), QByteArray("hello"));
+}
+
+void tst_QTextStream::alignAccountingStyle()
+{
+ {
+ QString result;
+ QTextStream out(&result);
+ out.setFieldAlignment(QTextStream::AlignAccountingStyle);
+ out.setFieldWidth(4);
+ out.setPadChar('0');
+ out << -1;
+ QCOMPARE(result, QLatin1String("-001"));
+ }
+
+ {
+ QString result;
+ QTextStream out(&result);
+ out.setFieldAlignment(QTextStream::AlignAccountingStyle);
+ out.setFieldWidth(4);
+ out.setPadChar('0');
+ out << "-1";
+ QCOMPARE(result, QLatin1String("00-1"));
+ }
+
+ {
+ QString result;
+ QTextStream out(&result);
+ out.setFieldAlignment(QTextStream::AlignAccountingStyle);
+ out.setFieldWidth(6);
+ out.setPadChar('0');
+ out << -1.2;
+ QCOMPARE(result, QLatin1String("-001.2"));
+ }
+
+ {
+ QString result;
+ QTextStream out(&result);
+ out.setFieldAlignment(QTextStream::AlignAccountingStyle);
+ out.setFieldWidth(6);
+ out.setPadChar('0');
+ out << "-1.2";
+ QCOMPARE(result, QLatin1String("00-1.2"));
+ }
+}
+
+void tst_QTextStream::setCodec()
+{
+ QByteArray ba("\xe5 v\xe6r\n\xc3\xa5 v\xc3\xa6r\n");
+ QString res = QLatin1String("\xe5 v\xe6r");
+
+ QTextStream stream(ba);
+ stream.setCodec("ISO 8859-1");
+ QCOMPARE(stream.readLine(),res);
+ stream.setCodec("UTF-8");
+ QCOMPARE(stream.readLine(),res);
+}
+
+void tst_QTextStream::double_write_with_flags_data()
+{
+ QTest::addColumn<double>("number");
+ QTest::addColumn<QString>("output");
+ QTest::addColumn<int>("numberFlags");
+ QTest::addColumn<int>("realNumberNotation");
+
+ QTest::newRow("-ForceSign") << -1.23 << QString("-1.23") << (int)QTextStream::ForceSign << 0;
+ QTest::newRow("+ForceSign") << 1.23 << QString("+1.23") << (int)QTextStream::ForceSign << 0;
+ QTest::newRow("inf") << qInf() << QString("inf") << 0 << 0;
+ QTest::newRow("-inf") << -qInf() << QString("-inf") << 0 << 0;
+ QTest::newRow("inf uppercase") << qInf() << QString("INF") << (int)QTextStream::UppercaseDigits << 0;
+ QTest::newRow("-inf uppercase") << -qInf() << QString("-INF") << (int)QTextStream::UppercaseDigits << 0;
+ QTest::newRow("nan") << qQNaN() << QString("nan") << 0 << 0;
+ QTest::newRow("NAN") << qQNaN() << QString("NAN") << (int)QTextStream::UppercaseDigits << 0;
+ QTest::newRow("scientific") << 1.234567e+02 << QString("1.234567e+02") << 0 << (int)QTextStream::ScientificNotation;
+ QTest::newRow("scientific2") << 1.234567e+02 << QString("1.234567e+02") << (int)QTextStream::UppercaseBase << (int)QTextStream::ScientificNotation;
+ QTest::newRow("scientific uppercase") << 1.234567e+02 << QString("1.234567E+02") << (int)QTextStream::UppercaseDigits << (int)QTextStream::ScientificNotation;
+}
+
+void tst_QTextStream::double_write_with_flags()
+{
+ QFETCH(double, number);
+ QFETCH(QString, output);
+ QFETCH(int, numberFlags);
+ QFETCH(int, realNumberNotation);
+
+ QString buf;
+ QTextStream stream(&buf);
+ if (numberFlags)
+ stream.setNumberFlags(QTextStream::NumberFlag(numberFlags));
+ if (realNumberNotation)
+ stream.setRealNumberNotation(QTextStream::RealNumberNotation(realNumberNotation));
+ stream << number;
+ QCOMPARE(buf, output);
+}
+
+void tst_QTextStream::double_write_with_precision_data()
+{
+ QTest::addColumn<int>("precision");
+ QTest::addColumn<double>("value");
+ QTest::addColumn<QString>("result");
+
+ QTest::ignoreMessage(QtWarningMsg, "QTextStream::setRealNumberPrecision: Invalid precision (-1)");
+ QTest::newRow("-1") << -1 << 3.14159 << QString("3.14159");
+ QTest::newRow("0") << 0 << 3.14159 << QString("3");
+ QTest::newRow("1") << 1 << 3.14159 << QString("3");
+ QTest::newRow("2") << 2 << 3.14159 << QString("3.1");
+ QTest::newRow("3") << 3 << 3.14159 << QString("3.14");
+ QTest::newRow("5") << 5 << 3.14159 << QString("3.1416");
+ QTest::newRow("6") << 6 << 3.14159 << QString("3.14159");
+ QTest::newRow("7") << 7 << 3.14159 << QString("3.14159");
+ QTest::newRow("10") << 10 << 3.14159 << QString("3.14159");
+}
+
+void tst_QTextStream::double_write_with_precision()
+{
+ QFETCH(int, precision);
+ QFETCH(double, value);
+ QFETCH(QString, result);
+
+ QString buf;
+ QTextStream stream(&buf);
+ stream.setRealNumberPrecision(precision);
+ stream << value;
+ QCOMPARE(buf, result);
+}
+
+void tst_QTextStream::int_read_with_locale_data()
+{
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<int>("output");
+
+ QTest::newRow("C -123") << QString("C") << QString("-123") << -123;
+ QTest::newRow("C +123") << QString("C") << QString("+123") << 123;
+ QTest::newRow("C 12345") << QString("C") << QString("12345") << 12345;
+ QTest::newRow("C 12,345") << QString("C") << QString("12,345") << 12;
+ QTest::newRow("C 12.345") << QString("C") << QString("12.345") << 12;
+
+ QTest::newRow("de_DE -123") << QString("de_DE") << QString("-123") << -123;
+ QTest::newRow("de_DE +123") << QString("de_DE") << QString("+123") << 123;
+ QTest::newRow("de_DE 12345") << QString("de_DE") << QString("12345") << 12345;
+ QTest::newRow("de_DE 12.345") << QString("de_DE") << QString("12.345") << 12345;
+ QTest::newRow("de_DE .12345") << QString("de_DE") << QString(".12345") << 0;
+}
+
+void tst_QTextStream::int_read_with_locale()
+{
+ QFETCH(QString, locale);
+ QFETCH(QString, input);
+ QFETCH(int, output);
+
+ QTextStream stream(&input);
+ stream.setLocale(locale);
+ int result;
+ stream >> result;
+ QCOMPARE(result, output);
+}
+
+void tst_QTextStream::int_write_with_locale_data()
+{
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<int>("numberFlags");
+ QTest::addColumn<int>("input");
+ QTest::addColumn<QString>("output");
+
+ QTest::newRow("C -123") << QString("C") << 0 << -123 << QString("-123");
+ QTest::newRow("C +123") << QString("C") << (int)QTextStream::ForceSign << 123 << QString("+123");
+ QTest::newRow("C 12345") << QString("C") << 0 << 12345 << QString("12345");
+
+ QTest::newRow("de_DE -123") << QString("de_DE") << 0 << -123 << QString("-123");
+ QTest::newRow("de_DE +123") << QString("de_DE") << (int)QTextStream::ForceSign << 123 << QString("+123");
+ QTest::newRow("de_DE 12345") << QString("de_DE") << 0 << 12345 << QString("12.345");
+}
+
+void tst_QTextStream::int_write_with_locale()
+{
+ QFETCH(QString, locale);
+ QFETCH(int, numberFlags);
+ QFETCH(int, input);
+ QFETCH(QString, output);
+
+ QString result;
+ QTextStream stream(&result);
+ stream.setLocale(locale);
+ if (numberFlags)
+ stream.setNumberFlags(QTextStream::NumberFlags(numberFlags));
+ stream << input;
+ QCOMPARE(result, output);
+}
+
+void tst_QTextStream::textModeOnEmptyRead()
+{
+ const QString filename(tempDir.path() + QLatin1String("/textmodetest.txt"));
+
+ QFile file(filename);
+ QVERIFY2(file.open(QIODevice::ReadWrite | QIODevice::Text), qPrintable(file.errorString()));
+ QTextStream stream(&file);
+ QVERIFY(file.isTextModeEnabled());
+ QString emptyLine = stream.readLine(); // Text mode flag cleared here
+ QVERIFY(file.isTextModeEnabled());
+}
+
+
+// ------------------------------------------------------------------------------
+
+QTEST_MAIN(tst_QTextStream)
+#include "tst_qtextstream.moc"
+
diff --git a/tests/auto/corelib/xml/qxmlstream/.gitattributes b/tests/auto/corelib/serialization/qxmlstream/.gitattributes
index 1179160a76..1179160a76 100644
--- a/tests/auto/corelib/xml/qxmlstream/.gitattributes
+++ b/tests/auto/corelib/serialization/qxmlstream/.gitattributes
diff --git a/tests/auto/corelib/xml/qxmlstream/.gitignore b/tests/auto/corelib/serialization/qxmlstream/.gitignore
index 0131c9090c..0131c9090c 100644
--- a/tests/auto/corelib/xml/qxmlstream/.gitignore
+++ b/tests/auto/corelib/serialization/qxmlstream/.gitignore
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite-LICENSE.txt b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite-LICENSE.txt
index bd84fae346..bd84fae346 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite-LICENSE.txt
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite-LICENSE.txt
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Entries
index ba3a807265..ba3a807265 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Repository
index 8b5cf35650..8b5cf35650 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/matrix.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/matrix.html
index 7cdd2c8051..7cdd2c8051 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/matrix.html
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/matrix.html
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Entries
index fcc3c02242..fcc3c02242 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Repository
index d1c36626fc..d1c36626fc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/changes.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/changes.html
index 7ec5b43cef..7ec5b43cef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/changes.html
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/changes.html
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Entries
index 1ada1803bf..1ada1803bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Repository
index ac61f21224..ac61f21224 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Entries
index b14a51b5f5..b14a51b5f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Repository
index e138ad2e84..e138ad2e84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.dtd
index c46237f80c..c46237f80c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.xml
index 96f0ed7c30..96f0ed7c30 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15a.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15a.xml
index 4c05a33bc3..4c05a33bc3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15a.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15a.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15b.xml
index 03270e5ad5..03270e5ad5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15b.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15c.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15c.xml
index 6cfe53140b..6cfe53140b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15c.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15c.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15d.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15d.xml
index 9074c8d5c7..9074c8d5c7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15d.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15d.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15e.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15e.xml
index 2228b35e8e..2228b35e8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15e.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15e.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15f.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15f.xml
index b65fe0d1b9..b65fe0d1b9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15f.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15f.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15g.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15g.xml
index c806deae54..c806deae54 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15g.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15g.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15h.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15h.xml
index 970599ee10..970599ee10 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15h.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15h.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15i.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15i.xml
index 25dac7fa73..25dac7fa73 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15i.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15i.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15j.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15j.xml
index c7006d2cf7..c7006d2cf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15j.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15j.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15k.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15k.xml
index 06631abb90..06631abb90 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15k.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15k.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15l.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15l.xml
index 986808d7f7..986808d7f7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15l.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E15l.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18-ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18-ent
index b5508ffbf1..b5508ffbf1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18-ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18-ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18.xml
index 4572e53bea..4572e53bea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.dtd
index 13ec57a6f1..13ec57a6f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.xml
index 56ecaacb28..56ecaacb28 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E20.xml
index 1a998134b1..1a998134b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E22.xml
index 6b7d256c76..6b7d256c76 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E24.xml
index 45e3e164b7..45e3e164b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E27.xml
index 9c10725323..9c10725323 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E29.xml
index da0493a38d..da0493a38d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2a.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2a.xml
index b5e885b088..b5e885b088 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2a.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2a.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2b.xml
index b3aac725e8..b3aac725e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E2b.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E34.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E34.xml
index c12012bab2..c12012bab2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E34.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E34.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.dtd
index 27c627e520..27c627e520 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.xml
index 482de15c19..482de15c19 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E36.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.ent
index 137ed58831..137ed58831 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.xml
index e61b897e34..e61b897e34 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E38.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E41.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E41.xml
index 42d77e4441..42d77e4441 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E41.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E41.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E48.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E48.xml
index 5ca162a819..5ca162a819 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E48.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E48.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E50.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E50.xml
index 760ae17c07..760ae17c07 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E50.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E50.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E55.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E55.xml
index abb90efad5..abb90efad5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E55.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E55.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E57.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E57.xml
index 9174fa34a8..9174fa34a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E57.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E57.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.ent
index 3b07eb340e..3b07eb340e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.xml
index f98f33f4a2..f98f33f4a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E60.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E61.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E61.xml
index 22c342fe28..22c342fe28 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E61.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E61.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9a.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9a.xml
index 9104cc4cba..9104cc4cba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9a.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9a.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9b.xml
index 9a2bbbc030..9a2bbbc030 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/E9b.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/errata2e.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/errata2e.xml
index 51d92fd956..51d92fd956 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/errata2e.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/errata2e.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Entries
index 84bbe99bd6..84bbe99bd6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Repository
index 94bd81f49f..94bd81f49f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E18.xml
index 727de27226..727de27226 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E19.xml
index c1db16e5fa..c1db16e5fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E24.xml
index abed8b7372..abed8b7372 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/out/E24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Entries
index e7f219e7b5..e7f219e7b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Repository
index 22c019b707..22c019b707 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-ent
index 09709bdd52..09709bdd52 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-pe b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-pe
index 8a63a9291c..8a63a9291c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-pe
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir1/E18-pe
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Entries
index 9b4abb18bb..9b4abb18bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Repository
index 9a886b0ccb..9a886b0ccb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-ent
index 73b4db0700..73b4db0700 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-extpe b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-extpe
index 2ba97bd947..2ba97bd947 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-extpe
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/subdir2/E18-extpe
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/testcases.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/testcases.dtd
index 448d362991..448d362991 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/testcases.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/testcases.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/xmlconf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/xmlconf.xml
index 9c7d92eec6..9c7d92eec6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/xmlconf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-2e/xmlconf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Entries
index 75b258e445..75b258e445 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Repository
index 748d2db480..748d2db480 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05a.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05a.xml
index 42654d1651..42654d1651 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05a.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05a.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05b.xml
index 2522b035c4..2522b035c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E05b.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06a.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06a.xml
index 1174ed52a8..1174ed52a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06a.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06a.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06b.xml
index d11d8cdcab..d11d8cdcab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06b.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06c.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06c.xml
index bd0fd5351d..bd0fd5351d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06c.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06c.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06d.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06d.xml
index 0671b7466f..0671b7466f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06d.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06d.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06e.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06e.xml
index 2b737e099b..2b737e099b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06e.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06e.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06f.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06f.xml
index 47e4618632..47e4618632 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06f.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06f.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06g.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06g.xml
index 37b1ee6ae6..37b1ee6ae6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06g.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06g.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06h.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06h.xml
index 1b3f11aeb4..1b3f11aeb4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06h.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06h.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06i.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06i.xml
index dd79ee2899..dd79ee2899 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06i.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E06i.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E12.xml
index 784f3424ee..784f3424ee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E13.xml
index d93ef3ee5d..d93ef3ee5d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/E13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/errata3e.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/errata3e.xml
index 3eda8c6fd1..3eda8c6fd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/errata3e.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/errata3e.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/testcases.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/testcases.dtd
index 448d362991..448d362991 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/testcases.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/testcases.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/xmlconf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/xmlconf.xml
index dcc571a743..dcc571a743 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/xmlconf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/errata-3e/xmlconf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/001.xml
index dca5e6705f..dca5e6705f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/002.xml
index 3749bcbbb7..3749bcbbb7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/003.xml
index 66c5cb8191..66c5cb8191 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/004.xml
index e7d91d5d33..e7d91d5d33 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/005.xml
index dc9c663649..dc9c663649 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/006.xml
index 80c8bf75d1..80c8bf75d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/007.xml
index 667bd63d1b..667bd63d1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/008.xml
index d63bc3c45e..d63bc3c45e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/009.xml
index d67c066ec4..d67c066ec4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/010.xml
index 2216fd6dce..2216fd6dce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/011.xml
index f22269b2df..f22269b2df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/012.xml
index 26d9b1bebb..26d9b1bebb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/013.xml
index e8770ea1cf..e8770ea1cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/014.xml
index 7c8e9fa2a3..7c8e9fa2a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/015.xml
index 503018e705..503018e705 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/016.xml
index 8a3c44e45d..8a3c44e45d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/017.xml
index 65e754257d..65e754257d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/018.xml
index e795466550..e795466550 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/019.xml
index c4620bd097..c4620bd097 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/020.xml
index 4e5fcad48d..4e5fcad48d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/021.xml
index e56c240c42..e56c240c42 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/022.xml
index 31984e79bf..31984e79bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/023.xml
index 4d695ad38d..4d695ad38d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/024.xml
index b68470afa6..b68470afa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/025.xml
index 1277ab33da..1277ab33da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/026.xml
index 689c75c666..689c75c666 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/027.xml
index 1bf048e7f9..1bf048e7f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/028.xml
index e461235571..e461235571 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/029.xml
index 2c05165d9d..2c05165d9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/030.xml
index db5ab4dbc2..db5ab4dbc2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/031.xml
index 2eec6cc6d0..2eec6cc6d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/032.xml
index 94433263c5..94433263c5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/033.xml
index d9ee72807c..d9ee72807c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/034.xml
index 4fa2b8dbb0..4fa2b8dbb0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/035.xml
index 97b14b3106..97b14b3106 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/036.xml
index c37894b5d7..c37894b5d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/037.xml
index 30bc24b5b2..30bc24b5b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/038.xml
index 2b20a469e0..2b20a469e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/038.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/038.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/039.xml
index af7be31dc7..af7be31dc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/039.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/039.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/040.xml
index cf02e22bfa..cf02e22bfa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/041.xml
index 80781e2e2b..80781e2e2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/041.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/041.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/042.xml
index 045dcc23dc..045dcc23dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/042.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/042.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/043.xml
index d800e2537b..d800e2537b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/044.xml
index 30922c8d2b..30922c8d2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/045.xml
index 3235470923..3235470923 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/046.xml
index 8432a2faaa..8432a2faaa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Entries
index 9162d1bae5..9162d1bae5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Repository
index 771fee0884..771fee0884 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml
index 7cc985b5a9..7cc985b5a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.0/rmt-ns10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/001.xml
index b4b8b96e68..b4b8b96e68 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/002.xml
index 722df453c0..722df453c0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/003.xml
index 71d7343eb0..71d7343eb0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/004.xml
index fe89ec2f86..fe89ec2f86 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/005.xml
index cf47356b5b..cf47356b5b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/006.xml
index 9235054a2c..9235054a2c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Entries
index d1bf8d0fc7..d1bf8d0fc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Repository
index 92664cd3be..92664cd3be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/rmt-ns11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/rmt-ns11.xml
index 747aa47c58..747aa47c58 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/rmt-ns11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/1.1/rmt-ns11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries
index 2229b3fc8d..2229b3fc8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries.Log b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries.Log
index 1044e1317e..1044e1317e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries.Log
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Entries.Log
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Repository
index d277ba7aa6..d277ba7aa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Entries
index 3170ace724..3170ace724 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Repository
index 6ee3edf5a9..6ee3edf5a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13a.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13a.xml
index b3a3a6b544..b3a3a6b544 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13a.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13a.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13b.xml
index b483caf6a6..b483caf6a6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13b.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13c.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13c.xml
index fb28af71d1..fb28af71d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13c.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/NE13c.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/errata1e.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/errata1e.xml
index fd2ebf7a87..fd2ebf7a87 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/errata1e.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/errata1e.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/testcases.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/testcases.dtd
index 448d362991..448d362991 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/testcases.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/testcases.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/xmlconf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/xmlconf.xml
index e8a004303f..e8a004303f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/xmlconf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/errata-1e/xmlconf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/testcases.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/testcases.dtd
index 448d362991..448d362991 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/testcases.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/testcases.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/xmlconf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/xmlconf.xml
index 2d0dd86a1d..2d0dd86a1d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/xmlconf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/namespaces/xmlconf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.dtd
index 61b3bf6eb6..61b3bf6eb6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.xml
index 3750a92147..3750a92147 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.pe b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.pe
index 61b3bf6eb6..61b3bf6eb6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.pe
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.pe
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.xml
index e152a71656..e152a71656 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.ent
index e513d58a51..e513d58a51 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.xml
index b0d3ee2b2a..b0d3ee2b2a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.ent
index e513d58a51..e513d58a51 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.xml
index cc9dfa2179..cc9dfa2179 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005.xml
index e3426a8537..e3426a8537 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_1.ent
index 427bb5081e..427bb5081e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_1.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_1.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_2.ent
index e513d58a51..e513d58a51 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_2.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/005_2.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006.xml
index a27a512b63..a27a512b63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_1.ent
index 427bb5081e..427bb5081e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_1.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_1.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_2.ent
index e513d58a51..e513d58a51 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_2.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/006_2.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/007.xml
index e587762791..e587762791 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/008.xml
index 98f6c1ba0c..98f6c1ba0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.ent
index 5c7d0dc7c7..5c7d0dc7c7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.xml
index b10354e4e6..b10354e4e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/010.xml
index 29b782878c..29b782878c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/011.xml
index 686f9abcc6..686f9abcc6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/012.xml
index 698db33712..698db33712 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/013.xml
index 399255893c..399255893c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/014.xml
index 05ac4aba77..05ac4aba77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/015.xml
index a708f720ca..a708f720ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/016.xml
index 81c035dcb7..81c035dcb7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/017.xml
index 08c03671e6..08c03671e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/018.xml
index b88ef98f93..b88ef98f93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/019.xml
index 5bcdf49e8d..5bcdf49e8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/020.xml
index 3cf6bf2e75..3cf6bf2e75 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/021.xml
index 6c8ff0fe03..6c8ff0fe03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/022.xml
index 0081cef2a9..0081cef2a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/023.xml
index 857a251a46..857a251a46 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/024.xml
index ee3cecba7e..ee3cecba7e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/025.xml
index 321601d42c..321601d42c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/026.xml
index 854e4e7785..854e4e7785 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/027.xml
index 9ba1d7c5fe..9ba1d7c5fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/028.xml
index 8fcfac0ecb..8fcfac0ecb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/029.xml
index 15f8e6d1d2..15f8e6d1d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/030.xml
index 89ac243fb1..89ac243fb1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/031.xml
index 80510b8dd0..80510b8dd0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/032.xml
index 04e807655a..04e807655a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/033.xml
index 1b86446d13..1b86446d13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/034.xml
index 1389e28769..1389e28769 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/035.xml
index 28275493a5..28275493a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/036.xml
index 26e02cdba1..26e02cdba1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/037.xml
index 7e0e9fd1b8..7e0e9fd1b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/038.xml
index c172ca52cf..c172ca52cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/038.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/038.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/039.xml
index d6ce5d05a6..d6ce5d05a6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/039.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/039.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/040.xml
index 2717a4f8a4..2717a4f8a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/041.xml
index e3caa92050..e3caa92050 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/041.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/041.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/042.xml
index d12570ba01..d12570ba01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/042.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/042.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/043.xml
index 771e807f94..771e807f94 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/044.xml
index fc47fbf6f2..fc47fbf6f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/045.xml
index 966f8c7906..966f8c7906 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/046.xml
index 8d1f955435..8d1f955435 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/047.xml
index 4231317ebf..4231317ebf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/047.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/047.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/048.xml
index b7a995d0be..b7a995d0be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/048.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/048.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/049.xml
index 15608635a2..15608635a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/049.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/049.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/050.xml
index 68b17cac37..68b17cac37 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/050.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/050.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/051.xml
index 916be37a09..916be37a09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/051.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/051.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/052.xml
index 1a544dd26d..1a544dd26d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/052.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/052.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/053.xml
index 720e4393e0..720e4393e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/053.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/053.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/054.xml
index a60c006bae..a60c006bae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/054.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/054.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/055.xml
index fe5a6cc644..fe5a6cc644 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/055.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/055.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/056.xml
index 703f25b864..703f25b864 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/056.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/056.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/057.xml
index 1ee4071470..1ee4071470 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/057.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/057.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Entries
index 7dc624fe01..7dc624fe01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Repository
index b4d2d355ce..b4d2d355ce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/006.xml
index bb23ff88a9..bb23ff88a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/007.xml
index 01d6d20520..01d6d20520 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/010.xml
index d24c7744c1..d24c7744c1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/012.xml
index 384344a000..384344a000 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/015.xml
index bbc5c27a14..bbc5c27a14 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/017.xml
index a169654ec8..a169654ec8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/018.xml
index e9ed497844..e9ed497844 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/022.xml
index dd89bed4e0..dd89bed4e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/023.xml
index be866ffc8b..be866ffc8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/024.xml
index 0ae04b6fa6..0ae04b6fa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/025.xml
index be866ffc8b..be866ffc8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/026.xml
index 98aaebd487..98aaebd487 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/027.xml
index be866ffc8b..be866ffc8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/028.xml
index 3537e31d0a..3537e31d0a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/029.xml
index 7f917046df..7f917046df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/030.xml
index 10e9d7d2b5..10e9d7d2b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/031.xml
index 128ee0e125..128ee0e125 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/032.xml
index b67e16498d..b67e16498d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/033.xml
index 128ee0e125..128ee0e125 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/034.xml
index da523b848e..da523b848e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/035.xml
index 128ee0e125..128ee0e125 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/036.xml
index 10e9d7d2b5..10e9d7d2b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/037.xml
index fbdb0aab0a..fbdb0aab0a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/040.xml
index 7bbfacf14b..7bbfacf14b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/043.xml
index c858cf9436..c858cf9436 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/044.xml
index 7bbfacf14b..7bbfacf14b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/045.xml
index e86a8b6620..e86a8b6620 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/046.xml
index dd89bed4e0..dd89bed4e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/047.xml
index be866ffc8b..be866ffc8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/047.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/047.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/048.xml
index 0ae04b6fa6..0ae04b6fa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/048.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/048.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/049.xml
index be866ffc8b..be866ffc8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/049.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/049.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/050.xml
index 7f3143d210..7f3143d210 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/050.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/050.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/051.xml
index d40772ba80..d40772ba80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/051.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/051.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/052.xml
index efb77f2429..efb77f2429 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/052.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/052.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/053.xml
index 44e7304320..44e7304320 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/053.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/053.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/054.xml
index c858cf9436..c858cf9436 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/054.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/054.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Entries
index f4e8474467..f4e8474467 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Repository
index 7cae140bee..7cae140bee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/testcases.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/testcases.dtd
index 448d362991..448d362991 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/testcases.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/testcases.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xml11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xml11.xml
index 6bfe42c661..6bfe42c661 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xml11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xml11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xmlconf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xmlconf.xml
index af0a3b5fa1..af0a3b5fa1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xmlconf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/eduni/xml-1.1/xmlconf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Entries
index 2ca1cb0db5..2ca1cb0db5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Repository
index 88b76010b4..88b76010b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/a_oasis-logo.gif b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/a_oasis-logo.gif
index 320150647c..320150647c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/a_oasis-logo.gif
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/a_oasis-logo.gif
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/committee.css b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/committee.css
index 1bf8e066e5..1bf8e066e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/committee.css
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/committee.css
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/top3.jpe b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/top3.jpe
index 37185800cb..37185800cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/files/top3.jpe
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/files/top3.jpe
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/finalCatalog.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/finalCatalog.xml
index adf39bac55..adf39bac55 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/finalCatalog.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/finalCatalog.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Entries
index 047d2e3ef0..047d2e3ef0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Repository
index e49e364c8a..e49e364c8a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_invalid.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_invalid.xml
index 5134946591..5134946591 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_invalid.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_invalid.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_not-wf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_not-wf.xml
index f1e70c26cd..f1e70c26cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_not-wf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_not-wf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_readme.txt b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_readme.txt
index 6640e3c9f3..6640e3c9f3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_readme.txt
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_readme.txt
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_valid.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_valid.xml
index 7544db3519..7544db3519 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_valid.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/ibm_oasis_valid.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Entries
index bc0025d2ad..bc0025d2ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Repository
index 27ee1f3e38..27ee1f3e38 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Entries
index 521a5a105c..521a5a105c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Repository
index c0716b8b9b..c0716b8b9b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/ibm28i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/ibm28i01.xml
index f9ea91cfb5..f9ea91cfb5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/ibm28i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/ibm28i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Entries
index df6f903ed9..df6f903ed9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Repository
index 24caa1588b..24caa1588b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/ibm28i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/ibm28i01.xml
index c712ea7861..c712ea7861 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/ibm28i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P28/out/ibm28i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Entries
index cf97c64551..cf97c64551 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Repository
index b6ce33a0ad..b6ce33a0ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.dtd
index 4828791469..4828791469 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.xml
index 68ca044d8e..68ca044d8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.dtd
index 26743b6836..26743b6836 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.xml
index dbed9bce8c..dbed9bce8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.dtd
index 358c3c7455..358c3c7455 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.xml
index bc2739078e..bc2739078e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/ibm32i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Entries
index 23b45ac62a..23b45ac62a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Repository
index cab81954b6..cab81954b6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i01.xml
index 2ec4ca8d75..2ec4ca8d75 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i03.xml
index 42364d84a7..42364d84a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i04.xml
index 9cc8454634..9cc8454634 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P32/out/ibm32i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Entries
index 20c16488be..20c16488be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Repository
index 15e4f85b56..15e4f85b56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i01.xml
index 1ffa0bb5d9..1ffa0bb5d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i02.xml
index cbf01fd15b..cbf01fd15b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i03.xml
index f50afab74b..f50afab74b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i04.xml
index 192447a700..192447a700 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/ibm39i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Entries
index e658de736d..e658de736d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Repository
index a169f61827..a169f61827 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i01.xml
index 35bbc641ac..35bbc641ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i02.xml
index 2c21f47f2d..2c21f47f2d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i03.xml
index a5a526c983..a5a526c983 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i04.xml
index dd152f76b8..dd152f76b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P39/out/ibm39i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Entries
index a1ea2b1200..a1ea2b1200 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Repository
index e742ba96c5..e742ba96c5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i01.xml
index 05d67ade19..05d67ade19 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i02.xml
index 8c3d74e1b7..8c3d74e1b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/ibm41i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Entries
index 22fcf94509..22fcf94509 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Repository
index 1243a92e84..1243a92e84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i01.xml
index 8c75abccfa..8c75abccfa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i02.xml
index 3bdaa30e18..3bdaa30e18 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P41/out/ibm41i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Entries
index c4b20cf588..c4b20cf588 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Repository
index b784a8ce8d..b784a8ce8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/ibm45i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/ibm45i01.xml
index 6526b4ad5e..6526b4ad5e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/ibm45i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/ibm45i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Entries
index 5aca32db59..5aca32db59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Repository
index cd03a70086..cd03a70086 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/ibm45i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/ibm45i01.xml
index a107534606..a107534606 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/ibm45i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P45/out/ibm45i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Entries
index ee5dde8fc0..ee5dde8fc0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Repository
index 71bda1a417..71bda1a417 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.dtd
index 9fefbf5253..9fefbf5253 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.xml
index f84452e18b..f84452e18b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i02.xml
index 260fa82c8d..260fa82c8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/ibm49i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Entries
index 2b68a7fff1..2b68a7fff1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Repository
index 132c28e67a..132c28e67a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i01.xml
index fb492e28e4..fb492e28e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i02.xml
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P49/out/ibm49i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Entries
index 07140599c4..07140599c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Repository
index a50ce9bca9..a50ce9bca9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.dtd
index 1439a1738f..1439a1738f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.xml
index 33def44e03..33def44e03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/ibm50i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Entries
index f7901d6aeb..f7901d6aeb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Repository
index 8829c67195..8829c67195 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/ibm50i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/ibm50i01.xml
index fb492e28e4..fb492e28e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/ibm50i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P50/out/ibm50i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Entries
index e90c6600b3..e90c6600b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Repository
index ab79e8f8e5..ab79e8f8e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.dtd
index 1602ff3afb..1602ff3afb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.xml
index e77859811a..e77859811a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.dtd
index 61f882fb65..61f882fb65 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.xml
index 8c4b88935e..8c4b88935e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/ibm51i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Entries
index 78d821818f..78d821818f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Repository
index 2251dcd77f..2251dcd77f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i01.xml
index 078934e1d1..078934e1d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i02.xml
index 078934e1d1..078934e1d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i03.xml
index 078934e1d1..078934e1d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P51/out/ibm51i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Entries
index 0d1af5d13a..0d1af5d13a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Repository
index 0e6f194bb3..0e6f194bb3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i01.xml
index 830599170c..830599170c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i02.xml
index b7c5af55d0..b7c5af55d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i03.xml
index 85a34a2e74..85a34a2e74 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i05.xml
index fb555aa080..fb555aa080 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i06.xml
index 9ef0fa3382..9ef0fa3382 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i07.xml
index 5724d47156..5724d47156 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i08.xml
index 2538a2c7be..2538a2c7be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i09.xml
index e2ae11a8f2..e2ae11a8f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i10.xml
index 962d4661d1..962d4661d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i11.xml
index f2d88c5542..f2d88c5542 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i12.xml
index 79cc40a393..79cc40a393 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i13.xml
index c6818fa4bc..c6818fa4bc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i14.xml
index 9b4b3434f6..9b4b3434f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i15.xml
index a8ebc8c816..a8ebc8c816 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i16.xml
index 3b4579fe42..3b4579fe42 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i17.xml
index 01162dfabd..01162dfabd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i18.xml
index 7ee173ba7f..7ee173ba7f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/ibm56i18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Entries
index 8a10963a89..8a10963a89 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Repository
index 0551a83123..0551a83123 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i01.xml
index b25807811b..b25807811b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i02.xml
index c6fc2937c1..c6fc2937c1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i03.xml
index 0fd8f98fc2..0fd8f98fc2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i05.xml
index 6da02f3935..6da02f3935 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i06.xml
index 30e5228f2d..30e5228f2d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i07.xml
index 3903dd4ef3..3903dd4ef3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i08.xml
index 7759a5e47c..7759a5e47c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i09.xml
index 426e94baa5..426e94baa5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i10.xml
index 59005d4083..59005d4083 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i11.xml
index 0bc9ddda62..0bc9ddda62 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i12.xml
index e5a0c0eeaf..e5a0c0eeaf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i13.xml
index 0292fd28cf..0292fd28cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i14.xml
index 8a6c0a061a..8a6c0a061a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i15.xml
index e86f97b636..e86f97b636 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i16.xml
index dd486c63ed..dd486c63ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i17.xml
index 0229bacbd1..0229bacbd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i18.xml
index 9119b7324f..9119b7324f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P56/out/ibm56i18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Entries
index 021d8e65ca..021d8e65ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Repository
index 32f1f9c1f6..32f1f9c1f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i01.xml
index e9e53a01df..e9e53a01df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i02.xml
index 68d9cbbf4f..68d9cbbf4f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/ibm58i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Entries
index ed5dfef67e..ed5dfef67e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Repository
index 809824e51b..809824e51b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i01.xml
index 1ac628be4f..1ac628be4f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i02.xml
index 1999fc00dd..1999fc00dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P58/out/ibm58i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Entries
index 8aa63a4dc8..8aa63a4dc8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Repository
index f78e94bd85..f78e94bd85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/ibm59i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/ibm59i01.xml
index 9b004f2f6b..9b004f2f6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/ibm59i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/ibm59i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Entries
index 6aac8a489c..6aac8a489c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Repository
index bfc8d0ed2d..bfc8d0ed2d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/ibm59i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/ibm59i01.xml
index 7766f1c297..7766f1c297 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/ibm59i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P59/out/ibm59i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Entries
index e3d22a3ddb..e3d22a3ddb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Repository
index 369068b0ad..369068b0ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i01.xml
index 57756a169b..57756a169b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i02.xml
index 1b891d8a59..1b891d8a59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i03.xml
index 7e35078086..7e35078086 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i04.xml
index 9ccdc8257f..9ccdc8257f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/ibm60i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Entries
index 03208dd2f8..03208dd2f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Repository
index 5004676316..5004676316 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i01.xml
index 0546e27412..0546e27412 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i02.xml
index 2684857257..2684857257 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i03.xml
index 0334dbf10e..0334dbf10e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i04.xml
index 0334dbf10e..0334dbf10e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P60/out/ibm60i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Entries
index 65d4c729e0..65d4c729e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Repository
index 8bc5e399d0..8bc5e399d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.dtd
index f3b49c2472..f3b49c2472 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.xml
index 83145aa8c0..83145aa8c0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.dtd
index fcf30871c9..fcf30871c9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.xml
index 84ff6758d7..84ff6758d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.ent
index 1ac4fcab5f..1ac4fcab5f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.xml
index f857b63390..f857b63390 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.ent
index bcc535bb25..bcc535bb25 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.xml
index 77a69628f6..77a69628f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/ibm68i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Entries
index 2b945900ec..2b945900ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Repository
index 73e08e9561..73e08e9561 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i01.xml
index 2375979678..2375979678 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i02.xml
index 2375979678..2375979678 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i03.xml
index c05dd56b0c..c05dd56b0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i04.xml
index c05dd56b0c..c05dd56b0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P68/out/ibm68i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Entries
index 054650eee2..054650eee2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Repository
index 504fa99f5e..504fa99f5e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.dtd
index 24f59e83c8..24f59e83c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.xml
index 1c31ac572c..1c31ac572c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.dtd
index 2317c6ffc1..2317c6ffc1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.xml
index e1f45ae92e..e1f45ae92e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.ent
index 94bca39dff..94bca39dff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.xml
index 7ae2f130ce..7ae2f130ce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.ent
index b078fb4276..b078fb4276 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.xml
index 62f1125043..62f1125043 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/ibm69i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Entries
index f90c3091d5..f90c3091d5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Repository
index 79786a6aa5..79786a6aa5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i01.xml
index 2375979678..2375979678 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i02.xml
index 2375979678..2375979678 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i03.xml
index c05dd56b0c..c05dd56b0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i04.xml
index c05dd56b0c..c05dd56b0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P69/out/ibm69i04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Entries
index e70dc08a9b..e70dc08a9b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Repository
index 6af8648a21..6af8648a21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/ibm76i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/ibm76i01.xml
index a4409c6b68..a4409c6b68 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/ibm76i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/ibm76i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Entries
index 6c04f454c8..6c04f454c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Repository
index 9e590fdf12..9e590fdf12 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/ibm76i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/ibm76i01.xml
index bcce7a0f7c..bcce7a0f7c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/ibm76i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/invalid/P76/out/ibm76i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Entries
index 0a8a358121..0a8a358121 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Repository
index 2e4f9283ae..2e4f9283ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Entries
index 1a920f206e..1a920f206e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Repository
index 4ef6d7c144..4ef6d7c144 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n01.xml
index 8f2a24950c..8f2a24950c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n02.xml
index fba7c8f6fb..fba7c8f6fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n03.xml
index 82fd08c3c6..82fd08c3c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P01/ibm01n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Entries
index 44562e48ba..44562e48ba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Repository
index df75b96e6b..df75b96e6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n01.xml
index 867386a255..867386a255 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n01.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n02.xml
index 0984535667..0984535667 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n03.xml
index 8fb98db76f..8fb98db76f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n04.xml
index 35ebb81254..35ebb81254 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n05.xml
index 4847c52f04..4847c52f04 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n06.xml
index f4b3fea92b..f4b3fea92b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n07.xml
index 70b39a42bf..70b39a42bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n08.xml
index d6a07f9721..d6a07f9721 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n09.xml
index 14082265f1..14082265f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n10.xml
index 127b117d9c..127b117d9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n11.xml
index c0f6340498..c0f6340498 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n12.xml
index 3aa6b22386..3aa6b22386 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n13.xml
index b5da2def7b..b5da2def7b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n14.xml
index fb475617b2..fb475617b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n15.xml
index 90e4ce29db..90e4ce29db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n16.xml
index ef0bd5b521..ef0bd5b521 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n17.xml
index cb6d61f9e9..cb6d61f9e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n18.xml
index 6d6277d662..6d6277d662 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n19.xml
index 965802232e..965802232e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n20.xml
index 0257c823c6..0257c823c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n21.xml
index 89a0b1ad73..89a0b1ad73 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n22.xml
index 3bf0e2d1ab..3bf0e2d1ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n23.xml
index 7ce8a85fd2..7ce8a85fd2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n24.xml
index 5a2ea3ecfc..5a2ea3ecfc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n25.xml
index 259b054712..259b054712 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n26.xml
index 004f5e0466..004f5e0466 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n27.xml
index 0cab04e7af..0cab04e7af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n28.xml
index 34b1e0a2d9..34b1e0a2d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n29.xml
index 70b9f721c6..70b9f721c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n30.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n30.xml
index a5606b217a..a5606b217a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n30.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n30.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n31.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n31.xml
index e7b65e4894..e7b65e4894 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n31.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n31.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n32.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n32.xml
index 89597112cb..89597112cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n32.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n32.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n33.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n33.xml
index 44f74da54c..44f74da54c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n33.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P02/ibm02n33.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Entries
index 11df6eb44c..11df6eb44c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Repository
index 4ae749c6b4..4ae749c6b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/ibm03n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/ibm03n01.xml
index 433e6b0374..433e6b0374 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/ibm03n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P03/ibm03n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Entries
index 7411fcfa1a..7411fcfa1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Repository
index 8f43addda9..8f43addda9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n01.xml
index 91c8d59f5e..91c8d59f5e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n02.xml
index c47224bdfd..c47224bdfd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n03.xml
index 1c59d4782c..1c59d4782c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n04.xml
index 6f1e33e524..6f1e33e524 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n05.xml
index e32e65ea98..e32e65ea98 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n06.xml
index 1d531bb5af..1d531bb5af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n07.xml
index 2b8efabee1..2b8efabee1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n08.xml
index 18a92271fd..18a92271fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n09.xml
index 8e9a750cf7..8e9a750cf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n10.xml
index 9938fd25e7..9938fd25e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n11.xml
index aca0080f7f..aca0080f7f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n12.xml
index 5472fcad0f..5472fcad0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n13.xml
index 64ae797577..64ae797577 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n14.xml
index 2172736377..2172736377 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n15.xml
index 64fffaa093..64fffaa093 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n16.xml
index 98242ebe48..98242ebe48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n17.xml
index f314531b25..f314531b25 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n18.xml
index 7c073fc240..7c073fc240 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P04/ibm04n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Entries
index 3465967ed3..3465967ed3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Repository
index fb93cd6dae..fb93cd6dae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n01.xml
index 1b83228f02..1b83228f02 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n02.xml
index 3ee449969d..3ee449969d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n03.xml
index d3adffdb50..d3adffdb50 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n04.xml
index 499a09ca9a..499a09ca9a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n05.xml
index 98e575018a..98e575018a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P05/ibm05n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Entries
index aad2c8af44..aad2c8af44 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Repository
index 06a675e440..06a675e440 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n01.xml
index b6c068bb4e..b6c068bb4e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n02.xml
index 106dbc46b0..106dbc46b0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n03.xml
index c7b28b31e9..c7b28b31e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n04.xml
index df3399734e..df3399734e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P09/ibm09n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Entries
index e12d4f87f3..e12d4f87f3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Repository
index 648f96fe92..648f96fe92 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n01.xml
index 3f9f50e9f4..3f9f50e9f4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n02.xml
index cf33029760..cf33029760 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n03.xml
index f7b6c13a19..f7b6c13a19 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n04.xml
index 039f65ae77..039f65ae77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n05.xml
index 6b253f66f1..6b253f66f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n06.xml
index 6d89dc50c4..6d89dc50c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n07.xml
index f7b6c13a19..f7b6c13a19 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n08.xml
index 328729d1d5..328729d1d5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P10/ibm10n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Entries
index 0f719b2afa..0f719b2afa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Repository
index 657e2c09c2..657e2c09c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n01.xml
index 2195727cc1..2195727cc1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n02.xml
index ee6abd4ea2..ee6abd4ea2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n03.xml
index 3c1901edac..3c1901edac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n04.xml
index 0a3017a8cc..0a3017a8cc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P11/ibm11n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Entries
index 0489d6125c..0489d6125c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Repository
index 4733acee8c..4733acee8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n01.xml
index 50a7b63b9a..50a7b63b9a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n02.xml
index e7024efded..e7024efded 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n03.xml
index 4264814c6e..4264814c6e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P12/ibm12n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Entries
index 226177973e..226177973e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Repository
index 41211a39d7..41211a39d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n01.xml
index e0e31d68fe..e0e31d68fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n02.xml
index 78439ab5ef..78439ab5ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n03.xml
index 7ff512dc4d..7ff512dc4d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/ibm13n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/student.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/student.dtd
index 7ce18a99a3..7ce18a99a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/student.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P13/student.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Entries
index 91311bd039..91311bd039 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Repository
index 10903e1710..10903e1710 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n01.xml
index 2aa17b269e..2aa17b269e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n02.xml
index 4c1f06dd6c..4c1f06dd6c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n03.xml
index 80dc61695a..80dc61695a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P14/ibm14n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Entries
index 7746229878..7746229878 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Repository
index ec5e63bf64..ec5e63bf64 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n01.xml
index d11b3ca4f2..d11b3ca4f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n02.xml
index c187070c03..c187070c03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n03.xml
index 2c014864d3..2c014864d3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n04.xml
index 365b2c4bde..365b2c4bde 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P15/ibm15n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Entries
index 627fc4a721..627fc4a721 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Repository
index 1a71554838..1a71554838 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n01.xml
index 6bafad526f..6bafad526f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n02.xml
index 923df6ce66..923df6ce66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n03.xml
index 9625193ca6..9625193ca6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n04.xml
index dd0d352d15..dd0d352d15 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P16/ibm16n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Entries
index a098c26450..a098c26450 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Repository
index a9a2232bcd..a9a2232bcd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n01.xml
index 3012de0f8f..3012de0f8f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n02.xml
index f236cdb079..f236cdb079 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n03.xml
index 4f5dba6d84..4f5dba6d84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n04.xml
index f097ef3606..f097ef3606 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P17/ibm17n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Entries
index 841c256158..841c256158 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Repository
index 1bcd6ef06e..1bcd6ef06e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n01.xml
index 91f47e9dea..91f47e9dea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n02.xml
index b0d07849df..b0d07849df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P18/ibm18n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Entries
index 3461836b0b..3461836b0b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Repository
index 3a16b94826..3a16b94826 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n01.xml
index 6dd0b32bce..6dd0b32bce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n02.xml
index 0b18c42e71..0b18c42e71 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n03.xml
index 02a84788b1..02a84788b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P19/ibm19n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Entries
index 4d02ee9c24..4d02ee9c24 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Repository
index cf87b9431a..cf87b9431a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/ibm20n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/ibm20n01.xml
index cd454a29db..cd454a29db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/ibm20n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P20/ibm20n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Entries
index e33c0dad41..e33c0dad41 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Repository
index 670d97b391..670d97b391 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n01.xml
index 3db95b7b40..3db95b7b40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n02.xml
index 6969b0f35a..6969b0f35a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n03.xml
index 71a5bcaa0b..71a5bcaa0b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P21/ibm21n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Entries
index 67170613c2..67170613c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Repository
index 65858ada69..65858ada69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n01.xml
index 01054fc752..01054fc752 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n02.xml
index 4d371ef98a..4d371ef98a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n03.xml
index 93c259c0c9..93c259c0c9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P22/ibm22n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Entries
index b6590238a7..b6590238a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Repository
index edac5ca2e5..edac5ca2e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n01.xml
index 7db1daf2e4..7db1daf2e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n02.xml
index 9364b9eb82..9364b9eb82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n03.xml
index c7c75abd63..c7c75abd63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n04.xml
index 18d641f90a..18d641f90a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n05.xml
index 2fe93d7044..2fe93d7044 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n06.xml
index e5b7058272..e5b7058272 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P23/ibm23n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Entries
index 33f7f3974f..33f7f3974f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Repository
index 94aed5f78a..94aed5f78a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n01.xml
index 06b8699cdc..06b8699cdc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n02.xml
index ad70e99baf..ad70e99baf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n03.xml
index 4f84125f3a..4f84125f3a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n04.xml
index 553df9707e..553df9707e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n05.xml
index 3e4510f3a1..3e4510f3a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n06.xml
index 459c656b2f..459c656b2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n07.xml
index 987d716d70..987d716d70 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n08.xml
index b73e565aff..b73e565aff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n09.xml
index 33c80969ba..33c80969ba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P24/ibm24n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Entries
index 5f26556f04..5f26556f04 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Repository
index e65b32d0e8..e65b32d0e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n01.xml
index c353336ce3..c353336ce3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n02.xml
index 0c0a0077dd..0c0a0077dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P25/ibm25n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Entries
index 9a026b3518..9a026b3518 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Repository
index af666d19ad..af666d19ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/ibm26n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/ibm26n01.xml
index 7baed5f923..7baed5f923 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/ibm26n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P26/ibm26n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Entries
index 26e863a9ce..26e863a9ce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Repository
index 837ff12bc6..837ff12bc6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/ibm27n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/ibm27n01.xml
index 56f82f9189..56f82f9189 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/ibm27n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P27/ibm27n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Entries
index 1ec0195803..1ec0195803 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Repository
index 2b5caf2b49..2b5caf2b49 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.dtd
index b3dde2f97a..b3dde2f97a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.xml
index 91a04bc9f0..91a04bc9f0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n02.xml
index d35360413a..d35360413a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n03.xml
index 565282bb74..565282bb74 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n04.xml
index b751671196..b751671196 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n05.xml
index ebdbe41898..ebdbe41898 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n06.xml
index f367e6fc1b..f367e6fc1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n07.xml
index 98b8f34ef5..98b8f34ef5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n08.xml
index 78426a9514..78426a9514 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P28/ibm28n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Entries
index d5c36aa261..d5c36aa261 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Repository
index 060df8d466..060df8d466 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/cat.txt b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/cat.txt
index 033b749de0..033b749de0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/cat.txt
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/cat.txt
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n01.xml
index 6582e926c4..6582e926c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n02.xml
index 01656bafea..01656bafea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n03.xml
index 72e7398f69..72e7398f69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n04.xml
index 7fbeb35ad3..7fbeb35ad3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n05.xml
index b2a3caaab2..b2a3caaab2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n06.xml
index a166f862a0..a166f862a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n07.xml
index 40b5c90281..40b5c90281 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P29/ibm29n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Entries
index 04ca77bc64..04ca77bc64 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Repository
index 4e447ddb84..4e447ddb84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.dtd
index 8d88fe5578..8d88fe5578 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.xml
index 036b4592e0..036b4592e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P30/ibm30n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Entries
index ccbdfce575..ccbdfce575 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Repository
index be9e854ecb..be9e854ecb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.dtd
index f70a194bf9..f70a194bf9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.xml
index 14136c596d..14136c596d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P31/ibm31n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Entries
index 1cad781c32..1cad781c32 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Repository
index e953754031..e953754031 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n01.xml
index d1ead33d36..d1ead33d36 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n02.xml
index 2bfdd07105..2bfdd07105 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n03.xml
index a084036102..a084036102 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n04.xml
index 04c8eba891..04c8eba891 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n05.xml
index be004b3179..be004b3179 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.dtd
index b3dde2f97a..b3dde2f97a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.xml
index aecbc0bea3..aecbc0bea3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n07.xml
index 40e56f10f2..40e56f10f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n08.xml
index bd01546929..bd01546929 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.dtd
index a68e8974bb..a68e8974bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.xml
index e7597fa3d3..e7597fa3d3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P32/ibm32n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Entries
index 685dbfcea5..685dbfcea5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Repository
index a21aa8f60d..a21aa8f60d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n01.xml
index bf43c318b4..bf43c318b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n02.xml
index 26a4ae6876..26a4ae6876 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n03.xml
index da8548b45c..da8548b45c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n04.xml
index 241ee8be5c..241ee8be5c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n05.xml
index 80cbd83aa7..80cbd83aa7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n06.xml
index 97f7ff363d..97f7ff363d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P39/ibm39n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Entries
index 044fa9a0e1..044fa9a0e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Repository
index b25c651c5b..b25c651c5b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n01.xml
index 512dc62d86..512dc62d86 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n02.xml
index f25a5ba915..f25a5ba915 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n03.xml
index d5821f217c..d5821f217c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n04.xml
index fad77f7da2..fad77f7da2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n05.xml
index 640650846d..640650846d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P40/ibm40n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Entries
index edb28d4ac7..edb28d4ac7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Repository
index 70430c3012..70430c3012 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n.ent
index f1bba14c8e..f1bba14c8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n01.xml
index 58f8d2fd8c..58f8d2fd8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n02.xml
index a487ebba27..a487ebba27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n03.xml
index 12cd0fc5f6..12cd0fc5f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n04.xml
index cccc60dc27..cccc60dc27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n05.xml
index d31cc7043d..d31cc7043d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n06.xml
index 5954990e0b..5954990e0b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n07.xml
index db578f702d..db578f702d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n08.xml
index 716df810c1..716df810c1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n09.xml
index 71722f49d7..71722f49d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.ent
index f1bba14c8e..f1bba14c8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.xml
index 68ad4eb040..68ad4eb040 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.ent
index f1bba14c8e..f1bba14c8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.xml
index 10652b8307..10652b8307 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n12.xml
index 23f8eb9971..23f8eb9971 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n13.xml
index d8b0ac1e1f..d8b0ac1e1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n14.xml
index 20ecb77fe1..20ecb77fe1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P41/ibm41n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Entries
index cc2de15118..cc2de15118 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Repository
index 5dcf694209..5dcf694209 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n01.xml
index 953178c64d..953178c64d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n02.xml
index 8e84b69243..8e84b69243 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n03.xml
index 5de14d16d8..5de14d16d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n04.xml
index 97e82e6c54..97e82e6c54 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n05.xml
index 47694b6dd1..47694b6dd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P42/ibm42n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Entries
index 553c5e2a08..553c5e2a08 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Repository
index da059b5dd6..da059b5dd6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n01.xml
index 30e28dd061..30e28dd061 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n02.xml
index 67f7f7e6e3..67f7f7e6e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n04.xml
index 98d4bd34a1..98d4bd34a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n05.xml
index c15483be66..c15483be66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P43/ibm43n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Entries
index 4d083bc143..4d083bc143 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Repository
index 16e3b32ecb..16e3b32ecb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n01.xml
index 6c67518040..6c67518040 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n02.xml
index 4af3042e15..4af3042e15 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n03.xml
index 3213209091..3213209091 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n04.xml
index 3372fcaac5..3372fcaac5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P44/ibm44n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Entries
index 06c3aebd24..06c3aebd24 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Repository
index 833bd5d4e2..833bd5d4e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n01.xml
index b24d7da407..b24d7da407 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n02.xml
index c3921565fb..c3921565fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n03.xml
index e9d6df08e8..e9d6df08e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n04.xml
index dd0465d2cd..dd0465d2cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n05.xml
index 9cf73a935d..9cf73a935d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n06.xml
index 952164e197..952164e197 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n07.xml
index 46438e8916..46438e8916 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n08.xml
index 928721d881..928721d881 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n09.xml
index c0cf19306d..c0cf19306d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P45/ibm45n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Entries
index ae84c66b4f..ae84c66b4f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Repository
index 6d42a89f21..6d42a89f21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n01.xml
index a61d556217..a61d556217 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n02.xml
index 72d3967cac..72d3967cac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n03.xml
index 5961ff402d..5961ff402d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n04.xml
index b9ec2d3886..b9ec2d3886 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n05.xml
index 27e5034e6d..27e5034e6d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P46/ibm46n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Entries
index bb4be031d4..bb4be031d4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Repository
index d869c127fc..d869c127fc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n01.xml
index 69153b321c..69153b321c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n02.xml
index 989d7c47f8..989d7c47f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n03.xml
index 7408d51ee7..7408d51ee7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n04.xml
index 3f4037ee30..3f4037ee30 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n05.xml
index 1ad4977fe0..1ad4977fe0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n06.xml
index afb6c1077f..afb6c1077f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P47/ibm47n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Entries
index 3c2e4f3b27..3c2e4f3b27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Repository
index 54cb25f999..54cb25f999 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n01.xml
index 29294bbd1a..29294bbd1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n02.xml
index 82126a6aec..82126a6aec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n03.xml
index 7eca7c9986..7eca7c9986 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n04.xml
index 921e2ffa14..921e2ffa14 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n05.xml
index cef09d6b46..cef09d6b46 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n06.xml
index ddfba81c72..ddfba81c72 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n07.xml
index 0a5fbb14e9..0a5fbb14e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P48/ibm48n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Entries
index 3b0476058e..3b0476058e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Repository
index 870636c0f7..870636c0f7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n01.xml
index b78fdd65e9..b78fdd65e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n02.xml
index 9dfb650b23..9dfb650b23 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n03.xml
index 0433730aa2..0433730aa2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n04.xml
index cd9ec0d9af..cd9ec0d9af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n05.xml
index 51bce21b59..51bce21b59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n06.xml
index 498cff3373..498cff3373 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P49/ibm49n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Entries
index 1929c46a58..1929c46a58 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Repository
index 36a187c2ad..36a187c2ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n01.xml
index ee054dd0cb..ee054dd0cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n02.xml
index 92a0f7ce7f..92a0f7ce7f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n03.xml
index 3e2b4cb8dd..3e2b4cb8dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n04.xml
index 06d463972f..06d463972f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n05.xml
index aa871ee359..aa871ee359 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n06.xml
index ee976d527a..ee976d527a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n07.xml
index c049b65186..c049b65186 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P50/ibm50n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Entries
index 6b8ebadd12..6b8ebadd12 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Repository
index 7adbdb0ebb..7adbdb0ebb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n01.xml
index 4ee24894e6..4ee24894e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n02.xml
index 76fbe2cab6..76fbe2cab6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n03.xml
index 55d6fc00b3..55d6fc00b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n04.xml
index bf2508899c..bf2508899c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n05.xml
index 207845c6a2..207845c6a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n06.xml
index 0bfda9cd5f..0bfda9cd5f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n07.xml
index 19d17ed8a2..19d17ed8a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P51/ibm51n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Entries
index 1e35137538..1e35137538 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Repository
index a8ba6c5f09..a8ba6c5f09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n01.xml
index 4415dcbca0..4415dcbca0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n02.xml
index bb3beeaff5..bb3beeaff5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n03.xml
index b59a8abf23..b59a8abf23 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n04.xml
index 13599e8585..13599e8585 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n05.xml
index 5da5020ae3..5da5020ae3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n06.xml
index ce079358e0..ce079358e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P52/ibm52n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Entries
index c02920250f..c02920250f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Repository
index ba4c7623e0..ba4c7623e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n01.xml
index 089af460cb..089af460cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n02.xml
index 6a3d53c8ac..6a3d53c8ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n03.xml
index 10a95ae899..10a95ae899 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n04.xml
index 125c7b994f..125c7b994f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n05.xml
index ac9312a92b..ac9312a92b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n06.xml
index 8a013001b0..8a013001b0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n07.xml
index 6638a762cd..6638a762cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n08.xml
index bbc4f2a6ea..bbc4f2a6ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P53/ibm53n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Entries
index 483b097b69..483b097b69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Repository
index d0e67068c8..d0e67068c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n01.xml
index e7e120c0ef..e7e120c0ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n02.xml
index 004d8db582..004d8db582 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P54/ibm54n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Entries
index e5bbd9a0ff..e5bbd9a0ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Repository
index 44ade23a16..44ade23a16 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n01.xml
index 56229377ff..56229377ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n02.xml
index 649ed99aca..649ed99aca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n03.xml
index c935b9be47..c935b9be47 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P55/ibm55n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Entries
index 243eeabccf..243eeabccf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Repository
index 023c06715c..023c06715c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n01.xml
index c46357e0d8..c46357e0d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n02.xml
index 87fc28dfa0..87fc28dfa0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n03.xml
index b37353dd00..b37353dd00 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n04.xml
index 884a305acc..884a305acc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n05.xml
index 5f77b2636d..5f77b2636d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n06.xml
index db614d6929..db614d6929 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n07.xml
index f6a1dd802d..f6a1dd802d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P56/ibm56n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Entries
index 92a05a11f8..92a05a11f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Repository
index 3e07d7b8bd..3e07d7b8bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/ibm57n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/ibm57n01.xml
index 1c6d7593b7..1c6d7593b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/ibm57n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P57/ibm57n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Entries
index c004f688bf..c004f688bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Repository
index 8d1d9401ba..8d1d9401ba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n01.xml
index 729aac283b..729aac283b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n02.xml
index fae10f978e..fae10f978e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n03.xml
index 77511ff4e7..77511ff4e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n04.xml
index 6f861028cd..6f861028cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n05.xml
index ed162a2ae8..ed162a2ae8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n06.xml
index 68148a57ae..68148a57ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n07.xml
index ab04d335b9..ab04d335b9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n08.xml
index db72fca99f..db72fca99f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P58/ibm58n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Entries
index ae11ab71e3..ae11ab71e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Repository
index 49253b6f51..49253b6f51 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n01.xml
index b5cdd68645..b5cdd68645 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n02.xml
index 1e3417ff6c..1e3417ff6c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n03.xml
index 86b03de53b..86b03de53b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n04.xml
index 03cac38f2d..03cac38f2d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n05.xml
index 71054a8039..71054a8039 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n06.xml
index 3879eb1eaf..3879eb1eaf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P59/ibm59n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Entries
index 676c6696ca..676c6696ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Repository
index 5fd0acaad4..5fd0acaad4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n01.xml
index 9b010b9043..9b010b9043 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n02.xml
index 5f5fc0a980..5f5fc0a980 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n03.xml
index 83b649ab14..83b649ab14 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n04.xml
index 9c93cb65d6..9c93cb65d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n05.xml
index efcc47186b..efcc47186b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n06.xml
index a755908918..a755908918 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n07.xml
index 7c3fa16264..7c3fa16264 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n08.xml
index ec49feb9e9..ec49feb9e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P60/ibm60n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Entries
index c82dbe3970..c82dbe3970 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Repository
index 257ec20946..257ec20946 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.dtd
index 2e1bdd0002..2e1bdd0002 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.xml
index 537c8d47d2..537c8d47d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P61/ibm61n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Entries
index 17414ee4d1..17414ee4d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Repository
index 2b5cea982d..2b5cea982d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.dtd
index 4cf76db05d..4cf76db05d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.xml
index b1a761f409..b1a761f409 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.dtd
index e6d77f0bd7..e6d77f0bd7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.xml
index 2b1c8f87b6..2b1c8f87b6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.dtd
index afcb5f418b..afcb5f418b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.xml
index fac08e98cd..fac08e98cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.dtd
index 61190011c9..61190011c9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.xml
index f21e770cdf..f21e770cdf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.dtd
index efec801204..efec801204 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.xml
index 8001d2ec11..8001d2ec11 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.dtd
index a25d523250..a25d523250 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.xml
index 3091f239a5..3091f239a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.dtd
index 55a6c7619b..55a6c7619b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.xml
index f1260ea393..f1260ea393 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.dtd
index 6c2b3a3299..6c2b3a3299 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.xml
index a8b23e052e..a8b23e052e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P62/ibm62n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Entries
index e8dabab649..e8dabab649 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Repository
index 9ca5790cb6..9ca5790cb6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.dtd
index 79158e1bc3..79158e1bc3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.xml
index 1312eb6f01..1312eb6f01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.dtd
index 3da7b272ad..3da7b272ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.xml
index 7b9b9260a0..7b9b9260a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.dtd
index 6a74ba5ff9..6a74ba5ff9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.xml
index aa2bd69f77..aa2bd69f77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.dtd
index f5ba20c9bb..f5ba20c9bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.xml
index fd54910839..fd54910839 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.dtd
index 4d9d29ae81..4d9d29ae81 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.xml
index 1b981ae0b2..1b981ae0b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.dtd
index ce7189b038..ce7189b038 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.xml
index 135bba77a0..135bba77a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.dtd
index f258ba4dc5..f258ba4dc5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.xml
index 36b5897a14..36b5897a14 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P63/ibm63n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Entries
index 67b60edd93..67b60edd93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Repository
index 034a883d06..034a883d06 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.dtd
index 046e93a5c3..046e93a5c3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.xml
index 8d35f73da9..8d35f73da9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.dtd
index 567e7885d8..567e7885d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.xml
index 1cb77b232c..1cb77b232c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.dtd
index 4e6327e11a..4e6327e11a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.xml
index daf2c2099e..daf2c2099e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P64/ibm64n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Entries
index 25de6f1ebe..25de6f1ebe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Repository
index d0e34473ac..d0e34473ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.dtd
index d9b6175722..d9b6175722 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.xml
index 8a9be2bec9..8a9be2bec9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.dtd
index 14d418915b..14d418915b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.xml
index ae89a2de45..ae89a2de45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P65/ibm65n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Entries
index 85ee69f0d9..85ee69f0d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Repository
index 1a505f9226..1a505f9226 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n01.xml
index ef42d683ea..ef42d683ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n02.xml
index 9759178638..9759178638 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n03.xml
index 345019098c..345019098c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n04.xml
index 0ad5904f85..0ad5904f85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n05.xml
index 5906a812e6..5906a812e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n06.xml
index fcfb28d3f4..fcfb28d3f4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n07.xml
index b402f76262..b402f76262 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n08.xml
index 0195a9bb50..0195a9bb50 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n09.xml
index 53ed2c49d9..53ed2c49d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n10.xml
index f018bcb534..f018bcb534 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n11.xml
index 20ec3edeab..20ec3edeab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n12.xml
index 27cbc450cd..27cbc450cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n13.xml
index c742d6b746..c742d6b746 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n14.xml
index 86b5aa058f..86b5aa058f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n15.xml
index f1b7fe136e..f1b7fe136e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P66/ibm66n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Entries
index 50eaa909e5..50eaa909e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Repository
index 38b4dc23d8..38b4dc23d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n01.xml
index f36baedc62..f36baedc62 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n02.xml
index 48516f557c..48516f557c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n03.xml
index 20780813f6..20780813f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n04.xml
index 399bb9ce2b..399bb9ce2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n05.xml
index 0303f34fee..0303f34fee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.dtd
index aaeb5b1300..aaeb5b1300 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.xml
index 6c647f5503..6c647f5503 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n07.xml
index e5f31f8d1f..e5f31f8d1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n08.xml
index 02264a2137..02264a2137 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n09.xml
index e31471dc48..e31471dc48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n10.xml
index 60a52278de..60a52278de 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P68/ibm68n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Entries
index 87a8eb1868..87a8eb1868 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Repository
index 2d561c2c69..2d561c2c69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n01.xml
index df6302d4eb..df6302d4eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n02.xml
index a4365caed7..a4365caed7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n03.xml
index 4e73bc7337..4e73bc7337 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n04.xml
index e106eab9ee..e106eab9ee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n05.xml
index 5c0234cff1..5c0234cff1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n06.xml
index ccdd534527..ccdd534527 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n07.xml
index 324497f357..324497f357 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P69/ibm69n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Entries
index 34746aadfe..34746aadfe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Repository
index 4be4b7015d..4be4b7015d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm70n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm70n01.xml
index 7f453b4135..7f453b4135 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm70n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm70n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n01.xml
index bed2832974..bed2832974 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n02.xml
index 256f1f4407..256f1f4407 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n03.xml
index b8dd782bde..b8dd782bde 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n04.xml
index ee52c8d259..ee52c8d259 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n05.xml
index edd93a41eb..edd93a41eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n06.xml
index 5fb49c52f8..5fb49c52f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n07.xml
index d280dba82f..d280dba82f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n08.xml
index fefba0e6a0..fefba0e6a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P71/ibm71n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Entries
index ecdb93da0d..ecdb93da0d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Repository
index 482a0904d9..482a0904d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n01.xml
index 5ceb44a1e5..5ceb44a1e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n02.xml
index 60ee4cbc3b..60ee4cbc3b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n03.xml
index 4cc1ee1b70..4cc1ee1b70 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n04.xml
index f9ca14481a..f9ca14481a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n05.xml
index ff17096d83..ff17096d83 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n06.xml
index e9b22f8913..e9b22f8913 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n07.xml
index ab02e52257..ab02e52257 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n08.xml
index b8b13dfc84..b8b13dfc84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n09.xml
index 045427c846..045427c846 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P72/ibm72n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Entries
index 670af38fda..670af38fda 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Repository
index 800547ad79..800547ad79 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n01.xml
index fac788bdb9..fac788bdb9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n03.xml
index c103d13b8e..c103d13b8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P73/ibm73n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Entries
index fb1b2bf7f7..fb1b2bf7f7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Repository
index eb6285add5..eb6285add5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/ibm74n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/ibm74n01.xml
index 2a59b59724..2a59b59724 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/ibm74n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P74/ibm74n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Entries
index b21ef61bc2..b21ef61bc2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Repository
index 14755f3d62..14755f3d62 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/empty.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/empty.dtd
index dbc2f78654..dbc2f78654 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/empty.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/empty.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n01.xml
index c8f1c8f289..c8f1c8f289 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n02.xml
index f823311bc1..f823311bc1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n03.xml
index e02f80850d..e02f80850d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n04.xml
index a9813642a5..a9813642a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n05.xml
index 389617cbd0..389617cbd0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n06.xml
index 32c7d949fe..32c7d949fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n07.xml
index c977eb71d4..c977eb71d4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n08.xml
index fd0428c6f5..fd0428c6f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n09.xml
index 5029a50daa..5029a50daa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n10.xml
index 3cec6ffaea..3cec6ffaea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n11.xml
index 95092b692f..95092b692f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n12.xml
index 8d4dd1857f..8d4dd1857f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n13.xml
index 3ff70df7d6..3ff70df7d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P75/ibm75n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Entries
index ffa6d486d4..ffa6d486d4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Repository
index f136293df4..f136293df4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n01.xml
index 215cc938ca..215cc938ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n02.xml
index 2eff802ace..2eff802ace 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n03.xml
index 134aed7002..134aed7002 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n04.xml
index 17f13408a8..17f13408a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n05.xml
index 3899463a63..3899463a63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n06.xml
index 2c36e88596..2c36e88596 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n07.xml
index 13108c28af..13108c28af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P76/ibm76n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Entries
index 81f76d363a..81f76d363a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Repository
index b18c1b8845..b18c1b8845 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.ent
index 4395cf96ec..4395cf96ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.xml
index a82e2b653a..a82e2b653a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.ent
index 8d681ccec6..8d681ccec6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.xml
index 49043afd88..49043afd88 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.ent
index e0acc108d8..e0acc108d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.xml
index 674c5b0eb1..674c5b0eb1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.ent
index f532ae5e3a..f532ae5e3a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.xml
index 38cb784e52..38cb784e52 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P77/ibm77n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Entries
index 74afddd45a..74afddd45a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Repository
index 128897927d..128897927d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.ent
index 7fb6719720..7fb6719720 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.xml
index 0f984208d1..0f984208d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.ent
index 7a2ecc6cd1..7a2ecc6cd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.xml
index a21c0b6135..a21c0b6135 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P78/ibm78n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Entries
index deedae1e7c..deedae1e7c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Repository
index 01efa4d6f1..01efa4d6f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.ent
index b5a43a5caf..b5a43a5caf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.xml
index 85d5614fef..85d5614fef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.ent
index 0345008783..0345008783 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.xml
index afb3b96fd1..afb3b96fd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P79/ibm79n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Entries
index 2a7ffa2a61..2a7ffa2a61 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Repository
index 7432e85af5..7432e85af5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n01.xml
index c44264b22e..c44264b22e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n02.xml
index c199a02630..c199a02630 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n03.xml
index e5ef0d55e1..e5ef0d55e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n04.xml
index 2f5d2f5eff..2f5d2f5eff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n05.xml
index 714f2d42e1..714f2d42e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n06.xml
index b503f9b9bb..b503f9b9bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P80/ibm80n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Entries
index d1830b360e..d1830b360e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Repository
index 478b66d2fd..478b66d2fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n01.xml
index 3354f4d3e0..3354f4d3e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n02.xml
index 445f230479..445f230479 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n03.xml
index 875bc7421d..875bc7421d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n04.xml
index 5b7979b405..5b7979b405 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n05.xml
index 009518166d..009518166d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n06.xml
index 2de674a84f..2de674a84f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n07.xml
index a3b3ce81a7..a3b3ce81a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n08.xml
index a7814dc51d..a7814dc51d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n09.xml
index bc6c54aee8..bc6c54aee8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P81/ibm81n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Entries
index e41200cd0d..e41200cd0d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Repository
index 88e1e6b385..88e1e6b385 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n01.xml
index e66c0a2d54..e66c0a2d54 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n02.xml
index 22eaa01c2f..22eaa01c2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n03.xml
index 7e0dcf17e0..7e0dcf17e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n04.xml
index bde1554010..bde1554010 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n05.xml
index 365515b1ca..365515b1ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n06.xml
index f39c92fc3c..f39c92fc3c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n07.xml
index 61b8f8d24d..61b8f8d24d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n08.xml
index ff43f8cbf2..ff43f8cbf2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P82/ibm82n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Entries
index 51af0ce086..51af0ce086 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Repository
index 7139f43dc7..7139f43dc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n01.xml
index f866602e81..f866602e81 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n02.xml
index b39683dbf5..b39683dbf5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n03.xml
index 4bca2b000c..4bca2b000c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n04.xml
index e409f3d210..e409f3d210 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n05.xml
index aea6dac44c..aea6dac44c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n06.xml
index eaa3ea65d8..eaa3ea65d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P83/ibm83n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Entries
index 8cba3c5da6..8cba3c5da6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Repository
index 937063790e..937063790e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n01.xml
index e18e377e1f..e18e377e1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n02.xml
index 0703d20c38..0703d20c38 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n03.xml
index b08af2945f..b08af2945f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n04.xml
index f37ca85595..f37ca85595 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n05.xml
index 616ca91515..616ca91515 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n06.xml
index 4134128af6..4134128af6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n07.xml
index 67f407e08b..67f407e08b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n08.xml
index 6299540ba5..6299540ba5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n09.xml
index c18d3ffebb..c18d3ffebb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n10.xml
index aac214495e..aac214495e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n100.xml
index 80ecdbc1ea..80ecdbc1ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n100.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n100.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n101.xml
index e76a06ee2b..e76a06ee2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n101.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n101.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n102.xml
index e8c31a7ba3..e8c31a7ba3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n102.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n102.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n103.xml
index 6da0d486af..6da0d486af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n103.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n103.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n104.xml
index da308ef661..da308ef661 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n104.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n104.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n105.xml
index 3bbfb3208a..3bbfb3208a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n105.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n105.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n106.xml
index 2103b2070f..2103b2070f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n106.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n106.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n107.xml
index 55c35b81e4..55c35b81e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n107.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n107.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n108.xml
index b148a639f5..b148a639f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n108.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n108.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n109.xml
index c0b49183d6..c0b49183d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n109.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n109.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n11.xml
index 5d991bfea7..5d991bfea7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n110.xml
index 97aeb59071..97aeb59071 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n110.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n110.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n111.xml
index a160f40f13..a160f40f13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n111.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n111.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n112.xml
index 520ea15ef1..520ea15ef1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n112.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n112.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n113.xml
index b97245efb6..b97245efb6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n113.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n113.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n114.xml
index 17d5ca7deb..17d5ca7deb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n114.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n114.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n115.xml
index f51535ad68..f51535ad68 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n115.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n115.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n116.xml
index 256984841c..256984841c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n116.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n116.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n117.xml
index 61b2c5817c..61b2c5817c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n117.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n117.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n118.xml
index 519cfe265f..519cfe265f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n118.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n118.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n119.xml
index c1beaebf8c..c1beaebf8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n119.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n119.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n12.xml
index 0352dcd7eb..0352dcd7eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n120.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n120.xml
index 5ce20ec658..5ce20ec658 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n120.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n120.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n121.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n121.xml
index 87212bdb8d..87212bdb8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n121.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n121.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n122.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n122.xml
index 0979f9fa21..0979f9fa21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n122.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n122.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n123.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n123.xml
index 718fa06c40..718fa06c40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n123.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n123.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n124.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n124.xml
index 5f1a16fc4a..5f1a16fc4a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n124.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n124.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n125.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n125.xml
index 2889bb8419..2889bb8419 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n125.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n125.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n126.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n126.xml
index b22877f426..b22877f426 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n126.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n126.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n127.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n127.xml
index 1ea4859818..1ea4859818 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n127.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n127.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n128.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n128.xml
index e4134bf5fe..e4134bf5fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n128.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n128.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n129.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n129.xml
index b05e3dfc58..b05e3dfc58 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n129.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n129.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n13.xml
index 87d15595c7..87d15595c7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n130.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n130.xml
index 81cf320709..81cf320709 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n130.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n130.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n131.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n131.xml
index f78253ad2a..f78253ad2a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n131.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n131.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n132.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n132.xml
index 66c74c845d..66c74c845d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n132.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n132.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n133.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n133.xml
index e017f8f61b..e017f8f61b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n133.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n133.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n134.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n134.xml
index 2f093a660f..2f093a660f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n134.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n134.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n135.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n135.xml
index ad9b2cf968..ad9b2cf968 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n135.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n135.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n136.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n136.xml
index b924b61770..b924b61770 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n136.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n136.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n137.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n137.xml
index 351a4925e4..351a4925e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n137.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n137.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n138.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n138.xml
index 9719a5f53e..9719a5f53e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n138.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n138.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n139.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n139.xml
index c4afb4f705..c4afb4f705 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n139.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n139.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n14.xml
index 14b71b4dad..14b71b4dad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n140.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n140.xml
index 7c575b9b95..7c575b9b95 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n140.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n140.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n141.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n141.xml
index f718c80ae9..f718c80ae9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n141.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n141.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n142.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n142.xml
index 3af3d8c39c..3af3d8c39c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n142.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n142.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n143.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n143.xml
index 19dad78122..19dad78122 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n143.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n143.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n144.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n144.xml
index 756bbe667f..756bbe667f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n144.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n144.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n145.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n145.xml
index 6bd0a80ef8..6bd0a80ef8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n145.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n145.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n146.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n146.xml
index 1b0aba959a..1b0aba959a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n146.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n146.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n147.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n147.xml
index 171dfb2188..171dfb2188 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n147.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n147.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n148.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n148.xml
index a5e69c4e15..a5e69c4e15 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n148.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n148.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n149.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n149.xml
index c368b37c66..c368b37c66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n149.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n149.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n15.xml
index 14b71b4dad..14b71b4dad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n150.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n150.xml
index b0c9075662..b0c9075662 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n150.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n150.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n151.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n151.xml
index 97a169f14d..97a169f14d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n151.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n151.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n152.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n152.xml
index 92bdca5722..92bdca5722 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n152.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n152.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n153.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n153.xml
index ec76dfb05c..ec76dfb05c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n153.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n153.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n154.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n154.xml
index f541695a5a..f541695a5a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n154.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n154.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n155.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n155.xml
index c292ae913a..c292ae913a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n155.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n155.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n156.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n156.xml
index 5480590c4c..5480590c4c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n156.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n156.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n157.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n157.xml
index 781a62e3ab..781a62e3ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n157.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n157.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n158.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n158.xml
index b87e0d725d..b87e0d725d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n158.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n158.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n159.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n159.xml
index 6cd532b0cd..6cd532b0cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n159.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n159.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n16.xml
index d071417107..d071417107 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n160.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n160.xml
index edf63417af..edf63417af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n160.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n160.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n161.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n161.xml
index c5284ac321..c5284ac321 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n161.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n161.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n162.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n162.xml
index 11777deeba..11777deeba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n162.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n162.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n163.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n163.xml
index 705ce24cbd..705ce24cbd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n163.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n163.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n164.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n164.xml
index acd8649297..acd8649297 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n164.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n164.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n165.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n165.xml
index 45feac400d..45feac400d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n165.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n165.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n166.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n166.xml
index 3c26ae44e2..3c26ae44e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n166.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n166.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n167.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n167.xml
index 15718afdbf..15718afdbf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n167.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n167.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n168.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n168.xml
index 31d388f587..31d388f587 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n168.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n168.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n169.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n169.xml
index aeafbafd16..aeafbafd16 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n169.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n169.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n17.xml
index 210363c73b..210363c73b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n170.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n170.xml
index 036aabf04d..036aabf04d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n170.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n170.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n171.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n171.xml
index f304ca3000..f304ca3000 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n171.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n171.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n172.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n172.xml
index 2863f5e744..2863f5e744 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n172.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n172.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n173.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n173.xml
index d6d20bce96..d6d20bce96 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n173.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n173.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n174.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n174.xml
index ea3bc40e7a..ea3bc40e7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n174.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n174.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n175.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n175.xml
index c7a22f2a62..c7a22f2a62 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n175.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n175.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n176.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n176.xml
index 3d1b0d7742..3d1b0d7742 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n176.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n176.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n177.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n177.xml
index 4c6d85f335..4c6d85f335 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n177.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n177.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n178.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n178.xml
index d3486d3c63..d3486d3c63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n178.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n178.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n179.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n179.xml
index 59677a2838..59677a2838 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n179.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n179.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n18.xml
index 9d68532647..9d68532647 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n180.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n180.xml
index aa50a65869..aa50a65869 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n180.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n180.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n181.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n181.xml
index 8f175186a0..8f175186a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n181.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n181.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n182.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n182.xml
index 880b99e1d0..880b99e1d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n182.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n182.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n183.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n183.xml
index afed23ce8d..afed23ce8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n183.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n183.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n184.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n184.xml
index 4b4932d949..4b4932d949 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n184.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n184.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n185.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n185.xml
index 70683792ff..70683792ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n185.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n185.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n186.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n186.xml
index fe30216f31..fe30216f31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n186.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n186.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n187.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n187.xml
index 4ce877b801..4ce877b801 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n187.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n187.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n188.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n188.xml
index 3d6fb6cc7d..3d6fb6cc7d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n188.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n188.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n189.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n189.xml
index 7bf497a691..7bf497a691 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n189.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n189.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n19.xml
index 77835c46a5..77835c46a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n190.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n190.xml
index 59236d0bb4..59236d0bb4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n190.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n190.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n191.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n191.xml
index 7aa78f933e..7aa78f933e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n191.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n191.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n192.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n192.xml
index 65590b570d..65590b570d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n192.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n192.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n193.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n193.xml
index 9d91de76cb..9d91de76cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n193.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n193.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n194.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n194.xml
index 052f14c877..052f14c877 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n194.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n194.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n195.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n195.xml
index f2cdfc5ad4..f2cdfc5ad4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n195.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n195.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n196.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n196.xml
index a1cc5c522b..a1cc5c522b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n196.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n196.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n197.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n197.xml
index d9be689efa..d9be689efa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n197.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n197.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n198.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n198.xml
index 709c5ce8d8..709c5ce8d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n198.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n198.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n20.xml
index 306eca9183..306eca9183 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n21.xml
index ace4e699f8..ace4e699f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n22.xml
index b92b9aed21..b92b9aed21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n23.xml
index a0ff57fc5a..a0ff57fc5a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n24.xml
index 045a5b90f8..045a5b90f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n25.xml
index 85b7096c9e..85b7096c9e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n26.xml
index 3d46861ff9..3d46861ff9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n27.xml
index cc4e79aa92..cc4e79aa92 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n28.xml
index 3bdd4dd871..3bdd4dd871 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n29.xml
index ad79d0be8d..ad79d0be8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n30.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n30.xml
index 110626a74b..110626a74b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n30.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n30.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n31.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n31.xml
index 8b3e0ea917..8b3e0ea917 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n31.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n31.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n32.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n32.xml
index ff2cbdcef7..ff2cbdcef7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n32.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n32.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n33.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n33.xml
index 125ba74dfa..125ba74dfa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n33.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n33.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n34.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n34.xml
index 3d5f09480b..3d5f09480b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n34.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n34.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n35.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n35.xml
index 8496da4660..8496da4660 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n35.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n35.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n36.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n36.xml
index 6c8fc9d625..6c8fc9d625 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n36.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n36.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n37.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n37.xml
index a892b9ccec..a892b9ccec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n37.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n37.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n38.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n38.xml
index 055d4cc822..055d4cc822 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n38.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n38.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n39.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n39.xml
index b44d77c951..b44d77c951 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n39.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n39.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n40.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n40.xml
index f9822a08ad..f9822a08ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n40.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n40.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n41.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n41.xml
index b7a5bd4806..b7a5bd4806 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n41.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n41.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n42.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n42.xml
index 8db7d20631..8db7d20631 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n42.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n42.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n43.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n43.xml
index a6ed7d9fab..a6ed7d9fab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n43.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n43.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n44.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n44.xml
index 73cd69c154..73cd69c154 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n44.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n44.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n45.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n45.xml
index 1b03ef4f8e..1b03ef4f8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n45.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n45.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n46.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n46.xml
index c9d8e7dbfe..c9d8e7dbfe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n46.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n46.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n47.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n47.xml
index ec97b666b6..ec97b666b6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n47.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n47.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n48.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n48.xml
index 6f44b7a427..6f44b7a427 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n48.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n48.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n49.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n49.xml
index af47a4d263..af47a4d263 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n49.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n49.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n50.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n50.xml
index 0f56ee00dc..0f56ee00dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n50.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n50.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n51.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n51.xml
index 7b7d3a3b5f..7b7d3a3b5f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n51.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n51.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n52.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n52.xml
index fa859cd738..fa859cd738 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n52.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n52.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n53.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n53.xml
index 89e06a6c56..89e06a6c56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n53.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n53.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n54.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n54.xml
index f78ed8155d..f78ed8155d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n54.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n54.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n55.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n55.xml
index 19c0b675e7..19c0b675e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n55.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n55.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n56.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n56.xml
index a4d566d17f..a4d566d17f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n56.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n56.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n57.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n57.xml
index abd9a33d08..abd9a33d08 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n57.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n57.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n58.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n58.xml
index 501a77b028..501a77b028 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n58.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n58.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n59.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n59.xml
index a220cec033..a220cec033 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n59.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n59.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n60.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n60.xml
index 69451a513a..69451a513a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n60.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n60.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n61.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n61.xml
index c96791228b..c96791228b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n61.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n61.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n62.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n62.xml
index 699f5858c2..699f5858c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n62.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n62.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n63.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n63.xml
index 18d9938f33..18d9938f33 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n63.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n63.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n64.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n64.xml
index 09b68ffec8..09b68ffec8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n64.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n64.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n65.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n65.xml
index 099c1a747d..099c1a747d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n65.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n65.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n66.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n66.xml
index 9a9f6b4f53..9a9f6b4f53 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n66.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n66.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n67.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n67.xml
index 53cd2163b1..53cd2163b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n67.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n67.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n68.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n68.xml
index 7a7ac59372..7a7ac59372 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n68.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n68.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n69.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n69.xml
index 829a3105e7..829a3105e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n69.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n69.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n70.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n70.xml
index dfc5981472..dfc5981472 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n70.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n70.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n71.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n71.xml
index 60c6012304..60c6012304 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n71.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n71.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n72.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n72.xml
index 747f8e16f6..747f8e16f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n72.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n72.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n73.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n73.xml
index 67b3569cdc..67b3569cdc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n73.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n73.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n74.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n74.xml
index 4e0f1aec07..4e0f1aec07 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n74.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n74.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n75.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n75.xml
index 6bc8136e7e..6bc8136e7e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n75.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n75.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n76.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n76.xml
index 00786d0d6a..00786d0d6a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n76.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n76.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n77.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n77.xml
index 271ce04bc9..271ce04bc9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n77.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n77.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n78.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n78.xml
index 8c1e53b7e4..8c1e53b7e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n78.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n78.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n79.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n79.xml
index cfb54f167e..cfb54f167e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n79.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n79.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n80.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n80.xml
index c7a579ec43..c7a579ec43 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n80.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n80.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n81.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n81.xml
index b6af57188a..b6af57188a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n81.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n81.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n82.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n82.xml
index dc3bdc94d3..dc3bdc94d3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n82.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n82.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n83.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n83.xml
index acaaa02b4e..acaaa02b4e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n83.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n83.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n84.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n84.xml
index ada649f833..ada649f833 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n84.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n84.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n85.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n85.xml
index c4d60d1c59..c4d60d1c59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n85.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n85.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n86.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n86.xml
index e97bb89679..e97bb89679 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n86.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n86.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n87.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n87.xml
index e1df7fb766..e1df7fb766 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n87.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n87.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n88.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n88.xml
index 5efe3e46f5..5efe3e46f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n88.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n88.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n89.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n89.xml
index f9d5f8b077..f9d5f8b077 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n89.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n89.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n90.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n90.xml
index eb138286ee..eb138286ee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n90.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n90.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n91.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n91.xml
index 681a0161e8..681a0161e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n91.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n91.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n92.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n92.xml
index 438bed05a9..438bed05a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n92.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n92.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n93.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n93.xml
index 7ce88e04ef..7ce88e04ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n93.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n93.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n94.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n94.xml
index eca46c86a2..eca46c86a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n94.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n94.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n95.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n95.xml
index bc2ce61956..bc2ce61956 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n95.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n95.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n96.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n96.xml
index 2e0ac15856..2e0ac15856 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n96.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n96.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n97.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n97.xml
index 64e954be27..64e954be27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n97.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n97.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n98.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n98.xml
index 227c2fbf90..227c2fbf90 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n98.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n98.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n99.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n99.xml
index 7603a638be..7603a638be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n99.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P85/ibm85n99.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Entries
index 5ffda9868a..5ffda9868a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Repository
index 95383be9fa..95383be9fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n01.xml
index 944cd9f766..944cd9f766 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n02.xml
index fdcec7e946..fdcec7e946 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n03.xml
index 0ac615b3bd..0ac615b3bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n04.xml
index 0dcea5ee21..0dcea5ee21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P86/ibm86n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Entries
index 66717b2c63..66717b2c63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Repository
index 21932a6e48..21932a6e48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n01.xml
index 93e8c6a76b..93e8c6a76b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n02.xml
index e656074b4b..e656074b4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n03.xml
index 4912cac9e3..4912cac9e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n04.xml
index 89c94fcf6b..89c94fcf6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n05.xml
index 2ca7779d71..2ca7779d71 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n06.xml
index 6a1a9f7da2..6a1a9f7da2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n07.xml
index 1291bed370..1291bed370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n08.xml
index ffc50ae831..ffc50ae831 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n09.xml
index b85bcd860c..b85bcd860c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n10.xml
index 8b4dfc9820..8b4dfc9820 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n11.xml
index e801679d8d..e801679d8d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n12.xml
index 7886141f45..7886141f45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n13.xml
index 919bc60a09..919bc60a09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n14.xml
index 8488244c1f..8488244c1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n15.xml
index 4b41eea665..4b41eea665 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n16.xml
index 1a0cd7a005..1a0cd7a005 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n17.xml
index ad5e107762..ad5e107762 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n18.xml
index 2080d6d6e9..2080d6d6e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n19.xml
index 525cb830b5..525cb830b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n20.xml
index 9b7f8dc3c9..9b7f8dc3c9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n21.xml
index 226c54652e..226c54652e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n22.xml
index 0c9a38c9b2..0c9a38c9b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n23.xml
index 61c108593e..61c108593e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n24.xml
index fb47e7084e..fb47e7084e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n25.xml
index 6e8138438c..6e8138438c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n26.xml
index 22649c2dcc..22649c2dcc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n27.xml
index 89cef39443..89cef39443 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n28.xml
index 2f7cf1a426..2f7cf1a426 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n29.xml
index 0d461fc95e..0d461fc95e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n30.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n30.xml
index 0441ce3e29..0441ce3e29 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n30.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n30.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n31.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n31.xml
index 31e2dda32b..31e2dda32b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n31.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n31.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n32.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n32.xml
index d3ab27a424..d3ab27a424 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n32.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n32.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n33.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n33.xml
index 1e7dfdf670..1e7dfdf670 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n33.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n33.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n34.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n34.xml
index f410327cec..f410327cec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n34.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n34.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n35.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n35.xml
index d3857b9d95..d3857b9d95 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n35.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n35.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n36.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n36.xml
index 616d4e7f40..616d4e7f40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n36.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n36.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n37.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n37.xml
index 8695a21644..8695a21644 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n37.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n37.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n38.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n38.xml
index a0a8fa39b7..a0a8fa39b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n38.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n38.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n39.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n39.xml
index c033ffc330..c033ffc330 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n39.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n39.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n40.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n40.xml
index 7974a453d5..7974a453d5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n40.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n40.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n41.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n41.xml
index d29c76c951..d29c76c951 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n41.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n41.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n42.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n42.xml
index 0f84f57f32..0f84f57f32 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n42.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n42.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n43.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n43.xml
index 647fb53a17..647fb53a17 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n43.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n43.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n44.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n44.xml
index 5d72bc4e45..5d72bc4e45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n44.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n44.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n45.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n45.xml
index f8d7404ed0..f8d7404ed0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n45.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n45.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n46.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n46.xml
index 9e41f32ec4..9e41f32ec4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n46.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n46.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n47.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n47.xml
index e9ad0d673a..e9ad0d673a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n47.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n47.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n48.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n48.xml
index f8d76939e3..f8d76939e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n48.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n48.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n49.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n49.xml
index a4a976c95d..a4a976c95d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n49.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n49.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n50.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n50.xml
index aafe1462ed..aafe1462ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n50.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n50.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n51.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n51.xml
index 1e2d7a016f..1e2d7a016f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n51.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n51.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n52.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n52.xml
index c3fa1f1302..c3fa1f1302 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n52.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n52.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n53.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n53.xml
index e085f82d17..e085f82d17 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n53.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n53.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n54.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n54.xml
index bbe5b86041..bbe5b86041 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n54.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n54.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n55.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n55.xml
index cc8a362bbb..cc8a362bbb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n55.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n55.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n56.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n56.xml
index b212b06847..b212b06847 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n56.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n56.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n57.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n57.xml
index 0b2f283d0f..0b2f283d0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n57.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n57.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n58.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n58.xml
index b6fe5540a8..b6fe5540a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n58.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n58.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n59.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n59.xml
index 26fbcfb58b..26fbcfb58b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n59.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n59.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n60.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n60.xml
index 2a69c9ba12..2a69c9ba12 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n60.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n60.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n61.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n61.xml
index de7d518267..de7d518267 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n61.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n61.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n62.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n62.xml
index 59e0704d83..59e0704d83 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n62.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n62.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n63.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n63.xml
index 9c52345412..9c52345412 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n63.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n63.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n64.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n64.xml
index cf6f9b73f6..cf6f9b73f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n64.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n64.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n66.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n66.xml
index 7938cd6f32..7938cd6f32 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n66.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n66.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n67.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n67.xml
index c767067397..c767067397 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n67.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n67.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n68.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n68.xml
index f691f25400..f691f25400 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n68.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n68.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n69.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n69.xml
index 12f66777a7..12f66777a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n69.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n69.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n70.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n70.xml
index b4b443d9f2..b4b443d9f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n70.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n70.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n71.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n71.xml
index 1896885a77..1896885a77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n71.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n71.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n72.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n72.xml
index 05d2574ff2..05d2574ff2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n72.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n72.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n73.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n73.xml
index 2dec5281be..2dec5281be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n73.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n73.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n74.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n74.xml
index e0ec7d7700..e0ec7d7700 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n74.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n74.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n75.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n75.xml
index 355282c0aa..355282c0aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n75.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n75.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n76.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n76.xml
index bd5b80ead5..bd5b80ead5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n76.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n76.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n77.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n77.xml
index f2ed26bb9d..f2ed26bb9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n77.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n77.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n78.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n78.xml
index d7ad3001d8..d7ad3001d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n78.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n78.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n79.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n79.xml
index 7b4764b930..7b4764b930 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n79.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n79.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n80.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n80.xml
index a15a6a48c7..a15a6a48c7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n80.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n80.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n81.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n81.xml
index 9ff4e284e0..9ff4e284e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n81.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n81.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n82.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n82.xml
index a43b1a6c30..a43b1a6c30 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n82.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n82.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n83.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n83.xml
index 5a6e6c12b8..5a6e6c12b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n83.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n83.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n84.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n84.xml
index 627447938c..627447938c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n84.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n84.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n85.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n85.xml
index 36a4153b7c..36a4153b7c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n85.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P87/ibm87n85.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Entries
index 121f8e743b..121f8e743b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Repository
index 3c41a5fd7d..3c41a5fd7d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n01.xml
index 7f6560c7e3..7f6560c7e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n02.xml
index 32098d638a..32098d638a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n03.xml
index 4df1d6dd90..4df1d6dd90 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n04.xml
index ac966c9668..ac966c9668 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n05.xml
index 5ab611dbeb..5ab611dbeb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n06.xml
index f726710c79..f726710c79 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n08.xml
index b34ee8fd3b..b34ee8fd3b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n09.xml
index 9c5857a77d..9c5857a77d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n10.xml
index 905d767e09..905d767e09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n11.xml
index ad14d219f4..ad14d219f4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n12.xml
index d45eb84d37..d45eb84d37 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n13.xml
index 066de84967..066de84967 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n14.xml
index 243658df6b..243658df6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n15.xml
index d59a76dcc5..d59a76dcc5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n16.xml
index e6098c8d60..e6098c8d60 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P88/ibm88n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Entries
index 52e81e1caa..52e81e1caa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Repository
index 31b68d8f24..31b68d8f24 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n01.xml
index 72f3765c1f..72f3765c1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n02.xml
index c6c20e7447..c6c20e7447 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n03.xml
index 85e1191c1e..85e1191c1e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n04.xml
index 82b75d33bf..82b75d33bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n05.xml
index 49f7aaa6a5..49f7aaa6a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n06.xml
index 9e9313d861..9e9313d861 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n07.xml
index 719d31494e..719d31494e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n08.xml
index ad6b01449e..ad6b01449e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n09.xml
index 78884fcd3a..78884fcd3a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n10.xml
index 152ab1f14a..152ab1f14a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n11.xml
index 471c4e3036..471c4e3036 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n12.xml
index 731d505a1f..731d505a1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/P89/ibm89n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/432gewf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/432gewf.xml
index 51515865c0..51515865c0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/432gewf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/432gewf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Entries
index 9ada44c04f..9ada44c04f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Repository
index ceb8cec477..ceb8cec477 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/ltinentval.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/ltinentval.xml
index 929bd7f9c0..929bd7f9c0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/ltinentval.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/ltinentval.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/simpleltinentval.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/simpleltinentval.xml
index a668e4c3f5..a668e4c3f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/simpleltinentval.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/misc/simpleltinentval.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Entries
index 3c2743a21c..3c2743a21c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Repository
index 5250d9403f..5250d9403f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.dtd
index 956320f370..956320f370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.xml
index a293d092d6..a293d092d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/not-wf/p28a/ibm28an01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Entries
index 67e5dbe407..67e5dbe407 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Repository
index 48acd66c01..48acd66c01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Entries
index 4ed8ab9a63..4ed8ab9a63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Repository
index 7f0d8ed044..7f0d8ed044 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/ibm01v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/ibm01v01.xml
index c6e0cf470a..c6e0cf470a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/ibm01v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/ibm01v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Entries
index 81d6e5d3b4..81d6e5d3b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Repository
index 7c03a9c171..7c03a9c171 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/ibm01v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/ibm01v01.xml
index 8b93892ae8..8b93892ae8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/ibm01v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P01/out/ibm01v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Entries
index c3228552d1..c3228552d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Repository
index 3341d0bc84..3341d0bc84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/ibm02v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/ibm02v01.xml
index 2363b97fe7..2363b97fe7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/ibm02v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/ibm02v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Entries
index 56cc7b1ae9..56cc7b1ae9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Repository
index 7f0755c915..7f0755c915 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/ibm02v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/ibm02v01.xml
index 7e20303e9a..7e20303e9a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/ibm02v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P02/out/ibm02v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Entries
index 6271e781ea..6271e781ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Repository
index 7591eeb303..7591eeb303 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/ibm03v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/ibm03v01.xml
index 6ab6ff934f..6ab6ff934f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/ibm03v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/ibm03v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Entries
index 677e962239..677e962239 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Repository
index 7817ffc43d..7817ffc43d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/ibm03v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/ibm03v01.xml
index b2af47f3d5..b2af47f3d5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/ibm03v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P03/out/ibm03v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Entries
index ceb1a02eef..ceb1a02eef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Repository
index 11294d6f82..11294d6f82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v01.xml
index 6972b10932..6972b10932 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v02.xml
index 72bca25508..72bca25508 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.dtd
index c39cb64c56..c39cb64c56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.xml
index 7ce1eab062..7ce1eab062 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v04.xml
index 7661470018..7661470018 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v05.xml
index f03eb910b3..f03eb910b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/ibm09v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Entries
index 2ad162c296..2ad162c296 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Repository
index de9bac6df0..de9bac6df0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v01.xml
index f8dc7391f8..f8dc7391f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v02.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v03.xml
index 3349e7e247..3349e7e247 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v04.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v05.xml
index 9f86daac0f..9f86daac0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/out/ibm09v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/student.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/student.dtd
index abb6c014dc..abb6c014dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/student.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P09/student.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Entries
index c778cbc246..c778cbc246 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Repository
index 8c90615256..8c90615256 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v01.xml
index 51fa1087e7..51fa1087e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v02.xml
index 6be402b518..6be402b518 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v03.xml
index a025c98312..a025c98312 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v04.xml
index 84cda90a88..84cda90a88 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v05.xml
index 47b32c5d23..47b32c5d23 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v06.xml
index 6b6c45eee0..6b6c45eee0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v07.xml
index 7ed6e11ae8..7ed6e11ae8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v08.xml
index c7e9e5ecd0..c7e9e5ecd0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/ibm10v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Entries
index 5cf4d37b71..5cf4d37b71 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Repository
index 3e24d562bf..3e24d562bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v01.xml
index a0e5f62ea7..a0e5f62ea7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v02.xml
index a0e5f62ea7..a0e5f62ea7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v03.xml
index 7fadc93f4d..7fadc93f4d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v04.xml
index b3a743f22f..b3a743f22f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v05.xml
index f38bac4154..f38bac4154 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v06.xml
index 3d59fbf803..3d59fbf803 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v07.xml
index 6ae9b6ca2f..6ae9b6ca2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v08.xml
index 0fca8cb600..0fca8cb600 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P10/out/ibm10v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Entries
index f5ab7bcd1f..f5ab7bcd1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Repository
index e770587bd1..e770587bd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v01.xml
index ea7a8948b3..ea7a8948b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v02.xml
index 741c133f9d..741c133f9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v03.xml
index 3f24ed2c34..3f24ed2c34 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v04.xml
index c7edb4198c..c7edb4198c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/ibm11v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Entries
index cbd797b9ea..cbd797b9ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Repository
index 1da6db1a98..1da6db1a98 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v01.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v02.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v03.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v04.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/out/ibm11v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/student.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/student.dtd
index 7ce18a99a3..7ce18a99a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/student.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P11/student.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Entries
index 24330c6e6d..24330c6e6d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Repository
index e424f2df84..e424f2df84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v01.xml
index c4ae3b21fb..c4ae3b21fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v02.xml
index 5c64b3182c..5c64b3182c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v03.xml
index fc8a8be052..fc8a8be052 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v04.xml
index 0e56d70d61..0e56d70d61 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/ibm12v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Entries
index d8b21942f9..d8b21942f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Repository
index e664a4d720..e664a4d720 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v01.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v02.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v03.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v04.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/out/ibm12v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/student.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/student.dtd
index 7ce18a99a3..7ce18a99a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/student.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P12/student.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Entries
index 2259f8c8da..2259f8c8da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Repository
index 5649ac4748..5649ac4748 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/ibm13v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/ibm13v01.xml
index 0cffd8ac00..0cffd8ac00 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/ibm13v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/ibm13v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Entries
index f538fd9432..f538fd9432 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Repository
index 2eb3061684..2eb3061684 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/ibm13v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/ibm13v01.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/ibm13v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/out/ibm13v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/student.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/student.dtd
index 7ce18a99a3..7ce18a99a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/student.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P13/student.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Entries
index a0deacc423..a0deacc423 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Repository
index 486d08b615..486d08b615 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v01.xml
index 6856c02d12..6856c02d12 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v02.xml
index dc868cada8..dc868cada8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v03.xml
index e4a72645a1..e4a72645a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/ibm14v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Entries
index a1bb03f508..a1bb03f508 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Repository
index 2b75758e8a..2b75758e8a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v01.xml
index 768784919e..768784919e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v02.xml
index e5df213173..e5df213173 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v03.xml
index e61667b08c..e61667b08c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P14/out/ibm14v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Entries
index 04c7981799..04c7981799 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Repository
index 37bc03d0a4..37bc03d0a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v01.xml
index 0ae0217060..0ae0217060 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v02.xml
index 6a5f12a2ca..6a5f12a2ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v03.xml
index fdccbc05f1..fdccbc05f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v04.xml
index 06419e86fd..06419e86fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/ibm15v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Entries
index 7365602124..7365602124 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Repository
index 84e15c395c..84e15c395c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v01.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v02.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v03.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v04.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P15/out/ibm15v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Entries
index 15f24626b4..15f24626b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Repository
index 21b5dbc7b8..21b5dbc7b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v01.xml
index 9e39638c06..9e39638c06 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v02.xml
index 9afced545d..9afced545d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v03.xml
index 61d7d28ffc..61d7d28ffc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/ibm16v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Entries
index 5b68155073..5b68155073 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Repository
index 9328178c7e..9328178c7e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v01.xml
index 32de558de8..32de558de8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v02.xml
index 32de558de8..32de558de8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v03.xml
index 4ea41b794d..4ea41b794d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P16/out/ibm16v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Entries
index 9c40725b79..9c40725b79 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Repository
index c5d781f18d..c5d781f18d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/ibm17v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/ibm17v01.xml
index 9a88d47329..9a88d47329 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/ibm17v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/ibm17v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Entries
index a1da9c5089..a1da9c5089 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Repository
index e9ecb2f372..e9ecb2f372 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/ibm17v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/ibm17v01.xml
index 78232f4949..78232f4949 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/ibm17v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P17/out/ibm17v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Entries
index b3281c603a..b3281c603a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Repository
index 4bfd44e42a..4bfd44e42a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/ibm18v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/ibm18v01.xml
index 484508e18f..484508e18f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/ibm18v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/ibm18v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Entries
index c46c2381a4..c46c2381a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Repository
index b89c62083c..b89c62083c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/ibm18v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/ibm18v01.xml
index 26c81568dc..26c81568dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/ibm18v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P18/out/ibm18v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Entries
index 719df701a1..719df701a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Repository
index 64a6e78981..64a6e78981 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/ibm19v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/ibm19v01.xml
index 8144948908..8144948908 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/ibm19v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/ibm19v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Entries
index fa38b54ca3..fa38b54ca3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Repository
index 994d223bd8..994d223bd8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/ibm19v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/ibm19v01.xml
index 71d189035c..71d189035c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/ibm19v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P19/out/ibm19v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Entries
index 3165a90d42..3165a90d42 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Repository
index c64ebc0145..c64ebc0145 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v01.xml
index 222ae023b3..222ae023b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v02.xml
index 6896e72670..6896e72670 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/ibm20v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Entries
index 231b676983..231b676983 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Repository
index 0fe9d8dbe9..0fe9d8dbe9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v01.xml
index c73764ecf7..c73764ecf7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v02.xml
index 9c4db221cd..9c4db221cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P20/out/ibm20v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Entries
index 6e98955619..6e98955619 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Repository
index ee165355e8..ee165355e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/ibm21v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/ibm21v01.xml
index 533f052ce0..533f052ce0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/ibm21v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/ibm21v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Entries
index bd55cefce3..bd55cefce3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Repository
index 8b9fb7ad09..8b9fb7ad09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/ibm21v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/ibm21v01.xml
index 71d189035c..71d189035c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/ibm21v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P21/out/ibm21v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Entries
index fa4a82e1e2..fa4a82e1e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Repository
index 5f5a697bf0..5f5a697bf0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v01.xml
index 7984200fff..7984200fff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v02.xml
index d8b0858eb3..d8b0858eb3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v03.xml
index 9a95702f3c..9a95702f3c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v04.xml
index 30d27eb37f..30d27eb37f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v05.xml
index 84f5e9d42e..84f5e9d42e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v06.xml
index 22034726a3..22034726a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v07.xml
index a31f560e93..a31f560e93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/ibm22v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Entries
index e51d819ebf..e51d819ebf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Repository
index a0723d23dd..a0723d23dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v01.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v02.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v03.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v04.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v05.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v06.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v07.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P22/out/ibm22v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Entries
index fa4440747a..fa4440747a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Repository
index 45b17fbf0f..45b17fbf0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v01.xml
index 8e70c84e1c..8e70c84e1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v02.xml
index 4d336102c6..4d336102c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v03.xml
index 1f9672f7b1..1f9672f7b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v04.xml
index 02b3df2473..02b3df2473 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v05.xml
index e221630a85..e221630a85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v06.xml
index b329d228a8..b329d228a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/ibm23v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Entries
index 502b60df8a..502b60df8a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Repository
index 7a831b4265..7a831b4265 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v01.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v02.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v03.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v04.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v05.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v06.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P23/out/ibm23v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Entries
index d865949755..d865949755 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Repository
index e6d7680fe1..e6d7680fe1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v01.xml
index 8e70c84e1c..8e70c84e1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v02.xml
index 07a3d5d46f..07a3d5d46f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/ibm24v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Entries
index 22b0201813..22b0201813 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Repository
index 60b8804381..60b8804381 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v01.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v02.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P24/out/ibm24v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Entries
index c26b7d7d27..c26b7d7d27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Repository
index c2e3446ae1..c2e3446ae1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v01.xml
index 8e70c84e1c..8e70c84e1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v02.xml
index 23c98b5f9d..23c98b5f9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v03.xml
index 5890536e93..5890536e93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v04.xml
index b9b686343c..b9b686343c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/ibm25v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Entries
index 0fb2f26a26..0fb2f26a26 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Repository
index a125e558b5..a125e558b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v01.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v02.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v03.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v04.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P25/out/ibm25v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Entries
index a0eb985af5..a0eb985af5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Repository
index 60a4a297b2..60a4a297b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/ibm26v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/ibm26v01.xml
index f61cfbb955..f61cfbb955 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/ibm26v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/ibm26v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Entries
index f7cce23189..f7cce23189 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Repository
index 281977e9f2..281977e9f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/ibm26v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/ibm26v01.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/ibm26v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P26/out/ibm26v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Entries
index b76578aa79..b76578aa79 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Repository
index 15b01139aa..15b01139aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v01.xml
index 97db90a6d8..97db90a6d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v02.xml
index abf0bbe27d..abf0bbe27d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v03.xml
index 2f11ac9519..2f11ac9519 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/ibm27v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Entries
index b4bde9843d..b4bde9843d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Repository
index cadb6bda66..cadb6bda66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v01.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v02.xml
index c038a64209..c038a64209 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v03.xml
index 957c86425b..957c86425b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P27/out/ibm27v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Entries
index 5fecb9050c..5fecb9050c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Repository
index cdcaf14233..cdcaf14233 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v01.xml
index d313845ba4..d313845ba4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.dtd
index e441aa2b7d..e441aa2b7d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.txt b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.txt
index ac04999353..ac04999353 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.txt
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.txt
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.xml
index f68fd69572..f68fd69572 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/ibm28v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Entries
index 7e4a593059..7e4a593059 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Repository
index 3e7d440c13..3e7d440c13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v01.xml
index c712ea7861..c712ea7861 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v02.xml
index 40b51ef247..40b51ef247 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P28/out/ibm28v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Entries
index 8a98f4bd98..8a98f4bd98 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Repository
index a146fb7177..a146fb7177 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.txt b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.txt
index f02afb2593..f02afb2593 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.txt
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.txt
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.xml
index de85558e2a..de85558e2a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v02.xml
index 8a2081acc9..8a2081acc9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/ibm29v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Entries
index e64620d6ae..e64620d6ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Repository
index 0618dd7052..0618dd7052 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v01.xml
index 46c4f36ba0..46c4f36ba0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v02.xml
index 46c4f36ba0..46c4f36ba0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P29/out/ibm29v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Entries
index b77f36a4d3..b77f36a4d3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Repository
index 82bebf52cd..82bebf52cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.dtd
index 62ada785ad..62ada785ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.xml
index 71d05cbad0..71d05cbad0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.dtd
index 254d7b2727..254d7b2727 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.xml
index 9ee450aeeb..9ee450aeeb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/ibm30v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Entries
index 350b2ca202..350b2ca202 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Repository
index c37699b70b..c37699b70b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v01.xml
index c712ea7861..c712ea7861 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v02.xml
index c712ea7861..c712ea7861 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P30/out/ibm30v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Entries
index da1db4ad77..da1db4ad77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Repository
index 5468f82899..5468f82899 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.dtd
index 185b7c8a5d..185b7c8a5d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.xml
index c8a5d834ae..c8a5d834ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/ibm31v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Entries
index e8dd232d4b..e8dd232d4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Repository
index 8a3b3ca348..8a3b3ca348 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/ibm31v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/ibm31v01.xml
index 1b6971c727..1b6971c727 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/ibm31v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P31/out/ibm31v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Entries
index eaa4992792..eaa4992792 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Repository
index 57ab3d356d..57ab3d356d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.dtd
index 46dc2a5691..46dc2a5691 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.xml
index 38bf10ead8..38bf10ead8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.dtd
index 3b537f2c93..3b537f2c93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.xml
index ff6e0ec9ad..ff6e0ec9ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.dtd
index b7649a210a..b7649a210a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.xml
index c9defb0463..c9defb0463 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.dtd
index 64c4f03ee7..64c4f03ee7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.xml
index 03d054f263..03d054f263 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/ibm32v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Entries
index ad911de9d2..ad911de9d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Repository
index 499d2cd1d6..499d2cd1d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v01.xml
index 2ec4ca8d75..2ec4ca8d75 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v02.xml
index d7ab7cb44b..d7ab7cb44b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v03.xml
index 0f50002df9..0f50002df9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v04.xml
index da11a67094..da11a67094 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P32/out/ibm32v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Entries
index c796575931..c796575931 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Repository
index 881b3413dd..881b3413dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/ibm33v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/ibm33v01.xml
index c85d67ac3e..c85d67ac3e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/ibm33v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/ibm33v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Entries
index 0bff6e9efb..0bff6e9efb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Repository
index f2067b9e46..f2067b9e46 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/ibm33v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/ibm33v01.xml
index 7366c087a3..7366c087a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/ibm33v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P33/out/ibm33v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Entries
index 572fabd435..572fabd435 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Repository
index cb8138e28a..cb8138e28a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/ibm34v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/ibm34v01.xml
index e95ba4166e..e95ba4166e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/ibm34v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/ibm34v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Entries
index c838cf9804..c838cf9804 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Repository
index 350afd8817..350afd8817 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/ibm34v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/ibm34v01.xml
index 7366c087a3..7366c087a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/ibm34v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P34/out/ibm34v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Entries
index 874daca05a..874daca05a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Repository
index 5b6e2599f4..5b6e2599f4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/ibm35v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/ibm35v01.xml
index 6c060e5182..6c060e5182 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/ibm35v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/ibm35v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Entries
index 3f0f33ce13..3f0f33ce13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Repository
index e841e00e3e..e841e00e3e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/ibm35v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/ibm35v01.xml
index 2011da7711..2011da7711 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/ibm35v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P35/out/ibm35v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Entries
index 52f3d6958b..52f3d6958b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Repository
index 445e36276b..445e36276b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/ibm36v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/ibm36v01.xml
index 54ddaadef7..54ddaadef7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/ibm36v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/ibm36v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Entries
index 82957b404b..82957b404b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Repository
index 2805614bb4..2805614bb4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/ibm36v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/ibm36v01.xml
index 886ae81320..886ae81320 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/ibm36v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P36/out/ibm36v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Entries
index 2143fd9312..2143fd9312 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Repository
index 6d1ebb3842..6d1ebb3842 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/ibm37v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/ibm37v01.xml
index 8bdfd73b6d..8bdfd73b6d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/ibm37v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/ibm37v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Entries
index 02e49b6c09..02e49b6c09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Repository
index 1aabd494a8..1aabd494a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/ibm37v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/ibm37v01.xml
index 2dc6b15b68..2dc6b15b68 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/ibm37v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P37/out/ibm37v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Entries
index 8d0ebe2382..8d0ebe2382 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Repository
index 5ef2834685..5ef2834685 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/ibm38v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/ibm38v01.xml
index b1ac99473c..b1ac99473c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/ibm38v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/ibm38v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Entries
index 64fc46fe75..64fc46fe75 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Repository
index 2e706b49e4..2e706b49e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/ibm38v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/ibm38v01.xml
index a747ce6262..a747ce6262 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/ibm38v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P38/out/ibm38v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Entries
index 501dbfbac3..501dbfbac3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Repository
index 9b4d948464..9b4d948464 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/ibm39v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/ibm39v01.xml
index b4cffd8e5d..b4cffd8e5d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/ibm39v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/ibm39v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Entries
index 06a4fc004c..06a4fc004c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Repository
index 4692fd5b4d..4692fd5b4d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/ibm39v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/ibm39v01.xml
index f3aa393a40..f3aa393a40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/ibm39v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P39/out/ibm39v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Entries
index 657858e1f3..657858e1f3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Repository
index 1cbafc5374..1cbafc5374 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/ibm40v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/ibm40v01.xml
index 087b64a666..087b64a666 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/ibm40v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/ibm40v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Entries
index ceaf89b0ea..ceaf89b0ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Repository
index 930a13ddf9..930a13ddf9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/ibm40v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/ibm40v01.xml
index 3b2b470bad..3b2b470bad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/ibm40v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P40/out/ibm40v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Entries
index 63b80c456f..63b80c456f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Repository
index 0eb6eb6a86..0eb6eb6a86 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/ibm41v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/ibm41v01.xml
index 47e838ce42..47e838ce42 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/ibm41v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/ibm41v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Entries
index 91d9b1fe84..91d9b1fe84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Repository
index c9a032af10..c9a032af10 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/ibm41v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/ibm41v01.xml
index 7c28d2c783..7c28d2c783 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/ibm41v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P41/out/ibm41v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Entries
index d5ad1ff6ea..d5ad1ff6ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Repository
index 67a4830b53..67a4830b53 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/ibm42v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/ibm42v01.xml
index f151704b94..f151704b94 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/ibm42v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/ibm42v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Entries
index 43a01e19dd..43a01e19dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Repository
index d61cecc4d4..d61cecc4d4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/ibm42v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/ibm42v01.xml
index e171475b80..e171475b80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/ibm42v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P42/out/ibm42v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Entries
index 657d939e7a..657d939e7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Repository
index 64c985842e..64c985842e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/ibm43v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/ibm43v01.xml
index 78a6f0aaf2..78a6f0aaf2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/ibm43v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/ibm43v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Entries
index dc162205da..dc162205da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Repository
index 1ec9702753..1ec9702753 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/ibm43v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/ibm43v01.xml
index 4925b60469..4925b60469 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/ibm43v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P43/out/ibm43v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Entries
index 3fc0528974..3fc0528974 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Repository
index 39518a0edc..39518a0edc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/ibm44v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/ibm44v01.xml
index f3ab2c1715..f3ab2c1715 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/ibm44v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/ibm44v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Entries
index b72d92f035..b72d92f035 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Repository
index 8992aaf288..8992aaf288 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/ibm44v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/ibm44v01.xml
index a107534606..a107534606 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/ibm44v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P44/out/ibm44v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Entries
index 6c79b6be78..6c79b6be78 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Repository
index ef2b978d7c..ef2b978d7c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/ibm45v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/ibm45v01.xml
index 0c16231ab9..0c16231ab9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/ibm45v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/ibm45v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Entries
index 0c22eaf26c..0c22eaf26c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Repository
index fa615ebe9d..fa615ebe9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/ibm45v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/ibm45v01.xml
index a107534606..a107534606 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/ibm45v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P45/out/ibm45v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Entries
index 48a24b954a..48a24b954a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Repository
index 80ca5bb360..80ca5bb360 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/ibm47v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/ibm47v01.xml
index e43203e332..e43203e332 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/ibm47v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/ibm47v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Entries
index 72d896d9dc..72d896d9dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Repository
index 0e174cf027..0e174cf027 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/ibm47v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/ibm47v01.xml
index fb492e28e4..fb492e28e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/ibm47v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P47/out/ibm47v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Entries
index c2beb38dba..c2beb38dba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Repository
index c39e0b8946..c39e0b8946 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.dtd
index fe00d6ae3a..fe00d6ae3a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.xml
index 5952647933..5952647933 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/ibm49v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Entries
index a2ebdf256d..a2ebdf256d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Repository
index a653708399..a653708399 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/ibm49v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/ibm49v01.xml
index fb492e28e4..fb492e28e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/ibm49v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P49/out/ibm49v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Entries
index ba4082d889..ba4082d889 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Repository
index f75bf04483..f75bf04483 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.dtd
index 04685de4e7..04685de4e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.xml
index 69848f1dac..69848f1dac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/ibm50v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Entries
index fd8d7c19f8..fd8d7c19f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Repository
index 58fb9f9ec8..58fb9f9ec8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/ibm50v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/ibm50v01.xml
index 713ca91f78..713ca91f78 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/ibm50v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P50/out/ibm50v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Entries
index e7b8ffac66..e7b8ffac66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Repository
index 6c06e5ca8e..6c06e5ca8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v01.xml
index ea18f9060c..ea18f9060c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.dtd
index 035bd38816..035bd38816 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.xml
index c424f8e5d7..c424f8e5d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/ibm51v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Entries
index 72cb19aead..72cb19aead 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Repository
index 78285c212f..78285c212f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v01.xml
index 0c17c3f833..0c17c3f833 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v02.xml
index 0c17c3f833..0c17c3f833 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P51/out/ibm51v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Entries
index 71f965d985..71f965d985 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Repository
index 00070be10d..00070be10d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/ibm52v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/ibm52v01.xml
index 778511eeae..778511eeae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/ibm52v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/ibm52v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Entries
index b48d8483a2..b48d8483a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Repository
index ef79331efd..ef79331efd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/ibm52v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/ibm52v01.xml
index 47077a6b0d..47077a6b0d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/ibm52v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P52/out/ibm52v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Entries
index 71f40e131c..71f40e131c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Repository
index 7325264860..7325264860 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v01.xml
index 2317e38fac..2317e38fac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v02.xml
index 9bfd55fd01..9bfd55fd01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v03.xml
index 4215498125..4215498125 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibm54v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibmlogo.gif b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibmlogo.gif
index 034ddc162b..034ddc162b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibmlogo.gif
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/ibmlogo.gif
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Entries
index 8174bd1ea2..8174bd1ea2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Repository
index b02a88598f..b02a88598f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v01.xml
index abb4b443e6..abb4b443e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v02.xml
index 3b744eefe7..3b744eefe7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v03.xml
index f98ff12935..f98ff12935 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/out/ibm54v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/xmltech.gif b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/xmltech.gif
index 8f88a54f17..8f88a54f17 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/xmltech.gif
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P54/xmltech.gif
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Entries
index be48853f59..be48853f59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Repository
index cf26a18411..cf26a18411 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/ibm55v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/ibm55v01.xml
index 1664311dc7..1664311dc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/ibm55v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/ibm55v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Entries
index c468e1b1a9..c468e1b1a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Repository
index c2642e408e..c2642e408e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/ibm55v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/ibm55v01.xml
index 05540bc826..05540bc826 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/ibm55v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P55/out/ibm55v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Entries
index 02553a9c25..02553a9c25 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Repository
index 9c04dcc542..9c04dcc542 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v01.xml
index 2e462b7cca..2e462b7cca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v02.xml
index 6007abcee4..6007abcee4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v03.xml
index bb8dfb12e7..bb8dfb12e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v04.xml
index ed8e74d1a0..ed8e74d1a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v05.xml
index 69b064a6ef..69b064a6ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v06.xml
index 161965d790..161965d790 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v07.xml
index d238abc2fe..d238abc2fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v08.xml
index 865723c71c..865723c71c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v09.xml
index aa62050e66..aa62050e66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v10.xml
index 116fa3bc96..116fa3bc96 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/ibm56v10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Entries
index f5f1df8dc7..f5f1df8dc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Repository
index 92176f76d7..92176f76d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v01.xml
index ef2fc53c2f..ef2fc53c2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v02.xml
index 2be8a006a6..2be8a006a6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v03.xml
index 6e8f3e88be..6e8f3e88be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v04.xml
index 90cb82cd27..90cb82cd27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v05.xml
index b737215b79..b737215b79 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v06.xml
index 1ffda9358d..1ffda9358d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v07.xml
index f42ed2ce33..f42ed2ce33 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v08.xml
index 8736918882..8736918882 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v09.xml
index 59630c40d9..59630c40d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v10.xml
index 1baf6fbb8e..1baf6fbb8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P56/out/ibm56v10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Entries
index 0e7fc516b6..0e7fc516b6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Repository
index 0d383ffae6..0d383ffae6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/ibm57v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/ibm57v01.xml
index 026dcdc5b7..026dcdc5b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/ibm57v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/ibm57v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Entries
index c40a806f5f..c40a806f5f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Repository
index 27214d760f..27214d760f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/ibm57v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/ibm57v01.xml
index a02aa56e55..a02aa56e55 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/ibm57v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P57/out/ibm57v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Entries
index bd747fde59..bd747fde59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Repository
index 0c10e14924..0c10e14924 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v01.xml
index dafe2fd64b..dafe2fd64b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v02.xml
index dc466440c3..dc466440c3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/ibm58v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Entries
index 542b32a489..542b32a489 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Repository
index 9d25a282d4..9d25a282d4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v01.xml
index d80e4e7a4a..d80e4e7a4a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v02.xml
index a28dab91cf..a28dab91cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P58/out/ibm58v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Entries
index a38cce98e6..a38cce98e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Repository
index a9ef56c648..a9ef56c648 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v01.xml
index de89d08d2c..de89d08d2c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v02.xml
index 2620bc4b2c..2620bc4b2c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/ibm59v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Entries
index caf2ca4acf..caf2ca4acf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Repository
index 8c73880dc9..8c73880dc9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v01.xml
index 91021d524f..91021d524f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v02.xml
index 041085b4ea..041085b4ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P59/out/ibm59v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Entries
index a00cd3dbf8..a00cd3dbf8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Repository
index a58808e8b7..a58808e8b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v01.xml
index 050a340016..050a340016 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v02.xml
index d2d9091649..d2d9091649 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v03.xml
index f5d1449f9c..f5d1449f9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v04.xml
index b0684edc91..b0684edc91 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/ibm60v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Entries
index 3eef66cd95..3eef66cd95 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Repository
index 890c77d282..890c77d282 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v01.xml
index ff619d06eb..ff619d06eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v02.xml
index 25c23d7b58..25c23d7b58 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v03.xml
index 84cdd236f1..84cdd236f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v04.xml
index 272589e0ea..272589e0ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P60/out/ibm60v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Entries
index 5d767d52e9..5d767d52e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Repository
index 7fda684f52..7fda684f52 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.dtd
index f38d86c239..f38d86c239 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.xml
index 9653dbbd4b..9653dbbd4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.dtd
index 8552560d23..8552560d23 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.xml
index 16d65f680b..16d65f680b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/ibm61v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Entries
index ba2cf45c26..ba2cf45c26 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Repository
index 570f4d7e27..570f4d7e27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v01.xml
index 58faad1c69..58faad1c69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v02.xml
index c712ea7861..c712ea7861 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P61/out/ibm61v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Entries
index 84c408581f..84c408581f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Repository
index e53b034fbc..e53b034fbc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.dtd
index fa1658b817..fa1658b817 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.xml
index 6aef865eef..6aef865eef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.dtd
index 0d8f9dbde9..0d8f9dbde9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.xml
index 68d64af76f..68d64af76f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.dtd
index e0935506cd..e0935506cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.xml
index 5706549dbb..5706549dbb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.dtd
index 9dc897a247..9dc897a247 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.xml
index 8a2e0cbf40..8a2e0cbf40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.dtd
index 2070b07f01..2070b07f01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.xml
index ec8583d3c0..ec8583d3c0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/ibm62v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Entries
index 3fdbdc4cc0..3fdbdc4cc0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Repository
index 19f90bd98c..19f90bd98c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v01.xml
index 33a55b20cf..33a55b20cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v02.xml
index 2e13e8b57d..2e13e8b57d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v03.xml
index b49da7bad7..b49da7bad7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v04.xml
index d9ae6c6bda..d9ae6c6bda 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v05.xml
index 83c66400e6..83c66400e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P62/out/ibm62v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Entries
index 23bf0623ea..23bf0623ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Repository
index ef8ef57a96..ef8ef57a96 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.dtd
index b78d230497..b78d230497 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.xml
index af00015067..af00015067 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.dtd
index dc9c3da317..dc9c3da317 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.xml
index e3a81fa0a6..e3a81fa0a6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.dtd
index 3280ee4b31..3280ee4b31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.xml
index 7767d6af4e..7767d6af4e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.dtd
index 7e89f7de85..7e89f7de85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.xml
index 823c32fd9b..823c32fd9b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.dtd
index 2cc362a193..2cc362a193 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.xml
index 680ab1a2d0..680ab1a2d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/ibm63v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Entries
index 074fab8a19..074fab8a19 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Repository
index b76794d4e5..b76794d4e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v01.xml
index 12cfde5853..12cfde5853 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v02.xml
index d193162e1c..d193162e1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v03.xml
index aa18165649..aa18165649 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v04.xml
index 2aaa7f9998..2aaa7f9998 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v05.xml
index 216eddf208..216eddf208 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P63/out/ibm63v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Entries
index a6cb6c857a..a6cb6c857a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Repository
index e3aaf92f61..e3aaf92f61 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.dtd
index b0618c9d33..b0618c9d33 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.xml
index 6e6bde5203..6e6bde5203 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.dtd
index e290206735..e290206735 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.xml
index 45c0ba47da..45c0ba47da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.dtd
index 4780e175c5..4780e175c5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.xml
index 63221dab27..63221dab27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/ibm64v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Entries
index 0aad867492..0aad867492 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Repository
index 1ebd510f1a..1ebd510f1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v01.xml
index dbabf5a283..dbabf5a283 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v02.xml
index a2ce286987..a2ce286987 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v03.xml
index b9eba2c844..b9eba2c844 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P64/out/ibm64v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Entries
index 8276775870..8276775870 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Repository
index 4a2fb91cba..4a2fb91cba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.dtd
index de6a97372b..de6a97372b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.xml
index 18b4ca75e6..18b4ca75e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.dtd
index 524c37884c..524c37884c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.xml
index f7f99e9d4a..f7f99e9d4a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/ibm65v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Entries
index e7ad4080e8..e7ad4080e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Repository
index d05fb1c4af..d05fb1c4af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v01.xml
index de36831bbc..de36831bbc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v02.xml
index c5f6a5fb80..c5f6a5fb80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P65/out/ibm65v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Entries
index 3a6104bbbf..3a6104bbbf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Repository
index d34ce12cc7..d34ce12cc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/ibm66v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/ibm66v01.xml
index d7f7722da3..d7f7722da3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/ibm66v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/ibm66v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Entries
index dbeed2d2a7..dbeed2d2a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Repository
index 2a7cbc27e5..2a7cbc27e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/ibm66v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/ibm66v01.xml
index ed05e61ad6..ed05e61ad6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/ibm66v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P66/out/ibm66v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Entries
index c0a216c5a4..c0a216c5a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Repository
index 5f01c1553e..5f01c1553e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/ibm67v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/ibm67v01.xml
index 5ada5f8d24..5ada5f8d24 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/ibm67v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/ibm67v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Entries
index 72f7e48197..72f7e48197 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Repository
index bf1d961dd8..bf1d961dd8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/ibm67v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/ibm67v01.xml
index ba06d941c6..ba06d941c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/ibm67v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P67/out/ibm67v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Entries
index 4b0108a1be..4b0108a1be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Repository
index 16fccf770c..16fccf770c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.dtd
index 57249bd6ab..57249bd6ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.xml
index 33a8156651..33a8156651 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.ent
index 299a1121fb..299a1121fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.xml
index 963415eaa6..963415eaa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/ibm68v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Entries
index eb373b6218..eb373b6218 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Repository
index f760536304..f760536304 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v01.xml
index 2375979678..2375979678 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v02.xml
index c05dd56b0c..c05dd56b0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P68/out/ibm68v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Entries
index 3e26ec4cc0..3e26ec4cc0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Repository
index 42be2f9772..42be2f9772 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.dtd
index 374f61f567..374f61f567 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.xml
index 9d3523f891..9d3523f891 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.ent
index 416c1cc81c..416c1cc81c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.xml
index 98b945933b..98b945933b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/ibm69v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Entries
index 7591e389f9..7591e389f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Repository
index e3de03e3c8..e3de03e3c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v01.xml
index 2375979678..2375979678 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v02.xml
index c05dd56b0c..c05dd56b0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P69/out/ibm69v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Entries
index 14f4ae97a7..14f4ae97a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Repository
index f580a7db85..f580a7db85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.ent
index 0119d7c770..0119d7c770 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.xml
index e363e3dfc7..e363e3dfc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/ibm70v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Entries
index c970aff44b..c970aff44b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Repository
index e717a0d032..e717a0d032 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/ibm70v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/ibm70v01.xml
index 34634fac09..34634fac09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/ibm70v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P70/out/ibm70v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Entries
index cd7fd509e8..cd7fd509e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Repository
index 9adb715738..9adb715738 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.ent
index 15e54d92cc..15e54d92cc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.xml
index 3fb4b9af07..3fb4b9af07 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v02.ent
index 477f60b33a..477f60b33a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v03.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v03.ent
index f46452e775..f46452e775 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v03.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/ibm78v03.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Entries
index 7536d883ab..7536d883ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Repository
index 59e86a95f6..59e86a95f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/ibm78v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/ibm78v01.xml
index 52794f4dbd..52794f4dbd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/ibm78v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P78/out/ibm78v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Entries
index bd57c12125..bd57c12125 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Repository
index c36df15974..c36df15974 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.ent
index f54ba01b08..f54ba01b08 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.xml
index 1d1befaf03..1d1befaf03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/ibm79v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Entries
index 58b04c89ec..58b04c89ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Repository
index 01cd93f790..01cd93f790 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/ibm79v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/ibm79v01.xml
index e898e58937..e898e58937 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/ibm79v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P79/out/ibm79v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Entries
index ba1712f619..ba1712f619 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Repository
index a2e8fdac1f..a2e8fdac1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/ibm82v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/ibm82v01.xml
index 3c08581666..3c08581666 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/ibm82v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/ibm82v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Entries
index be03a47ea0..be03a47ea0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Repository
index da71ac9d80..da71ac9d80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/ibm82v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/ibm82v01.xml
index 6200e1a16c..6200e1a16c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/ibm82v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P82/out/ibm82v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Entries
index 1174cccf0f..1174cccf0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Repository
index c3f0a3cbb4..c3f0a3cbb4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/ibm85v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/ibm85v01.xml
index 045246e150..045246e150 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/ibm85v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/ibm85v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Entries
index 040b21147b..040b21147b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Repository
index 3c6ca0b25f..3c6ca0b25f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/ibm85v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/ibm85v01.xml
index b0aa21f3b1..b0aa21f3b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/ibm85v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P85/out/ibm85v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Entries
index 75a1a248eb..75a1a248eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Repository
index 77f2b4b3d0..77f2b4b3d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/ibm86v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/ibm86v01.xml
index 150f10d977..150f10d977 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/ibm86v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/ibm86v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Entries
index d83c87b60f..d83c87b60f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Repository
index 187b88c955..187b88c955 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/ibm86v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/ibm86v01.xml
index f032d0c9b3..f032d0c9b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/ibm86v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P86/out/ibm86v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Entries
index d822f21d5c..d822f21d5c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Repository
index 7b61a71f18..7b61a71f18 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/ibm87v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/ibm87v01.xml
index a59d63b8a7..a59d63b8a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/ibm87v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/ibm87v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Entries
index d1cdff3eb4..d1cdff3eb4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Repository
index 7a9ac6729e..7a9ac6729e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/ibm87v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/ibm87v01.xml
index b9d16878dc..b9d16878dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/ibm87v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P87/out/ibm87v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Entries
index 869d075ad4..869d075ad4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Repository
index 129ff7e8d7..129ff7e8d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/ibm88v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/ibm88v01.xml
index 61d5db305d..61d5db305d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/ibm88v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/ibm88v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Entries
index 649aef6d96..649aef6d96 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Repository
index 3f82052164..3f82052164 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/ibm88v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/ibm88v01.xml
index ccdbdca30b..ccdbdca30b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/ibm88v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P88/out/ibm88v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Entries
index ad680e976d..ad680e976d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Repository
index b5f1d31b28..b5f1d31b28 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/ibm89v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/ibm89v01.xml
index 4d71cb9b9e..4d71cb9b9e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/ibm89v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/ibm89v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Entries
index 0665342204..0665342204 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Repository
index ec8baeb75e..ec8baeb75e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/ibm89v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/ibm89v01.xml
index 2e4c23ca21..2e4c23ca21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/ibm89v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/valid/P89/out/ibm89v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Entries
index 05e6543f13..05e6543f13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Repository
index 0497ff4c6e..0497ff4c6e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_invalid.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_invalid.xml
index eb35efc4fe..eb35efc4fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_invalid.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_invalid.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_not-wf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_not-wf.xml
index baa357145f..baa357145f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_not-wf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_not-wf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_valid.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_valid.xml
index bc0baf7262..bc0baf7262 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_valid.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/ibm_valid.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Entries
index b5b4053997..b5b4053997 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Repository
index 07e8a5f76b..07e8a5f76b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Entries
index 036518e0f5..036518e0f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Repository
index f9a1cacca8..f9a1cacca8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i01.xml
index 4acbdc8c2b..4acbdc8c2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i02.xml
index 81f503cc66..81f503cc66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/invalid/P46/ibm46i02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Entries
index c21e7230fa..c21e7230fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Repository
index 98b18ce822..98b18ce822 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Entries
index 463f1c427e..463f1c427e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Repository
index 3190d3423b..3190d3423b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n01.xml
index bcdc4c23a5..bcdc4c23a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n02.xml
index 7720373ad9..7720373ad9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n03.xml
index fc9a469fe3..fc9a469fe3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n04.xml
index f18bcb3e50..f18bcb3e50 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n05.xml
index f8e7e35e6f..f8e7e35e6f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n06.xml
index c83d4f3039..c83d4f3039 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n07.xml
index fae131ea7d..fae131ea7d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n08.xml
index 7a687964cb..7a687964cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n09.xml
index f023fe7eea..f023fe7eea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n09.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n10.xml
index cc010bafab..cc010bafab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n11.xml
index b1dac95bfa..b1dac95bfa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n12.xml
index 4a1e578930..4a1e578930 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n13.xml
index 5d818d13ec..5d818d13ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n14.xml
index b5fe5b26c4..b5fe5b26c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n15.xml
index 758f373298..758f373298 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n16.xml
index aa3b522c00..aa3b522c00 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n17.xml
index 75eb88798c..75eb88798c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n18.xml
index 8efbc86433..8efbc86433 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n19.xml
index b5536e084a..b5536e084a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n20.xml
index 7ca323bad5..7ca323bad5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n21.xml
index 95a8c9be26..95a8c9be26 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n22.xml
index 3df6b01f38..3df6b01f38 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n23.xml
index 53fc635301..53fc635301 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n24.xml
index c120acc370..c120acc370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n25.xml
index a52e8bee77..a52e8bee77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n26.xml
index ad1c0ebb99..ad1c0ebb99 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n27.xml
index a3dbf378da..a3dbf378da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n28.xml
index cdf1c82955..cdf1c82955 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n29.xml
index 0e077c8fd4..0e077c8fd4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n30.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n30.xml
index 3b736dac0c..3b736dac0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n30.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n30.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n31.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n31.xml
index 51bc907702..51bc907702 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n31.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n31.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n32.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n32.xml
index fc98d2df57..fc98d2df57 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n32.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n32.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n33.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n33.xml
index 062a5ff101..062a5ff101 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n33.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n33.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n34.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n34.xml
index fb7e5a9f0f..fb7e5a9f0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n34.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n34.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n35.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n35.xml
index e97969161e..e97969161e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n35.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n35.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n36.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n36.xml
index e7677574c2..e7677574c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n36.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n36.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n37.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n37.xml
index fbdb74a289..fbdb74a289 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n37.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n37.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n38.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n38.xml
index 536103e3f1..536103e3f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n38.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n38.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n39.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n39.xml
index f7bdd57908..f7bdd57908 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n39.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n39.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n40.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n40.xml
index 7c9ac88aa8..7c9ac88aa8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n40.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n40.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n41.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n41.xml
index ab1e1f6031..ab1e1f6031 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n41.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n41.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n42.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n42.xml
index a1833a0900..a1833a0900 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n42.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n42.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n43.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n43.xml
index e166e5b5e8..e166e5b5e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n43.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n43.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n44.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n44.xml
index e66f0c7747..e66f0c7747 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n44.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n44.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n45.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n45.xml
index 5bd0b88709..5bd0b88709 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n45.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n45.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n46.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n46.xml
index 2fb7f40cba..2fb7f40cba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n46.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n46.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n47.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n47.xml
index 153cf1627a..153cf1627a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n47.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n47.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n48.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n48.xml
index 37b08487ec..37b08487ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n48.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n48.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n49.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n49.xml
index 6c7abff6b8..6c7abff6b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n49.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n49.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n50.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n50.xml
index bb1408e389..bb1408e389 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n50.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n50.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n51.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n51.xml
index b02eb5a73a..b02eb5a73a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n51.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n51.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n52.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n52.xml
index ef4445db4f..ef4445db4f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n52.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n52.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n53.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n53.xml
index d4f0fba63d..d4f0fba63d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n53.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n53.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n54.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n54.xml
index 9b2958575d..9b2958575d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n54.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n54.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n55.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n55.xml
index c155253b78..c155253b78 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n55.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n55.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n56.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n56.xml
index aa38ecd70c..aa38ecd70c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n56.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n56.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n57.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n57.xml
index 27131260ad..27131260ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n57.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n57.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n58.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n58.xml
index 509ee430a1..509ee430a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n58.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n58.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n59.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n59.xml
index 2af97c9518..2af97c9518 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n59.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n59.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n60.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n60.xml
index 1e7058a93a..1e7058a93a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n60.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n60.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n61.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n61.xml
index 91fed24453..91fed24453 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n61.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n61.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n62.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n62.xml
index 507a7049b7..507a7049b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n62.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n62.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n63.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n63.xml
index 75df2bd7ed..75df2bd7ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n63.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n63.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.ent
index e204c6b434..e204c6b434 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.xml
index b03071ef30..b03071ef30 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n64.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.ent
index 5bd1390a80..5bd1390a80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.xml
index 56c25eb864..56c25eb864 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n65.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.ent
index eced60a5a0..eced60a5a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.xml
index 43cfa46291..43cfa46291 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n66.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n67.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n67.xml
index 3f235d8ab7..3f235d8ab7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n67.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n67.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n68.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n68.xml
index 5b0b460a39..5b0b460a39 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n68.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n68.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n69.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n69.xml
index 07a1840298..07a1840298 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n69.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n69.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n70.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n70.xml
index 1863add553..1863add553 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n70.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n70.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n71.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n71.xml
index c5c8997938..c5c8997938 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n71.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P02/ibm02n71.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Entries
index 43a8342165..43a8342165 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Repository
index 77ef3f2e7b..77ef3f2e7b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n01.xml
index 4c44ab644d..4c44ab644d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n02.xml
index 0b3c346476..0b3c346476 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n03.xml
index bda1b60fd0..bda1b60fd0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n04.xml
index f562a9bebf..f562a9bebf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n05.xml
index 5d6508e352..5d6508e352 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n06.xml
index 40c935a9fe..40c935a9fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n07.xml
index 3039964101..3039964101 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n08.xml
index 5806f2e81a..5806f2e81a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n09.xml
index 831891b545..831891b545 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n10.xml
index e31b5a9097..e31b5a9097 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n11.xml
index 6789aa35aa..6789aa35aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n12.xml
index 5580423b21..5580423b21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n13.xml
index e56d749cfc..e56d749cfc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n14.xml
index 8138a38d78..8138a38d78 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n15.xml
index 0a6a2b2b6e..0a6a2b2b6e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n16.xml
index b050ffb741..b050ffb741 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n17.xml
index 6f0d2d8327..6f0d2d8327 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n18.xml
index 85f194fb0f..85f194fb0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n19.xml
index e66a949372..e66a949372 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n20.xml
index 8dda9e7be2..8dda9e7be2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n21.xml
index c6ff85d559..c6ff85d559 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n22.xml
index a5ef26afc1..a5ef26afc1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n23.xml
index b96f0c2b91..b96f0c2b91 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n24.xml
index 3b5d5d9691..3b5d5d9691 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n25.xml
index 21814b10d2..21814b10d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n26.xml
index 72303c440e..72303c440e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n27.xml
index d70058412c..d70058412c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n28.xml
index 330d295a48..330d295a48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04/ibm04n28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Entries
index b6cd89f9fd..b6cd89f9fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Repository
index 79a34aa60a..79a34aa60a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an01.xml
index 4b3180ab22..4b3180ab22 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an02.xml
index e94acbbe45..e94acbbe45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an03.xml
index 4617b5645c..4617b5645c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an04.xml
index d334a16a07..d334a16a07 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an05.xml
index 229d20756d..229d20756d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an06.xml
index 5b0b33783a..5b0b33783a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an07.xml
index db80e5dbfe..db80e5dbfe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an08.xml
index 5955614e99..5955614e99 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an09.xml
index 40e327e536..40e327e536 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an10.xml
index 3d23068c8a..3d23068c8a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an11.xml
index b6ea599dc7..b6ea599dc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an12.xml
index 489ec9453c..489ec9453c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an13.xml
index 4d47af69f1..4d47af69f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an14.xml
index c9a2c644dd..c9a2c644dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an15.xml
index 4300c287c2..4300c287c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an16.xml
index f9e0949570..f9e0949570 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an17.xml
index 6cb589b0b6..6cb589b0b6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an18.xml
index 0fe52c9770..0fe52c9770 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an19.xml
index cfdaa64f56..cfdaa64f56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an20.xml
index a4155b517e..a4155b517e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an21.xml
index 620e15c41b..620e15c41b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an22.xml
index 7ffd2ab810..7ffd2ab810 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an23.xml
index 145642dac3..145642dac3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an24.xml
index 2b78981a45..2b78981a45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an25.xml
index 5fdb671e60..5fdb671e60 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an26.xml
index a0e3eb568f..a0e3eb568f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an27.xml
index a751974244..a751974244 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an28.xml
index 9b98706d2e..9b98706d2e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P04a/ibm04an28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Entries
index 78716f52d1..78716f52d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Repository
index fa2f35e8fa..fa2f35e8fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n01.xml
index a3edcf06b2..a3edcf06b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n02.xml
index fce14de084..fce14de084 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n03.xml
index 4aa5a4b364..4aa5a4b364 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n04.xml
index 1bbffdf534..1bbffdf534 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n05.xml
index 0ff04f2d86..0ff04f2d86 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n06.xml
index e95a058370..e95a058370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P05/ibm05n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Entries
index 7d820498ac..7d820498ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Repository
index 58229dc5c5..58229dc5c5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.dtd
index 9f4e46d786..9f4e46d786 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.xml
index 8d443429cb..8d443429cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.dtd
index 0589dad520..0589dad520 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.xml
index 7b12ef2547..7b12ef2547 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.dtd
index 5c0f91d829..5c0f91d829 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.xml
index 446b8600eb..446b8600eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.ent
index 2928170a35..2928170a35 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.xml
index 6989693604..6989693604 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.ent
index eba7e8e490..eba7e8e490 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.xml
index ad88167589..ad88167589 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.ent
index fd7a76646c..fd7a76646c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.xml
index 4dafc6d5c2..4dafc6d5c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.dtd
index ba49e131b1..ba49e131b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.xml
index 9358976808..9358976808 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.dtd
index 21e3d6ae63..21e3d6ae63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.xml
index a2c6d3f800..a2c6d3f800 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.dtd
index a34ab702a0..a34ab702a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.xml
index d81f9690d1..d81f9690d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.ent
index 2bd3d295e5..2bd3d295e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.xml
index 7ecef85385..7ecef85385 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.ent
index 54dd853901..54dd853901 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.xml
index 44a51a53cf..44a51a53cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.ent
index 761f7904e3..761f7904e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.xml
index 6d99f811fd..6d99f811fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.dtd
index 808bcc52c4..808bcc52c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.ent
index 87c52c7416..87c52c7416 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.xml
index b80583c963..b80583c963 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.dtd
index f23c4c4f0d..f23c4c4f0d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.xml
index efad31468c..efad31468c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.dtd
index 3bc9c3001a..3bc9c3001a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.ent
index 32e0bd8af0..32e0bd8af0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.xml
index 2d6bb7a114..2d6bb7a114 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.ent
index 4cb0f1eb4e..4cb0f1eb4e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.xml
index e6d0eea805..e6d0eea805 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.ent
index e5d6d8f599..e5d6d8f599 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.xml
index d470e8bf7a..d470e8bf7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.ent
index 939d9bdc6e..939d9bdc6e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.xml
index e9e31e7b7e..e9e31e7b7e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.dtd
index 42c3c44151..42c3c44151 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.ent
index 819e3bede4..819e3bede4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.xml
index 6559711cee..6559711cee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.dtd
index 71aa0e7cbc..71aa0e7cbc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.ent
index 4517dfcfaf..4517dfcfaf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.xml
index 730e3a97b5..730e3a97b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.dtd
index 138fd50952..138fd50952 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.ent
index 4517dfcfaf..4517dfcfaf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.xml
index 8347923881..8347923881 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/not-wf/P77/ibm77n21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Entries
index ed3017bb3e..ed3017bb3e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Repository
index bb294bfda3..bb294bfda3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Entries
index d1cab55a76..d1cab55a76 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Repository
index 214b610f92..214b610f92 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v01.xml
index f55970e447..f55970e447 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v02.xml
index 128c4a5214..128c4a5214 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v03.xml
index 4f7aabc0f4..4f7aabc0f4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v04.xml
index 348004f132..348004f132 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v05.xml
index bb8ce67e7c..bb8ce67e7c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.ent
index 5edde50c09..5edde50c09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.xml
index e21b65a2ff..e21b65a2ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P02/ibm02v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Entries
index 7799e50679..7799e50679 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Repository
index aa8eec08af..aa8eec08af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.ent
index 9e7d302db7..9e7d302db7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.xml
index bb199c6315..bb199c6315 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.ent
index 49fa978a95..49fa978a95 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.xml
index 1e4016ea84..1e4016ea84 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.ent
index 3f9891b370..3f9891b370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.xml
index 838469cf36..838469cf36 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.ent
index 943348b728..943348b728 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.xml
index c91f7ba292..c91f7ba292 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v05.xml
index 147ad514e6..147ad514e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v06.xml
index 926f087d87..926f087d87 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v07.xml
index 58d4d57815..58d4d57815 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v08.xml
index 98d5f4a098..98d5f4a098 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.ent
index 5f97ad4b82..5f97ad4b82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.xml
index 6588aa88fe..6588aa88fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/ibm03v09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Entries
index a68bdbd784..a68bdbd784 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Repository
index 461fb90957..461fb90957 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v01.xml
index 3fed632c66..3fed632c66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v02.xml
index 3fed632c66..3fed632c66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v03.xml
index d52534db03..d52534db03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v04.xml
index d52534db03..d52534db03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v05.xml
index 976f241144..976f241144 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v06.xml
index 976f241144..976f241144 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v07.xml
index 976f241144..976f241144 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v08.xml
index e163aade1f..e163aade1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v09.xml
index e163aade1f..e163aade1f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P03/out/ibm03v09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Entries
index 1265ae5a82..1265ae5a82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Repository
index 5dc25dcd73..5dc25dcd73 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/ibm04v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/ibm04v01.xml
index bde882fb1c..bde882fb1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/ibm04v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04/ibm04v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Entries
index 326056b090..326056b090 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Repository
index d5df5dd2ed..d5df5dd2ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/ibm04av01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/ibm04av01.xml
index 5bde28ec53..5bde28ec53 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/ibm04av01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P04a/ibm04av01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Entries
index 41ef6c1681..41ef6c1681 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Repository
index d8fe4e1504..d8fe4e1504 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v01.xml
index 2a38052bd8..2a38052bd8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v02.xml
index e788d4670d..e788d4670d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v03.xml
index 729d2141d8..729d2141d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v04.xml
index 5833679d6a..5833679d6a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v05.xml
index c1b2f1372d..c1b2f1372d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P05/ibm05v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Entries
index ac114c7460..ac114c7460 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Repository
index ce08b017d1..ce08b017d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/ibm07v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/ibm07v01.xml
index f9085fe9f5..f9085fe9f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/ibm07v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P07/ibm07v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Entries
index 4d25ccca6a..4d25ccca6a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Repository
index cd4e508ce4..cd4e508ce4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.dtd
index 9ae6169f3d..9ae6169f3d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.xml
index 2f03d44e7b..2f03d44e7b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.dtd
index dc36b6b636..dc36b6b636 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.xml
index d303f398b5..d303f398b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.dtd
index 05a67aea57..05a67aea57 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.xml
index 2b2cc810ae..2b2cc810ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.ent
index 8d86d6a26e..8d86d6a26e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.xml
index 0d2a4cd04a..0d2a4cd04a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.ent
index 4391744380..4391744380 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.xml
index 75dfe9b86a..75dfe9b86a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.ent
index cf3f2d547d..cf3f2d547d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.xml
index d0d499daf9..d0d499daf9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.dtd
index df6388e385..df6388e385 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.xml
index a3667b9edc..a3667b9edc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.dtd
index a610166780..a610166780 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.xml
index 0ffa57ab27..0ffa57ab27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.dtd
index 44c2564a6c..44c2564a6c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.xml
index d955fe34cb..d955fe34cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.ent
index 4b2573ba5a..4b2573ba5a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.xml
index 2a19ceba0a..2a19ceba0a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.ent
index 8b9b9d9349..8b9b9d9349 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.xml
index 9819fc6d30..9819fc6d30 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.ent
index 3f4cc25e67..3f4cc25e67 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.xml
index d9d639e336..d9d639e336 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.dtd
index e40682d095..e40682d095 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.xml
index 3b79a6a083..3b79a6a083 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.dtd
index 6cc72c254f..6cc72c254f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.xml
index 23fdd40346..23fdd40346 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.dtd
index 8a1db69f4c..8a1db69f4c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.xml
index 12f6ee9275..12f6ee9275 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.ent
index 88d27c7455..88d27c7455 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.xml
index a1099c212a..a1099c212a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.ent
index 6733c33def..6733c33def 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.xml
index 87b3a34d56..87b3a34d56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.ent
index 2cfc23280c..2cfc23280c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.xml
index 9841115d91..9841115d91 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.dtd
index 8dfe8e4056..8dfe8e4056 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.xml
index 2ffe4f5b07..2ffe4f5b07 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.dtd
index fe003dffd5..fe003dffd5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.xml
index 875443b086..875443b086 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.dtd
index 0f94c7c779..0f94c7c779 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.xml
index 9df7ca0bcc..9df7ca0bcc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.ent
index 4d91f6ba0a..4d91f6ba0a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.xml
index f9865b08dd..f9865b08dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.ent
index 1588316354..1588316354 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.xml
index 218cff6621..218cff6621 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.ent
index 830bb2afc8..830bb2afc8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.xml
index 2191ab17e5..2191ab17e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.dtd
index eabbbc96c2..eabbbc96c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.xml
index cfa805ff12..cfa805ff12 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.dtd
index ca0ef5fe82..ca0ef5fe82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.xml
index 242ec38a24..242ec38a24 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.dtd
index 698fca1134..698fca1134 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.xml
index 9ccfe5f90a..9ccfe5f90a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.ent
index 5396b2f249..5396b2f249 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.xml
index a8fb35b6ed..a8fb35b6ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.ent
index 9554e5711f..9554e5711f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.xml
index 4b673abf56..4b673abf56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.ent
index 97822f7d7a..97822f7d7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.xml
index 37c9bdb222..37c9bdb222 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/ibm/xml-1.1/valid/P77/ibm77v30.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Entries
index ba86ca54fd..ba86ca54fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Repository
index 86eb60e7df..86eb60e7df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/japanese.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/japanese.xml
index 0fe6e589dc..0fe6e589dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/japanese.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/japanese.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-euc-jp.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-euc-jp.xml
index d7ee020a9f..d7ee020a9f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-euc-jp.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-euc-jp.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-iso-2022-jp.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-iso-2022-jp.xml
index 0a44566619..0a44566619 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-iso-2022-jp.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-iso-2022-jp.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-little-endian.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-little-endian.xml
index c12e1a1217..c12e1a1217 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-little-endian.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-little-endian.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-shift_jis.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-shift_jis.xml
index 2d167b6475..2d167b6475 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-shift_jis.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-shift_jis.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-16.xml
index e45d113fd6..e45d113fd6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-16.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-8.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-8.xml
index d7f4415e72..d7f4415e72 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-8.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/pr-xml-utf-8.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/spec.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/spec.dtd
index dbe4840654..dbe4840654 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/spec.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/spec.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.dtd
index 19aadcd4e7..19aadcd4e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.xml
index 887ab5ec30..887ab5ec30 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-euc-jp.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.dtd
index d69eea54b0..d69eea54b0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.xml
index 9a8e8545ac..9a8e8545ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-iso-2022-jp.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-little-endian.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-little-endian.xml
index 81f72e59e8..81f72e59e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-little-endian.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-little-endian.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.dtd
index 684c848e2f..684c848e2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.xml
index 742145560d..742145560d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-shift_jis.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.dtd
index 8259bc2566..8259bc2566 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.dtd
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.xml
index 6c8622aa43..6c8622aa43 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-16.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.dtd
index 8fa4368fd8..8fa4368fd8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.xml
index 497f572c0a..497f572c0a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/japanese/weekly-utf-8.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Entries
index 4bb12807a9..4bb12807a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Repository
index f5f017b129..f5f017b129 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/e2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/e2.xml
index 42a1842a53..42a1842a53 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/e2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/e2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/oasis.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/oasis.xml
index 63eb09d13e..63eb09d13e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/oasis.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/oasis.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail1.xml
index ac7935c852..ac7935c852 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail2.xml
index 74a0b57201..74a0b57201 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail3.xml
index c256e7b7c8..c256e7b7c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail4.xml
index b42e00dff1..b42e00dff1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass1.xml
index 961dfb3de0..961dfb3de0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass2.xml
index 4198326a3f..4198326a3f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass3.xml
index 5ae90852fa..5ae90852fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p01pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail1.xml
index cf8f3c2f1a..cf8f3c2f1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail1.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail10.xml
index c61b59a1e8..c61b59a1e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail10.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail11.xml
index 7d3e88a5a8..7d3e88a5a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail11.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail12.xml
index 3c44f45320..3c44f45320 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail12.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail13.xml
index e915948396..e915948396 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail13.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail14.xml
index 5033bbb5f2..5033bbb5f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail14.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail15.xml
index 59055bc246..59055bc246 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail15.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail16.xml
index 794e6084a8..794e6084a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail16.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail17.xml
index d8a1cbae60..d8a1cbae60 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail17.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail18.xml
index 74794cd64a..74794cd64a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail18.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail19.xml
index 410f1de8a5..410f1de8a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail19.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail2.xml
index 036e54577e..036e54577e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail2.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail20.xml
index 4d7b8fce62..4d7b8fce62 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail20.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail21.xml
index 5a57e743d6..5a57e743d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail21.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail22.xml
index c7c5445991..c7c5445991 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail22.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail23.xml
index ccc3c240e1..ccc3c240e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail23.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail24.xml
index 686a249db8..686a249db8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail24.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail25.xml
index 8797df6ced..8797df6ced 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail25.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail26.xml
index eea3791f4f..eea3791f4f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail26.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail27.xml
index 0fca1b8f5f..0fca1b8f5f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail27.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail28.xml
index c5f005d9e2..c5f005d9e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail28.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail29.xml
index 5fe733ec97..5fe733ec97 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail29.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail3.xml
index 932aabcea2..932aabcea2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail3.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail30.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail30.xml
index e64f3cbae2..e64f3cbae2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail30.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail30.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail31.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail31.xml
index 4ab577be0e..4ab577be0e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail31.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail31.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail4.xml
index 59d6113ea8..59d6113ea8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail4.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail5.xml
index 6d803b91f9..6d803b91f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail5.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail6.xml
index 766582990a..766582990a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail6.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail7.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail7.xml
index 3d56c297b8..3d56c297b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail7.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail7.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail8.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail8.xml
index e9d6fdf062..e9d6fdf062 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail8.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail8.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail9.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail9.xml
index 2bcea07d09..2bcea07d09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail9.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p02fail9.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail1.xml
index 7efa07a02b..7efa07a02b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail1.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail10.xml
index 13ec67bb36..13ec67bb36 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail11.xml
index 3675a2db37..3675a2db37 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail12.xml
index 14ad50f205..14ad50f205 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail13.xml
index ab56f252a8..ab56f252a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail14.xml
index 7b6d4abf89..7b6d4abf89 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail15.xml
index 36f03c88d0..36f03c88d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail16.xml
index 083312da41..083312da41 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail17.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail17.xml
index a9f6b3818f..a9f6b3818f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail17.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail17.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail18.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail18.xml
index 2a6848ac08..2a6848ac08 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail18.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail18.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail19.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail19.xml
index 7c45027aca..7c45027aca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail19.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail19.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail2.xml
index 7725d65941..7725d65941 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail20.xml
index d0d3283f9c..d0d3283f9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail21.xml
index a22c457683..a22c457683 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail22.xml
index 64020a41e8..64020a41e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail23.xml
index 972073ada7..972073ada7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail24.xml
index 256cb77fea..256cb77fea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail25.xml
index 3b1d4dfc48..3b1d4dfc48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail26.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail26.xml
index 5e106e781e..5e106e781e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail26.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail26.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail27.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail27.xml
index c0fac5227a..c0fac5227a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail27.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail27.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail28.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail28.xml
index 6260c8892d..6260c8892d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail28.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail28.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail29.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail29.xml
index 81c4d185ec..81c4d185ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail29.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail29.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail3.xml
index 3661497004..3661497004 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail4.xml
index ab56c5bd68..ab56c5bd68 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail5.xml
index 4699320d18..4699320d18 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail7.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail7.xml
index 8dd1cee186..8dd1cee186 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail7.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail7.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail8.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail8.xml
index 749a09ccd1..749a09ccd1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail8.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail8.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail9.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail9.xml
index 88c1d39d08..88c1d39d08 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail9.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03fail9.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03pass1.xml
index 291f23735d..291f23735d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p03pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail1.xml
index ef0cd005dd..ef0cd005dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail2.xml
index 2b0623c00e..2b0623c00e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail3.xml
index fdb8de602c..fdb8de602c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04pass1.xml
index 9601869d54..9601869d54 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p04pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail1.xml
index 8e1e68b976..8e1e68b976 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail2.xml
index 03424ba57a..03424ba57a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail3.xml
index b42dca0bfe..b42dca0bfe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail4.xml
index 2a0c6c1626..2a0c6c1626 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail5.xml
index 888fd18e13..888fd18e13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05pass1.xml
index bba8b489d8..bba8b489d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p05pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06fail1.xml
index 8e01f85595..8e01f85595 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06pass1.xml
index e86b06ba6d..e86b06ba6d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p06pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p07pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p07pass1.xml
index 5ebf6fa91c..5ebf6fa91c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p07pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p07pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail1.xml
index 8931688d0d..8931688d0d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail2.xml
index c0621d71d2..c0621d71d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08pass1.xml
index a218d1e959..a218d1e959 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p08pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.dtd
index f1121119bd..f1121119bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.xml
index 7bdda60f82..7bdda60f82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.dtd
index f0aa958566..f0aa958566 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.xml
index f8b1d14222..f8b1d14222 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail3.xml
index f6fbe63ce6..f6fbe63ce6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail4.xml
index 3ad9a69b93..3ad9a69b93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail5.xml
index efb5be2c8a..efb5be2c8a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.dtd
index 3834889b35..3834889b35 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.xml
index b10c9ed9be..b10c9ed9be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p09pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail1.xml
index 877b04083e..877b04083e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail2.xml
index 191b8eb78b..191b8eb78b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail3.xml
index 2f84129f28..2f84129f28 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10pass1.xml
index 101d89156e..101d89156e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p10pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail1.xml
index 50ff72fd62..50ff72fd62 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail2.xml
index d17912b411..d17912b411 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11pass1.xml
index f00024879d..f00024879d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p11pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail1.xml
index 5b6b2d6150..5b6b2d6150 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail2.xml
index ed0e3fb128..ed0e3fb128 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail3.xml
index a24fe8bc45..a24fe8bc45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail4.xml
index 9062d6cdc5..9062d6cdc5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail5.xml
index 3f3169c7e6..3f3169c7e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail6.xml
index d1825c3803..d1825c3803 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail7.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail7.xml
index cd2b67dda9..cd2b67dda9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail7.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12fail7.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12pass1.xml
index a31053e1e9..a31053e1e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p12pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail1.xml
index 359a8d6505..359a8d6505 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail2.xml
index e6f4d52d78..e6f4d52d78 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail3.xml
index 3fa6bc5791..3fa6bc5791 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14pass1.xml
index 7312edd99d..7312edd99d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p14pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail1.xml
index d3e444551b..d3e444551b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail2.xml
index ccb5560db2..ccb5560db2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail3.xml
index d4cb48f6b3..d4cb48f6b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15pass1.xml
index e61a0dd56d..e61a0dd56d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p15pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail1.xml
index 9e75452eec..9e75452eec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail2.xml
index c5fda86589..c5fda86589 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail3.xml
index 87dc351d0c..87dc351d0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass1.xml
index 45adbc081a..45adbc081a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass2.xml
index e3fc5235da..e3fc5235da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass3.xml
index b7b41ab975..b7b41ab975 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p16pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail1.xml
index 823e31adae..823e31adae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail2.xml
index 7909df9248..7909df9248 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail3.xml
index b79e04585b..b79e04585b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18pass1.xml
index 131914569b..131914569b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p18pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail1.xml
index b3908a64f9..b3908a64f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail2.xml
index 81a24fb2f2..81a24fb2f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass1.xml
index e79b34a129..e79b34a129 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass2.xml
index 97e725f5ea..97e725f5ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass3.xml
index f6da3d1b5c..f6da3d1b5c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass4.xml
index 2b3d9241f9..2b3d9241f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass5.xml
index a5dddbb996..a5dddbb996 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass6.xml
index ecb9de953a..ecb9de953a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p22pass6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail1.xml
index 41d8cbaa27..41d8cbaa27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail2.xml
index 7ce91fecbe..7ce91fecbe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail3.xml
index 470fc91e93..470fc91e93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail4.xml
index 7a403017af..7a403017af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail5.xml
index c532727c49..c532727c49 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass1.xml
index 97e725f5ea..97e725f5ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass2.xml
index 22545bc26e..22545bc26e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass3.xml
index a55ef5dacf..a55ef5dacf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass4.xml
index 220506d16e..220506d16e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p23pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail1.xml
index 381e7ef6c6..381e7ef6c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail2.xml
index 5b87b6cb1d..5b87b6cb1d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass1.xml
index 97e725f5ea..97e725f5ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass2.xml
index b8b485f091..b8b485f091 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass3.xml
index da4603bfce..da4603bfce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass4.xml
index 68eed03929..68eed03929 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p24pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25fail1.xml
index c39c0afaf3..c39c0afaf3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass1.xml
index 97e725f5ea..97e725f5ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass2.xml
index 2bc303bda4..2bc303bda4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p25pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail1.xml
index d96ad45b98..d96ad45b98 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail2.xml
index 6fcc7f4581..6fcc7f4581 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26pass1.xml
index 19cc9341e1..19cc9341e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p26pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27fail1.xml
index 01ee913a66..01ee913a66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass1.xml
index ce440fd1e6..ce440fd1e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass2.xml
index fd422a6561..fd422a6561 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass3.xml
index 9df310f2f1..9df310f2f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass4.xml
index 39438727ab..39438727ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p27pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28fail1.xml
index bac9e37870..bac9e37870 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass1.xml
index 8e3cba39ab..8e3cba39ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass2.xml
index 8e3cba39ab..8e3cba39ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass3.xml
index a51e7c4ccf..a51e7c4ccf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.dtd
index 370bb88a5b..370bb88a5b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.xml
index c464d87319..c464d87319 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.dtd
index 90980dde31..90980dde31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.xml
index ac100a4cb3..ac100a4cb3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p28pass5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29fail1.xml
index 75c549f218..75c549f218 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29pass1.xml
index ce8cc4bca3..ce8cc4bca3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p29pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.dtd
index fa4dcd7297..fa4dcd7297 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.xml
index 0e7cf9e245..0e7cf9e245 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.dtd
index 8c07c46d95..8c07c46d95 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.xml
index f3abf3a936..f3abf3a936 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.dtd
index 65ebd8e46b..65ebd8e46b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.xml
index abfd4f6fc7..abfd4f6fc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p30pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.dtd
index fe121d1f94..fe121d1f94 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.xml
index 471df835ba..471df835ba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.dtd
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.xml
index 0dd81ce683..0dd81ce683 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.dtd
index 3d619ab4f2..3d619ab4f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.xml
index d61300915f..d61300915f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p31pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail1.xml
index bdc7992d94..bdc7992d94 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail2.xml
index 1c1c23d915..1c1c23d915 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail3.xml
index 7c3415bf03..7c3415bf03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail4.xml
index 15ab0fdbf5..15ab0fdbf5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail5.xml
index be0f8e581f..be0f8e581f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass1.xml
index a55ef5dacf..a55ef5dacf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass2.xml
index 173a58144c..173a58144c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p32pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail1.xml
index e06f60eaeb..e06f60eaeb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail2.xml
index 44f3153796..44f3153796 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail3.xml
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail4.xml
index d0bf424922..d0bf424922 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail5.xml
index f5bb421de6..f5bb421de6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass1.xml
index ff29a91370..ff29a91370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass2.xml
index 5b47e63d1a..5b47e63d1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p39pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail1.xml
index 56b5da2084..56b5da2084 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail2.xml
index 8af5b22c71..8af5b22c71 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail3.xml
index 7da893b762..7da893b762 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail4.xml
index 47e3460674..47e3460674 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass1.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass2.xml
index eb9f65aff5..eb9f65aff5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass3.xml
index a26c13ee85..a26c13ee85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass4.xml
index c5670e0aaa..c5670e0aaa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p40pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail1.xml
index 15a5085546..15a5085546 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail2.xml
index 758ec17a4d..758ec17a4d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail3.xml
index d480150cf4..d480150cf4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass1.xml
index a26c13ee85..a26c13ee85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass2.xml
index 762a0a1005..762a0a1005 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p41pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail1.xml
index 2747d6bf47..2747d6bf47 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail2.xml
index 5afea96d50..5afea96d50 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail3.xml
index 18304688e6..18304688e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass1.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass2.xml
index e8153c5aae..e8153c5aae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p42pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail1.xml
index 1098246ce5..1098246ce5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail2.xml
index 82dd031d99..82dd031d99 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail3.xml
index 20ff835f5e..20ff835f5e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43pass1.xml
index b3991f1b11..b3991f1b11 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p43pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail1.xml
index a8c16c0d82..a8c16c0d82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail2.xml
index d433758dae..d433758dae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail3.xml
index 825345e13a..825345e13a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail4.xml
index 78d699ee1a..78d699ee1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail5.xml
index 1384b130f9..1384b130f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass1.xml
index ff29a91370..ff29a91370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass2.xml
index 1ea50d325c..1ea50d325c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass3.xml
index 3852c72fd7..3852c72fd7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass4.xml
index 86095d112a..86095d112a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass5.xml
index 0dd0659988..0dd0659988 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p44pass5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail1.xml
index 4f92984250..4f92984250 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail2.xml
index f61104fb50..f61104fb50 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail3.xml
index c8b30ef4b3..c8b30ef4b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail4.xml
index c988b2eedf..c988b2eedf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45pass1.xml
index 1589e836ee..1589e836ee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p45pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail1.xml
index b39d663ab7..b39d663ab7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail2.xml
index 9ad7be759a..9ad7be759a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail3.xml
index a64a2ae0a5..a64a2ae0a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail4.xml
index 32bc248dc6..32bc248dc6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail5.xml
index f423e4b855..f423e4b855 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail6.xml
index 2d1705fb23..2d1705fb23 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46fail6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46pass1.xml
index 3578370fa9..3578370fa9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p46pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail1.xml
index fd803ec7d6..fd803ec7d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail2.xml
index d9765c4880..d9765c4880 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail3.xml
index 96cf0d7fdd..96cf0d7fdd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail4.xml
index c44c1423dd..c44c1423dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47pass1.xml
index fe21251e89..fe21251e89 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p47pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail1.xml
index cf4bf9c2af..cf4bf9c2af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail2.xml
index 8d3bdfd779..8d3bdfd779 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48pass1.xml
index 0345d436e2..0345d436e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p48pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49fail1.xml
index 53ac58dfcc..53ac58dfcc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49pass1.xml
index eea612e0b2..eea612e0b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p49pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50fail1.xml
index 62ad5453d2..62ad5453d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50pass1.xml
index 3873b2d671..3873b2d671 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p50pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail1.xml
index f73af29fd7..f73af29fd7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail2.xml
index 3cb6f3f615..3cb6f3f615 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail3.xml
index a7f27079b7..a7f27079b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail4.xml
index 22cc3e0897..22cc3e0897 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail5.xml
index ed00d622a8..ed00d622a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail6.xml
index 78bc1f5c4b..78bc1f5c4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail7.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail7.xml
index 8e68029652..8e68029652 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail7.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51fail7.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51pass1.xml
index 4f4e64f45c..4f4e64f45c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p51pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail1.xml
index 335920f4e1..335920f4e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail2.xml
index 61d08b0498..61d08b0498 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52pass1.xml
index 9ee428409f..9ee428409f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p52pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail1.xml
index d4db095928..d4db095928 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail2.xml
index 59af7c76ed..59af7c76ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail3.xml
index 6d1a84621e..6d1a84621e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail4.xml
index 87fa394a65..87fa394a65 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail5.xml
index b58ace2a0c..b58ace2a0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53pass1.xml
index 362cf62c48..362cf62c48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p53pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54fail1.xml
index add01fed22..add01fed22 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54pass1.xml
index 23878614f8..23878614f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p54pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55fail1.xml
index e9dbed1b06..e9dbed1b06 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55pass1.xml
index 362cf62c48..362cf62c48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p55pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail1.xml
index c4ea6972f7..c4ea6972f7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail2.xml
index 98409e1377..98409e1377 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail3.xml
index 612800eeb7..612800eeb7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail4.xml
index e195dc6d25..e195dc6d25 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail5.xml
index 6430c5687a..6430c5687a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56pass1.xml
index b7bbad4171..b7bbad4171 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p56pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57fail1.xml
index 139c7e84b1..139c7e84b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57pass1.xml
index 89e12faeda..89e12faeda 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p57pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail1.xml
index aa3f5a2f11..aa3f5a2f11 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail2.xml
index ef548cd83a..ef548cd83a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail3.xml
index 1156eadacc..1156eadacc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail4.xml
index d876dc9d16..d876dc9d16 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail5.xml
index cd7b3525d2..cd7b3525d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail6.xml
index b4675843b2..b4675843b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail7.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail7.xml
index 99455f8f72..99455f8f72 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail7.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail7.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail8.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail8.xml
index 2bff43b238..2bff43b238 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail8.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58fail8.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58pass1.xml
index 8a62fb0c47..8a62fb0c47 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p58pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail1.xml
index b14517863b..b14517863b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail2.xml
index f347d9f117..f347d9f117 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail3.xml
index 2bf04d10e3..2bf04d10e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59pass1.xml
index d04d43b4e5..d04d43b4e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p59pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail1.xml
index 05c3811bb8..05c3811bb8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail2.xml
index e99ab7d6ff..e99ab7d6ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail3.xml
index a1a445a53d..a1a445a53d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail4.xml
index 9ebe2d6c8b..9ebe2d6c8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail5.xml
index 38df257dcd..38df257dcd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60pass1.xml
index 27939f2be8..27939f2be8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p60pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.dtd
index 5010f84733..5010f84733 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.xml
index b54a0c85a8..b54a0c85a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.dtd
index 5fdbf81178..5fdbf81178 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.xml
index 3405a1cf5f..3405a1cf5f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p61pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.dtd
index d3886bf6cb..d3886bf6cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.xml
index 65c9619054..65c9619054 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.dtd
index 50055d0aa3..50055d0aa3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.xml
index ce663557f2..ce663557f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.dtd
index a3c09fe100..a3c09fe100 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.xml
index 568a5fb5aa..568a5fb5aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p62pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.dtd
index b36c8b8e36..b36c8b8e36 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.xml
index 405db6825b..405db6825b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.dtd
index 3b52491127..3b52491127 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.xml
index dd86f4cd9b..dd86f4cd9b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.dtd
index f3bf927d7e..f3bf927d7e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.xml
index 1f1e752f03..1f1e752f03 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p63pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.dtd
index 7c779dfd9b..7c779dfd9b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.xml
index cd617c7b63..cd617c7b63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.dtd
index ef5196b9be..ef5196b9be 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.xml
index 1903de4b96..1903de4b96 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.dtd
index 63c2c586fe..63c2c586fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.xml
index 37d89932aa..37d89932aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p64pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail1.xml
index 6c527254f0..6c527254f0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail2.xml
index f3f95cd4d2..f3f95cd4d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail3.xml
index f6a5d583fe..f6a5d583fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail4.xml
index bfd802d949..bfd802d949 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail5.xml
index 71e8df0f1e..71e8df0f1e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail6.xml
index 05441677bd..05441677bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66fail6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66pass1.xml
index 4ccf4e7f51..4ccf4e7f51 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p66pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail1.xml
index f6b6e75465..f6b6e75465 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail2.xml
index 8734fdc6d8..8734fdc6d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail3.xml
index 1f088ef5f4..1f088ef5f4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68pass1.xml
index 0e70ff643e..0e70ff643e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p68pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail1.xml
index b6dba82097..b6dba82097 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail2.xml
index f390e05ac6..f390e05ac6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail3.xml
index 5e6deb198e..5e6deb198e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69pass1.xml
index 34b3efcba4..34b3efcba4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p69pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70fail1.xml
index 36b447aff4..36b447aff4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70pass1.xml
index 7525e0a188..7525e0a188 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p70pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail1.xml
index e0a10f1d18..e0a10f1d18 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail2.xml
index 4812ef09c1..4812ef09c1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail3.xml
index 06e40f26ed..06e40f26ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail4.xml
index b9ff089230..b9ff089230 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71pass1.xml
index 3b5f8b9553..3b5f8b9553 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p71pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail1.xml
index f54729831f..f54729831f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail2.xml
index c68589c9a4..c68589c9a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail3.xml
index 6207cfa738..6207cfa738 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail4.xml
index 9b8bc50327..9b8bc50327 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72pass1.xml
index d402513ec1..d402513ec1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p72pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail1.xml
index f6de0a9812..f6de0a9812 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail2.xml
index c3abb158b0..c3abb158b0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail3.xml
index 6e7a01ea87..6e7a01ea87 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail4.xml
index c349c76148..c349c76148 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail5.xml
index 58410f706c..58410f706c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73pass1.xml
index 36ba975f59..36ba975f59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p73pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail1.xml
index 241aa23a54..241aa23a54 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail2.xml
index 3958162719..3958162719 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail3.xml
index 3a5cd4a261..3a5cd4a261 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74pass1.xml
index f27f3f2d45..f27f3f2d45 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p74pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail1.xml
index b415bd73fd..b415bd73fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail2.xml
index bafb7d6a0b..bafb7d6a0b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail3.xml
index b10d40e165..b10d40e165 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail4.xml
index 228d2d9dd8..228d2d9dd8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail5.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail5.xml
index 51470434ed..51470434ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail6.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail6.xml
index da20c1b5cb..da20c1b5cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75fail6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75pass1.xml
index 9eecdd8324..9eecdd8324 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p75pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail1.xml
index cce3080be7..cce3080be7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail2.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail2.xml
index b00ad764cb..b00ad764cb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail3.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail3.xml
index 45e95920d8..45e95920d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail4.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail4.xml
index 02c5b12424..02c5b12424 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76fail4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76pass1.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76pass1.xml
index 7eea6b1eab..7eea6b1eab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76pass1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/oasis/p76pass1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/readme.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/readme.html
index 52fc123f20..52fc123f20 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/readme.html
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/readme.html
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Entries
index aef96e912f..aef96e912f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Repository
index 9b23a843fb..9b23a843fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/cxml.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/cxml.html
index 56dd479ed8..56dd479ed8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/cxml.html
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/cxml.html
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Entries
index 081cd425f2..081cd425f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Repository
index f180fae23c..f180fae23c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr01.xml
index cb2b4e675f..cb2b4e675f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr02.xml
index b9f2461ea5..b9f2461ea5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr03.xml
index b84d1f1fcb..b84d1f1fcb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr04.xml
index cbe62af83a..cbe62af83a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr05.xml
index d459fd924e..d459fd924e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr06.xml
index f652f335fb..f652f335fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr07.xml
index 57489b3cc0..57489b3cc0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr08.xml
index 3c59fc5416..3c59fc5416 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr09.xml
index f65f5820aa..f65f5820aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr10.xml
index 04ba586f1c..04ba586f1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr11.xml
index dcefb0596e..dcefb0596e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr12.xml
index 67b83f9ef8..67b83f9ef8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr13.xml
index a2c81f9e18..a2c81f9e18 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr14.xml
index 0205a0265f..0205a0265f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr15.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr15.xml
index 6ce369f35a..6ce369f35a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr16.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr16.xml
index 7b777802d6..7b777802d6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/attr16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd01.xml
index f348c16721..f348c16721 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd02.xml
index c4868f9ced..c4868f9ced 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd03.xml
index db87f99a3d..db87f99a3d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd06.xml
index 29de14cd7a..29de14cd7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/dtd06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el01.xml
index 7adb884f3b..7adb884f3b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el02.xml
index 46453f218f..46453f218f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el03.xml
index ec4fe96f40..ec4fe96f40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el04.xml
index 58a857998e..58a857998e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el05.xml
index 03355e2913..03355e2913 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el06.xml
index 8473a08a9c..8473a08a9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/el06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/empty.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/empty.xml
index 2fc2410ab4..2fc2410ab4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/empty.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/empty.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id01.xml
index b5dc3245bb..b5dc3245bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id02.xml
index e0e3576cef..e0e3576cef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id03.xml
index 7234bd6376..7234bd6376 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id04.xml
index 101f898600..101f898600 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id05.xml
index d7c6b7b173..d7c6b7b173 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id06.xml
index b260121831..b260121831 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id07.xml
index 959cec64d9..959cec64d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id08.xml
index fddeb7e881..fddeb7e881 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id09.xml
index 3f096b4835..3f096b4835 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/id09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa01.xml
index 714e544102..714e544102 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa02.xml
index c8f551cf39..c8f551cf39 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa04.xml
index 947de49123..947de49123 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa05.xml
index c0bcd0e2e2..c0bcd0e2e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa06.xml
index 75e6b47cea..75e6b47cea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa07.xml
index df197543e3..df197543e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa08.xml
index e07ac5958a..e07ac5958a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa09.xml
index 3fec08820c..3fec08820c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa10.xml
index 467e6b8d57..467e6b8d57 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa11.xml
index ad259c4c94..ad259c4c94 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa12.xml
index 9cd4b879ac..9cd4b879ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa13.xml
index 5a3a8cfcc5..5a3a8cfcc5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa14.xml
index f3b3ee2092..f3b3ee2092 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/not-sa14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional01.xml
index 0d03c0f1cd..0d03c0f1cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional02.xml
index 5f66c66d27..5f66c66d27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional03.xml
index 35c7ad9e4a..35c7ad9e4a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional04.xml
index 8614e248e7..8614e248e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional05.xml
index 5b6669afce..5b6669afce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional06.xml
index 44d815108a..44d815108a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional07.xml
index 8745675957..8745675957 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional08.xml
index fb6c545e17..fb6c545e17 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional09.xml
index 91bb7f0fde..91bb7f0fde 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional10.xml
index 3a9703dd3d..3a9703dd3d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional11.xml
index 7aa6a089e1..7aa6a089e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional12.xml
index 779c5e2623..779c5e2623 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional13.xml
index 5354404604..5354404604 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional14.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional14.xml
index b6588dfe8c..b6588dfe8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional20.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional20.xml
index 24f454ed4c..24f454ed4c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional21.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional21.xml
index af57ff3d47..af57ff3d47 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional22.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional22.xml
index ae9a33c572..ae9a33c572 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional23.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional23.xml
index 75edc24665..75edc24665 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional23.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional23.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional24.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional24.xml
index c3233098ef..c3233098ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional24.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional24.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional25.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional25.xml
index 1b0eeb84a1..1b0eeb84a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional25.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/optional25.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required00.xml
index e673fdc68b..e673fdc68b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required01.xml
index 290d369c01..290d369c01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required02.xml
index 480f62af13..480f62af13 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/required02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/root.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/root.xml
index 60896573a9..60896573a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/root.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/root.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16b.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16b.xml
index 52c7e2d18c..52c7e2d18c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16b.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16b.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16l.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16l.xml
index 2cad40a3c7..2cad40a3c7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16l.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/invalid/utf16l.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Entries
index 174092983f..174092983f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Repository
index 95984c5f42..95984c5f42 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist01.xml
index 9b25d73aa1..9b25d73aa1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist02.xml
index 65405ca701..65405ca701 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist03.xml
index a7174c9146..a7174c9146 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist04.xml
index f45d656f63..f45d656f63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist05.xml
index 1705e80db2..1705e80db2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist06.xml
index 84444b4c9f..84444b4c9f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist07.xml
index 3dd94e5926..3dd94e5926 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist08.xml
index c9e54c6a53..c9e54c6a53 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist09.xml
index a1faf84494..a1faf84494 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist10.xml
index d690200c65..d690200c65 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist11.xml
index 67de117714..67de117714 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/attlist11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond.dtd
index 4b43ef7a05..4b43ef7a05 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond01.xml
index 5028d46e99..5028d46e99 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond02.xml
index ce4e191c32..ce4e191c32 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/cond02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content01.xml
index 85c27dc874..85c27dc874 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content02.xml
index 1086148a87..1086148a87 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content03.xml
index c4fdff1f81..c4fdff1f81 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/content03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.ent
index 65059fdc85..65059fdc85 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.xml
index ee57cb4d80..ee57cb4d80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/decl01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd00.xml
index 5c3e9aa236..5c3e9aa236 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd01.xml
index 3af805c7b1..3af805c7b1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd02.xml
index da2c6394fc..da2c6394fc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd03.xml
index 6f5234a955..6f5234a955 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd04.xml
index 4acb0c2fee..4acb0c2fee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd05.xml
index 2d4c8cf889..2d4c8cf889 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.dtd
index 7acb91f11f..7acb91f11f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.xml
index 921ed63a4e..921ed63a4e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/dtd07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element00.xml
index 4d7a0110ff..4d7a0110ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element01.xml
index c1796ccbdc..c1796ccbdc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element02.xml
index da038ddae6..da038ddae6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element03.xml
index eb0c93ad49..eb0c93ad49 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element04.xml
index 7f639c22fb..7f639c22fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/element04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding01.xml
index 5ef3915a0c..5ef3915a0c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding02.xml
index b6ebbb4a8e..b6ebbb4a8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding03.xml
index be6cc1a511..be6cc1a511 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding04.xml
index dbecbcdd11..dbecbcdd11 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding05.xml
index 94edbfbc27..94edbfbc27 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding06.xml
index ee1a699e34..ee1a699e34 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding07.xml
index cd225c577e..cd225c577e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/encoding07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/not-sa03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/not-sa03.xml
index 6f1fb4ba92..6f1fb4ba92 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/not-sa03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/not-sa03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pi.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pi.xml
index c50a0f088c..c50a0f088c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pi.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pi.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid01.xml
index 4df57fd534..4df57fd534 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid02.xml
index c1a0da162c..c1a0da162c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid03.xml
index 55b074c9af..55b074c9af 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid04.xml
index fd268aa07a..fd268aa07a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid05.xml
index a0e8bdd94a..a0e8bdd94a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/pubid05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml01.xml
index 83fa98ccf1..83fa98ccf1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml02.xml
index a22d74086a..a22d74086a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml03.xml
index 78b4aa8e9c..78b4aa8e9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml04.xml
index 36f863c917..36f863c917 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml05.xml
index 90217955e7..90217955e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml06.xml
index 8ce6b55680..8ce6b55680 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml07.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml07.xml
index 4622b83ba5..4622b83ba5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml07.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml07.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml08.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml08.xml
index 5cf457c078..5cf457c078 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml08.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml08.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml09.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml09.xml
index d943ce9a9f..d943ce9a9f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml09.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml09.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml10.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml10.xml
index ba03a03915..ba03a03915 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml11.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml11.xml
index 6d8e4a2794..6d8e4a2794 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml12.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml12.xml
index e2f0b2e57c..e2f0b2e57c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml13.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml13.xml
index 97e9702eda..97e9702eda 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/sgml13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/uri01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/uri01.xml
index c15ceb4960..c15ceb4960 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/uri01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/not-wf/uri01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-error.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-error.xml
index 31656dc1b8..31656dc1b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-error.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-error.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-invalid.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-invalid.xml
index 25464058df..25464058df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-invalid.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-invalid.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-not-wf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-not-wf.xml
index 1203bc024f..1203bc024f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-not-wf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-not-wf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-valid.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-valid.xml
index dceefe110d..dceefe110d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-valid.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/sun-valid.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Entries
index cecb2c4024..cecb2c4024 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Repository
index c0debafe50..c0debafe50 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd00.xml
index d92c44bda4..d92c44bda4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd01.xml
index b0d6ae4ebd..b0d6ae4ebd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtd01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtdtest.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtdtest.dtd
index 56539d0da4..56539d0da4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtdtest.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/dtdtest.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/element.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/element.xml
index 9f02030aea..9f02030aea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/element.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/element.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.ent
index c75c62943c..c75c62943c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.xml
index d826da98a5..d826da98a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext02.xml
index af5440b7fd..af5440b7fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/ext02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa01.xml
index 536cb4b06e..536cb4b06e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa02.xml
index bd938b034e..bd938b034e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa03.xml
index 2a13a005ed..2a13a005ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa04.xml
index d4e12aa6e6..d4e12aa6e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/not-sa04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.dtd
index 23726851aa..23726851aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.xml
index 4b8bc10e31..4b8bc10e31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/notation01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/null.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/null.ent
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/null.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/null.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/optional.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/optional.xml
index fe8d482510..fe8d482510 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/optional.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/optional.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Entries
index 469e0ed46a..469e0ed46a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Repository
index b244dd58f6..b244dd58f6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd00.xml
index ef2fc53c2f..ef2fc53c2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd01.xml
index ef2fc53c2f..ef2fc53c2f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/dtd01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/element.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/element.xml
index f1aa64dbab..f1aa64dbab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/element.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/element.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext01.xml
index a8d213463d..a8d213463d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext02.xml
index 90718f8e55..90718f8e55 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/ext02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa01.xml
index 12ce349ae2..12ce349ae2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa02.xml
index 0f31afb891..0f31afb891 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa03.xml
index 4eba2aa55e..4eba2aa55e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa04.xml
index 70e09f6f20..70e09f6f20 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/not-sa04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/notation01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/notation01.xml
index cbb7634d9a..cbb7634d9a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/notation01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/notation01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/optional.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/optional.xml
index d131489085..d131489085 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/optional.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/optional.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe00.xml
index 7d48bbe463..7d48bbe463 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe02.xml
index 6bc066028e..6bc066028e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe03.xml
index eed428aa66..eed428aa66 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/pe03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/required00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/required00.xml
index f06dcb9f2c..f06dcb9f2c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/required00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/required00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa01.xml
index 188f8ef629..188f8ef629 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa02.xml
index 10e4c648d5..10e4c648d5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa03.xml
index 4eba2aa55e..4eba2aa55e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa04.xml
index 70e09f6f20..70e09f6f20 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa05.xml
index 931120d7fe..931120d7fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sa05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sgml01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sgml01.xml
index 8c31029f02..8c31029f02 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sgml01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/sgml01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang01.xml
index 9752885abe..9752885abe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang02.xml
index cdf492e87c..cdf492e87c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang03.xml
index d9d68a44ce..d9d68a44ce 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang04.xml
index cda324b178..cda324b178 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang05.xml
index fa3d57a4db..fa3d57a4db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang06.xml
index 451e36b0a1..451e36b0a1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/out/v-lang06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.dtd
index 547457cc4b..547457cc4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.xml
index af706647c8..af706647c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.dtd
index 59997b71eb..59997b71eb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.ent
index 3f30827c7e..3f30827c7e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.xml
index 8003bbfa99..8003bbfa99 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe02.xml
index 44edb62dd6..44edb62dd6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe03.xml
index 407bd1c5fe..407bd1c5fe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/pe03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/required00.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/required00.xml
index 4c63d36042..4c63d36042 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/required00.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/required00.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa.dtd
index a0733eb88c..a0733eb88c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa01.xml
index 15ed49579f..15ed49579f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa02.xml
index 7a416601fa..7a416601fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa03.xml
index 194cb82457..194cb82457 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa04.xml
index 79df352fa8..79df352fa8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa05.xml
index 45180bca63..45180bca63 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sa05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sgml01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sgml01.xml
index 6cfdfee07d..6cfdfee07d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sgml01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/sgml01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang01.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang01.xml
index 4490f77530..4490f77530 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang01.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang01.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang02.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang02.xml
index 7d2b538921..7d2b538921 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang02.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang02.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang03.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang03.xml
index 678f3cc687..678f3cc687 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang03.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang03.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang04.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang04.xml
index 6f7cb4a8da..6f7cb4a8da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang04.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang04.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang05.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang05.xml
index 135b9c887a..135b9c887a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang05.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang05.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang06.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang06.xml
index dc64fae993..dc64fae993 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang06.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/sun/valid/v-lang06.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/testcases.dtd b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/testcases.dtd
index ae352379a7..ae352379a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/testcases.dtd
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/testcases.dtd
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.htm b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.htm
index c85c3d24c3..c85c3d24c3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.htm
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.htm
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.xml
index 0b4986936e..0b4986936e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20010315.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20020521.htm b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20020521.htm
index 44d28564e0..44d28564e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20020521.htm
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20020521.htm
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20031030.htm b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20031030.htm
index 5b83c2a327..5b83c2a327 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20031030.htm
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf-20031030.htm
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf.xml
index 6523e3f16d..6523e3f16d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconf.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconf.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.msxsl b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.msxsl
index f33e647d25..f33e647d25 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.msxsl
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.msxsl
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.xsl b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.xsl
index 8a7e54c6dd..8a7e54c6dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.xsl
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmlconformance.xsl
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries
index 56dc3e5713..56dc3e5713 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository
index e4b881877e..e4b881877e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html
index 2ba0edf6c6..2ba0edf6c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/canonxml.html
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent
index 4cb848b438..4cb848b438 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml
index 5a3a96d1ab..5a3a96d1ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent
index 85e16474a6..85e16474a6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.xml
index 383553d24f..383553d24f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent
index 116ca79657..116ca79657 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.xml
index 2f14e839e2..2f14e839e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries
index 04159c511f..04159c511f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository
index 3df0ffe37c..3df0ffe37c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent
index 26f2d8beb2..26f2d8beb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml
index b639f2551c..b639f2551c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries
index 104a6d8a5a..104a6d8a5a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository
index f86b20a1d9..f86b20a1d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries
index 9692ca4b59..9692ca4b59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository
index 54370965bc..54370965bc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/invalid/not-sa/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries
index 1784810501..1784810501 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log
index 818f7c93e6..818f7c93e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Entries.Log
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository
index 18854d8755..18854d8755 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent
index 378a2074b7..378a2074b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml
index aa624cbe71..aa624cbe71 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent
index 2cd184a213..2cd184a213 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml
index 9eaf91724f..9eaf91724f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent
index ac292ee2f3..ac292ee2f3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml
index bb60b663ef..bb60b663ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries
index 85dc74e395..85dc74e395 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository
index 702914cf3a..702914cf3a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/ext-sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent
index 00096e572e..00096e572e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml
index 36188451ae..36188451ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml
index dd73174135..dd73174135 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent
index abf1b1a35e..abf1b1a35e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.xml
index dd01f41126..dd01f41126 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent
index 552e4f520a..552e4f520a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.xml
index 20cdf6d0e5..20cdf6d0e5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent
index 9a369cef12..9a369cef12 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml
index 383553d24f..383553d24f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent
index 771daf1915..771daf1915 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml
index 2f14e839e2..2f14e839e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent
index 9e9866d2ad..9e9866d2ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml
index 38897e34ea..38897e34ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent
index f8b1cd3dad..f8b1cd3dad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml
index 54351009cd..54351009cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent
index f70eaea9c4..f70eaea9c4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml
index 9aa72898c2..9aa72898c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent
index 54f3c821b8..54f3c821b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml
index 963e4c2f75..963e4c2f75 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent
index aae4cc2929..aae4cc2929 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml
index dd40c958c3..dd40c958c3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries
index bfc0687397..bfc0687397 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository
index 031f3dedd2..031f3dedd2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/not-sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml
index d33ec68dcd..d33ec68dcd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml
index 0a64d52428..0a64d52428 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml
index e0b8bae4a4..e0b8bae4a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml
index e85bc96e56..e85bc96e56 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml
index 7cd44ef10c..7cd44ef10c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml
index 8594c35cc7..8594c35cc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml
index 286756fdd5..286756fdd5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml
index 29ef40306b..29ef40306b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml
index 8e3ff7de10..8e3ff7de10 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml
index a6790846c9..a6790846c9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml
index 57eaf9fc48..57eaf9fc48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml
index 1b2539ffa6..1b2539ffa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml
index 3540df9143..3540df9143 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/014.xml
index a613115609..a613115609 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml
index f2baf947b5..f2baf947b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml
index 22d4b2e265..22d4b2e265 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml
index a76f5929e9..a76f5929e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml
index 66e204acc4..66e204acc4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml
index b835c2d752..b835c2d752 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml
index b30cfcfc10..b30cfcfc10 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml
index 1bfa84aa64..1bfa84aa64 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml
index 44c803bf1b..44c803bf1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml
index b877ae2a6b..b877ae2a6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml
index cf68f2c073..cf68f2c073 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml
index 6cba95cd78..6cba95cd78 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml
index 347984fa73..347984fa73 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml
index cfafaf0d70..cfafaf0d70 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/028.xml
index 522714993a..522714993a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/029.xml
index 9a8008bc9f..9a8008bc9f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/030.xml
index 25861fa19b..25861fa19b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/031.xml
index f946536f39..f946536f39 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/032.xml
index 75952017ca..75952017ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml
index afd2328402..afd2328402 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml
index d74a77719b..d74a77719b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml
index e1fc920522..e1fc920522 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml
index b8ecb21ba1..b8ecb21ba1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml
index 2e02662926..2e02662926 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml
index 68b2803f82..68b2803f82 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/038.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml
index 80429e3e40..80429e3e40 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/039.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml
index dc8ba5a434..dc8ba5a434 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml
index 30bcdd6bfe..30bcdd6bfe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/041.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml
index 4ae50efc7b..4ae50efc7b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/042.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml
index 41824eee4b..41824eee4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml
index 3fc232dc37..3fc232dc37 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml
index 00c10f00bf..00c10f00bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml
index 265cb15301..265cb15301 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml
index d18a4a4440..d18a4a4440 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/047.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml
index 67419c1ed5..67419c1ed5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/048.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml
index 3cf0e79422..3cf0e79422 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/049.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/050.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml
index b52df12cc4..b52df12cc4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/051.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml
index 8283895990..8283895990 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/052.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml
index 9d7f36920f..9d7f36920f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/053.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml
index eda553c6d3..eda553c6d3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/054.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml
index cbb3683a9d..cbb3683a9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/055.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml
index a681684c58..a681684c58 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/056.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml
index 848d347120..848d347120 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/057.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml
index daba266af2..daba266af2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/058.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml
index 316083dc25..316083dc25 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/059.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml
index 9a610fd38f..9a610fd38f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/060.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml
index 59181e706f..59181e706f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/061.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml
index e62e9cd370..e62e9cd370 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/062.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml
index 98675b9040..98675b9040 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/063.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml
index 3888c46b8b..3888c46b8b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/064.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml
index da9cafd137..da9cafd137 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/065.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml
index 9c09eb4e5d..9c09eb4e5d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/066.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml
index 7e0809bd34..7e0809bd34 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/067.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml
index 53a80a83a8..53a80a83a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/068.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml
index 6f891dd5e1..6f891dd5e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/069.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml
index faf4b0ae4c..faf4b0ae4c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/070.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml
index 5bd3908968..5bd3908968 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/071.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml
index 743ba79429..743ba79429 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/072.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml
index 2578af42ec..2578af42ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/073.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml
index f8abaeb22c..f8abaeb22c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/074.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml
index d3dbf50ed6..d3dbf50ed6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/075.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml
index 60546720e7..60546720e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/076.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml
index f8ac23a5a2..f8ac23a5a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/077.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml
index 446cd85ef9..446cd85ef9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/078.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml
index da016fd3b2..da016fd3b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/079.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml
index fa4b9e428d..fa4b9e428d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/080.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml
index d676100e8a..d676100e8a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/081.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml
index 3217d6f8b4..3217d6f8b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/082.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml
index 469d43fd42..469d43fd42 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/083.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml
index abbbcdea69..abbbcdea69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/084.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml
index ac0aeca3e4..ac0aeca3e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/085.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml
index df6adfd884..df6adfd884 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/086.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml
index ed49492a7a..ed49492a7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/087.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml
index da0a68c401..da0a68c401 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/088.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/089.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/089.xml
index 0c6cf404c2..0c6cf404c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/089.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/089.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml
index 3fb72f3cc0..3fb72f3cc0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/090.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml
index a61d0914f8..a61d0914f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/091.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml
index be5266dada..be5266dada 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/092.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml
index 4af61bc645..4af61bc645 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/093.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml
index bdec7a4660..bdec7a4660 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/094.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml
index 090b8b4eec..090b8b4eec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/095.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml
index d806c3b952..d806c3b952 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/096.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml
index d4def544b0..d4def544b0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/097.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml
index 9798496aa3..9798496aa3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/098.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml
index d5be08eff0..d5be08eff0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/099.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml
index 51e06231c2..51e06231c2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/100.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml
index afa5a455fc..afa5a455fc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/101.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml
index 8734adaa6e..8734adaa6e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/102.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml
index 6c4716798f..6c4716798f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/103.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml
index dd57396239..dd57396239 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/104.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml
index 809e705870..809e705870 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/105.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml
index d32319ef09..d32319ef09 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/106.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml
index 3dfd8200e2..3dfd8200e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/107.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml
index af5cf50d48..af5cf50d48 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/108.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml
index 5afc03e8db..5afc03e8db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/109.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml
index cf54ebe5c0..cf54ebe5c0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/110.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml
index 84a469f5d1..84a469f5d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/111.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml
index 0c5c1a4341..0c5c1a4341 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/112.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml
index 04fc9d2318..04fc9d2318 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/113.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml
index 1261ee49e1..1261ee49e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/114.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml
index f111dbe153..f111dbe153 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/115.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml
index 84bb762fdf..84bb762fdf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/116.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml
index e4a5e572ef..e4a5e572ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/117.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml
index 494d53d208..494d53d208 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/118.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml
index aefaa44a1c..aefaa44a1c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/119.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml
index b7d6ff9ce9..b7d6ff9ce9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/120.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml
index 2b4adcc6b4..2b4adcc6b4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/121.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml
index ef0b057cee..ef0b057cee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/122.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml
index 06d65f045b..06d65f045b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/123.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml
index 3bbe0f91a6..3bbe0f91a6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/124.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml
index 5f9c22c0c6..5f9c22c0c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/125.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml
index 13e74d6d5e..13e74d6d5e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/126.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml
index a379b9e539..a379b9e539 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/127.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml
index dd706bb21f..dd706bb21f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/128.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml
index d4e4461a6d..d4e4461a6d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/129.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml
index fa7be641f1..fa7be641f1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/130.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml
index f34ed453b5..f34ed453b5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/131.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml
index ab6cc416e9..ab6cc416e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/132.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml
index d2aa604e9f..d2aa604e9f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/133.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml
index c8919c5ef8..c8919c5ef8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/134.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml
index e639e8b6ea..e639e8b6ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/135.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml
index 499e68bcea..499e68bcea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/136.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml
index 723b77f776..723b77f776 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/137.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml
index 16934cc88e..16934cc88e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/138.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml
index 34df52ed93..34df52ed93 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/139.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml
index 467d5ed301..467d5ed301 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/140.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml
index 409d0a7568..409d0a7568 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/141.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml
index 20e88f88b3..20e88f88b3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/142.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml
index 0ee1c614f8..0ee1c614f8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/143.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml
index 437548c0ba..437548c0ba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/144.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml
index 71b187a933..71b187a933 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/145.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml
index d0bfbca723..d0bfbca723 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/146.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml
index 3b6145615f..3b6145615f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/147.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml
index 774dce18fd..774dce18fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/148.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml
index 725eea0dec..725eea0dec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/149.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml
index 44f6b6df92..44f6b6df92 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/150.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml
index fecc4f24e3..fecc4f24e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/151.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml
index b5c5cb26ae..b5c5cb26ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/152.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml
index 5e2973707e..5e2973707e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/153.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml
index 96e01d63f5..96e01d63f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/154.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml
index 4f16d0f163..4f16d0f163 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/155.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml
index c6d93fd312..c6d93fd312 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/156.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml
index 2f058dac3e..2f058dac3e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/157.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml
index 32b90b722d..32b90b722d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/158.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml
index 066244cb91..066244cb91 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/159.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml
index 85424acb1b..85424acb1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/160.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml
index 4f8a5b7b6b..4f8a5b7b6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/161.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml
index efae4b190e..efae4b190e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/162.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml
index e14fb76c31..e14fb76c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/163.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml
index 98dd267c21..98dd267c21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/164.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml
index 36c04618ef..36c04618ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/165.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml
index ee2ce28630..ee2ce28630 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml
index 9bdc6c1278..9bdc6c1278 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/167.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml
index f83221a3ad..f83221a3ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/168.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml
index 310029b976..310029b976 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/169.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml
index cfa0aee155..cfa0aee155 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/170.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml
index 48b5c7d3bc..48b5c7d3bc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/171.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml
index 6651d4d299..6651d4d299 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/172.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml
index f9f9f42023..f9f9f42023 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/173.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml
index 42bef861c6..42bef861c6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/174.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml
index 69912f36d2..69912f36d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/175.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml
index 9c8e2e47d1..9c8e2e47d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/176.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml
index 6bc8228879..6bc8228879 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/177.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml
index e8f2d18eed..e8f2d18eed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/178.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/179.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/179.xml
index e8f1f419db..e8f1f419db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/179.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/179.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml
index 569d553a8c..569d553a8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/180.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml
index 4341d99ee2..4341d99ee2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/181.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml
index 920f431666..920f431666 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/182.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml
index 7a5677de54..7a5677de54 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/183.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml
index 103384a06e..103384a06e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/184.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent
index e557426454..e557426454 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml
index 81d5ef4bcd..81d5ef4bcd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/185.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml
index 85b26ec0a2..85b26ec0a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/186.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries
index aef1bd67df..aef1bd67df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository
index ede48b429c..ede48b429c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/null.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html
index fc7310c68e..fc7310c68e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/readme.html
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries
index 1784810501..1784810501 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log
index 818f7c93e6..818f7c93e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Entries.Log
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository
index 48324028e6..48324028e6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent
index 1cff3fd44f..1cff3fd44f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml
index 147d70d2d1..147d70d2d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent
index 45f6d8e74e..45f6d8e74e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml
index 9eaf91724f..9eaf91724f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml
index bb60b663ef..bb60b663ef 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent
index 3436f20001..3436f20001 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml
index 074498ce19..074498ce19 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent
index c6e97f821f..c6e97f821f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml
index 82a6228205..82a6228205 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent
index 4df2f0c2ac..4df2f0c2ac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml
index 0b326cad4c..0b326cad4c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent
index ab1d696dd7..ab1d696dd7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.ent
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml
index 825e3b286a..825e3b286a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent
index c6ca61f9c8..c6ca61f9c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.ent
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml
index 3c001b6cb3..3c001b6cb3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent
index 67c3297611..67c3297611 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml
index a5866e5a77..a5866e5a77 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml
index 418e9b0141..418e9b0141 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent
index b19be3a497..b19be3a497 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml
index 2ceefa1d21..2ceefa1d21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent
index 8eb1fb9c41..8eb1fb9c41 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml
index 5a8f009b4a..5a8f009b4a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent
index 7f25c502dd..7f25c502dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml
index 7717c97afe..7717c97afe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent
index 470fd6fe44..470fd6fe44 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.ent
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml
index 816fd1e796..816fd1e796 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries
index 33a4a0da95..33a4a0da95 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository
index 3753e3a5c9..3753e3a5c9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml
index 0a7acf8ebe..0a7acf8ebe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml
index d4a445e555..d4a445e555 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml
index 0a7acf8ebe..0a7acf8ebe 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml
index 6e293aa70e..6e293aa70e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml
index 04b6fc82ee..04b6fc82ee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml
index ab2a74c9d1..ab2a74c9d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml
index ab2a74c9d1..ab2a74c9d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml
index a79dff65fd..a79dff65fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml
index bf275adb2b..bf275adb2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml
index 81a251cb4b..81a251cb4b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml
index 524d94ee6b..524d94ee6b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml
index 71c6dc3e8e..71c6dc3e8e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries
index 577936756f..577936756f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository
index 889051e1ae..889051e1ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/ext-sa/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml
index 2d6f41a137..2d6f41a137 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent
index 67c3297611..67c3297611 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml
index 023fce8499..023fce8499 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent
index 931f3ad6d8..931f3ad6d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-1.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003-2.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml
index 63a5e8bdfc..63a5e8bdfc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent
index 40f7ff58a2..40f7ff58a2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-1.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent
index 61def75cb7..61def75cb7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004-2.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml
index adc9201496..adc9201496 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent
index ade9599032..ade9599032 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-1.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent
index bef50b1f38..bef50b1f38 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005-2.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml
index 6bd44cfee0..6bd44cfee0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent
index 8f305a82bd..8f305a82bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml
index eb80bb7409..eb80bb7409 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent
index fbf4ca4947..fbf4ca4947 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml
index 38897e34ea..38897e34ea 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent
index fbf4ca4947..fbf4ca4947 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml
index bf777a7ff2..bf777a7ff2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent
index fbf4ca4947..fbf4ca4947 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml
index c17562fe68..c17562fe68 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent
index 52a28f5deb..52a28f5deb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml
index 2786b328f3..2786b328f3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent
index fbf4ca4947..fbf4ca4947 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml
index 03b482bbb6..03b482bbb6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent
index 7e372e65e9..7e372e65e9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml
index 1967edbba7..1967edbba7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent
index a3691d9f08..a3691d9f08 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml
index cf44f2600a..cf44f2600a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent
index 6eaf779329..6eaf779329 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml
index bd08502489..bd08502489 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent
index 00d2f30e1d..00d2f30e1d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml
index e04e75ffca..e04e75ffca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent
index bf77ef8336..bf77ef8336 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml
index 4ccf4af350..4ccf4af350 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent
index ffd9adde61..ffd9adde61 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml
index 7fe18f4c7a..7fe18f4c7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent
index 2d46f76fc3..2d46f76fc3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml
index 31e90f2405..31e90f2405 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent
index d18201a98b..d18201a98b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml
index b7a18faba0..b7a18faba0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent
index 815291c6d2..815291c6d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml
index d70892f7ad..d70892f7ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent
index 9f8f2afd2b..9f8f2afd2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml
index 70c28730db..70c28730db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent
index e3268819f7..e3268819f7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml
index 1c2484b70b..1c2484b70b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent
index aa6d0eccac..aa6d0eccac 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml
index 96e1ecb61b..96e1ecb61b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent
index 389d259eb1..389d259eb1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml
index 8fdbc14c47..8fdbc14c47 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent
index bdc93af639..bdc93af639 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml
index 7b109c0913..7b109c0913 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent
index 712cce3700..712cce3700 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml
index d0c8c7abb5..d0c8c7abb5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent
index ac249d7b2c..ac249d7b2c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml
index 50e5248cbf..50e5248cbf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent
index df94df5560..df94df5560 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml
index 07e226c1d7..07e226c1d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent
index e3864460df..e3864460df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml
index 01fc2be4ca..01fc2be4ca 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent
index f7f94ab152..f7f94ab152 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-1.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent
index bef50b1f38..bef50b1f38 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031-2.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml
index c3fe5fca71..c3fe5fca71 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries
index 65ee741d6c..65ee741d6c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository
index b16565a893..b16565a893 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml
index bdc39e2224..bdc39e2224 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml
index d07627d7a3..d07627d7a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml
index 7293fb63dc..7293fb63dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml
index 131a32fe69..131a32fe69 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml
index eb3f9674e8..eb3f9674e8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml
index 71c02026e4..71c02026e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml
index 7ac8b2b89d..7ac8b2b89d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml
index 03a6c3f9cd..03a6c3f9cd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries
index 5c3b4ac876..5c3b4ac876 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository
index 221d7aeedf..221d7aeedf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/not-sa/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml
index 7fbef49502..7fbef49502 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml
index 2e3f1d81dd..2e3f1d81dd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml
index c841b81784..c841b81784 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml
index a9c5756933..a9c5756933 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml
index b069efe727..b069efe727 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml
index 39a346342f..39a346342f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml
index cc3dc53166..cc3dc53166 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml
index b3370eb1cc..b3370eb1cc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml
index 0fa183eccf..0fa183eccf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml
index eb64d18590..eb64d18590 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml
index 4cac44b4e4..4cac44b4e4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml
index 6ce2a3eae2..6ce2a3eae2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml
index 2f4aae4e28..2f4aae4e28 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml
index 47f1f723e3..47f1f723e3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml
index 861df8a610..861df8a610 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml
index 66b1973c5d..66b1973c5d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml
index 827ba963bf..827ba963bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml
index 4570903fee..4570903fee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml
index 3e6b74cbf2..3e6b74cbf2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml
index f749551a1b..f749551a1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml
index 13dda8c8a5..13dda8c8a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml
index 41d300e950..41d300e950 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml
index 3837b831ad..3837b831ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml
index b0655c634c..b0655c634c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml
index ed01f36d89..ed01f36d89 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml
index 1ba033c1a7..1ba033c1a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml
index ee02439051..ee02439051 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml
index 3d95747913..3d95747913 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml
index 909f6ff712..909f6ff712 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml
index 3a7ddaa716..3a7ddaa716 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml
index a58e05867f..a58e05867f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml
index be55c8d721..be55c8d721 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml
index a3f9053868..a3f9053868 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml
index 7d52f31c0e..7d52f31c0e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml
index f109a8b782..f109a8b782 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml
index 8ab2b3fb16..8ab2b3fb16 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml
index f9b2113940..f9b2113940 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml
index d14f41bfe2..d14f41bfe2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/038.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml
index 0897316e46..0897316e46 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/039.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml
index 12c419b65b..12c419b65b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml
index a59f536277..a59f536277 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/041.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml
index 5d7c650944..5d7c650944 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/042.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml
index a8095dfe28..a8095dfe28 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml
index bee1d23e1a..bee1d23e1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml
index e2567f532d..e2567f532d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml
index c50a2846f9..c50a2846f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml
index a4c688cf1a..a4c688cf1a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/047.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml
index c6b2dedbba..c6b2dedbba 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/048.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml
index c3cc797b59..c3cc797b59 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/049.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml
index 12303b1af2..12303b1af2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/050.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml
index 7ae8f6c73a..7ae8f6c73a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/051.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml
index 3f33a4c760..3f33a4c760 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/052.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml
index 0d88f28718..0d88f28718 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/053.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml
index 5d1c88b946..5d1c88b946 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/054.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml
index da0292c5bc..da0292c5bc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/055.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml
index 144871b2a3..144871b2a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/056.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml
index c1ac849ed1..c1ac849ed1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/057.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml
index 2ff23b233f..2ff23b233f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/058.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml
index 2171480ecf..2171480ecf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/059.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml
index 6cd6b4386b..6cd6b4386b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/060.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml
index bbdc152492..bbdc152492 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/061.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml
index f4ba53090a..f4ba53090a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/062.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml
index 9668f2da73..9668f2da73 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/063.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml
index 74a97aa431..74a97aa431 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/064.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml
index f708f2bc17..f708f2bc17 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/065.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml
index a27340b9a7..a27340b9a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/066.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml
index a0ccf772a5..a0ccf772a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/067.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml
index 8ed806b9a3..8ed806b9a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/068.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml
index 2437f60530..2437f60530 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/069.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml
index eef097df76..eef097df76 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/070.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml
index ebfba230a4..ebfba230a4 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/071.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml
index 6ef39dc49e..6ef39dc49e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/072.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml
index 217476d9a9..217476d9a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/073.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml
index 8b2354ff73..8b2354ff73 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/074.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml
index 33c012441a..33c012441a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/075.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml
index 65b731cf6d..65b731cf6d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/076.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml
index e5f301eac8..e5f301eac8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/077.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml
index b31f40f94e..b31f40f94e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/078.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml
index a3290d6cbb..a3290d6cbb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/079.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml
index 3208fa9aa5..3208fa9aa5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/080.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml
index 51ee1a375c..51ee1a375c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/081.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml
index d5245ac51a..d5245ac51a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/082.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml
index 937cfc0bdd..937cfc0bdd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/083.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml
index 82760767aa..82760767aa 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/084.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml
index cf5834f2a5..cf5834f2a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/085.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml
index bbc3080db6..bbc3080db6 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/086.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml
index 34797a67d7..34797a67d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/087.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml
index f97d96848d..f97d96848d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/088.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml
index 42ffcb6782..42ffcb6782 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/089.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml
index c392c96084..c392c96084 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/090.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml
index 7343d0f795..7343d0f795 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/091.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml
index 627b74ecdf..627b74ecdf 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/092.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml
index 300578eb5c..300578eb5c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/093.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml
index 5726e7db6f..5726e7db6f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/094.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml
index 1fe69596da..1fe69596da 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/095.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml
index a6f8f43620..a6f8f43620 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/096.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent
index e06554ace2..e06554ace2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.ent
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml
index c606afa97f..c606afa97f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/097.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml
index 33a64ce5ae..33a64ce5ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/098.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml
index 1b7214a137..1b7214a137 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/099.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml
index 5b839e76bc..5b839e76bc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/100.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml
index f464484bf5..f464484bf5 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/101.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml
index f239ff5fee..f239ff5fee 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/102.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml
index 1dbbd5bb7c..1dbbd5bb7c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/103.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml
index 666f43de0f..666f43de0f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/104.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml
index 6b3af2b847..6b3af2b847 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/105.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml
index 8757c0a5ae..8757c0a5ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/106.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml
index 3d2c2566a7..3d2c2566a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/107.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml
index e919bf229a..e919bf229a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/108.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml
index 33fa38e13b..33fa38e13b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/109.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml
index 0c61c65119..0c61c65119 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/110.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml
index cb56f264b0..cb56f264b0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/111.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml
index 27b6a4c793..27b6a4c793 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/112.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml
index d2edd0f01d..d2edd0f01d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/113.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml
index 52e207096d..52e207096d 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/114.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml
index d939a67010..d939a67010 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/115.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml
index 55ab49620b..55ab49620b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/116.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml
index e4f02b14c8..e4f02b14c8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/117.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml
index fba6c44668..fba6c44668 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/118.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml
index 876e74730c..876e74730c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/119.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries
index 5d10c3447a..5d10c3447a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository
index 7dcbee54f2..7dcbee54f2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml
index 97cf3e3b86..97cf3e3b86 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml
index 3ea232c21a..3ea232c21a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml
index 97cf3e3b86..97cf3e3b86 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml
index 7293fb63dc..7293fb63dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml
index 5a0c9831ae..5a0c9831ae 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml
index c9c7ec5da8..c9c7ec5da8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml
index ac6b28f97a..ac6b28f97a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml
index 8e216eb99b..8e216eb99b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml
index 4fc76928b2..4fc76928b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml
index 3b9a2f8d4e..3b9a2f8d4e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml
index a5471011df..a5471011df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml
index 05d4e2fcf9..05d4e2fcf9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml
index 95ae08a12e..95ae08a12e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml
index a9aa2074ff..a9aa2074ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml
index de0f566020..de0f566020 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml
index de0f566020..de0f566020 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml
index de0f566020..de0f566020 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml
index 2bcfb06cf1..2bcfb06cf1 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/038.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml
index 82d117d492..82d117d492 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/039.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml
index d79cfe1493..d79cfe1493 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml
index 6f2cd5832e..6f2cd5832e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/041.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml
index f683039a80..f683039a80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/042.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml
index e162b76504..e162b76504 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml
index 78028b704b..78028b704b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml
index 7293fb63dc..7293fb63dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml
index b327ebd67f..b327ebd67f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/047.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml
index ced7d02719..ced7d02719 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/048.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml
index 7cc53f9ea0..7cc53f9ea0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/049.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml
index 33703c7925..33703c7925 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/050.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml
index cfeb5a5366..cfeb5a5366 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/051.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml
index f5a0484791..f5a0484791 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/052.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml
index c4083843d9..c4083843d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/053.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/054.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml
index 82d117d492..82d117d492 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/055.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml
index f683039a80..f683039a80 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/056.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/057.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml
index f898cc8c98..f898cc8c98 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/058.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml
index 78028b704b..78028b704b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/059.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml
index b327ebd67f..b327ebd67f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/060.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml
index 7cc53f9ea0..7cc53f9ea0 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/061.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml
index 33703c7925..33703c7925 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/062.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml
index cfeb5a5366..cfeb5a5366 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/063.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml
index f5a0484791..f5a0484791 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/064.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/065.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml
index 7597d31bf9..7597d31bf9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/066.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml
index 4bbdad45ed..4bbdad45ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/067.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml
index 4bbdad45ed..4bbdad45ed 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/068.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml
index 41eed46727..41eed46727 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/069.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/070.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/071.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/072.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/073.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/074.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/075.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml
index b07019e90f..b07019e90f 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/076.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/077.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml
index fcab0cd7ff..fcab0cd7ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/078.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml
index fcab0cd7ff..fcab0cd7ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/079.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml
index fcab0cd7ff..fcab0cd7ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/080.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml
index e356e7e4db..e356e7e4db 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/081.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/082.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/083.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/084.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/085.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/086.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml
index a9aa2074ff..a9aa2074ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/087.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml
index a5471011df..a5471011df 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/088.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml
index f5a0484791..f5a0484791 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/089.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml
index 41eed46727..41eed46727 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/090.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml
index c55a698bbb..c55a698bbb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/091.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml
index 87269f79d9..87269f79d9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/092.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml
index 631bfde91e..631bfde91e 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/093.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml
index 636ab4729a..636ab4729a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/094.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml
index a20706ee01..a20706ee01 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/095.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml
index f898cc8c98..f898cc8c98 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/096.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml
index e05cfe6c31..e05cfe6c31 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/097.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml
index f6408de9b8..f6408de9b8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/098.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/099.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/100.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/101.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml
index 6e66b8da21..6e66b8da21 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/102.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml
index 96495d45c3..96495d45c3 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/103.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml
index cc3def3336..cc3def3336 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/104.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml
index 5aed3d613b..5aed3d613b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/105.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml
index 1197d2ff9c..1197d2ff9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/106.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml
index 288f23cdf2..288f23cdf2 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/107.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml
index cc3def3336..cc3def3336 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/108.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml
index c43bdf9b9c..c43bdf9b9c 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/109.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml
index a92237b4ec..a92237b4ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/110.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml
index cc3def3336..cc3def3336 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/111.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml
index c82f47bca8..c82f47bca8 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/112.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/113.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml
index 8e0722abad..8e0722abad 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/114.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml
index 682b8140ec..682b8140ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/115.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml
index a79dff65fd..a79dff65fd 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/116.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml
index ced7d02719..ced7d02719 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/117.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml
index 31e37a9398..31e37a9398 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/118.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml
index 7e8f183484..7e8f183484 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/119.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries
index 06b9ee385a..06b9ee385a 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Entries
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository
index 1e172d2e1b..1e172d2e1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Repository
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root
index 3c7177e4bb..3c7177e4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/valid/sa/out/CVS/Root
diff --git a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml
index bf81c88eb9..bf81c88eb9 100644
--- a/tests/auto/corelib/xml/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/XML-Test-Suite/xmlconf/xmltest/xmltest.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/001.ref b/tests/auto/corelib/serialization/qxmlstream/data/001.ref
index 82ea8c3dc8..82ea8c3dc8 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/001.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/001.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/001.xml b/tests/auto/corelib/serialization/qxmlstream/data/001.xml
index dca5e6705f..dca5e6705f 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/001.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/001.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/002.ref b/tests/auto/corelib/serialization/qxmlstream/data/002.ref
index 45271c4502..45271c4502 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/002.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/002.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/002.xml b/tests/auto/corelib/serialization/qxmlstream/data/002.xml
index 3749bcbbb7..3749bcbbb7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/002.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/002.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/003.ref b/tests/auto/corelib/serialization/qxmlstream/data/003.ref
index 6de9dccf22..6de9dccf22 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/003.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/003.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/003.xml b/tests/auto/corelib/serialization/qxmlstream/data/003.xml
index 66c5cb8191..66c5cb8191 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/003.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/003.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/004.ref b/tests/auto/corelib/serialization/qxmlstream/data/004.ref
index 052afffa6c..052afffa6c 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/004.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/004.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/004.xml b/tests/auto/corelib/serialization/qxmlstream/data/004.xml
index e7d91d5d33..e7d91d5d33 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/004.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/004.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/005.ref b/tests/auto/corelib/serialization/qxmlstream/data/005.ref
index 03269b280a..03269b280a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/005.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/005.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/005.xml b/tests/auto/corelib/serialization/qxmlstream/data/005.xml
index dc9c663649..dc9c663649 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/005.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/005.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/006.ref b/tests/auto/corelib/serialization/qxmlstream/data/006.ref
index 53080c298a..53080c298a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/006.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/006.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/006.xml b/tests/auto/corelib/serialization/qxmlstream/data/006.xml
index 80c8bf75d1..80c8bf75d1 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/006.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/006.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/007.ref b/tests/auto/corelib/serialization/qxmlstream/data/007.ref
index 8e53d0b9d7..8e53d0b9d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/007.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/007.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/007.xml b/tests/auto/corelib/serialization/qxmlstream/data/007.xml
index 667bd63d1b..667bd63d1b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/007.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/007.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/008.ref b/tests/auto/corelib/serialization/qxmlstream/data/008.ref
index b0477ea1fa..b0477ea1fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/008.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/008.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/008.xml b/tests/auto/corelib/serialization/qxmlstream/data/008.xml
index d63bc3c45e..d63bc3c45e 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/008.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/008.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/009.ref b/tests/auto/corelib/serialization/qxmlstream/data/009.ref
index 12b994eac4..12b994eac4 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/009.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/009.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/009.xml b/tests/auto/corelib/serialization/qxmlstream/data/009.xml
index d67c066ec4..d67c066ec4 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/009.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/009.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/010.ref b/tests/auto/corelib/serialization/qxmlstream/data/010.ref
index 07def503a5..07def503a5 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/010.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/010.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/010.xml b/tests/auto/corelib/serialization/qxmlstream/data/010.xml
index 2216fd6dce..2216fd6dce 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/010.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/010.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/011.ref b/tests/auto/corelib/serialization/qxmlstream/data/011.ref
index faa6e75429..faa6e75429 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/011.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/011.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/011.xml b/tests/auto/corelib/serialization/qxmlstream/data/011.xml
index f22269b2df..f22269b2df 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/011.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/011.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/012.ref b/tests/auto/corelib/serialization/qxmlstream/data/012.ref
index 834db97ba6..834db97ba6 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/012.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/012.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/012.xml b/tests/auto/corelib/serialization/qxmlstream/data/012.xml
index 26d9b1bebb..26d9b1bebb 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/012.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/012.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/013.ref b/tests/auto/corelib/serialization/qxmlstream/data/013.ref
index 3ac6049d5e..3ac6049d5e 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/013.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/013.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/013.xml b/tests/auto/corelib/serialization/qxmlstream/data/013.xml
index e8770ea1cf..e8770ea1cf 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/013.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/013.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/014.ref b/tests/auto/corelib/serialization/qxmlstream/data/014.ref
index 8125ea70e1..8125ea70e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/014.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/014.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/014.xml b/tests/auto/corelib/serialization/qxmlstream/data/014.xml
index 7c8e9fa2a3..7c8e9fa2a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/014.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/014.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/015.ref b/tests/auto/corelib/serialization/qxmlstream/data/015.ref
index 02e9064f36..02e9064f36 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/015.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/015.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/015.xml b/tests/auto/corelib/serialization/qxmlstream/data/015.xml
index 503018e705..503018e705 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/015.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/015.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/016.ref b/tests/auto/corelib/serialization/qxmlstream/data/016.ref
index dd97554eb7..dd97554eb7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/016.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/016.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/016.xml b/tests/auto/corelib/serialization/qxmlstream/data/016.xml
index 8a3c44e45d..8a3c44e45d 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/016.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/016.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/017.ref b/tests/auto/corelib/serialization/qxmlstream/data/017.ref
index 3701247d96..3701247d96 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/017.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/017.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/017.xml b/tests/auto/corelib/serialization/qxmlstream/data/017.xml
index 65e754257d..65e754257d 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/017.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/017.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/018.ref b/tests/auto/corelib/serialization/qxmlstream/data/018.ref
index 86b2a61ad6..86b2a61ad6 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/018.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/018.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/018.xml b/tests/auto/corelib/serialization/qxmlstream/data/018.xml
index e795466550..e795466550 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/018.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/018.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/019.ref b/tests/auto/corelib/serialization/qxmlstream/data/019.ref
index 314efb2b04..314efb2b04 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/019.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/019.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/019.xml b/tests/auto/corelib/serialization/qxmlstream/data/019.xml
index c4620bd097..c4620bd097 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/019.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/019.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/020.ref b/tests/auto/corelib/serialization/qxmlstream/data/020.ref
index 096a0316e2..096a0316e2 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/020.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/020.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/020.xml b/tests/auto/corelib/serialization/qxmlstream/data/020.xml
index 4e5fcad48d..4e5fcad48d 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/020.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/020.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/021.ref b/tests/auto/corelib/serialization/qxmlstream/data/021.ref
index 1d8f96b224..1d8f96b224 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/021.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/021.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/021.xml b/tests/auto/corelib/serialization/qxmlstream/data/021.xml
index e56c240c42..e56c240c42 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/021.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/021.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/022.ref b/tests/auto/corelib/serialization/qxmlstream/data/022.ref
index 620f51dc66..620f51dc66 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/022.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/022.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/022.xml b/tests/auto/corelib/serialization/qxmlstream/data/022.xml
index 31984e79bf..31984e79bf 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/022.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/022.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/023.ref b/tests/auto/corelib/serialization/qxmlstream/data/023.ref
index 513d85c710..513d85c710 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/023.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/023.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/023.xml b/tests/auto/corelib/serialization/qxmlstream/data/023.xml
index 4d695ad38d..4d695ad38d 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/023.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/023.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/024.ref b/tests/auto/corelib/serialization/qxmlstream/data/024.ref
index 83c3ac5315..83c3ac5315 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/024.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/024.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/024.xml b/tests/auto/corelib/serialization/qxmlstream/data/024.xml
index b68470afa6..b68470afa6 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/024.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/024.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/025.ref b/tests/auto/corelib/serialization/qxmlstream/data/025.ref
index 44363e0d61..44363e0d61 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/025.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/025.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/025.xml b/tests/auto/corelib/serialization/qxmlstream/data/025.xml
index 1277ab33da..1277ab33da 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/025.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/025.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/026.ref b/tests/auto/corelib/serialization/qxmlstream/data/026.ref
index de7b326079..de7b326079 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/026.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/026.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/026.xml b/tests/auto/corelib/serialization/qxmlstream/data/026.xml
index 689c75c666..689c75c666 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/026.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/026.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/027.ref b/tests/auto/corelib/serialization/qxmlstream/data/027.ref
index dcf5688e9f..dcf5688e9f 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/027.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/027.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/027.xml b/tests/auto/corelib/serialization/qxmlstream/data/027.xml
index 1bf048e7f9..1bf048e7f9 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/027.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/027.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/028.ref b/tests/auto/corelib/serialization/qxmlstream/data/028.ref
index ed025eb289..ed025eb289 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/028.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/028.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/028.xml b/tests/auto/corelib/serialization/qxmlstream/data/028.xml
index e461235571..e461235571 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/028.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/028.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/029.ref b/tests/auto/corelib/serialization/qxmlstream/data/029.ref
index 10697d1723..10697d1723 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/029.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/029.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/029.xml b/tests/auto/corelib/serialization/qxmlstream/data/029.xml
index 2c05165d9d..2c05165d9d 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/029.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/029.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/030.ref b/tests/auto/corelib/serialization/qxmlstream/data/030.ref
index 1e626263a3..1e626263a3 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/030.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/030.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/030.xml b/tests/auto/corelib/serialization/qxmlstream/data/030.xml
index db5ab4dbc2..db5ab4dbc2 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/030.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/030.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/031.ref b/tests/auto/corelib/serialization/qxmlstream/data/031.ref
index c68e2ecf7f..c68e2ecf7f 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/031.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/031.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/031.xml b/tests/auto/corelib/serialization/qxmlstream/data/031.xml
index 2eec6cc6d0..2eec6cc6d0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/031.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/031.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/032.ref b/tests/auto/corelib/serialization/qxmlstream/data/032.ref
index 670afa49fb..670afa49fb 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/032.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/032.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/032.xml b/tests/auto/corelib/serialization/qxmlstream/data/032.xml
index 94433263c5..94433263c5 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/032.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/032.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/033.ref b/tests/auto/corelib/serialization/qxmlstream/data/033.ref
index ad83323de2..ad83323de2 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/033.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/033.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/033.xml b/tests/auto/corelib/serialization/qxmlstream/data/033.xml
index d9ee72807c..d9ee72807c 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/033.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/033.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/034.ref b/tests/auto/corelib/serialization/qxmlstream/data/034.ref
index c1aec14057..c1aec14057 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/034.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/034.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/034.xml b/tests/auto/corelib/serialization/qxmlstream/data/034.xml
index 4fa2b8dbb0..4fa2b8dbb0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/034.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/034.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/035.ref b/tests/auto/corelib/serialization/qxmlstream/data/035.ref
index cab0158a51..cab0158a51 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/035.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/035.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/035.xml b/tests/auto/corelib/serialization/qxmlstream/data/035.xml
index 97b14b3106..97b14b3106 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/035.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/035.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/036.ref b/tests/auto/corelib/serialization/qxmlstream/data/036.ref
index 50939ed7e7..50939ed7e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/036.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/036.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/036.xml b/tests/auto/corelib/serialization/qxmlstream/data/036.xml
index c37894b5d7..c37894b5d7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/036.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/036.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/037.ref b/tests/auto/corelib/serialization/qxmlstream/data/037.ref
index d7e402c5a0..d7e402c5a0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/037.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/037.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/037.xml b/tests/auto/corelib/serialization/qxmlstream/data/037.xml
index 30bc24b5b2..30bc24b5b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/037.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/037.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/038.ref b/tests/auto/corelib/serialization/qxmlstream/data/038.ref
index 45f16782be..45f16782be 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/038.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/038.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/038.xml b/tests/auto/corelib/serialization/qxmlstream/data/038.xml
index 2b20a469e0..2b20a469e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/038.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/038.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/039.ref b/tests/auto/corelib/serialization/qxmlstream/data/039.ref
index 63ee6b4def..63ee6b4def 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/039.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/039.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/039.xml b/tests/auto/corelib/serialization/qxmlstream/data/039.xml
index af7be31dc7..af7be31dc7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/039.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/039.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/040.ref b/tests/auto/corelib/serialization/qxmlstream/data/040.ref
index ee47ca5aa8..ee47ca5aa8 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/040.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/040.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/040.xml b/tests/auto/corelib/serialization/qxmlstream/data/040.xml
index cf02e22bfa..cf02e22bfa 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/040.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/040.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/041.ref b/tests/auto/corelib/serialization/qxmlstream/data/041.ref
index 3e7ca64208..3e7ca64208 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/041.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/041.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/041.xml b/tests/auto/corelib/serialization/qxmlstream/data/041.xml
index 80781e2e2b..80781e2e2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/041.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/041.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/042.ref b/tests/auto/corelib/serialization/qxmlstream/data/042.ref
index e2fd9c6b7f..e2fd9c6b7f 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/042.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/042.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/042.xml b/tests/auto/corelib/serialization/qxmlstream/data/042.xml
index 045dcc23dc..045dcc23dc 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/042.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/042.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/043.ref b/tests/auto/corelib/serialization/qxmlstream/data/043.ref
index d147ecd9ec..d147ecd9ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/043.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/043.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/043.xml b/tests/auto/corelib/serialization/qxmlstream/data/043.xml
index d800e2537b..d800e2537b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/043.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/043.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/044.ref b/tests/auto/corelib/serialization/qxmlstream/data/044.ref
index d147ecd9ec..d147ecd9ec 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/044.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/044.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/044.xml b/tests/auto/corelib/serialization/qxmlstream/data/044.xml
index 30922c8d2b..30922c8d2b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/044.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/044.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/045.ref b/tests/auto/corelib/serialization/qxmlstream/data/045.ref
index 0e4d785d40..0e4d785d40 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/045.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/045.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/045.xml b/tests/auto/corelib/serialization/qxmlstream/data/045.xml
index 3235470923..3235470923 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/045.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/045.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/046.ref b/tests/auto/corelib/serialization/qxmlstream/data/046.ref
index 5019708c8c..5019708c8c 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/046.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/046.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/046.xml b/tests/auto/corelib/serialization/qxmlstream/data/046.xml
index 8432a2faaa..8432a2faaa 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/046.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/046.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/047.ref b/tests/auto/corelib/serialization/qxmlstream/data/047.ref
index c159d89c76..c159d89c76 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/047.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/047.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/047.xml b/tests/auto/corelib/serialization/qxmlstream/data/047.xml
index 36e7b33072..36e7b33072 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/047.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/047.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/048.ref b/tests/auto/corelib/serialization/qxmlstream/data/048.ref
index 32e7243cc0..32e7243cc0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/048.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/048.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/048.xml b/tests/auto/corelib/serialization/qxmlstream/data/048.xml
index 2f5d6c8baf..2f5d6c8baf 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/048.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/048.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/051reduced.ref b/tests/auto/corelib/serialization/qxmlstream/data/051reduced.ref
index d86fb64970..d86fb64970 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/051reduced.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/051reduced.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/051reduced.xml b/tests/auto/corelib/serialization/qxmlstream/data/051reduced.xml
index 0a53b0d503..0a53b0d503 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/051reduced.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/051reduced.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/1.ref b/tests/auto/corelib/serialization/qxmlstream/data/1.ref
index 0288cf0e11..0288cf0e11 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/1.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/1.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/1.xml b/tests/auto/corelib/serialization/qxmlstream/data/1.xml
index 3ead71af7a..3ead71af7a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/1.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/10.ref b/tests/auto/corelib/serialization/qxmlstream/data/10.ref
index 51ffb72ac3..51ffb72ac3 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/10.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/10.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/10.xml b/tests/auto/corelib/serialization/qxmlstream/data/10.xml
index 19f9f9e8ff..19f9f9e8ff 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/10.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/10.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/11.ref b/tests/auto/corelib/serialization/qxmlstream/data/11.ref
index 60387ac925..60387ac925 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/11.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/11.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/11.xml b/tests/auto/corelib/serialization/qxmlstream/data/11.xml
index 619e917419..619e917419 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/11.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/11.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/12.ref b/tests/auto/corelib/serialization/qxmlstream/data/12.ref
index ede0967f31..ede0967f31 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/12.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/12.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/12.xml b/tests/auto/corelib/serialization/qxmlstream/data/12.xml
index d2265f4ddf..d2265f4ddf 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/12.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/12.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/13.ref b/tests/auto/corelib/serialization/qxmlstream/data/13.ref
index 10de0f3328..10de0f3328 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/13.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/13.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/13.xml b/tests/auto/corelib/serialization/qxmlstream/data/13.xml
index d0bda97207..d0bda97207 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/13.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/13.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/14.ref b/tests/auto/corelib/serialization/qxmlstream/data/14.ref
index 47a1b1ae80..47a1b1ae80 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/14.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/14.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/14.xml b/tests/auto/corelib/serialization/qxmlstream/data/14.xml
index 922314beb9..922314beb9 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/14.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/14.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/15.ref b/tests/auto/corelib/serialization/qxmlstream/data/15.ref
index 3097f1f84a..3097f1f84a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/15.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/15.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/15.xml b/tests/auto/corelib/serialization/qxmlstream/data/15.xml
index 81f8c2c7ba..81f8c2c7ba 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/15.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/15.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/16.ref b/tests/auto/corelib/serialization/qxmlstream/data/16.ref
index 316304541a..316304541a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/16.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/16.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/16.xml b/tests/auto/corelib/serialization/qxmlstream/data/16.xml
index 6a69b9b3f5..6a69b9b3f5 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/16.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/16.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/2.ref b/tests/auto/corelib/serialization/qxmlstream/data/2.ref
index 95d68efbd6..95d68efbd6 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/2.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/2.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/2.xml b/tests/auto/corelib/serialization/qxmlstream/data/2.xml
index 095ebc63bd..095ebc63bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/2.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/20.ref b/tests/auto/corelib/serialization/qxmlstream/data/20.ref
index 364eea62d2..364eea62d2 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/20.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/20.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/20.xml b/tests/auto/corelib/serialization/qxmlstream/data/20.xml
index 38a7212b03..38a7212b03 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/20.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/20.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/21.ref b/tests/auto/corelib/serialization/qxmlstream/data/21.ref
index 1098c6800f..1098c6800f 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/21.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/21.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/21.xml b/tests/auto/corelib/serialization/qxmlstream/data/21.xml
index 7a4c26a1fa..7a4c26a1fa 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/21.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/21.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/22.ref b/tests/auto/corelib/serialization/qxmlstream/data/22.ref
index d6d30237e1..d6d30237e1 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/22.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/22.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/22.xml b/tests/auto/corelib/serialization/qxmlstream/data/22.xml
index 4b1dbe43ab..4b1dbe43ab 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/22.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/22.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/3.ref b/tests/auto/corelib/serialization/qxmlstream/data/3.ref
index cc8b18b7d8..cc8b18b7d8 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/3.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/3.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/3.xml b/tests/auto/corelib/serialization/qxmlstream/data/3.xml
index ab4abd3670..ab4abd3670 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/3.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/4.ref b/tests/auto/corelib/serialization/qxmlstream/data/4.ref
index 80f4846070..80f4846070 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/4.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/4.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/4.xml b/tests/auto/corelib/serialization/qxmlstream/data/4.xml
index 2791fdca30..2791fdca30 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/4.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/5.ref b/tests/auto/corelib/serialization/qxmlstream/data/5.ref
index 5d073094a7..5d073094a7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/5.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/5.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/5.xml b/tests/auto/corelib/serialization/qxmlstream/data/5.xml
index 5bf7dbc592..5bf7dbc592 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/5.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/6.ref b/tests/auto/corelib/serialization/qxmlstream/data/6.ref
index 3ba92e7d81..3ba92e7d81 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/6.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/6.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/6.xml b/tests/auto/corelib/serialization/qxmlstream/data/6.xml
index 8e2778b669..8e2778b669 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/6.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/6.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/7.ref b/tests/auto/corelib/serialization/qxmlstream/data/7.ref
index 158eef0291..158eef0291 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/7.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/7.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/7.xml b/tests/auto/corelib/serialization/qxmlstream/data/7.xml
index c9abc3a48e..c9abc3a48e 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/7.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/7.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/8.ref b/tests/auto/corelib/serialization/qxmlstream/data/8.ref
index d1d4eebcf1..d1d4eebcf1 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/8.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/8.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/8.xml b/tests/auto/corelib/serialization/qxmlstream/data/8.xml
index 8b88a9d961..8b88a9d961 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/8.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/8.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/9.ref b/tests/auto/corelib/serialization/qxmlstream/data/9.ref
index e20ac827e7..e20ac827e7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/9.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/9.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/9.xml b/tests/auto/corelib/serialization/qxmlstream/data/9.xml
index 40c36f040a..40c36f040a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/9.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/9.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/books.ref b/tests/auto/corelib/serialization/qxmlstream/data/books.ref
index 23a6616d12..23a6616d12 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/books.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/books.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/books.xml b/tests/auto/corelib/serialization/qxmlstream/data/books.xml
index 1ea700d6bd..1ea700d6bd 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/books.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/books.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref b/tests/auto/corelib/serialization/qxmlstream/data/carriagereturn+nul.ref
index b636d80294..b636d80294 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/carriagereturn+nul.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml b/tests/auto/corelib/serialization/qxmlstream/data/carriagereturn+nul.xml
index e87bf56453..e87bf56453 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/carriagereturn+nul.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/colonInPI.ref b/tests/auto/corelib/serialization/qxmlstream/data/colonInPI.ref
index 61d0e782b7..61d0e782b7 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/colonInPI.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/colonInPI.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/colonInPI.xml b/tests/auto/corelib/serialization/qxmlstream/data/colonInPI.xml
index 831618626a..831618626a 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/colonInPI.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/colonInPI.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/doctypeEmptyMarkupDecl.ref b/tests/auto/corelib/serialization/qxmlstream/data/doctypeEmptyMarkupDecl.ref
index ea85e32c1d..ea85e32c1d 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/doctypeEmptyMarkupDecl.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/doctypeEmptyMarkupDecl.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/doctypeEmptyMarkupDecl.xml b/tests/auto/corelib/serialization/qxmlstream/data/doctypeEmptyMarkupDecl.xml
index 1c66c0c3bc..1c66c0c3bc 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/doctypeEmptyMarkupDecl.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/doctypeEmptyMarkupDecl.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/mixedContent.ref b/tests/auto/corelib/serialization/qxmlstream/data/mixedContent.ref
index 5607fd9e50..5607fd9e50 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/mixedContent.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/mixedContent.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/mixedContent.xml b/tests/auto/corelib/serialization/qxmlstream/data/mixedContent.xml
index b6f66245a8..b6f66245a8 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/mixedContent.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/mixedContent.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/namespaceCDATA.ref b/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref
index 132875f4bb..132875f4bb 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/namespaceCDATA.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/namespaceCDATA.xml b/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.xml
index 9b78623a6c..9b78623a6c 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/namespaceCDATA.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/namespaceCDATA.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/namespaces b/tests/auto/corelib/serialization/qxmlstream/data/namespaces
index 7cc985b5a9..7cc985b5a9 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/namespaces
+++ b/tests/auto/corelib/serialization/qxmlstream/data/namespaces
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul0.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul0.ref
index a76455ee07..a76455ee07 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul0.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul0.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul0.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul0.xml
index f76dd238ad..f76dd238ad 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul0.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul0.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul1.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul1.ref
index a76455ee07..a76455ee07 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul1.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul1.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul1.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul1.xml
index aab3ad6ca9..aab3ad6ca9 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul1.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul1.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul2.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul2.ref
index 08bbcc6aa4..08bbcc6aa4 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul2.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul2.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul2.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul2.xml
index e14d1b8ae5..e14d1b8ae5 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul2.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul2.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul3.ref
index cf4dd3848b..cf4dd3848b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul3.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul3.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul3.xml
index d8260b908e..d8260b908e 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul3.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul3.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul3bis.ref
index cf4dd3848b..cf4dd3848b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul3bis.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul3bis.xml
index 61e011014e..61e011014e 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul3bis.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul4.ref
index cf4dd3848b..cf4dd3848b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul4.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul4.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul4.xml
index 90f20eebf0..90f20eebf0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul4.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul4.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul4bis.ref
index cf4dd3848b..cf4dd3848b 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul4bis.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul4bis.xml
index 15d2d10685..15d2d10685 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul4bis.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul5.ref b/tests/auto/corelib/serialization/qxmlstream/data/nul5.ref
index 9432b74a99..9432b74a99 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul5.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul5.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul5.xml b/tests/auto/corelib/serialization/qxmlstream/data/nul5.xml
index 6a79cbdc75..6a79cbdc75 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/nul5.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/nul5.xml
Binary files differ
diff --git a/tests/auto/corelib/xml/qxmlstream/data/org_module.ref b/tests/auto/corelib/serialization/qxmlstream/data/org_module.ref
index 591172aae5..591172aae5 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/org_module.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/org_module.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/org_module.xml b/tests/auto/corelib/serialization/qxmlstream/data/org_module.xml
index 44c90c9528..44c90c9528 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/org_module.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/org_module.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/data/spaceBracket.ref b/tests/auto/corelib/serialization/qxmlstream/data/spaceBracket.ref
index fa332856e0..fa332856e0 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/spaceBracket.ref
+++ b/tests/auto/corelib/serialization/qxmlstream/data/spaceBracket.ref
diff --git a/tests/auto/corelib/xml/qxmlstream/data/spaceBracket.xml b/tests/auto/corelib/serialization/qxmlstream/data/spaceBracket.xml
index 85b46e84b2..85b46e84b2 100644
--- a/tests/auto/corelib/xml/qxmlstream/data/spaceBracket.xml
+++ b/tests/auto/corelib/serialization/qxmlstream/data/spaceBracket.xml
diff --git a/tests/auto/corelib/xml/qxmlstream/qc14n.h b/tests/auto/corelib/serialization/qxmlstream/qc14n.h
index e4056fb0db..e4056fb0db 100644
--- a/tests/auto/corelib/xml/qxmlstream/qc14n.h
+++ b/tests/auto/corelib/serialization/qxmlstream/qc14n.h
diff --git a/tests/auto/corelib/xml/qxmlstream/qxmlstream.pro b/tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro
index 0a739f0a0e..0a739f0a0e 100644
--- a/tests/auto/corelib/xml/qxmlstream/qxmlstream.pro
+++ b/tests/auto/corelib/serialization/qxmlstream/qxmlstream.pro
diff --git a/tests/auto/corelib/xml/qxmlstream/setupSuite.sh b/tests/auto/corelib/serialization/qxmlstream/setupSuite.sh
index 8dc9b7d551..8dc9b7d551 100755
--- a/tests/auto/corelib/xml/qxmlstream/setupSuite.sh
+++ b/tests/auto/corelib/serialization/qxmlstream/setupSuite.sh
diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
new file mode 100644
index 0000000000..16a4200b5d
--- /dev/null
+++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
@@ -0,0 +1,1745 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QDirIterator>
+#include <QEventLoop>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+#include <QNetworkRequest>
+#include <QtTest/QtTest>
+#include <QUrl>
+#include <QXmlDefaultHandler>
+#include <QXmlStreamReader>
+
+#include "qc14n.h"
+
+Q_DECLARE_METATYPE(QXmlStreamReader::ReadElementTextBehaviour)
+
+static const char *const catalogFile = "XML-Test-Suite/xmlconf/finalCatalog.xml";
+static const int expectedRunCount = 1646;
+static const int expectedSkipCount = 532;
+
+static inline int best(int a, int b)
+{
+ if (a < 0)
+ return b;
+ if (b < 0)
+ return a;
+ return qMin(a, b);
+}
+
+static inline int best(int a, int b, int c)
+{
+ if (a < 0)
+ return best(b, c);
+ if (b < 0)
+ return best(a, c);
+ if (c < 0)
+ return best(a, b);
+ return qMin(qMin(a, b), c);
+}
+
+template <typename C>
+const C sorted_by_name(C c) { // return by const value so we can feed directly into range-for loops below
+ using T = typename C::value_type;
+ auto byName = [](const T &lhs, const T &rhs) {
+ return lhs.name() < rhs.name();
+ };
+ std::sort(c.begin(), c.end(), byName);
+ return c;
+}
+
+/**
+ * Opens \a filename and returns content produced as per
+ * xmlconf/xmltest/canonxml.html.
+ *
+ * \a docType is the DOCTYPE name that the returned output should
+ * have, if it doesn't already have one.
+ */
+static QByteArray makeCanonical(const QString &filename,
+ const QString &docType,
+ bool &hasError,
+ bool testIncremental = false)
+{
+ QFile file(filename);
+ file.open(QIODevice::ReadOnly);
+
+ QXmlStreamReader reader;
+
+ QByteArray buffer;
+ int bufferPos = 0;
+
+ if (testIncremental)
+ buffer = file.readAll();
+ else
+ reader.setDevice(&file);
+
+ QByteArray outarray;
+ QXmlStreamWriter writer(&outarray);
+
+ forever {
+ while (!reader.atEnd()) {
+ reader.readNext();
+ if (reader.isDTD()) {
+ const auto notationDeclarations = reader.notationDeclarations();
+ if (!notationDeclarations.isEmpty()) {
+ QString dtd;
+ QTextStream writeDtd(&dtd);
+
+ writeDtd << "<!DOCTYPE ";
+ writeDtd << docType;
+ writeDtd << " [";
+ writeDtd << endl;
+ for (const QXmlStreamNotationDeclaration &notation : sorted_by_name(notationDeclarations)) {
+ writeDtd << "<!NOTATION ";
+ writeDtd << notation.name().toString();
+ if (notation.publicId().isEmpty()) {
+ writeDtd << " SYSTEM \'";
+ writeDtd << notation.systemId().toString();
+ writeDtd << '\'';
+ } else {
+ writeDtd << " PUBLIC \'";
+ writeDtd << notation.publicId().toString();
+ writeDtd << "\'";
+ if (!notation.systemId().isEmpty() ) {
+ writeDtd << " \'";
+ writeDtd << notation.systemId().toString();
+ writeDtd << '\'';
+ }
+ }
+ writeDtd << '>';
+ writeDtd << endl;
+ }
+
+ writeDtd << "]>";
+ writeDtd << endl;
+ writer.writeDTD(dtd);
+ }
+ } else if (reader.isStartElement()) {
+ writer.writeStartElement(reader.namespaceUri().toString(), reader.name().toString());
+ for (const QXmlStreamAttribute &attribute : sorted_by_name(reader.attributes()))
+ writer.writeAttribute(attribute);
+ writer.writeCharacters(QString()); // write empty string to avoid having empty xml tags
+ } else if (reader.isCharacters()) {
+ // make canonical
+
+ QString text = reader.text().toString();
+ int i = 0;
+ int p = 0;
+ while ((i = best(text.indexOf(QLatin1Char(10), p),
+ text.indexOf(QLatin1Char(13), p),
+ text.indexOf(QLatin1Char(9), p))) >= 0) {
+ writer.writeCharacters(text.mid(p, i - p));
+ writer.writeEntityReference(QLatin1Char('#') + QString::number(text.at(i).unicode()));
+ p = i + 1;
+ }
+ writer.writeCharacters(text.mid(p));
+ } else if (reader.isStartDocument() || reader.isEndDocument() || reader.isComment()){
+ // canonical does not want any of those
+ } else if (reader.isProcessingInstruction() && reader.processingInstructionData().isEmpty()) {
+ // for some reason canonical wants a space
+ writer.writeProcessingInstruction(reader.processingInstructionTarget().toString(), QLatin1String(""));
+ } else if (!reader.hasError()){
+ writer.writeCurrentToken(reader);
+ }
+ }
+ if (testIncremental && bufferPos < buffer.size()) {
+ reader.addData(QByteArray(buffer.data() + (bufferPos++), 1));
+ } else {
+ break;
+ }
+ }
+
+ if (reader.hasError()) {
+ hasError = true;
+ outarray += "ERROR:";
+ outarray += reader.errorString().toLatin1();
+ }
+ else
+ hasError = false;
+
+ return outarray;
+}
+
+/**
+ * \brief Returns the lexical QName of the document element in
+ * \a document.
+ *
+ * It is assumed that \a document is a well-formed XML document.
+ */
+static QString documentElement(const QByteArray &document)
+{
+ QXmlStreamReader reader(document);
+
+ while(!reader.atEnd())
+ {
+ if(reader.isStartElement())
+ return reader.qualifiedName().toString();
+
+ reader.readNext();
+ }
+
+ qFatal("The input %s didn't contain an element", document.constData());
+ return QString();
+}
+
+/**
+ * \brief Loads W3C's XML conformance test suite and runs it on QXmlStreamReader.
+ *
+ * Since this suite is fairly large, it runs the tests sequentially in order to not
+ * have them all loaded into memory at once. In this way, the maximum memory usage stays
+ * low, which means one can run valgrind on this test. However, the drawback is that
+ * Qt Test's usual error reporting and testing mechanisms are slightly bypassed.
+ *
+ * Part of this code is a manual, ad-hoc implementation of xml:base.
+ *
+ * See \l {http://www.w3.org/XML/Test/} {Extensible Markup Language (XML) Conformance Test Suites}
+ */
+class TestSuiteHandler : public QXmlDefaultHandler
+{
+public:
+ /**
+ * The first string is the test ID, the second is
+ * a description of what went wrong.
+ */
+ typedef QPair<QString, QString> GeneralFailure;
+
+ /**
+ * The string is the test ID.
+ */
+ QStringList successes;
+
+ /**
+ * The first value is the baseline, while the se
+ */
+ class MissedBaseline
+ {
+ friend class QVector<MissedBaseline>;
+ MissedBaseline() {} // for QVector, don't use
+ public:
+ MissedBaseline(const QString &aId,
+ const QByteArray &aExpected,
+ const QByteArray &aOutput) : id(aId),
+ expected(aExpected),
+ output(aOutput)
+ {
+ if (aId.isEmpty())
+ qFatal("%s: aId must not be an empty string", Q_FUNC_INFO);
+ }
+
+ void swap(MissedBaseline &other) Q_DECL_NOTHROW
+ {
+ qSwap(id, other.id);
+ qSwap(expected, other.expected);
+ qSwap(output, other.output);
+ }
+
+ QString id;
+ QByteArray expected;
+ QByteArray output;
+ };
+
+ QVector<GeneralFailure> failures;
+ QVector<MissedBaseline> missedBaselines;
+
+ /**
+ * The count of how many tests that were run.
+ */
+ int runCount;
+
+ int skipCount;
+
+ /**
+ * \a baseURI is the URI of where the catalog file resides.
+ */
+ TestSuiteHandler(const QUrl &baseURI) : runCount(0),
+ skipCount(0)
+ {
+ if (!baseURI.isValid())
+ qFatal("%s: baseURI must be valid", Q_FUNC_INFO);
+ m_baseURI.push(baseURI);
+ }
+
+ virtual bool characters(const QString &chars)
+ {
+ m_ch = chars;
+ return true;
+ }
+
+ virtual bool startElement(const QString &,
+ const QString &,
+ const QString &,
+ const QXmlAttributes &atts)
+ {
+ m_atts.push(atts);
+ const int i = atts.index(QLatin1String("xml:base"));
+
+ if(i != -1)
+ m_baseURI.push(m_baseURI.top().resolved(atts.value(i)));
+
+ return true;
+ }
+
+ virtual bool endElement(const QString &,
+ const QString &localName,
+ const QString &)
+ {
+ if(localName == QLatin1String("TEST"))
+ {
+ /* We don't want tests for XML 1.1.0, in fact). */
+ if(m_atts.top().value(QString(), QLatin1String("VERSION")) == QLatin1String("1.1"))
+ {
+ ++skipCount;
+ m_atts.pop();
+ return true;
+ }
+
+ /* We don't want tests that conflict with the namespaces spec. Our parser is a
+ * namespace-aware parser. */
+ else if(m_atts.top().value(QString(), QLatin1String("NAMESPACE")) == QLatin1String("no"))
+ {
+ ++skipCount;
+ m_atts.pop();
+ return true;
+ }
+
+ const QString inputFilePath(m_baseURI.top().resolved(m_atts.top().value(QString(), QLatin1String("URI")))
+ .toLocalFile());
+ const QString id(m_atts.top().value(QString(), QLatin1String("ID")));
+ const QString type(m_atts.top().value(QString(), QLatin1String("TYPE")));
+
+ QString expectedFilePath;
+ const int index = m_atts.top().index(QString(), QLatin1String("OUTPUT"));
+
+ if(index != -1)
+ {
+ expectedFilePath = m_baseURI.top().resolved(m_atts.top().value(QString(),
+ QLatin1String("OUTPUT"))).toLocalFile();
+ }
+
+ /* testcases.dtd: 'No parser should accept a "not-wf" testcase
+ * unless it's a nonvalidating parser and the test contains
+ * external entities that the parser doesn't read.'
+ *
+ * We also let this apply to "valid", "invalid" and "error" tests, although
+ * I'm not fully sure this is correct. */
+ const QString ents(m_atts.top().value(QString(), QLatin1String("ENTITIES")));
+ m_atts.pop();
+
+ if(ents == QLatin1String("both") ||
+ ents == QLatin1String("general") ||
+ ents == QLatin1String("parameter"))
+ {
+ ++skipCount;
+ return true;
+ }
+
+ ++runCount;
+
+ QFile inputFile(inputFilePath);
+ if(!inputFile.open(QIODevice::ReadOnly))
+ {
+ failures.append(qMakePair(id, QLatin1String("Failed to open input file ") + inputFilePath));
+ return true;
+ }
+
+ if(type == QLatin1String("not-wf"))
+ {
+ if(isWellformed(&inputFile, ParseSinglePass))
+ {
+ failures.append(qMakePair(id, QLatin1String("Failed to flag ") + inputFilePath
+ + QLatin1String(" as not well-formed.")));
+
+ /* Exit, the incremental test will fail as well, no need to flood the output. */
+ return true;
+ }
+ else
+ successes.append(id);
+
+ if(isWellformed(&inputFile, ParseIncrementally))
+ {
+ failures.append(qMakePair(id, QLatin1String("Failed to flag ") + inputFilePath
+ + QLatin1String(" as not well-formed with incremental parsing.")));
+ }
+ else
+ successes.append(id);
+
+ return true;
+ }
+
+ QXmlStreamReader reader(&inputFile);
+
+ /* See testcases.dtd which reads: 'Nonvalidating parsers
+ * must also accept "invalid" testcases, but validating ones must reject them.' */
+ if(type == QLatin1String("invalid") || type == QLatin1String("valid"))
+ {
+ QByteArray expected;
+ QString docType;
+
+ /* We only want to compare against a baseline when we have
+ * one. Some "invalid"-tests, for instance, doesn't have baselines. */
+ if(!expectedFilePath.isEmpty())
+ {
+ QFile expectedFile(expectedFilePath);
+
+ if(!expectedFile.open(QIODevice::ReadOnly))
+ {
+ failures.append(qMakePair(id, QLatin1String("Failed to open baseline ") + expectedFilePath));
+ return true;
+ }
+
+ expected = expectedFile.readAll();
+ docType = documentElement(expected);
+ }
+ else
+ docType = QLatin1String("dummy");
+
+ bool hasError = true;
+ bool incremental = false;
+
+ QByteArray input(makeCanonical(inputFilePath, docType, hasError, incremental));
+
+ if (!hasError && !expectedFilePath.isEmpty() && input == expected)
+ input = makeCanonical(inputFilePath, docType, hasError, (incremental = true));
+
+ if(hasError)
+ failures.append(qMakePair(id, QString::fromLatin1("Failed to parse %1%2")
+ .arg(incremental?"(incremental run only) ":"")
+ .arg(inputFilePath)));
+
+ if(!expectedFilePath.isEmpty() && input != expected)
+ {
+ missedBaselines.append(MissedBaseline(id, expected, input));
+ return true;
+ }
+ else
+ {
+ successes.append(id);
+ return true;
+ }
+ }
+ else if(type == QLatin1String("error"))
+ {
+ /* Not yet sure about this one. */
+ // TODO
+ return true;
+ }
+ else
+ {
+ qFatal("The input catalog is invalid.");
+ return false;
+ }
+ }
+ else if(localName == QLatin1String("TESTCASES") && m_atts.top().index(QLatin1String("xml:base")) != -1)
+ m_baseURI.pop();
+
+ m_atts.pop();
+
+ return true;
+ }
+
+ enum ParseMode
+ {
+ ParseIncrementally,
+ ParseSinglePass
+ };
+
+ static bool isWellformed(QIODevice *const inputFile, const ParseMode mode)
+ {
+ if (!inputFile)
+ qFatal("%s: inputFile must be a valid QIODevice pointer", Q_FUNC_INFO);
+ if (!inputFile->isOpen())
+ qFatal("%s: inputFile must be opened by the caller", Q_FUNC_INFO);
+ if (mode != ParseIncrementally && mode != ParseSinglePass)
+ qFatal("%s: mode must be either ParseIncrementally or ParseSinglePass", Q_FUNC_INFO);
+
+ if(mode == ParseIncrementally)
+ {
+ QXmlStreamReader reader;
+ QByteArray buffer;
+ int bufferPos = 0;
+
+ buffer = inputFile->readAll();
+
+ while(true)
+ {
+ while(!reader.atEnd())
+ reader.readNext();
+
+ if(bufferPos < buffer.size())
+ {
+ ++bufferPos;
+ reader.addData(QByteArray(buffer.data() + bufferPos, 1));
+ }
+ else
+ break;
+ }
+
+ return !reader.hasError();
+ }
+ else
+ {
+ QXmlStreamReader reader;
+ reader.setDevice(inputFile);
+
+ while(!reader.atEnd())
+ reader.readNext();
+
+ return !reader.hasError();
+ }
+ }
+
+private:
+ QStack<QXmlAttributes> m_atts;
+ QString m_ch;
+ QStack<QUrl> m_baseURI;
+};
+QT_BEGIN_NAMESPACE
+Q_DECLARE_SHARED(TestSuiteHandler::MissedBaseline)
+QT_END_NAMESPACE
+
+class tst_QXmlStream: public QObject
+{
+ Q_OBJECT
+public:
+ tst_QXmlStream() : m_handler(QUrl::fromLocalFile(QFINDTESTDATA(catalogFile)))
+ {
+ }
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void reportFailures() const;
+ void reportFailures_data();
+ void checkBaseline() const;
+ void checkBaseline_data() const;
+ void testReader() const;
+ void testReader_data() const;
+ void reportSuccess() const;
+ void reportSuccess_data() const;
+ void writerHangs() const;
+ void writerAutoFormattingWithComments() const;
+ void writerAutoFormattingWithTabs() const;
+ void writerAutoFormattingWithProcessingInstructions() const;
+ void writerAutoEmptyTags() const;
+ void writeAttributesWithSpace() const;
+ void addExtraNamespaceDeclarations();
+ void setEntityResolver();
+ void readFromQBuffer() const;
+ void readFromQBufferInvalid() const;
+ void readNextStartElement() const;
+ void readElementText() const;
+ void readElementText_data() const;
+ void crashInUTF16Codec() const;
+ void hasAttributeSignature() const;
+ void hasAttribute() const;
+ void writeWithCodec() const;
+ void writeWithUtf8Codec() const;
+ void writeWithUtf16Codec() const;
+ void writeWithStandalone() const;
+ void entitiesAndWhitespace_1() const;
+ void entitiesAndWhitespace_2() const;
+ void testFalsePrematureError() const;
+ void garbageInXMLPrologDefaultCodec() const;
+ void garbageInXMLPrologUTF8Explicitly() const;
+ void clear() const;
+ void checkCommentIndentation() const;
+ void checkCommentIndentation_data() const;
+ void crashInXmlStreamReader() const;
+ void write8bitCodec() const;
+ void invalidStringCharacters_data() const;
+ void invalidStringCharacters() const;
+ void hasError() const;
+ void readBack() const;
+
+private:
+ static QByteArray readFile(const QString &filename);
+
+ TestSuiteHandler m_handler;
+};
+
+void tst_QXmlStream::initTestCase()
+{
+ QFile file(QFINDTESTDATA(catalogFile));
+ QVERIFY2(file.open(QIODevice::ReadOnly),
+ qPrintable(QString::fromLatin1("Failed to open the test suite catalog; %1").arg(file.fileName())));
+
+ QXmlInputSource source(&file);
+ QXmlSimpleReader reader;
+ reader.setContentHandler(&m_handler);
+
+ QVERIFY(reader.parse(&source, false));
+}
+
+void tst_QXmlStream::cleanupTestCase()
+{
+ QFile::remove(QLatin1String("test.xml"));
+}
+
+void tst_QXmlStream::reportFailures() const
+{
+ QFETCH(bool, isError);
+ QFETCH(QString, description);
+
+ QVERIFY2(!isError, qPrintable(description));
+}
+
+void tst_QXmlStream::reportFailures_data()
+{
+ const int len = m_handler.failures.count();
+
+ QTest::addColumn<bool>("isError");
+ QTest::addColumn<QString>("description");
+
+ /* We loop over all our failures(if any!), and output them such
+ * that they appear in the Qt Test log. */
+ for(int i = 0; i < len; ++i)
+ QTest::newRow(m_handler.failures.at(i).first.toLatin1().constData()) << true << m_handler.failures.at(i).second;
+
+ /* We need to add at least one column of test data, otherwise Qt Test complains. */
+ if(len == 0)
+ QTest::newRow("Whole test suite passed") << false << QString();
+
+ /* We compare the test case counts to ensure that we've actually run test cases, that
+ * the driver hasn't been broken or changed without updating the expected count, and
+ * similar reasons. */
+ QCOMPARE(m_handler.runCount, expectedRunCount);
+ QCOMPARE(m_handler.skipCount, expectedSkipCount);
+}
+
+void tst_QXmlStream::checkBaseline() const
+{
+ QFETCH(bool, isError);
+ QFETCH(QString, expected);
+ QFETCH(QString, output);
+
+ if(isError)
+ QCOMPARE(output, expected);
+}
+
+void tst_QXmlStream::checkBaseline_data() const
+{
+ QTest::addColumn<bool>("isError");
+ QTest::addColumn<QString>("expected");
+ QTest::addColumn<QString>("output");
+
+ const int len = m_handler.missedBaselines.count();
+
+ for(int i = 0; i < len; ++i)
+ {
+ const TestSuiteHandler::MissedBaseline &b = m_handler.missedBaselines.at(i);
+
+ /* We indeed don't know what encoding the content is in so in some cases fromUtf8
+ * is all wrong, but it's an acceptable guess for error reporting. */
+ QTest::newRow(b.id.toLatin1().constData())
+ << true
+ << QString::fromUtf8(b.expected.constData())
+ << QString::fromUtf8(b.output.constData());
+ }
+
+ if(len == 0)
+ QTest::newRow("dummy") << false << QString() << QString();
+}
+
+void tst_QXmlStream::reportSuccess() const
+{
+ QFETCH(bool, isError);
+
+ QVERIFY(!isError);
+}
+
+void tst_QXmlStream::reportSuccess_data() const
+{
+ QTest::addColumn<bool>("isError");
+
+ const int len = m_handler.successes.count();
+
+ for (int i = 0; i < len; ++i) {
+ const QByteArray testName = QByteArray::number(i) + ". " + m_handler.successes.at(i).toLatin1();
+ QTest::newRow(testName.constData()) << false;
+ }
+
+ if(len == 0)
+ QTest::newRow("No test cases succeeded.") << true;
+}
+
+QByteArray tst_QXmlStream::readFile(const QString &filename)
+{
+ QFile file(filename);
+ file.open(QIODevice::ReadOnly);
+
+ QXmlStreamReader reader;
+
+ reader.setDevice(&file);
+ QByteArray outarray;
+ QTextStream writer(&outarray);
+ // We always want UTF-8, and not what the system picks up.
+ writer.setCodec("UTF-8");
+
+ while (!reader.atEnd()) {
+ reader.readNext();
+ writer << reader.tokenString() << '(';
+ if (reader.isWhitespace())
+ writer << " whitespace";
+ if (reader.isCDATA())
+ writer << " CDATA";
+ if (reader.isStartDocument() && reader.isStandaloneDocument())
+ writer << " standalone";
+ if (!reader.text().isEmpty())
+ writer << " text=\"" << reader.text().toString() << '"';
+ if (!reader.processingInstructionTarget().isEmpty())
+ writer << " processingInstructionTarget=\"" << reader.processingInstructionTarget().toString() << '"';
+ if (!reader.processingInstructionData().isEmpty())
+ writer << " processingInstructionData=\"" << reader.processingInstructionData().toString() << '"';
+ if (!reader.dtdName().isEmpty())
+ writer << " dtdName=\"" << reader.dtdName().toString() << '"';
+ if (!reader.dtdPublicId().isEmpty())
+ writer << " dtdPublicId=\"" << reader.dtdPublicId().toString() << '"';
+ if (!reader.dtdSystemId().isEmpty())
+ writer << " dtdSystemId=\"" << reader.dtdSystemId().toString() << '"';
+ if (!reader.documentVersion().isEmpty())
+ writer << " documentVersion=\"" << reader.documentVersion().toString() << '"';
+ if (!reader.documentEncoding().isEmpty())
+ writer << " documentEncoding=\"" << reader.documentEncoding().toString() << '"';
+ if (!reader.name().isEmpty())
+ writer << " name=\"" << reader.name().toString() << '"';
+ if (!reader.namespaceUri().isEmpty())
+ writer << " namespaceUri=\"" << reader.namespaceUri().toString() << '"';
+ if (!reader.qualifiedName().isEmpty())
+ writer << " qualifiedName=\"" << reader.qualifiedName().toString() << '"';
+ if (!reader.prefix().isEmpty())
+ writer << " prefix=\"" << reader.prefix().toString() << '"';
+ const auto attributes = reader.attributes();
+ if (attributes.size()) {
+ for (const QXmlStreamAttribute &attribute : attributes) {
+ writer << endl << " Attribute(";
+ if (!attribute.name().isEmpty())
+ writer << " name=\"" << attribute.name().toString() << '"';
+ if (!attribute.namespaceUri().isEmpty())
+ writer << " namespaceUri=\"" << attribute.namespaceUri().toString() << '"';
+ if (!attribute.qualifiedName().isEmpty())
+ writer << " qualifiedName=\"" << attribute.qualifiedName().toString() << '"';
+ if (!attribute.prefix().isEmpty())
+ writer << " prefix=\"" << attribute.prefix().toString() << '"';
+ if (!attribute.value().isEmpty())
+ writer << " value=\"" << attribute.value().toString() << '"';
+ writer << " )" << endl;
+ }
+ }
+ const auto namespaceDeclarations = reader.namespaceDeclarations();
+ if (namespaceDeclarations.size()) {
+ for (const QXmlStreamNamespaceDeclaration &namespaceDeclaration : namespaceDeclarations) {
+ writer << endl << " NamespaceDeclaration(";
+ if (!namespaceDeclaration.prefix().isEmpty())
+ writer << " prefix=\"" << namespaceDeclaration.prefix().toString() << '"';
+ if (!namespaceDeclaration.namespaceUri().isEmpty())
+ writer << " namespaceUri=\"" << namespaceDeclaration.namespaceUri().toString() << '"';
+ writer << " )" << endl;
+ }
+ }
+ const auto notationDeclarations = reader.notationDeclarations();
+ if (notationDeclarations.size()) {
+ for (const QXmlStreamNotationDeclaration &notationDeclaration : notationDeclarations) {
+ writer << endl << " NotationDeclaration(";
+ if (!notationDeclaration.name().isEmpty())
+ writer << " name=\"" << notationDeclaration.name().toString() << '"';
+ if (!notationDeclaration.systemId().isEmpty())
+ writer << " systemId=\"" << notationDeclaration.systemId().toString() << '"';
+ if (!notationDeclaration.publicId().isEmpty())
+ writer << " publicId=\"" << notationDeclaration.publicId().toString() << '"';
+ writer << " )" << endl;
+ }
+ }
+ const auto entityDeclarations = reader.entityDeclarations();
+ if (entityDeclarations.size()) {
+ for (const QXmlStreamEntityDeclaration &entityDeclaration : entityDeclarations) {
+ writer << endl << " EntityDeclaration(";
+ if (!entityDeclaration.name().isEmpty())
+ writer << " name=\"" << entityDeclaration.name().toString() << '"';
+ if (!entityDeclaration.notationName().isEmpty())
+ writer << " notationName=\"" << entityDeclaration.notationName().toString() << '"';
+ if (!entityDeclaration.systemId().isEmpty())
+ writer << " systemId=\"" << entityDeclaration.systemId().toString() << '"';
+ if (!entityDeclaration.publicId().isEmpty())
+ writer << " publicId=\"" << entityDeclaration.publicId().toString() << '"';
+ if (!entityDeclaration.value().isEmpty())
+ writer << " value=\"" << entityDeclaration.value().toString() << '"';
+ writer << " )" << endl;
+ }
+ }
+ writer << " )" << endl;
+ }
+ if (reader.hasError())
+ writer << "ERROR: " << reader.errorString() << endl;
+ return outarray;
+}
+
+void tst_QXmlStream::testReader() const
+{
+ QFETCH(QString, xml);
+ QFETCH(QString, ref);
+ QFile file(ref);
+ if (!file.exists()) {
+ QByteArray reference = readFile(xml);
+ QVERIFY(file.open(QIODevice::WriteOnly));
+ file.write(reference);
+ file.close();
+ } else {
+ QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
+ QString reference = QString::fromUtf8(file.readAll());
+ QString qxmlstream = QString::fromUtf8(readFile(xml));
+ QCOMPARE(qxmlstream, reference);
+ }
+}
+
+void tst_QXmlStream::testReader_data() const
+{
+ QTest::addColumn<QString>("xml");
+ QTest::addColumn<QString>("ref");
+ QDir dir;
+ dir.cd(QFINDTESTDATA("data/"));
+ const auto fileNames = dir.entryList(QStringList() << "*.xml");
+ for (const QString &filename : fileNames) {
+ QString reference = QFileInfo(filename).baseName() + ".ref";
+ QTest::newRow(dir.filePath(filename).toLatin1().data()) << dir.filePath(filename) << dir.filePath(reference);
+ }
+}
+
+void tst_QXmlStream::addExtraNamespaceDeclarations()
+{
+ const char *data = "<bla><undeclared:foo/><undeclared_too:foo/></bla>";
+ {
+ QXmlStreamReader xml(data);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QVERIFY2(xml.hasError(), "namespaces undeclared");
+ }
+ {
+ QXmlStreamReader xml(data);
+ xml.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("undeclared", "blabla"));
+ xml.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("undeclared_too", "foofoo"));
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QVERIFY2(!xml.hasError(), xml.errorString().toLatin1().constData());
+ }
+}
+
+
+class EntityResolver : public QXmlStreamEntityResolver {
+public:
+ QString resolveUndeclaredEntity(const QString &name) {
+ static int count = 0;
+ return name.toUpper() + QString::number(++count);
+ }
+};
+void tst_QXmlStream::setEntityResolver()
+{
+ const char *data = "<bla foo=\"&undeclared;\">&undeclared_too;</bla>";
+ {
+ QXmlStreamReader xml(data);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QVERIFY2(xml.hasError(), "undeclared entities");
+ }
+ {
+ QString foo;
+ QString bla_text;
+ QXmlStreamReader xml(data);
+ EntityResolver resolver;
+ xml.setEntityResolver(&resolver);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ if (xml.isStartElement())
+ foo = xml.attributes().value("foo").toString();
+ if (xml.isCharacters())
+ bla_text += xml.text().toString();
+ }
+ QVERIFY2(!xml.hasError(), xml.errorString().toLatin1().constData());
+ QCOMPARE(foo, QLatin1String("UNDECLARED1"));
+ QCOMPARE(bla_text, QLatin1String("UNDECLARED_TOO2"));
+ }
+}
+
+void tst_QXmlStream::testFalsePrematureError() const
+{
+ const char *illegal_start = "illegal<sta";
+ const char *legal_start = "<sta";
+ const char* end = "rt/>";
+ {
+ QXmlStreamReader xml("");
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QCOMPARE(xml.error(), QXmlStreamReader::PrematureEndOfDocumentError);
+ QCOMPARE(xml.errorString(), QLatin1String("Premature end of document."));
+ xml.addData(legal_start);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QCOMPARE(xml.error(), QXmlStreamReader::PrematureEndOfDocumentError);
+ QCOMPARE(xml.errorString(), QLatin1String("Premature end of document."));
+ xml.addData(end);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QVERIFY(!xml.hasError());
+ }
+ {
+ QXmlStreamReader xml(illegal_start);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+ QVERIFY(xml.hasError());
+ QCOMPARE(xml.errorString(), QLatin1String("Start tag expected."));
+ QCOMPARE(xml.error(), QXmlStreamReader::NotWellFormedError);
+ }
+}
+
+// Regression test for crash due to using empty QStack.
+void tst_QXmlStream::writerHangs() const
+{
+ QTemporaryDir dir(QDir::tempPath() + QLatin1String("/tst_qxmlstream.XXXXXX"));
+ QFile file(dir.path() + "/test.xml");
+
+ QVERIFY(file.open(QIODevice::WriteOnly));
+
+ QXmlStreamWriter writer(&file);
+ double radius = 4.0;
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeEmptyElement("circle");
+ writer.writeAttribute("radius", QString::number(radius));
+ writer.writeEndElement();
+ writer.writeEndDocument();
+}
+
+void tst_QXmlStream::writerAutoFormattingWithComments() const
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+
+ QXmlStreamWriter writer(&buffer);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeComment("This is a comment");
+ writer.writeEndDocument();
+ const char *str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--This is a comment-->\n";
+ QCOMPARE(buffer.buffer().data(), str);
+}
+
+void tst_QXmlStream::writerAutoFormattingWithTabs() const
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+
+
+ QXmlStreamWriter writer(&buffer);
+ writer.setAutoFormatting(true);
+ writer.setAutoFormattingIndent(-1);
+ QCOMPARE(writer.autoFormattingIndent(), -1);
+ writer.writeStartDocument();
+ writer.writeStartElement("A");
+ writer.writeStartElement("B");
+ writer.writeEndDocument();
+ const char *str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<A>\n\t<B/>\n</A>\n";
+ QCOMPARE(buffer.buffer().data(), str);
+}
+
+void tst_QXmlStream::writerAutoFormattingWithProcessingInstructions() const
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+
+ QXmlStreamWriter writer(&buffer);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument();
+ writer.writeProcessingInstruction("B", "C");
+ writer.writeStartElement("A");
+ writer.writeEndElement();
+ writer.writeEndDocument();
+ const char *str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?B C?>\n<A/>\n";
+ QCOMPARE(buffer.buffer().data(), str);
+}
+
+void tst_QXmlStream::writeAttributesWithSpace() const
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+
+
+ QXmlStreamWriter writer(&buffer);
+ writer.writeStartDocument();
+ writer.writeEmptyElement("A");
+ writer.writeAttribute("attribute", QStringLiteral("value") + QChar(QChar::Nbsp));
+ writer.writeEndDocument();
+ QString s = QLatin1String("<?xml version=\"1.0\" encoding=\"UTF-8\"?><A attribute=\"value")
+ + QChar(QChar::Nbsp) + QLatin1String("\"/>\n");
+ QCOMPARE(buffer.buffer().data(), s.toUtf8().data());
+}
+
+void tst_QXmlStream::writerAutoEmptyTags() const
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+
+
+ QXmlStreamWriter writer(&buffer);
+
+ writer.writeStartDocument();
+
+ writer.writeStartElement("Hans");
+ writer.writeAttribute("key", "value");
+ writer.writeEndElement();
+
+ writer.writeStartElement("Hans");
+ writer.writeAttribute("key", "value");
+ writer.writeEmptyElement("Leer");
+ writer.writeAttribute("key", "value");
+ writer.writeEndElement();
+
+ writer.writeStartElement("Hans");
+ writer.writeAttribute("key", "value");
+ writer.writeCharacters("stuff");
+ writer.writeEndElement();
+
+ writer.writeEndDocument();
+
+ QString s = QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Hans key=\"value\"/><Hans key=\"value\"><Leer key=\"value\"/></Hans><Hans key=\"value\">stuff</Hans>\n");
+ QCOMPARE(buffer.buffer().data(), s.toUtf8().data());
+}
+
+void tst_QXmlStream::readFromQBuffer() const
+{
+ QByteArray in("<e/>");
+ QBuffer buffer(&in);
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+
+ QXmlStreamReader reader(&buffer);
+
+ while(!reader.atEnd())
+ {
+ reader.readNext();
+ }
+
+ QVERIFY(!reader.hasError());
+}
+
+void tst_QXmlStream::readFromQBufferInvalid() const
+{
+ QByteArray in("<e/><e/>");
+ QBuffer buffer(&in);
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+
+ QXmlStreamReader reader(&buffer);
+
+ while(!reader.atEnd())
+ {
+ reader.readNext();
+ }
+
+ QVERIFY(reader.hasError());
+}
+
+void tst_QXmlStream::readNextStartElement() const
+{
+ QLatin1String in("<?xml version=\"1.0\"?><A><!-- blah --><B><C/></B><B attr=\"value\"/>text</A>");
+ QXmlStreamReader reader(in);
+
+ QVERIFY(reader.readNextStartElement());
+ QVERIFY(reader.isStartElement() && reader.name() == QLatin1String("A"));
+
+ int amountOfB = 0;
+ while (reader.readNextStartElement()) {
+ QVERIFY(reader.isStartElement() && reader.name() == QLatin1String("B"));
+ ++amountOfB;
+ reader.skipCurrentElement();
+ }
+
+ QCOMPARE(amountOfB, 2);
+}
+
+void tst_QXmlStream::readElementText() const
+{
+ QFETCH(QXmlStreamReader::ReadElementTextBehaviour, behaviour);
+ QFETCH(QString, input);
+ QFETCH(QString, expected);
+
+ QXmlStreamReader reader(input);
+
+ QVERIFY(reader.readNextStartElement());
+ QCOMPARE(reader.readElementText(behaviour), expected);
+}
+
+void tst_QXmlStream::readElementText_data() const
+{
+ QTest::addColumn<QXmlStreamReader::ReadElementTextBehaviour>("behaviour");
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expected");
+
+ QString validInput("<p>He was <em>never</em> going to admit<!-- TODO: rephrase --> his mistake.</p>");
+ QString invalidInput("<p>invalid...<p>");
+ QString invalidOutput("invalid...");
+
+ QTest::newRow("ErrorOnUnexpectedElement")
+ << QXmlStreamReader::ErrorOnUnexpectedElement
+ << validInput << QString("He was ");
+
+ QTest::newRow("IncludeChildElements")
+ << QXmlStreamReader::IncludeChildElements
+ << validInput << QString("He was never going to admit his mistake.");
+
+ QTest::newRow("SkipChildElements")
+ << QXmlStreamReader::SkipChildElements
+ << validInput << QString("He was going to admit his mistake.");
+
+ QTest::newRow("ErrorOnUnexpectedElement Invalid")
+ << QXmlStreamReader::ErrorOnUnexpectedElement
+ << invalidInput << invalidOutput;
+
+ QTest::newRow("IncludeChildElements Invalid")
+ << QXmlStreamReader::IncludeChildElements
+ << invalidInput << invalidOutput;
+
+ QTest::newRow("SkipChildElements Invalid")
+ << QXmlStreamReader::SkipChildElements
+ << invalidInput << invalidOutput;
+}
+
+void tst_QXmlStream::crashInUTF16Codec() const
+{
+ QEventLoop eventLoop;
+
+ QNetworkAccessManager networkManager;
+ QNetworkRequest request(QUrl::fromLocalFile(QFINDTESTDATA("data/051reduced.xml")));
+ QNetworkReply *const reply = networkManager.get(request);
+ eventLoop.connect(reply, SIGNAL(finished()), SLOT(quit()));
+
+ QCOMPARE(eventLoop.exec(), 0);
+
+ QXmlStreamReader reader(reply);
+ while(!reader.atEnd())
+ {
+ reader.readNext();
+ continue;
+ }
+
+ QVERIFY(!reader.hasError());
+}
+
+/*
+ In addition to Qt Test's flags, one can specify "-c <filename>" and have that file output in its canonical form.
+*/
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+
+ if (argc == 3 && QByteArray(argv[1]).startsWith("-c")) {
+ // output canonical only
+ bool error = false;
+ QByteArray canonical = makeCanonical(argv[2], "doc", error);
+ QTextStream myStdOut(stdout);
+ myStdOut << canonical << endl;
+ exit(0);
+ }
+
+ tst_QXmlStream tc;
+ return QTest::qExec(&tc, argc, argv);
+}
+
+void tst_QXmlStream::hasAttributeSignature() const
+{
+ /* These functions should be const so invoke all
+ * of them on a const object. */
+ const QXmlStreamAttributes atts;
+ atts.hasAttribute(QLatin1String("localName"));
+ atts.hasAttribute(QString::fromLatin1("localName"));
+ atts.hasAttribute(QString::fromLatin1("http://example.com/"), QLatin1String("localName"));
+
+ /* The input arguments should be const references, not mutable references
+ * so pass const references. */
+ const QLatin1String latin1StringLocalName(QLatin1String("localName"));
+ const QString qStringLocalname(QLatin1String("localName"));
+ const QString namespaceURI(QLatin1String("http://example.com/"));
+
+ /* QLatin1String overload. */
+ atts.hasAttribute(latin1StringLocalName);
+
+ /* QString overload. */
+ atts.hasAttribute(latin1StringLocalName);
+
+ /* namespace/local name overload. */
+ atts.hasAttribute(namespaceURI, qStringLocalname);
+}
+
+void tst_QXmlStream::hasAttribute() const
+{
+ QXmlStreamReader reader(QLatin1String("<e xmlns:p='http://example.com/2' xmlns='http://example.com/' "
+ "attr1='value' attr2='value2' p:attr3='value3' emptyAttr=''><noAttributes/></e>"));
+
+ QCOMPARE(reader.readNext(), QXmlStreamReader::StartDocument);
+ QCOMPARE(reader.readNext(), QXmlStreamReader::StartElement);
+ const QXmlStreamAttributes &atts = reader.attributes();
+
+ /* QLatin1String overload. */
+ QVERIFY(atts.hasAttribute(QLatin1String("attr1")));
+ QVERIFY(atts.hasAttribute(QLatin1String("attr2")));
+ QVERIFY(atts.hasAttribute(QLatin1String("p:attr3")));
+ QVERIFY(atts.hasAttribute(QLatin1String("emptyAttr")));
+ QVERIFY(!atts.hasAttribute(QLatin1String("DOESNOTEXIST")));
+
+ /* Test with an empty & null namespaces. */
+ QVERIFY(atts.hasAttribute(QString(), QLatin1String("attr2"))); /* A null string. */
+ QVERIFY(atts.hasAttribute(QLatin1String(""), QLatin1String("attr2"))); /* An empty string. */
+
+ /* QString overload. */
+ QVERIFY(atts.hasAttribute(QString::fromLatin1("attr1")));
+ QVERIFY(atts.hasAttribute(QString::fromLatin1("attr2")));
+ QVERIFY(atts.hasAttribute(QString::fromLatin1("p:attr3")));
+ QVERIFY(atts.hasAttribute(QString::fromLatin1("emptyAttr")));
+ QVERIFY(!atts.hasAttribute(QString::fromLatin1("DOESNOTEXIST")));
+
+ /* namespace/local name overload. */
+ QVERIFY(atts.hasAttribute(QString(), QString::fromLatin1("attr1")));
+ /* Attributes do not pick up the default namespace. */
+ QVERIFY(!atts.hasAttribute(QLatin1String("http://example.com/"), QString::fromLatin1("attr1")));
+ QVERIFY(atts.hasAttribute(QLatin1String("http://example.com/2"), QString::fromLatin1("attr3")));
+ QVERIFY(atts.hasAttribute(QString(), QString::fromLatin1("emptyAttr")));
+ QVERIFY(!atts.hasAttribute(QLatin1String("http://example.com/2"), QString::fromLatin1("DOESNOTEXIST")));
+ QVERIFY(!atts.hasAttribute(QLatin1String("WRONG_NAMESPACE"), QString::fromLatin1("attr3")));
+
+ /* Invoke on an QXmlStreamAttributes that has no attributes at all. */
+ QCOMPARE(reader.readNext(), QXmlStreamReader::StartElement);
+
+ const QXmlStreamAttributes &atts2 = reader.attributes();
+ QVERIFY(atts2.isEmpty());
+
+ /* QLatin1String overload. */
+ QVERIFY(!atts.hasAttribute(QLatin1String("arbitraryName")));
+
+ /* QString overload. */
+ QVERIFY(!atts.hasAttribute(QString::fromLatin1("arbitraryName")));
+
+ /* namespace/local name overload. */
+ QVERIFY(!atts.hasAttribute(QLatin1String("http://example.com/"), QString::fromLatin1("arbitraryName")));
+
+ while(!reader.atEnd())
+ reader.readNext();
+
+ QVERIFY(!reader.hasError());
+}
+
+
+void tst_QXmlStream::writeWithCodec() const
+{
+ QByteArray outarray;
+ QXmlStreamWriter writer(&outarray);
+ writer.setAutoFormatting(true);
+
+ QTextCodec *codec = QTextCodec::codecForName("ISO 8859-15");
+ QVERIFY(codec);
+ writer.setCodec(codec);
+
+ const char *latin2 = "h\xe9 h\xe9";
+ const QString string = codec->toUnicode(latin2);
+
+
+ writer.writeStartDocument("1.0");
+
+ writer.writeTextElement("foo", string);
+ writer.writeEndElement();
+ writer.writeEndDocument();
+
+ QVERIFY(outarray.contains(latin2));
+ QVERIFY(outarray.contains(codec->name()));
+}
+
+void tst_QXmlStream::writeWithUtf8Codec() const
+{
+ QByteArray outarray;
+ QXmlStreamWriter writer(&outarray);
+
+ QTextCodec *codec = QTextCodec::codecForMib(106); // utf-8
+ QVERIFY(codec);
+ writer.setCodec(codec);
+
+ writer.writeStartDocument("1.0");
+ static const char begin[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+ QVERIFY(outarray.startsWith(begin));
+}
+
+void tst_QXmlStream::writeWithUtf16Codec() const
+{
+ QByteArray outarray;
+ QXmlStreamWriter writer(&outarray);
+
+ QTextCodec *codec = QTextCodec::codecForMib(1014); // utf-16LE
+ QVERIFY(codec);
+ writer.setCodec(codec);
+
+ writer.writeStartDocument("1.0");
+ static const char begin[] = "<?xml version=\"1.0\" encoding=\"UTF-16"; // skip potential "LE" suffix
+ const int count = sizeof(begin) - 1; // don't include 0 terminator
+ QByteArray begin_UTF16;
+ begin_UTF16.reserve(2*(count));
+ for (int i = 0; i < count; ++i) {
+ begin_UTF16.append(begin[i]);
+ begin_UTF16.append((char)'\0');
+ }
+ QVERIFY(outarray.startsWith(begin_UTF16));
+}
+
+void tst_QXmlStream::writeWithStandalone() const
+{
+ {
+ QByteArray outarray;
+ QXmlStreamWriter writer(&outarray);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument("1.0", true);
+ writer.writeEndDocument();
+ const char *ref = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
+ QCOMPARE(outarray.constData(), ref);
+ }
+ {
+ QByteArray outarray;
+ QXmlStreamWriter writer(&outarray);
+ writer.setAutoFormatting(true);
+ writer.writeStartDocument("1.0", false);
+ writer.writeEndDocument();
+ const char *ref = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
+ QCOMPARE(outarray.constData(), ref);
+ }
+}
+
+void tst_QXmlStream::entitiesAndWhitespace_1() const
+{
+ QXmlStreamReader reader(QLatin1String("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"><test>&extEnt;</test>"));
+
+ int entityCount = 0;
+ int characterCount = 0;
+ while(!reader.atEnd())
+ {
+ QXmlStreamReader::TokenType token = reader.readNext();
+ switch(token)
+ {
+ case QXmlStreamReader::Characters:
+ characterCount++;
+ break;
+ case QXmlStreamReader::EntityReference:
+ entityCount++;
+ break;
+ default:
+ ;
+ }
+ }
+
+ QCOMPARE(entityCount, 1);
+ QCOMPARE(characterCount, 0);
+ QVERIFY(!reader.hasError());
+}
+
+void tst_QXmlStream::entitiesAndWhitespace_2() const
+{
+ QXmlStreamReader reader(QLatin1String("<test>&extEnt;</test>"));
+
+ int entityCount = 0;
+ int characterCount = 0;
+ while(!reader.atEnd())
+ {
+ QXmlStreamReader::TokenType token = reader.readNext();
+ switch(token)
+ {
+ case QXmlStreamReader::Characters:
+ characterCount++;
+ break;
+ case QXmlStreamReader::EntityReference:
+ entityCount++;
+ break;
+ default:
+ ;
+ }
+ }
+
+ QCOMPARE(entityCount, 0);
+ QCOMPARE(characterCount, 0);
+ QVERIFY(reader.hasError());
+}
+
+void tst_QXmlStream::garbageInXMLPrologDefaultCodec() const
+{
+ QBuffer out;
+ QVERIFY(out.open(QIODevice::ReadWrite));
+
+ QXmlStreamWriter writer (&out);
+ writer.writeStartDocument();
+ writer.writeEmptyElement("Foo");
+ writer.writeEndDocument();
+
+ QCOMPARE(out.data(), QByteArray("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Foo/>\n"));
+}
+
+void tst_QXmlStream::garbageInXMLPrologUTF8Explicitly() const
+{
+ QBuffer out;
+ QVERIFY(out.open(QIODevice::ReadWrite));
+
+ QXmlStreamWriter writer (&out);
+ writer.setCodec("UTF-8");
+ writer.writeStartDocument();
+ writer.writeEmptyElement("Foo");
+ writer.writeEndDocument();
+
+ QCOMPARE(out.data(), QByteArray("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Foo/>\n"));
+}
+
+void tst_QXmlStream::clear() const
+{
+ QString xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><body></body>";
+ QXmlStreamReader reader;
+
+ reader.addData(xml);
+ while (!reader.atEnd()) {
+ reader.readNext();
+ }
+ QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument);
+
+ reader.clear();
+ reader.addData(xml);
+ while (!reader.atEnd()) {
+ reader.readNext();
+ }
+ QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument);
+
+
+ // now we stop in the middle to check whether clear really works
+ reader.clear();
+ reader.addData(xml);
+ reader.readNext();
+ reader.readNext();
+ QCOMPARE(reader.tokenType(), QXmlStreamReader::StartElement);
+
+ // and here the final read
+ reader.clear();
+ reader.addData(xml);
+ while (!reader.atEnd()) {
+ reader.readNext();
+ }
+ QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument);
+}
+
+void tst_QXmlStream::checkCommentIndentation_data() const
+{
+
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expectedOutput");
+
+ QString simpleInput = "<a><!-- bla --></a>";
+ QString simpleOutput = "<?xml version=\"1.0\"?>\n"
+ "<a>\n"
+ " <!-- bla -->\n"
+ "</a>\n";
+ QTest::newRow("simple-comment") << simpleInput << simpleOutput;
+
+ QString advancedInput = "<a><!-- bla --><!-- bla --><b><!-- bla --><c><!-- bla --></c><!-- bla --></b></a>";
+ QString advancedOutput = "<?xml version=\"1.0\"?>\n"
+ "<a>\n"
+ " <!-- bla -->\n"
+ " <!-- bla -->\n"
+ " <b>\n"
+ " <!-- bla -->\n"
+ " <c>\n"
+ " <!-- bla -->\n"
+ " </c>\n"
+ " <!-- bla -->\n"
+ " </b>\n"
+ "</a>\n";
+ QTest::newRow("advanced-comment") << advancedInput << advancedOutput;
+}
+
+void tst_QXmlStream::checkCommentIndentation() const
+{
+ QFETCH(QString, input);
+ QFETCH(QString, expectedOutput);
+ QString output;
+ QXmlStreamReader reader(input);
+ QXmlStreamWriter writer(&output);
+ writer.setAutoFormatting(true);
+ writer.setAutoFormattingIndent(3);
+
+ while (!reader.atEnd()) {
+ reader.readNext();
+ if (reader.error()) {
+ QFAIL("error reading XML input");
+ } else {
+ writer.writeCurrentToken(reader);
+ }
+ }
+ QCOMPARE(output, expectedOutput);
+}
+
+// This is a regression test for QTBUG-9196, where the series of tags used
+// in the test caused a crash in the XML stream reader.
+void tst_QXmlStream::crashInXmlStreamReader() const
+{
+ QByteArray ba("<a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a>"
+ "<a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a></a>");
+ QXmlStreamReader xml(ba);
+ while (!xml.atEnd()) {
+ xml.readNext();
+ }
+}
+
+class FakeBuffer : public QBuffer
+{
+protected:
+ qint64 writeData(const char *c, qint64 i)
+ {
+ qint64 ai = qMin(m_capacity, i);
+ m_capacity -= ai;
+ return ai ? QBuffer::writeData(c, ai) : 0;
+ }
+public:
+ void setCapacity(int capacity) { m_capacity = capacity; }
+private:
+ qint64 m_capacity;
+};
+
+void tst_QXmlStream::hasError() const
+{
+ {
+ FakeBuffer fb;
+ QVERIFY(fb.open(QBuffer::ReadWrite));
+ fb.setCapacity(1000);
+ QXmlStreamWriter writer(&fb);
+ writer.writeStartDocument();
+ writer.writeEndDocument();
+ QVERIFY(!writer.hasError());
+ QCOMPARE(fb.data(), QByteArray("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"));
+ }
+
+ {
+ // Failure caused by write(QString)
+ FakeBuffer fb;
+ QVERIFY(fb.open(QBuffer::ReadWrite));
+ const QByteArray expected = QByteArrayLiteral("<?xml version=\"");
+ fb.setCapacity(expected.size());
+ QXmlStreamWriter writer(&fb);
+ writer.writeStartDocument();
+ QVERIFY(writer.hasError());
+ QCOMPARE(fb.data(), expected);
+ }
+
+ {
+ // Failure caused by write(char *)
+ FakeBuffer fb;
+ QVERIFY(fb.open(QBuffer::ReadWrite));
+ const QByteArray expected = QByteArrayLiteral("<?xml version=\"1.0");
+ fb.setCapacity(expected.size());
+ QXmlStreamWriter writer(&fb);
+ writer.writeStartDocument();
+ QVERIFY(writer.hasError());
+ QCOMPARE(fb.data(), expected);
+ }
+
+ {
+ // Failure caused by write(QStringRef)
+ FakeBuffer fb;
+ QVERIFY(fb.open(QBuffer::ReadWrite));
+ const QByteArray expected = QByteArrayLiteral("<?xml version=\"1.0\" encoding=\"UTF-8\"?><test xmlns:");
+ fb.setCapacity(expected.size());
+ QXmlStreamWriter writer(&fb);
+ writer.writeStartDocument();
+ writer.writeStartElement("test");
+ writer.writeNamespace("http://foo.bar", "foo");
+ QVERIFY(writer.hasError());
+ QCOMPARE(fb.data(), expected);
+ }
+
+ {
+ // Refusal to write after 1st failure
+ FakeBuffer fb;
+ QVERIFY(fb.open(QBuffer::ReadWrite));
+ fb.setCapacity(10);
+ QXmlStreamWriter writer(&fb);
+ writer.writeStartDocument();
+ QVERIFY(writer.hasError());
+ QCOMPARE(fb.data(), QByteArray("<?xml vers"));
+ fb.setCapacity(1000);
+ writer.writeStartElement("test"); // literal & qstring
+ writer.writeNamespace("http://foo.bar", "foo"); // literal & qstringref
+ QVERIFY(writer.hasError());
+ QCOMPARE(fb.data(), QByteArray("<?xml vers"));
+ }
+
+}
+
+void tst_QXmlStream::write8bitCodec() const
+{
+ QBuffer outBuffer;
+ QVERIFY(outBuffer.open(QIODevice::WriteOnly));
+ QXmlStreamWriter writer(&outBuffer);
+ writer.setAutoFormatting(false);
+
+ QTextCodec *codec = QTextCodec::codecForName("IBM500");
+ if (!codec) {
+ QSKIP("Encoding IBM500 not available.");
+ }
+ writer.setCodec(codec);
+
+ writer.writeStartDocument();
+ writer.writeStartElement("root");
+ writer.writeAttribute("attrib", "1");
+ writer.writeEndElement();
+ writer.writeEndDocument();
+ outBuffer.close();
+
+ // test 8 bit encoding
+ QByteArray values = outBuffer.data();
+ QVERIFY(values.size() > 1);
+ // check '<'
+ QCOMPARE(values[0] & 0x00FF, 0x4c);
+ // check '?'
+ QCOMPARE(values[1] & 0x00FF, 0x6F);
+
+ // convert the start of the XML
+ const QString expected = ("<?xml version=\"1.0\" encoding=\"IBM500\"?>");
+ QTextDecoder *decoder = codec->makeDecoder();
+ QVERIFY(decoder);
+ QString decodedText = decoder->toUnicode(values);
+ delete decoder;
+ QVERIFY(decodedText.startsWith(expected));
+}
+
+void tst_QXmlStream::invalidStringCharacters() const
+{
+ // test scan in attributes
+ QFETCH(QString, testString);
+ QFETCH(bool, expectedResultNoError);
+
+ QByteArray values = testString.toUtf8();
+ QBuffer inBuffer;
+ inBuffer.setData(values);
+ QVERIFY(inBuffer.open(QIODevice::ReadOnly));
+ QXmlStreamReader reader(&inBuffer);
+ do {
+ reader.readNext();
+ } while (!reader.atEnd());
+ QCOMPARE((reader.error() == QXmlStreamReader::NoError), expectedResultNoError);
+}
+
+void tst_QXmlStream::invalidStringCharacters_data() const
+{
+ // test scan in attributes
+ QTest::addColumn<bool>("expectedResultNoError");
+ QTest::addColumn<QString>("testString");
+ QChar ctrl(0x1A);
+ QTest::newRow("utf8, attributes, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'/>");
+ QTest::newRow("utf8, attributes, only char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='")+ctrl+QString("'/>");
+ QTest::newRow("utf8, attributes, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='")+ctrl+QString("abc'/>");
+ QTest::newRow("utf8, attributes, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='abc")+ctrl+QString("efgx'/>");
+ QTest::newRow("utf8, attributes, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='abcde")+ctrl+QString("'/>");
+ //
+ QTest::newRow("utf8, text, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abcx1A</root>");
+ QTest::newRow("utf8, text, only, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>")+ctrl+QString("</root>");
+ QTest::newRow("utf8, text, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("def</root>");
+ QTest::newRow("utf8, text, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("efg</root>");
+ QTest::newRow("utf8, text, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("</root>");
+ //
+ QTest::newRow("utf8, cdata text, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi]]></root>");
+ QTest::newRow("utf8, cdata text, only, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[")+ctrl+QString("]]></root>");
+ QTest::newRow("utf8, cdata text, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[")+ctrl+QString("abcdefghi]]></root>");
+ QTest::newRow("utf8, cdata text, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcd")+ctrl+QString("efghi]]></root>");
+ QTest::newRow("utf8, cdata text, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi")+ctrl+QString("]]></root>");
+ //
+ QTest::newRow("utf8, mixed, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a")+ctrl+QString("a'><![CDATA[abcdefghi")+ctrl+QString("]]></root>");
+ QTest::newRow("utf8, tag") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><roo")+ctrl+QString("t attr='aa'><![CDATA[abcdefghi]]></roo")+ctrl+QString("t>");
+ //
+ QTest::newRow("utf8, attributes, 1st char, legal escaping hex") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a&#xA0;'/>");
+ QTest::newRow("utf8, attributes, 1st char, control escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='&#x1A;aaa'/>");
+ QTest::newRow("utf8, attributes, middle char, legal escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa&#x1A;aaa'/>");
+ QTest::newRow("utf8, attributes, last char, control escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa&#x1A;'/>");
+ QTest::newRow("utf8, attributes, 1st char, legal escaping dec") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a&#160;'/>");
+ QTest::newRow("utf8, attributes, 1st char, control escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='&#26;aaaa'/>");
+ QTest::newRow("utf8, attributes, middle char, legal escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa&#26;aaaaa'/>");
+ QTest::newRow("utf8, attributes, last char, control escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaaaaa&#26;'/>");
+ QTest::newRow("utf8, tag escaping") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><roo&#x1A;t attr='aa'><![CDATA[abcdefghi]]></roo&#x1A;t>");
+ //
+ QTest::newRow("utf8, mix of illegal control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a&#0;&#x4;&#x1c;a'><![CDATA[abcdefghi]]></root>");
+ //
+}
+
+static bool isValidSingleTextChar(const ushort c)
+{
+ // Conforms to https://www.w3.org/TR/REC-xml/#NT-Char - except for the high range, which is done
+ // with surrogates.
+ // Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
+ static const QPair<ushort, ushort> validRanges[] = {
+ QPair<ushort, ushort>(0x9, 0xb),
+ QPair<ushort, ushort>(0xd, 0xe),
+ QPair<ushort, ushort>(0x20, 0xd800),
+ QPair<ushort, ushort>(0xe000, 0xfffe)
+ };
+
+ for (const QPair<ushort, ushort> &range : validRanges) {
+ if (c >= range.first && c < range.second)
+ return true;
+ }
+ return false;
+}
+
+void tst_QXmlStream::readBack() const
+{
+ for (ushort c = 0; c < std::numeric_limits<ushort>::max(); ++c) {
+ QBuffer buffer;
+
+ QVERIFY(buffer.open(QIODevice::WriteOnly));
+ QXmlStreamWriter writer(&buffer);
+ writer.writeStartDocument();
+ writer.writeTextElement("a", QString(QChar(c)));
+ writer.writeEndDocument();
+ buffer.close();
+
+ if (writer.hasError()) {
+ QVERIFY2(!isValidSingleTextChar(c), QByteArray::number(c));
+ } else {
+ QVERIFY2(isValidSingleTextChar(c), QByteArray::number(c));
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+ QXmlStreamReader reader(&buffer);
+ do {
+ reader.readNext();
+ } while (!reader.atEnd());
+ QVERIFY2(!reader.hasError(), QByteArray::number(c));
+ }
+ }
+}
+
+#include "tst_qxmlstream.moc"
+// vim: et:ts=4:sw=4:sts=4
diff --git a/tests/auto/corelib/serialization/serialization.pro b/tests/auto/corelib/serialization/serialization.pro
new file mode 100644
index 0000000000..afb9c5b61c
--- /dev/null
+++ b/tests/auto/corelib/serialization/serialization.pro
@@ -0,0 +1,15 @@
+TEMPLATE = subdirs
+SUBDIRS = \
+ json \
+ qdatastream \
+ qtextstream \
+ qxmlstream
+
+!qtHaveModule(gui): SUBDIRS -= \
+ qdatastream
+
+!qtHaveModule(network): SUBDIRS -= \
+ qtextstream
+
+!qtHaveModule(network)|!qtHaveModule(xml): SUBDIRS -= \
+ qxmlstream
diff --git a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp
index 7ea467b6ef..17763f31f9 100644
--- a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp
+++ b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp
@@ -6636,7 +6636,7 @@ void tst_QStateMachine::postEventFromBeginSelectTransitions()
{
class StateMachine : public QStateMachine {
protected:
- void beginSelectTransitions(QEvent* e) Q_DECL_OVERRIDE {
+ void beginSelectTransitions(QEvent* e) override {
if (e->type() == QEvent::Type(QEvent::User + 2))
postEvent(new QEvent(QEvent::Type(QEvent::User + 1)), QStateMachine::HighPriority);
}
@@ -6684,10 +6684,13 @@ void tst_QStateMachine::dontProcessSlotsWhenMachineIsNotRunning()
machine.addState(&initialState);
machine.addState(&finalState);
machine.setInitialState(&initialState);
- machine.start();
connect(&machine, &QStateMachine::finished, &emitter.thread, &QThread::quit);
- QSignalSpy signalSpy(&machine, &QStateMachine::finished);
- QTRY_COMPARE_WITH_TIMEOUT(signalSpy.count(), 1, 100);
+ machine.start();
+ QSignalSpy emittedSpy(&emitter, &SignalEmitter::signalWithNoArg);
+ QSignalSpy finishedSpy(&machine, &QStateMachine::finished);
+ QTRY_COMPARE_WITH_TIMEOUT(emittedSpy.count(), 2, 100);
+ QTRY_COMPARE(finishedSpy.count(), 1);
+ QTRY_VERIFY(emitter.thread.isFinished());
}
QTEST_MAIN(tst_QStateMachine)
diff --git a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp
index 5f5252aa96..ca40927ef9 100644
--- a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp
+++ b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp
@@ -37,7 +37,7 @@
# undef QT_ATOMIC_FORCE_CXX11
# endif
# elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__))
-# elif defined(_MSC_VER) && _MSC_VER >= 1900
+# elif defined(_MSC_VER)
// We need MSVC 2015 because of: atomics (2012), constexpr (2015), and unrestricted unions (2015).
// Support for constexpr is not working completely on MSVC 2015 but it's enough for the test.
# else
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index 58bebe19ac..d4a3ee6054 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -1304,8 +1304,8 @@ QFuture<int> createExceptionResultFuture()
class DerivedException : public QException
{
public:
- void raise() const Q_DECL_OVERRIDE { throw *this; }
- DerivedException *clone() const Q_DECL_OVERRIDE { return new DerivedException(*this); }
+ void raise() const override { throw *this; }
+ DerivedException *clone() const override { return new DerivedException(*this); }
};
QFuture<void> createDerivedExceptionFuture()
@@ -1455,7 +1455,7 @@ void tst_QFuture::nonGlobalThreadPool()
return f;
}
- void run() Q_DECL_OVERRIDE
+ void run() override
{
const int ms = 100 + (QRandomGenerator::global()->bounded(100) - 100/2);
QThread::msleep(ms);
diff --git a/tests/auto/corelib/thread/qthreadstorage/qthreadstorage.pro b/tests/auto/corelib/thread/qthreadstorage/qthreadstorage.pro
index b9bc456dcf..75898f6add 100644
--- a/tests/auto/corelib/thread/qthreadstorage/qthreadstorage.pro
+++ b/tests/auto/corelib/thread/qthreadstorage/qthreadstorage.pro
@@ -1,7 +1,8 @@
TEMPLATE = subdirs
-SUBDIRS = \
- test
-!winrt: SUBDIRS += crashonexit
+!winrt {
+ test.depends = crashonexit
+ SUBDIRS += crashonexit
+}
-CONFIG += ordered
+SUBDIRS += test
diff --git a/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp b/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp
index 4ef3bab87f..126cb6b180 100644
--- a/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp
+++ b/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp
@@ -379,7 +379,7 @@ class WakeThreadBase : public TerminatingThread
public:
QAtomicInt *count;
- WakeThreadBase() : count(Q_NULLPTR) {}
+ WakeThreadBase() : count(nullptr) {}
};
class wake_Thread : public WakeThreadBase
diff --git a/tests/auto/corelib/tools/qbytearray/tst_qbytearray.cpp b/tests/auto/corelib/tools/qbytearray/tst_qbytearray.cpp
index 93c10d78db..338adaabf7 100644
--- a/tests/auto/corelib/tools/qbytearray/tst_qbytearray.cpp
+++ b/tests/auto/corelib/tools/qbytearray/tst_qbytearray.cpp
@@ -756,13 +756,7 @@ void tst_QByteArray::qvsnprintf()
QCOMPARE(static_cast<const char *>(buf), "bub****************");
# endif
#else
-#ifdef Q_OS_IRIX
- // Irix reports back the amount of characters written without the \0
- QCOMPARE(::qsnprintf(buf, 3, "%s", "bubu"), 2);
-#else
- // Every other system in this world reports the amount of data that could have been written
QCOMPARE(::qsnprintf(buf, 3, "%s", "bubu"), 4);
-#endif
QCOMPARE(static_cast<const char*>(buf), "bu");
#endif
QCOMPARE(buf[4], char(42));
diff --git a/tests/auto/corelib/tools/qdate/tst_qdate.cpp b/tests/auto/corelib/tools/qdate/tst_qdate.cpp
index ff31f01d7c..ce1e5730dd 100644
--- a/tests/auto/corelib/tools/qdate/tst_qdate.cpp
+++ b/tests/auto/corelib/tools/qdate/tst_qdate.cpp
@@ -152,6 +152,9 @@ void tst_QDate::isValid_data()
QTest::newRow("400-years leap 1600") << 1600 << 2 << 29 << qint64(2305507) << true;
QTest::newRow("year 0") << 0 << 2 << 27 << nullJd << false;
+ // Test end of four-digit years:
+ QTest::newRow("late") << 9999 << 12 << 31 << qint64(5373484) << true;
+
// test the number of days in months:
QTest::newRow("jan") << 2000 << 1 << 31 << qint64(2451575) << true;
QTest::newRow("feb") << 2000 << 2 << 29 << qint64(2451604) << true; // same data as 400-years leap
@@ -1098,6 +1101,8 @@ void tst_QDate::fromStringFormat_data()
QTest::newRow("data41") << QString("21/5/06") << QString("d/M/yy") << QDate(1906,5,21);
QTest::newRow("data42") << QString("20060521") << QString("yyyyMMdd") << QDate(2006,5,21);
QTest::newRow("data43") << QString("060521") << QString("yyMMdd") << QDate(1906,5,21);
+ QTest::newRow("lateMarch") << QString("9999-03-06") << QString("yyyy-MM-dd") << QDate(9999, 3, 6);
+ QTest::newRow("late") << QString("9999-12-31") << QString("yyyy-MM-dd") << QDate(9999, 12, 31);
}
diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
index d2ffe50ce8..919f9cb718 100644
--- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
+++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
@@ -1263,9 +1263,6 @@ void tst_QDateTime::addSecs()
QFETCH(QDateTime, dt);
QFETCH(int, nsecs);
QFETCH(QDateTime, result);
-#ifdef Q_OS_IRIX
- QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
-#endif
QDateTime test = dt.addSecs(nsecs);
QCOMPARE(test, result);
QCOMPARE(test.timeSpec(), dt.timeSpec());
@@ -1285,9 +1282,6 @@ void tst_QDateTime::addMSecs()
QFETCH(int, nsecs);
QFETCH(QDateTime, result);
-#ifdef Q_OS_IRIX
- QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
-#endif
QDateTime test = dt.addMSecs(qint64(nsecs) * 1000);
QCOMPARE(test, result);
QCOMPARE(test.timeSpec(), dt.timeSpec());
@@ -1373,9 +1367,6 @@ void tst_QDateTime::toTimeSpec()
QCOMPARE(localToLocal.time(), fromLocal.time());
QCOMPARE(localToLocal.timeSpec(), Qt::LocalTime);
-#ifdef Q_OS_IRIX
- QEXPECT_FAIL("summer2", "IRIX databases say 1970 had DST", Abort);
-#endif
QCOMPARE(utcToLocal, fromLocal);
QCOMPARE(utcToLocal.date(), fromLocal.date());
QCOMPARE(utcToLocal.time(), fromLocal.time());
@@ -1427,9 +1418,6 @@ void tst_QDateTime::toLocalTime()
QFETCH(QDateTime, fromLocal);
QCOMPARE(fromLocal.toLocalTime(), fromLocal);
-#ifdef Q_OS_IRIX
- QEXPECT_FAIL("summer2", "IRIX databases say 1970 had DST", Abort);
-#endif
QCOMPARE(fromUtc.toLocalTime(), fromLocal);
QCOMPARE(fromUtc.toLocalTime(), fromLocal.toLocalTime());
} else {
@@ -1449,9 +1437,6 @@ void tst_QDateTime::toUTC()
QFETCH(QDateTime, fromLocal);
QCOMPARE(fromUtc.toUTC(), fromUtc);
-#ifdef Q_OS_IRIX
- QEXPECT_FAIL("summer2", "IRIX databases say 1970 had DST", Abort);
-#endif
QCOMPARE(fromLocal.toUTC(), fromUtc);
QCOMPARE(fromUtc.toUTC(), fromLocal.toUTC());
} else {
@@ -1512,9 +1497,6 @@ void tst_QDateTime::secsTo()
QFETCH(QDateTime, result);
if (dt.isValid()) {
- #ifdef Q_OS_IRIX
- QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
- #endif
QCOMPARE(dt.secsTo(result), (qint64)nsecs);
QCOMPARE(result.secsTo(dt), (qint64)-nsecs);
QVERIFY((dt == result) == (0 == nsecs));
@@ -1541,9 +1523,6 @@ void tst_QDateTime::msecsTo()
QFETCH(QDateTime, result);
if (dt.isValid()) {
- #ifdef Q_OS_IRIX
- QEXPECT_FAIL("cet4", "IRIX databases say 1970 had DST", Abort);
- #endif
QCOMPARE(dt.msecsTo(result), qint64(nsecs) * 1000);
QCOMPARE(result.msecsTo(dt), -qint64(nsecs) * 1000);
QVERIFY((dt == result) == (0 == (qint64(nsecs) * 1000)));
@@ -2401,6 +2380,9 @@ void tst_QDateTime::fromStringStringFormat_data()
QTest::newRow("data16") << QString("2005-06-28T07:57:30.001Z")
<< QString("yyyy-MM-ddThh:mm:ss.zt")
<< QDateTime(QDate(2005, 06, 28), QTime(07, 57, 30, 1), Qt::UTC);
+ QTest::newRow("late") << QString("9999-12-31T23:59:59.999Z")
+ << QString("yyyy-MM-ddThh:mm:ss.zZ")
+ << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
}
void tst_QDateTime::fromStringStringFormat()
diff --git a/tests/auto/corelib/tools/qlatin1string/tst_qlatin1string.cpp b/tests/auto/corelib/tools/qlatin1string/tst_qlatin1string.cpp
index c8373b6ae9..dcfb0aa042 100644
--- a/tests/auto/corelib/tools/qlatin1string/tst_qlatin1string.cpp
+++ b/tests/auto/corelib/tools/qlatin1string/tst_qlatin1string.cpp
@@ -86,7 +86,7 @@ void tst_QLatin1String::nullString()
// default ctor
{
QLatin1String l1;
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(Q_NULLPTR));
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
QCOMPARE(l1.size(), 0);
QString s = l1;
@@ -95,9 +95,9 @@ void tst_QLatin1String::nullString()
// from nullptr
{
- const char *null = Q_NULLPTR;
+ const char *null = nullptr;
QLatin1String l1(null);
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(Q_NULLPTR));
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
QCOMPARE(l1.size(), 0);
QString s = l1;
@@ -111,7 +111,7 @@ void tst_QLatin1String::nullString()
QLatin1String l1(null);
QEXPECT_FAIL("", "null QByteArrays become non-null QLatin1Strings...", Continue);
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(Q_NULLPTR));
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
QCOMPARE(l1.size(), 0);
QString s = l1;
diff --git a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
index d424e6086d..fc1ac7cf0f 100644
--- a/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/tools/qlocale/tst_qlocale.cpp
@@ -1569,6 +1569,16 @@ void tst_QLocale::toDateTime_data()
<< "d'dd'd/MMM'M'/yysss" << "1dd1/DecM/74033";
QTest::newRow("12C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0))
<< "d'd'dd/M/yyh" << "1d01/12/7415";
+ // Unpadded value for fixed-width field is wrong:
+ QTest::newRow("bad-day-C") << "C" << QDateTime() << "dd-MMM-yy" << "4-Jun-11";
+ QTest::newRow("bad-month-C") << "C" << QDateTime() << "d-MM-yy" << "4-6-11";
+ QTest::newRow("bad-year-C") << "C" << QDateTime() << "d-MMM-yyyy" << "4-Jun-11";
+ QTest::newRow("bad-hour-C") << "C" << QDateTime() << "d-MMM-yy hh:m" << "4-Jun-11 1:2";
+ QTest::newRow("bad-min-C") << "C" << QDateTime() << "d-MMM-yy h:mm" << "4-Jun-11 1:2";
+ QTest::newRow("bad-sec-C") << "C" << QDateTime() << "d-MMM-yy h:m:ss" << "4-Jun-11 1:2:3";
+ QTest::newRow("bad-milli-C") << "C" << QDateTime() << "d-MMM-yy h:m:s.zzz" << "4-Jun-11 1:2:3.4";
+ QTest::newRow("ok-C") << "C" << QDateTime(QDate(1911, 6, 4), QTime(1, 2, 3, 400))
+ << "d-MMM-yy h:m:s.z" << "4-Jun-11 1:2:3.4";
QTest::newRow("1no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(5, 14, 0))
<< "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14";
diff --git a/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp b/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp
index 145ba7ff72..e355a7fcfb 100644
--- a/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp
+++ b/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp
@@ -48,6 +48,7 @@ private slots:
void reserveAndReadInPacketMode();
void reserveFrontAndRead();
void chop();
+ void readPointerValidity();
void ungetChar();
void indexOf();
void appendAndRead();
@@ -68,7 +69,7 @@ void tst_QRingBuffer::constructing()
QCOMPARE(ringBuffer.size(), Q_INT64_C(0));
QVERIFY(ringBuffer.isEmpty());
QCOMPARE(ringBuffer.nextDataBlockSize(), Q_INT64_C(0));
- QVERIFY(ringBuffer.readPointer() == Q_NULLPTR);
+ QVERIFY(ringBuffer.readPointer() == nullptr);
QCOMPARE(ringBuffer.skip(5), Q_INT64_C(0));
QCOMPARE(ringBuffer.read(), QByteArray());
QCOMPARE(ringBuffer.getChar(), -1);
@@ -303,6 +304,21 @@ void tst_QRingBuffer::chop()
QVERIFY(memcmp(ringBuffer.readPointer(), "0123", 4) == 0);
}
+void tst_QRingBuffer::readPointerValidity()
+{
+ QRingBuffer ringBuffer(16);
+ QByteArray ba("Hello world!");
+
+ ringBuffer.append(ba);
+ const char *ptr = ringBuffer.readPointer();
+ ba.clear();
+ ringBuffer.reserve(32);
+ QVERIFY(ptr == ringBuffer.readPointer());
+ ringBuffer.reserveFront(32);
+ qint64 dummy;
+ QVERIFY(ptr == ringBuffer.readPointerAtPosition(32, dummy));
+}
+
void tst_QRingBuffer::ungetChar()
{
QRingBuffer ringBuffer(16);
diff --git a/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp b/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp
index a4b06d1b3b..b943b04e23 100644
--- a/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp
+++ b/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp
@@ -68,6 +68,7 @@ void tst_QScopedPointer::defaultConstructor()
/* Check that the members, one, is correctly initialized. */
QScopedPointer<int> p;
QCOMPARE(p.data(), static_cast<int *>(0));
+ QCOMPARE(p.get(), static_cast<int *>(0));
}
void tst_QScopedPointer::dataOnDefaultConstructed()
@@ -75,6 +76,7 @@ void tst_QScopedPointer::dataOnDefaultConstructed()
QScopedPointer<int> p;
QCOMPARE(p.data(), static_cast<int *>(0));
+ QCOMPARE(p.get(), static_cast<int *>(0));
}
class MyClass
@@ -113,6 +115,7 @@ void tst_QScopedPointer::reset()
QScopedPointer<int> p;
p.reset();
QCOMPARE(p.data(), static_cast<int *>(0));
+ QCOMPARE(p.get(), static_cast<int *>(0));
}
/* Call reset() on an active value. */
@@ -120,6 +123,7 @@ void tst_QScopedPointer::reset()
QScopedPointer<int> p(new int(3));
p.reset();
QCOMPARE(p.data(), static_cast<int *>(0));
+ QCOMPARE(p.get(), static_cast<int *>(0));
}
/* Call reset() with a value, on an active value. */
@@ -129,6 +133,7 @@ void tst_QScopedPointer::reset()
int *const value = new int(9);
p.reset(value);
QCOMPARE(*p.data(), 9);
+ QCOMPARE(*p.get(), 9);
}
/* Call reset() with a value, on default constructed value. */
@@ -138,6 +143,7 @@ void tst_QScopedPointer::reset()
int *const value = new int(9);
p.reset(value);
QCOMPARE(*p.data(), 9);
+ QCOMPARE(*p.get(), 9);
}
}
diff --git a/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp b/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp
index 62dd33131b..3e1668522e 100644
--- a/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp
@@ -42,6 +42,7 @@
#include <QtCore/QDateTime>
#include <QtCore/QDebug>
#include <QtCore/QLibraryInfo>
+#include <QtCore/QThread>
#ifndef DEFAULT_MAKESPEC
# error DEFAULT_MAKESPEC not defined
@@ -69,6 +70,16 @@ static QString makespec()
QT_BEGIN_NAMESPACE
namespace QTest {
#if QT_CONFIG(process)
+ static void ensureStopped(QProcess &process)
+ {
+ if (process.state() == QProcess::Running) {
+ process.terminate();
+ QThread::msleep(20);
+ if (process.state() == QProcess::Running)
+ process.kill();
+ }
+ }
+
class QExternalProcess: public QProcess
{
protected:
@@ -594,7 +605,7 @@ namespace QTest {
ok = qmake.waitForFinished();
exitCode = qmake.exitCode();
if (!ok)
- qmake.terminate();
+ QTest::ensureStopped(qmake);
std_out += qmake.readAllStandardOutput();
std_err += qmake.readAllStandardError();
@@ -661,7 +672,7 @@ namespace QTest {
make.closeWriteChannel();
bool ok = make.waitForFinished(channelMode == QProcess::ForwardedChannels ? -1 : 60000);
if (!ok)
- make.terminate();
+ QTest::ensureStopped(make);
exitCode = make.exitCode();
std_out += make.readAllStandardOutput();
std_err += make.readAllStandardError();
diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
index e1dcdb8407..203d9d8683 100644
--- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
@@ -272,6 +272,7 @@ void tst_QSharedPointer::basics()
QCOMPARE(!ptr, isNull);
QCOMPARE(ptr.data(), aData);
+ QCOMPARE(ptr.get(), aData);
QCOMPARE(ptr.operator->(), aData);
if (!isNull) {
Data &dataReference = *ptr;
@@ -316,6 +317,7 @@ void tst_QSharedPointer::basics()
QCOMPARE(copy.isNull(), isNull);
QCOMPARE(copy.data(), aData);
+ QCOMPARE(copy.get(), aData);
QVERIFY(copy == aData);
}
QVERIFY(!refCountData(ptr) || refCountData(ptr)->weakref.load() == 1);
@@ -349,6 +351,7 @@ void tst_QSharedPointer::basics()
QVERIFY(strong == weak);
QVERIFY(strong == ptr);
QCOMPARE(strong.data(), aData);
+ QCOMPARE(strong.get(), aData);
}
QVERIFY(!refCountData(ptr) || refCountData(ptr)->weakref.load() == 1);
QVERIFY(!refCountData(ptr) || refCountData(ptr)->strongref.load() == 1);
@@ -362,11 +365,14 @@ void tst_QSharedPointer::operators()
QSharedPointer<char> p2(new char);
qptrdiff diff = p2.data() - p1.data();
QVERIFY(p1.data() != p2.data());
+ QVERIFY(p1.get() != p2.get());
QVERIFY(diff != 0);
// operator-
QCOMPARE(p2 - p1.data(), diff);
+ QCOMPARE(p2 - p1.get(), diff);
QCOMPARE(p2.data() - p1, diff);
+ QCOMPARE(p2.get() - p1, diff);
QCOMPARE(p2 - p1, diff);
QCOMPARE(p1 - p2, -diff);
QCOMPARE(p1 - p1, qptrdiff(0));
@@ -374,7 +380,9 @@ void tst_QSharedPointer::operators()
// operator<
QVERIFY(p1 < p2.data());
+ QVERIFY(p1 < p2.get());
QVERIFY(p1.data() < p2);
+ QVERIFY(p1.get() < p2);
QVERIFY(p1 < p2);
QVERIFY(!(p2 < p1));
QVERIFY(!(p2 < p2));
@@ -382,7 +390,9 @@ void tst_QSharedPointer::operators()
// qHash
QCOMPARE(qHash(p1), qHash(p1.data()));
+ QCOMPARE(qHash(p1), qHash(p1.get()));
QCOMPARE(qHash(p2), qHash(p2.data()));
+ QCOMPARE(qHash(p2), qHash(p2.get()));
}
void tst_QSharedPointer::nullptrOps()
@@ -396,11 +406,13 @@ void tst_QSharedPointer::nullptrOps()
QVERIFY(nullptr == p1);
QVERIFY(!p1);
QVERIFY(!p1.data());
+ QVERIFY(!p1.get());
QVERIFY(p2 == null);
QVERIFY(p2 == nullptr);
QVERIFY(nullptr == p2);
QVERIFY(!p2);
QVERIFY(!p2.data());
+ QVERIFY(!p2.get());
QVERIFY(p1 == p2);
QSharedPointer<char> p3 = p1;
@@ -409,6 +421,7 @@ void tst_QSharedPointer::nullptrOps()
QVERIFY(p3 == nullptr);
QVERIFY(nullptr == p3);
QVERIFY(!p3.data());
+ QVERIFY(!p3.get());
p3 = nullptr;
@@ -421,6 +434,7 @@ void tst_QSharedPointer::nullptrOps()
QSharedPointer<char> p4(new char);
QVERIFY(p4);
QVERIFY(p4.data());
+ QVERIFY(p4.get());
QVERIFY(p4 != nullptr);
QVERIFY(nullptr != p4);
QVERIFY(p4 != p1);
diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
index 70ccc72630..90cd70f43e 100644
--- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
@@ -249,7 +249,7 @@ class CharStarContainer
{
const char *str;
public:
- explicit Q_DECL_CONSTEXPR CharStarContainer(const char *s = Q_NULLPTR) : str(s) {}
+ explicit Q_DECL_CONSTEXPR CharStarContainer(const char *s = nullptr) : str(s) {}
Q_DECL_CONSTEXPR operator const char *() const { return str; }
};
@@ -1483,7 +1483,7 @@ void tst_QString::indexOf()
QRegularExpression re(QRegularExpression::escape(needle), options);
QCOMPARE( haystack.indexOf(re, startpos), resultpos );
- QCOMPARE(haystack.indexOf(re, startpos, Q_NULLPTR), resultpos);
+ QCOMPARE(haystack.indexOf(re, startpos, nullptr), resultpos);
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
@@ -1608,7 +1608,7 @@ void tst_QString::indexOfInvalidRegex()
QTest::ignoreMessage(QtWarningMsg, "QString::indexOf: invalid QRegularExpression object");
QCOMPARE(QString("invalid regex\\").indexOf(QRegularExpression("invalid regex\\")), -1);
QTest::ignoreMessage(QtWarningMsg, "QString::indexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").indexOf(QRegularExpression("invalid regex\\"), -1, Q_NULLPTR), -1);
+ QCOMPARE(QString("invalid regex\\").indexOf(QRegularExpression("invalid regex\\"), -1, nullptr), -1);
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
@@ -1706,7 +1706,7 @@ void tst_QString::lastIndexOf()
QRegularExpression re(QRegularExpression::escape(needle), options);
QCOMPARE(haystack.lastIndexOf(re, from), expected);
- QCOMPARE(haystack.lastIndexOf(re, from, Q_NULLPTR), expected);
+ QCOMPARE(haystack.lastIndexOf(re, from, nullptr), expected);
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
QCOMPARE(haystack.lastIndexOf(re, from, &match), expected);
@@ -1743,7 +1743,7 @@ void tst_QString::lastIndexOfInvalidRegex()
QTest::ignoreMessage(QtWarningMsg, "QString::lastIndexOf: invalid QRegularExpression object");
QCOMPARE(QString("invalid regex\\").lastIndexOf(QRegularExpression("invalid regex\\"), 0), -1);
QTest::ignoreMessage(QtWarningMsg, "QString::lastIndexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").lastIndexOf(QRegularExpression("invalid regex\\"), -1, Q_NULLPTR), -1);
+ QCOMPARE(QString("invalid regex\\").lastIndexOf(QRegularExpression("invalid regex\\"), -1, nullptr), -1);
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
@@ -2994,6 +2994,12 @@ void tst_QString::remove_string()
QString s5 = string;
s5.replace( QRegExp(before, cs, QRegExp::FixedString), after );
QTEST( s5, "result" );
+
+ if (QtPrivate::isLatin1(before)) {
+ QString s6 = string;
+ s6.remove( QLatin1String(before.toLatin1()), cs );
+ QTEST( s6, "result" );
+ }
} else {
QCOMPARE( 0, 0 ); // shut Qt Test
}
@@ -6901,6 +6907,25 @@ void tst_QString::isRightToLeft_data()
static const ushort unicode3[] = { QChar::highSurrogate(0x10800u), QChar::lowSurrogate(0x10800u), QChar::highSurrogate(0x10805u), QChar::lowSurrogate(0x10805u) };
QTest::newRow("surrogates-cypriot") << QString::fromUtf16(unicode3, 4) << true;
+
+ QTest::newRow("lre") << (QString("12345") + QChar(0x202a) + QString("9") + QChar(0x202c)) << false;
+ QTest::newRow("rle") << (QString("12345") + QChar(0x202b) + QString("9") + QChar(0x202c)) << false;
+ QTest::newRow("r in lre") << (QString("12345") + QChar(0x202a) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
+ QTest::newRow("l in lre") << (QString("12345") + QChar(0x202a) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("r in rle") << (QString("12345") + QChar(0x202b) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
+ QTest::newRow("l in rle") << (QString("12345") + QChar(0x202b) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+
+ QTest::newRow("lro") << (QString("12345") + QChar(0x202d) + QString("9") + QChar(0x202c)) << false;
+ QTest::newRow("rlo") << (QString("12345") + QChar(0x202e) + QString("9") + QChar(0x202c)) << false;
+ QTest::newRow("r in lro") << (QString("12345") + QChar(0x202d) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
+ QTest::newRow("l in lro") << (QString("12345") + QChar(0x202d) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("r in rlo") << (QString("12345") + QChar(0x202e) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
+ QTest::newRow("l in rlo") << (QString("12345") + QChar(0x202e) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+
+ QTest::newRow("lri") << (QString("12345") + QChar(0x2066) + QString("a") + QChar(0x2069) + QString::fromUtf16(unicode1, 2)) << true;
+ QTest::newRow("rli") << (QString("12345") + QChar(0x2067) + QString::fromUtf16(unicode1, 2) + QChar(0x2069) + QString("a")) << false;
+ QTest::newRow("fsi1") << (QString("12345") + QChar(0x2068) + QString("a") + QChar(0x2069) + QString::fromUtf16(unicode1, 2)) << true;
+ QTest::newRow("fsi2") << (QString("12345") + QChar(0x2068) + QString::fromUtf16(unicode1, 2) + QChar(0x2069) + QString("a")) << false;
}
void tst_QString::isRightToLeft()
diff --git a/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp b/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp
index f6a1432f5c..ac7f439248 100644
--- a/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp
+++ b/tests/auto/corelib/tools/qstringbuilder/qstringbuilder1/stringbuilder.cpp
@@ -56,6 +56,28 @@
#define Q P
#endif
+template <typename T> QString toQString(const T &t);
+
+template <> QString toQString(const QString &s) { return s; }
+template <> QString toQString(const QStringRef &r) { return r.toString(); }
+template <> QString toQString(const QStringView &v) { return v.toString(); }
+template <> QString toQString(const QLatin1String &l) { return l; }
+template <> QString toQString(const QLatin1Char &l) { return QChar(l); }
+template <> QString toQString(const QChar &c) { return c; }
+template <> QString toQString(const QChar::SpecialCharacter &c) { return QChar(c); }
+#ifdef Q_COMPILER_UNICODE_STRINGS
+template <> QString toQString(char16_t * const &p) { return QStringView(p).toString(); }
+template <size_t N> QString toQString(const char16_t (&a)[N]) { return QStringView(a).toString(); }
+template <> QString toQString(const char16_t &c) { return QChar(c); }
+#endif
+
+template <typename T> QByteArray toQByteArray(const T &t);
+
+template <> QByteArray toQByteArray(const QByteArray &b) { return b; }
+template <> QByteArray toQByteArray(char * const &p) { return p; }
+template <size_t N> QByteArray toQByteArray(const char (&a)[N]) { return a; }
+template <> QByteArray toQByteArray(const char &c) { return QByteArray(&c, 1); }
+
void runScenario()
{
// this code is latin1. TODO: replace it with the utf8 block below, once
@@ -63,49 +85,148 @@ void runScenario()
QLatin1String l1string(LITERAL);
QString string(l1string);
QStringRef stringref(&string, 2, 10);
- QLatin1Char achar('c');
+ QStringView stringview(stringref);
+ QLatin1Char lchar('c');
+ QChar qchar(lchar);
QChar::SpecialCharacter special(QChar::Nbsp);
+#ifdef Q_COMPILER_UNICODE_STRINGS
+ char16_t u16char = UNICODE_LITERAL[0];
+ char16_t u16chararray[] = { u's', 0xF6, u'm', 0xEB, u' ', u'l', 0xEF, u't', 0xEB, u'r', 0xE4, u'l', 0x00 };
+ QCOMPARE(QStringView(u16chararray), QStringView(UNICODE_LITERAL));
+ char16_t *u16charstar = u16chararray;
+#endif
+
+#define CHECK(QorP, a1, a2) \
+ do { \
+ DO(QorP, a1, a2); \
+ DO(QorP, a2, a1); \
+ } while (0)
+
+#define DO(QorP, a1, a2) \
+ QCOMPARE(QString(a1 QorP a2), \
+ toQString(a1).append(toQString(a2))) \
+ /* end */
+
+ CHECK(P, l1string, l1string);
+ CHECK(P, l1string, string);
+ CHECK(P, l1string, stringref);
+ CHECK(Q, l1string, stringview);
+ CHECK(P, l1string, lchar);
+ CHECK(P, l1string, qchar);
+ CHECK(P, l1string, special);
+ CHECK(P, l1string, QStringLiteral(LITERAL));
+ CHECK(Q, l1string, u16char);
+ CHECK(Q, l1string, u16chararray);
+ CHECK(Q, l1string, u16charstar);
+
+ CHECK(P, string, string);
+ CHECK(P, string, stringref);
+ CHECK(Q, string, stringview);
+ CHECK(P, string, lchar);
+ CHECK(P, string, qchar);
+ CHECK(P, string, special);
+ CHECK(P, string, QStringLiteral(LITERAL));
+ CHECK(Q, string, u16char);
+ CHECK(Q, string, u16chararray);
+ CHECK(Q, string, u16charstar);
+
+ CHECK(P, stringref, stringref);
+ CHECK(Q, stringref, stringview);
+ CHECK(P, stringref, lchar);
+ CHECK(P, stringref, qchar);
+ CHECK(P, stringref, special);
+ CHECK(P, stringref, QStringLiteral(LITERAL));
+ CHECK(Q, stringref, u16char);
+ CHECK(Q, stringref, u16chararray);
+ CHECK(Q, stringref, u16charstar);
+
+ CHECK(Q, stringview, stringview);
+ CHECK(Q, stringview, lchar);
+ CHECK(Q, stringview, qchar);
+ CHECK(Q, stringview, special);
+ CHECK(P, stringview, QStringLiteral(LITERAL));
+ CHECK(Q, stringview, u16char);
+ CHECK(Q, stringview, u16chararray);
+ CHECK(Q, stringview, u16charstar);
+
+ CHECK(P, lchar, lchar);
+ CHECK(P, lchar, qchar);
+ CHECK(P, lchar, special);
+ CHECK(P, lchar, QStringLiteral(LITERAL));
+ CHECK(Q, lchar, u16char);
+ CHECK(Q, lchar, u16chararray);
+ CHECK(Q, lchar, u16charstar);
+
+ CHECK(P, qchar, qchar);
+ CHECK(P, qchar, special);
+ CHECK(P, qchar, QStringLiteral(LITERAL));
+ CHECK(Q, qchar, u16char);
+ CHECK(Q, qchar, u16chararray);
+ CHECK(Q, qchar, u16charstar);
+
+ CHECK(P, special, special);
+ CHECK(P, special, QStringLiteral(LITERAL));
+ CHECK(Q, special, u16char);
+ CHECK(Q, special, u16chararray);
+ CHECK(Q, special, u16charstar);
+
+ CHECK(P, QStringLiteral(LITERAL), QStringLiteral(LITERAL));
+ CHECK(Q, QStringLiteral(LITERAL), u16char);
+ CHECK(Q, QStringLiteral(LITERAL), u16chararray);
+ CHECK(Q, QStringLiteral(LITERAL), u16charstar);
+
+ // CHECK(Q, u16char, u16char); // BUILTIN <-> BUILTIN cat't be overloaded
+ // CHECK(Q, u16char, u16chararray);
+ // CHECK(Q, u16char, u16charstar);
+
+ // CHECK(Q, u16chararray, u16chararray); // BUILTIN <-> BUILTIN cat't be overloaded
+ // CHECK(Q, u16chararray, u16charstar);
+
+ // CHECK(Q, u16charstar, u16charstar); // BUILTIN <-> BUILTIN cat't be overloaded
+
+#undef DO
+
+#define DO(QorP, a1, a2) \
+ QCOMPARE(QByteArray(a1 QorP a2), \
+ toQByteArray(a1).append(toQByteArray(a2))) \
+ /* end */
+
+ QByteArray bytearray = stringref.toUtf8();
+ char *charstar = bytearray.data();
+ char chararray[3] = { 'H', 'i', '\0' };
+ const char constchararray[3] = { 'H', 'i', '\0' };
+ char achar = 'a';
+
+ CHECK(P, bytearray, bytearray);
+ CHECK(P, bytearray, charstar);
+#ifndef Q_CC_MSVC // see QTBUG-65359
+ CHECK(P, bytearray, chararray);
+#else
+ Q_UNUSED(chararray);
+#endif
+ CHECK(P, bytearray, constchararray);
+ CHECK(P, bytearray, achar);
+
+ //CHECK(Q, charstar, charstar); // BUILTIN <-> BUILTIN cat't be overloaded
+ //CHECK(Q, charstar, chararray);
+ //CHECK(Q, charstar, achar);
+
+ //CHECK(Q, chararray, chararray); // BUILTIN <-> BUILTIN cat't be overloaded
+ //CHECK(Q, chararray, achar);
+
+ //CHECK(Q, achar, achar); // BUILTIN <-> BUILTIN cat't be overloaded
+
+#undef DO
+#undef CHECK
+
QString r2(QLatin1String(LITERAL LITERAL));
QString r3 = QString::fromUtf8(UTF8_LITERAL UTF8_LITERAL);
QString r;
- r = string P string;
- QCOMPARE(r, r2);
- r = stringref Q stringref;
- QCOMPARE(r, QString(stringref.toString() + stringref.toString()));
- r = stringref P stringref;
- QCOMPARE(r, QString(stringref.toString() + stringref.toString()));
- r = string P l1string;
- QCOMPARE(r, r2);
- r = l1string P stringref;
- QCOMPARE(r, QString(l1string + stringref.toString()));
- r = stringref P l1string;
- QCOMPARE(r, QString(stringref.toString() + l1string));
- r = stringref P string;
- QCOMPARE(r, QString(stringref.toString() + string));
- r = string P stringref;
- QCOMPARE(r, QString(string + stringref.toString()));
- r = stringref P achar;
- QCOMPARE(r, QString(stringref.toString() + achar));
- r = achar P stringref;
- QCOMPARE(r, QString(achar + stringref.toString()));
- r = string Q QStringLiteral(LITERAL);
- QCOMPARE(r, r2);
- r = QStringLiteral(LITERAL) Q string;
- QCOMPARE(r, r2);
- r = l1string Q QStringLiteral(LITERAL);
- QCOMPARE(r, r2);
- r = string + achar;
- QCOMPARE(r, QString(string P achar));
- r = achar + string;
- QCOMPARE(r, QString(achar P string));
- r = special + string;
- QCOMPARE(r, QString(special P string));
-
// self-assignment:
r = stringref.toString();
- r = achar + r;
- QCOMPARE(r, QString(achar P stringref));
+ r = lchar + r;
+ QCOMPARE(r, QString(lchar P stringref));
#ifdef Q_COMPILER_UNICODE_STRINGS
r = QStringLiteral(UNICODE_LITERAL);
diff --git a/tests/auto/corelib/tools/qstringref/tst_qstringref.cpp b/tests/auto/corelib/tools/qstringref/tst_qstringref.cpp
index 473f563f9b..581e9152e6 100644
--- a/tests/auto/corelib/tools/qstringref/tst_qstringref.cpp
+++ b/tests/auto/corelib/tools/qstringref/tst_qstringref.cpp
@@ -121,14 +121,6 @@ typedef QList<int> IntList;
#if defined(Q_OS_SOLARIS)
# include <ieeefp.h>
#endif
-#if defined(Q_OS_OSF) && (defined(__DECC) || defined(__DECCXX))
-# define INFINITY DBL_INFINITY
-# define NAN DBL_QNAN
-#endif
-#if defined(Q_OS_IRIX) && defined(Q_CC_GNU)
-# include <ieeefp.h>
-# define isnan(d) isnand(d)
-#endif
enum {
LittleEndian,
diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt
index a3ed239c95..d7d8f90de0 100644
--- a/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt
+++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/GraphemeBreakTest.txt
@@ -1,22 +1,24 @@
-# GraphemeBreakTest-8.0.0.txt
-# Date: 2015-02-13, 13:47:15 GMT [MD]
+# GraphemeBreakTest-10.0.0.txt
+# Date: 2017-04-14, 05:40:29 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
-# Default Grapheme Break Test
+# Default Grapheme_Cluster_Break Test
#
# Format:
-# <string> (# <comment>)?
-# <string> contains hex Unicode code points, with
-# ÷ wherever there is a break opportunity, and
+# <string> (# <comment>)?
+# <string> contains hex Unicode code points, with
+# ÷ wherever there is a break opportunity, and
# × wherever there is not.
# <comment> the format can change, but currently it shows:
# - the sample character name
# - (x) the Grapheme_Cluster_Break property value for the sample character
-# - [x] the rule that determines whether there is a break or not
+# - [x] the rule that determines whether there is a break or not,
+# as listed in the Rules section of GraphemeBreakTest.html
#
# These samples may be extended or changed in the future.
#
@@ -30,6 +32,8 @@
÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -42,8 +46,18 @@
÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0020 ÷ 261D ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0020 × 0308 ÷ 261D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0020 ÷ 1F3FB ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0020 ÷ 2640 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0020 × 0308 ÷ 2640 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0020 ÷ 1F466 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1F466 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0020 × 0308 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0020 ÷ D800 ÷ # ÷ [0.2] SPACE (Other) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -58,6 +72,8 @@
÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 000D ÷ 0600 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 000D ÷ 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 000D ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -70,8 +86,18 @@
÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 000D ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000D ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000D ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 000D ÷ 2640 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000D ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] BOY (EBG) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 000D ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 000D ÷ D800 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -86,6 +112,8 @@
÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 000A ÷ 0600 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 000A ÷ 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 000A ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -98,8 +126,18 @@
÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 000A ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000A ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000A ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 000A ÷ 2640 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000A ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] BOY (EBG) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 000A ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 000A ÷ D800 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -114,6 +152,8 @@
÷ 0001 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 0001 ÷ 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0001 ÷ 0600 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0001 ÷ 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0001 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -126,8 +166,18 @@
÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0001 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0001 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0001 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0001 ÷ 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0001 ÷ 2640 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0001 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] BOY (EBG) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0001 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0001 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0001 ÷ D800 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -142,6 +192,8 @@
÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -154,12 +206,62 @@
÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0300 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0300 × 0308 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0300 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0300 ÷ 2640 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0300 × 0308 ÷ 2640 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0300 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0300 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
÷ 0300 × 0308 ÷ D800 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0600 × 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] SPACE (Other) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0020 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0600 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0600 × 0308 ÷ 000D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0600 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0600 × 0308 ÷ 000A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0600 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0001 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0600 × 0308 ÷ 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0600 × 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0600 × 0308 ÷ 11A8 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0600 × AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0600 × 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0600 × 261D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0600 × 0308 ÷ 261D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0600 × 1F3FB ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0600 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0600 × 2640 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0600 × 0308 ÷ 2640 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0600 × 1F466 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] BOY (EBG) ÷ [0.3]
+÷ 0600 × 0308 ÷ 1F466 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] <reserved-0378> (Other) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0600 ÷ D800 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 0600 × 0308 ÷ D800 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -170,6 +272,8 @@
÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -182,8 +286,18 @@
÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0903 ÷ 261D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0903 × 0308 ÷ 261D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0903 ÷ 1F3FB ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0903 ÷ 2640 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0903 × 0308 ÷ 2640 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0903 ÷ 1F466 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0903 ÷ D800 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -198,6 +312,8 @@
÷ 1100 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -210,8 +326,18 @@
÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1100 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1100 ÷ 261D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1100 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1100 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1100 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1100 ÷ 2640 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1100 × 0308 ÷ 2640 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1100 ÷ 1F466 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1100 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 1100 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 1100 ÷ D800 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -226,6 +352,8 @@
÷ 1160 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -238,8 +366,18 @@
÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 1160 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1160 ÷ 261D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1160 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1160 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1160 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1160 ÷ 2640 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1160 × 0308 ÷ 2640 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1160 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1160 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 1160 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 1160 ÷ D800 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -254,6 +392,8 @@
÷ 11A8 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -266,8 +406,18 @@
÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 11A8 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 11A8 ÷ 261D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 11A8 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 11A8 ÷ 2640 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 2640 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 11A8 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 11A8 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 11A8 ÷ D800 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -282,6 +432,8 @@
÷ AC00 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -294,8 +446,18 @@
÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ AC00 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ AC00 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ AC00 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ AC00 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ AC00 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ AC00 ÷ 2640 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ AC00 × 0308 ÷ 2640 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ AC00 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ AC00 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ AC00 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ AC00 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -310,6 +472,8 @@
÷ AC01 × 0308 ÷ 0001 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -322,40 +486,262 @@
÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ AC01 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ AC01 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ AC01 × 0308 ÷ 261D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ AC01 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ AC01 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ AC01 ÷ 2640 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ AC01 × 0308 ÷ 2640 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ AC01 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ AC01 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ AC01 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
÷ AC01 × 0308 ÷ D800 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
-÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] SPACE (Other) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
-÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
-÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
-÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
-÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
-÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
-÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
-÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
-÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
-÷ 1F1E6 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F1E6 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 11A8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F1E6 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F1E6 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F1E6 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1F1E6 ÷ 2640 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 2640 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F1E6 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F1E6 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ D800 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 261D ÷ 0020 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 261D × 0308 ÷ 0020 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 261D ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 261D × 0308 ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 261D ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 261D × 0308 ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 261D ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 261D × 0308 ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 261D × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 261D × 0308 × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 261D ÷ 0600 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 261D × 0308 ÷ 0600 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 261D × 0903 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 261D × 0308 × 0903 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 261D ÷ 1100 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 261D × 0308 ÷ 1100 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 261D ÷ 1160 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 261D × 0308 ÷ 1160 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 261D ÷ 11A8 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 261D × 0308 ÷ 11A8 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 261D ÷ AC00 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 261D × 0308 ÷ AC00 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 261D ÷ AC01 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 261D × 0308 ÷ AC01 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 261D ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 261D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 261D ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 261D × 0308 ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 261D × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 261D × 0308 × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 261D × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 261D × 0308 × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 261D ÷ 2640 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 261D × 0308 ÷ 2640 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 261D ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 261D × 0308 ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 261D ÷ 0378 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 261D × 0308 ÷ 0378 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 261D ÷ D800 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 261D × 0308 ÷ D800 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F3FB ÷ 0020 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0020 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F3FB ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F3FB ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F3FB ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F3FB × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F3FB × 0308 × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F3FB ÷ 0600 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0600 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1F3FB × 0903 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F3FB × 0308 × 0903 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F3FB ÷ 1100 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1100 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F3FB ÷ 1160 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1160 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F3FB ÷ 11A8 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 11A8 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F3FB ÷ AC00 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ AC00 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F3FB ÷ AC01 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ AC01 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F3FB ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F3FB ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F3FB ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F3FB × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1F3FB × 0308 × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1F3FB ÷ 2640 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 2640 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F3FB ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F3FB ÷ 0378 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0378 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F3FB ÷ D800 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ D800 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 200D × 0308 ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 200D ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 200D × 0308 ÷ 11A8 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 200D ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 200D ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 200D × 0308 ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 200D ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 0308 ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 200D × 2640 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 200D × 0308 ÷ 2640 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] BOY (EBG) ÷ [0.3]
+÷ 200D × 0308 ÷ 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 200D × 0308 ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 200D ÷ D800 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 200D × 0308 ÷ D800 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 2640 ÷ 0020 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0020 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 2640 ÷ 000D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 2640 × 0308 ÷ 000D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 2640 ÷ 000A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 2640 × 0308 ÷ 000A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 2640 ÷ 0001 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0001 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 2640 × 0300 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 2640 × 0308 × 0300 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 2640 ÷ 0600 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0600 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 2640 × 0903 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 2640 × 0308 × 0903 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 2640 ÷ 1100 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1100 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 2640 ÷ 1160 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1160 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 2640 ÷ 11A8 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 2640 × 0308 ÷ 11A8 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 2640 ÷ AC00 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 2640 × 0308 ÷ AC00 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 2640 ÷ AC01 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 2640 × 0308 ÷ AC01 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 2640 ÷ 1F1E6 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 2640 ÷ 261D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 2640 × 0308 ÷ 261D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 2640 ÷ 1F3FB ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 2640 × 200D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 2640 × 0308 × 200D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 2640 ÷ 2640 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 2640 × 0308 ÷ 2640 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 2640 ÷ 1F466 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1F466 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 2640 ÷ 0378 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0378 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 2640 ÷ D800 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 2640 × 0308 ÷ D800 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F466 ÷ 0020 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0020 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1F466 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F466 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F466 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 1F466 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F466 × 0308 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 1F466 ÷ 0600 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0600 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 1F466 × 0903 ÷ # ÷ [0.2] BOY (EBG) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F466 × 0308 × 0903 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F466 ÷ 1100 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 1100 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F466 ÷ 1160 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 1160 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 1F466 ÷ 11A8 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 11A8 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 1F466 ÷ AC00 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F466 × 0308 ÷ AC00 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 1F466 ÷ AC01 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F466 × 0308 ÷ AC01 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F466 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F466 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F466 × 0308 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F466 × 200D ÷ # ÷ [0.2] BOY (EBG) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1F466 × 0308 × 200D ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 1F466 ÷ 2640 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 2640 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F466 ÷ 0378 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0378 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 1F466 ÷ D800 ÷ # ÷ [0.2] BOY (EBG) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
+÷ 1F466 × 0308 ÷ D800 ÷ # ÷ [0.2] BOY (EBG) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
÷ 0378 ÷ 0020 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 0378 × 0308 ÷ 0020 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 0378 ÷ 000D ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -366,6 +752,8 @@
÷ 0378 × 0308 ÷ 0001 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ 0378 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ 0378 ÷ 0600 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0378 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0378 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -378,8 +766,18 @@
÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0378 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0378 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0378 ÷ 261D ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0378 × 0308 ÷ 261D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0378 ÷ 1F3FB ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0378 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0378 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0378 ÷ 2640 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0378 × 0308 ÷ 2640 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0378 ÷ 1F466 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0378 × 0308 ÷ 1F466 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0378 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0378 × 0308 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0378 ÷ D800 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
@@ -394,6 +792,8 @@
÷ D800 ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
÷ D800 ÷ 0300 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
÷ D800 ÷ 0308 × 0300 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend) ÷ [0.3]
+÷ D800 ÷ 0600 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ D800 ÷ 0903 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ D800 ÷ 0308 × 0903 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ D800 ÷ 1100 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
@@ -406,23 +806,45 @@
÷ D800 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ D800 ÷ AC01 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ D800 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ D800 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ D800 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ D800 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ D800 ÷ 261D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ D800 ÷ 1F3FB ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ D800 ÷ 200D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ D800 ÷ 0308 × 200D ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ D800 ÷ 2640 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ D800 ÷ 1F466 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] BOY (EBG) ÷ [0.3]
+÷ D800 ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ D800 ÷ 0378 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
÷ D800 ÷ 0308 ÷ 0378 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ D800 ÷ D800 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] <surrogate-D800> (Control) ÷ [0.3]
÷ D800 ÷ 0308 ÷ D800 ÷ # ÷ [0.2] <surrogate-D800> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [5.0] <surrogate-D800> (Control) ÷ [0.3]
-÷ 0061 ÷ 1F1E6 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
-÷ 1F1F7 × 1F1FA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) ÷ [0.3]
-÷ 1F1F7 × 1F1FA × 1F1F8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) ÷ [0.3]
-÷ 1F1F7 × 1F1FA × 1F1F8 × 1F1EA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER E (Regional_Indicator) ÷ [0.3]
-÷ 1F1F7 × 1F1FA ÷ 200B ÷ 1F1F8 × 1F1EA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) ÷ [5.0] ZERO WIDTH SPACE (Control) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER E (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [8.1] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
-÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3]
-÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (Extend) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN SMALL LETTER A (Other) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend) ÷ [0.3]
+÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [0.3]
+÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] ARABIC LETTER NOON (Other) ÷ [0.3]
+÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ AC00 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ AC01 × 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [8.0] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 200D ÷ 1F1E7 × 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ) ÷ [0.3]
+÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 261D × 1F3FB ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 1F466 × 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] BOY (EBG) × [10.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 2640 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ) × [11.0] BOY (EBG) ÷ [0.3]
+÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3]
#
-# Lines: 402
+# Lines: 822
#
# EOF
diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt
index 7f2e2cc54f..6715446aba 100644
--- a/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt
+++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/LineBreakTest.txt
@@ -1,6111 +1,7121 @@
-# LineBreakTest-8.0.0.txt
-# Date: 2015-04-30, 09:40:15 GMT [MD]
+# LineBreakTest-10.0.0.txt
+# Date: 2017-04-14, 05:40:30 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
-# Default Line Break Test
+# Default Line_Break Test
#
# Format:
-# <string> (# <comment>)?
-# <string> contains hex Unicode code points, with
-# ÷ wherever there is a break opportunity, and
+# <string> (# <comment>)?
+# <string> contains hex Unicode code points, with
+# ÷ wherever there is a break opportunity, and
# × wherever there is not.
# <comment> the format can change, but currently it shows:
# - the sample character name
# - (x) the Line_Break property value for the sample character
-# - [x] the rule that determines whether there is a break or not
-# Note: The Line Break tests use tailoring of numbers described in Example 7 of Section 8.2 Examples of Customization.
-# They also differ from the results produced by a pair table implementation in sequences like: ZW SP CL.
+# - [x] the rule that determines whether there is a break or not,
+# as listed in the Rules section of LineBreakTest.html
+#
+# Note:
+# The Line_Break tests use tailoring of numbers described in
+# Example 7 of Section 8.2, "Examples of Customization" of UAX #14.
#
# These samples may be extended or changed in the future.
#
× 0023 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0023 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0023 × 0308 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0023 × 0308 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0023 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0023 × 0020 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0023 × 0308 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0023 × 0308 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0023 × 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0023 × 0020 ÷ 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0023 × 0308 × 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0023 × 0308 × 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0023 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0023 × 0020 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0023 × 0308 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0023 × 0308 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0023 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0023 × 0020 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0023 × 0308 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0023 × 0308 × 0020 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0023 × 0308 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0023 × 0308 × 0020 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0023 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0023 × 0020 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0023 × 0308 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0023 × 0308 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0023 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0023 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0308 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0308 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0023 × 0308 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0023 × 0308 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0023 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0023 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0023 × 0308 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0023 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0023 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0023 × 0308 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0023 × 0308 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0023 × 0308 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0023 × 0308 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0023 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0023 × 0020 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0023 × 0308 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0023 × 0308 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0023 × 0308 × 0020 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0023 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0023 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0023 × 0308 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0023 × 0308 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0023 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0023 × 0020 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0023 × 0308 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0023 × 0308 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0023 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0023 × 0020 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0023 × 0308 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0023 × 0308 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0023 × 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0023 × 0020 ÷ 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0023 × 0308 × 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0023 × 0308 × 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0023 × 002D ÷ # × [0.3] NUMBER SIGN (AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0023 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 × 0308 × 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0023 × 0308 × 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0023 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0023 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0308 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0023 × 0308 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] COMMA (IS) ÷ [0.3]
× 0023 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0023 × 0308 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0023 × 0308 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0023 × 0308 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0023 × 0308 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0023 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0023 × 0020 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0023 × 0308 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0023 × 0308 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0023 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0023 × 0020 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0023 × 0308 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0023 × 0308 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0023 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0023 × 0020 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0023 × 0308 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0023 × 0308 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0023 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0023 × 0020 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0023 × 0308 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0023 × 0308 × 0020 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0023 × 0308 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0023 × 0308 × 0020 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0023 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0023 × 0020 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0023 × 0308 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0023 × 0308 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0023 × 0308 × 0020 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0023 × 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0023 × 0020 ÷ 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0023 × 0308 × 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0023 × 0308 × 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0023 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0308 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0023 × 0308 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0023 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0023 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0023 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0023 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 × 0308 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0023 × 0308 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0023 × 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
× 0023 × 0020 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0023 × 0308 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0023 × 0308 × 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0023 × 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0023 × 0020 ÷ 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0023 × 0308 × 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0023 × 0308 × 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0023 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [0.3]
× 0023 × 0020 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0023 × 0308 × 0020 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0023 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0023 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0023 × 0308 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0023 × 0308 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0023 × 0308 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0023 × 0308 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0023 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0023 × 0020 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0023 × 0308 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0023 × 0308 × 0020 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0023 × 0308 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0023 × 0308 × 0020 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0023 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0023 × 0020 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0023 × 0308 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0023 × 0308 × 0020 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0023 × 0308 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0023 × 0308 × 0020 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0023 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0023 × 0020 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0023 × 0308 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0023 × 0308 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0023 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0023 × 0020 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0023 × 0308 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0023 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 0308 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0023 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0023 × 0308 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0023 × 200D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0023 × 0020 ÷ 200D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0023 × 0308 × 200D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 200D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0023 × 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0023 × 0020 ÷ 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0023 × 0308 × 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0023 × 0308 × 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0023 × 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0023 × 0020 ÷ 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0023 × 0308 × 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0023 × 0308 × 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0023 × 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0023 × 0020 ÷ 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0023 × 0308 × 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0023 × 0308 × 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0023 × 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0023 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0023 × 0308 × 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0023 × 0308 × 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2014 ÷ 0023 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 2014 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2014 × 0308 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2014 × 0308 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 2014 × 2014 ÷ # × [0.3] EM DASH (B2) × [17.0] EM DASH (B2) ÷ [0.3]
× 2014 × 0020 × 2014 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [17.0] EM DASH (B2) ÷ [0.3]
-× 2014 × 0308 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [17.0] EM DASH (B2) ÷ [0.3]
-× 2014 × 0308 × 0020 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [17.0] EM DASH (B2) ÷ [0.3]
+× 2014 × 0308 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [17.0] EM DASH (B2) ÷ [0.3]
+× 2014 × 0308 × 0020 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [17.0] EM DASH (B2) ÷ [0.3]
× 2014 × 0009 ÷ # × [0.3] EM DASH (B2) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 2014 × 0020 ÷ 0009 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2014 × 0308 × 0009 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2014 × 0308 × 0009 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 2014 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 2014 × 0020 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2014 × 0308 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2014 × 0308 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 2014 × 000B ÷ # × [0.3] EM DASH (B2) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 2014 × 0020 × 000B ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2014 × 0308 × 000B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2014 × 0308 × 0020 × 000B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2014 × 0308 × 000B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2014 × 0308 × 0020 × 000B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 2014 ÷ FFFC ÷ # × [0.3] EM DASH (B2) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 2014 × 0020 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2014 × 0308 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2014 × 0308 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 2014 × 007D ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2014 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0308 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0308 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2014 × 0308 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2014 × 0308 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2014 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2014 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2014 × 0308 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2014 × 000D ÷ # × [0.3] EM DASH (B2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2014 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2014 × 0308 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2014 × 0308 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2014 × 0308 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2014 × 0308 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2014 × 0021 ÷ # × [0.3] EM DASH (B2) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 2014 × 0020 × 0021 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2014 × 0308 × 0021 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0021 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2014 × 0308 × 0021 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2014 × 0308 × 0020 × 0021 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 2014 × 00A0 ÷ # × [0.3] EM DASH (B2) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 2014 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2014 × 0308 × 00A0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2014 × 0308 × 00A0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 2014 ÷ AC00 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 2014 × 0020 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2014 × 0308 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2014 × 0308 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 2014 ÷ AC01 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 2014 × 0020 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2014 × 0308 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2014 × 0308 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 2014 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 2014 × 0020 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2014 × 0308 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2014 × 0308 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 2014 × 002D ÷ # × [0.3] EM DASH (B2) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 2014 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 × 0308 × 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2014 × 0308 × 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2014 ÷ 231A ÷ # × [0.3] EM DASH (B2) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 2014 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0308 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 2014 × 0308 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2014 ÷ 2024 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0308 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 0308 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 002C ÷ # × [0.3] EM DASH (B2) × [13.02] COMMA (IS) ÷ [0.3]
× 2014 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2014 × 0308 × 002C ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 2014 × 0308 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2014 × 0308 × 002C ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 2014 × 0308 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 2014 ÷ 1100 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 2014 × 0020 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2014 × 0308 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2014 × 0308 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 2014 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 2014 × 0020 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2014 × 0308 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2014 × 0308 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 2014 ÷ 1160 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 2014 × 0020 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2014 × 0308 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2014 × 0308 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 2014 × 000A ÷ # × [0.3] EM DASH (B2) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 2014 × 0020 × 000A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2014 × 0308 × 000A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2014 × 0308 × 0020 × 000A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2014 × 0308 × 000A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2014 × 0308 × 0020 × 000A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 2014 × 0085 ÷ # × [0.3] EM DASH (B2) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 2014 × 0020 × 0085 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2014 × 0308 × 0085 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0085 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2014 × 0308 × 0085 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2014 × 0308 × 0020 × 0085 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 2014 × 17D6 ÷ # × [0.3] EM DASH (B2) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 2014 × 0020 ÷ 17D6 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2014 × 0308 × 17D6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2014 × 0308 × 17D6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 2014 ÷ 0030 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 2014 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 × 0308 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2014 × 0308 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2014 ÷ 0028 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 2014 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 2014 ÷ 0025 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 2014 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2014 × 0308 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2014 × 0308 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2014 ÷ 0024 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 2014 × 0020 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2014 × 0308 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2014 × 0308 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 2014 × 0022 ÷ # × [0.3] EM DASH (B2) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 2014 × 0020 ÷ 0022 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2014 × 0308 × 0022 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2014 × 0308 × 0022 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 2014 × 0020 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [0.3]
× 2014 × 0020 × 0020 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0020 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 2014 × 0308 × 0020 × 0020 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 2014 × 002F ÷ # × [0.3] EM DASH (B2) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2014 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 0308 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 0308 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2014 × 0308 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 2014 × 0308 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2014 × 2060 ÷ # × [0.3] EM DASH (B2) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2014 × 0020 × 2060 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2014 × 0308 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2014 × 0308 × 0020 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2014 × 0308 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2014 × 0308 × 0020 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2014 × 200B ÷ # × [0.3] EM DASH (B2) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 2014 × 0020 × 200B ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2014 × 0308 × 200B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2014 × 0308 × 0020 × 200B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2014 × 0308 × 200B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2014 × 0308 × 0020 × 200B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 2014 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 2014 × 0020 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2014 × 0308 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2014 × 0308 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2014 ÷ 261D ÷ # × [0.3] EM DASH (B2) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2014 × 0020 ÷ 261D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2014 × 0308 ÷ 261D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 261D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2014 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 0308 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2014 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2014 × 0308 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2014 × 200D ÷ # × [0.3] EM DASH (B2) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2014 × 0020 ÷ 200D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2014 × 0308 × 200D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 200D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 2014 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 2014 × 0020 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2014 × 0308 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2014 × 0308 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 2014 ÷ 50005 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 2014 × 0020 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2014 × 0308 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2014 × 0308 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 2014 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 2014 × 0020 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2014 × 0308 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2014 × 0308 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 2014 × 3041 ÷ # × [0.3] EM DASH (B2) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2014 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2014 × 0308 × 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2014 × 0308 × 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0009 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 0009 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0009 × 0308 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0009 × 0308 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0009 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0009 × 0020 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0009 × 0308 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0009 × 0308 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0009 × 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0009 × 0020 ÷ 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0009 × 0308 × 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0009 × 0308 × 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0009 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0009 × 0020 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0009 × 0308 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0009 × 0308 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0009 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0009 × 0020 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0009 × 0308 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0009 × 0308 × 0020 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0009 × 0308 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0009 × 0308 × 0020 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0009 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0009 × 0020 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0009 × 0308 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0009 × 0308 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0009 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0009 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0308 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0308 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0009 × 0308 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0009 × 0308 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0009 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0009 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0009 × 0308 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0009 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0009 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0009 × 0308 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0009 × 0308 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0009 × 0308 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0009 × 0308 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0009 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0009 × 0020 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0009 × 0308 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0009 × 0308 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0009 × 0308 × 0020 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0009 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0009 × 0020 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0009 × 0308 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0009 × 0308 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0009 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0009 × 0020 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0009 × 0308 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0009 × 0308 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0009 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0009 × 0020 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0009 × 0308 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0009 × 0308 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0009 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0009 × 0020 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0009 × 0308 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0009 × 0308 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0009 × 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0009 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 × 0308 × 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0009 × 0308 × 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0009 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0009 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0308 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0009 × 0308 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0009 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0308 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 0308 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] COMMA (IS) ÷ [0.3]
× 0009 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0009 × 0308 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0009 × 0308 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0009 × 0308 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0009 × 0308 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0009 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0009 × 0020 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0009 × 0308 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0009 × 0308 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0009 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0009 × 0020 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0009 × 0308 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0009 × 0308 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0009 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0009 × 0020 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0009 × 0308 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0009 × 0308 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0009 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0009 × 0020 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0009 × 0308 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0009 × 0308 × 0020 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0009 × 0308 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0009 × 0308 × 0020 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0009 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0009 × 0020 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0009 × 0308 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0009 × 0308 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0009 × 0308 × 0020 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0009 × 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0009 × 0020 ÷ 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0009 × 0308 × 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0009 × 0308 × 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0009 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 0009 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 × 0308 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0009 × 0308 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0009 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0009 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0009 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0009 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0009 × 0308 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0009 × 0308 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0009 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0009 × 0020 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0009 × 0308 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0009 × 0308 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0009 × 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0009 × 0020 ÷ 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0009 × 0308 × 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0009 × 0308 × 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0009 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [0.3]
× 0009 × 0020 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0009 × 0308 × 0020 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0009 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0009 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0009 × 0308 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0009 × 0308 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0009 × 0308 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0009 × 0308 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0009 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0009 × 0020 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0009 × 0308 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0009 × 0308 × 0020 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0009 × 0308 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0009 × 0308 × 0020 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0009 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0009 × 0020 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0009 × 0308 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0009 × 0308 × 0020 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0009 × 0308 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0009 × 0308 × 0020 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0009 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0009 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0009 × 0308 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0009 × 0308 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0009 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0009 × 0020 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0009 × 0308 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0009 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 0308 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0009 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0009 × 0308 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0009 × 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0009 × 0020 ÷ 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0009 × 0308 × 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0009 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0009 × 0020 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0009 × 0308 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0009 × 0308 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0009 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0009 × 0020 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0009 × 0308 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0009 × 0308 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0009 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0009 × 0020 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0009 × 0308 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0009 × 0308 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0009 × 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0009 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0009 × 0308 × 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0009 × 0308 × 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00B4 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
× 00B4 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00B4 × 0308 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00B4 × 0308 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 00B4 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] EM DASH (B2) ÷ [0.3]
× 00B4 × 0020 ÷ 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00B4 × 0308 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] EM DASH (B2) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 00B4 × 0308 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EM DASH (B2) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 00B4 × 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 00B4 × 0020 ÷ 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00B4 × 0308 × 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00B4 × 0308 × 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 00B4 × 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] ACUTE ACCENT (BB) ÷ [0.3]
× 00B4 × 0020 ÷ 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00B4 × 0308 × 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] ACUTE ACCENT (BB) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00B4 × 0308 × 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] ACUTE ACCENT (BB) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 00B4 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 00B4 × 0020 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00B4 × 0308 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00B4 × 0308 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 00B4 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 00B4 × 0020 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00B4 × 0308 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00B4 × 0308 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 00B4 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00B4 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0308 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00B4 × 0308 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00B4 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00B4 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00B4 × 0308 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00B4 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00B4 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00B4 × 0308 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00B4 × 0308 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00B4 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 00B4 × 0020 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00B4 × 0308 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00B4 × 0308 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 00B4 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 00B4 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00B4 × 0308 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00B4 × 0308 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 00B4 × AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 00B4 × 0020 ÷ AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00B4 × 0308 × AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00B4 × 0308 × AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 00B4 × AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 00B4 × 0020 ÷ AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00B4 × 0308 × AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00B4 × 0308 × AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 00B4 × 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 00B4 × 0020 ÷ 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00B4 × 0308 × 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00B4 × 0308 × 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 00B4 × 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 00B4 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 0308 × 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00B4 × 0308 × 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00B4 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] WATCH (ID) ÷ [0.3]
× 00B4 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00B4 × 0308 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] WATCH (ID) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 00B4 × 0308 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] WATCH (ID) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 00B4 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
× 00B4 × 0020 ÷ 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00B4 × 0308 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 00B4 × 0308 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00B4 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] COMMA (IS) ÷ [0.3]
× 00B4 × 0020 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00B4 × 0308 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00B4 × 0308 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 00B4 × 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 00B4 × 0020 ÷ 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00B4 × 0308 × 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00B4 × 0308 × 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 00B4 × 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 00B4 × 0020 ÷ 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00B4 × 0308 × 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00B4 × 0308 × 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 00B4 × 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 00B4 × 0020 ÷ 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00B4 × 0308 × 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00B4 × 0308 × 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 00B4 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 00B4 × 0020 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00B4 × 0308 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00B4 × 0308 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 00B4 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 00B4 × 0020 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00B4 × 0308 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00B4 × 0308 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 00B4 × 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 00B4 × 0020 ÷ 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00B4 × 0308 × 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00B4 × 0308 × 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 00B4 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
× 00B4 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0308 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 00B4 × 0308 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00B4 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
× 00B4 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 00B4 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
× 00B4 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00B4 × 0308 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00B4 × 0308 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00B4 × 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] DOLLAR SIGN (PR) ÷ [0.3]
× 00B4 × 0020 ÷ 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00B4 × 0308 × 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] DOLLAR SIGN (PR) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00B4 × 0308 × 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] DOLLAR SIGN (PR) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 00B4 × 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 00B4 × 0020 ÷ 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00B4 × 0308 × 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 00B4 × 0308 × 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 00B4 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [0.3]
× 00B4 × 0020 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 00B4 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00B4 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00B4 × 0308 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00B4 × 0308 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00B4 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00B4 × 0020 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00B4 × 0308 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00B4 × 0308 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00B4 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 00B4 × 0020 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00B4 × 0308 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00B4 × 0308 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 00B4 × 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 00B4 × 0020 ÷ 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00B4 × 0308 × 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00B4 × 0308 × 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00B4 × 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00B4 × 0020 ÷ 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00B4 × 0308 × 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00B4 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 0308 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00B4 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00B4 × 0308 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00B4 × 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00B4 × 0020 ÷ 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00B4 × 0308 × 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 00B4 × 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] SECTION SIGN (AI_AL) ÷ [0.3]
× 00B4 × 0020 ÷ 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00B4 × 0308 × 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00B4 × 0308 × 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 00B4 × 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] <reserved-50005> (XX_AL) ÷ [0.3]
× 00B4 × 0020 ÷ 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00B4 × 0308 × 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00B4 × 0308 × 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 00B4 × 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 00B4 × 0020 ÷ 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00B4 × 0308 × 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00B4 × 0308 × 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 00B4 × 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00B4 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00B4 × 0308 × 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00B4 × 0308 × 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000B ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] NUMBER SIGN (AL) ÷ [0.3]
× 000B ÷ 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000B ÷ 0308 × 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000B ÷ 0308 × 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000B ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EM DASH (B2) ÷ [0.3]
× 000B ÷ 0020 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000B ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 000B ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 000B ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 000B ÷ 0020 ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000B ÷ 0308 × 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 000B ÷ 0308 × 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 000B ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ACUTE ACCENT (BB) ÷ [0.3]
× 000B ÷ 0020 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000B ÷ 0308 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 000B ÷ 0308 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 000B ÷ 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <LINE TABULATION> (BK) ÷ [0.3]
× 000B ÷ 0020 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000B ÷ 0308 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 000B ÷ 0308 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 000B ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 000B ÷ 0020 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000B ÷ 0308 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 000B ÷ 0308 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 000B ÷ 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000B ÷ 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0308 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 000B ÷ 0308 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000B ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000B ÷ 0308 × 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000B ÷ 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000B ÷ 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000B ÷ 0308 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 000B ÷ 0308 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000B ÷ 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EXCLAMATION MARK (EX) ÷ [0.3]
× 000B ÷ 0020 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000B ÷ 0308 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 000B ÷ 0308 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 000B ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 000B ÷ 0020 ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000B ÷ 0308 × 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 000B ÷ 0308 × 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 000B ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 000B ÷ 0020 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000B ÷ 0308 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 000B ÷ 0308 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 000B ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 000B ÷ 0020 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000B ÷ 0308 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 000B ÷ 0308 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 000B ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 000B ÷ 0020 ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000B ÷ 0308 × 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 000B ÷ 0308 × 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 000B ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000B ÷ 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 0308 × 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 000B ÷ 0308 × 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000B ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WATCH (ID) ÷ [0.3]
× 000B ÷ 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 000B ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000B ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMMA (IS) ÷ [0.3]
× 000B ÷ 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000B ÷ 0308 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 000B ÷ 0308 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 000B ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 000B ÷ 0020 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 000B ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 000B ÷ 0020 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000B ÷ 0308 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 000B ÷ 0308 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 000B ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 000B ÷ 0020 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 000B ÷ 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 000B ÷ 0020 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000B ÷ 0308 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 000B ÷ 0308 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 000B ÷ 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 000B ÷ 0020 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000B ÷ 0308 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 000B ÷ 0308 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 000B ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 000B ÷ 0020 ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000B ÷ 0308 × 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 000B ÷ 0308 × 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 000B ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0308 × 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 000B ÷ 0308 × 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 000B ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 000B ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000B ÷ 0308 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 000B ÷ 0308 × 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] DOLLAR SIGN (PR) ÷ [0.3]
× 000B ÷ 0020 ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000B ÷ 0308 ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 000B ÷ 0308 × 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 000B ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] QUOTATION MARK (QU) ÷ [0.3]
× 000B ÷ 0020 ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000B ÷ 0308 × 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 000B ÷ 0308 × 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 000B ÷ 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [0.3]
× 000B ÷ 0020 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 000B ÷ 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SOLIDUS (SY) ÷ [0.3]
× 000B ÷ 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000B ÷ 0308 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 000B ÷ 0308 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 000B ÷ 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WORD JOINER (WJ) ÷ [0.3]
× 000B ÷ 0020 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000B ÷ 0308 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 000B ÷ 0308 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 000B ÷ 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 000B ÷ 0020 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000B ÷ 0308 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 000B ÷ 0308 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 000B ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 000B ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000B ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000B ÷ 0020 ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000B ÷ 0308 ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000B ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000B ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000B ÷ 0308 × 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000B ÷ 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000B ÷ 0020 ÷ 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000B ÷ 0308 × 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 000B ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 000B ÷ 0020 ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000B ÷ 0308 × 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 000B ÷ 0308 × 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 000B ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 000B ÷ 0020 ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000B ÷ 0308 × 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 000B ÷ 0308 × 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 000B ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 000B ÷ 0020 ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 000B ÷ 0308 × 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 000B ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000B ÷ 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000B ÷ 0308 × 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000B ÷ 0308 × 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× FFFC ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
× FFFC × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× FFFC × 0308 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× FFFC × 0308 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× FFFC ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] EM DASH (B2) ÷ [0.3]
× FFFC × 0020 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× FFFC × 0308 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] EM DASH (B2) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× FFFC × 0308 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EM DASH (B2) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× FFFC ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
× FFFC × 0020 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× FFFC × 0308 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× FFFC × 0308 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× FFFC ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] ACUTE ACCENT (BB) ÷ [0.3]
× FFFC × 0020 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× FFFC × 0308 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] ACUTE ACCENT (BB) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× FFFC × 0308 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] ACUTE ACCENT (BB) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× FFFC × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× FFFC × 0020 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× FFFC × 0308 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× FFFC × 0308 × 0020 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× FFFC × 0308 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× FFFC × 0308 × 0020 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× FFFC ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× FFFC × 0020 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC × 0308 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× FFFC × 0308 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× FFFC × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× FFFC × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0308 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0308 × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× FFFC × 0308 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× FFFC × 0308 × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× FFFC × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× FFFC × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× FFFC × 0308 × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× FFFC × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× FFFC × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× FFFC × 0308 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× FFFC × 0308 × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× FFFC × 0308 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× FFFC × 0308 × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× FFFC × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× FFFC × 0020 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× FFFC × 0308 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× FFFC × 0308 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× FFFC × 0308 × 0020 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× FFFC × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× FFFC × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× FFFC × 0308 × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× FFFC × 0308 × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× FFFC ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× FFFC × 0020 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× FFFC × 0308 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× FFFC × 0308 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× FFFC ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× FFFC × 0020 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× FFFC × 0308 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× FFFC × 0308 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× FFFC ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× FFFC × 0020 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× FFFC × 0308 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× FFFC × 0308 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× FFFC ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HYPHEN-MINUS (HY) ÷ [0.3]
× FFFC × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC × 0308 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× FFFC × 0308 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× FFFC ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] WATCH (ID) ÷ [0.3]
× FFFC × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× FFFC × 0308 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] WATCH (ID) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× FFFC × 0308 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] WATCH (ID) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× FFFC ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
× FFFC × 0020 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× FFFC × 0308 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× FFFC × 0308 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× FFFC × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] COMMA (IS) ÷ [0.3]
× FFFC × 0020 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× FFFC × 0308 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× FFFC × 0308 × 0020 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× FFFC × 0308 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× FFFC × 0308 × 0020 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× FFFC ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× FFFC × 0020 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× FFFC × 0308 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× FFFC × 0308 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× FFFC ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× FFFC × 0020 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× FFFC × 0308 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× FFFC × 0308 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× FFFC ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× FFFC × 0020 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× FFFC × 0308 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× FFFC × 0308 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× FFFC × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× FFFC × 0020 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× FFFC × 0308 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× FFFC × 0308 × 0020 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× FFFC × 0308 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× FFFC × 0308 × 0020 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× FFFC × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× FFFC × 0020 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× FFFC × 0308 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× FFFC × 0308 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× FFFC × 0308 × 0020 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× FFFC ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× FFFC × 0020 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× FFFC × 0308 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× FFFC × 0308 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× FFFC ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
× FFFC × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC × 0308 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× FFFC × 0308 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× FFFC ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
× FFFC × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT PARENTHESIS (OP) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× FFFC ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
× FFFC × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× FFFC × 0308 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× FFFC × 0308 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× FFFC ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] DOLLAR SIGN (PR) ÷ [0.3]
× FFFC × 0020 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× FFFC × 0308 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] DOLLAR SIGN (PR) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× FFFC × 0308 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] DOLLAR SIGN (PR) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× FFFC × 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× FFFC × 0020 ÷ 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× FFFC × 0308 × 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× FFFC × 0308 × 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× FFFC × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [0.3]
× FFFC × 0020 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× FFFC × 0308 × 0020 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× FFFC × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] SOLIDUS (SY) ÷ [0.3]
× FFFC × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× FFFC × 0308 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× FFFC × 0308 × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× FFFC × 0308 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× FFFC × 0308 × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× FFFC × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× FFFC × 0020 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× FFFC × 0308 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× FFFC × 0308 × 0020 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× FFFC × 0308 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× FFFC × 0308 × 0020 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× FFFC × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× FFFC × 0020 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× FFFC × 0308 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× FFFC × 0308 × 0020 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× FFFC × 0308 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× FFFC × 0308 × 0020 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× FFFC ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× FFFC × 0020 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× FFFC × 0308 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× FFFC × 0308 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× FFFC ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× FFFC × 0020 ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× FFFC × 0308 ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× FFFC ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 0308 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× FFFC × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× FFFC × 0308 × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× FFFC × 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× FFFC × 0020 ÷ 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× FFFC × 0308 × 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× FFFC ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] SECTION SIGN (AI_AL) ÷ [0.3]
× FFFC × 0020 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× FFFC × 0308 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× FFFC × 0308 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× FFFC ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] <reserved-50005> (XX_AL) ÷ [0.3]
× FFFC × 0020 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× FFFC × 0308 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× FFFC × 0308 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× FFFC ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× FFFC × 0020 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× FFFC × 0308 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× FFFC × 0308 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× FFFC ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× FFFC × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× FFFC × 0308 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× FFFC × 0308 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 007D × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 007D × 0308 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 007D × 0308 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 007D ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 007D × 0020 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 007D × 0308 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 007D × 0308 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 007D × 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 007D × 0020 ÷ 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 007D × 0308 × 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 007D × 0308 × 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 007D ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 007D × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 007D × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 007D × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 007D × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 007D × 0020 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 007D × 0308 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 007D × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 007D × 0308 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 007D × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 007D ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 007D × 0020 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 007D × 0308 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 007D × 0308 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 007D × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 007D × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0308 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 007D × 0308 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 007D × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 007D × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 007D × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 007D × 0308 × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 007D × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 007D × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 007D × 0308 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 007D × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 007D × 0308 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 007D × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 007D × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 007D × 0020 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 007D × 0308 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 007D × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 007D × 0308 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 007D × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 007D × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 007D × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 007D × 0308 × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 007D × 0308 × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 007D ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 007D × 0020 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 007D × 0308 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 007D × 0308 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 007D ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 007D × 0020 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 007D × 0308 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 007D × 0308 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 007D ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 007D × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 007D × 0308 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 007D × 0308 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 007D × 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 007D × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D × 0308 × 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 007D × 0308 × 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 007D ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 007D × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 007D × 0308 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 007D × 0308 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 007D ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0308 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 0308 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] COMMA (IS) ÷ [0.3]
× 007D × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 007D × 0308 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 007D × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 007D × 0308 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 007D × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 007D ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 007D × 0020 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 007D × 0308 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 007D × 0308 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 007D ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 007D × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 007D × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 007D × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 007D ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 007D × 0020 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 007D × 0308 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 007D × 0308 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 007D × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 007D × 0020 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 007D × 0308 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 007D × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 007D × 0308 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 007D × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 007D × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 007D × 0020 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 007D × 0308 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 007D × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 007D × 0308 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 007D × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 007D × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 007D × 0020 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 007D × 0308 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 007D × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 007D × 0308 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 007D × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 007D ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 007D × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D × 0308 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 007D × 0308 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 007D ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 007D × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 007D ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 007D × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 007D × 0308 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 007D × 0308 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 007D ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 007D × 0020 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 007D × 0308 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 007D × 0308 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 007D × 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 007D × 0020 ÷ 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 007D × 0308 × 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 007D × 0308 × 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 007D × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [0.3]
× 007D × 0020 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 007D × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 007D × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 007D × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 007D × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 007D × 0308 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 007D × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 007D × 0308 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 007D × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 007D × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 007D × 0020 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 007D × 0308 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 007D × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 007D × 0308 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 007D × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 007D × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 007D × 0020 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 007D × 0308 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 007D × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 007D × 0308 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 007D × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 007D ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 007D × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 007D × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 007D × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 007D ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 007D × 0020 ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 007D × 0308 ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 007D ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 007D × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 007D × 0308 × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 007D × 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 007D × 0020 ÷ 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 007D × 0308 × 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 007D ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 007D × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 007D × 0308 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 007D × 0308 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 007D ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 007D × 0020 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 007D × 0308 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 007D × 0308 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 007D ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 007D × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 007D × 0308 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 007D × 0308 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 007D × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 007D × 0308 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 007D × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 007D × 0308 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 007D × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0029 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0029 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0029 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0029 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0029 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0029 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0029 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0029 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0029 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0029 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0029 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0029 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0029 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0029 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0029 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0029 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0029 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0029 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0029 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0029 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] COMMA (IS) ÷ [0.3]
× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0029 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0029 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0029 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0029 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0029 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0029 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0029 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0029 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0029 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0029 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0029 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0029 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0029 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
× 0029 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0029 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0029 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0029 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0029 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0029 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0029 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0029 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0029 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0029 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [0.3]
× 0029 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0029 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0029 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0029 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0029 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0029 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0029 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0308 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0029 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0029 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0308 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0029 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
× 0029 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0029 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
× 0029 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0029 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0029 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0029 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0023 ÷ # × [0.3] <START OF HEADING> (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 × 0308 × 0023 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0308 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0009 ÷ # × [0.3] <START OF HEADING> (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 × 0020 ÷ 0009 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 × 0308 × 0009 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 0020 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 0308 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 000B ÷ # × [0.3] <START OF HEADING> (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 × 0020 × 000B ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 × 0308 × 000B ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 × 0308 × 0020 × 000B ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 0020 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 0308 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 007D ÷ # × [0.3] <START OF HEADING> (CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0308 × 007D ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0308 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0001 × 0001 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0001 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0001 × 0308 × 0001 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0001 × 000D ÷ # × [0.3] <START OF HEADING> (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0308 × 000D ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0308 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0021 ÷ # × [0.3] <START OF HEADING> (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 0020 × 0021 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 0308 × 0021 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0021 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 00A0 ÷ # × [0.3] <START OF HEADING> (CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 × 0020 ÷ 00A0 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 × 0308 × 00A0 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 × 0020 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 × 0308 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 0020 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 0308 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 05D0 ÷ # × [0.3] <START OF HEADING> (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 0020 ÷ 05D0 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 0308 × 05D0 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 002D ÷ # × [0.3] <START OF HEADING> (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 × 0308 × 002D ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0308 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 002C ÷ # × [0.3] <START OF HEADING> (CM) × [13.04] COMMA (IS) ÷ [0.3]
-× 0001 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0001 × 0308 × 002C ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [13.04] COMMA (IS) ÷ [0.3]
-× 0001 × 0308 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0001 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 × 0020 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 × 0308 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 × 0020 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 × 0308 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 0020 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 0308 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 000A ÷ # × [0.3] <START OF HEADING> (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0020 × 000A ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0308 × 000A ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0308 × 0020 × 000A ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0085 ÷ # × [0.3] <START OF HEADING> (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 0020 × 0085 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 0308 × 0085 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0085 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 17D6 ÷ # × [0.3] <START OF HEADING> (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0020 ÷ 17D6 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0308 × 17D6 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0030 ÷ # × [0.3] <START OF HEADING> (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0308 × 0030 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0001 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0308 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0020 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0308 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0022 ÷ # × [0.3] <START OF HEADING> (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0020 ÷ 0022 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0308 × 0022 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0020 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 0020 × 0020 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0020 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 002F ÷ # × [0.3] <START OF HEADING> (CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 0308 × 002F ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 0308 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 2060 ÷ # × [0.3] <START OF HEADING> (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 0308 × 2060 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 0308 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 200B ÷ # × [0.3] <START OF HEADING> (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 × 0020 × 200B ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 × 0308 × 200B ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 × 0308 × 0020 × 200B ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 0020 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 0308 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 00A7 ÷ # × [0.3] <START OF HEADING> (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 0020 ÷ 00A7 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 0308 × 00A7 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 50005 ÷ # × [0.3] <START OF HEADING> (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0020 ÷ 50005 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0308 × 50005 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0E01 ÷ # × [0.3] <START OF HEADING> (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 0020 ÷ 0E01 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 0308 × 0E01 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 3041 ÷ # × [0.3] <START OF HEADING> (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0308 × 3041 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000D ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000D ÷ 0308 × 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000D ÷ 0308 × 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EM DASH (B2) ÷ [0.3]
× 000D ÷ 0020 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000D ÷ 0308 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 000D ÷ 0308 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 000D ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 000D ÷ 0020 ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000D ÷ 0308 × 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 000D ÷ 0308 × 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 000D ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ACUTE ACCENT (BB) ÷ [0.3]
× 000D ÷ 0020 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000D ÷ 0308 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 000D ÷ 0308 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 000D ÷ 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <LINE TABULATION> (BK) ÷ [0.3]
× 000D ÷ 0020 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000D ÷ 0308 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 000D ÷ 0308 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 000D ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 000D ÷ 0020 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000D ÷ 0308 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 000D ÷ 0308 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 000D ÷ 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000D ÷ 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0308 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 000D ÷ 0308 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000D ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <START OF HEADING> (CM) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000D ÷ 0308 × 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000D ÷ 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000D ÷ 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000D ÷ 0308 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 000D ÷ 0308 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000D ÷ 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EXCLAMATION MARK (EX) ÷ [0.3]
× 000D ÷ 0020 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000D ÷ 0308 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 000D ÷ 0308 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 000D ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NO-BREAK SPACE (GL) ÷ [0.3]
× 000D ÷ 0020 ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000D ÷ 0308 × 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 000D ÷ 0308 × 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 000D ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 000D ÷ 0020 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000D ÷ 0308 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 000D ÷ 0308 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 000D ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 000D ÷ 0020 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000D ÷ 0308 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 000D ÷ 0308 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 000D ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 000D ÷ 0020 ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000D ÷ 0308 × 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 000D ÷ 0308 × 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 000D ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 000D ÷ 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 0308 × 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 000D ÷ 0308 × 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000D ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WATCH (ID) ÷ [0.3]
× 000D ÷ 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0308 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 000D ÷ 0308 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000D ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMMA (IS) ÷ [0.3]
× 000D ÷ 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000D ÷ 0308 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 000D ÷ 0308 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 000D ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 000D ÷ 0020 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 000D ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 000D ÷ 0020 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000D ÷ 0308 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 000D ÷ 0308 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 000D ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 000D ÷ 0020 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 000D × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) × [5.01] <LINE FEED (LF)> (LF) ÷ [0.3]
× 000D ÷ 0020 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000D ÷ 0308 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 000D ÷ 0308 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 000D ÷ 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 000D ÷ 0020 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000D ÷ 0308 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 000D ÷ 0308 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 000D ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 000D ÷ 0020 ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000D ÷ 0308 × 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 000D ÷ 0308 × 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 000D ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0308 × 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 000D ÷ 0308 × 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT PARENTHESIS (OP) ÷ [0.3]
× 000D ÷ 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 000D ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000D ÷ 0308 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 000D ÷ 0308 × 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] DOLLAR SIGN (PR) ÷ [0.3]
× 000D ÷ 0020 ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000D ÷ 0308 ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 000D ÷ 0308 × 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 000D ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] QUOTATION MARK (QU) ÷ [0.3]
× 000D ÷ 0020 ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000D ÷ 0308 × 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 000D ÷ 0308 × 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 000D ÷ 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [0.3]
× 000D ÷ 0020 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 000D ÷ 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SOLIDUS (SY) ÷ [0.3]
× 000D ÷ 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000D ÷ 0308 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 000D ÷ 0308 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 000D ÷ 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WORD JOINER (WJ) ÷ [0.3]
× 000D ÷ 0020 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000D ÷ 0308 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 000D ÷ 0308 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 000D ÷ 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 000D ÷ 0020 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000D ÷ 0308 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 000D ÷ 0308 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 000D ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 000D ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000D ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000D ÷ 0020 ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000D ÷ 0308 ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000D ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000D ÷ 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000D ÷ 0308 × 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000D ÷ 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000D ÷ 0020 ÷ 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000D ÷ 0308 × 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 000D ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SECTION SIGN (AI_AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000D ÷ 0308 × 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 000D ÷ 0308 × 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 000D ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <reserved-50005> (XX_AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000D ÷ 0308 × 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 000D ÷ 0308 × 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 000D ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 000D ÷ 0308 × 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 000D ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000D ÷ 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 0308 × 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000D ÷ 0308 × 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0021 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 0021 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0021 × 0308 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0021 × 0308 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0021 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0021 × 0020 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0021 × 0308 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0021 × 0308 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0021 × 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0021 × 0020 ÷ 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0021 × 0308 × 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0021 × 0308 × 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0021 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0021 × 0020 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0021 × 0308 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0021 × 0308 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0021 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0021 × 0020 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0021 × 0308 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0021 × 0308 × 0020 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0021 × 0308 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0021 × 0308 × 0020 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0021 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0021 × 0020 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0021 × 0308 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0021 × 0308 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0021 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0021 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0308 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0308 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0021 × 0308 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0021 × 0308 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0021 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0021 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0021 × 0308 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0021 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0021 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0021 × 0308 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0021 × 0308 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0021 × 0308 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0021 × 0308 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0021 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0021 × 0020 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0021 × 0308 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0021 × 0308 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0021 × 0308 × 0020 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0021 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0021 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0021 × 0308 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0021 × 0308 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0021 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0021 × 0020 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0021 × 0308 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0021 × 0308 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0021 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0021 × 0020 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0021 × 0308 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0021 × 0308 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0021 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0021 × 0020 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0021 × 0308 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0021 × 0308 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0021 × 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0021 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 × 0308 × 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0021 × 0308 × 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0021 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0021 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0308 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0021 × 0308 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] COMMA (IS) ÷ [0.3]
× 0021 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0021 × 0308 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0021 × 0308 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0021 × 0308 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0021 × 0308 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0021 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0021 × 0020 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0021 × 0308 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0021 × 0308 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0021 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0021 × 0020 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0021 × 0308 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0021 × 0308 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0021 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0021 × 0020 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0021 × 0308 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0021 × 0308 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0021 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0021 × 0020 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0021 × 0308 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0021 × 0308 × 0020 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0021 × 0308 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0021 × 0308 × 0020 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0021 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0021 × 0020 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0021 × 0308 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0021 × 0308 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0021 × 0308 × 0020 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0021 × 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0021 × 0020 ÷ 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0021 × 0308 × 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0021 × 0308 × 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0021 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 0021 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 × 0308 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0021 × 0308 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0021 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0021 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0021 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0021 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0021 × 0308 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0021 × 0308 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0021 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0021 × 0020 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0021 × 0308 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0021 × 0308 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0021 × 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0021 × 0020 ÷ 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0021 × 0308 × 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0021 × 0308 × 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0021 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [0.3]
× 0021 × 0020 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0021 × 0308 × 0020 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0021 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0021 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0021 × 0308 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0021 × 0308 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0021 × 0308 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0021 × 0308 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0021 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0021 × 0020 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0021 × 0308 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0021 × 0308 × 0020 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0021 × 0308 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0021 × 0308 × 0020 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0021 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0021 × 0020 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0021 × 0308 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0021 × 0308 × 0020 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0021 × 0308 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0021 × 0308 × 0020 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0021 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0021 × 0020 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0021 × 0308 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0021 × 0308 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0021 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0021 × 0020 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0021 × 0308 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0021 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 0308 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0021 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0021 × 0308 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0021 × 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0021 × 0020 ÷ 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0021 × 0308 × 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0021 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0021 × 0020 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0021 × 0308 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0021 × 0308 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0021 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0021 × 0020 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0021 × 0308 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0021 × 0308 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0021 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0021 × 0020 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0021 × 0308 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0021 × 0308 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0021 × 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0021 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0021 × 0308 × 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0021 × 0308 × 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A0 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A0 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A0 × 0308 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00A0 × 0308 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A0 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EM DASH (B2) ÷ [0.3]
× 00A0 × 0020 ÷ 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00A0 × 0308 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] EM DASH (B2) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 00A0 × 0308 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EM DASH (B2) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 00A0 × 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 00A0 × 0020 ÷ 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A0 × 0308 × 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00A0 × 0308 × 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 00A0 × 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] ACUTE ACCENT (BB) ÷ [0.3]
× 00A0 × 0020 ÷ 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A0 × 0308 × 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00A0 × 0308 × 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 00A0 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 00A0 × 0020 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A0 × 0308 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00A0 × 0308 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 00A0 × FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 00A0 × 0020 ÷ FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A0 × 0308 × FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00A0 × 0308 × FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 00A0 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A0 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0308 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00A0 × 0308 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A0 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00A0 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00A0 × 0308 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A0 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A0 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A0 × 0308 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00A0 × 0308 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A0 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EXCLAMATION MARK (EX) ÷ [0.3]
× 00A0 × 0020 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A0 × 0308 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00A0 × 0308 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 00A0 × 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 00A0 × 0020 ÷ 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A0 × 0308 × 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00A0 × 0308 × 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 00A0 × AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 00A0 × 0020 ÷ AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A0 × 0308 × AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00A0 × 0308 × AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 00A0 × AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 00A0 × 0020 ÷ AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A0 × 0308 × AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00A0 × 0308 × AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 00A0 × 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 00A0 × 0020 ÷ 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A0 × 0308 × 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00A0 × 0308 × 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 00A0 × 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A0 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 0308 × 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00A0 × 0308 × 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A0 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] WATCH (ID) ÷ [0.3]
× 00A0 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0308 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 00A0 × 0308 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] WATCH (ID) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 00A0 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A0 × 0020 ÷ 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A0 × 0308 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A0 × 0308 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A0 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] COMMA (IS) ÷ [0.3]
× 00A0 × 0020 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A0 × 0308 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] COMMA (IS) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00A0 × 0308 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] COMMA (IS) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 00A0 × 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 00A0 × 0020 ÷ 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A0 × 0308 × 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00A0 × 0308 × 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 00A0 × 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 00A0 × 0020 ÷ 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A0 × 0308 × 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00A0 × 0308 × 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 00A0 × 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 00A0 × 0020 ÷ 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A0 × 0308 × 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00A0 × 0308 × 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 00A0 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 00A0 × 0020 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A0 × 0308 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00A0 × 0308 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 00A0 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 00A0 × 0020 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A0 × 0308 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00A0 × 0308 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 00A0 × 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 00A0 × 0020 ÷ 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A0 × 0308 × 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00A0 × 0308 × 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 00A0 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A0 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0308 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 00A0 × 0308 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A0 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 00A0 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 00A0 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A0 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A0 × 0308 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00A0 × 0308 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 00A0 × 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] DOLLAR SIGN (PR) ÷ [0.3]
× 00A0 × 0020 ÷ 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A0 × 0308 × 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00A0 × 0308 × 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 00A0 × 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] QUOTATION MARK (QU) ÷ [0.3]
× 00A0 × 0020 ÷ 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A0 × 0308 × 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 00A0 × 0308 × 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] QUOTATION MARK (QU) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 00A0 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [0.3]
× 00A0 × 0020 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 00A0 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] SOLIDUS (SY) ÷ [0.3]
× 00A0 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A0 × 0308 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] SOLIDUS (SY) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00A0 × 0308 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] SOLIDUS (SY) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00A0 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A0 × 0020 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A0 × 0308 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00A0 × 0308 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A0 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 00A0 × 0020 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A0 × 0308 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00A0 × 0308 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 00A0 × 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 00A0 × 0020 ÷ 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A0 × 0308 × 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00A0 × 0308 × 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00A0 × 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A0 × 0020 ÷ 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A0 × 0308 × 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A0 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 0308 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A0 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A0 × 0308 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A0 × 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00A0 × 0020 ÷ 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00A0 × 0308 × 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 00A0 × 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 00A0 × 0020 ÷ 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A0 × 0308 × 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00A0 × 0308 × 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 00A0 × 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 00A0 × 0020 ÷ 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A0 × 0308 × 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00A0 × 0308 × 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 00A0 × 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 00A0 × 0020 ÷ 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A0 × 0308 × 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00A0 × 0308 × 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 00A0 × 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A0 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A0 × 0308 × 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [12.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00A0 × 0308 × 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC00 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× AC00 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC00 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× AC00 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× AC00 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× AC00 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× AC00 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× AC00 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× AC00 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× AC00 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC00 × 0308 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× AC00 × 0308 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× AC00 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× AC00 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC00 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× AC00 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× AC00 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× AC00 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC00 × 0308 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC00 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× AC00 × 0308 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× AC00 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× AC00 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× AC00 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC00 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× AC00 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× AC00 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC00 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× AC00 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× AC00 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC00 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× AC00 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× AC00 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC00 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC00 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC00 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC00 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× AC00 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× AC00 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC00 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× AC00 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC00 × 0308 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× AC00 × 0308 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× AC00 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× AC00 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× AC00 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC00 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× AC00 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× AC00 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× AC00 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC00 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× AC00 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× AC00 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× AC00 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC00 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× AC00 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× AC00 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× AC00 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC00 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× AC00 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× AC00 × 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× AC00 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× AC00 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× AC00 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] WATCH (ID) ÷ [0.3]
× AC00 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× AC00 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] COMMA (IS) ÷ [0.3]
× AC00 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× AC00 × 0308 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× AC00 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× AC00 × 0308 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× AC00 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× AC00 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× AC00 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC00 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× AC00 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× AC00 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× AC00 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC00 × 0308 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× AC00 × 0308 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× AC00 × 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× AC00 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC00 × 0308 × 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× AC00 × 0308 × 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× AC00 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× AC00 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC00 × 0308 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC00 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× AC00 × 0308 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× AC00 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× AC00 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× AC00 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC00 × 0308 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× AC00 × 0308 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× AC00 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× AC00 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× AC00 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC00 × 0308 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× AC00 × 0308 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× AC00 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× AC00 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× AC00 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× AC00 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× AC00 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× AC00 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC00 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× AC00 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC00 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× AC00 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× AC00 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× AC00 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× AC00 × 0308 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× AC00 × 0308 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× AC00 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [0.3]
× AC00 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× AC00 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× AC00 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] SOLIDUS (SY) ÷ [0.3]
× AC00 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC00 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× AC00 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× AC00 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× AC00 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× AC00 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC00 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC00 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC00 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× AC00 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× AC00 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC00 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× AC00 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC00 × 0308 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC00 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× AC00 × 0308 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× AC00 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× AC00 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× AC00 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC00 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× AC00 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× AC00 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC00 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC00 × 0308 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC00 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC00 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC00 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC00 × 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× AC00 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× AC00 × 0308 × 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× AC00 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× AC00 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC00 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× AC00 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× AC00 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× AC00 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC00 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× AC00 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× AC00 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× AC00 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC00 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× AC00 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× AC00 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC00 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC00 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× AC00 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC01 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× AC01 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC01 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× AC01 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× AC01 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× AC01 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× AC01 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× AC01 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× AC01 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× AC01 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC01 × 0308 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× AC01 × 0308 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× AC01 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× AC01 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC01 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× AC01 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× AC01 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× AC01 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC01 × 0308 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC01 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× AC01 × 0308 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× AC01 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× AC01 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× AC01 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC01 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× AC01 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× AC01 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC01 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× AC01 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× AC01 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× AC01 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× AC01 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× AC01 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× AC01 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC01 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC01 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC01 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× AC01 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× AC01 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× AC01 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× AC01 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC01 × 0308 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× AC01 × 0308 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× AC01 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× AC01 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× AC01 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC01 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× AC01 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× AC01 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× AC01 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC01 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× AC01 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× AC01 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× AC01 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC01 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× AC01 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× AC01 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× AC01 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC01 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× AC01 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× AC01 × 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× AC01 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× AC01 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× AC01 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] WATCH (ID) ÷ [0.3]
× AC01 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× AC01 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] COMMA (IS) ÷ [0.3]
× AC01 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× AC01 × 0308 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× AC01 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× AC01 × 0308 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× AC01 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× AC01 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× AC01 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC01 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× AC01 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× AC01 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× AC01 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC01 × 0308 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× AC01 × 0308 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× AC01 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× AC01 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC01 × 0308 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× AC01 × 0308 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× AC01 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× AC01 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC01 × 0308 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC01 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× AC01 × 0308 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× AC01 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× AC01 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× AC01 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC01 × 0308 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× AC01 × 0308 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× AC01 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× AC01 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× AC01 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC01 × 0308 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× AC01 × 0308 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× AC01 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× AC01 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× AC01 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× AC01 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× AC01 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× AC01 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× AC01 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× AC01 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC01 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× AC01 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× AC01 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× AC01 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× AC01 × 0308 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× AC01 × 0308 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× AC01 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [0.3]
× AC01 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× AC01 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× AC01 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] SOLIDUS (SY) ÷ [0.3]
× AC01 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC01 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× AC01 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× AC01 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× AC01 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× AC01 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC01 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC01 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC01 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× AC01 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× AC01 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC01 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× AC01 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC01 × 0308 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC01 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× AC01 × 0308 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× AC01 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× AC01 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× AC01 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC01 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× AC01 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× AC01 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC01 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC01 × 0308 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× AC01 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC01 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC01 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× AC01 × 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× AC01 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× AC01 × 0308 × 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× AC01 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× AC01 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC01 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× AC01 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× AC01 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× AC01 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC01 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× AC01 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× AC01 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× AC01 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC01 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× AC01 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× AC01 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC01 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC01 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× AC01 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 05D0 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 05D0 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 05D0 × 0308 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 05D0 × 0308 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 05D0 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 05D0 × 0020 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 05D0 × 0308 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 05D0 × 0308 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 05D0 × 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 05D0 × 0020 ÷ 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 05D0 × 0308 × 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 05D0 × 0308 × 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 05D0 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 05D0 × 0020 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 05D0 × 0308 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 05D0 × 0308 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 05D0 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 05D0 × 0020 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 05D0 × 0308 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 05D0 × 0308 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 05D0 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 05D0 × 0020 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 05D0 × 0308 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 05D0 × 0308 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 05D0 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 05D0 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0308 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 05D0 × 0308 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 05D0 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 05D0 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 05D0 × 0308 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 05D0 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 05D0 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 05D0 × 0308 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 05D0 × 0308 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 05D0 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 05D0 × 0020 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 05D0 × 0308 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 05D0 × 0308 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 05D0 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 05D0 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 05D0 × 0308 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 05D0 × 0308 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 05D0 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 05D0 × 0020 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 05D0 × 0308 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 05D0 × 0308 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 05D0 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 05D0 × 0020 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 05D0 × 0308 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 05D0 × 0308 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 05D0 × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 05D0 × 0020 ÷ 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 05D0 × 0308 × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 05D0 × 0308 × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 05D0 × 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 05D0 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 × 0308 × 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 05D0 × 0308 × 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 05D0 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 05D0 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0308 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 05D0 × 0308 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] COMMA (IS) ÷ [0.3]
× 05D0 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 05D0 × 0308 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 05D0 × 0308 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 05D0 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 05D0 × 0020 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 05D0 × 0308 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 05D0 × 0308 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 05D0 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 05D0 × 0020 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 05D0 × 0308 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 05D0 × 0308 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 05D0 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 05D0 × 0020 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 05D0 × 0308 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 05D0 × 0308 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 05D0 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 05D0 × 0020 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 05D0 × 0308 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 05D0 × 0308 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 05D0 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 05D0 × 0020 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 05D0 × 0308 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 05D0 × 0308 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 05D0 × 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 05D0 × 0020 ÷ 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 05D0 × 0308 × 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 05D0 × 0308 × 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 05D0 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0308 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 05D0 × 0308 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
× 05D0 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 05D0 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 05D0 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 05D0 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 × 0308 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 05D0 × 0308 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 05D0 × 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
× 05D0 × 0020 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 05D0 × 0308 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 05D0 × 0308 × 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 05D0 × 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 05D0 × 0020 ÷ 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 05D0 × 0308 × 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 05D0 × 0308 × 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 05D0 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [0.3]
× 05D0 × 0020 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 05D0 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 05D0 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 05D0 × 0308 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 05D0 × 0308 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 05D0 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 05D0 × 0020 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 05D0 × 0308 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 05D0 × 0308 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 05D0 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 05D0 × 0020 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 05D0 × 0308 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 05D0 × 0308 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 05D0 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 05D0 × 0020 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 05D0 × 0308 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 05D0 × 0308 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 05D0 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 05D0 × 0020 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 05D0 × 0308 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 05D0 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 0308 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 05D0 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 05D0 × 0308 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 05D0 × 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 05D0 × 0020 ÷ 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 05D0 × 0308 × 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 05D0 × 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 05D0 × 0020 ÷ 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 05D0 × 0308 × 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 05D0 × 0308 × 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 05D0 × 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 05D0 × 0020 ÷ 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 05D0 × 0308 × 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 05D0 × 0308 × 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 05D0 × 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 05D0 × 0020 ÷ 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 05D0 × 0308 × 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 05D0 × 0308 × 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 05D0 × 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 05D0 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 05D0 × 0308 × 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 05D0 × 0308 × 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002D ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 002D × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002D × 0308 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002D × 0308 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 002D ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 002D × 0020 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002D × 0308 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 002D × 0308 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 002D × 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 002D × 0020 ÷ 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002D × 0308 × 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 002D × 0308 × 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 002D ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 002D × 0020 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002D × 0308 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 002D × 0308 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 002D × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 002D × 0020 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002D × 0308 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002D × 0308 × 0020 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 002D × 0308 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 002D × 0308 × 0020 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 002D ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 002D × 0020 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002D × 0308 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 002D × 0308 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 002D × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002D × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0308 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0308 × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 002D × 0308 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 002D × 0308 × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002D × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002D × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002D × 0308 × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002D × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002D × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002D × 0308 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002D × 0308 × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 002D × 0308 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 002D × 0308 × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002D × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 002D × 0020 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002D × 0308 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002D × 0308 × 0020 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 002D × 0308 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 002D × 0308 × 0020 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 002D ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 002D × 0020 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002D × 0308 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 002D × 0308 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 002D ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 002D × 0020 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002D × 0308 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 002D × 0308 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 002D ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 002D × 0020 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002D × 0308 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 002D × 0308 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 002D ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 002D × 0020 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002D × 0308 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 002D × 0308 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 002D × 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 002D × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D × 0308 × 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 002D × 0308 × 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 002D ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002D × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002D × 0308 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 002D × 0308 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002D ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0308 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 0308 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] COMMA (IS) ÷ [0.3]
× 002D × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002D × 0308 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 002D × 0308 × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 002D × 0308 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 002D × 0308 × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 002D ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 002D × 0020 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002D × 0308 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 002D × 0308 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 002D ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 002D × 0020 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002D × 0308 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 002D × 0308 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 002D ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 002D × 0020 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002D × 0308 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 002D × 0308 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 002D × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 002D × 0020 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002D × 0308 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002D × 0308 × 0020 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 002D × 0308 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 002D × 0308 × 0020 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 002D × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 002D × 0020 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002D × 0308 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002D × 0308 × 0020 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 002D × 0308 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 002D × 0308 × 0020 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 002D × 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 002D × 0020 ÷ 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002D × 0308 × 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 002D × 0308 × 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 002D × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
× 002D × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002D × 0308 × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 002D × 0308 × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002D ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 002D × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 002D ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002D × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002D × 0308 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 002D × 0308 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002D ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 002D × 0020 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002D × 0308 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 002D × 0308 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 002D × 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 002D × 0020 ÷ 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002D × 0308 × 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 002D × 0308 × 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 002D × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [0.3]
× 002D × 0020 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 002D × 0308 × 0020 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 002D × 0308 × 0020 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 002D × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002D × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002D × 0308 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 002D × 0308 × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 002D × 0308 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 002D × 0308 × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002D × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002D × 0020 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002D × 0308 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002D × 0308 × 0020 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 002D × 0308 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 002D × 0308 × 0020 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002D × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 002D × 0020 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002D × 0308 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002D × 0308 × 0020 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 002D × 0308 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 002D × 0308 × 0020 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 002D ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 002D × 0020 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002D × 0308 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002D × 0308 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002D ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002D × 0020 ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002D × 0308 ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002D ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 0308 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002D × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002D × 0308 × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002D × 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002D × 0020 ÷ 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002D × 0308 × 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 002D ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 002D × 0020 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002D × 0308 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 002D × 0308 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 002D ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 002D × 0020 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002D × 0308 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 002D × 0308 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 002D ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 002D × 0020 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002D × 0308 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 002D × 0308 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 002D × 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002D × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002D × 0308 × 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002D × 0308 × 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 231A ÷ 0023 ÷ # × [0.3] WATCH (ID) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 231A × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0308 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 231A × 0308 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 231A ÷ 2014 ÷ # × [0.3] WATCH (ID) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 231A × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0308 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 231A × 0308 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 231A × 0009 ÷ # × [0.3] WATCH (ID) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 231A × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0308 × 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 231A × 0308 × 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 231A ÷ 00B4 ÷ # × [0.3] WATCH (ID) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 231A × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0308 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 231A × 0308 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 231A × 000B ÷ # × [0.3] WATCH (ID) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 231A × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0308 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0308 × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 231A × 0308 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 231A × 0308 × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 231A ÷ FFFC ÷ # × [0.3] WATCH (ID) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 231A × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0308 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 231A × 0308 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 231A × 007D ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 231A × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0308 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0308 × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 231A × 0308 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 231A × 0308 × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 231A × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 231A × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 231A × 0308 × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 231A × 000D ÷ # × [0.3] WATCH (ID) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 231A × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0308 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0308 × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 231A × 0308 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 231A × 0308 × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 231A × 0021 ÷ # × [0.3] WATCH (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 231A × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0308 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0308 × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 231A × 0308 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 231A × 0308 × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 231A × 00A0 ÷ # × [0.3] WATCH (ID) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 231A × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0308 × 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 231A × 0308 × 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 231A ÷ AC00 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 231A × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0308 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 231A × 0308 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 231A ÷ AC01 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 231A × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0308 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 231A × 0308 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 231A ÷ 05D0 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 231A × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0308 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 231A × 0308 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 231A × 002D ÷ # × [0.3] WATCH (ID) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 231A × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0308 × 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 231A × 0308 × 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 231A ÷ 231A ÷ # × [0.3] WATCH (ID) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 231A × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 0308 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 231A × 0308 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 231A × 002C ÷ # × [0.3] WATCH (ID) × [13.02] COMMA (IS) ÷ [0.3]
× 231A × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A × 0308 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 231A × 0308 × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 231A × 0308 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 231A × 0308 × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 231A ÷ 1100 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 231A × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0308 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 231A × 0308 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 231A ÷ 11A8 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 231A × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0308 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 231A × 0308 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 231A ÷ 1160 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 231A × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0308 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 231A × 0308 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 231A × 000A ÷ # × [0.3] WATCH (ID) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 231A × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0308 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0308 × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 231A × 0308 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 231A × 0308 × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 231A × 0085 ÷ # × [0.3] WATCH (ID) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 231A × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0308 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0308 × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 231A × 0308 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 231A × 0308 × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 231A × 17D6 ÷ # × [0.3] WATCH (ID) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 231A × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0308 × 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 231A × 0308 × 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 231A ÷ 0030 ÷ # × [0.3] WATCH (ID) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 231A × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0308 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 231A × 0308 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 231A × 0025 ÷ # × [0.3] WATCH (ID) × [23.01] PERCENT SIGN (PO) ÷ [0.3]
+× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 231A × 0025 ÷ # × [0.3] WATCH (ID) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
× 231A × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0308 × 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [23.01] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 231A × 0308 × 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 231A ÷ 0024 ÷ # × [0.3] WATCH (ID) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 231A × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0308 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 231A × 0308 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 231A × 0022 ÷ # × [0.3] WATCH (ID) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 231A × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0308 × 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 231A × 0308 × 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 231A × 0020 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [0.3]
× 231A × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0308 × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 231A × 0308 × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 231A × 002F ÷ # × [0.3] WATCH (ID) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 231A × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0308 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0308 × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 231A × 0308 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 231A × 0308 × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 231A × 2060 ÷ # × [0.3] WATCH (ID) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 231A × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0308 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0308 × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 231A × 0308 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 231A × 0308 × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 231A × 200B ÷ # × [0.3] WATCH (ID) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 231A × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0308 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0308 × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 231A × 0308 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 231A × 0308 × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 231A ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 231A × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0308 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 231A × 0308 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 231A ÷ 261D ÷ # × [0.3] WATCH (ID) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 231A × 0020 ÷ 261D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 231A × 0308 ÷ 261D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 261D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 231A ÷ 1F3FB ÷ # × [0.3] WATCH (ID) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 231A × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 231A × 0308 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 231A × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 231A × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 231A × 0308 × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 231A × 200D ÷ # × [0.3] WATCH (ID) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 231A × 0020 ÷ 200D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 231A × 0308 × 200D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 200D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 231A ÷ 00A7 ÷ # × [0.3] WATCH (ID) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 231A × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0308 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 231A × 0308 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 231A ÷ 50005 ÷ # × [0.3] WATCH (ID) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 231A × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0308 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 231A × 0308 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 231A ÷ 0E01 ÷ # × [0.3] WATCH (ID) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 231A × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0308 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 231A × 0308 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 231A × 3041 ÷ # × [0.3] WATCH (ID) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 231A × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0308 × 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 231A × 0308 × 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 231A × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2024 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 2024 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2024 × 0308 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2024 × 0308 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 2024 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 2024 × 0020 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 2024 × 0308 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 2024 × 0308 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 2024 × 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 2024 × 0020 ÷ 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2024 × 0308 × 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2024 × 0308 × 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 2024 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 2024 × 0020 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2024 × 0308 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2024 × 0308 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 2024 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 2024 × 0020 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2024 × 0308 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2024 × 0308 × 0020 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2024 × 0308 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2024 × 0308 × 0020 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 2024 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 2024 × 0020 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2024 × 0308 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2024 × 0308 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 2024 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2024 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0308 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0308 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2024 × 0308 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2024 × 0308 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2024 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2024 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2024 × 0308 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2024 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2024 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2024 × 0308 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2024 × 0308 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2024 × 0308 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2024 × 0308 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2024 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 2024 × 0020 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2024 × 0308 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2024 × 0308 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2024 × 0308 × 0020 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 2024 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 2024 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2024 × 0308 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2024 × 0308 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 2024 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 2024 × 0020 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2024 × 0308 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2024 × 0308 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 2024 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 2024 × 0020 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2024 × 0308 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2024 × 0308 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 2024 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 2024 × 0020 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2024 × 0308 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2024 × 0308 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 2024 × 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 2024 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 × 0308 × 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2024 × 0308 × 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2024 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 2024 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0308 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 2024 × 0308 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] COMMA (IS) ÷ [0.3]
× 2024 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2024 × 0308 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 2024 × 0308 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2024 × 0308 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 2024 × 0308 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 2024 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 2024 × 0020 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2024 × 0308 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2024 × 0308 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 2024 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 2024 × 0020 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2024 × 0308 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2024 × 0308 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 2024 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 2024 × 0020 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2024 × 0308 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2024 × 0308 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 2024 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 2024 × 0020 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2024 × 0308 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2024 × 0308 × 0020 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2024 × 0308 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2024 × 0308 × 0020 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 2024 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 2024 × 0020 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2024 × 0308 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2024 × 0308 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2024 × 0308 × 0020 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 2024 × 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 2024 × 0020 ÷ 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2024 × 0308 × 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2024 × 0308 × 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 2024 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 2024 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 × 0308 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2024 × 0308 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2024 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 2024 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 2024 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 2024 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2024 × 0308 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2024 × 0308 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2024 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 2024 × 0020 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2024 × 0308 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2024 × 0308 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 2024 × 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 2024 × 0020 ÷ 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2024 × 0308 × 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2024 × 0308 × 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 2024 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [0.3]
× 2024 × 0020 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 2024 × 0308 × 0020 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 2024 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2024 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2024 × 0308 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 2024 × 0308 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2024 × 0308 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 2024 × 0308 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2024 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2024 × 0020 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2024 × 0308 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2024 × 0308 × 0020 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2024 × 0308 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2024 × 0308 × 0020 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2024 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 2024 × 0020 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2024 × 0308 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2024 × 0308 × 0020 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2024 × 0308 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2024 × 0308 × 0020 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 2024 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 2024 × 0020 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2024 × 0308 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2024 × 0308 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2024 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2024 × 0020 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2024 × 0308 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2024 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 0308 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2024 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2024 × 0308 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2024 × 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2024 × 0020 ÷ 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2024 × 0308 × 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 2024 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 2024 × 0020 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2024 × 0308 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2024 × 0308 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 2024 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 2024 × 0020 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2024 × 0308 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2024 × 0308 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 2024 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 2024 × 0020 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2024 × 0308 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2024 × 0308 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 2024 × 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2024 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2024 × 0308 × 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2024 × 0308 × 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002C × 0023 ÷ # × [0.3] COMMA (IS) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
× 002C × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002C × 0308 × 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002C × 0308 × 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 002C ÷ 2014 ÷ # × [0.3] COMMA (IS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 002C × 0020 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002C × 0308 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 002C × 0308 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 002C × 0009 ÷ # × [0.3] COMMA (IS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 002C × 0020 ÷ 0009 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002C × 0308 × 0009 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0009 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 002C × 0308 × 0009 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0009 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 002C ÷ 00B4 ÷ # × [0.3] COMMA (IS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 002C × 0020 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002C × 0308 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 002C × 0308 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 002C × 000B ÷ # × [0.3] COMMA (IS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 002C × 0020 × 000B ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002C × 0308 × 000B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002C × 0308 × 0020 × 000B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 002C × 0308 × 000B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 002C × 0308 × 0020 × 000B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 002C ÷ FFFC ÷ # × [0.3] COMMA (IS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 002C × 0020 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002C × 0308 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 002C × 0308 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 002C × 007D ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002C × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0308 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0308 × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 002C × 0308 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 002C × 0308 × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002C × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002C × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002C × 0308 × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002C × 000D ÷ # × [0.3] COMMA (IS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002C × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002C × 0308 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002C × 0308 × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 002C × 0308 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 002C × 0308 × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002C × 0021 ÷ # × [0.3] COMMA (IS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 002C × 0020 × 0021 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002C × 0308 × 0021 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002C × 0308 × 0020 × 0021 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 002C × 0308 × 0021 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 002C × 0308 × 0020 × 0021 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 002C × 00A0 ÷ # × [0.3] COMMA (IS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 002C × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002C × 0308 × 00A0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 002C × 0308 × 00A0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 002C ÷ AC00 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 002C × 0020 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002C × 0308 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 002C × 0308 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 002C ÷ AC01 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 002C × 0020 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002C × 0308 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 002C × 0308 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 002C × 05D0 ÷ # × [0.3] COMMA (IS) × [29.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 002C × 0020 ÷ 05D0 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002C × 0308 × 05D0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [29.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 002C × 0308 × 05D0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 002C × 002D ÷ # × [0.3] COMMA (IS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 002C × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C × 0308 × 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 002C × 0308 × 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 002C ÷ 231A ÷ # × [0.3] COMMA (IS) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002C × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002C × 0308 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 002C × 0308 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002C ÷ 2024 ÷ # × [0.3] COMMA (IS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0308 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 0308 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 002C ÷ # × [0.3] COMMA (IS) × [13.02] COMMA (IS) ÷ [0.3]
× 002C × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002C × 0308 × 002C ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 002C × 0308 × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 002C × 0308 × 002C ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 002C × 0308 × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 002C ÷ 1100 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 002C × 0020 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002C × 0308 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 002C × 0308 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 002C ÷ 11A8 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 002C × 0020 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002C × 0308 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 002C × 0308 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 002C ÷ 1160 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 002C × 0020 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002C × 0308 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 002C × 0308 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 002C × 000A ÷ # × [0.3] COMMA (IS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 002C × 0020 × 000A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002C × 0308 × 000A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002C × 0308 × 0020 × 000A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 002C × 0308 × 000A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 002C × 0308 × 0020 × 000A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 002C × 0085 ÷ # × [0.3] COMMA (IS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 002C × 0020 × 0085 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002C × 0308 × 0085 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002C × 0308 × 0020 × 0085 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 002C × 0308 × 0085 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 002C × 0308 × 0020 × 0085 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 002C × 17D6 ÷ # × [0.3] COMMA (IS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 002C × 0020 ÷ 17D6 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002C × 0308 × 17D6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 002C × 0308 × 17D6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 002C ÷ 0030 ÷ # × [0.3] COMMA (IS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 002C × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C × 0308 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 002C × 0308 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002C ÷ 0028 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 002C × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 002C ÷ 0025 ÷ # × [0.3] COMMA (IS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002C × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002C × 0308 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 002C × 0308 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002C ÷ 0024 ÷ # × [0.3] COMMA (IS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 002C × 0020 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002C × 0308 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 002C × 0308 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 002C × 0022 ÷ # × [0.3] COMMA (IS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 002C × 0020 ÷ 0022 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002C × 0308 × 0022 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0022 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 002C × 0308 × 0022 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0022 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 002C × 0020 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [0.3]
× 002C × 0020 × 0020 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 002C × 0308 × 0020 × 0020 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 002C × 0308 × 0020 × 0020 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 002C × 002F ÷ # × [0.3] COMMA (IS) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002C × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002C × 0308 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 002C × 0308 × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 002C × 0308 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 002C × 0308 × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002C × 2060 ÷ # × [0.3] COMMA (IS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002C × 0020 × 2060 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002C × 0308 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002C × 0308 × 0020 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 002C × 0308 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 002C × 0308 × 0020 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002C × 200B ÷ # × [0.3] COMMA (IS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 002C × 0020 × 200B ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002C × 0308 × 200B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002C × 0308 × 0020 × 200B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 002C × 0308 × 200B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 002C × 0308 × 0020 × 200B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 002C ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 002C × 0020 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002C × 0308 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002C × 0308 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002C ÷ 261D ÷ # × [0.3] COMMA (IS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002C × 0020 ÷ 261D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002C × 0308 ÷ 261D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 261D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002C ÷ 1F3FB ÷ # × [0.3] COMMA (IS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 0308 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002C × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002C × 0308 × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002C × 200D ÷ # × [0.3] COMMA (IS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002C × 0020 ÷ 200D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002C × 0308 × 200D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 200D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 002C × 00A7 ÷ # × [0.3] COMMA (IS) × [29.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 002C × 0020 ÷ 00A7 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002C × 0308 × 00A7 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [29.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 002C × 0308 × 00A7 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 002C × 50005 ÷ # × [0.3] COMMA (IS) × [29.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 002C × 0020 ÷ 50005 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002C × 0308 × 50005 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [29.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 50005 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 002C × 0308 × 50005 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 50005 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 002C × 0E01 ÷ # × [0.3] COMMA (IS) × [29.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 002C × 0020 ÷ 0E01 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002C × 0308 × 0E01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [29.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 002C × 0308 × 0E01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 002C × 3041 ÷ # × [0.3] COMMA (IS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002C × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002C × 0308 × 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002C × 0308 × 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1100 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1100 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1100 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1100 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1100 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1100 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1100 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1100 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1100 × 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 1100 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1100 × 0308 × 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1100 × 0308 × 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 1100 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 1100 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1100 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1100 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 1100 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 1100 × 0020 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1100 × 0308 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1100 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1100 × 0308 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1100 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 1100 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 1100 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1100 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1100 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 1100 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1100 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0308 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1100 × 0308 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1100 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1100 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1100 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1100 × 0308 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1100 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1100 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1100 × 0308 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1100 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1100 × 0308 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1100 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1100 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 1100 × 0020 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1100 × 0308 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1100 × 0308 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1100 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 1100 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 1100 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1100 × 0308 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1100 × 0308 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 1100 × AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 1100 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1100 × 0308 × AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [26.01] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1100 × 0308 × AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 1100 × AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 1100 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1100 × 0308 × AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [26.01] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1100 × 0308 × AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 1100 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 1100 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1100 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1100 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 1100 × 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1100 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 × 0308 × 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1100 × 0308 × 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1100 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1100 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0308 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1100 × 0308 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] COMMA (IS) ÷ [0.3]
× 1100 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1100 × 0308 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1100 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1100 × 0308 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1100 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 1100 × 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 1100 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1100 × 0308 × 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [26.01] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1100 × 0308 × 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 1100 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1100 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1100 × 0308 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1100 × 0308 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1100 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1100 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1100 × 0308 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1100 × 0308 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1100 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 1100 × 0020 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1100 × 0308 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1100 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1100 × 0308 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1100 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 1100 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 1100 × 0020 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1100 × 0308 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1100 × 0308 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1100 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 1100 × 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 1100 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1100 × 0308 × 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1100 × 0308 × 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 1100 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1100 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1100 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1100 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 1100 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 1100 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1100 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1100 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1100 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1100 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1100 × 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 1100 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1100 × 0308 × 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1100 × 0308 × 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 1100 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [0.3]
× 1100 × 0020 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1100 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 1100 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1100 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1100 × 0308 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1100 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1100 × 0308 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1100 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1100 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1100 × 0020 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1100 × 0308 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1100 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1100 × 0308 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1100 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1100 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 1100 × 0020 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1100 × 0308 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1100 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1100 × 0308 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1100 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 1100 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 1100 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1100 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1100 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1100 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1100 × 0020 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1100 × 0308 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1100 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1100 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1100 × 0308 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1100 × 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1100 × 0020 ÷ 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1100 × 0308 × 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 1100 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 1100 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1100 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1100 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 1100 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 1100 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1100 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1100 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 1100 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 1100 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1100 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 1100 × 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1100 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1100 × 0308 × 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1100 × 0308 × 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 11A8 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 11A8 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11A8 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 11A8 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 11A8 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 11A8 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 11A8 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 11A8 × 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 11A8 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 11A8 × 0308 × 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 11A8 × 0308 × 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 11A8 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 11A8 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 11A8 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 11A8 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 11A8 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 11A8 × 0020 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 11A8 × 0308 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 11A8 × 0308 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 11A8 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 11A8 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 11A8 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 11A8 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 11A8 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 11A8 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0308 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 11A8 × 0308 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 11A8 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 11A8 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 11A8 × 0308 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 11A8 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 11A8 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 11A8 × 0308 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 11A8 × 0308 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 11A8 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 11A8 × 0020 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 11A8 × 0308 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 11A8 × 0308 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 11A8 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 11A8 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 11A8 × 0308 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 11A8 × 0308 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 11A8 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 11A8 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 11A8 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 11A8 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 11A8 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 11A8 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 11A8 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 11A8 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 11A8 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 11A8 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 11A8 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 11A8 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 11A8 × 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 11A8 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 × 0308 × 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 11A8 × 0308 × 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 11A8 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 11A8 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 11A8 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] COMMA (IS) ÷ [0.3]
× 11A8 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 11A8 × 0308 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 11A8 × 0308 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 11A8 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 11A8 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 11A8 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 11A8 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 11A8 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 11A8 × 0308 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 11A8 × 0308 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 11A8 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 11A8 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 0308 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11A8 × 0308 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 11A8 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 11A8 × 0020 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 11A8 × 0308 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 11A8 × 0308 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 11A8 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 11A8 × 0020 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 11A8 × 0308 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 11A8 × 0308 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 11A8 × 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 11A8 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 11A8 × 0308 × 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 11A8 × 0308 × 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 11A8 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 11A8 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 11A8 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 11A8 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 11A8 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 11A8 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 11A8 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 11A8 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 11A8 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 11A8 × 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 11A8 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 11A8 × 0308 × 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 11A8 × 0308 × 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 11A8 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [0.3]
× 11A8 × 0020 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 11A8 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 11A8 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 11A8 × 0308 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 11A8 × 0308 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 11A8 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 11A8 × 0020 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 11A8 × 0308 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 11A8 × 0308 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 11A8 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 11A8 × 0020 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 11A8 × 0308 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 11A8 × 0308 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 11A8 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 11A8 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 11A8 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11A8 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11A8 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11A8 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11A8 × 0308 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11A8 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11A8 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11A8 × 0308 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11A8 × 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11A8 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11A8 × 0308 × 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 11A8 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 11A8 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 11A8 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 11A8 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 11A8 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 11A8 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 11A8 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 11A8 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 11A8 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 11A8 × 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 11A8 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 11A8 × 0308 × 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11A8 × 0308 × 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1160 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1160 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1160 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1160 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1160 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1160 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1160 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1160 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1160 × 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 1160 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1160 × 0308 × 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1160 × 0308 × 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 1160 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 1160 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1160 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1160 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 1160 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 1160 × 0020 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1160 × 0308 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1160 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1160 × 0308 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1160 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 1160 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 1160 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1160 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1160 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 1160 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1160 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0308 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1160 × 0308 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1160 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1160 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1160 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1160 × 0308 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1160 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1160 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1160 × 0308 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1160 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1160 × 0308 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1160 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1160 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 1160 × 0020 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1160 × 0308 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1160 × 0308 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1160 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 1160 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 1160 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1160 × 0308 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1160 × 0308 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 1160 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 1160 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1160 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1160 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 1160 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 1160 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1160 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1160 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 1160 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 1160 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1160 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1160 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 1160 × 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1160 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 × 0308 × 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1160 × 0308 × 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1160 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1160 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1160 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] COMMA (IS) ÷ [0.3]
× 1160 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1160 × 0308 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1160 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1160 × 0308 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1160 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 1160 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 1160 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1160 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1160 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 1160 × 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1160 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 0308 × 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1160 × 0308 × 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1160 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 0308 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1160 × 0308 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1160 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 1160 × 0020 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1160 × 0308 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1160 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1160 × 0308 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1160 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 1160 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 1160 × 0020 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1160 × 0308 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1160 × 0308 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1160 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 1160 × 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 1160 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1160 × 0308 × 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1160 × 0308 × 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 1160 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1160 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1160 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1160 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 1160 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
× 1160 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1160 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1160 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1160 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1160 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1160 × 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 1160 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1160 × 0308 × 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1160 × 0308 × 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 1160 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [0.3]
× 1160 × 0020 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1160 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 1160 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1160 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1160 × 0308 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1160 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1160 × 0308 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1160 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1160 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1160 × 0020 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1160 × 0308 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1160 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1160 × 0308 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1160 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1160 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 1160 × 0020 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1160 × 0308 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1160 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1160 × 0308 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1160 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 1160 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 1160 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1160 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1160 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1160 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1160 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1160 × 0308 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1160 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1160 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1160 × 0308 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1160 × 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1160 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1160 × 0308 × 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 1160 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 1160 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1160 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1160 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 1160 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 1160 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1160 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1160 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 1160 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 1160 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1160 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1160 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 1160 × 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1160 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1160 × 0308 × 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1160 × 0308 × 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000A ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] NUMBER SIGN (AL) ÷ [0.3]
× 000A ÷ 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000A ÷ 0308 × 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000A ÷ 0308 × 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000A ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EM DASH (B2) ÷ [0.3]
× 000A ÷ 0020 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000A ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 000A ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 000A ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 000A ÷ 0020 ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000A ÷ 0308 × 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 000A ÷ 0308 × 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 000A ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ACUTE ACCENT (BB) ÷ [0.3]
× 000A ÷ 0020 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000A ÷ 0308 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 000A ÷ 0308 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 000A ÷ 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <LINE TABULATION> (BK) ÷ [0.3]
× 000A ÷ 0020 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000A ÷ 0308 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 000A ÷ 0308 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 000A ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 000A ÷ 0020 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000A ÷ 0308 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 000A ÷ 0308 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 000A ÷ 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000A ÷ 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0308 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 000A ÷ 0308 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 000A ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <START OF HEADING> (CM) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000A ÷ 0308 × 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 000A ÷ 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000A ÷ 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000A ÷ 0308 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 000A ÷ 0308 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 000A ÷ 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EXCLAMATION MARK (EX) ÷ [0.3]
× 000A ÷ 0020 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000A ÷ 0308 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 000A ÷ 0308 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 000A ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] NO-BREAK SPACE (GL) ÷ [0.3]
× 000A ÷ 0020 ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000A ÷ 0308 × 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 000A ÷ 0308 × 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 000A ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 000A ÷ 0020 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000A ÷ 0308 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 000A ÷ 0308 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 000A ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 000A ÷ 0020 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000A ÷ 0308 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 000A ÷ 0308 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 000A ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 000A ÷ 0020 ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000A ÷ 0308 × 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 000A ÷ 0308 × 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 000A ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HYPHEN-MINUS (HY) ÷ [0.3]
× 000A ÷ 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 0308 × 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 000A ÷ 0308 × 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000A ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WATCH (ID) ÷ [0.3]
× 000A ÷ 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 000A ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 000A ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMMA (IS) ÷ [0.3]
× 000A ÷ 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000A ÷ 0308 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 000A ÷ 0308 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 000A ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 000A ÷ 0020 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 000A ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 000A ÷ 0020 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000A ÷ 0308 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 000A ÷ 0308 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 000A ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 000A ÷ 0020 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 000A ÷ 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <LINE FEED (LF)> (LF) ÷ [0.3]
× 000A ÷ 0020 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000A ÷ 0308 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 000A ÷ 0308 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 000A ÷ 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 000A ÷ 0020 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000A ÷ 0308 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 000A ÷ 0308 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 000A ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 000A ÷ 0020 ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000A ÷ 0308 × 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 000A ÷ 0308 × 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 000A ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0308 × 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 000A ÷ 0308 × 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT PARENTHESIS (OP) ÷ [0.3]
× 000A ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 000A ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000A ÷ 0308 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 000A ÷ 0308 × 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] DOLLAR SIGN (PR) ÷ [0.3]
× 000A ÷ 0020 ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000A ÷ 0308 ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 000A ÷ 0308 × 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 000A ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] QUOTATION MARK (QU) ÷ [0.3]
× 000A ÷ 0020 ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000A ÷ 0308 × 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 000A ÷ 0308 × 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 000A ÷ 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [0.3]
× 000A ÷ 0020 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 000A ÷ 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SOLIDUS (SY) ÷ [0.3]
× 000A ÷ 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000A ÷ 0308 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 000A ÷ 0308 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 000A ÷ 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WORD JOINER (WJ) ÷ [0.3]
× 000A ÷ 0020 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000A ÷ 0308 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 000A ÷ 0308 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 000A ÷ 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 000A ÷ 0020 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000A ÷ 0308 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 000A ÷ 0308 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 000A ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 000A ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 000A ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000A ÷ 0020 ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000A ÷ 0308 ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 000A ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000A ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000A ÷ 0308 × 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 000A ÷ 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000A ÷ 0020 ÷ 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000A ÷ 0308 × 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 000A ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SECTION SIGN (AI_AL) ÷ [0.3]
× 000A ÷ 0020 ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000A ÷ 0308 × 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 000A ÷ 0308 × 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 000A ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <reserved-50005> (XX_AL) ÷ [0.3]
× 000A ÷ 0020 ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000A ÷ 0308 × 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 000A ÷ 0308 × 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 000A ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 000A ÷ 0020 ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 000A ÷ 0308 × 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 000A ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000A ÷ 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000A ÷ 0308 × 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000A ÷ 0308 × 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0085 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] NUMBER SIGN (AL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0085 ÷ 0308 × 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0085 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EM DASH (B2) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0085 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0085 ÷ 0308 × 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0085 ÷ 0308 × 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0085 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ACUTE ACCENT (BB) ÷ [0.3]
× 0085 ÷ 0020 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0085 ÷ 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <LINE TABULATION> (BK) ÷ [0.3]
× 0085 ÷ 0020 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0085 ÷ 0308 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0085 ÷ 0308 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0085 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0085 ÷ 0020 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0085 ÷ 0308 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0085 ÷ 0308 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0085 ÷ 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0085 ÷ 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0308 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0085 ÷ 0308 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0085 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <START OF HEADING> (CM) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0085 ÷ 0308 × 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0085 ÷ 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0085 ÷ 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0085 ÷ 0308 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0085 ÷ 0308 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0085 ÷ 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EXCLAMATION MARK (EX) ÷ [0.3]
× 0085 ÷ 0020 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0085 ÷ 0308 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0085 ÷ 0308 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0085 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] NO-BREAK SPACE (GL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0085 ÷ 0308 × 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0085 ÷ 0308 × 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0085 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0085 ÷ 0020 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0085 ÷ 0308 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0085 ÷ 0308 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0085 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0085 ÷ 0020 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0085 ÷ 0308 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0085 ÷ 0308 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0085 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0085 ÷ 0308 × 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0085 ÷ 0308 × 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0085 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HYPHEN-MINUS (HY) ÷ [0.3]
× 0085 ÷ 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 0308 × 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0085 ÷ 0308 × 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0085 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WATCH (ID) ÷ [0.3]
× 0085 ÷ 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0085 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMMA (IS) ÷ [0.3]
× 0085 ÷ 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0085 ÷ 0308 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0085 ÷ 0308 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0085 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0085 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0085 ÷ 0020 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0085 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0085 ÷ 0020 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0085 ÷ 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0085 ÷ 0020 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0085 ÷ 0308 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0085 ÷ 0308 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0085 ÷ 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0085 ÷ 0020 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0085 ÷ 0308 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0085 ÷ 0308 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0085 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0085 ÷ 0020 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0085 ÷ 0308 × 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0085 ÷ 0308 × 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0085 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0308 × 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0085 ÷ 0308 × 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0085 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0085 ÷ 0308 × 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] DOLLAR SIGN (PR) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0085 ÷ 0308 × 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0085 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] QUOTATION MARK (QU) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0085 ÷ 0308 × 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0085 ÷ 0308 × 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0085 ÷ 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [0.3]
× 0085 ÷ 0020 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0085 ÷ 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SOLIDUS (SY) ÷ [0.3]
× 0085 ÷ 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0085 ÷ 0308 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0085 ÷ 0308 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0085 ÷ 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WORD JOINER (WJ) ÷ [0.3]
× 0085 ÷ 0020 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0085 ÷ 0308 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0085 ÷ 0308 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0085 ÷ 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0085 ÷ 0020 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0085 ÷ 0308 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0085 ÷ 0308 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0085 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0085 ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0085 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0085 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0085 ÷ 0308 × 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0085 ÷ 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0085 ÷ 0308 × 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0085 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SECTION SIGN (AI_AL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0085 ÷ 0308 × 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0085 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <reserved-50005> (XX_AL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0085 ÷ 0308 × 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0085 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0085 ÷ 0308 × 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0085 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0085 ÷ 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 0308 × 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0085 ÷ 0308 × 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 17D6 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 17D6 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 17D6 × 0308 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 17D6 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 17D6 × 0020 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 17D6 × 0308 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 17D6 × 0308 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 17D6 × 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 17D6 × 0020 ÷ 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 17D6 × 0308 × 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 17D6 × 0308 × 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 17D6 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 17D6 × 0020 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 17D6 × 0308 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 17D6 × 0308 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 17D6 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 17D6 × 0020 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 17D6 × 0308 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 17D6 × 0308 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 17D6 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 17D6 × 0020 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 17D6 × 0308 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 17D6 × 0308 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 17D6 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 17D6 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0308 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 17D6 × 0308 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 17D6 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 17D6 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 17D6 × 0308 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 17D6 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 17D6 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 17D6 × 0308 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 17D6 × 0308 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 17D6 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 17D6 × 0020 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 17D6 × 0308 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 17D6 × 0308 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 17D6 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 17D6 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 17D6 × 0308 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 17D6 × 0308 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 17D6 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 17D6 × 0020 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 17D6 × 0308 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 17D6 × 0308 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 17D6 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 17D6 × 0020 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 17D6 × 0308 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 17D6 × 0308 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 17D6 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 17D6 × 0020 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 17D6 × 0308 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 17D6 × 0308 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 17D6 × 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 17D6 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 × 0308 × 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 17D6 × 0308 × 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 17D6 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 17D6 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0308 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 17D6 × 0308 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 17D6 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0308 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 0308 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] COMMA (IS) ÷ [0.3]
× 17D6 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 17D6 × 0308 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 17D6 × 0308 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 17D6 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 17D6 × 0020 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 17D6 × 0308 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 17D6 × 0308 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 17D6 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 17D6 × 0020 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 17D6 × 0308 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 17D6 × 0308 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 17D6 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 17D6 × 0020 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 17D6 × 0308 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 17D6 × 0308 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 17D6 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 17D6 × 0020 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 17D6 × 0308 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 17D6 × 0308 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 17D6 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 17D6 × 0020 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 17D6 × 0308 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 17D6 × 0308 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 17D6 × 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 17D6 × 0020 ÷ 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 17D6 × 0308 × 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 17D6 × 0308 × 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 17D6 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 17D6 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 × 0308 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 17D6 × 0308 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 17D6 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 17D6 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 17D6 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 17D6 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 17D6 × 0308 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 17D6 × 0308 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 17D6 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 17D6 × 0020 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 17D6 × 0308 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 17D6 × 0308 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 17D6 × 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 17D6 × 0020 ÷ 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 17D6 × 0308 × 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 17D6 × 0308 × 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 17D6 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [0.3]
× 17D6 × 0020 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 17D6 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 17D6 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 17D6 × 0308 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 17D6 × 0308 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 17D6 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 17D6 × 0020 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 17D6 × 0308 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 17D6 × 0308 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 17D6 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 17D6 × 0020 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 17D6 × 0308 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 17D6 × 0308 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 17D6 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 17D6 × 0020 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 17D6 × 0308 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 17D6 × 0308 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 17D6 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 17D6 × 0020 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 17D6 × 0308 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 17D6 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 0308 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 17D6 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 17D6 × 0308 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 17D6 × 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 17D6 × 0020 ÷ 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 17D6 × 0308 × 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 17D6 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 17D6 × 0020 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 17D6 × 0308 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 17D6 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 17D6 × 0020 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 17D6 × 0308 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 17D6 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 17D6 × 0020 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 17D6 × 0308 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 17D6 × 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 17D6 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 17D6 × 0308 × 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 17D6 × 0308 × 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
× 0030 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0030 × 0308 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0030 × 0308 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0030 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0030 × 0020 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0030 × 0308 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0030 × 0308 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0030 × 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0030 × 0020 ÷ 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0030 × 0308 × 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0030 × 0308 × 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0030 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0030 × 0020 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0030 × 0308 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0030 × 0308 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0030 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0030 × 0020 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0030 × 0308 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0030 × 0308 × 0020 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0030 × 0308 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0030 × 0308 × 0020 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0030 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0030 × 0020 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0030 × 0308 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0030 × 0308 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0030 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0030 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0308 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0308 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0030 × 0308 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0030 × 0308 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0030 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0030 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0030 × 0308 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0030 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0030 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0030 × 0308 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0030 × 0308 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0030 × 0308 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0030 × 0308 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0030 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0030 × 0020 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0030 × 0308 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0030 × 0308 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0030 × 0308 × 0020 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0030 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0030 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0030 × 0308 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0030 × 0308 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0030 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0030 × 0020 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0030 × 0308 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0030 × 0308 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0030 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0030 × 0020 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0030 × 0308 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0030 × 0308 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0030 × 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0030 × 0020 ÷ 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0030 × 0308 × 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [23.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0030 × 0308 × 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0030 × 002D ÷ # × [0.3] DIGIT ZERO (NU) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0030 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 × 0308 × 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0030 × 0308 × 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0030 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0030 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0308 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0030 × 0308 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] COMMA (IS) ÷ [0.3]
× 0030 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0030 × 0308 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.03] COMMA (IS) ÷ [0.3]
-× 0030 × 0308 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0030 × 0308 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] COMMA (IS) ÷ [0.3]
+× 0030 × 0308 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0030 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0030 × 0020 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0030 × 0308 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0030 × 0308 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0030 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0030 × 0020 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0030 × 0308 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0030 × 0308 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0030 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0030 × 0020 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0030 × 0308 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0030 × 0308 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0030 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0030 × 0020 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0030 × 0308 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0030 × 0308 × 0020 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0030 × 0308 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0030 × 0308 × 0020 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0030 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0030 × 0020 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0030 × 0308 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0030 × 0308 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0030 × 0308 × 0020 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0030 × 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0030 × 0020 ÷ 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0030 × 0308 × 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0030 × 0308 × 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0030 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0308 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0030 × 0308 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0030 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0030 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0030 × 0308 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0030 × 0308 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] DOLLAR SIGN (PR) ÷ [0.3]
× 0030 × 0020 ÷ 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0030 × 0308 × 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.05] DOLLAR SIGN (PR) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0030 × 0308 × 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.05] DOLLAR SIGN (PR) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0030 × 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0030 × 0020 ÷ 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0030 × 0308 × 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0030 × 0308 × 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0030 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [0.3]
× 0030 × 0020 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0030 × 0308 × 0020 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0030 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] SOLIDUS (SY) ÷ [0.3]
× 0030 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0030 × 0308 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [25.03] SOLIDUS (SY) ÷ [0.3]
-× 0030 × 0308 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0030 × 0308 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] SOLIDUS (SY) ÷ [0.3]
+× 0030 × 0308 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0030 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0030 × 0020 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0030 × 0308 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0030 × 0308 × 0020 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0030 × 0308 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0030 × 0308 × 0020 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0030 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0030 × 0020 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0030 × 0308 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0030 × 0308 × 0020 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0030 × 0308 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0030 × 0308 × 0020 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0030 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0030 × 0020 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0030 × 0308 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0030 × 0308 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0030 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0030 × 0020 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0030 × 0308 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0030 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 0308 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0030 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0030 × 0308 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0030 × 200D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0030 × 0020 ÷ 200D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0030 × 0308 × 200D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 200D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0030 × 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] SECTION SIGN (AI_AL) ÷ [0.3]
× 0030 × 0020 ÷ 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0030 × 0308 × 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [23.03] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0030 × 0308 × 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0030 × 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] <reserved-50005> (XX_AL) ÷ [0.3]
× 0030 × 0020 ÷ 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0030 × 0308 × 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [23.03] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0030 × 0308 × 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0030 × 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0030 × 0020 ÷ 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0030 × 0308 × 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [23.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0030 × 0308 × 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0030 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0030 × 0308 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0030 × 0308 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] EM DASH (B2) ÷ [0.3]
× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
× 0028 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0028 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0028 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0028 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0028 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0028 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0028 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0028 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0028 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0028 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0028 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0028 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0028 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0028 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0028 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0028 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0028 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0028 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0028 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] WATCH (ID) ÷ [0.3]
× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0028 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] COMMA (IS) ÷ [0.3]
× 0028 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0028 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0028 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0028 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0028 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0028 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0028 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0028 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0028 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0028 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0028 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0028 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0028 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0028 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
× 0028 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
× 0028 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0028 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0028 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
× 0028 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
× 0028 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0028 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0028 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
× 0028 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
× 0028 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) ÷ [0.3]
× 0028 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0028 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0028 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0028 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0028 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0028 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0028 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0308 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0028 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0028 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0308 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0028 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0028 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0028 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0028 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0028 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0028 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0028 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0028 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [24.03] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0025 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0025 × 0308 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [24.03] NUMBER SIGN (AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0025 × 0308 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0025 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0025 × 0020 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0025 × 0308 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0025 × 0308 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0025 × 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0025 × 0020 ÷ 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0025 × 0308 × 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0025 × 0308 × 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0025 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0025 × 0020 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0025 × 0308 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0025 × 0308 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0025 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0025 × 0020 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0025 × 0308 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0025 × 0308 × 0020 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0025 × 0308 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0025 × 0308 × 0020 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0025 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0025 × 0020 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0025 × 0308 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0025 × 0308 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0025 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0025 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0308 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0308 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0025 × 0308 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0025 × 0308 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0025 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0025 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0025 × 0308 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0025 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0025 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0025 × 0308 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0025 × 0308 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0025 × 0308 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0025 × 0308 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0025 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0025 × 0020 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0025 × 0308 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0025 × 0308 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0025 × 0308 × 0020 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0025 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0025 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0025 × 0308 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0025 × 0308 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0025 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0025 × 0020 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0025 × 0308 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0025 × 0308 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0025 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0025 × 0020 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 0308 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [24.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0025 × 0308 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0025 × 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0025 × 0020 ÷ 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0025 × 0308 × 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [24.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0025 × 0308 × 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0025 × 002D ÷ # × [0.3] PERCENT SIGN (PO) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0025 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 × 0308 × 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0025 × 0308 × 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0025 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0025 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0308 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0025 × 0308 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0025 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0308 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 0308 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] COMMA (IS) ÷ [0.3]
× 0025 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0025 × 0308 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0025 × 0308 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0025 × 0308 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0025 × 0308 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0025 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0025 × 0020 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0025 × 0308 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0025 × 0308 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0025 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0025 × 0020 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0025 × 0308 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0025 × 0308 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0025 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0025 × 0020 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0025 × 0308 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0025 × 0308 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0025 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0025 × 0020 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0025 × 0308 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0025 × 0308 × 0020 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0025 × 0308 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0025 × 0308 × 0020 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0025 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0025 × 0020 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0025 × 0308 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0025 × 0308 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0025 × 0308 × 0020 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0025 × 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0025 × 0020 ÷ 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0025 × 0308 × 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0025 × 0308 × 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0025 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
× 0025 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 × 0308 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0025 × 0308 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0025 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0025 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0025 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0025 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0025 × 0308 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0025 × 0308 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0025 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0025 × 0020 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0025 × 0308 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0025 × 0308 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0025 × 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0025 × 0020 ÷ 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0025 × 0308 × 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0025 × 0308 × 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0025 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [0.3]
× 0025 × 0020 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0025 × 0308 × 0020 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0025 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0025 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0025 × 0308 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0025 × 0308 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0025 × 0308 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0025 × 0308 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0025 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0025 × 0020 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0025 × 0308 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0025 × 0308 × 0020 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0025 × 0308 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0025 × 0308 × 0020 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0025 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0025 × 0020 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0025 × 0308 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0025 × 0308 × 0020 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0025 × 0308 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0025 × 0308 × 0020 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0025 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0025 × 0020 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 × 0308 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 × 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [24.03] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0025 × 0308 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0025 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0025 × 0020 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0025 × 0308 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0025 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 0308 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0025 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0025 × 0308 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0025 × 200D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0025 × 0020 ÷ 200D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0025 × 0308 × 200D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 200D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0025 × 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
× 0025 × 0020 ÷ 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 0308 × 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [24.03] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [24.03] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0025 × 0308 × 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0025 × 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
× 0025 × 0020 ÷ 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0308 × 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [24.03] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [24.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0025 × 0308 × 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0025 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0025 × 0020 ÷ 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 0308 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [24.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0025 × 0308 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0025 × 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0025 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0308 × 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0025 × 0308 × 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0024 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0024 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0024 × 0308 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0024 × 0308 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0024 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0024 × 0020 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0024 × 0308 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0024 × 0308 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0024 × 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0024 × 0020 ÷ 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0024 × 0308 × 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0024 × 0308 × 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0024 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0024 × 0020 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0024 × 0308 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0024 × 0308 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0024 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0024 × 0020 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0024 × 0308 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0024 × 0308 × 0020 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0024 × 0308 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0024 × 0308 × 0020 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0024 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0024 × 0020 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0024 × 0308 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0024 × 0308 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0024 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0024 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0308 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0308 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0024 × 0308 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0024 × 0308 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0024 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0024 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0024 × 0308 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0024 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0024 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0024 × 0308 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0024 × 0308 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0024 × 0308 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0024 × 0308 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0024 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0024 × 0020 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0024 × 0308 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0024 × 0308 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0024 × 0308 × 0020 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0024 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0024 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0024 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0024 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0024 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0024 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0024 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0024 × 0308 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0024 × 0308 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0024 × 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0024 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 0308 × 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [24.01] WATCH (ID) ÷ [0.3]
+× 0024 × 0308 × 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0024 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WATCH (ID) ÷ [0.3]
× 0024 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0024 × 0308 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [24.01] WATCH (ID) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0024 × 0308 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WATCH (ID) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0024 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0308 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 0308 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] COMMA (IS) ÷ [0.3]
× 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0024 × 0308 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0024 × 0308 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0024 × 0308 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0024 × 0308 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0024 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0024 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0024 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0024 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0024 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0024 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0024 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0024 × 0308 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0024 × 0308 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0024 × 0308 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0024 × 0308 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0024 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0024 × 0020 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0024 × 0308 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0024 × 0308 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0024 × 0308 × 0020 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0024 × 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0024 × 0020 ÷ 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0024 × 0308 × 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0024 × 0308 × 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0024 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
× 0024 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 × 0308 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0024 × 0308 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0024 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0024 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0024 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 0024 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 0308 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0024 × 0308 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0024 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0024 × 0020 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0024 × 0308 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0024 × 0308 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0024 × 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0024 × 0020 ÷ 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0024 × 0308 × 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0024 × 0308 × 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0024 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [0.3]
× 0024 × 0020 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0024 × 0308 × 0020 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0024 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0024 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0024 × 0308 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0024 × 0308 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0024 × 0308 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0024 × 0308 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0024 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0024 × 0020 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0024 × 0308 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0024 × 0308 × 0020 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0024 × 0308 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0024 × 0308 × 0020 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0024 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0024 × 0020 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0024 × 0308 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0024 × 0308 × 0020 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0024 × 0308 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0024 × 0308 × 0020 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0024 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0024 × 0020 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0024 × 0308 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0024 × 0308 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0024 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0024 × 0020 ÷ 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0024 × 0308 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0024 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 0308 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0024 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0024 × 0308 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0024 × 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0024 × 0020 ÷ 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0024 × 0308 × 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0024 × 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
× 0024 × 0020 ÷ 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0024 × 0308 × 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0024 × 0308 × 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0024 × 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
× 0024 × 0020 ÷ 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0024 × 0308 × 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0024 × 0308 × 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0024 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0024 × 0020 ÷ 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0024 × 0308 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0024 × 0308 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0024 × 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0024 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0024 × 0308 × 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0024 × 0308 × 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0022 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
× 0022 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0022 × 0308 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0022 × 0308 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0022 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] EM DASH (B2) ÷ [0.3]
× 0022 × 0020 ÷ 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0022 × 0308 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] EM DASH (B2) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0022 × 0308 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EM DASH (B2) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0022 × 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0022 × 0020 ÷ 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0022 × 0308 × 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0022 × 0308 × 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0022 × 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
× 0022 × 0020 ÷ 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0022 × 0308 × 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0022 × 0308 × 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0022 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0022 × 0020 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0022 × 0308 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0022 × 0308 × 0020 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0022 × 0308 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0022 × 0308 × 0020 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0022 × FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0022 × 0020 ÷ FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0022 × 0308 × FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0022 × 0308 × FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0022 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0022 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0308 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0308 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0022 × 0308 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0022 × 0308 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0022 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0022 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0022 × 0308 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0022 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0022 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0022 × 0308 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0022 × 0308 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0022 × 0308 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0022 × 0308 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0022 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0022 × 0020 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0022 × 0308 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0022 × 0308 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0022 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0022 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0022 × 0308 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0022 × 0308 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0022 × AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0022 × 0020 ÷ AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0022 × 0308 × AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0022 × 0308 × AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0022 × AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0022 × 0020 ÷ AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0022 × 0308 × AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0022 × 0308 × AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0022 × 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0022 × 0020 ÷ 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0022 × 0308 × 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0022 × 0308 × 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0022 × 002D ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0022 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 0308 × 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0022 × 0308 × 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0022 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] WATCH (ID) ÷ [0.3]
× 0022 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0022 × 0308 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] WATCH (ID) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0022 × 0308 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] WATCH (ID) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0022 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
× 0022 × 0020 ÷ 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0022 × 0308 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0022 × 0308 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0022 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] COMMA (IS) ÷ [0.3]
× 0022 × 0020 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0022 × 0308 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0022 × 0308 × 0020 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0022 × 0308 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0022 × 0308 × 0020 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0022 × 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0022 × 0020 ÷ 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0022 × 0308 × 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0022 × 0308 × 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0022 × 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0022 × 0020 ÷ 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0022 × 0308 × 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0022 × 0308 × 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0022 × 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0022 × 0020 ÷ 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0022 × 0308 × 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0022 × 0308 × 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0022 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0022 × 0020 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0022 × 0308 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0022 × 0308 × 0020 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0022 × 0308 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0022 × 0308 × 0020 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0022 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0022 × 0020 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0022 × 0308 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0022 × 0308 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0022 × 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0022 × 0020 ÷ 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0022 × 0308 × 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0022 × 0308 × 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0022 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0308 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0022 × 0308 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0022 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0022 × 0308 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0022 × 0308 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
× 0022 × 0020 ÷ 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0022 × 0308 × 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0022 × 0308 × 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0022 × 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0022 × 0020 ÷ 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0022 × 0308 × 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0022 × 0308 × 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0022 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [0.3]
× 0022 × 0020 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0022 × 0308 × 0020 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0022 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0022 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0022 × 0308 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0022 × 0308 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0022 × 0308 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0022 × 0308 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0022 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0022 × 0020 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0022 × 0308 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0022 × 0308 × 0020 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0022 × 0308 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0022 × 0308 × 0020 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0022 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0022 × 0020 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0022 × 0308 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0022 × 0308 × 0020 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0022 × 0308 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0022 × 0308 × 0020 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0022 × 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0022 × 0020 ÷ 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0022 × 0308 × 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0022 × 0308 × 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0022 × 261D ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0022 × 0020 ÷ 261D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0022 × 0308 × 261D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 261D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0022 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 0308 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0022 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0022 × 0308 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0022 × 200D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0022 × 0020 ÷ 200D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0022 × 0308 × 200D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 200D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0022 × 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
× 0022 × 0020 ÷ 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0022 × 0308 × 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0022 × 0308 × 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0022 × 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
× 0022 × 0020 ÷ 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0022 × 0308 × 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0022 × 0308 × 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0022 × 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0022 × 0020 ÷ 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0022 × 0308 × 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0022 × 0308 × 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0022 × 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0022 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0022 × 0308 × 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0022 × 0308 × 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0020 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0020 ÷ 0308 × 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0020 × 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0020 × 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0020 ÷ 0308 × 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0020 ÷ 0308 × 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0020 × 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0020 × 000B ÷ # × [0.3] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0020 × 0020 × 000B ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0020 ÷ 0308 × 000B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 000B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0020 ÷ 0308 × 000B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 000B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0020 × 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0020 ÷ 0308 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0020 ÷ 0308 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0020 × 007D ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0020 × 0020 × 007D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 ÷ 0308 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0020 ÷ 0308 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0020 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0020 ÷ 0308 × 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0020 × 000D ÷ # × [0.3] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0020 × 0020 × 000D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0020 ÷ 0308 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0020 ÷ 0308 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0020 × 0021 ÷ # × [0.3] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0020 × 0020 × 0021 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0020 ÷ 0308 × 0021 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0021 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0020 ÷ 0308 × 0021 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 0021 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0020 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0020 ÷ 0308 × 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0020 ÷ 0308 × 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0020 × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0020 ÷ 0308 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0020 ÷ 0308 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0020 × 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0020 ÷ 0308 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0020 ÷ 0308 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0020 × 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0020 ÷ 0308 × 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0020 ÷ 0308 × 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0020 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 ÷ 0308 × 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0020 ÷ 0308 × 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0020 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 002C ÷ # × [0.3] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0020 × 0020 × 002C ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0020 ÷ 0308 × 002C ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 002C ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0020 ÷ 0308 × 002C ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 002C ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0020 × 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0020 × 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0020 × 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0020 × 000A ÷ # × [0.3] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0020 × 0020 × 000A ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0020 ÷ 0308 × 000A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 000A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0020 ÷ 0308 × 000A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 000A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0020 × 0085 ÷ # × [0.3] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0020 × 0020 × 0085 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0020 ÷ 0308 × 0085 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0020 ÷ 0308 × 0085 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0020 × 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0020 ÷ 0308 × 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0020 ÷ 0308 × 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0020 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 0308 × 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0020 ÷ 0308 × 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0020 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0020 ÷ 0308 × 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0020 × 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0020 ÷ 0308 × 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0020 × 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0020 ÷ 0308 × 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0020 ÷ 0308 × 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0020 × 0020 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0020 × 0020 × 0020 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0020 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 0020 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0020 × 002F ÷ # × [0.3] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0020 × 0020 × 002F ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0020 ÷ 0308 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0020 ÷ 0308 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0020 × 2060 ÷ # × [0.3] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0020 × 0020 × 2060 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0020 ÷ 0308 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0020 ÷ 0308 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0020 × 200B ÷ # × [0.3] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0020 × 0020 × 200B ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0020 ÷ 0308 × 200B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 200B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0020 ÷ 0308 × 200B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 200B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0020 × 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0020 ÷ 261D ÷ # × [0.3] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0020 × 0020 ÷ 261D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 261D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0020 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0020 ÷ 0308 × 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0020 ÷ 200D ÷ # × [0.3] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0020 × 0020 ÷ 200D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0020 ÷ 0308 × 200D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0020 × 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0020 ÷ 0308 × 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0020 × 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0020 ÷ 0308 × 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0020 × 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0020 ÷ 0308 × 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0020 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0020 ÷ 0308 × 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0020 ÷ 0308 × 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002F ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 002F × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002F × 0308 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002F × 0308 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 002F ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 002F × 0020 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002F × 0308 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 002F × 0308 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 002F × 0009 ÷ # × [0.3] SOLIDUS (SY) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 002F × 0020 ÷ 0009 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002F × 0308 × 0009 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0009 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 002F × 0308 × 0009 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0009 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 002F ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 002F × 0020 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002F × 0308 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 002F × 0308 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 002F × 000B ÷ # × [0.3] SOLIDUS (SY) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 002F × 0020 × 000B ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002F × 0308 × 000B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002F × 0308 × 0020 × 000B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 002F × 0308 × 000B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 002F × 0308 × 0020 × 000B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 002F ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 002F × 0020 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002F × 0308 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 002F × 0308 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 002F × 007D ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002F × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0308 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0308 × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 002F × 0308 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 002F × 0308 × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 002F × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002F × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002F × 0308 × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 002F × 000D ÷ # × [0.3] SOLIDUS (SY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002F × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002F × 0308 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002F × 0308 × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 002F × 0308 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 002F × 0308 × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 002F × 0021 ÷ # × [0.3] SOLIDUS (SY) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 002F × 0020 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002F × 0308 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002F × 0308 × 0020 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 002F × 0308 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 002F × 0308 × 0020 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 002F × 00A0 ÷ # × [0.3] SOLIDUS (SY) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 002F × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002F × 0308 × 00A0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 002F × 0308 × 00A0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 002F ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 002F × 0020 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002F × 0308 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 002F × 0308 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 002F ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 002F × 0020 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002F × 0308 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 002F × 0308 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 002F × 05D0 ÷ # × [0.3] SOLIDUS (SY) × [21.2] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 002F × 0020 ÷ 05D0 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002F × 0308 × 05D0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [21.2] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 002F × 0308 × 05D0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.2] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 002F × 002D ÷ # × [0.3] SOLIDUS (SY) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 002F × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F × 0308 × 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 002F × 0308 × 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 002F ÷ 231A ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 002F × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002F × 0308 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 002F × 0308 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 002F ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0308 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 0308 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 002C ÷ # × [0.3] SOLIDUS (SY) × [13.02] COMMA (IS) ÷ [0.3]
× 002F × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002F × 0308 × 002C ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 002F × 0308 × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 002F × 0308 × 002C ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 002F × 0308 × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 002F ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 002F × 0020 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002F × 0308 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 002F × 0308 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 002F ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 002F × 0020 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002F × 0308 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 002F × 0308 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 002F ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 002F × 0020 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002F × 0308 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 002F × 0308 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 002F × 000A ÷ # × [0.3] SOLIDUS (SY) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 002F × 0020 × 000A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002F × 0308 × 000A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002F × 0308 × 0020 × 000A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 002F × 0308 × 000A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 002F × 0308 × 0020 × 000A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 002F × 0085 ÷ # × [0.3] SOLIDUS (SY) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 002F × 0020 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002F × 0308 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002F × 0308 × 0020 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 002F × 0308 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 002F × 0308 × 0020 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 002F × 17D6 ÷ # × [0.3] SOLIDUS (SY) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 002F × 0020 ÷ 17D6 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002F × 0308 × 17D6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 002F × 0308 × 17D6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 002F ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 002F × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F × 0308 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 002F × 0308 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 002F ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 002F × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 002F ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 002F × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002F × 0308 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 002F × 0308 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 002F ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 002F × 0020 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002F × 0308 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 002F × 0308 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 002F × 0022 ÷ # × [0.3] SOLIDUS (SY) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 002F × 0020 ÷ 0022 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002F × 0308 × 0022 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0022 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 002F × 0308 × 0022 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0022 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 002F × 0020 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [0.3]
× 002F × 0020 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 002F × 0308 × 0020 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 002F × 0308 × 0020 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 002F × 002F ÷ # × [0.3] SOLIDUS (SY) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002F × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002F × 0308 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 002F × 0308 × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 002F × 0308 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 002F × 0308 × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002F × 2060 ÷ # × [0.3] SOLIDUS (SY) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002F × 0020 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002F × 0308 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002F × 0308 × 0020 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 002F × 0308 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 002F × 0308 × 0020 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002F × 200B ÷ # × [0.3] SOLIDUS (SY) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 002F × 0020 × 200B ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002F × 0308 × 200B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002F × 0308 × 0020 × 200B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 002F × 0308 × 200B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 002F × 0308 × 0020 × 200B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 002F ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 002F × 0020 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002F × 0308 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002F × 0308 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 002F ÷ 261D ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002F × 0020 ÷ 261D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002F × 0308 ÷ 261D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 261D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 002F ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 0308 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002F × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002F × 0308 × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 002F × 200D ÷ # × [0.3] SOLIDUS (SY) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002F × 0020 ÷ 200D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002F × 0308 × 200D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 200D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 002F ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 002F × 0020 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002F × 0308 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 002F × 0308 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 002F ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 002F × 0020 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002F × 0308 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 002F × 0308 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 002F ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 002F × 0020 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002F × 0308 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 002F × 0308 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 002F × 3041 ÷ # × [0.3] SOLIDUS (SY) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002F × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002F × 0308 × 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002F × 0308 × 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2060 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
× 2060 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2060 × 0308 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2060 × 0308 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 2060 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EM DASH (B2) ÷ [0.3]
× 2060 × 0020 ÷ 2014 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 2060 × 0308 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] EM DASH (B2) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 2060 × 0308 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EM DASH (B2) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 2060 × 0009 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 2060 × 0020 ÷ 0009 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2060 × 0308 × 0009 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2060 × 0308 × 0009 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 2060 × 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] ACUTE ACCENT (BB) ÷ [0.3]
× 2060 × 0020 ÷ 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2060 × 0308 × 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 2060 × 0308 × 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] ACUTE ACCENT (BB) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 2060 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 2060 × 0020 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2060 × 0308 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2060 × 0308 × 0020 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2060 × 0308 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 2060 × 0308 × 0020 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 2060 × FFFC ÷ # × [0.3] WORD JOINER (WJ) × [11.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 2060 × 0020 ÷ FFFC ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2060 × 0308 × FFFC ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2060 × 0308 × FFFC ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 2060 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2060 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0308 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0308 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2060 × 0308 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 2060 × 0308 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 2060 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2060 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2060 × 0308 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 2060 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2060 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2060 × 0308 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2060 × 0308 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2060 × 0308 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 2060 × 0308 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 2060 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EXCLAMATION MARK (EX) ÷ [0.3]
× 2060 × 0020 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2060 × 0308 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2060 × 0308 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EXCLAMATION MARK (EX) ÷ [0.3]
+× 2060 × 0308 × 0020 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 2060 × 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] NO-BREAK SPACE (GL) ÷ [0.3]
× 2060 × 0020 ÷ 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2060 × 0308 × 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2060 × 0308 × 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] NO-BREAK SPACE (GL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 2060 × AC00 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 2060 × 0020 ÷ AC00 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2060 × 0308 × AC00 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2060 × 0308 × AC00 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 2060 × AC01 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 2060 × 0020 ÷ AC01 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2060 × 0308 × AC01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2060 × 0308 × AC01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 2060 × 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 2060 × 0020 ÷ 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2060 × 0308 × 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2060 × 0308 × 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 2060 × 002D ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 2060 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 0308 × 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2060 × 0308 × 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2060 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [11.02] WATCH (ID) ÷ [0.3]
× 2060 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2060 × 0308 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] WATCH (ID) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 2060 × 0308 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] WATCH (ID) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 2060 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
× 2060 × 0020 ÷ 2024 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2060 × 0308 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2060 × 0308 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2060 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [11.02] COMMA (IS) ÷ [0.3]
× 2060 × 0020 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2060 × 0308 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] COMMA (IS) ÷ [0.3]
-× 2060 × 0308 × 0020 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 2060 × 0308 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] COMMA (IS) ÷ [0.3]
+× 2060 × 0308 × 0020 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 2060 × 1100 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 2060 × 0020 ÷ 1100 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2060 × 0308 × 1100 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2060 × 0308 × 1100 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 2060 × 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 2060 × 0020 ÷ 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2060 × 0308 × 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2060 × 0308 × 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 2060 × 1160 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 2060 × 0020 ÷ 1160 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2060 × 0308 × 1160 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2060 × 0308 × 1160 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 2060 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 2060 × 0020 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2060 × 0308 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2060 × 0308 × 0020 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2060 × 0308 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 2060 × 0308 × 0020 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 2060 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 2060 × 0020 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2060 × 0308 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2060 × 0308 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 2060 × 0308 × 0020 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 2060 × 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 2060 × 0020 ÷ 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2060 × 0308 × 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2060 × 0308 × 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 2060 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
× 2060 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0308 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 2060 × 0308 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 2060 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
× 2060 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 2060 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
× 2060 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2060 × 0308 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 2060 × 0308 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 2060 × 0024 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] DOLLAR SIGN (PR) ÷ [0.3]
× 2060 × 0020 ÷ 0024 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2060 × 0308 × 0024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 2060 × 0308 × 0024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] DOLLAR SIGN (PR) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 2060 × 0022 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] QUOTATION MARK (QU) ÷ [0.3]
× 2060 × 0020 ÷ 0022 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2060 × 0308 × 0022 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] QUOTATION MARK (QU) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 2060 × 0308 × 0022 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] QUOTATION MARK (QU) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 2060 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [0.3]
× 2060 × 0020 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 2060 × 0308 × 0020 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 2060 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [11.02] SOLIDUS (SY) ÷ [0.3]
× 2060 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2060 × 0308 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] SOLIDUS (SY) ÷ [0.3]
-× 2060 × 0308 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2060 × 0308 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] SOLIDUS (SY) ÷ [0.3]
+× 2060 × 0308 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2060 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2060 × 0020 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 0308 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 0308 × 0020 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2060 × 0308 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2060 × 0308 × 0020 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2060 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 2060 × 0020 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2060 × 0308 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2060 × 0308 × 0020 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2060 × 0308 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 2060 × 0308 × 0020 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 2060 × 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 2060 × 0020 ÷ 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2060 × 0308 × 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2060 × 0308 × 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 2060 × 261D ÷ # × [0.3] WORD JOINER (WJ) × [11.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2060 × 0020 ÷ 261D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2060 × 0308 × 261D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 261D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 2060 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 0308 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2060 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2060 × 0308 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 2060 × 200D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2060 × 0020 ÷ 200D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2060 × 0308 × 200D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 200D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 2060 × 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] SECTION SIGN (AI_AL) ÷ [0.3]
× 2060 × 0020 ÷ 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2060 × 0308 × 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2060 × 0308 × 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 2060 × 50005 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] <reserved-50005> (XX_AL) ÷ [0.3]
× 2060 × 0020 ÷ 50005 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2060 × 0308 × 50005 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2060 × 0308 × 50005 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 2060 × 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 2060 × 0020 ÷ 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2060 × 0308 × 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2060 × 0308 × 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 2060 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2060 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2060 × 0308 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2060 × 0308 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 200B ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] NUMBER SIGN (AL) ÷ [0.3]
× 200B × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200B ÷ 0308 × 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200B ÷ 0308 × 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 200B ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EM DASH (B2) ÷ [0.3]
× 200B × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EM DASH (B2) ÷ [0.3]
-× 200B ÷ 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 200B ÷ 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 200B ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 200B × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200B ÷ 0308 × 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 200B ÷ 0308 × 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 200B ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ACUTE ACCENT (BB) ÷ [0.3]
× 200B × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200B ÷ 0308 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 200B ÷ 0308 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 200B × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 200B × 0020 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200B ÷ 0308 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 200B ÷ 0308 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 200B ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 200B × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200B ÷ 0308 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200B ÷ 0308 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 200B ÷ 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200B × 0020 ÷ 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B ÷ 0308 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 200B ÷ 0308 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 200B ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <START OF HEADING> (CM) ÷ [0.3]
-× 200B × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <START OF HEADING> (CM) ÷ [0.3]
-× 200B ÷ 0308 × 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 200B × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200B × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200B ÷ 0308 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 200B ÷ 0308 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 200B ÷ 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EXCLAMATION MARK (EX) ÷ [0.3]
× 200B × 0020 ÷ 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200B ÷ 0308 × 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 200B ÷ 0308 × 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 200B ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 200B × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200B ÷ 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200B ÷ 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 200B ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 200B × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200B ÷ 0308 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200B ÷ 0308 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 200B ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 200B × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200B ÷ 0308 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200B ÷ 0308 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 200B ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 200B × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200B ÷ 0308 × 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 200B ÷ 0308 × 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 200B ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 200B × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B ÷ 0308 × 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 200B ÷ 0308 × 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 200B ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WATCH (ID) ÷ [0.3]
× 200B × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 200B ÷ 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 200B ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMMA (IS) ÷ [0.3]
× 200B × 0020 ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] COMMA (IS) ÷ [0.3]
-× 200B ÷ 0308 × 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 200B ÷ 0308 × 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 200B ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 200B × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 200B ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 200B × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200B ÷ 0308 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200B ÷ 0308 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 200B ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 200B × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 200B × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 200B × 0020 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200B ÷ 0308 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 200B ÷ 0308 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 200B × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 200B × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200B ÷ 0308 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 200B ÷ 0308 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 200B ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 200B × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200B ÷ 0308 × 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 200B ÷ 0308 × 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 200B ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] DIGIT ZERO (NU) ÷ [0.3]
× 200B × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 0308 × 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 200B ÷ 0308 × 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 200B ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 200B × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 200B ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200B ÷ 0308 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 200B ÷ 0308 × 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] DOLLAR SIGN (PR) ÷ [0.3]
× 200B × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200B ÷ 0308 ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 200B ÷ 0308 × 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 200B ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] QUOTATION MARK (QU) ÷ [0.3]
× 200B × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] QUOTATION MARK (QU) ÷ [0.3]
-× 200B ÷ 0308 × 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 200B ÷ 0308 × 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 200B × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [0.3]
× 200B × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 200B ÷ 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] SOLIDUS (SY) ÷ [0.3]
× 200B × 0020 ÷ 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] SOLIDUS (SY) ÷ [0.3]
-× 200B ÷ 0308 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 200B ÷ 0308 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 200B ÷ 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WORD JOINER (WJ) ÷ [0.3]
× 200B × 0020 ÷ 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WORD JOINER (WJ) ÷ [0.3]
-× 200B ÷ 0308 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 200B ÷ 0308 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 200B × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 200B × 0020 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200B ÷ 0308 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 200B ÷ 0308 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 200B ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 200B × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200B ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200B × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200B ÷ 0308 ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200B ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200B × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200B ÷ 0308 × 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200B ÷ 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200B × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200B ÷ 0308 × 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 200B ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 200B × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200B ÷ 0308 × 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 200B ÷ 0308 × 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 200B ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 200B × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200B ÷ 0308 × 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 200B ÷ 0308 × 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 200B ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 200B × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 200B ÷ 0308 × 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 200B ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 200B × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200B ÷ 0308 × 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200B ÷ 0308 × 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F1E6 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F1E6 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1F1E6 × 0020 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1F1E6 × 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F1E6 × 0308 × 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1F1E6 × 0308 × 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 1F1E6 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 1F1E6 × 0020 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 1F1E6 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 1F1E6 × 0020 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F1E6 × 0308 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1F1E6 × 0308 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 1F1E6 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 1F1E6 × 0020 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F1E6 × 0308 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1F1E6 × 0308 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 1F1E6 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F1E6 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0308 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1F1E6 × 0308 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 1F1E6 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1F1E6 × 0308 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 1F1E6 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F1E6 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F1E6 × 0308 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1F1E6 × 0308 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 1F1E6 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 1F1E6 × 0020 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F1E6 × 0308 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1F1E6 × 0308 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 1F1E6 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F1E6 × 0308 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1F1E6 × 0308 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 1F1E6 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 1F1E6 × 0020 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F1E6 × 0308 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1F1E6 × 0308 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 1F1E6 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 1F1E6 × 0020 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F1E6 × 0308 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1F1E6 × 0308 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 1F1E6 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 1F1E6 × 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1F1E6 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 × 0308 × 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1F1E6 × 0308 × 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1F1E6 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 1F1E6 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 1F1E6 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] COMMA (IS) ÷ [0.3]
× 1F1E6 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F1E6 × 0308 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1F1E6 × 0308 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 1F1E6 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 1F1E6 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1F1E6 × 0020 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 1F1E6 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1F1E6 × 0020 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 1F1E6 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 1F1E6 × 0020 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F1E6 × 0308 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1F1E6 × 0308 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 1F1E6 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 1F1E6 × 0020 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F1E6 × 0308 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1F1E6 × 0308 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 1F1E6 × 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 1F1E6 × 0020 ÷ 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F1E6 × 0308 × 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1F1E6 × 0308 × 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 1F1E6 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 1F1E6 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 1F1E6 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 1F1E6 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 1F1E6 × 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1F1E6 × 0308 × 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1F1E6 × 0308 × 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 1F1E6 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [0.3]
× 1F1E6 × 0020 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 1F1E6 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1F1E6 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F1E6 × 0308 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1F1E6 × 0308 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1F1E6 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1F1E6 × 0020 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F1E6 × 0308 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1F1E6 × 0308 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1F1E6 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 1F1E6 × 0020 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F1E6 × 0308 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1F1E6 × 0308 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 1F1E6 × 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 1F1E6 × 0020 ÷ 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F1E6 × 0308 × 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [30.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F1E6 × 0308 × 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F1E6 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F1E6 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F1E6 × 0308 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F1E6 × 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F1E6 × 0308 × 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 1F1E6 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 1F1E6 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 1F1E6 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 1F1E6 × 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F1E6 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F1E6 × 0308 × 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F1E6 × 0308 × 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 261D ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 261D × 0020 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 261D × 0308 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 261D ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 261D × 0020 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 261D × 0308 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 261D × 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 261D × 0020 ÷ 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 261D × 0308 × 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 261D ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 261D × 0020 ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 261D × 0308 ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 261D × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 261D × 0020 × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 261D × 0308 × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 261D × 0308 × 0020 × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 261D ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 261D × 0020 ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 261D × 0308 ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 261D × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 261D × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 261D × 0308 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 261D × 0308 × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 261D × 0308 × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 261D × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 261D × 0020 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 261D × 0308 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 261D × 0308 × 0020 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 261D × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 261D × 0020 × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 261D × 0308 × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 261D × 0308 × 0020 × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 261D × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 261D × 0020 ÷ 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 261D × 0308 × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 261D ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 261D × 0020 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 261D × 0308 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 261D ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 261D × 0020 ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 261D × 0308 ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 261D ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 261D × 0020 ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 261D × 0308 ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 261D × 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 261D × 0020 ÷ 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 261D × 0308 × 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 261D ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 261D × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 261D × 0308 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] COMMA (IS) ÷ [0.3]
+× 261D × 0020 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 261D × 0308 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 261D × 0308 × 0020 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 261D ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 261D × 0020 ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 261D × 0308 ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 261D ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 261D × 0020 ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 261D × 0308 ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 261D ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 261D × 0020 ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 261D × 0308 ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 261D × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 261D × 0020 × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 261D × 0308 × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 261D × 0308 × 0020 × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 261D × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 261D × 0020 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 261D × 0308 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 261D × 0308 × 0020 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 261D × 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 261D × 0020 ÷ 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 261D × 0308 × 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 261D ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 261D × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 261D × 0308 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 261D ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 261D × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 261D × 0308 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 261D × 0020 ÷ 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 261D × 0308 × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 261D ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 261D × 0020 ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 261D × 0308 ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 261D × 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 261D × 0020 ÷ 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 261D × 0308 × 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 261D × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [0.3]
+× 261D × 0020 × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 261D × 0308 × 0020 × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 261D × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 261D × 0020 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 261D × 0308 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 261D × 0308 × 0020 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 261D × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 261D × 0020 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 261D × 0308 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 261D × 0308 × 0020 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 261D × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 261D × 0020 × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 261D × 0308 × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 261D × 0308 × 0020 × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 261D ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 261D × 0020 ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 261D × 0308 ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 261D ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 261D × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 261D × 0308 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 261D × 0020 ÷ 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 261D × 0308 × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 261D × 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 261D × 0020 ÷ 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 261D × 0308 × 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 261D ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 261D × 0020 ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 261D × 0308 ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 261D ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 261D × 0020 ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 261D × 0308 ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 261D ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 261D × 0020 ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 261D × 0308 ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 261D × 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 261D × 0020 ÷ 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 261D × 0308 × 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F3FB ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F3FB ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1F3FB × 0020 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1F3FB × 0308 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1F3FB × 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1F3FB × 0308 × 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1F3FB ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1F3FB × 0020 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1F3FB × 0308 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1F3FB × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1F3FB × 0020 × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1F3FB × 0308 × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1F3FB ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1F3FB × 0020 ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1F3FB × 0308 ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1F3FB × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1F3FB × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1F3FB × 0308 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 1F3FB × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1F3FB × 0020 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1F3FB × 0308 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1F3FB × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1F3FB × 0020 × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1F3FB × 0308 × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1F3FB × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1F3FB × 0308 × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1F3FB ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1F3FB × 0020 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1F3FB × 0308 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1F3FB ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1F3FB × 0020 ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1F3FB × 0308 ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1F3FB ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F3FB × 0308 ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1F3FB × 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1F3FB × 0020 ÷ 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1F3FB × 0308 × 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1F3FB ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 1F3FB × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1F3FB × 0308 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.03] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F3FB × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] COMMA (IS) ÷ [0.3]
+× 1F3FB × 0020 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1F3FB × 0308 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1F3FB ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1F3FB ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1F3FB × 0020 ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1F3FB × 0308 ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1F3FB ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1F3FB × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1F3FB × 0020 × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1F3FB × 0308 × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1F3FB × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1F3FB × 0020 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1F3FB × 0308 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1F3FB × 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1F3FB × 0020 ÷ 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1F3FB × 0308 × 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1F3FB ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1F3FB ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 1F3FB × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1F3FB × 0308 × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1F3FB ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1F3FB × 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1F3FB × 0308 × 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1F3FB × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1F3FB × 0020 × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1F3FB × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1F3FB × 0020 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1F3FB × 0308 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1F3FB × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1F3FB × 0020 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1F3FB × 0308 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1F3FB × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1F3FB × 0020 × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1F3FB × 0308 × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1F3FB ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1F3FB ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F3FB × 0020 ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F3FB × 0308 ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1F3FB ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F3FB × 0308 × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1F3FB × 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F3FB × 0020 ÷ 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F3FB × 0308 × 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1F3FB ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1F3FB × 0308 ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1F3FB ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1F3FB × 0308 ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1F3FB ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1F3FB × 0020 ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1F3FB × 0308 ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1F3FB × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F3FB × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F3FB × 0308 × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0001 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0001 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0001 × 0308 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0001 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0001 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0001 × 0308 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0001 × 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0001 × 0020 ÷ 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0001 × 0308 × 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0001 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0001 × 0020 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0001 × 0308 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0001 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0001 × 0020 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0001 × 0308 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0001 × 0308 × 0020 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0001 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0001 × 0020 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0001 × 0308 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0001 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0001 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0001 × 0308 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0001 × 0308 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0001 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0001 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0001 × 0308 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0001 × 0308 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0001 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0001 × 0020 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0001 × 0308 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0001 × 0308 × 0020 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0001 × 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0001 × 0020 ÷ 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0001 × 0308 × 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0001 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0001 × 0020 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0001 × 0308 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0001 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0001 × 0020 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0001 × 0308 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0001 × 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0001 × 0020 ÷ 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0001 × 0308 × 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0001 × 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0001 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0001 × 0308 × 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0001 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0001 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0001 × 0308 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0001 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
+× 0001 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0001 × 0308 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
+× 0001 × 0308 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0001 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0001 × 0020 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0001 × 0308 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0001 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0001 × 0020 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0001 × 0308 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0001 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0001 × 0020 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0001 × 0308 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0001 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0001 × 0020 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0001 × 0308 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0001 × 0308 × 0020 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0001 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0001 × 0020 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0001 × 0308 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0001 × 0308 × 0020 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0001 × 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0001 × 0020 ÷ 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0001 × 0308 × 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0001 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0001 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0001 × 0308 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0001 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 0001 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0001 × 0308 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0001 × 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 0001 × 0020 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0001 × 0308 × 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0001 × 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0001 × 0020 ÷ 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0001 × 0308 × 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0001 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0001 × 0020 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0001 × 0308 × 0020 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0001 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
+× 0001 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0001 × 0308 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
+× 0001 × 0308 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0001 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0001 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0001 × 0308 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0001 × 0308 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0001 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0001 × 0020 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0001 × 0308 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0001 × 0308 × 0020 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0001 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0001 × 0020 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0001 × 0308 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0001 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0001 × 0020 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0001 × 0308 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0001 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 0308 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0001 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0001 × 0308 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0001 × 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0001 × 0020 ÷ 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0001 × 0308 × 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0001 × 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0001 × 0020 ÷ 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0001 × 0308 × 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0001 × 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0001 × 0020 ÷ 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0001 × 0308 × 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0001 × 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0001 × 0020 ÷ 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0001 × 0308 × 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0001 × 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0001 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0001 × 0308 × 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200D × 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200D × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200D × 0308 × 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200D ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 200D × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 200D × 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 200D × 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 200D × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 200D × 0308 × 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 200D ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 200D × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 200D × 0308 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 200D × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 200D × 0020 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 200D × 0308 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 200D × 0308 × 0020 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 200D ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200D × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200D × 0308 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200D × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 200D × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 200D × 0308 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 200D × 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 200D × 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 200D × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 200D × 0020 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 200D × 0308 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 200D × 0308 × 0020 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 200D × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 200D × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 200D × 0308 × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 200D × 0308 × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 200D × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200D × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200D × 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200D ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200D × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200D × 0308 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200D ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200D × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200D × 0308 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200D × 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 200D × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 200D × 0308 × 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 200D × 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 200D × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 200D × 0308 × 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 200D × 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WATCH (ID) ÷ [0.3]
+× 200D × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 200D × 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 200D × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200D × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 200D × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [13.04] COMMA (IS) ÷ [0.3]
+× 200D × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 200D × 0308 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
+× 200D × 0308 × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 200D ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200D × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200D × 0308 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200D ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200D × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200D × 0308 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200D ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200D × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200D × 0308 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200D × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 200D × 0020 × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 200D × 0308 × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 200D × 0308 × 0020 × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 200D × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 200D × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 200D × 0308 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 200D × 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 200D × 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 200D × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 200D × 0308 × 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 200D × 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 200D × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 200D × 0308 × 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 200D × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200D × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200D × 0308 × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 200D × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 200D × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 200D × 0308 × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 200D × 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 200D × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 200D × 0308 × 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 200D × 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 200D × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 200D × 0308 × 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 200D × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 200D × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 200D × 0308 × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 200D × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
+× 200D × 0020 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 200D × 0308 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
+× 200D × 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 200D × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 200D × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 200D × 0308 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 200D × 0308 × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 200D × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 200D × 0020 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 200D × 0308 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 200D × 0308 × 0020 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 200D ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200D × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200D × 0308 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200D × 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200D × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200D × 0308 ÷ 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 200D × 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200D × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200D × 0308 × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 200D × 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200D × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200D × 0308 × 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 200D × 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 200D × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 200D × 0308 × 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 200D × 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 200D × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 200D × 0308 × 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 200D × 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 200D × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 200D × 0308 × 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 200D × 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200D × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200D × 0308 × 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A7 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A7 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A7 × 0308 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00A7 × 0308 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A7 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 00A7 × 0020 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00A7 × 0308 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 00A7 × 0308 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 00A7 × 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 00A7 × 0020 ÷ 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A7 × 0308 × 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00A7 × 0308 × 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 00A7 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 00A7 × 0020 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A7 × 0308 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00A7 × 0308 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 00A7 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 00A7 × 0020 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A7 × 0308 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00A7 × 0308 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 00A7 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 00A7 × 0020 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A7 × 0308 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00A7 × 0308 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 00A7 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A7 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0308 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00A7 × 0308 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 00A7 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00A7 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00A7 × 0308 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 00A7 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A7 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A7 × 0308 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00A7 × 0308 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 00A7 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 00A7 × 0020 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A7 × 0308 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00A7 × 0308 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 00A7 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 00A7 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A7 × 0308 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00A7 × 0308 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 00A7 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 00A7 × 0020 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A7 × 0308 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00A7 × 0308 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 00A7 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 00A7 × 0020 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A7 × 0308 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00A7 × 0308 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 00A7 × 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 00A7 × 0020 ÷ 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A7 × 0308 × 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00A7 × 0308 × 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 00A7 × 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A7 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 × 0308 × 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00A7 × 0308 × 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A7 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 00A7 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0308 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 00A7 × 0308 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 00A7 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A7 × 0308 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00A7 × 0308 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 00A7 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 00A7 × 0020 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A7 × 0308 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00A7 × 0308 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 00A7 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 00A7 × 0020 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A7 × 0308 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00A7 × 0308 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 00A7 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 00A7 × 0020 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A7 × 0308 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00A7 × 0308 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 00A7 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 00A7 × 0020 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A7 × 0308 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00A7 × 0308 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 00A7 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 00A7 × 0020 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A7 × 0308 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00A7 × 0308 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 00A7 × 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 00A7 × 0020 ÷ 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A7 × 0308 × 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00A7 × 0308 × 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 00A7 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0308 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 00A7 × 0308 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
× 00A7 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 00A7 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 00A7 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 00A7 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 × 0308 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00A7 × 0308 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00A7 × 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
× 00A7 × 0020 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A7 × 0308 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00A7 × 0308 × 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 00A7 × 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 00A7 × 0020 ÷ 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A7 × 0308 × 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 00A7 × 0308 × 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 00A7 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [0.3]
× 00A7 × 0020 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 00A7 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00A7 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A7 × 0308 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00A7 × 0308 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00A7 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A7 × 0020 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A7 × 0308 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00A7 × 0308 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A7 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 00A7 × 0020 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A7 × 0308 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00A7 × 0308 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 00A7 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 00A7 × 0020 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A7 × 0308 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00A7 × 0308 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00A7 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A7 × 0020 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A7 × 0308 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00A7 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 0308 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A7 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A7 × 0308 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00A7 × 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00A7 × 0020 ÷ 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00A7 × 0308 × 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 00A7 × 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 00A7 × 0020 ÷ 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A7 × 0308 × 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00A7 × 0308 × 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 00A7 × 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 00A7 × 0020 ÷ 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A7 × 0308 × 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00A7 × 0308 × 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 00A7 × 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 00A7 × 0020 ÷ 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A7 × 0308 × 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00A7 × 0308 × 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 00A7 × 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A7 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A7 × 0308 × 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00A7 × 0308 × 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 50005 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 50005 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 50005 × 0308 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 50005 × 0308 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 50005 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 50005 × 0020 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 50005 × 0308 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 50005 × 0308 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 50005 × 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 50005 × 0020 ÷ 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 50005 × 0308 × 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 50005 × 0308 × 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 50005 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 50005 × 0020 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 50005 × 0308 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 50005 × 0308 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 50005 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 50005 × 0020 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 50005 × 0308 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 50005 × 0308 × 0020 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 50005 × 0308 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 50005 × 0308 × 0020 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 50005 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 50005 × 0020 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 50005 × 0308 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 50005 × 0308 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 50005 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 50005 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0308 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0308 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 50005 × 0308 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 50005 × 0308 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 50005 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 50005 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 50005 × 0308 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 50005 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 50005 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 50005 × 0308 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 50005 × 0308 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 50005 × 0308 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 50005 × 0308 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 50005 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 50005 × 0020 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 50005 × 0308 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 50005 × 0308 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 50005 × 0308 × 0020 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 50005 × 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 50005 × 0020 ÷ 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 50005 × 0308 × 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 50005 × 0308 × 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 50005 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 50005 × 0020 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 50005 × 0308 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 50005 × 0308 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 50005 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 50005 × 0020 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 50005 × 0308 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 50005 × 0308 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 50005 × 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 50005 × 0020 ÷ 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 50005 × 0308 × 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 50005 × 0308 × 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 50005 × 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 50005 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 × 0308 × 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 50005 × 0308 × 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 50005 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 50005 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0308 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 50005 × 0308 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 50005 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 50005 × 0308 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 50005 × 0308 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 50005 × 0308 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 50005 × 0308 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 50005 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 50005 × 0020 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 50005 × 0308 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 50005 × 0308 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 50005 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 50005 × 0020 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 50005 × 0308 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 50005 × 0308 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 50005 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 50005 × 0020 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 50005 × 0308 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 50005 × 0308 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 50005 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 50005 × 0020 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 50005 × 0308 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 50005 × 0308 × 0020 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 50005 × 0308 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 50005 × 0308 × 0020 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 50005 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 50005 × 0020 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 50005 × 0308 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 50005 × 0308 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 50005 × 0308 × 0020 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 50005 × 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 50005 × 0020 ÷ 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 50005 × 0308 × 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 50005 × 0308 × 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 50005 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0308 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 50005 × 0308 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
× 50005 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 50005 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 50005 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 50005 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 × 0308 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 50005 × 0308 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 50005 × 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
× 50005 × 0020 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 50005 × 0308 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 50005 × 0308 × 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 50005 × 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 50005 × 0020 ÷ 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 50005 × 0308 × 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 50005 × 0308 × 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 50005 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [0.3]
× 50005 × 0020 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 50005 × 0308 × 0020 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 50005 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 50005 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 50005 × 0308 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 50005 × 0308 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 50005 × 0308 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 50005 × 0308 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 50005 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 50005 × 0020 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 50005 × 0308 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 50005 × 0308 × 0020 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 50005 × 0308 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 50005 × 0308 × 0020 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 50005 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 50005 × 0020 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 50005 × 0308 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 50005 × 0308 × 0020 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 50005 × 0308 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 50005 × 0308 × 0020 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 50005 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 50005 × 0020 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 50005 × 0308 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 50005 × 0308 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 50005 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 50005 × 0020 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 50005 × 0308 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 50005 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 0308 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 50005 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 50005 × 0308 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 50005 × 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 50005 × 0020 ÷ 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 50005 × 0308 × 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 50005 × 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 50005 × 0020 ÷ 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 50005 × 0308 × 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 50005 × 0308 × 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 50005 × 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 50005 × 0020 ÷ 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 50005 × 0308 × 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 50005 × 0308 × 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 50005 × 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 50005 × 0020 ÷ 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 50005 × 0308 × 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 50005 × 0308 × 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 50005 × 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 50005 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 50005 × 0308 × 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 50005 × 0308 × 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0E01 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0E01 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0E01 × 0308 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0E01 × 0308 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0E01 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0E01 × 0020 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0E01 × 0308 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 0E01 × 0308 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0E01 × 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0E01 × 0020 ÷ 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0E01 × 0308 × 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0E01 × 0308 × 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 0E01 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0E01 × 0020 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0E01 × 0308 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0E01 × 0308 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 0E01 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0E01 × 0020 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0E01 × 0308 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0E01 × 0308 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 0E01 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0E01 × 0020 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0E01 × 0308 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0E01 × 0308 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 0E01 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0E01 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0308 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0E01 × 0308 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0E01 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0E01 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0E01 × 0308 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0E01 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0E01 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0E01 × 0308 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0E01 × 0308 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 0E01 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0E01 × 0020 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0E01 × 0308 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0E01 × 0308 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0E01 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 0E01 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0E01 × 0308 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0E01 × 0308 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 0E01 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0E01 × 0020 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0E01 × 0308 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0E01 × 0308 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 0E01 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0E01 × 0020 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0E01 × 0308 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0E01 × 0308 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 0E01 × 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0E01 × 0020 ÷ 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0E01 × 0308 × 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0E01 × 0308 × 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 0E01 × 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0E01 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 0308 × 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0E01 × 0308 × 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0E01 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 0E01 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0308 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0E01 × 0308 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] COMMA (IS) ÷ [0.3]
× 0E01 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0E01 × 0308 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 0E01 × 0308 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 0E01 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0E01 × 0020 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0E01 × 0308 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0E01 × 0308 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 0E01 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0E01 × 0020 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0E01 × 0308 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0E01 × 0308 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 0E01 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0E01 × 0020 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0E01 × 0308 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0E01 × 0308 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 0E01 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0E01 × 0020 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0E01 × 0308 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0E01 × 0308 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 0E01 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0E01 × 0020 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0E01 × 0308 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0E01 × 0308 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 0E01 × 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0E01 × 0020 ÷ 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0E01 × 0308 × 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0E01 × 0308 × 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 0E01 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0308 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 0E01 × 0308 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
× 0E01 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 0E01 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 0E01 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0308 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0E01 × 0308 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 0E01 × 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
× 0E01 × 0020 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0E01 × 0308 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 0E01 × 0308 × 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 0E01 × 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 0E01 × 0020 ÷ 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0E01 × 0308 × 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 0E01 × 0308 × 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 0E01 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [0.3]
× 0E01 × 0020 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 0E01 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0E01 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0E01 × 0308 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0E01 × 0308 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0E01 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0E01 × 0020 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0E01 × 0308 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0E01 × 0308 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0E01 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0E01 × 0020 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0E01 × 0308 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0E01 × 0308 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 0E01 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 0E01 × 0020 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0E01 × 0308 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0E01 × 0308 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 0E01 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0E01 × 0020 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0E01 × 0308 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0E01 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 0308 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0E01 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0E01 × 0308 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 0E01 × 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0E01 × 0020 ÷ 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0E01 × 0308 × 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 0E01 × 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0E01 × 0020 ÷ 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0E01 × 0308 × 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0E01 × 0308 × 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 0E01 × 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0E01 × 0020 ÷ 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0E01 × 0308 × 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0E01 × 0308 × 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 0E01 × 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0E01 × 0020 ÷ 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0E01 × 0308 × 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0E01 × 0308 × 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 0E01 × 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0E01 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0E01 × 0308 × 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0E01 × 0308 × 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 3041 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 3041 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 3041 × 0308 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 3041 × 0308 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 3041 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 3041 × 0020 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 3041 × 0308 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 3041 × 0308 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 3041 × 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 3041 × 0020 ÷ 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 3041 × 0308 × 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 3041 × 0308 × 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 3041 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 3041 × 0020 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 3041 × 0308 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 3041 × 0308 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 3041 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 3041 × 0020 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 3041 × 0308 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 3041 × 0308 × 0020 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 3041 × 0308 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 3041 × 0308 × 0020 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 3041 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 3041 × 0020 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 3041 × 0308 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 3041 × 0308 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 3041 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 3041 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0308 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0308 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 3041 × 0308 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 3041 × 0308 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 3041 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 3041 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
-× 3041 × 0308 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [9.0] <START OF HEADING> (CM) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM) ÷ [0.3]
+× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 3041 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 3041 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 3041 × 0308 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 3041 × 0308 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 3041 × 0308 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 3041 × 0308 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
× 3041 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 3041 × 0020 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 3041 × 0308 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 3041 × 0308 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 3041 × 0308 × 0020 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 3041 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
× 3041 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 3041 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 3041 × 0020 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 3041 × 0308 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 3041 × 0308 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 3041 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 3041 × 0020 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 3041 × 0308 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 3041 × 0308 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 3041 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 3041 × 0020 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 3041 × 0308 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 3041 × 0308 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
× 3041 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 3041 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 × 0308 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 3041 × 0308 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 3041 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] WATCH (ID) ÷ [0.3]
× 3041 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0308 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 3041 × 0308 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
× 3041 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0308 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 0308 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] COMMA (IS) ÷ [0.3]
× 3041 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 3041 × 0308 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 3041 × 0308 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 3041 × 0308 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 3041 × 0308 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 3041 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 3041 × 0020 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 3041 × 0308 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 3041 × 0308 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 3041 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 3041 × 0020 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 3041 × 0308 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 3041 × 0308 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 3041 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 3041 × 0020 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 3041 × 0308 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 3041 × 0308 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 3041 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 3041 × 0020 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 3041 × 0308 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 3041 × 0308 × 0020 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 3041 × 0308 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 3041 × 0308 × 0020 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
× 3041 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 3041 × 0020 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 3041 × 0308 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 3041 × 0308 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 3041 × 0308 × 0020 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
× 3041 × 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 3041 × 0020 ÷ 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 3041 × 0308 × 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 3041 × 0308 × 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
× 3041 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
× 3041 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 × 0308 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 3041 × 0308 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 3041 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 3041 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP) ÷ [0.3]
× 3041 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
× 3041 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 3041 × 0308 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 3041 × 0308 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 3041 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
× 3041 × 0020 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 3041 × 0308 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 3041 × 0308 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
× 3041 × 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
× 3041 × 0020 ÷ 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 3041 × 0308 × 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 3041 × 0308 × 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
× 3041 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [0.3]
× 3041 × 0020 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 3041 × 0308 × 0020 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
× 3041 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 3041 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 3041 × 0308 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 3041 × 0308 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 3041 × 0308 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 3041 × 0308 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 3041 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 3041 × 0020 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 3041 × 0308 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 3041 × 0308 × 0020 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 3041 × 0308 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 3041 × 0308 × 0020 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 3041 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 3041 × 0020 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 3041 × 0308 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 3041 × 0308 × 0020 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 3041 × 0308 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 3041 × 0308 × 0020 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 3041 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 3041 × 0020 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 3041 × 0308 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 3041 × 0308 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 3041 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 3041 × 0020 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 3041 × 0308 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 3041 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 0308 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 3041 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 3041 × 0308 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 3041 × 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 3041 × 0020 ÷ 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 3041 × 0308 × 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
× 3041 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 3041 × 0020 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 3041 × 0308 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 3041 × 0308 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
× 3041 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 3041 × 0020 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 3041 × 0308 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 3041 × 0308 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
× 3041 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 3041 × 0020 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 3041 × 0308 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 3041 × 0308 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
× 3041 × 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 3041 × 0020 ÷ 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 0308 × 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 3041 × 0308 × 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000D × 000A ÷ 0061 × 000A ÷ 0308 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) × [5.01] <LINE FEED (LF)> (LF) ÷ [5.03] LATIN SMALL LETTER A (AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [0.3]
+× 0061 × 0308 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [0.3]
+× 0020 ÷ 200D × 0646 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [28.0] ARABIC LETTER NOON (AL) ÷ [0.3]
+× 0646 × 200D × 0020 ÷ # × [0.3] ARABIC LETTER NOON (AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 000B ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000D ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0085 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200D × 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 3041 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 2060 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200D × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
+× 200D × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
+× 2014 × 2014 ÷ # × [0.3] EM DASH (B2) × [17.0] EM DASH (B2) ÷ [0.3]
+× 3041 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× FFFC ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 3041 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.04] ONE DOT LEADER (IN) ÷ [0.3]
+× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.05] ONE DOT LEADER (IN) ÷ [0.3]
+× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 0E01 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
+× 0024 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 0024 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 0025 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1100 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] ONE DOT LEADER (IN) ÷ [0.3]
+× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3]
+× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0066 × 0069 × 006E × 0061 × 006C ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 0027 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0027 × 0063 × 0061 × 006E × 0027 × 0020 ÷ 006E × 006F × 0074 ÷ # × [0.3] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) ÷ [0.3]
@@ -6119,8 +7129,8 @@
× 4E00 × 002E ÷ 4E00 × 002E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4E00 (ID) × [13.02] FULL STOP (IS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4E00 (ID) × [13.02] FULL STOP (IS) ÷ [0.3]
× 0061 × 0020 × 0020 ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 0061 × 0020 × 0020 × 200B ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0061 × 0020 ÷ 0308 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 0020 ÷ 0308 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
+× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0067 × 0069 × 0076 × 0065 × 0020 ÷ 0062 × 006F × 006F × 006B × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER K (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] FULL STOP (IS) ÷ [0.3]
× 307E ÷ 0028 × 3059 × 0029 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER SU (ID) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0066 × 0069 × 006E × 0064 × 0020 × 002E × 0063 × 006F × 006D ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) × [29.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) ÷ [0.3]
@@ -6133,12 +7143,12 @@
× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 002E × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0021 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 ÷ 005C ÷ 0028 × 0073 ÷ 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [999.0] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) ÷ [999.0] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 005C ÷ 0028 × 0073 × 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 0028 × 0020 × 0073 × 0020 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.02] FULL STOP (IS) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 ÷ 005C ÷ 007B × 0073 ÷ 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [999.0] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) ÷ [999.0] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0063 × 006F × 0064 × 0028 × 0065 × 0029 ÷ 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 ÷ 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
@@ -6156,19 +7166,19 @@
× 007B × 0063 × 006F × 006E × 007D × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
× 007B × 0063 × 006F × 006E × 007D × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
× 007B × 0063 × 006F × 006E × 007D × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM) × [30.01] LEFT SQUARE BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT SQUARE BRACKET (CP) ÷ [0.3]
+× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP) ÷ [0.3]
× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
@@ -6187,10 +7197,10 @@
× 0028 × 30CB × 30E5 × 30FC × 0029 × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 007B × 30CB × 30E5 × 30FC × 30FB × 007D ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 007B × 30CB × 30E5 × 30FC × 007D × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM) ÷ [0.3]
+× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
+× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
× 0028 × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 0029 × 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP) × [30.02] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 007B × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 007D ÷ 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 0028 × 0030 × 002C × 0031 × 0029 × 002B × 0028 × 0032 × 002C × 0033 × 0029 × 2295 × 0028 × 2212 × 0034 × 002C × 0035 × 0029 × 2296 × 0028 × 0036 × 002C × 0037 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [25.05] PLUS SIGN (PR) × [25.01] LEFT PARENTHESIS (OP) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [30.02] CIRCLED PLUS (AI_AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT PARENTHESIS (CP) × [30.02] CIRCLED MINUS (AL) × [30.01] LEFT PARENTHESIS (OP) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT PARENTHESIS (CP) ÷ [0.3]
@@ -6199,8 +7209,8 @@
× 0061 × 0062 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [0.3]
× 0061 × 0062 × 0020 ÷ 0063 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) ÷ [0.3]
× 0061 ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0939 × 093F × 0928 × 094D × 0926 × 0940 × 0020 ÷ # × [0.3] DEVANAGARI LETTER HA (AL) × [9.0] DEVANAGARI VOWEL SIGN I (CM) × [28.0] DEVANAGARI LETTER NA (AL) × [9.0] DEVANAGARI SIGN VIRAMA (CM) × [28.0] DEVANAGARI LETTER DA (AL) × [9.0] DEVANAGARI VOWEL SIGN II (CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 092F × 0938 × 0917 × 0941 × 091A × 093F × 0924 × 0940 × 092F × 0938 × 093E × 0020 ÷ # × [0.3] DEVANAGARI LETTER YA (AL) × [28.0] DEVANAGARI LETTER SA (AL) × [28.0] DEVANAGARI LETTER GA (AL) × [9.0] DEVANAGARI VOWEL SIGN U (CM) × [28.0] DEVANAGARI LETTER CA (AL) × [9.0] DEVANAGARI VOWEL SIGN I (CM) × [28.0] DEVANAGARI LETTER TA (AL) × [9.0] DEVANAGARI VOWEL SIGN II (CM) × [28.0] DEVANAGARI LETTER YA (AL) × [28.0] DEVANAGARI LETTER SA (AL) × [9.0] DEVANAGARI VOWEL SIGN AA (CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 0939 × 093F × 0928 × 094D × 0926 × 0940 × 0020 ÷ # × [0.3] DEVANAGARI LETTER HA (AL) × [9.0] DEVANAGARI VOWEL SIGN I (CM1_CM) × [28.0] DEVANAGARI LETTER NA (AL) × [9.0] DEVANAGARI SIGN VIRAMA (CM1_CM) × [28.0] DEVANAGARI LETTER DA (AL) × [9.0] DEVANAGARI VOWEL SIGN II (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 092F × 0938 × 0917 × 0941 × 091A × 093F × 0924 × 0940 × 092F × 0938 × 093E × 0020 ÷ # × [0.3] DEVANAGARI LETTER YA (AL) × [28.0] DEVANAGARI LETTER SA (AL) × [28.0] DEVANAGARI LETTER GA (AL) × [9.0] DEVANAGARI VOWEL SIGN U (CM1_CM) × [28.0] DEVANAGARI LETTER CA (AL) × [9.0] DEVANAGARI VOWEL SIGN I (CM1_CM) × [28.0] DEVANAGARI LETTER TA (AL) × [9.0] DEVANAGARI VOWEL SIGN II (CM1_CM) × [28.0] DEVANAGARI LETTER YA (AL) × [28.0] DEVANAGARI LETTER SA (AL) × [9.0] DEVANAGARI VOWEL SIGN AA (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
× 5370 ÷ 672C ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
× 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
× 5165 ÷ 529B ÷ 3057 ÷ 30A8 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5165 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-529B (ID) ÷ [999.0] HIRAGANA LETTER SI (ID) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
@@ -6324,16 +7334,11 @@
× 3057 × 3001 ÷ 0061 × 0062 ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
× 0061 ÷ 1F1E6 ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
× 1F1F7 × 1F1FA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [0.3]
-× 1F1F7 × 1F1FA × 1F1F8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER S (RI) ÷ [0.3]
-× 1F1F7 × 1F1FA × 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
-× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
+× 1F1F7 × 1F1FA ÷ 1F1F8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) ÷ [0.3]
+× 1F1F7 × 1F1FA ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
+× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 1F1E7 × 1F1E8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [0.3]
-× 1F1E6 × 200D × 1F1E7 × 1F1E8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (CM) × [30.11] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [0.3]
-× 1F1E6 × 1F1E7 × 200D × 1F1E8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [9.0] ZERO WIDTH JOINER (CM) × [30.11] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [0.3]
-× 0020 ÷ 200D × 0646 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (CM) × [28.0] ARABIC LETTER NOON (AL) ÷ [0.3]
-× 0646 × 200D × 0020 ÷ # × [0.3] ARABIC LETTER NOON (AL) × [9.0] ZERO WIDTH JOINER (CM) × [7.01] SPACE (SP) ÷ [0.3]
#
-# Lines: 6311
+# Lines: 7312
#
# EOF
diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt
index 279e6db06d..2985b84cf8 100644
--- a/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt
+++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/SentenceBreakTest.txt
@@ -1,291 +1,293 @@
-# SentenceBreakTest-8.0.0.txt
-# Date: 2015-04-30, 09:40:15 GMT [MD]
+# SentenceBreakTest-10.0.0.txt
+# Date: 2017-04-14, 05:40:43 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
-# Default Sentence Break Test
+# Default Sentence_Break Test
#
# Format:
-# <string> (# <comment>)?
-# <string> contains hex Unicode code points, with
-# ÷ wherever there is a break opportunity, and
+# <string> (# <comment>)?
+# <string> contains hex Unicode code points, with
+# ÷ wherever there is a break opportunity, and
# × wherever there is not.
# <comment> the format can change, but currently it shows:
# - the sample character name
# - (x) the Sentence_Break property value for the sample character
-# - [x] the rule that determines whether there is a break or not
+# - [x] the rule that determines whether there is a break or not,
+# as listed in the Rules section of SentenceBreakTest.html
#
# These samples may be extended or changed in the future.
#
-÷ 0001 × 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0001 × 0308 × 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0001 × 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0001 × 0308 × 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0001 × 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0001 × 0308 × 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0001 × 0085 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0001 × 0308 × 0085 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0001 × 0009 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0001 × 0308 × 0009 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0001 × 0061 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0001 × 0308 × 0061 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0001 × 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0001 × 0308 × 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0001 × 01BB ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0001 × 0308 × 01BB ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0001 × 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0001 × 0308 × 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0001 × 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0001 × 0308 × 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0001 × 0021 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0001 × 0308 × 0021 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0001 × 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0001 × 0308 × 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0001 × 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0001 × 0308 × 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0001 × 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0001 × 0308 × 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0001 × 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0001 × 0308 × 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0001 × 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0001 × 0308 × 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0001 × 0085 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0001 × 0308 × 0085 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0001 × 0009 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0001 × 0308 × 0009 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0001 × 0061 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0001 × 0308 × 0061 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0001 × 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0001 × 0308 × 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0001 × 01BB ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0001 × 0308 × 01BB ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0001 × 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0001 × 0308 × 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0001 × 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0001 × 0308 × 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0001 × 0021 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0001 × 0308 × 0021 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0001 × 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0001 × 0308 × 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0001 × 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0001 × 0308 × 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0001 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0001 × 0308 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0001 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0001 × 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000D ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000D ÷ 0308 × 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 000D ÷ 0308 × 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 000D ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000D ÷ 0308 × 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 000D ÷ 0308 × 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
÷ 000D × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000D ÷ 0308 × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 000D ÷ 0308 × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
÷ 000D ÷ 0085 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 000D ÷ 0308 × 0085 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 000D ÷ 0308 × 0085 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
÷ 000D ÷ 0009 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 000D ÷ 0308 × 0009 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 000D ÷ 0308 × 0009 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
÷ 000D ÷ 0061 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 000D ÷ 0308 × 0061 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 000D ÷ 0308 × 0061 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
÷ 000D ÷ 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 000D ÷ 0308 × 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 000D ÷ 0308 × 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
÷ 000D ÷ 01BB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 000D ÷ 0308 × 01BB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 000D ÷ 0308 × 01BB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
÷ 000D ÷ 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000D ÷ 0308 × 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 000D ÷ 0308 × 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 000D ÷ 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 000D ÷ 0308 × 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 000D ÷ 0308 × 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
÷ 000D ÷ 0021 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 000D ÷ 0308 × 0021 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 000D ÷ 0308 × 0021 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
÷ 000D ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 000D ÷ 0308 × 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 000D ÷ 0308 × 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
÷ 000D ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMMA (SContinue) ÷ [0.3]
-÷ 000D ÷ 0308 × 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 000D ÷ 0308 × 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 000D ÷ 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000D ÷ 0308 × 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000A ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000A ÷ 0308 × 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 000A ÷ 0308 × 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 000A ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000A ÷ 0308 × 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 000A ÷ 0308 × 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
÷ 000A ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000A ÷ 0308 × 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 000A ÷ 0308 × 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
÷ 000A ÷ 0085 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 000A ÷ 0308 × 0085 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 000A ÷ 0308 × 0085 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
÷ 000A ÷ 0009 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 000A ÷ 0308 × 0009 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 000A ÷ 0308 × 0009 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
÷ 000A ÷ 0061 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 000A ÷ 0308 × 0061 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 000A ÷ 0308 × 0061 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
÷ 000A ÷ 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 000A ÷ 0308 × 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 000A ÷ 0308 × 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
÷ 000A ÷ 01BB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 000A ÷ 0308 × 01BB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 000A ÷ 0308 × 01BB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
÷ 000A ÷ 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000A ÷ 0308 × 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 000A ÷ 0308 × 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 000A ÷ 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 000A ÷ 0308 × 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 000A ÷ 0308 × 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
÷ 000A ÷ 0021 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 000A ÷ 0308 × 0021 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 000A ÷ 0308 × 0021 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
÷ 000A ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 000A ÷ 0308 × 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 000A ÷ 0308 × 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
÷ 000A ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMMA (SContinue) ÷ [0.3]
-÷ 000A ÷ 0308 × 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 000A ÷ 0308 × 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 000A ÷ 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000A ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0085 ÷ 0001 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0001 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0001 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 0085 ÷ 000D ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0085 ÷ 0308 × 000D ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0085 ÷ 0308 × 000D ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
÷ 0085 ÷ 000A ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0085 ÷ 0308 × 000A ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0085 ÷ 0308 × 000A ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
÷ 0085 ÷ 0085 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0085 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0085 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
÷ 0085 ÷ 0009 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0009 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0009 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
÷ 0085 ÷ 0061 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0061 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0061 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
÷ 0085 ÷ 0041 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0041 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0041 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
÷ 0085 ÷ 01BB ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0085 ÷ 0308 × 01BB ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0085 ÷ 0308 × 01BB ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
÷ 0085 ÷ 0030 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0030 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0030 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0085 ÷ 002E ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0085 ÷ 0308 × 002E ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0085 ÷ 0308 × 002E ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
÷ 0085 ÷ 0021 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0021 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0021 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
÷ 0085 ÷ 0022 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0085 ÷ 0308 × 0022 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0085 ÷ 0308 × 0022 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
÷ 0085 ÷ 002C ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMMA (SContinue) ÷ [0.3]
-÷ 0085 ÷ 0308 × 002C ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0085 ÷ 0308 × 002C ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0085 ÷ 00AD ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0085 ÷ 0308 × 00AD ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0085 ÷ 0300 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0085 ÷ 0308 × 0300 ÷ # ÷ [0.2] <NEXT LINE (NEL)> (Sep) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0009 × 0001 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0009 × 0308 × 0001 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0009 × 000D ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0009 × 0308 × 000D ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0009 × 000A ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0009 × 0308 × 000A ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0009 × 0085 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0009 × 0308 × 0085 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0009 × 0009 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0009 × 0308 × 0009 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0009 × 0061 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0009 × 0308 × 0061 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0009 × 0041 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0009 × 0308 × 0041 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0009 × 01BB ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0009 × 0308 × 01BB ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0009 × 0030 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0009 × 0308 × 0030 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0009 × 002E ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0009 × 0308 × 002E ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0009 × 0021 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0009 × 0308 × 0021 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0009 × 0022 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0009 × 0308 × 0022 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0009 × 002C ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0009 × 0308 × 002C ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0009 × 0001 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0009 × 0308 × 0001 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0009 × 000D ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0009 × 0308 × 000D ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0009 × 000A ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0009 × 0308 × 000A ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0009 × 0085 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0009 × 0308 × 0085 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0009 × 0009 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0009 × 0308 × 0009 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0009 × 0061 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0009 × 0308 × 0061 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0009 × 0041 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0009 × 0308 × 0041 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0009 × 01BB ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0009 × 0308 × 01BB ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0009 × 0030 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0009 × 0308 × 0030 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0009 × 002E ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0009 × 0308 × 002E ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0009 × 0021 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0009 × 0308 × 0021 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0009 × 0022 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0009 × 0308 × 0022 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0009 × 002C ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0009 × 0308 × 002C ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0009 × 00AD ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0009 × 0308 × 00AD ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0009 × 0300 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0009 × 0308 × 0300 ÷ # ÷ [0.2] <CHARACTER TABULATION> (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 × 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 × 0308 × 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 × 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 × 0308 × 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 × 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 × 0308 × 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 × 0085 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0061 × 0308 × 0085 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0061 × 0009 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0061 × 0308 × 0009 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0061 × 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0061 × 0308 × 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0061 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0061 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0061 × 01BB ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0061 × 0308 × 01BB ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0061 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 × 0308 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 × 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0061 × 0308 × 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0061 × 0021 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0061 × 0308 × 0021 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0061 × 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0061 × 0308 × 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0061 × 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0061 × 0308 × 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0061 × 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0061 × 0308 × 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0061 × 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0061 × 0308 × 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0061 × 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0061 × 0308 × 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0061 × 0085 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0061 × 0308 × 0085 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0061 × 0009 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0061 × 0308 × 0009 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0061 × 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0061 × 0308 × 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0061 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0061 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0061 × 01BB ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0061 × 0308 × 01BB ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0061 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0061 × 0308 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0061 × 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0061 × 0308 × 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0061 × 0021 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0061 × 0308 × 0021 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0061 × 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0061 × 0308 × 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0061 × 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0061 × 0308 × 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0061 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0061 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0041 × 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0041 × 0308 × 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0041 × 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0041 × 0308 × 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0041 × 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0041 × 0308 × 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0041 × 0085 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0041 × 0308 × 0085 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0041 × 0009 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0041 × 0308 × 0009 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0041 × 0061 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0041 × 0308 × 0061 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0041 × 0308 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0041 × 01BB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0041 × 0308 × 01BB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0041 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0041 × 0308 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0041 × 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0041 × 0308 × 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0041 × 0021 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0041 × 0308 × 0021 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0041 × 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0041 × 0308 × 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0041 × 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0041 × 0308 × 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0041 × 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0041 × 0308 × 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0041 × 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0041 × 0308 × 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0041 × 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0041 × 0308 × 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0041 × 0085 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0041 × 0308 × 0085 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0041 × 0009 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0041 × 0308 × 0009 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0041 × 0061 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0041 × 0308 × 0061 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0041 × 0308 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0041 × 01BB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0041 × 0308 × 01BB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0041 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0041 × 0308 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0041 × 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0041 × 0308 × 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0041 × 0021 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0041 × 0308 × 0021 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0041 × 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0041 × 0308 × 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0041 × 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0041 × 0308 × 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0041 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0041 × 0308 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0041 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0041 × 0308 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 01BB × 0001 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 01BB × 0308 × 0001 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 01BB × 000D ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 01BB × 0308 × 000D ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 01BB × 000A ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 01BB × 0308 × 000A ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 01BB × 0085 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 01BB × 0308 × 0085 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 01BB × 0009 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 01BB × 0308 × 0009 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 01BB × 0061 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 01BB × 0308 × 0061 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 01BB × 0041 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 01BB × 0308 × 0041 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 01BB × 01BB ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 01BB × 0308 × 01BB ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 01BB × 0030 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 01BB × 0308 × 0030 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 01BB × 002E ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 01BB × 0308 × 002E ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 01BB × 0021 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 01BB × 0308 × 0021 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 01BB × 0022 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 01BB × 0308 × 0022 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 01BB × 002C ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 01BB × 0308 × 002C ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 01BB × 0001 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 01BB × 0308 × 0001 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 01BB × 000D ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 01BB × 0308 × 000D ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 01BB × 000A ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 01BB × 0308 × 000A ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 01BB × 0085 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 01BB × 0308 × 0085 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 01BB × 0009 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 01BB × 0308 × 0009 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 01BB × 0061 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 01BB × 0308 × 0061 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 01BB × 0041 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 01BB × 0308 × 0041 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 01BB × 01BB ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 01BB × 0308 × 01BB ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 01BB × 0030 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 01BB × 0308 × 0030 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 01BB × 002E ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 01BB × 0308 × 002E ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 01BB × 0021 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 01BB × 0308 × 0021 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 01BB × 0022 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 01BB × 0308 × 0022 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 01BB × 002C ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 01BB × 0308 × 002C ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 01BB × 00AD ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 01BB × 0308 × 00AD ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 01BB × 0300 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 01BB × 0308 × 0300 ÷ # ÷ [0.2] LATIN LETTER TWO WITH STROKE (OLetter) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0030 × 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0030 × 0308 × 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0030 × 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0030 × 0308 × 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0030 × 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0030 × 0308 × 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0030 × 0085 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0030 × 0308 × 0085 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0030 × 0009 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0030 × 0308 × 0009 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0030 × 0061 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0030 × 0308 × 0061 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0030 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0030 × 0308 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0030 × 01BB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0030 × 0308 × 01BB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0030 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0030 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0030 × 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0030 × 0308 × 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0030 × 0021 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0030 × 0308 × 0021 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0030 × 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0030 × 0308 × 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0030 × 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0030 × 0308 × 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0030 × 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0030 × 0308 × 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0030 × 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0030 × 0308 × 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0030 × 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0030 × 0308 × 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0030 × 0085 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0030 × 0308 × 0085 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0030 × 0009 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0030 × 0308 × 0009 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0030 × 0061 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0030 × 0308 × 0061 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0030 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0030 × 0308 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0030 × 01BB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0030 × 0308 × 01BB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0030 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0030 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0030 × 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0030 × 0308 × 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0030 × 0021 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0030 × 0308 × 0021 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0030 × 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0030 × 0308 × 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0030 × 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0030 × 0308 × 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0030 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0030 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0030 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
@@ -350,180 +352,179 @@
÷ 0021 × 0308 × 00AD ÷ # ÷ [0.2] EXCLAMATION MARK (STerm) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0021 × 0300 ÷ # ÷ [0.2] EXCLAMATION MARK (STerm) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0021 × 0308 × 0300 ÷ # ÷ [0.2] EXCLAMATION MARK (STerm) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0022 × 0001 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0022 × 0308 × 0001 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0022 × 000D ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0022 × 0308 × 000D ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0022 × 000A ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0022 × 0308 × 000A ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0022 × 0085 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0022 × 0308 × 0085 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0022 × 0009 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0022 × 0308 × 0009 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0022 × 0061 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0022 × 0308 × 0061 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0022 × 0041 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0022 × 0308 × 0041 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0022 × 01BB ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0022 × 0308 × 01BB ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0022 × 0030 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0022 × 0308 × 0030 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0022 × 002E ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0022 × 0308 × 002E ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0022 × 0021 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0022 × 0308 × 0021 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0022 × 0022 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0022 × 0308 × 0022 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0022 × 002C ÷ # ÷ [0.2] QUOTATION MARK (Close) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0022 × 0308 × 002C ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0022 × 0001 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0022 × 0308 × 0001 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0022 × 000D ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0022 × 0308 × 000D ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0022 × 000A ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0022 × 0308 × 000A ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0022 × 0085 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0022 × 0308 × 0085 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0022 × 0009 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0022 × 0308 × 0009 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0022 × 0061 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0022 × 0308 × 0061 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0022 × 0041 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0022 × 0308 × 0041 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0022 × 01BB ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0022 × 0308 × 01BB ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0022 × 0030 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0022 × 0308 × 0030 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0022 × 002E ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0022 × 0308 × 002E ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0022 × 0021 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0022 × 0308 × 0021 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0022 × 0022 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0022 × 0308 × 0022 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0022 × 002C ÷ # ÷ [0.2] QUOTATION MARK (Close) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0022 × 0308 × 002C ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0022 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0022 × 0308 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0022 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0022 × 0308 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 002C × 0001 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 002C × 0308 × 0001 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 002C × 000D ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 002C × 0308 × 000D ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 002C × 000A ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 002C × 0308 × 000A ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 002C × 0085 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 002C × 0308 × 0085 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 002C × 0009 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 002C × 0308 × 0009 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 002C × 0061 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 002C × 0308 × 0061 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 002C × 0041 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 002C × 0308 × 0041 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 002C × 01BB ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 002C × 0308 × 01BB ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 002C × 0030 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 002C × 0308 × 0030 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 002C × 002E ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 002C × 0308 × 002E ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 002C × 0021 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 002C × 0308 × 0021 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 002C × 0022 ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 002C × 0308 × 0022 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 002C × 002C ÷ # ÷ [0.2] COMMA (SContinue) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 002C × 0308 × 002C ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 002C × 0001 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 002C × 0308 × 0001 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 002C × 000D ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 002C × 0308 × 000D ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 002C × 000A ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 002C × 0308 × 000A ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 002C × 0085 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 002C × 0308 × 0085 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 002C × 0009 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 002C × 0308 × 0009 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 002C × 0061 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 002C × 0308 × 0061 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 002C × 0041 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 002C × 0308 × 0041 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 002C × 01BB ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 002C × 0308 × 01BB ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 002C × 0030 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 002C × 0308 × 0030 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 002C × 002E ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 002C × 0308 × 002E ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 002C × 0021 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 002C × 0308 × 0021 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 002C × 0022 ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 002C × 0308 × 0022 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 002C × 002C ÷ # ÷ [0.2] COMMA (SContinue) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 002C × 0308 × 002C ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 002C × 00AD ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 002C × 0300 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] COMMA (SContinue) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 00AD × 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 00AD × 0308 × 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 00AD × 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 00AD × 0308 × 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 00AD × 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 00AD × 0308 × 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 00AD × 0085 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 00AD × 0308 × 0085 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 00AD × 0009 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 00AD × 0308 × 0009 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 00AD × 0061 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 00AD × 0308 × 0061 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 00AD × 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 00AD × 0308 × 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 00AD × 01BB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 00AD × 0308 × 01BB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 00AD × 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 00AD × 0308 × 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 00AD × 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 00AD × 0308 × 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 00AD × 0021 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 00AD × 0308 × 0021 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 00AD × 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 00AD × 0308 × 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 00AD × 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 00AD × 0308 × 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 00AD × 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 00AD × 0308 × 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 00AD × 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 00AD × 0308 × 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 00AD × 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 00AD × 0308 × 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 00AD × 0085 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 00AD × 0308 × 0085 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 00AD × 0009 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 00AD × 0308 × 0009 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 00AD × 0061 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 00AD × 0308 × 0061 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 00AD × 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 00AD × 0308 × 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 00AD × 01BB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 00AD × 0308 × 01BB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 00AD × 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 00AD × 0308 × 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 00AD × 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 00AD × 0308 × 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 00AD × 0021 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 00AD × 0308 × 0021 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 00AD × 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 00AD × 0308 × 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 00AD × 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 00AD × 0308 × 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 00AD × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 00AD × 0308 × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 00AD × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 00AD × 0308 × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0300 × 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0300 × 0308 × 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0300 × 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0300 × 0308 × 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0300 × 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0300 × 0308 × 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0300 × 0085 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0300 × 0308 × 0085 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
-÷ 0300 × 0009 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0300 × 0308 × 0009 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
-÷ 0300 × 0061 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0300 × 0308 × 0061 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
-÷ 0300 × 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0300 × 0308 × 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
-÷ 0300 × 01BB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0300 × 0308 × 01BB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
-÷ 0300 × 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0300 × 0308 × 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0300 × 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0300 × 0308 × 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0300 × 0021 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0300 × 0308 × 0021 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] EXCLAMATION MARK (STerm) ÷ [0.3]
-÷ 0300 × 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0300 × 0308 × 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] QUOTATION MARK (Close) ÷ [0.3]
-÷ 0300 × 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
-÷ 0300 × 0308 × 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [12.0] COMMA (SContinue) ÷ [0.3]
+÷ 0300 × 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0300 × 0308 × 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0300 × 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0300 × 0308 × 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0300 × 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0300 × 0308 × 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0300 × 0085 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0300 × 0308 × 0085 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <NEXT LINE (NEL)> (Sep) ÷ [0.3]
+÷ 0300 × 0009 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0300 × 0308 × 0009 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] <CHARACTER TABULATION> (Sp) ÷ [0.3]
+÷ 0300 × 0061 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0300 × 0308 × 0061 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0300 × 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0300 × 0308 × 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
+÷ 0300 × 01BB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0300 × 0308 × 01BB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN LETTER TWO WITH STROKE (OLetter) ÷ [0.3]
+÷ 0300 × 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0300 × 0308 × 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0300 × 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0300 × 0308 × 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0300 × 0021 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0300 × 0308 × 0021 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] EXCLAMATION MARK (STerm) ÷ [0.3]
+÷ 0300 × 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0300 × 0308 × 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] QUOTATION MARK (Close) ÷ [0.3]
+÷ 0300 × 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
+÷ 0300 × 0308 × 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [998.0] COMMA (SContinue) ÷ [0.3]
÷ 0300 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0300 × 0308 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0028 × 0022 × 0047 × 006F × 002E × 0022 × 0029 × 0020 ÷ 0028 × 0048 × 0065 × 0020 × 0064 × 0069 × 0064 × 002E × 0029 ÷ # ÷ [0.2] LEFT PARENTHESIS (Close) × [12.0] QUOTATION MARK (Close) × [12.0] LATIN CAPITAL LETTER G (Upper) × [12.0] LATIN SMALL LETTER O (Lower) × [12.0] FULL STOP (ATerm) × [9.0] QUOTATION MARK (Close) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] SPACE (Sp) ÷ [11.0] LEFT PARENTHESIS (Close) × [12.0] LATIN CAPITAL LETTER H (Upper) × [12.0] LATIN SMALL LETTER E (Lower) × [12.0] SPACE (Sp) × [12.0] LATIN SMALL LETTER D (Lower) × [12.0] LATIN SMALL LETTER I (Lower) × [12.0] LATIN SMALL LETTER D (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) ÷ [0.3]
-÷ 0028 × 201C × 0047 × 006F × 003F × 201D × 0029 × 0020 ÷ 0028 × 0048 × 0065 × 0020 × 0064 × 0069 × 0064 × 002E × 0029 ÷ # ÷ [0.2] LEFT PARENTHESIS (Close) × [12.0] LEFT DOUBLE QUOTATION MARK (Close) × [12.0] LATIN CAPITAL LETTER G (Upper) × [12.0] LATIN SMALL LETTER O (Lower) × [12.0] QUESTION MARK (STerm) × [9.0] RIGHT DOUBLE QUOTATION MARK (Close) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] SPACE (Sp) ÷ [11.0] LEFT PARENTHESIS (Close) × [12.0] LATIN CAPITAL LETTER H (Upper) × [12.0] LATIN SMALL LETTER E (Lower) × [12.0] SPACE (Sp) × [12.0] LATIN SMALL LETTER D (Lower) × [12.0] LATIN SMALL LETTER I (Lower) × [12.0] LATIN SMALL LETTER D (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) ÷ [0.3]
-÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 002E × 0020 × 0069 × 0073 ÷ # ÷ [0.2] LATIN CAPITAL LETTER U (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER S (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] FULL STOP (ATerm) × [8.0] SPACE (Sp) × [8.0] LATIN SMALL LETTER I (Lower) × [12.0] LATIN SMALL LETTER S (Lower) ÷ [0.3]
-÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 003F × 0020 ÷ 0048 × 0065 ÷ # ÷ [0.2] LATIN CAPITAL LETTER U (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER S (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] QUESTION MARK (STerm) × [9.0] SPACE (Sp) ÷ [11.0] LATIN CAPITAL LETTER H (Upper) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER U (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER S (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] FULL STOP (ATerm) ÷ [0.3]
-÷ 0033 × 002E × 0034 ÷ # ÷ [0.2] DIGIT THREE (Numeric) × [12.0] FULL STOP (ATerm) × [6.0] DIGIT FOUR (Numeric) ÷ [0.3]
-÷ 0063 × 002E × 0064 ÷ # ÷ [0.2] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [8.0] LATIN SMALL LETTER D (Lower) ÷ [0.3]
-÷ 0043 × 002E × 0064 ÷ # ÷ [0.2] LATIN CAPITAL LETTER C (Upper) × [12.0] FULL STOP (ATerm) × [8.0] LATIN SMALL LETTER D (Lower) ÷ [0.3]
-÷ 0063 × 002E × 0044 ÷ # ÷ [0.2] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER D (Upper) ÷ [0.3]
-÷ 0043 × 002E × 0044 ÷ # ÷ [0.2] LATIN CAPITAL LETTER C (Upper) × [12.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER D (Upper) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 0074 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [8.0] RIGHT PARENTHESIS (Close) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [8.0] NO-BREAK SPACE (Sp) × [8.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 ÷ 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [9.0] NO-BREAK SPACE (Sp) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 2018 × 0028 × 0074 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [8.0] RIGHT PARENTHESIS (Close) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [8.0] NO-BREAK SPACE (Sp) × [8.0] LEFT SINGLE QUOTATION MARK (Close) × [12.0] LEFT PARENTHESIS (Close) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 ÷ 2018 × 0028 × 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [9.0] NO-BREAK SPACE (Sp) ÷ [11.0] LEFT SINGLE QUOTATION MARK (Close) × [12.0] LEFT PARENTHESIS (Close) × [12.0] LATIN CAPITAL LETTER T (Upper) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 0308 × 0074 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [8.0] RIGHT PARENTHESIS (Close) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [8.0] NO-BREAK SPACE (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [8.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 0308 ÷ 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [9.0] NO-BREAK SPACE (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 0308 ÷ 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 0029 × 000A ÷ 0308 × 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [12.0] LATIN CAPITAL LETTER T (Upper) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 0074 × 0068 × 0065 × 0020 × 0072 × 0065 × 0073 × 0070 × 002E × 0020 × 006C × 0065 × 0061 × 0064 × 0065 × 0072 × 0073 × 0020 × 0061 × 0072 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER H (Lower) × [12.0] LATIN SMALL LETTER E (Lower) × [12.0] SPACE (Sp) × [12.0] LATIN SMALL LETTER R (Lower) × [12.0] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER S (Lower) × [12.0] LATIN SMALL LETTER P (Lower) × [12.0] FULL STOP (ATerm) × [8.0] SPACE (Sp) × [8.0] LATIN SMALL LETTER L (Lower) × [12.0] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER A (Lower) × [12.0] LATIN SMALL LETTER D (Lower) × [12.0] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER R (Lower) × [12.0] LATIN SMALL LETTER S (Lower) × [12.0] SPACE (Sp) × [12.0] LATIN SMALL LETTER A (Lower) × [12.0] LATIN SMALL LETTER R (Lower) × [12.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
-÷ 5B57 × 002E ÷ 5B57 ÷ # ÷ [0.2] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [12.0] FULL STOP (ATerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E ÷ 5B83 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [0.3]
-÷ 0065 × 0074 × 0063 × 002E × 3002 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [12.0] LATIN SMALL LETTER T (Lower) × [12.0] LATIN SMALL LETTER C (Lower) × [12.0] FULL STOP (ATerm) × [8.1] IDEOGRAPHIC FULL STOP (STerm) ÷ [0.3]
-÷ 5B57 × 3002 ÷ 5B83 ÷ # ÷ [0.2] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [12.0] IDEOGRAPHIC FULL STOP (STerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [0.3]
+÷ 000D × 000A ÷ 0061 × 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN SMALL LETTER A (Lower) × [998.0] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
+÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
+÷ 0020 × 200D × 0646 ÷ # ÷ [0.2] SPACE (Sp) × [5.0] ZERO WIDTH JOINER (Extend_FE) × [998.0] ARABIC LETTER NOON (OLetter) ÷ [0.3]
+÷ 0646 × 200D × 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (OLetter) × [5.0] ZERO WIDTH JOINER (Extend_FE) × [998.0] SPACE (Sp) ÷ [0.3]
+÷ 0028 × 0022 × 0047 × 006F × 002E × 0022 × 0029 × 0020 ÷ 0028 × 0048 × 0065 × 0020 × 0064 × 0069 × 0064 × 002E × 0029 ÷ # ÷ [0.2] LEFT PARENTHESIS (Close) × [998.0] QUOTATION MARK (Close) × [998.0] LATIN CAPITAL LETTER G (Upper) × [998.0] LATIN SMALL LETTER O (Lower) × [998.0] FULL STOP (ATerm) × [9.0] QUOTATION MARK (Close) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] SPACE (Sp) ÷ [11.0] LEFT PARENTHESIS (Close) × [998.0] LATIN CAPITAL LETTER H (Upper) × [998.0] LATIN SMALL LETTER E (Lower) × [998.0] SPACE (Sp) × [998.0] LATIN SMALL LETTER D (Lower) × [998.0] LATIN SMALL LETTER I (Lower) × [998.0] LATIN SMALL LETTER D (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) ÷ [0.3]
+÷ 0028 × 201C × 0047 × 006F × 003F × 201D × 0029 × 0020 ÷ 0028 × 0048 × 0065 × 0020 × 0064 × 0069 × 0064 × 002E × 0029 ÷ # ÷ [0.2] LEFT PARENTHESIS (Close) × [998.0] LEFT DOUBLE QUOTATION MARK (Close) × [998.0] LATIN CAPITAL LETTER G (Upper) × [998.0] LATIN SMALL LETTER O (Lower) × [998.0] QUESTION MARK (STerm) × [9.0] RIGHT DOUBLE QUOTATION MARK (Close) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] SPACE (Sp) ÷ [11.0] LEFT PARENTHESIS (Close) × [998.0] LATIN CAPITAL LETTER H (Upper) × [998.0] LATIN SMALL LETTER E (Lower) × [998.0] SPACE (Sp) × [998.0] LATIN SMALL LETTER D (Lower) × [998.0] LATIN SMALL LETTER I (Lower) × [998.0] LATIN SMALL LETTER D (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) ÷ [0.3]
+÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 002E × 0020 × 0069 × 0073 ÷ # ÷ [0.2] LATIN CAPITAL LETTER U (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER S (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] FULL STOP (ATerm) × [8.0] SPACE (Sp) × [8.0] LATIN SMALL LETTER I (Lower) × [998.0] LATIN SMALL LETTER S (Lower) ÷ [0.3]
+÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 003F × 0020 ÷ 0048 × 0065 ÷ # ÷ [0.2] LATIN CAPITAL LETTER U (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER S (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] QUESTION MARK (STerm) × [9.0] SPACE (Sp) ÷ [11.0] LATIN CAPITAL LETTER H (Upper) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0055 × 002E × 0053 × 002E × 0041 × 0300 × 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER U (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER S (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0033 × 002E × 0034 ÷ # ÷ [0.2] DIGIT THREE (Numeric) × [998.0] FULL STOP (ATerm) × [6.0] DIGIT FOUR (Numeric) ÷ [0.3]
+÷ 0063 × 002E × 0064 ÷ # ÷ [0.2] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [8.0] LATIN SMALL LETTER D (Lower) ÷ [0.3]
+÷ 0043 × 002E × 0064 ÷ # ÷ [0.2] LATIN CAPITAL LETTER C (Upper) × [998.0] FULL STOP (ATerm) × [8.0] LATIN SMALL LETTER D (Lower) ÷ [0.3]
+÷ 0063 × 002E × 0044 ÷ # ÷ [0.2] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER D (Upper) ÷ [0.3]
+÷ 0043 × 002E × 0044 ÷ # ÷ [0.2] LATIN CAPITAL LETTER C (Upper) × [998.0] FULL STOP (ATerm) × [7.0] LATIN CAPITAL LETTER D (Upper) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 0074 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [8.0] RIGHT PARENTHESIS (Close) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [8.0] NO-BREAK SPACE (Sp) × [8.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 ÷ 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [9.0] NO-BREAK SPACE (Sp) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 2018 × 0028 × 0074 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [8.0] RIGHT PARENTHESIS (Close) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [8.0] NO-BREAK SPACE (Sp) × [8.0] LEFT SINGLE QUOTATION MARK (Close) × [998.0] LEFT PARENTHESIS (Close) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 ÷ 2018 × 0028 × 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [9.0] NO-BREAK SPACE (Sp) ÷ [11.0] LEFT SINGLE QUOTATION MARK (Close) × [998.0] LEFT PARENTHESIS (Close) × [998.0] LATIN CAPITAL LETTER T (Upper) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 0308 × 0074 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [8.0] RIGHT PARENTHESIS (Close) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [8.0] NO-BREAK SPACE (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) × [8.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 00A0 × 0308 ÷ 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [9.0] NO-BREAK SPACE (Sp) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 2019 × 0308 ÷ 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 0029 × 000A ÷ 0308 × 0054 × 0068 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [9.0] RIGHT PARENTHESIS (Close) × [9.0] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_FE) × [998.0] LATIN CAPITAL LETTER T (Upper) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 0074 × 0068 × 0065 × 0020 × 0072 × 0065 × 0073 × 0070 × 002E × 0020 × 006C × 0065 × 0061 × 0064 × 0065 × 0072 × 0073 × 0020 × 0061 × 0072 × 0065 ÷ # ÷ [0.2] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER H (Lower) × [998.0] LATIN SMALL LETTER E (Lower) × [998.0] SPACE (Sp) × [998.0] LATIN SMALL LETTER R (Lower) × [998.0] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER S (Lower) × [998.0] LATIN SMALL LETTER P (Lower) × [998.0] FULL STOP (ATerm) × [8.0] SPACE (Sp) × [8.0] LATIN SMALL LETTER L (Lower) × [998.0] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER A (Lower) × [998.0] LATIN SMALL LETTER D (Lower) × [998.0] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER R (Lower) × [998.0] LATIN SMALL LETTER S (Lower) × [998.0] SPACE (Sp) × [998.0] LATIN SMALL LETTER A (Lower) × [998.0] LATIN SMALL LETTER R (Lower) × [998.0] LATIN SMALL LETTER E (Lower) ÷ [0.3]
+÷ 5B57 × 002E ÷ 5B57 ÷ # ÷ [0.2] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [998.0] FULL STOP (ATerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E ÷ 5B83 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [0.3]
+÷ 0065 × 0074 × 0063 × 002E × 3002 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [8.1] IDEOGRAPHIC FULL STOP (STerm) ÷ [0.3]
+÷ 5B57 × 3002 ÷ 5B83 ÷ # ÷ [0.2] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [998.0] IDEOGRAPHIC FULL STOP (STerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [0.3]
÷ 0021 × 0020 × 0020 ÷ # ÷ [0.2] EXCLAMATION MARK (STerm) × [9.0] SPACE (Sp) × [10.0] SPACE (Sp) ÷ [0.3]
-÷ 2060 × 0028 × 2060 × 0022 × 2060 × 0047 × 2060 × 006F × 2060 × 002E × 2060 × 0022 × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER G (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER O (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0028 × 2060 × 201C × 2060 × 0047 × 2060 × 006F × 2060 × 003F × 2060 × 201D × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LEFT DOUBLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER G (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER O (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] QUESTION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT DOUBLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 0020 × 2060 × 0069 × 2060 × 0073 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 003F × 2060 × 0020 × 2060 ÷ 0048 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] QUESTION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0033 × 2060 × 002E × 2060 × 0034 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] DIGIT THREE (Numeric) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [6.0] DIGIT FOUR (Numeric) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0063 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0043 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER C (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0063 × 2060 × 002E × 2060 × 0044 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER D (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0043 × 2060 × 002E × 2060 × 0044 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER C (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER D (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 ÷ 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 2018 × 2060 × 0028 × 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LEFT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 ÷ 2018 × 2060 × 0028 × 2060 × 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 0308 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [8.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 0308 ÷ 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 0308 ÷ 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 000A ÷ 2060 × 0308 × 2060 × 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] <LINE FEED (LF)> (LF) ÷ [4.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 0020 × 2060 × 0072 × 2060 × 0065 × 2060 × 0073 × 2060 × 0070 × 2060 × 002E × 2060 × 0020 × 2060 × 006C × 2060 × 0065 × 2060 × 0061 × 2060 × 0064 × 2060 × 0065 × 2060 × 0072 × 2060 × 0073 × 2060 × 0020 × 2060 × 0061 × 2060 × 0072 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER R (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER P (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER L (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER R (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER R (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 5B57 × 2060 × 002E × 2060 ÷ 5B57 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 3002 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.1] IDEOGRAPHIC FULL STOP (STerm) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 5B57 × 2060 × 3002 × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [12.0] IDEOGRAPHIC FULL STOP (STerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 × 0021 × 2060 × 0020 × 2060 × 0020 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [12.0] EXCLAMATION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [10.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Other) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (Other) × [12.0] REGIONAL INDICATOR SYMBOL LETTER C (Other) ÷ [0.3]
-÷ 1F1E6 × 200D × 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Other) × [5.0] ZERO WIDTH JOINER (Extend_FE) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (Other) × [12.0] REGIONAL INDICATOR SYMBOL LETTER C (Other) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 × 200D × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Other) × [12.0] REGIONAL INDICATOR SYMBOL LETTER B (Other) × [5.0] ZERO WIDTH JOINER (Extend_FE) × [12.0] REGIONAL INDICATOR SYMBOL LETTER C (Other) ÷ [0.3]
-÷ 0020 × 200D × 0646 ÷ # ÷ [0.2] SPACE (Sp) × [5.0] ZERO WIDTH JOINER (Extend_FE) × [12.0] ARABIC LETTER NOON (OLetter) ÷ [0.3]
-÷ 0646 × 200D × 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (OLetter) × [5.0] ZERO WIDTH JOINER (Extend_FE) × [12.0] SPACE (Sp) ÷ [0.3]
+÷ 2060 × 0028 × 2060 × 0022 × 2060 × 0047 × 2060 × 006F × 2060 × 002E × 2060 × 0022 × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER G (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER O (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0028 × 2060 × 201C × 2060 × 0047 × 2060 × 006F × 2060 × 003F × 2060 × 201D × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LEFT DOUBLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER G (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER O (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] QUESTION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT DOUBLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 0020 × 2060 × 0069 × 2060 × 0073 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 003F × 2060 × 0020 × 2060 ÷ 0048 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] QUESTION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0033 × 2060 × 002E × 2060 × 0034 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] DIGIT THREE (Numeric) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [6.0] DIGIT FOUR (Numeric) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0063 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0043 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER C (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0063 × 2060 × 002E × 2060 × 0044 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER D (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0043 × 2060 × 002E × 2060 × 0044 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER C (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER D (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 ÷ 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 2018 × 2060 × 0028 × 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LEFT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 ÷ 2018 × 2060 × 0028 × 2060 × 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 0308 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [8.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [8.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 00A0 × 2060 × 0308 ÷ 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] NO-BREAK SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 2019 × 2060 × 0308 ÷ 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT SINGLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) ÷ [11.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 0029 × 2060 × 000A ÷ 2060 × 0308 × 2060 × 0054 × 2060 × 0068 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] <LINE FEED (LF)> (LF) ÷ [4.0] WORD JOINER (Format_FE) × [5.0] COMBINING DIAERESIS (Extend_FE) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER T (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0074 × 2060 × 0068 × 2060 × 0065 × 2060 × 0020 × 2060 × 0072 × 2060 × 0065 × 2060 × 0073 × 2060 × 0070 × 2060 × 002E × 2060 × 0020 × 2060 × 006C × 2060 × 0065 × 2060 × 0061 × 2060 × 0064 × 2060 × 0065 × 2060 × 0072 × 2060 × 0073 × 2060 × 0020 × 2060 × 0061 × 2060 × 0072 × 2060 × 0065 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER H (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER R (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER P (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER L (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER R (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER R (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 5B57 × 2060 × 002E × 2060 ÷ 5B57 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 3002 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.1] IDEOGRAPHIC FULL STOP (STerm) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 5B57 × 2060 × 3002 × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [998.0] IDEOGRAPHIC FULL STOP (STerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0021 × 2060 × 0020 × 2060 × 0020 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] EXCLAMATION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [10.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
#
-# Lines: 503
+# Lines: 502
#
# EOF
diff --git a/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt b/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt
index 7e163f1e41..63761026ce 100644
--- a/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt
+++ b/tests/auto/corelib/tools/qtextboundaryfinder/data/WordBreakTest.txt
@@ -1,22 +1,24 @@
-# WordBreakTest-8.0.0.txt
-# Date: 2015-05-02, 14:48:55 GMT [MD]
+# WordBreakTest-10.0.0.txt
+# Date: 2017-04-14, 05:40:44 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
-# Default Word Break Test
+# Default Word_Break Test
#
# Format:
-# <string> (# <comment>)?
-# <string> contains hex Unicode code points, with
-# ÷ wherever there is a break opportunity, and
+# <string> (# <comment>)?
+# <string> contains hex Unicode code points, with
+# ÷ wherever there is a break opportunity, and
# × wherever there is not.
# <comment> the format can change, but currently it shows:
# - the sample character name
# - (x) the Word_Break property value for the sample character
-# - [x] the rule that determines whether there is a break or not
+# - [x] the rule that determines whether there is a break or not,
+# as listed in the Rules section of WordBreakTest.html
#
# These samples may be extended or changed in the future.
#
@@ -42,18 +44,28 @@
÷ 0001 × 0308 ÷ 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0001 ÷ 005F ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0001 × 0308 ÷ 005F ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0001 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0001 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0001 ÷ 05D0 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0001 × 0308 ÷ 05D0 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0001 ÷ 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0001 × 0308 ÷ 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0001 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0001 × 0308 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0001 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0001 × 0308 ÷ 261D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0001 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0001 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0001 ÷ 2640 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0001 × 0308 ÷ 2640 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0001 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0001 × 0308 ÷ 1F466 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0001 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0001 × 0308 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0001 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0001 × 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0001 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0001 × 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0001 ÷ 0061 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0001 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0001 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -94,18 +106,28 @@
÷ 000D ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 000D ÷ 005F ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 000D ÷ 05D0 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 000D ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 000D ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 000D ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000D ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000D ÷ 2640 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000D ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] BOY (EBG) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 000D ÷ 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000D ÷ 0308 × 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 000D ÷ 0061 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -146,18 +168,28 @@
÷ 000A ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 000A ÷ 005F ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 000A ÷ 05D0 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 000A ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 000A ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 000A ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000A ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000A ÷ 2640 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000A ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] BOY (EBG) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 000A ÷ 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000A ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 000A ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -198,18 +230,28 @@
÷ 000B ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 000B ÷ 005F ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 000B ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000B ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 000B ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 000B ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 000B ÷ 05D0 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 000B ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 000B ÷ 0022 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 000B ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 000B ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 000B ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 000B ÷ 261D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000B ÷ 0308 ÷ 261D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 000B ÷ 1F3FB ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000B ÷ 0308 ÷ 1F3FB ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 000B ÷ 2640 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000B ÷ 0308 ÷ 2640 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 000B ÷ 1F466 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] BOY (EBG) ÷ [0.3]
+÷ 000B ÷ 0308 ÷ 1F466 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 000B ÷ 00AD ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000B ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 000B ÷ 0300 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 000B ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 000B ÷ 200D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 000B ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 000B ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000B ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000B ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -250,18 +292,28 @@
÷ 3031 × 0308 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 3031 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 3031 × 0308 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 3031 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 3031 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 3031 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 3031 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 3031 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 3031 × 0308 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 3031 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 3031 × 0308 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 3031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 3031 × 0308 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 3031 ÷ 261D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 3031 × 0308 ÷ 261D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 3031 ÷ 1F3FB ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 3031 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 3031 ÷ 2640 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 3031 × 0308 ÷ 2640 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 3031 ÷ 1F466 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 3031 × 0308 ÷ 1F466 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 3031 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 3031 × 0308 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 3031 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 3031 × 0308 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 3031 × 200D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 3031 × 0308 × 200D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 3031 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 3031 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 3031 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -302,18 +354,28 @@
÷ 0041 × 0308 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0041 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0041 × 0308 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0041 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0041 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0041 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0041 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0041 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0041 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0041 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0041 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0041 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0041 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0041 ÷ 261D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0041 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0041 ÷ 1F3FB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0041 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0041 ÷ 2640 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0041 × 0308 ÷ 2640 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0041 ÷ 1F466 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0041 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0041 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0041 × 0308 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0041 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0041 × 0308 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0041 × 200D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0041 × 0308 × 200D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0041 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0041 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0041 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -354,18 +416,28 @@
÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 003A ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 003A ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 003A ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 003A ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 003A ÷ 261D ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 003A × 0308 ÷ 261D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 003A ÷ 1F3FB ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 003A × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 003A ÷ 2640 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 003A × 0308 ÷ 2640 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 003A ÷ 1F466 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 003A × 0308 ÷ 1F466 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 003A × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 003A × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 003A × 200D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 003A × 0308 × 200D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 003A ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -406,18 +478,28 @@
÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 002C ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 002C ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 002C ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 002C ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 002C ÷ 261D ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 002C × 0308 ÷ 261D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 002C ÷ 1F3FB ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 002C × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 002C ÷ 2640 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 002C × 0308 ÷ 2640 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 002C ÷ 1F466 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 002C × 0308 ÷ 1F466 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 002C × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 002C × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 002C × 200D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 002C × 0308 × 200D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -458,18 +540,28 @@
÷ 002E × 0308 ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 002E ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 002E × 0308 ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 002E ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 002E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 002E ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 002E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 002E ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 002E × 0308 ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 002E ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 002E × 0308 ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 002E ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 002E × 0308 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 002E ÷ 261D ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 002E × 0308 ÷ 261D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 002E ÷ 1F3FB ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 002E × 0308 ÷ 1F3FB ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 002E ÷ 2640 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 002E × 0308 ÷ 2640 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 002E ÷ 1F466 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 002E × 0308 ÷ 1F466 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 002E × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 002E × 0308 × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 002E × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 002E × 0308 × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 002E × 200D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 002E × 0308 × 200D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 002E ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 002E × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 002E ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -510,18 +602,28 @@
÷ 0030 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0030 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0030 × 0308 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0030 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0030 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0030 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0030 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0030 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0030 × 0308 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0030 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0030 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0030 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0030 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0030 ÷ 261D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0030 × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0030 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0030 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0030 ÷ 2640 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0030 × 0308 ÷ 2640 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0030 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0030 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0030 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0030 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0030 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0030 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0030 × 200D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0030 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0030 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0030 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0030 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -562,18 +664,28 @@
÷ 005F × 0308 × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 005F × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 005F × 0308 × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 005F ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 005F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 005F ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 005F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 005F × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 005F × 0308 × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 005F ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 005F × 0308 ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 005F ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 005F × 0308 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 005F ÷ 261D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 005F × 0308 ÷ 261D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 005F ÷ 1F3FB ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 005F × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 005F ÷ 2640 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 005F × 0308 ÷ 2640 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 005F ÷ 1F466 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 005F × 0308 ÷ 1F466 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 005F × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 005F × 0308 × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 005F × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 005F × 0308 × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 005F × 200D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 005F × 0308 × 200D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 005F × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 005F × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 005F × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -592,58 +704,68 @@
÷ 005F × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 005F × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 005F × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 1F1E6 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 1F1E6 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 1F1E6 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 1F1E6 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 1F1E6 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 1F1E6 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 0308 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.3] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 1F1E6 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F1E6 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 1F1E6 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 1F1E6 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F1E6 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F1E6 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F1E6 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 1F1E6 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 1F1E6 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F1E6 × 0308 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [15.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F1E6 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 1F1E6 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 1F1E6 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F1E6 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 261D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F1E6 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F1E6 ÷ 2640 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 2640 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F1E6 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 1F466 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F1E6 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 1F1E6 × 0308 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 1F1E6 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F1E6 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F1E6 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F1E6 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F1E6 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F1E6 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F1E6 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F1E6 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F1E6 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 05D0 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 05D0 × 0308 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 05D0 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -666,18 +788,28 @@
÷ 05D0 × 0308 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 05D0 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 05D0 × 0308 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 05D0 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 05D0 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 05D0 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 05D0 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 05D0 × 0308 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 05D0 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 05D0 × 0308 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 05D0 × 0308 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 05D0 ÷ 261D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 05D0 × 0308 ÷ 261D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 05D0 ÷ 1F3FB ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 05D0 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 05D0 ÷ 2640 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 05D0 × 0308 ÷ 2640 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 05D0 ÷ 1F466 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 05D0 × 0308 ÷ 1F466 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 05D0 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 05D0 × 0308 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 05D0 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 05D0 × 0308 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 05D0 × 200D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 05D0 × 0308 × 200D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 05D0 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 05D0 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 05D0 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -718,18 +850,28 @@
÷ 0022 × 0308 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0022 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0022 × 0308 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0022 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0022 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0022 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0022 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0022 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0022 × 0308 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0022 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0022 × 0308 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0022 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0022 × 0308 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0022 ÷ 261D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0022 × 0308 ÷ 261D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0022 ÷ 1F3FB ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0022 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0022 ÷ 2640 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0022 × 0308 ÷ 2640 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0022 ÷ 1F466 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0022 × 0308 ÷ 1F466 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0022 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0022 × 0308 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0022 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0022 × 0308 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0022 × 200D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0022 × 0308 × 200D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0022 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0022 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0022 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -770,18 +912,28 @@
÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0027 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0027 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0027 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0027 ÷ 261D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0027 × 0308 ÷ 261D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0027 ÷ 1F3FB ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0027 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0027 ÷ 2640 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0027 × 0308 ÷ 2640 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0027 ÷ 1F466 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0027 × 0308 ÷ 1F466 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0027 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0027 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0027 × 200D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -800,6 +952,254 @@
÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 261D ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 261D × 0308 ÷ 0001 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 261D ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 261D × 0308 ÷ 000D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 261D ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 261D × 0308 ÷ 000A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 261D ÷ 000B ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 261D × 0308 ÷ 000B ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 261D ÷ 3031 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 261D × 0308 ÷ 3031 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 261D ÷ 0041 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 261D × 0308 ÷ 0041 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 261D ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 261D × 0308 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 261D ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 261D × 0308 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 261D ÷ 002E ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 261D × 0308 ÷ 002E ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 261D ÷ 0030 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 261D × 0308 ÷ 0030 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 261D ÷ 005F ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 261D × 0308 ÷ 005F ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 261D ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 261D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 261D ÷ 05D0 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 261D × 0308 ÷ 05D0 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 261D ÷ 0022 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 261D × 0308 ÷ 0022 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 261D ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 261D × 0308 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 261D ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 261D × 0308 ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 261D × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 261D × 0308 × 1F3FB ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 261D ÷ 2640 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 261D × 0308 ÷ 2640 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 261D ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 261D × 0308 ÷ 1F466 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 261D × 00AD ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 261D × 0308 × 00AD ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 261D × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 261D × 0308 × 0300 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 261D × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 261D × 0308 × 200D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 261D ÷ 0061 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 261D × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 261D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 261D × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 261D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 261D × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 261D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 261D × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 261D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 261D × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 261D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 261D × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 261D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 261D × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 261D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 261D × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 261D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 261D × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F3FB ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0001 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 1F3FB ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 000D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F3FB ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 000A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F3FB ÷ 000B ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 000B ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 1F3FB ÷ 3031 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 3031 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 1F3FB ÷ 0041 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0041 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F3FB ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F3FB ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F3FB ÷ 002E ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 002E ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 1F3FB ÷ 0030 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0030 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 1F3FB ÷ 005F ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 005F ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 1F3FB ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F3FB ÷ 05D0 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 05D0 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 1F3FB ÷ 0022 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0022 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 1F3FB ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F3FB ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 261D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F3FB ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1F3FB ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F3FB ÷ 2640 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 2640 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F3FB ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 1F466 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F3FB × 00AD ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 1F3FB × 0308 × 00AD ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 1F3FB × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 1F3FB × 0308 × 0300 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 1F3FB × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 1F3FB × 0308 × 200D ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 1F3FB ÷ 0061 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F3FB ÷ 0061 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F3FB ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F3FB ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F3FB ÷ 0061 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F3FB ÷ 0031 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F3FB ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F3FB ÷ 0031 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F3FB ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F3FB × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2640 ÷ 0001 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0001 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 2640 ÷ 000D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 2640 × 0308 ÷ 000D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 2640 ÷ 000A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 2640 × 0308 ÷ 000A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 2640 ÷ 000B ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 2640 × 0308 ÷ 000B ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 2640 ÷ 3031 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 2640 × 0308 ÷ 3031 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 2640 ÷ 0041 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0041 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 2640 ÷ 003A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 2640 × 0308 ÷ 003A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 2640 ÷ 002C ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 2640 × 0308 ÷ 002C ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 2640 ÷ 002E ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 2640 × 0308 ÷ 002E ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 2640 ÷ 0030 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0030 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 2640 ÷ 005F ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 2640 × 0308 ÷ 005F ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 2640 ÷ 1F1E6 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 2640 ÷ 05D0 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 2640 × 0308 ÷ 05D0 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 2640 ÷ 0022 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0022 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 2640 ÷ 0027 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0027 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 2640 ÷ 261D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 2640 × 0308 ÷ 261D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 2640 ÷ 1F3FB ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 2640 ÷ 2640 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 2640 × 0308 ÷ 2640 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 2640 ÷ 1F466 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 2640 × 0308 ÷ 1F466 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 2640 × 00AD ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 2640 × 0308 × 00AD ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 2640 × 0300 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 2640 × 0308 × 0300 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 2640 × 200D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 2640 × 0308 × 200D ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 2640 ÷ 0061 × 2060 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2640 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 2640 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 2640 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2640 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 2640 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 2640 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 2640 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 2640 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2640 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FEMALE SIGN (Glue_After_Zwj) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F466 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0001 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 1F466 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 000D ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 1F466 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 000A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 1F466 ÷ 000B ÷ # ÷ [0.2] BOY (EBG) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 000B ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 1F466 ÷ 3031 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 3031 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 1F466 ÷ 0041 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0041 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F466 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F466 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F466 ÷ 002E ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 002E ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 1F466 ÷ 0030 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0030 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 1F466 ÷ 005F ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 005F ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 1F466 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 1F466 ÷ 05D0 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 05D0 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 1F466 ÷ 0022 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0022 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 1F466 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F466 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 261D ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F466 × 0308 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 1F466 ÷ 2640 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 2640 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 1F466 × 00AD ÷ # ÷ [0.2] BOY (EBG) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 1F466 × 0308 × 00AD ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 1F466 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 1F466 × 0308 × 0300 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 1F466 × 200D ÷ # ÷ [0.2] BOY (EBG) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 1F466 × 0308 × 200D ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 1F466 ÷ 0061 × 2060 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F466 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F466 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F466 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F466 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F466 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 1F466 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 1F466 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 1F466 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 1F466 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] BOY (EBG) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 00AD ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 00AD × 0308 ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 00AD ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -822,18 +1222,28 @@
÷ 00AD × 0308 ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 00AD ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 00AD × 0308 ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 00AD ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 00AD × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 00AD ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 00AD × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 00AD ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 00AD × 0308 ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 00AD ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 00AD × 0308 ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 00AD ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 00AD × 0308 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 00AD ÷ 261D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 00AD × 0308 ÷ 261D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 00AD ÷ 1F3FB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 00AD × 0308 ÷ 1F3FB ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 00AD ÷ 2640 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 00AD × 0308 ÷ 2640 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 00AD ÷ 1F466 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 00AD × 0308 ÷ 1F466 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 00AD × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 00AD × 0308 × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 00AD × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 00AD × 0308 × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 00AD × 200D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 00AD × 0308 × 200D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 00AD ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 00AD × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 00AD ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -874,18 +1284,28 @@
÷ 0300 × 0308 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0300 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0300 × 0308 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0300 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0300 × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0300 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0300 × 0308 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0300 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0300 × 0308 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0300 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0300 × 0308 ÷ 261D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0300 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0300 ÷ 2640 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0300 × 0308 ÷ 2640 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0300 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0300 × 0308 ÷ 1F466 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0300 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0300 × 0308 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0300 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0300 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0300 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -904,6 +1324,68 @@
÷ 0300 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 0300 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0300 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 200D ÷ 000B ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 200D × 0308 ÷ 000B ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 200D ÷ 3031 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 200D × 0308 ÷ 3031 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 200D ÷ 0041 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 200D × 0308 ÷ 0041 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 200D ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 200D × 0308 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 200D ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 200D × 0308 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 200D ÷ 002E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 200D × 0308 ÷ 002E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 200D ÷ 0030 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 200D × 0308 ÷ 0030 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 200D ÷ 005F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 200D × 0308 ÷ 005F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 200D ÷ 05D0 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 200D × 0308 ÷ 05D0 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 200D ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 200D × 0308 ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 200D ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 200D × 0308 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 200D ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 200D × 0308 ÷ 261D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 200D ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 0308 ÷ 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 2640 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 200D × 0308 ÷ 2640 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BOY (EBG) ÷ [0.3]
+÷ 200D × 0308 ÷ 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 200D × 00AD ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 200D × 0308 × 00AD ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 200D ÷ 0061 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 200D × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 200D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 200D × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 200D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 200D × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 200D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 200D × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 200D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 200D × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 200D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 200D × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 200D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 200D × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 200D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 200D × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 200D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 200D × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 0061 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 0061 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -926,18 +1408,28 @@
÷ 0061 × 2060 × 0308 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0061 × 2060 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0061 × 2060 × 0308 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0061 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0061 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0061 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0061 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0061 × 2060 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 × 2060 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 × 2060 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 × 2060 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 × 2060 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 × 2060 × 0308 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 × 2060 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0061 × 2060 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0061 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0061 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0061 × 2060 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0061 × 2060 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0061 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -978,18 +1470,28 @@
÷ 0061 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0061 ÷ 003A ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0061 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0061 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0061 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0061 × 003A × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 × 003A × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0061 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0061 ÷ 003A ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 003A × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 003A ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 003A × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 003A ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 003A × 0308 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 003A ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0061 ÷ 003A × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0061 ÷ 003A × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 003A × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0061 ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0061 ÷ 003A × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0061 ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0061 × 003A × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 003A × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 003A × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1030,18 +1532,28 @@
÷ 0061 ÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0061 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0061 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0061 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0061 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0061 × 0027 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 × 0027 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0061 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0061 ÷ 0027 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 0027 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 0027 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 0027 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 0027 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 0027 × 0308 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 0027 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0061 ÷ 0027 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0061 ÷ 0027 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 0027 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0061 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0061 ÷ 0027 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0061 ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0061 × 0027 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 0027 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 0027 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1082,18 +1594,28 @@
÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0061 × 0027 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 × 0027 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0061 ÷ 0027 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0061 ÷ 0027 × 2060 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0061 × 0027 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 0027 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 × 0027 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1134,18 +1656,28 @@
÷ 0061 ÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0061 ÷ 002C ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0061 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0061 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0061 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0061 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0061 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0061 ÷ 002C ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 002C × 0308 ÷ 261D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0061 ÷ 002C ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 002C × 0308 ÷ 1F3FB ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0061 ÷ 002C ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 002C × 0308 ÷ 2640 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0061 ÷ 002C ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0061 ÷ 002C × 0308 ÷ 1F466 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0061 ÷ 002C × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0061 ÷ 002C × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0061 ÷ 002C × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0061 ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0061 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0061 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1186,18 +1718,28 @@
÷ 0031 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0031 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0031 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0031 ÷ 003A ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 003A × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 003A ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 003A × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 003A ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 003A × 0308 ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 003A ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0031 ÷ 003A × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0031 ÷ 003A × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 003A × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0031 ÷ 003A × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0031 ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1238,18 +1780,28 @@
÷ 0031 × 0027 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0031 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0031 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0031 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0031 ÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0031 ÷ 0027 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 0027 × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 0027 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 0027 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 0027 ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 0027 × 0308 ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 0027 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0031 ÷ 0027 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0031 ÷ 0027 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 0027 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0031 ÷ 0027 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0031 ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0031 ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1290,18 +1842,28 @@
÷ 0031 × 002C × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0031 ÷ 002C ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0031 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0031 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0031 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0031 ÷ 002C ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 002C × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 002C ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 002C × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 002C ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 002C × 0308 ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 002C ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0031 ÷ 002C × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0031 ÷ 002C × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002C × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0031 ÷ 002C × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0031 ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0031 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1342,18 +1904,28 @@
÷ 0031 × 002E × 2060 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 0308 ÷ 261D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F3FB ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 0308 ÷ 2640 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F466 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] BOY (EBG) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0031 ÷ 002E × 2060 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
@@ -1372,35 +1944,33 @@
÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 0031 × 002E × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0063 × 0061 × 006E × 0027 × 0074 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER N (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER T (ALetter) ÷ [0.3]
-÷ 0063 × 0061 × 006E × 2019 × 0074 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER N (ALetter) × [6.0] RIGHT SINGLE QUOTATION MARK (MidNumLet) × [7.0] LATIN SMALL LETTER T (ALetter) ÷ [0.3]
-÷ 0061 × 0062 × 00AD × 0062 × 0079 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER B (ALetter) × [4.0] SOFT HYPHEN (Format_FE) × [5.0] LATIN SMALL LETTER B (ALetter) × [5.0] LATIN SMALL LETTER Y (ALetter) ÷ [0.3]
-÷ 0061 ÷ 0024 ÷ 002D ÷ 0033 × 0034 × 002C × 0035 × 0036 × 0037 × 002E × 0031 × 0034 ÷ 0025 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] DOLLAR SIGN (Other) ÷ [999.0] HYPHEN-MINUS (Other) ÷ [999.0] DIGIT THREE (Numeric) × [8.0] DIGIT FOUR (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT FIVE (Numeric) × [8.0] DIGIT SIX (Numeric) × [8.0] DIGIT SEVEN (Numeric) × [12.0] FULL STOP (MidNumLet) × [11.0] DIGIT ONE (Numeric) × [8.0] DIGIT FOUR (Numeric) ÷ [999.0] PERCENT SIGN (Other) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0033 × 0061 ÷ # ÷ [0.2] DIGIT THREE (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0063 × 002E × 0064 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [6.0] FULL STOP (MidNumLet) × [7.0] LATIN SMALL LETTER D (ALetter) ÷ [0.3]
-÷ 0043 × 002E × 0064 ÷ # ÷ [0.2] LATIN CAPITAL LETTER C (ALetter) × [6.0] FULL STOP (MidNumLet) × [7.0] LATIN SMALL LETTER D (ALetter) ÷ [0.3]
-÷ 0063 × 002E × 0044 ÷ # ÷ [0.2] LATIN SMALL LETTER C (ALetter) × [6.0] FULL STOP (MidNumLet) × [7.0] LATIN CAPITAL LETTER D (ALetter) ÷ [0.3]
-÷ 0043 × 002E × 0044 ÷ # ÷ [0.2] LATIN CAPITAL LETTER C (ALetter) × [6.0] FULL STOP (MidNumLet) × [7.0] LATIN CAPITAL LETTER D (ALetter) ÷ [0.3]
-÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 0027 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER N (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER T (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0063 × 2060 × 0061 × 2060 × 006E × 2060 × 2019 × 2060 × 0074 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER N (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] RIGHT SINGLE QUOTATION MARK (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER T (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0061 × 2060 × 0062 × 2060 × 00AD × 2060 × 0062 × 2060 × 0079 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER B (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER B (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER Y (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0061 × 2060 ÷ 0024 × 2060 ÷ 002D × 2060 ÷ 0033 × 2060 × 0034 × 2060 × 002C × 2060 × 0035 × 2060 × 0036 × 2060 × 0037 × 2060 × 002E × 2060 × 0031 × 2060 × 0034 × 2060 ÷ 0025 × 2060 ÷ 0062 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DOLLAR SIGN (Other) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HYPHEN-MINUS (Other) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT THREE (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT FOUR (Numeric) × [4.0] WORD JOINER (Format_FE) × [12.0] COMMA (MidNum) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT FIVE (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT SIX (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT SEVEN (Numeric) × [4.0] WORD JOINER (Format_FE) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) × [4.0] WORD JOINER (Format_FE) × [8.0] DIGIT FOUR (Numeric) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] PERCENT SIGN (Other) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER B (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0033 × 2060 × 0061 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] DIGIT THREE (Numeric) × [4.0] WORD JOINER (Format_FE) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0063 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER D (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0043 × 2060 × 002E × 2060 × 0064 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN CAPITAL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER D (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0063 × 2060 × 002E × 2060 × 0044 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER D (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 2060 ÷ 0043 × 2060 × 002E × 2060 × 0044 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) ÷ [999.0] LATIN CAPITAL LETTER C (ALetter) × [4.0] WORD JOINER (Format_FE) × [6.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER D (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 1F1E6 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 1F1F7 × 1F1FA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) ÷ [0.3]
-÷ 1F1F7 × 1F1FA × 1F1F8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) ÷ [0.3]
-÷ 1F1F7 × 1F1FA × 1F1F8 × 1F1EA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER E (Regional_Indicator) ÷ [0.3]
-÷ 1F1F7 × 1F1FA ÷ 200B ÷ 1F1F8 × 1F1EA ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER R (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER U (Regional_Indicator) ÷ [999.0] ZERO WIDTH SPACE (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER S (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER E (Regional_Indicator) ÷ [0.3]
+÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
+÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
+÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3]
+÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0041 × 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 0041 × 003A × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 0041 ÷ 003A ÷ 003A ÷ 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 05D0 × 0022 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.2] QUOTATION MARK (Double_Quote) × [7.3] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 200D × 1F1E7 × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [4.0] ZERO WIDTH JOINER (Extend_FE) × [13.3] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 × 200D × 1F1E8 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (Regional_Indicator) × [13.3] REGIONAL INDICATOR SYMBOL LETTER B (Regional_Indicator) × [4.0] ZERO WIDTH JOINER (Extend_FE) × [13.3] REGIONAL INDICATOR SYMBOL LETTER C (Regional_Indicator) ÷ [0.3]
-÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (Other) × [4.0] ZERO WIDTH JOINER (Extend_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3]
-÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (Extend_FE) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0041 × 0030 × 0030 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ZERO (Numeric) × [8.0] DIGIT ZERO (Numeric) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 0030 × 002C × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0030 ÷ 002C ÷ 002C ÷ 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 3031 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 0041 × 005F × 0030 × 005F × 3031 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 0041 × 005F × 005F × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 200D × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
+÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
+÷ 261D × 1F3FB ÷ 261D ÷ # ÷ [0.2] WHITE UP POINTING INDEX (E_Base) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [999.0] WHITE UP POINTING INDEX (E_Base) ÷ [0.3]
+÷ 1F466 × 1F3FB ÷ # ÷ [0.2] BOY (EBG) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 1F466 × 1F3FB ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BOY (EBG) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (E_Modifier) ÷ [0.3]
+÷ 200D × 2640 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] FEMALE SIGN (Glue_After_Zwj) ÷ [0.3]
+÷ 200D × 1F466 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BOY (EBG) ÷ [0.3]
+÷ 1F466 ÷ 1F466 ÷ # ÷ [0.2] BOY (EBG) ÷ [999.0] BOY (EBG) ÷ [0.3]
+÷ 0061 × 0308 × 200D × 0308 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
÷ 0031 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
÷ 0031 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
@@ -1510,6 +2080,6 @@
÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
#
-# Lines: 1489
+# Lines: 2057
#
# EOF
diff --git a/tests/auto/corelib/tools/qtime/tst_qtime.cpp b/tests/auto/corelib/tools/qtime/tst_qtime.cpp
index 162047b537..3e5724213e 100644
--- a/tests/auto/corelib/tools/qtime/tst_qtime.cpp
+++ b/tests/auto/corelib/tools/qtime/tst_qtime.cpp
@@ -562,6 +562,7 @@ void tst_QTime::fromStringFormat_data()
QTest::newRow("data11") << QString("02:23pm") << QString("hh:mmap") << QTime(14,23,0,0);
QTest::newRow("short-msecs-lt100") << QString("10:12:34:045") << QString("hh:m:ss:z") << QTime(10,12,34,45);
QTest::newRow("short-msecs-gt100") << QString("10:12:34:45") << QString("hh:m:ss:z") << QTime(10,12,34,450);
+ QTest::newRow("late") << QString("23:59:59.999") << QString("hh:mm:ss.z") << QTime(23, 59, 59, 999);
}
void tst_QTime::fromStringFormat()
diff --git a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
index 9f22c3d51d..cb963ceeb6 100644
--- a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
+++ b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
@@ -45,8 +45,12 @@ private slots:
void dataStreamTest();
void isTimeZoneIdAvailable();
void availableTimeZoneIds();
+ void specificTransition_data();
+ void specificTransition();
void transitionEachZone_data();
void transitionEachZone();
+ void checkOffset_data();
+ void checkOffset();
void stressTest();
void windowsId();
void isValidId_data();
@@ -396,6 +400,66 @@ void tst_QTimeZone::isTimeZoneIdAvailable()
#endif // QT_BUILD_INTERNAL
}
+void tst_QTimeZone::specificTransition_data()
+{
+ QTest::addColumn<QByteArray>("zone");
+ QTest::addColumn<QDate>("start");
+ QTest::addColumn<QDate>("stop");
+ QTest::addColumn<int>("count");
+ QTest::addColumn<QDateTime>("atUtc");
+ // In minutes:
+ QTest::addColumn<int>("offset");
+ QTest::addColumn<int>("stdoff");
+ QTest::addColumn<int>("dstoff");
+
+ // Moscow ditched DST on 2010-10-31 but has since changed standard offset twice.
+#ifdef Q_OS_WIN
+ // Win7 is too old to know about this transition:
+ if (QOperatingSystemVersion::current() > QOperatingSystemVersion::Windows7)
+#endif
+ {
+ QTest::newRow("Moscow/2014") // From original bug-report
+ << QByteArray("Europe/Moscow")
+ << QDate(2011, 4, 1) << QDate(2017, 12,31) << 1
+ << QDateTime(QDate(2014, 10, 26), QTime(2, 0, 0),
+ Qt::OffsetFromUTC, 4 * 3600).toUTC()
+ << 3 * 3600 << 3 * 3600 << 0;
+ }
+ QTest::newRow("Moscow/2011") // Transition on 2011-03-27
+ << QByteArray("Europe/Moscow")
+ << QDate(2010, 11, 1) << QDate(2014, 10, 25) << 1
+ << QDateTime(QDate(2011, 3, 27), QTime(2, 0, 0),
+ Qt::OffsetFromUTC, 3 * 3600).toUTC()
+ << 4 * 3600 << 4 * 3600 << 0;
+}
+
+void tst_QTimeZone::specificTransition()
+{
+ // Regression test for QTBUG-42021 (on MS-Win)
+ QFETCH(QByteArray, zone);
+ QFETCH(QDate, start);
+ QFETCH(QDate, stop);
+ QFETCH(int, count);
+ // No attempt to check abbreviations; to much cross-platform variation.
+ QFETCH(QDateTime, atUtc);
+ QFETCH(int, offset);
+ QFETCH(int, stdoff);
+ QFETCH(int, dstoff);
+
+ QTimeZone timeZone(zone);
+ if (!timeZone.isValid())
+ QSKIP("Missing time-zone data");
+ QTimeZone::OffsetDataList transits =
+ timeZone.transitions(QDateTime(start, QTime(0, 0), timeZone),
+ QDateTime(stop, QTime(23, 59), timeZone));
+ QCOMPARE(transits.length(), count);
+ const QTimeZone::OffsetData &transition = transits.at(0);
+ QCOMPARE(transition.offsetFromUtc, offset);
+ QCOMPARE(transition.standardTimeOffset, stdoff);
+ QCOMPARE(transition.daylightTimeOffset, dstoff);
+ QCOMPARE(transition.atUtc, atUtc);
+}
+
void tst_QTimeZone::transitionEachZone_data()
{
QTest::addColumn<QByteArray>("zone");
@@ -436,6 +500,14 @@ void tst_QTimeZone::transitionEachZone()
QTimeZone named(zone);
for (int i = start; i < stop; i++) {
+#ifdef Q_OS_WIN
+ // See QTBUG-64985: MS's TZ APIs' misdescription of Europe/Samara leads
+ // to mis-disambiguation of its fall-back here.
+ if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7
+ && zone == "Europe/Samara" && i == -3) {
+ continue;
+ }
+#endif
qint64 here = secs + i * 3600;
QDateTime when = QDateTime::fromMSecsSinceEpoch(here * 1000, named);
qint64 stamp = when.toMSecsSinceEpoch();
@@ -446,6 +518,51 @@ void tst_QTimeZone::transitionEachZone()
}
}
+void tst_QTimeZone::checkOffset_data()
+{
+ QTest::addColumn<QByteArray>("zoneName");
+ QTest::addColumn<QDateTime>("when");
+ QTest::addColumn<int>("netOffset");
+ QTest::addColumn<int>("stdOffset");
+ QTest::addColumn<int>("dstOffset");
+
+ struct {
+ const char *zone, *nick;
+ int year, month, day, hour, min, sec;
+ int std, dst;
+ } table[] = {
+ // Kiev: regression test for QTBUG-64122 (on MS):
+ { "Europe/Kiev", "summer", 2017, 10, 27, 12, 0, 0, 2 * 3600, 3600 },
+ { "Europe/Kiev", "winter", 2017, 10, 29, 12, 0, 0, 2 * 3600, 0 }
+ };
+ for (const auto &entry : table) {
+ QTimeZone zone(entry.zone);
+ if (zone.isValid()) {
+ QTest::addRow("%s@%s", entry.zone, entry.nick)
+ << QByteArray(entry.zone)
+ << QDateTime(QDate(entry.year, entry.month, entry.day),
+ QTime(entry.hour, entry.min, entry.sec), zone)
+ << entry.dst + entry.std << entry.std << entry.dst;
+ }
+ }
+}
+
+void tst_QTimeZone::checkOffset()
+{
+ QFETCH(QByteArray, zoneName);
+ QFETCH(QDateTime, when);
+ QFETCH(int, netOffset);
+ QFETCH(int, stdOffset);
+ QFETCH(int, dstOffset);
+
+ QTimeZone zone(zoneName);
+ QVERIFY(zone.isValid()); // It was when _data() added the row !
+ QCOMPARE(zone.offsetFromUtc(when), netOffset);
+ QCOMPARE(zone.standardTimeOffset(when), stdOffset);
+ QCOMPARE(zone.daylightTimeOffset(when), dstOffset);
+ QCOMPARE(zone.isDaylightTime(when), dstOffset != 0);
+}
+
void tst_QTimeZone::availableTimeZoneIds()
{
if (debug) {
@@ -1177,7 +1294,8 @@ void tst_QTimeZone::testEpochTranPrivate(const QTimeZonePrivate &tzp)
// Pre-epoch time-zones might not be supported at all:
tran = tzp.nextTransition(QDateTime(QDate(1601, 1, 1), QTime(0, 0),
Qt::UTC).toMSecsSinceEpoch());
- if (tran.atMSecsSinceEpoch != QTimeZonePrivate::invalidSeconds()
+ if (tran.atMSecsSinceEpoch != QTimeZonePrivate::invalidMSecs()
+ // Toronto *did* have a transition before 1970 (DST since 1918):
&& tran.atMSecsSinceEpoch < 0) {
// ... but, if they are, we should be able to search back to them:
tran = tzp.previousTransition(0); // i.e. last before epoch
diff --git a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
index 3971353cbb..ced1d08d65 100644
--- a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
+++ b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
@@ -30,6 +30,8 @@
#include <qvarlengtharray.h>
#include <qvariant.h>
+#include <memory>
+
class tst_QVarLengthArray : public QObject
{
Q_OBJECT
@@ -53,6 +55,9 @@ private slots:
void initializeListInt();
void initializeListMovable();
void initializeListComplex();
+ void insertMove();
+ void nonCopyable();
+
private:
template<typename T>
void initializeList();
@@ -287,6 +292,11 @@ struct MyBase
} else {
++errorCount;
}
+ if (!data) {
+ --movedCount;
+ ++liveCount;
+ }
+ data = this;
return *this;
}
@@ -294,36 +304,46 @@ struct MyBase
~MyBase()
{
if (isCopy) {
- if (!copyCount)
+ if (!copyCount || !data)
++errorCount;
else
--copyCount;
}
- if (!liveCount)
- ++errorCount;
- else
- --liveCount;
+ if (data) {
+ if (!liveCount)
+ ++errorCount;
+ else
+ --liveCount;
+ } else
+ --movedCount;
}
- bool hasMoved() const
+ bool wasConstructedAt(const MyBase *that) const
{
- return this != data;
+ return that == data;
}
+ bool hasMoved() const { return !wasConstructedAt(this); }
+
protected:
- MyBase const * const data;
+ MyBase(const MyBase *data, bool isCopy)
+ : data(data), isCopy(isCopy) {}
+
+ const MyBase *data;
bool isCopy;
public:
static int errorCount;
static int liveCount;
static int copyCount;
+ static int movedCount;
};
int MyBase::errorCount = 0;
int MyBase::liveCount = 0;
int MyBase::copyCount = 0;
+int MyBase::movedCount = 0;
struct MyPrimitive
: MyBase
@@ -348,7 +368,39 @@ struct MyPrimitive
struct MyMovable
: MyBase
{
- MyMovable(char input = 'j') : i(input) {}
+ MyMovable(char input = 'j') : MyBase(), i(input) {}
+
+ MyMovable(MyMovable const &other) : MyBase(other), i(other.i) {}
+
+ MyMovable(MyMovable &&other) : MyBase(other.data, other.isCopy), i(other.i)
+ {
+ ++movedCount;
+ other.isCopy = false;
+ other.data = nullptr;
+ }
+
+ MyMovable & operator=(const MyMovable &other)
+ {
+ MyBase::operator=(other);
+ i = other.i;
+ return *this;
+ }
+
+ MyMovable & operator=(MyMovable &&other)
+ {
+ if (isCopy)
+ --copyCount;
+ ++movedCount;
+ if (other.data)
+ --liveCount;
+ isCopy = other.isCopy;
+ data = other.data;
+ other.isCopy = false;
+ other.data = nullptr;
+
+ return *this;
+ }
+
bool operator==(const MyMovable &other) const
{
return i == other.i;
@@ -898,5 +950,83 @@ void tst_QVarLengthArray::initializeList()
#endif
}
+void tst_QVarLengthArray::insertMove()
+{
+ MyBase::errorCount = 0;
+ QCOMPARE(MyBase::liveCount, 0);
+ QCOMPARE(MyBase::copyCount, 0);
+
+ {
+ QVarLengthArray<MyMovable, 4> vec;
+ MyMovable m1;
+ MyMovable m2;
+ MyMovable m3;
+ MyMovable m4;
+ QCOMPARE(MyBase::copyCount, 0);
+ QCOMPARE(MyBase::liveCount, 4);
+
+ vec.append(std::move(m3));
+ QVERIFY(vec.at(0).wasConstructedAt(&m3));
+ QCOMPARE(MyBase::errorCount, 0);
+ QCOMPARE(MyBase::liveCount, 4);
+ QCOMPARE(MyBase::movedCount, 1);
+
+ vec.push_back(std::move(m4));
+ QVERIFY(vec.at(0).wasConstructedAt(&m3));
+ QVERIFY(vec.at(1).wasConstructedAt(&m4));
+ QCOMPARE(MyBase::errorCount, 0);
+ QCOMPARE(MyBase::liveCount, 4);
+ QCOMPARE(MyBase::movedCount, 2);
+
+ vec.prepend(std::move(m1));
+ QVERIFY(vec.at(0).wasConstructedAt(&m1));
+ QVERIFY(vec.at(1).wasConstructedAt(&m3));
+ QVERIFY(vec.at(2).wasConstructedAt(&m4));
+ QCOMPARE(MyBase::errorCount, 0);
+ QCOMPARE(MyBase::liveCount, 4);
+ QCOMPARE(MyBase::movedCount, 3);
+
+ vec.insert(1, std::move(m2));
+ QVERIFY(vec.at(0).wasConstructedAt(&m1));
+ QVERIFY(vec.at(1).wasConstructedAt(&m2));
+ QVERIFY(vec.at(2).wasConstructedAt(&m3));
+
+ QCOMPARE(MyBase::copyCount, 0);
+ QCOMPARE(MyBase::liveCount, 4);
+ QCOMPARE(MyBase::errorCount, 0);
+ QCOMPARE(MyBase::movedCount, 4);
+ }
+ QCOMPARE(MyBase::liveCount, 0);
+ QCOMPARE(MyBase::errorCount, 0);
+ QCOMPARE(MyBase::movedCount, 0);
+}
+
+void tst_QVarLengthArray::nonCopyable()
+{
+ QVarLengthArray<std::unique_ptr<int>> vec;
+ std::unique_ptr<int> val1(new int(1));
+ std::unique_ptr<int> val2(new int(2));
+ std::unique_ptr<int> val3(new int(3));
+ std::unique_ptr<int> val4(new int(4));
+ int *const ptr1 = val1.get();
+ int *const ptr2 = val2.get();
+ int *const ptr3 = val3.get();
+ int *const ptr4 = val4.get();
+
+ vec.append(std::move(val3));
+ QVERIFY(ptr3 == vec.at(0).get());
+ vec.append(std::move(val4));
+ QVERIFY(ptr3 == vec.at(0).get());
+ QVERIFY(ptr4 == vec.at(1).get());
+ vec.prepend(std::move(val1));
+ QVERIFY(ptr1 == vec.at(0).get());
+ QVERIFY(ptr3 == vec.at(1).get());
+ QVERIFY(ptr4 == vec.at(2).get());
+ vec.insert(1, std::move(val2));
+ QVERIFY(ptr1 == vec.at(0).get());
+ QVERIFY(ptr2 == vec.at(1).get());
+ QVERIFY(ptr3 == vec.at(2).get());
+}
+
QTEST_APPLESS_MAIN(tst_QVarLengthArray)
#include "tst_qvarlengtharray.moc"
diff --git a/tests/auto/corelib/tools/qvector/tst_qvector.cpp b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
index 6975452d76..ef10357b6d 100644
--- a/tests/auto/corelib/tools/qvector/tst_qvector.cpp
+++ b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
@@ -35,17 +35,28 @@
struct Movable {
Movable(char input = 'j')
: i(input)
+ , that(this)
, state(Constructed)
{
counter.fetchAndAddRelaxed(1);
}
Movable(const Movable &other)
: i(other.i)
+ , that(this)
, state(Constructed)
{
check(other.state, Constructed);
counter.fetchAndAddRelaxed(1);
}
+ Movable(Movable &&other)
+ : i(other.i)
+ , that(other.that)
+ , state(Constructed)
+ {
+ check(other.state, Constructed);
+ counter.fetchAndAddRelaxed(1);
+ other.that = nullptr;
+ }
~Movable()
{
@@ -67,11 +78,27 @@ struct Movable {
check(state, Constructed);
check(other.state, Constructed);
i = other.i;
+ that = this;
+ return *this;
+ }
+ Movable &operator=(Movable &&other)
+ {
+ check(state, Constructed);
+ check(other.state, Constructed);
+ i = other.i;
+ that = other.that;
+ other.that = nullptr;
return *this;
}
+ bool wasConstructedAt(const Movable *other) const
+ {
+ return that == other;
+ }
char i;
static QAtomicInt counter;
private:
+ Movable *that; // used to check if an instance was moved
+
enum State { Constructed = 106, Destructed = 110 };
State state;
@@ -297,6 +324,8 @@ private slots:
void detachThreadSafetyMovable() const;
void detachThreadSafetyCustom() const;
+ void insertMove() const;
+
private:
template<typename T> void copyConstructor() const;
template<typename T> void add() const;
@@ -2811,7 +2840,7 @@ void tst_QVector::detachThreadSafety() const
static const uint threadsCount = 5;
struct : QThread {
- void run() Q_DECL_OVERRIDE
+ void run() override
{
QVector<T> copy(*detachThreadSafetyData<T>()->load());
QVERIFY(!copy.isDetached());
@@ -2861,6 +2890,34 @@ void tst_QVector::detachThreadSafetyCustom() const
}
}
+void tst_QVector::insertMove() const
+{
+ const int instancesCount = Movable::counter.loadAcquire();
+ {
+ QVector<Movable> vec;
+ Movable m1;
+ Movable m2;
+ Movable m3;
+ Movable m4;
+
+ vec.append(std::move(m3));
+ QVERIFY(vec.at(0).wasConstructedAt(&m3));
+ vec.push_back(std::move(m4));
+ QVERIFY(vec.at(0).wasConstructedAt(&m3));
+ QVERIFY(vec.at(1).wasConstructedAt(&m4));
+ vec.prepend(std::move(m1));
+ QVERIFY(vec.at(0).wasConstructedAt(&m1));
+ QVERIFY(vec.at(1).wasConstructedAt(&m3));
+ QVERIFY(vec.at(2).wasConstructedAt(&m4));
+ vec.insert(1, std::move(m2));
+ QVERIFY(vec.at(0).wasConstructedAt(&m1));
+ QVERIFY(vec.at(1).wasConstructedAt(&m2));
+ QVERIFY(vec.at(2).wasConstructedAt(&m3));
+
+ QCOMPARE(Movable::counter.loadAcquire(), instancesCount + 8);
+ }
+ QCOMPARE(Movable::counter.loadAcquire(), instancesCount);
+}
QTEST_MAIN(tst_QVector)
#include "tst_qvector.moc"
diff --git a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
index 9812d93a50..05579dce6e 100644
--- a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
+++ b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
@@ -586,10 +586,7 @@ void tst_QVersionNumber::serialize()
void tst_QVersionNumber::moveSemantics()
{
-#if defined(_MSC_VER) && _MSC_VER == 1600
-# define Q_MSVC_2010
-#endif
-#if defined(Q_COMPILER_RVALUE_REFS) && !defined(Q_MSVC_2010)
+#ifdef Q_COMPILER_RVALUE_REFS
// QVersionNumber(QVersionNumber &&)
{
QVersionNumber v1(1, 2, 3);
@@ -613,7 +610,7 @@ void tst_QVersionNumber::moveSemantics()
QCOMPARE(v1, v2);
}
#endif
-#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(Q_MSVC_2010)
+#ifdef Q_COMPILER_REF_QUALIFIERS
// normalized()
{
QVersionNumber v(1, 0, 0);
@@ -639,10 +636,8 @@ void tst_QVersionNumber::moveSemantics()
QVERIFY(!segments.empty());
}
#endif
-#if !defined(Q_COMPILER_RVALUE_REFS) && !defined(Q_COMPILER_REF_QUALIFIERS) && !defined(Q_MSVC_2010)
+#if !defined(Q_COMPILER_RVALUE_REFS) && !defined(Q_COMPILER_REF_QUALIFIERS)
QSKIP("This test requires C++11 move semantics support in the compiler.");
-#elif defined(Q_MSVC_2010)
- QSKIP("This test requires compiler generated move constructors and operators.");
#endif
}
diff --git a/tests/auto/corelib/xml/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/xml/qxmlstream/tst_qxmlstream.cpp
deleted file mode 100644
index 79cd17b5b3..0000000000
--- a/tests/auto/corelib/xml/qxmlstream/tst_qxmlstream.cpp
+++ /dev/null
@@ -1,1699 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-
-#include <QDirIterator>
-#include <QEventLoop>
-#include <QNetworkAccessManager>
-#include <QNetworkReply>
-#include <QNetworkRequest>
-#include <QtTest/QtTest>
-#include <QUrl>
-#include <QXmlDefaultHandler>
-#include <QXmlStreamReader>
-
-#include "qc14n.h"
-
-Q_DECLARE_METATYPE(QXmlStreamReader::ReadElementTextBehaviour)
-
-static const char *const catalogFile = "XML-Test-Suite/xmlconf/finalCatalog.xml";
-static const int expectedRunCount = 1646;
-static const int expectedSkipCount = 532;
-
-static inline int best(int a, int b)
-{
- if (a < 0)
- return b;
- if (b < 0)
- return a;
- return qMin(a, b);
-}
-
-static inline int best(int a, int b, int c)
-{
- if (a < 0)
- return best(b, c);
- if (b < 0)
- return best(a, c);
- if (c < 0)
- return best(a, b);
- return qMin(qMin(a, b), c);
-}
-
-template <typename C>
-const C sorted_by_name(C c) { // return by const value so we can feed directly into range-for loops below
- using T = typename C::value_type;
- auto byName = [](const T &lhs, const T &rhs) {
- return lhs.name() < rhs.name();
- };
- std::sort(c.begin(), c.end(), byName);
- return c;
-}
-
-/**
- * Opens \a filename and returns content produced as per
- * xmlconf/xmltest/canonxml.html.
- *
- * \a docType is the DOCTYPE name that the returned output should
- * have, if it doesn't already have one.
- */
-static QByteArray makeCanonical(const QString &filename,
- const QString &docType,
- bool &hasError,
- bool testIncremental = false)
-{
- QFile file(filename);
- file.open(QIODevice::ReadOnly);
-
- QXmlStreamReader reader;
-
- QByteArray buffer;
- int bufferPos = 0;
-
- if (testIncremental)
- buffer = file.readAll();
- else
- reader.setDevice(&file);
-
- QByteArray outarray;
- QXmlStreamWriter writer(&outarray);
-
- forever {
- while (!reader.atEnd()) {
- reader.readNext();
- if (reader.isDTD()) {
- const auto notationDeclarations = reader.notationDeclarations();
- if (!notationDeclarations.isEmpty()) {
- QString dtd;
- QTextStream writeDtd(&dtd);
-
- writeDtd << "<!DOCTYPE ";
- writeDtd << docType;
- writeDtd << " [";
- writeDtd << endl;
- for (const QXmlStreamNotationDeclaration &notation : sorted_by_name(notationDeclarations)) {
- writeDtd << "<!NOTATION ";
- writeDtd << notation.name().toString();
- if (notation.publicId().isEmpty()) {
- writeDtd << " SYSTEM \'";
- writeDtd << notation.systemId().toString();
- writeDtd << '\'';
- } else {
- writeDtd << " PUBLIC \'";
- writeDtd << notation.publicId().toString();
- writeDtd << "\'";
- if (!notation.systemId().isEmpty() ) {
- writeDtd << " \'";
- writeDtd << notation.systemId().toString();
- writeDtd << '\'';
- }
- }
- writeDtd << '>';
- writeDtd << endl;
- }
-
- writeDtd << "]>";
- writeDtd << endl;
- writer.writeDTD(dtd);
- }
- } else if (reader.isStartElement()) {
- writer.writeStartElement(reader.namespaceUri().toString(), reader.name().toString());
- for (const QXmlStreamAttribute &attribute : sorted_by_name(reader.attributes()))
- writer.writeAttribute(attribute);
- writer.writeCharacters(QString()); // write empty string to avoid having empty xml tags
- } else if (reader.isCharacters()) {
- // make canonical
-
- QString text = reader.text().toString();
- int i = 0;
- int p = 0;
- while ((i = best(text.indexOf(QLatin1Char(10), p),
- text.indexOf(QLatin1Char(13), p),
- text.indexOf(QLatin1Char(9), p))) >= 0) {
- writer.writeCharacters(text.mid(p, i - p));
- writer.writeEntityReference(QLatin1Char('#') + QString::number(text.at(i).unicode()));
- p = i + 1;
- }
- writer.writeCharacters(text.mid(p));
- } else if (reader.isStartDocument() || reader.isEndDocument() || reader.isComment()){
- // canonical does not want any of those
- } else if (reader.isProcessingInstruction() && reader.processingInstructionData().isEmpty()) {
- // for some reason canonical wants a space
- writer.writeProcessingInstruction(reader.processingInstructionTarget().toString(), QLatin1String(""));
- } else if (!reader.hasError()){
- writer.writeCurrentToken(reader);
- }
- }
- if (testIncremental && bufferPos < buffer.size()) {
- reader.addData(QByteArray(buffer.data() + (bufferPos++), 1));
- } else {
- break;
- }
- }
-
- if (reader.hasError()) {
- hasError = true;
- outarray += "ERROR:";
- outarray += reader.errorString().toLatin1();
- }
- else
- hasError = false;
-
- return outarray;
-}
-
-/**
- * \brief Returns the lexical QName of the document element in
- * \a document.
- *
- * It is assumed that \a document is a well-formed XML document.
- */
-static QString documentElement(const QByteArray &document)
-{
- QXmlStreamReader reader(document);
-
- while(!reader.atEnd())
- {
- if(reader.isStartElement())
- return reader.qualifiedName().toString();
-
- reader.readNext();
- }
-
- qFatal("The input %s didn't contain an element", document.constData());
- return QString();
-}
-
-/**
- * \brief Loads W3C's XML conformance test suite and runs it on QXmlStreamReader.
- *
- * Since this suite is fairly large, it runs the tests sequentially in order to not
- * have them all loaded into memory at once. In this way, the maximum memory usage stays
- * low, which means one can run valgrind on this test. However, the drawback is that
- * Qt Test's usual error reporting and testing mechanisms are slightly bypassed.
- *
- * Part of this code is a manual, ad-hoc implementation of xml:base.
- *
- * See \l {http://www.w3.org/XML/Test/} {Extensible Markup Language (XML) Conformance Test Suites}
- */
-class TestSuiteHandler : public QXmlDefaultHandler
-{
-public:
- /**
- * The first string is the test ID, the second is
- * a description of what went wrong.
- */
- typedef QPair<QString, QString> GeneralFailure;
-
- /**
- * The string is the test ID.
- */
- QStringList successes;
-
- /**
- * The first value is the baseline, while the se
- */
- class MissedBaseline
- {
- friend class QVector<MissedBaseline>;
- MissedBaseline() {} // for QVector, don't use
- public:
- MissedBaseline(const QString &aId,
- const QByteArray &aExpected,
- const QByteArray &aOutput) : id(aId),
- expected(aExpected),
- output(aOutput)
- {
- if (aId.isEmpty())
- qFatal("%s: aId must not be an empty string", Q_FUNC_INFO);
- }
-
- void swap(MissedBaseline &other) Q_DECL_NOTHROW
- {
- qSwap(id, other.id);
- qSwap(expected, other.expected);
- qSwap(output, other.output);
- }
-
- QString id;
- QByteArray expected;
- QByteArray output;
- };
-
- QVector<GeneralFailure> failures;
- QVector<MissedBaseline> missedBaselines;
-
- /**
- * The count of how many tests that were run.
- */
- int runCount;
-
- int skipCount;
-
- /**
- * \a baseURI is the URI of where the catalog file resides.
- */
- TestSuiteHandler(const QUrl &baseURI) : runCount(0),
- skipCount(0)
- {
- if (!baseURI.isValid())
- qFatal("%s: baseURI must be valid", Q_FUNC_INFO);
- m_baseURI.push(baseURI);
- }
-
- virtual bool characters(const QString &chars)
- {
- m_ch = chars;
- return true;
- }
-
- virtual bool startElement(const QString &,
- const QString &,
- const QString &,
- const QXmlAttributes &atts)
- {
- m_atts.push(atts);
- const int i = atts.index(QLatin1String("xml:base"));
-
- if(i != -1)
- m_baseURI.push(m_baseURI.top().resolved(atts.value(i)));
-
- return true;
- }
-
- virtual bool endElement(const QString &,
- const QString &localName,
- const QString &)
- {
- if(localName == QLatin1String("TEST"))
- {
- /* We don't want tests for XML 1.1.0, in fact). */
- if(m_atts.top().value(QString(), QLatin1String("VERSION")) == QLatin1String("1.1"))
- {
- ++skipCount;
- m_atts.pop();
- return true;
- }
-
- /* We don't want tests that conflict with the namespaces spec. Our parser is a
- * namespace-aware parser. */
- else if(m_atts.top().value(QString(), QLatin1String("NAMESPACE")) == QLatin1String("no"))
- {
- ++skipCount;
- m_atts.pop();
- return true;
- }
-
- const QString inputFilePath(m_baseURI.top().resolved(m_atts.top().value(QString(), QLatin1String("URI")))
- .toLocalFile());
- const QString id(m_atts.top().value(QString(), QLatin1String("ID")));
- const QString type(m_atts.top().value(QString(), QLatin1String("TYPE")));
-
- QString expectedFilePath;
- const int index = m_atts.top().index(QString(), QLatin1String("OUTPUT"));
-
- if(index != -1)
- {
- expectedFilePath = m_baseURI.top().resolved(m_atts.top().value(QString(),
- QLatin1String("OUTPUT"))).toLocalFile();
- }
-
- /* testcases.dtd: 'No parser should accept a "not-wf" testcase
- * unless it's a nonvalidating parser and the test contains
- * external entities that the parser doesn't read.'
- *
- * We also let this apply to "valid", "invalid" and "error" tests, although
- * I'm not fully sure this is correct. */
- const QString ents(m_atts.top().value(QString(), QLatin1String("ENTITIES")));
- m_atts.pop();
-
- if(ents == QLatin1String("both") ||
- ents == QLatin1String("general") ||
- ents == QLatin1String("parameter"))
- {
- ++skipCount;
- return true;
- }
-
- ++runCount;
-
- QFile inputFile(inputFilePath);
- if(!inputFile.open(QIODevice::ReadOnly))
- {
- failures.append(qMakePair(id, QLatin1String("Failed to open input file ") + inputFilePath));
- return true;
- }
-
- if(type == QLatin1String("not-wf"))
- {
- if(isWellformed(&inputFile, ParseSinglePass))
- {
- failures.append(qMakePair(id, QLatin1String("Failed to flag ") + inputFilePath
- + QLatin1String(" as not well-formed.")));
-
- /* Exit, the incremental test will fail as well, no need to flood the output. */
- return true;
- }
- else
- successes.append(id);
-
- if(isWellformed(&inputFile, ParseIncrementally))
- {
- failures.append(qMakePair(id, QLatin1String("Failed to flag ") + inputFilePath
- + QLatin1String(" as not well-formed with incremental parsing.")));
- }
- else
- successes.append(id);
-
- return true;
- }
-
- QXmlStreamReader reader(&inputFile);
-
- /* See testcases.dtd which reads: 'Nonvalidating parsers
- * must also accept "invalid" testcases, but validating ones must reject them.' */
- if(type == QLatin1String("invalid") || type == QLatin1String("valid"))
- {
- QByteArray expected;
- QString docType;
-
- /* We only want to compare against a baseline when we have
- * one. Some "invalid"-tests, for instance, doesn't have baselines. */
- if(!expectedFilePath.isEmpty())
- {
- QFile expectedFile(expectedFilePath);
-
- if(!expectedFile.open(QIODevice::ReadOnly))
- {
- failures.append(qMakePair(id, QLatin1String("Failed to open baseline ") + expectedFilePath));
- return true;
- }
-
- expected = expectedFile.readAll();
- docType = documentElement(expected);
- }
- else
- docType = QLatin1String("dummy");
-
- bool hasError = true;
- bool incremental = false;
-
- QByteArray input(makeCanonical(inputFilePath, docType, hasError, incremental));
-
- if (!hasError && !expectedFilePath.isEmpty() && input == expected)
- input = makeCanonical(inputFilePath, docType, hasError, (incremental = true));
-
- if(hasError)
- failures.append(qMakePair(id, QString::fromLatin1("Failed to parse %1%2")
- .arg(incremental?"(incremental run only) ":"")
- .arg(inputFilePath)));
-
- if(!expectedFilePath.isEmpty() && input != expected)
- {
- missedBaselines.append(MissedBaseline(id, expected, input));
- return true;
- }
- else
- {
- successes.append(id);
- return true;
- }
- }
- else if(type == QLatin1String("error"))
- {
- /* Not yet sure about this one. */
- // TODO
- return true;
- }
- else
- {
- qFatal("The input catalog is invalid.");
- return false;
- }
- }
- else if(localName == QLatin1String("TESTCASES") && m_atts.top().index(QLatin1String("xml:base")) != -1)
- m_baseURI.pop();
-
- m_atts.pop();
-
- return true;
- }
-
- enum ParseMode
- {
- ParseIncrementally,
- ParseSinglePass
- };
-
- static bool isWellformed(QIODevice *const inputFile, const ParseMode mode)
- {
- if (!inputFile)
- qFatal("%s: inputFile must be a valid QIODevice pointer", Q_FUNC_INFO);
- if (!inputFile->isOpen())
- qFatal("%s: inputFile must be opened by the caller", Q_FUNC_INFO);
- if (mode != ParseIncrementally && mode != ParseSinglePass)
- qFatal("%s: mode must be either ParseIncrementally or ParseSinglePass", Q_FUNC_INFO);
-
- if(mode == ParseIncrementally)
- {
- QXmlStreamReader reader;
- QByteArray buffer;
- int bufferPos = 0;
-
- buffer = inputFile->readAll();
-
- while(true)
- {
- while(!reader.atEnd())
- reader.readNext();
-
- if(bufferPos < buffer.size())
- {
- ++bufferPos;
- reader.addData(QByteArray(buffer.data() + bufferPos, 1));
- }
- else
- break;
- }
-
- return !reader.hasError();
- }
- else
- {
- QXmlStreamReader reader;
- reader.setDevice(inputFile);
-
- while(!reader.atEnd())
- reader.readNext();
-
- return !reader.hasError();
- }
- }
-
-private:
- QStack<QXmlAttributes> m_atts;
- QString m_ch;
- QStack<QUrl> m_baseURI;
-};
-QT_BEGIN_NAMESPACE
-Q_DECLARE_SHARED(TestSuiteHandler::MissedBaseline)
-QT_END_NAMESPACE
-
-class tst_QXmlStream: public QObject
-{
- Q_OBJECT
-public:
- tst_QXmlStream() : m_handler(QUrl::fromLocalFile(QFINDTESTDATA(catalogFile)))
- {
- }
-
-private slots:
- void initTestCase();
- void cleanupTestCase();
- void reportFailures() const;
- void reportFailures_data();
- void checkBaseline() const;
- void checkBaseline_data() const;
- void testReader() const;
- void testReader_data() const;
- void reportSuccess() const;
- void reportSuccess_data() const;
- void writerHangs() const;
- void writerAutoFormattingWithComments() const;
- void writerAutoFormattingWithTabs() const;
- void writerAutoFormattingWithProcessingInstructions() const;
- void writerAutoEmptyTags() const;
- void writeAttributesWithSpace() const;
- void addExtraNamespaceDeclarations();
- void setEntityResolver();
- void readFromQBuffer() const;
- void readFromQBufferInvalid() const;
- void readNextStartElement() const;
- void readElementText() const;
- void readElementText_data() const;
- void crashInUTF16Codec() const;
- void hasAttributeSignature() const;
- void hasAttribute() const;
- void writeWithCodec() const;
- void writeWithUtf8Codec() const;
- void writeWithUtf16Codec() const;
- void writeWithStandalone() const;
- void entitiesAndWhitespace_1() const;
- void entitiesAndWhitespace_2() const;
- void testFalsePrematureError() const;
- void garbageInXMLPrologDefaultCodec() const;
- void garbageInXMLPrologUTF8Explicitly() const;
- void clear() const;
- void checkCommentIndentation() const;
- void checkCommentIndentation_data() const;
- void crashInXmlStreamReader() const;
- void write8bitCodec() const;
- void invalidStringCharacters_data() const;
- void invalidStringCharacters() const;
- void hasError() const;
-
-private:
- static QByteArray readFile(const QString &filename);
-
- TestSuiteHandler m_handler;
-};
-
-void tst_QXmlStream::initTestCase()
-{
- QFile file(QFINDTESTDATA(catalogFile));
- QVERIFY2(file.open(QIODevice::ReadOnly),
- qPrintable(QString::fromLatin1("Failed to open the test suite catalog; %1").arg(file.fileName())));
-
- QXmlInputSource source(&file);
- QXmlSimpleReader reader;
- reader.setContentHandler(&m_handler);
-
- QVERIFY(reader.parse(&source, false));
-}
-
-void tst_QXmlStream::cleanupTestCase()
-{
- QFile::remove(QLatin1String("test.xml"));
-}
-
-void tst_QXmlStream::reportFailures() const
-{
- QFETCH(bool, isError);
- QFETCH(QString, description);
-
- QVERIFY2(!isError, qPrintable(description));
-}
-
-void tst_QXmlStream::reportFailures_data()
-{
- const int len = m_handler.failures.count();
-
- QTest::addColumn<bool>("isError");
- QTest::addColumn<QString>("description");
-
- /* We loop over all our failures(if any!), and output them such
- * that they appear in the Qt Test log. */
- for(int i = 0; i < len; ++i)
- QTest::newRow(m_handler.failures.at(i).first.toLatin1().constData()) << true << m_handler.failures.at(i).second;
-
- /* We need to add at least one column of test data, otherwise Qt Test complains. */
- if(len == 0)
- QTest::newRow("Whole test suite passed") << false << QString();
-
- /* We compare the test case counts to ensure that we've actually run test cases, that
- * the driver hasn't been broken or changed without updating the expected count, and
- * similar reasons. */
- QCOMPARE(m_handler.runCount, expectedRunCount);
- QCOMPARE(m_handler.skipCount, expectedSkipCount);
-}
-
-void tst_QXmlStream::checkBaseline() const
-{
- QFETCH(bool, isError);
- QFETCH(QString, expected);
- QFETCH(QString, output);
-
- if(isError)
- QCOMPARE(output, expected);
-}
-
-void tst_QXmlStream::checkBaseline_data() const
-{
- QTest::addColumn<bool>("isError");
- QTest::addColumn<QString>("expected");
- QTest::addColumn<QString>("output");
-
- const int len = m_handler.missedBaselines.count();
-
- for(int i = 0; i < len; ++i)
- {
- const TestSuiteHandler::MissedBaseline &b = m_handler.missedBaselines.at(i);
-
- /* We indeed don't know what encoding the content is in so in some cases fromUtf8
- * is all wrong, but it's an acceptable guess for error reporting. */
- QTest::newRow(b.id.toLatin1().constData())
- << true
- << QString::fromUtf8(b.expected.constData())
- << QString::fromUtf8(b.output.constData());
- }
-
- if(len == 0)
- QTest::newRow("dummy") << false << QString() << QString();
-}
-
-void tst_QXmlStream::reportSuccess() const
-{
- QFETCH(bool, isError);
-
- QVERIFY(!isError);
-}
-
-void tst_QXmlStream::reportSuccess_data() const
-{
- QTest::addColumn<bool>("isError");
-
- const int len = m_handler.successes.count();
-
- for (int i = 0; i < len; ++i) {
- const QByteArray testName = QByteArray::number(i) + ". " + m_handler.successes.at(i).toLatin1();
- QTest::newRow(testName.constData()) << false;
- }
-
- if(len == 0)
- QTest::newRow("No test cases succeeded.") << true;
-}
-
-QByteArray tst_QXmlStream::readFile(const QString &filename)
-{
- QFile file(filename);
- file.open(QIODevice::ReadOnly);
-
- QXmlStreamReader reader;
-
- reader.setDevice(&file);
- QByteArray outarray;
- QTextStream writer(&outarray);
- // We always want UTF-8, and not what the system picks up.
- writer.setCodec("UTF-8");
-
- while (!reader.atEnd()) {
- reader.readNext();
- writer << reader.tokenString() << '(';
- if (reader.isWhitespace())
- writer << " whitespace";
- if (reader.isCDATA())
- writer << " CDATA";
- if (reader.isStartDocument() && reader.isStandaloneDocument())
- writer << " standalone";
- if (!reader.text().isEmpty())
- writer << " text=\"" << reader.text().toString() << '"';
- if (!reader.processingInstructionTarget().isEmpty())
- writer << " processingInstructionTarget=\"" << reader.processingInstructionTarget().toString() << '"';
- if (!reader.processingInstructionData().isEmpty())
- writer << " processingInstructionData=\"" << reader.processingInstructionData().toString() << '"';
- if (!reader.dtdName().isEmpty())
- writer << " dtdName=\"" << reader.dtdName().toString() << '"';
- if (!reader.dtdPublicId().isEmpty())
- writer << " dtdPublicId=\"" << reader.dtdPublicId().toString() << '"';
- if (!reader.dtdSystemId().isEmpty())
- writer << " dtdSystemId=\"" << reader.dtdSystemId().toString() << '"';
- if (!reader.documentVersion().isEmpty())
- writer << " documentVersion=\"" << reader.documentVersion().toString() << '"';
- if (!reader.documentEncoding().isEmpty())
- writer << " documentEncoding=\"" << reader.documentEncoding().toString() << '"';
- if (!reader.name().isEmpty())
- writer << " name=\"" << reader.name().toString() << '"';
- if (!reader.namespaceUri().isEmpty())
- writer << " namespaceUri=\"" << reader.namespaceUri().toString() << '"';
- if (!reader.qualifiedName().isEmpty())
- writer << " qualifiedName=\"" << reader.qualifiedName().toString() << '"';
- if (!reader.prefix().isEmpty())
- writer << " prefix=\"" << reader.prefix().toString() << '"';
- const auto attributes = reader.attributes();
- if (attributes.size()) {
- for (const QXmlStreamAttribute &attribute : attributes) {
- writer << endl << " Attribute(";
- if (!attribute.name().isEmpty())
- writer << " name=\"" << attribute.name().toString() << '"';
- if (!attribute.namespaceUri().isEmpty())
- writer << " namespaceUri=\"" << attribute.namespaceUri().toString() << '"';
- if (!attribute.qualifiedName().isEmpty())
- writer << " qualifiedName=\"" << attribute.qualifiedName().toString() << '"';
- if (!attribute.prefix().isEmpty())
- writer << " prefix=\"" << attribute.prefix().toString() << '"';
- if (!attribute.value().isEmpty())
- writer << " value=\"" << attribute.value().toString() << '"';
- writer << " )" << endl;
- }
- }
- const auto namespaceDeclarations = reader.namespaceDeclarations();
- if (namespaceDeclarations.size()) {
- for (const QXmlStreamNamespaceDeclaration &namespaceDeclaration : namespaceDeclarations) {
- writer << endl << " NamespaceDeclaration(";
- if (!namespaceDeclaration.prefix().isEmpty())
- writer << " prefix=\"" << namespaceDeclaration.prefix().toString() << '"';
- if (!namespaceDeclaration.namespaceUri().isEmpty())
- writer << " namespaceUri=\"" << namespaceDeclaration.namespaceUri().toString() << '"';
- writer << " )" << endl;
- }
- }
- const auto notationDeclarations = reader.notationDeclarations();
- if (notationDeclarations.size()) {
- for (const QXmlStreamNotationDeclaration &notationDeclaration : notationDeclarations) {
- writer << endl << " NotationDeclaration(";
- if (!notationDeclaration.name().isEmpty())
- writer << " name=\"" << notationDeclaration.name().toString() << '"';
- if (!notationDeclaration.systemId().isEmpty())
- writer << " systemId=\"" << notationDeclaration.systemId().toString() << '"';
- if (!notationDeclaration.publicId().isEmpty())
- writer << " publicId=\"" << notationDeclaration.publicId().toString() << '"';
- writer << " )" << endl;
- }
- }
- const auto entityDeclarations = reader.entityDeclarations();
- if (entityDeclarations.size()) {
- for (const QXmlStreamEntityDeclaration &entityDeclaration : entityDeclarations) {
- writer << endl << " EntityDeclaration(";
- if (!entityDeclaration.name().isEmpty())
- writer << " name=\"" << entityDeclaration.name().toString() << '"';
- if (!entityDeclaration.notationName().isEmpty())
- writer << " notationName=\"" << entityDeclaration.notationName().toString() << '"';
- if (!entityDeclaration.systemId().isEmpty())
- writer << " systemId=\"" << entityDeclaration.systemId().toString() << '"';
- if (!entityDeclaration.publicId().isEmpty())
- writer << " publicId=\"" << entityDeclaration.publicId().toString() << '"';
- if (!entityDeclaration.value().isEmpty())
- writer << " value=\"" << entityDeclaration.value().toString() << '"';
- writer << " )" << endl;
- }
- }
- writer << " )" << endl;
- }
- if (reader.hasError())
- writer << "ERROR: " << reader.errorString() << endl;
- return outarray;
-}
-
-void tst_QXmlStream::testReader() const
-{
- QFETCH(QString, xml);
- QFETCH(QString, ref);
- QFile file(ref);
- if (!file.exists()) {
- QByteArray reference = readFile(xml);
- QVERIFY(file.open(QIODevice::WriteOnly));
- file.write(reference);
- file.close();
- } else {
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
- QString reference = QString::fromUtf8(file.readAll());
- QString qxmlstream = QString::fromUtf8(readFile(xml));
- QCOMPARE(qxmlstream, reference);
- }
-}
-
-void tst_QXmlStream::testReader_data() const
-{
- QTest::addColumn<QString>("xml");
- QTest::addColumn<QString>("ref");
- QDir dir;
- dir.cd(QFINDTESTDATA("data/"));
- const auto fileNames = dir.entryList(QStringList() << "*.xml");
- for (const QString &filename : fileNames) {
- QString reference = QFileInfo(filename).baseName() + ".ref";
- QTest::newRow(dir.filePath(filename).toLatin1().data()) << dir.filePath(filename) << dir.filePath(reference);
- }
-}
-
-void tst_QXmlStream::addExtraNamespaceDeclarations()
-{
- const char *data = "<bla><undeclared:foo/><undeclared_too:foo/></bla>";
- {
- QXmlStreamReader xml(data);
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QVERIFY2(xml.hasError(), "namespaces undeclared");
- }
- {
- QXmlStreamReader xml(data);
- xml.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("undeclared", "blabla"));
- xml.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("undeclared_too", "foofoo"));
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QVERIFY2(!xml.hasError(), xml.errorString().toLatin1().constData());
- }
-}
-
-
-class EntityResolver : public QXmlStreamEntityResolver {
-public:
- QString resolveUndeclaredEntity(const QString &name) {
- static int count = 0;
- return name.toUpper() + QString::number(++count);
- }
-};
-void tst_QXmlStream::setEntityResolver()
-{
- const char *data = "<bla foo=\"&undeclared;\">&undeclared_too;</bla>";
- {
- QXmlStreamReader xml(data);
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QVERIFY2(xml.hasError(), "undeclared entities");
- }
- {
- QString foo;
- QString bla_text;
- QXmlStreamReader xml(data);
- EntityResolver resolver;
- xml.setEntityResolver(&resolver);
- while (!xml.atEnd()) {
- xml.readNext();
- if (xml.isStartElement())
- foo = xml.attributes().value("foo").toString();
- if (xml.isCharacters())
- bla_text += xml.text().toString();
- }
- QVERIFY2(!xml.hasError(), xml.errorString().toLatin1().constData());
- QCOMPARE(foo, QLatin1String("UNDECLARED1"));
- QCOMPARE(bla_text, QLatin1String("UNDECLARED_TOO2"));
- }
-}
-
-void tst_QXmlStream::testFalsePrematureError() const
-{
- const char *illegal_start = "illegal<sta";
- const char *legal_start = "<sta";
- const char* end = "rt/>";
- {
- QXmlStreamReader xml("");
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QCOMPARE(xml.error(), QXmlStreamReader::PrematureEndOfDocumentError);
- QCOMPARE(xml.errorString(), QLatin1String("Premature end of document."));
- xml.addData(legal_start);
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QCOMPARE(xml.error(), QXmlStreamReader::PrematureEndOfDocumentError);
- QCOMPARE(xml.errorString(), QLatin1String("Premature end of document."));
- xml.addData(end);
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QVERIFY(!xml.hasError());
- }
- {
- QXmlStreamReader xml(illegal_start);
- while (!xml.atEnd()) {
- xml.readNext();
- }
- QVERIFY(xml.hasError());
- QCOMPARE(xml.errorString(), QLatin1String("Start tag expected."));
- QCOMPARE(xml.error(), QXmlStreamReader::NotWellFormedError);
- }
-}
-
-// Regression test for crash due to using empty QStack.
-void tst_QXmlStream::writerHangs() const
-{
- QTemporaryDir dir(QDir::tempPath() + QLatin1String("/tst_qxmlstream.XXXXXX"));
- QFile file(dir.path() + "/test.xml");
-
- QVERIFY(file.open(QIODevice::WriteOnly));
-
- QXmlStreamWriter writer(&file);
- double radius = 4.0;
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeEmptyElement("circle");
- writer.writeAttribute("radius", QString::number(radius));
- writer.writeEndElement();
- writer.writeEndDocument();
-}
-
-void tst_QXmlStream::writerAutoFormattingWithComments() const
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
-
- QXmlStreamWriter writer(&buffer);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeComment("This is a comment");
- writer.writeEndDocument();
- const char *str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--This is a comment-->\n";
- QCOMPARE(buffer.buffer().data(), str);
-}
-
-void tst_QXmlStream::writerAutoFormattingWithTabs() const
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
-
-
- QXmlStreamWriter writer(&buffer);
- writer.setAutoFormatting(true);
- writer.setAutoFormattingIndent(-1);
- QCOMPARE(writer.autoFormattingIndent(), -1);
- writer.writeStartDocument();
- writer.writeStartElement("A");
- writer.writeStartElement("B");
- writer.writeEndDocument();
- const char *str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<A>\n\t<B/>\n</A>\n";
- QCOMPARE(buffer.buffer().data(), str);
-}
-
-void tst_QXmlStream::writerAutoFormattingWithProcessingInstructions() const
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
-
- QXmlStreamWriter writer(&buffer);
- writer.setAutoFormatting(true);
- writer.writeStartDocument();
- writer.writeProcessingInstruction("B", "C");
- writer.writeStartElement("A");
- writer.writeEndElement();
- writer.writeEndDocument();
- const char *str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<?B C?>\n<A/>\n";
- QCOMPARE(buffer.buffer().data(), str);
-}
-
-void tst_QXmlStream::writeAttributesWithSpace() const
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
-
-
- QXmlStreamWriter writer(&buffer);
- writer.writeStartDocument();
- writer.writeEmptyElement("A");
- writer.writeAttribute("attribute", QStringLiteral("value") + QChar(QChar::Nbsp));
- writer.writeEndDocument();
- QString s = QLatin1String("<?xml version=\"1.0\" encoding=\"UTF-8\"?><A attribute=\"value")
- + QChar(QChar::Nbsp) + QLatin1String("\"/>\n");
- QCOMPARE(buffer.buffer().data(), s.toUtf8().data());
-}
-
-void tst_QXmlStream::writerAutoEmptyTags() const
-{
- QBuffer buffer;
- buffer.open(QIODevice::WriteOnly);
-
-
- QXmlStreamWriter writer(&buffer);
-
- writer.writeStartDocument();
-
- writer.writeStartElement("Hans");
- writer.writeAttribute("key", "value");
- writer.writeEndElement();
-
- writer.writeStartElement("Hans");
- writer.writeAttribute("key", "value");
- writer.writeEmptyElement("Leer");
- writer.writeAttribute("key", "value");
- writer.writeEndElement();
-
- writer.writeStartElement("Hans");
- writer.writeAttribute("key", "value");
- writer.writeCharacters("stuff");
- writer.writeEndElement();
-
- writer.writeEndDocument();
-
- QString s = QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Hans key=\"value\"/><Hans key=\"value\"><Leer key=\"value\"/></Hans><Hans key=\"value\">stuff</Hans>\n");
- QCOMPARE(buffer.buffer().data(), s.toUtf8().data());
-}
-
-void tst_QXmlStream::readFromQBuffer() const
-{
- QByteArray in("<e/>");
- QBuffer buffer(&in);
- QVERIFY(buffer.open(QIODevice::ReadOnly));
-
- QXmlStreamReader reader(&buffer);
-
- while(!reader.atEnd())
- {
- reader.readNext();
- }
-
- QVERIFY(!reader.hasError());
-}
-
-void tst_QXmlStream::readFromQBufferInvalid() const
-{
- QByteArray in("<e/><e/>");
- QBuffer buffer(&in);
- QVERIFY(buffer.open(QIODevice::ReadOnly));
-
- QXmlStreamReader reader(&buffer);
-
- while(!reader.atEnd())
- {
- reader.readNext();
- }
-
- QVERIFY(reader.hasError());
-}
-
-void tst_QXmlStream::readNextStartElement() const
-{
- QLatin1String in("<?xml version=\"1.0\"?><A><!-- blah --><B><C/></B><B attr=\"value\"/>text</A>");
- QXmlStreamReader reader(in);
-
- QVERIFY(reader.readNextStartElement());
- QVERIFY(reader.isStartElement() && reader.name() == QLatin1String("A"));
-
- int amountOfB = 0;
- while (reader.readNextStartElement()) {
- QVERIFY(reader.isStartElement() && reader.name() == QLatin1String("B"));
- ++amountOfB;
- reader.skipCurrentElement();
- }
-
- QCOMPARE(amountOfB, 2);
-}
-
-void tst_QXmlStream::readElementText() const
-{
- QFETCH(QXmlStreamReader::ReadElementTextBehaviour, behaviour);
- QFETCH(QString, input);
- QFETCH(QString, expected);
-
- QXmlStreamReader reader(input);
-
- QVERIFY(reader.readNextStartElement());
- QCOMPARE(reader.readElementText(behaviour), expected);
-}
-
-void tst_QXmlStream::readElementText_data() const
-{
- QTest::addColumn<QXmlStreamReader::ReadElementTextBehaviour>("behaviour");
- QTest::addColumn<QString>("input");
- QTest::addColumn<QString>("expected");
-
- QString validInput("<p>He was <em>never</em> going to admit<!-- TODO: rephrase --> his mistake.</p>");
- QString invalidInput("<p>invalid...<p>");
- QString invalidOutput("invalid...");
-
- QTest::newRow("ErrorOnUnexpectedElement")
- << QXmlStreamReader::ErrorOnUnexpectedElement
- << validInput << QString("He was ");
-
- QTest::newRow("IncludeChildElements")
- << QXmlStreamReader::IncludeChildElements
- << validInput << QString("He was never going to admit his mistake.");
-
- QTest::newRow("SkipChildElements")
- << QXmlStreamReader::SkipChildElements
- << validInput << QString("He was going to admit his mistake.");
-
- QTest::newRow("ErrorOnUnexpectedElement Invalid")
- << QXmlStreamReader::ErrorOnUnexpectedElement
- << invalidInput << invalidOutput;
-
- QTest::newRow("IncludeChildElements Invalid")
- << QXmlStreamReader::IncludeChildElements
- << invalidInput << invalidOutput;
-
- QTest::newRow("SkipChildElements Invalid")
- << QXmlStreamReader::SkipChildElements
- << invalidInput << invalidOutput;
-}
-
-void tst_QXmlStream::crashInUTF16Codec() const
-{
- QEventLoop eventLoop;
-
- QNetworkAccessManager networkManager;
- QNetworkRequest request(QUrl::fromLocalFile(QFINDTESTDATA("data/051reduced.xml")));
- QNetworkReply *const reply = networkManager.get(request);
- eventLoop.connect(reply, SIGNAL(finished()), SLOT(quit()));
-
- QCOMPARE(eventLoop.exec(), 0);
-
- QXmlStreamReader reader(reply);
- while(!reader.atEnd())
- {
- reader.readNext();
- continue;
- }
-
- QVERIFY(!reader.hasError());
-}
-
-/*
- In addition to Qt Test's flags, one can specify "-c <filename>" and have that file output in its canonical form.
-*/
-int main(int argc, char *argv[])
-{
- QCoreApplication app(argc, argv);
-
- if (argc == 3 && QByteArray(argv[1]).startsWith("-c")) {
- // output canonical only
- bool error = false;
- QByteArray canonical = makeCanonical(argv[2], "doc", error);
- QTextStream myStdOut(stdout);
- myStdOut << canonical << endl;
- exit(0);
- }
-
- tst_QXmlStream tc;
- return QTest::qExec(&tc, argc, argv);
-}
-
-void tst_QXmlStream::hasAttributeSignature() const
-{
- /* These functions should be const so invoke all
- * of them on a const object. */
- const QXmlStreamAttributes atts;
- atts.hasAttribute(QLatin1String("localName"));
- atts.hasAttribute(QString::fromLatin1("localName"));
- atts.hasAttribute(QString::fromLatin1("http://example.com/"), QLatin1String("localName"));
-
- /* The input arguments should be const references, not mutable references
- * so pass const references. */
- const QLatin1String latin1StringLocalName(QLatin1String("localName"));
- const QString qStringLocalname(QLatin1String("localName"));
- const QString namespaceURI(QLatin1String("http://example.com/"));
-
- /* QLatin1String overload. */
- atts.hasAttribute(latin1StringLocalName);
-
- /* QString overload. */
- atts.hasAttribute(latin1StringLocalName);
-
- /* namespace/local name overload. */
- atts.hasAttribute(namespaceURI, qStringLocalname);
-}
-
-void tst_QXmlStream::hasAttribute() const
-{
- QXmlStreamReader reader(QLatin1String("<e xmlns:p='http://example.com/2' xmlns='http://example.com/' "
- "attr1='value' attr2='value2' p:attr3='value3' emptyAttr=''><noAttributes/></e>"));
-
- QCOMPARE(reader.readNext(), QXmlStreamReader::StartDocument);
- QCOMPARE(reader.readNext(), QXmlStreamReader::StartElement);
- const QXmlStreamAttributes &atts = reader.attributes();
-
- /* QLatin1String overload. */
- QVERIFY(atts.hasAttribute(QLatin1String("attr1")));
- QVERIFY(atts.hasAttribute(QLatin1String("attr2")));
- QVERIFY(atts.hasAttribute(QLatin1String("p:attr3")));
- QVERIFY(atts.hasAttribute(QLatin1String("emptyAttr")));
- QVERIFY(!atts.hasAttribute(QLatin1String("DOESNOTEXIST")));
-
- /* Test with an empty & null namespaces. */
- QVERIFY(atts.hasAttribute(QString(), QLatin1String("attr2"))); /* A null string. */
- QVERIFY(atts.hasAttribute(QLatin1String(""), QLatin1String("attr2"))); /* An empty string. */
-
- /* QString overload. */
- QVERIFY(atts.hasAttribute(QString::fromLatin1("attr1")));
- QVERIFY(atts.hasAttribute(QString::fromLatin1("attr2")));
- QVERIFY(atts.hasAttribute(QString::fromLatin1("p:attr3")));
- QVERIFY(atts.hasAttribute(QString::fromLatin1("emptyAttr")));
- QVERIFY(!atts.hasAttribute(QString::fromLatin1("DOESNOTEXIST")));
-
- /* namespace/local name overload. */
- QVERIFY(atts.hasAttribute(QString(), QString::fromLatin1("attr1")));
- /* Attributes do not pick up the default namespace. */
- QVERIFY(!atts.hasAttribute(QLatin1String("http://example.com/"), QString::fromLatin1("attr1")));
- QVERIFY(atts.hasAttribute(QLatin1String("http://example.com/2"), QString::fromLatin1("attr3")));
- QVERIFY(atts.hasAttribute(QString(), QString::fromLatin1("emptyAttr")));
- QVERIFY(!atts.hasAttribute(QLatin1String("http://example.com/2"), QString::fromLatin1("DOESNOTEXIST")));
- QVERIFY(!atts.hasAttribute(QLatin1String("WRONG_NAMESPACE"), QString::fromLatin1("attr3")));
-
- /* Invoke on an QXmlStreamAttributes that has no attributes at all. */
- QCOMPARE(reader.readNext(), QXmlStreamReader::StartElement);
-
- const QXmlStreamAttributes &atts2 = reader.attributes();
- QVERIFY(atts2.isEmpty());
-
- /* QLatin1String overload. */
- QVERIFY(!atts.hasAttribute(QLatin1String("arbitraryName")));
-
- /* QString overload. */
- QVERIFY(!atts.hasAttribute(QString::fromLatin1("arbitraryName")));
-
- /* namespace/local name overload. */
- QVERIFY(!atts.hasAttribute(QLatin1String("http://example.com/"), QString::fromLatin1("arbitraryName")));
-
- while(!reader.atEnd())
- reader.readNext();
-
- QVERIFY(!reader.hasError());
-}
-
-
-void tst_QXmlStream::writeWithCodec() const
-{
- QByteArray outarray;
- QXmlStreamWriter writer(&outarray);
- writer.setAutoFormatting(true);
-
- QTextCodec *codec = QTextCodec::codecForName("ISO 8859-15");
- QVERIFY(codec);
- writer.setCodec(codec);
-
- const char *latin2 = "h\xe9 h\xe9";
- const QString string = codec->toUnicode(latin2);
-
-
- writer.writeStartDocument("1.0");
-
- writer.writeTextElement("foo", string);
- writer.writeEndElement();
- writer.writeEndDocument();
-
- QVERIFY(outarray.contains(latin2));
- QVERIFY(outarray.contains(codec->name()));
-}
-
-void tst_QXmlStream::writeWithUtf8Codec() const
-{
- QByteArray outarray;
- QXmlStreamWriter writer(&outarray);
-
- QTextCodec *codec = QTextCodec::codecForMib(106); // utf-8
- QVERIFY(codec);
- writer.setCodec(codec);
-
- writer.writeStartDocument("1.0");
- static const char begin[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
- QVERIFY(outarray.startsWith(begin));
-}
-
-void tst_QXmlStream::writeWithUtf16Codec() const
-{
- QByteArray outarray;
- QXmlStreamWriter writer(&outarray);
-
- QTextCodec *codec = QTextCodec::codecForMib(1014); // utf-16LE
- QVERIFY(codec);
- writer.setCodec(codec);
-
- writer.writeStartDocument("1.0");
- static const char begin[] = "<?xml version=\"1.0\" encoding=\"UTF-16"; // skip potential "LE" suffix
- const int count = sizeof(begin) - 1; // don't include 0 terminator
- QByteArray begin_UTF16;
- begin_UTF16.reserve(2*(count));
- for (int i = 0; i < count; ++i) {
- begin_UTF16.append(begin[i]);
- begin_UTF16.append((char)'\0');
- }
- QVERIFY(outarray.startsWith(begin_UTF16));
-}
-
-void tst_QXmlStream::writeWithStandalone() const
-{
- {
- QByteArray outarray;
- QXmlStreamWriter writer(&outarray);
- writer.setAutoFormatting(true);
- writer.writeStartDocument("1.0", true);
- writer.writeEndDocument();
- const char *ref = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
- QCOMPARE(outarray.constData(), ref);
- }
- {
- QByteArray outarray;
- QXmlStreamWriter writer(&outarray);
- writer.setAutoFormatting(true);
- writer.writeStartDocument("1.0", false);
- writer.writeEndDocument();
- const char *ref = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
- QCOMPARE(outarray.constData(), ref);
- }
-}
-
-void tst_QXmlStream::entitiesAndWhitespace_1() const
-{
- QXmlStreamReader reader(QLatin1String("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"><test>&extEnt;</test>"));
-
- int entityCount = 0;
- int characterCount = 0;
- while(!reader.atEnd())
- {
- QXmlStreamReader::TokenType token = reader.readNext();
- switch(token)
- {
- case QXmlStreamReader::Characters:
- characterCount++;
- break;
- case QXmlStreamReader::EntityReference:
- entityCount++;
- break;
- default:
- ;
- }
- }
-
- QCOMPARE(entityCount, 1);
- QCOMPARE(characterCount, 0);
- QVERIFY(!reader.hasError());
-}
-
-void tst_QXmlStream::entitiesAndWhitespace_2() const
-{
- QXmlStreamReader reader(QLatin1String("<test>&extEnt;</test>"));
-
- int entityCount = 0;
- int characterCount = 0;
- while(!reader.atEnd())
- {
- QXmlStreamReader::TokenType token = reader.readNext();
- switch(token)
- {
- case QXmlStreamReader::Characters:
- characterCount++;
- break;
- case QXmlStreamReader::EntityReference:
- entityCount++;
- break;
- default:
- ;
- }
- }
-
- QCOMPARE(entityCount, 0);
- QCOMPARE(characterCount, 0);
- QVERIFY(reader.hasError());
-}
-
-void tst_QXmlStream::garbageInXMLPrologDefaultCodec() const
-{
- QBuffer out;
- QVERIFY(out.open(QIODevice::ReadWrite));
-
- QXmlStreamWriter writer (&out);
- writer.writeStartDocument();
- writer.writeEmptyElement("Foo");
- writer.writeEndDocument();
-
- QCOMPARE(out.data(), QByteArray("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Foo/>\n"));
-}
-
-void tst_QXmlStream::garbageInXMLPrologUTF8Explicitly() const
-{
- QBuffer out;
- QVERIFY(out.open(QIODevice::ReadWrite));
-
- QXmlStreamWriter writer (&out);
- writer.setCodec("UTF-8");
- writer.writeStartDocument();
- writer.writeEmptyElement("Foo");
- writer.writeEndDocument();
-
- QCOMPARE(out.data(), QByteArray("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Foo/>\n"));
-}
-
-void tst_QXmlStream::clear() const
-{
- QString xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><body></body>";
- QXmlStreamReader reader;
-
- reader.addData(xml);
- while (!reader.atEnd()) {
- reader.readNext();
- }
- QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument);
-
- reader.clear();
- reader.addData(xml);
- while (!reader.atEnd()) {
- reader.readNext();
- }
- QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument);
-
-
- // now we stop in the middle to check whether clear really works
- reader.clear();
- reader.addData(xml);
- reader.readNext();
- reader.readNext();
- QCOMPARE(reader.tokenType(), QXmlStreamReader::StartElement);
-
- // and here the final read
- reader.clear();
- reader.addData(xml);
- while (!reader.atEnd()) {
- reader.readNext();
- }
- QCOMPARE(reader.tokenType(), QXmlStreamReader::EndDocument);
-}
-
-void tst_QXmlStream::checkCommentIndentation_data() const
-{
-
- QTest::addColumn<QString>("input");
- QTest::addColumn<QString>("expectedOutput");
-
- QString simpleInput = "<a><!-- bla --></a>";
- QString simpleOutput = "<?xml version=\"1.0\"?>\n"
- "<a>\n"
- " <!-- bla -->\n"
- "</a>\n";
- QTest::newRow("simple-comment") << simpleInput << simpleOutput;
-
- QString advancedInput = "<a><!-- bla --><!-- bla --><b><!-- bla --><c><!-- bla --></c><!-- bla --></b></a>";
- QString advancedOutput = "<?xml version=\"1.0\"?>\n"
- "<a>\n"
- " <!-- bla -->\n"
- " <!-- bla -->\n"
- " <b>\n"
- " <!-- bla -->\n"
- " <c>\n"
- " <!-- bla -->\n"
- " </c>\n"
- " <!-- bla -->\n"
- " </b>\n"
- "</a>\n";
- QTest::newRow("advanced-comment") << advancedInput << advancedOutput;
-}
-
-void tst_QXmlStream::checkCommentIndentation() const
-{
- QFETCH(QString, input);
- QFETCH(QString, expectedOutput);
- QString output;
- QXmlStreamReader reader(input);
- QXmlStreamWriter writer(&output);
- writer.setAutoFormatting(true);
- writer.setAutoFormattingIndent(3);
-
- while (!reader.atEnd()) {
- reader.readNext();
- if (reader.error()) {
- QFAIL("error reading XML input");
- } else {
- writer.writeCurrentToken(reader);
- }
- }
- QCOMPARE(output, expectedOutput);
-}
-
-// This is a regression test for QTBUG-9196, where the series of tags used
-// in the test caused a crash in the XML stream reader.
-void tst_QXmlStream::crashInXmlStreamReader() const
-{
- QByteArray ba("<a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a>"
- "<a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a><a></a>");
- QXmlStreamReader xml(ba);
- while (!xml.atEnd()) {
- xml.readNext();
- }
-}
-
-class FakeBuffer : public QBuffer
-{
-protected:
- qint64 writeData(const char *c, qint64 i)
- {
- qint64 ai = qMin(m_capacity, i);
- m_capacity -= ai;
- return ai ? QBuffer::writeData(c, ai) : 0;
- }
-public:
- void setCapacity(int capacity) { m_capacity = capacity; }
-private:
- qint64 m_capacity;
-};
-
-void tst_QXmlStream::hasError() const
-{
- {
- FakeBuffer fb;
- QVERIFY(fb.open(QBuffer::ReadWrite));
- fb.setCapacity(1000);
- QXmlStreamWriter writer(&fb);
- writer.writeStartDocument();
- writer.writeEndDocument();
- QVERIFY(!writer.hasError());
- QCOMPARE(fb.data(), QByteArray("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"));
- }
-
- {
- // Failure caused by write(QString)
- FakeBuffer fb;
- QVERIFY(fb.open(QBuffer::ReadWrite));
- const QByteArray expected = QByteArrayLiteral("<?xml version=\"");
- fb.setCapacity(expected.size());
- QXmlStreamWriter writer(&fb);
- writer.writeStartDocument();
- QVERIFY(writer.hasError());
- QCOMPARE(fb.data(), expected);
- }
-
- {
- // Failure caused by write(char *)
- FakeBuffer fb;
- QVERIFY(fb.open(QBuffer::ReadWrite));
- const QByteArray expected = QByteArrayLiteral("<?xml version=\"1.0");
- fb.setCapacity(expected.size());
- QXmlStreamWriter writer(&fb);
- writer.writeStartDocument();
- QVERIFY(writer.hasError());
- QCOMPARE(fb.data(), expected);
- }
-
- {
- // Failure caused by write(QStringRef)
- FakeBuffer fb;
- QVERIFY(fb.open(QBuffer::ReadWrite));
- const QByteArray expected = QByteArrayLiteral("<?xml version=\"1.0\" encoding=\"UTF-8\"?><test xmlns:");
- fb.setCapacity(expected.size());
- QXmlStreamWriter writer(&fb);
- writer.writeStartDocument();
- writer.writeStartElement("test");
- writer.writeNamespace("http://foo.bar", "foo");
- QVERIFY(writer.hasError());
- QCOMPARE(fb.data(), expected);
- }
-
- {
- // Refusal to write after 1st failure
- FakeBuffer fb;
- QVERIFY(fb.open(QBuffer::ReadWrite));
- fb.setCapacity(10);
- QXmlStreamWriter writer(&fb);
- writer.writeStartDocument();
- QVERIFY(writer.hasError());
- QCOMPARE(fb.data(), QByteArray("<?xml vers"));
- fb.setCapacity(1000);
- writer.writeStartElement("test"); // literal & qstring
- writer.writeNamespace("http://foo.bar", "foo"); // literal & qstringref
- QVERIFY(writer.hasError());
- QCOMPARE(fb.data(), QByteArray("<?xml vers"));
- }
-
-}
-
-void tst_QXmlStream::write8bitCodec() const
-{
- QBuffer outBuffer;
- QVERIFY(outBuffer.open(QIODevice::WriteOnly));
- QXmlStreamWriter writer(&outBuffer);
- writer.setAutoFormatting(false);
-
- QTextCodec *codec = QTextCodec::codecForName("IBM500");
- if (!codec) {
- QSKIP("Encoding IBM500 not available.");
- }
- writer.setCodec(codec);
-
- writer.writeStartDocument();
- writer.writeStartElement("root");
- writer.writeAttribute("attrib", "1");
- writer.writeEndElement();
- writer.writeEndDocument();
- outBuffer.close();
-
- // test 8 bit encoding
- QByteArray values = outBuffer.data();
- QVERIFY(values.size() > 1);
- // check '<'
- QCOMPARE(values[0] & 0x00FF, 0x4c);
- // check '?'
- QCOMPARE(values[1] & 0x00FF, 0x6F);
-
- // convert the start of the XML
- const QString expected = ("<?xml version=\"1.0\" encoding=\"IBM500\"?>");
- QTextDecoder *decoder = codec->makeDecoder();
- QVERIFY(decoder);
- QString decodedText = decoder->toUnicode(values);
- delete decoder;
- QVERIFY(decodedText.startsWith(expected));
-}
-
-void tst_QXmlStream::invalidStringCharacters() const
-{
- // test scan in attributes
- QFETCH(QString, testString);
- QFETCH(bool, expectedResultNoError);
-
- QByteArray values = testString.toUtf8();
- QBuffer inBuffer;
- inBuffer.setData(values);
- QVERIFY(inBuffer.open(QIODevice::ReadOnly));
- QXmlStreamReader reader(&inBuffer);
- do {
- reader.readNext();
- } while (!reader.atEnd());
- QCOMPARE((reader.error() == QXmlStreamReader::NoError), expectedResultNoError);
-}
-
-void tst_QXmlStream::invalidStringCharacters_data() const
-{
- // test scan in attributes
- QTest::addColumn<bool>("expectedResultNoError");
- QTest::addColumn<QString>("testString");
- QChar ctrl(0x1A);
- QTest::newRow("utf8, attributes, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'/>");
- QTest::newRow("utf8, attributes, only char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='")+ctrl+QString("'/>");
- QTest::newRow("utf8, attributes, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='")+ctrl+QString("abc'/>");
- QTest::newRow("utf8, attributes, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='abc")+ctrl+QString("efgx'/>");
- QTest::newRow("utf8, attributes, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='abcde")+ctrl+QString("'/>");
- //
- QTest::newRow("utf8, text, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abcx1A</root>");
- QTest::newRow("utf8, text, only, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>")+ctrl+QString("</root>");
- QTest::newRow("utf8, text, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("def</root>");
- QTest::newRow("utf8, text, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("efg</root>");
- QTest::newRow("utf8, text, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'>abc")+ctrl+QString("</root>");
- //
- QTest::newRow("utf8, cdata text, legal") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi]]></root>");
- QTest::newRow("utf8, cdata text, only, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[")+ctrl+QString("]]></root>");
- QTest::newRow("utf8, cdata text, 1st char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[")+ctrl+QString("abcdefghi]]></root>");
- QTest::newRow("utf8, cdata text, middle char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcd")+ctrl+QString("efghi]]></root>");
- QTest::newRow("utf8, cdata text, last char, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aa'><![CDATA[abcdefghi")+ctrl+QString("]]></root>");
- //
- QTest::newRow("utf8, mixed, control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a")+ctrl+QString("a'><![CDATA[abcdefghi")+ctrl+QString("]]></root>");
- QTest::newRow("utf8, tag") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><roo")+ctrl+QString("t attr='aa'><![CDATA[abcdefghi]]></roo")+ctrl+QString("t>");
- //
- QTest::newRow("utf8, attributes, 1st char, legal escaping hex") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a&#xA0;'/>");
- QTest::newRow("utf8, attributes, 1st char, control escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='&#x1A;aaa'/>");
- QTest::newRow("utf8, attributes, middle char, legal escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa&#x1A;aaa'/>");
- QTest::newRow("utf8, attributes, last char, control escaping hex") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa&#x1A;'/>");
- QTest::newRow("utf8, attributes, 1st char, legal escaping dec") << true << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a&#160;'/>");
- QTest::newRow("utf8, attributes, 1st char, control escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='&#26;aaaa'/>");
- QTest::newRow("utf8, attributes, middle char, legal escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaa&#26;aaaaa'/>");
- QTest::newRow("utf8, attributes, last char, control escaping dec") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='aaaaaa&#26;'/>");
- QTest::newRow("utf8, tag escaping") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><roo&#x1A;t attr='aa'><![CDATA[abcdefghi]]></roo&#x1A;t>");
- //
- QTest::newRow("utf8, mix of illegal control") << false << QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root attr='a&#0;&#x4;&#x1c;a'><![CDATA[abcdefghi]]></root>");
- //
-}
-
-#include "tst_qxmlstream.moc"
-// vim: et:ts=4:sw=4:sts=4
diff --git a/tests/auto/corelib/xml/xml.pro b/tests/auto/corelib/xml/xml.pro
deleted file mode 100644
index 374e695aa7..0000000000
--- a/tests/auto/corelib/xml/xml.pro
+++ /dev/null
@@ -1,3 +0,0 @@
-TEMPLATE=subdirs
-qtHaveModule(network):qtHaveModule(xml): SUBDIRS= \
- qxmlstream
diff --git a/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro b/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro
index 1b35019f94..9b63dab068 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro
+++ b/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro
@@ -2,5 +2,6 @@ CONFIG += testcase
TARGET = tst_qdbusabstractadaptor
QT = core core-private testlib
TEMPLATE = subdirs
-CONFIG += ordered
+
+qdbusabstractadaptor.depends = qmyserver
SUBDIRS = qmyserver qdbusabstractadaptor
diff --git a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
index 20cd8caad3..80f22ad867 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
+++ b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
@@ -1083,6 +1083,7 @@ void tst_QDBusAbstractAdaptor::methodCallsPeer_data()
void tst_QDBusAbstractAdaptor::methodCallsPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
if (QSysInfo::productType().compare("opensuse", Qt::CaseInsensitive) == 0
&& QSysInfo::productVersion() == QLatin1String("42.1")
&& qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci")) {
@@ -1150,6 +1151,7 @@ void tst_QDBusAbstractAdaptor::methodCallsPeer()
void tst_QDBusAbstractAdaptor::methodCallScriptablePeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1169,6 +1171,7 @@ void tst_QDBusAbstractAdaptor::signalEmissionsPeer_data()
void tst_QDBusAbstractAdaptor::signalEmissionsPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QFETCH(QString, interface);
QFETCH(QString, name);
QFETCH(QVariant, parameter);
@@ -1233,6 +1236,7 @@ void tst_QDBusAbstractAdaptor::signalEmissionsPeer()
void tst_QDBusAbstractAdaptor::sameSignalDifferentPathsPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1261,6 +1265,7 @@ void tst_QDBusAbstractAdaptor::sameSignalDifferentPathsPeer()
void tst_QDBusAbstractAdaptor::sameObjectDifferentPathsPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1283,6 +1288,7 @@ void tst_QDBusAbstractAdaptor::sameObjectDifferentPathsPeer()
void tst_QDBusAbstractAdaptor::scriptableSignalOrNotPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");;
QVERIFY(con.isConnected());
@@ -1356,6 +1362,7 @@ void tst_QDBusAbstractAdaptor::overloadedSignalEmissionPeer_data()
void tst_QDBusAbstractAdaptor::overloadedSignalEmissionPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1407,6 +1414,7 @@ void tst_QDBusAbstractAdaptor::overloadedSignalEmissionPeer()
void tst_QDBusAbstractAdaptor::readPropertiesPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1431,6 +1439,7 @@ void tst_QDBusAbstractAdaptor::readPropertiesPeer()
void tst_QDBusAbstractAdaptor::readPropertiesInvalidInterfacePeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1451,6 +1460,7 @@ void tst_QDBusAbstractAdaptor::readPropertiesEmptyInterfacePeer_data()
void tst_QDBusAbstractAdaptor::readPropertiesEmptyInterfacePeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1481,6 +1491,7 @@ void tst_QDBusAbstractAdaptor::readPropertiesEmptyInterfacePeer()
void tst_QDBusAbstractAdaptor::readAllPropertiesPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1507,6 +1518,7 @@ void tst_QDBusAbstractAdaptor::readAllPropertiesPeer()
void tst_QDBusAbstractAdaptor::readAllPropertiesInvalidInterfacePeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1572,6 +1584,7 @@ void tst_QDBusAbstractAdaptor::readAllPropertiesEmptyInterfacePeer()
void tst_QDBusAbstractAdaptor::writePropertiesPeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1883,6 +1896,7 @@ void tst_QDBusAbstractAdaptor::methodWithMoreThanOneReturnValue()
void tst_QDBusAbstractAdaptor::methodWithMoreThanOneReturnValuePeer()
{
+ QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
diff --git a/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro
index 99462b1b36..26991e2514 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro
+++ b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro
@@ -1,6 +1,6 @@
CONFIG += testcase
TARGET = tst_qdbusabstractinterface
TEMPLATE = subdirs
-CONFIG += ordered
+qdbusabstractinterface.depends = qpinger
SUBDIRS = qpinger qdbusabstractinterface
OTHER_FILES += org.qtproject.QtDBus.Pinger.xml
diff --git a/tests/auto/dbus/qdbusinterface/qdbusinterface.pro b/tests/auto/dbus/qdbusinterface/qdbusinterface.pro
index c8861cb2a4..bc9cf5ffaf 100644
--- a/tests/auto/dbus/qdbusinterface/qdbusinterface.pro
+++ b/tests/auto/dbus/qdbusinterface/qdbusinterface.pro
@@ -2,5 +2,5 @@ CONFIG += testcase
TARGET = tst_qdbusinterface
QT = core testlib
TEMPLATE = subdirs
-CONFIG += ordered
+qdbusinterface.depends = qmyserver
SUBDIRS = qmyserver qdbusinterface
diff --git a/tests/auto/dbus/qdbusmarshall/BLACKLIST b/tests/auto/dbus/qdbusmarshall/BLACKLIST
deleted file mode 100644
index 036378d204..0000000000
--- a/tests/auto/dbus/qdbusmarshall/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-[receiveUnknownType]
-ubuntu-14.04
-opensuse-13.1
diff --git a/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro b/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro
index caedb5a0f2..033602d4e4 100644
--- a/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro
+++ b/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro
@@ -1,7 +1,7 @@
CONFIG += testcase
TARGET = tst_qdbusmarshall
TEMPLATE = subdirs
-CONFIG += ordered
+qdbusmarshall.depends = qpong
SUBDIRS = qpong qdbusmarshall
QT = core-private testlib
diff --git a/tests/auto/gui/image/qicon/fallback_icons/red.png b/tests/auto/gui/image/qicon/fallback_icons/red.png
new file mode 100644
index 0000000000..4a843e744f
--- /dev/null
+++ b/tests/auto/gui/image/qicon/fallback_icons/red.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/qicon.pro b/tests/auto/gui/image/qicon/qicon.pro
index b3c60bf32b..c96f0555ad 100644
--- a/tests/auto/gui/image/qicon/qicon.pro
+++ b/tests/auto/gui/image/qicon/qicon.pro
@@ -6,4 +6,4 @@ qtHaveModule(widgets): QT += widgets
SOURCES += tst_qicon.cpp
RESOURCES = tst_qicon.qrc tst_qicon.cpp
-TESTDATA += icons/* second_icons/* *.png *.svg *.svgz
+TESTDATA += icons/* second_icons/* fallback_icons/* *.png *.svg *.svgz
diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp
index bf8f7ade9e..b1a4e4312f 100644
--- a/tests/auto/gui/image/qicon/tst_qicon.cpp
+++ b/tests/auto/gui/image/qicon/tst_qicon.cpp
@@ -554,6 +554,11 @@ void tst_QIcon::fromTheme()
QCOMPARE(firstSearchPath, QIcon::themeSearchPaths()[0]);
QCOMPARE(secondSearchPath, QIcon::themeSearchPaths()[1]);
+ QString fallbackSearchPath = QStringLiteral(":/fallback_icons");
+ QIcon::setFallbackSearchPaths(QStringList() << fallbackSearchPath);
+ QCOMPARE(QIcon::fallbackSearchPaths().size(), 1);
+ QCOMPARE(fallbackSearchPath, QIcon::fallbackSearchPaths().at(0));
+
QString themeName("testtheme");
QIcon::setThemeName(themeName);
QCOMPARE(QIcon::themeName(), themeName);
@@ -580,6 +585,12 @@ void tst_QIcon::fromTheme()
QVERIFY(QIcon::hasThemeIcon("address-book-new"));
QVERIFY(!abIcon.availableSizes().isEmpty());
+ // Test icon from fallback path
+ QIcon fallbackIcon = QIcon::fromTheme("red");
+ QVERIFY(!fallbackIcon.isNull());
+ QVERIFY(QIcon::hasThemeIcon("red"));
+ QCOMPARE(fallbackIcon.availableSizes().size(), 1);
+
// Test non existing icon
QIcon noIcon = QIcon::fromTheme("broken-icon");
QVERIFY(noIcon.isNull());
diff --git a/tests/auto/gui/image/qicon/tst_qicon.qrc b/tests/auto/gui/image/qicon/tst_qicon.qrc
index 3c8fbba7c2..4b347ec88c 100644
--- a/tests/auto/gui/image/qicon/tst_qicon.qrc
+++ b/tests/auto/gui/image/qicon/tst_qicon.qrc
@@ -6,6 +6,7 @@
<file>./icons/testtheme/16x16/actions/appointment-new.png</file>
<file>./icons/testtheme/22x22/actions/appointment-new.png</file>
<file>./second_icons/testtheme/32x32/actions/appointment-new.png</file>
+<file>./fallback_icons/red.png</file>
<file>./icons/testtheme/index.theme</file>
<file>./icons/testtheme/scalable/actions/svg-only.svg</file>
<file>./icons/themeparent/16x16/actions/address-book-new.png</file>
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/qstandarditemmodel.pro b/tests/auto/gui/itemmodels/qstandarditemmodel/qstandarditemmodel.pro
index 3c12a83f5a..147ca62528 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/qstandarditemmodel.pro
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/qstandarditemmodel.pro
@@ -4,10 +4,4 @@ TARGET = tst_qstandarditemmodel
QT += widgets widgets-private testlib
QT += core-private gui-private
-mtdir = ../../../other/modeltest
-
-INCLUDEPATH += $${mtdir}
-
-SOURCES += $${mtdir}/modeltest.cpp tst_qstandarditemmodel.cpp
-HEADERS += $${mtdir}/modeltest.h
-
+SOURCES += tst_qstandarditemmodel.cpp
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index 2f5537adfe..d393ac70da 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -32,7 +32,6 @@
#include <qstandarditemmodel.h>
#include <QTreeView>
#include <private/qtreeview_p.h>
-#include "modeltest.h"
class tst_QStandardItemModel : public QObject
{
@@ -130,12 +129,15 @@ private slots:
void getMimeDataWithInvalidModelIndex();
void supportedDragDropActions();
+ void taskQTBUG_45114_setItemData();
+
private:
QAbstractItemModel *m_model;
QPersistentModelIndex persistent;
QVector<QModelIndex> rcParent;
QVector<int> rcFirst;
QVector<int> rcLast;
+ QVector<int> currentRoles;
//return true if models have the same structure, and all child have the same text
bool compareModels(QStandardItemModel *model1, QStandardItemModel *model2);
@@ -185,6 +187,12 @@ void tst_QStandardItemModel::init()
connect(m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
this, SLOT(columnsRemoved(QModelIndex,int,int)));
+ connect(m_model, &QAbstractItemModel::dataChanged,
+ this, [this](const QModelIndex &, const QModelIndex &, const QVector<int> &roles)
+ {
+ currentRoles = roles;
+ });
+
rcFirst.fill(-1);
rcLast.fill(-1);
}
@@ -711,15 +719,20 @@ void tst_QStandardItemModel::checkChildren()
void tst_QStandardItemModel::data()
{
+ currentRoles.clear();
// bad args
m_model->setData(QModelIndex(), "bla", Qt::DisplayRole);
+ QCOMPARE(currentRoles, {});
QIcon icon;
for (int r=0; r < m_model->rowCount(); ++r) {
for (int c=0; c < m_model->columnCount(); ++c) {
m_model->setData(m_model->index(r,c), "initialitem", Qt::DisplayRole);
+ QCOMPARE(currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole}));
m_model->setData(m_model->index(r,c), "tooltip", Qt::ToolTipRole);
+ QCOMPARE(currentRoles, {Qt::ToolTipRole});
m_model->setData(m_model->index(r,c), icon, Qt::DecorationRole);
+ QCOMPARE(currentRoles, {Qt::DecorationRole});
}
}
@@ -740,7 +753,7 @@ void tst_QStandardItemModel::clear()
QSignalSpy layoutChangedSpy(&model, SIGNAL(layoutChanged()));
QSignalSpy rowsRemovedSpy(&model, SIGNAL(rowsRemoved(QModelIndex,int,int)));
- ModelTest mt(&model);
+ QAbstractItemModelTester mt(&model);
model.clear();
@@ -1701,5 +1714,65 @@ void tst_QStandardItemModel::supportedDragDropActions()
QCOMPARE(model.supportedDropActions(), Qt::CopyAction | Qt::MoveAction);
}
+void tst_QStandardItemModel::taskQTBUG_45114_setItemData()
+{
+ QStandardItemModel model;
+ QSignalSpy spy(&model, &QStandardItemModel::itemChanged);
+
+ QStandardItem *item = new QStandardItem("item");
+ item->setData(1, Qt::UserRole + 1);
+ item->setData(2, Qt::UserRole + 2);
+ model.appendRow(item);
+
+ QModelIndex index = item->index();
+ QCOMPARE(model.itemData(index).size(), 3);
+
+ QCOMPARE(spy.count(), 0);
+
+ QMap<int, QVariant> roles;
+
+ roles.insert(Qt::UserRole + 1, 1);
+ roles.insert(Qt::UserRole + 2, 2);
+ model.setItemData(index, roles);
+
+ QCOMPARE(spy.count(), 0);
+
+ roles.insert(Qt::UserRole + 1, 1);
+ roles.insert(Qt::UserRole + 2, 2);
+ roles.insert(Qt::UserRole + 3, QVariant());
+ model.setItemData(index, roles);
+
+ QCOMPARE(spy.count(), 0);
+
+ roles.clear();
+ roles.insert(Qt::UserRole + 1, 10);
+ roles.insert(Qt::UserRole + 3, 12);
+ model.setItemData(index, roles);
+
+ QCOMPARE(spy.count(), 1);
+ QMap<int, QVariant> itemRoles = model.itemData(index);
+
+ QCOMPARE(itemRoles.size(), 4);
+ QCOMPARE(itemRoles[Qt::UserRole + 1].toInt(), 10);
+ QCOMPARE(itemRoles[Qt::UserRole + 2].toInt(), 2);
+ QCOMPARE(itemRoles[Qt::UserRole + 3].toInt(), 12);
+
+ roles.clear();
+ roles.insert(Qt::UserRole + 3, 1);
+ model.setItemData(index, roles);
+
+ QCOMPARE(spy.count(), 2);
+
+ roles.clear();
+ roles.insert(Qt::UserRole + 3, QVariant());
+ model.setItemData(index, roles);
+
+ QCOMPARE(spy.count(), 3);
+
+ itemRoles = model.itemData(index);
+ QCOMPARE(itemRoles.size(), 3);
+ QVERIFY(!itemRoles.keys().contains(Qt::UserRole + 3));
+}
+
QTEST_MAIN(tst_QStandardItemModel)
#include "tst_qstandarditemmodel.moc"
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 6ba488aaa7..4f27aeb899 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -68,6 +68,7 @@ private slots:
void changeFocusWindow();
void keyboardModifiers();
void palette();
+ void font();
void modalWindow();
void quitOnLastWindowClosed();
void quitOnLastWindowClosedMulti();
@@ -524,6 +525,31 @@ void tst_QGuiApplication::palette()
QCOMPARE(signalSpy.count(), 2);
}
+void tst_QGuiApplication::font()
+{
+ int argc = 1;
+ char *argv[] = { const_cast<char*>("tst_qguiapplication") };
+ QGuiApplication app(argc, argv);
+ QSignalSpy signalSpy(&app, SIGNAL(fontChanged(QFont)));
+
+ QFont oldFont = QGuiApplication::font();
+ QFont newFont = QFont("BogusFont", 33);
+
+ QGuiApplication::setFont(newFont);
+ QCOMPARE(QGuiApplication::font(), newFont);
+ QCOMPARE(signalSpy.count(), 1);
+ QCOMPARE(signalSpy.at(0).at(0), QVariant(newFont));
+
+ QGuiApplication::setFont(oldFont);
+ QCOMPARE(QGuiApplication::font(), oldFont);
+ QCOMPARE(signalSpy.count(), 2);
+ QCOMPARE(signalSpy.at(1).at(0), QVariant(oldFont));
+
+ QGuiApplication::setFont(oldFont);
+ QCOMPARE(QGuiApplication::font(), oldFont);
+ QCOMPARE(signalSpy.count(), 2);
+}
+
class BlockableWindow : public QWindow
{
Q_OBJECT
diff --git a/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp b/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp
index d882dc3888..8ffd1bb9b4 100644
--- a/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp
+++ b/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp
@@ -74,17 +74,17 @@ public:
initCount = resizeCount = paintCount = 0;
}
- void initializeGL() Q_DECL_OVERRIDE {
+ void initializeGL() override {
++initCount;
}
- void resizeGL(int w, int h) Q_DECL_OVERRIDE {
+ void resizeGL(int w, int h) override {
++resizeCount;
QCOMPARE(w, size().width());
QCOMPARE(h, size().height());
}
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
++paintCount;
QOpenGLContext *ctx = QOpenGLContext::currentContext();
@@ -144,7 +144,7 @@ void tst_QOpenGLWindow::basic()
class PainterWindow : public QOpenGLWindow
{
public:
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
QOpenGLContext *ctx = QOpenGLContext::currentContext();
QVERIFY(ctx);
QCOMPARE(ctx, context());
@@ -183,7 +183,7 @@ public:
PartialPainterWindow(QOpenGLWindow::UpdateBehavior u)
: QOpenGLWindow(u), x(0) { }
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
++paintCount;
QPainter p(this);
@@ -244,7 +244,7 @@ public:
Error
} m_state;
- void paintUnderGL() Q_DECL_OVERRIDE {
+ void paintUnderGL() override {
if (m_state == None || m_state == PaintOver)
m_state = PaintUnder;
else
@@ -252,10 +252,10 @@ public:
GLuint fbo = 0xFFFF;
QOpenGLContext::currentContext()->functions()->glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint *) &fbo);
- QCOMPARE(fbo, GLuint(0));
+ QCOMPARE(fbo, QOpenGLContext::currentContext()->defaultFramebufferObject());
}
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
if (m_state == PaintUnder)
m_state = Paint;
else
@@ -264,11 +264,11 @@ public:
// Using PartialUpdateBlend so paintGL() targets a user fbo, not the default.
GLuint fbo = 0xFFFF;
QOpenGLContext::currentContext()->functions()->glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint *) &fbo);
- QVERIFY(fbo != 0);
+ QVERIFY(fbo != QOpenGLContext::currentContext()->defaultFramebufferObject());
QCOMPARE(fbo, defaultFramebufferObject());
}
- void paintOverGL() Q_DECL_OVERRIDE {
+ void paintOverGL() override {
if (m_state == Paint)
m_state = PaintOver;
else
@@ -276,7 +276,7 @@ public:
GLuint fbo = 0xFFFF;
QOpenGLContext::currentContext()->functions()->glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint *) &fbo);
- QCOMPARE(fbo, GLuint(0));
+ QCOMPARE(fbo, QOpenGLContext::currentContext()->defaultFramebufferObject());
}
};
diff --git a/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp b/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp
index 3421622fe3..ffc440ac2d 100644
--- a/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp
+++ b/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp
@@ -54,7 +54,7 @@ class PainterWindow : public QRasterWindow
public:
void reset() { paintCount = 0; }
- void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE {
+ void paintEvent(QPaintEvent*) override {
++paintCount;
QPainter p(this);
p.fillRect(QRect(0, 0, 100, 100), Qt::blue);
diff --git a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
index ec143896ab..706c66ef14 100644
--- a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
+++ b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
@@ -48,7 +48,7 @@ public:
ulong timestamp;
QTouchDevice *deviceFromEvent;
- explicit tst_QTouchEventWidget(QWidget *parent = Q_NULLPTR) : QWidget(parent)
+ explicit tst_QTouchEventWidget(QWidget *parent = nullptr) : QWidget(parent)
{
reset();
}
@@ -63,7 +63,7 @@ public:
deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false;
}
- bool event(QEvent *event) Q_DECL_OVERRIDE
+ bool event(QEvent *event) override
{
switch (event->type()) {
case QEvent::TouchBegin:
@@ -117,7 +117,7 @@ public:
bool deleteInTouchBegin, deleteInTouchUpdate, deleteInTouchEnd;
tst_QTouchEventGraphicsItem **weakpointer;
- explicit tst_QTouchEventGraphicsItem(QGraphicsItem *parent = Q_NULLPTR)
+ explicit tst_QTouchEventGraphicsItem(QGraphicsItem *parent = nullptr)
: QGraphicsItem(parent), weakpointer(0)
{
reset();
@@ -140,13 +140,13 @@ public:
deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false;
}
- QRectF boundingRect() const Q_DECL_OVERRIDE { return QRectF(0, 0, 10, 10); }
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) Q_DECL_OVERRIDE
+ QRectF boundingRect() const override { return QRectF(0, 0, 10, 10); }
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override
{
painter->fillRect(QRectF(QPointF(0, 0), boundingRect().size()), Qt::yellow);
}
- bool sceneEvent(QEvent *event) Q_DECL_OVERRIDE
+ bool sceneEvent(QEvent *event) override
{
switch (event->type()) {
case QEvent::TouchBegin:
@@ -1628,7 +1628,7 @@ class WindowTouchEventFilter : public QObject
{
Q_OBJECT
public:
- bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *obj, QEvent *event) override;
struct TouchInfo {
QList<QTouchEvent::TouchPoint> points;
QEvent::Type lastSeenType;
diff --git a/tests/auto/gui/kernel/qwindow/BLACKLIST b/tests/auto/gui/kernel/qwindow/BLACKLIST
index 9108cf2c1f..05cf1b5a30 100644
--- a/tests/auto/gui/kernel/qwindow/BLACKLIST
+++ b/tests/auto/gui/kernel/qwindow/BLACKLIST
@@ -1,19 +1,14 @@
[positioning:default]
-ubuntu-14.04
-ubuntu-16.04
+linux
osx-10.12 ci
[positioning:fake]
osx-10.12 ci
[modalWindowPosition]
-ubuntu-14.04
ubuntu-16.04
[modalWithChildWindow]
-ubuntu-14.04
ubuntu-16.04
[setVisible]
-ubuntu-14.04
[modalWindowEnterEventOnHide_QTBUG35109]
-ubuntu-14.04
ubuntu-16.04
osx ci
[modalDialogClosingOneOfTwoModal]
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index f1c4f970cd..18723458f6 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
@@ -106,6 +106,7 @@ private slots:
void flags();
void cleanup();
void testBlockingWindowShownAfterModalDialog();
+ void generatedMouseMove();
private:
QPoint m_availableTopLeft;
@@ -352,7 +353,7 @@ private:
class ColoredWindow : public QRasterWindow {
public:
explicit ColoredWindow(const QColor &color, QWindow *parent = 0) : QRasterWindow(parent), m_color(color) {}
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE
+ void paintEvent(QPaintEvent *) override
{
QPainter p(this);
p.fillRect(QRect(QPoint(0, 0), size()), m_color);
@@ -702,7 +703,7 @@ class PlatformWindowFilter : public QObject
public:
PlatformWindowFilter(QObject *parent = 0)
: QObject(parent)
- , m_window(Q_NULLPTR)
+ , m_window(nullptr)
, m_alwaysExisted(true)
{}
@@ -714,7 +715,7 @@ public:
// If they are, the native platform surface should always exist when we
// receive a QPlatformSurfaceEvent
if (e->type() == QEvent::PlatformSurface && o == m_window) {
- m_alwaysExisted &= (m_window->handle() != Q_NULLPTR);
+ m_alwaysExisted &= (m_window->handle() != nullptr);
}
return false;
}
@@ -741,7 +742,7 @@ void tst_QWindow::platformSurface()
QTRY_COMPARE(window.received(QEvent::PlatformSurface), 1);
QTRY_COMPARE(window.surfaceEventType(), QPlatformSurfaceEvent::SurfaceCreated);
- QTRY_VERIFY(window.handle() != Q_NULLPTR);
+ QTRY_VERIFY(window.handle() != nullptr);
window.destroy();
QTRY_COMPARE(window.received(QEvent::PlatformSurface), 2);
@@ -918,6 +919,7 @@ public:
}
}
void mouseMoveEvent(QMouseEvent *event) {
+ buttonStateInGeneratedMove = event->buttons();
if (ignoreMouse) {
event->ignore();
} else {
@@ -999,6 +1001,7 @@ public:
bool ignoreMouse, ignoreTouch;
bool spinLoopWhenPressed;
+ Qt::MouseButtons buttonStateInGeneratedMove;
};
void tst_QWindow::testInputEvents()
@@ -2313,6 +2316,56 @@ void tst_QWindow::testBlockingWindowShownAfterModalDialog()
QVERIFY(normalWindowAfter.gotBlocked);
}
+void tst_QWindow::generatedMouseMove()
+{
+ InputTestWindow w;
+ w.setGeometry(QRect(m_availableTopLeft + QPoint(100, 100), m_testWindowSize));
+ w.show();
+ QVERIFY(QTest::qWaitForWindowActive(&w));
+ QPoint point(10, 10);
+ QPoint step(2, 2);
+
+ QVERIFY(w.mouseMovedCount == 0);
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::NoButton, Qt::NoButton, QEvent::MouseMove);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 1);
+ // Press that does not change position should not generate mouse move
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton, Qt::LeftButton, QEvent::MouseButtonPress);
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton | Qt::RightButton, Qt::RightButton, QEvent::MouseButtonPress);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 1);
+
+ // Test moves generated for mouse release
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::RightButton, Qt::LeftButton, QEvent::MouseButtonRelease);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 2);
+ QVERIFY(w.buttonStateInGeneratedMove == (Qt::LeftButton | Qt::RightButton));
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::NoButton, Qt::RightButton, QEvent::MouseButtonRelease);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 3);
+ QVERIFY(w.buttonStateInGeneratedMove == Qt::RightButton);
+
+ // Test moves generated for mouse press
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton, Qt::LeftButton, QEvent::MouseButtonPress);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 4);
+ QVERIFY(w.buttonStateInGeneratedMove == Qt::NoButton);
+ point += step;
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton | Qt::RightButton, Qt::RightButton, QEvent::MouseButtonPress);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 5);
+ QVERIFY(w.buttonStateInGeneratedMove == Qt::LeftButton);
+
+ // Release that does not change position should not generate mouse move
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::LeftButton, Qt::RightButton, QEvent::MouseButtonRelease);
+ QWindowSystemInterface::handleMouseEvent(&w, point, point, Qt::NoButton, Qt::LeftButton, QEvent::MouseButtonRelease);
+ QCoreApplication::processEvents();
+ QVERIFY(w.mouseMovedCount == 5);
+}
+
#include <tst_qwindow.moc>
QTEST_MAIN(tst_QWindow)
diff --git a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
index 6809aea086..67d30d7c9a 100644
--- a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
+++ b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
@@ -1423,9 +1423,6 @@ void tst_QColor::achromaticHslHue()
#if 0 // Used to be included in Qt4 for Q_WS_X11
void tst_QColor::setallowX11ColorNames()
{
-#if defined(Q_OS_IRIX)
- QSKIP("This fails due to the gamma settings in the SGI X server");
-#endif
RGBData x11RgbTbl[] = {
// a few standard X11 color names
{ "DodgerBlue1", qRgb(30, 144, 255) },
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index b8243a2b54..8dfaa6f5cd 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -2827,7 +2827,7 @@ void tst_QPainter::monoImages()
}
}
-#if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_CC_MSVC) && !defined(Q_OS_SOLARIS) && !defined(__UCLIBC__)
+#if !defined(Q_OS_AIX) && !defined(Q_CC_MSVC) && !defined(Q_OS_SOLARIS) && !defined(__UCLIBC__)
#include <fenv.h>
static const QString fpeExceptionString(int exception)
@@ -4498,7 +4498,7 @@ void tst_QPainter::drawText_subPixelPositionsInRaster_qtbug5053()
{
QFontMetricsF fm(qApp->font());
- QImage baseLine(fm.width(QChar::fromLatin1('e')), fm.height(), QImage::Format_RGB32);
+ QImage baseLine(fm.horizontalAdvance(QChar::fromLatin1('e')), fm.height(), QImage::Format_RGB32);
baseLine.fill(Qt::white);
{
QPainter p(&baseLine);
diff --git a/tests/auto/gui/painting/qregion/tst_qregion.cpp b/tests/auto/gui/painting/qregion/tst_qregion.cpp
index b20ad0f33c..5256fbd1dc 100644
--- a/tests/auto/gui/painting/qregion/tst_qregion.cpp
+++ b/tests/auto/gui/painting/qregion/tst_qregion.cpp
@@ -158,15 +158,19 @@ void tst_QRegion::rects()
QRegion region(rect);
QVERIFY(region.isEmpty());
QCOMPARE(region.begin(), region.end());
+#if QT_DEPRECATED_SINCE(5, 11)
QVERIFY(region.rects().isEmpty());
+#endif
}
{
QRect rect(10, -20, 30, 40);
QRegion region(rect);
QCOMPARE(region.end(), region.begin() + 1);
QCOMPARE(*region.begin(), rect);
+#if QT_DEPRECATED_SINCE(5, 11)
QCOMPARE(region.rects().count(), 1);
QCOMPARE(region.rects()[0], rect);
+#endif
}
{
QRect r(QPoint(10, 10), QPoint(40, 40));
@@ -193,8 +197,8 @@ void tst_QRegion::swap()
QRegion r1(QRect(0, 0,10,10));
QRegion r2(QRect(10,10,10,10));
r1.swap(r2);
- QCOMPARE(r1.rects().front(), QRect(10,10,10,10));
- QCOMPARE(r2.rects().front(), QRect(0, 0,10,10));
+ QCOMPARE(*r1.begin(), QRect(10,10,10,10));
+ QCOMPARE(*r2.begin(), QRect(0, 0,10,10));
}
void tst_QRegion::setRects()
@@ -202,7 +206,8 @@ void tst_QRegion::setRects()
{
QRegion region;
region.setRects(0, 0);
- QVERIFY(region.rects().isEmpty());
+ QVERIFY(region.isEmpty());
+ QCOMPARE(region.begin(), region.end());
}
{
QRegion region;
@@ -212,7 +217,9 @@ void tst_QRegion::setRects()
QCOMPARE(region, QRegion());
QCOMPARE(region.begin(), region.end());
QVERIFY(!region.boundingRect().isValid());
+#if QT_DEPRECATED_SINCE(5, 11)
QVERIFY(region.rects().isEmpty());
+#endif
}
{
QRegion region;
@@ -220,15 +227,19 @@ void tst_QRegion::setRects()
region.setRects(&rect, 1);
QCOMPARE(region.begin(), region.end());
QVERIFY(!region.boundingRect().isValid());
+#if QT_DEPRECATED_SINCE(5, 11)
QVERIFY(region.rects().isEmpty());
+#endif
}
{
QRegion region;
QRect rect(10, -20, 30, 40);
region.setRects(&rect, 1);
QCOMPARE(region.end(), region.begin() + 1);
+#if QT_DEPRECATED_SINCE(5, 11)
QCOMPARE(region.rects().count(), 1);
QCOMPARE(region.rects()[0], rect);
+#endif
QCOMPARE(*region.begin(), rect);
}
}
@@ -345,9 +356,11 @@ void tst_QRegion::emptyPolygonRegion()
QTEST(int(std::distance(r.begin(), r.end())), "numRects");
QVector<QRect> rects;
std::copy(r.begin(), r.end(), std::back_inserter(rects));
- QTEST(r.rects().count(), "numRects");
- QTEST(r.rects(), "rects");
+ QTEST(rects.size(), "numRects");
+ QTEST(rects, "rects");
+#if QT_DEPRECATED_SINCE(5, 11)
QCOMPARE(r.rects(), rects);
+#endif
}
@@ -890,7 +903,9 @@ void tst_QRegion::isEmpty()
QCOMPARE(region, QRegion());
QCOMPARE(region.rectCount(), 0);
QCOMPARE(region.boundingRect(), QRect());
+#if QT_DEPRECATED_SINCE(5, 11)
QVERIFY(region.rects().isEmpty());
+#endif
}
#if 0 /* Used to be included in Qt4 for Q_WS_X11 */ && defined(QT_BUILD_INTERNAL)
@@ -924,9 +939,11 @@ void tst_QRegion::regionFromPath()
QCOMPARE(rgn.begin()[0], QRect(0, 0, 10, 10));
QCOMPARE(rgn.begin()[1], QRect(0, 100, 100, 1000));
+#if QT_DEPRECATED_SINCE(5, 11)
QCOMPARE(rgn.rects().size(), 2);
QCOMPARE(rgn.rects().at(0), QRect(0, 0, 10, 10));
QCOMPARE(rgn.rects().at(1), QRect(0, 100, 100, 1000));
+#endif
QCOMPARE(rgn.boundingRect(), QRect(0, 0, 100, 1100));
}
@@ -944,11 +961,13 @@ void tst_QRegion::regionFromPath()
QCOMPARE(rgn.begin()[2], QRect(90, 10, 10, 80));
QCOMPARE(rgn.begin()[3], QRect(0, 90, 100, 10));
+#if QT_DEPRECATED_SINCE(5, 11)
QCOMPARE(rgn.rects().size(), 4);
QCOMPARE(rgn.rects().at(0), QRect(0, 0, 100, 10));
QCOMPARE(rgn.rects().at(1), QRect(0, 10, 10, 80));
QCOMPARE(rgn.rects().at(2), QRect(90, 10, 10, 80));
QCOMPARE(rgn.rects().at(3), QRect(0, 90, 100, 10));
+#endif
QCOMPARE(rgn.boundingRect(), QRect(0, 0, 100, 100));
}
diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp
index 82b3657b56..5b1af9b6c9 100644
--- a/tests/auto/gui/qopengl/tst_qopengl.cpp
+++ b/tests/auto/gui/qopengl/tst_qopengl.cpp
@@ -1593,7 +1593,7 @@ void tst_QOpenGL::defaultQGLCurrentBuffer()
ctx->makeCurrent(surface.data());
// Bind default FBO on the current context, and record what's the current QGL FBO. It should
- // be Q_NULLPTR because the default platform OpenGL FBO is not backed by a
+ // be nullptr because the default platform OpenGL FBO is not backed by a
// QOpenGLFramebufferObject.
QOpenGLFramebufferObject::bindDefault();
QOpenGLFramebufferObject *defaultQFBO = QOpenGLContextPrivate::get(ctx.data())->qgl_current_fbo;
diff --git a/tests/auto/gui/qvulkan/tst_qvulkan.cpp b/tests/auto/gui/qvulkan/tst_qvulkan.cpp
index cc4bc43f92..c80c3fed97 100644
--- a/tests/auto/gui/qvulkan/tst_qvulkan.cpp
+++ b/tests/auto/gui/qvulkan/tst_qvulkan.cpp
@@ -166,7 +166,7 @@ static void waitForUnexposed(QWindow *w)
if (remaining <= 0)
break;
QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
- QCoreApplication::sendPostedEvents(Q_NULLPTR, QEvent::DeferredDelete);
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
QTest::qSleep(10);
}
}
diff --git a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
index dbe5bf7cc6..2a53f5d633 100644
--- a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
+++ b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
@@ -87,10 +87,8 @@ void tst_QCssParser::scanner_data()
#if defined(Q_OS_ANDROID) || defined(Q_OS_WINRT)
QDir d(":/");
-#elif !defined(Q_OS_IRIX)
- QDir d(SRCDIR);
#else
- QDir d(QDir::current());
+ QDir d(SRCDIR);
#endif
d.cd("testdata");
d.cd("scanner");
diff --git a/tests/auto/gui/text/qfont/BLACKLIST b/tests/auto/gui/text/qfont/BLACKLIST
index 295c61ff12..42cb8408f4 100644
--- a/tests/auto/gui/text/qfont/BLACKLIST
+++ b/tests/auto/gui/text/qfont/BLACKLIST
@@ -1,6 +1,2 @@
-[exactMatch]
-# QTBUG-46054
-opensuse-13.1
-opensuse-42.1
[defaultFamily]
b2qt
diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
index e52cb63384..ebe9d3b992 100644
--- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
+++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
@@ -312,7 +312,7 @@ void tst_QFontDatabase::condensedFontWidth()
QFont testFontCondensed("QtBidiTestFontCondensed");
QFontMetrics fmTF(testFont);
QFontMetrics fmTFC(testFontCondensed);
- QVERIFY(fmTF.width(testString()) > fmTFC.width(testString()));
+ QVERIFY(fmTF.horizontalAdvance(testString()) > fmTFC.horizontalAdvance(testString()));
}
@@ -335,15 +335,15 @@ void tst_QFontDatabase::condensedFontMatching()
QEXPECT_FAIL("","No matching of sub-family by stretch on Windows", Continue);
#endif
- QCOMPARE(QFontMetrics(tfcByStretch).width(testString()),
- QFontMetrics(tfcByStyleName).width(testString()));
+ QCOMPARE(QFontMetrics(tfcByStretch).horizontalAdvance(testString()),
+ QFontMetrics(tfcByStyleName).horizontalAdvance(testString()));
if (!db.hasFamily("QtBidiTestFontCondensed"))
QSKIP("This platform doesn't support font sub-family names (QTBUG-55625)");
QFont tfcBySubfamilyName("QtBidiTestFontCondensed");
- QCOMPARE(QFontMetrics(tfcByStyleName).width(testString()),
- QFontMetrics(tfcBySubfamilyName).width(testString()));
+ QCOMPARE(QFontMetrics(tfcByStyleName).horizontalAdvance(testString()),
+ QFontMetrics(tfcBySubfamilyName).horizontalAdvance(testString()));
}
void tst_QFontDatabase::rasterFonts()
diff --git a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp
index 0a422fca17..9e705b4a00 100644
--- a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp
+++ b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp
@@ -48,7 +48,7 @@ private slots:
void veryNarrowElidedText();
void averageCharWidth();
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#if QT_DEPRECATED_SINCE(5, 11) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void bypassShaping();
#endif
@@ -167,7 +167,7 @@ void tst_QFontMetrics::elidedText()
QFETCH(QFont, font);
QFETCH(QString, text);
QFontMetrics fm(font);
- int w = fm.width(text);
+ int w = fm.horizontalAdvance(text);
QString newtext = fm.elidedText(text,Qt::ElideRight,w+1, 0);
QCOMPARE(text,newtext); // should not elide
newtext = fm.elidedText(text,Qt::ElideRight,w-1, 0);
@@ -191,7 +191,7 @@ void tst_QFontMetrics::averageCharWidth()
QVERIFY(fmf.averageCharWidth() != 0);
}
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
+#if QT_DEPRECATED_SINCE(5, 11) && QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void tst_QFontMetrics::bypassShaping()
{
QFont f;
@@ -202,7 +202,7 @@ void tst_QFontMetrics::bypassShaping()
QVERIFY(textWidth != 0);
int charsWidth = 0;
for (int i = 0; i < text.size(); ++i)
- charsWidth += fm.width(text[i]);
+ charsWidth += fm.horizontalAdvance(text[i]);
// This assertion is needed in Qt WebKit's WebCore::Font::offsetForPositionForSimpleText
QCOMPARE(textWidth, charsWidth);
}
@@ -226,7 +226,7 @@ template<class FontMetrics, typename PrimitiveType> void elidedMultiLength_helpe
// Not even wide enough for "small" - should use ellipsis
QChar ellipsisChar(0x2026);
QString text1_el = QString::fromLatin1("s") + ellipsisChar;
- PrimitiveType width_small = fm.width(text1_el);
+ PrimitiveType width_small = fm.horizontalAdvance(text1_el);
QCOMPARE(fm.elidedText(text1,Qt::ElideRight, width_small + 1), text1_el);
}
diff --git a/tests/auto/gui/text/qrawfont/BLACKLIST b/tests/auto/gui/text/qrawfont/BLACKLIST
deleted file mode 100644
index a614595689..0000000000
--- a/tests/auto/gui/text/qrawfont/BLACKLIST
+++ /dev/null
@@ -1,4 +0,0 @@
-[correctFontData]
-osx-10.8
-[unsupportedWritingSystem]
-osx-10.8
diff --git a/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp b/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
index 37f94d0278..373ad7fef9 100644
--- a/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
+++ b/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
@@ -93,6 +93,9 @@ private slots:
void fallbackFontsOrder();
+ void qtbug65923_partal_clone_data();
+ void qtbug65923_partal_clone();
+
private:
QString testFont;
QString testFontBoldItalic;
@@ -1044,6 +1047,42 @@ void tst_QRawFont::fallbackFontsOrder()
fontDatabase.removeApplicationFont(id);
}
+void tst_QRawFont::qtbug65923_partal_clone_data()
+{
+ QTest::addColumn<bool>("shouldClone");
+
+ QTest::newRow("Without cloning font engine") << false;
+ QTest::newRow("Cloning font engine") << true;
+}
+
+void tst_QRawFont::qtbug65923_partal_clone()
+{
+ QFile file(testFont);
+ file.open(QIODevice::ReadOnly);
+ QByteArray fontData = file.readAll();
+
+ QRawFont outerFont;
+
+ {
+ QRawFont innerFont(fontData, 16, QFont::PreferDefaultHinting);
+
+ QFETCH(bool, shouldClone);
+ if (shouldClone) {
+ // This will trigger QFontEngine::cloneWithSize
+ innerFont.setPixelSize(innerFont.pixelSize() + 1);
+ }
+
+ outerFont = innerFont;
+ }
+
+ // This will detach if data is shared with the raw font. If the raw font has
+ // a naked reference to the data, without informing Qt of it via the ref count
+ // of the byte array, this will result in clearing 'live' data.
+ fontData.fill('\0');
+
+ QVERIFY(!outerFont.boundingRect(42).isEmpty());
+}
+
#endif // QT_NO_RAWFONT
QTEST_MAIN(tst_QRawFont)
diff --git a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
index f4e3356ad0..45cc94afad 100644
--- a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
+++ b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
@@ -98,6 +98,8 @@ private slots:
void multiLine();
+ void size_qtbug65836();
+
private:
bool supportsTransformations() const;
@@ -639,7 +641,7 @@ void tst_QStaticText::setPenPlainText()
font.setStyleStrategy(QFont::NoAntialias);
QFontMetricsF fm(font);
- QImage image(qCeil(fm.width("XXXXX")), qCeil(fm.height()), format);
+ QImage image(qCeil(fm.horizontalAdvance("XXXXX")), qCeil(fm.height()), format);
image.fill(Qt::white);
{
QPainter p(&image);
@@ -662,7 +664,7 @@ void tst_QStaticText::setPenRichText()
font.setStyleStrategy(QFont::NoAntialias);
QFontMetricsF fm(font);
- QPixmap image(qCeil(fm.width("XXXXX")), qCeil(fm.height()));
+ QPixmap image(qCeil(fm.horizontalAdvance("XXXXX")), qCeil(fm.height()));
image.fill(Qt::white);
{
QPainter p(&image);
@@ -686,7 +688,7 @@ void tst_QStaticText::richTextOverridesPen()
font.setStyleStrategy(QFont::NoAntialias);
QFontMetricsF fm(font);
- QPixmap image(qCeil(fm.width("XXXXX")), qCeil(fm.height()));
+ QPixmap image(qCeil(fm.horizontalAdvance("XXXXX")), qCeil(fm.height()));
image.fill(Qt::white);
{
QPainter p(&image);
@@ -862,19 +864,19 @@ void tst_QStaticText::textDocumentColor()
class TestPaintEngine: public QPaintEngine
{
public:
- void drawTextItem(const QPointF &p, const QTextItem &) Q_DECL_OVERRIDE
+ void drawTextItem(const QPointF &p, const QTextItem &) override
{
differentVerticalPositions.insert(qRound(p.y()));
}
- void updateState(const QPaintEngineState &) Q_DECL_OVERRIDE {}
+ void updateState(const QPaintEngineState &) override {}
- void drawPolygon(const QPointF *, int , PolygonDrawMode ) Q_DECL_OVERRIDE {}
+ void drawPolygon(const QPointF *, int , PolygonDrawMode ) override {}
- bool begin(QPaintDevice *) Q_DECL_OVERRIDE { return true; }
- bool end() Q_DECL_OVERRIDE { return true; }
- void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) Q_DECL_OVERRIDE {}
- Type type() const Q_DECL_OVERRIDE
+ bool begin(QPaintDevice *) override { return true; }
+ bool end() override { return true; }
+ void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) override {}
+ Type type() const override
{
return User;
}
@@ -912,5 +914,42 @@ void tst_QStaticText::multiLine()
QCOMPARE(paintEngine->differentVerticalPositions.size(), 2);
}
+void tst_QStaticText::size_qtbug65836()
+{
+ const QString text = QLatin1String("Lorem ipsum dolor sit amet, "
+ "consectetur adipiscing elit.");
+ QFont font("Courier");
+ font.setPixelSize(15);
+
+ {
+ QStaticText st1(text);
+ st1.setTextFormat(Qt::PlainText);
+ st1.prepare(QTransform(), font);
+
+ QStaticText st2(text);
+ st2.setTextFormat(Qt::RichText);
+ QTextOption opt;
+ opt.setWrapMode(QTextOption::NoWrap);
+ st2.setTextOption(opt);
+ st2.prepare(QTransform(), font);
+
+ QCOMPARE(st1.size(), st2.size());
+ }
+
+ {
+ QStaticText st1(text);
+ st1.setTextFormat(Qt::PlainText);
+ st1.setTextWidth(10.0);
+ st1.prepare(QTransform(), font);
+
+ QStaticText st2(text);
+ st2.setTextFormat(Qt::RichText);
+ st2.setTextWidth(10.0);
+ st2.prepare(QTransform(), font);
+
+ QCOMPARE(st1.size(), st2.size());
+ }
+}
+
QTEST_MAIN(tst_QStaticText)
#include "tst_qstatictext.moc"
diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
index 2f3da2c196..ebdb5a56af 100644
--- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
+++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
@@ -611,7 +611,7 @@ void tst_QTextDocument::task240325()
QFontMetrics fm(p.font());
// Set page size to contain image and one "Foobar"
- doc->setPageSize(QSize(100 + fm.width("Foobar")*2, 1000));
+ doc->setPageSize(QSize(100 + fm.horizontalAdvance("Foobar")*2, 1000));
// Force layout
doc->drawContents(&p);
diff --git a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp
index b8afd6a447..4ab80bdcfe 100644
--- a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp
+++ b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp
@@ -283,20 +283,29 @@ void tst_QTextFormat::testLetterSpacing()
QCOMPARE(format.hasProperty(QTextFormat::FontLetterSpacingType), false);
format.setFontLetterSpacingType(QFont::AbsoluteSpacing);
+ QCOMPARE(format.font().letterSpacingType(), QFont::AbsoluteSpacing);
+
format.setFontLetterSpacing(10.0);
+ QCOMPARE(format.font().letterSpacing(), 10.0);
QCOMPARE(format.hasProperty(QTextFormat::FontLetterSpacing), true);
QCOMPARE(format.property(QTextFormat::FontLetterSpacing).toDouble(), 10.0);
QCOMPARE(format.property(QTextFormat::FontLetterSpacingType).toInt(), int(QFont::AbsoluteSpacing));
format.setFontLetterSpacingType(QFont::PercentageSpacing);
+ QCOMPARE(format.font().letterSpacingType(), QFont::PercentageSpacing);
+
format.setFontLetterSpacing(110.0);
+ QCOMPARE(format.font().letterSpacing(), 110.0);
QCOMPARE(format.property(QTextFormat::FontLetterSpacing).toDouble(), 110.0);
QCOMPARE(format.property(QTextFormat::FontLetterSpacingType).toInt(), int(QFont::PercentageSpacing));
format.setFontLetterSpacingType(QFont::AbsoluteSpacing);
+ QCOMPARE(format.font().letterSpacingType(), QFont::AbsoluteSpacing);
+
format.setFontLetterSpacing(10.0);
+ QCOMPARE(format.font().letterSpacing(), 10.0);
QCOMPARE(format.property(QTextFormat::FontLetterSpacingType).toInt(), int(QFont::AbsoluteSpacing));
QCOMPARE(format.property(QTextFormat::FontLetterSpacing).toDouble(), 10.0);
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index b68a014bff..4e3d1da8fe 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -203,7 +203,7 @@ void tst_QTextLayout::init()
testFont.setPixelSize(TESTFONT_SIZE);
testFont.setWeight(QFont::Normal);
#ifdef QT_BUILD_INTERNAL
- QCOMPARE(QFontMetrics(testFont).width('a'), testFont.pixelSize());
+ QCOMPARE(QFontMetrics(testFont).horizontalAdvance('a'), testFont.pixelSize());
#endif
}
diff --git a/tests/auto/gui/text/qtextscriptengine/BLACKLIST b/tests/auto/gui/text/qtextscriptengine/BLACKLIST
deleted file mode 100644
index 52eb9086a9..0000000000
--- a/tests/auto/gui/text/qtextscriptengine/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[thaiWithZWJ]
-rhel-7.2
diff --git a/tests/auto/network/access/http2/http2srv.h b/tests/auto/network/access/http2/http2srv.h
index ff4a1319e2..76c5a0ee36 100644
--- a/tests/auto/network/access/http2/http2srv.h
+++ b/tests/auto/network/access/http2/http2srv.h
@@ -116,7 +116,7 @@ private slots:
void readReady();
private:
- void incomingConnection(qintptr socketDescriptor) Q_DECL_OVERRIDE;
+ void incomingConnection(qintptr socketDescriptor) override;
quint32 clientSetting(Http2::Settings identifier, quint32 defaultValue);
bool readMethodLine();
diff --git a/tests/auto/network/access/qftp/BLACKLIST b/tests/auto/network/access/qftp/BLACKLIST
index 92ad1aee8f..96d9274653 100644
--- a/tests/auto/network/access/qftp/BLACKLIST
+++ b/tests/auto/network/access/qftp/BLACKLIST
@@ -1,14 +1,10 @@
# QTBUG-15111
[activeMode:WithoutProxy]
-opensuse-13.1 64bit
redhatenterpriselinuxworkstation-6.6
-osx-10.10
[activeMode:WithoutProxyWithSession]
-opensuse-13.1 64bit
redhatenterpriselinuxworkstation-6.6
-osx-10.10
[list:epsvNotSupported]
*
diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp
index f9f48506d6..1620c2ade6 100644
--- a/tests/auto/network/access/qftp/tst_qftp.cpp
+++ b/tests/auto/network/access/qftp/tst_qftp.cpp
@@ -43,6 +43,7 @@
#include <QtNetwork/private/qnetworksession_p.h>
#include <QTcpServer>
#include <QHostInfo>
+#include <QTcpSocket>
#include "../../../network-settings.h"
@@ -253,6 +254,8 @@ void tst_QFtp::init()
} else {
networkSessionExplicit.clear();
}
+#else
+ Q_UNUSED(setSession);
#endif
delete ftp;
diff --git a/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp b/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
index ec965a61b2..edfef09a96 100644
--- a/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
+++ b/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
@@ -104,7 +104,7 @@ void tst_QHttpNetworkReply::parseHeader()
class TestHeaderSocket : public QAbstractSocket
{
public:
- explicit TestHeaderSocket(const QByteArray &input) : QAbstractSocket(QAbstractSocket::TcpSocket, Q_NULLPTR)
+ explicit TestHeaderSocket(const QByteArray &input) : QAbstractSocket(QAbstractSocket::TcpSocket, nullptr)
{
inputBuffer.setData(input);
inputBuffer.open(QIODevice::ReadOnly | QIODevice::Unbuffered);
diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST
index 1052239797..7ffc2797cc 100644
--- a/tests/auto/network/access/qnetworkreply/BLACKLIST
+++ b/tests/auto/network/access/qnetworkreply/BLACKLIST
@@ -2,10 +2,6 @@
osx
[authenticationCacheAfterCancel]
windows
-[ioGetFromBuiltinHttp:http+limited]
-ubuntu-14.04
-[ioGetFromBuiltinHttp:https+limited]
-ubuntu-14.04
[httpAbort]
*
[backgroundRequestInterruption:ftp, bg, nobg]
@@ -22,6 +18,9 @@ windows
windows
[ioPostToHttpFromSocket]
windows
+# QTBUG-66247
+[ioHttpRedirect]
+windows
[ioHttpRedirectMultipartPost]
linux
[ioHttpRedirectPolicy]
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index a2e602e4c5..69bd78a4f0 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -548,7 +548,9 @@ static void setupSslServer(QSslSocket* serverSocket)
}
#endif
-// Limited support for POST and PUT.
+// NOTE: MiniHttpServer has a very limited support of PUT/POST requests! Make
+// sure you understand the server's code before PUTting/POSTing data (and
+// probably you'll have to update the logic).
class MiniHttpServer: public QTcpServer
{
Q_OBJECT
@@ -591,6 +593,12 @@ public:
dataToTransmit = data;
}
+ void clearHeaderParserState()
+ {
+ contentLength = 0;
+ receivedData.clear();
+ }
+
protected:
void incomingConnection(qintptr socketDescriptor)
{
@@ -672,6 +680,7 @@ private slots:
}
public slots:
+
void readyReadSlot()
{
QTcpSocket *currentClient = qobject_cast<QTcpSocket *>(sender());
@@ -7341,6 +7350,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+ server.clearHeaderParserState();
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
@@ -7350,6 +7360,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
+ server.clearHeaderParserState();
server.setDataToTransmit(postReply);
request.setRawHeader("Content-Type", "text/plain");
reply.reset(manager.post(request, postData));
@@ -7362,6 +7373,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->readAll(), QByteArray("POST"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+ server.clearHeaderParserState();
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
@@ -7372,6 +7384,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+ server.clearHeaderParserState();
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
@@ -7382,6 +7395,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), true);
+ server.clearHeaderParserState();
server.setDataToTransmit(putReply);
reply.reset(manager.put(request, postData));
@@ -7391,6 +7405,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->error(), QNetworkReply::NoError);
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+ server.clearHeaderParserState();
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
@@ -7401,6 +7416,7 @@ void tst_QNetworkReply::qtbug28035browserDoesNotLoadQtProjectOrgCorrectly() {
QCOMPARE(reply->readAll(), QByteArray("GET"));
QCOMPARE(reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+ server.clearHeaderParserState();
server.setDataToTransmit(getReply);
reply.reset(manager.get(request));
diff --git a/tests/auto/network/kernel/qhostaddress/qhostaddress.pro b/tests/auto/network/kernel/qhostaddress/qhostaddress.pro
index a79fa2f59d..b5d6ea6459 100644
--- a/tests/auto/network/kernel/qhostaddress/qhostaddress.pro
+++ b/tests/auto/network/kernel/qhostaddress/qhostaddress.pro
@@ -2,7 +2,6 @@ CONFIG += testcase
TARGET = tst_qhostaddress
SOURCES += tst_qhostaddress.cpp
-
-QT = core network testlib
+QT = core network-private testlib
win32:LIBS += -lws2_32
diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
index bc3f5650ba..224e4d61a9 100644
--- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
+++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
@@ -27,9 +27,10 @@
**
****************************************************************************/
+#include <qhostaddress.h>
+#include <private/qhostaddress_p.h>
#include <qcoreapplication.h>
#include <QtTest/QtTest>
-#include <qhostaddress.h>
#include <qplatformdefs.h>
#include <qdebug.h>
#include <qhash.h>
@@ -46,6 +47,7 @@
# include <netinet/in.h>
#endif
+Q_DECLARE_METATYPE(AddressClassification)
Q_DECLARE_METATYPE(QHostAddress::SpecialAddress)
class tst_QHostAddress : public QObject
@@ -75,10 +77,8 @@ private slots:
void parseSubnet();
void isInSubnet_data();
void isInSubnet();
- void isLoopback_data();
- void isLoopback();
- void isMulticast_data();
- void isMulticast();
+ void classification_data();
+ void classification();
void convertv4v6_data();
void convertv4v6();
};
@@ -667,90 +667,88 @@ void tst_QHostAddress::isInSubnet()
QTEST(address.isInSubnet(prefix, prefixLength), "result");
}
-void tst_QHostAddress::isLoopback_data()
-{
- QTest::addColumn<QHostAddress>("address");
- QTest::addColumn<bool>("result");
-
- QTest::newRow("default") << QHostAddress() << false;
- QTest::newRow("invalid") << QHostAddress("&&&") << false;
-
- QTest::newRow("ipv6_loop") << QHostAddress(QHostAddress::LocalHostIPv6) << true;
- QTest::newRow("::1") << QHostAddress("::1") << true;
-
- QTest::newRow("ipv4_loop") << QHostAddress(QHostAddress::LocalHost) << true;
- QTest::newRow("127.0.0.1") << QHostAddress("127.0.0.1") << true;
- QTest::newRow("127.0.0.2") << QHostAddress("127.0.0.2") << true;
- QTest::newRow("127.3.2.1") << QHostAddress("127.3.2.1") << true;
-
- QTest::newRow("1.2.3.4") << QHostAddress("1.2.3.4") << false;
- QTest::newRow("10.0.0.4") << QHostAddress("10.0.0.4") << false;
- QTest::newRow("192.168.3.4") << QHostAddress("192.168.3.4") << false;
-
- QTest::newRow("::") << QHostAddress("::") << false;
- QTest::newRow("Any") << QHostAddress(QHostAddress::Any) << false;
- QTest::newRow("AnyIPv4") << QHostAddress(QHostAddress::AnyIPv4) << false;
- QTest::newRow("AnyIPv6") << QHostAddress(QHostAddress::AnyIPv6) << false;
- QTest::newRow("Broadcast") << QHostAddress(QHostAddress::Broadcast) << false;
- QTest::newRow("Null") << QHostAddress(QHostAddress::Null) << false;
- QTest::newRow("ipv6-all-ffff") << QHostAddress("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") << false;
-
- QTest::newRow("::ffff:127.0.0.1") << QHostAddress("::ffff:127.0.0.1") << true;
- QTest::newRow("::ffff:127.0.0.2") << QHostAddress("::ffff:127.0.0.2") << true;
- QTest::newRow("::ffff:127.3.2.1") << QHostAddress("::ffff:127.3.2.1") << true;
-
-}
-
-void tst_QHostAddress::isLoopback()
-{
- QFETCH(QHostAddress, address);
- QFETCH(bool, result);
-
- QCOMPARE(address.isLoopback(), result);
-}
-
-void tst_QHostAddress::isMulticast_data()
+void tst_QHostAddress::classification_data()
{
QTest::addColumn<QHostAddress>("address");
- QTest::addColumn<bool>("result");
-
- QTest::newRow("default") << QHostAddress() << false;
- QTest::newRow("invalid") << QHostAddress("&&&") << false;
-
- QTest::newRow("ipv6_loop") << QHostAddress(QHostAddress::LocalHostIPv6) << false;
- QTest::newRow("::1") << QHostAddress("::1") << false;
- QTest::newRow("ipv4_loop") << QHostAddress(QHostAddress::LocalHost) << false;
- QTest::newRow("127.0.0.1") << QHostAddress("127.0.0.1") << false;
- QTest::newRow("::") << QHostAddress("::") << false;
- QTest::newRow("Any") << QHostAddress(QHostAddress::Any) << false;
- QTest::newRow("AnyIPv4") << QHostAddress(QHostAddress::AnyIPv4) << false;
- QTest::newRow("AnyIPv6") << QHostAddress(QHostAddress::AnyIPv6) << false;
- QTest::newRow("Broadcast") << QHostAddress(QHostAddress::Broadcast) << false;
- QTest::newRow("Null") << QHostAddress(QHostAddress::Null) << false;
-
- QTest::newRow("223.255.255.255") << QHostAddress("223.255.255.255") << false;
- QTest::newRow("224.0.0.0") << QHostAddress("224.0.0.0") << true;
- QTest::newRow("239.255.255.255") << QHostAddress("239.255.255.255") << true;
- QTest::newRow("240.0.0.0") << QHostAddress("240.0.0.0") << false;
-
- QTest::newRow("::ffff:223.255.255.255") << QHostAddress("::ffff:223.255.255.255") << false;
- QTest::newRow("::ffff:224.0.0.0") << QHostAddress("::ffff:224.0.0.0") << true;
- QTest::newRow("::ffff:239.255.255.255") << QHostAddress("::ffff:239.255.255.255") << true;
- QTest::newRow("::ffff:240.0.0.0") << QHostAddress("::ffff:240.0.0.0") << false;
-
- QTest::newRow("fc00::") << QHostAddress("fc00::") << false;
- QTest::newRow("fe80::") << QHostAddress("fe80::") << false;
- QTest::newRow("fec0::") << QHostAddress("fec0::") << false;
- QTest::newRow("ff00::") << QHostAddress("ff00::") << true;
- QTest::newRow("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") << QHostAddress("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") << true;
+ QTest::addColumn<AddressClassification>("result");
+
+ QTest::newRow("default") << QHostAddress() << UnknownAddress;
+ QTest::newRow("invalid") << QHostAddress("&&&") << UnknownAddress;
+
+ QTest::newRow("Any") << QHostAddress(QHostAddress::Any) << LocalNetAddress;
+ QTest::newRow("Null") << QHostAddress(QHostAddress::Null) << UnknownAddress;
+
+ // IPv6 address space
+ auto addV6 = [](const char *str, AddressClassification cl) {
+ QTest::newRow(str) << QHostAddress(str) << cl;
+ };
+ QTest::newRow("AnyIPv6") << QHostAddress(QHostAddress::AnyIPv6) << LocalNetAddress;
+ QTest::newRow("ipv6_loop") << QHostAddress(QHostAddress::LocalHostIPv6) << LoopbackAddress;
+ addV6("::", LocalNetAddress);
+ addV6("::1", LoopbackAddress);
+ addV6("::2", GlobalAddress);
+ addV6("2000::", GlobalAddress);
+ addV6("3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", GlobalAddress);
+ addV6("fbff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", GlobalAddress);
+ addV6("fc00::", UniqueLocalAddress);
+ addV6("fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", UniqueLocalAddress);
+ addV6("fe00::", UnknownAddress);
+ addV6("fe7f:ffff:ffff:ffff:ffff:ffff:ffff:ffff", UnknownAddress);
+ addV6("fe80::", LinkLocalAddress);
+ addV6("febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff", LinkLocalAddress);
+ addV6("fec0::", SiteLocalAddress);
+ addV6("feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", SiteLocalAddress);
+ addV6("ff00::", MulticastAddress);
+ addV6("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", MulticastAddress);
+
+ // IPv4 address space
+ auto addV4 = [](const char *str, AddressClassification cl) {
+ QTest::newRow(str) << QHostAddress(str) << cl;
+ QByteArray v6 = "::ffff:";
+ v6 += str;
+ QTest::newRow(v6.constData()) << QHostAddress(QString::fromLatin1(v6)) << cl;
+ };
+ QTest::newRow("AnyIPv4") << QHostAddress(QHostAddress::AnyIPv4) << LocalNetAddress;
+ QTest::newRow("ipv4_loop") << QHostAddress(QHostAddress::LocalHost) << LoopbackAddress;
+ QTest::newRow("Broadcast") << QHostAddress(QHostAddress::Broadcast) << BroadcastAddress;
+ addV4("0.0.0.0", LocalNetAddress);
+ addV4("0.0.0.1", LocalNetAddress);
+ addV4("0.255.255.255", LocalNetAddress);
+ addV4("1.0.0.0", GlobalAddress);
+ addV4("1.2.3.4", GlobalAddress);
+ addV4("10.0.0.4", PrivateNetworkAddress);
+ addV4("127.0.0.1", LoopbackAddress);
+ addV4("127.0.0.2", LoopbackAddress);
+ addV4("127.255.255.255", LoopbackAddress);
+ addV4("192.168.3.4", PrivateNetworkAddress);
+ addV4("223.255.255.255", GlobalAddress);
+ addV4("224.0.0.0", MulticastAddress);
+ addV4("239.255.255.255", MulticastAddress);
+ addV4("240.0.0.0", UnknownAddress);
+ addV4("255.255.255.254", UnknownAddress);
+ addV4("255.255.255.255", BroadcastAddress);
}
-void tst_QHostAddress::isMulticast()
+void tst_QHostAddress::classification()
{
QFETCH(QHostAddress, address);
- QFETCH(bool, result);
-
- QCOMPARE(address.isMulticast(), result);
+ QFETCH(AddressClassification, result);
+
+ bool isLoopback = (result == LoopbackAddress);
+ bool isGlobal = (result & GlobalAddress); // GlobalAddress is a bit
+ bool isLinkLocal = (result == LinkLocalAddress);
+ bool isSiteLocal = (result == SiteLocalAddress);
+ bool isUniqueLocalAddress = (result == UniqueLocalAddress);
+ bool isMulticast = (result == MulticastAddress);
+ bool isBroadcast = (result == BroadcastAddress);
+
+ QCOMPARE(address.isLoopback(), isLoopback);
+ QCOMPARE(address.isGlobal(), isGlobal);
+ QCOMPARE(address.isLinkLocal(), isLinkLocal);
+ QCOMPARE(address.isSiteLocal(), isSiteLocal);
+ QCOMPARE(address.isUniqueLocalUnicast(), isUniqueLocalAddress);
+ QCOMPARE(address.isMulticast(), isMulticast);
+ QCOMPARE(address.isBroadcast(), isBroadcast);
}
void tst_QHostAddress::convertv4v6_data()
diff --git a/tests/auto/network/kernel/qnetworkinterface/BLACKLIST b/tests/auto/network/kernel/qnetworkinterface/BLACKLIST
index 23bb688d9a..33bdf540b6 100644
--- a/tests/auto/network/kernel/qnetworkinterface/BLACKLIST
+++ b/tests/auto/network/kernel/qnetworkinterface/BLACKLIST
@@ -1,2 +1,4 @@
-[localAddress]
-linux
+# QTBUG-65667
+[localAddress:linklocal-ipv4]
+msvc-2015 ci
+msvc-2017 ci
diff --git a/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp b/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp
index 36dcec0a82..0b4ed4870d 100644
--- a/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp
+++ b/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp
@@ -40,6 +40,8 @@
#include "../../../network-settings.h"
#include "emulationdetector.h"
+Q_DECLARE_METATYPE(QHostAddress)
+
class tst_QNetworkInterface : public QObject
{
Q_OBJECT
@@ -57,6 +59,7 @@ private slots:
void consistencyCheck();
void loopbackIPv4();
void loopbackIPv6();
+ void localAddress_data();
void localAddress();
void interfaceFromXXX_data();
void interfaceFromXXX();
@@ -138,7 +141,9 @@ void tst_QNetworkInterface::dump()
qDebug() << " index: " << i.index();
qDebug() << " flags: " << qPrintable(flags);
+ qDebug() << " type: " << i.type();
qDebug() << " hw address:" << qPrintable(i.hardwareAddress());
+ qDebug() << " MTU: " << i.maxTransmissionUnit();
int count = 0;
foreach (const QNetworkAddressEntry &e, i.addressEntries()) {
@@ -151,6 +156,16 @@ void tst_QNetworkInterface::dump()
<< " (" << qPrintable(e.netmask().toString()) << ')';
if (!e.broadcast().isNull())
s.nospace() << " broadcast " << qPrintable(e.broadcast().toString());
+ if (e.dnsEligibility() == QNetworkAddressEntry::DnsEligible)
+ s.nospace() << " dns-eligible";
+ else if (e.dnsEligibility() == QNetworkAddressEntry::DnsIneligible)
+ s.nospace() << " dns-ineligible";
+ if (e.isLifetimeKnown()) {
+#define printable(l) qPrintable(l.isForever() ? "forever" : QString::fromLatin1("%1ms").arg(l.remainingTime()))
+ s.nospace() << " preferred:" << printable(e.preferredLifetime())
+ << " valid:" << printable(e.validityLifetime());
+#undef printable
+ }
}
}
}
@@ -162,6 +177,7 @@ void tst_QNetworkInterface::consistencyCheck()
QVector<int> interfaceIndexes;
foreach (const QNetworkInterface &iface, ifaces) {
+ QVERIFY(iface.isValid());
QVERIFY2(!interfaceNames.contains(iface.name()),
"duplicate name = " + iface.name().toLocal8Bit());
interfaceNames << iface.name();
@@ -170,6 +186,17 @@ void tst_QNetworkInterface::consistencyCheck()
"duplicate index = " + QByteArray::number(iface.index()));
if (iface.index())
interfaceIndexes << iface.index();
+
+ QVERIFY(iface.maxTransmissionUnit() >= 0);
+
+ const QList<QNetworkAddressEntry> addresses = iface.addressEntries();
+ for (auto entry : addresses) {
+ QVERIFY(entry.ip().protocol() != QAbstractSocket::UnknownNetworkLayerProtocol);
+ if (!entry.preferredLifetime().isForever() || !entry.validityLifetime().isForever())
+ QVERIFY(entry.isLifetimeKnown());
+ if (!entry.validityLifetime().isForever())
+ QVERIFY(entry.isTemporary());
+ }
}
}
@@ -186,18 +213,69 @@ void tst_QNetworkInterface::loopbackIPv6()
QList<QHostAddress> all = QNetworkInterface::allAddresses();
QVERIFY(all.contains(QHostAddress(QHostAddress::LocalHostIPv6)));
}
+void tst_QNetworkInterface::localAddress_data()
+{
+ QTest::addColumn<QHostAddress>("target");
+
+ QTest::newRow("localhost-ipv4") << QHostAddress(QHostAddress::LocalHost);
+ if (isIPv6Working())
+ QTest::newRow("localhost-ipv6") << QHostAddress(QHostAddress::LocalHostIPv6);
+
+ QTest::newRow("test-server") << QtNetworkSettings::serverIP();
+
+ // Since we don't actually transmit anything, we can list any IPv4 address
+ // and it should work. But we're using a linklocal address so that this
+ // test can pass even machines that failed to reach a DHCP server.
+ QTest::newRow("linklocal-ipv4") << QHostAddress("169.254.0.1");
+
+ if (isIPv6Working()) {
+ // On the other hand, we can't list just any IPv6 here. It's very
+ // likely that this machine has not received a route via ICMPv6-RA or
+ // DHCPv6, so it won't have a global route. On some OSes, IPv6 may be
+ // enabled per interface, so we need to know which ones work.
+ const QList<QHostAddress> addrs = QNetworkInterface::allAddresses();
+ for (const QHostAddress &addr : addrs) {
+ QString scope = addr.scopeId();
+ if (scope.isEmpty())
+ continue;
+ QTest::addRow("linklocal-ipv6-%s", qPrintable(scope))
+ << QHostAddress("fe80::1234%" + scope);
+ }
+ }
+}
void tst_QNetworkInterface::localAddress()
{
+ QFETCH(QHostAddress, target);
QUdpSocket socket;
- socket.connectToHost(QtNetworkSettings::serverName(), 80);
+ socket.connectToHost(target, 80);
QVERIFY(socket.waitForConnected(5000));
QHostAddress local = socket.localAddress();
- // test that we can find the address that QUdpSocket reported
- QList<QHostAddress> all = QNetworkInterface::allAddresses();
- QVERIFY(all.contains(local));
+ // find the interface that contains the address QUdpSocket reported
+ QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
+ const QNetworkInterface *outgoingIface = nullptr;
+ for (const QNetworkInterface &iface : ifaces) {
+ QList<QNetworkAddressEntry> addrs = iface.addressEntries();
+ for (const QNetworkAddressEntry &entry : addrs) {
+ if (entry.ip() == local) {
+ outgoingIface = &iface;
+ break;
+ }
+ }
+ if (outgoingIface)
+ break;
+ }
+ QVERIFY(outgoingIface);
+
+ // we get QVariant() if the QNativeSocketEngine doesn't know how to get the PMTU
+ int pmtu = socket.socketOption(QAbstractSocket::PathMtuSocketOption).toInt();
+ qDebug() << "Connected to" << target.toString() << "via interface" << outgoingIface->name()
+ << "pmtu" << pmtu;
+
+ // check that the Path MTU is less than or equal the interface's MTU
+ QVERIFY(pmtu <= outgoingIface->maxTransmissionUnit());
}
void tst_QNetworkInterface::interfaceFromXXX_data()
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 7760138067..0d538865a3 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -476,7 +476,7 @@ void tst_QLocalSocket::connectWithOldOpen()
class OverriddenOpen : public LocalSocket
{
public:
- virtual bool open(OpenMode mode) Q_DECL_OVERRIDE
+ virtual bool open(OpenMode mode) override
{ return QIODevice::open(mode); }
};
diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
index 31f82539aa..161d94d642 100644
--- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -420,13 +420,20 @@ void tst_QTcpServer::maxPendingConnections()
QTcpSocket socket2;
QTcpSocket socket3;
+ QSignalSpy spy(&server, SIGNAL(newConnection()));
QVERIFY(server.listen());
socket1.connectToHost(QHostAddress::LocalHost, server.serverPort());
socket2.connectToHost(QHostAddress::LocalHost, server.serverPort());
socket3.connectToHost(QHostAddress::LocalHost, server.serverPort());
- QVERIFY(server.waitForNewConnection(5000));
+ // We must have two and only two connections. First compare waits until
+ // two connections have been made. The second compare makes sure no
+ // more are accepted. Creating connections happens multithreaded so
+ // qWait must be used for that.
+ QTRY_COMPARE(spy.count(), 2);
+ QTest::qWait(100);
+ QCOMPARE(spy.count(), 2);
QVERIFY(server.hasPendingConnections());
QVERIFY(server.nextPendingConnection());
diff --git a/tests/auto/network/socket/qtcpsocket/BLACKLIST b/tests/auto/network/socket/qtcpsocket/BLACKLIST
index 96e59e5678..d724897b74 100644
--- a/tests/auto/network/socket/qtcpsocket/BLACKLIST
+++ b/tests/auto/network/socket/qtcpsocket/BLACKLIST
@@ -8,4 +8,6 @@ windows
windows
[timeoutConnect:ip]
windows
-]
+# QTBUG-66247
+[taskQtBug5799ConnectionErrorEventLoop]
+windows
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index e45eda2940..fc92ed6cbc 100644
--- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
@@ -3131,7 +3131,7 @@ void tst_QTcpSocket::readNotificationsAfterBind()
if (setProxy)
return;
- QAbstractSocket socket(QAbstractSocket::TcpSocket, Q_NULLPTR);
+ QAbstractSocket socket(QAbstractSocket::TcpSocket, nullptr);
QVERIFY2(socket.bind(), "Bind error!");
connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop()));
diff --git a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
index 064efc120b..1477fd212e 100644
--- a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
+++ b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
@@ -57,11 +57,8 @@ class tst_QSslCertificate : public QObject
void compareCertificates(const QSslCertificate & cert1, const QSslCertificate & cert2);
#endif
- QString oldCurrentDir;
-
public slots:
void initTestCase();
- void cleanupTestCase();
#ifndef QT_NO_SSL
private slots:
@@ -120,14 +117,10 @@ void tst_QSslCertificate::initTestCase()
testDataDir = QFileInfo(QFINDTESTDATA("certificates")).absolutePath();
if (testDataDir.isEmpty())
testDataDir = QCoreApplication::applicationDirPath();
+ if (!testDataDir.endsWith(QLatin1String("/")))
+ testDataDir += QLatin1String("/");
- if (QDir::current().absolutePath() != testDataDir) {
- oldCurrentDir = QDir::current().absolutePath();
- QVERIFY2(QDir::setCurrent(testDataDir),
- qPrintable(QString("Cannot change directory to %1").arg(testDataDir)));
- }
-
- QDir dir(testDataDir + "/certificates");
+ QDir dir(testDataDir + "certificates");
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Readable);
QRegExp rxCert(QLatin1String("^.+\\.(pem|der)$"));
QRegExp rxSan(QLatin1String("^(.+\\.(?:pem|der))\\.san$"));
@@ -151,13 +144,6 @@ void tst_QSslCertificate::initTestCase()
}
}
-void tst_QSslCertificate::cleanupTestCase()
-{
- if (!oldCurrentDir.isEmpty()) {
- QDir::setCurrent(oldCurrentDir);
- }
-}
-
#ifndef QT_NO_SSL
void tst_QSslCertificate::hash()
@@ -232,7 +218,7 @@ void tst_QSslCertificate::constructor_device()
if (!QSslSocket::supportsSsl())
return;
- QFile f(testDataDir + "/verify-certs/test-ocsp-good-cert.pem");
+ QFile f(testDataDir + "verify-certs/test-ocsp-good-cert.pem");
bool ok = f.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -241,7 +227,7 @@ void tst_QSslCertificate::constructor_device()
f.close();
// Check opening a DER as a PEM fails
- QFile f2(testDataDir + "/certificates/cert.der");
+ QFile f2(testDataDir + "certificates/cert.der");
ok = f2.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -250,7 +236,7 @@ void tst_QSslCertificate::constructor_device()
f2.close();
// Check opening a DER as a DER works
- QFile f3(testDataDir + "/certificates/cert.der");
+ QFile f3(testDataDir + "certificates/cert.der");
ok = f3.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -259,7 +245,7 @@ void tst_QSslCertificate::constructor_device()
f3.close();
// Check opening a PEM as a DER fails
- QFile f4(testDataDir + "/verify-certs/test-ocsp-good-cert.pem");
+ QFile f4(testDataDir + "verify-certs/test-ocsp-good-cert.pem");
ok = f4.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -445,7 +431,7 @@ void tst_QSslCertificate::subjectAlternativeNames()
void tst_QSslCertificate::utf8SubjectNames()
{
- QSslCertificate cert = QSslCertificate::fromPath("certificates/cert-ss-san-utf8.pem", QSsl::Pem,
+ QSslCertificate cert = QSslCertificate::fromPath(testDataDir + "certificates/cert-ss-san-utf8.pem", QSsl::Pem,
QRegExp::FixedString).first();
QVERIFY(!cert.isNull());
@@ -568,60 +554,60 @@ void tst_QSslCertificate::fromPath_data()
QTest::newRow("empty regexp der") << QString() << int(QRegExp::RegExp) << false << 0;
QTest::newRow("empty wildcard pem") << QString() << int(QRegExp::Wildcard) << true << 0;
QTest::newRow("empty wildcard der") << QString() << int(QRegExp::Wildcard) << false << 0;
- QTest::newRow("\"certificates\" fixed pem") << QString("certificates") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("\"certificates\" fixed der") << QString("certificates") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"certificates\" regexp pem") << QString("certificates") << int(QRegExp::RegExp) << true << 0;
- QTest::newRow("\"certificates\" regexp der") << QString("certificates") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"certificates\" wildcard pem") << QString("certificates") << int(QRegExp::Wildcard) << true << 0;
- QTest::newRow("\"certificates\" wildcard der") << QString("certificates") << int(QRegExp::Wildcard) << false << 0;
- QTest::newRow("\"certificates/cert.pem\" fixed pem") << QString("certificates/cert.pem") << int(QRegExp::FixedString) << true << 1;
- QTest::newRow("\"certificates/cert.pem\" fixed der") << QString("certificates/cert.pem") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"certificates/cert.pem\" regexp pem") << QString("certificates/cert.pem") << int(QRegExp::RegExp) << true << 1;
- QTest::newRow("\"certificates/cert.pem\" regexp der") << QString("certificates/cert.pem") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"certificates/cert.pem\" wildcard pem") << QString("certificates/cert.pem") << int(QRegExp::Wildcard) << true << 1;
- QTest::newRow("\"certificates/cert.pem\" wildcard der") << QString("certificates/cert.pem") << int(QRegExp::Wildcard) << false << 0;
- QTest::newRow("\"certificates/*\" fixed pem") << QString("certificates/*") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("\"certificates/*\" fixed der") << QString("certificates/*") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"certificates/*\" regexp pem") << QString("certificates/*") << int(QRegExp::RegExp) << true << 0;
- QTest::newRow("\"certificates/*\" regexp der") << QString("certificates/*") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"certificates/*\" wildcard pem") << QString("certificates/*") << int(QRegExp::Wildcard) << true << 7;
- QTest::newRow("\"certificates/ca*\" wildcard pem") << QString("certificates/ca*") << int(QRegExp::Wildcard) << true << 1;
- QTest::newRow("\"certificates/cert*\" wildcard pem") << QString("certificates/cert*") << int(QRegExp::Wildcard) << true << 4;
- QTest::newRow("\"certificates/cert-[sure]*\" wildcard pem") << QString("certificates/cert-[sure]*") << int(QRegExp::Wildcard) << true << 3;
- QTest::newRow("\"certificates/cert-[not]*\" wildcard pem") << QString("certificates/cert-[not]*") << int(QRegExp::Wildcard) << true << 0;
- QTest::newRow("\"certificates/*\" wildcard der") << QString("certificates/*") << int(QRegExp::Wildcard) << false << 2;
- QTest::newRow("\"c*/c*.pem\" fixed pem") << QString("c*/c*.pem") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("\"c*/c*.pem\" fixed der") << QString("c*/c*.pem") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"c*/c*.pem\" regexp pem") << QString("c*/c*.pem") << int(QRegExp::RegExp) << true << 0;
- QTest::newRow("\"c*/c*.pem\" regexp der") << QString("c*/c*.pem") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"c*/c*.pem\" wildcard pem") << QString("c*/c*.pem") << int(QRegExp::Wildcard) << true << 5;
- QTest::newRow("\"c*/c*.pem\" wildcard der") << QString("c*/c*.pem") << int(QRegExp::Wildcard) << false << 0;
- QTest::newRow("\"d*/c*.pem\" fixed pem") << QString("d*/c*.pem") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("\"d*/c*.pem\" fixed der") << QString("d*/c*.pem") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"d*/c*.pem\" regexp pem") << QString("d*/c*.pem") << int(QRegExp::RegExp) << true << 0;
- QTest::newRow("\"d*/c*.pem\" regexp der") << QString("d*/c*.pem") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"d*/c*.pem\" wildcard pem") << QString("d*/c*.pem") << int(QRegExp::Wildcard) << true << 0;
- QTest::newRow("\"d*/c*.pem\" wildcard der") << QString("d*/c*.pem") << int(QRegExp::Wildcard) << false << 0;
- QTest::newRow("\"c.*/c.*.pem\" fixed pem") << QString("c.*/c.*.pem") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("\"c.*/c.*.pem\" fixed der") << QString("c.*/c.*.pem") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"c.*/c.*.pem\" regexp pem") << QString("c.*/c.*.pem") << int(QRegExp::RegExp) << true << 5;
- QTest::newRow("\"c.*/c.*.pem\" regexp der") << QString("c.*/c.*.pem") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"c.*/c.*.pem\" wildcard pem") << QString("c.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0;
- QTest::newRow("\"c.*/c.*.pem\" wildcard der") << QString("c.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0;
- QTest::newRow("\"d.*/c.*.pem\" fixed pem") << QString("d.*/c.*.pem") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("\"d.*/c.*.pem\" fixed der") << QString("d.*/c.*.pem") << int(QRegExp::FixedString) << false << 0;
- QTest::newRow("\"d.*/c.*.pem\" regexp pem") << QString("d.*/c.*.pem") << int(QRegExp::RegExp) << true << 0;
- QTest::newRow("\"d.*/c.*.pem\" regexp der") << QString("d.*/c.*.pem") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"d.*/c.*.pem\" wildcard pem") << QString("d.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0;
- QTest::newRow("\"d.*/c.*.pem\" wildcard der") << QString("d.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0;
+ QTest::newRow("\"certificates\" fixed pem") << (testDataDir + "certificates") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("\"certificates\" fixed der") << (testDataDir + "certificates") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"certificates\" regexp pem") << (testDataDir + "certificates") << int(QRegExp::RegExp) << true << 0;
+ QTest::newRow("\"certificates\" regexp der") << (testDataDir + "certificates") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"certificates\" wildcard pem") << (testDataDir + "certificates") << int(QRegExp::Wildcard) << true << 0;
+ QTest::newRow("\"certificates\" wildcard der") << (testDataDir + "certificates") << int(QRegExp::Wildcard) << false << 0;
+ QTest::newRow("\"certificates/cert.pem\" fixed pem") << (testDataDir + "certificates/cert.pem") << int(QRegExp::FixedString) << true << 1;
+ QTest::newRow("\"certificates/cert.pem\" fixed der") << (testDataDir + "certificates/cert.pem") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"certificates/cert.pem\" regexp pem") << (testDataDir + "certificates/cert.pem") << int(QRegExp::RegExp) << true << 1;
+ QTest::newRow("\"certificates/cert.pem\" regexp der") << (testDataDir + "certificates/cert.pem") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"certificates/cert.pem\" wildcard pem") << (testDataDir + "certificates/cert.pem") << int(QRegExp::Wildcard) << true << 1;
+ QTest::newRow("\"certificates/cert.pem\" wildcard der") << (testDataDir + "certificates/cert.pem") << int(QRegExp::Wildcard) << false << 0;
+ QTest::newRow("\"certificates/*\" fixed pem") << (testDataDir + "certificates/*") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("\"certificates/*\" fixed der") << (testDataDir + "certificates/*") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"certificates/*\" regexp pem") << (testDataDir + "certificates/*") << int(QRegExp::RegExp) << true << 0;
+ QTest::newRow("\"certificates/*\" regexp der") << (testDataDir + "certificates/*") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"certificates/*\" wildcard pem") << (testDataDir + "certificates/*") << int(QRegExp::Wildcard) << true << 7;
+ QTest::newRow("\"certificates/ca*\" wildcard pem") << (testDataDir + "certificates/ca*") << int(QRegExp::Wildcard) << true << 1;
+ QTest::newRow("\"certificates/cert*\" wildcard pem") << (testDataDir + "certificates/cert*") << int(QRegExp::Wildcard) << true << 4;
+ QTest::newRow("\"certificates/cert-[sure]*\" wildcard pem") << (testDataDir + "certificates/cert-[sure]*") << int(QRegExp::Wildcard) << true << 3;
+ QTest::newRow("\"certificates/cert-[not]*\" wildcard pem") << (testDataDir + "certificates/cert-[not]*") << int(QRegExp::Wildcard) << true << 0;
+ QTest::newRow("\"certificates/*\" wildcard der") << (testDataDir + "certificates/*") << int(QRegExp::Wildcard) << false << 2;
+ QTest::newRow("\"c*/c*.pem\" fixed pem") << (testDataDir + "c*/c*.pem") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("\"c*/c*.pem\" fixed der") << (testDataDir + "c*/c*.pem") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"c*/c*.pem\" regexp pem") << (testDataDir + "c*/c*.pem") << int(QRegExp::RegExp) << true << 0;
+ QTest::newRow("\"c*/c*.pem\" regexp der") << (testDataDir + "c*/c*.pem") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"c*/c*.pem\" wildcard pem") << (testDataDir + "c*/c*.pem") << int(QRegExp::Wildcard) << true << 5;
+ QTest::newRow("\"c*/c*.pem\" wildcard der") << (testDataDir + "c*/c*.pem") << int(QRegExp::Wildcard) << false << 0;
+ QTest::newRow("\"d*/c*.pem\" fixed pem") << (testDataDir + "d*/c*.pem") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("\"d*/c*.pem\" fixed der") << (testDataDir + "d*/c*.pem") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"d*/c*.pem\" regexp pem") << (testDataDir + "d*/c*.pem") << int(QRegExp::RegExp) << true << 0;
+ QTest::newRow("\"d*/c*.pem\" regexp der") << (testDataDir + "d*/c*.pem") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"d*/c*.pem\" wildcard pem") << (testDataDir + "d*/c*.pem") << int(QRegExp::Wildcard) << true << 0;
+ QTest::newRow("\"d*/c*.pem\" wildcard der") << (testDataDir + "d*/c*.pem") << int(QRegExp::Wildcard) << false << 0;
+ QTest::newRow("\"c.*/c.*.pem\" fixed pem") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("\"c.*/c.*.pem\" fixed der") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"c.*/c.*.pem\" regexp pem") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::RegExp) << true << 5;
+ QTest::newRow("\"c.*/c.*.pem\" regexp der") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"c.*/c.*.pem\" wildcard pem") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0;
+ QTest::newRow("\"c.*/c.*.pem\" wildcard der") << (testDataDir + "c.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0;
+ QTest::newRow("\"d.*/c.*.pem\" fixed pem") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("\"d.*/c.*.pem\" fixed der") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::FixedString) << false << 0;
+ QTest::newRow("\"d.*/c.*.pem\" regexp pem") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::RegExp) << true << 0;
+ QTest::newRow("\"d.*/c.*.pem\" regexp der") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::RegExp) << false << 0;
+ QTest::newRow("\"d.*/c.*.pem\" wildcard pem") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0;
+ QTest::newRow("\"d.*/c.*.pem\" wildcard der") << (testDataDir + "d.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0;
#ifdef Q_OS_LINUX
- QTest::newRow("absolute path wildcard pem") << (testDataDir + "/certificates/*.pem") << int(QRegExp::Wildcard) << true << 7;
+ QTest::newRow("absolute path wildcard pem") << (testDataDir + "certificates/*.pem") << int(QRegExp::Wildcard) << true << 7;
#endif
- QTest::newRow("trailing-whitespace") << QString("more-certificates/trailing-whitespace.pem") << int(QRegExp::FixedString) << true << 1;
- QTest::newRow("no-ending-newline") << QString("more-certificates/no-ending-newline.pem") << int(QRegExp::FixedString) << true << 1;
- QTest::newRow("malformed-just-begin") << QString("more-certificates/malformed-just-begin.pem") << int(QRegExp::FixedString) << true << 0;
- QTest::newRow("malformed-just-begin-no-newline") << QString("more-certificates/malformed-just-begin-no-newline.pem") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("trailing-whitespace") << (testDataDir + "more-certificates/trailing-whitespace.pem") << int(QRegExp::FixedString) << true << 1;
+ QTest::newRow("no-ending-newline") << (testDataDir + "more-certificates/no-ending-newline.pem") << int(QRegExp::FixedString) << true << 1;
+ QTest::newRow("malformed-just-begin") << (testDataDir + "more-certificates/malformed-just-begin.pem") << int(QRegExp::FixedString) << true << 0;
+ QTest::newRow("malformed-just-begin-no-newline") << (testDataDir + "more-certificates/malformed-just-begin-no-newline.pem") << int(QRegExp::FixedString) << true << 0;
}
void tst_QSslCertificate::fromPath()
@@ -722,7 +708,7 @@ void tst_QSslCertificate::certInfo()
"dc:c2:eb:b7:bb:50:18:05:ba:ad:af:08:49:fe:98:63"
"55:ba:e7:fb:95:5d:91";
- QSslCertificate cert = QSslCertificate::fromPath("certificates/cert.pem", QSsl::Pem,
+ QSslCertificate cert = QSslCertificate::fromPath(testDataDir + "certificates/cert.pem", QSsl::Pem,
QRegExp::FixedString).first();
QVERIFY(!cert.isNull());
@@ -779,7 +765,7 @@ void tst_QSslCertificate::certInfo()
void tst_QSslCertificate::certInfoQByteArray()
{
- QSslCertificate cert = QSslCertificate::fromPath("certificates/cert.pem", QSsl::Pem,
+ QSslCertificate cert = QSslCertificate::fromPath(testDataDir + "certificates/cert.pem", QSsl::Pem,
QRegExp::FixedString).first();
QVERIFY(!cert.isNull());
@@ -828,11 +814,11 @@ void tst_QSslCertificate::task256066toPem()
void tst_QSslCertificate::nulInCN()
{
-#ifdef QT_SECURETRANSPORT
+#if defined(QT_SECURETRANSPORT) || defined(Q_OS_WINRT)
QSKIP("Generic QSslCertificatePrivate fails this test");
#endif
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/badguy-nul-cn.crt");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/badguy-nul-cn.crt");
QCOMPARE(certList.size(), 1);
const QSslCertificate &cert = certList.at(0);
@@ -847,11 +833,11 @@ void tst_QSslCertificate::nulInCN()
void tst_QSslCertificate::nulInSan()
{
-#ifdef QT_SECURETRANSPORT
+#if defined(QT_SECURETRANSPORT) || defined(Q_OS_WINRT)
QSKIP("Generic QSslCertificatePrivate fails this test");
#endif
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/badguy-nul-san.crt");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/badguy-nul-san.crt");
QCOMPARE(certList.size(), 1);
const QSslCertificate &cert = certList.at(0);
@@ -871,7 +857,7 @@ void tst_QSslCertificate::nulInSan()
void tst_QSslCertificate::largeSerialNumber()
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/cert-large-serial-number.pem");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-serial-number.pem");
QCOMPARE(certList.size(), 1);
@@ -883,7 +869,7 @@ void tst_QSslCertificate::largeSerialNumber()
void tst_QSslCertificate::largeExpirationDate() // QTBUG-12489
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/cert-large-expiration-date.pem");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-expiration-date.pem");
QCOMPARE(certList.size(), 1);
@@ -896,8 +882,8 @@ void tst_QSslCertificate::largeExpirationDate() // QTBUG-12489
void tst_QSslCertificate::blacklistedCertificates()
{
- QList<QSslCertificate> blacklistedCerts = QSslCertificate::fromPath("more-certificates/blacklisted*.pem", QSsl::Pem, QRegExp::Wildcard);
- QVERIFY2(blacklistedCerts.count() > 0, "Please run this test from the source directory");
+ QList<QSslCertificate> blacklistedCerts = QSslCertificate::fromPath(testDataDir + "more-certificates/blacklisted*.pem", QSsl::Pem, QRegExp::Wildcard);
+ QVERIFY(blacklistedCerts.count() > 0);
for (int a = 0; a < blacklistedCerts.count(); a++) {
QVERIFY(blacklistedCerts.at(a).isBlacklisted());
}
@@ -905,34 +891,34 @@ void tst_QSslCertificate::blacklistedCertificates()
void tst_QSslCertificate::selfsignedCertificates()
{
- QVERIFY(QSslCertificate::fromPath(testDataDir + "/certificates/cert-ss.pem").first().isSelfSigned());
- QVERIFY(!QSslCertificate::fromPath(testDataDir + "/certificates/cert.pem").first().isSelfSigned());
+ QVERIFY(QSslCertificate::fromPath(testDataDir + "certificates/cert-ss.pem").first().isSelfSigned());
+ QVERIFY(!QSslCertificate::fromPath(testDataDir + "certificates/cert.pem").first().isSelfSigned());
QVERIFY(!QSslCertificate().isSelfSigned());
}
void tst_QSslCertificate::toText()
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/cert-large-expiration-date.pem");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-expiration-date.pem");
QCOMPARE(certList.size(), 1);
const QSslCertificate &cert = certList.at(0);
// Openssl's cert dump method changed slightly between 0.9.8, 1.0.0 and 1.01 versions, so we want it to match any output
- QFile f098(testDataDir + "/more-certificates/cert-large-expiration-date.txt.0.9.8");
+ QFile f098(testDataDir + "more-certificates/cert-large-expiration-date.txt.0.9.8");
QVERIFY(f098.open(QIODevice::ReadOnly | QFile::Text));
QByteArray txt098 = f098.readAll();
- QFile f100(testDataDir + "/more-certificates/cert-large-expiration-date.txt.1.0.0");
+ QFile f100(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.0.0");
QVERIFY(f100.open(QIODevice::ReadOnly | QFile::Text));
QByteArray txt100 = f100.readAll();
- QFile f101(testDataDir + "/more-certificates/cert-large-expiration-date.txt.1.0.1");
+ QFile f101(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.0.1");
QVERIFY(f101.open(QIODevice::ReadOnly | QFile::Text));
QByteArray txt101 = f101.readAll();
- QFile f101c(testDataDir + "/more-certificates/cert-large-expiration-date.txt.1.0.1c");
+ QFile f101c(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.0.1c");
QVERIFY(f101c.open(QIODevice::ReadOnly | QFile::Text));
QByteArray txt101c = f101c.readAll();
@@ -950,8 +936,8 @@ void tst_QSslCertificate::toText()
void tst_QSslCertificate::multipleCommonNames()
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/test-cn-two-cns-cert.pem");
- QVERIFY2(certList.count() > 0, "Please run this test from the source directory");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-two-cns-cert.pem");
+ QVERIFY(certList.count() > 0);
QStringList commonNames = certList[0].subjectInfo(QSslCertificate::CommonName);
QVERIFY(commonNames.contains(QString("www.example.com")));
@@ -961,15 +947,15 @@ void tst_QSslCertificate::multipleCommonNames()
void tst_QSslCertificate::subjectAndIssuerAttributes()
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/test-cn-with-drink-cert.pem");
- QVERIFY2(certList.count() > 0, "Please run this test from the source directory");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-with-drink-cert.pem");
+ QVERIFY(certList.count() > 0);
QList<QByteArray> attributes = certList[0].subjectInfoAttributes();
QVERIFY(attributes.contains(QByteArray("favouriteDrink")));
attributes.clear();
- certList = QSslCertificate::fromPath(testDataDir + "/more-certificates/natwest-banking.pem");
- QVERIFY2(certList.count() > 0, "Please run this test from the source directory");
+ certList = QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem");
+ QVERIFY(certList.count() > 0);
attributes = certList[0].subjectInfoAttributes();
QVERIFY(attributes.contains(QByteArray("1.3.6.1.4.1.311.60.2.1.3")));
@@ -999,17 +985,17 @@ void tst_QSslCertificate::verify()
errors.clear();
// Verify a valid cert signed by a CA
- QList<QSslCertificate> caCerts = QSslCertificate::fromPath(testDataDir + "/verify-certs/cacert.pem");
+ QList<QSslCertificate> caCerts = QSslCertificate::fromPath(testDataDir + "verify-certs/cacert.pem");
QSslSocket::addDefaultCaCertificate(caCerts.first());
- toVerify = QSslCertificate::fromPath(testDataDir + "/verify-certs/test-ocsp-good-cert.pem");
+ toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem");
errors = QSslCertificate::verify(toVerify);
VERIFY_VERBOSE(errors.count() == 0);
errors.clear();
// Test a blacklisted certificate
- toVerify = QSslCertificate::fromPath(testDataDir + "/verify-certs/test-addons-mozilla-org-cert.pem");
+ toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem");
errors = QSslCertificate::verify(toVerify);
bool foundBlack = false;
foreach (const QSslError &error, errors) {
@@ -1022,7 +1008,7 @@ void tst_QSslCertificate::verify()
errors.clear();
// This one is expired and untrusted
- toVerify = QSslCertificate::fromPath(testDataDir + "/more-certificates/cert-large-serial-number.pem");
+ toVerify = QSslCertificate::fromPath(testDataDir + "more-certificates/cert-large-serial-number.pem");
errors = QSslCertificate::verify(toVerify);
VERIFY_VERBOSE(errors.contains(QSslError(QSslError::SelfSignedCertificate, toVerify[0])));
VERIFY_VERBOSE(errors.contains(QSslError(QSslError::CertificateExpired, toVerify[0])));
@@ -1030,15 +1016,15 @@ void tst_QSslCertificate::verify()
toVerify.clear();
// This one is signed by a valid cert, but the signer is not a valid CA
- toVerify << QSslCertificate::fromPath(testDataDir + "/verify-certs/test-intermediate-not-ca-cert.pem").first();
- toVerify << QSslCertificate::fromPath(testDataDir + "/verify-certs/test-ocsp-good-cert.pem").first();
+ toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-not-ca-cert.pem").first();
+ toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem").first();
errors = QSslCertificate::verify(toVerify);
VERIFY_VERBOSE(errors.contains(QSslError(QSslError::InvalidCaCertificate, toVerify[1])));
toVerify.clear();
// This one is signed by a valid cert, and the signer is a valid CA
- toVerify << QSslCertificate::fromPath(testDataDir + "/verify-certs/test-intermediate-is-ca-cert.pem").first();
- toVerify << QSslCertificate::fromPath(testDataDir + "/verify-certs/test-intermediate-ca-cert.pem").first();
+ toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-is-ca-cert.pem").first();
+ toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-ca-cert.pem").first();
errors = QSslCertificate::verify(toVerify);
VERIFY_VERBOSE(errors.count() == 0);
@@ -1068,8 +1054,8 @@ QString tst_QSslCertificate::toString(const QList<QSslError>& errors)
void tst_QSslCertificate::extensions()
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/more-certificates/natwest-banking.pem");
- QVERIFY2(certList.count() > 0, "Please run this test from the source directory");
+ QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem");
+ QVERIFY(certList.count() > 0);
QSslCertificate cert = certList[0];
QList<QSslCertificateExtension> extensions = cert.extensions();
@@ -1166,8 +1152,8 @@ void tst_QSslCertificate::extensions()
void tst_QSslCertificate::extensionsCritical()
{
QList<QSslCertificate> certList =
- QSslCertificate::fromPath(testDataDir + "/verify-certs/test-addons-mozilla-org-cert.pem");
- QVERIFY2(certList.count() > 0, "Please run this test from the source directory");
+ QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem");
+ QVERIFY(certList.count() > 0);
QSslCertificate cert = certList[0];
QList<QSslCertificateExtension> extensions = cert.extensions();
@@ -1249,7 +1235,7 @@ void tst_QSslCertificate::threadSafeConstMethods()
if (!QSslSocket::supportsSsl())
return;
- QByteArray encoded = readFile(testDataDir + "/certificates/cert.pem");
+ QByteArray encoded = readFile(testDataDir + "certificates/cert.pem");
QSslCertificate certificate(encoded);
QVERIFY(!certificate.isNull());
@@ -1287,12 +1273,12 @@ void tst_QSslCertificate::version_data()
QTest::newRow("null certificate") << QSslCertificate() << QByteArray();
QList<QSslCertificate> certs;
- certs << QSslCertificate::fromPath(testDataDir + "/verify-certs/test-ocsp-good-cert.pem");
+ certs << QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem");
QTest::newRow("v3 certificate") << certs.first() << QByteArrayLiteral("3");
certs.clear();
- certs << QSslCertificate::fromPath(testDataDir + "/certificates/cert.pem");
+ certs << QSslCertificate::fromPath(testDataDir + "certificates/cert.pem");
QTest::newRow("v1 certificate") << certs.first() << QByteArrayLiteral("1");
}
@@ -1314,7 +1300,7 @@ void tst_QSslCertificate::pkcs12()
return;
}
- QFile f(testDataDir + QLatin1String("/pkcs12/leaf.p12"));
+ QFile f(testDataDir + QLatin1String("pkcs12/leaf.p12"));
bool ok = f.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -1329,12 +1315,12 @@ void tst_QSslCertificate::pkcs12()
QVERIFY(ok);
f.close();
- QList<QSslCertificate> leafCert = QSslCertificate::fromPath(testDataDir + QLatin1String("/pkcs12/leaf.crt"));
+ QList<QSslCertificate> leafCert = QSslCertificate::fromPath(testDataDir + QLatin1String("pkcs12/leaf.crt"));
QVERIFY(!leafCert.isEmpty());
QCOMPARE(cert, leafCert.first());
- QFile f2(testDataDir + QLatin1String("/pkcs12/leaf.key"));
+ QFile f2(testDataDir + QLatin1String("pkcs12/leaf.key"));
ok = f2.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -1344,7 +1330,7 @@ void tst_QSslCertificate::pkcs12()
QVERIFY(!leafKey.isNull());
QCOMPARE(key, leafKey);
- QList<QSslCertificate> caCert = QSslCertificate::fromPath(testDataDir + QLatin1String("/pkcs12/inter.crt"));
+ QList<QSslCertificate> caCert = QSslCertificate::fromPath(testDataDir + QLatin1String("pkcs12/inter.crt"));
QVERIFY(!caCert.isEmpty());
QVERIFY(!caCerts.isEmpty());
@@ -1352,7 +1338,7 @@ void tst_QSslCertificate::pkcs12()
QCOMPARE(caCerts, caCert);
// QTBUG-62335 - Fail (found no private key) but don't crash:
- QFile nocert(testDataDir + QLatin1String("/pkcs12/leaf-nokey.p12"));
+ QFile nocert(testDataDir + QLatin1String("pkcs12/leaf-nokey.p12"));
ok = nocert.open(QIODevice::ReadOnly);
QVERIFY(ok);
QTest::ignoreMessage(QtWarningMsg, "Unable to convert private key");
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.der b/tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.der
new file mode 100644
index 0000000000..ff5a631ef2
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.der
Binary files differ
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.pem b/tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.pem
new file mode 100644
index 0000000000..b9d7290f1c
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pri-256-brainpoolP256r1.pem
@@ -0,0 +1,5 @@
+-----BEGIN EC PRIVATE KEY-----
+MHgCAQEEICkGJVTQ1CxAApDzCDX4SqwtWJ8maYHgk9JQ+TI3vs2poAsGCSskAwMC
+CAEBB6FEA0IABCAhr230hmTi9SziKN7ZJOE2QjuI0FNtL1yZgtRPjNz/a4a+vG3d
+WNAvN+7QWatJGUk1Z5weeDU0D9M6PnRRSnc=
+-----END EC PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.der b/tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.der
new file mode 100644
index 0000000000..697ca6bc4a
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.der
Binary files differ
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.pem b/tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.pem
new file mode 100644
index 0000000000..37e9bf5eb7
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pri-384-brainpoolP384r1.pem
@@ -0,0 +1,6 @@
+-----BEGIN EC PRIVATE KEY-----
+MIGoAgEBBDAJ0lL3eojQpq85spC6f0/mf8o2AqwDs8niN9lw2FmhEaR7sV4iX8Y6
+rKr1unYULMagCwYJKyQDAwIIAQELoWQDYgAES6Rp6pXKoyMaGzpKXRdL/JndNm9J
+L9VkLzZDlnTbleLjtghdGi5SZHGRvBNLZoGLYKOpJLoG2nCRJ6Ci3EHxlKtw6ytz
+Fk0YKn2UAcPefyUrL0HajfRIJkFmVGRavKGx
+-----END EC PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.der b/tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.der
new file mode 100644
index 0000000000..39e8672124
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.der
Binary files differ
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.pem b/tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.pem
new file mode 100644
index 0000000000..a5d848f2f9
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pri-512-brainpoolP512r1.pem
@@ -0,0 +1,7 @@
+-----BEGIN EC PRIVATE KEY-----
+MIHaAgEBBECf7ioHynYtlc1ICFXTqrbGh/aOhflko3J8rQeQ2mBi6ozxkmpEDgRW
+cR6u0QeSCCAEacHJd0kC3hjkA4piB5KroAsGCSskAwMCCAEBDaGBhQOBggAEWvov
+CfjIdPUfC70DNETCfPjIqedVswV7KbM03DdRXqzBREZJb0nwkXrP/wMj+vWEBMui
+tfLBKd9s0vq4xgtEMCagNRNwwuFYzA6vfLzNTPsSCS1phKU1NFqm2dgGiSL+MBg0
+Wf+1Epfcdm9dBU+8IzTx1L+yRheWYohN2okh5Q8=
+-----END EC PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.der b/tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.der
new file mode 100644
index 0000000000..ee7abb84bd
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.der
Binary files differ
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.pem b/tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.pem
new file mode 100644
index 0000000000..d3691cba57
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pub-256-brainpoolP256r1.pem
@@ -0,0 +1,4 @@
+-----BEGIN PUBLIC KEY-----
+MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABCAhr230hmTi9SziKN7ZJOE2QjuI
+0FNtL1yZgtRPjNz/a4a+vG3dWNAvN+7QWatJGUk1Z5weeDU0D9M6PnRRSnc=
+-----END PUBLIC KEY-----
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.der b/tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.der
new file mode 100644
index 0000000000..bf07791c3c
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.der
Binary files differ
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.pem b/tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.pem
new file mode 100644
index 0000000000..57d0108830
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pub-384-brainpoolP384r1.pem
@@ -0,0 +1,5 @@
+-----BEGIN PUBLIC KEY-----
+MHowFAYHKoZIzj0CAQYJKyQDAwIIAQELA2IABEukaeqVyqMjGhs6Sl0XS/yZ3TZv
+SS/VZC82Q5Z025Xi47YIXRouUmRxkbwTS2aBi2CjqSS6BtpwkSegotxB8ZSrcOsr
+cxZNGCp9lAHD3n8lKy9B2o30SCZBZlRkWryhsQ==
+-----END PUBLIC KEY-----
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.der b/tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.der
new file mode 100644
index 0000000000..eac51290d9
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.der
Binary files differ
diff --git a/tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.pem b/tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.pem
new file mode 100644
index 0000000000..66c58e23af
--- /dev/null
+++ b/tests/auto/network/ssl/qsslkey/keys/ec-pub-512-brainpoolP512r1.pem
@@ -0,0 +1,6 @@
+-----BEGIN PUBLIC KEY-----
+MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEWvovCfjIdPUfC70DNETCfPjI
+qedVswV7KbM03DdRXqzBREZJb0nwkXrP/wMj+vWEBMuitfLBKd9s0vq4xgtEMCag
+NRNwwuFYzA6vfLzNTPsSCS1phKU1NFqm2dgGiSL+MBg0Wf+1Epfcdm9dBU+8IzTx
+1L+yRheWYohN2okh5Q8=
+-----END PUBLIC KEY-----
diff --git a/tests/auto/network/ssl/qsslkey/keys/genkeys.sh b/tests/auto/network/ssl/qsslkey/keys/genkeys.sh
index b6ef997b0d..7fb15e91ee 100755
--- a/tests/auto/network/ssl/qsslkey/keys/genkeys.sh
+++ b/tests/auto/network/ssl/qsslkey/keys/genkeys.sh
@@ -71,9 +71,7 @@ done
#--- EC ----------------------------------------------------------------------------
# Note: EC will be generated with pre-defined curves. You can check supported curves
# with openssl ecparam -list_curves.
-# If OpenSSL 1.0.2 is available brainpool should be added!
-# brainpoolP256r1 brainpoolP384r1 brainpoolP512r1
-for curve in secp224r1 prime256v1 secp384r1
+for curve in secp224r1 prime256v1 secp384r1 brainpoolP256r1 brainpoolP384r1 brainpoolP512r1
do
size=`tr -cd 0-9 <<< $curve`
size=${size::-1} # remove last number of curve name as we need bit size only
diff --git a/tests/auto/network/ssl/qsslkey/qsslkey.pro b/tests/auto/network/ssl/qsslkey/qsslkey.pro
index 8c3877631a..0074513878 100644
--- a/tests/auto/network/ssl/qsslkey/qsslkey.pro
+++ b/tests/auto/network/ssl/qsslkey/qsslkey.pro
@@ -9,4 +9,5 @@ qtConfig(private_tests) {
TARGET = tst_qsslkey
-TESTDATA += keys/* rsa-without-passphrase.pem rsa-with-passphrase.pem
+TESTDATA += keys/* \
+ rsa-*.pem
diff --git a/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp b/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp
index 0112af4ed7..27d92db3bf 100644
--- a/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp
+++ b/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp
@@ -106,8 +106,10 @@ void tst_QSslKey::initTestCase()
testDataDir = QFileInfo(QFINDTESTDATA("rsa-without-passphrase.pem")).absolutePath();
if (testDataDir.isEmpty())
testDataDir = QCoreApplication::applicationDirPath();
+ if (!testDataDir.endsWith(QLatin1String("/")))
+ testDataDir += QLatin1String("/");
- QDir dir(testDataDir + "/keys");
+ QDir dir(testDataDir + "keys");
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Readable);
QRegExp rx(QLatin1String("^(rsa|dsa|ec)-(pub|pri)-(\\d+)-?\\w*\\.(pem|der)$"));
foreach (QFileInfo fileInfo, fileInfoList) {
@@ -392,9 +394,9 @@ void tst_QSslKey::passphraseChecks_data()
{
QTest::addColumn<QString>("fileName");
- QTest::newRow("DES") << QString(testDataDir + "/rsa-with-passphrase-des.pem");
- QTest::newRow("3DES") << QString(testDataDir + "/rsa-with-passphrase-3des.pem");
- QTest::newRow("RC2") << QString(testDataDir + "/rsa-with-passphrase-rc2.pem");
+ QTest::newRow("DES") << (testDataDir + "rsa-with-passphrase-des.pem");
+ QTest::newRow("3DES") << (testDataDir + "rsa-with-passphrase-3des.pem");
+ QTest::newRow("RC2") << (testDataDir + "rsa-with-passphrase-rc2.pem");
}
void tst_QSslKey::passphraseChecks()
@@ -440,7 +442,7 @@ void tst_QSslKey::passphraseChecks()
void tst_QSslKey::noPassphraseChecks()
{
// be sure and check a key without passphrase too
- QString fileName(testDataDir + "/rsa-without-passphrase.pem");
+ QString fileName(testDataDir + "rsa-without-passphrase.pem");
QFile keyFile(fileName);
{
if (!keyFile.isOpen())
diff --git a/tests/auto/network/ssl/qsslsocket/BLACKLIST b/tests/auto/network/ssl/qsslsocket/BLACKLIST
index a9ecc69f50..8e1a55995e 100644
--- a/tests/auto/network/ssl/qsslsocket/BLACKLIST
+++ b/tests/auto/network/ssl/qsslsocket/BLACKLIST
@@ -1,5 +1 @@
windows
-[protocolServerSide:ssl3-any]
-rhel-7.2
-[protocolServerSide:tls1.0-any]
-rhel-7.2
diff --git a/tests/auto/network/ssl/qsslsocket/qsslsocket.pro b/tests/auto/network/ssl/qsslsocket/qsslsocket.pro
index 4ccf0f24b0..f45857b02d 100644
--- a/tests/auto/network/ssl/qsslsocket/qsslsocket.pro
+++ b/tests/auto/network/ssl/qsslsocket/qsslsocket.pro
@@ -14,6 +14,8 @@ win32 {
}
}
+TESTDATA += certs
+
DEFINES += SRCDIR=\\\"$$PWD/\\\"
requires(qtConfig(private_tests))
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 4de77a9080..f77afd2364 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -238,6 +238,8 @@ private slots:
void allowedProtocolNegotiation();
void pskServer();
void forwardReadChannelFinished();
+ void signatureAlgorithm_data();
+ void signatureAlgorithm();
#endif
void setEmptyDefaultConfiguration(); // this test should be last
@@ -278,7 +280,10 @@ private:
#endif // QT_NO_SSL
private:
static int loopLevel;
+public:
+ static QString testDataDir;
};
+QString tst_QSslSocket::testDataDir;
#ifndef QT_NO_SSL
#ifndef QT_NO_OPENSSL
@@ -332,6 +337,11 @@ void tst_QSslSocket::initTestCase_data()
void tst_QSslSocket::initTestCase()
{
+ testDataDir = QFileInfo(QFINDTESTDATA("certs")).absolutePath();
+ if (testDataDir.isEmpty())
+ testDataDir = QCoreApplication::applicationDirPath();
+ if (!testDataDir.endsWith(QLatin1String("/")))
+ testDataDir += QLatin1String("/");
#ifndef QT_NO_SSL
qDebug("Using SSL library %s (%ld)",
qPrintable(QSslSocket::sslLibraryVersionString()),
@@ -705,7 +715,7 @@ void tst_QSslSocket::connectToHostEncrypted()
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
- QVERIFY(socket->addCaCertificates(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem")));
+ QVERIFY(socket->addCaCertificates(testDataDir + "certs/qt-test-server-cacert.pem"));
#ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND
connect(socket.data(), SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(untrustedWorkaroundSlot(QList<QSslError>)));
@@ -739,7 +749,7 @@ void tst_QSslSocket::connectToHostEncryptedWithVerificationPeerName()
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
- socket->addCaCertificates(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem"));
+ socket->addCaCertificates(testDataDir + "certs/qt-test-server-cacert.pem");
#ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND
connect(socket.data(), SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(untrustedWorkaroundSlot(QList<QSslError>)));
@@ -803,10 +813,10 @@ void tst_QSslSocket::localCertificate()
// values. This test should just run the codepath inside qsslsocket_openssl.cpp
QSslSocketPtr socket = newSocket();
- QList<QSslCertificate> localCert = QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem");
+ QList<QSslCertificate> localCert = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
socket->setCaCertificates(localCert);
- socket->setLocalCertificate(QLatin1String(SRCDIR "certs/fluke.cert"));
- socket->setPrivateKey(QLatin1String(SRCDIR "certs/fluke.key"));
+ socket->setLocalCertificate(testDataDir + "certs/fluke.cert");
+ socket->setPrivateKey(testDataDir + "certs/fluke.key");
socket->connectToHostEncrypted(QtNetworkSettings::serverName(), 443);
QFETCH_GLOBAL(bool, setProxy);
@@ -832,7 +842,7 @@ void tst_QSslSocket::peerCertificateChain()
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
- QList<QSslCertificate> caCertificates = QSslCertificate::fromPath(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem"));
+ QList<QSslCertificate> caCertificates = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
QCOMPARE(caCertificates.count(), 1);
socket->addCaCertificates(caCertificates);
#ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND
@@ -895,7 +905,7 @@ void tst_QSslSocket::privateKeyOpaque()
if (!QSslSocket::supportsSsl())
return;
- QFile file(SRCDIR "certs/fluke.key");
+ QFile file(testDataDir + "certs/fluke.key");
QVERIFY(file.open(QIODevice::ReadOnly));
QSslKey key(file.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
QVERIFY(!key.isNull());
@@ -908,9 +918,9 @@ void tst_QSslSocket::privateKeyOpaque()
// values. This test should just run the codepath inside qsslsocket_openssl.cpp
QSslSocketPtr socket = newSocket();
- QList<QSslCertificate> localCert = QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem");
+ QList<QSslCertificate> localCert = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
socket->setCaCertificates(localCert);
- socket->setLocalCertificate(QLatin1String(SRCDIR "certs/fluke.cert"));
+ socket->setLocalCertificate(testDataDir + "certs/fluke.cert");
socket->setPrivateKey(QSslKey(reinterpret_cast<Qt::HANDLE>(pkey)));
socket->setPeerVerifyMode(QSslSocket::QueryPeer);
@@ -928,7 +938,7 @@ void tst_QSslSocket::protocol()
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
- QList<QSslCertificate> certs = QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem");
+ QList<QSslCertificate> certs = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
socket->setCaCertificates(certs);
#ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND
@@ -1075,8 +1085,8 @@ class SslServer : public QTcpServer
{
Q_OBJECT
public:
- SslServer(const QString &keyFile = SRCDIR "certs/fluke.key",
- const QString &certFile = SRCDIR "certs/fluke.cert",
+ SslServer(const QString &keyFile = tst_QSslSocket::testDataDir + "certs/fluke.key",
+ const QString &certFile = tst_QSslSocket::testDataDir + "certs/fluke.cert",
const QString &interFile = QString())
: socket(0),
config(QSslConfiguration::defaultConfiguration()),
@@ -1167,6 +1177,9 @@ protected slots:
void tst_QSslSocket::protocolServerSide_data()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QTest::addColumn<QSsl::SslProtocol>("serverProtocol");
QTest::addColumn<QSsl::SslProtocol>("clientProtocol");
QTest::addColumn<bool>("works");
@@ -1347,6 +1360,9 @@ void tst_QSslSocket::protocolServerSide()
void tst_QSslSocket::serverCipherPreferences()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl()) {
qWarning("SSL not supported, skipping test");
return;
@@ -1422,7 +1438,7 @@ void tst_QSslSocket::setCaCertificates()
QSslSocket socket;
QCOMPARE(socket.caCertificates(), QSslSocket::defaultCaCertificates());
- socket.setCaCertificates(QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem"));
+ socket.setCaCertificates(QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem"));
QCOMPARE(socket.caCertificates().size(), 1);
socket.setCaCertificates(socket.defaultCaCertificates());
QCOMPARE(socket.caCertificates(), QSslSocket::defaultCaCertificates());
@@ -1438,7 +1454,7 @@ void tst_QSslSocket::localCertificateChain()
return;
QSslSocket socket;
- socket.setLocalCertificate(QLatin1String(SRCDIR "certs/fluke.cert"));
+ socket.setLocalCertificate(testDataDir + "certs/fluke.cert");
QSslConfiguration conf = socket.sslConfiguration();
QList<QSslCertificate> chain = conf.localCertificateChain();
@@ -1449,6 +1465,9 @@ void tst_QSslSocket::localCertificateChain()
void tst_QSslSocket::setLocalCertificateChain()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl())
return;
@@ -1456,9 +1475,9 @@ void tst_QSslSocket::setLocalCertificateChain()
if (setProxy)
return;
- SslServer server(QLatin1String(SRCDIR "certs/leaf.key"),
- QLatin1String(SRCDIR "certs/leaf.crt"),
- QLatin1String(SRCDIR "certs/inter.crt"));
+ SslServer server(testDataDir + "certs/leaf.key",
+ testDataDir + "certs/leaf.crt",
+ testDataDir + "certs/inter.crt");
QVERIFY(server.listen());
@@ -1486,6 +1505,9 @@ void tst_QSslSocket::setPrivateKey()
void tst_QSslSocket::setSocketDescriptor()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl())
return;
@@ -1524,7 +1546,7 @@ void tst_QSslSocket::setSslConfiguration_data()
QTest::newRow("empty") << QSslConfiguration() << false;
QSslConfiguration conf = QSslConfiguration::defaultConfiguration();
QTest::newRow("default") << conf << false; // does not contain test server cert
- QList<QSslCertificate> testServerCert = QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem");
+ QList<QSslCertificate> testServerCert = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
conf.setCaCertificates(testServerCert);
QTest::newRow("set-root-cert") << conf << true;
conf.setProtocol(QSsl::SecureProtocols);
@@ -1627,7 +1649,7 @@ void tst_QSslSocket::addDefaultCaCertificate()
// Reset the global CA chain
QSslSocket::setDefaultCaCertificates(QSslSocket::systemCaCertificates());
- QList<QSslCertificate> flukeCerts = QSslCertificate::fromPath(SRCDIR "certs/qt-test-server-cacert.pem");
+ QList<QSslCertificate> flukeCerts = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
QCOMPARE(flukeCerts.size(), 1);
QList<QSslCertificate> globalCerts = QSslSocket::defaultCaCertificates();
QVERIFY(!globalCerts.contains(flukeCerts.first()));
@@ -1739,7 +1761,7 @@ void tst_QSslSocket::isMatchingHostname()
{
// with normalization: (the certificate has *.SCHÄUFELE.DE as a CN)
// openssl req -x509 -nodes -subj "/CN=*.SCHÄUFELE.DE" -newkey rsa:512 -keyout /dev/null -out xn--schufele-2za.crt
- QList<QSslCertificate> certs = QSslCertificate::fromPath(SRCDIR "certs/xn--schufele-2za.crt");
+ QList<QSslCertificate> certs = QSslCertificate::fromPath(testDataDir + "certs/xn--schufele-2za.crt");
QVERIFY(!certs.isEmpty());
QSslCertificate cert = certs.first();
@@ -1795,7 +1817,7 @@ protected:
socket->ignoreSslErrors();
// Only set the certificate
- QList<QSslCertificate> localCert = QSslCertificate::fromPath(SRCDIR "certs/fluke.cert");
+ QList<QSslCertificate> localCert = QSslCertificate::fromPath(tst_QSslSocket::testDataDir + "certs/fluke.cert");
QVERIFY(!localCert.isEmpty());
QVERIFY(!localCert.first().isNull());
socket->setLocalCertificate(localCert.first());
@@ -1808,6 +1830,9 @@ protected:
void tst_QSslSocket::setEmptyKey()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl())
return;
@@ -1829,6 +1854,9 @@ void tst_QSslSocket::setEmptyKey()
void tst_QSslSocket::spontaneousWrite()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -1874,6 +1902,9 @@ void tst_QSslSocket::spontaneousWrite()
void tst_QSslSocket::setReadBufferSize()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -2024,13 +2055,14 @@ protected:
socket = new QSslSocket(this);
connect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot()));
- QFile file(SRCDIR "certs/fluke.key");
+ QFile file(tst_QSslSocket::testDataDir + "certs/fluke.key");
QVERIFY(file.open(QIODevice::ReadOnly));
QSslKey key(file.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
QVERIFY(!key.isNull());
socket->setPrivateKey(key);
- QList<QSslCertificate> localCert = QSslCertificate::fromPath(SRCDIR "certs/fluke.cert");
+ QList<QSslCertificate> localCert = QSslCertificate::fromPath(tst_QSslSocket::testDataDir
+ + "certs/fluke.cert");
QVERIFY(!localCert.isEmpty());
QVERIFY(!localCert.first().isNull());
socket->setLocalCertificate(localCert.first());
@@ -2134,6 +2166,9 @@ void tst_QSslSocket::waitForMinusOne()
#ifdef Q_OS_WIN
QSKIP("QTBUG-24451 - indefinite wait may hang");
#endif
+#ifdef Q_OS_WINRT // This can stay in case the one above goes away
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -2203,8 +2238,8 @@ protected:
{
socket = new QSslSocket(this);
- socket->setPrivateKey(SRCDIR "certs/fluke.key");
- socket->setLocalCertificate(SRCDIR "certs/fluke.cert");
+ socket->setPrivateKey(tst_QSslSocket::testDataDir + "certs/fluke.key");
+ socket->setLocalCertificate(tst_QSslSocket::testDataDir + "certs/fluke.cert");
socket->setSocketDescriptor(socketDescriptor);
socket->startServerEncryption();
}
@@ -2212,6 +2247,9 @@ protected:
void tst_QSslSocket::verifyMode()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -2319,7 +2357,7 @@ void tst_QSslSocket::resetProxy()
// make sure the connection works, and then set a nonsense proxy, and then
// make sure it does not work anymore
QSslSocket socket;
- socket.addCaCertificates(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem"));
+ socket.addCaCertificates(testDataDir + "certs/qt-test-server-cacert.pem");
socket.setProxy(goodProxy);
socket.connectToHostEncrypted(QtNetworkSettings::serverName(), 443);
QVERIFY2(socket.waitForConnected(10000), qPrintable(socket.errorString()));
@@ -2338,7 +2376,7 @@ void tst_QSslSocket::resetProxy()
// set the nonsense proxy and make sure the connection does not work,
// and then set the right proxy and make sure it works
QSslSocket socket2;
- socket2.addCaCertificates(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem"));
+ socket2.addCaCertificates(testDataDir + "certs/qt-test-server-cacert.pem");
socket2.setProxy(badProxy);
socket2.connectToHostEncrypted(QtNetworkSettings::serverName(), 443);
QVERIFY(! socket2.waitForConnected(10000));
@@ -2357,7 +2395,7 @@ void tst_QSslSocket::ignoreSslErrorsList_data()
// construct the list of errors that we will get with the SSL handshake and that we will ignore
QList<QSslError> expectedSslErrors;
// fromPath gives us a list of certs, but it actually only contains one
- QList<QSslCertificate> certs = QSslCertificate::fromPath(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem"));
+ QList<QSslCertificate> certs = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
QSslError rightError(FLUKE_CERTIFICATE_ERROR, certs.at(0));
QSslError wrongError(FLUKE_CERTIFICATE_ERROR);
@@ -2430,6 +2468,9 @@ void tst_QSslSocket::ignoreSslErrorsListWithSlot()
void tst_QSslSocket::abortOnSslErrors()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -2491,6 +2532,7 @@ void tst_QSslSocket::writeBigChunk()
QByteArray data;
data.resize(1024*1024*10); // 10 MB
// init with garbage. needed so ssl cannot compress it in an efficient way.
+ // ### Qt 6: update to a random engine
for (size_t i = 0; i < data.size() / sizeof(int); i++) {
int r = qrand();
data.data()[i*sizeof(int)] = r;
@@ -2525,11 +2567,14 @@ void tst_QSslSocket::writeBigChunk()
void tst_QSslSocket::blacklistedCertificates()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
- SslServer server(SRCDIR "certs/fake-login.live.com.key", SRCDIR "certs/fake-login.live.com.pem");
+ SslServer server(testDataDir + "certs/fake-login.live.com.key", testDataDir + "certs/fake-login.live.com.pem");
QSslSocket *receiver = new QSslSocket(this);
connect(receiver, SIGNAL(readyRead()), SLOT(exitLoop()));
@@ -2641,7 +2686,7 @@ void tst_QSslSocket::resume_data()
QTest::newRow("DoNotIgnoreErrors") << false << QList<QSslError>() << false;
QTest::newRow("ignoreAllErrors") << true << QList<QSslError>() << true;
- QList<QSslCertificate> certs = QSslCertificate::fromPath(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem"));
+ QList<QSslCertificate> certs = QSslCertificate::fromPath(testDataDir + "certs/qt-test-server-cacert.pem");
QSslError rightError(FLUKE_CERTIFICATE_ERROR, certs.at(0));
QSslError wrongError(FLUKE_CERTIFICATE_ERROR);
errorsList.append(wrongError);
@@ -2711,8 +2756,8 @@ class WebSocket : public QSslSocket
Q_OBJECT
public:
explicit WebSocket(qintptr socketDescriptor,
- const QString &keyFile = SRCDIR "certs/fluke.key",
- const QString &certFile = SRCDIR "certs/fluke.cert");
+ const QString &keyFile = tst_QSslSocket::testDataDir + "certs/fluke.key",
+ const QString &certFile = tst_QSslSocket::testDataDir + "certs/fluke.cert");
protected slots:
void onReadyReadFirstBytes(void);
@@ -2782,6 +2827,9 @@ protected:
void tst_QSslSocket::qtbug18498_peek()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -2849,6 +2897,9 @@ protected:
void tst_QSslSocket::qtbug18498_peek2()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -2917,13 +2968,13 @@ void tst_QSslSocket::qtbug18498_peek2()
QCOMPARE(a[2], 'S');
QCOMPARE(server->readAll(), QByteArray("TLS\r\n"));
- QFile file(SRCDIR "certs/fluke.key");
+ QFile file(testDataDir + "certs/fluke.key");
QVERIFY(file.open(QIODevice::ReadOnly));
QSslKey key(file.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
QVERIFY(!key.isNull());
server->setPrivateKey(key);
- QList<QSslCertificate> localCert = QSslCertificate::fromPath(SRCDIR "certs/fluke.cert");
+ QList<QSslCertificate> localCert = QSslCertificate::fromPath(testDataDir + "certs/fluke.cert");
QVERIFY(!localCert.isEmpty());
QVERIFY(!localCert.first().isNull());
server->setLocalCertificate(localCert.first());
@@ -2963,6 +3014,9 @@ void tst_QSslSocket::qtbug18498_peek2()
void tst_QSslSocket::dhServer()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl())
QSKIP("No SSL support");
@@ -3072,6 +3126,9 @@ void tst_QSslSocket::dhServerCustomParams()
void tst_QSslSocket::ecdhServer()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl()) {
qWarning("SSL not supported, skipping test");
return;
@@ -3117,10 +3174,10 @@ void tst_QSslSocket::verifyClientCertificate_data()
QTest::newRow("NoCert:VerifyPeer") << QSslSocket::VerifyPeer << noCerts << noKey << false;
// self-signed certificate
- QList<QSslCertificate> flukeCerts = QSslCertificate::fromPath(SRCDIR "certs/fluke.cert");
+ QList<QSslCertificate> flukeCerts = QSslCertificate::fromPath(testDataDir + "certs/fluke.cert");
QCOMPARE(flukeCerts.size(), 1);
- QFile flukeFile(SRCDIR "certs/fluke.key");
+ QFile flukeFile(testDataDir + "certs/fluke.key");
QVERIFY(flukeFile.open(QIODevice::ReadOnly));
QSslKey flukeKey(flukeFile.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
QVERIFY(!flukeKey.isNull());
@@ -3131,10 +3188,10 @@ void tst_QSslSocket::verifyClientCertificate_data()
QTest::newRow("SelfSignedCert:VerifyPeer") << QSslSocket::VerifyPeer << flukeCerts << flukeKey << false;
// valid certificate, but wrong usage (server certificate)
- QList<QSslCertificate> serverCerts = QSslCertificate::fromPath(SRCDIR "certs/bogus-server.crt");
+ QList<QSslCertificate> serverCerts = QSslCertificate::fromPath(testDataDir + "certs/bogus-server.crt");
QCOMPARE(serverCerts.size(), 1);
- QFile serverFile(SRCDIR "certs/bogus-server.key");
+ QFile serverFile(testDataDir + "certs/bogus-server.key");
QVERIFY(serverFile.open(QIODevice::ReadOnly));
QSslKey serverKey(serverFile.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
QVERIFY(!serverKey.isNull());
@@ -3145,10 +3202,10 @@ void tst_QSslSocket::verifyClientCertificate_data()
QTest::newRow("ValidServerCert:VerifyPeer") << QSslSocket::VerifyPeer << serverCerts << serverKey << false;
// valid certificate, correct usage (client certificate)
- QList<QSslCertificate> validCerts = QSslCertificate::fromPath(SRCDIR "certs/bogus-client.crt");
+ QList<QSslCertificate> validCerts = QSslCertificate::fromPath(testDataDir + "certs/bogus-client.crt");
QCOMPARE(validCerts.size(), 1);
- QFile validFile(SRCDIR "certs/bogus-client.key");
+ QFile validFile(testDataDir + "certs/bogus-client.key");
QVERIFY(validFile.open(QIODevice::ReadOnly));
QSslKey validKey(validFile.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
QVERIFY(!validKey.isNull());
@@ -3159,7 +3216,7 @@ void tst_QSslSocket::verifyClientCertificate_data()
QTest::newRow("ValidClientCert:VerifyPeer") << QSslSocket::VerifyPeer << validCerts << validKey << true;
// valid certificate, correct usage (client certificate), with chain
- validCerts += QSslCertificate::fromPath(SRCDIR "certs/bogus-ca.crt");
+ validCerts += QSslCertificate::fromPath(testDataDir + "certs/bogus-ca.crt");
QCOMPARE(validCerts.size(), 2);
QTest::newRow("ValidClientCert:AutoVerifyPeer") << QSslSocket::AutoVerifyPeer << validCerts << validKey << true;
@@ -3178,6 +3235,9 @@ void tst_QSslSocket::verifyClientCertificate()
// success instead of failure etc.).
QSKIP("This test can not work with Secure Transport");
#endif
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
if (!QSslSocket::supportsSsl()) {
qWarning("SSL not supported, skipping test");
return;
@@ -3189,7 +3249,7 @@ void tst_QSslSocket::verifyClientCertificate()
QFETCH(QSslSocket::PeerVerifyMode, peerVerifyMode);
SslServer server;
- server.addCaCertificates = QLatin1String(SRCDIR "certs/bogus-ca.crt");
+ server.addCaCertificates = testDataDir + "certs/bogus-ca.crt";
server.ignoreSslErrors = false;
server.peerVerifyMode = peerVerifyMode;
QVERIFY(server.listen());
@@ -3688,6 +3748,9 @@ void tst_QSslSocket::simplePskConnect()
void tst_QSslSocket::ephemeralServerKey_data()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QTest::addColumn<QString>("cipher");
QTest::addColumn<bool>("emptyKey");
@@ -3762,6 +3825,9 @@ void tst_QSslSocket::allowedProtocolNegotiation()
void tst_QSslSocket::pskServer()
{
+#ifdef Q_OS_WINRT
+ QSKIP("Server-side encryption is not implemented on WinRT.");
+#endif
QFETCH_GLOBAL(bool, setProxy);
if (!QSslSocket::supportsSsl() || setProxy)
return;
@@ -3844,6 +3910,134 @@ void tst_QSslSocket::pskServer()
QCOMPARE(disconnectedSpy.count(), 1);
}
+void tst_QSslSocket::signatureAlgorithm_data()
+{
+ if (!QSslSocket::supportsSsl())
+ QSKIP("Signature algorithms cannot be tested without SSL support");
+
+ if (QSslSocket::sslLibraryVersionNumber() < 0x10002000L)
+ QSKIP("Signature algorithms cannot be tested with OpenSSL < 1.0.2");
+
+ QTest::addColumn<QByteArrayList>("serverSigAlgPairs");
+ QTest::addColumn<QSsl::SslProtocol>("serverProtocol");
+ QTest::addColumn<QByteArrayList>("clientSigAlgPairs");
+ QTest::addColumn<QSsl::SslProtocol>("clientProtocol");
+ QTest::addColumn<QAbstractSocket::SocketState>("state");
+
+ const QByteArray dsaSha1("DSA+SHA1");
+ const QByteArray ecdsaSha1("ECDSA+SHA1");
+ const QByteArray ecdsaSha512("ECDSA+SHA512");
+ const QByteArray rsaSha256("RSA+SHA256");
+ const QByteArray rsaSha384("RSA+SHA384");
+ const QByteArray rsaSha512("RSA+SHA512");
+
+ QTest::newRow("match_TlsV1_2")
+ << QByteArrayList({rsaSha256})
+ << QSsl::TlsV1_2
+ << QByteArrayList({rsaSha256})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::ConnectedState;
+ QTest::newRow("no_hashalg_match_TlsV1_2")
+ << QByteArrayList({rsaSha256})
+ << QSsl::TlsV1_2
+ << QByteArrayList({rsaSha512})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::UnconnectedState;
+ QTest::newRow("no_sigalg_match_TlsV1_2")
+ << QByteArrayList({ecdsaSha512})
+ << QSsl::TlsV1_2
+ << QByteArrayList({rsaSha512})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::UnconnectedState;
+ QTest::newRow("no_cipher_match_AnyProtocol")
+ << QByteArrayList({rsaSha512})
+ << QSsl::AnyProtocol
+ << QByteArrayList({ecdsaSha512})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::UnconnectedState;
+ QTest::newRow("match_multiple-choice")
+ << QByteArrayList({dsaSha1, rsaSha256, rsaSha384, rsaSha512})
+ << QSsl::AnyProtocol
+ << QByteArrayList({ecdsaSha1, rsaSha384, rsaSha512, ecdsaSha512})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::ConnectedState;
+ QTest::newRow("match_client_longer")
+ << QByteArrayList({dsaSha1, rsaSha256})
+ << QSsl::AnyProtocol
+ << QByteArrayList({ecdsaSha1, ecdsaSha512, rsaSha256})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::ConnectedState;
+ QTest::newRow("match_server_longer")
+ << QByteArrayList({ecdsaSha1, ecdsaSha512, rsaSha256})
+ << QSsl::AnyProtocol
+ << QByteArrayList({dsaSha1, rsaSha256})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::ConnectedState;
+
+ // signature algorithms do not match, but are ignored because the tls version is not v1.2
+ QTest::newRow("client_ignore_TlsV1_1")
+ << QByteArrayList({rsaSha256})
+ << QSsl::TlsV1_1
+ << QByteArrayList({rsaSha512})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::ConnectedState;
+ QTest::newRow("server_ignore_TlsV1_1")
+ << QByteArrayList({rsaSha256})
+ << QSsl::AnyProtocol
+ << QByteArrayList({rsaSha512})
+ << QSsl::TlsV1_1
+ << QAbstractSocket::ConnectedState;
+ QTest::newRow("client_ignore_TlsV1_0")
+ << QByteArrayList({rsaSha256})
+ << QSsl::TlsV1_0
+ << QByteArrayList({rsaSha512})
+ << QSsl::AnyProtocol
+ << QAbstractSocket::ConnectedState;
+ QTest::newRow("server_ignore_TlsV1_0")
+ << QByteArrayList({rsaSha256})
+ << QSsl::AnyProtocol
+ << QByteArrayList({rsaSha512})
+ << QSsl::TlsV1_0
+ << QAbstractSocket::ConnectedState;
+}
+
+void tst_QSslSocket::signatureAlgorithm()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ QSKIP("Test not adapted for use with proxying");
+
+ QFETCH(QByteArrayList, serverSigAlgPairs);
+ QFETCH(QSsl::SslProtocol, serverProtocol);
+ QFETCH(QByteArrayList, clientSigAlgPairs);
+ QFETCH(QSsl::SslProtocol, clientProtocol);
+ QFETCH(QAbstractSocket::SocketState, state);
+
+ SslServer server;
+ server.protocol = serverProtocol;
+ server.config.setCiphers({QSslCipher("ECDHE-RSA-AES256-SHA")});
+ server.config.setBackendConfigOption(QByteArrayLiteral("SignatureAlgorithms"), serverSigAlgPairs.join(':'));
+ QVERIFY(server.listen());
+
+ QSslConfiguration clientConfig = QSslConfiguration::defaultConfiguration();
+ clientConfig.setProtocol(clientProtocol);
+ clientConfig.setBackendConfigOption(QByteArrayLiteral("SignatureAlgorithms"), clientSigAlgPairs.join(':'));
+ QSslSocket client;
+ client.setSslConfiguration(clientConfig);
+ socket = &client;
+
+ QEventLoop loop;
+ QTimer::singleShot(5000, &loop, &QEventLoop::quit);
+ connect(socket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error), &loop, &QEventLoop::quit);
+ connect(socket, QOverload<const QList<QSslError> &>::of(&QSslSocket::sslErrors), this, &tst_QSslSocket::ignoreErrorSlot);
+ connect(socket, &QSslSocket::encrypted, &loop, &QEventLoop::quit);
+
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort());
+ loop.exec();
+ socket = nullptr;
+ QCOMPARE(client.state(), state);
+}
+
void tst_QSslSocket::forwardReadChannelFinished()
{
if (!QSslSocket::supportsSsl())
diff --git a/tests/auto/opengl/qgl/BLACKLIST b/tests/auto/opengl/qgl/BLACKLIST
index a83d1272a0..71be4bf19d 100644
--- a/tests/auto/opengl/qgl/BLACKLIST
+++ b/tests/auto/opengl/qgl/BLACKLIST
@@ -16,7 +16,6 @@ winrt
[clipTest]
windows
winrt
-opensuse-13.1
[graphicsViewClipping]
windows
winrt
diff --git a/tests/auto/other/compiler/tst_compiler.cpp b/tests/auto/other/compiler/tst_compiler.cpp
index 8b59f2758f..0410856790 100644
--- a/tests/auto/other/compiler/tst_compiler.cpp
+++ b/tests/auto/other/compiler/tst_compiler.cpp
@@ -1266,8 +1266,6 @@ void tst_Compiler::cxx11_rvalue_refs()
QCOMPARE(s3, MoveDefinedQString("Hello"));
}
- // supported by MSVC only from November 2013 CTP, but only check for VC2015:
-# if !defined(Q_CC_MSVC) || defined(Q_CC_INTEL) || _MSC_VER >= 1900 // VS14 == VC2015
// we require automatic generation of move special member functions:
{
struct M { MoveDefinedQString s1, s2; };
@@ -1288,7 +1286,6 @@ void tst_Compiler::cxx11_rvalue_refs()
QCOMPARE(m3.s1, MoveDefinedQString("Hello"));
QCOMPARE(m3.s2, MoveDefinedQString("World"));
}
-# endif // MSVC < 2015
#endif
}
diff --git a/tests/auto/other/gestures/BLACKLIST b/tests/auto/other/gestures/BLACKLIST
index bd43b99d39..1d89178fe5 100644
--- a/tests/auto/other/gestures/BLACKLIST
+++ b/tests/auto/other/gestures/BLACKLIST
@@ -1,7 +1,2 @@
[]
-rhel-7.1
-rhel-7.2
-rhel-7.3
rhel-7.4
-[customGesture]
-opensuse-13.1
diff --git a/tests/auto/other/macnativeevents/BLACKLIST b/tests/auto/other/macnativeevents/BLACKLIST
index 1bc530ecc8..32e0b1d50b 100644
--- a/tests/auto/other/macnativeevents/BLACKLIST
+++ b/tests/auto/other/macnativeevents/BLACKLIST
@@ -7,8 +7,6 @@ osx
osx
[testChildWindowInFrontOfStaysOnTopParentWindow]
osx
-[testModifierCtrlWithDontSwapCtrlAndMeta]
-osx
[testMouseMoveLocation]
osx
[testMouseLeftDoubleClick]
diff --git a/tests/auto/other/macnativeevents/tst_macnativeevents.cpp b/tests/auto/other/macnativeevents/tst_macnativeevents.cpp
index e8970e6f24..18585d1856 100644
--- a/tests/auto/other/macnativeevents/tst_macnativeevents.cpp
+++ b/tests/auto/other/macnativeevents/tst_macnativeevents.cpp
@@ -501,10 +501,10 @@ void tst_MacNativeEvents::testModifierCtrlWithDontSwapCtrlAndMeta()
native.append(new QNativeModifierEvent(Qt::NoModifier));
ExpectedEventList expected(&w);
- expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_Meta, Qt::NoModifier));
+ expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_Control, Qt::NoModifier));
expected.append(new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::ControlModifier));
expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_A, Qt::ControlModifier));
- expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_Meta, Qt::ControlModifier));
+ expected.append(new QKeyEvent(QEvent::KeyRelease, Qt::Key_Control, Qt::ControlModifier));
native.play();
QVERIFY2(expected.waitForAllEvents(), "the test did not receive all expected events!");
diff --git a/tests/auto/other/macplist/macplist.pro b/tests/auto/other/macplist/macplist.pro
index 3a0e2d43d3..5820793cbc 100644
--- a/tests/auto/other/macplist/macplist.pro
+++ b/tests/auto/other/macplist/macplist.pro
@@ -1,7 +1,7 @@
TEMPLATE = subdirs
+test.depends = app
SUBDIRS = app test
-CONFIG += ordered
diff --git a/tests/auto/other/modeltest/modeltest.cpp b/tests/auto/other/modeltest/modeltest.cpp
deleted file mode 100644
index 611f9e904b..0000000000
--- a/tests/auto/other/modeltest/modeltest.cpp
+++ /dev/null
@@ -1,581 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "modeltest.h"
-
-#include <QtCore/QtCore>
-#include <QtTest/QtTest>
-
-/*!
- Connect to all of the models signals. Whenever anything happens recheck everything.
-*/
-ModelTest::ModelTest(QAbstractItemModel *_model, QObject *parent) : QObject(parent),
- model(_model),
- fetchingMore(false)
-{
- if (!model)
- qFatal("%s: model must not be null", Q_FUNC_INFO);
-
- connect(model, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(columnsInserted(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(layoutAboutToBeChanged()), this, SLOT(runAllTests()));
- connect(model, SIGNAL(layoutChanged()), this, SLOT(runAllTests()));
- connect(model, SIGNAL(modelReset()), this, SLOT(runAllTests()));
- connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
- connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(runAllTests()));
-
- // Special checks for changes
- connect(model, SIGNAL(layoutAboutToBeChanged()),
- this, SLOT(layoutAboutToBeChanged()));
- connect(model, SIGNAL(layoutChanged()),
- this, SLOT(layoutChanged()));
-
- connect(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
- this, SLOT(rowsAboutToBeInserted(QModelIndex,int,int)));
- connect(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
- this, SLOT(rowsAboutToBeRemoved(QModelIndex,int,int)));
- connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(rowsInserted(QModelIndex,int,int)));
- connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(rowsRemoved(QModelIndex,int,int)));
- connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- this, SLOT(dataChanged(QModelIndex,QModelIndex)));
- connect(model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
- this, SLOT(headerDataChanged(Qt::Orientation,int,int)));
-
- runAllTests();
-}
-
-void ModelTest::runAllTests()
-{
- if (fetchingMore)
- return;
- nonDestructiveBasicTest();
- rowCount();
- columnCount();
- hasIndex();
- index();
- parent();
- data();
-}
-
-/*!
- nonDestructiveBasicTest tries to call a number of the basic functions (not all)
- to make sure the model doesn't outright segfault, testing the functions that makes sense.
-*/
-void ModelTest::nonDestructiveBasicTest()
-{
- QVERIFY(!model->buddy(QModelIndex()).isValid());
- model->canFetchMore(QModelIndex());
- QVERIFY(model->columnCount(QModelIndex()) >= 0);
- QCOMPARE(model->data(QModelIndex()), QVariant());
- fetchingMore = true;
- model->fetchMore(QModelIndex());
- fetchingMore = false;
- Qt::ItemFlags flags = model->flags(QModelIndex());
- QVERIFY(flags == Qt::ItemIsDropEnabled || flags == 0);
- model->hasChildren(QModelIndex());
- model->hasIndex(0, 0);
- model->headerData(0, Qt::Horizontal);
- model->index(0, 0);
- model->itemData(QModelIndex());
- QVariant cache;
- model->match(QModelIndex(), -1, cache);
- model->mimeTypes();
- QVERIFY(!model->parent(QModelIndex()).isValid());
- QVERIFY(model->rowCount() >= 0);
- QVariant variant;
- model->setData(QModelIndex(), variant, -1);
- model->setHeaderData(-1, Qt::Horizontal, QVariant());
- model->setHeaderData(999999, Qt::Horizontal, QVariant());
- QMap<int, QVariant> roles;
- model->sibling(0, 0, QModelIndex());
- model->span(QModelIndex());
- model->supportedDropActions();
-}
-
-/*!
- Tests model's implementation of QAbstractItemModel::rowCount() and hasChildren()
-
- Models that are dynamically populated are not as fully tested here.
- */
-void ModelTest::rowCount()
-{
-// qDebug() << "rc";
- // check top row
- QModelIndex topIndex = model->index(0, 0, QModelIndex());
- int rows = model->rowCount(topIndex);
- QVERIFY(rows >= 0);
- if (rows > 0)
- QVERIFY(model->hasChildren(topIndex));
-
- QModelIndex secondLevelIndex = model->index(0, 0, topIndex);
- if (secondLevelIndex.isValid()) { // not the top level
- // check a row count where parent is valid
- rows = model->rowCount(secondLevelIndex);
- QVERIFY(rows >= 0);
- if (rows > 0)
- QVERIFY(model->hasChildren(secondLevelIndex));
- }
-
- // The models rowCount() is tested more extensively in checkChildren(),
- // but this catches the big mistakes
-}
-
-/*!
- Tests model's implementation of QAbstractItemModel::columnCount() and hasChildren()
- */
-void ModelTest::columnCount()
-{
- // check top row
- QModelIndex topIndex = model->index(0, 0, QModelIndex());
- QVERIFY(model->columnCount(topIndex) >= 0);
-
- // check a column count where parent is valid
- QModelIndex childIndex = model->index(0, 0, topIndex);
- if (childIndex.isValid())
- QVERIFY(model->columnCount(childIndex) >= 0);
-
- // columnCount() is tested more extensively in checkChildren(),
- // but this catches the big mistakes
-}
-
-/*!
- Tests model's implementation of QAbstractItemModel::hasIndex()
- */
-void ModelTest::hasIndex()
-{
-// qDebug() << "hi";
- // Make sure that invalid values returns an invalid index
- QVERIFY(!model->hasIndex(-2, -2));
- QVERIFY(!model->hasIndex(-2, 0));
- QVERIFY(!model->hasIndex(0, -2));
-
- int rows = model->rowCount();
- int columns = model->columnCount();
-
- // check out of bounds
- QVERIFY(!model->hasIndex(rows, columns));
- QVERIFY(!model->hasIndex(rows + 1, columns + 1));
-
- if (rows > 0)
- QVERIFY(model->hasIndex(0, 0));
-
- // hasIndex() is tested more extensively in checkChildren(),
- // but this catches the big mistakes
-}
-
-/*!
- Tests model's implementation of QAbstractItemModel::index()
- */
-void ModelTest::index()
-{
-// qDebug() << "i";
- // Make sure that invalid values returns an invalid index
- QVERIFY(!model->index(-2, -2).isValid());
- QVERIFY(!model->index(-2, 0).isValid());
- QVERIFY(!model->index(0, -2).isValid());
-
- int rows = model->rowCount();
- int columns = model->columnCount();
-
- if (rows == 0)
- return;
-
- // Catch off by one errors
- QVERIFY(!model->index(rows, columns).isValid());
- QVERIFY(model->index(0, 0).isValid());
-
- // Make sure that the same index is *always* returned
- QModelIndex a = model->index(0, 0);
- QModelIndex b = model->index(0, 0);
- QCOMPARE(a, b);
-
- // index() is tested more extensively in checkChildren(),
- // but this catches the big mistakes
-}
-
-/*!
- Tests model's implementation of QAbstractItemModel::parent()
- */
-void ModelTest::parent()
-{
-// qDebug() << "p";
- // Make sure the model won't crash and will return an invalid QModelIndex
- // when asked for the parent of an invalid index.
- QVERIFY(!model->parent(QModelIndex()).isValid());
-
- if (model->rowCount() == 0)
- return;
-
- // Column 0 | Column 1 |
- // QModelIndex() | |
- // \- topIndex | topIndex1 |
- // \- childIndex | childIndex1 |
-
- // Common error test #1, make sure that a top level index has a parent
- // that is a invalid QModelIndex.
- QModelIndex topIndex = model->index(0, 0, QModelIndex());
- QVERIFY(!model->parent(topIndex).isValid());
-
- // Common error test #2, make sure that a second level index has a parent
- // that is the first level index.
- if (model->rowCount(topIndex) > 0) {
- QModelIndex childIndex = model->index(0, 0, topIndex);
- QCOMPARE(model->parent(childIndex), topIndex);
- }
-
- // Common error test #3, the second column should NOT have the same children
- // as the first column in a row.
- // Usually the second column shouldn't have children.
- QModelIndex topIndex1 = model->index(0, 1, QModelIndex());
- if (model->rowCount(topIndex1) > 0) {
- QModelIndex childIndex = model->index(0, 0, topIndex);
- QModelIndex childIndex1 = model->index(0, 0, topIndex1);
- QVERIFY(childIndex != childIndex1);
- }
-
- // Full test, walk n levels deep through the model making sure that all
- // parent's children correctly specify their parent.
- checkChildren(QModelIndex());
-}
-
-/*!
- Called from the parent() test.
-
- A model that returns an index of parent X should also return X when asking
- for the parent of the index.
-
- This recursive function does pretty extensive testing on the whole model in an
- effort to catch edge cases.
-
- This function assumes that rowCount(), columnCount() and index() already work.
- If they have a bug it will point it out, but the above tests should have already
- found the basic bugs because it is easier to figure out the problem in
- those tests then this one.
- */
-void ModelTest::checkChildren(const QModelIndex &parent, int currentDepth)
-{
- // First just try walking back up the tree.
- QModelIndex p = parent;
- while (p.isValid())
- p = p.parent();
-
- // For models that are dynamically populated
- if (model->canFetchMore(parent)) {
- fetchingMore = true;
- model->fetchMore(parent);
- fetchingMore = false;
- }
-
- int rows = model->rowCount(parent);
- int columns = model->columnCount(parent);
-
- if (rows > 0)
- QVERIFY(model->hasChildren(parent));
-
- // Some further testing against rows(), columns(), and hasChildren()
- QVERIFY(rows >= 0);
- QVERIFY(columns >= 0);
- if (rows > 0)
- QVERIFY(model->hasChildren(parent));
-
- //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows
- // << "columns:" << columns << "parent column:" << parent.column();
-
- const QModelIndex topLeftChild = model->index(0, 0, parent);
-
- QVERIFY(!model->hasIndex(rows + 1, 0, parent));
- for (int r = 0; r < rows; ++r) {
- if (model->canFetchMore(parent)) {
- fetchingMore = true;
- model->fetchMore(parent);
- fetchingMore = false;
- }
- QVERIFY(!model->hasIndex(r, columns + 1, parent));
- for (int c = 0; c < columns; ++c) {
- QVERIFY(model->hasIndex(r, c, parent));
- QModelIndex index = model->index(r, c, parent);
- // rowCount() and columnCount() said that it existed...
- if (!index.isValid())
- qWarning() << "Got invalid index at row=" << r << "col=" << c << "parent=" << parent;
- QVERIFY(index.isValid());
-
- // index() should always return the same index when called twice in a row
- QModelIndex modifiedIndex = model->index(r, c, parent);
- QCOMPARE(index, modifiedIndex);
-
- // Make sure we get the same index if we request it twice in a row
- QModelIndex a = model->index(r, c, parent);
- QModelIndex b = model->index(r, c, parent);
- QCOMPARE(a, b);
-
- {
- const QModelIndex sibling = model->sibling(r, c, topLeftChild);
- QCOMPARE(index, sibling);
- }
- {
- const QModelIndex sibling = topLeftChild.sibling(r, c);
- QCOMPARE(index, sibling);
- }
-
- // Some basic checking on the index that is returned
- QCOMPARE(index.model(), model);
- QCOMPARE(index.row(), r);
- QCOMPARE(index.column(), c);
- // While you can technically return a QVariant usually this is a sign
- // of a bug in data(). Disable if this really is ok in your model.
-// QVERIFY( model->data ( index, Qt::DisplayRole ).isValid() );
-
- // If the next test fails here is some somewhat useful debug you play with.
-
- if (model->parent(index) != parent) {
- qDebug() << r << c << currentDepth << model->data(index).toString()
- << model->data(parent).toString();
- qDebug() << index << parent << model->parent(index);
-// And a view that you can even use to show the model.
-// QTreeView view;
-// view.setModel(model);
-// view.show();
- }
-
- // Check that we can get back our real parent.
- QCOMPARE(model->parent(index), parent);
-
- // recursively go down the children
- if (model->hasChildren(index) && currentDepth < 10) {
- //qDebug() << r << c << "has children" << model->rowCount(index);
- checkChildren(index, ++currentDepth);
- }/* else { if (currentDepth >= 10) qDebug() << "checked 10 deep"; };*/
-
- // make sure that after testing the children that the index doesn't change.
- QModelIndex newerIndex = model->index(r, c, parent);
- QCOMPARE(index, newerIndex);
- }
- }
-}
-
-/*!
- Tests model's implementation of QAbstractItemModel::data()
- */
-void ModelTest::data()
-{
- // Invalid index should return an invalid qvariant
- QVERIFY(!model->data(QModelIndex()).isValid());
-
- if (model->rowCount() == 0)
- return;
-
- // A valid index should have a valid QVariant data
- QVERIFY(model->index(0, 0).isValid());
-
- // shouldn't be able to set data on an invalid index
- QVERIFY(!model->setData(QModelIndex(), QLatin1String("foo"), Qt::DisplayRole));
-
- // General Purpose roles that should return a QString
- QVariant variant = model->data(model->index(0, 0), Qt::ToolTipRole);
- if (variant.isValid())
- QVERIFY(variant.canConvert<QString>());
- variant = model->data(model->index(0, 0), Qt::StatusTipRole);
- if (variant.isValid())
- QVERIFY(variant.canConvert<QString>());
- variant = model->data(model->index(0, 0), Qt::WhatsThisRole);
- if (variant.isValid())
- QVERIFY(variant.canConvert<QString>());
-
- // General Purpose roles that should return a QSize
- variant = model->data(model->index(0, 0), Qt::SizeHintRole);
- if (variant.isValid())
- QVERIFY(variant.canConvert<QSize>());
-
- // General Purpose roles that should return a QFont
- QVariant fontVariant = model->data(model->index(0, 0), Qt::FontRole);
- if (fontVariant.isValid())
- QVERIFY(fontVariant.canConvert<QFont>());
-
- // Check that the alignment is one we know about
- QVariant textAlignmentVariant = model->data(model->index(0, 0), Qt::TextAlignmentRole);
- if (textAlignmentVariant.isValid()) {
- Qt::Alignment alignment = textAlignmentVariant.value<Qt::Alignment>();
- QCOMPARE(alignment, (alignment & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask)));
- }
-
- // General Purpose roles that should return a QColor
- QVariant colorVariant = model->data(model->index(0, 0), Qt::BackgroundColorRole);
- if (colorVariant.isValid())
- QVERIFY(colorVariant.canConvert<QColor>());
-
- colorVariant = model->data(model->index(0, 0), Qt::TextColorRole);
- if (colorVariant.isValid())
- QVERIFY(colorVariant.canConvert<QColor>());
-
- // Check that the "check state" is one we know about.
- QVariant checkStateVariant = model->data(model->index(0, 0), Qt::CheckStateRole);
- if (checkStateVariant.isValid()) {
- int state = checkStateVariant.toInt();
- QVERIFY(state == Qt::Unchecked
- || state == Qt::PartiallyChecked
- || state == Qt::Checked);
- }
-}
-
-/*!
- Store what is about to be inserted to make sure it actually happens
-
- \sa rowsInserted()
- */
-void ModelTest::rowsAboutToBeInserted(const QModelIndex &parent, int start, int /* end */)
-{
-// Q_UNUSED(end);
-// qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString()
-// << "current count of parent=" << model->rowCount ( parent ); // << "display of last=" << model->data( model->index(start-1, 0, parent) );
-// qDebug() << model->index(start-1, 0, parent) << model->data( model->index(start-1, 0, parent) );
- Changing c;
- c.parent = parent;
- c.oldSize = model->rowCount(parent);
- c.last = model->data(model->index(start - 1, 0, parent));
- c.next = model->data(model->index(start, 0, parent));
- insert.push(c);
-}
-
-/*!
- Confirm that what was said was going to happen actually did
-
- \sa rowsAboutToBeInserted()
- */
-void ModelTest::rowsInserted(const QModelIndex &parent, int start, int end)
-{
- Changing c = insert.pop();
- QCOMPARE(parent, c.parent);
-// qDebug() << "rowsInserted" << "start=" << start << "end=" << end << "oldsize=" << c.oldSize
-// << "parent=" << model->data ( parent ).toString() << "current rowcount of parent=" << model->rowCount ( parent );
-
-// for (int ii=start; ii <= end; ii++)
-// {
-// qDebug() << "itemWasInserted:" << ii << model->data ( model->index ( ii, 0, parent ));
-// }
-// qDebug();
-
- QCOMPARE(model->rowCount(parent), c.oldSize + (end - start + 1));
- QCOMPARE(model->data(model->index(start - 1, 0, c.parent)), c.last);
-
- if (c.next != model->data(model->index(end + 1, 0, c.parent))) {
- qDebug() << start << end;
- for (int i = 0; i < model->rowCount(); ++i)
- qDebug() << model->index(i, 0).data().toString();
- qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent));
- }
-
- QCOMPARE(model->data(model->index(end + 1, 0, c.parent)), c.next);
-}
-
-void ModelTest::layoutAboutToBeChanged()
-{
- for (int i = 0; i < qBound(0, model->rowCount(), 100); ++i)
- changing.append(QPersistentModelIndex(model->index(i, 0)));
-}
-
-void ModelTest::layoutChanged()
-{
- for (int i = 0; i < changing.count(); ++i) {
- QPersistentModelIndex p = changing[i];
- QCOMPARE(model->index(p.row(), p.column(), p.parent()), QModelIndex(p));
- }
- changing.clear();
-}
-
-/*!
- Store what is about to be inserted to make sure it actually happens
-
- \sa rowsRemoved()
- */
-void ModelTest::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
-{
- qDebug() << "ratbr" << parent << start << end;
- Changing c;
- c.parent = parent;
- c.oldSize = model->rowCount(parent);
- c.last = model->data(model->index(start - 1, 0, parent));
- c.next = model->data(model->index(end + 1, 0, parent));
- remove.push(c);
-}
-
-/*!
- Confirm that what was said was going to happen actually did
-
- \sa rowsAboutToBeRemoved()
- */
-void ModelTest::rowsRemoved(const QModelIndex &parent, int start, int end)
-{
- qDebug() << "rr" << parent << start << end;
- Changing c = remove.pop();
- QCOMPARE(parent, c.parent);
- QCOMPARE(model->rowCount(parent), c.oldSize - (end - start + 1));
- QCOMPARE(model->data(model->index(start - 1, 0, c.parent)), c.last);
- QCOMPARE(model->data(model->index(start, 0, c.parent)), c.next);
-}
-
-void ModelTest::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
-{
- QVERIFY(topLeft.isValid());
- QVERIFY(bottomRight.isValid());
- QModelIndex commonParent = bottomRight.parent();
- QCOMPARE(topLeft.parent(), commonParent);
- QVERIFY(topLeft.row() <= bottomRight.row());
- QVERIFY(topLeft.column() <= bottomRight.column());
- int rowCount = model->rowCount(commonParent);
- int columnCount = model->columnCount(commonParent);
- QVERIFY(bottomRight.row() < rowCount);
- QVERIFY(bottomRight.column() < columnCount);
-}
-
-void ModelTest::headerDataChanged(Qt::Orientation orientation, int start, int end)
-{
- QVERIFY(start >= 0);
- QVERIFY(end >= 0);
- QVERIFY(start <= end);
- int itemCount = orientation == Qt::Vertical ? model->rowCount() : model->columnCount();
- QVERIFY(start < itemCount);
- QVERIFY(end < itemCount);
-}
diff --git a/tests/auto/other/modeltest/modeltest.h b/tests/auto/other/modeltest/modeltest.h
deleted file mode 100644
index 4676bf4434..0000000000
--- a/tests/auto/other/modeltest/modeltest.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MODELTEST_H
-#define MODELTEST_H
-
-#include <QtCore/QObject>
-#include <QtCore/QAbstractItemModel>
-#include <QtCore/QStack>
-
-class ModelTest : public QObject
-{
- Q_OBJECT
-
-public:
- ModelTest(QAbstractItemModel *model, QObject *parent = 0);
-
-private Q_SLOTS:
- void nonDestructiveBasicTest();
- void rowCount();
- void columnCount();
- void hasIndex();
- void index();
- void parent();
- void data();
-
-protected Q_SLOTS:
- void runAllTests();
- void layoutAboutToBeChanged();
- void layoutChanged();
- void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end);
- void rowsInserted(const QModelIndex &parent, int start, int end);
- void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
- void rowsRemoved(const QModelIndex &parent, int start, int end);
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
- void headerDataChanged(Qt::Orientation orientation, int start, int end);
-
-private:
- void checkChildren(const QModelIndex &parent, int currentDepth = 0);
-
- QAbstractItemModel *model;
-
- struct Changing {
- QModelIndex parent;
- int oldSize;
- QVariant last;
- QVariant next;
- };
- QStack<Changing> insert;
- QStack<Changing> remove;
-
- bool fetchingMore;
-
- QList<QPersistentModelIndex> changing;
-};
-
-#endif
diff --git a/tests/auto/other/modeltest/modeltest.pro b/tests/auto/other/modeltest/modeltest.pro
deleted file mode 100644
index 8e96058449..0000000000
--- a/tests/auto/other/modeltest/modeltest.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-CONFIG += testcase
-TARGET = tst_modeltest
-QT += widgets testlib
-SOURCES += tst_modeltest.cpp modeltest.cpp dynamictreemodel.cpp
-HEADERS += modeltest.h dynamictreemodel.h
diff --git a/tests/auto/other/modeltest/tst_modeltest.cpp b/tests/auto/other/modeltest/tst_modeltest.cpp
deleted file mode 100644
index e2d002844b..0000000000
--- a/tests/auto/other/modeltest/tst_modeltest.cpp
+++ /dev/null
@@ -1,300 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtTest/QtTest>
-#include <QtGui/QtGui>
-#include <QtWidgets/QtWidgets>
-
-#include "modeltest.h"
-#include "dynamictreemodel.h"
-
-class tst_ModelTest : public QObject
-{
- Q_OBJECT
-
-private slots:
- void stringListModel();
- void treeWidgetModel();
- void standardItemModel();
- void testInsertThroughProxy();
- void moveSourceItems();
- void testResetThroughProxy();
-};
-
-/*
- tests
-*/
-
-void tst_ModelTest::stringListModel()
-{
- QStringListModel model;
- QSortFilterProxyModel proxy;
-
- ModelTest t1(&model);
- ModelTest t2(&proxy);
-
- proxy.setSourceModel(&model);
-
- model.setStringList(QStringList() << "2" << "3" << "1");
- model.setStringList(QStringList() << "a" << "e" << "plop" << "b" << "c");
-
- proxy.setDynamicSortFilter(true);
- proxy.setFilterRegExp(QRegExp("[^b]"));
-}
-
-void tst_ModelTest::treeWidgetModel()
-{
- QTreeWidget widget;
-
- ModelTest t1(widget.model());
-
- QTreeWidgetItem *root = new QTreeWidgetItem(&widget, QStringList("root"));
- for (int i = 0; i < 20; ++i)
- new QTreeWidgetItem(root, QStringList(QString::number(i)));
- QTreeWidgetItem *remove = root->child(2);
- root->removeChild(remove);
- QTreeWidgetItem *parent = new QTreeWidgetItem(&widget, QStringList("parent"));
- new QTreeWidgetItem(parent, QStringList("child"));
- widget.setItemHidden(parent, true);
-
- widget.sortByColumn(0);
-}
-
-void tst_ModelTest::standardItemModel()
-{
- QStandardItemModel model(10, 10);
- QSortFilterProxyModel proxy;
-
- ModelTest t1(&model);
- ModelTest t2(&proxy);
-
- proxy.setSourceModel(&model);
-
- model.insertRows(2, 5);
- model.removeRows(4, 5);
-
- model.insertColumns(2, 5);
- model.removeColumns(4, 5);
-
- model.insertRows(0, 5, model.index(1, 1));
- model.insertColumns(0, 5, model.index(1, 3));
-}
-
-void tst_ModelTest::testInsertThroughProxy()
-{
- DynamicTreeModel *model = new DynamicTreeModel(this);
-
- QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this);
- proxy->setSourceModel(model);
-
- new ModelTest(proxy, this);
-
- ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
- insertCommand->setNumCols(4);
- insertCommand->setStartRow(0);
- insertCommand->setEndRow(9);
- // Parent is QModelIndex()
- insertCommand->doCommand();
-
- insertCommand = new ModelInsertCommand(model, this);
- insertCommand->setNumCols(4);
- insertCommand->setAncestorRowNumbers(QList<int>() << 5);
- insertCommand->setStartRow(0);
- insertCommand->setEndRow(9);
- insertCommand->doCommand();
-
- ModelMoveCommand *moveCommand = new ModelMoveCommand(model, this);
- moveCommand->setNumCols(4);
- moveCommand->setStartRow(0);
- moveCommand->setEndRow(0);
- moveCommand->setDestRow(9);
- moveCommand->setDestAncestors(QList<int>() << 5);
- moveCommand->doCommand();
-}
-
-/**
- Makes the persistent index list publicly accessible
-*/
-class AccessibleProxyModel : public QSortFilterProxyModel
-{
- Q_OBJECT
-public:
- AccessibleProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent)
- {
- }
-
- QModelIndexList persistent()
- {
- return persistentIndexList();
- }
-};
-
-class ObservingObject : public QObject
-{
- Q_OBJECT
-public:
- ObservingObject(AccessibleProxyModel *proxy, QObject *parent = 0) :
- QObject(parent),
- m_proxy(proxy),
- storePersistentFailureCount(0),
- checkPersistentFailureCount(0)
- {
- connect(m_proxy, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
- SLOT(storePersistent()));
- connect(m_proxy, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
- SLOT(checkPersistent()));
- }
-
-public slots:
-
- void storePersistent(const QModelIndex &parent)
- {
- for (int row = 0; row < m_proxy->rowCount(parent); ++row) {
- QModelIndex proxyIndex = m_proxy->index(row, 0, parent);
- QModelIndex sourceIndex = m_proxy->mapToSource(proxyIndex);
- if (!proxyIndex.isValid()) {
- qWarning("%s: Invalid proxy index", Q_FUNC_INFO);
- ++storePersistentFailureCount;
- }
- if (!sourceIndex.isValid()) {
- qWarning("%s: invalid source index", Q_FUNC_INFO);
- ++storePersistentFailureCount;
- }
- m_persistentSourceIndexes.append(sourceIndex);
- m_persistentProxyIndexes.append(proxyIndex);
- if (m_proxy->hasChildren(proxyIndex))
- storePersistent(proxyIndex);
- }
- }
-
- void storePersistent()
- {
- // This method is called from rowsAboutToBeMoved. Persistent indexes should be valid
- foreach (const QModelIndex &idx, m_persistentProxyIndexes)
- if (!idx.isValid()) {
- qWarning("%s: persistentProxyIndexes contains invalid index", Q_FUNC_INFO);
- ++storePersistentFailureCount;
- }
-
- if (!m_proxy->persistent().isEmpty()) {
- qWarning("%s: proxy should have no persistent indexes when storePersistent called",
- Q_FUNC_INFO);
- ++storePersistentFailureCount;
- }
- storePersistent(QModelIndex());
- if (m_proxy->persistent().isEmpty()) {
- qWarning("%s: proxy should have persistent index after storePersistent called",
- Q_FUNC_INFO);
- ++storePersistentFailureCount;
- }
- }
-
- void checkPersistent()
- {
- for (int row = 0; row < m_persistentProxyIndexes.size(); ++row) {
- m_persistentProxyIndexes.at(row);
- m_persistentSourceIndexes.at(row);
- }
- for (int row = 0; row < m_persistentProxyIndexes.size(); ++row) {
- QModelIndex updatedProxy = m_persistentProxyIndexes.at(row);
- QModelIndex updatedSource = m_persistentSourceIndexes.at(row);
- if (m_proxy->mapToSource(updatedProxy) != updatedSource) {
- qWarning("%s: check failed at row %d", Q_FUNC_INFO, row);
- ++checkPersistentFailureCount;
- }
- }
- m_persistentSourceIndexes.clear();
- m_persistentProxyIndexes.clear();
- }
-
-private:
- AccessibleProxyModel *m_proxy;
- QList<QPersistentModelIndex> m_persistentSourceIndexes;
- QList<QPersistentModelIndex> m_persistentProxyIndexes;
-public:
- int storePersistentFailureCount;
- int checkPersistentFailureCount;
-};
-
-void tst_ModelTest::moveSourceItems()
-{
- DynamicTreeModel *model = new DynamicTreeModel(this);
- AccessibleProxyModel *proxy = new AccessibleProxyModel(this);
- proxy->setSourceModel(model);
-
- ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
- insertCommand->setStartRow(0);
- insertCommand->setEndRow(2);
- insertCommand->doCommand();
-
- insertCommand = new ModelInsertCommand(model, this);
- insertCommand->setAncestorRowNumbers(QList<int>() << 1);
- insertCommand->setStartRow(0);
- insertCommand->setEndRow(2);
- insertCommand->doCommand();
-
- ObservingObject observer(proxy);
-
- ModelMoveCommand *moveCommand = new ModelMoveCommand(model, this);
- moveCommand->setStartRow(0);
- moveCommand->setEndRow(0);
- moveCommand->setDestAncestors(QList<int>() << 1);
- moveCommand->setDestRow(0);
- moveCommand->doCommand();
-
- QCOMPARE(observer.storePersistentFailureCount, 0);
- QCOMPARE(observer.checkPersistentFailureCount, 0);
-}
-
-void tst_ModelTest::testResetThroughProxy()
-{
- DynamicTreeModel *model = new DynamicTreeModel(this);
-
- ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
- insertCommand->setStartRow(0);
- insertCommand->setEndRow(2);
- insertCommand->doCommand();
-
- QPersistentModelIndex persistent = model->index(0, 0);
-
- AccessibleProxyModel *proxy = new AccessibleProxyModel(this);
- proxy->setSourceModel(model);
-
- ObservingObject observer(proxy);
- observer.storePersistent();
-
- ModelResetCommand *resetCommand = new ModelResetCommand(model, this);
- resetCommand->setNumCols(0);
- resetCommand->doCommand();
-
- QCOMPARE(observer.storePersistentFailureCount, 0);
- QCOMPARE(observer.checkPersistentFailureCount, 0);
-}
-
-QTEST_MAIN(tst_ModelTest)
-#include "tst_modeltest.moc"
diff --git a/tests/auto/other/other.pro b/tests/auto/other/other.pro
index 0e84b187fa..4119a40279 100644
--- a/tests/auto/other/other.pro
+++ b/tests/auto/other/other.pro
@@ -9,7 +9,6 @@ SUBDIRS=\
macgui \
macnativeevents \
macplist \
- modeltest \
networkselftest \
qaccessibility \
# qaccessibilitylinux \ # QTBUG-44434
@@ -32,7 +31,6 @@ SUBDIRS=\
gestures \
lancelot \
languagechange \
- modeltest \
qaccessibility \
qfocusevent \
qnetworkaccessmanager_and_qprogressdialog \
diff --git a/tests/auto/other/modeltest/dynamictreemodel.cpp b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp
index fc979bce2d..fc979bce2d 100644
--- a/tests/auto/other/modeltest/dynamictreemodel.cpp
+++ b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp
diff --git a/tests/auto/other/modeltest/dynamictreemodel.h b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h
index 709751dd27..709751dd27 100644
--- a/tests/auto/other/modeltest/dynamictreemodel.h
+++ b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h
diff --git a/tests/auto/other/qaccessibility/accessiblewidgets.h b/tests/auto/other/qaccessibility/accessiblewidgets.h
index 0c337a72f4..d436f81d17 100644
--- a/tests/auto/other/qaccessibility/accessiblewidgets.h
+++ b/tests/auto/other/qaccessibility/accessiblewidgets.h
@@ -47,7 +47,7 @@ class QtTestAccessibleWidgetIface: public QAccessibleWidget
{
public:
QtTestAccessibleWidgetIface(QtTestAccessibleWidget *w): QAccessibleWidget(w) {}
- QString text(QAccessible::Text t) const Q_DECL_OVERRIDE
+ QString text(QAccessible::Text t) const override
{
if (t == QAccessible::Help)
return QString::fromLatin1("Help yourself");
diff --git a/tests/auto/other/qaccessibility/qaccessibility.pro b/tests/auto/other/qaccessibility/qaccessibility.pro
index bfe652d25a..3587c38e76 100644
--- a/tests/auto/other/qaccessibility/qaccessibility.pro
+++ b/tests/auto/other/qaccessibility/qaccessibility.pro
@@ -8,9 +8,8 @@ HEADERS += accessiblewidgets.h
unix:!darwin:!haiku:!integity: LIBS += -lm
win32 {
- !*g++:!winrt {
- include(../../../../src/3rdparty/iaccessible2/iaccessible2.pri)
- DEFINES += QT_SUPPORTS_IACCESSIBLE2
+ !winrt {
+ QT += windowsuiautomation_support-private
}
LIBS += -luuid -loleacc -loleaut32 -lole32
}
diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
index 29fbffa541..b5d45adadb 100644
--- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
@@ -32,12 +32,10 @@
# include <QtCore/qt_windows.h>
#ifndef Q_OS_WINRT
# include <oleacc.h>
+# include <QtWindowsUIAutomationSupport/private/qwindowsuiawrapper_p.h>
#endif
# include <servprov.h>
# include <winuser.h>
-# ifdef QT_SUPPORTS_IACCESSIBLE2
-# include <ia2_api_all.h>
-# endif
#endif
#include <QtTest/QtTest>
#include <QtGui>
@@ -1697,7 +1695,7 @@ static QRect characterRect(const QTextEdit &edit, int offset)
++it;
QFontMetrics fm(it.fragment().charFormat().font());
QChar ch = edit.document()->characterAt(offset);
- int w = fm.width(ch);
+ int w = fm.horizontalAdvance(ch);
int h = fm.height();
qreal x = line.cursorToX(relativeOffset);
@@ -1768,9 +1766,9 @@ void tst_QAccessibility::textEditTest()
QCOMPARE(endOffset, 31);
QCOMPARE(textIface->characterCount(), 48);
QFontMetrics fm(edit.document()->defaultFont());
- QCOMPARE(textIface->characterRect(0).size(), QSize(fm.width("h"), fm.height()));
- QCOMPARE(textIface->characterRect(5).size(), QSize(fm.width(" "), fm.height()));
- QCOMPARE(textIface->characterRect(6).size(), QSize(fm.width("w"), fm.height()));
+ QCOMPARE(textIface->characterRect(0).size(), QSize(fm.horizontalAdvance("h"), fm.height()));
+ QCOMPARE(textIface->characterRect(5).size(), QSize(fm.horizontalAdvance(" "), fm.height()));
+ QCOMPARE(textIface->characterRect(6).size(), QSize(fm.horizontalAdvance("w"), fm.height()));
int offset = 10;
QCOMPARE(textIface->text(offset, offset + 1), QStringLiteral("d"));
@@ -3738,7 +3736,7 @@ void tst_QAccessibility::bridgeTest()
// For now this is a simple test to see if the bridge is working at all.
// Ideally it should be extended to test all aspects of the bridge.
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
- // First, test MSAA part of bridge
+
QWidget window;
QVBoxLayout *lay = new QVBoxLayout(&window);
QPushButton *button = new QPushButton(tr("Push me"), &window);
@@ -3775,10 +3773,7 @@ void tst_QAccessibility::bridgeTest()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
-
- /**************************************************
- * QPushButton
- **************************************************/
+ // Validate button position through the accessible interface.
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(button);
QPoint buttonPos = button->mapToGlobal(QPoint(0,0));
QRect buttonRect = iface->rect();
@@ -3787,231 +3782,113 @@ void tst_QAccessibility::bridgeTest()
// All set, now test the bridge.
const QPoint nativePos = QHighDpi::toNativePixels(buttonRect.center(), window.windowHandle());
POINT pt{nativePos.x(), nativePos.y()};
- IAccessible *iaccButton;
- VARIANT varChild;
- HRESULT hr = ::AccessibleObjectFromPoint(pt, &iaccButton, &varChild);
+ // Initialize COM stuff.
+ HRESULT hr = CoInitialize(nullptr);
QVERIFY(SUCCEEDED(hr));
- VARIANT varSELF;
- varSELF.vt = VT_I4;
- varSELF.lVal = 0;
- // **** Test get_accRole ****
- VARIANT varRole;
- hr = iaccButton->get_accRole(varSELF, &varRole);
+ // Get UI Automation interface.
+ IUIAutomation *automation = nullptr;
+ hr = CoCreateInstance(CLSID_CUIAutomation, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&automation));
QVERIFY(SUCCEEDED(hr));
- QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
- QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_PUSHBUTTON);
-
- // **** Test accLocation ****
- long x, y, w, h;
- // Do not crash on insane arguments.
- varChild.lVal = 999;
- hr = iaccButton->accLocation(&x, &y, &w, &h, varChild);
- QCOMPARE(SUCCEEDED(hr), false);
-
- hr = iaccButton->accLocation(&x, &y, &w, &h, varSELF);
- QCOMPARE(buttonRect, QHighDpi::fromNativePixels(QRect(x, y, w, h), window.windowHandle()));
-
-#ifdef QT_SUPPORTS_IACCESSIBLE2
- // Test IAccessible2 part of bridge
- if (IAccessible2 *ia2Button = (IAccessible2*)queryIA2(iaccButton, IID_IAccessible2)) {
- // The control supports IAccessible2.
- // ia2Button is the reference to the accessible object's IAccessible2 interface.
-
- /***** Test IAccessibleComponent *****/
- IAccessibleComponent *ia2Component = 0;
- hr = ia2Button->QueryInterface(IID_IAccessibleComponent, (void**)&ia2Component);
- QVERIFY(SUCCEEDED(hr));
- long x, y;
- hr = ia2Component->get_locationInParent(&x, &y);
- QVERIFY(SUCCEEDED(hr));
- QCOMPARE(button->pos(), QHighDpi::fromNativePixels(QPoint(x, y), window.windowHandle()));
- ia2Component->Release();
-
- /***** Test IAccessibleAction *****/
- IAccessibleAction *ia2Action = 0;
- hr = ia2Button->QueryInterface(IID_IAccessibleAction, (void**)&ia2Action);
- QVERIFY(SUCCEEDED(hr));
- QVERIFY(ia2Action);
- long nActions;
- ia2Action->nActions(&nActions);
- QVERIFY(nActions >= 1); // "Press" and "SetFocus"
- BSTR actionName;
- ia2Action->get_name(0, &actionName);
- QString name((QChar*)actionName);
- ::SysFreeString(actionName);
- QCOMPARE(name, QAccessibleActionInterface::pressAction());
- ia2Action->Release();
-
- /***** Test IAccessibleRelation *****/
- long nRelations = 0;
- hr = ia2Button->get_nRelations(&nRelations);
- QVERIFY(SUCCEEDED(hr));
- QCOMPARE(nRelations, (long)1);
-
- IAccessibleRelation **relations = (IAccessibleRelation **)::CoTaskMemAlloc(sizeof(IAccessibleRelation *) * 4);
- hr = ia2Button->get_relations(4, relations, &nRelations);
- QVERIFY(SUCCEEDED(hr));
- QCOMPARE(nRelations, (long)1);
-
- IAccessibleRelation *relation = relations[0];
- BSTR relType;
- hr = relation->get_relationType(&relType);
- QCOMPARE(QString::fromWCharArray(relType), QLatin1String("labelFor"));
- ::SysFreeString(relType);
-
- long nTargets;
- relation->get_nTargets(&nTargets);
- QCOMPARE(nTargets, (long)1);
- IAccessible *target; // target is the label
- hr = relation->get_target(0, (IUnknown**)&target);
- QVERIFY(SUCCEEDED(hr));
-
- VARIANT varRole;
- hr = target->get_accRole(varSELF, &varRole);
- QVERIFY(SUCCEEDED(hr));
- Q_ASSERT(varRole.vt == (VARTYPE)VT_I4);
- QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_STATICTEXT);
+ // Get button element from UI Automation using point.
+ IUIAutomationElement *buttonElement = nullptr;
+ hr = automation->ElementFromPoint(pt, &buttonElement);
+ QVERIFY(SUCCEEDED(hr));
- BSTR buttonName;
- hr = target->get_accName(varSELF, &buttonName);
- QVERIFY(SUCCEEDED(hr));
+ // Check that it has a button control type ID.
+ CONTROLTYPEID controlTypeId;
+ hr = buttonElement->get_CurrentControlType(&controlTypeId);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_ButtonControlTypeId);
- QCOMPARE(QString::fromWCharArray(buttonName), QLatin1String("Push my buddy"));
- ::SysFreeString(buttonName);
- ::CoTaskMemFree(relations);
+ // Test the bounding rectangle.
+ RECT rect;
+ hr = buttonElement->get_CurrentBoundingRectangle(&rect);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(buttonRect, QRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top));
- // Done testing
- ia2Button->Release();
- }
-#endif
- iaccButton->Release();
+ buttonElement->Release();
- /**************************************************
- * QWidget
- **************************************************/
+ // Get native window handle.
QWindow *windowHandle = window.windowHandle();
+ QVERIFY(windowHandle != 0);
QPlatformNativeInterface *platform = QGuiApplication::platformNativeInterface();
+ QVERIFY(platform != 0);
HWND hWnd = (HWND)platform->nativeResourceForWindow("handle", windowHandle);
+ QVERIFY(hWnd != 0);
- IAccessible *iaccWindow;
- hr = ::AccessibleObjectFromWindow(hWnd, OBJID_CLIENT, IID_IAccessible, (void**)&iaccWindow);
+ // Get automation element for the window from handle.
+ IUIAutomationElement *windowElement = nullptr;
+ hr = automation->ElementFromHandle(hWnd, &windowElement);
QVERIFY(SUCCEEDED(hr));
- hr = iaccWindow->get_accRole(varSELF, &varRole);
+ QVERIFY(windowElement != 0);
+
+ // Validate that the top-level widget is reported as a window.
+ hr = windowElement->get_CurrentControlType(&controlTypeId);
QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_WindowControlTypeId);
- QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
- QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_CLIENT);
+ // Get a tree walker to walk over elements.
+ IUIAutomationTreeWalker *controlWalker = nullptr;
+ IUIAutomationElement *node = nullptr;
+ QList<IUIAutomationElement *> nodeList;
- long nChildren;
- hr = iaccWindow->get_accChildCount(&nChildren);
+ hr = automation->get_ControlViewWalker(&controlWalker);
QVERIFY(SUCCEEDED(hr));
- QCOMPARE(nChildren, (long)4);
-
- /**************************************************
- * QTextEdit
- **************************************************/
- // Get the second child (the accessible interface for the text edit)
- varChild.vt = VT_I4;
- varChild.lVal = 2;
- QVERIFY(iaccWindow);
- IAccessible *iaccTextEdit;
- hr = iaccWindow->get_accChild(varChild, (IDispatch**)&iaccTextEdit);
- QVERIFY(SUCCEEDED(hr));
- QVERIFY(iaccTextEdit);
- hr = iaccTextEdit->get_accRole(varSELF, &varRole);
- QVERIFY(SUCCEEDED(hr));
-
- QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
- QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_TEXT);
+ QVERIFY(controlWalker != 0);
+ hr = controlWalker->GetFirstChildElement(windowElement, &node);
+ QVERIFY(SUCCEEDED(hr));
+ QVERIFY(node != 0);
+ int numElements = 5; // Title bar + 4 widgets
-#ifdef QT_SUPPORTS_IACCESSIBLE2
- if (IAccessibleEditableText *ia2TextEdit = (IAccessibleEditableText*)queryIA2(iaccTextEdit, IID_IAccessibleEditableText)) {
- ia2TextEdit->copyText(6, 11);
- QCOMPARE(QApplication::clipboard()->text(), QLatin1String("world"));
- ia2TextEdit->cutText(12, 16);
- QCOMPARE(QApplication::clipboard()->text(), QLatin1String("how "));
- ia2TextEdit->Release();
- }
- if (IAccessibleText *ia2Text = (IAccessibleText*)queryIA2(iaccTextEdit, IID_IAccessibleText)) {
- BSTR txt;
- hr = ia2Text->get_text(12, 15, &txt);
+ while (node) {
+ nodeList.append(node);
+ QVERIFY(nodeList.size() <= numElements);
+ IUIAutomationElement *next = nullptr;
+ hr = controlWalker->GetNextSiblingElement(node, &next);
QVERIFY(SUCCEEDED(hr));
- QCOMPARE(QString((QChar*)txt), QLatin1String("are"));
- ia2Text->Release();
+ node = next;
}
-#endif
- iaccTextEdit->Release();
+ QCOMPARE(nodeList.size(), numElements);
+ // Title bar
+ hr = nodeList.at(0)->get_CurrentControlType(&controlTypeId);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_TitleBarControlTypeId);
- /**************************************************
- * QTableWidget
- **************************************************/
- {
- // Get the second child (the accessible interface for the table widget)
- varChild.vt = VT_I4;
- varChild.lVal = 3;
- QVERIFY(iaccWindow);
- IAccessible *iaccTable = 0;
- hr = iaccWindow->get_accChild(varChild, (IDispatch**)&iaccTable);
- QVERIFY(SUCCEEDED(hr));
- QVERIFY(iaccTable);
- hr = iaccTable->get_accRole(varSELF, &varRole);
- QVERIFY(SUCCEEDED(hr));
-
- QCOMPARE(varRole.vt, (VARTYPE)VT_I4);
- QCOMPARE(varRole.lVal, (LONG)ROLE_SYSTEM_TABLE);
-
+ // Button
+ hr = nodeList.at(1)->get_CurrentControlType(&controlTypeId);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_ButtonControlTypeId);
-#ifdef QT_SUPPORTS_IACCESSIBLE2
- IAccessibleTable2 *ia2Table = (IAccessibleTable2*)queryIA2(iaccTable, IID_IAccessibleTable2);
- QVERIFY(ia2Table);
- BSTR bstrDescription;
- hr = ia2Table->get_columnDescription(0, &bstrDescription);
- QVERIFY(SUCCEEDED(hr));
- QCOMPARE(QString::fromWCharArray(bstrDescription), QLatin1String("h1"));
- ::SysFreeString(bstrDescription);
+ // Edit
+ hr = nodeList.at(2)->get_CurrentControlType(&controlTypeId);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_EditControlTypeId);
- hr = ia2Table->get_rowDescription(1, &bstrDescription);
- QVERIFY(SUCCEEDED(hr));
- QCOMPARE(QString::fromWCharArray(bstrDescription), QLatin1String("v2"));
- ::SysFreeString(bstrDescription);
+ // Table
+ hr = nodeList.at(3)->get_CurrentControlType(&controlTypeId);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_TableControlTypeId);
- IAccessible *accTableCell = 0;
- hr = ia2Table->get_cellAt(1, 2, (IUnknown**)&accTableCell);
- QVERIFY(SUCCEEDED(hr));
- QVERIFY(accTableCell);
- IAccessibleTableCell *ia2TableCell = (IAccessibleTableCell *)queryIA2(accTableCell, IID_IAccessibleTableCell);
- QVERIFY(ia2TableCell);
- LONG index;
- ia2TableCell->get_rowIndex(&index);
- QCOMPARE(index, (LONG)1);
- ia2TableCell->get_columnIndex(&index);
- QCOMPARE(index, (LONG)2);
-
- IAccessible *iaccTableCell = 0;
- hr = ia2TableCell->QueryInterface(IID_IAccessible, (void**)&iaccTableCell);
- QVERIFY(SUCCEEDED(hr));
- QVERIFY(iaccTableCell);
- BSTR bstrCellName;
- hr = iaccTableCell->get_accName(varSELF, &bstrCellName);
- QVERIFY(SUCCEEDED(hr));
- QString cellName((QChar*)bstrCellName);
- QCOMPARE(cellName, QLatin1String("1.2"));
+ // Label
+ hr = nodeList.at(4)->get_CurrentControlType(&controlTypeId);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(controlTypeId, UIA_EditControlTypeId);
- accTableCell->Release();
- iaccTableCell->Release();
- ia2TableCell->Release();
- ia2Table->Release();
-#endif
- iaccTable->Release();
+ for (auto nd : nodeList) {
+ nd->Release();
}
- iaccWindow->Release();
+ controlWalker->Release();
+ windowElement->Release();
+ automation->Release();
+ CoUninitialize();
+
QTestAccessibility::clearEvents();
#endif
}
diff --git a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
index 35441010f7..70e696e703 100644
--- a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
+++ b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
@@ -346,10 +346,6 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
d->hide();
QTest::qWait(100);
-#if defined(Q_OS_IRIX)
- QEXPECT_FAIL("", "IRIX requires explicit activateWindow(), so this test does not make any sense.", Abort);
-#endif
-
if (!QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)
|| !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)) {
// Activate window of testFocusWidget, focus in that window goes to childFocusWidgetOne
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h
index 701da7d346..97397e3159 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h
@@ -220,79 +220,59 @@ public:
bool addDbs()
{
- //addDb("QOCI", "localhost", "system", "penandy");
-// addDb( "QOCI8", "//horsehead.qt-project.org:1521/pony.troll.no", "scott", "tiger" ); // Oracle 9i on horsehead
-// addDb( "QOCI8", "//horsehead.qt-project.org:1521/ustest.troll.no", "scott", "tiger", "" ); // Oracle 9i on horsehead
-// addDb( "QOCI8", "//iceblink.qt-project.org:1521/ice.troll.no", "scott", "tiger", "" ); // Oracle 8 on iceblink (not currently working)
-// addDb( "QOCI", "//silence.qt-project.org:1521/testdb", "scott", "tiger" ); // Oracle 10g on silence
-// addDb( "QOCI", "//bq-oracle10g.qt-project.org:1521/XE", "scott", "tiger" ); // Oracle 10gexpress
-
-// This requires a local ODBC data source to be configured( pointing to a MySql database )
-// addDb( "QODBC", "mysqlodbc", "troll", "trond" );
-// addDb( "QODBC", "SqlServer", "troll", "trond" );
-// addDb( "QTDS7", "testdb", "troll", "trondk", "horsehead" );
-// addDb( "QODBC", "silencetestdb", "troll", "trond", "silence" );
-// addDb( "QODBC", "horseheadtestdb", "troll", "trondk", "horsehead" );
-
-// addDb( "QMYSQL3", "testdb", "troll", "trond", "horsehead.qt-project.org" );
-// addDb( "QMYSQL3", "testdb", "troll", "trond", "horsehead.qt-project.org", 3307 );
-// addDb( "QMYSQL3", "testdb", "troll", "trond", "horsehead.qt-project.org", 3308, "CLIENT_COMPRESS=1" ); // MySQL 4.1.1
-// addDb( "QMYSQL3", "testdb", "troll", "trond", "horsehead.qt-project.org", 3309, "CLIENT_COMPRESS=1" ); // MySQL 5.0.18 Linux
-// addDb( "QMYSQL3", "testdb", "troll", "trond", "silence.qt-project.org" ); // MySQL 5.1.36 Windows
-
-// addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "bq-mysql41.qt-project.org" ); // MySQL 4.1.22-2.el4 linux
-// addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "bq-mysql50.qt-project.org" ); // MySQL 5.0.45-7.el5 linux
-// addDb( "QMYSQL3", "testdb", "testuser", "Ee4Gabf6_", "bq-mysql51.qt-project.org" ); // MySQL 5.1.36-6.7.2.i586 linux
-
-// addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.qt-project.org" ); // V7.2 NOT SUPPORTED!
-// addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.qt-project.org", 5434 ); // V7.2 NOT SUPPORTED! Multi-byte
-// addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.qt-project.org", 5435 ); // V7.3
-// addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.qt-project.org", 5436 ); // V7.4
-// addDb( "QPSQL7", "testdb", "troll", "trond", "horsehead.qt-project.org", 5437 ); // V8.0.3
-// addDb( "QPSQL7", "testdb", "troll", "trond", "silence.qt-project.org" ); // V8.2.1, UTF-8
-
-// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-postgres74.qt-project.org" ); // Version 7.4.19-1.el4_6.1
-// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql81.qt-project.org" ); // Version 8.1.11-1.el5_1.1
-// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql84.qt-project.org" ); // Version 8.4.1-2.1.i586
-// addDb( "QPSQL7", "testdb", "testuser", "Ee4Gabf6_", "bq-pgsql90.qt-project.org" ); // Version 9.0.0
-
-
-// addDb( "QDB2", "testdb", "troll", "trond", "silence.qt-project.org" ); // DB2 v9.1 on silence
-// addDb( "QDB2", "testdb", "testuser", "Ee4Gabf6_", "bq-db2-972.qt-project.org" ); // DB2
-
-// yes - interbase really wants the physical path on the host machine.
-// addDb( "QIBASE", "/opt/interbase/qttest.gdb", "SYSDBA", "masterkey", "horsehead.qt-project.org" );
-// addDb( "QIBASE", "silence.troll.no:c:\\ibase\\testdb", "SYSDBA", "masterkey", "" ); // InterBase 7.5 on silence
-// addDb( "QIBASE", "silence.troll.no:c:\\ibase\\testdb_ascii", "SYSDBA", "masterkey", "" ); // InterBase 7.5 on silence
-// addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "firebird1-nokia.trolltech.com.au" ); // Firebird 1.5.5
-// addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "firebird2-nokia.trolltech.com.au" ); // Firebird 2.1.1
-
-// addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "bq-firebird1.qt-project.org" ); // Firebird 1.5.5
-// addDb( "QIBASE", "/opt/firebird/databases/testdb.fdb", "testuser", "Ee4Gabf6_", "bq-firebird2.qt-project.org" ); // Firebird 2.1.1
-
-// use in-memory database to prevent local files
-// addDb("QSQLITE", ":memory:");
+ // Test databases can be defined in a file using the following format:
+ //
+ // {
+ // "entries": [
+ // {
+ // "driver": "QPSQL",
+ // "name": "testdb",
+ // "username": "postgres",
+ // "password": "password",
+ // "hostname": "localhost",
+ // "port": 5432,
+ // "parameters": "extraoptions"
+ // },
+ // {
+ // ....
+ // }
+ // ]
+ // }
+
+ bool added = false;
+ const QString databasesFile(qgetenv("QT_TEST_DATABASES_FILE"));
+ QFile f(databasesFile.isEmpty() ? "testdbs.json" : databasesFile);
+ if (f.exists() && f.open(QIODevice::ReadOnly)) {
+ const QJsonDocument doc = QJsonDocument::fromJson(f.readAll());
+ f.close();
+ const QJsonValue entriesV = doc.object().value(QLatin1String("entries"));
+ if (!entriesV.isArray()) {
+ qWarning() << "No entries in " + f.fileName();
+ } else {
+ const QJsonArray entriesA = entriesV.toArray();
+ QJsonArray::const_iterator it = entriesA.constBegin();
+ while (it != entriesA.constEnd()) {
+ if ((*it).isObject()) {
+ const QJsonObject object = (*it).toObject();
+ addDb(object.value(QStringLiteral("driver")).toString(),
+ object.value(QStringLiteral("name")).toString(),
+ object.value(QStringLiteral("username")).toString(),
+ object.value(QStringLiteral("password")).toString(),
+ object.value(QStringLiteral("hostname")).toString(),
+ object.value(QStringLiteral("port")).toInt(),
+ object.value(QStringLiteral("parameters")).toString());
+ added = true;
+ }
+ ++it;
+ }
+ }
+ }
QTemporaryDir *sqLiteDir = dbDir();
- if (!sqLiteDir)
- return false;
- addDb( QStringLiteral("QSQLITE"), QDir::toNativeSeparators(sqLiteDir->path() + QStringLiteral("/foo.db")) );
-// addDb( "QSQLITE2", QDir::toNativeSeparators(dbDir.path() + "/foo2.db") );
-// addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=iceblink.qt-project.org\\ICEBLINK", "troll", "trond", "" );
-// addDb( "QODBC3", "DRIVER={SQL Native Client};SERVER=silence.qt-project.org\\SQLEXPRESS", "troll", "trond", "" );
-
-// addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=bq-mysql50.qt-project.org;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
-// addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=bq-mysql51.qt-project.org;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
-// addDb( "QODBC", "DRIVER={FreeTDS};SERVER=horsehead.qt-project.org;DATABASE=testdb;PORT=4101;UID=troll;PWD=trondk", "troll", "trondk", "" );
-// addDb( "QODBC", "DRIVER={FreeTDS};SERVER=silence.qt-project.org;DATABASE=testdb;PORT=2392;UID=troll;PWD=trond", "troll", "trond", "" );
-// addDb( "QODBC", "DRIVER={FreeTDS};SERVER=bq-winserv2003-x86-01.qt-project.org;DATABASE=testdb;PORT=1433;UID=testuser;PWD=Ee4Gabf6_;TDS_Version=8.0", "", "", "" );
-// addDb( "QODBC", "DRIVER={FreeTDS};SERVER=bq-winserv2008-x86-01.qt-project.org;DATABASE=testdb;PORT=1433;UID=testuser;PWD=Ee4Gabf6_;TDS_Version=8.0", "", "", "" );
-// addDb( "QTDS7", "testdb", "testuser", "Ee4Gabf6_", "bq-winserv2003" );
-// addDb( "QTDS7", "testdb", "testuser", "Ee4Gabf6_", "bq-winserv2008" );
-// addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=bq-winserv2003-x86-01.qt-project.org;DATABASE=testdb;PORT=1433", "testuser", "Ee4Gabf6_", "" );
-// addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=bq-winserv2008-x86-01.qt-project.org;DATABASE=testdb;PORT=1433", "testuser", "Ee4Gabf6_", "" );
-// addDb( "QODBC", "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\dbs\\access\\testdb.mdb", "", "", "" );
-// addDb( "QODBC", "DRIVER={Postgresql};SERVER=bq-pgsql84.qt-project.org;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
- return true;
+ if (sqLiteDir) {
+ addDb(QStringLiteral("QSQLITE"), QDir::toNativeSeparators(sqLiteDir->path() + QStringLiteral("/foo.db")));
+ added = true;
+ }
+ return added;
}
// 'false' return indicates a system error, for example failure to create a temporary directory.
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
index 4395a04976..427bc092a5 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
@@ -75,6 +75,8 @@ private slots:
void addDatabase();
void errorReporting_data();
void errorReporting();
+ void cloneDatabase_data() { generic_data(); }
+ void cloneDatabase();
//database specific tests
void recordMySQL_data() { generic_data("QMYSQL"); }
@@ -124,6 +126,8 @@ private slots:
void formatValueTrimStrings();
void precisionPolicy_data() { generic_data(); }
void precisionPolicy();
+ void multipleThreads_data() { generic_data(); }
+ void multipleThreads();
void db2_valueCacheUpdate_data() { generic_data("QDB2"); }
void db2_valueCacheUpdate();
@@ -1344,11 +1348,6 @@ void tst_QSqlDatabase::psql_bug249059()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- QString version=tst_Databases::getPSQLVersion( db );
- double ver=version.section(QChar::fromLatin1('.'),0,1).toDouble();
- if (ver < 7.3)
- QSKIP("Test requires PostgreSQL >= 7.3");
-
QSqlQuery q(db);
const QString tableName(qTableName("bug_249059", __FILE__, db));
QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (dt timestamp, t time)").arg(tableName)));
@@ -2291,5 +2290,67 @@ void tst_QSqlDatabase::sqlite_enableRegexp()
QFAIL_SQL(q, next());
}
+void tst_QSqlDatabase::cloneDatabase()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ {
+ QSqlDatabase clonedDatabase = QSqlDatabase::cloneDatabase(db, "clonedDatabase");
+ QCOMPARE(clonedDatabase.databaseName(), db.databaseName());
+ QCOMPARE(clonedDatabase.userName(), db.userName());
+ QCOMPARE(clonedDatabase.password(), db.password());
+ QCOMPARE(clonedDatabase.hostName(), db.hostName());
+ QCOMPARE(clonedDatabase.driverName(), db.driverName());
+ QCOMPARE(clonedDatabase.port(), db.port());
+ QCOMPARE(clonedDatabase.connectOptions(), db.connectOptions());
+ QCOMPARE(clonedDatabase.numericalPrecisionPolicy(), db.numericalPrecisionPolicy());
+ }
+ {
+ // Now double check numericalPrecisionPolicy after changing it since it
+ // is a special case, as changing it can set it on the driver as well as
+ // the database object. When retrieving the numerical precision policy
+ // it may just get it from the driver so we have to check that the
+ // clone has also ensured the copied driver has the correct precision
+ // policy too.
+ db.setNumericalPrecisionPolicy(QSql::LowPrecisionDouble);
+ QSqlDatabase clonedDatabase = QSqlDatabase::cloneDatabase(db, "clonedDatabaseCopy");
+ QCOMPARE(clonedDatabase.numericalPrecisionPolicy(), db.numericalPrecisionPolicy());
+ }
+}
+
+class DatabaseThreadObject : public QObject
+{
+ Q_OBJECT
+public:
+ DatabaseThreadObject(const QString &name, QObject *parent = nullptr) : QObject(parent), dbName(name)
+ {}
+public slots:
+ void ready()
+ {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlDatabasePrivate::database: requested database does not belong to the calling thread.");
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ QVERIFY(!db.isValid());
+ QThread::currentThread()->exit();
+ }
+private:
+ QString dbName;
+};
+
+void tst_QSqlDatabase::multipleThreads()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ DatabaseThreadObject dto(dbName);
+ QThread t;
+ dto.moveToThread(&t);
+ connect(&t, &QThread::started, &dto, &DatabaseThreadObject::ready);
+ t.start();
+ QTRY_VERIFY(t.isRunning());
+ QTRY_VERIFY(t.isFinished());
+}
+
QTEST_MAIN(tst_QSqlDatabase)
#include "tst_qsqldatabase.moc"
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index 1a0340f153..baf2551dfb 100644
--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -94,6 +94,10 @@ private slots:
// forwardOnly mode need special treatment
void forwardOnly_data() { generic_data(); }
void forwardOnly();
+ void forwardOnlyMultipleResultSet_data() { generic_data(); }
+ void forwardOnlyMultipleResultSet();
+ void psql_forwardOnlyQueryResultsLost_data() { generic_data("QPSQL"); }
+ void psql_forwardOnlyQueryResultsLost();
// bug specific tests
void tds_bitField_data() { generic_data("QTDS"); }
@@ -248,6 +252,9 @@ private slots:
void QTBUG_57138_data() { generic_data("QSQLITE"); }
void QTBUG_57138();
+ void dateTime_data();
+ void dateTime();
+
private:
// returns all database connections
void generic_data(const QString &engine=QString());
@@ -724,6 +731,30 @@ void tst_QSqlQuery::oraOutValues()
q.addBindValue( out, QSql::Out );
QVERIFY_SQL( q, exec() );
QCOMPARE( q.boundValue( 1 ).toString(), QString( "fifibubulalakikikokololo" ) );
+
+ /*** in/outvalue date ***/
+ QVERIFY_SQL(q, exec("create or replace procedure " + tst_outValues + "(x in date, y out date) is\n"
+ "begin\n"
+ " y := x;\n"
+ "end;\n"));
+ QVERIFY(q.prepare("call " + tst_outValues + "(?, ?)"));
+ const QDate date = QDate::currentDate();
+ q.addBindValue(date, QSql::In);
+ q.addBindValue(QVariant(QDate()), QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(1).toDate(), date);
+
+ /*** in/outvalue timestamp ***/
+ QVERIFY_SQL(q, exec("create or replace procedure " + tst_outValues + "(x in timestamp, y out timestamp) is\n"
+ "begin\n"
+ " y := x;\n"
+ "end;\n"));
+ QVERIFY(q.prepare("call " + tst_outValues + "(?, ?)"));
+ const QDateTime dt = QDateTime::currentDateTime();
+ q.addBindValue(dt, QSql::In);
+ q.addBindValue(QVariant(QVariant::DateTime), QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(1).toDateTime(), dt);
}
void tst_QSqlQuery::oraClob()
@@ -1332,6 +1363,8 @@ void tst_QSqlQuery::forwardOnly()
QVERIFY( q.isForwardOnly() );
QVERIFY( q.at() == QSql::BeforeFirstRow );
QVERIFY_SQL( q, exec( "select * from " + qtest + " order by id" ) );
+ if (!q.isForwardOnly())
+ QSKIP("DBMS doesn't support forward-only queries");
QVERIFY( q.at() == QSql::BeforeFirstRow );
QVERIFY( q.first() );
QCOMPARE( q.at(), 0 );
@@ -1405,6 +1438,209 @@ void tst_QSqlQuery::forwardOnly()
QCOMPARE( q.at(), int( QSql::AfterLastRow ) );
}
+void tst_QSqlQuery::forwardOnlyMultipleResultSet()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+
+ if (!db.driver()->hasFeature(QSqlDriver::MultipleResultSets))
+ QSKIP("DBMS doesn't support multiple result sets");
+
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
+ QVERIFY_SQL(q, exec("select id, t_varchar from " + qtest + " order by id;" // 1.
+ "select id, t_varchar, t_char from " + qtest + " where id<4 order by id;" // 2.
+ "update " + qtest + " set t_varchar='VarChar555' where id=5;" // 3.
+ "select * from " + qtest + " order by id;" // 4.
+ "select * from " + qtest + " where id=5 order by id;" // 5.
+ "select * from " + qtest + " where id=-1 order by id;" // 6.
+ "select * from " + qtest + " order by id")); // 7.
+
+ if (!q.isForwardOnly())
+ QSKIP("DBMS doesn't support forward-only queries");
+
+ // 1. Result set with 2 columns and 5 rows
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+
+ // Test record() of first result set
+ QSqlRecord record = q.record();
+ QCOMPARE(record.count(), 2);
+ QCOMPARE(record.indexOf("id"), 0);
+ QCOMPARE(record.indexOf("t_varchar"), 1);
+ if (dbType != QSqlDriver::PostgreSQL) { // tableName() is not available in forward-only mode of QPSQL
+ QCOMPARE(record.field(0).tableName(), qtest); // BUG: This fails for Microsoft SQL Server 2016 (QODBC), need fix
+ QCOMPARE(record.field(1).tableName(), qtest);
+ }
+
+ // Test navigation
+ QVERIFY(q.first());
+ QCOMPARE(q.at(), 0);
+ QCOMPARE(q.value(0).toInt(), 1);
+
+ QVERIFY(q.next());
+ QCOMPARE(q.at(), 1);
+ QCOMPARE(q.value(0).toInt(), 2);
+
+ QVERIFY(q.seek(3));
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
+
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(q.first() == false);
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
+
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(q.previous() == false);
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
+
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(q.seek(1) == false);
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
+
+ QVERIFY(q.last());
+ QCOMPARE(q.at(), 4);
+
+ // Try move after last row
+ QVERIFY(q.next() == false);
+ QCOMPARE(q.at(), QSql::AfterLastRow);
+ QCOMPARE(q.isActive(), true);
+
+ // 2. Result set with 3 columns and 3 rows
+ QVERIFY(q.nextResult());
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+
+ // Test record() of second result set
+ record = q.record();
+ QCOMPARE(record.count(), 3);
+ QCOMPARE(record.indexOf("id"), 0);
+ QCOMPARE(record.indexOf("t_varchar"), 1);
+ QCOMPARE(record.indexOf("t_char"), 2);
+
+ // Test iteration
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ int index = 0;
+ while (q.next()) {
+ QCOMPARE(q.at(), index);
+ QCOMPARE(q.value(0).toInt(), index+1);
+ index++;
+ }
+ QVERIFY(q.at() == QSql::AfterLastRow);
+ QCOMPARE(index, 3);
+
+ // 3. Update statement
+ QVERIFY(q.nextResult());
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), false);
+ QCOMPARE(q.numRowsAffected(), 1);
+
+ // 4. Result set with 5 rows
+ QVERIFY(q.nextResult());
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+
+ // Test forward seek(n)
+ QVERIFY(q.seek(2));
+ QCOMPARE(q.at(), 2);
+ QCOMPARE(q.value(0).toInt(), 3);
+
+ // Test value(string)
+ QCOMPARE(q.value("id").toInt(), 3);
+ QCOMPARE(q.value("t_varchar").toString(), "VarChar3");
+ QCOMPARE(q.value("t_char").toString().trimmed(), "Char3");
+
+ // Next 2 rows of current result set will be
+ // discarded by next call of nextResult()
+
+ // 5. Result set with 1 row
+ QVERIFY(q.nextResult());
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+ QVERIFY(q.first());
+ QCOMPARE(q.at(), 0);
+ QCOMPARE(q.value(0).toInt(), 5);
+ QVERIFY(q.next() == false);
+ QVERIFY(q.at() == QSql::AfterLastRow);
+
+ // 6. Result set without rows
+ QVERIFY(q.nextResult());
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+ QVERIFY(q.next() == false);
+
+ // 7. Result set with 5 rows
+ QVERIFY(q.nextResult());
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+
+ // Just skip it, so we move after last result set.
+ QVERIFY(q.nextResult() == false);
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), false);
+
+ // See if we can execute another query
+ QVERIFY_SQL(q, exec("select id from " + qtest + " where id=5"));
+ QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.isActive(), true);
+ QCOMPARE(q.isSelect(), true);
+ QVERIFY(q.first());
+ QCOMPARE(q.at(), 0);
+ QCOMPARE(q.value("id").toInt(), 5);
+ QCOMPARE(q.record().count(), 1);
+ QCOMPARE(q.record().indexOf("id"), 0);
+}
+
+void tst_QSqlQuery::psql_forwardOnlyQueryResultsLost()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q1(db);
+ q1.setForwardOnly(true);
+ QVERIFY_SQL(q1, exec("select * from " + qtest + " where id<=3 order by id"));
+ if (!q1.isForwardOnly())
+ QSKIP("DBMS doesn't support forward-only queries");
+
+ // Read first row of q1
+ QVERIFY(q1.next());
+ QCOMPARE(q1.at(), 0);
+ QCOMPARE(q1.value(0).toInt(), 1);
+
+ // Executing another query on the same db connection
+ // will cause the query results of q1 to be lost.
+ QSqlQuery q2(db);
+ q2.setForwardOnly(true);
+ QVERIFY_SQL(q2, exec("select * from " + qtest + " where id>3 order by id"));
+
+ QTest::ignoreMessage(QtWarningMsg, "QPSQLDriver::getResult: Query results lost - "
+ "probably discarded on executing another SQL query.");
+
+ // Reading next row of q1 will not possible.
+ QVERIFY(!q1.next());
+ QCOMPARE(q1.at(), QSql::AfterLastRow);
+ QVERIFY(q1.lastError().type() != QSqlError::NoError);
+
+ // See if we can read rows from q2
+ QVERIFY(q2.seek(1));
+ QCOMPARE(q2.at(), 1);
+ QCOMPARE(q2.value(0).toInt(), 5);
+}
+
void tst_QSqlQuery::query_exec()
{
QFETCH( QString, dbName );
@@ -2163,8 +2399,8 @@ void tst_QSqlQuery::batchExec()
QSqlQuery q( db );
const QString tableName = qTableName("qtest_batch", __FILE__, db);
- QVERIFY_SQL( q, exec( "create table " + tableName + " (id int, name varchar(20), dt date, num numeric(8, 4))" ) );
- QVERIFY_SQL( q, prepare( "insert into " + tableName + " (id, name, dt, num) values (?, ?, ?, ?)" ) );
+ QVERIFY_SQL(q, exec("create table " + tableName + " (id int, name varchar(20), dt date, num numeric(8, 4), dtstamp TIMESTAMP(3))"));
+ QVERIFY_SQL(q, prepare("insert into " + tableName + " (id, name, dt, num, dtstamp) values (?, ?, ?, ?, ?)"));
QVariantList intCol;
intCol << 1 << 2 << QVariant( QVariant::Int );
@@ -2179,31 +2415,54 @@ void tst_QSqlQuery::batchExec()
QVariantList numCol;
numCol << 2.3 << 3.4 << QVariant( QVariant::Double );
- q.addBindValue( intCol );
+ QVariantList timeStampCol;
+ const QDateTime dtStamp = QDateTime(QDate::currentDate(), QTime(1, 2, 3, 4));
+ timeStampCol << dtStamp << dtStamp.addDays(-1) << QVariant(QVariant::DateTime);
+
+ q.addBindValue(intCol);
q.addBindValue( charCol );
q.addBindValue( dateCol );
q.addBindValue( numCol );
+ q.addBindValue(timeStampCol);
QVERIFY_SQL( q, execBatch() );
- QVERIFY_SQL( q, exec( "select id, name, dt, num from " + tableName + " order by id" ) );
+ QVERIFY_SQL(q, exec("select id, name, dt, num, dtstamp from " + tableName + " order by id"));
QVERIFY( q.next() );
QCOMPARE( q.value( 0 ).toInt(), 1 );
QCOMPARE( q.value( 1 ).toString(), QString( "harald" ) );
QCOMPARE( q.value( 2 ).toDateTime(), dt );
QCOMPARE( q.value( 3 ).toDouble(), 2.3 );
+ QCOMPARE(q.value(4).toDateTime(), dtStamp);
QVERIFY( q.next() );
QCOMPARE( q.value( 0 ).toInt(), 2 );
QCOMPARE( q.value( 1 ).toString(), QString( "boris" ) );
QCOMPARE( q.value( 2 ).toDateTime(), dt.addDays( -1 ) );
QCOMPARE( q.value( 3 ).toDouble(), 3.4 );
+ QCOMPARE(q.value(4).toDateTime(), dtStamp.addDays(-1));
QVERIFY( q.next() );
QVERIFY( q.value( 0 ).isNull() );
QVERIFY( q.value( 1 ).isNull() );
QVERIFY( q.value( 2 ).isNull() );
QVERIFY( q.value( 3 ).isNull() );
+ QVERIFY(q.value(4).isNull());
+
+ const QString procName = qTableName("qtest_batch_proc", __FILE__, db);
+ QVERIFY_SQL(q, exec("create or replace procedure " + procName + " (x in timestamp, y out timestamp) is\n"
+ "begin\n"
+ " y := x;\n"
+ "end;\n"));
+ QVERIFY(q.prepare("call " + procName + "(?, ?)"));
+ q.addBindValue(timeStampCol, QSql::In);
+ QVariantList emptyDateTimes;
+ emptyDateTimes.reserve(timeStampCol.size());
+ for (int i = 0; i < timeStampCol.size(); i++)
+ emptyDateTimes << QVariant(QDateTime());
+ q.addBindValue(emptyDateTimes, QSql::Out);
+ QVERIFY_SQL(q, execBatch());
+ QCOMPARE(q.boundValue(1).toList(), timeStampCol);
}
void tst_QSqlQuery::QTBUG_43874()
@@ -2658,8 +2917,8 @@ void tst_QSqlQuery::nextResult()
QSqlDatabase db = QSqlDatabase::database( dbName );
CHECK_DATABASE( db );
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if ( !db.driver()->hasFeature( QSqlDriver::MultipleResultSets ) || !db.driver()->hasFeature( QSqlDriver::BatchOperations ) )
- QSKIP( "DBMS does not support multiple result sets or batch operations");
+ if (!db.driver()->hasFeature(QSqlDriver::MultipleResultSets))
+ QSKIP("DBMS does not support multiple result sets");
QSqlQuery q( db );
@@ -2772,7 +3031,10 @@ void tst_QSqlQuery::nextResult()
// Stored procedure with multiple result sets
const QString procName(qTableName("proc_more_res", __FILE__, db));
- q.exec( QString( "DROP PROCEDURE %1;" ).arg( procName ) );
+ if (dbType == QSqlDriver::PostgreSQL)
+ q.exec(QString("DROP FUNCTION %1(refcursor, refcursor);").arg(procName));
+ else
+ q.exec(QString("DROP PROCEDURE %1;").arg(procName));
if (dbType == QSqlDriver::MySqlServer)
QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1()"
@@ -2790,6 +3052,16 @@ void tst_QSqlQuery::nextResult()
"\nOPEN cursor1;"
"\nOPEN cursor2;"
"\nEND p1" ).arg( procName ).arg( tableName ).arg( tableName ) ) );
+ else if (dbType == QSqlDriver::PostgreSQL)
+ QVERIFY_SQL(q, exec(QString("CREATE FUNCTION %1(ref1 refcursor, ref2 refcursor)"
+ "\nRETURNS SETOF refcursor AS $$"
+ "\nBEGIN"
+ "\nOPEN ref1 FOR SELECT id, text FROM %2;"
+ "\nRETURN NEXT ref1;"
+ "\nOPEN ref2 FOR SELECT empty, num, text, id FROM %2;"
+ "\nRETURN NEXT ref2;"
+ "\nEND;"
+ "\n$$ LANGUAGE plpgsql").arg(procName).arg(tableName)));
else
QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1"
"\nAS"
@@ -2799,10 +3071,32 @@ void tst_QSqlQuery::nextResult()
if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::DB2) {
q.setForwardOnly( true );
QVERIFY_SQL( q, exec( QString( "CALL %1()" ).arg( procName ) ) );
+ } else if (dbType == QSqlDriver::PostgreSQL) {
+ // Returning multiple result sets from PostgreSQL stored procedure:
+ // http://sqlines.com/postgresql/how-to/return_result_set_from_stored_procedure
+ QVERIFY_SQL(q, exec(QString("BEGIN;"
+ "SELECT %1('cur1', 'cur2');"
+ "FETCH ALL IN cur1;"
+ "FETCH ALL IN cur2;"
+ "COMMIT;").arg(procName)));
} else {
QVERIFY_SQL( q, exec( QString( "EXEC %1" ).arg( procName ) ) );
}
+ if (dbType == QSqlDriver::PostgreSQL) {
+ // First result set - start of transaction
+ QVERIFY(!q.isSelect());
+ QCOMPARE(q.numRowsAffected(), 0);
+ QVERIFY(q.nextResult());
+ // Second result set contains cursor names
+ QVERIFY(q.isSelect());
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), "cur1");
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), "cur2");
+ QVERIFY(q.nextResult());
+ }
+
for ( int i = 0; i < 4; i++ ) {
QVERIFY_SQL( q, next() );
QCOMPARE( q.value( 0 ).toInt(), i+1 );
@@ -2827,12 +3121,21 @@ void tst_QSqlQuery::nextResult()
QVERIFY( !q.isSelect() ); // ... but it's not a select
QCOMPARE( q.numRowsAffected(), 0 ); // ... and no rows are affected (at least not with this procedure)
}
+ if (dbType == QSqlDriver::PostgreSQL) {
+ // Last result set - commit transaction
+ QVERIFY(q.nextResult());
+ QVERIFY(!q.isSelect());
+ QCOMPARE(q.numRowsAffected(), 0);
+ }
QVERIFY( !q.nextResult() );
QVERIFY( !q.isActive() );
- q.exec( QString( "DROP PROCEDURE %1;" ).arg( procName ) );
+ if (dbType == QSqlDriver::PostgreSQL)
+ q.exec(QString("DROP FUNCTION %1(refcursor, refcursor);").arg(procName));
+ else
+ q.exec(QString("DROP PROCEDURE %1;").arg(procName));
}
@@ -2919,16 +3222,14 @@ void tst_QSqlQuery::timeStampParsing()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ const QString tableName(qTableName("timeStampParsing", __FILE__, db));
+ tst_Databases::safeDropTable(db, tableName);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec(
- "CREATE TABLE \"main\".\"datetest\" ("
- "\"id\" integer NOT NULL PRIMARY KEY AUTOINCREMENT,"
- "\"datefield\" timestamp);"
- ));
- QVERIFY_SQL(q, exec(
- "INSERT INTO datetest (datefield) VALUES (current_timestamp);"
- ));
- QVERIFY_SQL(q, exec("SELECT * FROM datetest;"));
+ QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + tableName
+ + QStringLiteral(" (id integer, datefield timestamp)")));
+ QVERIFY_SQL(q, exec(QStringLiteral("INSERT INTO ") + tableName
+ + QStringLiteral(" (datefield) VALUES (current_timestamp)")));
+ QVERIFY_SQL(q, exec(QStringLiteral("SELECT * FROM ") + tableName));
while (q.next())
QVERIFY(q.value(1).toDateTime().isValid());
}
@@ -4167,5 +4468,88 @@ void tst_QSqlQuery::QTBUG_57138()
QCOMPARE(q.value(2).toDateTime(), tzoffset);
}
+void tst_QSqlQuery::dateTime_data()
+{
+ QTest::addColumn<QString>("dbName");
+ QTest::addColumn<QString>("tableName");
+ QTest::addColumn<QString>("createTableString");
+ QTest::addColumn<QList<QDateTime> >("initialDateTimes");
+ QTest::addColumn<QList<QDateTime> >("expectedDateTimes");
+
+ // Using time zones which are highly unlikely to be the same as the testing machine's one
+ // as it could pass as a result despite it.
+ // +8.5 hours from UTC to North Korea
+ const QTimeZone afterUTCTimeZone(30600);
+ // -8 hours from UTC to Belize
+ const QTimeZone beforeUTCTimeZone(-28800);
+ const QTimeZone utcTimeZone("UTC");
+ const QDateTime dt(QDate(2015, 5, 18), QTime(4, 26, 30));
+ const QDateTime dtWithMS(QDate(2015, 5, 18), QTime(4, 26, 30, 500));
+ const QDateTime dtWithAfterTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), afterUTCTimeZone);
+ const QDateTime dtWithBeforeTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), beforeUTCTimeZone);
+ const QDateTime dtWithUTCTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), utcTimeZone);
+ const QList<QDateTime> dateTimes = { dt, dtWithMS, dtWithAfterTZ, dtWithBeforeTZ, dtWithUTCTZ };
+ const QList<QDateTime> expectedDateTimesLocalTZ = { dt, dtWithMS, dtWithAfterTZ.toLocalTime(),
+ dtWithBeforeTZ.toLocalTime(),
+ dtWithUTCTZ.toLocalTime() };
+ const QList<QDateTime> expectedTimeStampDateTimes = { dt, dtWithMS, dtWithMS, dtWithMS, dtWithMS };
+ const QList<QDateTime> expectedDateTimes = { dt, dt, dt, dt, dt };
+
+ for (const QString &dbName : qAsConst(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ if (!db.isValid())
+ continue;
+ const QString tableNameTSWithTimeZone(qTableName("dateTimeTSWithTimeZone", __FILE__, db));
+ const QString tableNameTSWithLocalTimeZone(qTableName("dateTimeTSWithLocalTimeZone", __FILE__, db));
+ const QString tableNameTS(qTableName("dateTimeTS", __FILE__, db));
+ const QString tableNameDate(qTableName("dateTimeDate", __FILE__, db));
+ QTest::newRow(QString(dbName + " timestamp with time zone").toLatin1())
+ << dbName << tableNameTSWithTimeZone
+ << QStringLiteral(" (dt TIMESTAMP WITH TIME ZONE)")
+ << dateTimes << dateTimes;
+ QTest::newRow(QString(dbName + " timestamp with local time zone").toLatin1())
+ << dbName << tableNameTSWithTimeZone
+ << QStringLiteral(" (dt TIMESTAMP WITH LOCAL TIME ZONE)")
+ << dateTimes << expectedDateTimesLocalTZ;
+ QTest::newRow(QString(dbName + "timestamp").toLatin1())
+ << dbName << tableNameTS << QStringLiteral(" (dt TIMESTAMP(3))")
+ << dateTimes << expectedTimeStampDateTimes;
+ QTest::newRow(QString(dbName + "date").toLatin1())
+ << dbName << tableNameDate << QStringLiteral(" (dt DATE)")
+ << dateTimes << expectedDateTimes;
+ }
+}
+
+void tst_QSqlQuery::dateTime()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType != QSqlDriver::Oracle)
+ QSKIP("Implemented only for Oracle");
+
+ QFETCH(QString, tableName);
+ QFETCH(QString, createTableString);
+ QFETCH(QList<QDateTime>, initialDateTimes);
+ QFETCH(QList<QDateTime>, expectedDateTimes);
+
+ tst_Databases::safeDropTable(db, tableName);
+
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + createTableString));
+ for (const QDateTime &dt : qAsConst(initialDateTimes)) {
+ QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " values(:dt)"));
+ q.bindValue(":dt", dt);
+ QVERIFY_SQL(q, exec());
+ }
+ QVERIFY_SQL(q, exec("SELECT * FROM " + tableName));
+ for (const QDateTime &dt : qAsConst(expectedDateTimes)) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toDateTime(), dt);
+ }
+}
+
QTEST_MAIN( tst_QSqlQuery )
#include "tst_qsqlquery.moc"
diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
index 799b93c33b..84cca482fb 100644
--- a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
+++ b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
@@ -77,6 +77,7 @@ private slots:
void psqlSchemaTest();
void selectAfterUpdate();
void relationOnFirstColumn();
+ void setRelation();
private:
void dropTestTables( QSqlDatabase db );
@@ -1550,5 +1551,27 @@ void tst_QSqlRelationalTableModel::relationOnFirstColumn()
tst_Databases::safeDropTables(db, QStringList() << testTable1 << testTable2);
}
+void tst_QSqlRelationalTableModel::setRelation()
+{
+ QFETCH_GLOBAL(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ recreateTestTables(db);
+
+ QSqlRelationalTableModel model(0, db);
+ model.setTable(reltest1);
+ QVERIFY_SQL(model, select());
+ QCOMPARE(model.data(model.index(0, 2)), QVariant(1));
+
+ model.setRelation(2, QSqlRelation(reltest2, "id", "title"));
+ QVERIFY_SQL(model, select());
+ QCOMPARE(model.data(model.index(0, 2)), QVariant("herr"));
+
+ // Check that setting an invalid QSqlRelation() clears the relation
+ model.setRelation(2, QSqlRelation());
+ QVERIFY_SQL(model, select());
+ QCOMPARE(model.data(model.index(0, 2)), QVariant(1));
+}
+
QTEST_MAIN(tst_QSqlRelationalTableModel)
#include "tst_qsqlrelationaltablemodel.moc"
diff --git a/tests/auto/testlib/qabstractitemmodeltester/.gitignore b/tests/auto/testlib/qabstractitemmodeltester/.gitignore
new file mode 100644
index 0000000000..d682e9769a
--- /dev/null
+++ b/tests/auto/testlib/qabstractitemmodeltester/.gitignore
@@ -0,0 +1 @@
+qabstractitemmodeltester
diff --git a/tests/auto/testlib/qabstractitemmodeltester/qabstractitemmodeltester.pro b/tests/auto/testlib/qabstractitemmodeltester/qabstractitemmodeltester.pro
new file mode 100644
index 0000000000..306e8089f3
--- /dev/null
+++ b/tests/auto/testlib/qabstractitemmodeltester/qabstractitemmodeltester.pro
@@ -0,0 +1,13 @@
+CONFIG += testcase
+QT += widgets testlib
+
+mtdir = ../../other/qabstractitemmodelutils
+
+INCLUDEPATH += $$PWD/$${mtdir}
+
+SOURCES += \
+ $${mtdir}/dynamictreemodel.cpp \
+ tst_qabstractitemmodeltester.cpp
+
+HEADERS += \
+ $${mtdir}/dynamictreemodel.h
diff --git a/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp b/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
new file mode 100644
index 0000000000..0593ae74bf
--- /dev/null
+++ b/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
@@ -0,0 +1,299 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QtGui/QtGui>
+#include <QtWidgets/QtWidgets>
+
+#include "dynamictreemodel.h"
+
+class tst_QAbstractItemModelTester : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void stringListModel();
+ void treeWidgetModel();
+ void standardItemModel();
+ void testInsertThroughProxy();
+ void moveSourceItems();
+ void testResetThroughProxy();
+};
+
+/*
+ tests
+*/
+
+void tst_QAbstractItemModelTester::stringListModel()
+{
+ QStringListModel model;
+ QSortFilterProxyModel proxy;
+
+ QAbstractItemModelTester t1(&model);
+ QAbstractItemModelTester t2(&proxy);
+
+ proxy.setSourceModel(&model);
+
+ model.setStringList(QStringList() << "2" << "3" << "1");
+ model.setStringList(QStringList() << "a" << "e" << "plop" << "b" << "c");
+
+ proxy.setDynamicSortFilter(true);
+ proxy.setFilterRegExp(QRegExp("[^b]"));
+}
+
+void tst_QAbstractItemModelTester::treeWidgetModel()
+{
+ QTreeWidget widget;
+
+ QAbstractItemModelTester t1(widget.model());
+
+ QTreeWidgetItem *root = new QTreeWidgetItem(&widget, QStringList("root"));
+ for (int i = 0; i < 20; ++i)
+ new QTreeWidgetItem(root, QStringList(QString::number(i)));
+ QTreeWidgetItem *remove = root->child(2);
+ root->removeChild(remove);
+ QTreeWidgetItem *parent = new QTreeWidgetItem(&widget, QStringList("parent"));
+ new QTreeWidgetItem(parent, QStringList("child"));
+ widget.setItemHidden(parent, true);
+
+ widget.sortByColumn(0);
+}
+
+void tst_QAbstractItemModelTester::standardItemModel()
+{
+ QStandardItemModel model(10, 10);
+ QSortFilterProxyModel proxy;
+
+ QAbstractItemModelTester t1(&model);
+ QAbstractItemModelTester t2(&proxy);
+
+ proxy.setSourceModel(&model);
+
+ model.insertRows(2, 5);
+ model.removeRows(4, 5);
+
+ model.insertColumns(2, 5);
+ model.removeColumns(4, 5);
+
+ model.insertRows(0, 5, model.index(1, 1));
+ model.insertColumns(0, 5, model.index(1, 3));
+}
+
+void tst_QAbstractItemModelTester::testInsertThroughProxy()
+{
+ DynamicTreeModel *model = new DynamicTreeModel(this);
+
+ QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this);
+ proxy->setSourceModel(model);
+
+ new QAbstractItemModelTester(proxy, this);
+
+ ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
+ insertCommand->setNumCols(4);
+ insertCommand->setStartRow(0);
+ insertCommand->setEndRow(9);
+ // Parent is QModelIndex()
+ insertCommand->doCommand();
+
+ insertCommand = new ModelInsertCommand(model, this);
+ insertCommand->setNumCols(4);
+ insertCommand->setAncestorRowNumbers(QList<int>() << 5);
+ insertCommand->setStartRow(0);
+ insertCommand->setEndRow(9);
+ insertCommand->doCommand();
+
+ ModelMoveCommand *moveCommand = new ModelMoveCommand(model, this);
+ moveCommand->setNumCols(4);
+ moveCommand->setStartRow(0);
+ moveCommand->setEndRow(0);
+ moveCommand->setDestRow(9);
+ moveCommand->setDestAncestors(QList<int>() << 5);
+ moveCommand->doCommand();
+}
+
+/**
+ Makes the persistent index list publicly accessible
+*/
+class AccessibleProxyModel : public QSortFilterProxyModel
+{
+ Q_OBJECT
+public:
+ AccessibleProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent)
+ {
+ }
+
+ QModelIndexList persistent()
+ {
+ return persistentIndexList();
+ }
+};
+
+class ObservingObject : public QObject
+{
+ Q_OBJECT
+public:
+ ObservingObject(AccessibleProxyModel *proxy, QObject *parent = 0) :
+ QObject(parent),
+ m_proxy(proxy),
+ storePersistentFailureCount(0),
+ checkPersistentFailureCount(0)
+ {
+ connect(m_proxy, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
+ SLOT(storePersistent()));
+ connect(m_proxy, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
+ SLOT(checkPersistent()));
+ }
+
+public slots:
+
+ void storePersistent(const QModelIndex &parent)
+ {
+ for (int row = 0; row < m_proxy->rowCount(parent); ++row) {
+ QModelIndex proxyIndex = m_proxy->index(row, 0, parent);
+ QModelIndex sourceIndex = m_proxy->mapToSource(proxyIndex);
+ if (!proxyIndex.isValid()) {
+ qWarning("%s: Invalid proxy index", Q_FUNC_INFO);
+ ++storePersistentFailureCount;
+ }
+ if (!sourceIndex.isValid()) {
+ qWarning("%s: invalid source index", Q_FUNC_INFO);
+ ++storePersistentFailureCount;
+ }
+ m_persistentSourceIndexes.append(sourceIndex);
+ m_persistentProxyIndexes.append(proxyIndex);
+ if (m_proxy->hasChildren(proxyIndex))
+ storePersistent(proxyIndex);
+ }
+ }
+
+ void storePersistent()
+ {
+ // This method is called from rowsAboutToBeMoved. Persistent indexes should be valid
+ foreach (const QModelIndex &idx, m_persistentProxyIndexes)
+ if (!idx.isValid()) {
+ qWarning("%s: persistentProxyIndexes contains invalid index", Q_FUNC_INFO);
+ ++storePersistentFailureCount;
+ }
+
+ if (!m_proxy->persistent().isEmpty()) {
+ qWarning("%s: proxy should have no persistent indexes when storePersistent called",
+ Q_FUNC_INFO);
+ ++storePersistentFailureCount;
+ }
+ storePersistent(QModelIndex());
+ if (m_proxy->persistent().isEmpty()) {
+ qWarning("%s: proxy should have persistent index after storePersistent called",
+ Q_FUNC_INFO);
+ ++storePersistentFailureCount;
+ }
+ }
+
+ void checkPersistent()
+ {
+ for (int row = 0; row < m_persistentProxyIndexes.size(); ++row) {
+ m_persistentProxyIndexes.at(row);
+ m_persistentSourceIndexes.at(row);
+ }
+ for (int row = 0; row < m_persistentProxyIndexes.size(); ++row) {
+ QModelIndex updatedProxy = m_persistentProxyIndexes.at(row);
+ QModelIndex updatedSource = m_persistentSourceIndexes.at(row);
+ if (m_proxy->mapToSource(updatedProxy) != updatedSource) {
+ qWarning("%s: check failed at row %d", Q_FUNC_INFO, row);
+ ++checkPersistentFailureCount;
+ }
+ }
+ m_persistentSourceIndexes.clear();
+ m_persistentProxyIndexes.clear();
+ }
+
+private:
+ AccessibleProxyModel *m_proxy;
+ QList<QPersistentModelIndex> m_persistentSourceIndexes;
+ QList<QPersistentModelIndex> m_persistentProxyIndexes;
+public:
+ int storePersistentFailureCount;
+ int checkPersistentFailureCount;
+};
+
+void tst_QAbstractItemModelTester::moveSourceItems()
+{
+ DynamicTreeModel *model = new DynamicTreeModel(this);
+ AccessibleProxyModel *proxy = new AccessibleProxyModel(this);
+ proxy->setSourceModel(model);
+
+ ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
+ insertCommand->setStartRow(0);
+ insertCommand->setEndRow(2);
+ insertCommand->doCommand();
+
+ insertCommand = new ModelInsertCommand(model, this);
+ insertCommand->setAncestorRowNumbers(QList<int>() << 1);
+ insertCommand->setStartRow(0);
+ insertCommand->setEndRow(2);
+ insertCommand->doCommand();
+
+ ObservingObject observer(proxy);
+
+ ModelMoveCommand *moveCommand = new ModelMoveCommand(model, this);
+ moveCommand->setStartRow(0);
+ moveCommand->setEndRow(0);
+ moveCommand->setDestAncestors(QList<int>() << 1);
+ moveCommand->setDestRow(0);
+ moveCommand->doCommand();
+
+ QCOMPARE(observer.storePersistentFailureCount, 0);
+ QCOMPARE(observer.checkPersistentFailureCount, 0);
+}
+
+void tst_QAbstractItemModelTester::testResetThroughProxy()
+{
+ DynamicTreeModel *model = new DynamicTreeModel(this);
+
+ ModelInsertCommand *insertCommand = new ModelInsertCommand(model, this);
+ insertCommand->setStartRow(0);
+ insertCommand->setEndRow(2);
+ insertCommand->doCommand();
+
+ QPersistentModelIndex persistent = model->index(0, 0);
+
+ AccessibleProxyModel *proxy = new AccessibleProxyModel(this);
+ proxy->setSourceModel(model);
+
+ ObservingObject observer(proxy);
+ observer.storePersistent();
+
+ ModelResetCommand *resetCommand = new ModelResetCommand(model, this);
+ resetCommand->setNumCols(0);
+ resetCommand->doCommand();
+
+ QCOMPARE(observer.storePersistentFailureCount, 0);
+ QCOMPARE(observer.checkPersistentFailureCount, 0);
+}
+
+QTEST_MAIN(tst_QAbstractItemModelTester)
+#include "tst_qabstractitemmodeltester.moc"
diff --git a/tests/auto/testlib/selftests/deleteLater/deleteLater.pro b/tests/auto/testlib/selftests/deleteLater/deleteLater.pro
new file mode 100644
index 0000000000..6847238b1d
--- /dev/null
+++ b/tests/auto/testlib/selftests/deleteLater/deleteLater.pro
@@ -0,0 +1,7 @@
+SOURCES += tst_deleteLater.cpp
+QT = core testlib
+
+CONFIG -= app_bundle
+CONFIG -= debug_and_release_target
+
+TARGET = tst_deleteLater
diff --git a/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp b/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp
new file mode 100644
index 0000000000..8789baa22a
--- /dev/null
+++ b/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtCore/QCoreApplication>
+#include <QtTest/QtTest>
+
+class tst_DeleteLater: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void qtestLibShouldFlushDeleteLaterBetweenTests_setup();
+ void qtestLibShouldFlushDeleteLaterBetweenTests_check();
+ void qtestLibShouldFlushDeleteLaterOnExit();
+};
+
+class ToBeDeleted : public QObject
+{
+public:
+ ToBeDeleted(bool *staticBool) : staticBool(staticBool) {}
+ ~ToBeDeleted() { *staticBool = true; }
+private:
+ bool *staticBool;
+};
+
+static bool deletedBetweenTests = false;
+
+void tst_DeleteLater::qtestLibShouldFlushDeleteLaterBetweenTests_setup()
+{
+ ToBeDeleted *obj = new ToBeDeleted(&deletedBetweenTests);
+ obj->deleteLater();
+}
+
+void tst_DeleteLater::qtestLibShouldFlushDeleteLaterBetweenTests_check()
+{
+ QVERIFY(deletedBetweenTests);
+}
+
+static bool deletedOnExit = false;
+
+void tst_DeleteLater::qtestLibShouldFlushDeleteLaterOnExit()
+{
+ ToBeDeleted *obj = new ToBeDeleted(&deletedOnExit);
+ obj->deleteLater();
+}
+
+// This global object will check whether the deleteLater was processed
+class DeleteChecker
+{
+public:
+ ~DeleteChecker() {
+ if (!deletedOnExit) {
+ qFatal("QTestLib failed to flush deleteLater on exit");
+ }
+ }
+};
+static DeleteChecker s_deleteChecker;
+
+QTEST_MAIN(tst_DeleteLater)
+
+#include "tst_deleteLater.moc"
diff --git a/tests/auto/testlib/selftests/deleteLater_noApp/deleteLater_noApp.pro b/tests/auto/testlib/selftests/deleteLater_noApp/deleteLater_noApp.pro
new file mode 100644
index 0000000000..f860a767cd
--- /dev/null
+++ b/tests/auto/testlib/selftests/deleteLater_noApp/deleteLater_noApp.pro
@@ -0,0 +1,7 @@
+SOURCES += tst_deleteLater_noApp.cpp
+QT = core testlib
+
+CONFIG -= app_bundle
+CONFIG -= debug_and_release_target
+
+TARGET = tst_deleteLater_noApp
diff --git a/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp b/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp
new file mode 100644
index 0000000000..9069e5d07e
--- /dev/null
+++ b/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include <QtCore/QCoreApplication>
+#include <QtTest/QtTest>
+
+class tst_DeleteLater_noApp: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void qtestLibShouldNotFlushDeleteLaterBetweenTests_setup();
+ void qtestLibShouldNotFlushDeleteLaterBetweenTests_check();
+ void qtestLibShouldNotFlushDeleteLaterOnExit();
+};
+
+class ToBeDeleted : public QObject
+{
+public:
+ ToBeDeleted(bool *staticBool) : staticBool(staticBool) {}
+ ~ToBeDeleted() { *staticBool = true; }
+private:
+ bool *staticBool;
+};
+
+static bool deletedBetweenTests = false;
+
+void tst_DeleteLater_noApp::qtestLibShouldNotFlushDeleteLaterBetweenTests_setup()
+{
+ ToBeDeleted *obj = new ToBeDeleted(&deletedBetweenTests);
+ obj->deleteLater();
+}
+
+void tst_DeleteLater_noApp::qtestLibShouldNotFlushDeleteLaterBetweenTests_check()
+{
+ // There's no qApp, we can't flush the events
+ QVERIFY(!deletedBetweenTests);
+}
+
+static bool deletedOnExit = false;
+
+void tst_DeleteLater_noApp::qtestLibShouldNotFlushDeleteLaterOnExit()
+{
+ ToBeDeleted *obj = new ToBeDeleted(&deletedOnExit);
+ obj->deleteLater();
+}
+
+// This global object will check whether the deleteLater was processed
+class DeleteChecker
+{
+public:
+ ~DeleteChecker() {
+ if (deletedOnExit) {
+ qFatal("QTestLib somehow flushed deleteLater on exit, without a qApp?");
+ }
+ }
+};
+static DeleteChecker s_deleteChecker;
+
+QTEST_APPLESS_MAIN(tst_DeleteLater_noApp)
+
+#include "tst_deleteLater_noApp.moc"
diff --git a/tests/auto/testlib/selftests/expected_alive.txt b/tests/auto/testlib/selftests/expected_alive.txt
deleted file mode 100644
index 4384a9fcea..0000000000
--- a/tests/auto/testlib/selftests/expected_alive.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-********* Start testing of tst_Alive *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
-PASS : tst_Alive::initTestCase()
-QWARN : tst_Alive::alive() TEST LAGS 3 PINGS behind!
-QWARN : tst_Alive::alive() TEST LAGS 4 PINGS behind!
-QDEBUG : tst_Alive::alive() CUT
-QWARN : tst_Alive::alive() TEST LAGS 3 PINGS behind!
-QWARN : tst_Alive::alive() TEST LAGS 4 PINGS behind!
-PASS : tst_Alive::alive()
-PASS : tst_Alive::addMouseDClick()
-PASS : tst_Alive::cleanupTestCase()
-Totals: 4 passed, 0 failed, 0 skipped, 0 blacklisted
-********* Finished testing of tst_Alive *********
diff --git a/tests/auto/testlib/selftests/expected_assert.lightxml b/tests/auto/testlib/selftests/expected_assert.lightxml
index b40ff41da3..1591f4cf41 100644
--- a/tests/auto/testlib/selftests/expected_assert.lightxml
+++ b/tests/auto/testlib/selftests/expected_assert.lightxml
@@ -5,19 +5,19 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testNumber1">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testNumber2">
<Message type="qfatal" file="" line="0">
- <Description><![CDATA[ASSERT: "false" in file tst_assert.cpp, line 66]]></Description>
+ <Description><![CDATA[ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0]]></Description>
</Message>
<Incident type="fail" file="Unknown file" line="0">
<Description><![CDATA[Received a fatal error.]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_assert.teamcity b/tests/auto/testlib/selftests/expected_assert.teamcity
index 2b6cf21863..3f68c5f21b 100644
--- a/tests/auto/testlib/selftests/expected_assert.teamcity
+++ b/tests/auto/testlib/selftests/expected_assert.teamcity
@@ -5,6 +5,6 @@
##teamcity[testFinished name='testNumber1()' flowId='tst_Assert']
##teamcity[testStarted name='testNumber2()' flowId='tst_Assert']
##teamcity[testFailed name='testNumber2()' message='Failure! |[Loc: Unknown file(0)|]' details='Received a fatal error.' flowId='tst_Assert']
-##teamcity[testStdOut name='testNumber2()' out='QFATAL: ASSERT: "false" in file tst_assert.cpp, line 58' flowId='tst_Assert']
+##teamcity[testStdOut name='testNumber2()' out='QFATAL: ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0' flowId='tst_Assert']
##teamcity[testFinished name='testNumber2()' flowId='tst_Assert']
##teamcity[testSuiteFinished name='tst_Assert' flowId='tst_Assert']
diff --git a/tests/auto/testlib/selftests/expected_assert.txt b/tests/auto/testlib/selftests/expected_assert.txt
index c07c95d8ee..9380eeddc1 100644
--- a/tests/auto/testlib/selftests/expected_assert.txt
+++ b/tests/auto/testlib/selftests/expected_assert.txt
@@ -1,9 +1,9 @@
********* Start testing of tst_Assert *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Assert::initTestCase()
PASS : tst_Assert::testNumber1()
-QFATAL : tst_Assert::testNumber2() ASSERT: "false" in file tst_assert.cpp, line 66
+QFATAL : tst_Assert::testNumber2() ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0
FAIL! : tst_Assert::testNumber2() Received a fatal error.
Loc: [Unknown file(0)]
-Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted
+Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Assert *********
diff --git a/tests/auto/testlib/selftests/expected_assert.xml b/tests/auto/testlib/selftests/expected_assert.xml
index 9770b3cd57..cdb7f4d8d1 100644
--- a/tests/auto/testlib/selftests/expected_assert.xml
+++ b/tests/auto/testlib/selftests/expected_assert.xml
@@ -7,20 +7,20 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testNumber1">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testNumber2">
<Message type="qfatal" file="" line="0">
- <Description><![CDATA[ASSERT: "false" in file tst_assert.cpp, line 66]]></Description>
+ <Description><![CDATA[ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0]]></Description>
</Message>
<Incident type="fail" file="Unknown file" line="0">
<Description><![CDATA[Received a fatal error.]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_assert.xunitxml b/tests/auto/testlib/selftests/expected_assert.xunitxml
index 96daa33dcf..ca12a45e20 100644
--- a/tests/auto/testlib/selftests/expected_assert.xunitxml
+++ b/tests/auto/testlib/selftests/expected_assert.xunitxml
@@ -8,10 +8,10 @@
<testcase result="pass" name="initTestCase"/>
<testcase result="pass" name="testNumber1"/>
<testcase result="fail" name="testNumber2">
- <!-- message="ASSERT: &quot;false&quot; in file tst_assert.cpp, line 66" type="qfatal" -->
+ <!-- message="ASSERT: &quot;false&quot; in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 53" type="qfatal" -->
<failure message="Received a fatal error." result="fail"/>
</testcase>
<system-err>
-<![CDATA[ASSERT: "false" in file tst_assert.cpp, line 66]]>
+<![CDATA[ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0]]>
</system-err>
</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_badxml.lightxml b/tests/auto/testlib/selftests/expected_badxml.lightxml
index 94f479a79a..1ab76274d3 100644
--- a/tests/auto/testlib/selftests/expected_badxml.lightxml
+++ b/tests/auto/testlib/selftests/expected_badxml.lightxml
@@ -12,7 +12,7 @@
<DataTag><![CDATA[fail end cdata ]]]><![CDATA[]> text ]]]><![CDATA[]> more text]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail end cdata ]]]><![CDATA[]> text ]]]><![CDATA[]> more text]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
@@ -28,7 +28,7 @@
<DataTag><![CDATA[fail quotes " text" more text]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail quotes " text" more text]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
@@ -44,7 +44,7 @@
<DataTag><![CDATA[fail xml close > open < tags < text]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail xml close > open < tags < text]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
@@ -60,7 +60,7 @@
<DataTag><![CDATA[fail all > " mixed ]]]><![CDATA[]> up > " in < the ]]]><![CDATA[]> hopes < of triggering "< ]]]><![CDATA[]> bugs]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail all > " mixed ]]]><![CDATA[]> up > " in < the ]]]><![CDATA[]> hopes < of triggering "< ]]]><![CDATA[]> bugs]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
diff --git a/tests/auto/testlib/selftests/expected_badxml.teamcity b/tests/auto/testlib/selftests/expected_badxml.teamcity
index 04d38f81ab..e765393375 100644
--- a/tests/auto/testlib/selftests/expected_badxml.teamcity
+++ b/tests/auto/testlib/selftests/expected_badxml.teamcity
@@ -2,28 +2,28 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_BadXml']
##teamcity[testFinished name='initTestCase()' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(fail end cdata |]|]> text |]|]> more text)' flowId='tst_BadXml']
-##teamcity[testFailed name='badDataTag(fail end cdata |]|]> text |]|]> more text)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure' flowId='tst_BadXml']
+##teamcity[testFailed name='badDataTag(fail end cdata |]|]> text |]|]> more text)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)|]' details='a failure' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(fail end cdata |]|]> text |]|]> more text)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(fail end cdata |]|]> text |]|]> more text)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(pass end cdata |]|]> text |]|]> more text)' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(pass end cdata |]|]> text |]|]> more text)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(pass end cdata |]|]> text |]|]> more text)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(fail quotes " text" more text)' flowId='tst_BadXml']
-##teamcity[testFailed name='badDataTag(fail quotes " text" more text)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure' flowId='tst_BadXml']
+##teamcity[testFailed name='badDataTag(fail quotes " text" more text)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)|]' details='a failure' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(fail quotes " text" more text)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(fail quotes " text" more text)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(pass quotes " text" more text)' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(pass quotes " text" more text)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(pass quotes " text" more text)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(fail xml close > open < tags < text)' flowId='tst_BadXml']
-##teamcity[testFailed name='badDataTag(fail xml close > open < tags < text)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure' flowId='tst_BadXml']
+##teamcity[testFailed name='badDataTag(fail xml close > open < tags < text)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)|]' details='a failure' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(fail xml close > open < tags < text)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(fail xml close > open < tags < text)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(pass xml close > open < tags < text)' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(pass xml close > open < tags < text)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(pass xml close > open < tags < text)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' flowId='tst_BadXml']
-##teamcity[testFailed name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' message='Failure! |[Loc: tst_badxml.cpp(106)|]' details='a failure' flowId='tst_BadXml']
+##teamcity[testFailed name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)|]' details='a failure' flowId='tst_BadXml']
##teamcity[testStdOut name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' out='QDEBUG: a message' flowId='tst_BadXml']
##teamcity[testFinished name='badDataTag(fail all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' flowId='tst_BadXml']
##teamcity[testStarted name='badDataTag(pass all > " mixed |]|]> up > " in < the |]|]> hopes < of triggering "< |]|]> bugs)' flowId='tst_BadXml']
@@ -44,7 +44,7 @@
##teamcity[testStarted name='failWithNoFile()' flowId='tst_BadXml']
##teamcity[testFailed name='failWithNoFile()' message='Failure!' details='failure message' flowId='tst_BadXml']
##teamcity[testFinished name='failWithNoFile()' flowId='tst_BadXml']
-##teamcity[testIgnored name='encoding()' message='Skipped for text due to unpredictable console encoding. |[Loc: tst_badxml.cpp(131)|]' flowId='tst_BadXml']
+##teamcity[testIgnored name='encoding()' message='Skipped for text due to unpredictable console encoding. |[Loc: qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)|]' flowId='tst_BadXml']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BadXml']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BadXml']
##teamcity[testSuiteFinished name='tst_BadXml' flowId='tst_BadXml']
diff --git a/tests/auto/testlib/selftests/expected_badxml.txt b/tests/auto/testlib/selftests/expected_badxml.txt
index e4fa78494e..e9d8695130 100644
--- a/tests/auto/testlib/selftests/expected_badxml.txt
+++ b/tests/auto/testlib/selftests/expected_badxml.txt
@@ -1,30 +1,30 @@
********* Start testing of tst_BadXml *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BadXml::initTestCase()
QDEBUG : tst_BadXml::badDataTag(fail end cdata ]]> text ]]> more text) a message
FAIL! : tst_BadXml::badDataTag(fail end cdata ]]> text ]]> more text) a failure
- Loc: [tst_badxml.cpp(114)]
+ Loc: [qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)]
QDEBUG : tst_BadXml::badDataTag(pass end cdata ]]> text ]]> more text) a message
PASS : tst_BadXml::badDataTag(pass end cdata ]]> text ]]> more text)
RESULT : tst_BadXml::badDataTag():"pass end cdata ]]> text ]]> more text":
0 events per iteration (total: 0, iterations: 1)
QDEBUG : tst_BadXml::badDataTag(fail quotes " text" more text) a message
FAIL! : tst_BadXml::badDataTag(fail quotes " text" more text) a failure
- Loc: [tst_badxml.cpp(114)]
+ Loc: [qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)]
QDEBUG : tst_BadXml::badDataTag(pass quotes " text" more text) a message
PASS : tst_BadXml::badDataTag(pass quotes " text" more text)
RESULT : tst_BadXml::badDataTag():"pass quotes " text" more text":
0 events per iteration (total: 0, iterations: 1)
QDEBUG : tst_BadXml::badDataTag(fail xml close > open < tags < text) a message
FAIL! : tst_BadXml::badDataTag(fail xml close > open < tags < text) a failure
- Loc: [tst_badxml.cpp(114)]
+ Loc: [qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)]
QDEBUG : tst_BadXml::badDataTag(pass xml close > open < tags < text) a message
PASS : tst_BadXml::badDataTag(pass xml close > open < tags < text)
RESULT : tst_BadXml::badDataTag():"pass xml close > open < tags < text":
0 events per iteration (total: 0, iterations: 1)
QDEBUG : tst_BadXml::badDataTag(fail all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a message
FAIL! : tst_BadXml::badDataTag(fail all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a failure
- Loc: [tst_badxml.cpp(114)]
+ Loc: [qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)]
QDEBUG : tst_BadXml::badDataTag(pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs) a message
PASS : tst_BadXml::badDataTag(pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs)
RESULT : tst_BadXml::badDataTag():"pass all > " mixed ]]> up > " in < the ]]> hopes < of triggering "< ]]> bugs":
@@ -39,7 +39,7 @@ QDEBUG : tst_BadXml::badMessage(string 3) all > " mixed ]]> up > " in < the ]]>
PASS : tst_BadXml::badMessage(string 3)
FAIL! : tst_BadXml::failWithNoFile() failure message
SKIP : tst_BadXml::encoding() Skipped for text due to unpredictable console encoding.
- Loc: [tst_badxml.cpp(139)]
+ Loc: [qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp(0)]
PASS : tst_BadXml::cleanupTestCase()
-Totals: 10 passed, 5 failed, 1 skipped, 0 blacklisted
+Totals: 10 passed, 5 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BadXml *********
diff --git a/tests/auto/testlib/selftests/expected_badxml.xml b/tests/auto/testlib/selftests/expected_badxml.xml
index c1266bfeed..927f58f7f6 100644
--- a/tests/auto/testlib/selftests/expected_badxml.xml
+++ b/tests/auto/testlib/selftests/expected_badxml.xml
@@ -14,7 +14,7 @@
<DataTag><![CDATA[fail end cdata ]]]><![CDATA[]> text ]]]><![CDATA[]> more text]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail end cdata ]]]><![CDATA[]> text ]]]><![CDATA[]> more text]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
@@ -30,7 +30,7 @@
<DataTag><![CDATA[fail quotes " text" more text]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail quotes " text" more text]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
@@ -46,7 +46,7 @@
<DataTag><![CDATA[fail xml close > open < tags < text]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail xml close > open < tags < text]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
@@ -62,7 +62,7 @@
<DataTag><![CDATA[fail all > " mixed ]]]><![CDATA[]> up > " in < the ]]]><![CDATA[]> hopes < of triggering "< ]]]><![CDATA[]> bugs]]></DataTag>
<Description><![CDATA[a message]]></Description>
</Message>
-<Incident type="fail" file="tst_badxml.cpp" line="114">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/badxml/tst_badxml.cpp" line="0">
<DataTag><![CDATA[fail all > " mixed ]]]><![CDATA[]> up > " in < the ]]]><![CDATA[]> hopes < of triggering "< ]]]><![CDATA[]> bugs]]></DataTag>
<Description><![CDATA[a failure]]></Description>
</Incident>
diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind.lightxml b/tests/auto/testlib/selftests/expected_benchlibcallgrind.lightxml
new file mode 100644
index 0000000000..ea5374985d
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind.lightxml
@@ -0,0 +1,26 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="twoHundredMillionInstructions">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp" line="0">
+ <Description><![CDATA[This test is only defined for gcc and x86.]]></Description>
+</Message>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind.teamcity b/tests/auto/testlib/selftests/expected_benchlibcallgrind.teamcity
new file mode 100644
index 0000000000..11de23ccc2
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='tst_BenchlibCallgrind' flowId='tst_BenchlibCallgrind']
+##teamcity[testSuiteStarted name='tst_BenchlibCallgrind' flowId='tst_BenchlibCallgrind']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibCallgrind']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibCallgrind']
+##teamcity[testIgnored name='twoHundredMillionInstructions()' message='This test is only defined for gcc and x86. |[Loc: qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp(0)|]' flowId='tst_BenchlibCallgrind']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibCallgrind']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibCallgrind']
+##teamcity[testSuiteFinished name='tst_BenchlibCallgrind' flowId='tst_BenchlibCallgrind']
+##teamcity[testSuiteFinished name='tst_BenchlibCallgrind' flowId='tst_BenchlibCallgrind']
diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind.xml b/tests/auto/testlib/selftests/expected_benchlibcallgrind.xml
new file mode 100644
index 0000000000..14433e719d
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_BenchlibCallgrind">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_BenchlibCallgrind">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="twoHundredMillionInstructions">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp" line="0">
+ <Description><![CDATA[This test is only defined for gcc and x86.]]></Description>
+</Message>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind.xunitxml b/tests/auto/testlib/selftests/expected_benchlibcallgrind.xunitxml
new file mode 100644
index 0000000000..95d90e6ee7
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind.xunitxml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="1" failures="0" tests="3" name="tst_BenchlibCallgrind">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase name="twoHundredMillionInstructions">
+ <!-- message="This test is only defined for gcc and x86." type="skip" -->
+ </testcase>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err>
+<![CDATA[This test is only defined for gcc and x86.]]>
+ </system-err>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="0" name="tst_BenchlibCallgrind">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <system-err/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind_0.txt b/tests/auto/testlib/selftests/expected_benchlibcallgrind_0.txt
new file mode 100644
index 0000000000..750dcf4736
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind_0.txt
@@ -0,0 +1,8 @@
+********* Start testing of tst_BenchlibCallgrind *********
+Config: Using QtTest library
+PASS : tst_BenchlibCallgrind::initTestCase()
+SKIP : tst_BenchlibCallgrind::twoHundredMillionInstructions() This test is only defined for gcc and x86.
+ Loc: [qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp(0)]
+PASS : tst_BenchlibCallgrind::cleanupTestCase()
+Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted
+********* Finished testing of tst_BenchlibCallgrind *********
diff --git a/tests/auto/testlib/selftests/expected_benchlibcallgrind.txt b/tests/auto/testlib/selftests/expected_benchlibcallgrind_1.txt
index 07365bb9e8..07365bb9e8 100644
--- a/tests/auto/testlib/selftests/expected_benchlibcallgrind.txt
+++ b/tests/auto/testlib/selftests/expected_benchlibcallgrind_1.txt
diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml b/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml
index 6fe511462c..cc83020650 100644
--- a/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml
+++ b/tests/auto/testlib/selftests/expected_benchlibcounting.lightxml
@@ -5,27 +5,27 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="passingBenchmark">
<Incident type="pass" file="" line="0" />
<BenchmarkResult metric="Events" tag="" value="0" iterations="1" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skippingBenchmark">
-<Message type="skip" file="tst_benchlibcounting.cpp" line="64">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp" line="0">
<Description><![CDATA[This is a skipping benchmark]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failingBenchmark">
-<Incident type="fail" file="tst_benchlibcounting.cpp" line="71">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp" line="0">
<Description><![CDATA[This is a failing benchmark]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.teamcity b/tests/auto/testlib/selftests/expected_benchlibcounting.teamcity
new file mode 100644
index 0000000000..f693db31d8
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibcounting.teamcity
@@ -0,0 +1,12 @@
+##teamcity[testSuiteStarted name='tst_BenchlibCounting' flowId='tst_BenchlibCounting']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibCounting']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibCounting']
+##teamcity[testStarted name='passingBenchmark()' flowId='tst_BenchlibCounting']
+##teamcity[testFinished name='passingBenchmark()' flowId='tst_BenchlibCounting']
+##teamcity[testIgnored name='skippingBenchmark()' message='This is a skipping benchmark |[Loc: qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp(0)|]' flowId='tst_BenchlibCounting']
+##teamcity[testStarted name='failingBenchmark()' flowId='tst_BenchlibCounting']
+##teamcity[testFailed name='failingBenchmark()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp(0)|]' details='This is a failing benchmark' flowId='tst_BenchlibCounting']
+##teamcity[testFinished name='failingBenchmark()' flowId='tst_BenchlibCounting']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibCounting']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibCounting']
+##teamcity[testSuiteFinished name='tst_BenchlibCounting' flowId='tst_BenchlibCounting']
diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.txt b/tests/auto/testlib/selftests/expected_benchlibcounting.txt
index 62e316dc3c..d47309d11c 100644
--- a/tests/auto/testlib/selftests/expected_benchlibcounting.txt
+++ b/tests/auto/testlib/selftests/expected_benchlibcounting.txt
@@ -1,13 +1,13 @@
********* Start testing of tst_BenchlibCounting *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibCounting::initTestCase()
PASS : tst_BenchlibCounting::passingBenchmark()
RESULT : tst_BenchlibCounting::passingBenchmark():
0 events per iteration (total: 0, iterations: 1)
SKIP : tst_BenchlibCounting::skippingBenchmark() This is a skipping benchmark
- Loc: [tst_benchlibcounting.cpp(64)]
+ Loc: [qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp(0)]
FAIL! : tst_BenchlibCounting::failingBenchmark() This is a failing benchmark
- Loc: [tst_benchlibcounting.cpp(71)]
+ Loc: [qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp(0)]
PASS : tst_BenchlibCounting::cleanupTestCase()
-Totals: 3 passed, 1 failed, 1 skipped, 0 blacklisted
+Totals: 3 passed, 1 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibCounting *********
diff --git a/tests/auto/testlib/selftests/expected_benchlibcounting.xml b/tests/auto/testlib/selftests/expected_benchlibcounting.xml
index d945511eec..7c8366ed8c 100644
--- a/tests/auto/testlib/selftests/expected_benchlibcounting.xml
+++ b/tests/auto/testlib/selftests/expected_benchlibcounting.xml
@@ -7,28 +7,28 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="passingBenchmark">
<Incident type="pass" file="" line="0" />
<BenchmarkResult metric="Events" tag="" value="0" iterations="1" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skippingBenchmark">
-<Message type="skip" file="tst_benchlibcounting.cpp" line="64">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp" line="0">
<Description><![CDATA[This is a skipping benchmark]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failingBenchmark">
-<Incident type="fail" file="tst_benchlibcounting.cpp" line="71">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp" line="0">
<Description><![CDATA[This is a failing benchmark]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml b/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml
index 0bc00569e9..867210ecb3 100644
--- a/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml
+++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.lightxml
@@ -5,7 +5,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="events">
<Incident type="pass" file="" line="0">
@@ -36,10 +36,10 @@
<DataTag><![CDATA[100000]]></DataTag>
</Incident>
<BenchmarkResult metric="Events" tag="100000" value="100000" iterations="1" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.teamcity b/tests/auto/testlib/selftests/expected_benchlibeventcounter.teamcity
new file mode 100644
index 0000000000..6cb4c7214c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.teamcity
@@ -0,0 +1,20 @@
+##teamcity[testSuiteStarted name='tst_BenchlibEventCounter' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(0)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(0)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(1)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(1)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(10)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(10)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(100)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(100)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(500)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(500)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(5000)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(5000)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='events(100000)' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='events(100000)' flowId='tst_BenchlibEventCounter']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibEventCounter']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibEventCounter']
+##teamcity[testSuiteFinished name='tst_BenchlibEventCounter' flowId='tst_BenchlibEventCounter']
diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.txt b/tests/auto/testlib/selftests/expected_benchlibeventcounter.txt
index 773bc4cc14..67c5ab495f 100644
--- a/tests/auto/testlib/selftests/expected_benchlibeventcounter.txt
+++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_BenchlibEventCounter *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibEventCounter::initTestCase()
PASS : tst_BenchlibEventCounter::events(0)
RESULT : tst_BenchlibEventCounter::events():"0":
@@ -23,5 +23,5 @@ PASS : tst_BenchlibEventCounter::events(100000)
RESULT : tst_BenchlibEventCounter::events():"100000":
100,000 events per iteration (total: 100,000, iterations: 1)
PASS : tst_BenchlibEventCounter::cleanupTestCase()
-Totals: 9 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 9 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibEventCounter *********
diff --git a/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml b/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml
index f543e2775c..8a03b84461 100644
--- a/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml
+++ b/tests/auto/testlib/selftests/expected_benchlibeventcounter.xml
@@ -7,7 +7,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="events">
<Incident type="pass" file="" line="0">
@@ -38,11 +38,11 @@
<DataTag><![CDATA[100000]]></DataTag>
</Incident>
<BenchmarkResult metric="Events" tag="100000" value="100000" iterations="1" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_benchliboptions.lightxml b/tests/auto/testlib/selftests/expected_benchliboptions.lightxml
new file mode 100644
index 0000000000..ed7c206a61
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchliboptions.lightxml
@@ -0,0 +1,57 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="threeEvents">
+<Incident type="pass" file="" line="0" />
+<BenchmarkResult metric="Events" tag="" value="3" iterations="1" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="threeEvents">
+<Incident type="pass" file="" line="0" />
+<BenchmarkResult metric="Events" tag="" value="3" iterations="15" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="threeEvents">
+<Incident type="pass" file="" line="0" />
+<BenchmarkResult metric="Events" tag="" value="3" iterations="64" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_benchliboptions.teamcity b/tests/auto/testlib/selftests/expected_benchliboptions.teamcity
new file mode 100644
index 0000000000..6dbaa64af7
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchliboptions.teamcity
@@ -0,0 +1,24 @@
+##teamcity[testSuiteStarted name='tst_BenchlibOptions' flowId='tst_BenchlibOptions']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibOptions']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibOptions']
+##teamcity[testStarted name='threeEvents()' flowId='tst_BenchlibOptions']
+##teamcity[testFinished name='threeEvents()' flowId='tst_BenchlibOptions']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibOptions']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibOptions']
+##teamcity[testSuiteFinished name='tst_BenchlibOptions' flowId='tst_BenchlibOptions']
+##teamcity[testSuiteStarted name='tst_BenchlibFifteenIterations' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testStarted name='threeEvents()' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testFinished name='threeEvents()' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testSuiteFinished name='tst_BenchlibFifteenIterations' flowId='tst_BenchlibFifteenIterations']
+##teamcity[testSuiteStarted name='tst_BenchlibOneHundredMinimum' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testStarted name='threeEvents()' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testFinished name='threeEvents()' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibOneHundredMinimum']
+##teamcity[testSuiteFinished name='tst_BenchlibOneHundredMinimum' flowId='tst_BenchlibOneHundredMinimum']
diff --git a/tests/auto/testlib/selftests/expected_benchliboptions.txt b/tests/auto/testlib/selftests/expected_benchliboptions.txt
index 0b8ec87724..462b517933 100644
--- a/tests/auto/testlib/selftests/expected_benchliboptions.txt
+++ b/tests/auto/testlib/selftests/expected_benchliboptions.txt
@@ -1,27 +1,27 @@
********* Start testing of tst_BenchlibOptions *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibOptions::initTestCase()
PASS : tst_BenchlibOptions::threeEvents()
RESULT : tst_BenchlibOptions::threeEvents():
3 events per iteration (total: 3, iterations: 1)
PASS : tst_BenchlibOptions::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibOptions *********
********* Start testing of tst_BenchlibFifteenIterations *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibFifteenIterations::initTestCase()
PASS : tst_BenchlibFifteenIterations::threeEvents()
RESULT : tst_BenchlibFifteenIterations::threeEvents():
3.0 events per iteration (total: 45, iterations: 15)
PASS : tst_BenchlibFifteenIterations::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibFifteenIterations *********
********* Start testing of tst_BenchlibOneHundredMinimum *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibOneHundredMinimum::initTestCase()
PASS : tst_BenchlibOneHundredMinimum::threeEvents()
RESULT : tst_BenchlibOneHundredMinimum::threeEvents():
3.00 events per iteration (total: 192, iterations: 64)
PASS : tst_BenchlibOneHundredMinimum::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibOneHundredMinimum *********
diff --git a/tests/auto/testlib/selftests/expected_benchliboptions.xml b/tests/auto/testlib/selftests/expected_benchliboptions.xml
new file mode 100644
index 0000000000..45ae180889
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchliboptions.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_BenchlibOptions">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="threeEvents">
+<Incident type="pass" file="" line="0" />
+<BenchmarkResult metric="Events" tag="" value="3" iterations="1" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_BenchlibFifteenIterations">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="threeEvents">
+<Incident type="pass" file="" line="0" />
+<BenchmarkResult metric="Events" tag="" value="3" iterations="15" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_BenchlibOneHundredMinimum">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="threeEvents">
+<Incident type="pass" file="" line="0" />
+<BenchmarkResult metric="Events" tag="" value="3" iterations="64" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_benchliboptions.xunitxml b/tests/auto/testlib/selftests/expected_benchliboptions.xunitxml
new file mode 100644
index 0000000000..370d1c7c5c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchliboptions.xunitxml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_BenchlibOptions">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="threeEvents">
+ </testcase>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_BenchlibFifteenIterations">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="threeEvents">
+ </testcase>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_BenchlibOneHundredMinimum">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="threeEvents">
+ </testcase>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml b/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml
index 11296ad9c2..57076755df 100644
--- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml
+++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.lightxml
@@ -5,15 +5,15 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="threeBillionTicks">
<Incident type="pass" file="" line="0" />
-<BenchmarkResult metric="CPUTicks" tag="" value="3.00001e+09" iterations="1" />
-<Duration msecs="0"/>
+<BenchmarkResult metric="CPUTicks" tag="" value="0" iterations="1" />
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.teamcity b/tests/auto/testlib/selftests/expected_benchlibtickcounter.teamcity
new file mode 100644
index 0000000000..842d36b79c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.teamcity
@@ -0,0 +1,8 @@
+##teamcity[testSuiteStarted name='tst_BenchlibTickCounter' flowId='tst_BenchlibTickCounter']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibTickCounter']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibTickCounter']
+##teamcity[testStarted name='threeBillionTicks()' flowId='tst_BenchlibTickCounter']
+##teamcity[testFinished name='threeBillionTicks()' flowId='tst_BenchlibTickCounter']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibTickCounter']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibTickCounter']
+##teamcity[testSuiteFinished name='tst_BenchlibTickCounter' flowId='tst_BenchlibTickCounter']
diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt b/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt
index 5fd6bfb4fd..5a292bad18 100644
--- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt
+++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.txt
@@ -1,9 +1,9 @@
********* Start testing of tst_BenchlibTickCounter *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibTickCounter::initTestCase()
PASS : tst_BenchlibTickCounter::threeBillionTicks()
RESULT : tst_BenchlibTickCounter::threeBillionTicks():
- 3,000,005,772 CPU ticks per iteration (total: 3,000,005,772, iterations: 1)
+ 0 CPU ticks per iteration (total: 0, iterations: 1)
PASS : tst_BenchlibTickCounter::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibTickCounter *********
diff --git a/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml b/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml
index 3dd56b4af7..224d287e92 100644
--- a/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml
+++ b/tests/auto/testlib/selftests/expected_benchlibtickcounter.xml
@@ -7,16 +7,16 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="threeBillionTicks">
<Incident type="pass" file="" line="0" />
-<BenchmarkResult metric="CPUTicks" tag="" value="3.00002e+09" iterations="1" />
-<Duration msecs="0"/>
+<BenchmarkResult metric="CPUTicks" tag="" value="0" iterations="1" />
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml b/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml
index c75a6c944d..f0db92ebe0 100644
--- a/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml
+++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.lightxml
@@ -5,25 +5,25 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="waitForOneThousand">
<Incident type="pass" file="" line="0" />
-<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="1004" iterations="1" />
-<Duration msecs="0"/>
+<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="0" iterations="1" />
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="waitForFourThousand">
<Incident type="pass" file="" line="0" />
-<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="4004" iterations="1" />
-<Duration msecs="0"/>
+<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="0" iterations="1" />
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="qbenchmark_once">
<Incident type="pass" file="" line="0" />
<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="0" iterations="1" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.teamcity b/tests/auto/testlib/selftests/expected_benchlibwalltime.teamcity
new file mode 100644
index 0000000000..4c5d9667e7
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.teamcity
@@ -0,0 +1,12 @@
+##teamcity[testSuiteStarted name='tst_BenchlibWalltime' flowId='tst_BenchlibWalltime']
+##teamcity[testStarted name='initTestCase()' flowId='tst_BenchlibWalltime']
+##teamcity[testFinished name='initTestCase()' flowId='tst_BenchlibWalltime']
+##teamcity[testStarted name='waitForOneThousand()' flowId='tst_BenchlibWalltime']
+##teamcity[testFinished name='waitForOneThousand()' flowId='tst_BenchlibWalltime']
+##teamcity[testStarted name='waitForFourThousand()' flowId='tst_BenchlibWalltime']
+##teamcity[testFinished name='waitForFourThousand()' flowId='tst_BenchlibWalltime']
+##teamcity[testStarted name='qbenchmark_once()' flowId='tst_BenchlibWalltime']
+##teamcity[testFinished name='qbenchmark_once()' flowId='tst_BenchlibWalltime']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_BenchlibWalltime']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_BenchlibWalltime']
+##teamcity[testSuiteFinished name='tst_BenchlibWalltime' flowId='tst_BenchlibWalltime']
diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.txt b/tests/auto/testlib/selftests/expected_benchlibwalltime.txt
index fd53b0a40e..ad86a994db 100644
--- a/tests/auto/testlib/selftests/expected_benchlibwalltime.txt
+++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.txt
@@ -1,15 +1,15 @@
********* Start testing of tst_BenchlibWalltime *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_BenchlibWalltime::initTestCase()
PASS : tst_BenchlibWalltime::waitForOneThousand()
RESULT : tst_BenchlibWalltime::waitForOneThousand():
- 1,006 msecs per iteration (total: 1,006, iterations: 1)
+ 0 msecs per iteration (total: 0, iterations: 1)
PASS : tst_BenchlibWalltime::waitForFourThousand()
RESULT : tst_BenchlibWalltime::waitForFourThousand():
- 4,008 msecs per iteration (total: 4,008, iterations: 1)
+ 0 msecs per iteration (total: 0, iterations: 1)
PASS : tst_BenchlibWalltime::qbenchmark_once()
RESULT : tst_BenchlibWalltime::qbenchmark_once():
0 msecs per iteration (total: 0, iterations: 1)
PASS : tst_BenchlibWalltime::cleanupTestCase()
-Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibWalltime *********
diff --git a/tests/auto/testlib/selftests/expected_benchlibwalltime.xml b/tests/auto/testlib/selftests/expected_benchlibwalltime.xml
index a2f0edecc6..bb71d00218 100644
--- a/tests/auto/testlib/selftests/expected_benchlibwalltime.xml
+++ b/tests/auto/testlib/selftests/expected_benchlibwalltime.xml
@@ -7,26 +7,26 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="waitForOneThousand">
<Incident type="pass" file="" line="0" />
-<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="1008" iterations="1" />
-<Duration msecs="0"/>
+<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="0" iterations="1" />
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="waitForFourThousand">
<Incident type="pass" file="" line="0" />
-<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="4002" iterations="1" />
-<Duration msecs="0"/>
+<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="0" iterations="1" />
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="qbenchmark_once">
<Incident type="pass" file="" line="0" />
<BenchmarkResult metric="WalltimeMilliseconds" tag="" value="0" iterations="1" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_blacklisted.lightxml b/tests/auto/testlib/selftests/expected_blacklisted.lightxml
new file mode 100644
index 0000000000..4193628e7c
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_blacklisted.lightxml
@@ -0,0 +1,66 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="pass">
+<Incident type="bpass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="skip">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This test should SKIP]]></Description>
+</Message>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="fail">
+<Incident type="bfail" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (This test should BFAIL)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xfail">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This test should XFAIL then BFAIL]]></Description>
+</Incident>
+<Incident type="bpass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xpass">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA['true' returned TRUE unexpectedly. (This test should XPASS, blacklist ignored for XPASS)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="messages">
+<Message type="qwarn" file="" line="0">
+ <Description><![CDATA[This is a warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qdebug" file="" line="0">
+ <Description><![CDATA[This is a debug message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="system" file="" line="0">
+ <Description><![CDATA[This is a critical message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qinfo" file="" line="0">
+ <Description><![CDATA[This is an info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qfatal" file="" line="0">
+ <Description><![CDATA[This is a fatal error message that should still appear in silent test output]]></Description>
+</Message>
+<Incident type="bfail" file="Unknown file" line="0">
+ <Description><![CDATA[Received a fatal error.]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_blacklisted.teamcity b/tests/auto/testlib/selftests/expected_blacklisted.teamcity
new file mode 100644
index 0000000000..8180a7ce76
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_blacklisted.teamcity
@@ -0,0 +1,18 @@
+##teamcity[testSuiteStarted name='tst_Blacklisted' flowId='tst_Blacklisted']
+##teamcity[testStarted name='initTestCase()' flowId='tst_Blacklisted']
+##teamcity[testFinished name='initTestCase()' flowId='tst_Blacklisted']
+##teamcity[testStarted name='pass()' flowId='tst_Blacklisted']
+##teamcity[testFinished name='pass()' flowId='tst_Blacklisted']
+##teamcity[testIgnored name='skip()' message='This test should SKIP |[Loc: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)|]' flowId='tst_Blacklisted']
+##teamcity[testStarted name='fail()' flowId='tst_Blacklisted']
+##teamcity[testFinished name='fail()' flowId='tst_Blacklisted']
+##teamcity[testStarted name='xfail()' flowId='tst_Blacklisted']
+##teamcity[testStdOut name='xfail()' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)|]: This test should XFAIL then BFAIL' flowId='tst_Blacklisted']
+##teamcity[testFinished name='xfail()' flowId='tst_Blacklisted']
+##teamcity[testStarted name='xpass()' flowId='tst_Blacklisted']
+##teamcity[testFailed name='xpass()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)|]' details='|'true|' returned TRUE unexpectedly. (This test should XPASS, blacklist ignored for XPASS)' flowId='tst_Blacklisted']
+##teamcity[testFinished name='xpass()' flowId='tst_Blacklisted']
+##teamcity[testStarted name='messages()' flowId='tst_Blacklisted']
+##teamcity[testStdOut name='messages()' out='QWARN: This is a warning that should not appear in silent test output|nWARNING |[Loc: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)|]: This is an internal testlib warning that should not appear in silent test output|nQDEBUG: This is a debug message that should not appear in silent test output|nQSYSTEM: This is a critical message that should not appear in silent test output|nQINFO: This is an info message that should not appear in silent test output|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)|]: This is an internal testlib info message that should not appear in silent test output|nQFATAL: This is a fatal error message that should still appear in silent test output' flowId='tst_Blacklisted']
+##teamcity[testFinished name='messages()' flowId='tst_Blacklisted']
+##teamcity[testSuiteFinished name='tst_Blacklisted' flowId='tst_Blacklisted']
diff --git a/tests/auto/testlib/selftests/expected_blacklisted.txt b/tests/auto/testlib/selftests/expected_blacklisted.txt
index 3afd93b0cc..6fa2403b59 100644
--- a/tests/auto/testlib/selftests/expected_blacklisted.txt
+++ b/tests/auto/testlib/selftests/expected_blacklisted.txt
@@ -1,26 +1,26 @@
********* Start testing of tst_Blacklisted *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Blacklisted::initTestCase()
BPASS : tst_Blacklisted::pass()
SKIP : tst_Blacklisted::skip() This test should SKIP
- Loc: [tst_blacklisted.cpp(62)]
+ Loc: [qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)]
BFAIL : tst_Blacklisted::fail() 'false' returned FALSE. (This test should BFAIL)
- Loc: [tst_blacklisted.cpp(67)]
+ Loc: [qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)]
XFAIL : tst_Blacklisted::xfail() This test should XFAIL then BFAIL
- Loc: [tst_blacklisted.cpp(73)]
+ Loc: [qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)]
BPASS : tst_Blacklisted::xfail()
XPASS : tst_Blacklisted::xpass() 'true' returned TRUE unexpectedly. (This test should XPASS, blacklist ignored for XPASS)
- Loc: [tst_blacklisted.cpp(79)]
+ Loc: [qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)]
QWARN : tst_Blacklisted::messages() This is a warning that should not appear in silent test output
WARNING: tst_Blacklisted::messages() This is an internal testlib warning that should not appear in silent test output
- Loc: [tst_blacklisted.cpp(85)]
+ Loc: [qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)]
QDEBUG : tst_Blacklisted::messages() This is a debug message that should not appear in silent test output
QSYSTEM: tst_Blacklisted::messages() This is a critical message that should not appear in silent test output
QINFO : tst_Blacklisted::messages() This is an info message that should not appear in silent test output
INFO : tst_Blacklisted::messages() This is an internal testlib info message that should not appear in silent test output
- Loc: [tst_blacklisted.cpp(89)]
+ Loc: [qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp(0)]
QFATAL : tst_Blacklisted::messages() This is a fatal error message that should still appear in silent test output
BFAIL : tst_Blacklisted::messages() Received a fatal error.
Loc: [Unknown file(0)]
-Totals: 1 passed, 1 failed, 1 skipped, 4 blacklisted
+Totals: 1 passed, 1 failed, 1 skipped, 4 blacklisted, 0ms
********* Finished testing of tst_Blacklisted *********
diff --git a/tests/auto/testlib/selftests/expected_blacklisted.xml b/tests/auto/testlib/selftests/expected_blacklisted.xml
new file mode 100644
index 0000000000..443bc6b199
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_blacklisted.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Blacklisted">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="pass">
+<Incident type="bpass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="skip">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This test should SKIP]]></Description>
+</Message>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="fail">
+<Incident type="bfail" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (This test should BFAIL)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xfail">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This test should XFAIL then BFAIL]]></Description>
+</Incident>
+<Incident type="bpass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xpass">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA['true' returned TRUE unexpectedly. (This test should XPASS, blacklist ignored for XPASS)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="messages">
+<Message type="qwarn" file="" line="0">
+ <Description><![CDATA[This is a warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qdebug" file="" line="0">
+ <Description><![CDATA[This is a debug message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="system" file="" line="0">
+ <Description><![CDATA[This is a critical message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qinfo" file="" line="0">
+ <Description><![CDATA[This is an info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qfatal" file="" line="0">
+ <Description><![CDATA[This is a fatal error message that should still appear in silent test output]]></Description>
+</Message>
+<Incident type="bfail" file="Unknown file" line="0">
+ <Description><![CDATA[Received a fatal error.]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_blacklisted.xunitxml b/tests/auto/testlib/selftests/expected_blacklisted.xunitxml
new file mode 100644
index 0000000000..2752bc18b4
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_blacklisted.xunitxml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="9" failures="3" tests="7" name="tst_Blacklisted">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="bpass" name="pass"/>
+ <testcase name="skip">
+ <!-- message="This test should SKIP" type="skip" -->
+ </testcase>
+ <testcase result="bfail" name="fail"/>
+ <testcase result="xfail" name="xfail">
+ <!-- message="This test should XFAIL then BFAIL" type="info" -->
+ </testcase>
+ <testcase result="xpass" name="xpass">
+ <failure message="&apos;true&apos; returned TRUE unexpectedly. (This test should XPASS, blacklist ignored for XPASS)" result="xpass"/>
+ </testcase>
+ <testcase result="bfail" name="messages">
+ <!-- message="This is a warning that should not appear in silent test output" type="qwarn" -->
+ <!-- message="This is an internal testlib warning that should not appear in silent test output" type="warn" -->
+ <!-- message="This is a debug message that should not appear in silent test output" type="qdebug" -->
+ <!-- message="This is a critical message that should not appear in silent test output" type="system" -->
+ <!-- message="This is an info message that should not appear in silent test output" type="qinfo" -->
+ <!-- message="This is an internal testlib info message that should not appear in silent test output" type="info" -->
+ <!-- message="This is a fatal error message that should still appear in silent test output" type="qfatal" -->
+ </testcase>
+ <system-err>
+<![CDATA[This test should SKIP]]>
+<![CDATA[This test should XFAIL then BFAIL]]>
+<![CDATA[This is a warning that should not appear in silent test output]]>
+<![CDATA[This is an internal testlib warning that should not appear in silent test output]]>
+<![CDATA[This is a debug message that should not appear in silent test output]]>
+<![CDATA[This is a critical message that should not appear in silent test output]]>
+<![CDATA[This is an info message that should not appear in silent test output]]>
+<![CDATA[This is an internal testlib info message that should not appear in silent test output]]>
+<![CDATA[This is a fatal error message that should still appear in silent test output]]>
+ </system-err>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.lightxml b/tests/auto/testlib/selftests/expected_commandlinedata.lightxml
index 894ae7ae23..89016c21aa 100644
--- a/tests/auto/testlib/selftests/expected_commandlinedata.lightxml
+++ b/tests/auto/testlib/selftests/expected_commandlinedata.lightxml
@@ -5,58 +5,58 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTablePasses">
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data2]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data2]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data3]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data3]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data4]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data4]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data5]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTablePasses">
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.teamcity b/tests/auto/testlib/selftests/expected_commandlinedata.teamcity
index 13c0b44320..a8ec263c18 100644
--- a/tests/auto/testlib/selftests/expected_commandlinedata.teamcity
+++ b/tests/auto/testlib/selftests/expected_commandlinedata.teamcity
@@ -2,22 +2,22 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_DataTable']
##teamcity[testFinished name='initTestCase()' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data1)' flowId='tst_DataTable']
-##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data1)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)' flowId='tst_DataTable']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)|]: QVERIFY(test)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data1)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data2)' flowId='tst_DataTable']
-##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data2)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)' flowId='tst_DataTable']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)|]: QVERIFY(test)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data2)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data3)' flowId='tst_DataTable']
-##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data3)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)' flowId='tst_DataTable']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data3)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)|]: QVERIFY(test)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data3)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data4)' flowId='tst_DataTable']
-##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data4)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)' flowId='tst_DataTable']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data4)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)|]: QVERIFY(test)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data4)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data5)' flowId='tst_DataTable']
-##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data5)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)' flowId='tst_DataTable']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data5)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)|]: QVERIFY(test)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data5)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data1)' flowId='tst_DataTable']
-##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data1)' out='INFO |[Loc: tst_commandlinedata.cpp(57)|]: QVERIFY(test)' flowId='tst_DataTable']
+##teamcity[testStdOut name='fiveTablePasses(fiveTablePasses_data1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)|]: QVERIFY(test)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data1)' flowId='tst_DataTable']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_DataTable']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_DataTable']
diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.txt b/tests/auto/testlib/selftests/expected_commandlinedata.txt
index 94861416d7..bc86235918 100644
--- a/tests/auto/testlib/selftests/expected_commandlinedata.txt
+++ b/tests/auto/testlib/selftests/expected_commandlinedata.txt
@@ -1,28 +1,28 @@
********* Start testing of tst_DataTable *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
INFO : tst_DataTable::initTestCase() entering
PASS : tst_DataTable::initTestCase()
INFO : tst_DataTable::fiveTablePasses() entering
INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data1) QVERIFY(test)
- Loc: [tst_commandlinedata.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)]
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data1)
INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data2) QVERIFY(test)
- Loc: [tst_commandlinedata.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)]
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data2)
INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data3) QVERIFY(test)
- Loc: [tst_commandlinedata.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)]
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data3)
INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data4) QVERIFY(test)
- Loc: [tst_commandlinedata.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)]
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data4)
INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data5) QVERIFY(test)
- Loc: [tst_commandlinedata.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)]
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data5)
INFO : tst_DataTable::fiveTablePasses() entering
INFO : tst_DataTable::fiveTablePasses(fiveTablePasses_data1) QVERIFY(test)
- Loc: [tst_commandlinedata.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp(0)]
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data1)
INFO : tst_DataTable::cleanupTestCase() entering
PASS : tst_DataTable::cleanupTestCase()
-Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_DataTable *********
diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.xml b/tests/auto/testlib/selftests/expected_commandlinedata.xml
index b2aa98f6a7..9597a3e8a0 100644
--- a/tests/auto/testlib/selftests/expected_commandlinedata.xml
+++ b/tests/auto/testlib/selftests/expected_commandlinedata.xml
@@ -7,59 +7,59 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTablePasses">
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data2]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data2]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data3]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data3]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data4]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data4]]></DataTag>
</Incident>
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data5]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTablePasses">
-<Message type="info" file="tst_commandlinedata.cpp" line="65">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
<Description><![CDATA[QVERIFY(test)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data1]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_counting.lightxml b/tests/auto/testlib/selftests/expected_counting.lightxml
index 836c35fb85..68730a3293 100644
--- a/tests/auto/testlib/selftests/expected_counting.lightxml
+++ b/tests/auto/testlib/selftests/expected_counting.lightxml
@@ -5,7 +5,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassPass">
<Incident type="pass" file="" line="0">
@@ -14,104 +14,104 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassSkip">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassFail">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipPass">
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipSkip">
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipFail">
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailPass">
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailSkip">
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailFail">
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_counting.cpp" line="234">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in init()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInCleanup">
<Incident type="pass" file="" line="0">
@@ -121,27 +121,27 @@
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[This test function should execute and then QFAIL in cleanup()]]></Description>
</Message>
-<Incident type="fail" file="tst_counting.cpp" line="242">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in cleanup()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Message type="skip" file="tst_counting.cpp" line="236">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in init()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInCleanup">
<Incident type="pass" file="" line="0">
@@ -151,17 +151,17 @@
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[This test function should execute and then QSKIP in cleanup()]]></Description>
</Message>
-<Message type="skip" file="tst_counting.cpp" line="244">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in cleanup()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_counting.teamcity b/tests/auto/testlib/selftests/expected_counting.teamcity
index 705d42a90f..5ceaf155d8 100644
--- a/tests/auto/testlib/selftests/expected_counting.teamcity
+++ b/tests/auto/testlib/selftests/expected_counting.teamcity
@@ -7,59 +7,59 @@
##teamcity[testFinished name='testPassPass(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testPassSkip(row 1)' flowId='tst_Counting']
##teamcity[testFinished name='testPassSkip(row 1)' flowId='tst_Counting']
-##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testPassFail(row 1)' flowId='tst_Counting']
##teamcity[testFinished name='testPassFail(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testPassFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testPassFail(row 2)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipPass(row 2)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipPass(row 2)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: tst_counting.cpp(110)|]' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: tst_counting.cpp(110)|]' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testSkipFail(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailPass(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailPass(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testFailPass(row 2)' flowId='tst_Counting']
##teamcity[testFinished name='testFailPass(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailSkip(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailSkip(row 1)' flowId='tst_Counting']
-##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testFailFail(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailFail(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testFailFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailFail(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(before)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(before)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(fail)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: tst_counting.cpp(226)|]' details='Fail in init()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='Fail in init()' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(fail)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(after)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(after)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(before)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(before)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(fail)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: tst_counting.cpp(234)|]' details='Fail in cleanup()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='Fail in cleanup()' flowId='tst_Counting']
##teamcity[testStdOut name='testFailInCleanup(fail)' out='QDEBUG: This test function should execute and then QFAIL in cleanup()' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(fail)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(after)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(after)' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInInit(before)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInInit(before)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: tst_counting.cpp(228)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInInit(after)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInInit(after)' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInCleanup(before)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInCleanup(before)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: tst_counting.cpp(236)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInCleanup(after)' flowId='tst_Counting']
##teamcity[testStdOut name='testSkipInCleanup(after)' out='QDEBUG: This test function should execute and then QSKIP in cleanup()' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInCleanup(after)' flowId='tst_Counting']
diff --git a/tests/auto/testlib/selftests/expected_counting.txt b/tests/auto/testlib/selftests/expected_counting.txt
index 32368760d6..027e5b2c6e 100644
--- a/tests/auto/testlib/selftests/expected_counting.txt
+++ b/tests/auto/testlib/selftests/expected_counting.txt
@@ -1,54 +1,54 @@
********* Start testing of tst_Counting *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Counting::initTestCase()
PASS : tst_Counting::testPassPass(row 1)
PASS : tst_Counting::testPassPass(row 2)
PASS : tst_Counting::testPassSkip(row 1)
SKIP : tst_Counting::testPassSkip(row 2) Skipping
- Loc: [tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testPassFail(row 1)
FAIL! : tst_Counting::testPassFail(row 2) 'false' returned FALSE. ()
- Loc: [tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testSkipPass(row 1) Skipping
- Loc: [tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipPass(row 2)
SKIP : tst_Counting::testSkipSkip(row 1) Skipping
- Loc: [tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testSkipSkip(row 2) Skipping
- Loc: [tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testSkipFail(row 1) Skipping
- Loc: [tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testSkipFail(row 2) 'false' returned FALSE. ()
- Loc: [tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailPass(row 1) 'false' returned FALSE. ()
- Loc: [tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailPass(row 2)
FAIL! : tst_Counting::testFailSkip(row 1) 'false' returned FALSE. ()
- Loc: [tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testFailSkip(row 2) Skipping
- Loc: [tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailFail(row 1) 'false' returned FALSE. ()
- Loc: [tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailFail(row 2) 'false' returned FALSE. ()
- Loc: [tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInInit(before)
FAIL! : tst_Counting::testFailInInit(fail) Fail in init()
- Loc: [tst_counting.cpp(234)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInInit(after)
PASS : tst_Counting::testFailInCleanup(before)
QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup()
FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup()
- Loc: [tst_counting.cpp(242)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInCleanup(after)
PASS : tst_Counting::testSkipInInit(before)
SKIP : tst_Counting::testSkipInInit(skip) Skip in init()
- Loc: [tst_counting.cpp(236)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipInInit(after)
PASS : tst_Counting::testSkipInCleanup(before)
QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup()
SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup()
- Loc: [tst_counting.cpp(244)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipInCleanup(after)
PASS : tst_Counting::cleanupTestCase()
-Totals: 16 passed, 8 failed, 8 skipped, 0 blacklisted
+Totals: 16 passed, 8 failed, 8 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Counting *********
diff --git a/tests/auto/testlib/selftests/expected_counting.xml b/tests/auto/testlib/selftests/expected_counting.xml
index 892fd762c6..841a49c30d 100644
--- a/tests/auto/testlib/selftests/expected_counting.xml
+++ b/tests/auto/testlib/selftests/expected_counting.xml
@@ -7,7 +7,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassPass">
<Incident type="pass" file="" line="0">
@@ -16,104 +16,104 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassSkip">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassFail">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipPass">
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipSkip">
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipFail">
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailPass">
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailSkip">
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="skip" file="tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailFail">
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_counting.cpp" line="234">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in init()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInCleanup">
<Incident type="pass" file="" line="0">
@@ -123,27 +123,27 @@
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[This test function should execute and then QFAIL in cleanup()]]></Description>
</Message>
-<Incident type="fail" file="tst_counting.cpp" line="242">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in cleanup()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Message type="skip" file="tst_counting.cpp" line="236">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in init()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInCleanup">
<Incident type="pass" file="" line="0">
@@ -153,18 +153,18 @@
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[This test function should execute and then QSKIP in cleanup()]]></Description>
</Message>
-<Message type="skip" file="tst_counting.cpp" line="244">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in cleanup()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_datatable.lightxml b/tests/auto/testlib/selftests/expected_datatable.lightxml
index c14a6a1940..b4378ea887 100644
--- a/tests/auto/testlib/selftests/expected_datatable.lightxml
+++ b/tests/auto/testlib/selftests/expected_datatable.lightxml
@@ -5,15 +5,15 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="singleTestFunction1">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="singleTestFunction2">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTablePasses">
<Incident type="pass" file="" line="0">
@@ -31,33 +31,33 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data 5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTableFailures">
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 1]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 2]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 3]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 4]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 5]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="startsWithFailure">
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[startsWithFailure_data 1]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
@@ -73,7 +73,7 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[startsWithFailure_data 5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="endsWithFailure">
<Incident type="pass" file="" line="0">
@@ -88,11 +88,11 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[endsWithFailure 4]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[endsWithFailure 5]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failureInMiddle">
<Incident type="pass" file="" line="0">
@@ -101,7 +101,7 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[failureInMiddle_data 2]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[failureInMiddle_data 3]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
@@ -111,33 +111,33 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[failureInMiddle_data 5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveIsolatedFailures">
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 1]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 2]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 3]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 4]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 5]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_datatable.teamcity b/tests/auto/testlib/selftests/expected_datatable.teamcity
index 9df9dd2a36..0b52e153e2 100644
--- a/tests/auto/testlib/selftests/expected_datatable.teamcity
+++ b/tests/auto/testlib/selftests/expected_datatable.teamcity
@@ -16,22 +16,22 @@
##teamcity[testStarted name='fiveTablePasses(fiveTablePasses_data 5)' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTablePasses(fiveTablePasses_data 5)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 1)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 1)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 1)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 2)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 2)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 2)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 3)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 3)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 3)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 4)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 4)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 4)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 4)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveTableFailures(fiveTableFailures_data 5)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 5)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveTableFailures(fiveTableFailures_data 5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveTableFailures(fiveTableFailures_data 5)' flowId='tst_DataTable']
##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 1)' flowId='tst_DataTable']
-##teamcity[testFailed name='startsWithFailure(startsWithFailure_data 1)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='startsWithFailure(startsWithFailure_data 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 1)' flowId='tst_DataTable']
##teamcity[testStarted name='startsWithFailure(startsWithFailure_data 2)' flowId='tst_DataTable']
##teamcity[testFinished name='startsWithFailure(startsWithFailure_data 2)' flowId='tst_DataTable']
@@ -50,33 +50,33 @@
##teamcity[testStarted name='endsWithFailure(endsWithFailure 4)' flowId='tst_DataTable']
##teamcity[testFinished name='endsWithFailure(endsWithFailure 4)' flowId='tst_DataTable']
##teamcity[testStarted name='endsWithFailure(endsWithFailure 5)' flowId='tst_DataTable']
-##teamcity[testFailed name='endsWithFailure(endsWithFailure 5)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='endsWithFailure(endsWithFailure 5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='endsWithFailure(endsWithFailure 5)' flowId='tst_DataTable']
##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 1)' flowId='tst_DataTable']
##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 1)' flowId='tst_DataTable']
##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 2)' flowId='tst_DataTable']
##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 2)' flowId='tst_DataTable']
##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 3)' flowId='tst_DataTable']
-##teamcity[testFailed name='failureInMiddle(failureInMiddle_data 3)' message='Failure! |[Loc: tst_datatable.cpp(83)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='failureInMiddle(failureInMiddle_data 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 3)' flowId='tst_DataTable']
##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 4)' flowId='tst_DataTable']
##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 4)' flowId='tst_DataTable']
##teamcity[testStarted name='failureInMiddle(failureInMiddle_data 5)' flowId='tst_DataTable']
##teamcity[testFinished name='failureInMiddle(failureInMiddle_data 5)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 1)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 2)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 3)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 4)' flowId='tst_DataTable']
##teamcity[testStarted name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)' flowId='tst_DataTable']
-##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)' message='Failure! |[Loc: tst_datatable.cpp(165)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
+##teamcity[testFailed name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)|]' details='|'!test|' returned FALSE. ()' flowId='tst_DataTable']
##teamcity[testFinished name='fiveIsolatedFailures(fiveIsolatedFailures_data 5)' flowId='tst_DataTable']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_DataTable']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_DataTable']
diff --git a/tests/auto/testlib/selftests/expected_datatable.txt b/tests/auto/testlib/selftests/expected_datatable.txt
index b1ace3be01..8d24a55a55 100644
--- a/tests/auto/testlib/selftests/expected_datatable.txt
+++ b/tests/auto/testlib/selftests/expected_datatable.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_DataTable *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_DataTable::initTestCase()
PASS : tst_DataTable::singleTestFunction1()
PASS : tst_DataTable::singleTestFunction2()
@@ -9,17 +9,17 @@ PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data 3)
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data 4)
PASS : tst_DataTable::fiveTablePasses(fiveTablePasses_data 5)
FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 1) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 2) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 3) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 4) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveTableFailures(fiveTableFailures_data 5) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::startsWithFailure(startsWithFailure_data 1) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
PASS : tst_DataTable::startsWithFailure(startsWithFailure_data 2)
PASS : tst_DataTable::startsWithFailure(startsWithFailure_data 3)
PASS : tst_DataTable::startsWithFailure(startsWithFailure_data 4)
@@ -29,23 +29,23 @@ PASS : tst_DataTable::endsWithFailure(endsWithFailure 2)
PASS : tst_DataTable::endsWithFailure(endsWithFailure 3)
PASS : tst_DataTable::endsWithFailure(endsWithFailure 4)
FAIL! : tst_DataTable::endsWithFailure(endsWithFailure 5) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 1)
PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 2)
FAIL! : tst_DataTable::failureInMiddle(failureInMiddle_data 3) 'test' returned FALSE. ()
- Loc: [tst_datatable.cpp(91)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 4)
PASS : tst_DataTable::failureInMiddle(failureInMiddle_data 5)
FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 1) '!test' returned FALSE. ()
- Loc: [tst_datatable.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 2) '!test' returned FALSE. ()
- Loc: [tst_datatable.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 3) '!test' returned FALSE. ()
- Loc: [tst_datatable.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 4) '!test' returned FALSE. ()
- Loc: [tst_datatable.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
FAIL! : tst_DataTable::fiveIsolatedFailures(fiveIsolatedFailures_data 5) '!test' returned FALSE. ()
- Loc: [tst_datatable.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp(0)]
PASS : tst_DataTable::cleanupTestCase()
-Totals: 21 passed, 13 failed, 0 skipped, 0 blacklisted
+Totals: 21 passed, 13 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_DataTable *********
diff --git a/tests/auto/testlib/selftests/expected_datatable.xml b/tests/auto/testlib/selftests/expected_datatable.xml
index 297cb0d5de..6fefe4eed1 100644
--- a/tests/auto/testlib/selftests/expected_datatable.xml
+++ b/tests/auto/testlib/selftests/expected_datatable.xml
@@ -7,15 +7,15 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="singleTestFunction1">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="singleTestFunction2">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTablePasses">
<Incident type="pass" file="" line="0">
@@ -33,33 +33,33 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[fiveTablePasses_data 5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveTableFailures">
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 1]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 2]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 3]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 4]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveTableFailures_data 5]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="startsWithFailure">
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[startsWithFailure_data 1]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
@@ -75,7 +75,7 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[startsWithFailure_data 5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="endsWithFailure">
<Incident type="pass" file="" line="0">
@@ -90,11 +90,11 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[endsWithFailure 4]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[endsWithFailure 5]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failureInMiddle">
<Incident type="pass" file="" line="0">
@@ -103,7 +103,7 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[failureInMiddle_data 2]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="91">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[failureInMiddle_data 3]]></DataTag>
<Description><![CDATA['test' returned FALSE. ()]]></Description>
</Incident>
@@ -113,34 +113,34 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[failureInMiddle_data 5]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fiveIsolatedFailures">
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 1]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 2]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 3]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 4]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="tst_datatable.cpp" line="173">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datatable/tst_datatable.cpp" line="0">
<DataTag><![CDATA[fiveIsolatedFailures_data 5]]></DataTag>
<Description><![CDATA['!test' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_datetime.lightxml b/tests/auto/testlib/selftests/expected_datetime.lightxml
index 1aeac37e42..c7c7758b8b 100644
--- a/tests/auto/testlib/selftests/expected_datetime.lightxml
+++ b/tests/auto/testlib/selftests/expected_datetime.lightxml
@@ -5,27 +5,27 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="dateTime">
-<Incident type="fail" file="tst_datetime.cpp" line="65">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (local): 2000/05/03 04:03:04.000[UTC+00:02]
Expected (utc) : 2000/05/03 04:03:04.000[UTC]]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="qurl">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[empty urls]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_datetime.cpp" line="73">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp" line="0">
<DataTag><![CDATA[empty rhs]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (operandA): http://example.com
Expected (operandB): Invalid URL: ]]></Description>
</Incident>
-<Incident type="fail" file="tst_datetime.cpp" line="73">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp" line="0">
<DataTag><![CDATA[empty lhs]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (operandA): Invalid URL:
@@ -34,10 +34,10 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[same urls]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_datetime.teamcity b/tests/auto/testlib/selftests/expected_datetime.teamcity
index a2bc95cd2f..be5612eb0d 100644
--- a/tests/auto/testlib/selftests/expected_datetime.teamcity
+++ b/tests/auto/testlib/selftests/expected_datetime.teamcity
@@ -2,15 +2,15 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_DateTime']
##teamcity[testFinished name='initTestCase()' flowId='tst_DateTime']
##teamcity[testStarted name='dateTime()' flowId='tst_DateTime']
-##teamcity[testFailed name='dateTime()' message='Failure! |[Loc: tst_datetime.cpp(57)|]' details='Compared values are not the same|n Actual (local): 2000/05/03 04:03:04.000|[UTC+00:02|]|n Expected (utc) : 2000/05/03 04:03:04.000|[UTC|]' flowId='tst_DateTime']
+##teamcity[testFailed name='dateTime()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp(0)|]' details='Compared values are not the same|n Actual (local): 2000/05/03 04:03:04.000|[UTC+00:02|]|n Expected (utc) : 2000/05/03 04:03:04.000|[UTC|]' flowId='tst_DateTime']
##teamcity[testFinished name='dateTime()' flowId='tst_DateTime']
##teamcity[testStarted name='qurl(empty urls)' flowId='tst_DateTime']
##teamcity[testFinished name='qurl(empty urls)' flowId='tst_DateTime']
##teamcity[testStarted name='qurl(empty rhs)' flowId='tst_DateTime']
-##teamcity[testFailed name='qurl(empty rhs)' message='Failure! |[Loc: tst_datetime.cpp(65)|]' details='Compared values are not the same|n Actual (operandA): http://example.com|n Expected (operandB): Invalid URL:' flowId='tst_DateTime']
+##teamcity[testFailed name='qurl(empty rhs)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp(0)|]' details='Compared values are not the same|n Actual (operandA): http://example.com|n Expected (operandB): Invalid URL:' flowId='tst_DateTime']
##teamcity[testFinished name='qurl(empty rhs)' flowId='tst_DateTime']
##teamcity[testStarted name='qurl(empty lhs)' flowId='tst_DateTime']
-##teamcity[testFailed name='qurl(empty lhs)' message='Failure! |[Loc: tst_datetime.cpp(65)|]' details='Compared values are not the same|n Actual (operandA): Invalid URL: |n Expected (operandB): http://example.com' flowId='tst_DateTime']
+##teamcity[testFailed name='qurl(empty lhs)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp(0)|]' details='Compared values are not the same|n Actual (operandA): Invalid URL: |n Expected (operandB): http://example.com' flowId='tst_DateTime']
##teamcity[testFinished name='qurl(empty lhs)' flowId='tst_DateTime']
##teamcity[testStarted name='qurl(same urls)' flowId='tst_DateTime']
##teamcity[testFinished name='qurl(same urls)' flowId='tst_DateTime']
diff --git a/tests/auto/testlib/selftests/expected_datetime.txt b/tests/auto/testlib/selftests/expected_datetime.txt
index c29fa050a1..387e8e93a5 100644
--- a/tests/auto/testlib/selftests/expected_datetime.txt
+++ b/tests/auto/testlib/selftests/expected_datetime.txt
@@ -1,20 +1,20 @@
********* Start testing of tst_DateTime *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_DateTime::initTestCase()
FAIL! : tst_DateTime::dateTime() Compared values are not the same
Actual (local): 2000/05/03 04:03:04.000[UTC+00:02]
Expected (utc) : 2000/05/03 04:03:04.000[UTC]
- Loc: [tst_datetime.cpp(65)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp(0)]
PASS : tst_DateTime::qurl(empty urls)
FAIL! : tst_DateTime::qurl(empty rhs) Compared values are not the same
Actual (operandA): http://example.com
Expected (operandB): Invalid URL:
- Loc: [tst_datetime.cpp(73)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp(0)]
FAIL! : tst_DateTime::qurl(empty lhs) Compared values are not the same
Actual (operandA): Invalid URL:
Expected (operandB): http://example.com
- Loc: [tst_datetime.cpp(73)]
+ Loc: [qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp(0)]
PASS : tst_DateTime::qurl(same urls)
PASS : tst_DateTime::cleanupTestCase()
-Totals: 4 passed, 3 failed, 0 skipped, 0 blacklisted
+Totals: 4 passed, 3 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_DateTime *********
diff --git a/tests/auto/testlib/selftests/expected_datetime.xml b/tests/auto/testlib/selftests/expected_datetime.xml
index 4c5bb0525b..910388502a 100644
--- a/tests/auto/testlib/selftests/expected_datetime.xml
+++ b/tests/auto/testlib/selftests/expected_datetime.xml
@@ -7,27 +7,27 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="dateTime">
-<Incident type="fail" file="tst_datetime.cpp" line="65">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (local): 2000/05/03 04:03:04.000[UTC+00:02]
Expected (utc) : 2000/05/03 04:03:04.000[UTC]]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="qurl">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[empty urls]]></DataTag>
</Incident>
-<Incident type="fail" file="tst_datetime.cpp" line="73">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp" line="0">
<DataTag><![CDATA[empty rhs]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (operandA): http://example.com
Expected (operandB): Invalid URL: ]]></Description>
</Incident>
-<Incident type="fail" file="tst_datetime.cpp" line="73">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/datetime/tst_datetime.cpp" line="0">
<DataTag><![CDATA[empty lhs]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (operandA): Invalid URL:
@@ -36,11 +36,11 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[same urls]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_differentexec.lightxml b/tests/auto/testlib/selftests/expected_differentexec.lightxml
new file mode 100644
index 0000000000..30ee50bc08
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_differentexec.lightxml
@@ -0,0 +1,21 @@
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestB *********
+Config: Using QtTest library
+PASS : tst_TestB::initTestCase()
+PASS : tst_TestB::slotName()
+PASS : tst_TestB::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestB *********
diff --git a/tests/auto/testlib/selftests/expected_differentexec.teamcity b/tests/auto/testlib/selftests/expected_differentexec.teamcity
new file mode 100644
index 0000000000..30ee50bc08
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_differentexec.teamcity
@@ -0,0 +1,21 @@
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestB *********
+Config: Using QtTest library
+PASS : tst_TestB::initTestCase()
+PASS : tst_TestB::slotName()
+PASS : tst_TestB::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestB *********
diff --git a/tests/auto/testlib/selftests/expected_differentexec.txt b/tests/auto/testlib/selftests/expected_differentexec.txt
index acaf556c9b..30ee50bc08 100644
--- a/tests/auto/testlib/selftests/expected_differentexec.txt
+++ b/tests/auto/testlib/selftests/expected_differentexec.txt
@@ -1,21 +1,21 @@
********* Start testing of tst_TestA *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_TestA::initTestCase()
PASS : tst_TestA::slotName()
PASS : tst_TestA::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_TestA *********
********* Start testing of tst_TestA *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_TestA::initTestCase()
PASS : tst_TestA::slotName()
PASS : tst_TestA::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_TestA *********
********* Start testing of tst_TestB *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_TestB::initTestCase()
PASS : tst_TestB::slotName()
PASS : tst_TestB::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_TestB *********
diff --git a/tests/auto/testlib/selftests/expected_differentexec.xml b/tests/auto/testlib/selftests/expected_differentexec.xml
new file mode 100644
index 0000000000..30ee50bc08
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_differentexec.xml
@@ -0,0 +1,21 @@
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestB *********
+Config: Using QtTest library
+PASS : tst_TestB::initTestCase()
+PASS : tst_TestB::slotName()
+PASS : tst_TestB::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestB *********
diff --git a/tests/auto/testlib/selftests/expected_differentexec.xunitxml b/tests/auto/testlib/selftests/expected_differentexec.xunitxml
new file mode 100644
index 0000000000..30ee50bc08
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_differentexec.xunitxml
@@ -0,0 +1,21 @@
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestA *********
+Config: Using QtTest library
+PASS : tst_TestA::initTestCase()
+PASS : tst_TestA::slotName()
+PASS : tst_TestA::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestA *********
+********* Start testing of tst_TestB *********
+Config: Using QtTest library
+PASS : tst_TestB::initTestCase()
+PASS : tst_TestB::slotName()
+PASS : tst_TestB::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_TestB *********
diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml b/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml
index 2b802aabaf..aadc1a3cb8 100644
--- a/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml
+++ b/tests/auto/testlib/selftests/expected_exceptionthrow.lightxml
@@ -5,12 +5,12 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="throwException">
-<Incident type="fail" file="qtestcase.cpp" line="2235">
+<Incident type="fail" file="qtbase/src/testlib/qtestcase.cpp" line="0">
<Description><![CDATA[Caught unhandled exception]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity b/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity
index 3bc7271b65..120dc006b9 100644
--- a/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity
+++ b/tests/auto/testlib/selftests/expected_exceptionthrow.teamcity
@@ -2,6 +2,6 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_Exception']
##teamcity[testFinished name='initTestCase()' flowId='tst_Exception']
##teamcity[testStarted name='throwException()' flowId='tst_Exception']
-##teamcity[testFailed name='throwException()' message='Failure! |[Loc: qtestcase.cpp(1707)|]' details='Caught unhandled exception' flowId='tst_Exception']
+##teamcity[testFailed name='throwException()' message='Failure! |[Loc: qtbase/src/testlib/qtestcase.cpp(0)|]' details='Caught unhandled exception' flowId='tst_Exception']
##teamcity[testFinished name='throwException()' flowId='tst_Exception']
##teamcity[testSuiteFinished name='tst_Exception' flowId='tst_Exception']
diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.txt b/tests/auto/testlib/selftests/expected_exceptionthrow.txt
index bb9c101709..8911a60fc2 100644
--- a/tests/auto/testlib/selftests/expected_exceptionthrow.txt
+++ b/tests/auto/testlib/selftests/expected_exceptionthrow.txt
@@ -1,7 +1,7 @@
********* Start testing of tst_Exception *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Exception::initTestCase()
FAIL! : tst_Exception::throwException() Caught unhandled exception
- Loc: [/home/frederik/dev/qt/qt-src-dev/qtbase/src/testlib/qtestcase.cpp(2229)]
-Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted
+ Loc: [qtbase/src/testlib/qtestcase.cpp(0)]
+Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Exception *********
diff --git a/tests/auto/testlib/selftests/expected_exceptionthrow.xml b/tests/auto/testlib/selftests/expected_exceptionthrow.xml
index a265d5ba5f..8adc1bf87d 100644
--- a/tests/auto/testlib/selftests/expected_exceptionthrow.xml
+++ b/tests/auto/testlib/selftests/expected_exceptionthrow.xml
@@ -7,13 +7,13 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="throwException">
-<Incident type="fail" file="qtestcase.cpp" line="2235">
+<Incident type="fail" file="qtbase/src/testlib/qtestcase.cpp" line="0">
<Description><![CDATA[Caught unhandled exception]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_expectfail.lightxml b/tests/auto/testlib/selftests/expected_expectfail.lightxml
index cd5ab78fbe..7c91656b89 100644
--- a/tests/auto/testlib/selftests/expected_expectfail.lightxml
+++ b/tests/auto/testlib/selftests/expected_expectfail.lightxml
@@ -5,46 +5,46 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailAndContinue">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[begin]]></Description>
</Message>
-<Incident type="xfail" file="tst_expectfail.cpp" line="78">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[This should xfail]]></Description>
</Incident>
<Message type="qdebug" file="" line="0">
<Description><![CDATA[after]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailAndAbort">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[begin]]></Description>
</Message>
-<Incident type="xfail" file="tst_expectfail.cpp" line="86">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[This should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailTwice">
-<Incident type="fail" file="tst_expectfail.cpp" line="96">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[Already expecting a fail]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailWithQString">
-<Incident type="xfail" file="tst_expectfail.cpp" line="105">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[A string]]></Description>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="110">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[Bug 5 (The message)]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailDataDrivenWithQVerify">
<Incident type="pass" file="" line="0">
@@ -53,21 +53,21 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass 2]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="139">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="139">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailDataDrivenWithQCompare">
<Incident type="pass" file="" line="0">
@@ -76,44 +76,44 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass 2]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="173">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="173">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailOnWrongRow">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[right row]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailOnAnyRow">
-<Incident type="xfail" file="tst_expectfail.cpp" line="208">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[first row]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[first row]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="208">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[second row]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[second row]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailWithoutVerify">
<Incident type="fail" file="" line="0">
@@ -124,36 +124,36 @@
<DataTag><![CDATA[second row]]></DataTag>
<Description><![CDATA[QEXPECT_FAIL was called without any subsequent verification statements]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xpass">
-<Incident type="xpass" file="tst_expectfail.cpp" line="228">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA['true' returned TRUE unexpectedly. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xpassDataDrivenWithQVerify">
-<Incident type="xpass" file="tst_expectfail.cpp" line="250">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[XPass]]></DataTag>
<Description><![CDATA['true' returned TRUE unexpectedly. ()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xpassDataDrivenWithQCompare">
-<Incident type="xpass" file="tst_expectfail.cpp" line="271">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[XPass]]></DataTag>
<Description><![CDATA[QCOMPARE(1, 1) returned TRUE unexpectedly.]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_expectfail.teamcity b/tests/auto/testlib/selftests/expected_expectfail.teamcity
index 29546c1cee..cac2c34491 100644
--- a/tests/auto/testlib/selftests/expected_expectfail.teamcity
+++ b/tests/auto/testlib/selftests/expected_expectfail.teamcity
@@ -2,44 +2,44 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_ExpectFail']
##teamcity[testFinished name='initTestCase()' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailAndContinue()' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailAndContinue()' out='QDEBUG: begin|nXFAIL |[Loc: tst_expectfail.cpp(70)|]: This should xfail|nQDEBUG: after' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailAndContinue()' out='QDEBUG: begin|nXFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This should xfail|nQDEBUG: after' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailAndContinue()' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailAndAbort()' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailAndAbort()' out='QDEBUG: begin|nXFAIL |[Loc: tst_expectfail.cpp(78)|]: This should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailAndAbort()' out='QDEBUG: begin|nXFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailAndAbort()' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailTwice()' flowId='tst_ExpectFail']
-##teamcity[testFailed name='xfailTwice()' message='Failure! |[Loc: tst_expectfail.cpp(88)|]' details='Already expecting a fail' flowId='tst_ExpectFail']
+##teamcity[testFailed name='xfailTwice()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]' details='Already expecting a fail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailTwice()' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailWithQString()' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailWithQString()' out='XFAIL |[Loc: tst_expectfail.cpp(97)|]: A string|nXFAIL |[Loc: tst_expectfail.cpp(102)|]: Bug 5 (The message)' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailWithQString()' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: A string|nXFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: Bug 5 (The message)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailWithQString()' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQVerify(Pass 1)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQVerify(Pass 1)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQVerify(Pass 2)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQVerify(Pass 2)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQVerify(Abort)' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailDataDrivenWithQVerify(Abort)' out='XFAIL |[Loc: tst_expectfail.cpp(131)|]: This test should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailDataDrivenWithQVerify(Abort)' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This test should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQVerify(Abort)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQVerify(Continue)' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailDataDrivenWithQVerify(Continue)' out='XFAIL |[Loc: tst_expectfail.cpp(131)|]: This test should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailDataDrivenWithQVerify(Continue)' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This test should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQVerify(Continue)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQCompare(Pass 1)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQCompare(Pass 1)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQCompare(Pass 2)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQCompare(Pass 2)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQCompare(Abort)' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailDataDrivenWithQCompare(Abort)' out='XFAIL |[Loc: tst_expectfail.cpp(165)|]: This test should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailDataDrivenWithQCompare(Abort)' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This test should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQCompare(Abort)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailDataDrivenWithQCompare(Continue)' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailDataDrivenWithQCompare(Continue)' out='XFAIL |[Loc: tst_expectfail.cpp(165)|]: This test should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailDataDrivenWithQCompare(Continue)' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This test should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailDataDrivenWithQCompare(Continue)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailOnWrongRow(right row)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailOnWrongRow(right row)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailOnAnyRow(first row)' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailOnAnyRow(first row)' out='XFAIL |[Loc: tst_expectfail.cpp(200)|]: This test should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailOnAnyRow(first row)' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This test should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailOnAnyRow(first row)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailOnAnyRow(second row)' flowId='tst_ExpectFail']
-##teamcity[testStdOut name='xfailOnAnyRow(second row)' out='XFAIL |[Loc: tst_expectfail.cpp(200)|]: This test should xfail' flowId='tst_ExpectFail']
+##teamcity[testStdOut name='xfailOnAnyRow(second row)' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]: This test should xfail' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailOnAnyRow(second row)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xfailWithoutVerify(first row)' flowId='tst_ExpectFail']
##teamcity[testFailed name='xfailWithoutVerify(first row)' message='Failure!' details='QEXPECT_FAIL was called without any subsequent verification statements' flowId='tst_ExpectFail']
@@ -48,15 +48,15 @@
##teamcity[testFailed name='xfailWithoutVerify(second row)' message='Failure!' details='QEXPECT_FAIL was called without any subsequent verification statements' flowId='tst_ExpectFail']
##teamcity[testFinished name='xfailWithoutVerify(second row)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xpass()' flowId='tst_ExpectFail']
-##teamcity[testFailed name='xpass()' message='Failure! |[Loc: tst_expectfail.cpp(220)|]' details='|'true|' returned TRUE unexpectedly. ()' flowId='tst_ExpectFail']
+##teamcity[testFailed name='xpass()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]' details='|'true|' returned TRUE unexpectedly. ()' flowId='tst_ExpectFail']
##teamcity[testFinished name='xpass()' flowId='tst_ExpectFail']
##teamcity[testStarted name='xpassDataDrivenWithQVerify(XPass)' flowId='tst_ExpectFail']
-##teamcity[testFailed name='xpassDataDrivenWithQVerify(XPass)' message='Failure! |[Loc: tst_expectfail.cpp(242)|]' details='|'true|' returned TRUE unexpectedly. ()' flowId='tst_ExpectFail']
+##teamcity[testFailed name='xpassDataDrivenWithQVerify(XPass)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]' details='|'true|' returned TRUE unexpectedly. ()' flowId='tst_ExpectFail']
##teamcity[testFinished name='xpassDataDrivenWithQVerify(XPass)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xpassDataDrivenWithQVerify(Pass)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xpassDataDrivenWithQVerify(Pass)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xpassDataDrivenWithQCompare(XPass)' flowId='tst_ExpectFail']
-##teamcity[testFailed name='xpassDataDrivenWithQCompare(XPass)' message='Failure! |[Loc: tst_expectfail.cpp(263)|]' details='QCOMPARE(1, 1) returned TRUE unexpectedly.' flowId='tst_ExpectFail']
+##teamcity[testFailed name='xpassDataDrivenWithQCompare(XPass)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)|]' details='QCOMPARE(1, 1) returned TRUE unexpectedly.' flowId='tst_ExpectFail']
##teamcity[testFinished name='xpassDataDrivenWithQCompare(XPass)' flowId='tst_ExpectFail']
##teamcity[testStarted name='xpassDataDrivenWithQCompare(Pass)' flowId='tst_ExpectFail']
##teamcity[testFinished name='xpassDataDrivenWithQCompare(Pass)' flowId='tst_ExpectFail']
diff --git a/tests/auto/testlib/selftests/expected_expectfail.txt b/tests/auto/testlib/selftests/expected_expectfail.txt
index a23b845f23..75d41e5733 100644
--- a/tests/auto/testlib/selftests/expected_expectfail.txt
+++ b/tests/auto/testlib/selftests/expected_expectfail.txt
@@ -1,55 +1,55 @@
********* Start testing of tst_ExpectFail *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_ExpectFail::initTestCase()
QDEBUG : tst_ExpectFail::xfailAndContinue() begin
XFAIL : tst_ExpectFail::xfailAndContinue() This should xfail
- Loc: [tst_expectfail.cpp(78)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
QDEBUG : tst_ExpectFail::xfailAndContinue() after
PASS : tst_ExpectFail::xfailAndContinue()
QDEBUG : tst_ExpectFail::xfailAndAbort() begin
XFAIL : tst_ExpectFail::xfailAndAbort() This should xfail
- Loc: [tst_expectfail.cpp(86)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailAndAbort()
FAIL! : tst_ExpectFail::xfailTwice() Already expecting a fail
- Loc: [tst_expectfail.cpp(96)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
XFAIL : tst_ExpectFail::xfailWithQString() A string
- Loc: [tst_expectfail.cpp(105)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
XFAIL : tst_ExpectFail::xfailWithQString() Bug 5 (The message)
- Loc: [tst_expectfail.cpp(110)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailWithQString()
PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Pass 1)
PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Pass 2)
XFAIL : tst_ExpectFail::xfailDataDrivenWithQVerify(Abort) This test should xfail
- Loc: [tst_expectfail.cpp(139)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Abort)
XFAIL : tst_ExpectFail::xfailDataDrivenWithQVerify(Continue) This test should xfail
- Loc: [tst_expectfail.cpp(139)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailDataDrivenWithQVerify(Continue)
PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Pass 1)
PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Pass 2)
XFAIL : tst_ExpectFail::xfailDataDrivenWithQCompare(Abort) This test should xfail
- Loc: [tst_expectfail.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Abort)
XFAIL : tst_ExpectFail::xfailDataDrivenWithQCompare(Continue) This test should xfail
- Loc: [tst_expectfail.cpp(173)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailDataDrivenWithQCompare(Continue)
PASS : tst_ExpectFail::xfailOnWrongRow(right row)
XFAIL : tst_ExpectFail::xfailOnAnyRow(first row) This test should xfail
- Loc: [tst_expectfail.cpp(208)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailOnAnyRow(first row)
XFAIL : tst_ExpectFail::xfailOnAnyRow(second row) This test should xfail
- Loc: [tst_expectfail.cpp(208)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xfailOnAnyRow(second row)
FAIL! : tst_ExpectFail::xfailWithoutVerify(first row) QEXPECT_FAIL was called without any subsequent verification statements
FAIL! : tst_ExpectFail::xfailWithoutVerify(second row) QEXPECT_FAIL was called without any subsequent verification statements
XPASS : tst_ExpectFail::xpass() 'true' returned TRUE unexpectedly. ()
- Loc: [tst_expectfail.cpp(228)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
XPASS : tst_ExpectFail::xpassDataDrivenWithQVerify(XPass) 'true' returned TRUE unexpectedly. ()
- Loc: [tst_expectfail.cpp(250)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xpassDataDrivenWithQVerify(Pass)
XPASS : tst_ExpectFail::xpassDataDrivenWithQCompare(XPass) QCOMPARE(1, 1) returned TRUE unexpectedly.
- Loc: [tst_expectfail.cpp(271)]
+ Loc: [qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp(0)]
PASS : tst_ExpectFail::xpassDataDrivenWithQCompare(Pass)
PASS : tst_ExpectFail::cleanupTestCase()
-Totals: 18 passed, 6 failed, 0 skipped, 0 blacklisted
+Totals: 18 passed, 6 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_ExpectFail *********
diff --git a/tests/auto/testlib/selftests/expected_expectfail.xml b/tests/auto/testlib/selftests/expected_expectfail.xml
index a98b97810c..ccfd942c92 100644
--- a/tests/auto/testlib/selftests/expected_expectfail.xml
+++ b/tests/auto/testlib/selftests/expected_expectfail.xml
@@ -7,46 +7,46 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailAndContinue">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[begin]]></Description>
</Message>
-<Incident type="xfail" file="tst_expectfail.cpp" line="78">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[This should xfail]]></Description>
</Incident>
<Message type="qdebug" file="" line="0">
<Description><![CDATA[after]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailAndAbort">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[begin]]></Description>
</Message>
-<Incident type="xfail" file="tst_expectfail.cpp" line="86">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[This should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailTwice">
-<Incident type="fail" file="tst_expectfail.cpp" line="96">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[Already expecting a fail]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailWithQString">
-<Incident type="xfail" file="tst_expectfail.cpp" line="105">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[A string]]></Description>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="110">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA[Bug 5 (The message)]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailDataDrivenWithQVerify">
<Incident type="pass" file="" line="0">
@@ -55,21 +55,21 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass 2]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="139">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="139">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailDataDrivenWithQCompare">
<Incident type="pass" file="" line="0">
@@ -78,44 +78,44 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass 2]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="173">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Abort]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="173">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Continue]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailOnWrongRow">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[right row]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailOnAnyRow">
-<Incident type="xfail" file="tst_expectfail.cpp" line="208">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[first row]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[first row]]></DataTag>
</Incident>
-<Incident type="xfail" file="tst_expectfail.cpp" line="208">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[second row]]></DataTag>
<Description><![CDATA[This test should xfail]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[second row]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xfailWithoutVerify">
<Incident type="fail" file="" line="0">
@@ -126,37 +126,37 @@
<DataTag><![CDATA[second row]]></DataTag>
<Description><![CDATA[QEXPECT_FAIL was called without any subsequent verification statements]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xpass">
-<Incident type="xpass" file="tst_expectfail.cpp" line="228">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<Description><![CDATA['true' returned TRUE unexpectedly. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xpassDataDrivenWithQVerify">
-<Incident type="xpass" file="tst_expectfail.cpp" line="250">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[XPass]]></DataTag>
<Description><![CDATA['true' returned TRUE unexpectedly. ()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="xpassDataDrivenWithQCompare">
-<Incident type="xpass" file="tst_expectfail.cpp" line="271">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp" line="0">
<DataTag><![CDATA[XPass]]></DataTag>
<Description><![CDATA[QCOMPARE(1, 1) returned TRUE unexpectedly.]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Pass]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.lightxml b/tests/auto/testlib/selftests/expected_failcleanup.lightxml
index b2db64c4e2..c6484111d3 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.lightxml
+++ b/tests/auto/testlib/selftests/expected_failcleanup.lightxml
@@ -5,16 +5,16 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
-<Incident type="fail" file="tst_failcleanup.cpp" line="59">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp" line="0">
<Description><![CDATA['false' returned FALSE. (Fail inside cleanupTestCase)]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.teamcity b/tests/auto/testlib/selftests/expected_failcleanup.teamcity
index ecd15b7483..1f8d353581 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.teamcity
+++ b/tests/auto/testlib/selftests/expected_failcleanup.teamcity
@@ -4,6 +4,6 @@
##teamcity[testStarted name='aTestFunction()' flowId='tst_FailCleanup']
##teamcity[testFinished name='aTestFunction()' flowId='tst_FailCleanup']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_FailCleanup']
-##teamcity[testFailed name='cleanupTestCase()' message='Failure! |[Loc: tst_failcleanup.cpp(51)|]' details='|'false|' returned FALSE. (Fail inside cleanupTestCase)' flowId='tst_FailCleanup']
+##teamcity[testFailed name='cleanupTestCase()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp(0)|]' details='|'false|' returned FALSE. (Fail inside cleanupTestCase)' flowId='tst_FailCleanup']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_FailCleanup']
##teamcity[testSuiteFinished name='tst_FailCleanup' flowId='tst_FailCleanup']
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.txt b/tests/auto/testlib/selftests/expected_failcleanup.txt
index 4fb877429e..a5776e59bf 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.txt
+++ b/tests/auto/testlib/selftests/expected_failcleanup.txt
@@ -1,8 +1,8 @@
********* Start testing of tst_FailCleanup *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_FailCleanup::initTestCase()
PASS : tst_FailCleanup::aTestFunction()
FAIL! : tst_FailCleanup::cleanupTestCase() 'false' returned FALSE. (Fail inside cleanupTestCase)
- Loc: [tst_failcleanup.cpp(59)]
-Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted
+ Loc: [qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp(0)]
+Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_FailCleanup *********
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.xml b/tests/auto/testlib/selftests/expected_failcleanup.xml
index 476e56c4f4..bb0502983c 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.xml
+++ b/tests/auto/testlib/selftests/expected_failcleanup.xml
@@ -7,17 +7,17 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
-<Incident type="fail" file="tst_failcleanup.cpp" line="59">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp" line="0">
<Description><![CDATA['false' returned FALSE. (Fail inside cleanupTestCase)]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_failinit.lightxml b/tests/auto/testlib/selftests/expected_failinit.lightxml
index 5a940fc36b..663aa5c3dd 100644
--- a/tests/auto/testlib/selftests/expected_failinit.lightxml
+++ b/tests/auto/testlib/selftests/expected_failinit.lightxml
@@ -4,13 +4,13 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Incident type="fail" file="tst_failinit.cpp" line="55">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failinit/tst_failinit.cpp" line="0">
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_failinit.teamcity b/tests/auto/testlib/selftests/expected_failinit.teamcity
index 49972c7aa2..78a4c8bc9f 100644
--- a/tests/auto/testlib/selftests/expected_failinit.teamcity
+++ b/tests/auto/testlib/selftests/expected_failinit.teamcity
@@ -1,6 +1,6 @@
##teamcity[testSuiteStarted name='tst_FailInit' flowId='tst_FailInit']
##teamcity[testStarted name='initTestCase()' flowId='tst_FailInit']
-##teamcity[testFailed name='initTestCase()' message='Failure! |[Loc: tst_failinit.cpp(47)|]' details='|'false|' returned FALSE. ()' flowId='tst_FailInit']
+##teamcity[testFailed name='initTestCase()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/failinit/tst_failinit.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_FailInit']
##teamcity[testFinished name='initTestCase()' flowId='tst_FailInit']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_FailInit']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_FailInit']
diff --git a/tests/auto/testlib/selftests/expected_failinit.txt b/tests/auto/testlib/selftests/expected_failinit.txt
index 62d6ec1dd6..7608367d78 100644
--- a/tests/auto/testlib/selftests/expected_failinit.txt
+++ b/tests/auto/testlib/selftests/expected_failinit.txt
@@ -1,7 +1,7 @@
********* Start testing of tst_FailInit *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
FAIL! : tst_FailInit::initTestCase() 'false' returned FALSE. ()
- Loc: [tst_failinit.cpp(55)]
+ Loc: [qtbase/tests/auto/testlib/selftests/failinit/tst_failinit.cpp(0)]
PASS : tst_FailInit::cleanupTestCase()
-Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted
+Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_FailInit *********
diff --git a/tests/auto/testlib/selftests/expected_failinit.xml b/tests/auto/testlib/selftests/expected_failinit.xml
index 51e1a7fce4..46c925091c 100644
--- a/tests/auto/testlib/selftests/expected_failinit.xml
+++ b/tests/auto/testlib/selftests/expected_failinit.xml
@@ -6,14 +6,14 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Incident type="fail" file="tst_failinit.cpp" line="55">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failinit/tst_failinit.cpp" line="0">
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_failinitdata.lightxml b/tests/auto/testlib/selftests/expected_failinitdata.lightxml
index f9da42c060..60bf7b60bf 100644
--- a/tests/auto/testlib/selftests/expected_failinitdata.lightxml
+++ b/tests/auto/testlib/selftests/expected_failinitdata.lightxml
@@ -4,9 +4,9 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Incident type="fail" file="tst_failinitdata.cpp" line="56">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp" line="0">
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_failinitdata.teamcity b/tests/auto/testlib/selftests/expected_failinitdata.teamcity
index 7766d9dca2..5823b55dd1 100644
--- a/tests/auto/testlib/selftests/expected_failinitdata.teamcity
+++ b/tests/auto/testlib/selftests/expected_failinitdata.teamcity
@@ -1,5 +1,5 @@
##teamcity[testSuiteStarted name='tst_FailInitData' flowId='tst_FailInitData']
##teamcity[testStarted name='initTestCase()' flowId='tst_FailInitData']
-##teamcity[testFailed name='initTestCase()' message='Failure! |[Loc: tst_failinitdata.cpp(48)|]' details='|'false|' returned FALSE. ()' flowId='tst_FailInitData']
+##teamcity[testFailed name='initTestCase()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_FailInitData']
##teamcity[testFinished name='initTestCase()' flowId='tst_FailInitData']
##teamcity[testSuiteFinished name='tst_FailInitData' flowId='tst_FailInitData']
diff --git a/tests/auto/testlib/selftests/expected_failinitdata.txt b/tests/auto/testlib/selftests/expected_failinitdata.txt
index 431c70269e..3f985516da 100644
--- a/tests/auto/testlib/selftests/expected_failinitdata.txt
+++ b/tests/auto/testlib/selftests/expected_failinitdata.txt
@@ -1,6 +1,6 @@
********* Start testing of tst_FailInitData *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
FAIL! : tst_FailInitData::initTestCase() 'false' returned FALSE. ()
- Loc: [tst_failinitdata.cpp(56)]
-Totals: 0 passed, 1 failed, 0 skipped, 0 blacklisted
+ Loc: [qtbase/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp(0)]
+Totals: 0 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_FailInitData *********
diff --git a/tests/auto/testlib/selftests/expected_failinitdata.xml b/tests/auto/testlib/selftests/expected_failinitdata.xml
index e843863bfc..e135c59c8c 100644
--- a/tests/auto/testlib/selftests/expected_failinitdata.xml
+++ b/tests/auto/testlib/selftests/expected_failinitdata.xml
@@ -6,10 +6,10 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Incident type="fail" file="tst_failinitdata.cpp" line="56">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp" line="0">
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.lightxml b/tests/auto/testlib/selftests/expected_fetchbogus.lightxml
index c62a93eb49..b586fa9c29 100644
--- a/tests/auto/testlib/selftests/expected_fetchbogus.lightxml
+++ b/tests/auto/testlib/selftests/expected_fetchbogus.lightxml
@@ -5,7 +5,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fetchBogus">
<Message type="qfatal" file="" line="0">
@@ -16,6 +16,6 @@
<DataTag><![CDATA[foo]]></DataTag>
<Description><![CDATA[Received a fatal error.]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.teamcity b/tests/auto/testlib/selftests/expected_fetchbogus.teamcity
index c2da66c2ee..6fa9c833fb 100644
--- a/tests/auto/testlib/selftests/expected_fetchbogus.teamcity
+++ b/tests/auto/testlib/selftests/expected_fetchbogus.teamcity
@@ -2,7 +2,7 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_FetchBogus']
##teamcity[testFinished name='initTestCase()' flowId='tst_FetchBogus']
##teamcity[testStarted name='fetchBogus(foo)' flowId='tst_FetchBogus']
-##teamcity[testFailed name='fetchBogus(foo)' message='Failure! |[Loc: Unknown file(57)|]' details='Received a fatal error.' flowId='tst_FetchBogus']
+##teamcity[testFailed name='fetchBogus(foo)' message='Failure! |[Loc: Unknown file(0)|]' details='Received a fatal error.' flowId='tst_FetchBogus']
##teamcity[testStdOut name='fetchBogus(foo)' out='QFATAL: QFETCH: Requested testdata |'bubu|' not available, check your _data function.' flowId='tst_FetchBogus']
##teamcity[testFinished name='fetchBogus(foo)' flowId='tst_FetchBogus']
##teamcity[testSuiteFinished name='tst_FetchBogus' flowId='tst_FetchBogus']
diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.txt b/tests/auto/testlib/selftests/expected_fetchbogus.txt
index 598e281215..94c7cca223 100644
--- a/tests/auto/testlib/selftests/expected_fetchbogus.txt
+++ b/tests/auto/testlib/selftests/expected_fetchbogus.txt
@@ -1,8 +1,8 @@
********* Start testing of tst_FetchBogus *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_FetchBogus::initTestCase()
QFATAL : tst_FetchBogus::fetchBogus(foo) QFETCH: Requested testdata 'bubu' not available, check your _data function.
FAIL! : tst_FetchBogus::fetchBogus(foo) Received a fatal error.
Loc: [Unknown file(0)]
-Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted
+Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_FetchBogus *********
diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.xml b/tests/auto/testlib/selftests/expected_fetchbogus.xml
index c20de137a2..38ffa2fa7a 100644
--- a/tests/auto/testlib/selftests/expected_fetchbogus.xml
+++ b/tests/auto/testlib/selftests/expected_fetchbogus.xml
@@ -7,7 +7,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="fetchBogus">
<Message type="qfatal" file="" line="0">
@@ -18,7 +18,7 @@
<DataTag><![CDATA[foo]]></DataTag>
<Description><![CDATA[Received a fatal error.]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_findtestdata.lightxml b/tests/auto/testlib/selftests/expected_findtestdata.lightxml
index e3c3cea7bc..90acd946a5 100644
--- a/tests/auto/testlib/selftests/expected_findtestdata.lightxml
+++ b/tests/auto/testlib/selftests/expected_findtestdata.lightxml
@@ -5,17 +5,17 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="paths">
-<Message type="warn" file="findtestdata.cpp" line="154">
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp" line="0">
<Description><![CDATA[testdata testfile could not be located!]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_findtestdata.teamcity b/tests/auto/testlib/selftests/expected_findtestdata.teamcity
index 8a8fa2e885..c653400c42 100644
--- a/tests/auto/testlib/selftests/expected_findtestdata.teamcity
+++ b/tests/auto/testlib/selftests/expected_findtestdata.teamcity
@@ -2,7 +2,7 @@
##teamcity[testStarted name='initTestCase()' flowId='FindTestData']
##teamcity[testFinished name='initTestCase()' flowId='FindTestData']
##teamcity[testStarted name='paths()' flowId='FindTestData']
-##teamcity[testStdOut name='paths()' out='WARNING |[Loc: findtestdata.cpp(146)|]: testdata testfile could not be located!' flowId='FindTestData']
+##teamcity[testStdOut name='paths()' out='WARNING |[Loc: qtbase/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp(0)|]: testdata testfile could not be located!' flowId='FindTestData']
##teamcity[testFinished name='paths()' flowId='FindTestData']
##teamcity[testStarted name='cleanupTestCase()' flowId='FindTestData']
##teamcity[testFinished name='cleanupTestCase()' flowId='FindTestData']
diff --git a/tests/auto/testlib/selftests/expected_findtestdata.txt b/tests/auto/testlib/selftests/expected_findtestdata.txt
index 6a900e73d6..81ebefb423 100644
--- a/tests/auto/testlib/selftests/expected_findtestdata.txt
+++ b/tests/auto/testlib/selftests/expected_findtestdata.txt
@@ -1,9 +1,9 @@
********* Start testing of FindTestData *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : FindTestData::initTestCase()
WARNING: FindTestData::paths() testdata testfile could not be located!
- Loc: [findtestdata.cpp(154)]
+ Loc: [qtbase/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp(0)]
PASS : FindTestData::paths()
PASS : FindTestData::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of FindTestData *********
diff --git a/tests/auto/testlib/selftests/expected_findtestdata.xml b/tests/auto/testlib/selftests/expected_findtestdata.xml
index 6abaa15103..152700acee 100644
--- a/tests/auto/testlib/selftests/expected_findtestdata.xml
+++ b/tests/auto/testlib/selftests/expected_findtestdata.xml
@@ -7,18 +7,18 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="paths">
-<Message type="warn" file="findtestdata.cpp" line="154">
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp" line="0">
<Description><![CDATA[testdata testfile could not be located!]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_float.lightxml b/tests/auto/testlib/selftests/expected_float.lightxml
new file mode 100644
index 0000000000..0dbc5dd8c8
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_float.lightxml
@@ -0,0 +1,62 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="floatComparisons">
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[should SUCCEED 1]]></DataTag>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[should FAIL 1]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 1
+ Expected (operandRight): 3]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[should FAIL 2]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 1e-07
+ Expected (operandRight): 3e-07]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[should FAIL 3]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 99998
+ Expected (operandRight): 99999]]></Description>
+</Incident>
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[should SUCCEED 2]]></DataTag>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="compareFloatTests">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[1e0]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1
+ Expected (t3): 3]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[1e-7]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1e-07
+ Expected (t3): 3e-07]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[1e+7]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1e+07
+ Expected (t3): 3e+07]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_float.teamcity b/tests/auto/testlib/selftests/expected_float.teamcity
new file mode 100644
index 0000000000..d5b81593d8
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_float.teamcity
@@ -0,0 +1,28 @@
+##teamcity[testSuiteStarted name='tst_float' flowId='tst_float']
+##teamcity[testStarted name='initTestCase()' flowId='tst_float']
+##teamcity[testFinished name='initTestCase()' flowId='tst_float']
+##teamcity[testStarted name='floatComparisons(should SUCCEED 1)' flowId='tst_float']
+##teamcity[testFinished name='floatComparisons(should SUCCEED 1)' flowId='tst_float']
+##teamcity[testStarted name='floatComparisons(should FAIL 1)' flowId='tst_float']
+##teamcity[testFailed name='floatComparisons(should FAIL 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1|n Expected (operandRight): 3' flowId='tst_float']
+##teamcity[testFinished name='floatComparisons(should FAIL 1)' flowId='tst_float']
+##teamcity[testStarted name='floatComparisons(should FAIL 2)' flowId='tst_float']
+##teamcity[testFailed name='floatComparisons(should FAIL 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 1e-07|n Expected (operandRight): 3e-07' flowId='tst_float']
+##teamcity[testFinished name='floatComparisons(should FAIL 2)' flowId='tst_float']
+##teamcity[testStarted name='floatComparisons(should FAIL 3)' flowId='tst_float']
+##teamcity[testFailed name='floatComparisons(should FAIL 3)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (operandLeft) : 99998|n Expected (operandRight): 99999' flowId='tst_float']
+##teamcity[testFinished name='floatComparisons(should FAIL 3)' flowId='tst_float']
+##teamcity[testStarted name='floatComparisons(should SUCCEED 2)' flowId='tst_float']
+##teamcity[testFinished name='floatComparisons(should SUCCEED 2)' flowId='tst_float']
+##teamcity[testStarted name='compareFloatTests(1e0)' flowId='tst_float']
+##teamcity[testFailed name='compareFloatTests(1e0)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (t1): 1|n Expected (t3): 3' flowId='tst_float']
+##teamcity[testFinished name='compareFloatTests(1e0)' flowId='tst_float']
+##teamcity[testStarted name='compareFloatTests(1e-7)' flowId='tst_float']
+##teamcity[testFailed name='compareFloatTests(1e-7)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (t1): 1e-07|n Expected (t3): 3e-07' flowId='tst_float']
+##teamcity[testFinished name='compareFloatTests(1e-7)' flowId='tst_float']
+##teamcity[testStarted name='compareFloatTests(1e+7)' flowId='tst_float']
+##teamcity[testFailed name='compareFloatTests(1e+7)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)|]' details='Compared floats are not the same (fuzzy compare)|n Actual (t1): 1e+07|n Expected (t3): 3e+07' flowId='tst_float']
+##teamcity[testFinished name='compareFloatTests(1e+7)' flowId='tst_float']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_float']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_float']
+##teamcity[testSuiteFinished name='tst_float' flowId='tst_float']
diff --git a/tests/auto/testlib/selftests/expected_float.txt b/tests/auto/testlib/selftests/expected_float.txt
index e9cfae04b4..8abea6a67e 100644
--- a/tests/auto/testlib/selftests/expected_float.txt
+++ b/tests/auto/testlib/selftests/expected_float.txt
@@ -1,32 +1,32 @@
********* Start testing of tst_float *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_float::initTestCase()
PASS : tst_float::floatComparisons(should SUCCEED 1)
FAIL! : tst_float::floatComparisons(should FAIL 1) Compared floats are not the same (fuzzy compare)
Actual (operandLeft) : 1
Expected (operandRight): 3
- Loc: [tst_float.cpp(61)]
+ Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)]
FAIL! : tst_float::floatComparisons(should FAIL 2) Compared floats are not the same (fuzzy compare)
Actual (operandLeft) : 1e-07
Expected (operandRight): 3e-07
- Loc: [tst_float.cpp(61)]
+ Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)]
FAIL! : tst_float::floatComparisons(should FAIL 3) Compared floats are not the same (fuzzy compare)
Actual (operandLeft) : 99998
Expected (operandRight): 99999
- Loc: [tst_float.cpp(61)]
+ Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)]
PASS : tst_float::floatComparisons(should SUCCEED 2)
FAIL! : tst_float::compareFloatTests(1e0) Compared floats are not the same (fuzzy compare)
Actual (t1): 1
Expected (t3): 3
- Loc: [tst_float.cpp(109)]
+ Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)]
FAIL! : tst_float::compareFloatTests(1e-7) Compared floats are not the same (fuzzy compare)
Actual (t1): 1e-07
Expected (t3): 3e-07
- Loc: [tst_float.cpp(109)]
+ Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)]
FAIL! : tst_float::compareFloatTests(1e+7) Compared floats are not the same (fuzzy compare)
Actual (t1): 1e+07
Expected (t3): 3e+07
- Loc: [tst_float.cpp(109)]
+ Loc: [qtbase/tests/auto/testlib/selftests/float/tst_float.cpp(0)]
PASS : tst_float::cleanupTestCase()
-Totals: 4 passed, 6 failed, 0 skipped, 0 blacklisted
+Totals: 4 passed, 6 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_float *********
diff --git a/tests/auto/testlib/selftests/expected_float.xml b/tests/auto/testlib/selftests/expected_float.xml
new file mode 100644
index 0000000000..096e1a5b54
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_float.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_float">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="floatComparisons">
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[should SUCCEED 1]]></DataTag>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[should FAIL 1]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 1
+ Expected (operandRight): 3]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[should FAIL 2]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 1e-07
+ Expected (operandRight): 3e-07]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[should FAIL 3]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 99998
+ Expected (operandRight): 99999]]></Description>
+</Incident>
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[should SUCCEED 2]]></DataTag>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="compareFloatTests">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[1e0]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1
+ Expected (t3): 3]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[1e-7]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1e-07
+ Expected (t3): 3e-07]]></Description>
+</Incident>
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/float/tst_float.cpp" line="0">
+ <DataTag><![CDATA[1e+7]]></DataTag>
+ <Description><![CDATA[Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1e+07
+ Expected (t3): 3e+07]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_float.xunitxml b/tests/auto/testlib/selftests/expected_float.xunitxml
new file mode 100644
index 0000000000..5de14e8d9b
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_float.xunitxml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="6" tests="4" name="tst_float">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="fail" name="floatComparisons">
+ <failure tag="should FAIL 1" message="Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 1
+ Expected (operandRight): 3" result="fail"/>
+ <failure tag="should FAIL 2" message="Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 1e&#x002D;07
+ Expected (operandRight): 3e&#x002D;07" result="fail"/>
+ <failure tag="should FAIL 3" message="Compared floats are not the same (fuzzy compare)
+ Actual (operandLeft) : 99998
+ Expected (operandRight): 99999" result="fail"/>
+ </testcase>
+ <testcase result="fail" name="compareFloatTests">
+ <failure tag="1e0" message="Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1
+ Expected (t3): 3" result="fail"/>
+ <failure tag="1e&#x002D;7" message="Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1e&#x002D;07
+ Expected (t3): 3e&#x002D;07" result="fail"/>
+ <failure tag="1e+7" message="Compared floats are not the same (fuzzy compare)
+ Actual (t1): 1e+07
+ Expected (t3): 3e+07" result="fail"/>
+ </testcase>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_globaldata.lightxml b/tests/auto/testlib/selftests/expected_globaldata.lightxml
index 7d4c43905c..f66c4c552d 100644
--- a/tests/auto/testlib/selftests/expected_globaldata.lightxml
+++ b/tests/auto/testlib/selftests/expected_globaldata.lightxml
@@ -8,7 +8,7 @@
<Description><![CDATA[initTestCase initTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testGlobal">
<Message type="qdebug" file="" line="0">
@@ -87,21 +87,21 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[2:local 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skip">
-<Message type="skip" file="tst_globaldata.cpp" line="129">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[1]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skipLocal">
<Message type="qdebug" file="" line="0">
<DataTag><![CDATA[1:local 1]]></DataTag>
<Description><![CDATA[init skipLocal local 1]]></Description>
</Message>
-<Message type="skip" file="tst_globaldata.cpp" line="149">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[1:local 1]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
@@ -113,7 +113,7 @@
<DataTag><![CDATA[1:local 2]]></DataTag>
<Description><![CDATA[init skipLocal local 2]]></Description>
</Message>
-<Message type="skip" file="tst_globaldata.cpp" line="149">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[1:local 2]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
@@ -121,7 +121,7 @@
<DataTag><![CDATA[1:local 2]]></DataTag>
<Description><![CDATA[cleanup skipLocal local 2]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skipSingle">
<Message type="qdebug" file="" line="0">
@@ -158,7 +158,7 @@
<DataTag><![CDATA[2:local 1]]></DataTag>
<Description><![CDATA[init skipSingle local 1]]></Description>
</Message>
-<Message type="skip" file="tst_globaldata.cpp" line="143">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[2:local 1]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
@@ -181,13 +181,13 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[2:local 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[cleanupTestCase cleanupTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_globaldata.teamcity b/tests/auto/testlib/selftests/expected_globaldata.teamcity
index 5c6cc4b88d..5d623a3285 100644
--- a/tests/auto/testlib/selftests/expected_globaldata.teamcity
+++ b/tests/auto/testlib/selftests/expected_globaldata.teamcity
@@ -14,16 +14,16 @@
##teamcity[testStarted name='testGlobal(local 2)' flowId='tst_globaldata']
##teamcity[testStdOut name='testGlobal(local 2)' out='QDEBUG: init testGlobal local 2|nQDEBUG: global: true|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local 2' flowId='tst_globaldata']
##teamcity[testFinished name='testGlobal(local 2)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skip()' message='skipping |[Loc: tst_globaldata.cpp(121)|]' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipLocal(local 1)' message='skipping |[Loc: tst_globaldata.cpp(141)|]' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipLocal(local 2)' message='skipping |[Loc: tst_globaldata.cpp(141)|]' flowId='tst_globaldata']
+##teamcity[testIgnored name='skip()' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipLocal(local 1)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipLocal(local 2)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
##teamcity[testStarted name='skipSingle(local 1)' flowId='tst_globaldata']
##teamcity[testStdOut name='skipSingle(local 1)' out='QDEBUG: init skipLocal local 1|nQDEBUG: cleanup skipLocal local 1|nQDEBUG: init skipLocal local 2|nQDEBUG: cleanup skipLocal local 2|nQDEBUG: init skipSingle local 1|nQDEBUG: global: false local: false|nQDEBUG: cleanup skipSingle local 1' flowId='tst_globaldata']
##teamcity[testFinished name='skipSingle(local 1)' flowId='tst_globaldata']
##teamcity[testStarted name='skipSingle(local 2)' flowId='tst_globaldata']
##teamcity[testStdOut name='skipSingle(local 2)' out='QDEBUG: init skipSingle local 2|nQDEBUG: global: false local: true|nQDEBUG: cleanup skipSingle local 2' flowId='tst_globaldata']
##teamcity[testFinished name='skipSingle(local 2)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipSingle(local 1)' message='skipping |[Loc: tst_globaldata.cpp(135)|]' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipSingle(local 1)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
##teamcity[testStdOut name='skipSingle(local 2)' out='QDEBUG: init skipSingle local 1|nQDEBUG: cleanup skipSingle local 1|nQDEBUG: init skipSingle local 2|nQDEBUG: global: true local: true|nQDEBUG: cleanup skipSingle local 2' flowId='tst_globaldata']
##teamcity[testFinished name='skipSingle(local 2)' flowId='tst_globaldata']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_globaldata']
diff --git a/tests/auto/testlib/selftests/expected_globaldata.txt b/tests/auto/testlib/selftests/expected_globaldata.txt
index efd461d7d2..b12f4a2a69 100644
--- a/tests/auto/testlib/selftests/expected_globaldata.txt
+++ b/tests/auto/testlib/selftests/expected_globaldata.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_globaldata *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
QDEBUG : tst_globaldata::initTestCase() initTestCase initTestCase (null)
PASS : tst_globaldata::initTestCase()
QDEBUG : tst_globaldata::testGlobal(1:local 1) init testGlobal local 1
@@ -23,14 +23,14 @@ QDEBUG : tst_globaldata::testGlobal(2:local 2) local: true
QDEBUG : tst_globaldata::testGlobal(2:local 2) cleanup testGlobal local 2
PASS : tst_globaldata::testGlobal(2:local 2)
SKIP : tst_globaldata::skip(1) skipping
- Loc: [tst_globaldata.cpp(129)]
+ Loc: [qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)]
QDEBUG : tst_globaldata::skipLocal(1:local 1) init skipLocal local 1
SKIP : tst_globaldata::skipLocal(1:local 1) skipping
- Loc: [tst_globaldata.cpp(149)]
+ Loc: [qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)]
QDEBUG : tst_globaldata::skipLocal(1:local 1) cleanup skipLocal local 1
QDEBUG : tst_globaldata::skipLocal(1:local 2) init skipLocal local 2
SKIP : tst_globaldata::skipLocal(1:local 2) skipping
- Loc: [tst_globaldata.cpp(149)]
+ Loc: [qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)]
QDEBUG : tst_globaldata::skipLocal(1:local 2) cleanup skipLocal local 2
QDEBUG : tst_globaldata::skipSingle(1:local 1) init skipSingle local 1
QDEBUG : tst_globaldata::skipSingle(1:local 1) global: false local: false
@@ -42,7 +42,7 @@ QDEBUG : tst_globaldata::skipSingle(1:local 2) cleanup skipSingle local 2
PASS : tst_globaldata::skipSingle(1:local 2)
QDEBUG : tst_globaldata::skipSingle(2:local 1) init skipSingle local 1
SKIP : tst_globaldata::skipSingle(2:local 1) skipping
- Loc: [tst_globaldata.cpp(143)]
+ Loc: [qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)]
QDEBUG : tst_globaldata::skipSingle(2:local 1) cleanup skipSingle local 1
QDEBUG : tst_globaldata::skipSingle(2:local 2) init skipSingle local 2
QDEBUG : tst_globaldata::skipSingle(2:local 2) global: true local: true
@@ -50,5 +50,5 @@ QDEBUG : tst_globaldata::skipSingle(2:local 2) cleanup skipSingle local 2
PASS : tst_globaldata::skipSingle(2:local 2)
QDEBUG : tst_globaldata::cleanupTestCase() cleanupTestCase cleanupTestCase (null)
PASS : tst_globaldata::cleanupTestCase()
-Totals: 9 passed, 0 failed, 4 skipped, 0 blacklisted
+Totals: 9 passed, 0 failed, 4 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_globaldata *********
diff --git a/tests/auto/testlib/selftests/expected_globaldata.xml b/tests/auto/testlib/selftests/expected_globaldata.xml
index 5e5d4d8922..0f705ef352 100644
--- a/tests/auto/testlib/selftests/expected_globaldata.xml
+++ b/tests/auto/testlib/selftests/expected_globaldata.xml
@@ -10,7 +10,7 @@
<Description><![CDATA[initTestCase initTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testGlobal">
<Message type="qdebug" file="" line="0">
@@ -89,21 +89,21 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[2:local 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skip">
-<Message type="skip" file="tst_globaldata.cpp" line="129">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[1]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skipLocal">
<Message type="qdebug" file="" line="0">
<DataTag><![CDATA[1:local 1]]></DataTag>
<Description><![CDATA[init skipLocal local 1]]></Description>
</Message>
-<Message type="skip" file="tst_globaldata.cpp" line="149">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[1:local 1]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
@@ -115,7 +115,7 @@
<DataTag><![CDATA[1:local 2]]></DataTag>
<Description><![CDATA[init skipLocal local 2]]></Description>
</Message>
-<Message type="skip" file="tst_globaldata.cpp" line="149">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[1:local 2]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
@@ -123,7 +123,7 @@
<DataTag><![CDATA[1:local 2]]></DataTag>
<Description><![CDATA[cleanup skipLocal local 2]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="skipSingle">
<Message type="qdebug" file="" line="0">
@@ -160,7 +160,7 @@
<DataTag><![CDATA[2:local 1]]></DataTag>
<Description><![CDATA[init skipSingle local 1]]></Description>
</Message>
-<Message type="skip" file="tst_globaldata.cpp" line="143">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp" line="0">
<DataTag><![CDATA[2:local 1]]></DataTag>
<Description><![CDATA[skipping]]></Description>
</Message>
@@ -183,14 +183,14 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[2:local 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[cleanupTestCase cleanupTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_longstring.lightxml b/tests/auto/testlib/selftests/expected_longstring.lightxml
index f8796bed4a..12e4fabd8d 100644
--- a/tests/auto/testlib/selftests/expected_longstring.lightxml
+++ b/tests/auto/testlib/selftests/expected_longstring.lightxml
@@ -5,10 +5,10 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failWithLongString">
-<Incident type="fail" file="tst_longstring.cpp" line="67">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/longstring/tst_longstring.cpp" line="0">
<Description><![CDATA[Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.
@@ -19,10 +19,10 @@ Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. M
Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_longstring.teamcity b/tests/auto/testlib/selftests/expected_longstring.teamcity
index 0e7fa82b9b..0ea45871d1 100644
--- a/tests/auto/testlib/selftests/expected_longstring.teamcity
+++ b/tests/auto/testlib/selftests/expected_longstring.teamcity
@@ -2,7 +2,7 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_LongString']
##teamcity[testFinished name='initTestCase()' flowId='tst_LongString']
##teamcity[testStarted name='failWithLongString()' flowId='tst_LongString']
-##teamcity[testFailed name='failWithLongString()' message='Failure! |[Loc: tst_longstring.cpp(59)|]' details='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.|n|nEtiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.|n|nNam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.|n|nCurabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis.|n|nAenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.' flowId='tst_LongString']
+##teamcity[testFailed name='failWithLongString()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/longstring/tst_longstring.cpp(0)|]' details='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.|n|nEtiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.|n|nNam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, imperdiet iaculis, ipsum. Sed aliquam ultrices mauris. Integer ante arcu, accumsan a, consectetuer eget, posuere ut, mauris. Praesent adipiscing. Phasellus ullamcorper ipsum rutrum nunc. Nunc nonummy metus. Vestibulum volutpat pretium libero. Cras id dui. Aenean ut eros et nisl sagittis vestibulum. Nullam nulla eros, ultricies sit amet, nonummy id, imperdiet feugiat, pede. Sed lectus. Donec mollis hendrerit risus. Phasellus nec sem in justo pellentesque facilisis. Etiam imperdiet imperdiet orci. Nunc nec neque. Phasellus leo dolor, tempus non, auctor et, hendrerit quis, nisi.|n|nCurabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis.|n|nAenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.' flowId='tst_LongString']
##teamcity[testFinished name='failWithLongString()' flowId='tst_LongString']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_LongString']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_LongString']
diff --git a/tests/auto/testlib/selftests/expected_longstring.txt b/tests/auto/testlib/selftests/expected_longstring.txt
index 7ffa77cc1c..3c403c9d92 100644
--- a/tests/auto/testlib/selftests/expected_longstring.txt
+++ b/tests/auto/testlib/selftests/expected_longstring.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_LongString *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_LongString::initTestCase()
FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
@@ -10,7 +10,7 @@ Nam pretium turpis et arcu. Duis arcu tortor, suscipit eget, imperdiet nec, impe
Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. Maecenas malesuada. Praesent congue erat at massa. Sed cursus turpis vitae tortor. Donec posuere vulputate arcu. Phasellus accumsan cursus velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam, nisi quis porttitor congue, elit erat euismod orci, ac placerat dolor lectus quis orci. Phasellus consectetuer vestibulum elit. Aenean tellus metus, bibendum sed, posuere ac, mattis non, nunc. Vestibulum fringilla pede sit amet augue. In turpis. Pellentesque posuere. Praesent turpis.
Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
- Loc: [tst_longstring.cpp(67)]
+ Loc: [qtbase/tests/auto/testlib/selftests/longstring/tst_longstring.cpp(0)]
PASS : tst_LongString::cleanupTestCase()
-Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted
+Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_LongString *********
diff --git a/tests/auto/testlib/selftests/expected_longstring.xml b/tests/auto/testlib/selftests/expected_longstring.xml
index 6623b7cd88..9db4da0e92 100644
--- a/tests/auto/testlib/selftests/expected_longstring.xml
+++ b/tests/auto/testlib/selftests/expected_longstring.xml
@@ -7,10 +7,10 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failWithLongString">
-<Incident type="fail" file="tst_longstring.cpp" line="67">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/longstring/tst_longstring.cpp" line="0">
<Description><![CDATA[Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend sapien. Vestibulum purus quam, scelerisque ut, mollis sed, nonummy id, metus. Nullam accumsan lorem in dui. Cras ultricies mi eu turpis hendrerit fringilla. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In ac dui quis mi consectetuer lacinia.
@@ -21,11 +21,11 @@ Curabitur ligula sapien, tincidunt non, euismod vitae, posuere imperdiet, leo. M
Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.lightxml b/tests/auto/testlib/selftests/expected_maxwarnings.lightxml
index 49db189352..86967ce1dc 100644
--- a/tests/auto/testlib/selftests/expected_maxwarnings.lightxml
+++ b/tests/auto/testlib/selftests/expected_maxwarnings.lightxml
@@ -5,7 +5,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="warn">
<Message type="qwarn" file="" line="0">
@@ -6015,10 +6015,10 @@
<Description><![CDATA[Maximum amount of warnings exceeded. Use -maxwarnings to override.]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.txt b/tests/auto/testlib/selftests/expected_maxwarnings.txt
index 30f8d6f5d3..437ec851dd 100644
--- a/tests/auto/testlib/selftests/expected_maxwarnings.txt
+++ b/tests/auto/testlib/selftests/expected_maxwarnings.txt
@@ -1,5 +1,5 @@
********* Start testing of MaxWarnings *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : MaxWarnings::initTestCase()
QWARN : MaxWarnings::warn() 0
QWARN : MaxWarnings::warn() 1
@@ -2005,5 +2005,5 @@ QWARN : MaxWarnings::warn() 2000
QSYSTEM: MaxWarnings::warn() Maximum amount of warnings exceeded. Use -maxwarnings to override.
PASS : MaxWarnings::warn()
PASS : MaxWarnings::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of MaxWarnings *********
diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.xml b/tests/auto/testlib/selftests/expected_maxwarnings.xml
index 614b054fad..5134d60519 100644
--- a/tests/auto/testlib/selftests/expected_maxwarnings.xml
+++ b/tests/auto/testlib/selftests/expected_maxwarnings.xml
@@ -7,7 +7,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="warn">
<Message type="qwarn" file="" line="0">
@@ -6017,11 +6017,11 @@
<Description><![CDATA[Maximum amount of warnings exceeded. Use -maxwarnings to override.]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_multiexec.lightxml b/tests/auto/testlib/selftests/expected_multiexec.lightxml
new file mode 100644
index 0000000000..344955f049
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_multiexec.lightxml
@@ -0,0 +1,90 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_multiexec.teamcity b/tests/auto/testlib/selftests/expected_multiexec.teamcity
new file mode 100644
index 0000000000..db2aa90272
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_multiexec.teamcity
@@ -0,0 +1,40 @@
+##teamcity[testSuiteStarted name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testStarted name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testStarted name='nothing()' flowId='tst_Nothing']
+##teamcity[testFinished name='nothing()' flowId='tst_Nothing']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testSuiteFinished name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testSuiteStarted name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testStarted name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testStarted name='nothing()' flowId='tst_Nothing']
+##teamcity[testFinished name='nothing()' flowId='tst_Nothing']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testSuiteFinished name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testSuiteStarted name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testStarted name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testStarted name='nothing()' flowId='tst_Nothing']
+##teamcity[testFinished name='nothing()' flowId='tst_Nothing']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testSuiteFinished name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testSuiteStarted name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testStarted name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testStarted name='nothing()' flowId='tst_Nothing']
+##teamcity[testFinished name='nothing()' flowId='tst_Nothing']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testSuiteFinished name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testSuiteStarted name='tst_Nothing' flowId='tst_Nothing']
+##teamcity[testStarted name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='initTestCase()' flowId='tst_Nothing']
+##teamcity[testStarted name='nothing()' flowId='tst_Nothing']
+##teamcity[testFinished name='nothing()' flowId='tst_Nothing']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Nothing']
+##teamcity[testSuiteFinished name='tst_Nothing' flowId='tst_Nothing']
diff --git a/tests/auto/testlib/selftests/expected_multiexec.txt b/tests/auto/testlib/selftests/expected_multiexec.txt
index f3cd942e38..28a5e5679e 100644
--- a/tests/auto/testlib/selftests/expected_multiexec.txt
+++ b/tests/auto/testlib/selftests/expected_multiexec.txt
@@ -1,35 +1,35 @@
********* Start testing of tst_Nothing *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Nothing::initTestCase()
PASS : tst_Nothing::nothing()
PASS : tst_Nothing::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Nothing *********
********* Start testing of tst_Nothing *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Nothing::initTestCase()
PASS : tst_Nothing::nothing()
PASS : tst_Nothing::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Nothing *********
********* Start testing of tst_Nothing *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Nothing::initTestCase()
PASS : tst_Nothing::nothing()
PASS : tst_Nothing::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Nothing *********
********* Start testing of tst_Nothing *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Nothing::initTestCase()
PASS : tst_Nothing::nothing()
PASS : tst_Nothing::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Nothing *********
********* Start testing of tst_Nothing *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Nothing::initTestCase()
PASS : tst_Nothing::nothing()
PASS : tst_Nothing::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Nothing *********
diff --git a/tests/auto/testlib/selftests/expected_multiexec.xml b/tests/auto/testlib/selftests/expected_multiexec.xml
new file mode 100644
index 0000000000..e160b4f3e6
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_multiexec.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Nothing">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Nothing">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Nothing">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Nothing">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Nothing">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="nothing">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_multiexec.xunitxml b/tests/auto/testlib/selftests/expected_multiexec.xunitxml
new file mode 100644
index 0000000000..8ab914842b
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_multiexec.xunitxml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_Nothing">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="nothing"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_Nothing">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="nothing"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_Nothing">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="nothing"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_Nothing">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="nothing"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_Nothing">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="nothing"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_pairdiagnostics.lightxml b/tests/auto/testlib/selftests/expected_pairdiagnostics.lightxml
index 95b932e3c4..7a842e9d36 100644
--- a/tests/auto/testlib/selftests/expected_pairdiagnostics.lightxml
+++ b/tests/auto/testlib/selftests/expected_pairdiagnostics.lightxml
@@ -8,7 +8,7 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="testQPair">
-<Incident type="fail" file="../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="51">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (pair1): "QPair(1,1)"
Expected (pair2): "QPair(1,2)"]]></Description>
@@ -16,7 +16,7 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="testStdPair">
-<Incident type="fail" file="../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="58">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (pair1): "std::pair(1,1)"
Expected (pair2): "std::pair(1,2)"]]></Description>
diff --git a/tests/auto/testlib/selftests/expected_pairdiagnostics.teamcity b/tests/auto/testlib/selftests/expected_pairdiagnostics.teamcity
index 06883570ac..9068e2c45b 100644
--- a/tests/auto/testlib/selftests/expected_pairdiagnostics.teamcity
+++ b/tests/auto/testlib/selftests/expected_pairdiagnostics.teamcity
@@ -2,10 +2,10 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_PairDiagnostics']
##teamcity[testFinished name='initTestCase()' flowId='tst_PairDiagnostics']
##teamcity[testStarted name='testQPair()' flowId='tst_PairDiagnostics']
-##teamcity[testFailed name='testQPair()' message='Failure! |[Loc: ../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(51)|]' details='Compared values are not the same|n Actual (pair1): "QPair(1,1)"|n Expected (pair2): "QPair(1,2)"' flowId='tst_PairDiagnostics']
+##teamcity[testFailed name='testQPair()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(0)|]' details='Compared values are not the same|n Actual (pair1): "QPair(1,1)"|n Expected (pair2): "QPair(1,2)"' flowId='tst_PairDiagnostics']
##teamcity[testFinished name='testQPair()' flowId='tst_PairDiagnostics']
##teamcity[testStarted name='testStdPair()' flowId='tst_PairDiagnostics']
-##teamcity[testFailed name='testStdPair()' message='Failure! |[Loc: ../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(58)|]' details='Compared values are not the same|n Actual (pair1): "std::pair(1,1)"|n Expected (pair2): "std::pair(1,2)"' flowId='tst_PairDiagnostics']
+##teamcity[testFailed name='testStdPair()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(0)|]' details='Compared values are not the same|n Actual (pair1): "std::pair(1,1)"|n Expected (pair2): "std::pair(1,2)"' flowId='tst_PairDiagnostics']
##teamcity[testFinished name='testStdPair()' flowId='tst_PairDiagnostics']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_PairDiagnostics']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_PairDiagnostics']
diff --git a/tests/auto/testlib/selftests/expected_pairdiagnostics.txt b/tests/auto/testlib/selftests/expected_pairdiagnostics.txt
index e09b9a560f..5e29888ba6 100644
--- a/tests/auto/testlib/selftests/expected_pairdiagnostics.txt
+++ b/tests/auto/testlib/selftests/expected_pairdiagnostics.txt
@@ -1,14 +1,14 @@
********* Start testing of tst_PairDiagnostics *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_PairDiagnostics::initTestCase()
FAIL! : tst_PairDiagnostics::testQPair() Compared values are not the same
Actual (pair1): "QPair(1,1)"
Expected (pair2): "QPair(1,2)"
- Loc: [../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(51)]
+ Loc: [qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(0)]
FAIL! : tst_PairDiagnostics::testStdPair() Compared values are not the same
Actual (pair1): "std::pair(1,1)"
Expected (pair2): "std::pair(1,2)"
- Loc: [../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(58)]
+ Loc: [qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp(0)]
PASS : tst_PairDiagnostics::cleanupTestCase()
-Totals: 2 passed, 2 failed, 0 skipped, 0 blacklisted, 1ms
+Totals: 2 passed, 2 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_PairDiagnostics *********
diff --git a/tests/auto/testlib/selftests/expected_pairdiagnostics.xml b/tests/auto/testlib/selftests/expected_pairdiagnostics.xml
index 47921e0b8a..cd98e4d36e 100644
--- a/tests/auto/testlib/selftests/expected_pairdiagnostics.xml
+++ b/tests/auto/testlib/selftests/expected_pairdiagnostics.xml
@@ -7,27 +7,27 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
- <Duration msecs="0.680795"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testQPair">
-<Incident type="fail" file="../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="51">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (pair1): "QPair(1,1)"
Expected (pair2): "QPair(1,2)"]]></Description>
</Incident>
- <Duration msecs="0.085705"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testStdPair">
-<Incident type="fail" file="../../../qt5/qtbase_fixItemData/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="58">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (pair1): "std::pair(1,1)"
Expected (pair2): "std::pair(1,2)"]]></Description>
</Incident>
- <Duration msecs="0.030780"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
- <Duration msecs="0.039052"/>
+ <Duration msecs="0"/>
</TestFunction>
-<Duration msecs="0.995227"/>
+<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_qexecstringlist.lightxml b/tests/auto/testlib/selftests/expected_qexecstringlist.lightxml
new file mode 100644
index 0000000000..c6db60bb1f
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_qexecstringlist.lightxml
@@ -0,0 +1,75 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="testA">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="testB">
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[Data1]]></DataTag>
+</Incident>
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[Data2]]></DataTag>
+</Incident>
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[Data3]]></DataTag>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="testC">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
diff --git a/tests/auto/testlib/selftests/expected_qexecstringlist.teamcity b/tests/auto/testlib/selftests/expected_qexecstringlist.teamcity
new file mode 100644
index 0000000000..bb7ae829dd
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_qexecstringlist.teamcity
@@ -0,0 +1,57 @@
+##teamcity[testSuiteStarted name='tst_QExecStringList' flowId='tst_QExecStringList']
+##teamcity[testStarted name='initTestCase()' flowId='tst_QExecStringList']
+##teamcity[testFinished name='initTestCase()' flowId='tst_QExecStringList']
+##teamcity[testStarted name='testA()' flowId='tst_QExecStringList']
+##teamcity[testFinished name='testA()' flowId='tst_QExecStringList']
+##teamcity[testStarted name='testB(Data1)' flowId='tst_QExecStringList']
+##teamcity[testFinished name='testB(Data1)' flowId='tst_QExecStringList']
+##teamcity[testStarted name='testB(Data2)' flowId='tst_QExecStringList']
+##teamcity[testFinished name='testB(Data2)' flowId='tst_QExecStringList']
+##teamcity[testStarted name='testB(Data3)' flowId='tst_QExecStringList']
+##teamcity[testFinished name='testB(Data3)' flowId='tst_QExecStringList']
+##teamcity[testStarted name='testC()' flowId='tst_QExecStringList']
+##teamcity[testFinished name='testC()' flowId='tst_QExecStringList']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_QExecStringList']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_QExecStringList']
+##teamcity[testSuiteFinished name='tst_QExecStringList' flowId='tst_QExecStringList']
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
diff --git a/tests/auto/testlib/selftests/expected_qexecstringlist.txt b/tests/auto/testlib/selftests/expected_qexecstringlist.txt
index 830e7e8b36..480baedd0a 100644
--- a/tests/auto/testlib/selftests/expected_qexecstringlist.txt
+++ b/tests/auto/testlib/selftests/expected_qexecstringlist.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_QExecStringList *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_QExecStringList::initTestCase()
PASS : tst_QExecStringList::testA()
PASS : tst_QExecStringList::testB(Data1)
@@ -7,10 +7,10 @@ PASS : tst_QExecStringList::testB(Data2)
PASS : tst_QExecStringList::testB(Data3)
PASS : tst_QExecStringList::testC()
PASS : tst_QExecStringList::cleanupTestCase()
-Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_QExecStringList *********
********* Start testing of tst_QExecStringList *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_QExecStringList::initTestCase()
PASS : tst_QExecStringList::testA()
PASS : tst_QExecStringList::testB(Data1)
@@ -18,35 +18,35 @@ PASS : tst_QExecStringList::testB(Data2)
PASS : tst_QExecStringList::testB(Data3)
PASS : tst_QExecStringList::testC()
PASS : tst_QExecStringList::cleanupTestCase()
-Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_QExecStringList *********
********* Start testing of tst_QExecStringList *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_QExecStringList::initTestCase()
PASS : tst_QExecStringList::testA()
PASS : tst_QExecStringList::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_QExecStringList *********
********* Start testing of tst_QExecStringList *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_QExecStringList::initTestCase()
PASS : tst_QExecStringList::testB(Data1)
PASS : tst_QExecStringList::testB(Data2)
PASS : tst_QExecStringList::testB(Data3)
PASS : tst_QExecStringList::cleanupTestCase()
-Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_QExecStringList *********
********* Start testing of tst_QExecStringList *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_QExecStringList::initTestCase()
PASS : tst_QExecStringList::testB(Data2)
PASS : tst_QExecStringList::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_QExecStringList *********
********* Start testing of tst_QExecStringList *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_QExecStringList::initTestCase()
PASS : tst_QExecStringList::testC()
PASS : tst_QExecStringList::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_QExecStringList *********
diff --git a/tests/auto/testlib/selftests/expected_qexecstringlist.xml b/tests/auto/testlib/selftests/expected_qexecstringlist.xml
new file mode 100644
index 0000000000..403d2725b0
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_qexecstringlist.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_QExecStringList">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="testA">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="testB">
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[Data1]]></DataTag>
+</Incident>
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[Data2]]></DataTag>
+</Incident>
+<Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[Data3]]></DataTag>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="testC">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
diff --git a/tests/auto/testlib/selftests/expected_qexecstringlist.xunitxml b/tests/auto/testlib/selftests/expected_qexecstringlist.xunitxml
new file mode 100644
index 0000000000..b352b8e6b9
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_qexecstringlist.xunitxml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="5" name="tst_QExecStringList">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="testA"/>
+ <testcase result="pass" name="testB"/>
+ <testcase result="pass" name="testC"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testA()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data1)
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::testB(Data3)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testB(Data2)
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
+********* Start testing of tst_QExecStringList *********
+Config: Using QtTest library
+PASS : tst_QExecStringList::initTestCase()
+PASS : tst_QExecStringList::testC()
+PASS : tst_QExecStringList::cleanupTestCase()
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_QExecStringList *********
diff --git a/tests/auto/testlib/selftests/expected_silent.lightxml b/tests/auto/testlib/selftests/expected_silent.lightxml
new file mode 100644
index 0000000000..29b582cb4b
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_silent.lightxml
@@ -0,0 +1,66 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="pass">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="skip">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This test should skip]]></Description>
+</Message>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="fail">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (This test should fail)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xfail">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This test should XFAIL]]></Description>
+</Incident>
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xpass">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA['true' returned TRUE unexpectedly. (This test should XPASS)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="messages">
+<Message type="qwarn" file="" line="0">
+ <Description><![CDATA[This is a warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qdebug" file="" line="0">
+ <Description><![CDATA[This is a debug message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="system" file="" line="0">
+ <Description><![CDATA[This is a critical message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qinfo" file="" line="0">
+ <Description><![CDATA[This is an info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qfatal" file="" line="0">
+ <Description><![CDATA[This is a fatal error message that should still appear in silent test output]]></Description>
+</Message>
+<Incident type="fail" file="Unknown file" line="0">
+ <Description><![CDATA[Received a fatal error.]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_silent.teamcity b/tests/auto/testlib/selftests/expected_silent.teamcity
index 0f68bcb437..327d667fee 100644
--- a/tests/auto/testlib/selftests/expected_silent.teamcity
+++ b/tests/auto/testlib/selftests/expected_silent.teamcity
@@ -1,12 +1,12 @@
##teamcity[testSuiteStarted name='tst_Silent' flowId='tst_Silent']
##teamcity[testStarted name='fail()' flowId='tst_Silent']
-##teamcity[testFailed name='fail()' message='Failure! |[Loc: tst_silent.cpp(65)|]' details='|'false|' returned FALSE. (This test should fail)' flowId='tst_Silent']
+##teamcity[testFailed name='fail()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)|]' details='|'false|' returned FALSE. (This test should fail)' flowId='tst_Silent']
##teamcity[testFinished name='fail()' flowId='tst_Silent']
##teamcity[testStarted name='xpass()' flowId='tst_Silent']
-##teamcity[testFailed name='xpass()' message='Failure! |[Loc: tst_silent.cpp(77)|]' details='|'true|' returned TRUE unexpectedly. (This test should XPASS)' flowId='tst_Silent']
+##teamcity[testFailed name='xpass()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)|]' details='|'true|' returned TRUE unexpectedly. (This test should XPASS)' flowId='tst_Silent']
##teamcity[testFinished name='xpass()' flowId='tst_Silent']
##teamcity[testStarted name='messages()' flowId='tst_Silent']
-##teamcity[testFailed name='messages()' message='Failure! |[Loc: unknown file(0)|]' details='Received a fatal error.' flowId='tst_Silent']
+##teamcity[testFailed name='messages()' message='Failure! |[Loc: Unknown file(0)|]' details='Received a fatal error.' flowId='tst_Silent']
##teamcity[testStdOut name='messages()' out='QFATAL: This is a fatal error message that should still appear in silent test output' flowId='tst_Silent']
##teamcity[testFinished name='messages()' flowId='tst_Silent']
##teamcity[testSuiteFinished name='tst_Silent' flowId='tst_Silent']
diff --git a/tests/auto/testlib/selftests/expected_silent.txt b/tests/auto/testlib/selftests/expected_silent.txt
index 34728f5829..b70a97dbac 100644
--- a/tests/auto/testlib/selftests/expected_silent.txt
+++ b/tests/auto/testlib/selftests/expected_silent.txt
@@ -1,9 +1,9 @@
Testing tst_Silent
FAIL! : tst_Silent::fail() 'false' returned FALSE. (This test should fail)
- Loc: [tst_silent.cpp(73)]
+ Loc: [qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)]
XPASS : tst_Silent::xpass() 'true' returned TRUE unexpectedly. (This test should XPASS)
- Loc: [tst_silent.cpp(85)]
+ Loc: [qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)]
QFATAL : tst_Silent::messages() This is a fatal error message that should still appear in silent test output
FAIL! : tst_Silent::messages() Received a fatal error.
Loc: [Unknown file(0)]
-Totals: 3 passed, 3 failed, 1 skipped, 0 blacklisted
+Totals: 3 passed, 3 failed, 1 skipped, 0 blacklisted, 0ms
diff --git a/tests/auto/testlib/selftests/expected_silent.xml b/tests/auto/testlib/selftests/expected_silent.xml
new file mode 100644
index 0000000000..6d2fae9fab
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_silent.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Silent">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="pass">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="skip">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This test should skip]]></Description>
+</Message>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="fail">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (This test should fail)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xfail">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This test should XFAIL]]></Description>
+</Incident>
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="xpass">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA['true' returned TRUE unexpectedly. (This test should XPASS)]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="messages">
+<Message type="qwarn" file="" line="0">
+ <Description><![CDATA[This is a warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib warning that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qdebug" file="" line="0">
+ <Description><![CDATA[This is a debug message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="system" file="" line="0">
+ <Description><![CDATA[This is a critical message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qinfo" file="" line="0">
+ <Description><![CDATA[This is an info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp" line="0">
+ <Description><![CDATA[This is an internal testlib info message that should not appear in silent test output]]></Description>
+</Message>
+<Message type="qfatal" file="" line="0">
+ <Description><![CDATA[This is a fatal error message that should still appear in silent test output]]></Description>
+</Message>
+<Incident type="fail" file="Unknown file" line="0">
+ <Description><![CDATA[Received a fatal error.]]></Description>
+</Incident>
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_silent.xunitxml b/tests/auto/testlib/selftests/expected_silent.xunitxml
new file mode 100644
index 0000000000..ea229d1dc7
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_silent.xunitxml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="9" failures="3" tests="7" name="tst_Silent">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="pass"/>
+ <testcase name="skip">
+ <!-- message="This test should skip" type="skip" -->
+ </testcase>
+ <testcase result="fail" name="fail">
+ <failure message="&apos;false&apos; returned FALSE. (This test should fail)" result="fail"/>
+ </testcase>
+ <testcase result="xfail" name="xfail">
+ <!-- message="This test should XFAIL" type="info" -->
+ </testcase>
+ <testcase result="xpass" name="xpass">
+ <failure message="&apos;true&apos; returned TRUE unexpectedly. (This test should XPASS)" result="xpass"/>
+ </testcase>
+ <testcase result="fail" name="messages">
+ <!-- message="This is a warning that should not appear in silent test output" type="qwarn" -->
+ <!-- message="This is an internal testlib warning that should not appear in silent test output" type="warn" -->
+ <!-- message="This is a debug message that should not appear in silent test output" type="qdebug" -->
+ <!-- message="This is a critical message that should not appear in silent test output" type="system" -->
+ <!-- message="This is an info message that should not appear in silent test output" type="qinfo" -->
+ <!-- message="This is an internal testlib info message that should not appear in silent test output" type="info" -->
+ <!-- message="This is a fatal error message that should still appear in silent test output" type="qfatal" -->
+ <failure message="Received a fatal error." result="fail"/>
+ </testcase>
+ <system-err>
+<![CDATA[This test should skip]]>
+<![CDATA[This test should XFAIL]]>
+<![CDATA[This is a warning that should not appear in silent test output]]>
+<![CDATA[This is an internal testlib warning that should not appear in silent test output]]>
+<![CDATA[This is a debug message that should not appear in silent test output]]>
+<![CDATA[This is a critical message that should not appear in silent test output]]>
+<![CDATA[This is an info message that should not appear in silent test output]]>
+<![CDATA[This is an internal testlib info message that should not appear in silent test output]]>
+<![CDATA[This is a fatal error message that should still appear in silent test output]]>
+ </system-err>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_singleskip.lightxml b/tests/auto/testlib/selftests/expected_singleskip.lightxml
index ce09c0a9ad..10e35ae27b 100644
--- a/tests/auto/testlib/selftests/expected_singleskip.lightxml
+++ b/tests/auto/testlib/selftests/expected_singleskip.lightxml
@@ -5,16 +5,16 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="myTest">
-<Message type="skip" file="tst_singleskip.cpp" line="56">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp" line="0">
<Description><![CDATA[skipping test]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_singleskip.teamcity b/tests/auto/testlib/selftests/expected_singleskip.teamcity
index 6c3a04aeb8..461538cead 100644
--- a/tests/auto/testlib/selftests/expected_singleskip.teamcity
+++ b/tests/auto/testlib/selftests/expected_singleskip.teamcity
@@ -1,7 +1,7 @@
##teamcity[testSuiteStarted name='tst_SingleSkip' flowId='tst_SingleSkip']
##teamcity[testStarted name='initTestCase()' flowId='tst_SingleSkip']
##teamcity[testFinished name='initTestCase()' flowId='tst_SingleSkip']
-##teamcity[testIgnored name='myTest()' message='skipping test |[Loc: tst_singleskip.cpp(48)|]' flowId='tst_SingleSkip']
+##teamcity[testIgnored name='myTest()' message='skipping test |[Loc: qtbase/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp(0)|]' flowId='tst_SingleSkip']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_SingleSkip']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_SingleSkip']
##teamcity[testSuiteFinished name='tst_SingleSkip' flowId='tst_SingleSkip']
diff --git a/tests/auto/testlib/selftests/expected_singleskip.txt b/tests/auto/testlib/selftests/expected_singleskip.txt
index 34c877cfd4..f7484633bd 100644
--- a/tests/auto/testlib/selftests/expected_singleskip.txt
+++ b/tests/auto/testlib/selftests/expected_singleskip.txt
@@ -1,8 +1,8 @@
********* Start testing of tst_SingleSkip *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_SingleSkip::initTestCase()
SKIP : tst_SingleSkip::myTest() skipping test
- Loc: [tst_singleskip.cpp(56)]
+ Loc: [qtbase/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp(0)]
PASS : tst_SingleSkip::cleanupTestCase()
-Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted
+Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_SingleSkip *********
diff --git a/tests/auto/testlib/selftests/expected_singleskip.xml b/tests/auto/testlib/selftests/expected_singleskip.xml
index 0c5cdade3d..a36e74a236 100644
--- a/tests/auto/testlib/selftests/expected_singleskip.xml
+++ b/tests/auto/testlib/selftests/expected_singleskip.xml
@@ -7,17 +7,17 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="myTest">
-<Message type="skip" file="tst_singleskip.cpp" line="56">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp" line="0">
<Description><![CDATA[skipping test]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_skip.lightxml b/tests/auto/testlib/selftests/expected_skip.lightxml
index ee83d263b5..d44cfe317d 100644
--- a/tests/auto/testlib/selftests/expected_skip.lightxml
+++ b/tests/auto/testlib/selftests/expected_skip.lightxml
@@ -5,22 +5,22 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test">
-<Message type="skip" file="tst_skip.cpp" line="68">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp" line="0">
<Description><![CDATA[skipping all]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="emptytest">
-<Message type="skip" file="tst_skip.cpp" line="78">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp" line="0">
<Description><![CDATA[skipping all]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="singleSkip">
-<Message type="skip" file="tst_skip.cpp" line="97">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp" line="0">
<DataTag><![CDATA[local 1]]></DataTag>
<Description><![CDATA[skipping one]]></Description>
</Message>
@@ -31,10 +31,10 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[local 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skip.teamcity b/tests/auto/testlib/selftests/expected_skip.teamcity
index 5c01cf1ff2..472690195f 100644
--- a/tests/auto/testlib/selftests/expected_skip.teamcity
+++ b/tests/auto/testlib/selftests/expected_skip.teamcity
@@ -1,9 +1,9 @@
##teamcity[testSuiteStarted name='tst_Skip' flowId='tst_Skip']
##teamcity[testStarted name='initTestCase()' flowId='tst_Skip']
##teamcity[testFinished name='initTestCase()' flowId='tst_Skip']
-##teamcity[testIgnored name='test()' message='skipping all |[Loc: tst_skip.cpp(60)|]' flowId='tst_Skip']
-##teamcity[testIgnored name='emptytest()' message='skipping all |[Loc: tst_skip.cpp(70)|]' flowId='tst_Skip']
-##teamcity[testIgnored name='singleSkip(local 1)' message='skipping one |[Loc: tst_skip.cpp(89)|]' flowId='tst_Skip']
+##teamcity[testIgnored name='test()' message='skipping all |[Loc: qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(0)|]' flowId='tst_Skip']
+##teamcity[testIgnored name='emptytest()' message='skipping all |[Loc: qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(0)|]' flowId='tst_Skip']
+##teamcity[testIgnored name='singleSkip(local 1)' message='skipping one |[Loc: qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(0)|]' flowId='tst_Skip']
##teamcity[testStarted name='singleSkip(local 2)' flowId='tst_Skip']
##teamcity[testStdOut name='singleSkip(local 2)' out='QDEBUG: this line should only be reached once (true)' flowId='tst_Skip']
##teamcity[testFinished name='singleSkip(local 2)' flowId='tst_Skip']
diff --git a/tests/auto/testlib/selftests/expected_skip.txt b/tests/auto/testlib/selftests/expected_skip.txt
index a48427d3b2..9499a54be3 100644
--- a/tests/auto/testlib/selftests/expected_skip.txt
+++ b/tests/auto/testlib/selftests/expected_skip.txt
@@ -1,14 +1,14 @@
********* Start testing of tst_Skip *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Skip::initTestCase()
SKIP : tst_Skip::test() skipping all
- Loc: [tst_skip.cpp(68)]
+ Loc: [qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(0)]
SKIP : tst_Skip::emptytest() skipping all
- Loc: [tst_skip.cpp(78)]
+ Loc: [qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(0)]
SKIP : tst_Skip::singleSkip(local 1) skipping one
- Loc: [tst_skip.cpp(97)]
+ Loc: [qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp(0)]
QDEBUG : tst_Skip::singleSkip(local 2) this line should only be reached once (true)
PASS : tst_Skip::singleSkip(local 2)
PASS : tst_Skip::cleanupTestCase()
-Totals: 3 passed, 0 failed, 3 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 3 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Skip *********
diff --git a/tests/auto/testlib/selftests/expected_skip.xml b/tests/auto/testlib/selftests/expected_skip.xml
index 2c830bc9fb..70d3d12cf5 100644
--- a/tests/auto/testlib/selftests/expected_skip.xml
+++ b/tests/auto/testlib/selftests/expected_skip.xml
@@ -7,22 +7,22 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test">
-<Message type="skip" file="tst_skip.cpp" line="68">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp" line="0">
<Description><![CDATA[skipping all]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="emptytest">
-<Message type="skip" file="tst_skip.cpp" line="78">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp" line="0">
<Description><![CDATA[skipping all]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="singleSkip">
-<Message type="skip" file="tst_skip.cpp" line="97">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skip/tst_skip.cpp" line="0">
<DataTag><![CDATA[local 1]]></DataTag>
<Description><![CDATA[skipping one]]></Description>
</Message>
@@ -33,11 +33,11 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[local 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml
index dbbc30c0db..ac310226e8 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml
@@ -5,16 +5,16 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
-<Message type="skip" file="tst_skipcleanup.cpp" line="59">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp" line="0">
<Description><![CDATA[Skip inside cleanupTestCase.]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.teamcity b/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
index 7f78f82004..12b0d0e0d2 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
@@ -3,5 +3,5 @@
##teamcity[testFinished name='initTestCase()' flowId='tst_SkipCleanup']
##teamcity[testStarted name='aTestFunction()' flowId='tst_SkipCleanup']
##teamcity[testFinished name='aTestFunction()' flowId='tst_SkipCleanup']
-##teamcity[testIgnored name='cleanupTestCase()' message='Skip inside cleanupTestCase. |[Loc: tst_skipcleanup.cpp(51)|]' flowId='tst_SkipCleanup']
+##teamcity[testIgnored name='cleanupTestCase()' message='Skip inside cleanupTestCase. |[Loc: qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp(0)|]' flowId='tst_SkipCleanup']
##teamcity[testSuiteFinished name='tst_SkipCleanup' flowId='tst_SkipCleanup']
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.txt b/tests/auto/testlib/selftests/expected_skipcleanup.txt
index 3120cffcb6..987e2b9a14 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.txt
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.txt
@@ -1,8 +1,8 @@
********* Start testing of tst_SkipCleanup *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_SkipCleanup::initTestCase()
PASS : tst_SkipCleanup::aTestFunction()
SKIP : tst_SkipCleanup::cleanupTestCase() Skip inside cleanupTestCase.
- Loc: [tst_skipcleanup.cpp(59)]
-Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted
+ Loc: [qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp(0)]
+Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_SkipCleanup *********
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.xml b/tests/auto/testlib/selftests/expected_skipcleanup.xml
index 7b787ebb3d..14207b2196 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.xml
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.xml
@@ -7,17 +7,17 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
-<Message type="skip" file="tst_skipcleanup.cpp" line="59">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp" line="0">
<Description><![CDATA[Skip inside cleanupTestCase.]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_skipinit.lightxml b/tests/auto/testlib/selftests/expected_skipinit.lightxml
index 3682068825..76f4365cae 100644
--- a/tests/auto/testlib/selftests/expected_skipinit.lightxml
+++ b/tests/auto/testlib/selftests/expected_skipinit.lightxml
@@ -4,13 +4,13 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Message type="skip" file="tst_skipinit.cpp" line="55">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp" line="0">
<Description><![CDATA[Skip inside initTestCase. This should skip all tests in the class.]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipinit.teamcity b/tests/auto/testlib/selftests/expected_skipinit.teamcity
index 7f36d6d3b9..07a30c743d 100644
--- a/tests/auto/testlib/selftests/expected_skipinit.teamcity
+++ b/tests/auto/testlib/selftests/expected_skipinit.teamcity
@@ -1,5 +1,5 @@
##teamcity[testSuiteStarted name='tst_SkipInit' flowId='tst_SkipInit']
-##teamcity[testIgnored name='initTestCase()' message='Skip inside initTestCase. This should skip all tests in the class. |[Loc: tst_skipinit.cpp(47)|]' flowId='tst_SkipInit']
+##teamcity[testIgnored name='initTestCase()' message='Skip inside initTestCase. This should skip all tests in the class. |[Loc: qtbase/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp(0)|]' flowId='tst_SkipInit']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_SkipInit']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_SkipInit']
##teamcity[testSuiteFinished name='tst_SkipInit' flowId='tst_SkipInit']
diff --git a/tests/auto/testlib/selftests/expected_skipinit.txt b/tests/auto/testlib/selftests/expected_skipinit.txt
index 8a2bbe01db..9fc2d98006 100644
--- a/tests/auto/testlib/selftests/expected_skipinit.txt
+++ b/tests/auto/testlib/selftests/expected_skipinit.txt
@@ -1,7 +1,7 @@
********* Start testing of tst_SkipInit *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
SKIP : tst_SkipInit::initTestCase() Skip inside initTestCase. This should skip all tests in the class.
- Loc: [tst_skipinit.cpp(55)]
+ Loc: [qtbase/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp(0)]
PASS : tst_SkipInit::cleanupTestCase()
-Totals: 1 passed, 0 failed, 1 skipped, 0 blacklisted
+Totals: 1 passed, 0 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_SkipInit *********
diff --git a/tests/auto/testlib/selftests/expected_skipinit.xml b/tests/auto/testlib/selftests/expected_skipinit.xml
index 9d6a38b82f..7e0c1564b6 100644
--- a/tests/auto/testlib/selftests/expected_skipinit.xml
+++ b/tests/auto/testlib/selftests/expected_skipinit.xml
@@ -6,14 +6,14 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Message type="skip" file="tst_skipinit.cpp" line="55">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp" line="0">
<Description><![CDATA[Skip inside initTestCase. This should skip all tests in the class.]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.lightxml b/tests/auto/testlib/selftests/expected_skipinitdata.lightxml
index 26afcb4ab1..27a207a4a2 100644
--- a/tests/auto/testlib/selftests/expected_skipinitdata.lightxml
+++ b/tests/auto/testlib/selftests/expected_skipinitdata.lightxml
@@ -4,9 +4,9 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Message type="skip" file="tst_skipinitdata.cpp" line="56">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp" line="0">
<Description><![CDATA[Skip inside initTestCase_data. This should skip all tests in the class.]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.teamcity b/tests/auto/testlib/selftests/expected_skipinitdata.teamcity
index 82b8be5370..8ae11fc7ff 100644
--- a/tests/auto/testlib/selftests/expected_skipinitdata.teamcity
+++ b/tests/auto/testlib/selftests/expected_skipinitdata.teamcity
@@ -1,3 +1,3 @@
##teamcity[testSuiteStarted name='tst_SkipInitData' flowId='tst_SkipInitData']
-##teamcity[testIgnored name='initTestCase()' message='Skip inside initTestCase_data. This should skip all tests in the class. |[Loc: tst_skipinitdata.cpp(48)|]' flowId='tst_SkipInitData']
+##teamcity[testIgnored name='initTestCase()' message='Skip inside initTestCase_data. This should skip all tests in the class. |[Loc: qtbase/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp(0)|]' flowId='tst_SkipInitData']
##teamcity[testSuiteFinished name='tst_SkipInitData' flowId='tst_SkipInitData']
diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.txt b/tests/auto/testlib/selftests/expected_skipinitdata.txt
index 654098630e..c245f52847 100644
--- a/tests/auto/testlib/selftests/expected_skipinitdata.txt
+++ b/tests/auto/testlib/selftests/expected_skipinitdata.txt
@@ -1,6 +1,6 @@
********* Start testing of tst_SkipInitData *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
SKIP : tst_SkipInitData::initTestCase() Skip inside initTestCase_data. This should skip all tests in the class.
- Loc: [tst_skipinitdata.cpp(56)]
-Totals: 0 passed, 0 failed, 1 skipped, 0 blacklisted
+ Loc: [qtbase/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp(0)]
+Totals: 0 passed, 0 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_SkipInitData *********
diff --git a/tests/auto/testlib/selftests/expected_skipinitdata.xml b/tests/auto/testlib/selftests/expected_skipinitdata.xml
index 9ab84f21a1..cf0189e6be 100644
--- a/tests/auto/testlib/selftests/expected_skipinitdata.xml
+++ b/tests/auto/testlib/selftests/expected_skipinitdata.xml
@@ -6,10 +6,10 @@
<QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
</Environment>
<TestFunction name="initTestCase">
-<Message type="skip" file="tst_skipinitdata.cpp" line="56">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp" line="0">
<Description><![CDATA[Skip inside initTestCase_data. This should skip all tests in the class.]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_sleep.lightxml b/tests/auto/testlib/selftests/expected_sleep.lightxml
new file mode 100644
index 0000000000..97b65d1259
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_sleep.lightxml
@@ -0,0 +1,18 @@
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="sleep">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_sleep.txt b/tests/auto/testlib/selftests/expected_sleep.txt
index 58c7b928c0..d18c3212bb 100644
--- a/tests/auto/testlib/selftests/expected_sleep.txt
+++ b/tests/auto/testlib/selftests/expected_sleep.txt
@@ -1,7 +1,7 @@
********* Start testing of tst_Sleep *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Sleep::initTestCase()
PASS : tst_Sleep::sleep()
PASS : tst_Sleep::cleanupTestCase()
-Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Sleep *********
diff --git a/tests/auto/testlib/selftests/expected_sleep.xml b/tests/auto/testlib/selftests/expected_sleep.xml
new file mode 100644
index 0000000000..5729c0ac9d
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_sleep.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_Sleep">
+<Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+</Environment>
+<TestFunction name="initTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="sleep">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<TestFunction name="cleanupTestCase">
+<Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+</TestFunction>
+<Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_sleep.xunitxml b/tests/auto/testlib/selftests/expected_sleep.xunitxml
new file mode 100644
index 0000000000..138486fc02
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_sleep.xunitxml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite errors="0" failures="0" tests="3" name="tst_Sleep">
+ <properties>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QTestVersion"/>
+ <property value="@INSERT_QT_VERSION_HERE@" name="QtVersion"/>
+ <property value="" name="QtBuild"/>
+ </properties>
+ <testcase result="pass" name="initTestCase"/>
+ <testcase result="pass" name="sleep"/>
+ <testcase result="pass" name="cleanupTestCase"/>
+ <system-err/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_strcmp.lightxml b/tests/auto/testlib/selftests/expected_strcmp.lightxml
index 93a860431e..e35ec497cc 100644
--- a/tests/auto/testlib/selftests/expected_strcmp.lightxml
+++ b/tests/auto/testlib/selftests/expected_strcmp.lightxml
@@ -5,63 +5,63 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="compareCharStars">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="compareByteArray">
-<Incident type="xfail" file="tst_strcmp.cpp" line="88">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Next test should fail]]></Description>
</Incident>
-<Incident type="xfail" file="tst_strcmp.cpp" line="95">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Next test should fail]]></Description>
</Incident>
-<Incident type="xfail" file="tst_strcmp.cpp" line="102">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Next test should fail]]></Description>
</Incident>
-<Incident type="fail" file="tst_strcmp.cpp" line="109">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (a): "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"...
Expected (b): "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArray">
-<Incident type="fail" file="tst_strcmp.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("abc")): "abc"
Expected (QByteArray("cba")): "cba"]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArrayNull">
-<Incident type="fail" file="tst_strcmp.cpp" line="121">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("foo")): "foo"
Expected (QByteArray()) : ""]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArrayEmpty">
-<Incident type="fail" file="tst_strcmp.cpp" line="126">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("")) : ""
Expected (QByteArray("foo")): "foo"]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArraySingleChars">
-<Incident type="fail" file="tst_strcmp.cpp" line="133">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("6")): "6"
Expected (QByteArray("7")): "7"]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_strcmp.teamcity b/tests/auto/testlib/selftests/expected_strcmp.teamcity
index 1e56488067..b0a614e264 100644
--- a/tests/auto/testlib/selftests/expected_strcmp.teamcity
+++ b/tests/auto/testlib/selftests/expected_strcmp.teamcity
@@ -4,20 +4,20 @@
##teamcity[testStarted name='compareCharStars()' flowId='tst_StrCmp']
##teamcity[testFinished name='compareCharStars()' flowId='tst_StrCmp']
##teamcity[testStarted name='compareByteArray()' flowId='tst_StrCmp']
-##teamcity[testFailed name='compareByteArray()' message='Failure! |[Loc: tst_strcmp.cpp(101)|]' details='Compared values are not the same|n Actual (a): "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"...|n Expected (b): "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...' flowId='tst_StrCmp']
-##teamcity[testStdOut name='compareByteArray()' out='XFAIL |[Loc: tst_strcmp.cpp(80)|]: Next test should fail|nXFAIL |[Loc: tst_strcmp.cpp(87)|]: Next test should fail|nXFAIL |[Loc: tst_strcmp.cpp(94)|]: Next test should fail' flowId='tst_StrCmp']
+##teamcity[testFailed name='compareByteArray()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]' details='Compared values are not the same|n Actual (a): "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"...|n Expected (b): "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...' flowId='tst_StrCmp']
+##teamcity[testStdOut name='compareByteArray()' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]: Next test should fail|nXFAIL |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]: Next test should fail|nXFAIL |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]: Next test should fail' flowId='tst_StrCmp']
##teamcity[testFinished name='compareByteArray()' flowId='tst_StrCmp']
##teamcity[testStarted name='failByteArray()' flowId='tst_StrCmp']
-##teamcity[testFailed name='failByteArray()' message='Failure! |[Loc: tst_strcmp.cpp(107)|]' details='Compared values are not the same|n Actual (QByteArray("abc")): "abc"|n Expected (QByteArray("cba")): "cba"' flowId='tst_StrCmp']
+##teamcity[testFailed name='failByteArray()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]' details='Compared values are not the same|n Actual (QByteArray("abc")): "abc"|n Expected (QByteArray("cba")): "cba"' flowId='tst_StrCmp']
##teamcity[testFinished name='failByteArray()' flowId='tst_StrCmp']
##teamcity[testStarted name='failByteArrayNull()' flowId='tst_StrCmp']
-##teamcity[testFailed name='failByteArrayNull()' message='Failure! |[Loc: tst_strcmp.cpp(113)|]' details='Compared values are not the same|n Actual (QByteArray("foo")): "foo"|n Expected (QByteArray()) : ""' flowId='tst_StrCmp']
+##teamcity[testFailed name='failByteArrayNull()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]' details='Compared values are not the same|n Actual (QByteArray("foo")): "foo"|n Expected (QByteArray()) : ""' flowId='tst_StrCmp']
##teamcity[testFinished name='failByteArrayNull()' flowId='tst_StrCmp']
##teamcity[testStarted name='failByteArrayEmpty()' flowId='tst_StrCmp']
-##teamcity[testFailed name='failByteArrayEmpty()' message='Failure! |[Loc: tst_strcmp.cpp(118)|]' details='Compared values are not the same|n Actual (QByteArray("")) : ""|n Expected (QByteArray("foo")): "foo"' flowId='tst_StrCmp']
+##teamcity[testFailed name='failByteArrayEmpty()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]' details='Compared values are not the same|n Actual (QByteArray("")) : ""|n Expected (QByteArray("foo")): "foo"' flowId='tst_StrCmp']
##teamcity[testFinished name='failByteArrayEmpty()' flowId='tst_StrCmp']
##teamcity[testStarted name='failByteArraySingleChars()' flowId='tst_StrCmp']
-##teamcity[testFailed name='failByteArraySingleChars()' message='Failure! |[Loc: tst_strcmp.cpp(125)|]' details='Compared values are not the same|n Actual (QByteArray("6")): "6"|n Expected (QByteArray("7")): "7"' flowId='tst_StrCmp']
+##teamcity[testFailed name='failByteArraySingleChars()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)|]' details='Compared values are not the same|n Actual (QByteArray("6")): "6"|n Expected (QByteArray("7")): "7"' flowId='tst_StrCmp']
##teamcity[testFinished name='failByteArraySingleChars()' flowId='tst_StrCmp']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_StrCmp']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_StrCmp']
diff --git a/tests/auto/testlib/selftests/expected_strcmp.txt b/tests/auto/testlib/selftests/expected_strcmp.txt
index 270ce09892..ed8f9125f3 100644
--- a/tests/auto/testlib/selftests/expected_strcmp.txt
+++ b/tests/auto/testlib/selftests/expected_strcmp.txt
@@ -1,33 +1,33 @@
********* Start testing of tst_StrCmp *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_StrCmp::initTestCase()
PASS : tst_StrCmp::compareCharStars()
XFAIL : tst_StrCmp::compareByteArray() Next test should fail
- Loc: [tst_strcmp.cpp(88)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
XFAIL : tst_StrCmp::compareByteArray() Next test should fail
- Loc: [tst_strcmp.cpp(95)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
XFAIL : tst_StrCmp::compareByteArray() Next test should fail
- Loc: [tst_strcmp.cpp(102)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
FAIL! : tst_StrCmp::compareByteArray() Compared values are not the same
Actual (a): "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"...
Expected (b): "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...
- Loc: [/home/thiago/src/qt/qt5/qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(109)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
FAIL! : tst_StrCmp::failByteArray() Compared values are not the same
Actual (QByteArray("abc")): "abc"
Expected (QByteArray("cba")): "cba"
- Loc: [/home/thiago/src/qt/qt5/qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
FAIL! : tst_StrCmp::failByteArrayNull() Compared values are not the same
Actual (QByteArray("foo")): "foo"
Expected (QByteArray()) : ""
- Loc: [/home/thiago/src/qt/qt5/qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(121)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
FAIL! : tst_StrCmp::failByteArrayEmpty() Compared values are not the same
Actual (QByteArray("")) : ""
Expected (QByteArray("foo")): "foo"
- Loc: [/home/thiago/src/qt/qt5/qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(126)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
FAIL! : tst_StrCmp::failByteArraySingleChars() Compared values are not the same
Actual (QByteArray("6")): "6"
Expected (QByteArray("7")): "7"
- Loc: [/home/thiago/src/qt/qt5/qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(133)]
+ Loc: [qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp(0)]
PASS : tst_StrCmp::cleanupTestCase()
-Totals: 3 passed, 5 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 5 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_StrCmp *********
diff --git a/tests/auto/testlib/selftests/expected_strcmp.xml b/tests/auto/testlib/selftests/expected_strcmp.xml
index 9e14dddd7c..7848eea61f 100644
--- a/tests/auto/testlib/selftests/expected_strcmp.xml
+++ b/tests/auto/testlib/selftests/expected_strcmp.xml
@@ -7,64 +7,64 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="compareCharStars">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="compareByteArray">
-<Incident type="xfail" file="tst_strcmp.cpp" line="88">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Next test should fail]]></Description>
</Incident>
-<Incident type="xfail" file="tst_strcmp.cpp" line="95">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Next test should fail]]></Description>
</Incident>
-<Incident type="xfail" file="tst_strcmp.cpp" line="102">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Next test should fail]]></Description>
</Incident>
-<Incident type="fail" file="tst_strcmp.cpp" line="109">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (a): "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"...
Expected (b): "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"...]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArray">
-<Incident type="fail" file="tst_strcmp.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("abc")): "abc"
Expected (QByteArray("cba")): "cba"]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArrayNull">
-<Incident type="fail" file="tst_strcmp.cpp" line="121">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("foo")): "foo"
Expected (QByteArray()) : ""]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArrayEmpty">
-<Incident type="fail" file="tst_strcmp.cpp" line="126">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("")) : ""
Expected (QByteArray("foo")): "foo"]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="failByteArraySingleChars">
-<Incident type="fail" file="tst_strcmp.cpp" line="133">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (QByteArray("6")): "6"
Expected (QByteArray("7")): "7"]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_subtest.lightxml b/tests/auto/testlib/selftests/expected_subtest.lightxml
index 2e484aafef..f35f6a6dc4 100644
--- a/tests/auto/testlib/selftests/expected_subtest.lightxml
+++ b/tests/auto/testlib/selftests/expected_subtest.lightxml
@@ -8,7 +8,7 @@
<Description><![CDATA[initTestCase initTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test1">
<Message type="qdebug" file="" line="0">
@@ -21,7 +21,7 @@
<Description><![CDATA[cleanup test1 (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test2">
<Message type="qdebug" file="" line="0">
@@ -87,7 +87,7 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[data2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test3">
<Message type="qdebug" file="" line="0">
@@ -123,7 +123,7 @@
<DataTag><![CDATA[data1]]></DataTag>
<Description><![CDATA[test2 test3 data1]]></Description>
</Message>
-<Incident type="fail" file="tst_subtest.cpp" line="154">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp" line="0">
<DataTag><![CDATA[data1]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (str) : "hello1"
@@ -141,7 +141,7 @@
<DataTag><![CDATA[data2]]></DataTag>
<Description><![CDATA[test2 test3 data2]]></Description>
</Message>
-<Incident type="fail" file="tst_subtest.cpp" line="154">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp" line="0">
<DataTag><![CDATA[data2]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (str) : "hello2"
@@ -151,13 +151,13 @@
<DataTag><![CDATA[data2]]></DataTag>
<Description><![CDATA[cleanup test3 data2]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[cleanupTestCase cleanupTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_subtest.teamcity b/tests/auto/testlib/selftests/expected_subtest.teamcity
index b974e30d78..3fcbcb7ea4 100644
--- a/tests/auto/testlib/selftests/expected_subtest.teamcity
+++ b/tests/auto/testlib/selftests/expected_subtest.teamcity
@@ -18,11 +18,11 @@
##teamcity[testStdOut name='test3(data0)' out='QDEBUG: test3_data test3 (null)|nQDEBUG: test3_data end|nQDEBUG: init test3 data0|nQDEBUG: test2 test3 data0|nQDEBUG: test2 end|nQDEBUG: cleanup test3 data0' flowId='tst_Subtest']
##teamcity[testFinished name='test3(data0)' flowId='tst_Subtest']
##teamcity[testStarted name='test3(data1)' flowId='tst_Subtest']
-##teamcity[testFailed name='test3(data1)' message='Failure! |[Loc: tst_subtest.cpp(146)|]' details='Compared values are not the same|n Actual (str) : "hello1"|n Expected (QString("hello0")): "hello0"' flowId='tst_Subtest']
+##teamcity[testFailed name='test3(data1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp(0)|]' details='Compared values are not the same|n Actual (str) : "hello1"|n Expected (QString("hello0")): "hello0"' flowId='tst_Subtest']
##teamcity[testStdOut name='test3(data1)' out='QDEBUG: init test3 data1|nQDEBUG: test2 test3 data1' flowId='tst_Subtest']
##teamcity[testFinished name='test3(data1)' flowId='tst_Subtest']
##teamcity[testStarted name='test3(data2)' flowId='tst_Subtest']
-##teamcity[testFailed name='test3(data2)' message='Failure! |[Loc: tst_subtest.cpp(146)|]' details='Compared values are not the same|n Actual (str) : "hello2"|n Expected (QString("hello0")): "hello0"' flowId='tst_Subtest']
+##teamcity[testFailed name='test3(data2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp(0)|]' details='Compared values are not the same|n Actual (str) : "hello2"|n Expected (QString("hello0")): "hello0"' flowId='tst_Subtest']
##teamcity[testStdOut name='test3(data2)' out='QDEBUG: cleanup test3 data1|nQDEBUG: init test3 data2|nQDEBUG: test2 test3 data2' flowId='tst_Subtest']
##teamcity[testFinished name='test3(data2)' flowId='tst_Subtest']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Subtest']
diff --git a/tests/auto/testlib/selftests/expected_subtest.txt b/tests/auto/testlib/selftests/expected_subtest.txt
index ba710e54a9..8b0dbf63ee 100644
--- a/tests/auto/testlib/selftests/expected_subtest.txt
+++ b/tests/auto/testlib/selftests/expected_subtest.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Subtest *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
QDEBUG : tst_Subtest::initTestCase() initTestCase initTestCase (null)
PASS : tst_Subtest::initTestCase()
QDEBUG : tst_Subtest::test1() init test1 (null)
@@ -35,16 +35,16 @@ QDEBUG : tst_Subtest::test3(data1) test2 test3 data1
FAIL! : tst_Subtest::test3(data1) Compared values are not the same
Actual (str) : "hello1"
Expected (QString("hello0")): "hello0"
- Loc: [tst_subtest.cpp(154)]
+ Loc: [qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp(0)]
QDEBUG : tst_Subtest::test3(data1) cleanup test3 data1
QDEBUG : tst_Subtest::test3(data2) init test3 data2
QDEBUG : tst_Subtest::test3(data2) test2 test3 data2
FAIL! : tst_Subtest::test3(data2) Compared values are not the same
Actual (str) : "hello2"
Expected (QString("hello0")): "hello0"
- Loc: [tst_subtest.cpp(154)]
+ Loc: [qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp(0)]
QDEBUG : tst_Subtest::test3(data2) cleanup test3 data2
QDEBUG : tst_Subtest::cleanupTestCase() cleanupTestCase cleanupTestCase (null)
PASS : tst_Subtest::cleanupTestCase()
-Totals: 7 passed, 2 failed, 0 skipped, 0 blacklisted
+Totals: 7 passed, 2 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Subtest *********
diff --git a/tests/auto/testlib/selftests/expected_subtest.xml b/tests/auto/testlib/selftests/expected_subtest.xml
index f011489ec8..793f5d4d2d 100644
--- a/tests/auto/testlib/selftests/expected_subtest.xml
+++ b/tests/auto/testlib/selftests/expected_subtest.xml
@@ -10,7 +10,7 @@
<Description><![CDATA[initTestCase initTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test1">
<Message type="qdebug" file="" line="0">
@@ -23,7 +23,7 @@
<Description><![CDATA[cleanup test1 (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test2">
<Message type="qdebug" file="" line="0">
@@ -89,7 +89,7 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[data2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="test3">
<Message type="qdebug" file="" line="0">
@@ -125,7 +125,7 @@
<DataTag><![CDATA[data1]]></DataTag>
<Description><![CDATA[test2 test3 data1]]></Description>
</Message>
-<Incident type="fail" file="tst_subtest.cpp" line="154">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp" line="0">
<DataTag><![CDATA[data1]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (str) : "hello1"
@@ -143,7 +143,7 @@
<DataTag><![CDATA[data2]]></DataTag>
<Description><![CDATA[test2 test3 data2]]></Description>
</Message>
-<Incident type="fail" file="tst_subtest.cpp" line="154">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp" line="0">
<DataTag><![CDATA[data2]]></DataTag>
<Description><![CDATA[Compared values are not the same
Actual (str) : "hello2"
@@ -153,14 +153,14 @@
<DataTag><![CDATA[data2]]></DataTag>
<Description><![CDATA[cleanup test3 data2]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[cleanupTestCase cleanupTestCase (null)]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_verbose1.lightxml b/tests/auto/testlib/selftests/expected_verbose1.lightxml
index 6d7ce13ea0..68730a3293 100644
--- a/tests/auto/testlib/selftests/expected_verbose1.lightxml
+++ b/tests/auto/testlib/selftests/expected_verbose1.lightxml
@@ -5,7 +5,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassPass">
<Incident type="pass" file="" line="0">
@@ -14,104 +14,104 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassSkip">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassFail">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipPass">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipSkip">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipFail">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailPass">
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailSkip">
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailFail">
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="234">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in init()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInCleanup">
<Incident type="pass" file="" line="0">
@@ -121,27 +121,27 @@
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[This test function should execute and then QFAIL in cleanup()]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="242">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in cleanup()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="236">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in init()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInCleanup">
<Incident type="pass" file="" line="0">
@@ -151,17 +151,17 @@
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[This test function should execute and then QSKIP in cleanup()]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="244">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in cleanup()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_verbose1.teamcity b/tests/auto/testlib/selftests/expected_verbose1.teamcity
index e6d324a573..5ceaf155d8 100644
--- a/tests/auto/testlib/selftests/expected_verbose1.teamcity
+++ b/tests/auto/testlib/selftests/expected_verbose1.teamcity
@@ -7,59 +7,59 @@
##teamcity[testFinished name='testPassPass(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testPassSkip(row 1)' flowId='tst_Counting']
##teamcity[testFinished name='testPassSkip(row 1)' flowId='tst_Counting']
-##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testPassFail(row 1)' flowId='tst_Counting']
##teamcity[testFinished name='testPassFail(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testPassFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testPassFail(row 2)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipPass(row 2)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipPass(row 2)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testSkipFail(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailPass(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailPass(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testFailPass(row 2)' flowId='tst_Counting']
##teamcity[testFinished name='testFailPass(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailSkip(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailSkip(row 1)' flowId='tst_Counting']
-##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testFailFail(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailFail(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testFailFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
##teamcity[testFinished name='testFailFail(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(before)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(before)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(fail)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(226)|]' details='Fail in init()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='Fail in init()' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(fail)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(after)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(after)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(before)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(before)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(fail)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(234)|]' details='Fail in cleanup()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='Fail in cleanup()' flowId='tst_Counting']
##teamcity[testStdOut name='testFailInCleanup(fail)' out='QDEBUG: This test function should execute and then QFAIL in cleanup()' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(fail)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(after)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(after)' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInInit(before)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInInit(before)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: ../counting/tst_counting.cpp(228)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInInit(after)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInInit(after)' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInCleanup(before)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInCleanup(before)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: ../counting/tst_counting.cpp(236)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInCleanup(after)' flowId='tst_Counting']
##teamcity[testStdOut name='testSkipInCleanup(after)' out='QDEBUG: This test function should execute and then QSKIP in cleanup()' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInCleanup(after)' flowId='tst_Counting']
diff --git a/tests/auto/testlib/selftests/expected_verbose1.txt b/tests/auto/testlib/selftests/expected_verbose1.txt
index 1c83be75cc..da2e04674d 100644
--- a/tests/auto/testlib/selftests/expected_verbose1.txt
+++ b/tests/auto/testlib/selftests/expected_verbose1.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Counting *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
INFO : tst_Counting::initTestCase() entering
PASS : tst_Counting::initTestCase()
INFO : tst_Counting::testPassPass() entering
@@ -8,62 +8,62 @@ PASS : tst_Counting::testPassPass(row 2)
INFO : tst_Counting::testPassSkip() entering
PASS : tst_Counting::testPassSkip(row 1)
SKIP : tst_Counting::testPassSkip(row 2) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testPassFail() entering
PASS : tst_Counting::testPassFail(row 1)
FAIL! : tst_Counting::testPassFail(row 2) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipPass() entering
SKIP : tst_Counting::testSkipPass(row 1) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipPass(row 2)
INFO : tst_Counting::testSkipSkip() entering
SKIP : tst_Counting::testSkipSkip(row 1) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testSkipSkip(row 2) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipFail() entering
SKIP : tst_Counting::testSkipFail(row 1) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testSkipFail(row 2) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailPass() entering
FAIL! : tst_Counting::testFailPass(row 1) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailPass(row 2)
INFO : tst_Counting::testFailSkip() entering
FAIL! : tst_Counting::testFailSkip(row 1) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testFailSkip(row 2) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailFail() entering
FAIL! : tst_Counting::testFailFail(row 1) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailFail(row 2) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailInInit() entering
PASS : tst_Counting::testFailInInit(before)
FAIL! : tst_Counting::testFailInInit(fail) Fail in init()
- Loc: [../counting/tst_counting.cpp(234)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInInit(after)
INFO : tst_Counting::testFailInCleanup() entering
PASS : tst_Counting::testFailInCleanup(before)
QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup()
FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup()
- Loc: [../counting/tst_counting.cpp(242)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInCleanup(after)
INFO : tst_Counting::testSkipInInit() entering
PASS : tst_Counting::testSkipInInit(before)
SKIP : tst_Counting::testSkipInInit(skip) Skip in init()
- Loc: [../counting/tst_counting.cpp(236)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipInInit(after)
INFO : tst_Counting::testSkipInCleanup() entering
PASS : tst_Counting::testSkipInCleanup(before)
QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup()
SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup()
- Loc: [../counting/tst_counting.cpp(244)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipInCleanup(after)
INFO : tst_Counting::cleanupTestCase() entering
PASS : tst_Counting::cleanupTestCase()
-Totals: 16 passed, 8 failed, 8 skipped, 0 blacklisted
+Totals: 16 passed, 8 failed, 8 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Counting *********
diff --git a/tests/auto/testlib/selftests/expected_verbose1.xml b/tests/auto/testlib/selftests/expected_verbose1.xml
index b5ae1286cb..841a49c30d 100644
--- a/tests/auto/testlib/selftests/expected_verbose1.xml
+++ b/tests/auto/testlib/selftests/expected_verbose1.xml
@@ -7,7 +7,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassPass">
<Incident type="pass" file="" line="0">
@@ -16,104 +16,104 @@
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassSkip">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassFail">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipPass">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipSkip">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipFail">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailPass">
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailSkip">
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailFail">
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="234">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in init()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInCleanup">
<Incident type="pass" file="" line="0">
@@ -123,27 +123,27 @@
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[This test function should execute and then QFAIL in cleanup()]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="242">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in cleanup()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="236">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in init()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInCleanup">
<Incident type="pass" file="" line="0">
@@ -153,18 +153,18 @@
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[This test function should execute and then QSKIP in cleanup()]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="244">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in cleanup()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_verbose2.lightxml b/tests/auto/testlib/selftests/expected_verbose2.lightxml
index 85f9ec45af..cad736a7e6 100644
--- a/tests/auto/testlib/selftests/expected_verbose2.lightxml
+++ b/tests/auto/testlib/selftests/expected_verbose2.lightxml
@@ -5,185 +5,185 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassPass">
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassSkip">
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassFail">
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipPass">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipSkip">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipFail">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailPass">
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailSkip">
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailFail">
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="234">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in init()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInCleanup">
<Incident type="pass" file="" line="0">
@@ -193,27 +193,27 @@
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[This test function should execute and then QFAIL in cleanup()]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="242">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in cleanup()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="236">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in init()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInCleanup">
<Incident type="pass" file="" line="0">
@@ -223,17 +223,17 @@
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[This test function should execute and then QSKIP in cleanup()]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="244">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in cleanup()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_verbose2.teamcity b/tests/auto/testlib/selftests/expected_verbose2.teamcity
index 138e223fa5..2aebb94938 100644
--- a/tests/auto/testlib/selftests/expected_verbose2.teamcity
+++ b/tests/auto/testlib/selftests/expected_verbose2.teamcity
@@ -2,76 +2,76 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_Counting']
##teamcity[testFinished name='initTestCase()' flowId='tst_Counting']
##teamcity[testStarted name='testPassPass(row 1)' flowId='tst_Counting']
-##teamcity[testStdOut name='testPassPass(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
+##teamcity[testStdOut name='testPassPass(row 1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(true)|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
##teamcity[testFinished name='testPassPass(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testPassPass(row 2)' flowId='tst_Counting']
-##teamcity[testStdOut name='testPassPass(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
+##teamcity[testStdOut name='testPassPass(row 2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(true)|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
##teamcity[testFinished name='testPassPass(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testPassSkip(row 1)' flowId='tst_Counting']
-##teamcity[testStdOut name='testPassSkip(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
+##teamcity[testStdOut name='testPassSkip(row 1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(true)|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
##teamcity[testFinished name='testPassSkip(row 1)' flowId='tst_Counting']
-##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testPassSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testPassFail(row 1)' flowId='tst_Counting']
-##teamcity[testStdOut name='testPassFail(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
+##teamcity[testStdOut name='testPassFail(row 1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(true)|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
##teamcity[testFinished name='testPassFail(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testPassFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
-##teamcity[testStdOut name='testPassFail(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)' flowId='tst_Counting']
+##teamcity[testFailed name='testPassFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testStdOut name='testPassFail(row 2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(false)' flowId='tst_Counting']
##teamcity[testFinished name='testPassFail(row 2)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipPass(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipPass(row 2)' flowId='tst_Counting']
-##teamcity[testStdOut name='testSkipPass(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
+##teamcity[testStdOut name='testSkipPass(row 2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(true)|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipPass(row 2)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipSkip(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipFail(row 1)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
-##teamcity[testStdOut name='testSkipFail(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)' flowId='tst_Counting']
+##teamcity[testFailed name='testSkipFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testStdOut name='testSkipFail(row 2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(false)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipFail(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailPass(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
-##teamcity[testStdOut name='testFailPass(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)' flowId='tst_Counting']
+##teamcity[testFailed name='testFailPass(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testStdOut name='testFailPass(row 1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(false)' flowId='tst_Counting']
##teamcity[testFinished name='testFailPass(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testFailPass(row 2)' flowId='tst_Counting']
-##teamcity[testStdOut name='testFailPass(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(103)|]: QVERIFY(true)|nINFO |[Loc: ../counting/tst_counting.cpp(104)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
+##teamcity[testStdOut name='testFailPass(row 2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(true)|nINFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QCOMPARE(2 + 1, 3)' flowId='tst_Counting']
##teamcity[testFinished name='testFailPass(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailSkip(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
-##teamcity[testStdOut name='testFailSkip(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)' flowId='tst_Counting']
+##teamcity[testFailed name='testFailSkip(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testStdOut name='testFailSkip(row 1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(false)' flowId='tst_Counting']
##teamcity[testFinished name='testFailSkip(row 1)' flowId='tst_Counting']
-##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: ../counting/tst_counting.cpp(110)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testFailSkip(row 2)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testFailFail(row 1)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
-##teamcity[testStdOut name='testFailFail(row 1)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)' flowId='tst_Counting']
+##teamcity[testFailed name='testFailFail(row 1)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testStdOut name='testFailFail(row 1)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(false)' flowId='tst_Counting']
##teamcity[testFinished name='testFailFail(row 1)' flowId='tst_Counting']
##teamcity[testStarted name='testFailFail(row 2)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: ../counting/tst_counting.cpp(107)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
-##teamcity[testStdOut name='testFailFail(row 2)' out='INFO |[Loc: ../counting/tst_counting.cpp(107)|]: QVERIFY(false)' flowId='tst_Counting']
+##teamcity[testFailed name='testFailFail(row 2)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='|'false|' returned FALSE. ()' flowId='tst_Counting']
+##teamcity[testStdOut name='testFailFail(row 2)' out='INFO |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]: QVERIFY(false)' flowId='tst_Counting']
##teamcity[testFinished name='testFailFail(row 2)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(before)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(before)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(fail)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(226)|]' details='Fail in init()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailInInit(fail)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='Fail in init()' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(fail)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInInit(after)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInInit(after)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(before)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(before)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(fail)' flowId='tst_Counting']
-##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: ../counting/tst_counting.cpp(234)|]' details='Fail in cleanup()' flowId='tst_Counting']
+##teamcity[testFailed name='testFailInCleanup(fail)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' details='Fail in cleanup()' flowId='tst_Counting']
##teamcity[testStdOut name='testFailInCleanup(fail)' out='QDEBUG: This test function should execute and then QFAIL in cleanup()' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(fail)' flowId='tst_Counting']
##teamcity[testStarted name='testFailInCleanup(after)' flowId='tst_Counting']
##teamcity[testFinished name='testFailInCleanup(after)' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInInit(before)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInInit(before)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: ../counting/tst_counting.cpp(228)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipInInit(skip)' message='Skip in init() |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInInit(after)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInInit(after)' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInCleanup(before)' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInCleanup(before)' flowId='tst_Counting']
-##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: ../counting/tst_counting.cpp(236)|]' flowId='tst_Counting']
+##teamcity[testIgnored name='testSkipInCleanup(skip)' message='Skip in cleanup() |[Loc: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)|]' flowId='tst_Counting']
##teamcity[testStarted name='testSkipInCleanup(after)' flowId='tst_Counting']
##teamcity[testStdOut name='testSkipInCleanup(after)' out='QDEBUG: This test function should execute and then QSKIP in cleanup()' flowId='tst_Counting']
##teamcity[testFinished name='testSkipInCleanup(after)' flowId='tst_Counting']
diff --git a/tests/auto/testlib/selftests/expected_verbose2.txt b/tests/auto/testlib/selftests/expected_verbose2.txt
index 8e4e01b526..a46c398a4f 100644
--- a/tests/auto/testlib/selftests/expected_verbose2.txt
+++ b/tests/auto/testlib/selftests/expected_verbose2.txt
@@ -1,105 +1,105 @@
********* Start testing of tst_Counting *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
INFO : tst_Counting::initTestCase() entering
PASS : tst_Counting::initTestCase()
INFO : tst_Counting::testPassPass() entering
INFO : tst_Counting::testPassPass(row 1) QVERIFY(true)
- Loc: [../counting/tst_counting.cpp(111)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testPassPass(row 1) QCOMPARE(2 + 1, 3)
- Loc: [../counting/tst_counting.cpp(112)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testPassPass(row 1)
INFO : tst_Counting::testPassPass(row 2) QVERIFY(true)
- Loc: [../counting/tst_counting.cpp(111)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testPassPass(row 2) QCOMPARE(2 + 1, 3)
- Loc: [../counting/tst_counting.cpp(112)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testPassPass(row 2)
INFO : tst_Counting::testPassSkip() entering
INFO : tst_Counting::testPassSkip(row 1) QVERIFY(true)
- Loc: [../counting/tst_counting.cpp(111)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testPassSkip(row 1) QCOMPARE(2 + 1, 3)
- Loc: [../counting/tst_counting.cpp(112)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testPassSkip(row 1)
SKIP : tst_Counting::testPassSkip(row 2) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testPassFail() entering
INFO : tst_Counting::testPassFail(row 1) QVERIFY(true)
- Loc: [../counting/tst_counting.cpp(111)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testPassFail(row 1) QCOMPARE(2 + 1, 3)
- Loc: [../counting/tst_counting.cpp(112)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testPassFail(row 1)
INFO : tst_Counting::testPassFail(row 2) QVERIFY(false)
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testPassFail(row 2) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipPass() entering
SKIP : tst_Counting::testSkipPass(row 1) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipPass(row 2) QVERIFY(true)
- Loc: [../counting/tst_counting.cpp(111)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipPass(row 2) QCOMPARE(2 + 1, 3)
- Loc: [../counting/tst_counting.cpp(112)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipPass(row 2)
INFO : tst_Counting::testSkipSkip() entering
SKIP : tst_Counting::testSkipSkip(row 1) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testSkipSkip(row 2) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipFail() entering
SKIP : tst_Counting::testSkipFail(row 1) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testSkipFail(row 2) QVERIFY(false)
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testSkipFail(row 2) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailPass() entering
INFO : tst_Counting::testFailPass(row 1) QVERIFY(false)
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailPass(row 1) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailPass(row 2) QVERIFY(true)
- Loc: [../counting/tst_counting.cpp(111)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailPass(row 2) QCOMPARE(2 + 1, 3)
- Loc: [../counting/tst_counting.cpp(112)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailPass(row 2)
INFO : tst_Counting::testFailSkip() entering
INFO : tst_Counting::testFailSkip(row 1) QVERIFY(false)
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailSkip(row 1) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
SKIP : tst_Counting::testFailSkip(row 2) Skipping
- Loc: [../counting/tst_counting.cpp(118)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailFail() entering
INFO : tst_Counting::testFailFail(row 1) QVERIFY(false)
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailFail(row 1) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailFail(row 2) QVERIFY(false)
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
FAIL! : tst_Counting::testFailFail(row 2) 'false' returned FALSE. ()
- Loc: [../counting/tst_counting.cpp(115)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
INFO : tst_Counting::testFailInInit() entering
PASS : tst_Counting::testFailInInit(before)
FAIL! : tst_Counting::testFailInInit(fail) Fail in init()
- Loc: [../counting/tst_counting.cpp(234)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInInit(after)
INFO : tst_Counting::testFailInCleanup() entering
PASS : tst_Counting::testFailInCleanup(before)
QDEBUG : tst_Counting::testFailInCleanup(fail) This test function should execute and then QFAIL in cleanup()
FAIL! : tst_Counting::testFailInCleanup(fail) Fail in cleanup()
- Loc: [../counting/tst_counting.cpp(242)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testFailInCleanup(after)
INFO : tst_Counting::testSkipInInit() entering
PASS : tst_Counting::testSkipInInit(before)
SKIP : tst_Counting::testSkipInInit(skip) Skip in init()
- Loc: [../counting/tst_counting.cpp(236)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipInInit(after)
INFO : tst_Counting::testSkipInCleanup() entering
PASS : tst_Counting::testSkipInCleanup(before)
QDEBUG : tst_Counting::testSkipInCleanup(skip) This test function should execute and then QSKIP in cleanup()
SKIP : tst_Counting::testSkipInCleanup(skip) Skip in cleanup()
- Loc: [../counting/tst_counting.cpp(244)]
+ Loc: [qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp(0)]
PASS : tst_Counting::testSkipInCleanup(after)
INFO : tst_Counting::cleanupTestCase() entering
PASS : tst_Counting::cleanupTestCase()
-Totals: 16 passed, 8 failed, 8 skipped, 0 blacklisted
+Totals: 16 passed, 8 failed, 8 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Counting *********
diff --git a/tests/auto/testlib/selftests/expected_verbose2.xml b/tests/auto/testlib/selftests/expected_verbose2.xml
index 94fef3eed7..b7226db3bf 100644
--- a/tests/auto/testlib/selftests/expected_verbose2.xml
+++ b/tests/auto/testlib/selftests/expected_verbose2.xml
@@ -7,185 +7,185 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassPass">
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassSkip">
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testPassFail">
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipPass">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipSkip">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipFail">
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailPass">
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="111">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(true)]]></Description>
</Message>
-<Message type="info" file="../counting/tst_counting.cpp" line="112">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QCOMPARE(2 + 1, 3)]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailSkip">
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="118">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[Skipping]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailFail">
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 1]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Message type="info" file="../counting/tst_counting.cpp" line="115">
+<Message type="info" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA[QVERIFY(false)]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="115">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[row 2]]></DataTag>
<Description><![CDATA['false' returned FALSE. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="234">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in init()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInCleanup">
<Incident type="pass" file="" line="0">
@@ -195,27 +195,27 @@
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[This test function should execute and then QFAIL in cleanup()]]></Description>
</Message>
-<Incident type="fail" file="../counting/tst_counting.cpp" line="242">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[fail]]></DataTag>
<Description><![CDATA[Fail in cleanup()]]></Description>
</Incident>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInInit">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[before]]></DataTag>
</Incident>
-<Message type="skip" file="../counting/tst_counting.cpp" line="236">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in init()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testSkipInCleanup">
<Incident type="pass" file="" line="0">
@@ -225,18 +225,18 @@
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[This test function should execute and then QSKIP in cleanup()]]></Description>
</Message>
-<Message type="skip" file="../counting/tst_counting.cpp" line="244">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp" line="0">
<DataTag><![CDATA[skip]]></DataTag>
<Description><![CDATA[Skip in cleanup()]]></Description>
</Message>
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[after]]></DataTag>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml
index d38363fb6e..6dd5260e80 100644
--- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml
+++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.lightxml
@@ -5,58 +5,58 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testCorrectStdTypes">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testCorrectStdExceptions">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testCorrectMyExceptions">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInt">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="128">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type double to be thrown but unknown exception caught]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailStdString">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="133">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type char* to be thrown but unknown exception caught]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailStdRuntimeError">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="138">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailMyException">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="143">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailMyDerivedException">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="148">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailNoException">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="153">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type std::exception to be thrown but no exception caught]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity
index 25490bca78..030da58195 100644
--- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity
+++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.teamcity
@@ -8,22 +8,22 @@
##teamcity[testStarted name='testCorrectMyExceptions()' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testCorrectMyExceptions()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='testFailInt()' flowId='tst_VerifyExceptionThrown']
-##teamcity[testFailed name='testFailInt()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(120)|]' details='Expected exception of type double to be thrown but unknown exception caught' flowId='tst_VerifyExceptionThrown']
+##teamcity[testFailed name='testFailInt()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)|]' details='Expected exception of type double to be thrown but unknown exception caught' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testFailInt()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='testFailStdString()' flowId='tst_VerifyExceptionThrown']
-##teamcity[testFailed name='testFailStdString()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(125)|]' details='Expected exception of type char* to be thrown but unknown exception caught' flowId='tst_VerifyExceptionThrown']
+##teamcity[testFailed name='testFailStdString()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)|]' details='Expected exception of type char* to be thrown but unknown exception caught' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testFailStdString()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='testFailStdRuntimeError()' flowId='tst_VerifyExceptionThrown']
-##teamcity[testFailed name='testFailStdRuntimeError()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(130)|]' details='Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error' flowId='tst_VerifyExceptionThrown']
+##teamcity[testFailed name='testFailStdRuntimeError()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)|]' details='Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testFailStdRuntimeError()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='testFailMyException()' flowId='tst_VerifyExceptionThrown']
-##teamcity[testFailed name='testFailMyException()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(135)|]' details='Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error' flowId='tst_VerifyExceptionThrown']
+##teamcity[testFailed name='testFailMyException()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)|]' details='Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testFailMyException()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='testFailMyDerivedException()' flowId='tst_VerifyExceptionThrown']
-##teamcity[testFailed name='testFailMyDerivedException()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(140)|]' details='Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException' flowId='tst_VerifyExceptionThrown']
+##teamcity[testFailed name='testFailMyDerivedException()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)|]' details='Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testFailMyDerivedException()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='testFailNoException()' flowId='tst_VerifyExceptionThrown']
-##teamcity[testFailed name='testFailNoException()' message='Failure! |[Loc: tst_verifyexceptionthrown.cpp(145)|]' details='Expected exception of type std::exception to be thrown but no exception caught' flowId='tst_VerifyExceptionThrown']
+##teamcity[testFailed name='testFailNoException()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)|]' details='Expected exception of type std::exception to be thrown but no exception caught' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='testFailNoException()' flowId='tst_VerifyExceptionThrown']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_VerifyExceptionThrown']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_VerifyExceptionThrown']
diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt
index 43fc30c969..c982fbc5e7 100644
--- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt
+++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.txt
@@ -1,21 +1,21 @@
********* Start testing of tst_VerifyExceptionThrown *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_VerifyExceptionThrown::initTestCase()
PASS : tst_VerifyExceptionThrown::testCorrectStdTypes()
PASS : tst_VerifyExceptionThrown::testCorrectStdExceptions()
PASS : tst_VerifyExceptionThrown::testCorrectMyExceptions()
FAIL! : tst_VerifyExceptionThrown::testFailInt() Expected exception of type double to be thrown but unknown exception caught
- Loc: [tst_verifyexceptionthrown.cpp(128)]
+ Loc: [qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)]
FAIL! : tst_VerifyExceptionThrown::testFailStdString() Expected exception of type char* to be thrown but unknown exception caught
- Loc: [tst_verifyexceptionthrown.cpp(133)]
+ Loc: [qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)]
FAIL! : tst_VerifyExceptionThrown::testFailStdRuntimeError() Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error
- Loc: [tst_verifyexceptionthrown.cpp(138)]
+ Loc: [qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)]
FAIL! : tst_VerifyExceptionThrown::testFailMyException() Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error
- Loc: [tst_verifyexceptionthrown.cpp(143)]
+ Loc: [qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)]
FAIL! : tst_VerifyExceptionThrown::testFailMyDerivedException() Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException
- Loc: [tst_verifyexceptionthrown.cpp(148)]
+ Loc: [qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)]
FAIL! : tst_VerifyExceptionThrown::testFailNoException() Expected exception of type std::exception to be thrown but no exception caught
- Loc: [tst_verifyexceptionthrown.cpp(153)]
+ Loc: [qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp(0)]
PASS : tst_VerifyExceptionThrown::cleanupTestCase()
-Totals: 5 passed, 6 failed, 0 skipped, 0 blacklisted
+Totals: 5 passed, 6 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_VerifyExceptionThrown *********
diff --git a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml
index 8c57fe5c0f..c8329197db 100644
--- a/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml
+++ b/tests/auto/testlib/selftests/expected_verifyexceptionthrown.xml
@@ -7,59 +7,59 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testCorrectStdTypes">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testCorrectStdExceptions">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testCorrectMyExceptions">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailInt">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="128">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type double to be thrown but unknown exception caught]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailStdString">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="133">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type char* to be thrown but unknown exception caught]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailStdRuntimeError">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="138">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type std::runtime_error to be thrown but std::exception caught with message: logic error]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailMyException">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="143">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type MyBaseException to be thrown but std::exception caught with message: logic error]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailMyDerivedException">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="148">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type std::runtime_error to be thrown but std::exception caught with message: MyDerivedException]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFailNoException">
-<Incident type="fail" file="tst_verifyexceptionthrown.cpp" line="153">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp" line="0">
<Description><![CDATA[Expected exception of type std::exception to be thrown but no exception caught]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_warnings.lightxml b/tests/auto/testlib/selftests/expected_warnings.lightxml
index afbbf5b5e2..9d5a106500 100644
--- a/tests/auto/testlib/selftests/expected_warnings.lightxml
+++ b/tests/auto/testlib/selftests/expected_warnings.lightxml
@@ -5,7 +5,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testWarnings">
<Message type="qwarn" file="" line="0">
@@ -39,7 +39,7 @@
<Description><![CDATA[Babablabla]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testMissingWarnings">
<Message type="info" file="" line="0">
@@ -51,7 +51,7 @@
<Incident type="fail" file="" line="0">
<Description><![CDATA[Not all expected messages were received]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testMissingWarningsRegularExpression">
<Message type="info" file="" line="0">
@@ -60,7 +60,7 @@
<Incident type="fail" file="" line="0">
<Description><![CDATA[Not all expected messages were received]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testMissingWarningsWithData">
<Message type="info" file="" line="0">
@@ -87,10 +87,10 @@
<DataTag><![CDATA[second row]]></DataTag>
<Description><![CDATA[Not all expected messages were received]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_warnings.txt b/tests/auto/testlib/selftests/expected_warnings.txt
index 9f7393e90f..0a65213b79 100644
--- a/tests/auto/testlib/selftests/expected_warnings.txt
+++ b/tests/auto/testlib/selftests/expected_warnings.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Warnings *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Warnings::initTestCase()
QWARN : tst_Warnings::testWarnings() Warning
QWARN : tst_Warnings::testWarnings() Warning
@@ -24,5 +24,5 @@ INFO : tst_Warnings::testMissingWarningsWithData(second row) Did not receive m
INFO : tst_Warnings::testMissingWarningsWithData(second row) Did not receive message: "Warning1"
FAIL! : tst_Warnings::testMissingWarningsWithData(second row) Not all expected messages were received
PASS : tst_Warnings::cleanupTestCase()
-Totals: 3 passed, 4 failed, 0 skipped, 0 blacklisted
+Totals: 3 passed, 4 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Warnings *********
diff --git a/tests/auto/testlib/selftests/expected_warnings.xml b/tests/auto/testlib/selftests/expected_warnings.xml
index 7023e35e0c..1b17dbbf5d 100644
--- a/tests/auto/testlib/selftests/expected_warnings.xml
+++ b/tests/auto/testlib/selftests/expected_warnings.xml
@@ -7,7 +7,7 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testWarnings">
<Message type="qwarn" file="" line="0">
@@ -41,7 +41,7 @@
<Description><![CDATA[Babablabla]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testMissingWarnings">
<Message type="info" file="" line="0">
@@ -53,7 +53,7 @@
<Incident type="fail" file="" line="0">
<Description><![CDATA[Not all expected messages were received]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testMissingWarningsRegularExpression">
<Message type="info" file="" line="0">
@@ -62,7 +62,7 @@
<Incident type="fail" file="" line="0">
<Description><![CDATA[Not all expected messages were received]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testMissingWarningsWithData">
<Message type="info" file="" line="0">
@@ -89,11 +89,11 @@
<DataTag><![CDATA[second row]]></DataTag>
<Description><![CDATA[Not all expected messages were received]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_xunit.lightxml b/tests/auto/testlib/selftests/expected_xunit.lightxml
index 95ab8f03f0..863501bddf 100644
--- a/tests/auto/testlib/selftests/expected_xunit.lightxml
+++ b/tests/auto/testlib/selftests/expected_xunit.lightxml
@@ -5,60 +5,60 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc1">
-<Message type="warn" file="tst_xunit.cpp" line="67">
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[just a QWARN() !]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc2">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[a qDebug() call with comment-ending stuff -->]]></Description>
</Message>
-<Incident type="fail" file="tst_xunit.cpp" line="74">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (2): 2
Expected (3): 3]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc3">
-<Message type="skip" file="tst_xunit.cpp" line="79">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[skipping this function!]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc4">
-<Incident type="fail" file="tst_xunit.cpp" line="84">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[a forced failure!]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc5">
-<Incident type="xfail" file="tst_xunit.cpp" line="98">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[this failure is expected]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc6">
-<Incident type="xfail" file="tst_xunit.cpp" line="104">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[this failure is also expected]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc7">
-<Incident type="xpass" file="tst_xunit.cpp" line="110">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA['true' returned TRUE unexpectedly. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_xunit.teamcity b/tests/auto/testlib/selftests/expected_xunit.teamcity
index 7f8ea3de3b..9969624413 100644
--- a/tests/auto/testlib/selftests/expected_xunit.teamcity
+++ b/tests/auto/testlib/selftests/expected_xunit.teamcity
@@ -2,24 +2,24 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_Xunit']
##teamcity[testFinished name='initTestCase()' flowId='tst_Xunit']
##teamcity[testStarted name='testFunc1()' flowId='tst_Xunit']
-##teamcity[testStdOut name='testFunc1()' out='WARNING |[Loc: tst_xunit.cpp(59)|]: just a QWARN() !' flowId='tst_Xunit']
+##teamcity[testStdOut name='testFunc1()' out='WARNING |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]: just a QWARN() !' flowId='tst_Xunit']
##teamcity[testFinished name='testFunc1()' flowId='tst_Xunit']
##teamcity[testStarted name='testFunc2()' flowId='tst_Xunit']
-##teamcity[testFailed name='testFunc2()' message='Failure! |[Loc: tst_xunit.cpp(66)|]' details='Compared values are not the same|n Actual (2): 2|n Expected (3): 3' flowId='tst_Xunit']
+##teamcity[testFailed name='testFunc2()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]' details='Compared values are not the same|n Actual (2): 2|n Expected (3): 3' flowId='tst_Xunit']
##teamcity[testStdOut name='testFunc2()' out='QDEBUG: a qDebug() call with comment-ending stuff -->' flowId='tst_Xunit']
##teamcity[testFinished name='testFunc2()' flowId='tst_Xunit']
-##teamcity[testIgnored name='testFunc3()' message='skipping this function! |[Loc: tst_xunit.cpp(71)|]' flowId='tst_Xunit']
+##teamcity[testIgnored name='testFunc3()' message='skipping this function! |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]' flowId='tst_Xunit']
##teamcity[testStarted name='testFunc4()' flowId='tst_Xunit']
-##teamcity[testFailed name='testFunc4()' message='Failure! |[Loc: tst_xunit.cpp(76)|]' details='a forced failure!' flowId='tst_Xunit']
+##teamcity[testFailed name='testFunc4()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]' details='a forced failure!' flowId='tst_Xunit']
##teamcity[testFinished name='testFunc4()' flowId='tst_Xunit']
##teamcity[testStarted name='testFunc5()' flowId='tst_Xunit']
-##teamcity[testStdOut name='testFunc5()' out='XFAIL |[Loc: tst_xunit.cpp(90)|]: this failure is expected' flowId='tst_Xunit']
+##teamcity[testStdOut name='testFunc5()' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]: this failure is expected' flowId='tst_Xunit']
##teamcity[testFinished name='testFunc5()' flowId='tst_Xunit']
##teamcity[testStarted name='testFunc6()' flowId='tst_Xunit']
-##teamcity[testStdOut name='testFunc6()' out='XFAIL |[Loc: tst_xunit.cpp(96)|]: this failure is also expected' flowId='tst_Xunit']
+##teamcity[testStdOut name='testFunc6()' out='XFAIL |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]: this failure is also expected' flowId='tst_Xunit']
##teamcity[testFinished name='testFunc6()' flowId='tst_Xunit']
##teamcity[testStarted name='testFunc7()' flowId='tst_Xunit']
-##teamcity[testFailed name='testFunc7()' message='Failure! |[Loc: tst_xunit.cpp(102)|]' details='|'true|' returned TRUE unexpectedly. ()' flowId='tst_Xunit']
+##teamcity[testFailed name='testFunc7()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)|]' details='|'true|' returned TRUE unexpectedly. ()' flowId='tst_Xunit']
##teamcity[testFinished name='testFunc7()' flowId='tst_Xunit']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Xunit']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Xunit']
diff --git a/tests/auto/testlib/selftests/expected_xunit.txt b/tests/auto/testlib/selftests/expected_xunit.txt
index 4863711bd0..bc6f50a58f 100644
--- a/tests/auto/testlib/selftests/expected_xunit.txt
+++ b/tests/auto/testlib/selftests/expected_xunit.txt
@@ -1,26 +1,26 @@
********* Start testing of tst_Xunit *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
+Config: Using QtTest library
PASS : tst_Xunit::initTestCase()
WARNING: tst_Xunit::testFunc1() just a QWARN() !
- Loc: [tst_xunit.cpp(67)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
PASS : tst_Xunit::testFunc1()
QDEBUG : tst_Xunit::testFunc2() a qDebug() call with comment-ending stuff -->
FAIL! : tst_Xunit::testFunc2() Compared values are not the same
Actual (2): 2
Expected (3): 3
- Loc: [tst_xunit.cpp(74)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
SKIP : tst_Xunit::testFunc3() skipping this function!
- Loc: [tst_xunit.cpp(79)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
FAIL! : tst_Xunit::testFunc4() a forced failure!
- Loc: [tst_xunit.cpp(84)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
XFAIL : tst_Xunit::testFunc5() this failure is expected
- Loc: [tst_xunit.cpp(98)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
PASS : tst_Xunit::testFunc5()
XFAIL : tst_Xunit::testFunc6() this failure is also expected
- Loc: [tst_xunit.cpp(104)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
PASS : tst_Xunit::testFunc6()
XPASS : tst_Xunit::testFunc7() 'true' returned TRUE unexpectedly. ()
- Loc: [tst_xunit.cpp(110)]
+ Loc: [qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp(0)]
PASS : tst_Xunit::cleanupTestCase()
-Totals: 5 passed, 3 failed, 1 skipped, 0 blacklisted
+Totals: 5 passed, 3 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Xunit *********
diff --git a/tests/auto/testlib/selftests/expected_xunit.xml b/tests/auto/testlib/selftests/expected_xunit.xml
index f56ca947be..723ae6c914 100644
--- a/tests/auto/testlib/selftests/expected_xunit.xml
+++ b/tests/auto/testlib/selftests/expected_xunit.xml
@@ -7,61 +7,61 @@
</Environment>
<TestFunction name="initTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc1">
-<Message type="warn" file="tst_xunit.cpp" line="67">
+<Message type="warn" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[just a QWARN() !]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc2">
<Message type="qdebug" file="" line="0">
<Description><![CDATA[a qDebug() call with comment-ending stuff -->]]></Description>
</Message>
-<Incident type="fail" file="tst_xunit.cpp" line="74">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[Compared values are not the same
Actual (2): 2
Expected (3): 3]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc3">
-<Message type="skip" file="tst_xunit.cpp" line="79">
+<Message type="skip" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[skipping this function!]]></Description>
</Message>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc4">
-<Incident type="fail" file="tst_xunit.cpp" line="84">
+<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[a forced failure!]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc5">
-<Incident type="xfail" file="tst_xunit.cpp" line="98">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[this failure is expected]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc6">
-<Incident type="xfail" file="tst_xunit.cpp" line="104">
+<Incident type="xfail" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA[this failure is also expected]]></Description>
</Incident>
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="testFunc7">
-<Incident type="xpass" file="tst_xunit.cpp" line="110">
+<Incident type="xpass" file="qtbase/tests/auto/testlib/selftests/xunit/tst_xunit.cpp" line="0">
<Description><![CDATA['true' returned TRUE unexpectedly. ()]]></Description>
</Incident>
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
-<Duration msecs="0"/>
+ <Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
</TestCase>
diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py
index a3a66da98b..6c14d75ea6 100755
--- a/tests/auto/testlib/selftests/generate_expected_output.py
+++ b/tests/auto/testlib/selftests/generate_expected_output.py
@@ -252,7 +252,13 @@ def generateTestData(testname, clean,
def main(name, *args):
"""Minimal argument parsing and driver for the real work"""
- os.environ['LC_ALL'] = 'C'
+ os.environ.update(
+ LC_ALL = 'C', # Use standard locale
+ # Avoid interference from any qtlogging.ini files, e.g. in
+ # /etc/xdg/QtProject/, (must match tst_selftests.cpp's
+ # processEnvironment()'s value):
+ QT_LOGGING_RULES = '*.debug=true;qt.qpa.screen=false')
+
herePath = os.getcwd()
cleaner = Cleaner(herePath, name)
diff --git a/tests/auto/testlib/selftests/selftests.pri b/tests/auto/testlib/selftests/selftests.pri
index 0287e35447..42c62d3b55 100644
--- a/tests/auto/testlib/selftests/selftests.pri
+++ b/tests/auto/testlib/selftests/selftests.pri
@@ -15,6 +15,8 @@ SUBPROGRAMS = \
crashes \
datatable \
datetime \
+ deleteLater \
+ deleteLater_noApp \
differentexec \
exceptionthrow \
expectfail \
diff --git a/tests/auto/testlib/selftests/selftests.qrc b/tests/auto/testlib/selftests/selftests.qrc
index 02e8adb6b4..75d3375394 100644
--- a/tests/auto/testlib/selftests/selftests.qrc
+++ b/tests/auto/testlib/selftests/selftests.qrc
@@ -1,6 +1,5 @@
<RCC>
<qresource prefix="/">
- <file>expected_alive.txt</file>
<file>expected_assert.lightxml</file>
<file>expected_assert.teamcity</file>
<file>expected_assert.txt</file>
@@ -11,29 +10,40 @@
<file>expected_badxml.txt</file>
<file>expected_badxml.xml</file>
<file>expected_badxml.xunitxml</file>
- <file>expected_benchlibcallgrind.txt</file>
+ <file>expected_benchlibcallgrind_0.txt</file>
+ <file>expected_benchlibcallgrind_1.txt</file>
<file>expected_benchlibcallgrind.csv</file>
+ <file>expected_benchlibcallgrind.lightxml</file>
+ <file>expected_benchlibcallgrind.xml</file>
+ <file>expected_benchlibcallgrind.xunitxml</file>
+ <file>expected_benchlibcounting.csv</file>
<file>expected_benchlibcounting.lightxml</file>
<file>expected_benchlibcounting.txt</file>
<file>expected_benchlibcounting.xml</file>
<file>expected_benchlibcounting.xunitxml</file>
- <file>expected_benchlibcounting.csv</file>
+ <file>expected_benchlibeventcounter.csv</file>
<file>expected_benchlibeventcounter.lightxml</file>
<file>expected_benchlibeventcounter.txt</file>
<file>expected_benchlibeventcounter.xml</file>
<file>expected_benchlibeventcounter.xunitxml</file>
- <file>expected_benchlibeventcounter.csv</file>
+ <file>expected_benchliboptions.lightxml</file>
<file>expected_benchliboptions.txt</file>
+ <file>expected_benchliboptions.xml</file>
+ <file>expected_benchliboptions.xunitxml</file>
+ <file>expected_benchlibtickcounter.csv</file>
<file>expected_benchlibtickcounter.lightxml</file>
<file>expected_benchlibtickcounter.txt</file>
<file>expected_benchlibtickcounter.xml</file>
<file>expected_benchlibtickcounter.xunitxml</file>
- <file>expected_benchlibtickcounter.csv</file>
+ <file>expected_benchlibwalltime.csv</file>
<file>expected_benchlibwalltime.lightxml</file>
<file>expected_benchlibwalltime.txt</file>
<file>expected_benchlibwalltime.xml</file>
<file>expected_benchlibwalltime.xunitxml</file>
- <file>expected_benchlibwalltime.csv</file>
+ <file>expected_blacklisted.lightxml</file>
+ <file>expected_blacklisted.txt</file>
+ <file>expected_blacklisted.xml</file>
+ <file>expected_blacklisted.xunitxml</file>
<file>expected_cmptest.lightxml</file>
<file>expected_cmptest.teamcity</file>
<file>expected_cmptest.txt</file>
@@ -62,7 +72,10 @@
<file>expected_datetime.txt</file>
<file>expected_datetime.xml</file>
<file>expected_datetime.xunitxml</file>
+ <file>expected_differentexec.lightxml</file>
<file>expected_differentexec.txt</file>
+ <file>expected_differentexec.xml</file>
+ <file>expected_differentexec.xunitxml</file>
<file>expected_exceptionthrow.lightxml</file>
<file>expected_exceptionthrow.teamcity</file>
<file>expected_exceptionthrow.txt</file>
@@ -98,7 +111,10 @@
<file>expected_findtestdata.txt</file>
<file>expected_findtestdata.xml</file>
<file>expected_findtestdata.xunitxml</file>
+ <file>expected_float.lightxml</file>
<file>expected_float.txt</file>
+ <file>expected_float.xml</file>
+ <file>expected_float.xunitxml</file>
<file>expected_globaldata.lightxml</file>
<file>expected_globaldata.teamcity</file>
<file>expected_globaldata.txt</file>
@@ -114,7 +130,10 @@
<file>expected_maxwarnings.txt</file>
<file>expected_maxwarnings.xml</file>
<file>expected_maxwarnings.xunitxml</file>
+ <file>expected_multiexec.lightxml</file>
<file>expected_multiexec.txt</file>
+ <file>expected_multiexec.xml</file>
+ <file>expected_multiexec.xunitxml</file>
<file>expected_pairdiagnostics.lightxml</file>
<file>expected_pairdiagnostics.teamcity</file>
<file>expected_pairdiagnostics.txt</file>
@@ -122,9 +141,15 @@
<file>expected_pairdiagnostics.xunitxml</file>
<file>expected_printdatatags.txt</file>
<file>expected_printdatatagswithglobaltags.txt</file>
+ <file>expected_qexecstringlist.lightxml</file>
<file>expected_qexecstringlist.txt</file>
+ <file>expected_qexecstringlist.xml</file>
+ <file>expected_qexecstringlist.xunitxml</file>
+ <file>expected_silent.lightxml</file>
<file>expected_silent.teamcity</file>
<file>expected_silent.txt</file>
+ <file>expected_silent.xml</file>
+ <file>expected_silent.xunitxml</file>
<file>expected_singleskip.lightxml</file>
<file>expected_singleskip.teamcity</file>
<file>expected_singleskip.txt</file>
@@ -150,8 +175,11 @@
<file>expected_skipinitdata.txt</file>
<file>expected_skipinitdata.xml</file>
<file>expected_skipinitdata.xunitxml</file>
+ <file>expected_sleep.lightxml</file>
<file>expected_sleep.teamcity</file>
<file>expected_sleep.txt</file>
+ <file>expected_sleep.xml</file>
+ <file>expected_sleep.xunitxml</file>
<file>expected_strcmp.lightxml</file>
<file>expected_strcmp.teamcity</file>
<file>expected_strcmp.txt</file>
@@ -187,6 +215,5 @@
<file>expected_xunit.txt</file>
<file>expected_xunit.xml</file>
<file>expected_xunit.xunitxml</file>
- <file>expected_blacklisted.txt</file>
</qresource>
</RCC>
diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp
index 64f324e26c..2ef7258d81 100644
--- a/tests/auto/testlib/selftests/tst_selftests.cpp
+++ b/tests/auto/testlib/selftests/tst_selftests.cpp
@@ -28,10 +28,18 @@
****************************************************************************/
#include <QtCore/QCoreApplication>
+
+#if QT_CONFIG(temporaryfile) && QT_CONFIG(process)
+# define USE_DIFF
+#endif
#include <QtCore/QXmlStreamReader>
#include <QtCore/QFileInfo>
#include <QtCore/QDir>
#include <QtCore/QTemporaryDir>
+#ifdef USE_DIFF
+# include <QtCore/QTemporaryFile>
+# include <QtCore/QStandardPaths>
+#endif
#include <QtTest/QtTest>
#include <private/cycle_p.h>
@@ -175,6 +183,70 @@ static QList<QByteArray> expectedResult(const QString &fileName)
return splitLines(file.readAll());
}
+// Helpers for running the 'diff' tool in case comparison fails
+#ifdef USE_DIFF
+static inline void writeLines(QIODevice &d, const QByteArrayList &lines)
+{
+ for (const QByteArray &l : lines) {
+ d.write(l);
+ d.write("\n");
+ }
+}
+#endif // USE_DIFF
+
+static QByteArray runDiff(const QByteArrayList &expected, const QByteArrayList &actual)
+{
+ QByteArray result;
+#ifdef USE_DIFF
+# ifndef Q_OS_WIN
+ const QString diff = QStandardPaths::findExecutable("diff");
+# else
+ const QString diff = QStandardPaths::findExecutable("diff.exe");
+# endif
+ if (diff.isEmpty())
+ return result;
+ QTemporaryFile expectedFile;
+ if (!expectedFile.open())
+ return result;
+ writeLines(expectedFile, expected);
+ expectedFile.close();
+ QTemporaryFile actualFile;
+ if (!actualFile.open())
+ return result;
+ writeLines(actualFile, actual);
+ actualFile.close();
+ QProcess diffProcess;
+ diffProcess.start(diff, {QLatin1String("-u"), expectedFile.fileName(), actualFile.fileName()});
+ if (!diffProcess.waitForStarted())
+ return result;
+ if (diffProcess.waitForFinished())
+ result = diffProcess.readAllStandardOutput();
+ else
+ diffProcess.kill();
+#endif // USE_DIFF
+ return result;
+}
+
+// Print the difference preferably using 'diff', else just print lines
+static void printDifference(const QByteArrayList &expected, const QByteArrayList &actual)
+{
+ QDebug info = qInfo();
+ info.noquote();
+ info.nospace();
+ const QByteArray diff = runDiff(expected, actual);
+ if (diff.isEmpty()) {
+ info << "<<<<<<\n";
+ for (const QByteArray &line : actual)
+ info << line << '\n';
+ info << "======\n";
+ for (const QByteArray &line : expected)
+ info << line << '\n';
+ info << ">>>>>>\n";
+ } else {
+ info << diff;
+ }
+}
+
// Each test is run with a set of one or more test output loggers.
// This struct holds information about one such test.
struct LoggerSet
@@ -568,6 +640,10 @@ static QProcessEnvironment processEnvironment()
if (useVariable)
result.insert(key, systemEnvironment.value(key));
}
+ // Avoid interference from any qtlogging.ini files, e.g. in /etc/xdg/QtProject/:
+ result.insert(QStringLiteral("QT_LOGGING_RULES"),
+ // Must match generate_expected_output.py's main()'s value:
+ QStringLiteral("*.debug=true;qt.qpa.screen=false"));
}
return result;
}
@@ -686,8 +762,8 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge
QList<QByteArray> res = splitLines(actualOutputs[n]);
const QString expectedFileName = expectedFileNameFromTest(subdir, logger);
QList<QByteArray> exp = expectedResult(expectedFileName);
-#if (defined (Q_CC_MSVC) && _MSC_VER < 1900)|| defined(Q_CC_MINGW)
- // MSVC up to MSVC2013, MinGW format double numbers differently
+#ifdef Q_CC_MINGW
+ // MinGW formats double numbers differently
if (n == 0 && subdir == QStringLiteral("float")) {
for (int i = 0; i < exp.size(); ++i) {
exp[i].replace("e-07", "e-007");
@@ -724,14 +800,7 @@ void tst_Selftests::doRunSubTest(QString const& subdir, QStringList const& logge
}
} else {
if (res.count() != exp.count()) {
- qDebug() << "<<<<<<";
- foreach (const QByteArray &line, res)
- qDebug() << line;
- qDebug() << "======";
- foreach (const QByteArray &line, exp)
- qDebug() << line;
- qDebug() << ">>>>>>";
-
+ printDifference(exp, res);
QVERIFY2(res.count() == exp.count(),
qPrintable(QString::fromLatin1("Mismatch in line count: %1 != %2 (%3, %4).")
.arg(res.count()).arg(exp.count()).arg(loggers.at(n), expectedFileName)));
diff --git a/tests/auto/testlib/testlib.pro b/tests/auto/testlib/testlib.pro
index 3a66f8cc6c..25ccc591d6 100644
--- a/tests/auto/testlib/testlib.pro
+++ b/tests/auto/testlib/testlib.pro
@@ -3,3 +3,4 @@ SUBDIRS=\
qsignalspy \
selftests \
+qtHaveModule(widgets):SUBDIRS += qabstractitemmodeltester
diff --git a/tests/auto/tools/moc/cxx11-explicit-override-control.h b/tests/auto/tools/moc/cxx11-explicit-override-control.h
index f361a47248..2211112717 100644
--- a/tests/auto/tools/moc/cxx11-explicit-override-control.h
+++ b/tests/auto/tools/moc/cxx11-explicit-override-control.h
@@ -132,17 +132,17 @@ public:
: ExplicitOverrideControlBase(parent) {}
private Q_SLOTS:
- void pureSlot0() Q_DECL_OVERRIDE {}
- void pureSlot1() Q_DECL_OVERRIDE {}
- void pureSlot2() const Q_DECL_OVERRIDE {}
- void pureSlot3() Q_DECL_OVERRIDE const {}
+ void pureSlot0() override {}
+ void pureSlot1() override {}
+ void pureSlot2() const override {}
+ void pureSlot3() override const {}
#if 0 // moc doesn't support volatile slots
- void pureSlot4() volatile Q_DECL_OVERRIDE {}
- void pureSlot5() Q_DECL_OVERRIDE volatile {}
- void pureSlot6() const volatile Q_DECL_OVERRIDE {}
- void pureSlot7() volatile Q_DECL_OVERRIDE const {}
- void pureSlot8() const Q_DECL_OVERRIDE volatile {}
- void pureSlot9() Q_DECL_OVERRIDE volatile const {}
+ void pureSlot4() volatile override {}
+ void pureSlot5() override volatile {}
+ void pureSlot6() const volatile override {}
+ void pureSlot7() volatile override const {}
+ void pureSlot8() const override volatile {}
+ void pureSlot9() override volatile const {}
#endif
};
@@ -176,17 +176,17 @@ public:
: ExplicitOverrideControlBase(parent) {}
private Q_SLOTS:
- void pureSlot0() Q_DECL_FINAL Q_DECL_OVERRIDE {}
- void pureSlot1() Q_DECL_OVERRIDE Q_DECL_FINAL {}
- void pureSlot2() Q_DECL_OVERRIDE const Q_DECL_FINAL {}
- void pureSlot3() Q_DECL_FINAL const Q_DECL_OVERRIDE {}
+ void pureSlot0() Q_DECL_FINAL override {}
+ void pureSlot1() override Q_DECL_FINAL {}
+ void pureSlot2() override const Q_DECL_FINAL {}
+ void pureSlot3() Q_DECL_FINAL const override {}
#if 0 // moc doesn't support volatile slots
- void pureSlot4() volatile Q_DECL_FINAL Q_DECL_OVERRIDE {}
- void pureSlot5() Q_DECL_OVERRIDE Q_DECL_FINAL volatile {}
- void pureSlot6() Q_DECL_OVERRIDE const volatile Q_DECL_FINAL {}
- void pureSlot7() volatile Q_DECL_OVERRIDE Q_DECL_FINAL const {}
- void pureSlot8() const Q_DECL_FINAL Q_DECL_OVERRIDE volatile {}
- void pureSlot9() Q_DECL_FINAL volatile const Q_DECL_OVERRIDE {}
+ void pureSlot4() volatile Q_DECL_FINAL override {}
+ void pureSlot5() override Q_DECL_FINAL volatile {}
+ void pureSlot6() override const volatile Q_DECL_FINAL {}
+ void pureSlot7() volatile override Q_DECL_FINAL const {}
+ void pureSlot8() const Q_DECL_FINAL override volatile {}
+ void pureSlot9() Q_DECL_FINAL volatile const override {}
#endif
};
diff --git a/tests/auto/tools/moc/moc.pro b/tests/auto/tools/moc/moc.pro
index b7151f9c16..d2b13f9c4e 100644
--- a/tests/auto/tools/moc/moc.pro
+++ b/tests/auto/tools/moc/moc.pro
@@ -32,7 +32,7 @@ HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-n
namespace.h cxx17-namespaces.h
-if(*-g++*|*-icc*|*-clang*|*-llvm):!irix-*:!win32-*: HEADERS += os9-newlines.h win-newlines.h
+if(*-g++*|*-icc*|*-clang*|*-llvm):!win32-*: HEADERS += os9-newlines.h win-newlines.h
if(*-g++*|*-clang*): HEADERS += dollars.h
SOURCES += tst_moc.cpp
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 55e8054a70..753da401a2 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -43,7 +43,7 @@
#include "pure-virtual-signals.h"
#include "qinvokable.h"
// msvc and friends crap out on it
-#if !defined(Q_CC_GNU) || defined(Q_OS_IRIX) || defined(Q_OS_WIN)
+#if !defined(Q_CC_GNU) || defined(Q_OS_WIN)
#define SKIP_NEWLINE_TEST
#endif
#if !defined(SKIP_NEWLINE_TEST)
@@ -163,7 +163,7 @@ class CreatableGadget
public:
Q_INVOKABLE CreatableGadget()
{
- CreatableGadget::qt_static_metacall((QObject*)this, QMetaObject::ReadProperty, -1, Q_NULLPTR);
+ CreatableGadget::qt_static_metacall((QObject*)this, QMetaObject::ReadProperty, -1, nullptr);
}
};
@@ -223,7 +223,7 @@ namespace {
{
Q_OBJECT
public:
- explicit ObjectInUnnamedNS(QObject *parent = Q_NULLPTR) : QObject(parent) {}
+ explicit ObjectInUnnamedNS(QObject *parent = nullptr) : QObject(parent) {}
};
}
@@ -3768,7 +3768,7 @@ void tst_Moc::veryLongStringData()
void tst_Moc::gadgetHierarchy()
{
- QCOMPARE(NonGadgetParent::Derived::staticMetaObject.superClass(), static_cast<const QMetaObject*>(Q_NULLPTR));
+ QCOMPARE(NonGadgetParent::Derived::staticMetaObject.superClass(), static_cast<const QMetaObject*>(nullptr));
QCOMPARE(GrandParentGadget::DerivedGadget::staticMetaObject.superClass(), &GrandParentGadget::BaseGadget::staticMetaObject);
}
diff --git a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
index 81908b1eae..d8db966b76 100644
--- a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
+++ b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
@@ -10,12 +10,9 @@
#define DIALOG_WITH_BUTTONS_BOTTOM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QHeaderView>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h
index 55dfd6ba49..b167eaec8a 100644
--- a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h
+++ b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h
@@ -10,12 +10,9 @@
#define DIALOG_WITH_BUTTONS_RIGHT_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QHeaderView>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h b/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h
index d1592b950c..52e9f3b931 100644
--- a/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h
+++ b/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h
@@ -10,11 +10,8 @@
#define DIALOG_WITHOUT_BUTTONS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
-#include <QtWidgets/QHeaderView>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/tools/uic/baseline/Main_Window.ui.h b/tests/auto/tools/uic/baseline/Main_Window.ui.h
index 7fc0781262..eba78c1a2b 100644
--- a/tests/auto/tools/uic/baseline/Main_Window.ui.h
+++ b/tests/auto/tools/uic/baseline/Main_Window.ui.h
@@ -10,10 +10,7 @@
#define MAIN_WINDOW_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
diff --git a/tests/auto/tools/uic/baseline/Widget.ui.h b/tests/auto/tools/uic/baseline/Widget.ui.h
index 4705159fea..8cb31b4589 100644
--- a/tests/auto/tools/uic/baseline/Widget.ui.h
+++ b/tests/auto/tools/uic/baseline/Widget.ui.h
@@ -10,11 +10,8 @@
#define WIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QVBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/addlinkdialog.ui.h b/tests/auto/tools/uic/baseline/addlinkdialog.ui.h
index 466f8660fd..71d091380a 100644
--- a/tests/auto/tools/uic/baseline/addlinkdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/addlinkdialog.ui.h
@@ -10,14 +10,11 @@
#define ADDLINKDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QFrame>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/addtorrentform.ui.h b/tests/auto/tools/uic/baseline/addtorrentform.ui.h
index 521a76847b..e76f05f1de 100644
--- a/tests/auto/tools/uic/baseline/addtorrentform.ui.h
+++ b/tests/auto/tools/uic/baseline/addtorrentform.ui.h
@@ -10,14 +10,11 @@
#define ADDTORRENTFORM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/authenticationdialog.ui.h b/tests/auto/tools/uic/baseline/authenticationdialog.ui.h
index 2c760be6c8..331770b5e0 100644
--- a/tests/auto/tools/uic/baseline/authenticationdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/authenticationdialog.ui.h
@@ -10,13 +10,10 @@
#define AUTHENTICATIONDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/backside.ui.h b/tests/auto/tools/uic/baseline/backside.ui.h
index c78b474277..963eb082ae 100644
--- a/tests/auto/tools/uic/baseline/backside.ui.h
+++ b/tests/auto/tools/uic/baseline/backside.ui.h
@@ -10,9 +10,7 @@
#define BACKSIDE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDateTimeEdit>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
diff --git a/tests/auto/tools/uic/baseline/batchtranslation.ui.h b/tests/auto/tools/uic/baseline/batchtranslation.ui.h
index 53fc9052b2..1f55b6230e 100644
--- a/tests/auto/tools/uic/baseline/batchtranslation.ui.h
+++ b/tests/auto/tools/uic/baseline/batchtranslation.ui.h
@@ -40,14 +40,11 @@
#define BATCHTRANSLATION_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QListView>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h b/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h
index f5ec343a89..c2bb062bb8 100644
--- a/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h
@@ -10,9 +10,7 @@
#define BOOKMARKDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
diff --git a/tests/auto/tools/uic/baseline/bookwindow.ui.h b/tests/auto/tools/uic/baseline/bookwindow.ui.h
index daf441e5d9..89b1e04c6c 100644
--- a/tests/auto/tools/uic/baseline/bookwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/bookwindow.ui.h
@@ -10,9 +10,7 @@
#define BOOKWINDOW_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGroupBox>
diff --git a/tests/auto/tools/uic/baseline/browserwidget.ui.h b/tests/auto/tools/uic/baseline/browserwidget.ui.h
index e5bebd8f59..491f51ce94 100644
--- a/tests/auto/tools/uic/baseline/browserwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/browserwidget.ui.h
@@ -12,7 +12,6 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
diff --git a/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h b/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h
index caac7e31aa..5a545485e3 100644
--- a/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h
+++ b/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h
@@ -10,9 +10,7 @@
#define BUG18156QTREEWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/buttongroup.ui b/tests/auto/tools/uic/baseline/buttongroup.ui
new file mode 100644
index 0000000000..364aebeda6
--- /dev/null
+++ b/tests/auto/tools/uic/baseline/buttongroup.ui
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>545</width>
+ <height>471</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Easing curves</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0" colspan="2">
+ <widget class="QListWidget" name="easingCurvePicker">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>120</height>
+ </size>
+ </property>
+ <property name="verticalScrollBarPolicy">
+ <enum>Qt::ScrollBarAlwaysOff</enum>
+ </property>
+ <property name="movement">
+ <enum>QListView::Static</enum>
+ </property>
+ <property name="isWrapping" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="viewMode">
+ <enum>QListView::IconMode</enum>
+ </property>
+ <property name="selectionRectVisible">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>Path type</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="lineRadio">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="layoutDirection">
+ <enum>Qt::LeftToRight</enum>
+ </property>
+ <property name="text">
+ <string>Line</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ <attribute name="buttonGroup">
+ <string>buttonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QRadioButton" name="circleRadio">
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>40</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Circle</string>
+ </property>
+ <attribute name="buttonGroup">
+ <string>buttonGroup</string>
+ </attribute>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Properties</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <property name="fieldGrowthPolicy">
+ <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Period</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QDoubleSpinBox" name="periodSpinBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="minimum">
+ <double>-1.000000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.100000000000000</double>
+ </property>
+ <property name="value">
+ <double>-1.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QDoubleSpinBox" name="amplitudeSpinBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="minimum">
+ <double>-1.000000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.100000000000000</double>
+ </property>
+ <property name="value">
+ <double>-1.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Overshoot</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QDoubleSpinBox" name="overshootSpinBox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="minimum">
+ <double>-1.000000000000000</double>
+ </property>
+ <property name="singleStep">
+ <double>0.100000000000000</double>
+ </property>
+ <property name="value">
+ <double>-1.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>30</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>Amplitude</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="1">
+ <widget class="QGraphicsView" name="graphicsView">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+ <buttongroups>
+ <buttongroup name="buttonGroup"/>
+ </buttongroups>
+</ui>
diff --git a/tests/auto/tools/uic/baseline/buttongroup.ui.h b/tests/auto/tools/uic/baseline/buttongroup.ui.h
new file mode 100644
index 0000000000..38029df7ec
--- /dev/null
+++ b/tests/auto/tools/uic/baseline/buttongroup.ui.h
@@ -0,0 +1,216 @@
+/********************************************************************************
+** Form generated from reading UI file 'buttongroup.ui'
+**
+** Created by: Qt User Interface Compiler version 5.10.1
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef BUTTONGROUP_H
+#define BUTTONGROUP_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QButtonGroup>
+#include <QtWidgets/QDoubleSpinBox>
+#include <QtWidgets/QFormLayout>
+#include <QtWidgets/QGraphicsView>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QListWidget>
+#include <QtWidgets/QRadioButton>
+#include <QtWidgets/QSpacerItem>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_Form
+{
+public:
+ QGridLayout *gridLayout;
+ QListWidget *easingCurvePicker;
+ QVBoxLayout *verticalLayout;
+ QGroupBox *groupBox_2;
+ QGridLayout *gridLayout_2;
+ QRadioButton *lineRadio;
+ QRadioButton *circleRadio;
+ QGroupBox *groupBox;
+ QFormLayout *formLayout;
+ QLabel *label;
+ QDoubleSpinBox *periodSpinBox;
+ QDoubleSpinBox *amplitudeSpinBox;
+ QLabel *label_3;
+ QDoubleSpinBox *overshootSpinBox;
+ QLabel *label_2;
+ QSpacerItem *verticalSpacer;
+ QGraphicsView *graphicsView;
+ QButtonGroup *buttonGroup;
+
+ void setupUi(QWidget *Form)
+ {
+ if (Form->objectName().isEmpty())
+ Form->setObjectName(QStringLiteral("Form"));
+ Form->resize(545, 471);
+ gridLayout = new QGridLayout(Form);
+ gridLayout->setObjectName(QStringLiteral("gridLayout"));
+ easingCurvePicker = new QListWidget(Form);
+ easingCurvePicker->setObjectName(QStringLiteral("easingCurvePicker"));
+ QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(easingCurvePicker->sizePolicy().hasHeightForWidth());
+ easingCurvePicker->setSizePolicy(sizePolicy);
+ easingCurvePicker->setMaximumSize(QSize(16777215, 120));
+ easingCurvePicker->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ easingCurvePicker->setMovement(QListView::Static);
+ easingCurvePicker->setProperty("isWrapping", QVariant(false));
+ easingCurvePicker->setViewMode(QListView::IconMode);
+ easingCurvePicker->setSelectionRectVisible(false);
+
+ gridLayout->addWidget(easingCurvePicker, 0, 0, 1, 2);
+
+ verticalLayout = new QVBoxLayout();
+ verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
+ groupBox_2 = new QGroupBox(Form);
+ groupBox_2->setObjectName(QStringLiteral("groupBox_2"));
+ groupBox_2->setMaximumSize(QSize(16777215, 16777215));
+ gridLayout_2 = new QGridLayout(groupBox_2);
+ gridLayout_2->setObjectName(QStringLiteral("gridLayout_2"));
+ lineRadio = new QRadioButton(groupBox_2);
+ buttonGroup = new QButtonGroup(Form);
+ buttonGroup->setObjectName(QStringLiteral("buttonGroup"));
+ buttonGroup->addButton(lineRadio);
+ lineRadio->setObjectName(QStringLiteral("lineRadio"));
+ lineRadio->setMaximumSize(QSize(16777215, 40));
+ lineRadio->setLayoutDirection(Qt::LeftToRight);
+ lineRadio->setChecked(true);
+
+ gridLayout_2->addWidget(lineRadio, 0, 0, 1, 1);
+
+ circleRadio = new QRadioButton(groupBox_2);
+ buttonGroup->addButton(circleRadio);
+ circleRadio->setObjectName(QStringLiteral("circleRadio"));
+ circleRadio->setMaximumSize(QSize(16777215, 40));
+
+ gridLayout_2->addWidget(circleRadio, 1, 0, 1, 1);
+
+
+ verticalLayout->addWidget(groupBox_2);
+
+ groupBox = new QGroupBox(Form);
+ groupBox->setObjectName(QStringLiteral("groupBox"));
+ QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ sizePolicy1.setHorizontalStretch(0);
+ sizePolicy1.setVerticalStretch(0);
+ sizePolicy1.setHeightForWidth(groupBox->sizePolicy().hasHeightForWidth());
+ groupBox->setSizePolicy(sizePolicy1);
+ formLayout = new QFormLayout(groupBox);
+ formLayout->setObjectName(QStringLiteral("formLayout"));
+ formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
+ label = new QLabel(groupBox);
+ label->setObjectName(QStringLiteral("label"));
+ QSizePolicy sizePolicy2(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ sizePolicy2.setHorizontalStretch(0);
+ sizePolicy2.setVerticalStretch(0);
+ sizePolicy2.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
+ label->setSizePolicy(sizePolicy2);
+ label->setMinimumSize(QSize(0, 30));
+
+ formLayout->setWidget(0, QFormLayout::LabelRole, label);
+
+ periodSpinBox = new QDoubleSpinBox(groupBox);
+ periodSpinBox->setObjectName(QStringLiteral("periodSpinBox"));
+ periodSpinBox->setEnabled(false);
+ QSizePolicy sizePolicy3(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ sizePolicy3.setHorizontalStretch(0);
+ sizePolicy3.setVerticalStretch(0);
+ sizePolicy3.setHeightForWidth(periodSpinBox->sizePolicy().hasHeightForWidth());
+ periodSpinBox->setSizePolicy(sizePolicy3);
+ periodSpinBox->setMinimumSize(QSize(0, 30));
+ periodSpinBox->setMinimum(-1);
+ periodSpinBox->setSingleStep(0.1);
+ periodSpinBox->setValue(-1);
+
+ formLayout->setWidget(0, QFormLayout::FieldRole, periodSpinBox);
+
+ amplitudeSpinBox = new QDoubleSpinBox(groupBox);
+ amplitudeSpinBox->setObjectName(QStringLiteral("amplitudeSpinBox"));
+ amplitudeSpinBox->setEnabled(false);
+ amplitudeSpinBox->setMinimumSize(QSize(0, 30));
+ amplitudeSpinBox->setMinimum(-1);
+ amplitudeSpinBox->setSingleStep(0.1);
+ amplitudeSpinBox->setValue(-1);
+
+ formLayout->setWidget(2, QFormLayout::FieldRole, amplitudeSpinBox);
+
+ label_3 = new QLabel(groupBox);
+ label_3->setObjectName(QStringLiteral("label_3"));
+ label_3->setMinimumSize(QSize(0, 30));
+
+ formLayout->setWidget(4, QFormLayout::LabelRole, label_3);
+
+ overshootSpinBox = new QDoubleSpinBox(groupBox);
+ overshootSpinBox->setObjectName(QStringLiteral("overshootSpinBox"));
+ overshootSpinBox->setEnabled(false);
+ overshootSpinBox->setMinimumSize(QSize(0, 30));
+ overshootSpinBox->setMinimum(-1);
+ overshootSpinBox->setSingleStep(0.1);
+ overshootSpinBox->setValue(-1);
+
+ formLayout->setWidget(4, QFormLayout::FieldRole, overshootSpinBox);
+
+ label_2 = new QLabel(groupBox);
+ label_2->setObjectName(QStringLiteral("label_2"));
+ label_2->setMinimumSize(QSize(0, 30));
+
+ formLayout->setWidget(2, QFormLayout::LabelRole, label_2);
+
+
+ verticalLayout->addWidget(groupBox);
+
+ verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+
+ verticalLayout->addItem(verticalSpacer);
+
+
+ gridLayout->addLayout(verticalLayout, 1, 0, 1, 1);
+
+ graphicsView = new QGraphicsView(Form);
+ graphicsView->setObjectName(QStringLiteral("graphicsView"));
+ QSizePolicy sizePolicy4(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ sizePolicy4.setHorizontalStretch(0);
+ sizePolicy4.setVerticalStretch(0);
+ sizePolicy4.setHeightForWidth(graphicsView->sizePolicy().hasHeightForWidth());
+ graphicsView->setSizePolicy(sizePolicy4);
+
+ gridLayout->addWidget(graphicsView, 1, 1, 1, 1);
+
+
+ retranslateUi(Form);
+
+ QMetaObject::connectSlotsByName(Form);
+ } // setupUi
+
+ void retranslateUi(QWidget *Form)
+ {
+ Form->setWindowTitle(QApplication::translate("Form", "Easing curves", nullptr));
+ groupBox_2->setTitle(QApplication::translate("Form", "Path type", nullptr));
+ lineRadio->setText(QApplication::translate("Form", "Line", nullptr));
+ circleRadio->setText(QApplication::translate("Form", "Circle", nullptr));
+ groupBox->setTitle(QApplication::translate("Form", "Properties", nullptr));
+ label->setText(QApplication::translate("Form", "Period", nullptr));
+ label_3->setText(QApplication::translate("Form", "Overshoot", nullptr));
+ label_2->setText(QApplication::translate("Form", "Amplitude", nullptr));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class Form: public Ui_Form {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // BUTTONGROUP_H
diff --git a/tests/auto/tools/uic/baseline/calculator.ui.h b/tests/auto/tools/uic/baseline/calculator.ui.h
index 5c8b8640d3..ad738d7afc 100644
--- a/tests/auto/tools/uic/baseline/calculator.ui.h
+++ b/tests/auto/tools/uic/baseline/calculator.ui.h
@@ -10,10 +10,7 @@
#define CALCULATOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QToolButton>
#include <QtWidgets/QWidget>
diff --git a/tests/auto/tools/uic/baseline/calculatorform.ui.h b/tests/auto/tools/uic/baseline/calculatorform.ui.h
index 86482c7814..ced29d5eab 100644
--- a/tests/auto/tools/uic/baseline/calculatorform.ui.h
+++ b/tests/auto/tools/uic/baseline/calculatorform.ui.h
@@ -10,12 +10,9 @@
#define CALCULATORFORM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QSpinBox>
diff --git a/tests/auto/tools/uic/baseline/certificateinfo.ui.h b/tests/auto/tools/uic/baseline/certificateinfo.ui.h
index ac31a209e2..07263bcdd7 100644
--- a/tests/auto/tools/uic/baseline/certificateinfo.ui.h
+++ b/tests/auto/tools/uic/baseline/certificateinfo.ui.h
@@ -10,14 +10,11 @@
#define CERTIFICATEINFO_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QVBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/chatdialog.ui.h b/tests/auto/tools/uic/baseline/chatdialog.ui.h
index 48c6e2d3a1..32b083fbc4 100644
--- a/tests/auto/tools/uic/baseline/chatdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/chatdialog.ui.h
@@ -10,12 +10,9 @@
#define CHATDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
diff --git a/tests/auto/tools/uic/baseline/chatmainwindow.ui.h b/tests/auto/tools/uic/baseline/chatmainwindow.ui.h
index 2764761023..921eb376de 100644
--- a/tests/auto/tools/uic/baseline/chatmainwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/chatmainwindow.ui.h
@@ -12,9 +12,7 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
diff --git a/tests/auto/tools/uic/baseline/chatsetnickname.ui.h b/tests/auto/tools/uic/baseline/chatsetnickname.ui.h
index 0fc8d99ab3..6aaa47f84e 100644
--- a/tests/auto/tools/uic/baseline/chatsetnickname.ui.h
+++ b/tests/auto/tools/uic/baseline/chatsetnickname.ui.h
@@ -10,12 +10,9 @@
#define CHATSETNICKNAME_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/config.ui.h b/tests/auto/tools/uic/baseline/config.ui.h
index d0c4c95e72..7948f6b4ba 100644
--- a/tests/auto/tools/uic/baseline/config.ui.h
+++ b/tests/auto/tools/uic/baseline/config.ui.h
@@ -40,16 +40,13 @@
#define CONFIG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QRadioButton>
diff --git a/tests/auto/tools/uic/baseline/connectdialog.ui.h b/tests/auto/tools/uic/baseline/connectdialog.ui.h
index fde460c483..935f8a21a1 100644
--- a/tests/auto/tools/uic/baseline/connectdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/connectdialog.ui.h
@@ -10,16 +10,13 @@
#define CONNECTDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QToolButton>
diff --git a/tests/auto/tools/uic/baseline/controller.ui.h b/tests/auto/tools/uic/baseline/controller.ui.h
index 41e3c005d2..e3382e2c17 100644
--- a/tests/auto/tools/uic/baseline/controller.ui.h
+++ b/tests/auto/tools/uic/baseline/controller.ui.h
@@ -10,11 +10,8 @@
#define CONTROLLER_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>
diff --git a/tests/auto/tools/uic/baseline/cookies.ui.h b/tests/auto/tools/uic/baseline/cookies.ui.h
index d6b3c4a2f2..2702fb489f 100644
--- a/tests/auto/tools/uic/baseline/cookies.ui.h
+++ b/tests/auto/tools/uic/baseline/cookies.ui.h
@@ -10,9 +10,7 @@
#define COOKIES_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h b/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h
index 80f40d0228..eaa39e3e78 100644
--- a/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h
+++ b/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h
@@ -10,9 +10,7 @@
#define COOKIESEXCEPTIONS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/default.ui.h b/tests/auto/tools/uic/baseline/default.ui.h
index 46dfa8240c..4fae8e7130 100644
--- a/tests/auto/tools/uic/baseline/default.ui.h
+++ b/tests/auto/tools/uic/baseline/default.ui.h
@@ -12,12 +12,10 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
diff --git a/tests/auto/tools/uic/baseline/dialog.ui.h b/tests/auto/tools/uic/baseline/dialog.ui.h
index afcb9f2f8b..1aa41c2ac8 100644
--- a/tests/auto/tools/uic/baseline/dialog.ui.h
+++ b/tests/auto/tools/uic/baseline/dialog.ui.h
@@ -10,12 +10,9 @@
#define DIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/downloaditem.ui.h b/tests/auto/tools/uic/baseline/downloaditem.ui.h
index cd3068daee..2e854aa9ed 100644
--- a/tests/auto/tools/uic/baseline/downloaditem.ui.h
+++ b/tests/auto/tools/uic/baseline/downloaditem.ui.h
@@ -10,11 +10,8 @@
#define DOWNLOADITEM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QProgressBar>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/downloads.ui.h b/tests/auto/tools/uic/baseline/downloads.ui.h
index 4bc5f70bde..5ac40a9581 100644
--- a/tests/auto/tools/uic/baseline/downloads.ui.h
+++ b/tests/auto/tools/uic/baseline/downloads.ui.h
@@ -10,9 +10,7 @@
#define DOWNLOADS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/embeddeddialog.ui.h b/tests/auto/tools/uic/baseline/embeddeddialog.ui.h
index 554c5d754c..67ef6e1de1 100644
--- a/tests/auto/tools/uic/baseline/embeddeddialog.ui.h
+++ b/tests/auto/tools/uic/baseline/embeddeddialog.ui.h
@@ -10,14 +10,11 @@
#define EMBEDDEDDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QFontComboBox>
#include <QtWidgets/QFormLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSlider>
diff --git a/tests/auto/tools/uic/baseline/enumnostdset.ui.h b/tests/auto/tools/uic/baseline/enumnostdset.ui.h
index 31e1348a1a..451cbd6a68 100644
--- a/tests/auto/tools/uic/baseline/enumnostdset.ui.h
+++ b/tests/auto/tools/uic/baseline/enumnostdset.ui.h
@@ -10,10 +10,7 @@
#define ENUMNOSTDSET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QWidget>
#include "worldtimeclock.h"
diff --git a/tests/auto/tools/uic/baseline/filespage.ui.h b/tests/auto/tools/uic/baseline/filespage.ui.h
index 7337c3a044..8ab8d09768 100644
--- a/tests/auto/tools/uic/baseline/filespage.ui.h
+++ b/tests/auto/tools/uic/baseline/filespage.ui.h
@@ -10,11 +10,8 @@
#define FILESPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/filternamedialog.ui.h b/tests/auto/tools/uic/baseline/filternamedialog.ui.h
index 1a223e28aa..60642c29f6 100644
--- a/tests/auto/tools/uic/baseline/filternamedialog.ui.h
+++ b/tests/auto/tools/uic/baseline/filternamedialog.ui.h
@@ -10,14 +10,11 @@
#define FILTERNAMEDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/filterpage.ui.h b/tests/auto/tools/uic/baseline/filterpage.ui.h
index c260c82efe..a20dffc09a 100644
--- a/tests/auto/tools/uic/baseline/filterpage.ui.h
+++ b/tests/auto/tools/uic/baseline/filterpage.ui.h
@@ -10,9 +10,7 @@
#define FILTERPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHeaderView>
diff --git a/tests/auto/tools/uic/baseline/finddialog.ui.h b/tests/auto/tools/uic/baseline/finddialog.ui.h
index 4d7d1ac92c..0bb1ec4286 100644
--- a/tests/auto/tools/uic/baseline/finddialog.ui.h
+++ b/tests/auto/tools/uic/baseline/finddialog.ui.h
@@ -40,15 +40,12 @@
#define FINDDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/form.ui.h b/tests/auto/tools/uic/baseline/form.ui.h
index 4cd134102c..fc4f3e079c 100644
--- a/tests/auto/tools/uic/baseline/form.ui.h
+++ b/tests/auto/tools/uic/baseline/form.ui.h
@@ -10,11 +10,8 @@
#define FORM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QSpinBox>
diff --git a/tests/auto/tools/uic/baseline/formwindowsettings.ui.h b/tests/auto/tools/uic/baseline/formwindowsettings.ui.h
index 77d0109548..349ef9ac80 100644
--- a/tests/auto/tools/uic/baseline/formwindowsettings.ui.h
+++ b/tests/auto/tools/uic/baseline/formwindowsettings.ui.h
@@ -40,16 +40,13 @@
#define FORMWINDOWSETTINGS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/generalpage.ui.h b/tests/auto/tools/uic/baseline/generalpage.ui.h
index 3c36c75bfa..cb0c4e92c4 100644
--- a/tests/auto/tools/uic/baseline/generalpage.ui.h
+++ b/tests/auto/tools/uic/baseline/generalpage.ui.h
@@ -10,11 +10,8 @@
#define GENERALPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/gridalignment.ui.h b/tests/auto/tools/uic/baseline/gridalignment.ui.h
index f7f2d6372f..8e243ce800 100644
--- a/tests/auto/tools/uic/baseline/gridalignment.ui.h
+++ b/tests/auto/tools/uic/baseline/gridalignment.ui.h
@@ -10,11 +10,8 @@
#define GRIDALIGNMENT_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>
diff --git a/tests/auto/tools/uic/baseline/gridpanel.ui.h b/tests/auto/tools/uic/baseline/gridpanel.ui.h
index 95437a27cf..feeff26013 100644
--- a/tests/auto/tools/uic/baseline/gridpanel.ui.h
+++ b/tests/auto/tools/uic/baseline/gridpanel.ui.h
@@ -10,14 +10,11 @@
#define GRIDPANEL_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/helpdialog.ui.h b/tests/auto/tools/uic/baseline/helpdialog.ui.h
index 39f9852620..7c584639c2 100644
--- a/tests/auto/tools/uic/baseline/helpdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/helpdialog.ui.h
@@ -40,9 +40,7 @@
#define HELPDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/history.ui.h b/tests/auto/tools/uic/baseline/history.ui.h
index ed0637bfcf..f9050de854 100644
--- a/tests/auto/tools/uic/baseline/history.ui.h
+++ b/tests/auto/tools/uic/baseline/history.ui.h
@@ -10,9 +10,7 @@
#define HISTORY_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/icontheme.ui.h b/tests/auto/tools/uic/baseline/icontheme.ui.h
index 2724c7d147..94122c01de 100644
--- a/tests/auto/tools/uic/baseline/icontheme.ui.h
+++ b/tests/auto/tools/uic/baseline/icontheme.ui.h
@@ -10,10 +10,7 @@
#define ICONTHEME_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
diff --git a/tests/auto/tools/uic/baseline/idbased.ui b/tests/auto/tools/uic/baseline/idbased.ui
new file mode 100644
index 0000000000..f4db5139c8
--- /dev/null
+++ b/tests/auto/tools/uic/baseline/idbased.ui
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0" idbasedtr="true">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string id="windowTitleId">Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QPushButton" name="pushButton">
+ <property name="toolTip">
+ <string id="buttonToolTipId">ButtonToolTip</string>
+ </property>
+ <property name="statusTip">
+ <string id="buttonStatusTipId">ButtonStatusTip</string>
+ </property>
+ <property name="whatsThis">
+ <string id="buttonWhatsThisId">ButtonWhatsThis</string>
+ </property>
+ <property name="text">
+ <string id="buttonTextId">PushButton</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/auto/tools/uic/baseline/idbased.ui.h b/tests/auto/tools/uic/baseline/idbased.ui.h
new file mode 100644
index 0000000000..dbcd92a839
--- /dev/null
+++ b/tests/auto/tools/uic/baseline/idbased.ui.h
@@ -0,0 +1,67 @@
+/********************************************************************************
+** Form generated from reading UI file 'idbased.ui'
+**
+** Created by: Qt User Interface Compiler version 5.11.0
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef IDBASED_H
+#define IDBASED_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_Form
+{
+public:
+ QVBoxLayout *verticalLayout;
+ QPushButton *pushButton;
+
+ void setupUi(QWidget *Form)
+ {
+ if (Form->objectName().isEmpty())
+ Form->setObjectName(QStringLiteral("Form"));
+ Form->resize(400, 300);
+ verticalLayout = new QVBoxLayout(Form);
+ verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
+ pushButton = new QPushButton(Form);
+ pushButton->setObjectName(QStringLiteral("pushButton"));
+
+ verticalLayout->addWidget(pushButton);
+
+
+ retranslateUi(Form);
+
+ QMetaObject::connectSlotsByName(Form);
+ } // setupUi
+
+ void retranslateUi(QWidget *Form)
+ {
+ Form->setWindowTitle(qtTrId("windowTitleId"));
+#ifndef QT_NO_TOOLTIP
+ pushButton->setToolTip(qtTrId("buttonToolTipId"));
+#endif // QT_NO_TOOLTIP
+#ifndef QT_NO_STATUSTIP
+ pushButton->setStatusTip(qtTrId("buttonStatusTipId"));
+#endif // QT_NO_STATUSTIP
+#ifndef QT_NO_WHATSTHIS
+ pushButton->setWhatsThis(qtTrId("buttonWhatsThisId"));
+#endif // QT_NO_WHATSTHIS
+ pushButton->setText(qtTrId("buttonTextId"));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class Form: public Ui_Form {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // IDBASED_H
diff --git a/tests/auto/tools/uic/baseline/identifierpage.ui.h b/tests/auto/tools/uic/baseline/identifierpage.ui.h
index fd77cc3f8c..d16333cc9c 100644
--- a/tests/auto/tools/uic/baseline/identifierpage.ui.h
+++ b/tests/auto/tools/uic/baseline/identifierpage.ui.h
@@ -10,12 +10,9 @@
#define IDENTIFIERPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/imagedialog.ui.h b/tests/auto/tools/uic/baseline/imagedialog.ui.h
index 2b55d1f0ab..29a30d1996 100644
--- a/tests/auto/tools/uic/baseline/imagedialog.ui.h
+++ b/tests/auto/tools/uic/baseline/imagedialog.ui.h
@@ -10,14 +10,11 @@
#define IMAGEDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/inputpage.ui.h b/tests/auto/tools/uic/baseline/inputpage.ui.h
index 542cf82b91..fb7ae1ea6f 100644
--- a/tests/auto/tools/uic/baseline/inputpage.ui.h
+++ b/tests/auto/tools/uic/baseline/inputpage.ui.h
@@ -10,12 +10,9 @@
#define INPUTPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/installdialog.ui.h b/tests/auto/tools/uic/baseline/installdialog.ui.h
index 657e88712d..885488d2a7 100644
--- a/tests/auto/tools/uic/baseline/installdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/installdialog.ui.h
@@ -10,13 +10,10 @@
#define INSTALLDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
diff --git a/tests/auto/tools/uic/baseline/languagesdialog.ui.h b/tests/auto/tools/uic/baseline/languagesdialog.ui.h
index 20e1ed857c..981ff20cbf 100644
--- a/tests/auto/tools/uic/baseline/languagesdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/languagesdialog.ui.h
@@ -10,9 +10,7 @@
#define LANGUAGESDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
diff --git a/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h b/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h
index f3f09e2f1e..06f55dba4c 100644
--- a/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h
@@ -40,15 +40,12 @@
#define LISTWIDGETEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/mainwindow.ui.h b/tests/auto/tools/uic/baseline/mainwindow.ui.h
index 496b105e5d..950040aeed 100644
--- a/tests/auto/tools/uic/baseline/mainwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/mainwindow.ui.h
@@ -12,13 +12,11 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFontComboBox>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
diff --git a/tests/auto/tools/uic/baseline/mydialog.ui.h b/tests/auto/tools/uic/baseline/mydialog.ui.h
index 35b787b591..95864d5195 100644
--- a/tests/auto/tools/uic/baseline/mydialog.ui.h
+++ b/tests/auto/tools/uic/baseline/mydialog.ui.h
@@ -10,11 +10,8 @@
#define MYDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QVBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/myform.ui.h b/tests/auto/tools/uic/baseline/myform.ui.h
index eeddb03306..d52c1ecf75 100644
--- a/tests/auto/tools/uic/baseline/myform.ui.h
+++ b/tests/auto/tools/uic/baseline/myform.ui.h
@@ -10,13 +10,10 @@
#define MYFORM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QVBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/newactiondialog.ui.h b/tests/auto/tools/uic/baseline/newactiondialog.ui.h
index a2dbb6e8c2..993ff456b8 100644
--- a/tests/auto/tools/uic/baseline/newactiondialog.ui.h
+++ b/tests/auto/tools/uic/baseline/newactiondialog.ui.h
@@ -40,15 +40,12 @@
#define NEWACTIONDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QFrame>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h b/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h
index 85109748e4..d0279cf21f 100644
--- a/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h
+++ b/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h
@@ -10,15 +10,12 @@
#define NEWDYNAMICPROPERTYDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/newform.ui.h b/tests/auto/tools/uic/baseline/newform.ui.h
index 34b5b1a3eb..26da1b6fc2 100644
--- a/tests/auto/tools/uic/baseline/newform.ui.h
+++ b/tests/auto/tools/uic/baseline/newform.ui.h
@@ -40,9 +40,7 @@
#define NEWFORM_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
diff --git a/tests/auto/tools/uic/baseline/orderdialog.ui.h b/tests/auto/tools/uic/baseline/orderdialog.ui.h
index eb1f90d23b..e2b9762510 100644
--- a/tests/auto/tools/uic/baseline/orderdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/orderdialog.ui.h
@@ -40,14 +40,11 @@
#define ORDERDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QToolButton>
diff --git a/tests/auto/tools/uic/baseline/outputpage.ui.h b/tests/auto/tools/uic/baseline/outputpage.ui.h
index 9648be0ed4..1024ba1c19 100644
--- a/tests/auto/tools/uic/baseline/outputpage.ui.h
+++ b/tests/auto/tools/uic/baseline/outputpage.ui.h
@@ -10,11 +10,8 @@
#define OUTPUTPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/pagefold.ui.h b/tests/auto/tools/uic/baseline/pagefold.ui.h
index 255ed41400..c0ec214e85 100644
--- a/tests/auto/tools/uic/baseline/pagefold.ui.h
+++ b/tests/auto/tools/uic/baseline/pagefold.ui.h
@@ -12,13 +12,11 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
diff --git a/tests/auto/tools/uic/baseline/paletteeditor.ui.h b/tests/auto/tools/uic/baseline/paletteeditor.ui.h
index c91658a4bf..3ccdf6082d 100644
--- a/tests/auto/tools/uic/baseline/paletteeditor.ui.h
+++ b/tests/auto/tools/uic/baseline/paletteeditor.ui.h
@@ -40,9 +40,7 @@
#define PALETTEEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/passworddialog.ui.h b/tests/auto/tools/uic/baseline/passworddialog.ui.h
index 9d42642b93..d47835b57b 100644
--- a/tests/auto/tools/uic/baseline/passworddialog.ui.h
+++ b/tests/auto/tools/uic/baseline/passworddialog.ui.h
@@ -10,14 +10,11 @@
#define PASSWORDDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
diff --git a/tests/auto/tools/uic/baseline/pathpage.ui.h b/tests/auto/tools/uic/baseline/pathpage.ui.h
index 49a2c56f2e..361831721b 100644
--- a/tests/auto/tools/uic/baseline/pathpage.ui.h
+++ b/tests/auto/tools/uic/baseline/pathpage.ui.h
@@ -10,11 +10,8 @@
#define PATHPAGE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
diff --git a/tests/auto/tools/uic/baseline/phrasebookbox.ui.h b/tests/auto/tools/uic/baseline/phrasebookbox.ui.h
index 7f2c052f63..e41a7061b4 100644
--- a/tests/auto/tools/uic/baseline/phrasebookbox.ui.h
+++ b/tests/auto/tools/uic/baseline/phrasebookbox.ui.h
@@ -40,9 +40,7 @@
#define PHRASEBOOKBOX_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/plugindialog.ui.h b/tests/auto/tools/uic/baseline/plugindialog.ui.h
index 56228c0fea..30256a35c2 100644
--- a/tests/auto/tools/uic/baseline/plugindialog.ui.h
+++ b/tests/auto/tools/uic/baseline/plugindialog.ui.h
@@ -40,9 +40,7 @@
#define PLUGINDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QHBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/preferencesdialog.ui.h b/tests/auto/tools/uic/baseline/preferencesdialog.ui.h
index 3f7a23f970..15761b2cdc 100644
--- a/tests/auto/tools/uic/baseline/preferencesdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/preferencesdialog.ui.h
@@ -10,9 +10,7 @@
#define PREFERENCESDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
@@ -20,7 +18,6 @@
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QToolButton>
diff --git a/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h b/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h
index 3ed75ec2b5..60bf65af45 100644
--- a/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h
@@ -10,14 +10,11 @@
#define PREVIEWCONFIGURATIONWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QToolButton>
#include <textpropertyeditor_p.h>
diff --git a/tests/auto/tools/uic/baseline/previewdialogbase.ui.h b/tests/auto/tools/uic/baseline/previewdialogbase.ui.h
index b379d9195f..7ea1e72e04 100644
--- a/tests/auto/tools/uic/baseline/previewdialogbase.ui.h
+++ b/tests/auto/tools/uic/baseline/previewdialogbase.ui.h
@@ -10,9 +10,7 @@
#define PREVIEWDIALOGBASE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
diff --git a/tests/auto/tools/uic/baseline/previewwidget.ui.h b/tests/auto/tools/uic/baseline/previewwidget.ui.h
index 7bfcbac86a..a86fec7c0d 100644
--- a/tests/auto/tools/uic/baseline/previewwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/previewwidget.ui.h
@@ -40,15 +40,12 @@
#define PREVIEWWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QProgressBar>
diff --git a/tests/auto/tools/uic/baseline/proxy.ui.h b/tests/auto/tools/uic/baseline/proxy.ui.h
index 67a9ab2b35..2112324eae 100644
--- a/tests/auto/tools/uic/baseline/proxy.ui.h
+++ b/tests/auto/tools/uic/baseline/proxy.ui.h
@@ -10,13 +10,10 @@
#define PROXY_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
diff --git a/tests/auto/tools/uic/baseline/qfiledialog.ui.h b/tests/auto/tools/uic/baseline/qfiledialog.ui.h
index 98b05c34b6..cd1891c58c 100644
--- a/tests/auto/tools/uic/baseline/qfiledialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qfiledialog.ui.h
@@ -40,9 +40,7 @@
#define QFILEDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
diff --git a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
index b49853b1c4..5b0a5b9dc6 100644
--- a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
@@ -10,15 +10,12 @@
#define QPAGESETUPWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDoubleSpinBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h b/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h
index 9f1b96129e..baa9bbec38 100644
--- a/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h
@@ -10,9 +10,7 @@
#define QPRINTPROPERTIESWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QTabWidget>
diff --git a/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h b/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h
index 04978f44b7..a0f16c998b 100644
--- a/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h
+++ b/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h
@@ -10,14 +10,11 @@
#define QPRINTSETTINGSOUTPUT_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/qprintwidget.ui.h b/tests/auto/tools/uic/baseline/qprintwidget.ui.h
index f22d0741f2..73fa2cfcfa 100644
--- a/tests/auto/tools/uic/baseline/qprintwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qprintwidget.ui.h
@@ -10,15 +10,12 @@
#define QPRINTWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h b/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h
index e2de642905..5ed3ff1acd 100644
--- a/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h
@@ -10,16 +10,13 @@
#define QSQLCONNECTIONDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h b/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h
index 9da153f156..53fd59295b 100644
--- a/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h
@@ -40,12 +40,9 @@
#define QTGRADIENTDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QVBoxLayout>
#include "qtgradienteditor.h"
diff --git a/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h b/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h
index 76e0001e16..6e63c4863d 100644
--- a/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h
@@ -40,14 +40,11 @@
#define QTGRADIENTEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDoubleSpinBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/qtgradientview.ui.h b/tests/auto/tools/uic/baseline/qtgradientview.ui.h
index 8b1fe38cfc..4d51c2400e 100644
--- a/tests/auto/tools/uic/baseline/qtgradientview.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradientview.ui.h
@@ -10,11 +10,8 @@
#define QTGRADIENTVIEW_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QToolButton>
diff --git a/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h b/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h
index ab90939445..74fe3745c9 100644
--- a/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h
@@ -40,12 +40,9 @@
#define QTGRADIENTVIEWDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QVBoxLayout>
#include "qtgradientview.h"
diff --git a/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h b/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h
index 604cbdaf9d..62d99b3235 100644
--- a/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h
@@ -10,9 +10,7 @@
#define QTRESOURCEEDITORDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h b/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h
index f329cc2b8b..1c546aa196 100644
--- a/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h
@@ -10,9 +10,7 @@
#define QTTOOLBARDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/qttrid.ui.h b/tests/auto/tools/uic/baseline/qttrid.ui.h
index 3a2b73284b..3893ef3569 100644
--- a/tests/auto/tools/uic/baseline/qttrid.ui.h
+++ b/tests/auto/tools/uic/baseline/qttrid.ui.h
@@ -12,12 +12,10 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
diff --git a/tests/auto/tools/uic/baseline/querywidget.ui.h b/tests/auto/tools/uic/baseline/querywidget.ui.h
index 092259784b..0e941a0e5e 100644
--- a/tests/auto/tools/uic/baseline/querywidget.ui.h
+++ b/tests/auto/tools/uic/baseline/querywidget.ui.h
@@ -10,12 +10,9 @@
#define QUERYWIDGET_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
diff --git a/tests/auto/tools/uic/baseline/remotecontrol.ui.h b/tests/auto/tools/uic/baseline/remotecontrol.ui.h
index c1a8f8ae1c..c3a563f235 100644
--- a/tests/auto/tools/uic/baseline/remotecontrol.ui.h
+++ b/tests/auto/tools/uic/baseline/remotecontrol.ui.h
@@ -12,12 +12,10 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
diff --git a/tests/auto/tools/uic/baseline/saveformastemplate.ui.h b/tests/auto/tools/uic/baseline/saveformastemplate.ui.h
index ba458e5ac7..6cd8726d07 100644
--- a/tests/auto/tools/uic/baseline/saveformastemplate.ui.h
+++ b/tests/auto/tools/uic/baseline/saveformastemplate.ui.h
@@ -40,15 +40,12 @@
#define SAVEFORMASTEMPLATE_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QFrame>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QVBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/settings.ui.h b/tests/auto/tools/uic/baseline/settings.ui.h
index e2ab074a46..6a1f11fa85 100644
--- a/tests/auto/tools/uic/baseline/settings.ui.h
+++ b/tests/auto/tools/uic/baseline/settings.ui.h
@@ -10,14 +10,11 @@
#define SETTINGS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSlider>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/signalslotdialog.ui.h b/tests/auto/tools/uic/baseline/signalslotdialog.ui.h
index 9063482969..ad6c5776e1 100644
--- a/tests/auto/tools/uic/baseline/signalslotdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/signalslotdialog.ui.h
@@ -10,14 +10,11 @@
#define SIGNALSLOTDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListView>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QToolButton>
diff --git a/tests/auto/tools/uic/baseline/sslclient.ui.h b/tests/auto/tools/uic/baseline/sslclient.ui.h
index ad3b5b99e4..3e7feab75a 100644
--- a/tests/auto/tools/uic/baseline/sslclient.ui.h
+++ b/tests/auto/tools/uic/baseline/sslclient.ui.h
@@ -10,13 +10,10 @@
#define SSLCLIENT_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/sslerrors.ui.h b/tests/auto/tools/uic/baseline/sslerrors.ui.h
index 246d622632..d920908de6 100644
--- a/tests/auto/tools/uic/baseline/sslerrors.ui.h
+++ b/tests/auto/tools/uic/baseline/sslerrors.ui.h
@@ -10,12 +10,9 @@
#define SSLERRORS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/statistics.ui.h b/tests/auto/tools/uic/baseline/statistics.ui.h
index fb47be7135..ab0f4f9b8d 100644
--- a/tests/auto/tools/uic/baseline/statistics.ui.h
+++ b/tests/auto/tools/uic/baseline/statistics.ui.h
@@ -40,14 +40,11 @@
#define STATISTICS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/stringlisteditor.ui.h b/tests/auto/tools/uic/baseline/stringlisteditor.ui.h
index 96b6df74ea..44603f1e8a 100644
--- a/tests/auto/tools/uic/baseline/stringlisteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/stringlisteditor.ui.h
@@ -40,15 +40,12 @@
#define STRINGLISTEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListView>
diff --git a/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h b/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h
index 539d6fdab9..a867317820 100644
--- a/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h
@@ -10,13 +10,10 @@
#define STYLESHEETEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h b/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h
index 869e33c3aa..4ebbf3c435 100644
--- a/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h
+++ b/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h
@@ -40,14 +40,11 @@
#define TABBEDBROWSER_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpacerItem>
diff --git a/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h b/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h
index 5c39ab4444..ff000305cc 100644
--- a/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h
@@ -40,9 +40,7 @@
#define TABLEWIDGETEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/tetrixwindow.ui.h b/tests/auto/tools/uic/baseline/tetrixwindow.ui.h
index 131a352714..32c6464209 100644
--- a/tests/auto/tools/uic/baseline/tetrixwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/tetrixwindow.ui.h
@@ -10,11 +10,8 @@
#define TETRIXWINDOW_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLCDNumber>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/textfinder.ui.h b/tests/auto/tools/uic/baseline/textfinder.ui.h
index 7443eacc48..beae214e19 100644
--- a/tests/auto/tools/uic/baseline/textfinder.ui.h
+++ b/tests/auto/tools/uic/baseline/textfinder.ui.h
@@ -10,11 +10,8 @@
#define TEXTFINDER_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/topicchooser.ui.h b/tests/auto/tools/uic/baseline/topicchooser.ui.h
index 9a30232ff7..2770553775 100644
--- a/tests/auto/tools/uic/baseline/topicchooser.ui.h
+++ b/tests/auto/tools/uic/baseline/topicchooser.ui.h
@@ -10,12 +10,9 @@
#define TOPICCHOOSER_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/translatedialog.ui.h b/tests/auto/tools/uic/baseline/translatedialog.ui.h
index 0dcd249d68..32b73be37a 100644
--- a/tests/auto/tools/uic/baseline/translatedialog.ui.h
+++ b/tests/auto/tools/uic/baseline/translatedialog.ui.h
@@ -40,15 +40,12 @@
#define TRANSLATEDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h b/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h
index 9251582ef8..1da7140f97 100644
--- a/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h
+++ b/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h
@@ -10,11 +10,8 @@
#define DIALOG_WITHOUT_BUTTONS_TR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
-#include <QtWidgets/QHeaderView>
#include <ki18n.h>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/tools/uic/baseline/translationsettings.ui.h b/tests/auto/tools/uic/baseline/translationsettings.ui.h
index ef4e3ab819..522c9bd4e0 100644
--- a/tests/auto/tools/uic/baseline/translationsettings.ui.h
+++ b/tests/auto/tools/uic/baseline/translationsettings.ui.h
@@ -10,15 +10,12 @@
#define TRANSLATIONSETTINGS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QVBoxLayout>
diff --git a/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h b/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h
index 6257bb8245..13957e843c 100644
--- a/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h
@@ -40,9 +40,7 @@
#define TREEWIDGETEDITOR_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QGridLayout>
diff --git a/tests/auto/tools/uic/baseline/trpreviewtool.ui.h b/tests/auto/tools/uic/baseline/trpreviewtool.ui.h
index d23e8bae4c..da6e86a8ce 100644
--- a/tests/auto/tools/uic/baseline/trpreviewtool.ui.h
+++ b/tests/auto/tools/uic/baseline/trpreviewtool.ui.h
@@ -42,9 +42,7 @@
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDockWidget>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QListView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
diff --git a/tests/auto/tools/uic/baseline/validators.ui.h b/tests/auto/tools/uic/baseline/validators.ui.h
index 546c050dd8..a28f9e8390 100644
--- a/tests/auto/tools/uic/baseline/validators.ui.h
+++ b/tests/auto/tools/uic/baseline/validators.ui.h
@@ -10,16 +10,13 @@
#define VALIDATORS_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDoubleSpinBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h b/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h
index 48820b14a0..1254eee3f7 100644
--- a/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h
@@ -10,16 +10,13 @@
#define WATERINGCONFIGDIALOG_H
#include <QtCore/QVariant>
-#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
-#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QCheckBox>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
-#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QSpinBox>
diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
index d704d212dd..7e246b5366 100644
--- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
+++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
@@ -243,7 +243,7 @@ void tst_QDialog::showMaximized()
dialog.showMaximized();
QVERIFY(dialog.isMaximized());
QVERIFY(dialog.isVisible());
-#if QT_CONFIG(sizegrip) && !defined(Q_OS_DARWIN) && !defined(Q_OS_IRIX) && !defined(Q_OS_HPUX)
+#if QT_CONFIG(sizegrip) && !defined(Q_OS_DARWIN) && !defined(Q_OS_HPUX)
QVERIFY(!sizeGrip->isVisible());
#endif
diff --git a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
index 71efe1d59a..40a7d56432 100644
--- a/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
+++ b/tests/auto/widgets/dialogs/qfilesystemmodel/tst_qfilesystemmodel.cpp
@@ -102,6 +102,7 @@ private slots:
void mkdir();
void deleteFile();
+ void deleteDirectory();
void caseSensitivity();
@@ -884,6 +885,44 @@ void tst_QFileSystemModel::deleteFile()
QVERIFY(!newFile.exists());
}
+void tst_QFileSystemModel::deleteDirectory()
+{
+ // QTBUG-65683: Verify that directories can be removed recursively despite
+ // file system watchers being active on them or their sub-directories (Windows).
+ // Create a temporary directory, a nested directory and expand a treeview
+ // to show them to ensure watcher creation. Then delete the directory.
+ QTemporaryDir dirToBeDeleted(flatDirTestPath + QStringLiteral("/deleteDirectory-XXXXXX"));
+ QVERIFY(dirToBeDeleted.isValid());
+ const QString dirToBeDeletedPath = dirToBeDeleted.path();
+ const QString nestedTestDir = QStringLiteral("test");
+ QVERIFY(QDir(dirToBeDeletedPath).mkpath(nestedTestDir));
+ const QString nestedTestDirPath = dirToBeDeletedPath + QLatin1Char('/') + nestedTestDir;
+ QFile testFile(nestedTestDirPath + QStringLiteral("/test.txt"));
+ QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Text));
+ testFile.write("Hello\n");
+ testFile.close();
+
+ QFileSystemModel model;
+ const QModelIndex rootIndex = model.setRootPath(flatDirTestPath);
+ QTreeView treeView;
+ treeView.setWindowTitle(QTest::currentTestFunction());
+ treeView.setModel(&model);
+ treeView.setRootIndex(rootIndex);
+
+ const QModelIndex dirToBeDeletedPathIndex = model.index(dirToBeDeletedPath);
+ QVERIFY(dirToBeDeletedPathIndex.isValid());
+ treeView.setExpanded(dirToBeDeletedPathIndex, true);
+ const QModelIndex nestedTestDirIndex = model.index(nestedTestDirPath);
+ QVERIFY(nestedTestDirIndex.isValid());
+ treeView.setExpanded(nestedTestDirIndex, true);
+
+ treeView.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&treeView));
+
+ QVERIFY(model.remove(dirToBeDeletedPathIndex));
+ dirToBeDeleted.setAutoRemove(false);
+}
+
static QString flipCase(QString s)
{
for (int i = 0, size = s.size(); i < size; ++i) {
diff --git a/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST b/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST
deleted file mode 100644
index 07f3a41df3..0000000000
--- a/tests/auto/widgets/dialogs/qfontdialog/BLACKLIST
+++ /dev/null
@@ -1,5 +0,0 @@
-[task256466_wrongStyle]
-opensuse-13.1
-opensuse-42.1
-rhel-7.1
-rhel-7.2
diff --git a/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp b/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp
index 62286d703f..259de49c67 100644
--- a/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp
+++ b/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp
@@ -338,7 +338,7 @@ class SelfDestructParent : public QWidget
Q_OBJECT
public:
explicit SelfDestructParent(int delay = 100)
- : QWidget(Q_NULLPTR)
+ : QWidget(nullptr)
{
QTimer::singleShot(delay, this, SLOT(deleteLater()));
}
diff --git a/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST b/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST
index 36e47830d0..da52809aad 100644
--- a/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST
+++ b/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST
@@ -1,2 +1,2 @@
[defaultButton]
-osx ci
+*
diff --git a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
index 6a16e48394..a5058f4b6c 100644
--- a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
+++ b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
@@ -134,10 +134,10 @@ class ExecCloseHelper : public QObject
public:
enum { CloseWindow = -1 };
- explicit ExecCloseHelper(QObject *parent = Q_NULLPTR)
- : QObject(parent), m_key(0), m_timerId(0), m_testCandidate(Q_NULLPTR) { }
+ explicit ExecCloseHelper(QObject *parent = nullptr)
+ : QObject(parent), m_key(0), m_timerId(0), m_testCandidate(nullptr) { }
- void start(int key, QWidget *testCandidate = Q_NULLPTR)
+ void start(int key, QWidget *testCandidate = nullptr)
{
m_key = key;
m_testCandidate = testCandidate;
@@ -147,7 +147,7 @@ public:
bool done() const { return !m_timerId; }
protected:
- void timerEvent(QTimerEvent *te) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *te) override;
private:
int m_key;
@@ -172,7 +172,7 @@ void ExecCloseHelper::timerEvent(QTimerEvent *te)
QKeyEvent *ke = new QKeyEvent(QEvent::KeyPress, m_key, Qt::NoModifier);
QCoreApplication::postEvent(m_testCandidate, ke);
}
- m_testCandidate = Q_NULLPTR;
+ m_testCandidate = nullptr;
killTimer(m_timerId);
m_timerId = m_key = 0;
}
diff --git a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp
index 44b7894c53..00d640e55e 100644
--- a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp
+++ b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp
@@ -255,10 +255,10 @@ class QTestTranslator : public QTranslator
public:
explicit QTestTranslator(QString str) : m_str(qMove(str)) {}
- QString translate(const char *, const char *sourceText, const char *, int) const Q_DECL_OVERRIDE
+ QString translate(const char *, const char *sourceText, const char *, int) const override
{ return m_str + sourceText + m_str; }
- bool isEmpty() const Q_DECL_OVERRIDE { return false; }
+ bool isEmpty() const override { return false; }
};
template <typename Translator>
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
deleted file mode 100644
index abfa7a3329..0000000000
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[ensureUpdateOnTextItem]
-osx-10.10
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 2220ef8d2f..26831002ce 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -1101,11 +1101,11 @@ void tst_QGraphicsItem::visible()
scene.addItem(item);
QVERIFY(item->isVisible());
- QCOMPARE(scene.items(QPointF(0, 0)).value(0, Q_NULLPTR), item);
+ QCOMPARE(scene.items(QPointF(0, 0)).value(0, nullptr), item);
item->setVisible(false);
QVERIFY(scene.items(QPointF(0, 0)).isEmpty());
item->setVisible(true);
- QCOMPARE(scene.items(QPointF(0, 0)).value(0, Q_NULLPTR), item);
+ QCOMPARE(scene.items(QPointF(0, 0)).value(0, nullptr), item);
QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
event.setButton(Qt::LeftButton);
@@ -5494,16 +5494,16 @@ void tst_QGraphicsItem::itemClipsChildrenToShape2()
QGraphicsScene scene;
scene.addItem(parent);
- QCOMPARE(scene.items(QPointF(5, 5)).value(0, Q_NULLPTR), (QGraphicsItem *)parent);
+ QCOMPARE(scene.items(QPointF(5, 5)).value(0, nullptr), (QGraphicsItem *)parent);
QVERIFY(scene.items(QPointF(15, 5)).isEmpty());
QVERIFY(scene.items(QPointF(5, 15)).isEmpty());
QVERIFY(scene.items(QPointF(60, 60)).isEmpty());
QVERIFY(scene.items(QPointF(140, 60)).isEmpty());
QVERIFY(scene.items(QPointF(60, 140)).isEmpty());
QVERIFY(scene.items(QPointF(140, 140)).isEmpty());
- QCOMPARE(scene.items(QPointF(75, 75)).value(0, Q_NULLPTR), (QGraphicsItem *)child2);
- QCOMPARE(scene.items(QPointF(75, 100)).value(0, Q_NULLPTR), (QGraphicsItem *)child1);
- QCOMPARE(scene.items(QPointF(100, 75)).value(0, Q_NULLPTR), (QGraphicsItem *)child1);
+ QCOMPARE(scene.items(QPointF(75, 75)).value(0, nullptr), (QGraphicsItem *)child2);
+ QCOMPARE(scene.items(QPointF(75, 100)).value(0, nullptr), (QGraphicsItem *)child1);
+ QCOMPARE(scene.items(QPointF(100, 75)).value(0, nullptr), (QGraphicsItem *)child1);
QImage image(100, 100, QImage::Format_ARGB32_Premultiplied);
image.fill(0);
@@ -5538,9 +5538,9 @@ void tst_QGraphicsItem::itemClipsChildrenToShape3()
grandchild->setPos( 50, 50 );
parent->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
- QCOMPARE(scene.items(QPointF(25, 25)).value(0, Q_NULLPTR), (QGraphicsItem *)parent);
- QCOMPARE(scene.items(QPointF(75, 75)).value(0, Q_NULLPTR), (QGraphicsItem *)child);
- QCOMPARE(scene.items(QPointF(125, 125)).value(0, Q_NULLPTR), (QGraphicsItem *)grandchild);
+ QCOMPARE(scene.items(QPointF(25, 25)).value(0, nullptr), (QGraphicsItem *)parent);
+ QCOMPARE(scene.items(QPointF(75, 75)).value(0, nullptr), (QGraphicsItem *)child);
+ QCOMPARE(scene.items(QPointF(125, 125)).value(0, nullptr), (QGraphicsItem *)grandchild);
QVERIFY(scene.items(QPointF(175, 175)).isEmpty());
// Move child to fully overlap the parent. The grandchild should
@@ -5548,9 +5548,9 @@ void tst_QGraphicsItem::itemClipsChildrenToShape3()
child->prepareGeometryChange();
child->setPos( 0, 0 );
- QCOMPARE(scene.items(QPointF(25, 25)).value(0, Q_NULLPTR), (QGraphicsItem *)child);
- QCOMPARE(scene.items(QPointF(75, 75)).value(0, Q_NULLPTR), (QGraphicsItem *)grandchild);
- QCOMPARE(scene.items(QPointF(125, 125)).value(0, Q_NULLPTR), (QGraphicsItem *)grandchild);
+ QCOMPARE(scene.items(QPointF(25, 25)).value(0, nullptr), (QGraphicsItem *)child);
+ QCOMPARE(scene.items(QPointF(75, 75)).value(0, nullptr), (QGraphicsItem *)grandchild);
+ QCOMPARE(scene.items(QPointF(125, 125)).value(0, nullptr), (QGraphicsItem *)grandchild);
QVERIFY(scene.items(QPointF(175, 175)).isEmpty());
}
@@ -5823,8 +5823,8 @@ void tst_QGraphicsItem::itemClippingDiscovery()
rightRectItem->setParentItem(clipItem);
// The rects item are both visible at these points.
- QCOMPARE(scene.items(QPointF(10, 10)).value(0, Q_NULLPTR), (QGraphicsItem *)leftRectItem);
- QCOMPARE(scene.items(QPointF(90, 90)).value(0, Q_NULLPTR), (QGraphicsItem *)rightRectItem);
+ QCOMPARE(scene.items(QPointF(10, 10)).value(0, nullptr), (QGraphicsItem *)leftRectItem);
+ QCOMPARE(scene.items(QPointF(90, 90)).value(0, nullptr), (QGraphicsItem *)rightRectItem);
// The ellipse clips the rects now.
clipItem->setFlag(QGraphicsItem::ItemClipsChildrenToShape);
@@ -5864,7 +5864,7 @@ void tst_QGraphicsItem::itemContainsChildrenInShape()
int oldChildBoundingRectCalls = childOutsideShape->boundingRectCalls;
// First test that both items are searched if no optimization flags are set
- QGraphicsItem* item = scene.items(QPointF(25, 5)).value(0, Q_NULLPTR);
+ QGraphicsItem* item = scene.items(QPointF(25, 5)).value(0, nullptr);
QCOMPARE(item, childOutsideShape);
QVERIFY(parent->boundingRectCalls > oldParentBoundingRectCalls);
@@ -5875,7 +5875,7 @@ void tst_QGraphicsItem::itemContainsChildrenInShape()
oldChildBoundingRectCalls = childOutsideShape->boundingRectCalls;
// Repeat the test to make sure that no caching/indexing is in effect
- item = scene.items(QPointF(25, 5)).value(0, Q_NULLPTR);
+ item = scene.items(QPointF(25, 5)).value(0, nullptr);
QCOMPARE(item, childOutsideShape);
QVERIFY(parent->boundingRectCalls > oldParentBoundingRectCalls);
@@ -5888,7 +5888,7 @@ void tst_QGraphicsItem::itemContainsChildrenInShape()
// Set the optimization flag and make sure that the child is not returned
// and that the child's boundingRect() method is never called.
parent->setFlag(QGraphicsItem::ItemContainsChildrenInShape);
- item = scene.items(QPointF(25, 5)).value(0, Q_NULLPTR);
+ item = scene.items(QPointF(25, 5)).value(0, nullptr);
QVERIFY(!(item));
QVERIFY(parent->boundingRectCalls > oldParentBoundingRectCalls);
diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
index 0f5277710c..97f3eb4a60 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
@@ -894,7 +894,7 @@ public:
: QProxyStyle(key),
horizontalSpacing(-1), verticalSpacing(-1) {}
- virtual int pixelMetric(QStyle::PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE
+ virtual int pixelMetric(QStyle::PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const override
{
if (pm == QStyle::PM_LayoutHorizontalSpacing && horizontalSpacing >= 0) {
return horizontalSpacing;
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST
deleted file mode 100644
index 16f3534921..0000000000
--- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST
+++ /dev/null
@@ -1,6 +0,0 @@
-[hoverEnterLeaveEvent]
-ubuntu-14.04
-rhel-7.1
-rhel-7.2
-[QTBUG_6986_sendMouseEventToAlienWidget]
-rhel-7.1
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
index 07d195b3e8..8287b9ebdd 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
@@ -1471,6 +1471,15 @@ protected:
}
};
+// ### work around missing QVector ctor from iterator pair:
+static QVector<QRect> rects(const QRegion &region)
+{
+ QVector<QRect> result;
+ for (QRect r : region)
+ result.push_back(r);
+ return result;
+}
+
void tst_QGraphicsProxyWidget::scrollUpdate()
{
ScrollWidget *widget = new ScrollWidget;
@@ -1492,10 +1501,10 @@ void tst_QGraphicsProxyWidget::scrollUpdate()
// QRect(0, 0, 200, 12) is the first update, expanded (-2, -2, 2, 2)
// QRect(0, 12, 102, 10) is the scroll update, expanded (-2, -2, 2, 2),
// intersected with the above update.
- QCOMPARE(view.paintEventRegion.rects(),
+ QCOMPARE(rects(view.paintEventRegion),
QVector<QRect>() << QRect(0, 0, 200, 12) << QRect(0, 12, 102, 10));
QCOMPARE(widget->npaints, 2);
- QCOMPARE(widget->paintEventRegion.rects(),
+ QCOMPARE(rects(widget->paintEventRegion),
QVector<QRect>() << QRect(0, 0, 200, 12) << QRect(0, 12, 102, 10));
}
@@ -2661,9 +2670,6 @@ void tst_QGraphicsProxyWidget::childPos_data()
void tst_QGraphicsProxyWidget::childPos()
{
-#ifdef Q_OS_IRIX
- QSKIP("This test is not reliable on IRIX.");
-#endif
QFETCH(bool, moveCombo);
QFETCH(QPoint, comboPos);
QFETCH(QPointF, proxyPos);
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
index e7cf8f17a2..fe8571abf1 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -296,7 +296,7 @@ void tst_QGraphicsScene::construction()
static inline const QGraphicsItem *itemAt(const QGraphicsScene &scene, qreal x, qreal y)
{
- return scene.items(QPointF(x, y)).value(0, Q_NULLPTR);
+ return scene.items(QPointF(x, y)).value(0, nullptr);
}
void tst_QGraphicsScene::sceneRect()
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
index 40d106e3ba..bc83dad714 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
@@ -14,3 +14,5 @@ xcb
xcb
[resizeAnchor]
xcb
+[update2]
+opensuse-42.3
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index f624bb6a5f..3d5df7506d 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
@@ -2464,9 +2464,9 @@ void tst_QGraphicsView::viewportUpdateMode()
// The view gets two updates for the update scene updates.
QTRY_VERIFY(!view.lastUpdateRegions.isEmpty());
#ifndef Q_OS_MAC //cocoa doesn't support drawing regions
- QCOMPARE(view.lastUpdateRegions.last().rects().size(), 2);
- QCOMPARE(view.lastUpdateRegions.last().rects().at(0).size(), QSize(14, 14));
- QCOMPARE(view.lastUpdateRegions.last().rects().at(1).size(), QSize(14, 14));
+ QCOMPARE(view.lastUpdateRegions.last().rectCount(), 2);
+ QCOMPARE(view.lastUpdateRegions.last().begin()[0].size(), QSize(14, 14));
+ QCOMPARE(view.lastUpdateRegions.last().begin()[1].size(), QSize(14, 14));
#endif
// Set full update mode.
@@ -2481,8 +2481,8 @@ void tst_QGraphicsView::viewportUpdateMode()
qApp->processEvents();
// The view gets one full viewport update for the update scene updates.
- QCOMPARE(view.lastUpdateRegions.last().rects().size(), 1);
- QCOMPARE(view.lastUpdateRegions.last().rects().at(0).size(), view.viewport()->size());
+ QCOMPARE(view.lastUpdateRegions.last().rectCount(), 1);
+ QCOMPARE(view.lastUpdateRegions.last().begin()[0].size(), view.viewport()->size());
view.lastUpdateRegions.clear();
// Set smart update mode
@@ -2499,8 +2499,8 @@ void tst_QGraphicsView::viewportUpdateMode()
qApp->processEvents();
// The view gets one bounding rect update.
- QCOMPARE(view.lastUpdateRegions.last().rects().size(), 1);
- QCOMPARE(view.lastUpdateRegions.last().rects().at(0).size(), QSize(32, 32));
+ QCOMPARE(view.lastUpdateRegions.last().rectCount(), 1);
+ QCOMPARE(view.lastUpdateRegions.last().begin()[0].size(), QSize(32, 32));
// Set no update mode
view.setViewportUpdateMode(QGraphicsView::NoViewportUpdate);
diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST
deleted file mode 100644
index 13ec840eff..0000000000
--- a/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST
+++ /dev/null
@@ -1,4 +0,0 @@
-[initialShow2]
-ubuntu-14.04
-rhel-7.1
-rhel-7.2
diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
index 1be17b552e..85b42e54fe 100644
--- a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
@@ -2059,10 +2059,10 @@ void tst_QGraphicsWidget::task236127_bspTreeIndexFails()
QTRY_VERIFY(scene.items(QPointF(25, 25)).isEmpty());
widget->setGeometry(0, 112, 360, 528);
- QTRY_COMPARE(scene.items(QPointF(15, 120)).value(0, Q_NULLPTR), (QGraphicsItem *)widget);
+ QTRY_COMPARE(scene.items(QPointF(15, 120)).value(0, nullptr), (QGraphicsItem *)widget);
widget2->setGeometry(0, 573, 360, 67);
- QTRY_COMPARE(scene.items(QPointF(15, 120)).value(0, Q_NULLPTR), (QGraphicsItem *)widget);
- QTRY_COMPARE(scene.items(QPointF(50, 585)).value(0, Q_NULLPTR), (QGraphicsItem *)widget2);
+ QTRY_COMPARE(scene.items(QPointF(15, 120)).value(0, nullptr), (QGraphicsItem *)widget);
+ QTRY_COMPARE(scene.items(QPointF(50, 585)).value(0, nullptr), (QGraphicsItem *)widget2);
}
void tst_QGraphicsWidget::defaultSize()
@@ -3461,12 +3461,12 @@ void tst_QGraphicsWidget::QTBUG_45867_send_itemChildAddedChange_to_parent()
{
}
- QRectF boundingRect() const Q_DECL_OVERRIDE { return QRectF(); }
+ QRectF boundingRect() const override { return QRectF(); }
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) Q_DECL_OVERRIDE {}
+ void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) override {}
protected:
- QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) Q_DECL_OVERRIDE
+ QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) override
{
if (change == QGraphicsItem::ItemChildAddedChange)
++m_itemChildAddedChangeNotificationsCount;
diff --git a/tests/auto/widgets/itemviews/itemviews.pro b/tests/auto/widgets/itemviews/itemviews.pro
index af0b6aeef0..f2ee0e9124 100644
--- a/tests/auto/widgets/itemviews/itemviews.pro
+++ b/tests/auto/widgets/itemviews/itemviews.pro
@@ -20,7 +20,3 @@ SUBDIRS=\
!qtConfig(private_tests): SUBDIRS -= \
qcolumnview \
qlistwidget \
-
-# This test takes too long to run on IRIX, so skip it on that platform
-irix-*:SUBDIRS -= qitemview
-
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 1ac66ed5cb..e99ed8f2f4 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -77,7 +77,7 @@ public:
GeometriesTestView() : QTableView(), updateGeometriesCalled(false) {}
bool updateGeometriesCalled;
protected slots:
- void updateGeometries() Q_DECL_OVERRIDE { updateGeometriesCalled = true; QTableView::updateGeometries(); }
+ void updateGeometries() override { updateGeometriesCalled = true; QTableView::updateGeometries(); }
};
class tst_QAbstractItemView : public QObject
@@ -147,6 +147,8 @@ private slots:
void testClearModelInClickedSignal();
void inputMethodEnabled_data();
void inputMethodEnabled();
+ void currentFollowsIndexWidget_data();
+ void currentFollowsIndexWidget();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -1555,7 +1557,7 @@ public:
QItemDelegate(parent)
{}
- void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE {
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override {
Q_UNUSED(index);
static bool w = true;
editor->setEnabled(w);
@@ -1999,7 +2001,7 @@ void tst_QAbstractItemView::QTBUG50535_update_on_new_selection_model()
{
}
- void setSelectionModel(QItemSelectionModel *model) Q_DECL_OVERRIDE
+ void setSelectionModel(QItemSelectionModel *model) override
{
m_deselectedMustBeEmpty = !selectionModel() || !model || selectionModel()->model() != model->model();
QListView::setSelectionModel(model);
@@ -2009,7 +2011,7 @@ void tst_QAbstractItemView::QTBUG50535_update_on_new_selection_model()
bool selectionChangedOk() const { return m_selectionChangedOk; }
protected:
- bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE
+ bool viewportEvent(QEvent *event) override
{
if (event->type() == QEvent::Paint)
++m_paintEventsCount;
@@ -2017,7 +2019,7 @@ void tst_QAbstractItemView::QTBUG50535_update_on_new_selection_model()
}
void selectionChanged(const QItemSelection &selected,
- const QItemSelection &deselected) Q_DECL_OVERRIDE
+ const QItemSelection &deselected) override
{
if (m_deselectedMustBeEmpty && !deselected.isEmpty())
m_selectionChangedOk = false;
@@ -2140,7 +2142,7 @@ signals:
void setSelectionCalled(const QRect &rect);
protected:
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) Q_DECL_OVERRIDE
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) override
{
emit setSelectionCalled(rect);
QListView::setSelection(rect, flags);
@@ -2390,5 +2392,56 @@ void tst_QAbstractItemView::inputMethodEnabled()
QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
}
+void tst_QAbstractItemView::currentFollowsIndexWidget_data()
+{
+ QTest::addColumn<QByteArray>("viewType");
+
+ QList<QByteArray> widgets;
+ widgets << "QListView" << "QTreeView" << "QTableView";
+ for (const QByteArray &widget : qAsConst(widgets))
+ QTest::newRow(widget) << widget;
+}
+
+void tst_QAbstractItemView::currentFollowsIndexWidget()
+{
+ QFETCH(QByteArray, viewType);
+
+ QScopedPointer<QAbstractItemView> view;
+ if (viewType == "QListView")
+ view.reset(new QListView());
+ else if (viewType == "QTableView")
+ view.reset(new QTableView());
+ else if (viewType == "QTreeView")
+ view.reset(new QTreeView());
+ else
+ QVERIFY(0);
+
+ centerOnScreen(view.data());
+ view->show();
+ QVERIFY(QTest::qWaitForWindowExposed(view.data()));
+
+ QStandardItemModel *model = new QStandardItemModel(view.data());
+ QStandardItem *item1 = new QStandardItem("first item");
+ item1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ model->appendRow(item1);
+
+ QStandardItem *item2 = new QStandardItem("test item");
+ item2->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ model->appendRow(item2);
+
+ view->setModel(model);
+ QLineEdit *lineEdit1 = new QLineEdit;
+ QLineEdit *lineEdit2 = new QLineEdit;
+ view->setIndexWidget(item1->index(), lineEdit1);
+ view->setIndexWidget(item2->index(), lineEdit2);
+
+ lineEdit2->setFocus();
+ QTRY_VERIFY(lineEdit2->hasFocus());
+ QCOMPARE(view->currentIndex(), item2->index());
+ lineEdit1->setFocus();
+ QTRY_VERIFY(lineEdit1->hasFocus());
+ QCOMPARE(view->currentIndex(), item1->index());
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
index 6dae2cf8e4..3594e7fa01 100644
--- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
+++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
@@ -239,13 +239,15 @@ private slots:
void testStreamWithHide();
void testStylePosition();
void stretchAndRestoreLastSection();
-
+ void testMinMaxSectionSizeStretched();
+ void testMinMaxSectionSizeNotStretched();
void sizeHintCrash();
protected:
void setupTestData(bool use_reset_model = false);
void additionalInit();
void calculateAndCheck(int cppline, const int precalced_comparedata[]);
+ void testMinMaxSectionSize(bool stretchLastSection);
QWidget *topLevel;
QHeaderView *view;
@@ -402,6 +404,7 @@ void tst_QHeaderView::init()
QCOMPARE(view->length(), 0);
QCOMPARE(view->sizeHint(), QSize(0,0));
QCOMPARE(view->sectionSizeHint(0), -1);
+ view->setMinimumSectionSize(0); // system default min size can be to large
/*
model = new QStandardItemModel(1, 1);
@@ -514,6 +517,12 @@ void tst_QHeaderView::movable()
QCOMPARE(view->sectionsMovable(), false);
view->setSectionsMovable(true);
QCOMPARE(view->sectionsMovable(), true);
+
+ QCOMPARE(view->firstSectionMovable(), true);
+ view->setFirstSectionMovable(false);
+ QCOMPARE(view->firstSectionMovable(), false);
+ view->setFirstSectionMovable(true);
+ QCOMPARE(view->firstSectionMovable(), true);
}
void tst_QHeaderView::clickable()
@@ -1598,6 +1607,7 @@ static QByteArray savedState()
QStandardItemModel m(4, 4);
QHeaderView h1(Qt::Horizontal);
h1.setModel(&m);
+ h1.setMinimumSectionSize(0); // system default min size can be to large
h1.swapSections(0, 2);
h1.resizeSection(1, 10);
h1.setSortIndicatorShown(true);
@@ -1800,7 +1810,7 @@ class TestHeaderViewStyle : public QProxyStyle
{
public:
TestHeaderViewStyle() : horizontalSectionSize(100) {}
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const override
{
if (metric == QStyle::PM_HeaderDefaultSectionSizeHorizontal)
return horizontalSectionSize;
@@ -2188,6 +2198,7 @@ void tst_QHeaderView::task248050_hideRow()
//this is the sequence of events that make the task fail
protected_QHeaderView header(Qt::Vertical);
QStandardItemModel model(0, 1);
+ header.setMinimumSectionSize(0); // system default min size can be to large
header.setStretchLastSection(false);
header.setDefaultSectionSize(17);
header.setModel(&model);
@@ -3181,5 +3192,76 @@ void tst_QHeaderView::stretchAndRestoreLastSection()
QCOMPARE(header.sectionSize(9), someOtherSectionSize);
}
+void tst_QHeaderView::testMinMaxSectionSizeStretched()
+{
+ testMinMaxSectionSize(true);
+}
+
+void tst_QHeaderView::testMinMaxSectionSizeNotStretched()
+{
+ testMinMaxSectionSize(false);
+}
+
+static void waitFor(const std::function<bool()> &func)
+{
+ for (int i = 0; i < 100; i++)
+ {
+ if (func())
+ return;
+ QTest::qWait(10);
+ }
+}
+
+void tst_QHeaderView::testMinMaxSectionSize(bool stretchLastSection)
+{
+ QStandardItemModel m(5, 5);
+ QTableView tv;
+ tv.setModel(&m);
+ tv.show();
+
+ const int sectionSizeMin = 20;
+ const int sectionSizeMax = 40;
+ const int defaultSectionSize = 30;
+
+ QVERIFY(QTest::qWaitForWindowExposed(&tv));
+
+ QHeaderView &header = *tv.horizontalHeader();
+ header.setMinimumSectionSize(sectionSizeMin);
+ header.setMaximumSectionSize(sectionSizeMax);
+ header.setDefaultSectionSize(defaultSectionSize);
+ header.setStretchLastSection(stretchLastSection);
+
+ // check defaults
+ QCOMPARE(header.sectionSize(0), defaultSectionSize);
+ QCOMPARE(header.sectionSize(3), defaultSectionSize);
+
+ // do not go above maxSectionSize
+ header.resizeSection(0, sectionSizeMax + 1);
+ QCOMPARE(header.sectionSize(0), sectionSizeMax);
+
+ // do not go below minSectionSize
+ header.resizeSection(0, sectionSizeMin - 1);
+ QCOMPARE(header.sectionSize(0), sectionSizeMin);
+
+ // change section size on max change
+ header.setMinimumSectionSize(sectionSizeMin);
+ header.setMaximumSectionSize(sectionSizeMax);
+ header.resizeSection(0, sectionSizeMax);
+ QCOMPARE(header.sectionSize(0), sectionSizeMax);
+ header.setMaximumSectionSize(defaultSectionSize);
+ waitFor([this, &header, defaultSectionSize]() { return header.sectionSize(0) == defaultSectionSize; });
+ QCOMPARE(header.sectionSize(0), defaultSectionSize);
+
+ // change section size on min change
+ header.setMinimumSectionSize(sectionSizeMin);
+ header.setMaximumSectionSize(sectionSizeMax);
+ header.resizeSection(0, sectionSizeMin);
+ QCOMPARE(header.sectionSize(0), sectionSizeMin);
+ header.setMinimumSectionSize(defaultSectionSize);
+ waitFor([this, &header, defaultSectionSize]() { return header.sectionSize(0) == defaultSectionSize; });
+ QCOMPARE(header.sectionSize(0), defaultSectionSize);
+}
+
+
QTEST_MAIN(tst_QHeaderView)
#include "tst_qheaderview.moc"
diff --git a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp
index 2a5895583d..2fed2e0c69 100644
--- a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp
+++ b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp
@@ -220,6 +220,20 @@ private slots:
void QTBUG4435_keepSelectionOnCheck();
void QTBUG16469_textForRole();
+ void dateTextForRole_data();
+ void dateTextForRole();
+
+#ifdef QT_BUILD_INTERNAL
+private:
+ struct RoleDelegate : public QItemDelegate
+ {
+ QString textForRole(Qt::ItemDataRole role, const QVariant &value, const QLocale &locale)
+ {
+ QAbstractItemDelegatePrivate *d = reinterpret_cast<QAbstractItemDelegatePrivate *>(qGetPtrHelper(d_ptr));
+ return d->textForRole(role, value, locale);
+ }
+ };
+#endif
};
@@ -474,7 +488,7 @@ void tst_QItemDelegate::doLayout_data()
<< QRect(0, 0, 50, 50)
<< QRect(0, 0, 1000, 1000)
<< QRect(0, 0, 400, 400)
- << QRect(m, 0, 50 + 2*m, 1000)
+ << QRect(0, 0, 50 + 2*m, 1000)
<< QRect(50 + 2*m, 0, 1000 + 2*m, 1000 + m)
<< QRect(50 + 2*m, 1000 + m, 1000 + 2*m, 400);
/*
@@ -510,7 +524,7 @@ void tst_QItemDelegate::doLayout_data()
<< QRect(0, 0, 50, 50)
<< QRect(0, 0, 1000, 1000)
<< QRect(0, 0, 400, 400)
- << QRect(m, 0, 50 + 2 * m, 1000)
+ << QRect(0, 0, 50 + 2 * m, 1000)
<< QRect(50 + 2 * m, 400 + m, 1000 + 2 * m, 1000)
<< QRect(50 + 2 * m, 0, 1000 + 2 * m, 400 + m);
@@ -534,7 +548,7 @@ void tst_QItemDelegate::doLayout_data()
<< QRect(0, 0, 50, 50)
<< QRect(0, 0, 1000, 1000)
<< QRect(0, 0, 400, 400)
- << QRect(m, 0, 50 + 2 * m, 1000)
+ << QRect(0, 0, 50 + 2 * m, 1000)
<< QRect(50 + 2 * m, 0, 1000 + 2 * m, 1000)
<< QRect(1050 + 4 * m, 0, 400 + 2 * m, 1000);
@@ -558,7 +572,7 @@ void tst_QItemDelegate::doLayout_data()
<< QRect(0, 0, 50, 50)
<< QRect(0, 0, 1000, 1000)
<< QRect(0, 0, 400, 400)
- << QRect(m, 0, 50 + 2 * m, 1000)
+ << QRect(0, 0, 50 + 2 * m, 1000)
<< QRect(450 + 4 * m, 0, 1000 + 2 * m, 1000)
<< QRect(50 + 2 * m, 0, 400 + 2 * m, 1000);
@@ -1530,14 +1544,7 @@ void tst_QItemDelegate::QTBUG16469_textForRole()
#ifndef QT_BUILD_INTERNAL
QSKIP("This test requires a developer build");
#else
- struct TestDelegate : public QItemDelegate
- {
- QString textForRole(Qt::ItemDataRole role, const QVariant &value, const QLocale &locale)
- {
- QAbstractItemDelegatePrivate *d = reinterpret_cast<QAbstractItemDelegatePrivate *>(qGetPtrHelper(d_ptr));
- return d->textForRole(role, value, locale);
- }
- } delegate;
+ RoleDelegate delegate;
QLocale locale;
const float f = 123.456f;
@@ -1559,20 +1566,6 @@ void tst_QItemDelegate::QTBUG16469_textForRole()
QCOMPARE(delegate.textForRole(Qt::DisplayRole, ull, locale), locale.toString(ull));
QCOMPARE(delegate.textForRole(Qt::ToolTipRole, ull, locale), locale.toString(ull));
- const QDateTime dateTime = QDateTime::currentDateTime();
- const QDate date = dateTime.date();
- const QTime time = dateTime.time();
- const QString shortDate = locale.toString(date, QLocale::ShortFormat);
- const QString longDate = locale.toString(date, QLocale::LongFormat);
- const QString shortTime = locale.toString(time, QLocale::ShortFormat);
- const QString longTime = locale.toString(time, QLocale::LongFormat);
- QCOMPARE(delegate.textForRole(Qt::DisplayRole, date, locale), shortDate);
- QCOMPARE(delegate.textForRole(Qt::ToolTipRole, date, locale), longDate);
- QCOMPARE(delegate.textForRole(Qt::DisplayRole, time, locale), shortTime);
- QCOMPARE(delegate.textForRole(Qt::ToolTipRole, time, locale), longTime);
- QCOMPARE(delegate.textForRole(Qt::DisplayRole, dateTime, locale), shortDate + QLatin1Char(' ') + shortTime);
- QCOMPARE(delegate.textForRole(Qt::ToolTipRole, dateTime, locale), longDate + QLatin1Char(' ') + longTime);
-
const QString text("text");
QCOMPARE(delegate.textForRole(Qt::DisplayRole, text, locale), text);
QCOMPARE(delegate.textForRole(Qt::ToolTipRole, text, locale), text);
@@ -1584,6 +1577,41 @@ void tst_QItemDelegate::QTBUG16469_textForRole()
#endif
}
+void tst_QItemDelegate::dateTextForRole_data()
+{
+#ifdef QT_BUILD_INTERNAL
+ QTest::addColumn<QDateTime>("when");
+
+ QTest::newRow("now") << QDateTime::currentDateTime(); // It's a local time
+ QDate date(2013, 12, 11);
+ QTime time(10, 9, 8, 765);
+ // Ensure we exercise every time-spec variant:
+ QTest::newRow("local") << QDateTime(date, time, Qt::LocalTime);
+ QTest::newRow("UTC") << QDateTime(date, time, Qt::UTC);
+ QTest::newRow("zone") << QDateTime(date, time, QTimeZone("Europe/Dublin"));
+ QTest::newRow("offset") << QDateTime(date, time, Qt::OffsetFromUTC, 36000);
+#endif
+}
+
+void tst_QItemDelegate::dateTextForRole()
+{
+#ifndef QT_BUILD_INTERNAL
+ QSKIP("This test requires a developer build");
+#else
+ QFETCH(QDateTime, when);
+ RoleDelegate delegate;
+ QLocale locale;
+# define CHECK(value) \
+ QCOMPARE(delegate.textForRole(Qt::DisplayRole, value, locale), locale.toString(value, QLocale::ShortFormat)); \
+ QCOMPARE(delegate.textForRole(Qt::ToolTipRole, value, locale), locale.toString(value, QLocale::LongFormat))
+
+ CHECK(when);
+ CHECK(when.date());
+ CHECK(when.time());
+# undef CHECK
+#endif
+}
+
// ### _not_ covered:
// editing with a custom editor factory
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index 5e0d99f25e..1d8286b3cf 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -282,7 +282,7 @@ public:
class ScrollPerItemListView : public QListView
{
public:
- explicit ScrollPerItemListView(QWidget *parent = Q_NULLPTR)
+ explicit ScrollPerItemListView(QWidget *parent = nullptr)
: QListView(parent)
{
// Force per item scroll mode since it comes from the style by default
diff --git a/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp b/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp
index d4cb54b9ff..f7332a15f5 100644
--- a/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp
+++ b/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp
@@ -1381,20 +1381,38 @@ void tst_QListWidget::changeDataWithSorting_data()
<< false;
}
+class QListWidgetDataChanged : public QListWidget
+{
+ Q_OBJECT
+public:
+ using QListWidget::QListWidget;
+
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) override
+ {
+ QListWidget::dataChanged(topLeft, bottomRight, roles);
+ currentRoles = roles;
+ }
+ QVector<int> currentRoles;
+};
+
void tst_QListWidget::itemData()
{
- QListWidget widget;
+ QListWidgetDataChanged widget;
QListWidgetItem item(&widget);
item.setFlags(item.flags() | Qt::ItemIsEditable);
item.setData(Qt::DisplayRole, QString("0"));
+ QCOMPARE(widget.currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole}));
item.setData(Qt::CheckStateRole, Qt::PartiallyChecked);
- item.setData(Qt::UserRole + 0, QString("1"));
- item.setData(Qt::UserRole + 1, QString("2"));
- item.setData(Qt::UserRole + 2, QString("3"));
- item.setData(Qt::UserRole + 3, QString("4"));
+ QCOMPARE(widget.currentRoles, {Qt::CheckStateRole});
+ for (int i = 0; i < 4; ++i)
+ {
+ item.setData(Qt::UserRole + i, QString::number(i + 1));
+ QCOMPARE(widget.currentRoles, {Qt::UserRole + i});
+ }
QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0));
QCOMPARE(flags.count(), 6);
- QCOMPARE(flags[Qt::UserRole + 0].toString(), QString("1"));
+ for (int i = 0; i < 4; ++i)
+ QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1));
}
void tst_QListWidget::changeDataWithSorting()
diff --git a/tests/auto/widgets/itemviews/qtableview/BLACKLIST b/tests/auto/widgets/itemviews/qtableview/BLACKLIST
index 329010a86e..fc231a4e30 100644
--- a/tests/auto/widgets/itemviews/qtableview/BLACKLIST
+++ b/tests/auto/widgets/itemviews/qtableview/BLACKLIST
@@ -1,4 +1,2 @@
[moveCursorBiggerJump]
osx
-[resizeColumnsToContents]
-ubuntu-14.04
diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
index 4e401ddd86..06c80bf8d2 100644
--- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
+++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
@@ -426,6 +426,9 @@ public:
this, SLOT(slotCurrentChanged(QModelIndex,QModelIndex)));
connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(itemSelectionChanged(QItemSelection,QItemSelection)));
+ // Allow small sections in this test, since this test was made before we correctly enforced minimum sizes.
+ horizontalHeader()->setMinimumSectionSize(0);
+ verticalHeader()->setMinimumSectionSize(0);
}
// enum CursorAction and moveCursor() are protected in QTableView.
@@ -738,6 +741,8 @@ void tst_QTableView::headerSections()
QHeaderView *vheader = view.verticalHeader();
view.setModel(&model);
+ hheader->setMinimumSectionSize(columnWidth);
+ vheader->setMinimumSectionSize(rowHeight);
view.show();
hheader->doItemsLayout();
@@ -1147,6 +1152,9 @@ void tst_QTableView::moveCursor()
QtTestTableView view;
view.setModel(&model);
+ // we have to make sure that PgUp/PgDown can scroll to the bottom/top
+ view.resize(view.horizontalHeader()->length() + 50,
+ view.verticalHeader()->length() + 50);
view.hideRow(hideRow);
view.hideColumn(hideColumn);
if (moveColumn.first != moveColumn.second)
@@ -2085,6 +2093,8 @@ void tst_QTableView::visualRect()
QTableView view;
view.setModel(&model);
+ view.horizontalHeader()->setMinimumSectionSize(0);
+ view.verticalHeader()->setMinimumSectionSize(0);
// Make sure that it has 1 pixel between each cell.
view.setGridStyle(Qt::SolidLine);
for (int i = 0; i < view.verticalHeader()->count(); ++i)
@@ -3533,6 +3543,9 @@ void tst_QTableView::editSpanFromDirections()
TableViewWithCursorExposed view;
view.setModel(model.data());
+ // we have to make sure that PgUp/PgDown can scroll to the bottom/top
+ view.resize(view.horizontalHeader()->length() + 50,
+ view.verticalHeader()->length() + 50);
view.setSpan(row, column, rowSpan, columnSpan);
view.show();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -3978,7 +3991,7 @@ void tst_QTableView::mouseWheel_data()
<< 10 + qApp->wheelScrollLines() << 10 + qApp->wheelScrollLines();
QTest::newRow("scroll down per pixel")
<< int(QAbstractItemView::ScrollPerPixel) << -120
- << 10 + qApp->wheelScrollLines() * 89 << 10 + qApp->wheelScrollLines() * 28;
+ << 10 + qApp->wheelScrollLines() * 91 << 10 + qApp->wheelScrollLines() * 46;
}
void tst_QTableView::mouseWheel()
@@ -3992,16 +4005,17 @@ void tst_QTableView::mouseWheel()
QWidget topLevel;
QtTestTableView view(&topLevel);
view.resize(500, 500);
- for (int r = 0; r < 100; ++r)
- view.setRowHeight(r, 50);
- for (int c = 0; c < 100; ++c)
- view.setColumnWidth(c, 100);
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
view.setModel(&model);
+ for (int r = 0; r < 100; ++r)
+ view.setRowHeight(r, 50);
+ for (int c = 0; c < 100; ++c)
+ view.setColumnWidth(c, 100);
+
view.setHorizontalScrollMode((QAbstractItemView::ScrollMode)scrollMode);
view.setVerticalScrollMode((QAbstractItemView::ScrollMode)scrollMode);
view.horizontalScrollBar()->setValue(10);
@@ -4270,7 +4284,7 @@ void tst_QTableView::changeHeaderData()
QVERIFY(QTest::qWaitForWindowExposed(&view));
QString text = "long long long text";
- const int textWidth = view.verticalHeader()->fontMetrics().width(text);
+ const int textWidth = view.verticalHeader()->fontMetrics().horizontalAdvance(text);
QVERIFY(view.verticalHeader()->width() < textWidth);
model.setHeaderData(2, Qt::Vertical, text);
@@ -4364,7 +4378,8 @@ void tst_QTableView::taskQTBUG_7774_RtoLVisualRegionForSelection()
QItemSelection selection;
selection << range;
QRegion region = view.visualRegionForSelection(selection);
- QCOMPARE(region.rects().at(0), view.visualRect(range.topLeft()) | view.visualRect(range.bottomRight()));
+ QVERIFY(!region.isEmpty());
+ QCOMPARE(region.begin()[0], view.visualRect(range.topLeft()) | view.visualRect(range.bottomRight()));
}
void tst_QTableView::taskQTBUG_8777_scrollToSpans()
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index b2e1a2d9b5..5293ba487a 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -165,6 +165,7 @@ private slots:
void statusTip_data();
void statusTip();
+ void fetchMoreOnScroll();
// task-specific tests:
void task174627_moveLeftToRoot();
@@ -311,6 +312,12 @@ public:
return QVariant();
}
+ void simulateMoveRows()
+ {
+ beginMoveRows(QModelIndex(), 0, 0, QModelIndex(), 2);
+ endMoveRows();
+ }
+
void removeLastRow()
{
beginRemoveRows(QModelIndex(), rows - 1, rows - 1);
@@ -1326,6 +1333,17 @@ void tst_QTreeView::columnHidden()
for (int c = 0; c < model.columnCount(); ++c)
QCOMPARE(view.isColumnHidden(c), true);
view.update();
+
+ // QTBUG 54610
+ // QAbstractItemViewPrivate::_q_layoutChanged() is called on
+ // rows/columnMoved and because this function is virtual,
+ // QHeaderViewPrivate::_q_layoutChanged() was called and unhided
+ // all sections because QHeaderViewPrivate::_q_layoutAboutToBeChanged()
+ // could not fill persistentHiddenSections (and is not needed)
+ view.hideColumn(model.cols - 1);
+ QCOMPARE(view.isColumnHidden(model.cols - 1), true);
+ model.simulateMoveRows();
+ QCOMPARE(view.isColumnHidden(model.cols - 1), true);
}
void tst_QTreeView::rowHidden()
@@ -2607,7 +2625,7 @@ class TestTreeViewStyle : public QProxyStyle
{
public:
TestTreeViewStyle() : indentation(20) {}
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const override
{
if (metric == QStyle::PM_TreeViewIndentation)
return indentation;
@@ -4565,6 +4583,49 @@ void tst_QTreeView::statusTip()
QTRY_COMPARE(mw.statusBar()->currentMessage(), QLatin1String("Header 0 -- Status"));
}
+class FetchMoreModel : public QStandardItemModel
+{
+public:
+ FetchMoreModel() : QStandardItemModel(), canFetchReady(false)
+ {
+ for (int i = 0; i < 20; ++i) {
+ QStandardItem *item = new QStandardItem("Row");
+ item->appendRow(new QStandardItem("Child"));
+ appendRow(item);
+ }
+ }
+ bool canFetchMore(const QModelIndex &parent) const override
+ {
+ if (!canFetchReady || !parent.isValid())
+ return false;
+ if (!parent.parent().isValid())
+ return rowCount(parent) < 20;
+ return false;
+ }
+ void fetchMore(const QModelIndex &parent) override
+ {
+ QStandardItem *item = itemFromIndex(parent);
+ for (int i = 0; i < 19; ++i)
+ item->appendRow(new QStandardItem(QString("New Child %1").arg(i)));
+ }
+ bool canFetchReady;
+};
+
+void tst_QTreeView::fetchMoreOnScroll()
+{
+ QTreeView tw;
+ FetchMoreModel im;
+ tw.setModel(&im);
+ tw.show();
+ tw.expandAll();
+ QVERIFY(QTest::qWaitForWindowActive(&tw));
+ // Now we can allow the fetch to happen
+ im.canFetchReady = true;
+ tw.verticalScrollBar()->setValue(tw.verticalScrollBar()->maximum());
+ // The item should have now fetched the other children, thus bringing the count to 20
+ QCOMPARE(im.item(19)->rowCount(), 20);
+}
+
static void fillModeltaskQTBUG_8376(QAbstractItemModel &model)
{
model.insertRow(0);
diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
index fa7f9596da..d0e6407283 100644
--- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
+++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
@@ -159,6 +159,7 @@ private slots:
void taskQTBUG_34717_collapseAtBottom();
void task20345_sortChildren();
void getMimeDataWithInvalidItem();
+ void testVisualItemRect();
public slots:
void itemSelectionChanged();
@@ -332,10 +333,19 @@ void tst_QTreeWidget::addTopLevelItem()
for (int i = 0; i < 10; ++i)
tops << new TreeItem();
int count = tree.topLevelItemCount();
- tree.insertTopLevelItems(100000, tops);
- // ### fixme
+ tree.insertTopLevelItems(count, tops);
QCOMPARE(tree.topLevelItemCount(), count + 10);
}
+
+ // invalid insert
+ {
+ tops.clear();
+ for (int i = 0; i < 10; ++i)
+ tops << new TreeItem();
+ int count = tree.topLevelItemCount();
+ tree.insertTopLevelItems(100000, tops); // should be a no-op
+ QCOMPARE(tree.topLevelItemCount(), count);
+ }
}
void tst_QTreeWidget::currentItem_data()
@@ -3269,7 +3279,7 @@ void tst_QTreeWidget::task239150_editorWidth()
QVERIFY(tree.itemWidget(&item, 0) == 0);
tree.editItem(&item);
QVERIFY(tree.itemWidget(&item, 0));
- QVERIFY(tree.itemWidget(&item, 0)->width() >= minWidth + tree.fontMetrics().width(item.text(0)));
+ QVERIFY(tree.itemWidget(&item, 0)->width() >= minWidth + tree.fontMetrics().horizontalAdvance(item.text(0)));
}
}
@@ -3449,9 +3459,38 @@ void tst_QTreeWidget::getMimeDataWithInvalidItem()
{
CustomTreeWidget w;
QTest::ignoreMessage(QtWarningMsg, "QTreeWidget::mimeData: Null-item passed");
- QMimeData *md = w.mimeData(QList<QTreeWidgetItem*>() << Q_NULLPTR);
+ QMimeData *md = w.mimeData(QList<QTreeWidgetItem*>() << nullptr);
QVERIFY(!md);
}
+// visualItemRect returned a wrong rect when the columns were moved
+// (-> logical index != visual index). see QTBUG-28733
+void tst_QTreeWidget::testVisualItemRect()
+{
+ QTreeWidget tw;
+ tw.setColumnCount(2);
+ QTreeWidgetItem *item = new QTreeWidgetItem(&tw);
+ item->setText(0, "text 0");
+ item->setText(1, "text 1");
+
+ static const int sectionSize = 30;
+ tw.header()->setStretchLastSection(false);
+ tw.header()->setMinimumSectionSize(sectionSize);
+ tw.header()->resizeSection(0, sectionSize);
+ tw.header()->resizeSection(1, sectionSize);
+ tw.setRootIsDecorated(false);
+ tw.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tw));
+
+ QRect r = tw.visualItemRect(item);
+ QCOMPARE(r.width(), sectionSize * 2); // 2 columns
+ tw.header()->moveSection(1, 0);
+ r = tw.visualItemRect(item);
+ QCOMPARE(r.width(), sectionSize * 2); // 2 columns
+ tw.hideColumn(0);
+ r = tw.visualItemRect(item);
+ QCOMPARE(r.width(), sectionSize);
+}
+
QTEST_MAIN(tst_QTreeWidget)
#include "tst_qtreewidget.moc"
diff --git a/tests/auto/widgets/kernel/qaction/BLACKLIST b/tests/auto/widgets/kernel/qaction/BLACKLIST
deleted file mode 100644
index 1ad524fdbf..0000000000
--- a/tests/auto/widgets/kernel/qaction/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[setStandardKeys]
-linux
diff --git a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
index ac0174d19a..ddf9ccb416 100644
--- a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
+++ b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
@@ -240,7 +240,7 @@ void tst_QAction::setStandardKeys()
expected << ctrlC << ctrlInsert;
break;
default: // X11
- expected << ctrlC << QKeySequence(QStringLiteral("F16")) << ctrlInsert;
+ expected << ctrlC << ctrlInsert << QKeySequence(QStringLiteral("F16"));
break;
}
@@ -354,7 +354,7 @@ void tst_QAction::enabledVisibleInteraction()
void tst_QAction::task200823_tooltip()
{
- const QScopedPointer<QAction> action(new QAction("foo", Q_NULLPTR));
+ const QScopedPointer<QAction> action(new QAction("foo", nullptr));
QString shortcut("ctrl+o");
action->setShortcut(shortcut);
@@ -368,7 +368,7 @@ void tst_QAction::task200823_tooltip()
void tst_QAction::task229128TriggeredSignalWithoutActiongroup()
{
// test without a group
- const QScopedPointer<QAction> actionWithoutGroup(new QAction("Test", Q_NULLPTR));
+ const QScopedPointer<QAction> actionWithoutGroup(new QAction("Test", nullptr));
QSignalSpy spyWithoutGroup(actionWithoutGroup.data(), SIGNAL(triggered(bool)));
QCOMPARE(spyWithoutGroup.count(), 0);
actionWithoutGroup->trigger();
diff --git a/tests/auto/widgets/kernel/qactiongroup/BLACKLIST b/tests/auto/widgets/kernel/qactiongroup/BLACKLIST
deleted file mode 100644
index fdc424b6ac..0000000000
--- a/tests/auto/widgets/kernel/qactiongroup/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[QTBUG_14292_filesystem]
-linux
diff --git a/tests/auto/widgets/kernel/qapplication/BLACKLIST b/tests/auto/widgets/kernel/qapplication/BLACKLIST
deleted file mode 100644
index f4a9cb6166..0000000000
--- a/tests/auto/widgets/kernel/qapplication/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[quitOnLastWindowClosed]
-osx-10.10
diff --git a/tests/auto/widgets/kernel/qapplication/test/BLACKLIST b/tests/auto/widgets/kernel/qapplication/test/BLACKLIST
deleted file mode 100644
index f4a9cb6166..0000000000
--- a/tests/auto/widgets/kernel/qapplication/test/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[quitOnLastWindowClosed]
-osx-10.10
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 6ff38abdb8..c70ac0309f 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -2214,7 +2214,7 @@ void tst_QApplication::staticFunctions()
QApplication::activeModalWidget();
QApplication::focusWidget();
QApplication::activeWindow();
- QApplication::setActiveWindow(Q_NULLPTR);
+ QApplication::setActiveWindow(nullptr);
QApplication::widgetAt(QPoint(0, 0));
QApplication::topLevelAt(QPoint(0, 0));
QApplication::setGlobalStrut(QSize(0, 0));
diff --git a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
index 7262817d23..2f1a305710 100644
--- a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
+++ b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
@@ -293,7 +293,7 @@ void tst_QBoxLayout::taskQTBUG_40609_addingWidgetToItsOwnLayout(){
layout.setObjectName("ef9e2b42298e0e6420105bb");
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add a null widget to QVBoxLayout/ef9e2b42298e0e6420105bb");
- layout.addWidget(Q_NULLPTR);
+ layout.addWidget(nullptr);
QCOMPARE(layout.count(), 0);
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add parent widget QWidget/347b469225a24a0ef05150a to its child layout QVBoxLayout/ef9e2b42298e0e6420105bb");
@@ -309,7 +309,7 @@ void tst_QBoxLayout::taskQTBUG_40609_addingLayoutToItself(){
layout.setObjectName("cc751dd0f50f62b05a62da");
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add a null layout to QVBoxLayout/cc751dd0f50f62b05a62da");
- layout.addLayout(Q_NULLPTR);
+ layout.addLayout(nullptr);
QCOMPARE(layout.count(), 0);
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add layout QVBoxLayout/cc751dd0f50f62b05a62da to itself");
diff --git a/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp b/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp
index c3ebb838bb..bcf48c21df 100644
--- a/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp
+++ b/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp
@@ -84,7 +84,7 @@ public:
{ return m_receivedGestures.value(gestureType); }
protected:
- bool event(QEvent * event) Q_DECL_OVERRIDE;
+ bool event(QEvent * event) override;
private:
typedef QHash<Qt::GestureType, bool> GestureTypeHash;
diff --git a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
index 37e2bdb069..40a2319910 100644
--- a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
+++ b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
@@ -336,7 +336,7 @@ void tst_QGridLayout::setMinAndMaxSize()
layout.removeItem(spacer);
delete spacer;
- spacer = Q_NULLPTR;
+ spacer = nullptr;
rightChild.hide();
QApplication::sendPostedEvents(0, 0);
@@ -1624,7 +1624,7 @@ void tst_QGridLayout::taskQTBUG_40609_addingWidgetToItsOwnLayout(){
layout.setObjectName("d631e91a35f2b66a6dff35");
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add a null widget to QGridLayout/d631e91a35f2b66a6dff35");
- layout.addWidget(Q_NULLPTR, 0, 0);
+ layout.addWidget(nullptr, 0, 0);
QCOMPARE(layout.count(), 0);
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add parent widget QWidget/9bb37ca762aeb7269b8 to its child layout QGridLayout/d631e91a35f2b66a6dff35");
@@ -1639,7 +1639,7 @@ void tst_QGridLayout::taskQTBUG_40609_addingLayoutToItself(){
layout.setObjectName("5d79e1b0aed83f100e3c2");
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add a null layout to QGridLayout/5d79e1b0aed83f100e3c2");
- layout.addLayout(Q_NULLPTR, 0, 0);
+ layout.addLayout(nullptr, 0, 0);
QCOMPARE(layout.count(), 0);
QTest::ignoreMessage(QtWarningMsg, "QLayout: Cannot add layout QGridLayout/5d79e1b0aed83f100e3c2 to itself");
diff --git a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp
index 9d0c939d84..ff35b0cdb1 100644
--- a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp
+++ b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp
@@ -1105,7 +1105,7 @@ public:
int overrideCount;
- bool event(QEvent *e) Q_DECL_OVERRIDE
+ bool event(QEvent *e) override
{
if (e->type() == QEvent::ShortcutOverride)
overrideCount++;
diff --git a/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp b/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp
index d50f46cc16..eb3264be53 100644
--- a/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp
+++ b/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp
@@ -60,7 +60,7 @@ private:
struct PrettyPrint {
const char *m_s;
template <typename T>
- explicit PrettyPrint(const T &t) : m_s(Q_NULLPTR)
+ explicit PrettyPrint(const T &t) : m_s(nullptr)
{
using QT_PREPEND_NAMESPACE(QTest)::toString;
m_s = toString(t);
diff --git a/tests/auto/widgets/kernel/qtooltip/BLACKLIST b/tests/auto/widgets/kernel/qtooltip/BLACKLIST
deleted file mode 100644
index f8d062cc46..0000000000
--- a/tests/auto/widgets/kernel/qtooltip/BLACKLIST
+++ /dev/null
@@ -1,4 +0,0 @@
-[whatsThis]
-ubuntu-14.04
-[task183679]
-opensuse-13.1
diff --git a/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp b/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
index c163117ef3..86736bb082 100644
--- a/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
+++ b/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
@@ -129,7 +129,7 @@ static QWidget *findWhatsThat()
if (widget->inherits("QWhatsThat"))
return widget;
}
- return Q_NULLPTR;
+ return nullptr;
}
void tst_QToolTip::whatsThis()
@@ -137,7 +137,7 @@ void tst_QToolTip::whatsThis()
qApp->setStyleSheet( "QWidget { font-size: 72px; }" );
QWhatsThis::showText(QPoint(0, 0), "This is text");
- QWidget *whatsthis = Q_NULLPTR;
+ QWidget *whatsthis = nullptr;
QTRY_VERIFY( (whatsthis = findWhatsThat()) );
QVERIFY(whatsthis->isVisible());
const int whatsThisHeight = whatsthis->height();
diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST
index 4cef2d57a4..2ca30f98c3 100644
--- a/tests/auto/widgets/kernel/qwidget/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST
@@ -1,30 +1,18 @@
# OSX QTBUG-25300 QTBUG-45502
[normalGeometry]
-ubuntu-14.04
ubuntu-16.04
[saveRestoreGeometry]
-ubuntu-14.04
ubuntu-16.04
b2qt
[restoreVersion1Geometry]
xcb
osx
[updateWhileMinimized]
-ubuntu-14.04
ubuntu-16.04
-rhel-7.1
-rhel-7.2
-rhel-7.3
rhel-7.4
osx
[focusProxyAndInputMethods]
linux
-[touchEventSynthesizedMouseEvent]
-ubuntu-14.04
-[grabMouse]
-ubuntu-14.04
-[largerThanScreen_QTBUG30142]
-ubuntu-14.04
[showMaximized]
osx
[setGeometry]
@@ -48,7 +36,6 @@ osx
[render_systemClip]
osx
[showMinimizedKeepsFocus]
-osx-10.10
osx-10.11 ci
osx-10.12 ci
[moveWindowInShowEvent:1]
@@ -61,10 +48,7 @@ osx
osx
[maskedUpdate]
osx
-opensuse-42.1
opensuse-42.3
-[hideWhenFocusWidgetIsChild]
-osx-10.10
[hideOpaqueChildWhileHidden]
osx
[resizeStaticContentsChildWidget_QTBUG35282]
@@ -76,7 +60,7 @@ osx
[setToolTip]
osx
[moveInResizeEvent]
-ubuntu-14.04
+ubuntu-16.04
[moveChild:right]
osx
[activateWindow]
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index cf2794903e..5a9c5dd175 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -3706,7 +3706,7 @@ public:
gotPaintEvent = true;
// qDebug() << "paint" << e->region();
// Look for a full update, set partial to false if found.
- foreach(QRect r, e->region().rects()) {
+ for (QRect r : e->region()) {
partial = (r != rect());
if (partial == false)
break;
@@ -5145,13 +5145,12 @@ static QPixmap grabWindow(QWindow *window, int x, int y, int width, int height)
bool verifyColor(QWidget &child, const QRegion &region, const QColor &color, unsigned int callerLine)
{
- const QRegion r = QRegion(region);
QWindow *window = child.window()->windowHandle();
Q_ASSERT(window);
const QPoint offset = child.mapTo(child.window(), QPoint(0,0));
bool grabBackingStore = false;
- for (int i = 0; i < r.rects().size(); ++i) {
- QRect rect = r.rects().at(i).translated(offset);
+ for (QRect r : region) {
+ QRect rect = r.translated(offset);
for (int t = 0; t < 6; t++) {
const QPixmap pixmap = grabBackingStore
? child.grab(rect)
@@ -5176,7 +5175,7 @@ bool verifyColor(QWidget &child, const QRegion &region, const QColor &color, uns
} else {
if (t == 4) {
grabBackingStore = true;
- rect = r.rects().at(i);
+ rect = r;
} else {
QTest::qWait(200);
}
@@ -6065,7 +6064,7 @@ public:
startTimer(1000);
}
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE
+ void timerEvent(QTimerEvent *) override
{
switch (state++) {
case 0:
@@ -6088,7 +6087,7 @@ public:
return false;
}
- bool nativeEvent(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
+ bool nativeEvent(const QByteArray &eventType, void *message, long *) override
{
if (isMapNotify(eventType, message))
gotExpectedMapNotify = true;
@@ -6096,7 +6095,7 @@ public:
}
// QAbstractNativeEventFilter interface
- bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
+ bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override
{
if (isMapNotify(eventType, message))
gotExpectedGlobalEvent = true;
@@ -8222,7 +8221,7 @@ public:
QPainter p(this);
paintedRegion += event->region();
- foreach(QRect r, event->region().rects())
+ for (const QRect &r : event->region())
p.fillRect(r, Qt::red);
}
@@ -8733,7 +8732,7 @@ public:
QPainter p(this);
paintedRegion += event->region();
- foreach(QRect r, event->region().rects())
+ for (const QRect &r : event->region())
p.fillRect(r, Qt::red);
}
@@ -10521,7 +10520,7 @@ public slots:
QTimer::singleShot(100, this, SLOT(doMouseMoves()));
modal->exec();
delete modal;
- modal = Q_NULLPTR;
+ modal = nullptr;
}
void doMouseMoves()
@@ -10594,7 +10593,7 @@ class KeyboardWidget : public QWidget
{
public:
KeyboardWidget(QWidget* parent = 0) : QWidget(parent), m_eventCounter(0) {}
- virtual void mousePressEvent(QMouseEvent* ev) Q_DECL_OVERRIDE {
+ virtual void mousePressEvent(QMouseEvent* ev) override {
m_modifiers = ev->modifiers();
m_appModifiers = QApplication::keyboardModifiers();
++m_eventCounter;
diff --git a/tests/auto/widgets/kernel/qwidget_window/BLACKLIST b/tests/auto/widgets/kernel/qwidget_window/BLACKLIST
new file mode 100644
index 0000000000..d3bfaba433
--- /dev/null
+++ b/tests/auto/widgets/kernel/qwidget_window/BLACKLIST
@@ -0,0 +1,4 @@
+[tst_resize_count]
+# QTBUG-66345
+opensuse-42.3
+ubuntu-16.04
diff --git a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
index b76c4d35a8..9021be1515 100644
--- a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
@@ -214,12 +214,12 @@ class PaintTestWidget : public QWidget
public:
int paintEventCount;
- explicit PaintTestWidget(QWidget *parent = Q_NULLPTR)
+ explicit PaintTestWidget(QWidget *parent = nullptr)
: QWidget(parent)
, paintEventCount(0)
{}
- void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE
+ void paintEvent(QPaintEvent *event) override
{
++paintEventCount;
QWidget::paintEvent(event);
@@ -692,7 +692,7 @@ public:
int resizeCount;
protected:
- void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE
+ void resizeEvent(QResizeEvent *) override
{
resizeCount++;
}
@@ -759,7 +759,7 @@ public:
, moveCount(0)
{ }
- void moveEvent(QMoveEvent *) Q_DECL_OVERRIDE
+ void moveEvent(QMoveEvent *) override
{
moveCount++;
}
@@ -798,7 +798,7 @@ public:
}
protected:
- bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE
+ bool eventFilter(QObject *o, QEvent *e) override
{
if (e->type() == filterEventType())
++eventCount;
diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
index cd8ba95b06..e49fd701d6 100644
--- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
+++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
@@ -730,7 +730,7 @@ public:
, called(false)
{}
- void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE {
+ void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override {
called = true;
return QProxyStyle::drawPrimitive(pe, opt, p, w);
}
@@ -773,74 +773,74 @@ class TestStyleOptionInitProxy: public QProxyStyle
Q_OBJECT
public:
mutable bool invalidOptionsDetected;
- explicit TestStyleOptionInitProxy(QStyle *style = Q_NULLPTR)
+ explicit TestStyleOptionInitProxy(QStyle *style = nullptr)
: QProxyStyle(style),
invalidOptionsDetected(false)
{}
- void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE {
+ void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override {
checkStyleEnum<QStyle::PrimitiveElement>(pe, opt);
return QProxyStyle::drawPrimitive(pe, opt, p, w);
}
- void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE {
+ void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const override {
checkStyleEnum<QStyle::ControlElement>(element, opt);
return QProxyStyle::drawControl(element, opt, p, w);
}
- QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE {
+ QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const override {
checkStyleEnum<QStyle::SubElement>(subElement, option);
return QProxyStyle::subElementRect(subElement, option, widget);
}
- void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const Q_DECL_OVERRIDE {
+ void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const override {
checkStyleEnum<QStyle::ComplexControl>(cc, opt);
return QProxyStyle::drawComplexControl(cc, opt, p, widget);
}
- QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const Q_DECL_OVERRIDE {
+ QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const override {
checkStyleEnum<QStyle::ComplexControl>(cc, opt);
return QProxyStyle::subControlRect(cc, opt, sc, widget);
}
- int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE {
+ int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const override {
checkStyleEnum<QStyle::PixelMetric>(metric, option);
return QProxyStyle::pixelMetric(metric, option, widget);
}
- QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const Q_DECL_OVERRIDE {
+ QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const override {
checkStyleEnum<QStyle::ContentsType>(ct, opt);
return QProxyStyle::sizeFromContents(ct, opt, contentsSize, w);
}
- int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE {
+ int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const override {
checkStyleEnum<QStyle::StyleHint>(stylehint, opt);
return QProxyStyle::styleHint(stylehint, opt, widget, returnData);
}
- QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const Q_DECL_OVERRIDE {
+ QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const override {
checkStyleEnum<QStyle::StandardPixmap>(standardPixmap, opt);
return QProxyStyle::standardPixmap(standardPixmap, opt, widget);
}
- QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE {
+ QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const override {
checkStyleEnum<QStyle::StandardPixmap>(standardIcon, option);
return QProxyStyle::standardIcon(standardIcon, option, widget);
}
- QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const Q_DECL_OVERRIDE {
+ QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override {
checkStyle(QString::asprintf("QIcon::Mode(%i)", iconMode).toLatin1(), opt);
return QProxyStyle::generatedIconPixmap(iconMode, pixmap, opt);
}
- int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE {
+ int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const override {
checkStyle(QString::asprintf("QSizePolicy::ControlType(%i), QSizePolicy::ControlType(%i)", control1, control2).toLatin1(), option);
return QProxyStyle::layoutSpacing(control1, control2, orientation, option, widget);
}
private:
void checkStyle(const QByteArray &info, const QStyleOption *opt) const {
- if (opt && (opt->version == 0 || opt->styleObject == Q_NULLPTR) ) {
+ if (opt && (opt->version == 0 || opt->styleObject == nullptr) ) {
invalidOptionsDetected = true;
qWarning() << baseStyle()->metaObject()->className()
<< "Invalid QStyleOption found for"
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST b/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST
index 61966e684f..6b2e4f3fb2 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST
+++ b/tests/auto/widgets/styles/qstylesheetstyle/BLACKLIST
@@ -1,4 +1,2 @@
-[hoverColors]
-ubuntu-14.04
-opensuse-13.1
-opensuse-42.1
+[task232085_spinBoxLineEditBg]
+osx
diff --git a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
index 92bcd5c350..6fbb0fe5fa 100644
--- a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
+++ b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
@@ -610,7 +610,7 @@ void tst_QCompleter::directoryModel_data()
QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc";
#else
QTest::newRow("()") << "" << "" << "/" << "/";
-#if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX)
+#if !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX)
QTest::newRow("(/h)") << "/h" << "" << "home" << "/home";
#endif
QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc";
@@ -656,7 +656,7 @@ void tst_QCompleter::fileSystemModel_data()
QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc";
#else
QTest::newRow("()") << "" << "" << "/" << "/";
-#if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX)
+#if !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX)
QTest::newRow("(/h)") << "/h" << "" << "home" << "/home";
#endif
QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc";
diff --git a/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp b/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp
index 62c3469447..c1524d870d 100644
--- a/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp
+++ b/tests/auto/widgets/util/qundogroup/tst_qundogroup.cpp
@@ -30,24 +30,6 @@
#include <QUndoStack>
#include <QAction>
-// Temporarily disabling IRIX due to build issuues with GCC
-#if defined(__sgi) && defined(__GNUC__)
-
-class tst_QUndoGroup : public QObject
-{
- Q_OBJECT
-public:
- tst_QUndoGroup() {}
-
-private slots:
- void setActive() { QSKIP( "Not tested on irix-g++"); }
- void addRemoveStack() { QSKIP( "Not tested on irix-g++"); }
- void deleteStack() { QSKIP( "Not tested on irix-g++"); }
- void checkSignals() { QSKIP( "Not tested on irix-g++"); }
- void addStackAndDie() { QSKIP( "Not tested on irix-g++"); }
-};
-#else
-
/******************************************************************************
** Commands
*/
@@ -652,7 +634,6 @@ void tst_QUndoGroup::commandTextFormat()
qApp->removeTranslator(&translator);
#endif
}
-#endif // !(SGI && GCC)
QTEST_MAIN(tst_QUndoGroup)
diff --git a/tests/auto/widgets/widgets/qcombobox/BLACKLIST b/tests/auto/widgets/widgets/qcombobox/BLACKLIST
index c04351e5ca..2d6228075a 100644
--- a/tests/auto/widgets/widgets/qcombobox/BLACKLIST
+++ b/tests/auto/widgets/widgets/qcombobox/BLACKLIST
@@ -1,7 +1,3 @@
-QTBUG-45531
-[task260974_menuItemRectangleForComboBoxPopup]
-osx-10.10
-
[task_QTBUG_56693_itemFontFromModel]
# Counts draw calls, but we could have multiple expose events QTBUG-62080
osx
diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index b6007482ae..0c229c9194 100644
--- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -2052,13 +2052,13 @@ void tst_QComboBox::mouseWheel_data()
QTest::newRow("upper locked") << disabled << start << wheel << expected;
wheel = -1;
-#ifdef Q_OS_DARWIN
+ const bool allowsWheelScroll = QApplication::style()->styleHint(QStyle::SH_ComboBox_AllowWheelScrolling);
// on OS X & iOS mouse wheel shall have no effect on combo box
- expected = start;
-#else
- // on other OSes we should jump to next enabled item (no. 5)
- expected = 5;
-#endif
+ if (!allowsWheelScroll)
+ expected = start;
+ else // on other OSes we should jump to next enabled item (no. 5)
+ expected = 5;
+
QTest::newRow("jump over") << disabled << start << wheel << expected;
disabled.clear();
@@ -3273,7 +3273,7 @@ void tst_QComboBox::task_QTBUG_49831_scrollerNotActivated()
class QTBUG_56693_Model : public QStandardItemModel
{
public:
- QTBUG_56693_Model(QObject *parent = Q_NULLPTR)
+ QTBUG_56693_Model(QObject *parent = nullptr)
: QStandardItemModel(parent)
{ }
@@ -3301,7 +3301,7 @@ public:
}
- void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w = Q_NULLPTR) const override
+ void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w = nullptr) const override
{
if (element == CE_MenuItem)
if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast<const QStyleOptionMenuItem *>(opt))
diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
index a3571cd9c5..fa28ec2575 100644
--- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
+++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
@@ -336,7 +336,7 @@ void tst_QDateTimeEdit::constructor_qwidget()
QCOMPARE(dte.dateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0)));
QCOMPARE(dte.minimumDate(), QDate(1752, 9, 14));
QCOMPARE(dte.minimumTime(), QTime(0, 0, 0, 0));
- QCOMPARE(dte.maximumDate(), QDate(7999, 12, 31));
+ QCOMPARE(dte.maximumDate(), QDate(9999, 12, 31));
QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
}
@@ -352,12 +352,12 @@ void tst_QDateTimeEdit::constructor_qdatetime_data()
QTest::newRow("normal") << QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764))
<< QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764))
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
+ << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
QTest::newRow("invalid") << QDateTime(QDate(9999, 99, 99), QTime(13, 46, 32, 764))
<< QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
+ << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
}
void tst_QDateTimeEdit::constructor_qdatetime()
@@ -392,12 +392,12 @@ void tst_QDateTimeEdit::constructor_qdate_data()
QTest::newRow("normal") << QDate(2004, 6, 16)
<< QDateTime(QDate(2004, 6, 16), QTime(0, 0, 0, 0))
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
+ << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
QTest::newRow("invalid") << QDate(9999, 99, 99)
<< QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
<< QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(7999, 12, 31) << QTime(23, 59, 59, 999);
+ << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
}
void tst_QDateTimeEdit::constructor_qdate()
@@ -467,7 +467,7 @@ void tst_QDateTimeEdit::minimumDate_data()
QTest::newRow("normal-0") << QDate(2004, 5, 10) << QDate(2004, 5, 10);
QTest::newRow("normal-1") << QDate(2002, 3, 15) << QDate(2002, 3, 15);
- QTest::newRow("normal-2") << QDate(7999, 12, 31) << QDate(7999, 12, 31);
+ QTest::newRow("normal-2") << QDate(9999, 12, 31) << QDate(9999, 12, 31);
QTest::newRow("normal-3") << QDate(1753, 1, 1) << QDate(1753, 1, 1);
QTest::newRow("invalid-0") << QDate(0, 0, 0) << QDate(1752, 9, 14);
QTest::newRow("old") << QDate(1492, 8, 3) << QDate(1492, 8, 3);
@@ -528,7 +528,7 @@ void tst_QDateTimeEdit::maximumDateTime_data()
<< QDateTime(QDate(2007, 5, 10), QTime(22, 23, 23));
QTest::newRow("normal-4") << QDateTime(QDate(2008, 5, 10), QTime(2, 3, 1))
<< QDateTime(QDate(2008, 5, 10), QTime(2, 3, 1));
- QTest::newRow("invalid-0") << QDateTime() << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
+ QTest::newRow("invalid-0") << QDateTime() << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
}
void tst_QDateTimeEdit::maximumDateTime()
@@ -547,9 +547,9 @@ void tst_QDateTimeEdit::maximumDate_data()
QTest::newRow("normal-0") << QDate(2004, 05, 10) << QDate(2004, 5, 10);
QTest::newRow("normal-1") << QDate(2002, 03, 15) << QDate(2002, 3, 15);
- QTest::newRow("normal-2") << QDate(7999, 12, 31) << QDate(7999, 12, 31);
+ QTest::newRow("normal-2") << QDate(9999, 12, 31) << QDate(9999, 12, 31);
QTest::newRow("normal-3") << QDate(1753, 1, 1) << QDate(1753, 1, 1);
- QTest::newRow("invalid-0") << QDate(0, 0, 0) << QDate(7999, 12, 31);
+ QTest::newRow("invalid-0") << QDate(0, 0, 0) << QDate(9999, 12, 31);
}
void tst_QDateTimeEdit::maximumDate()
@@ -569,7 +569,7 @@ void tst_QDateTimeEdit::clearMinimumDate_data()
QTest::newRow("normal-0") << QDate(2004, 05, 10) << true << QDate(1752, 9, 14);
QTest::newRow("normal-1") << QDate(2002, 3, 15) << true << QDate(1752, 9, 14);
- QTest::newRow("normal-2") << QDate(7999, 12, 31) << true << QDate(1752, 9, 14);
+ QTest::newRow("normal-2") << QDate(9999, 12, 31) << true << QDate(1752, 9, 14);
QTest::newRow("normal-3") << QDate(1753, 1, 1) << true << QDate(1752, 9, 14);
QTest::newRow("invalid-0") << QDate(0, 0, 0) << false << QDate(1752, 9, 14);
}
@@ -597,7 +597,7 @@ void tst_QDateTimeEdit::clearMinimumDateTime_data()
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
QTest::newRow("normal-1") << QDateTime(QDate(2002, 3, 15), QTime(13, 13, 13))
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
- QTest::newRow("normal-2") << QDateTime(QDate(7999, 12, 31), QTime(14, 14, 14))
+ QTest::newRow("normal-2") << QDateTime(QDate(9999, 12, 31), QTime(14, 14, 14))
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
QTest::newRow("normal-3") << QDateTime(QDate(1753, 1, 1), QTime(15, 15, 15))
<< true << QDateTime(QDate(1752, 9, 14), QTime(0, 0));
@@ -626,15 +626,15 @@ void tst_QDateTimeEdit::clearMaximumDateTime_data()
QTest::addColumn<QDateTime>("expectedMinDateTimeAfterClear");
QTest::newRow("normal-0") << QDateTime(QDate(2004, 05, 10), QTime(12, 12, 12))
- << true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
+ << true << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
QTest::newRow("normal-1") << QDateTime(QDate(2002, 3, 15), QTime(13, 13, 13))
- << true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
- QTest::newRow("normal-2") << QDateTime(QDate(7999, 12, 31), QTime(14, 14, 14))
- << true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
+ << true << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
+ QTest::newRow("normal-2") << QDateTime(QDate(9999, 12, 31), QTime(14, 14, 14))
+ << true << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
QTest::newRow("normal-3") << QDateTime(QDate(1753, 1, 1), QTime(15, 15, 15))
- << true << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
+ << true << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
QTest::newRow("invalid-0") << QDateTime()
- << false << QDateTime(QDate(7999, 12, 31), QTime(23, 59, 59, 999));
+ << false << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
}
void tst_QDateTimeEdit::clearMaximumDateTime()
@@ -656,11 +656,11 @@ void tst_QDateTimeEdit::clearMaximumDate_data()
QTest::addColumn<bool>("valid");
QTest::addColumn<QDate>("expectedMaxDateAfterClear");
- QTest::newRow("normal-0") << QDate(2004, 05, 10) << true << QDate(7999, 12, 31);
- QTest::newRow("normal-1") << QDate(2002, 03, 15) << true << QDate(7999, 12, 31);
- QTest::newRow("normal-2") << QDate(7999, 12, 31) << true << QDate(7999, 12, 31);
- QTest::newRow("normal-3") << QDate(2000, 1, 1) << true << QDate(7999, 12, 31);
- QTest::newRow("invalid-0") << QDate(0, 0, 0) << false << QDate(7999, 12, 31);
+ QTest::newRow("normal-0") << QDate(2004, 05, 10) << true << QDate(9999, 12, 31);
+ QTest::newRow("normal-1") << QDate(2002, 03, 15) << true << QDate(9999, 12, 31);
+ QTest::newRow("normal-2") << QDate(9999, 12, 31) << true << QDate(9999, 12, 31);
+ QTest::newRow("normal-3") << QDate(2000, 1, 1) << true << QDate(9999, 12, 31);
+ QTest::newRow("invalid-0") << QDate(0, 0, 0) << false << QDate(9999, 12, 31);
}
void tst_QDateTimeEdit::clearMaximumDate()
diff --git a/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp b/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp
index 9e6b16d4ce..1813e5ad5f 100644
--- a/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp
+++ b/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp
@@ -204,7 +204,7 @@ void tst_QFontComboBox::sizeHint()
SubQFontComboBox box;
QSize sizeHint = box.QComboBox::sizeHint();
QFontMetrics fm(box.font());
- sizeHint.setWidth(qMax(sizeHint.width(), fm.width(QLatin1Char('m'))*14));
+ sizeHint.setWidth(qMax(sizeHint.width(), fm.horizontalAdvance(QLatin1Char('m'))*14));
QCOMPARE(box.sizeHint(), sizeHint);
}
diff --git a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
index 6363d0c673..500ec2e1fa 100644
--- a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
+++ b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
@@ -47,7 +47,7 @@ public:
QList<QEvent::Type> events;
protected:
- bool event(QEvent *ev) Q_DECL_OVERRIDE {
+ bool event(QEvent *ev) override {
events.append(ev->type());
return QWidget::event(ev);
}
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index 21669e42cd..1513025f16 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
@@ -67,6 +67,8 @@
#include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h>
+Q_LOGGING_CATEGORY(lcTests, "qt.widgets.tests")
+
QT_BEGIN_NAMESPACE
class QPainter;
QT_END_NAMESPACE
@@ -300,8 +302,8 @@ private slots:
void shortcutOverrideOnReadonlyLineEdit_data();
void shortcutOverrideOnReadonlyLineEdit();
void QTBUG59957_clearButtonLeftmostAction();
-
void QTBUG_60319_setInputMaskCheckImSurroundingText();
+ void testQuickSelectionWithMouse();
protected slots:
void editingFinished();
@@ -3046,7 +3048,7 @@ void tst_QLineEdit::cutWithoutSelection()
QClipboard *clipboard = QGuiApplication::clipboard();
if (!PlatformClipboard::isAvailable()
|| !QGuiApplication::platformName().compare("xcb", Qt::CaseInsensitive)) { // Avoid unstable X11 clipboard
- clipboard = Q_NULLPTR;
+ clipboard = nullptr;
}
if (clipboard)
@@ -3436,8 +3438,8 @@ void tst_QLineEdit::textMargin_data()
// Different styles generate different offsets, so
// calculate the width rather than hardcode it.
- const int pixelWidthOfM = metrics.width(s, 1);
- const int pixelWidthOfMMM_MM = metrics.width(s, 6);
+ const int pixelWidthOfM = metrics.horizontalAdvance(s, 1);
+ const int pixelWidthOfMMM_MM = metrics.horizontalAdvance(s, 6);
QTest::newRow("default-0") << 0 << 0 << 0 << 0 << QPoint(pixelWidthOfMMM_MM, 0) << 6;
QTest::newRow("default-1") << 0 << 0 << 0 << 0 << QPoint(1, 1) << 0;
@@ -4475,7 +4477,7 @@ template <class T> T *findAssociatedWidget(const QAction *a)
if (T *result = qobject_cast<T *>(w))
return result;
}
- return Q_NULLPTR;
+ return nullptr;
}
void tst_QLineEdit::sideWidgetsActionEvents()
@@ -4699,5 +4701,90 @@ void tst_QLineEdit::QTBUG_60319_setInputMaskCheckImSurroundingText()
QCOMPARE(surroundingText.length(), cursorPosition);
}
+void tst_QLineEdit::testQuickSelectionWithMouse()
+{
+ const auto text = QStringLiteral("This is quite a long line of text.");
+ const auto prefix = QStringLiteral("Th");
+ const auto suffix = QStringLiteral("t.");
+ QVERIFY(text.startsWith(prefix));
+ QVERIFY(text.endsWith(suffix));
+
+ QLineEdit lineEdit;
+ lineEdit.setText(text);
+ lineEdit.show();
+
+ const QPoint center = lineEdit.contentsRect().center();
+
+ // Normal mouse selection from left to right, y doesn't change.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(!lineEdit.selectedText().isEmpty());
+ QVERIFY(!lineEdit.selectedText().endsWith(suffix));
+
+ // Normal mouse selection from left to right, y change is below threshold.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 5));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(!lineEdit.selectedText().isEmpty());
+ QVERIFY(!lineEdit.selectedText().endsWith(suffix));
+
+ // Normal mouse selection from right to left, y doesn't change.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(-20, 0));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(!lineEdit.selectedText().isEmpty());
+ QVERIFY(!lineEdit.selectedText().startsWith(prefix));
+
+ // Normal mouse selection from right to left, y change is below threshold.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(-20, -5));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(!lineEdit.selectedText().isEmpty());
+ QVERIFY(!lineEdit.selectedText().startsWith(prefix));
+
+ const int offset = QGuiApplication::styleHints()->mouseQuickSelectionThreshold() + 1;
+
+ // Select the whole right half.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, offset));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(lineEdit.selectedText().endsWith(suffix));
+
+ // Select the whole left half.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, -offset));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(lineEdit.selectedText().startsWith(prefix));
+
+ // Normal selection -> quick selection -> back to normal selection.
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0));
+ const auto partialSelection = lineEdit.selectedText();
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(!partialSelection.endsWith(suffix));
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, offset));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+ QVERIFY(lineEdit.selectedText().endsWith(suffix));
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(20, 0));
+ qCDebug(lcTests) << "Selected text:" << lineEdit.selectedText();
+#ifdef Q_PROCESSOR_ARM
+ QEXPECT_FAIL("", "Currently fails on gcc-armv7, needs investigation.", Continue);
+#endif
+ QCOMPARE(lineEdit.selectedText(), partialSelection);
+
+ lineEdit.setLayoutDirection(Qt::RightToLeft);
+
+ // Select the whole left half (RTL layout).
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, offset));
+ QVERIFY(lineEdit.selectedText().startsWith(prefix));
+
+ // Select the whole right half (RTL layout).
+ QTest::mousePress(lineEdit.windowHandle(), Qt::LeftButton, Qt::NoModifier, center);
+ QTest::mouseMove(lineEdit.windowHandle(), center + QPoint(1, -offset));
+ QVERIFY(lineEdit.selectedText().endsWith(suffix));
+}
+
QTEST_MAIN(tst_QLineEdit)
#include "tst_qlineedit.moc"
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index 91c12e292d..28e8ba81d6 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -111,9 +111,8 @@ private slots:
void QTBUG7411_submenus_activate();
void QTBUG30595_rtl_submenu();
void QTBUG20403_nested_popup_on_shortcut_trigger();
-#ifndef QT_NO_CURSOR
void QTBUG47515_widgetActionEnterLeave();
-#endif
+
void QTBUG_10735_crashWithDialog();
#ifdef Q_OS_MAC
void QTBUG_37933_ampersands_data();
@@ -610,7 +609,7 @@ static QMenu *getTornOffMenu()
if (w->isVisible() && w->inherits("QTornOffMenu"))
return static_cast<QMenu *>(w);
}
- return Q_NULLPTR;
+ return nullptr;
}
void tst_QMenu::tearOff()
@@ -812,7 +811,7 @@ public:
}
protected:
- void showEvent(QShowEvent *e) Q_DECL_OVERRIDE
+ void showEvent(QShowEvent *e) override
{
QVERIFY(m_subMenu->isVisible());
QVERIFY2(m_subMenu->x() > x(),
@@ -821,7 +820,7 @@ protected:
QMenu::showEvent(e);
}
- void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE
+ void timerEvent(QTimerEvent *e) override
{
if (e->timerId() == m_timerId) {
switch (m_timerTick++) {
@@ -1176,25 +1175,27 @@ void tst_QMenu::click_while_dismissing_submenu()
menu.addMenu(&sub);
centerOnScreen(&menu, QSize(120, 100));
menu.show();
- QSignalSpy spy(action, SIGNAL(triggered()));
- QSignalSpy menuShownSpy(&sub, SIGNAL(aboutToShow()));
- QSignalSpy menuHiddenSpy(&sub, SIGNAL(aboutToHide()));
+ QSignalSpy spy(action, &QAction::triggered);
+ QSignalSpy menuShownSpy(&sub, &QMenu::aboutToShow);
+ QSignalSpy menuHiddenSpy(&sub, &QMenu::aboutToHide);
QVERIFY(QTest::qWaitForWindowExposed(&menu));
+ QWindow *menuWindow = menu.windowHandle();
+ QVERIFY(menuWindow);
//go over the submenu, press, move and release over the top level action
//this opens the submenu, move two times to emulate user interaction (d->motions > 0 in QMenu)
- QTest::mouseMove(&menu, menu.rect().center() + QPoint(0,2));
- QTest::mouseMove(&menu, menu.rect().center() + QPoint(1,3), 60);
+ QTest::mouseMove(menuWindow, menu.rect().center() + QPoint(0,2));
+ QTest::mouseMove(menuWindow, menu.rect().center() + QPoint(1,3), 60);
QVERIFY(menuShownSpy.wait());
QVERIFY(sub.isVisible());
QVERIFY(QTest::qWaitForWindowExposed(&sub));
//press over the submenu entry
- QTest::mousePress(&menu, Qt::LeftButton, 0, menu.rect().center() + QPoint(0,2), 300);
+ QTest::mousePress(menuWindow, Qt::LeftButton, 0, menu.rect().center() + QPoint(0,2), 300);
//move over the main action
- QTest::mouseMove(&menu, menu.rect().center() - QPoint(0,2));
+ QTest::mouseMove(menuWindow, menu.rect().center() - QPoint(0,2));
QVERIFY(menuHiddenSpy.wait());
//the submenu must have been hidden for the bug to be triggered
QVERIFY(!sub.isVisible());
- QTest::mouseRelease(&menu, Qt::LeftButton, 0, menu.rect().center() - QPoint(0,2), 300);
+ QTest::mouseRelease(menuWindow, Qt::LeftButton, 0, menu.rect().center() - QPoint(0,2), 300);
QCOMPARE(spy.count(), 1);
}
#endif
@@ -1210,7 +1211,7 @@ public:
setMouseTracking(true);
}
- bool event(QEvent *e) Q_DECL_OVERRIDE
+ bool event(QEvent *e) override
{
switch (e->type()) {
case QEvent::MouseMove:
@@ -1231,79 +1232,99 @@ public:
int move, enter, leave;
};
-#ifndef QT_NO_CURSOR
void tst_QMenu::QTBUG47515_widgetActionEnterLeave()
{
+#if !QT_CONFIG(cursor)
+ QSKIP("This test requires QCursor API");
+#else
if (QGuiApplication::platformName() == QLatin1String("cocoa"))
- QSKIP("This test fails on OS X on CI");
+ QSKIP("See QTBUG-63031");
- const QPoint center = QGuiApplication::primaryScreen()->availableGeometry().center();
- const QPoint cursorPos = center - QPoint(100, 100);
+ QPoint screenCenter = QGuiApplication::primaryScreen()->availableGeometry().center();
+ QPoint pointOutsideMenu = screenCenter - QPoint(100, 100);
- QScopedPointer<QMenu> menu1(new QMenu("Menu1"));
- QScopedPointer<QMenu> menu2(new QMenu("Menu2"));
+ QMenu menu("Menu1");
+ QMenu submenu("Menu2");
- QWidgetAction *wA1 = new QWidgetAction(menu1.data());
- MyWidget *w1 = new MyWidget(menu1.data());
- wA1->setDefaultWidget(w1);
+ QWidgetAction menuAction(&menu);
+ MyWidget w1(&menu);
+ menuAction.setDefaultWidget(&w1);
- QWidgetAction *wA2 = new QWidgetAction(menu2.data());
- MyWidget *w2 = new MyWidget(menu2.data());
- wA2->setDefaultWidget(w2);
+ QWidgetAction submenuAction(&submenu);
+ MyWidget w2(&submenu);
+ submenuAction.setDefaultWidget(&w2);
- QAction *nextMenuAct = menu1->addMenu(menu2.data());
+ QAction *nextMenuAct = menu.addMenu(&submenu);
- menu1->addAction(wA1);
- menu2->addAction(wA2);
+ menu.addAction(&menuAction);
+ submenu.addAction(&submenuAction);
// Root menu
{
- QCursor::setPos(cursorPos);
- QCoreApplication::processEvents();
-
- menu1->popup(center);
- QVERIFY(QTest::qWaitForWindowExposed(menu1.data()));
+ QCursor::setPos(pointOutsideMenu);
+ QTRY_COMPARE(QCursor::pos(), pointOutsideMenu);
+ menu.popup(screenCenter);
+ QVERIFY(QTest::qWaitForWindowExposed(&menu));
- QCursor::setPos(w1->mapToGlobal(w1->rect().center()));
- QVERIFY(w1->isVisible());
- QTRY_COMPARE(w1->leave, 0);
- QTRY_COMPARE(w1->enter, 1);
+ w1.enter = 0;
+ w1.leave = 0;
+ QPoint w1Center = w1.rect().center();
+ const QPoint w1CenterGlobal = w1.mapToGlobal(w1Center);
+ QCursor::setPos(w1CenterGlobal);
+ QTRY_COMPARE(QCursor::pos(), w1CenterGlobal);
+ QVERIFY(w1.isVisible());
+ QTRY_COMPARE(w1.leave, 0);
+ QTRY_COMPARE(w1.enter, 1);
// Check whether leave event is not delivered on mouse move
- w1->move = 0;
- QCursor::setPos(w1->mapToGlobal(w1->rect().center()) + QPoint(1, 1));
- QTRY_COMPARE(w1->move, 1);
- QTRY_COMPARE(w1->leave, 0);
- QTRY_COMPARE(w1->enter, 1);
-
- QCursor::setPos(cursorPos);
- QTRY_COMPARE(w1->leave, 1);
- QTRY_COMPARE(w1->enter, 1);
+ w1.move = 0;
+ QWidget *nativeParent = w1.nativeParentWidget();
+ QVERIFY(nativeParent);
+ QWindow *window = nativeParent->windowHandle();
+ QVERIFY(window);
+ QTest::mouseMove(window, w1.mapTo(nativeParent, w1Center + QPoint(1, 1)));
+ QTRY_COMPARE(w1.move, 1);
+ QTRY_COMPARE(w1.leave, 0);
+ QTRY_COMPARE(w1.enter, 1);
+
+ QCursor::setPos(pointOutsideMenu);
+ QTRY_COMPARE(QCursor::pos(), pointOutsideMenu);
+ QTRY_COMPARE(w1.leave, 1);
+ QTRY_COMPARE(w1.enter, 1);
}
// Submenu
{
- menu1->setActiveAction(nextMenuAct);
- QVERIFY(QTest::qWaitForWindowExposed(menu2.data()));
+ menu.setActiveAction(nextMenuAct);
+ QVERIFY(QTest::qWaitForWindowExposed(&submenu));
- QCursor::setPos(w2->mapToGlobal(w2->rect().center()));
- QVERIFY(w2->isVisible());
- QTRY_COMPARE(w2->leave, 0);
- QTRY_COMPARE(w2->enter, 1);
+ QPoint w2Center = w2.rect().center();
+ const QPoint w2CenterGlobal = w2.mapToGlobal(w2Center);
+ QCursor::setPos(w2CenterGlobal);
+ QTRY_COMPARE(QCursor::pos(), w2CenterGlobal);
+
+ QVERIFY(w2.isVisible());
+ QTRY_COMPARE(w2.leave, 0);
+ QTRY_COMPARE(w2.enter, 1);
// Check whether leave event is not delivered on mouse move
- w2->move = 0;
- QCursor::setPos(w2->mapToGlobal(w2->rect().center()) + QPoint(1, 1));
- QTRY_COMPARE(w2->move, 1);
- QTRY_COMPARE(w2->leave, 0);
- QTRY_COMPARE(w2->enter, 1);
-
- QCursor::setPos(cursorPos);
- QTRY_COMPARE(w2->leave, 1);
- QTRY_COMPARE(w2->enter, 1);
+ w2.move = 0;
+ QWidget *nativeParent = w2.nativeParentWidget();
+ QVERIFY(nativeParent);
+ QWindow *window = nativeParent->windowHandle();
+ QVERIFY(window);
+ QTest::mouseMove(window, w2.mapTo(nativeParent, w2Center + QPoint(1, 1)));
+ QTRY_COMPARE(w2.move, 1);
+ QTRY_COMPARE(w2.leave, 0);
+ QTRY_COMPARE(w2.enter, 1);
+
+ QCursor::setPos(pointOutsideMenu);
+ QTRY_COMPARE(QCursor::pos(), pointOutsideMenu);
+ QTRY_COMPARE(w2.leave, 1);
+ QTRY_COMPARE(w2.enter, 1);
}
+#endif // QT_NO_CURSOR
}
-#endif // !QT_NO_CURSOR
class MyMenu : public QMenu
{
@@ -1518,7 +1539,7 @@ void tst_QMenu::menuSize_Scrolling()
~TestMenu() {}
private:
- void showEvent(QShowEvent *e) Q_DECL_OVERRIDE
+ void showEvent(QShowEvent *e) override
{
QVERIFY(actions().length() == m_numItems);
diff --git a/tests/auto/widgets/widgets/qmenubar/BLACKLIST b/tests/auto/widgets/widgets/qmenubar/BLACKLIST
index e2194e69ca..9b8e07312d 100644
--- a/tests/auto/widgets/widgets/qmenubar/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenubar/BLACKLIST
@@ -1,3 +1,5 @@
[check_menuPosition]
-ubuntu-14.04
ubuntu-16.04
+#QTBUG-66255
+[activatedCount]
+*
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 417fa9befa..ab82268578 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -136,7 +136,7 @@ private slots:
void task223138_triggered();
void task256322_highlight();
void menubarSizeHint();
-#ifndef Q_OS_MAC
+#ifndef Q_OS_MACOS
void taskQTBUG4965_escapeEaten();
#endif
void taskQTBUG11823_crashwithInvisibleActions();
@@ -148,11 +148,12 @@ private slots:
void taskQTBUG56275_reinsertMenuInParentlessQMenuBar();
void QTBUG_57404_existingMenuItemException();
#endif
+ void QTBUG_25669_menubarActionDoubleTriggered();
void taskQTBUG55966_subMenuRemoved();
void QTBUG_58344_invalidIcon();
-
void platformMenu();
-
+ void addActionQt5connect();
+ void QTBUG_65488_hiddenActionTriggered();
protected slots:
void onSimpleActivated( QAction*);
void onComplexActionTriggered();
@@ -1376,7 +1377,7 @@ void tst_QMenuBar::menubarSizeHint()
}
// On Mac, do not test the menubar with escape key
-#ifndef Q_OS_MAC
+#ifndef Q_OS_MACOS
void tst_QMenuBar::taskQTBUG4965_escapeEaten()
{
QMenuBar menubar;
@@ -1549,7 +1550,7 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested()
//set the new parent, a window
QScopedPointer<QWidget> windowedParent;
- windowedParent.reset(new QWidget(Q_NULLPTR, Qt::WindowFlags()));
+ windowedParent.reset(new QWidget(nullptr, Qt::WindowFlags()));
windowedParent->setGeometry(400, 10, 300, 300);
windowedParent->show();
@@ -1566,7 +1567,7 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested()
//to windowedParent<-movingParent<-containerWidget<-containedWidget<-menuBar
movingParent.setParent(windowedParent.data(),0);
// this resets the parenting and the menu bar's window
- taskQTBUG53205MenuBar->setParent(Q_NULLPTR);
+ taskQTBUG53205MenuBar->setParent(nullptr);
taskQTBUG53205MenuBar->setParent(&containedWidget);
//from windowedParent<-movingParent<-containerWidget<-containedWidget<-menuBar
//to : QMainWindow<-hiddenParent<-movingParent<-containerWidget<-containedWidget<-menuBar
@@ -1576,6 +1577,25 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested()
testMenus.actions[0]->trigger();
}
+void tst_QMenuBar::QTBUG_65488_hiddenActionTriggered()
+{
+ QMainWindow win;
+ win.menuBar()->setNativeMenuBar(false);
+ QAction *act1 = win.menuBar()->addAction("A very long named action that make menuBar item wide enough");
+ QSignalSpy spy(win.menuBar(), &QMenuBar::triggered);
+
+ QRect actRect = win.menuBar()->actionGeometry(act1);
+ // resize to action's size to make Action1 hidden
+ win.resize(actRect.width() - 10, win.size().height());
+ win.show();
+ QApplication::setActiveWindow(&win);
+ QVERIFY(QTest::qWaitForWindowExposed(&win));
+ // click center of the blank area on the menubar where Action1 resided
+ QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, win.menuBar()->geometry().center());
+ QCoreApplication::sendPostedEvents(); // make sure all queued events also dispatched
+ QCOMPARE(spy.count(), 0);
+}
+
// QTBUG-56526
void tst_QMenuBar::platformMenu()
{
@@ -1595,10 +1615,71 @@ void tst_QMenuBar::platformMenu()
QVERIFY(menu->platformMenu());
}
+class TestObject : public QObject
+{
+ Q_OBJECT
+public:
+ bool flag = false;
+ void setFlag()
+ {
+ flag = true;
+ }
+};
+
+void tst_QMenuBar::addActionQt5connect()
+{
+ bool flag = false;
+ auto functor = [&flag](){ flag = true; };
+
+ TestObject obj;
+
+ QMenuBar menuBar;
+
+ auto action1 = menuBar.addAction(QStringLiteral("1"), &obj, &TestObject::setFlag);
+ auto action2 = menuBar.addAction(QStringLiteral("2"), functor);
+
+ action1->activate(QAction::Trigger);
+ action2->activate(QAction::Trigger);
+
+ QVERIFY(obj.flag);
+ QVERIFY(flag);
+
+ flag = false;
+
+ auto action3 = menuBar.addAction(QStringLiteral("3"), this, functor);
+ action3->activate(QAction::Trigger);
+ QVERIFY(flag);
+}
+
+void tst_QMenuBar::QTBUG_25669_menubarActionDoubleTriggered()
+{
+ QMainWindow win;
+ win.menuBar()->setNativeMenuBar(false);
+ QAction *act1 = win.menuBar()->addAction("Action1");
+ QAction *act2 = win.menuBar()->addAction("Action2");
+ QSignalSpy spy(win.menuBar(), &QMenuBar::triggered);
+
+ win.show();
+ QApplication::setActiveWindow(&win);
+ QVERIFY(QTest::qWaitForWindowExposed(&win));
+
+ QPoint posAct1 = menuBarActionWindowPos(win.menuBar(), act1);
+ QPoint posAct2 = menuBarActionWindowPos(win.menuBar(), act2);
+
+ QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, posAct1);
+ QTRY_COMPARE(spy.count(), 1);
+
+ QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, posAct2);
+ QTRY_COMPARE(spy.count(), 2);
+
+ QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, posAct2);
+ QTRY_COMPARE(spy.count(), 3);
+}
+
void tst_QMenuBar::slotForTaskQTBUG53205()
{
QWidget *parent = taskQTBUG53205MenuBar->parentWidget();
- taskQTBUG53205MenuBar->setParent(Q_NULLPTR);
+ taskQTBUG53205MenuBar->setParent(nullptr);
taskQTBUG53205MenuBar->setParent(parent);
}
diff --git a/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST b/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
index 7825c33a0a..b67c8354e8 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
+++ b/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
@@ -1,18 +1,5 @@
[clearAndGrab]
-opensuse-13.1
ubuntu
-#QTBUG-31611
-[painter]
-windows msvc-2010 32bit developer-build
-
-#QTBUG-31611
-[reparentToAlreadyCreated]
-windows msvc-2010 32bit developer-build
-
-#QTBUG-31611
-[reparentToNotYetCreated]
-windows msvc-2010 32bit developer-build
-
[stackWidgetOpaqueChildIsVisible]
windows
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index 49291cf5f9..db125f6644 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -100,16 +100,16 @@ public:
m_w(expectedWidth), m_h(expectedHeight),
r(1.0f), g(0.0f), b(0.0f) { }
- void initializeGL() Q_DECL_OVERRIDE {
+ void initializeGL() override {
m_initCalled = true;
initializeOpenGLFunctions();
}
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
m_paintCalled = true;
glClearColor(r, g, b, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
- void resizeGL(int w, int h) Q_DECL_OVERRIDE {
+ void resizeGL(int w, int h) override {
m_resizeCalled = true;
m_resizeOk = w == m_w && h == m_h;
}
@@ -203,10 +203,10 @@ public:
PainterWidget(QWidget *parent)
: QOpenGLWidget(parent), m_clear(false) { }
- void initializeGL() Q_DECL_OVERRIDE {
+ void initializeGL() override {
initializeOpenGLFunctions();
}
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
QPainter p(this);
QCOMPARE(p.device()->width(), width());
QCOMPARE(p.device()->height(), height());
@@ -322,7 +322,7 @@ public:
void resetPaintCount() { m_count = 0; }
protected:
- void drawForeground(QPainter *, const QRectF &) Q_DECL_OVERRIDE;
+ void drawForeground(QPainter *, const QRectF &) override;
int m_count;
};
@@ -372,7 +372,7 @@ class PaintCountWidget : public QOpenGLWidget
public:
PaintCountWidget() : m_count(0) { }
void reset() { m_count = 0; }
- void paintGL() Q_DECL_OVERRIDE { ++m_count; }
+ void paintGL() override { ++m_count; }
int m_count;
};
@@ -393,7 +393,7 @@ void tst_QOpenGLWidget::requestUpdate()
class FboCheckWidget : public QOpenGLWidget
{
public:
- void paintGL() Q_DECL_OVERRIDE {
+ void paintGL() override {
GLuint reportedDefaultFbo = QOpenGLContext::currentContext()->defaultFramebufferObject();
GLuint expectedDefaultFbo = defaultFramebufferObject();
QCOMPARE(reportedDefaultFbo, expectedDefaultFbo);
diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
index af0ad1a601..a08a8862b8 100644
--- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
+++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
@@ -870,7 +870,7 @@ void tst_QPlainTextEdit::lineWrapModes()
// QPlainTextEdit does lazy line layout on resize, only for the visible blocks.
// We thus need to make it wide enough to show something visible.
int minimumWidth = 2 * ed->document()->documentMargin();
- minimumWidth += ed->fontMetrics().width(QLatin1Char('a'));
+ minimumWidth += ed->fontMetrics().horizontalAdvance(QLatin1Char('a'));
minimumWidth += ed->frameWidth();
ed->resize(minimumWidth, 1000);
QCOMPARE(lineCount(), 26);
diff --git a/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp b/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
index 9f64335930..35209c2501 100644
--- a/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
+++ b/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
@@ -293,7 +293,7 @@ void tst_QProgressBar::sizeHint()
QFontMetrics fm = bar.fontMetrics();
QStyleOptionProgressBar opt;
bar.initStyleOption(&opt);
- QSize size = QSize(9 * 7 + fm.width(QLatin1Char('0')) * 4, fm.height() + 8);
+ QSize size = QSize(9 * 7 + fm.horizontalAdvance(QLatin1Char('0')) * 4, fm.height() + 8);
size= bar.style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, size, &bar);
QSize barSize = bar.sizeHint();
QVERIFY(barSize.width() >= size.width());
diff --git a/tests/auto/widgets/widgets/qscrollbar/BLACKLIST b/tests/auto/widgets/widgets/qscrollbar/BLACKLIST
new file mode 100644
index 0000000000..277ae4d260
--- /dev/null
+++ b/tests/auto/widgets/widgets/qscrollbar/BLACKLIST
@@ -0,0 +1,3 @@
+#QTBUG-66321
+[QTBUG_42871]
+macos
diff --git a/tests/auto/widgets/widgets/qspinbox/BLACKLIST b/tests/auto/widgets/widgets/qspinbox/BLACKLIST
deleted file mode 100644
index 5bf6c3beed..0000000000
--- a/tests/auto/widgets/widgets/qspinbox/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-[editingFinished]
-osx-10.8
-osx-10.9
diff --git a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
index aef4046afe..cad7bd69d7 100644
--- a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
+++ b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
@@ -299,7 +299,7 @@ class TestSplitterStyle : public QProxyStyle
{
public:
TestSplitterStyle() : handleWidth(5) {}
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const override
{
if (metric == QStyle::PM_SplitterWidth)
return handleWidth;
@@ -658,13 +658,34 @@ public:
class EventCounterSpy : public QObject
{
public:
- EventCounterSpy(QWidget *parentWidget) : QObject(parentWidget)
+ EventCounterSpy(QWidget *obj) : objectToWatch(obj)
{ }
+ ~EventCounterSpy()
+ {
+ removeEventFilter();
+ }
+
+ void installEventFilter()
+ {
+ if (needRemoveEventFilter)
+ return;
+ needRemoveEventFilter = true;
+ qApp->installEventFilter(this);
+ }
+
+ void removeEventFilter()
+ {
+ if (!needRemoveEventFilter)
+ return;
+ needRemoveEventFilter = false;
+ qApp->removeEventFilter(this);
+ }
+
bool eventFilter(QObject *watched, QEvent *event) override
{
// Watch for events in the parent widget and all its children
- if (watched == parent() || watched->parent() == parent()) {
+ if (watched == objectToWatch || watched->parent() == objectToWatch) {
if (event->type() == QEvent::Resize)
resizeCount++;
else if (event->type() == QEvent::Paint)
@@ -676,6 +697,8 @@ public:
int resizeCount = 0;
int paintCount = 0;
+ bool needRemoveEventFilter = false;
+ QObject *objectToWatch;
};
void tst_QSplitter::replaceWidget_data()
@@ -733,31 +756,30 @@ void tst_QSplitter::replaceWidget()
// to set a shorter label.
QLabel *newWidget = new QLabel(QLatin1String("<b>NEW</b>"));
- EventCounterSpy *ef = new EventCounterSpy(&sp);
- qApp->installEventFilter(ef);
+ EventCounterSpy ef(&sp);
+ ef.installEventFilter();
const QWidget *res = sp.replaceWidget(index, newWidget);
QTest::qWait(100); // Give visibility and resizing some time
- qApp->removeEventFilter(ef);
// Check
if (index < 0 || index >= count) {
QVERIFY(!res);
QVERIFY(!newWidget->parentWidget());
- QCOMPARE(ef->resizeCount, 0);
- QCOMPARE(ef->paintCount, 0);
+ QCOMPARE(ef.resizeCount, 0);
+ QCOMPARE(ef.paintCount, 0);
} else {
QCOMPARE(res, oldWidget);
QVERIFY(!res->parentWidget());
QVERIFY(!res->isVisible());
+ const int expectedResizeCount = visible ? 1 : 0; // new widget only
+ const int expectedPaintCount = visible && !collapsed ? 2 : 0; // splitter and new widget
+ QTRY_COMPARE(ef.resizeCount, expectedResizeCount);
+ QTRY_COMPARE(ef.paintCount, expectedPaintCount);
QCOMPARE(newWidget->parentWidget(), &sp);
QCOMPARE(newWidget->isVisible(), visible);
if (visible && !collapsed)
QCOMPARE(newWidget->geometry(), oldGeom);
QCOMPARE(newWidget->size().isEmpty(), !visible || collapsed);
- const int expectedResizeCount = visible ? 1 : 0; // new widget only
- const int expectedPaintCount = visible && !collapsed ? 2 : 0; // splitter and new widget
- QCOMPARE(ef->resizeCount, expectedResizeCount);
- QCOMPARE(ef->paintCount, expectedPaintCount);
delete res;
}
QCOMPARE(sp.count(), count);
@@ -797,25 +819,24 @@ void tst_QSplitter::replaceWidgetWithSplitterChild()
const QList<int> sizes = sp.sizes();
QWidget *sibling = srcIndex == -1 ? (new QLabel("<b>NEW</b>", &sp)) : sp.widget(srcIndex);
- EventCounterSpy *ef = new EventCounterSpy(&sp);
- qApp->installEventFilter(ef);
+ EventCounterSpy ef(&sp);
+ ef.installEventFilter();
const QWidget *res = sp.replaceWidget(dstIndex, sibling);
QTest::qWait(100); // Give visibility and resizing some time
- qApp->removeEventFilter(ef);
QVERIFY(!res);
if (srcIndex == -1) {
// Create and replace before recalc. The sibling is scheduled to be
// added after replaceWidget(), when QSplitter receives a child event.
- QVERIFY(ef->resizeCount > 0);
- QVERIFY(ef->paintCount > 0);
+ QTRY_VERIFY(ef.resizeCount > 0);
+ QTRY_VERIFY(ef.paintCount > 0);
QCOMPARE(sp.count(), count + 1);
QCOMPARE(sp.sizes().mid(0, count), sizes);
QCOMPARE(sp.sizes().last(), sibling->width());
} else {
// No-op for the rest
- QCOMPARE(ef->resizeCount, 0);
- QCOMPARE(ef->paintCount, 0);
+ QCOMPARE(ef.resizeCount, 0);
+ QCOMPARE(ef.paintCount, 0);
QCOMPARE(sp.count(), count);
QCOMPARE(sp.sizes(), sizes);
}
diff --git a/tests/auto/widgets/widgets/qtabbar/BLACKLIST b/tests/auto/widgets/widgets/qtabbar/BLACKLIST
index 5a3f33e3e4..735b044d8b 100644
--- a/tests/auto/widgets/widgets/qtabbar/BLACKLIST
+++ b/tests/auto/widgets/widgets/qtabbar/BLACKLIST
@@ -1,3 +1,2 @@
[sizeHints]
-ubuntu-14.04
redhatenterpriselinuxworkstation-6.6
diff --git a/tests/benchmarks/corelib/io/qprocess/qprocess.pro b/tests/benchmarks/corelib/io/qprocess/qprocess.pro
index c49542f616..839b4f7ecd 100644
--- a/tests/benchmarks/corelib/io/qprocess/qprocess.pro
+++ b/tests/benchmarks/corelib/io/qprocess/qprocess.pro
@@ -1,3 +1,3 @@
TEMPLATE = subdirs
-CONFIG += ordered
+test.depends = testProcessLoopback
SUBDIRS = testProcessLoopback test
diff --git a/tests/benchmarks/corelib/thread/qthreadpool/tst_qthreadpool.cpp b/tests/benchmarks/corelib/thread/qthreadpool/tst_qthreadpool.cpp
index 30a7b82278..10928e3afc 100644
--- a/tests/benchmarks/corelib/thread/qthreadpool/tst_qthreadpool.cpp
+++ b/tests/benchmarks/corelib/thread/qthreadpool/tst_qthreadpool.cpp
@@ -53,7 +53,7 @@ tst_QThreadPool::~tst_QThreadPool()
class NoOpRunnable : public QRunnable
{
public:
- void run() Q_DECL_OVERRIDE {
+ void run() override {
}
};
diff --git a/tests/benchmarks/dbus/qdbusperformance/qdbusperformance.pro b/tests/benchmarks/dbus/qdbusperformance/qdbusperformance.pro
index e90d38a55c..94cb8e41c7 100644
--- a/tests/benchmarks/dbus/qdbusperformance/qdbusperformance.pro
+++ b/tests/benchmarks/dbus/qdbusperformance/qdbusperformance.pro
@@ -1,3 +1,3 @@
TEMPLATE = subdirs
-CONFIG += ordered
+test.depends = server
SUBDIRS = server test
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
index f7701d9f7f..b8bd55789d 100644
--- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
@@ -123,7 +123,7 @@ QSizeF Button::sizeHint(Qt::SizeHint which,
case Qt::PreferredSize:
{
QFontMetricsF fm(d->textItem->font());
- return QSizeF(fm.width(d->textItem->text()), fm.height());
+ return QSizeF(fm.horizontalAdvance(d->textItem->text()), fm.height());
}
default:
return QGraphicsWidget::sizeHint(which, constraint);
diff --git a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
index 7b0dcd5afa..5fb2ee1a51 100644
--- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
@@ -73,7 +73,7 @@ QSizeF Label::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
// fall thru
case Qt::PreferredSize: {
QFontMetricsF fm(m_textItem->font());
- return QSizeF(fm.width(m_textItem->text()), fm.height());
+ return QSizeF(fm.horizontalAdvance(m_textItem->text()), fm.height());
}
default:
return GvbWidget::sizeHint(which, constraint);
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/benchmarks/gui/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
index 622df2fb3b..6145fabbf8 100644
--- a/tests/benchmarks/gui/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/benchmarks/gui/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -216,7 +216,7 @@ void tst_QGraphicsScene::itemAt()
QGraphicsItem *item = 0;
QBENCHMARK {
- item = scene.items(QPointF(0, 0)).value(0, Q_NULLPTR);
+ item = scene.items(QPointF(0, 0)).value(0, nullptr);
}
//let QGraphicsScene::_q_polishItems be called so ~QGraphicsItem doesn't spend all his time cleaning the unpolished list
diff --git a/tests/benchmarks/gui/painting/drawtexture/drawtexture.pro b/tests/benchmarks/gui/painting/drawtexture/drawtexture.pro
new file mode 100644
index 0000000000..aa4aee5bba
--- /dev/null
+++ b/tests/benchmarks/gui/painting/drawtexture/drawtexture.pro
@@ -0,0 +1,7 @@
+QT += testlib
+QT += gui-private
+
+TEMPLATE = app
+TARGET = tst_bench_drawtexture
+
+SOURCES += tst_drawtexture.cpp
diff --git a/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp b/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp
new file mode 100644
index 0000000000..c16e68a0b1
--- /dev/null
+++ b/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp
@@ -0,0 +1,546 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <qtest.h>
+#include <QPainter>
+#include <QImage>
+
+Q_DECLARE_METATYPE(QImage::Format)
+
+#define SIZE 400
+
+class tst_DrawTexture : public QObject
+{
+ Q_OBJECT
+
+ void paint(bool smooth);
+
+private slots:
+ void simpleUpscale_data();
+ void simpleUpscale();
+ void simpleUpscaleSmooth_data();
+ void simpleUpscaleSmooth();
+
+ void downscale_data();
+ void downscale();
+ void downscaleSmooth_data();
+ void downscaleSmooth();
+
+ void upscale_data();
+ void upscale();
+ void upscaleSmooth_data();
+ void upscaleSmooth();
+
+ void rotate_data();
+ void rotate();
+ void rotateSmooth_data();
+ void rotateSmooth();
+
+ void perspective_data();
+ void perspective();
+ void perspectiveSmooth_data();
+ void perspectiveSmooth();
+};
+
+void tst_DrawTexture::simpleUpscale_data()
+{
+ QTest::addColumn<QImage::Format>("sourceFormat");
+ QTest::addColumn<QImage::Format>("targetFormat");
+ QTest::addColumn<QTransform>("transform");
+
+
+ QTransform matrix;
+ matrix.scale(1.5, 1.5);
+ QTest::newRow("rgb32 1.5x,1.5x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm 1.5x,1.5x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 1.5x,1.5x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm 1.5x,1.5x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 1.5x,1.5x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("rgb16 1.5x,1.5x on argb32pm") << QImage::Format_RGB16
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32pm 1.5x,1.5x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+ matrix.reset();
+ matrix.scale(5, 5);
+ QTest::newRow("rgb32 5x,5x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm 5x,5x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 5x,5x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm 5x,5x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 5x,5x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("rgb16 5x,5x on rgb32") << QImage::Format_RGB16
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm 5x,5x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+ matrix.reset();
+ matrix.translate(0, SIZE);
+ matrix.scale(16, -1);
+ QTest::newRow("rgb32 16x,-1x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm 16x,-1x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 16x,-1x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm 16x,-1x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 16x,-1x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm 16x,-1x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+}
+
+void tst_DrawTexture::downscale_data()
+{
+ QTest::addColumn<QImage::Format>("sourceFormat");
+ QTest::addColumn<QImage::Format>("targetFormat");
+ QTest::addColumn<QTransform>("transform");
+
+
+ QTransform matrix;
+ matrix.translate(SIZE, 0);
+ matrix.scale(-1.5, 1.5);
+ QTest::newRow("rgb32 -1.5x,1.5x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm -1.5x,1.5x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 -1.5x,1.5x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm -1.5x,1.5x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 -1.5x,1.5x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm -1.5x,1.5x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+ matrix.reset();
+ matrix.scale(.5, .5);
+ QTest::newRow("rgb32 .5x,.5x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm .5x,.5x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 .5x,.5x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm .5x,.5x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 .5x,.5x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm .5x,.5x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+ matrix.reset();
+ matrix.scale(.2, 2);
+ QTest::newRow("rgb32 .2x,2x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm .2x,2x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 .2x,2x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm .2x,2x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 .2x,2x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm .2x,2x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+}
+
+void tst_DrawTexture::upscale_data()
+{
+ QTest::addColumn<QImage::Format>("sourceFormat");
+ QTest::addColumn<QImage::Format>("targetFormat");
+ QTest::addColumn<QTransform>("transform");
+
+
+ QTransform matrix;
+ matrix.translate(SIZE, 0);
+ matrix.scale(-8, 8);
+ QTest::newRow("rgb32 -8x,8x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm -8x,8x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 -8x,8x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm -8x,8x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 -8x,8x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm -8x,8x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+ matrix.reset();
+ matrix.translate(SIZE, SIZE);
+ matrix.scale(-10, -10);
+ QTest::newRow("rgb32 -10x,-10x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm -10x,-10x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 -10x,-10x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm -10x,-10x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 -10x,-10x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm -10x,-10x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+
+ matrix.reset();
+ matrix.translate(SIZE, 0);
+ matrix.scale(-1, 16);
+ QTest::newRow("rgb32 -1x,16x on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm -1x,16x on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 -1x,16x on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm -1x,16x on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 -1x,16x on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm -1x,16x on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+}
+
+void tst_DrawTexture::rotate_data()
+{
+ QTest::addColumn<QImage::Format>("sourceFormat");
+ QTest::addColumn<QImage::Format>("targetFormat");
+ QTest::addColumn<QTransform>("transform");
+
+ QTransform matrix;
+ matrix.translate(SIZE/2, SIZE/2);
+ matrix.rotate(-90);
+ matrix.translate(-SIZE/2, -SIZE/2);
+ QTest::newRow("rgb32 -90deg on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm -90deg on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 -90deg on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm -90deg on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 -90deg rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm -90deg on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+ matrix.reset();
+ matrix.translate(SIZE/2, SIZE/2);
+ matrix.rotate(45);
+ matrix.translate(-SIZE/2, -SIZE/2);
+ QTest::newRow("rgb32 45deg on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm 45deg on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 45deg on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm 45deg on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 45deg on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm 45deg on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+
+ matrix.reset();
+ matrix.translate(SIZE/2, SIZE/2);
+ matrix.rotate(135);
+ matrix.scale(2, 2);
+ matrix.translate(-SIZE/4, -SIZE/4);
+ QTest::newRow("rgb32 rotate+scale on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm rotate+scale on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 rotate+scale on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm rotate+scale on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 rotate+scale on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm rotate+scale on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+}
+
+void tst_DrawTexture::perspective_data()
+{
+ QTest::addColumn<QImage::Format>("sourceFormat");
+ QTest::addColumn<QImage::Format>("targetFormat");
+ QTest::addColumn<QTransform>("transform");
+
+ QTransform matrix;
+ QPolygonF quad1, quad2;
+ quad1 << QPointF(0.0, 0.0) << QPointF(SIZE,0.0) << QPointF(SIZE,SIZE) << QPointF(0.0,SIZE);
+ quad2 << QPointF(SIZE/6, SIZE/6) << QPointF(SIZE*4/5,SIZE/5) << QPointF(SIZE*4/5,SIZE*5/6) << QPointF(SIZE/5,SIZE*3/5);
+ QTransform::quadToQuad(quad1, quad2, matrix);
+
+ QTest::newRow("rgb32 perspective1 on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm perspective1 on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 perspective1 on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm perspective1 on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 perspective1 on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm perspective1 on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+
+ matrix.reset();
+ quad1.clear(); quad2.clear();
+ quad1 << QPointF(0.0, 0.0) << QPointF(SIZE,0.0) << QPointF(SIZE,SIZE) << QPointF(0.0,SIZE);
+ quad2 << QPointF(0.0, 0.0) << QPointF(SIZE*4/5,SIZE/4) << QPointF(SIZE*4/5,SIZE*3/4) << QPointF(0.0,SIZE);
+ QTransform::quadToQuad(quad1, quad2, matrix);
+
+ QTest::newRow("rgb32 perspective2 on rgb32") << QImage::Format_RGB32
+ << QImage::Format_RGB32
+ << matrix;
+ QTest::newRow("argb32pm perspective2 on argb32pm") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("argb32 perspective2 on argb32pm") << QImage::Format_ARGB32
+ << QImage::Format_ARGB32_Premultiplied
+ << matrix;
+ QTest::newRow("rgba8888pm perspective2 on rgba8888pm") << QImage::Format_RGBA8888_Premultiplied
+ << QImage::Format_RGBA8888_Premultiplied
+ << matrix;
+ QTest::newRow("rgb16 perspective2 on rgb16") << QImage::Format_RGB16
+ << QImage::Format_RGB16
+ << matrix;
+ QTest::newRow("argb32pm perspective2 on rgb30") << QImage::Format_ARGB32_Premultiplied
+ << QImage::Format_RGB30
+ << matrix;
+}
+
+void tst_DrawTexture::simpleUpscaleSmooth_data()
+{
+ simpleUpscale_data();
+}
+
+void tst_DrawTexture::downscaleSmooth_data()
+{
+ downscale_data();
+}
+
+void tst_DrawTexture::upscaleSmooth_data()
+{
+ upscale_data();
+}
+
+void tst_DrawTexture::rotateSmooth_data()
+{
+ rotate_data();
+}
+
+void tst_DrawTexture::perspectiveSmooth_data()
+{
+ perspective_data();
+}
+
+static QImage createImage(const QSize &size, QImage::Format format, bool smooth)
+{
+ QImage base(size, format);
+ base.fill(Qt::transparent);
+ QLinearGradient grad(0.0, 0.0, 1.0, 0.0);
+ grad.setCoordinateMode(QGradient::ObjectBoundingMode);
+ grad.setColorAt(0.0, Qt::red);
+ grad.setColorAt(0.4, Qt::white);
+ grad.setColorAt(0.6, Qt::white);
+ grad.setColorAt(1.0, Qt::blue);
+ QBrush brush(grad);
+ QPainter p(&base);
+ p.setRenderHint(QPainter::Antialiasing, smooth);
+ p.setBrush(brush);
+ p.setPen(Qt::NoPen);
+ p.drawEllipse(0, 0, size.width(), size.height());
+ p.end();
+ return base;
+}
+
+
+void tst_DrawTexture::paint(bool smooth)
+{
+ QFETCH(QImage::Format, sourceFormat);
+ QFETCH(QImage::Format, targetFormat);
+ QFETCH(QTransform, transform);
+
+ QSize size(SIZE, SIZE);
+ QRect rect(QPoint(0,0), size);
+ if (transform.isAffine())
+ rect = transform.inverted().mapRect(rect);
+
+ QImage sourceImage = createImage(rect.size(), sourceFormat, smooth);
+ QImage targetImage(size, targetFormat);
+ targetImage.fill(Qt::gray);
+
+ QPainter p(&targetImage);
+ p.setRenderHints(QPainter::SmoothPixmapTransform, smooth);
+ p.setRenderHints(QPainter::Antialiasing, smooth);
+ p.setWorldTransform(transform, false);
+
+ QBENCHMARK {
+ p.drawImage(0, 0, sourceImage);
+ }
+// targetImage.save(QString::fromLatin1(QTest::currentTestFunction()) + QChar('_') + QString::fromLatin1(QTest::currentDataTag()) + QStringLiteral(".png"));
+}
+
+void tst_DrawTexture::simpleUpscale()
+{
+ paint(false);
+}
+
+void tst_DrawTexture::upscale()
+{
+ paint(false);
+}
+
+void tst_DrawTexture::downscale()
+{
+ paint(false);
+}
+
+void tst_DrawTexture::rotate()
+{
+ paint(false);
+}
+
+void tst_DrawTexture::perspective()
+{
+ paint(false);
+}
+
+void tst_DrawTexture::simpleUpscaleSmooth()
+{
+ paint(true);
+}
+
+void tst_DrawTexture::upscaleSmooth()
+{
+ paint(true);
+}
+
+void tst_DrawTexture::downscaleSmooth()
+{
+ paint(true);
+}
+
+void tst_DrawTexture::rotateSmooth()
+{
+ paint(true);
+}
+
+void tst_DrawTexture::perspectiveSmooth()
+{
+ paint(true);
+}
+
+QTEST_MAIN(tst_DrawTexture)
+
+#include "tst_drawtexture.moc"
diff --git a/tests/benchmarks/gui/painting/painting.pro b/tests/benchmarks/gui/painting/painting.pro
index cdcfc9b318..bbca36259e 100644
--- a/tests/benchmarks/gui/painting/painting.pro
+++ b/tests/benchmarks/gui/painting/painting.pro
@@ -1,5 +1,6 @@
TEMPLATE = subdirs
SUBDIRS = \
+ drawtexture \
qcolor \
qpainter \
qregion \
diff --git a/tests/benchmarks/gui/painting/qtbench/benchmarktests.h b/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
index 42b06778f9..b31b6823aa 100644
--- a/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
+++ b/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
@@ -544,13 +544,13 @@ public:
m_staticTexts.append(staticText);
QFontMetrics fm(p->font());
- m_size = QSize(fm.width(m_text, m_text.length()), fm.height());
+ m_size = QSize(fm.horizontalAdvance(m_text, m_text.length()), fm.height());
break;
}
case PainterQPointMode: {
QFontMetrics fm(p->font());
- m_size = QSize(fm.width(m_text, m_text.length()), fm.height());
+ m_size = QSize(fm.horizontalAdvance(m_text, m_text.length()), fm.height());
break;
}
diff --git a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
index 3e731bec96..109126790b 100644
--- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -32,7 +32,6 @@
#include <qtcpsocket.h>
#include <qtcpserver.h>
#include <qhostaddress.h>
-#include <qprocess.h>
#include <qstringlist.h>
#include <qplatformdefs.h>
#include <qhostinfo.h>
diff --git a/tests/manual/cocoa/menurama/mainwindow.h b/tests/manual/cocoa/menurama/mainwindow.h
index a7afa770be..3ca90dad8f 100644
--- a/tests/manual/cocoa/menurama/mainwindow.h
+++ b/tests/manual/cocoa/menurama/mainwindow.h
@@ -44,7 +44,7 @@ public:
~MainWindow();
protected:
- void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) override;
public slots:
void enableStuffMenu(bool enable);
diff --git a/tests/manual/cocoa/menurama/menuramaapplication.cpp b/tests/manual/cocoa/menurama/menuramaapplication.cpp
index 4cd741000e..1506fe7d19 100644
--- a/tests/manual/cocoa/menurama/menuramaapplication.cpp
+++ b/tests/manual/cocoa/menurama/menuramaapplication.cpp
@@ -71,5 +71,5 @@ QAction *MenuramaApplication::findAction(QLatin1String title, QMenu *parentMenu)
if (a->text() == title)
return a;
- return Q_NULLPTR;
+ return nullptr;
}
diff --git a/tests/manual/diaglib/eventfilter.cpp b/tests/manual/diaglib/eventfilter.cpp
index 3874adbdeb..0646964b4a 100644
--- a/tests/manual/diaglib/eventfilter.cpp
+++ b/tests/manual/diaglib/eventfilter.cpp
@@ -195,6 +195,19 @@ static void formatApplicationState(QDebug debug)
#endif // HAVE_GUI_APPLICATION
}
+#ifdef HAVE_APPLICATION
+static void formatMouseState(QObject *o, QDebug debug)
+{
+ if (o->isWidgetType()) {
+ const QWidget *w = static_cast<const QWidget *>(o);
+ if (QWidget::mouseGrabber() == w)
+ debug << " [grabbed]";
+ if (w->hasMouseTracking())
+ debug << " [tracking]";
+ }
+}
+#endif // HAVE_APPLICATION
+
bool EventFilter::eventFilter(QObject *o, QEvent *e)
{
static int n = 0;
@@ -210,6 +223,22 @@ bool EventFilter::eventFilter(QObject *o, QEvent *e)
case QEvent::FocusIn:
formatApplicationState(debug);
break;
+#ifdef HAVE_APPLICATION
+ case QEvent::MouseButtonDblClick:
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseMove:
+ case QEvent::NonClientAreaMouseButtonDblClick:
+ case QEvent::NonClientAreaMouseButtonPress:
+ case QEvent::NonClientAreaMouseButtonRelease:
+ case QEvent::NonClientAreaMouseMove:
+# if QT_VERSION >= 0x050000
+ case QEvent::Enter:
+# endif
+ case QEvent::Leave:
+ formatMouseState(o, debug);
+ break;
+#endif // HAVE_APPLICATION
default:
break;
}
diff --git a/tests/manual/diaglib/logwidget.cpp b/tests/manual/diaglib/logwidget.cpp
index 8e4844fab2..35fabd6e2e 100644
--- a/tests/manual/diaglib/logwidget.cpp
+++ b/tests/manual/diaglib/logwidget.cpp
@@ -133,7 +133,7 @@ void LogWidget::install()
qInfo("%s", qPrintable(LogWidget::startupMessage()));
}
-void LogWidget::uninstall() { qInstallMessageHandler(Q_NULLPTR); }
+void LogWidget::uninstall() { qInstallMessageHandler(nullptr); }
#else // Qt 5
diff --git a/tests/manual/diaglib/nativewindowdump.cpp b/tests/manual/diaglib/nativewindowdump.cpp
index 83edf878b3..a854e8a790 100644
--- a/tests/manual/diaglib/nativewindowdump.cpp
+++ b/tests/manual/diaglib/nativewindowdump.cpp
@@ -28,10 +28,25 @@
#include "nativewindowdump.h"
+#if QT_VERSION >= 0x050000
+# include <QtGui/QGuiApplication>
+# include <qpa/qplatformnativeinterface.h>
+#endif
+
+#include <QtCore/QDebug>
+
namespace QtDiag {
-void dumpNativeWindows(WId)
+void dumpNativeWindows(WId wid)
{
+#if QT_VERSION >= 0x050000
+ QPlatformNativeInterface *ni = QGuiApplication::platformNativeInterface();
+ QString result;
+ QMetaObject::invokeMethod(ni, "dumpNativeWindows", Qt::DirectConnection,
+ Q_RETURN_ARG(QString, result),
+ Q_ARG(WId, wid));
+ qDebug().noquote() << result;
+#endif // Qt 5
}
void dumpNativeQtTopLevels()
diff --git a/tests/manual/foreignwindows/main.cpp b/tests/manual/foreignwindows/main.cpp
index cda7e7207e..74c6d8c376 100644
--- a/tests/manual/foreignwindows/main.cpp
+++ b/tests/manual/foreignwindows/main.cpp
@@ -110,7 +110,7 @@ EmbeddingWindow::EmbeddingWindow(QWindow *window) : m_window(window)
+ QLatin1String(" 0x") + QString::number(window->winId(), 16);
setWindowTitle(title);
setObjectName("MainWindow");
- QWidget *container = QWidget::createWindowContainer(window, Q_NULLPTR, Qt::Widget);
+ QWidget *container = QWidget::createWindowContainer(window, nullptr, Qt::Widget);
container->setObjectName("Container");
setCentralWidget(container);
@@ -149,8 +149,8 @@ EmbeddingWindow::EmbeddingWindow(QWindow *window) : m_window(window)
void EmbeddingWindow::releaseForeignWindow()
{
if (m_window) {
- m_window->setParent(Q_NULLPTR);
- m_window = Q_NULLPTR;
+ m_window->setParent(nullptr);
+ m_window = nullptr;
m_releaseAction->setEnabled(false);
}
}
diff --git a/tests/manual/highdpi/dragwidget.h b/tests/manual/highdpi/dragwidget.h
index 2cb821d509..8b67b20410 100644
--- a/tests/manual/highdpi/dragwidget.h
+++ b/tests/manual/highdpi/dragwidget.h
@@ -43,15 +43,15 @@ public:
DragWidget(QString text = QString(), QWidget *parent = 0);
protected:
- void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
- void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE;
- void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void dragMoveEvent(QDragMoveEvent * event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
- void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragLeaveEvent(QDragLeaveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent * event) override;
+ void paintEvent(QPaintEvent *) override;
+ void timerEvent(QTimerEvent *event) override;
+ void showEvent(QShowEvent *event) override;
+ void hideEvent(QHideEvent *event) override;
private:
QPoint dragPos;
QPoint dropPos;
diff --git a/tests/manual/qlayout/gridwidget.cpp b/tests/manual/qlayout/gridwidget.cpp
index ede13a22c3..f19b3eac6f 100644
--- a/tests/manual/qlayout/gridwidget.cpp
+++ b/tests/manual/qlayout/gridwidget.cpp
@@ -62,8 +62,8 @@ GridWidget::GridWidget(QWidget *parent) :
qDebug("There should be four warnings, but no crash or freeze:");
hb->addWidget(this, 6, 6); ///< This command should print a warning, but should not add "this"
- hb->addWidget(Q_NULLPTR, 6, 7); ///< This command should print a warning, but should not add "NULL"
+ hb->addWidget(nullptr, 6, 7); ///< This command should print a warning, but should not add "NULL"
hb->addLayout(hb, 7, 6); ///< This command should print a warning, but should not add "hb"
- hb->addLayout(Q_NULLPTR, 7, 7); ///< This command should print a warning, but should not add "NULL"
+ hb->addLayout(nullptr, 7, 7); ///< This command should print a warning, but should not add "NULL"
qDebug("Neither crashed nor frozen");
}
diff --git a/tests/manual/qlayout/hbwidget.cpp b/tests/manual/qlayout/hbwidget.cpp
index d1f6c94d5b..80219d01fd 100644
--- a/tests/manual/qlayout/hbwidget.cpp
+++ b/tests/manual/qlayout/hbwidget.cpp
@@ -58,8 +58,8 @@ HbWidget::HbWidget(QWidget *parent) :
qDebug("There should be four warnings, but no crash or freeze:");
hb->addWidget(this); ///< This command should print a warning, but should not add "this"
- hb->addWidget(Q_NULLPTR); ///< This command should print a warning, but should not add "NULL"
+ hb->addWidget(nullptr); ///< This command should print a warning, but should not add "NULL"
hb->addLayout(hb); ///< This command should print a warning, but should not add "hb"
- hb->addLayout(Q_NULLPTR); ///< This command should print a warning, but should not add "NULL"
+ hb->addLayout(nullptr); ///< This command should print a warning, but should not add "NULL"
qDebug("Neither crashed nor frozen");
}
diff --git a/tests/manual/qlayout/vbwidget.cpp b/tests/manual/qlayout/vbwidget.cpp
index d3898422fb..97f240f9a0 100644
--- a/tests/manual/qlayout/vbwidget.cpp
+++ b/tests/manual/qlayout/vbwidget.cpp
@@ -58,8 +58,8 @@ VbWidget::VbWidget(QWidget *parent) :
qDebug("There should be four warnings, but no crash or freeze:");
hb->addWidget(this); ///< This command should print a warning, but should not add "this"
- hb->addWidget(Q_NULLPTR); ///< This command should print a warning, but should not add "NULL"
+ hb->addWidget(nullptr); ///< This command should print a warning, but should not add "NULL"
hb->addLayout(hb); ///< This command should print a warning, but should not add "hb"
- hb->addLayout(Q_NULLPTR); ///< This command should print a warning, but should not add "NULL"
+ hb->addLayout(nullptr); ///< This command should print a warning, but should not add "NULL"
qDebug("Neither crashed nor frozen");
}
diff --git a/tests/manual/qscreen/main.cpp b/tests/manual/qscreen/main.cpp
index 445af82e09..6fba872b12 100644
--- a/tests/manual/qscreen/main.cpp
+++ b/tests/manual/qscreen/main.cpp
@@ -73,12 +73,12 @@ public:
}
protected:
- void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE {
+ void mouseMoveEvent(QMouseEvent *ev) override {
m_cursorPos = ev->screenPos().toPoint();
updateText();
}
- void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE {
+ void mousePressEvent(QMouseEvent *ev) override {
m_cursorPos = ev->screenPos().toPoint();
qDebug() << "top level @" << m_cursorPos << ":" << QGuiApplication::topLevelAt(m_cursorPos);
updateText();
@@ -100,7 +100,7 @@ class ScreenPropertyWatcher : public PropertyWatcher
{
Q_OBJECT
public:
- ScreenPropertyWatcher(QWidget *wp = Q_NULLPTR) : PropertyWatcher(Q_NULLPTR, QString(), wp)
+ ScreenPropertyWatcher(QWidget *wp = nullptr) : PropertyWatcher(nullptr, QString(), wp)
{
// workaround for the fact that virtualSiblings is not a property,
// thus there is no change notification:
@@ -150,7 +150,7 @@ public:
QScreen *screenSubject() const { return m_watcher->screenSubject(); }
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
void startMouseMonitor();
private:
diff --git a/tests/manual/qscreen/propertywatcher.cpp b/tests/manual/qscreen/propertywatcher.cpp
index 0fb322a480..d2a552f108 100644
--- a/tests/manual/qscreen/propertywatcher.cpp
+++ b/tests/manual/qscreen/propertywatcher.cpp
@@ -34,7 +34,7 @@
#include "propertyfield.h"
PropertyWatcher::PropertyWatcher(QObject *subject, QString annotation, QWidget *parent)
- : QWidget(parent), m_subject(Q_NULLPTR), m_formLayout(new QFormLayout(this))
+ : QWidget(parent), m_subject(nullptr), m_formLayout(new QFormLayout(this))
{
setMinimumSize(450, 300);
m_formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
diff --git a/tests/manual/qscreen/propertywatcher.h b/tests/manual/qscreen/propertywatcher.h
index f371a3b9b6..d988d96c91 100644
--- a/tests/manual/qscreen/propertywatcher.h
+++ b/tests/manual/qscreen/propertywatcher.h
@@ -39,7 +39,7 @@ class PropertyWatcher : public QWidget
Q_OBJECT
public:
- explicit PropertyWatcher(QObject* subject = Q_NULLPTR, QString annotation = QString(), QWidget *parent = Q_NULLPTR);
+ explicit PropertyWatcher(QObject* subject = nullptr, QString annotation = QString(), QWidget *parent = nullptr);
QFormLayout *formLayout() { return m_formLayout; }
diff --git a/tests/manual/qsysinfo/main.cpp b/tests/manual/qsysinfo/main.cpp
index 5b391e5dfd..62d0c51416 100644
--- a/tests/manual/qsysinfo/main.cpp
+++ b/tests/manual/qsysinfo/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 Intel Corporation.
+** Copyright (C) 2017 Intel Corporation.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -133,6 +133,8 @@ int main(int argc, char *argv[])
printf("QSysInfo::productVersion() = %s\n", qPrintable(QSysInfo::productVersion()));
printf("QSysInfo::prettyProductName() = %s\n", qPrintable(QSysInfo::prettyProductName()));
printf("QSysInfo::machineHostName() = %s\n", qPrintable(QSysInfo::machineHostName()));
+ printf("QSysInfo::machineUniqueId() = %s\n", QSysInfo::machineUniqueId().constData());
+ printf("QSysInfo::bootUniqueId() = %s\n", qPrintable(QSysInfo::bootUniqueId()));
const auto osv = QOperatingSystemVersion::current();
printf("QOperatingSystemVersion::current() = %s %d.%d.%d\n",
diff --git a/tests/manual/qtabletevent/regular_widgets/main.cpp b/tests/manual/qtabletevent/regular_widgets/main.cpp
index 339d1d3633..caf8c70c6f 100644
--- a/tests/manual/qtabletevent/regular_widgets/main.cpp
+++ b/tests/manual/qtabletevent/regular_widgets/main.cpp
@@ -82,7 +82,7 @@ class EventReportWidget : public QWidget
{
Q_OBJECT
public:
- EventReportWidget() { startTimer(1000); }
+ EventReportWidget();
public slots:
void clearPoints() { m_points.clear(); update(); }
@@ -98,6 +98,8 @@ protected:
void tabletEvent(QTabletEvent *) override;
+ bool event(QEvent *event) override;
+
void paintEvent(QPaintEvent *) override;
void timerEvent(QTimerEvent *) override;
@@ -108,10 +110,17 @@ private:
bool m_lastIsTabletMove = false;
Qt::MouseButton m_lastButton = Qt::NoButton;
QVector<TabletPoint> m_points;
+ QVector<QPointF> m_touchPoints;
int m_tabletMoveCount = 0;
int m_paintEventCount = 0;
};
+EventReportWidget::EventReportWidget()
+{
+ setAttribute(Qt::WA_AcceptTouchEvents);
+ startTimer(1000);
+}
+
void EventReportWidget::paintEvent(QPaintEvent *)
{
QPainter p(this);
@@ -160,6 +169,11 @@ void EventReportWidget::paintEvent(QPaintEvent *)
}
}
}
+ p.setPen(Qt::blue);
+ for (QPointF t : m_touchPoints) {
+ p.drawLine(t.x() - 40, t.y(), t.x() + 40, t.y());
+ p.drawLine(t.x(), t.y() - 40, t.x(), t.y() + 40);
+ }
++m_paintEventCount;
}
@@ -198,6 +212,27 @@ void EventReportWidget::tabletEvent(QTabletEvent *event)
m_lastIsTabletMove = isMove;
}
+bool EventReportWidget::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ event->accept();
+ m_touchPoints.clear();
+ for (const QTouchEvent::TouchPoint &p : static_cast<const QTouchEvent *>(event)->touchPoints())
+ m_touchPoints.append(p.pos());
+ update();
+ break;
+ case QEvent::TouchEnd:
+ m_touchPoints.clear();
+ update();
+ break;
+ default:
+ return QWidget::event(event);
+ }
+ return true;
+}
+
void EventReportWidget::outputMouseEvent(QMouseEvent *event)
{
if (event->type() == QEvent::MouseMove) {
diff --git a/tests/manual/touch/main.cpp b/tests/manual/touch/main.cpp
index 1d00ea5db5..d3c6079c7d 100644
--- a/tests/manual/touch/main.cpp
+++ b/tests/manual/touch/main.cpp
@@ -118,7 +118,7 @@ public:
explicit PanGesture(const QWidget *w, const QPanGesture *source) : Gesture(w, source)
, m_offset(source->offset()) {}
- void draw(const QRectF &rect, QPainter &painter) const Q_DECL_OVERRIDE
+ void draw(const QRectF &rect, QPainter &painter) const override
{
const QPointF hotSpot = drawHotSpot(rect, painter);
painter.drawLine(hotSpot, hotSpot + m_offset);
@@ -134,7 +134,7 @@ public:
, m_horizontal(source->horizontalDirection()), m_vertical(source->verticalDirection())
, m_angle(source->swipeAngle()) {}
- void draw(const QRectF &rect, QPainter &painter) const Q_DECL_OVERRIDE;
+ void draw(const QRectF &rect, QPainter &painter) const override;
private:
QSwipeGesture::SwipeDirection m_horizontal;
@@ -169,7 +169,7 @@ void SwipeGesture::draw(const QRectF &rect, QPainter &painter) const
Gesture *Gesture::fromQGesture(const QWidget *w, const QGesture *source)
{
- Gesture *result = Q_NULLPTR;
+ Gesture *result = nullptr;
switch (source->gestureType()) {
case Qt::TapGesture:
case Qt::TapAndHoldGesture:
@@ -197,7 +197,7 @@ class EventFilter : public QObject {
public:
explicit EventFilter(const EventTypeVector &types, QObject *p) : QObject(p), m_types(types) {}
- bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) override;
signals:
void eventReceived(const QString &);
@@ -292,8 +292,8 @@ signals:
void logMessage(const QString &);
protected:
- bool event(QEvent *event) Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) override;
+ void paintEvent(QPaintEvent *) override;
private:
void handleGestureEvent(QGestureEvent *gestureEvent);
diff --git a/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp b/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp
index e8844f87fd..f2c5494ebc 100644
--- a/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp
+++ b/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp
@@ -36,7 +36,7 @@ public:
setFlags(QGraphicsItem::ItemIsSelectable);
}
- void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* option*/, QWidget * /*widget*/) Q_DECL_OVERRIDE
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem * /* option*/, QWidget * /*widget*/) override
{
if (isSelected())
painter->fillRect(rect(), QColor(255, 0, 0));
@@ -55,7 +55,7 @@ public:
connect(this, SIGNAL(rubberBandChanged(QRect, QPointF, QPointF)), this, SLOT(updateRubberbandInfo(QRect, QPointF, QPointF)));
}
protected:
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE
+ void mouseMoveEvent(QMouseEvent *event) override
{
QGraphicsView::mouseMoveEvent(event);
diff --git a/tests/manual/widgets/styles/main.cpp b/tests/manual/widgets/styles/main.cpp
index 7c840dc9ae..43580ce781 100644
--- a/tests/manual/widgets/styles/main.cpp
+++ b/tests/manual/widgets/styles/main.cpp
@@ -30,6 +30,7 @@
#include <QApplication>
#include <QDebug>
#include <QGridLayout>
+#include <QGroupBox>
#include <QLabel>
#include <QMainWindow>
#include <QMenu>
@@ -41,6 +42,7 @@
#include <QTabWidget>
#include <QTextStream>
#include <QVBoxLayout>
+#include <QVector>
#include <QWindow>
#include <QScreen>
@@ -61,22 +63,67 @@ static inline QString formatEnumValue(Enum value)
return result;
}
-static QString pixmapDescription(QStyle::StandardPixmap sp, const QPixmap &pixmap)
+static QTextStream &operator<<(QTextStream &str, const QSize &s)
{
- QString description = formatEnumValue(sp);
- QTextStream str(&description);
- str << '(' << int(sp) << ") ";
- if (pixmap.isNull()) {
- str << "(null)";
- } else {
- const qreal dpr = pixmap.devicePixelRatioF();
- str << ' ' << pixmap.width() << 'x' << pixmap.height();
- if (!qFuzzyCompare(dpr, qreal(1)))
- str << " DPR=" << dpr;
+ str << s.width();
+ if (s.width() != s.height())
+ str << 'x' << s.height();
+ return str;
+}
+
+struct StyleIconEntry
+{
+ QString name;
+ QStyle::StandardPixmap pixmap;
+};
+
+static bool operator<(const StyleIconEntry &e1, const StyleIconEntry &e2)
+{
+ return e1.name < e2.name;
+}
+
+static QVector<StyleIconEntry> styleIconEntries()
+{
+ QVector<StyleIconEntry> result;
+ const int count = int(QStyle::SP_LineEditClearButton) + 1;
+ result.reserve(count);
+ for (int i = 0; i < count; ++i) {
+ QStyle::StandardPixmap px = static_cast<QStyle::StandardPixmap>(i);
+ result.append({formatEnumValue(px), px});
}
- return description;
+ std::sort(result.begin(), result.end());
+ return result;
}
+class IconDisplayWidget : public QGroupBox
+{
+public:
+ explicit IconDisplayWidget(const QString &title, const QString &text,
+ const QPixmap &pixmap, QWidget *p = nullptr);
+};
+
+IconDisplayWidget::IconDisplayWidget(const QString &title, const QString &text,
+ const QPixmap &pixmap, QWidget *p)
+ : QGroupBox(title, p)
+{
+ QHBoxLayout *hLayout = new QHBoxLayout(this);
+ hLayout->addWidget(new QLabel(text, this));
+ QLabel *iconLabel = new QLabel(this);
+ iconLabel->setPixmap(pixmap);
+ hLayout->addWidget(iconLabel);
+}
+
+static IconDisplayWidget *createStandardPixmapDisplay(const StyleIconEntry &e, QWidget *parent)
+{
+ QPixmap pixmap = parent->style()->standardPixmap(e.pixmap, nullptr, parent);
+ QString description;
+ QTextStream str(&description);
+ str << pixmap.size();
+ return new IconDisplayWidget(e.name, description, pixmap, parent);
+}
+
+enum : int { maxColumns = 6 };
+
// Display pixmaps returned by QStyle::standardPixmap() in a grid.
static QWidget *createStandardPixmapPage(QWidget *parent)
{
@@ -84,16 +131,47 @@ static QWidget *createStandardPixmapPage(QWidget *parent)
QGridLayout *grid = new QGridLayout(result);
int row = 0;
int column = 0;
- const int maxColumns = 6;
- for (int i = 0; i <= int(QStyle::SP_LineEditClearButton); ++i) {
- const QStyle::StandardPixmap sp = static_cast<QStyle::StandardPixmap>(i);
- QPixmap pixmap = result->style()->standardPixmap(sp, Q_NULLPTR, result);
- QLabel *descriptionLabel = new QLabel(pixmapDescription(sp, pixmap));
- grid->addWidget(descriptionLabel, row, column++);
- QLabel *displayLabel = new QLabel;
- displayLabel->setPixmap(pixmap);
- displayLabel->setFrameShape(QFrame::Box);
- grid->addWidget(displayLabel, row, column++);
+ QVector<StyleIconEntry> entries = styleIconEntries();
+ for (int i = 0, size = entries.size(); i < size; ++i) {
+ grid->addWidget(createStandardPixmapDisplay(entries.at(i), parent), row, column++);
+ if (column >= maxColumns) {
+ ++row;
+ column = 0;
+ }
+ }
+ return result;
+}
+
+// Display icons returned by QStyle::standardIcon() in a grid.
+static IconDisplayWidget *createStandardIconDisplay(const StyleIconEntry &e,
+ const QSize &displaySize,
+ QWidget *parent)
+{
+ QIcon icon = parent->style()->standardIcon(e.pixmap, nullptr, parent);
+ QString description;
+ QTextStream str(&description);
+ auto availableSizes = icon.availableSizes();
+ std::sort(availableSizes.begin(), availableSizes.end(),
+ [](QSize s1, QSize s2) { return s1.width() < s2.width(); });
+ for (int i =0; i < availableSizes.size(); ++i) {
+ if (i)
+ str << ',';
+ str << availableSizes.at(i);
+ }
+ return new IconDisplayWidget(e.name, description, icon.pixmap(displaySize), parent);
+}
+
+static QWidget *createStandardIconPage(QWidget *parent)
+{
+ QWidget *result = new QWidget(parent);
+ QGridLayout *grid = new QGridLayout(result);
+ int row = 0;
+ int column = 0;
+ const int largeIconSize = parent->style()->pixelMetric(QStyle::PM_LargeIconSize);
+ const QSize displaySize(largeIconSize, largeIconSize);
+ QVector<StyleIconEntry> entries = styleIconEntries();
+ for (int i = 0, size = entries.size(); i < size; ++i) {
+ grid->addWidget(createStandardIconDisplay(entries.at(i), displaySize, parent), row, column++);
if (column >= maxColumns) {
++row;
column = 0;
@@ -111,7 +189,7 @@ static QWidget *createMetricsPage(QWidget *parent)
for (int i = 0; i <= int(QStyle::PM_HeaderDefaultSectionSizeVertical); ++i) {
const QStyle::PixelMetric m = static_cast<QStyle::PixelMetric>(i);
str << formatEnumValue(m) << '(' << int(m) << ")="
- << result->style()->pixelMetric(m, Q_NULLPTR, result) << '\n';
+ << result->style()->pixelMetric(m, nullptr, result) << '\n';
}
result->setPlainText(text);
return result;
@@ -126,7 +204,7 @@ static QWidget *createHintsPage(QWidget *parent)
for (int i = 0; i <= int(QStyle::SH_Menu_SubMenuDontStartSloppyOnLeave); ++i) {
const QStyle::StyleHint h = static_cast<QStyle::StyleHint>(i);
str << formatEnumValue(h) << '(' << int(h) << ")="
- << result->style()->styleHint(h, Q_NULLPTR, result) << '\n';
+ << result->style()->styleHint(h, nullptr, result) << '\n';
}
result->setPlainText(text);
return result;
@@ -190,6 +268,7 @@ MainWindow::MainWindow()
QVBoxLayout *mainLayout = new QVBoxLayout(central);
mainLayout->addWidget(m_descriptionLabel);
mainLayout->addWidget(m_tabWidget);
+ m_tabWidget->addTab(createStandardIconPage(m_tabWidget), "Standard Icon");
m_tabWidget->addTab(createStandardPixmapPage(m_tabWidget), "Standard Pixmaps");
m_tabWidget->addTab(createHintsPage(m_tabWidget), "Hints");
m_tabWidget->addTab(createMetricsPage(m_tabWidget), "Pixel Metrics");
diff --git a/util/edid/qedidvendortable.py b/util/edid/qedidvendortable.py
index 6d30f3a60d..bac8417326 100755
--- a/util/edid/qedidvendortable.py
+++ b/util/edid/qedidvendortable.py
@@ -82,6 +82,17 @@ header = """
#ifndef QEDIDVENDORTABLE_P_H
#define QEDIDVENDORTABLE_P_H
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
QT_BEGIN_NAMESPACE
typedef struct VendorTable {
diff --git a/util/glgen/codegenerator.cpp b/util/glgen/codegenerator.cpp
index 70cd3a7931..4627daa48b 100644
--- a/util/glgen/codegenerator.cpp
+++ b/util/glgen/codegenerator.cpp
@@ -530,7 +530,7 @@ void CodeGenerator::writePublicClassDeclaration(const QString &baseFileName,
stream << QStringLiteral("public:") << endl;
stream << QString(QStringLiteral(" %1();")).arg(className) << endl;
stream << QString(QStringLiteral(" ~%1();")).arg(className) << endl << endl;
- stream << QStringLiteral(" bool initializeOpenGLFunctions() Q_DECL_OVERRIDE;") << endl << endl;
+ stream << QStringLiteral(" bool initializeOpenGLFunctions() override;") << endl << endl;
// Get the functions needed for this class and declare them
FunctionCollection functionSet = functionCollection(versionProfile);
@@ -989,7 +989,7 @@ void CodeGenerator::writeExtensionClassDeclaration(QTextStream &stream, const QS
stream << QStringLiteral(" ") << className << QStringLiteral("();") << endl << endl;
// Base class virtual function(s)
- QString resolveFunction = QStringLiteral(" bool initializeOpenGLFunctions() Q_DECL_FINAL;");
+ QString resolveFunction = QStringLiteral(" bool initializeOpenGLFunctions() final;");
stream << resolveFunction << endl << endl;
}
diff --git a/util/unicode/data/ArabicShaping.txt b/util/unicode/data/ArabicShaping.txt
index b0e5b5b7af..f2ef1fad74 100644
--- a/util/unicode/data/ArabicShaping.txt
+++ b/util/unicode/data/ArabicShaping.txt
@@ -1,23 +1,23 @@
-# ArabicShaping-8.0.0.txt
-# Date: 2015-02-17, 23:33:00 GMT [RP]
+# ArabicShaping-10.0.0.txt
+# Date: 2017-02-16, 00:00:00 GMT [RP, KW]
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# This file is a normative contributory data file in the
# Unicode Character Database.
#
-# Copyright (c) 1991-2014 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-#
# This file defines the Joining_Type and Joining_Group property
# values for Arabic, Syriac, N'Ko, Mandaic, and Manichaean positional
# shaping, repeating in machine readable form the information
# exemplified in Tables 9-3, 9-8, 9-9, 9-10, 9-14, 9-15, 9-16, 9-19,
# 9-20, 10-4, 10-5, 10-6, 10-7, and 19-5 of The Unicode Standard core
# specification. This file also defines Joining_Type values for
-# Mongolian, Phags-pa, and Psalter Pahlavi positional shaping, which
-# are not listed in tables in the standard.
+# Mongolian, Phags-pa, Psalter Pahlavi, and Adlam positional shaping,
+# which are not listed in tables in the standard.
#
-# See Sections 9.2, 9.3, 9.5, 10.5, 10.6, 13.4, 14.3, 19.4 of
-# The Unicode Standard core specification for more information.
+# See Sections 9.2, 9.3, 9.5, 10.5, 10.6, 13.4, 14.3, 19.4, and 19.9
+# of The Unicode Standard core specification for more information.
#
# Each line contains four fields, separated by a semicolon.
#
@@ -50,8 +50,8 @@
# Field 3: defines the joining group (property name: Joining_Group)
#
# The values of the joining group are based schematically on character
-# names. Where a schematic character name consists of two or more parts separated
-# by spaces, the formal Joining_Group property value, as specified in
+# names. Where a schematic character name consists of two or more parts
+# separated by spaces, the formal Joining_Group property value, as specified in
# PropertyValueAliases.txt, consists of the same name parts joined by
# underscores. Hence, the entry:
#
@@ -86,11 +86,11 @@
# Note: Code points that are not explicitly listed in this file are
# either of joining type T or U:
#
-# - Those that not explicitly listed that are of General Category Mn, Me, or Cf
+# - Those that are not explicitly listed and that are of General Category Mn, Me, or Cf
# have joining type T.
# - All others not explicitly listed have joining type U.
#
-# For an explicit listing of characters of joining type T, see
+# For an explicit listing of all characters of joining type T, see
# the derived property file DerivedJoiningType.txt.
#
# #############################################################
@@ -413,6 +413,20 @@
0857; MANDAIC KAD; U; No_Joining_Group
0858; MANDAIC AIN; U; No_Joining_Group
+# Syriac Supplement Characters
+
+0860; MALAYALAM NGA; D; MALAYALAM NGA
+0861; MALAYALAM JA; U; MALAYALAM JA
+0862; MALAYALAM NYA; D; MALAYALAM NYA
+0863; MALAYALAM TTA; D; MALAYALAM TTA
+0864; MALAYALAM NNA; D; MALAYALAM NNA
+0865; MALAYALAM NNNA; D; MALAYALAM NNNA
+0866; MALAYALAM BHA; U; MALAYALAM BHA
+0867; MALAYALAM RA; R; MALAYALAM RA
+0868; MALAYALAM LLA; D; MALAYALAM LLA
+0869; MALAYALAM LLLA; R; MALAYALAM LLLA
+086A; MALAYALAM SSA; R; MALAYALAM SSA
+
# Arabic Extended-A Characters
08A0; DOTLESS BEH WITH V BELOW; D; BEH
@@ -436,6 +450,15 @@
08B2; REH WITH DOT AND INVERTED V ABOVE; R; REH
08B3; AIN WITH 3 DOTS BELOW; D; AIN
08B4; KAF WITH DOT BELOW; D; KAF
+08B6; BEH WITH MEEM ABOVE; D; BEH
+08B7; DOTLESS BEH WITH 3 DOTS BELOW AND MEEM ABOVE; D; BEH
+08B8; DOTLESS BEH WITH TEH ABOVE; D; BEH
+08B9; REH WITH NOON ABOVE; R; REH
+08BA; YEH WITH NOON ABOVE; D; YEH
+08BB; AFRICAN FEH; D; AFRICAN FEH
+08BC; AFRICAN QAF; D; AFRICAN QAF
+08BD; AFRICAN NOON; D; AFRICAN NOON
+08E2; ARABIC DISPUTED END OF AYAH; U; No_Joining_Group
# Mongolian Characters
@@ -536,8 +559,8 @@
1882; MONGOLIAN ALI GALI DAMARU; U; No_Joining_Group
1883; MONGOLIAN ALI GALI UBADAMA; U; No_Joining_Group
1884; MONGOLIAN ALI GALI INVERTED UBADAMA; U; No_Joining_Group
-1885; MONGOLIAN ALI GALI BALUDA; U; No_Joining_Group
-1886; MONGOLIAN ALI GALI THREE BALUDA; U; No_Joining_Group
+1885; MONGOLIAN ALI GALI BALUDA; T; No_Joining_Group
+1886; MONGOLIAN ALI GALI THREE BALUDA; T; No_Joining_Group
1887; MONGOLIAN ALI GALI A; D; No_Joining_Group
1888; MONGOLIAN ALI GALI I; D; No_Joining_Group
1889; MONGOLIAN ALI GALI KA; D; No_Joining_Group
@@ -578,6 +601,7 @@
200C; ZERO WIDTH NON-JOINER; U; No_Joining_Group
200D; ZERO WIDTH JOINER; C; No_Joining_Group
+202F; NARROW NO-BREAK SPACE; U; No_Joining_Group
2066; LEFT-TO-RIGHT ISOLATE; U; No_Joining_Group
2067; RIGHT-TO-LEFT ISOLATE; U; No_Joining_Group
2068; FIRST STRONG ISOLATE; U; No_Joining_Group
@@ -711,4 +735,75 @@ A873; PHAGS-PA CANDRABINDU; U; No_Joining_Group
10BAE; PSALTER PAHLAVI TWENTY; D; No_Joining_Group
10BAF; PSALTER PAHLAVI HUNDRED; U; No_Joining_Group
+# Adlam Characters
+
+1E900;ADLAM CAPITAL ALIF; D; No_Joining_Group
+1E901;ADLAM CAPITAL DAALI; D; No_Joining_Group
+1E902;ADLAM CAPITAL LAAM; D; No_Joining_Group
+1E903;ADLAM CAPITAL MIIM; D; No_Joining_Group
+1E904;ADLAM CAPITAL BA; D; No_Joining_Group
+1E905;ADLAM CAPITAL SINNYIIYHE; D; No_Joining_Group
+1E906;ADLAM CAPITAL PE; D; No_Joining_Group
+1E907;ADLAM CAPITAL BHE; D; No_Joining_Group
+1E908;ADLAM CAPITAL RA; D; No_Joining_Group
+1E909;ADLAM CAPITAL E; D; No_Joining_Group
+1E90A;ADLAM CAPITAL FA; D; No_Joining_Group
+1E90B;ADLAM CAPITAL I; D; No_Joining_Group
+1E90C;ADLAM CAPITAL O; D; No_Joining_Group
+1E90D;ADLAM CAPITAL DHA; D; No_Joining_Group
+1E90E;ADLAM CAPITAL YHE; D; No_Joining_Group
+1E90F;ADLAM CAPITAL WAW; D; No_Joining_Group
+1E910;ADLAM CAPITAL NUN; D; No_Joining_Group
+1E911;ADLAM CAPITAL KAF; D; No_Joining_Group
+1E912;ADLAM CAPITAL YA; D; No_Joining_Group
+1E913;ADLAM CAPITAL U; D; No_Joining_Group
+1E914;ADLAM CAPITAL JIIM; D; No_Joining_Group
+1E915;ADLAM CAPITAL CHI; D; No_Joining_Group
+1E916;ADLAM CAPITAL HA; D; No_Joining_Group
+1E917;ADLAM CAPITAL QAAF; D; No_Joining_Group
+1E918;ADLAM CAPITAL GA; D; No_Joining_Group
+1E919;ADLAM CAPITAL NYA; D; No_Joining_Group
+1E91A;ADLAM CAPITAL TU; D; No_Joining_Group
+1E91B;ADLAM CAPITAL NHA; D; No_Joining_Group
+1E91C;ADLAM CAPITAL VA; D; No_Joining_Group
+1E91D;ADLAM CAPITAL KHA; D; No_Joining_Group
+1E91E;ADLAM CAPITAL GBE; D; No_Joining_Group
+1E91F;ADLAM CAPITAL ZAL; D; No_Joining_Group
+1E920;ADLAM CAPITAL KPO; D; No_Joining_Group
+1E921;ADLAM CAPITAL SHA; D; No_Joining_Group
+1E922;ADLAM SMALL ALIF; D; No_Joining_Group
+1E923;ADLAM SMALL DAALI; D; No_Joining_Group
+1E924;ADLAM SMALL LAAM; D; No_Joining_Group
+1E925;ADLAM SMALL MIIM; D; No_Joining_Group
+1E926;ADLAM SMALL BA; D; No_Joining_Group
+1E927;ADLAM SMALL SINNYIIYHE; D; No_Joining_Group
+1E928;ADLAM SMALL PE; D; No_Joining_Group
+1E929;ADLAM SMALL BHE; D; No_Joining_Group
+1E92A;ADLAM SMALL RA; D; No_Joining_Group
+1E92B;ADLAM SMALL E; D; No_Joining_Group
+1E92C;ADLAM SMALL FA; D; No_Joining_Group
+1E92D;ADLAM SMALL I; D; No_Joining_Group
+1E92E;ADLAM SMALL O; D; No_Joining_Group
+1E92F;ADLAM SMALL DHA; D; No_Joining_Group
+1E930;ADLAM SMALL YHE; D; No_Joining_Group
+1E931;ADLAM SMALL WAW; D; No_Joining_Group
+1E932;ADLAM SMALL NUN; D; No_Joining_Group
+1E933;ADLAM SMALL KAF; D; No_Joining_Group
+1E934;ADLAM SMALL YA; D; No_Joining_Group
+1E935;ADLAM SMALL U; D; No_Joining_Group
+1E936;ADLAM SMALL JIIM; D; No_Joining_Group
+1E937;ADLAM SMALL CHI; D; No_Joining_Group
+1E938;ADLAM SMALL HA; D; No_Joining_Group
+1E939;ADLAM SMALL QAAF; D; No_Joining_Group
+1E93A;ADLAM SMALL GA; D; No_Joining_Group
+1E93B;ADLAM SMALL NYA; D; No_Joining_Group
+1E93C;ADLAM SMALL TU; D; No_Joining_Group
+1E93D;ADLAM SMALL NHA; D; No_Joining_Group
+1E93E;ADLAM SMALL VA; D; No_Joining_Group
+1E93F;ADLAM SMALL KHA; D; No_Joining_Group
+1E940;ADLAM SMALL GBE; D; No_Joining_Group
+1E941;ADLAM SMALL ZAL; D; No_Joining_Group
+1E942;ADLAM SMALL KPO; D; No_Joining_Group
+1E943;ADLAM SMALL SHA; D; No_Joining_Group
+
# EOF
diff --git a/util/unicode/data/BidiMirroring.txt b/util/unicode/data/BidiMirroring.txt
index fbc60f1ab6..cbb61c4b57 100644
--- a/util/unicode/data/BidiMirroring.txt
+++ b/util/unicode/data/BidiMirroring.txt
@@ -1,32 +1,34 @@
-# BidiMirroring-8.0.0.txt
-# Date: 2015-01-20, 18:30:00 GMT [KW, LI]
+# BidiMirroring-10.0.0.txt
+# Date: 2017-04-12, 17:30:00 GMT [KW, LI]
+# © 2017 Unicode®, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
#
# Bidi_Mirroring_Glyph Property
-#
+#
# This file is an informative contributory data file in the
# Unicode Character Database.
#
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-#
# This data file lists characters that have the Bidi_Mirrored=Yes property
# value, for which there is another Unicode character that typically has a glyph
# that is the mirror image of the original character's glyph.
#
-# The repertoire covered by the file is Unicode 8.0.0.
-#
+# The repertoire covered by the file is Unicode 10.0.0.
+#
# The file contains a list of lines with mappings from one code point
# to another one for character-based mirroring.
# Note that for "real" mirroring, a rendering engine needs to select
# appropriate alternative glyphs, and that many Unicode characters do not
# have a mirror-image Unicode character.
-#
+#
# Each mapping line contains two fields, separated by a semicolon (';').
# Each of the two fields contains a code point represented as a
# variable-length hexadecimal value with 4 to 6 digits.
# A comment indicates where the characters are "BEST FIT" mirroring.
-#
-# Code points for which Bidi_Mirrored=Yes, but for which no appropriate
+#
+# Code points for which Bidi_Mirrored=Yes, but for which no appropriate
# characters exist with mirrored glyphs, are
# listed as comments at the end of the file.
#
@@ -36,14 +38,14 @@
# point has the default value for the Bidi_Mirroring_Glyph property,
# that means that no other character exists whose glyph is suitable
# for character-based mirroring.
-#
+#
# For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm,
# at http://www.unicode.org/unicode/reports/tr9/
-#
+#
# This file was originally created by Markus Scherer.
# Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler,
# and for subsequent versions by Ken Whistler and Laurentiu Iancu.
-#
+#
# ############################################################
#
# Property: Bidi_Mirroring_Glyph
diff --git a/util/unicode/data/Blocks.txt b/util/unicode/data/Blocks.txt
index 0a4a580763..a4f851b14a 100644
--- a/util/unicode/data/Blocks.txt
+++ b/util/unicode/data/Blocks.txt
@@ -1,9 +1,9 @@
-# Blocks-8.0.0.txt
-# Date: 2014-11-10, 23:04:00 GMT [KW]
+# Blocks-10.0.0.txt
+# Date: 2017-04-12, 17:30:00 GMT [KW]
+# © 2017 Unicode®, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
#
# Format:
@@ -14,12 +14,12 @@
# Note: When comparing block names, casing, whitespace, hyphens,
# and underbars are ignored.
# For example, "Latin Extended-A" and "latin extended a" are equivalent.
-# For more information on the comparison of property values,
+# For more information on the comparison of property values,
# see UAX #44: http://www.unicode.org/reports/tr44/
#
# All block ranges start with a value where (cp MOD 16) = 0,
# and end with a value where (cp MOD 16) = 15. In other words,
-# the last hexadecimal digit of the start of range is ...0
+# the last hexadecimal digit of the start of range is ...0
# and the last hexadecimal digit of the end of range is ...F.
# This constraint on block ranges guarantees that allocations
# are done in terms of whole columns, and that code chart display
@@ -51,6 +51,7 @@
07C0..07FF; NKo
0800..083F; Samaritan
0840..085F; Mandaic
+0860..086F; Syriac Supplement
08A0..08FF; Arabic Extended-A
0900..097F; Devanagari
0980..09FF; Bengali
@@ -93,6 +94,7 @@
1BC0..1BFF; Batak
1C00..1C4F; Lepcha
1C50..1C7F; Ol Chiki
+1C80..1C8F; Cyrillic Extended-C
1CC0..1CCF; Sundanese Supplement
1CD0..1CFF; Vedic Extensions
1D00..1D7F; Phonetic Extensions
@@ -209,6 +211,7 @@ FFF0..FFFF; Specials
10400..1044F; Deseret
10450..1047F; Shavian
10480..104AF; Osmanya
+104B0..104FF; Osage
10500..1052F; Elbasan
10530..1056F; Caucasian Albanian
10600..1077F; Linear A
@@ -243,13 +246,20 @@ FFF0..FFFF; Specials
11280..112AF; Multani
112B0..112FF; Khudawadi
11300..1137F; Grantha
+11400..1147F; Newa
11480..114DF; Tirhuta
11580..115FF; Siddham
11600..1165F; Modi
+11660..1167F; Mongolian Supplement
11680..116CF; Takri
11700..1173F; Ahom
118A0..118FF; Warang Citi
+11A00..11A4F; Zanabazar Square
+11A50..11AAF; Soyombo
11AC0..11AFF; Pau Cin Hau
+11C00..11C6F; Bhaiksuki
+11C70..11CBF; Marchen
+11D00..11D5F; Masaram Gondi
12000..123FF; Cuneiform
12400..1247F; Cuneiform Numbers and Punctuation
12480..1254F; Early Dynastic Cuneiform
@@ -260,7 +270,12 @@ FFF0..FFFF; Specials
16AD0..16AFF; Bassa Vah
16B00..16B8F; Pahawh Hmong
16F00..16F9F; Miao
+16FE0..16FFF; Ideographic Symbols and Punctuation
+17000..187FF; Tangut
+18800..18AFF; Tangut Components
1B000..1B0FF; Kana Supplement
+1B100..1B12F; Kana Extended-A
+1B170..1B2FF; Nushu
1BC00..1BC9F; Duployan
1BCA0..1BCAF; Shorthand Format Controls
1D000..1D0FF; Byzantine Musical Symbols
@@ -270,7 +285,9 @@ FFF0..FFFF; Specials
1D360..1D37F; Counting Rod Numerals
1D400..1D7FF; Mathematical Alphanumeric Symbols
1D800..1DAAF; Sutton SignWriting
+1E000..1E02F; Glagolitic Supplement
1E800..1E8DF; Mende Kikakui
+1E900..1E95F; Adlam
1EE00..1EEFF; Arabic Mathematical Alphabetic Symbols
1F000..1F02F; Mahjong Tiles
1F030..1F09F; Domino Tiles
@@ -289,6 +306,7 @@ FFF0..FFFF; Specials
2A700..2B73F; CJK Unified Ideographs Extension C
2B740..2B81F; CJK Unified Ideographs Extension D
2B820..2CEAF; CJK Unified Ideographs Extension E
+2CEB0..2EBEF; CJK Unified Ideographs Extension F
2F800..2FA1F; CJK Compatibility Ideographs Supplement
E0000..E007F; Tags
E0100..E01EF; Variation Selectors Supplement
diff --git a/util/unicode/data/CaseFolding.txt b/util/unicode/data/CaseFolding.txt
index 0197a6c40f..efdf18e441 100644
--- a/util/unicode/data/CaseFolding.txt
+++ b/util/unicode/data/CaseFolding.txt
@@ -1,10 +1,11 @@
-# CaseFolding-8.0.0.txt
-# Date: 2015-01-13, 18:16:36 GMT [MD]
+# CaseFolding-10.0.0.txt
+# Date: 2017-04-14, 05:40:18 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
# Case Folding Properties
#
@@ -23,7 +24,7 @@
#
# NOTE: case folding does not preserve normalization formats!
#
-# For information on case folding, including how to have case folding
+# For information on case folding, including how to have case folding
# preserve normalization formats, see Section 3.13 Default Case Algorithms in
# The Unicode Standard.
#
@@ -593,6 +594,15 @@
13FB; C; 13F3; # CHEROKEE SMALL LETTER YU
13FC; C; 13F4; # CHEROKEE SMALL LETTER YV
13FD; C; 13F5; # CHEROKEE SMALL LETTER MV
+1C80; C; 0432; # CYRILLIC SMALL LETTER ROUNDED VE
+1C81; C; 0434; # CYRILLIC SMALL LETTER LONG-LEGGED DE
+1C82; C; 043E; # CYRILLIC SMALL LETTER NARROW O
+1C83; C; 0441; # CYRILLIC SMALL LETTER WIDE ES
+1C84; C; 0442; # CYRILLIC SMALL LETTER TALL TE
+1C85; C; 0442; # CYRILLIC SMALL LETTER THREE-LEGGED TE
+1C86; C; 044A; # CYRILLIC SMALL LETTER TALL HARD SIGN
+1C87; C; 0463; # CYRILLIC SMALL LETTER TALL YAT
+1C88; C; A64B; # CYRILLIC SMALL LETTER UNBLENDED UK
1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
@@ -1163,6 +1173,7 @@ A7AA; C; 0266; # LATIN CAPITAL LETTER H WITH HOOK
A7AB; C; 025C; # LATIN CAPITAL LETTER REVERSED OPEN E
A7AC; C; 0261; # LATIN CAPITAL LETTER SCRIPT G
A7AD; C; 026C; # LATIN CAPITAL LETTER L WITH BELT
+A7AE; C; 026A; # LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0; C; 029E; # LATIN CAPITAL LETTER TURNED K
A7B1; C; 0287; # LATIN CAPITAL LETTER TURNED T
A7B2; C; 029D; # LATIN CAPITAL LETTER J WITH CROSSED-TAIL
@@ -1327,6 +1338,42 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
10425; C; 1044D; # DESERET CAPITAL LETTER ENG
10426; C; 1044E; # DESERET CAPITAL LETTER OI
10427; C; 1044F; # DESERET CAPITAL LETTER EW
+104B0; C; 104D8; # OSAGE CAPITAL LETTER A
+104B1; C; 104D9; # OSAGE CAPITAL LETTER AI
+104B2; C; 104DA; # OSAGE CAPITAL LETTER AIN
+104B3; C; 104DB; # OSAGE CAPITAL LETTER AH
+104B4; C; 104DC; # OSAGE CAPITAL LETTER BRA
+104B5; C; 104DD; # OSAGE CAPITAL LETTER CHA
+104B6; C; 104DE; # OSAGE CAPITAL LETTER EHCHA
+104B7; C; 104DF; # OSAGE CAPITAL LETTER E
+104B8; C; 104E0; # OSAGE CAPITAL LETTER EIN
+104B9; C; 104E1; # OSAGE CAPITAL LETTER HA
+104BA; C; 104E2; # OSAGE CAPITAL LETTER HYA
+104BB; C; 104E3; # OSAGE CAPITAL LETTER I
+104BC; C; 104E4; # OSAGE CAPITAL LETTER KA
+104BD; C; 104E5; # OSAGE CAPITAL LETTER EHKA
+104BE; C; 104E6; # OSAGE CAPITAL LETTER KYA
+104BF; C; 104E7; # OSAGE CAPITAL LETTER LA
+104C0; C; 104E8; # OSAGE CAPITAL LETTER MA
+104C1; C; 104E9; # OSAGE CAPITAL LETTER NA
+104C2; C; 104EA; # OSAGE CAPITAL LETTER O
+104C3; C; 104EB; # OSAGE CAPITAL LETTER OIN
+104C4; C; 104EC; # OSAGE CAPITAL LETTER PA
+104C5; C; 104ED; # OSAGE CAPITAL LETTER EHPA
+104C6; C; 104EE; # OSAGE CAPITAL LETTER SA
+104C7; C; 104EF; # OSAGE CAPITAL LETTER SHA
+104C8; C; 104F0; # OSAGE CAPITAL LETTER TA
+104C9; C; 104F1; # OSAGE CAPITAL LETTER EHTA
+104CA; C; 104F2; # OSAGE CAPITAL LETTER TSA
+104CB; C; 104F3; # OSAGE CAPITAL LETTER EHTSA
+104CC; C; 104F4; # OSAGE CAPITAL LETTER TSHA
+104CD; C; 104F5; # OSAGE CAPITAL LETTER DHA
+104CE; C; 104F6; # OSAGE CAPITAL LETTER U
+104CF; C; 104F7; # OSAGE CAPITAL LETTER WA
+104D0; C; 104F8; # OSAGE CAPITAL LETTER KHA
+104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA
+104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA
+104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA
10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A
10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA
10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB
@@ -1410,5 +1457,39 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
118BD; C; 118DD; # WARANG CITI CAPITAL LETTER SSUU
118BE; C; 118DE; # WARANG CITI CAPITAL LETTER SII
118BF; C; 118DF; # WARANG CITI CAPITAL LETTER VIYO
+1E900; C; 1E922; # ADLAM CAPITAL LETTER ALIF
+1E901; C; 1E923; # ADLAM CAPITAL LETTER DAALI
+1E902; C; 1E924; # ADLAM CAPITAL LETTER LAAM
+1E903; C; 1E925; # ADLAM CAPITAL LETTER MIIM
+1E904; C; 1E926; # ADLAM CAPITAL LETTER BA
+1E905; C; 1E927; # ADLAM CAPITAL LETTER SINNYIIYHE
+1E906; C; 1E928; # ADLAM CAPITAL LETTER PE
+1E907; C; 1E929; # ADLAM CAPITAL LETTER BHE
+1E908; C; 1E92A; # ADLAM CAPITAL LETTER RA
+1E909; C; 1E92B; # ADLAM CAPITAL LETTER E
+1E90A; C; 1E92C; # ADLAM CAPITAL LETTER FA
+1E90B; C; 1E92D; # ADLAM CAPITAL LETTER I
+1E90C; C; 1E92E; # ADLAM CAPITAL LETTER O
+1E90D; C; 1E92F; # ADLAM CAPITAL LETTER DHA
+1E90E; C; 1E930; # ADLAM CAPITAL LETTER YHE
+1E90F; C; 1E931; # ADLAM CAPITAL LETTER WAW
+1E910; C; 1E932; # ADLAM CAPITAL LETTER NUN
+1E911; C; 1E933; # ADLAM CAPITAL LETTER KAF
+1E912; C; 1E934; # ADLAM CAPITAL LETTER YA
+1E913; C; 1E935; # ADLAM CAPITAL LETTER U
+1E914; C; 1E936; # ADLAM CAPITAL LETTER JIIM
+1E915; C; 1E937; # ADLAM CAPITAL LETTER CHI
+1E916; C; 1E938; # ADLAM CAPITAL LETTER HA
+1E917; C; 1E939; # ADLAM CAPITAL LETTER QAAF
+1E918; C; 1E93A; # ADLAM CAPITAL LETTER GA
+1E919; C; 1E93B; # ADLAM CAPITAL LETTER NYA
+1E91A; C; 1E93C; # ADLAM CAPITAL LETTER TU
+1E91B; C; 1E93D; # ADLAM CAPITAL LETTER NHA
+1E91C; C; 1E93E; # ADLAM CAPITAL LETTER VA
+1E91D; C; 1E93F; # ADLAM CAPITAL LETTER KHA
+1E91E; C; 1E940; # ADLAM CAPITAL LETTER GBE
+1E91F; C; 1E941; # ADLAM CAPITAL LETTER ZAL
+1E920; C; 1E942; # ADLAM CAPITAL LETTER KPO
+1E921; C; 1E943; # ADLAM CAPITAL LETTER SHA
#
# EOF
diff --git a/util/unicode/data/DerivedAge.txt b/util/unicode/data/DerivedAge.txt
index f1b0addb1c..917afd413c 100644
--- a/util/unicode/data/DerivedAge.txt
+++ b/util/unicode/data/DerivedAge.txt
@@ -1,10 +1,11 @@
-# DerivedAge-8.0.0.txt
-# Date: 2015-02-13, 13:30:18 GMT [MD]
+# DerivedAge-10.0.0.txt
+# Date: 2017-04-14, 05:40:18 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
# Unicode Character Database: Derived Property Data
# This file shows when various code points were first assigned in Unicode.
@@ -12,7 +13,7 @@
# Notes:
#
# - The term 'assigned' means that a previously reserved code point was assigned
-# to be a character (graphic, format, control, or private-use);
+# to be a character (graphic, format, control, or private-use);
# a noncharacter code point; or a surrogate code point.
# For more information, see The Unicode Standard Section 2.4
#
@@ -1535,4 +1536,115 @@ FE2E..FE2F ; 8.0 # [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILL
# Total code points: 7716
+# ================================================
+
+# Age=V9_0
+
+# Newly assigned in Unicode 9.0.0 (June, 2016)
+
+08B6..08BD ; 9.0 # [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08D4..08E1 ; 9.0 # [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
+08E2 ; 9.0 # ARABIC DISPUTED END OF AYAH
+0C80 ; 9.0 # KANNADA SIGN SPACING CANDRABINDU
+0D4F ; 9.0 # MALAYALAM SIGN PARA
+0D54..0D56 ; 9.0 # [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
+0D58..0D5E ; 9.0 # [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
+0D76..0D78 ; 9.0 # [3] MALAYALAM FRACTION ONE SIXTEENTH..MALAYALAM FRACTION THREE SIXTEENTHS
+1C80..1C88 ; 9.0 # [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
+1DFB ; 9.0 # COMBINING DELETION MARK
+23FB..23FE ; 9.0 # [4] POWER SYMBOL..POWER SLEEP SYMBOL
+2E43..2E44 ; 9.0 # [2] DASH WITH LEFT UPTURN..DOUBLE SUSPENSION MARK
+A7AE ; 9.0 # LATIN CAPITAL LETTER SMALL CAPITAL I
+A8C5 ; 9.0 # SAURASHTRA SIGN CANDRABINDU
+1018D..1018E ; 9.0 # [2] GREEK INDICTION SIGN..NOMISMA SIGN
+104B0..104D3 ; 9.0 # [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; 9.0 # [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+1123E ; 9.0 # KHOJKI SIGN SUKUN
+11400..11459 ; 9.0 # [90] NEWA LETTER A..NEWA DIGIT NINE
+1145B ; 9.0 # NEWA PLACEHOLDER MARK
+1145D ; 9.0 # NEWA INSERTION SIGN
+11660..1166C ; 9.0 # [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
+11C00..11C08 ; 9.0 # [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C36 ; 9.0 # [45] BHAIKSUKI LETTER E..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C45 ; 9.0 # [14] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI GAP FILLER-2
+11C50..11C6C ; 9.0 # [29] BHAIKSUKI DIGIT ZERO..BHAIKSUKI HUNDREDS UNIT MARK
+11C70..11C8F ; 9.0 # [32] MARCHEN HEAD MARK..MARCHEN LETTER A
+11C92..11CA7 ; 9.0 # [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9..11CB6 ; 9.0 # [14] MARCHEN SUBJOINED LETTER YA..MARCHEN SIGN CANDRABINDU
+16FE0 ; 9.0 # TANGUT ITERATION MARK
+17000..187EC ; 9.0 # [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+18800..18AF2 ; 9.0 # [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+1E000..1E006 ; 9.0 # [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; 9.0 # [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; 9.0 # [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; 9.0 # [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; 9.0 # [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
+1E900..1E94A ; 9.0 # [75] ADLAM CAPITAL LETTER ALIF..ADLAM NUKTA
+1E950..1E959 ; 9.0 # [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F ; 9.0 # [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+1F19B..1F1AC ; 9.0 # [18] SQUARED THREE D..SQUARED VOD
+1F23B ; 9.0 # SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F57A ; 9.0 # MAN DANCING
+1F5A4 ; 9.0 # BLACK HEART
+1F6D1..1F6D2 ; 9.0 # [2] OCTAGONAL SIGN..SHOPPING TROLLEY
+1F6F4..1F6F6 ; 9.0 # [3] SCOOTER..CANOE
+1F919..1F91E ; 9.0 # [6] CALL ME HAND..HAND WITH INDEX AND MIDDLE FINGERS CROSSED
+1F920..1F927 ; 9.0 # [8] FACE WITH COWBOY HAT..SNEEZING FACE
+1F930 ; 9.0 # PREGNANT WOMAN
+1F933..1F93E ; 9.0 # [12] SELFIE..HANDBALL
+1F940..1F94B ; 9.0 # [12] WILTED FLOWER..MARTIAL ARTS UNIFORM
+1F950..1F95E ; 9.0 # [15] CROISSANT..PANCAKES
+1F985..1F991 ; 9.0 # [13] EAGLE..SQUID
+
+# Total code points: 7500
+
+# ================================================
+
+# Age=V10_0
+
+# Newly assigned in Unicode 10.0.0 (June, 2017)
+
+0860..086A ; 10.0 # [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
+09FC..09FD ; 10.0 # [2] BENGALI LETTER VEDIC ANUSVARA..BENGALI ABBREVIATION SIGN
+0AFA..0AFF ; 10.0 # [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
+0D00 ; 10.0 # MALAYALAM SIGN COMBINING ANUSVARA ABOVE
+0D3B..0D3C ; 10.0 # [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
+1CF7 ; 10.0 # VEDIC SIGN ATIKRAMA
+1DF6..1DF9 ; 10.0 # [4] COMBINING KAVYKA ABOVE RIGHT..COMBINING WIDE INVERTED BRIDGE BELOW
+20BF ; 10.0 # BITCOIN SIGN
+23FF ; 10.0 # OBSERVER EYE SYMBOL
+2BD2 ; 10.0 # GROUP MARK
+2E45..2E49 ; 10.0 # [5] INVERTED LOW KAVYKA..DOUBLE STACKED COMMA
+312E ; 10.0 # BOPOMOFO LETTER O WITH DOT ABOVE
+9FD6..9FEA ; 10.0 # [21] CJK UNIFIED IDEOGRAPH-9FD6..CJK UNIFIED IDEOGRAPH-9FEA
+1032D..1032F ; 10.0 # [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
+11A00..11A47 ; 10.0 # [72] ZANABAZAR SQUARE LETTER A..ZANABAZAR SQUARE SUBJOINER
+11A50..11A83 ; 10.0 # [52] SOYOMBO LETTER A..SOYOMBO LETTER KSSA
+11A86..11A9C ; 10.0 # [23] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO MARK DOUBLE SHAD
+11A9E..11AA2 ; 10.0 # [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+11D00..11D06 ; 10.0 # [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; 10.0 # [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D36 ; 10.0 # [44] MASARAM GONDI LETTER AU..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; 10.0 # MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; 10.0 # [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D47 ; 10.0 # [9] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI RA-KARA
+11D50..11D59 ; 10.0 # [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+16FE1 ; 10.0 # NUSHU ITERATION MARK
+1B002..1B11E ; 10.0 # [285] HENTAIGANA LETTER A-1..HENTAIGANA LETTER N-MU-MO-2
+1B170..1B2FB ; 10.0 # [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+1F260..1F265 ; 10.0 # [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F6D3..1F6D4 ; 10.0 # [2] STUPA..PAGODA
+1F6F7..1F6F8 ; 10.0 # [2] SLED..FLYING SAUCER
+1F900..1F90B ; 10.0 # [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F91F ; 10.0 # I LOVE YOU HAND SIGN
+1F928..1F92F ; 10.0 # [8] FACE WITH ONE EYEBROW RAISED..SHOCKED FACE WITH EXPLODING HEAD
+1F931..1F932 ; 10.0 # [2] BREAST-FEEDING..PALMS UP TOGETHER
+1F94C ; 10.0 # CURLING STONE
+1F95F..1F96B ; 10.0 # [13] DUMPLING..CANNED FOOD
+1F992..1F997 ; 10.0 # [6] GIRAFFE FACE..CRICKET
+1F9D0..1F9E6 ; 10.0 # [23] FACE WITH MONOCLE..SOCKS
+2CEB0..2EBE0 ; 10.0 # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+
+# Total code points: 8518
+
# EOF
diff --git a/util/unicode/data/DerivedNormalizationProps.txt b/util/unicode/data/DerivedNormalizationProps.txt
index 6492493da3..941c310b96 100644
--- a/util/unicode/data/DerivedNormalizationProps.txt
+++ b/util/unicode/data/DerivedNormalizationProps.txt
@@ -1,10 +1,11 @@
-# DerivedNormalizationProps-8.0.0.txt
-# Date: 2015-02-13, 13:30:23 GMT [MD]
+# DerivedNormalizationProps-10.0.0.txt
+# Date: 2017-02-14, 04:26:07 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
# ================================================
@@ -1679,12 +1680,12 @@ FFED..FFEE ; NFKD_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI
1F16A..1F16B ; NFKD_QC; N # So [2] RAISED MC SIGN..RAISED MD SIGN
1F190 ; NFKD_QC; N # So SQUARE DJ
1F200..1F202 ; NFKD_QC; N # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
-1F210..1F23A ; NFKD_QC; N # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F210..1F23B ; NFKD_QC; N # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; NFKD_QC; N # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; NFKD_QC; N # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
2F800..2FA1D ; NFKD_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 16893
+# Total code points: 16894
# ================================================
@@ -2082,12 +2083,12 @@ FFED..FFEE ; NFKC_QC; N # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CI
1F16A..1F16B ; NFKC_QC; N # So [2] RAISED MC SIGN..RAISED MD SIGN
1F190 ; NFKC_QC; N # So SQUARE DJ
1F200..1F202 ; NFKC_QC; N # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
-1F210..1F23A ; NFKC_QC; N # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F210..1F23B ; NFKC_QC; N # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; NFKC_QC; N # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; NFKC_QC; N # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
2F800..2FA1D ; NFKC_QC; N # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 4793
+# Total code points: 4794
# ================================================
@@ -3513,6 +3514,14 @@ FFE3 ; Expands_On_NFKC # Sk FULLWIDTH MACRON
17B4..17B5 ; NFKC_CF; # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
180B..180D ; NFKC_CF; # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
180E ; NFKC_CF; # Cf MONGOLIAN VOWEL SEPARATOR
+1C80 ; NFKC_CF; 0432 # L& CYRILLIC SMALL LETTER ROUNDED VE
+1C81 ; NFKC_CF; 0434 # L& CYRILLIC SMALL LETTER LONG-LEGGED DE
+1C82 ; NFKC_CF; 043E # L& CYRILLIC SMALL LETTER NARROW O
+1C83 ; NFKC_CF; 0441 # L& CYRILLIC SMALL LETTER WIDE ES
+1C84..1C85 ; NFKC_CF; 0442 # L& [2] CYRILLIC SMALL LETTER TALL TE..CYRILLIC SMALL LETTER THREE-LEGGED TE
+1C86 ; NFKC_CF; 044A # L& CYRILLIC SMALL LETTER TALL HARD SIGN
+1C87 ; NFKC_CF; 0463 # L& CYRILLIC SMALL LETTER TALL YAT
+1C88 ; NFKC_CF; A64B # L& CYRILLIC SMALL LETTER UNBLENDED UK
1D2C ; NFKC_CF; 0061 # Lm MODIFIER LETTER CAPITAL A
1D2D ; NFKC_CF; 00E6 # Lm MODIFIER LETTER CAPITAL AE
1D2E ; NFKC_CF; 0062 # Lm MODIFIER LETTER CAPITAL B
@@ -5263,6 +5272,7 @@ A7AA ; NFKC_CF; 0266 # L& LATIN CAPITAL LETTER H WITH H
A7AB ; NFKC_CF; 025C # L& LATIN CAPITAL LETTER REVERSED OPEN E
A7AC ; NFKC_CF; 0261 # L& LATIN CAPITAL LETTER SCRIPT G
A7AD ; NFKC_CF; 026C # L& LATIN CAPITAL LETTER L WITH BELT
+A7AE ; NFKC_CF; 026A # L& LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0 ; NFKC_CF; 029E # L& LATIN CAPITAL LETTER TURNED K
A7B1 ; NFKC_CF; 0287 # L& LATIN CAPITAL LETTER TURNED T
A7B2 ; NFKC_CF; 029D # L& LATIN CAPITAL LETTER J WITH CROSSED-TAIL
@@ -6731,6 +6741,42 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] <reserved-FFF0>..<reserved-FF
10425 ; NFKC_CF; 1044D # L& DESERET CAPITAL LETTER ENG
10426 ; NFKC_CF; 1044E # L& DESERET CAPITAL LETTER OI
10427 ; NFKC_CF; 1044F # L& DESERET CAPITAL LETTER EW
+104B0 ; NFKC_CF; 104D8 # L& OSAGE CAPITAL LETTER A
+104B1 ; NFKC_CF; 104D9 # L& OSAGE CAPITAL LETTER AI
+104B2 ; NFKC_CF; 104DA # L& OSAGE CAPITAL LETTER AIN
+104B3 ; NFKC_CF; 104DB # L& OSAGE CAPITAL LETTER AH
+104B4 ; NFKC_CF; 104DC # L& OSAGE CAPITAL LETTER BRA
+104B5 ; NFKC_CF; 104DD # L& OSAGE CAPITAL LETTER CHA
+104B6 ; NFKC_CF; 104DE # L& OSAGE CAPITAL LETTER EHCHA
+104B7 ; NFKC_CF; 104DF # L& OSAGE CAPITAL LETTER E
+104B8 ; NFKC_CF; 104E0 # L& OSAGE CAPITAL LETTER EIN
+104B9 ; NFKC_CF; 104E1 # L& OSAGE CAPITAL LETTER HA
+104BA ; NFKC_CF; 104E2 # L& OSAGE CAPITAL LETTER HYA
+104BB ; NFKC_CF; 104E3 # L& OSAGE CAPITAL LETTER I
+104BC ; NFKC_CF; 104E4 # L& OSAGE CAPITAL LETTER KA
+104BD ; NFKC_CF; 104E5 # L& OSAGE CAPITAL LETTER EHKA
+104BE ; NFKC_CF; 104E6 # L& OSAGE CAPITAL LETTER KYA
+104BF ; NFKC_CF; 104E7 # L& OSAGE CAPITAL LETTER LA
+104C0 ; NFKC_CF; 104E8 # L& OSAGE CAPITAL LETTER MA
+104C1 ; NFKC_CF; 104E9 # L& OSAGE CAPITAL LETTER NA
+104C2 ; NFKC_CF; 104EA # L& OSAGE CAPITAL LETTER O
+104C3 ; NFKC_CF; 104EB # L& OSAGE CAPITAL LETTER OIN
+104C4 ; NFKC_CF; 104EC # L& OSAGE CAPITAL LETTER PA
+104C5 ; NFKC_CF; 104ED # L& OSAGE CAPITAL LETTER EHPA
+104C6 ; NFKC_CF; 104EE # L& OSAGE CAPITAL LETTER SA
+104C7 ; NFKC_CF; 104EF # L& OSAGE CAPITAL LETTER SHA
+104C8 ; NFKC_CF; 104F0 # L& OSAGE CAPITAL LETTER TA
+104C9 ; NFKC_CF; 104F1 # L& OSAGE CAPITAL LETTER EHTA
+104CA ; NFKC_CF; 104F2 # L& OSAGE CAPITAL LETTER TSA
+104CB ; NFKC_CF; 104F3 # L& OSAGE CAPITAL LETTER EHTSA
+104CC ; NFKC_CF; 104F4 # L& OSAGE CAPITAL LETTER TSHA
+104CD ; NFKC_CF; 104F5 # L& OSAGE CAPITAL LETTER DHA
+104CE ; NFKC_CF; 104F6 # L& OSAGE CAPITAL LETTER U
+104CF ; NFKC_CF; 104F7 # L& OSAGE CAPITAL LETTER WA
+104D0 ; NFKC_CF; 104F8 # L& OSAGE CAPITAL LETTER KHA
+104D1 ; NFKC_CF; 104F9 # L& OSAGE CAPITAL LETTER GHA
+104D2 ; NFKC_CF; 104FA # L& OSAGE CAPITAL LETTER ZA
+104D3 ; NFKC_CF; 104FB # L& OSAGE CAPITAL LETTER ZHA
10C80 ; NFKC_CF; 10CC0 # L& OLD HUNGARIAN CAPITAL LETTER A
10C81 ; NFKC_CF; 10CC1 # L& OLD HUNGARIAN CAPITAL LETTER AA
10C82 ; NFKC_CF; 10CC2 # L& OLD HUNGARIAN CAPITAL LETTER EB
@@ -7819,6 +7865,40 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] <reserved-FFF0>..<reserved-FF
1D7FD ; NFKC_CF; 0037 # Nd MATHEMATICAL MONOSPACE DIGIT SEVEN
1D7FE ; NFKC_CF; 0038 # Nd MATHEMATICAL MONOSPACE DIGIT EIGHT
1D7FF ; NFKC_CF; 0039 # Nd MATHEMATICAL MONOSPACE DIGIT NINE
+1E900 ; NFKC_CF; 1E922 # L& ADLAM CAPITAL LETTER ALIF
+1E901 ; NFKC_CF; 1E923 # L& ADLAM CAPITAL LETTER DAALI
+1E902 ; NFKC_CF; 1E924 # L& ADLAM CAPITAL LETTER LAAM
+1E903 ; NFKC_CF; 1E925 # L& ADLAM CAPITAL LETTER MIIM
+1E904 ; NFKC_CF; 1E926 # L& ADLAM CAPITAL LETTER BA
+1E905 ; NFKC_CF; 1E927 # L& ADLAM CAPITAL LETTER SINNYIIYHE
+1E906 ; NFKC_CF; 1E928 # L& ADLAM CAPITAL LETTER PE
+1E907 ; NFKC_CF; 1E929 # L& ADLAM CAPITAL LETTER BHE
+1E908 ; NFKC_CF; 1E92A # L& ADLAM CAPITAL LETTER RA
+1E909 ; NFKC_CF; 1E92B # L& ADLAM CAPITAL LETTER E
+1E90A ; NFKC_CF; 1E92C # L& ADLAM CAPITAL LETTER FA
+1E90B ; NFKC_CF; 1E92D # L& ADLAM CAPITAL LETTER I
+1E90C ; NFKC_CF; 1E92E # L& ADLAM CAPITAL LETTER O
+1E90D ; NFKC_CF; 1E92F # L& ADLAM CAPITAL LETTER DHA
+1E90E ; NFKC_CF; 1E930 # L& ADLAM CAPITAL LETTER YHE
+1E90F ; NFKC_CF; 1E931 # L& ADLAM CAPITAL LETTER WAW
+1E910 ; NFKC_CF; 1E932 # L& ADLAM CAPITAL LETTER NUN
+1E911 ; NFKC_CF; 1E933 # L& ADLAM CAPITAL LETTER KAF
+1E912 ; NFKC_CF; 1E934 # L& ADLAM CAPITAL LETTER YA
+1E913 ; NFKC_CF; 1E935 # L& ADLAM CAPITAL LETTER U
+1E914 ; NFKC_CF; 1E936 # L& ADLAM CAPITAL LETTER JIIM
+1E915 ; NFKC_CF; 1E937 # L& ADLAM CAPITAL LETTER CHI
+1E916 ; NFKC_CF; 1E938 # L& ADLAM CAPITAL LETTER HA
+1E917 ; NFKC_CF; 1E939 # L& ADLAM CAPITAL LETTER QAAF
+1E918 ; NFKC_CF; 1E93A # L& ADLAM CAPITAL LETTER GA
+1E919 ; NFKC_CF; 1E93B # L& ADLAM CAPITAL LETTER NYA
+1E91A ; NFKC_CF; 1E93C # L& ADLAM CAPITAL LETTER TU
+1E91B ; NFKC_CF; 1E93D # L& ADLAM CAPITAL LETTER NHA
+1E91C ; NFKC_CF; 1E93E # L& ADLAM CAPITAL LETTER VA
+1E91D ; NFKC_CF; 1E93F # L& ADLAM CAPITAL LETTER KHA
+1E91E ; NFKC_CF; 1E940 # L& ADLAM CAPITAL LETTER GBE
+1E91F ; NFKC_CF; 1E941 # L& ADLAM CAPITAL LETTER ZAL
+1E920 ; NFKC_CF; 1E942 # L& ADLAM CAPITAL LETTER KPO
+1E921 ; NFKC_CF; 1E943 # L& ADLAM CAPITAL LETTER SHA
1EE00 ; NFKC_CF; 0627 # Lo ARABIC MATHEMATICAL ALEF
1EE01 ; NFKC_CF; 0628 # Lo ARABIC MATHEMATICAL BEH
1EE02 ; NFKC_CF; 062C # Lo ARABIC MATHEMATICAL JEEM
@@ -8083,6 +8163,7 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] <reserved-FFF0>..<reserved-FF
1F238 ; NFKC_CF; 7533 # So SQUARED CJK UNIFIED IDEOGRAPH-7533
1F239 ; NFKC_CF; 5272 # So SQUARED CJK UNIFIED IDEOGRAPH-5272
1F23A ; NFKC_CF; 55B6 # So SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F23B ; NFKC_CF; 914D # So SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240 ; NFKC_CF; 3014 672C 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
1F241 ; NFKC_CF; 3014 4E09 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
1F242 ; NFKC_CF; 3014 4E8C 3015 # So TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
@@ -8634,7 +8715,7 @@ E0080..E00FF ; NFKC_CF; # Cn [128] <reserved-E0080>..<reserved-E
E0100..E01EF ; NFKC_CF; # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
E01F0..E0FFF ; NFKC_CF; # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-# Total code points: 10146
+# Total code points: 10227
# ================================================
@@ -8972,6 +9053,7 @@ E01F0..E0FFF ; NFKC_CF; # Cn [3600] <reserved-E01F0>..<reserved-
17B4..17B5 ; Changes_When_NFKC_Casefolded # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
180B..180D ; Changes_When_NFKC_Casefolded # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
180E ; Changes_When_NFKC_Casefolded # Cf MONGOLIAN VOWEL SEPARATOR
+1C80..1C88 ; Changes_When_NFKC_Casefolded # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
1D2C..1D2E ; Changes_When_NFKC_Casefolded # Lm [3] MODIFIER LETTER CAPITAL A..MODIFIER LETTER CAPITAL B
1D30..1D3A ; Changes_When_NFKC_Casefolded # Lm [11] MODIFIER LETTER CAPITAL D..MODIFIER LETTER CAPITAL N
1D3C..1D4D ; Changes_When_NFKC_Casefolded # Lm [18] MODIFIER LETTER CAPITAL O..MODIFIER LETTER SMALL G
@@ -9389,7 +9471,7 @@ A7A2 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER K W
A7A4 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
A7A6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
A7A8 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
-A7AA..A7AD ; Changes_When_NFKC_Casefolded # L& [4] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER L WITH BELT
+A7AA..A7AE ; Changes_When_NFKC_Casefolded # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0..A7B4 ; Changes_When_NFKC_Casefolded # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
A7B6 ; Changes_When_NFKC_Casefolded # L& LATIN CAPITAL LETTER OMEGA
A7F8..A7F9 ; Changes_When_NFKC_Casefolded # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
@@ -9519,6 +9601,7 @@ FFE9..FFEC ; Changes_When_NFKC_Casefolded # Sm [4] HALFWIDTH LEFTWARDS ARRO
FFED..FFEE ; Changes_When_NFKC_Casefolded # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] <reserved-FFF0>..<reserved-FFF8>
10400..10427 ; Changes_When_NFKC_Casefolded # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+104B0..104D3 ; Changes_When_NFKC_Casefolded # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
10C80..10CB2 ; Changes_When_NFKC_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
118A0..118BF ; Changes_When_NFKC_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
1BCA0..1BCA3 ; Changes_When_NFKC_Casefolded # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
@@ -9566,6 +9649,7 @@ FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] <reserved-FFF0>..<reserv
1D7C3 ; Changes_When_NFKC_Casefolded # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
1D7C4..1D7CB ; Changes_When_NFKC_Casefolded # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
1D7CE..1D7FF ; Changes_When_NFKC_Casefolded # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1E900..1E921 ; Changes_When_NFKC_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
1EE00..1EE03 ; Changes_When_NFKC_Casefolded # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
1EE05..1EE1F ; Changes_When_NFKC_Casefolded # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
1EE21..1EE22 ; Changes_When_NFKC_Casefolded # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
@@ -9605,7 +9689,7 @@ FFF0..FFF8 ; Changes_When_NFKC_Casefolded # Cn [9] <reserved-FFF0>..<reserv
1F16A..1F16B ; Changes_When_NFKC_Casefolded # So [2] RAISED MC SIGN..RAISED MD SIGN
1F190 ; Changes_When_NFKC_Casefolded # So SQUARE DJ
1F200..1F202 ; Changes_When_NFKC_Casefolded # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
-1F210..1F23A ; Changes_When_NFKC_Casefolded # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F210..1F23B ; Changes_When_NFKC_Casefolded # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; Changes_When_NFKC_Casefolded # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; Changes_When_NFKC_Casefolded # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
2F800..2FA1D ; Changes_When_NFKC_Casefolded # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
@@ -9617,6 +9701,6 @@ E0080..E00FF ; Changes_When_NFKC_Casefolded # Cn [128] <reserved-E0080>..<reser
E0100..E01EF ; Changes_When_NFKC_Casefolded # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
E01F0..E0FFF ; Changes_When_NFKC_Casefolded # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-# Total code points: 10146
+# Total code points: 10227
# EOF
diff --git a/util/unicode/data/GraphemeBreakProperty.txt b/util/unicode/data/GraphemeBreakProperty.txt
index fba2ee8793..32bb12e47e 100644
--- a/util/unicode/data/GraphemeBreakProperty.txt
+++ b/util/unicode/data/GraphemeBreakProperty.txt
@@ -1,10 +1,11 @@
-# GraphemeBreakProperty-8.0.0.txt
-# Date: 2015-02-13, 13:47:14 GMT [MD]
+# GraphemeBreakProperty-10.0.0.txt
+# Date: 2017-03-12, 07:03:41 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
# ================================================
@@ -17,6 +18,21 @@
# ================================================
+0600..0605 ; Prepend # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
+06DD ; Prepend # Cf ARABIC END OF AYAH
+070F ; Prepend # Cf SYRIAC ABBREVIATION MARK
+08E2 ; Prepend # Cf ARABIC DISPUTED END OF AYAH
+0D4E ; Prepend # Lo MALAYALAM LETTER DOT REPH
+110BD ; Prepend # Cf KAITHI NUMBER SIGN
+111C2..111C3 ; Prepend # Lo [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA
+11A3A ; Prepend # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A86..11A89 ; Prepend # Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11D46 ; Prepend # Lo MASARAM GONDI REPHA
+
+# Total code points: 19
+
+# ================================================
+
000D ; CR # Cc <control-000D>
# Total code points: 1
@@ -34,10 +50,7 @@
000E..001F ; Control # Cc [18] <control-000E>..<control-001F>
007F..009F ; Control # Cc [33] <control-007F>..<control-009F>
00AD ; Control # Cf SOFT HYPHEN
-0600..0605 ; Control # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
061C ; Control # Cf ARABIC LETTER MARK
-06DD ; Control # Cf ARABIC END OF AYAH
-070F ; Control # Cf SYRIAC ABBREVIATION MARK
180E ; Control # Cf MONGOLIAN VOWEL SEPARATOR
200B ; Control # Cf ZERO WIDTH SPACE
200E..200F ; Control # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
@@ -51,17 +64,15 @@ D800..DFFF ; Control # Cs [2048] <surrogate-D800>..<surrogate-DFFF>
FEFF ; Control # Cf ZERO WIDTH NO-BREAK SPACE
FFF0..FFF8 ; Control # Cn [9] <reserved-FFF0>..<reserved-FFF8>
FFF9..FFFB ; Control # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
-110BD ; Control # Cf KAITHI NUMBER SIGN
1BCA0..1BCA3 ; Control # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
1D173..1D17A ; Control # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
E0000 ; Control # Cn <reserved-E0000>
E0001 ; Control # Cf LANGUAGE TAG
E0002..E001F ; Control # Cn [30] <reserved-E0002>..<reserved-E001F>
-E0020..E007F ; Control # Cf [96] TAG SPACE..CANCEL TAG
E0080..E00FF ; Control # Cn [128] <reserved-E0080>..<reserved-E00FF>
E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
-# Total code points: 6030
+# Total code points: 5925
# ================================================
@@ -89,6 +100,7 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+08D4..08E1 ; Extend # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE
093C ; Extend # Mn DEVANAGARI SIGN NUKTA
@@ -117,6 +129,7 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
0AC7..0AC8 ; Extend # Mn [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
0ACD ; Extend # Mn GUJARATI SIGN VIRAMA
0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AFA..0AFF ; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU
0B3C ; Extend # Mn ORIYA SIGN NUKTA
0B3E ; Extend # Mc ORIYA VOWEL SIGN AA
@@ -145,7 +158,8 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-0D01 ; Extend # Mn MALAYALAM SIGN CANDRABINDU
+0D00..0D01 ; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
+0D3B..0D3C ; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
0D3E ; Extend # Mc MALAYALAM VOWEL SIGN AA
0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D4D ; Extend # Mn MALAYALAM SIGN VIRAMA
@@ -195,6 +209,7 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
17DD ; Extend # Mn KHMER SIGN ATTHACAN
180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA
1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
1927..1928 ; Extend # Mn [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
@@ -233,9 +248,9 @@ E01F0..E0FFF ; Control # Cn [3600] <reserved-E01F0>..<reserved-E0FFF>
1CED ; Extend # Mn VEDIC SIGN TIRYAK
1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE
1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-1DC0..1DF5 ; Extend # Mn [54] COMBINING DOTTED GRAVE ACCENT..COMBINING UP TACK ABOVE
-1DFC..1DFF ; Extend # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-200C..200D ; Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C ; Extend # Cf ZERO WIDTH NON-JOINER
20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
20E1 ; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE
@@ -256,7 +271,7 @@ A802 ; Extend # Mn SYLOTI NAGRI SIGN DVISVARA
A806 ; Extend # Mn SYLOTI NAGRI SIGN HASANTA
A80B ; Extend # Mn SYLOTI NAGRI SIGN ANUSVARA
A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
-A8C4 ; Extend # Mn SAURASHTRA SIGN VIRAMA
+A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
@@ -309,6 +324,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1122F..11231 ; Extend # Mn [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
11234 ; Extend # Mn KHOJKI SIGN ANUSVARA
11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; Extend # Mn KHOJKI SIGN SUKUN
112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA
112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
11300..11301 ; Extend # Mn [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
@@ -318,6 +334,9 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11357 ; Extend # Mc GRANTHA AU LENGTH MARK
11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11438..1143F ; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11442..11444 ; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11446 ; Extend # Mn NEWA SIGN NUKTA
114B0 ; Extend # Mc TIRHUTA VOWEL SIGN AA
114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
114BA ; Extend # Mn TIRHUTA VOWEL SIGN SHORT E
@@ -339,6 +358,27 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1171D..1171F ; Extend # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11A01..11A06 ; Extend # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
+11A09..11A0A ; Extend # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A33..11A38 ; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A3B..11A3E ; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; Extend # Mn ZANABAZAR SQUARE SUBJOINER
+11A51..11A56 ; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA
+11C92..11CA7 ; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CAA..11CB0 ; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB2..11CB3 ; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB5..11CB6 ; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D36 ; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Extend # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D47 ; Extend # Mn MASARAM GONDI RA-KARA
16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
@@ -356,10 +396,17 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK
1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1610
+# Total code points: 1901
# ================================================
@@ -444,6 +491,7 @@ E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
1C34..1C35 ; SpacingMark # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
1CE1 ; SpacingMark # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
1CF2..1CF3 ; SpacingMark # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF7 ; SpacingMark # Mc VEDIC SIGN ATIKRAMA
A823..A824 ; SpacingMark # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A827 ; SpacingMark # Mc SYLOTI NAGRI VOWEL SIGN OO
A880..A881 ; SpacingMark # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
@@ -482,6 +530,9 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK
11347..11348 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
1134B..1134D ; SpacingMark # Mc [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
11362..11363 ; SpacingMark # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
+11435..11437 ; SpacingMark # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11440..11441 ; SpacingMark # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11445 ; SpacingMark # Mc NEWA SIGN VISARGA
114B1..114B2 ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II
114B9 ; SpacingMark # Mc TIRHUTA VOWEL SIGN E
114BB..114BC ; SpacingMark # Mc [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O
@@ -498,11 +549,20 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK
116B6 ; SpacingMark # Mc TAKRI SIGN VIRAMA
11720..11721 ; SpacingMark # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
11726 ; SpacingMark # Mc AHOM VOWEL SIGN E
+11A07..11A08 ; SpacingMark # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
+11A39 ; SpacingMark # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A57..11A58 ; SpacingMark # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A97 ; SpacingMark # Mc SOYOMBO SIGN VISARGA
+11C2F ; SpacingMark # Mc BHAIKSUKI VOWEL SIGN AA
+11C3E ; SpacingMark # Mc BHAIKSUKI SIGN VISARGA
+11CA9 ; SpacingMark # Mc MARCHEN SUBJOINED LETTER YA
+11CB1 ; SpacingMark # Mc MARCHEN VOWEL SIGN I
+11CB4 ; SpacingMark # Mc MARCHEN VOWEL SIGN O
16F51..16F7E ; SpacingMark # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
1D166 ; SpacingMark # Mc MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
1D16D ; SpacingMark # Mc MUSICAL SYMBOL COMBINING AUGMENTATION DOT
-# Total code points: 330
+# Total code points: 348
# ================================================
@@ -1333,4 +1393,83 @@ D789..D7A3 ; LVT # Lo [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH
# Total code points: 10773
+# ================================================
+
+261D ; E_Base # So WHITE UP POINTING INDEX
+26F9 ; E_Base # So PERSON WITH BALL
+270A..270D ; E_Base # So [4] RAISED FIST..WRITING HAND
+1F385 ; E_Base # So FATHER CHRISTMAS
+1F3C2..1F3C4 ; E_Base # So [3] SNOWBOARDER..SURFER
+1F3C7 ; E_Base # So HORSE RACING
+1F3CA..1F3CC ; E_Base # So [3] SWIMMER..GOLFER
+1F442..1F443 ; E_Base # So [2] EAR..NOSE
+1F446..1F450 ; E_Base # So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN
+1F46E ; E_Base # So POLICE OFFICER
+1F470..1F478 ; E_Base # So [9] BRIDE WITH VEIL..PRINCESS
+1F47C ; E_Base # So BABY ANGEL
+1F481..1F483 ; E_Base # So [3] INFORMATION DESK PERSON..DANCER
+1F485..1F487 ; E_Base # So [3] NAIL POLISH..HAIRCUT
+1F4AA ; E_Base # So FLEXED BICEPS
+1F574..1F575 ; E_Base # So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY
+1F57A ; E_Base # So MAN DANCING
+1F590 ; E_Base # So RAISED HAND WITH FINGERS SPLAYED
+1F595..1F596 ; E_Base # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+1F645..1F647 ; E_Base # So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY
+1F64B..1F64F ; E_Base # So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS
+1F6A3 ; E_Base # So ROWBOAT
+1F6B4..1F6B6 ; E_Base # So [3] BICYCLIST..PEDESTRIAN
+1F6C0 ; E_Base # So BATH
+1F6CC ; E_Base # So SLEEPING ACCOMMODATION
+1F918..1F91C ; E_Base # So [5] SIGN OF THE HORNS..RIGHT-FACING FIST
+1F91E..1F91F ; E_Base # So [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN
+1F926 ; E_Base # So FACE PALM
+1F930..1F939 ; E_Base # So [10] PREGNANT WOMAN..JUGGLING
+1F93D..1F93E ; E_Base # So [2] WATER POLO..HANDBALL
+1F9D1..1F9DD ; E_Base # So [13] ADULT..ELF
+
+# Total code points: 98
+
+# ================================================
+
+1F3FB..1F3FF ; E_Modifier # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+
+# Total code points: 5
+
+# ================================================
+
+200D ; ZWJ # Cf ZERO WIDTH JOINER
+
+# Total code points: 1
+
+# ================================================
+
+2640 ; Glue_After_Zwj # So FEMALE SIGN
+2642 ; Glue_After_Zwj # So MALE SIGN
+2695..2696 ; Glue_After_Zwj # So [2] STAFF OF AESCULAPIUS..SCALES
+2708 ; Glue_After_Zwj # So AIRPLANE
+2764 ; Glue_After_Zwj # So HEAVY BLACK HEART
+1F308 ; Glue_After_Zwj # So RAINBOW
+1F33E ; Glue_After_Zwj # So EAR OF RICE
+1F373 ; Glue_After_Zwj # So COOKING
+1F393 ; Glue_After_Zwj # So GRADUATION CAP
+1F3A4 ; Glue_After_Zwj # So MICROPHONE
+1F3A8 ; Glue_After_Zwj # So ARTIST PALETTE
+1F3EB ; Glue_After_Zwj # So SCHOOL
+1F3ED ; Glue_After_Zwj # So FACTORY
+1F48B ; Glue_After_Zwj # So KISS MARK
+1F4BB..1F4BC ; Glue_After_Zwj # So [2] PERSONAL COMPUTER..BRIEFCASE
+1F527 ; Glue_After_Zwj # So WRENCH
+1F52C ; Glue_After_Zwj # So MICROSCOPE
+1F5E8 ; Glue_After_Zwj # So LEFT SPEECH BUBBLE
+1F680 ; Glue_After_Zwj # So ROCKET
+1F692 ; Glue_After_Zwj # So FIRE ENGINE
+
+# Total code points: 22
+
+# ================================================
+
+1F466..1F469 ; E_Base_GAZ # So [4] BOY..WOMAN
+
+# Total code points: 4
+
# EOF
diff --git a/util/unicode/data/LineBreak.txt b/util/unicode/data/LineBreak.txt
index b627f874d0..d80210bde3 100644
--- a/util/unicode/data/LineBreak.txt
+++ b/util/unicode/data/LineBreak.txt
@@ -1,45 +1,45 @@
-# LineBreak-8.0.0.txt
-# Date: 2015-02-13, 09:15:00 GMT [KW, LI]
+# LineBreak-10.0.0.txt
+# Date: 2017-03-08, 02:00:00 GMT [KW, LI]
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
#
# Line_Break Property
#
# This file is a normative contributory data file in the
# Unicode Character Database.
-# It contains both normative and informative data.
-#
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# The format is two fields separated by a semicolon.
# Field 0: Unicode code point value or range of code point values
# Field 1: Line_Break property, consisting of one of the following values:
-# Normative:
-# "BK", "CR", "LF", "CM", "SG", "GL", "CB", "SP", "ZW",
-# "NL", "WJ", "JL", "JV", "JT", "H2", "H3"
-# Informative:
-# "XX", "OP", "CL", "CP", "QU", "NS", "EX", "SY",
-# "IS", "PR", "PO", "NU", "AL", "ID", "IN", "HY",
-# "BB", "BA", "SA", "AI", "B2", "HL", "CJ", "RI"
+# Non-tailorable:
+# "BK", "CM", "CR", "GL", "LF", "NL", "SP", "WJ", "ZW", "ZWJ"
+# Tailorable:
+# "AI", "AL", "B2", "BA", "BB", "CB", "CJ", "CL", "CP", "EB",
+# "EM", "EX", "H2", "H3", "HL", "HY", "ID", "IN", "IS", "JL",
+# "JT", "JV", "NS", "NU", "OP", "PO", "PR", "QU", "RI", "SA",
+# "SG", "SY", "XX"
# - All code points, assigned and unassigned, that are not listed
-# explicitly are given the value "XX".
-# The unassigned code points that default to "ID" include ranges in the
-# following blocks:
-# CJK Unified Ideographs Extension A: U+3400..U+4DBF
-# CJK Unified Ideographs: U+4E00..U+9FFF
-# CJK Compatibility Ideographs: U+F900..U+FAFF
-# CJK Unified Ideographs Extension B: U+20000..U+2A6DF
-# CJK Unified Ideographs Extension C: U+2A700..U+2B73F
-# CJK Unified Ideographs Extension D: U+2B740..U+2B81F
-# CJK Unified Ideographs Extension E: U+2B820..U+2CEAF
-# CJK Compatibility Ideographs Supplement: U+2F800..U+2FA1F
-# and any other reserved code points on
-# Planes 2 and 3: U+20000..U+2FFFD
-# U+30000..U+3FFFD
-# The unassigned code points that default to "PR" comprise a range in the
-# following block:
-# Currency Symbols: U+20A0..U+20CF
-# - Character ranges are specified as for other property files in
-# the Unicode Character Database.
+# explicitly are given the value "XX".
+# - The unassigned code points in the following blocks default to "ID":
+# CJK Unified Ideographs Extension A: U+3400..U+4DBF
+# CJK Unified Ideographs: U+4E00..U+9FFF
+# CJK Compatibility Ideographs: U+F900..U+FAFF
+# - All undesignated code points in Planes 2 and 3, whether inside or
+# outside of allocated blocks, default to "ID":
+# Plane 2: U+20000..U+2FFFD
+# Plane 3: U+30000..U+3FFFD
+# - All unassigned code points in the following Plane 1 range, whether
+# inside or outside of allocated blocks, also default to "ID":
+# Plane 1 range: U+1F000..U+1FFFD
+# - The unassigned code points in the following block default to "PR":
+# Currency Symbols: U+20A0..U+20CF
+#
+# Character ranges are specified as for other property files in the
+# Unicode Character Database.
#
# For legacy reasons, there are no spaces before or after the semicolon
# which separates the two fields. The comments following the number sign
@@ -273,7 +273,11 @@
0840..0858;AL # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
0859..085B;CM # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
085E;AL # Po MANDAIC PUNCTUATION
+0860..086A;AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4;AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD;AL # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08D4..08E1;CM # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
+08E2;AL # Cf ARABIC DISPUTED END OF AYAH
08E3..08FF;CM # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
0900..0902;CM # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
0903;CM # Mc DEVANAGARI SIGN VISARGA
@@ -324,6 +328,8 @@
09F9;PO # No BENGALI CURRENCY DENOMINATOR SIXTEEN
09FA;AL # So BENGALI ISSHAR
09FB;PR # Sc BENGALI GANDA MARK
+09FC;AL # Lo BENGALI LETTER VEDIC ANUSVARA
+09FD;AL # Po BENGALI ABBREVIATION SIGN
0A01..0A02;CM # Mn [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
0A03;CM # Mc GURMUKHI SIGN VISARGA
0A05..0A0A;AL # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
@@ -368,6 +374,7 @@
0AF0;AL # Po GUJARATI ABBREVIATION SIGN
0AF1;PR # Sc GUJARATI RUPEE SIGN
0AF9;AL # Lo GUJARATI LETTER ZHA
+0AFA..0AFF;CM # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
0B01;CM # Mn ORIYA SIGN CANDRABINDU
0B02..0B03;CM # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
0B05..0B0C;AL # Lo [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
@@ -436,6 +443,7 @@
0C66..0C6F;NU # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
0C78..0C7E;AL # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
0C7F;AL # So TELUGU SIGN TUUMU
+0C80;AL # Lo KANNADA SIGN SPACING CANDRABINDU
0C81;CM # Mn KANNADA SIGN CANDRABINDU
0C82..0C83;CM # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
0C85..0C8C;AL # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
@@ -458,11 +466,12 @@
0CE2..0CE3;CM # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
0CE6..0CEF;NU # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2;AL # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-0D01;CM # Mn MALAYALAM SIGN CANDRABINDU
+0D00..0D01;CM # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03;CM # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
0D05..0D0C;AL # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
0D0E..0D10;AL # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A;AL # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C;CM # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
0D3D;AL # Lo MALAYALAM SIGN AVAGRAHA
0D3E..0D40;CM # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
0D41..0D44;CM # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
@@ -470,11 +479,14 @@
0D4A..0D4C;CM # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
0D4D;CM # Mn MALAYALAM SIGN VIRAMA
0D4E;AL # Lo MALAYALAM LETTER DOT REPH
+0D4F;AL # So MALAYALAM SIGN PARA
+0D54..0D56;AL # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
0D57;CM # Mc MALAYALAM AU LENGTH MARK
+0D58..0D5E;AL # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
0D5F..0D61;AL # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D62..0D63;CM # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D66..0D6F;NU # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-0D70..0D75;AL # No [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
+0D70..0D78;AL # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
0D79;PO # So MALAYALAM DATE MARK
0D7A..0D7F;AL # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
0D82..0D83;CM # Mc [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
@@ -700,7 +712,9 @@
1820..1842;AL # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843;AL # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
1844..1877;AL # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
-1880..18A8;AL # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+1880..1884;AL # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886;CM # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8;AL # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
18A9;CM # Mn MONGOLIAN LETTER ALI GALI DAGALGA
18AA;AL # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
18B0..18F5;AL # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
@@ -802,6 +816,7 @@
1C5A..1C77;AL # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
1C78..1C7D;AL # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
1C7E..1C7F;BA # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
+1C80..1C88;AL # Ll [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
1CC0..1CC7;AL # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
1CD0..1CD2;CM # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
1CD3;AL # Po VEDIC SIGN NIHSHVASA
@@ -814,6 +829,7 @@
1CF2..1CF3;CM # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
1CF4;CM # Mn VEDIC TONE CANDRA ABOVE
1CF5..1CF6;AL # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7;CM # Mc VEDIC SIGN ATIKRAMA
1CF8..1CF9;CM # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
1D00..1D2B;AL # Ll [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
1D2C..1D6A;AL # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
@@ -822,8 +838,8 @@
1D79..1D7F;AL # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
1D80..1D9A;AL # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
1D9B..1DBF;AL # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-1DC0..1DF5;CM # Mn [54] COMBINING DOTTED GRAVE ACCENT..COMBINING UP TACK ABOVE
-1DFC..1DFF;CM # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1DC0..1DF9;CM # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF;CM # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
1E00..1EFF;AL # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
1F00..1F15;AL # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
1F18..1F1D;AL # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
@@ -855,7 +871,9 @@
2007;GL # Zs FIGURE SPACE
2008..200A;BA # Zs [3] PUNCTUATION SPACE..HAIR SPACE
200B;ZW # Cf ZERO WIDTH SPACE
-200C..200F;CM # Cf [4] ZERO WIDTH NON-JOINER..RIGHT-TO-LEFT MARK
+200C;CM # Cf ZERO WIDTH NON-JOINER
+200D;ZWJ # Cf ZERO WIDTH JOINER
+200E..200F;CM # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
2010;BA # Pd HYPHEN
2011;GL # Pd NON-BREAKING HYPHEN
2012..2013;BA # Pd [2] FIGURE DASH..EN DASH
@@ -928,7 +946,8 @@
20BB;PO # Sc NORDIC MARK SIGN
20BC..20BD;PR # Sc [2] MANAT SIGN..RUBLE SIGN
20BE;PO # Sc LARI SIGN
-20BF..20CF;PR # Cn [17] <reserved-20BF>..<reserved-20CF>
+20BF;PR # Sc BITCOIN SIGN
+20C0..20CF;PR # Cn [16] <reserved-20C0>..<reserved-20CF>
20D0..20DC;CM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0;CM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
20E1;CM # Mn COMBINING LEFT RIGHT ARROW ABOVE
@@ -1091,7 +1110,7 @@
23DC..23E1;AL # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
23E2..23EF;AL # So [14] WHITE TRAPEZIUM..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
23F0..23F3;ID # So [4] ALARM CLOCK..HOURGLASS WITH FLOWING SAND
-23F4..23FA;AL # So [7] BLACK MEDIUM LEFT-POINTING TRIANGLE..BLACK CIRCLE FOR RECORD
+23F4..23FF;AL # So [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
2400..2426;AL # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
2440..244A;AL # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
2460..249B;AI # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
@@ -1143,7 +1162,9 @@
2616..2617;AI # So [2] WHITE SHOGI PIECE..BLACK SHOGI PIECE
2618;ID # So SHAMROCK
2619;AL # So REVERSED ROTATED FLORAL HEART BULLET
-261A..261F;ID # So [6] BLACK LEFT POINTING INDEX..WHITE DOWN POINTING INDEX
+261A..261C;ID # So [3] BLACK LEFT POINTING INDEX..WHITE LEFT POINTING INDEX
+261D;EB # So WHITE UP POINTING INDEX
+261E..261F;ID # So [2] WHITE RIGHT POINTING INDEX..WHITE DOWN POINTING INDEX
2620..2638;AL # So [25] SKULL AND CROSSBONES..WHEEL OF DHARMA
2639..263B;ID # So [3] WHITE FROWNING FACE..BLACK SMILING FACE
263C..263F;AL # So [4] WHITE SUN WITH RAYS..MERCURY
@@ -1188,19 +1209,23 @@
26EB..26F0;AI # So [6] CASTLE..MOUNTAIN
26F1..26F5;ID # So [5] UMBRELLA ON GROUND..SAILBOAT
26F6;AI # So SQUARE FOUR CORNERS
-26F7..26FA;ID # So [4] SKIER..TENT
+26F7..26F8;ID # So [2] SKIER..ICE SKATE
+26F9;EB # So PERSON WITH BALL
+26FA;ID # So TENT
26FB..26FC;AI # So [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
26FD..26FF;ID # So [3] FUEL PUMP..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
2700..2704;ID # So [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
2705..2707;AL # So [3] WHITE HEAVY CHECK MARK..TAPE DRIVE
-2708..270D;ID # So [6] AIRPLANE..WRITING HAND
+2708..2709;ID # So [2] AIRPLANE..ENVELOPE
+270A..270D;EB # So [4] RAISED FIST..WRITING HAND
270E..2756;AL # So [73] LOWER RIGHT PENCIL..BLACK DIAMOND MINUS WHITE X
2757;AI # So HEAVY EXCLAMATION MARK SYMBOL
2758..275A;AL # So [3] LIGHT VERTICAL BAR..HEAVY VERTICAL BAR
275B..2760;QU # So [6] HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT..HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
2761;AL # So CURVED STEM PARAGRAPH SIGN ORNAMENT
2762..2763;EX # So [2] HEAVY EXCLAMATION MARK ORNAMENT..HEAVY HEART EXCLAMATION MARK ORNAMENT
-2764..2767;AL # So [4] HEAVY BLACK HEART..ROTATED FLORAL HEART BULLET
+2764;ID # So HEAVY BLACK HEART
+2765..2767;AL # So [3] ROTATED HEAVY BLACK HEART BULLET..ROTATED FLORAL HEART BULLET
2768;OP # Ps MEDIUM LEFT PARENTHESIS ORNAMENT
2769;CL # Pe MEDIUM RIGHT PARENTHESIS ORNAMENT
276A;OP # Ps MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
@@ -1277,7 +1302,7 @@
2B76..2B95;AL # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
2B98..2BB9;AL # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
2BBD..2BC8;AL # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
-2BCA..2BD1;AL # So [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
+2BCA..2BD2;AL # So [9] TOP HALF BLACK CIRCLE..GROUP MARK
2BEC..2BEF;AL # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2C00..2C2E;AL # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E;AL # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
@@ -1355,6 +1380,7 @@
2E40;BA # Pd DOUBLE HYPHEN
2E41;BA # Po REVERSED COMMA
2E42;OP # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E49;BA # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
2E80..2E99;ID # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP
2E9B..2EF3;ID # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
2F00..2FD5;ID # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
@@ -1453,7 +1479,7 @@
30FC;CJ # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
30FD..30FE;NS # Lm [2] KATAKANA ITERATION MARK..KATAKANA VOICED ITERATION MARK
30FF;ID # Lo KATAKANA DIGRAPH KOTO
-3105..312D;ID # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3105..312E;ID # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
3131..318E;ID # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
3190..3191;ID # So [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
3192..3195;ID # No [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
@@ -1476,8 +1502,8 @@
3400..4DB5;ID # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
4DB6..4DBF;ID # Cn [10] <reserved-4DB6>..<reserved-4DBF>
4DC0..4DFF;AL # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
-4E00..9FD5;ID # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
-9FD6..9FFF;ID # Cn [42] <reserved-9FD6>..<reserved-9FFF>
+4E00..9FEA;ID # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
+9FEB..9FFF;ID # Cn [21] <reserved-9FEB>..<reserved-9FFF>
A000..A014;ID # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015;NS # Lm YI SYLLABLE WU
A016..A48C;ID # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -1519,7 +1545,7 @@ A788;AL # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
A789..A78A;AL # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
A78B..A78E;AL # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F;AL # Lo LATIN LETTER SINOLOGICAL DOT
-A790..A7AD;AL # L& [30] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER L WITH BELT
+A790..A7AE;AL # L& [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0..A7B7;AL # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
A7F7;AL # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9;AL # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
@@ -1546,7 +1572,7 @@ A876..A877;EX # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD
A880..A881;CM # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A882..A8B3;AL # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
A8B4..A8C3;CM # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-A8C4;CM # Mn SAURASHTRA SIGN VIRAMA
+A8C4..A8C5;CM # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8CE..A8CF;BA # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
A8D0..A8D9;NU # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
A8E0..A8F1;CM # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
@@ -2574,16 +2600,16 @@ FF62;OP # Ps HALFWIDTH LEFT CORNER BRACKET
FF63;CL # Pe HALFWIDTH RIGHT CORNER BRACKET
FF64;CL # Po HALFWIDTH IDEOGRAPHIC COMMA
FF65;NS # Po HALFWIDTH KATAKANA MIDDLE DOT
-FF66;AL # Lo HALFWIDTH KATAKANA LETTER WO
+FF66;ID # Lo HALFWIDTH KATAKANA LETTER WO
FF67..FF6F;CJ # Lo [9] HALFWIDTH KATAKANA LETTER SMALL A..HALFWIDTH KATAKANA LETTER SMALL TU
FF70;CJ # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-FF71..FF9D;AL # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
+FF71..FF9D;ID # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
FF9E..FF9F;NS # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
-FFA0..FFBE;AL # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
-FFC2..FFC7;AL # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
-FFCA..FFCF;AL # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
-FFD2..FFD7;AL # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
-FFDA..FFDC;AL # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
+FFA0..FFBE;ID # Lo [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
+FFC2..FFC7;ID # Lo [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
+FFCA..FFCF;ID # Lo [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
+FFD2..FFD7;ID # Lo [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
+FFDA..FFDC;ID # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
FFE0;PO # Sc FULLWIDTH CENT SIGN
FFE1;PR # Sc FULLWIDTH POUND SIGN
FFE2;ID # Sm FULLWIDTH NOT SIGN
@@ -2610,7 +2636,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
10175..10178;AL # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
10179..10189;AL # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B;AL # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
-1018C;AL # So GREEK SINUSOID SIGN
+1018C..1018E;AL # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
10190..1019B;AL # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
101A0;AL # So GREEK SYMBOL TAU RHO
101D0..101FC;AL # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
@@ -2621,6 +2647,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
102E1..102FB;AL # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
10300..1031F;AL # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
10320..10323;AL # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1032D..1032F;AL # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
10330..10340;AL # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
10341;AL # Nl GOTHIC LETTER NINETY
10342..10349;AL # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
@@ -2637,6 +2664,8 @@ FFFD;AI # So REPLACEMENT CHARACTER
10450..1047F;AL # Lo [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
10480..1049D;AL # Lo [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
104A0..104A9;NU # Nd [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
+104B0..104D3;AL # Lu [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB;AL # Ll [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
10500..10527;AL # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
10530..10563;AL # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
1056F;AL # Po CAUCASIAN ALBANIAN CITATION MARK
@@ -2774,6 +2803,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
1123A;AL # Po KHOJKI WORD SEPARATOR
1123B..1123C;BA # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
1123D;AL # Po KHOJKI ABBREVIATION SIGN
+1123E;CM # Mn KHOJKI SIGN SUKUN
11280..11286;AL # Lo [7] MULTANI LETTER A..MULTANI LETTER GA
11288;AL # Lo MULTANI LETTER GHA
1128A..1128D;AL # Lo [4] MULTANI LETTER CA..MULTANI LETTER JJA
@@ -2806,6 +2836,19 @@ FFFD;AI # So REPLACEMENT CHARACTER
11362..11363;CM # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
11366..1136C;CM # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
11370..11374;CM # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11400..11434;AL # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437;CM # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F;CM # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441;CM # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444;CM # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445;CM # Mc NEWA SIGN VISARGA
+11446;CM # Mn NEWA SIGN NUKTA
+11447..1144A;AL # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1144B..1144E;BA # Po [4] NEWA DANDA..NEWA GAP FILLER
+1144F;AL # Po NEWA ABBREVIATION SIGN
+11450..11459;NU # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145B;BA # Po NEWA PLACEHOLDER MARK
+1145D;AL # Po NEWA INSERTION SIGN
11480..114AF;AL # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114B0..114B2;CM # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8;CM # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
@@ -2844,6 +2887,7 @@ FFFD;AI # So REPLACEMENT CHARACTER
11643;AL # Po MODI ABBREVIATION SIGN
11644;AL # Lo MODI SIGN HUVA
11650..11659;NU # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
+11660..1166C;BB # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
11680..116AA;AL # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
116AB;CM # Mn TAKRI SIGN ANUSVARA
116AC;CM # Mc TAKRI SIGN VISARGA
@@ -2867,7 +2911,65 @@ FFFD;AI # So REPLACEMENT CHARACTER
118E0..118E9;NU # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
118EA..118F2;AL # No [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
118FF;AL # Lo WARANG CITI OM
+11A00;AL # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A06;CM # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
+11A07..11A08;CM # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
+11A09..11A0A;CM # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32;AL # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38;CM # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39;CM # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A;AL # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E;CM # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A3F;BB # Po ZANABAZAR SQUARE INITIAL HEAD MARK
+11A40;AL # Po ZANABAZAR SQUARE CLOSING HEAD MARK
+11A41..11A44;BA # Po [4] ZANABAZAR SQUARE MARK TSHEG..ZANABAZAR SQUARE MARK LONG TSHEG
+11A45;BB # Po ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK
+11A46;AL # Po ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A47;CM # Mn ZANABAZAR SQUARE SUBJOINER
+11A50;AL # Lo SOYOMBO LETTER A
+11A51..11A56;CM # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58;CM # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B;CM # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A83;AL # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA
+11A86..11A89;AL # Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96;CM # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97;CM # Mc SOYOMBO SIGN VISARGA
+11A98..11A99;CM # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9A..11A9C;BA # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9E..11AA0;BB # Po [3] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO HEAD MARK WITH MOON AND SUN
+11AA1..11AA2;BA # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2
11AC0..11AF8;AL # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08;AL # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E;AL # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F;CM # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36;CM # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D;CM # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E;CM # Mc BHAIKSUKI SIGN VISARGA
+11C3F;CM # Mn BHAIKSUKI SIGN VIRAMA
+11C40;AL # Lo BHAIKSUKI SIGN AVAGRAHA
+11C41..11C45;BA # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C50..11C59;NU # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C5A..11C6C;AL # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+11C70;BB # Po MARCHEN HEAD MARK
+11C71;EX # Po MARCHEN MARK SHAD
+11C72..11C8F;AL # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7;CM # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9;CM # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0;CM # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1;CM # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3;CM # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4;CM # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6;CM # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D00..11D06;AL # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09;AL # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30;AL # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36;CM # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A;CM # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D;CM # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45;CM # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46;AL # Lo MASARAM GONDI REPHA
+11D47;CM # Mn MASARAM GONDI RA-KARA
+11D50..11D59;NU # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
12000..12399;AL # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E;AL # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12470..12474;BA # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
@@ -2914,7 +3016,12 @@ FFFD;AI # So REPLACEMENT CHARACTER
16F51..16F7E;CM # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
16F8F..16F92;CM # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
16F93..16F9F;AL # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
-1B000..1B001;ID # Lo [2] KATAKANA LETTER ARCHAIC E..HIRAGANA LETTER ARCHAIC YE
+16FE0..16FE1;NS # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+17000..187EC;ID # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+18800..18AF2;ID # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+1B000..1B0FF;ID # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
+1B100..1B11E;ID # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
+1B170..1B2FB;ID # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
1BC00..1BC6A;AL # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
1BC70..1BC7C;AL # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
1BC80..1BC88;AL # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
@@ -2996,9 +3103,18 @@ FFFD;AI # So REPLACEMENT CHARACTER
1DA8B;AL # Po SIGNWRITING PARENTHESIS
1DA9B..1DA9F;CM # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
1DAA1..1DAAF;CM # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006;CM # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018;CM # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021;CM # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024;CM # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A;CM # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
1E800..1E8C4;AL # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
1E8C7..1E8CF;AL # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
1E8D0..1E8D6;CM # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E900..1E943;AL # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A;CM # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E950..1E959;NU # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F;OP # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
1EE00..1EE03;AL # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
1EE05..1EE1F;AL # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
1EE21..1EE22;AL # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
@@ -3034,37 +3150,79 @@ FFFD;AI # So REPLACEMENT CHARACTER
1EEAB..1EEBB;AL # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1;AL # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
1F000..1F02B;ID # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK
+1F02C..1F02F;ID # Cn [4] <reserved-1F02C>..<reserved-1F02F>
1F030..1F093;ID # So [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
+1F094..1F09F;ID # Cn [12] <reserved-1F094>..<reserved-1F09F>
1F0A0..1F0AE;ID # So [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
+1F0AF..1F0B0;ID # Cn [2] <reserved-1F0AF>..<reserved-1F0B0>
1F0B1..1F0BF;ID # So [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
+1F0C0;ID # Cn <reserved-1F0C0>
1F0C1..1F0CF;ID # So [15] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD BLACK JOKER
+1F0D0;ID # Cn <reserved-1F0D0>
1F0D1..1F0F5;ID # So [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
+1F0F6..1F0FF;ID # Cn [10] <reserved-1F0F6>..<reserved-1F0FF>
1F100..1F10C;AI # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
+1F10D..1F10F;ID # Cn [3] <reserved-1F10D>..<reserved-1F10F>
1F110..1F12D;AI # So [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
1F12E;AL # So CIRCLED WZ
+1F12F;ID # Cn <reserved-1F12F>
1F130..1F169;AI # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F16A..1F16B;AL # So [2] RAISED MC SIGN..RAISED MD SIGN
-1F170..1F19A;AI # So [43] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VS
+1F16C..1F16F;ID # Cn [4] <reserved-1F16C>..<reserved-1F16F>
+1F170..1F1AC;AI # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
+1F1AD..1F1E5;ID # Cn [57] <reserved-1F1AD>..<reserved-1F1E5>
1F1E6..1F1FF;RI # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F200..1F202;ID # So [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
-1F210..1F23A;ID # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F203..1F20F;ID # Cn [13] <reserved-1F203>..<reserved-1F20F>
+1F210..1F23B;ID # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
+1F23C..1F23F;ID # Cn [4] <reserved-1F23C>..<reserved-1F23F>
1F240..1F248;ID # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
+1F249..1F24F;ID # Cn [7] <reserved-1F249>..<reserved-1F24F>
1F250..1F251;ID # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
-1F300..1F39B;ID # So [156] CYCLONE..CONTROL KNOBS
+1F252..1F25F;ID # Cn [14] <reserved-1F252>..<reserved-1F25F>
+1F260..1F265;ID # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
+1F266..1F2FF;ID # Cn [154] <reserved-1F266>..<reserved-1F2FF>
+1F300..1F384;ID # So [133] CYCLONE..CHRISTMAS TREE
+1F385;EB # So FATHER CHRISTMAS
+1F386..1F39B;ID # So [22] FIREWORKS..CONTROL KNOBS
1F39C..1F39D;AL # So [2] BEAMED ASCENDING MUSICAL NOTES..BEAMED DESCENDING MUSICAL NOTES
1F39E..1F3B4;ID # So [23] FILM FRAMES..FLOWER PLAYING CARDS
1F3B5..1F3B6;AL # So [2] MUSICAL NOTE..MULTIPLE MUSICAL NOTES
1F3B7..1F3BB;ID # So [5] SAXOPHONE..VIOLIN
1F3BC;AL # So MUSICAL SCORE
-1F3BD..1F3FA;ID # So [62] RUNNING SHIRT WITH SASH..AMPHORA
-1F3FB..1F3FF;AL # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-1F400..1F49F;ID # So [160] RAT..HEART DECORATION
+1F3BD..1F3C1;ID # So [5] RUNNING SHIRT WITH SASH..CHEQUERED FLAG
+1F3C2..1F3C4;EB # So [3] SNOWBOARDER..SURFER
+1F3C5..1F3C6;ID # So [2] SPORTS MEDAL..TROPHY
+1F3C7;EB # So HORSE RACING
+1F3C8..1F3C9;ID # So [2] AMERICAN FOOTBALL..RUGBY FOOTBALL
+1F3CA..1F3CC;EB # So [3] SWIMMER..GOLFER
+1F3CD..1F3FA;ID # So [46] RACING MOTORCYCLE..AMPHORA
+1F3FB..1F3FF;EM # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+1F400..1F441;ID # So [66] RAT..EYE
+1F442..1F443;EB # So [2] EAR..NOSE
+1F444..1F445;ID # So [2] MOUTH..TONGUE
+1F446..1F450;EB # So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN
+1F451..1F465;ID # So [21] CROWN..BUSTS IN SILHOUETTE
+1F466..1F469;EB # So [4] BOY..WOMAN
+1F46A..1F46D;ID # So [4] FAMILY..TWO WOMEN HOLDING HANDS
+1F46E;EB # So POLICE OFFICER
+1F46F;ID # So WOMAN WITH BUNNY EARS
+1F470..1F478;EB # So [9] BRIDE WITH VEIL..PRINCESS
+1F479..1F47B;ID # So [3] JAPANESE OGRE..GHOST
+1F47C;EB # So BABY ANGEL
+1F47D..1F480;ID # So [4] EXTRATERRESTRIAL ALIEN..SKULL
+1F481..1F483;EB # So [3] INFORMATION DESK PERSON..DANCER
+1F484;ID # So LIPSTICK
+1F485..1F487;EB # So [3] NAIL POLISH..HAIRCUT
+1F488..1F49F;ID # So [24] BARBER POLE..HEART DECORATION
1F4A0;AL # So DIAMOND SHAPE WITH A DOT INSIDE
1F4A1;ID # So ELECTRIC LIGHT BULB
1F4A2;AL # So ANGER SYMBOL
1F4A3;ID # So BOMB
1F4A4;AL # So SLEEPING SYMBOL
-1F4A5..1F4AE;ID # So [10] COLLISION SYMBOL..WHITE FLOWER
+1F4A5..1F4A9;ID # So [5] COLLISION SYMBOL..PILE OF POO
+1F4AA;EB # So FLEXED BICEPS
+1F4AB..1F4AE;ID # So [4] DIZZY SYMBOL..WHITE FLOWER
1F4AF;AL # So HUNDRED POINTS SYMBOL
1F4B0;ID # So MONEY BAG
1F4B1..1F4B2;AL # So [2] CURRENCY EXCHANGE..HEAVY DOLLAR SIGN
@@ -3074,31 +3232,80 @@ FFFD;AI # So REPLACEMENT CHARACTER
1F517..1F524;AL # So [14] LINK SYMBOL..INPUT SYMBOL FOR LATIN LETTERS
1F525..1F531;ID # So [13] FIRE..TRIDENT EMBLEM
1F532..1F549;AL # So [24] BLACK SQUARE BUTTON..OM SYMBOL
-1F54A..1F579;ID # So [48] DOVE OF PEACE..JOYSTICK
-1F57B..1F5A3;ID # So [41] LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
-1F5A5..1F5D3;ID # So [47] DESKTOP COMPUTER..SPIRAL CALENDAR PAD
+1F54A..1F573;ID # So [42] DOVE OF PEACE..HOLE
+1F574..1F575;EB # So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY
+1F576..1F579;ID # So [4] DARK SUNGLASSES..JOYSTICK
+1F57A;EB # So MAN DANCING
+1F57B..1F58F;ID # So [21] LEFT HAND TELEPHONE RECEIVER..TURNED OK HAND SIGN
+1F590;EB # So RAISED HAND WITH FINGERS SPLAYED
+1F591..1F594;ID # So [4] REVERSED RAISED HAND WITH FINGERS SPLAYED..REVERSED VICTORY HAND
+1F595..1F596;EB # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+1F597..1F5D3;ID # So [61] WHITE DOWN POINTING LEFT HAND INDEX..SPIRAL CALENDAR PAD
1F5D4..1F5DB;AL # So [8] DESKTOP WINDOW..DECREASE FONT SIZE SYMBOL
1F5DC..1F5F3;ID # So [24] COMPRESSION..BALLOT BOX WITH BALLOT
1F5F4..1F5F9;AL # So [6] BALLOT SCRIPT X..BALLOT BOX WITH BOLD CHECK
1F5FA..1F5FF;ID # So [6] WORLD MAP..MOYAI
-1F600..1F64F;ID # So [80] GRINNING FACE..PERSON WITH FOLDED HANDS
+1F600..1F644;ID # So [69] GRINNING FACE..FACE WITH ROLLING EYES
+1F645..1F647;EB # So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY
+1F648..1F64A;ID # So [3] SEE-NO-EVIL MONKEY..SPEAK-NO-EVIL MONKEY
+1F64B..1F64F;EB # So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS
1F650..1F675;AL # So [38] NORTH WEST POINTING LEAF..SWASH AMPERSAND ORNAMENT
1F676..1F678;QU # So [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
1F679..1F67B;NS # So [3] HEAVY INTERROBANG ORNAMENT..HEAVY SANS-SERIF INTERROBANG ORNAMENT
1F67C..1F67F;AL # So [4] VERY HEAVY SOLIDUS..REVERSE CHECKER BOARD
-1F680..1F6D0;ID # So [81] ROCKET..PLACE OF WORSHIP
+1F680..1F6A2;ID # So [35] ROCKET..SHIP
+1F6A3;EB # So ROWBOAT
+1F6A4..1F6B3;ID # So [16] SPEEDBOAT..NO BICYCLES
+1F6B4..1F6B6;EB # So [3] BICYCLIST..PEDESTRIAN
+1F6B7..1F6BF;ID # So [9] NO PEDESTRIANS..SHOWER
+1F6C0;EB # So BATH
+1F6C1..1F6CB;ID # So [11] BATHTUB..COUCH AND LAMP
+1F6CC;EB # So SLEEPING ACCOMMODATION
+1F6CD..1F6D4;ID # So [8] SHOPPING BAGS..PAGODA
+1F6D5..1F6DF;ID # Cn [11] <reserved-1F6D5>..<reserved-1F6DF>
1F6E0..1F6EC;ID # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6F3;ID # So [4] SATELLITE..PASSENGER SHIP
+1F6ED..1F6EF;ID # Cn [3] <reserved-1F6ED>..<reserved-1F6EF>
+1F6F0..1F6F8;ID # So [9] SATELLITE..FLYING SAUCER
+1F6F9..1F6FF;ID # Cn [7] <reserved-1F6F9>..<reserved-1F6FF>
1F700..1F773;AL # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
+1F774..1F77F;ID # Cn [12] <reserved-1F774>..<reserved-1F77F>
1F780..1F7D4;AL # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
+1F7D5..1F7FF;ID # Cn [43] <reserved-1F7D5>..<reserved-1F7FF>
1F800..1F80B;AL # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
+1F80C..1F80F;ID # Cn [4] <reserved-1F80C>..<reserved-1F80F>
1F810..1F847;AL # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
+1F848..1F84F;ID # Cn [8] <reserved-1F848>..<reserved-1F84F>
1F850..1F859;AL # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
+1F85A..1F85F;ID # Cn [6] <reserved-1F85A>..<reserved-1F85F>
1F860..1F887;AL # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
+1F888..1F88F;ID # Cn [8] <reserved-1F888>..<reserved-1F88F>
1F890..1F8AD;AL # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F910..1F918;ID # So [9] ZIPPER-MOUTH FACE..SIGN OF THE HORNS
-1F980..1F984;ID # So [5] CRAB..UNICORN FACE
+1F8AE..1F8FF;ID # Cn [82] <reserved-1F8AE>..<reserved-1F8FF>
+1F900..1F90B;AL # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F90C..1F90F;ID # Cn [4] <reserved-1F90C>..<reserved-1F90F>
+1F910..1F917;ID # So [8] ZIPPER-MOUTH FACE..HUGGING FACE
+1F918..1F91C;EB # So [5] SIGN OF THE HORNS..RIGHT-FACING FIST
+1F91D;ID # So HANDSHAKE
+1F91E..1F91F;EB # So [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN
+1F920..1F925;ID # So [6] FACE WITH COWBOY HAT..LYING FACE
+1F926;EB # So FACE PALM
+1F927..1F92F;ID # So [9] SNEEZING FACE..SHOCKED FACE WITH EXPLODING HEAD
+1F930..1F939;EB # So [10] PREGNANT WOMAN..JUGGLING
+1F93A..1F93C;ID # So [3] FENCER..WRESTLERS
+1F93D..1F93E;EB # So [2] WATER POLO..HANDBALL
+1F93F;ID # Cn <reserved-1F93F>
+1F940..1F94C;ID # So [13] WILTED FLOWER..CURLING STONE
+1F94D..1F94F;ID # Cn [3] <reserved-1F94D>..<reserved-1F94F>
+1F950..1F96B;ID # So [28] CROISSANT..CANNED FOOD
+1F96C..1F97F;ID # Cn [20] <reserved-1F96C>..<reserved-1F97F>
+1F980..1F997;ID # So [24] CRAB..CRICKET
+1F998..1F9BF;ID # Cn [40] <reserved-1F998>..<reserved-1F9BF>
1F9C0;ID # So CHEESE WEDGE
+1F9C1..1F9CF;ID # Cn [15] <reserved-1F9C1>..<reserved-1F9CF>
+1F9D0;ID # So FACE WITH MONOCLE
+1F9D1..1F9DD;EB # So [13] ADULT..ELF
+1F9DE..1F9E6;ID # So [9] GENIE..SOCKS
+1F9E7..1FFFD;ID # Cn [1559] <reserved-1F9E7>..<reserved-1FFFD>
20000..2A6D6;ID # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A6D7..2A6FF;ID # Cn [41] <reserved-2A6D7>..<reserved-2A6FF>
2A700..2B734;ID # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
@@ -3106,7 +3313,9 @@ FFFD;AI # So REPLACEMENT CHARACTER
2B740..2B81D;ID # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B81E..2B81F;ID # Cn [2] <reserved-2B81E>..<reserved-2B81F>
2B820..2CEA1;ID # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
-2CEA2..2F7FF;ID # Cn [10590] <reserved-2CEA2>..<reserved-2F7FF>
+2CEA2..2CEAF;ID # Cn [14] <reserved-2CEA2>..<reserved-2CEAF>
+2CEB0..2EBE0;ID # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
+2EBE1..2F7FF;ID # Cn [3103] <reserved-2EBE1>..<reserved-2F7FF>
2F800..2FA1D;ID # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
2FA1E..2FFFD;ID # Cn [1504] <reserved-2FA1E>..<reserved-2FFFD>
30000..3FFFD;ID # Cn [65534] <reserved-30000>..<reserved-3FFFD>
diff --git a/util/unicode/data/NormalizationCorrections.txt b/util/unicode/data/NormalizationCorrections.txt
index 04fc10d11c..f7fc35e52c 100644
--- a/util/unicode/data/NormalizationCorrections.txt
+++ b/util/unicode/data/NormalizationCorrections.txt
@@ -1,12 +1,14 @@
-# NormalizationCorrections-8.0.0.txt
-# Date: 2015-03-07, 01:30:00 GMT [KW, LI]
+# NormalizationCorrections-10.0.0.txt
+# Date: 2017-04-13, 01:00:00 GMT [KW, LI]
+# © 2017 Unicode®, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# Unicode Character Database
+# For documentation, see http://www.unicode.org/reports/tr44/
#
# This file is a normative contributory data file in the
# Unicode Character Database.
#
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-#
# The normalization stability policy of the Unicode Consortium
# ordinarily precludes any change to the decomposition
# for any character, once established in a relevant version
@@ -25,7 +27,7 @@
#
# Currently this list has exactly six entries in it, one for the
# typo found and corrected in Corrigendum #3, and five for
-# the typos and misidentifications found and corrected in
+# the typos and misidentifications found and corrected in
# Corrigendum #4. All efforts
# will be made to keep the entries limited to just those fixes.
#
@@ -35,7 +37,7 @@
# Field 2: Corrected decomposition
# Field 3: Version of Unicode for which the correction was
# entered into UnicodeData.txt, in n.n.n format.
-# Comment: Indicates the Unicode Corrigendum which documents
+# Comment: Indicates the Unicode Corrigendum which documents
# the correction
#
# For more information, see UAX #15, Unicode Normalization Forms.
diff --git a/util/unicode/data/Scripts.txt b/util/unicode/data/Scripts.txt
index 7e42740407..72319448e9 100644
--- a/util/unicode/data/Scripts.txt
+++ b/util/unicode/data/Scripts.txt
@@ -1,10 +1,11 @@
-# Scripts-8.0.0.txt
-# Date: 2015-03-11, 22:29:42 GMT [MD]
+# Scripts-10.0.0.txt
+# Date: 2017-03-11, 06:40:37 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
# For more information, see:
# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/
# Especially the sections:
@@ -92,10 +93,10 @@
0605 ; Common # Cf ARABIC NUMBER MARK ABOVE
060C ; Common # Po ARABIC COMMA
061B ; Common # Po ARABIC SEMICOLON
-061C ; Common # Cf ARABIC LETTER MARK
061F ; Common # Po ARABIC QUESTION MARK
0640 ; Common # Lm ARABIC TATWEEL
06DD ; Common # Cf ARABIC END OF AYAH
+08E2 ; Common # Cf ARABIC DISPUTED END OF AYAH
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
@@ -110,6 +111,7 @@
1CEE..1CF1 ; Common # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
1CF2..1CF3 ; Common # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
1CF5..1CF6 ; Common # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
+1CF7 ; Common # Mc VEDIC SIGN ATIKRAMA
2000..200A ; Common # Zs [11] EN QUAD..HAIR SPACE
200B ; Common # Cf ZERO WIDTH SPACE
200E..200F ; Common # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
@@ -153,7 +155,7 @@
208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS
208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS
-20A0..20BE ; Common # Sc [31] EURO-CURRENCY SIGN..LARI SIGN
+20A0..20BF ; Common # Sc [32] EURO-CURRENCY SIGN..BITCOIN SIGN
2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
2102 ; Common # L& DOUBLE-STRUCK CAPITAL C
2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA
@@ -223,8 +225,7 @@
239B..23B3 ; Common # Sm [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
23B4..23DB ; Common # So [40] TOP SQUARE BRACKET..FUSE
23DC..23E1 ; Common # Sm [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
-23E2..23FA ; Common # So [25] WHITE TRAPEZIUM..BLACK CIRCLE FOR RECORD
-2400..2426 ; Common # So [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
+23E2..2426 ; Common # So [69] WHITE TRAPEZIUM..SYMBOL FOR SUBSTITUTE FORM TWO
2440..244A ; Common # So [11] OCR HOOK..OCR DOUBLE BACKSLASH
2460..249B ; Common # No [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
249C..24E9 ; Common # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
@@ -309,7 +310,7 @@
2B76..2B95 ; Common # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
2B98..2BB9 ; Common # So [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
2BBD..2BC8 ; Common # So [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
-2BCA..2BD1 ; Common # So [8] TOP HALF BLACK CIRCLE..UNCERTAINTY SIGN
+2BCA..2BD2 ; Common # So [9] TOP HALF BLACK CIRCLE..GROUP MARK
2BEC..2BEF ; Common # So [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
2E00..2E01 ; Common # Po [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
2E02 ; Common # Pi LEFT SUBSTITUTION BRACKET
@@ -348,6 +349,7 @@
2E40 ; Common # Pd DOUBLE HYPHEN
2E41 ; Common # Po REVERSED COMMA
2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK
+2E43..2E49 ; Common # Po [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
3000 ; Common # Zs IDEOGRAPHIC SPACE
3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
@@ -572,19 +574,18 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F100..1F10C ; Common # No [13] DIGIT ZERO FULL STOP..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
1F130..1F16B ; Common # So [60] SQUARED LATIN CAPITAL LETTER A..RAISED MD SIGN
-1F170..1F19A ; Common # So [43] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VS
+1F170..1F1AC ; Common # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
-1F210..1F23A ; Common # So [43] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-55B6
+1F210..1F23B ; Common # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
1F240..1F248 ; Common # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
1F250..1F251 ; Common # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
+1F260..1F265 ; Common # So [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA
1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
-1F400..1F579 ; Common # So [378] RAT..JOYSTICK
-1F57B..1F5A3 ; Common # So [41] LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX
-1F5A5..1F6D0 ; Common # So [300] DESKTOP COMPUTER..PLACE OF WORSHIP
+1F400..1F6D4 ; Common # So [725] RAT..PAGODA
1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING
-1F6F0..1F6F3 ; Common # So [4] SATELLITE..PASSENGER SHIP
+1F6F0..1F6F8 ; Common # So [9] SATELLITE..FLYING SAUCER
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
1F780..1F7D4 ; Common # So [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
@@ -592,13 +593,17 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
-1F910..1F918 ; Common # So [9] ZIPPER-MOUTH FACE..SIGN OF THE HORNS
-1F980..1F984 ; Common # So [5] CRAB..UNICORN FACE
+1F900..1F90B ; Common # So [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
+1F910..1F93E ; Common # So [47] ZIPPER-MOUTH FACE..HANDBALL
+1F940..1F94C ; Common # So [13] WILTED FLOWER..CURLING STONE
+1F950..1F96B ; Common # So [28] CROISSANT..CANNED FOOD
+1F980..1F997 ; Common # So [24] CRAB..CRICKET
1F9C0 ; Common # So CHEESE WEDGE
+1F9D0..1F9E6 ; Common # So [23] FACE WITH MONOCLE..SOCKS
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 7179
+# Total code points: 7363
# ================================================
@@ -641,7 +646,7 @@ A770 ; Latin # Lm MODIFIER LETTER US
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT
-A790..A7AD ; Latin # L& [30] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER L WITH BELT
+A790..A7AE ; Latin # L& [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0..A7B7 ; Latin # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
@@ -654,7 +659,7 @@ FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE S
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1349
+# Total code points: 1350
# ================================================
@@ -708,13 +713,13 @@ AB65 ; Greek # L& GREEK LETTER SMALL CAPITAL OMEGA
10175..10178 ; Greek # No [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
10179..10189 ; Greek # So [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
1018A..1018B ; Greek # No [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
-1018C ; Greek # So GREEK SINUSOID SIGN
+1018C..1018E ; Greek # So [3] GREEK SINUSOID SIGN..NOMISMA SIGN
101A0 ; Greek # So GREEK SYMBOL TAU RHO
1D200..1D241 ; Greek # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
1D242..1D244 ; Greek # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
1D245 ; Greek # So GREEK MUSICAL LEIMMA
-# Total code points: 516
+# Total code points: 518
# ================================================
@@ -724,6 +729,7 @@ AB65 ; Greek # L& GREEK LETTER SMALL CAPITAL OMEGA
0487 ; Cyrillic # Mn COMBINING CYRILLIC POKRYTIE
0488..0489 ; Cyrillic # Me [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
048A..052F ; Cyrillic # L& [166] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER EL WITH DESCENDER
+1C80..1C88 ; Cyrillic # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
1D2B ; Cyrillic # L& CYRILLIC LETTER SMALL CAPITAL EL
1D78 ; Cyrillic # Lm MODIFIER LETTER CYRILLIC EN
2DE0..2DFF ; Cyrillic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
@@ -740,7 +746,7 @@ A69C..A69D ; Cyrillic # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER
A69E..A69F ; Cyrillic # Mn [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
FE2E..FE2F ; Cyrillic # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
-# Total code points: 434
+# Total code points: 443
# ================================================
@@ -791,6 +797,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
060D ; Arabic # Po ARABIC DATE SEPARATOR
060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+061C ; Arabic # Cf ARABIC LETTER MARK
061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK
0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH
@@ -815,6 +822,8 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD ; Arabic # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
+08D4..08E1 ; Arabic # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
@@ -862,7 +871,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1257
+# Total code points: 1280
# ================================================
@@ -873,8 +882,9 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0712..072F ; Syriac # Lo [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
0730..074A ; Syriac # Mn [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
074D..074F ; Syriac # Lo [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
+0860..086A ; Syriac # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
-# Total code points: 77
+# Total code points: 88
# ================================================
@@ -944,8 +954,10 @@ A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
09F4..09F9 ; Bengali # No [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
09FA ; Bengali # So BENGALI ISSHAR
09FB ; Bengali # Sc BENGALI GANDA MARK
+09FC ; Bengali # Lo BENGALI LETTER VEDIC ANUSVARA
+09FD ; Bengali # Po BENGALI ABBREVIATION SIGN
-# Total code points: 93
+# Total code points: 95
# ================================================
@@ -998,8 +1010,9 @@ A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
0AF0 ; Gujarati # Po GUJARATI ABBREVIATION SIGN
0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN
0AF9 ; Gujarati # Lo GUJARATI LETTER ZHA
+0AFA..0AFF ; Gujarati # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
-# Total code points: 85
+# Total code points: 91
# ================================================
@@ -1086,6 +1099,7 @@ A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
# ================================================
+0C80 ; Kannada # Lo KANNADA SIGN SPACING CANDRABINDU
0C81 ; Kannada # Mn KANNADA SIGN CANDRABINDU
0C82..0C83 ; Kannada # Mc [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
0C85..0C8C ; Kannada # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
@@ -1109,15 +1123,16 @@ A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
-# Total code points: 87
+# Total code points: 88
# ================================================
-0D01 ; Malayalam # Mn MALAYALAM SIGN CANDRABINDU
+0D00..0D01 ; Malayalam # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; Malayalam # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
0D05..0D0C ; Malayalam # Lo [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
0D0E..0D10 ; Malayalam # Lo [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
0D12..0D3A ; Malayalam # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
+0D3B..0D3C ; Malayalam # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
0D3D ; Malayalam # Lo MALAYALAM SIGN AVAGRAHA
0D3E..0D40 ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
0D41..0D44 ; Malayalam # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
@@ -1125,15 +1140,18 @@ A8FD ; Devanagari # Lo DEVANAGARI JAIN OM
0D4A..0D4C ; Malayalam # Mc [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
0D4D ; Malayalam # Mn MALAYALAM SIGN VIRAMA
0D4E ; Malayalam # Lo MALAYALAM LETTER DOT REPH
+0D4F ; Malayalam # So MALAYALAM SIGN PARA
+0D54..0D56 ; Malayalam # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
0D57 ; Malayalam # Mc MALAYALAM AU LENGTH MARK
+0D58..0D5E ; Malayalam # No [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
0D5F..0D61 ; Malayalam # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D62..0D63 ; Malayalam # Mn [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
0D66..0D6F ; Malayalam # Nd [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
-0D70..0D75 ; Malayalam # No [6] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE QUARTERS
+0D70..0D78 ; Malayalam # No [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
0D79 ; Malayalam # So MALAYALAM DATE MARK
0D7A..0D7F ; Malayalam # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
-# Total code points: 100
+# Total code points: 117
# ================================================
@@ -1436,21 +1454,24 @@ AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETT
1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
1844..1877 ; Mongolian # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
-1880..18A8 ; Mongolian # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+1880..1884 ; Mongolian # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1885..1886 ; Mongolian # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
+1887..18A8 ; Mongolian # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
18A9 ; Mongolian # Mn MONGOLIAN LETTER ALI GALI DAGALGA
18AA ; Mongolian # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
+11660..1166C ; Mongolian # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
-# Total code points: 153
+# Total code points: 166
# ================================================
3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI
-1B001 ; Hiragana # Lo HIRAGANA LETTER ARCHAIC YE
+1B001..1B11E ; Hiragana # Lo [286] HIRAGANA LETTER ARCHAIC YE..HENTAIGANA LETTER N-MU-MO-2
1F200 ; Hiragana # So SQUARE HIRAGANA HOKA
-# Total code points: 91
+# Total code points: 376
# ================================================
@@ -1469,10 +1490,10 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
# ================================================
02EA..02EB ; Bopomofo # Sk [2] MODIFIER LETTER YIN DEPARTING TONE MARK..MODIFIER LETTER YANG DEPARTING TONE MARK
-3105..312D ; Bopomofo # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3105..312E ; Bopomofo # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
31A0..31BA ; Bopomofo # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
-# Total code points: 70
+# Total code points: 71
# ================================================
@@ -1485,16 +1506,17 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FD5 ; Han # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
+4E00..9FEA ; Han # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 81734
+# Total code points: 89228
# ================================================
@@ -1509,8 +1531,9 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
10300..1031F ; Old_Italic # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
10320..10323 ; Old_Italic # No [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
+1032D..1032F ; Old_Italic # Lo [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
-# Total code points: 36
+# Total code points: 39
# ================================================
@@ -1542,8 +1565,8 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
1CED ; Inherited # Mn VEDIC SIGN TIRYAK
1CF4 ; Inherited # Mn VEDIC TONE CANDRA ABOVE
1CF8..1CF9 ; Inherited # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-1DC0..1DF5 ; Inherited # Mn [54] COMBINING DOTTED GRAVE ACCENT..COMBINING UP TACK ABOVE
-1DFC..1DFF ; Inherited # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1DC0..1DF9 ; Inherited # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF ; Inherited # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
@@ -1562,7 +1585,7 @@ FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CON
1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 563
+# Total code points: 568
# ================================================
@@ -1705,8 +1728,13 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
2C00..2C2E ; Glagolitic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
2C30..2C5E ; Glagolitic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
+1E000..1E006 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Glagolitic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Glagolitic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Glagolitic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
-# Total code points: 94
+# Total code points: 132
# ================================================
@@ -1872,11 +1900,11 @@ A62A..A62B ; Vai # Lo [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
A880..A881 ; Saurashtra # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A882..A8B3 ; Saurashtra # Lo [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
A8B4..A8C3 ; Saurashtra # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-A8C4 ; Saurashtra # Mn SAURASHTRA SIGN VIRAMA
+A8C4..A8C5 ; Saurashtra # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8CE..A8CF ; Saurashtra # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
A8D0..A8D9 ; Saurashtra # Nd [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
-# Total code points: 81
+# Total code points: 82
# ================================================
@@ -2314,8 +2342,9 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
11235 ; Khojki # Mc KHOJKI SIGN VIRAMA
11236..11237 ; Khojki # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
11238..1123D ; Khojki # Po [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
+1123E ; Khojki # Mn KHOJKI SIGN SUKUN
-# Total code points: 61
+# Total code points: 62
# ================================================
@@ -2536,4 +2565,129 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
# Total code points: 672
+# ================================================
+
+1E900..1E943 ; Adlam # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
+1E944..1E94A ; Adlam # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+1E950..1E959 ; Adlam # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
+1E95E..1E95F ; Adlam # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
+
+# Total code points: 87
+
+# ================================================
+
+11C00..11C08 ; Bhaiksuki # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; Bhaiksuki # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C2F ; Bhaiksuki # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; Bhaiksuki # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Bhaiksuki # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; Bhaiksuki # Mc BHAIKSUKI SIGN VISARGA
+11C3F ; Bhaiksuki # Mn BHAIKSUKI SIGN VIRAMA
+11C40 ; Bhaiksuki # Lo BHAIKSUKI SIGN AVAGRAHA
+11C41..11C45 ; Bhaiksuki # Po [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
+11C50..11C59 ; Bhaiksuki # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11C5A..11C6C ; Bhaiksuki # No [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
+
+# Total code points: 97
+
+# ================================================
+
+11C70..11C71 ; Marchen # Po [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
+11C72..11C8F ; Marchen # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11C92..11CA7 ; Marchen # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; Marchen # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; Marchen # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; Marchen # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; Marchen # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; Marchen # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; Marchen # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+
+# Total code points: 68
+
+# ================================================
+
+11400..11434 ; Newa # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11435..11437 ; Newa # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; Newa # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; Newa # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444 ; Newa # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445 ; Newa # Mc NEWA SIGN VISARGA
+11446 ; Newa # Mn NEWA SIGN NUKTA
+11447..1144A ; Newa # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
+1144B..1144F ; Newa # Po [5] NEWA DANDA..NEWA ABBREVIATION SIGN
+11450..11459 ; Newa # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
+1145B ; Newa # Po NEWA PLACEHOLDER MARK
+1145D ; Newa # Po NEWA INSERTION SIGN
+
+# Total code points: 92
+
+# ================================================
+
+104B0..104D3 ; Osage # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; Osage # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
+
+# Total code points: 72
+
+# ================================================
+
+16FE0 ; Tangut # Lm TANGUT ITERATION MARK
+17000..187EC ; Tangut # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+18800..18AF2 ; Tangut # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+
+# Total code points: 6881
+
+# ================================================
+
+11D00..11D06 ; Masaram_Gondi # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; Masaram_Gondi # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; Masaram_Gondi # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D31..11D36 ; Masaram_Gondi # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Masaram_Gondi # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Masaram_Gondi # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Masaram_Gondi # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D46 ; Masaram_Gondi # Lo MASARAM GONDI REPHA
+11D47 ; Masaram_Gondi # Mn MASARAM GONDI RA-KARA
+11D50..11D59 ; Masaram_Gondi # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
+
+# Total code points: 75
+
+# ================================================
+
+16FE1 ; Nushu # Lm NUSHU ITERATION MARK
+1B170..1B2FB ; Nushu # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
+
+# Total code points: 397
+
+# ================================================
+
+11A50 ; Soyombo # Lo SOYOMBO LETTER A
+11A51..11A56 ; Soyombo # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; Soyombo # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; Soyombo # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A5C..11A83 ; Soyombo # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA
+11A86..11A89 ; Soyombo # Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA
+11A8A..11A96 ; Soyombo # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; Soyombo # Mc SOYOMBO SIGN VISARGA
+11A98..11A99 ; Soyombo # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11A9A..11A9C ; Soyombo # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
+11A9E..11AA2 ; Soyombo # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
+
+# Total code points: 80
+
+# ================================================
+
+11A00 ; Zanabazar_Square # Lo ZANABAZAR SQUARE LETTER A
+11A01..11A06 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
+11A07..11A08 ; Zanabazar_Square # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
+11A09..11A0A ; Zanabazar_Square # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A0B..11A32 ; Zanabazar_Square # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A33..11A38 ; Zanabazar_Square # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; Zanabazar_Square # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3A ; Zanabazar_Square # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A3B..11A3E ; Zanabazar_Square # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A3F..11A46 ; Zanabazar_Square # Po [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
+11A47 ; Zanabazar_Square # Mn ZANABAZAR SQUARE SUBJOINER
+
+# Total code points: 72
+
# EOF
diff --git a/util/unicode/data/SentenceBreakProperty.txt b/util/unicode/data/SentenceBreakProperty.txt
index 8dd1abff0f..cd698150f4 100644
--- a/util/unicode/data/SentenceBreakProperty.txt
+++ b/util/unicode/data/SentenceBreakProperty.txt
@@ -1,10 +1,11 @@
-# SentenceBreakProperty-8.0.0.txt
-# Date: 2015-03-11, 22:29:43 GMT [MD]
+# SentenceBreakProperty-10.0.0.txt
+# Date: 2017-03-08, 08:42:08 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
# ================================================
@@ -53,6 +54,7 @@
0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+08D4..08E1 ; Extend # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
0903 ; Extend # Mc DEVANAGARI SIGN VISARGA
093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE
@@ -95,6 +97,7 @@
0ACB..0ACC ; Extend # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
0ACD ; Extend # Mn GUJARATI SIGN VIRAMA
0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AFA..0AFF ; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU
0B02..0B03 ; Extend # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
0B3C ; Extend # Mn ORIYA SIGN NUKTA
@@ -136,8 +139,9 @@
0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-0D01 ; Extend # Mn MALAYALAM SIGN CANDRABINDU
+0D00..0D01 ; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; Extend # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3B..0D3C ; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
0D3E..0D40 ; Extend # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D46..0D48 ; Extend # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
@@ -207,6 +211,7 @@
17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
17DD ; Extend # Mn KHMER SIGN ATTHACAN
180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA
1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
1923..1926 ; Extend # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
@@ -271,9 +276,10 @@
1CED ; Extend # Mn VEDIC SIGN TIRYAK
1CF2..1CF3 ; Extend # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE
+1CF7 ; Extend # Mc VEDIC SIGN ATIKRAMA
1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-1DC0..1DF5 ; Extend # Mn [54] COMBINING DOTTED GRAVE ACCENT..COMBINING UP TACK ABOVE
-1DFC..1DFF ; Extend # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
200C..200D ; Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
@@ -299,7 +305,7 @@ A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL
A827 ; Extend # Mc SYLOTI NAGRI VOWEL SIGN OO
A880..A881 ; Extend # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A8B4..A8C3 ; Extend # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-A8C4 ; Extend # Mn SAURASHTRA SIGN VIRAMA
+A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
@@ -381,6 +387,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11234 ; Extend # Mn KHOJKI SIGN ANUSVARA
11235 ; Extend # Mc KHOJKI SIGN VIRAMA
11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; Extend # Mn KHOJKI SIGN SUKUN
112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA
112E0..112E2 ; Extend # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
@@ -396,6 +403,12 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11362..11363 ; Extend # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11435..11437 ; Extend # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; Extend # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444 ; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445 ; Extend # Mc NEWA SIGN VISARGA
+11446 ; Extend # Mn NEWA SIGN NUKTA
114B0..114B2 ; Extend # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
114B9 ; Extend # Mc TIRHUTA VOWEL SIGN E
@@ -429,6 +442,36 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
11726 ; Extend # Mc AHOM VOWEL SIGN E
11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11A01..11A06 ; Extend # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
+11A07..11A08 ; Extend # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
+11A09..11A0A ; Extend # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A33..11A38 ; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; Extend # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3B..11A3E ; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; Extend # Mn ZANABAZAR SQUARE SUBJOINER
+11A51..11A56 ; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; Extend # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; Extend # Mc SOYOMBO SIGN VISARGA
+11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11C2F ; Extend # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; Extend # Mc BHAIKSUKI SIGN VISARGA
+11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA
+11C92..11CA7 ; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; Extend # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; Extend # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; Extend # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D36 ; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Extend # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D47 ; Extend # Mn MASARAM GONDI RA-KARA
16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F51..16F7E ; Extend # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
@@ -447,10 +490,17 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK
1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1967
+# Total code points: 2277
# ================================================
@@ -467,6 +517,7 @@ E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
061C ; Format # Cf ARABIC LETTER MARK
06DD ; Format # Cf ARABIC END OF AYAH
070F ; Format # Cf SYRIAC ABBREVIATION MARK
+08E2 ; Format # Cf ARABIC DISPUTED END OF AYAH
180E ; Format # Cf MONGOLIAN VOWEL SEPARATOR
200B ; Format # Cf ZERO WIDTH SPACE
200E..200F ; Format # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
@@ -479,9 +530,8 @@ FFF9..FFFB ; Format # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANN
1BCA0..1BCA3 ; Format # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
1D173..1D17A ; Format # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
E0001 ; Format # Cf LANGUAGE TAG
-E0020..E007F ; Format # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 148
+# Total code points: 53
# ================================================
@@ -776,6 +826,7 @@ E0020..E007F ; Format # Cf [96] TAG SPACE..CANCEL TAG
052F ; Lower # L& CYRILLIC SMALL LETTER EL WITH DESCENDER
0561..0587 ; Lower # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
13F8..13FD ; Lower # L& [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
+1C80..1C88 ; Lower # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
1D00..1D2B ; Lower # L& [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
1D2C..1D6A ; Lower # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
1D6B..1D77 ; Lower # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
@@ -1118,6 +1169,7 @@ FB00..FB06 ; Lower # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE S
FB13..FB17 ; Lower # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
FF41..FF5A ; Lower # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
10428..1044F ; Lower # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW
+104D8..104FB ; Lower # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
10CC0..10CF2 ; Lower # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
118C0..118DF ; Lower # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
1D41A..1D433 ; Lower # L& [26] MATHEMATICAL BOLD SMALL A..MATHEMATICAL BOLD SMALL Z
@@ -1148,8 +1200,9 @@ FF41..FF5A ; Lower # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
1D7AA..1D7C2 ; Lower # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
1D7C4..1D7C9 ; Lower # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL
1D7CB ; Lower # L& MATHEMATICAL BOLD SMALL DIGAMMA
+1E922..1E943 ; Lower # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA
-# Total code points: 2172
+# Total code points: 2251
# ================================================
@@ -1745,11 +1798,12 @@ A7A2 ; Upper # L& LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
A7A4 ; Upper # L& LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
A7A6 ; Upper # L& LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
A7A8 ; Upper # L& LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
-A7AA..A7AD ; Upper # L& [4] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER L WITH BELT
+A7AA..A7AE ; Upper # L& [5] LATIN CAPITAL LETTER H WITH HOOK..LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0..A7B4 ; Upper # L& [5] LATIN CAPITAL LETTER TURNED K..LATIN CAPITAL LETTER BETA
A7B6 ; Upper # L& LATIN CAPITAL LETTER OMEGA
FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
10400..10427 ; Upper # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW
+104B0..104D3 ; Upper # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
10C80..10CB2 ; Upper # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
118A0..118BF ; Upper # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO
1D400..1D419 ; Upper # L& [26] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL BOLD CAPITAL Z
@@ -1783,11 +1837,12 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
1D756..1D76E ; Upper # L& [25] MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
1D790..1D7A8 ; Upper # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
1D7CA ; Upper # L& MATHEMATICAL BOLD CAPITAL DIGAMMA
+1E900..1E921 ; Upper # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA
1F130..1F149 ; Upper # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z
1F150..1F169 ; Upper # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; Upper # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 1782
+# Total code points: 1853
# ================================================
@@ -1825,7 +1880,9 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
0824 ; OLetter # Lm SAMARITAN MODIFIER LETTER SHORT A
0828 ; OLetter # Lm SAMARITAN MODIFIER LETTER I
0840..0858 ; OLetter # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0860..086A ; OLetter # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; OLetter # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD ; OLetter # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
0904..0939 ; OLetter # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; OLetter # Lo DEVANAGARI SIGN AVAGRAHA
0950 ; OLetter # Lo DEVANAGARI OM
@@ -1843,6 +1900,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
09DC..09DD ; OLetter # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
09DF..09E1 ; OLetter # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
09F0..09F1 ; OLetter # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; OLetter # Lo BENGALI LETTER VEDIC ANUSVARA
0A05..0A0A ; OLetter # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
0A0F..0A10 ; OLetter # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
0A13..0A28 ; OLetter # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
@@ -1891,6 +1949,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
0C3D ; OLetter # Lo TELUGU SIGN AVAGRAHA
0C58..0C5A ; OLetter # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
0C60..0C61 ; OLetter # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C80 ; OLetter # Lo KANNADA SIGN SPACING CANDRABINDU
0C85..0C8C ; OLetter # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
0C8E..0C90 ; OLetter # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
0C92..0CA8 ; OLetter # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
@@ -1905,6 +1964,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
0D12..0D3A ; OLetter # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; OLetter # Lo MALAYALAM SIGN AVAGRAHA
0D4E ; OLetter # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; OLetter # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
0D5F..0D61 ; OLetter # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D7A..0D7F ; OLetter # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
0D85..0D96 ; OLetter # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
@@ -1983,7 +2043,8 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
1820..1842 ; OLetter # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843 ; OLetter # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
1844..1877 ; OLetter # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
-1880..18A8 ; OLetter # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+1880..1884 ; OLetter # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1887..18A8 ; OLetter # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
18AA ; OLetter # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
18B0..18F5 ; OLetter # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
1900..191E ; OLetter # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
@@ -2035,12 +2096,12 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT
30A1..30FA ; OLetter # Lo [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
30FC..30FE ; OLetter # Lm [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
30FF ; OLetter # Lo KATAKANA DIGRAPH KOTO
-3105..312D ; OLetter # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3105..312E ; OLetter # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
3131..318E ; OLetter # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
31A0..31BA ; OLetter # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
31F0..31FF ; OLetter # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
3400..4DB5 ; OLetter # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FD5 ; OLetter # Lo [20950] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FD5
+4E00..9FEA ; OLetter # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
A000..A014 ; OLetter # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
A015 ; OLetter # Lm YI SYLLABLE WU
A016..A48C ; OLetter # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
@@ -2138,7 +2199,7 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
10280..1029C ; OLetter # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
102A0..102D0 ; OLetter # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
10300..1031F ; OLetter # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
-10330..10340 ; OLetter # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+1032D..10340 ; OLetter # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
10341 ; OLetter # Nl GOTHIC LETTER NINETY
10342..10349 ; OLetter # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
1034A ; OLetter # Nl GOTHIC LETTER NINE HUNDRED
@@ -2207,6 +2268,8 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1133D ; OLetter # Lo GRANTHA SIGN AVAGRAHA
11350 ; OLetter # Lo GRANTHA OM
1135D..11361 ; OLetter # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11400..11434 ; OLetter # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11447..1144A ; OLetter # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
11480..114AF ; OLetter # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; OLetter # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; OLetter # Lo TIRHUTA OM
@@ -2217,7 +2280,21 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
11680..116AA ; OLetter # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
11700..11719 ; OLetter # Lo [26] AHOM LETTER KA..AHOM LETTER JHA
118FF ; OLetter # Lo WARANG CITI OM
+11A00 ; OLetter # Lo ZANABAZAR SQUARE LETTER A
+11A0B..11A32 ; OLetter # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A3A ; OLetter # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A50 ; OLetter # Lo SOYOMBO LETTER A
+11A5C..11A83 ; OLetter # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA
+11A86..11A89 ; OLetter # Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA
11AC0..11AF8 ; OLetter # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; OLetter # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; OLetter # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C40 ; OLetter # Lo BHAIKSUKI SIGN AVAGRAHA
+11C72..11C8F ; OLetter # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11D00..11D06 ; OLetter # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; OLetter # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; OLetter # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D46 ; OLetter # Lo MASARAM GONDI REPHA
12000..12399 ; OLetter # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; OLetter # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; OLetter # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -2233,7 +2310,11 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
16F00..16F44 ; OLetter # Lo [69] MIAO LETTER PA..MIAO LETTER HHA
16F50 ; OLetter # Lo MIAO LETTER NASALIZATION
16F93..16F9F ; OLetter # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
-1B000..1B001 ; OLetter # Lo [2] KATAKANA LETTER ARCHAIC E..HIRAGANA LETTER ARCHAIC YE
+16FE0..16FE1 ; OLetter # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
+17000..187EC ; OLetter # Lo [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
+18800..18AF2 ; OLetter # Lo [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
+1B000..1B11E ; OLetter # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2
+1B170..1B2FB ; OLetter # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
1BC00..1BC6A ; OLetter # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
1BC70..1BC7C ; OLetter # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
1BC80..1BC88 ; OLetter # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
@@ -2276,9 +2357,10 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
2A700..2B734 ; OLetter # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; OLetter # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2B820..2CEA1 ; OLetter # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
+2CEB0..2EBE0 ; OLetter # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
2F800..2FA1D ; OLetter # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 106002
+# Total code points: 121354
# ================================================
@@ -2325,16 +2407,20 @@ ABF0..ABF9 ; Numeric # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT N
11136..1113F ; Numeric # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
111D0..111D9 ; Numeric # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
112F0..112F9 ; Numeric # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11450..11459 ; Numeric # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
114D0..114D9 ; Numeric # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
11650..11659 ; Numeric # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
116C0..116C9 ; Numeric # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Numeric # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; Numeric # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11C50..11C59 ; Numeric # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11D50..11D59 ; Numeric # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
16A60..16A69 ; Numeric # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
16B50..16B59 ; Numeric # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
1D7CE..1D7FF ; Numeric # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1E950..1E959 ; Numeric # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
-# Total code points: 542
+# Total code points: 582
# ================================================
@@ -2398,10 +2484,14 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP
11238..11239 ; STerm # Po [2] KHOJKI DANDA..KHOJKI DOUBLE DANDA
1123B..1123C ; STerm # Po [2] KHOJKI SECTION MARK..KHOJKI DOUBLE SECTION MARK
112A9 ; STerm # Po MULTANI SECTION MARK
+1144B..1144C ; STerm # Po [2] NEWA DANDA..NEWA DOUBLE DANDA
115C2..115C3 ; STerm # Po [2] SIDDHAM DANDA..SIDDHAM DOUBLE DANDA
115C9..115D7 ; STerm # Po [15] SIDDHAM END OF TEXT MARK..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
11641..11642 ; STerm # Po [2] MODI DANDA..MODI DOUBLE DANDA
1173C..1173E ; STerm # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
+11A42..11A43 ; STerm # Po [2] ZANABAZAR SQUARE MARK SHAD..ZANABAZAR SQUARE MARK DOUBLE SHAD
+11A9B..11A9C ; STerm # Po [2] SOYOMBO MARK SHAD..SOYOMBO MARK DOUBLE SHAD
+11C41..11C42 ; STerm # Po [2] BHAIKSUKI DANDA..BHAIKSUKI DOUBLE DANDA
16A6E..16A6F ; STerm # Po [2] MRO DANDA..MRO DOUBLE DANDA
16AF5 ; STerm # Po BASSA VAH FULL STOP
16B37..16B38 ; STerm # Po [2] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS TSHAB CEEB
@@ -2409,7 +2499,7 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP
1BC9F ; STerm # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP
1DA88 ; STerm # Po SIGNWRITING FULL STOP
-# Total code points: 117
+# Total code points: 125
# ================================================
diff --git a/util/unicode/data/SpecialCasing.txt b/util/unicode/data/SpecialCasing.txt
index 8de6462f18..b9ba0d81c1 100644
--- a/util/unicode/data/SpecialCasing.txt
+++ b/util/unicode/data/SpecialCasing.txt
@@ -1,10 +1,11 @@
-# SpecialCasing-8.0.0.txt
-# Date: 2014-12-16, 23:08:04 GMT [MD]
+# SpecialCasing-10.0.0.txt
+# Date: 2017-04-14, 05:40:43 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2014 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
#
# Special Casing
#
@@ -196,7 +197,7 @@ FB17; FB17; 0544 056D; 0544 053D; # ARMENIAN SMALL LIGATURE MEN XEH
# ================================================================================
# Conditional Mappings
-# The remainder of this file provides conditional casing data used to produce
+# The remainder of this file provides conditional casing data used to produce
# full case mappings.
# ================================================================================
# Language-Insensitive Mappings
diff --git a/util/unicode/data/UnicodeData.txt b/util/unicode/data/UnicodeData.txt
index aa0e914f84..d89c64f526 100644
--- a/util/unicode/data/UnicodeData.txt
+++ b/util/unicode/data/UnicodeData.txt
@@ -616,7 +616,7 @@
0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
-026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;A7AE;;A7AE
026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;A7AD;;A7AD
026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
@@ -2072,6 +2072,17 @@
085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;;
085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;;
+0860;SYRIAC LETTER MALAYALAM NGA;Lo;0;AL;;;;;N;;;;;
+0861;SYRIAC LETTER MALAYALAM JA;Lo;0;AL;;;;;N;;;;;
+0862;SYRIAC LETTER MALAYALAM NYA;Lo;0;AL;;;;;N;;;;;
+0863;SYRIAC LETTER MALAYALAM TTA;Lo;0;AL;;;;;N;;;;;
+0864;SYRIAC LETTER MALAYALAM NNA;Lo;0;AL;;;;;N;;;;;
+0865;SYRIAC LETTER MALAYALAM NNNA;Lo;0;AL;;;;;N;;;;;
+0866;SYRIAC LETTER MALAYALAM BHA;Lo;0;AL;;;;;N;;;;;
+0867;SYRIAC LETTER MALAYALAM RA;Lo;0;AL;;;;;N;;;;;
+0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;;
+0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;;
+086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;;
08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
@@ -2093,6 +2104,29 @@
08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;;
08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
+08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;;
+08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;;
+08B9;ARABIC LETTER REH WITH SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;;
+08BA;ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE;Lo;0;AL;;;;;N;;;;;
+08BB;ARABIC LETTER AFRICAN FEH;Lo;0;AL;;;;;N;;;;;
+08BC;ARABIC LETTER AFRICAN QAF;Lo;0;AL;;;;;N;;;;;
+08BD;ARABIC LETTER AFRICAN NOON;Lo;0;AL;;;;;N;;;;;
+08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;;
+08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;;
+08D6;ARABIC SMALL HIGH AIN;Mn;230;NSM;;;;;N;;;;;
+08D7;ARABIC SMALL HIGH QAF;Mn;230;NSM;;;;;N;;;;;
+08D8;ARABIC SMALL HIGH NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;;
+08D9;ARABIC SMALL LOW NOON WITH KASRA;Mn;230;NSM;;;;;N;;;;;
+08DA;ARABIC SMALL HIGH WORD ATH-THALATHA;Mn;230;NSM;;;;;N;;;;;
+08DB;ARABIC SMALL HIGH WORD AS-SAJDA;Mn;230;NSM;;;;;N;;;;;
+08DC;ARABIC SMALL HIGH WORD AN-NISF;Mn;230;NSM;;;;;N;;;;;
+08DD;ARABIC SMALL HIGH WORD SAKTA;Mn;230;NSM;;;;;N;;;;;
+08DE;ARABIC SMALL HIGH WORD QIF;Mn;230;NSM;;;;;N;;;;;
+08DF;ARABIC SMALL HIGH WORD WAQFA;Mn;230;NSM;;;;;N;;;;;
+08E0;ARABIC SMALL HIGH FOOTNOTE MARKER;Mn;230;NSM;;;;;N;;;;;
+08E1;ARABIC SMALL HIGH SIGN SAFHA;Mn;230;NSM;;;;;N;;;;;
+08E2;ARABIC DISPUTED END OF AYAH;Cf;0;AN;;;;;N;;;;;
08E3;ARABIC TURNED DAMMA BELOW;Mn;220;NSM;;;;;N;;;;;
08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;;
08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;;
@@ -2343,6 +2377,8 @@
09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
09FB;BENGALI GANDA MARK;Sc;0;ET;;;;;N;;;;;
+09FC;BENGALI LETTER VEDIC ANUSVARA;Lo;0;L;;;;;N;;;;;
+09FD;BENGALI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2507,6 +2543,12 @@
0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
0AF9;GUJARATI LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0AFA;GUJARATI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;
+0AFB;GUJARATI SIGN SHADDA;Mn;0;NSM;;;;;N;;;;;
+0AFC;GUJARATI SIGN MADDAH;Mn;0;NSM;;;;;N;;;;;
+0AFD;GUJARATI SIGN THREE-DOT NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0AFE;GUJARATI SIGN CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;
+0AFF;GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE;Mn;0;NSM;;;;;N;;;;;
0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2765,6 +2807,7 @@
0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;;
0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;;
0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;;
+0C80;KANNADA SIGN SPACING CANDRABINDU;Lo;0;L;;;;;N;;;;;
0C81;KANNADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2852,6 +2895,7 @@
0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
0CF1;KANNADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
0CF2;KANNADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+0D00;MALAYALAM SIGN COMBINING ANUSVARA ABOVE;Mn;0;NSM;;;;;N;;;;;
0D01;MALAYALAM SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
@@ -2907,6 +2951,8 @@
0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
0D3A;MALAYALAM LETTER TTTA;Lo;0;L;;;;;N;;;;;
+0D3B;MALAYALAM SIGN VERTICAL BAR VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D3C;MALAYALAM SIGN CIRCULAR VIRAMA;Mn;9;NSM;;;;;N;;;;;
0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
@@ -2923,7 +2969,18 @@
0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
0D4E;MALAYALAM LETTER DOT REPH;Lo;0;L;;;;;N;;;;;
+0D4F;MALAYALAM SIGN PARA;So;0;L;;;;;N;;;;;
+0D54;MALAYALAM LETTER CHILLU M;Lo;0;L;;;;;N;;;;;
+0D55;MALAYALAM LETTER CHILLU Y;Lo;0;L;;;;;N;;;;;
+0D56;MALAYALAM LETTER CHILLU LLL;Lo;0;L;;;;;N;;;;;
0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D58;MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH;No;0;L;;;;1/160;N;;;;;
+0D59;MALAYALAM FRACTION ONE FORTIETH;No;0;L;;;;1/40;N;;;;;
+0D5A;MALAYALAM FRACTION THREE EIGHTIETHS;No;0;L;;;;3/80;N;;;;;
+0D5B;MALAYALAM FRACTION ONE TWENTIETH;No;0;L;;;;1/20;N;;;;;
+0D5C;MALAYALAM FRACTION ONE TENTH;No;0;L;;;;1/10;N;;;;;
+0D5D;MALAYALAM FRACTION THREE TWENTIETHS;No;0;L;;;;3/20;N;;;;;
+0D5E;MALAYALAM FRACTION ONE FIFTH;No;0;L;;;;1/5;N;;;;;
0D5F;MALAYALAM LETTER ARCHAIC II;Lo;0;L;;;;;N;;;;;
0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
@@ -2945,6 +3002,9 @@
0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;;
0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;;
0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;;
+0D76;MALAYALAM FRACTION ONE SIXTEENTH;No;0;L;;;;1/16;N;;;;;
+0D77;MALAYALAM FRACTION ONE EIGHTH;No;0;L;;;;1/8;N;;;;;
+0D78;MALAYALAM FRACTION THREE SIXTEENTHS;No;0;L;;;;3/16;N;;;;;
0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;;
0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;;
0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;;
@@ -5458,8 +5518,8 @@
1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
-1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
-1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Mn;0;NSM;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Mn;0;NSM;;;;;N;;;;;
1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
@@ -6319,6 +6379,15 @@
1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
+1C80;CYRILLIC SMALL LETTER ROUNDED VE;Ll;0;L;;;;;N;;;0412;;0412
+1C81;CYRILLIC SMALL LETTER LONG-LEGGED DE;Ll;0;L;;;;;N;;;0414;;0414
+1C82;CYRILLIC SMALL LETTER NARROW O;Ll;0;L;;;;;N;;;041E;;041E
+1C83;CYRILLIC SMALL LETTER WIDE ES;Ll;0;L;;;;;N;;;0421;;0421
+1C84;CYRILLIC SMALL LETTER TALL TE;Ll;0;L;;;;;N;;;0422;;0422
+1C85;CYRILLIC SMALL LETTER THREE-LEGGED TE;Ll;0;L;;;;;N;;;0422;;0422
+1C86;CYRILLIC SMALL LETTER TALL HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+1C87;CYRILLIC SMALL LETTER TALL YAT;Ll;0;L;;;;;N;;;0462;;0462
+1C88;CYRILLIC SMALL LETTER UNBLENDED UK;Ll;0;L;;;;;N;;;A64A;;A64A
1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;
1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;
1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;
@@ -6366,6 +6435,7 @@
1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;;
1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+1CF7;VEDIC SIGN ATIKRAMA;Mc;0;L;;;;;N;;;;;
1CF8;VEDIC TONE RING ABOVE;Mn;230;NSM;;;;;N;;;;;
1CF9;VEDIC TONE DOUBLE RING ABOVE;Mn;230;NSM;;;;;N;;;;;
1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
@@ -6614,6 +6684,11 @@
1DF3;COMBINING LATIN SMALL LETTER O WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;
1DF4;COMBINING LATIN SMALL LETTER U WITH DIAERESIS;Mn;230;NSM;;;;;N;;;;;
1DF5;COMBINING UP TACK ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DF6;COMBINING KAVYKA ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
+1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;;
+1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;;
1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;;
1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
@@ -7291,6 +7366,7 @@
20BC;MANAT SIGN;Sc;0;ET;;;;;N;;;;;
20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;;
20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;;
+20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;;
20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
@@ -8083,6 +8159,11 @@
23F8;DOUBLE VERTICAL BAR;So;0;ON;;;;;N;;;;;
23F9;BLACK SQUARE FOR STOP;So;0;ON;;;;;N;;;;;
23FA;BLACK CIRCLE FOR RECORD;So;0;ON;;;;;N;;;;;
+23FB;POWER SYMBOL;So;0;ON;;;;;N;;;;;
+23FC;POWER ON-OFF SYMBOL;So;0;ON;;;;;N;;;;;
+23FD;POWER ON SYMBOL;So;0;ON;;;;;N;;;;;
+23FE;POWER SLEEP SYMBOL;So;0;ON;;;;;N;;;;;
+23FF;OBSERVER EYE SYMBOL;So;0;ON;;;;;N;;;;;
2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
@@ -10031,6 +10112,7 @@
2BCF;ROTATED WHITE FOUR POINTED CUSP;So;0;ON;;;;;N;;;;;
2BD0;SQUARE POSITION INDICATOR;So;0;ON;;;;;N;;;;;
2BD1;UNCERTAINTY SIGN;So;0;ON;;;;;N;;;;;
+2BD2;GROUP MARK;So;0;ON;;;;;N;;;;;
2BEC;LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BED;UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
2BEE;RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS;So;0;ON;;;;;N;;;;;
@@ -10561,6 +10643,13 @@
2E40;DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
2E41;REVERSED COMMA;Po;0;ON;;;;;N;;;;;
2E42;DOUBLE LOW-REVERSED-9 QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+2E43;DASH WITH LEFT UPTURN;Po;0;ON;;;;;N;;;;;
+2E44;DOUBLE SUSPENSION MARK;Po;0;ON;;;;;N;;;;;
+2E45;INVERTED LOW KAVYKA;Po;0;ON;;;;;N;;;;;
+2E46;INVERTED LOW KAVYKA WITH KAVYKA ABOVE;Po;0;ON;;;;;N;;;;;
+2E47;LOW KAVYKA;Po;0;ON;;;;;N;;;;;
+2E48;LOW KAVYKA WITH DOT;Po;0;ON;;;;;N;;;;;
+2E49;DOUBLE STACKED COMMA;Po;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -11196,6 +11285,7 @@
312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;;
+312E;BOPOMOFO LETTER O WITH DOT ABOVE;Lo;0;L;;;;;N;;;;;
3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
@@ -11962,7 +12052,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
-9FD5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+9FEA;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -13889,6 +13979,7 @@ A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266;
A7AB;LATIN CAPITAL LETTER REVERSED OPEN E;Lu;0;L;;;;;N;;;;025C;
A7AC;LATIN CAPITAL LETTER SCRIPT G;Lu;0;L;;;;;N;;;;0261;
A7AD;LATIN CAPITAL LETTER L WITH BELT;Lu;0;L;;;;;N;;;;026C;
+A7AE;LATIN CAPITAL LETTER SMALL CAPITAL I;Lu;0;L;;;;;N;;;;026A;
A7B0;LATIN CAPITAL LETTER TURNED K;Lu;0;L;;;;;N;;;;029E;
A7B1;LATIN CAPITAL LETTER TURNED T;Lu;0;L;;;;;N;;;;0287;
A7B2;LATIN CAPITAL LETTER J WITH CROSSED-TAIL;Lu;0;L;;;;;N;;;;029D;
@@ -14085,6 +14176,7 @@ A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+A8C5;SAURASHTRA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;;
A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
@@ -16834,6 +16926,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
1018B;GREEK ONE QUARTER SIGN;No;0;ON;;;;1/4;N;;;;;
1018C;GREEK SINUSOID SIGN;So;0;ON;;;;;N;;;;;
+1018D;GREEK INDICTION SIGN;So;0;L;;;;;N;;;;;
+1018E;NOMISMA SIGN;So;0;L;;;;;N;;;;;
10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;;
10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;;
10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;;
@@ -17035,6 +17129,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
+1032D;OLD ITALIC LETTER YE;Lo;0;L;;;;;N;;;;;
+1032E;OLD ITALIC LETTER NORTHERN TSE;Lo;0;L;;;;;N;;;;;
+1032F;OLD ITALIC LETTER SOUTHERN TSE;Lo;0;L;;;;;N;;;;;
10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
@@ -17354,6 +17451,78 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104B0;OSAGE CAPITAL LETTER A;Lu;0;L;;;;;N;;;;104D8;
+104B1;OSAGE CAPITAL LETTER AI;Lu;0;L;;;;;N;;;;104D9;
+104B2;OSAGE CAPITAL LETTER AIN;Lu;0;L;;;;;N;;;;104DA;
+104B3;OSAGE CAPITAL LETTER AH;Lu;0;L;;;;;N;;;;104DB;
+104B4;OSAGE CAPITAL LETTER BRA;Lu;0;L;;;;;N;;;;104DC;
+104B5;OSAGE CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;104DD;
+104B6;OSAGE CAPITAL LETTER EHCHA;Lu;0;L;;;;;N;;;;104DE;
+104B7;OSAGE CAPITAL LETTER E;Lu;0;L;;;;;N;;;;104DF;
+104B8;OSAGE CAPITAL LETTER EIN;Lu;0;L;;;;;N;;;;104E0;
+104B9;OSAGE CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;104E1;
+104BA;OSAGE CAPITAL LETTER HYA;Lu;0;L;;;;;N;;;;104E2;
+104BB;OSAGE CAPITAL LETTER I;Lu;0;L;;;;;N;;;;104E3;
+104BC;OSAGE CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;104E4;
+104BD;OSAGE CAPITAL LETTER EHKA;Lu;0;L;;;;;N;;;;104E5;
+104BE;OSAGE CAPITAL LETTER KYA;Lu;0;L;;;;;N;;;;104E6;
+104BF;OSAGE CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;104E7;
+104C0;OSAGE CAPITAL LETTER MA;Lu;0;L;;;;;N;;;;104E8;
+104C1;OSAGE CAPITAL LETTER NA;Lu;0;L;;;;;N;;;;104E9;
+104C2;OSAGE CAPITAL LETTER O;Lu;0;L;;;;;N;;;;104EA;
+104C3;OSAGE CAPITAL LETTER OIN;Lu;0;L;;;;;N;;;;104EB;
+104C4;OSAGE CAPITAL LETTER PA;Lu;0;L;;;;;N;;;;104EC;
+104C5;OSAGE CAPITAL LETTER EHPA;Lu;0;L;;;;;N;;;;104ED;
+104C6;OSAGE CAPITAL LETTER SA;Lu;0;L;;;;;N;;;;104EE;
+104C7;OSAGE CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;104EF;
+104C8;OSAGE CAPITAL LETTER TA;Lu;0;L;;;;;N;;;;104F0;
+104C9;OSAGE CAPITAL LETTER EHTA;Lu;0;L;;;;;N;;;;104F1;
+104CA;OSAGE CAPITAL LETTER TSA;Lu;0;L;;;;;N;;;;104F2;
+104CB;OSAGE CAPITAL LETTER EHTSA;Lu;0;L;;;;;N;;;;104F3;
+104CC;OSAGE CAPITAL LETTER TSHA;Lu;0;L;;;;;N;;;;104F4;
+104CD;OSAGE CAPITAL LETTER DHA;Lu;0;L;;;;;N;;;;104F5;
+104CE;OSAGE CAPITAL LETTER U;Lu;0;L;;;;;N;;;;104F6;
+104CF;OSAGE CAPITAL LETTER WA;Lu;0;L;;;;;N;;;;104F7;
+104D0;OSAGE CAPITAL LETTER KHA;Lu;0;L;;;;;N;;;;104F8;
+104D1;OSAGE CAPITAL LETTER GHA;Lu;0;L;;;;;N;;;;104F9;
+104D2;OSAGE CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;104FA;
+104D3;OSAGE CAPITAL LETTER ZHA;Lu;0;L;;;;;N;;;;104FB;
+104D8;OSAGE SMALL LETTER A;Ll;0;L;;;;;N;;;104B0;;104B0
+104D9;OSAGE SMALL LETTER AI;Ll;0;L;;;;;N;;;104B1;;104B1
+104DA;OSAGE SMALL LETTER AIN;Ll;0;L;;;;;N;;;104B2;;104B2
+104DB;OSAGE SMALL LETTER AH;Ll;0;L;;;;;N;;;104B3;;104B3
+104DC;OSAGE SMALL LETTER BRA;Ll;0;L;;;;;N;;;104B4;;104B4
+104DD;OSAGE SMALL LETTER CHA;Ll;0;L;;;;;N;;;104B5;;104B5
+104DE;OSAGE SMALL LETTER EHCHA;Ll;0;L;;;;;N;;;104B6;;104B6
+104DF;OSAGE SMALL LETTER E;Ll;0;L;;;;;N;;;104B7;;104B7
+104E0;OSAGE SMALL LETTER EIN;Ll;0;L;;;;;N;;;104B8;;104B8
+104E1;OSAGE SMALL LETTER HA;Ll;0;L;;;;;N;;;104B9;;104B9
+104E2;OSAGE SMALL LETTER HYA;Ll;0;L;;;;;N;;;104BA;;104BA
+104E3;OSAGE SMALL LETTER I;Ll;0;L;;;;;N;;;104BB;;104BB
+104E4;OSAGE SMALL LETTER KA;Ll;0;L;;;;;N;;;104BC;;104BC
+104E5;OSAGE SMALL LETTER EHKA;Ll;0;L;;;;;N;;;104BD;;104BD
+104E6;OSAGE SMALL LETTER KYA;Ll;0;L;;;;;N;;;104BE;;104BE
+104E7;OSAGE SMALL LETTER LA;Ll;0;L;;;;;N;;;104BF;;104BF
+104E8;OSAGE SMALL LETTER MA;Ll;0;L;;;;;N;;;104C0;;104C0
+104E9;OSAGE SMALL LETTER NA;Ll;0;L;;;;;N;;;104C1;;104C1
+104EA;OSAGE SMALL LETTER O;Ll;0;L;;;;;N;;;104C2;;104C2
+104EB;OSAGE SMALL LETTER OIN;Ll;0;L;;;;;N;;;104C3;;104C3
+104EC;OSAGE SMALL LETTER PA;Ll;0;L;;;;;N;;;104C4;;104C4
+104ED;OSAGE SMALL LETTER EHPA;Ll;0;L;;;;;N;;;104C5;;104C5
+104EE;OSAGE SMALL LETTER SA;Ll;0;L;;;;;N;;;104C6;;104C6
+104EF;OSAGE SMALL LETTER SHA;Ll;0;L;;;;;N;;;104C7;;104C7
+104F0;OSAGE SMALL LETTER TA;Ll;0;L;;;;;N;;;104C8;;104C8
+104F1;OSAGE SMALL LETTER EHTA;Ll;0;L;;;;;N;;;104C9;;104C9
+104F2;OSAGE SMALL LETTER TSA;Ll;0;L;;;;;N;;;104CA;;104CA
+104F3;OSAGE SMALL LETTER EHTSA;Ll;0;L;;;;;N;;;104CB;;104CB
+104F4;OSAGE SMALL LETTER TSHA;Ll;0;L;;;;;N;;;104CC;;104CC
+104F5;OSAGE SMALL LETTER DHA;Ll;0;L;;;;;N;;;104CD;;104CD
+104F6;OSAGE SMALL LETTER U;Ll;0;L;;;;;N;;;104CE;;104CE
+104F7;OSAGE SMALL LETTER WA;Ll;0;L;;;;;N;;;104CF;;104CF
+104F8;OSAGE SMALL LETTER KHA;Ll;0;L;;;;;N;;;104D0;;104D0
+104F9;OSAGE SMALL LETTER GHA;Ll;0;L;;;;;N;;;104D1;;104D1
+104FA;OSAGE SMALL LETTER ZA;Ll;0;L;;;;;N;;;104D2;;104D2
+104FB;OSAGE SMALL LETTER ZHA;Ll;0;L;;;;;N;;;104D3;;104D3
10500;ELBASAN LETTER A;Lo;0;L;;;;;N;;;;;
10501;ELBASAN LETTER BE;Lo;0;L;;;;;N;;;;;
10502;ELBASAN LETTER CE;Lo;0;L;;;;;N;;;;;
@@ -19180,6 +19349,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1123B;KHOJKI SECTION MARK;Po;0;L;;;;;N;;;;;
1123C;KHOJKI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
1123D;KHOJKI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+1123E;KHOJKI SIGN SUKUN;Mn;0;NSM;;;;;N;;;;;
11280;MULTANI LETTER A;Lo;0;L;;;;;N;;;;;
11281;MULTANI LETTER I;Lo;0;L;;;;;N;;;;;
11282;MULTANI LETTER U;Lo;0;L;;;;;N;;;;;
@@ -19372,6 +19542,98 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11372;COMBINING GRANTHA LETTER NA;Mn;230;NSM;;;;;N;;;;;
11373;COMBINING GRANTHA LETTER VI;Mn;230;NSM;;;;;N;;;;;
11374;COMBINING GRANTHA LETTER PA;Mn;230;NSM;;;;;N;;;;;
+11400;NEWA LETTER A;Lo;0;L;;;;;N;;;;;
+11401;NEWA LETTER AA;Lo;0;L;;;;;N;;;;;
+11402;NEWA LETTER I;Lo;0;L;;;;;N;;;;;
+11403;NEWA LETTER II;Lo;0;L;;;;;N;;;;;
+11404;NEWA LETTER U;Lo;0;L;;;;;N;;;;;
+11405;NEWA LETTER UU;Lo;0;L;;;;;N;;;;;
+11406;NEWA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11407;NEWA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11408;NEWA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+11409;NEWA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1140A;NEWA LETTER E;Lo;0;L;;;;;N;;;;;
+1140B;NEWA LETTER AI;Lo;0;L;;;;;N;;;;;
+1140C;NEWA LETTER O;Lo;0;L;;;;;N;;;;;
+1140D;NEWA LETTER AU;Lo;0;L;;;;;N;;;;;
+1140E;NEWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1140F;NEWA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11410;NEWA LETTER GA;Lo;0;L;;;;;N;;;;;
+11411;NEWA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11412;NEWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+11413;NEWA LETTER NGHA;Lo;0;L;;;;;N;;;;;
+11414;NEWA LETTER CA;Lo;0;L;;;;;N;;;;;
+11415;NEWA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11416;NEWA LETTER JA;Lo;0;L;;;;;N;;;;;
+11417;NEWA LETTER JHA;Lo;0;L;;;;;N;;;;;
+11418;NEWA LETTER NYA;Lo;0;L;;;;;N;;;;;
+11419;NEWA LETTER NYHA;Lo;0;L;;;;;N;;;;;
+1141A;NEWA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1141B;NEWA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1141C;NEWA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1141D;NEWA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1141E;NEWA LETTER NNA;Lo;0;L;;;;;N;;;;;
+1141F;NEWA LETTER TA;Lo;0;L;;;;;N;;;;;
+11420;NEWA LETTER THA;Lo;0;L;;;;;N;;;;;
+11421;NEWA LETTER DA;Lo;0;L;;;;;N;;;;;
+11422;NEWA LETTER DHA;Lo;0;L;;;;;N;;;;;
+11423;NEWA LETTER NA;Lo;0;L;;;;;N;;;;;
+11424;NEWA LETTER NHA;Lo;0;L;;;;;N;;;;;
+11425;NEWA LETTER PA;Lo;0;L;;;;;N;;;;;
+11426;NEWA LETTER PHA;Lo;0;L;;;;;N;;;;;
+11427;NEWA LETTER BA;Lo;0;L;;;;;N;;;;;
+11428;NEWA LETTER BHA;Lo;0;L;;;;;N;;;;;
+11429;NEWA LETTER MA;Lo;0;L;;;;;N;;;;;
+1142A;NEWA LETTER MHA;Lo;0;L;;;;;N;;;;;
+1142B;NEWA LETTER YA;Lo;0;L;;;;;N;;;;;
+1142C;NEWA LETTER RA;Lo;0;L;;;;;N;;;;;
+1142D;NEWA LETTER RHA;Lo;0;L;;;;;N;;;;;
+1142E;NEWA LETTER LA;Lo;0;L;;;;;N;;;;;
+1142F;NEWA LETTER LHA;Lo;0;L;;;;;N;;;;;
+11430;NEWA LETTER WA;Lo;0;L;;;;;N;;;;;
+11431;NEWA LETTER SHA;Lo;0;L;;;;;N;;;;;
+11432;NEWA LETTER SSA;Lo;0;L;;;;;N;;;;;
+11433;NEWA LETTER SA;Lo;0;L;;;;;N;;;;;
+11434;NEWA LETTER HA;Lo;0;L;;;;;N;;;;;
+11435;NEWA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11436;NEWA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11437;NEWA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+11438;NEWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11439;NEWA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1143A;NEWA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+1143B;NEWA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+1143C;NEWA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1143D;NEWA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+1143E;NEWA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1143F;NEWA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11440;NEWA VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11441;NEWA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11442;NEWA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11443;NEWA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11444;NEWA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11445;NEWA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11446;NEWA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11447;NEWA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+11448;NEWA SIGN FINAL ANUSVARA;Lo;0;L;;;;;N;;;;;
+11449;NEWA OM;Lo;0;L;;;;;N;;;;;
+1144A;NEWA SIDDHI;Lo;0;L;;;;;N;;;;;
+1144B;NEWA DANDA;Po;0;L;;;;;N;;;;;
+1144C;NEWA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+1144D;NEWA COMMA;Po;0;L;;;;;N;;;;;
+1144E;NEWA GAP FILLER;Po;0;L;;;;;N;;;;;
+1144F;NEWA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+11450;NEWA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11451;NEWA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11452;NEWA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11453;NEWA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11454;NEWA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11455;NEWA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11456;NEWA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11457;NEWA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11458;NEWA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11459;NEWA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1145B;NEWA PLACEHOLDER MARK;Po;0;L;;;;;N;;;;;
+1145D;NEWA INSERTION SIGN;Po;0;L;;;;;N;;;;;
11480;TIRHUTA ANJI;Lo;0;L;;;;;N;;;;;
11481;TIRHUTA LETTER A;Lo;0;L;;;;;N;;;;;
11482;TIRHUTA LETTER AA;Lo;0;L;;;;;N;;;;;
@@ -19625,6 +19887,19 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11657;MODI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
11658;MODI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
11659;MODI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11660;MONGOLIAN BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11661;MONGOLIAN ROTATED BIRGA;Po;0;ON;;;;;N;;;;;
+11662;MONGOLIAN DOUBLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11663;MONGOLIAN TRIPLE BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11664;MONGOLIAN BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11665;MONGOLIAN ROTATED BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+11666;MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11667;MONGOLIAN INVERTED BIRGA;Po;0;ON;;;;;N;;;;;
+11668;MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+11669;MONGOLIAN SWIRL BIRGA;Po;0;ON;;;;;N;;;;;
+1166A;MONGOLIAN SWIRL BIRGA WITH ORNAMENT;Po;0;ON;;;;;N;;;;;
+1166B;MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
+1166C;MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT;Po;0;ON;;;;;N;;;;;
11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;;
11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;;
11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;;
@@ -19832,6 +20107,158 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
118F1;WARANG CITI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
118F2;WARANG CITI NUMBER NINETY;No;0;L;;;;90;N;;;;;
118FF;WARANG CITI OM;Lo;0;L;;;;;N;;;;;
+11A00;ZANABAZAR SQUARE LETTER A;Lo;0;L;;;;;N;;;;;
+11A01;ZANABAZAR SQUARE VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11A02;ZANABAZAR SQUARE VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+11A03;ZANABAZAR SQUARE VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11A04;ZANABAZAR SQUARE VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11A05;ZANABAZAR SQUARE VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+11A06;ZANABAZAR SQUARE VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11A07;ZANABAZAR SQUARE VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+11A08;ZANABAZAR SQUARE VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11A09;ZANABAZAR SQUARE VOWEL SIGN REVERSED I;Mn;0;NSM;;;;;N;;;;;
+11A0A;ZANABAZAR SQUARE VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+11A0B;ZANABAZAR SQUARE LETTER KA;Lo;0;L;;;;;N;;;;;
+11A0C;ZANABAZAR SQUARE LETTER KHA;Lo;0;L;;;;;N;;;;;
+11A0D;ZANABAZAR SQUARE LETTER GA;Lo;0;L;;;;;N;;;;;
+11A0E;ZANABAZAR SQUARE LETTER GHA;Lo;0;L;;;;;N;;;;;
+11A0F;ZANABAZAR SQUARE LETTER NGA;Lo;0;L;;;;;N;;;;;
+11A10;ZANABAZAR SQUARE LETTER CA;Lo;0;L;;;;;N;;;;;
+11A11;ZANABAZAR SQUARE LETTER CHA;Lo;0;L;;;;;N;;;;;
+11A12;ZANABAZAR SQUARE LETTER JA;Lo;0;L;;;;;N;;;;;
+11A13;ZANABAZAR SQUARE LETTER NYA;Lo;0;L;;;;;N;;;;;
+11A14;ZANABAZAR SQUARE LETTER TTA;Lo;0;L;;;;;N;;;;;
+11A15;ZANABAZAR SQUARE LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11A16;ZANABAZAR SQUARE LETTER DDA;Lo;0;L;;;;;N;;;;;
+11A17;ZANABAZAR SQUARE LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11A18;ZANABAZAR SQUARE LETTER NNA;Lo;0;L;;;;;N;;;;;
+11A19;ZANABAZAR SQUARE LETTER TA;Lo;0;L;;;;;N;;;;;
+11A1A;ZANABAZAR SQUARE LETTER THA;Lo;0;L;;;;;N;;;;;
+11A1B;ZANABAZAR SQUARE LETTER DA;Lo;0;L;;;;;N;;;;;
+11A1C;ZANABAZAR SQUARE LETTER DHA;Lo;0;L;;;;;N;;;;;
+11A1D;ZANABAZAR SQUARE LETTER NA;Lo;0;L;;;;;N;;;;;
+11A1E;ZANABAZAR SQUARE LETTER PA;Lo;0;L;;;;;N;;;;;
+11A1F;ZANABAZAR SQUARE LETTER PHA;Lo;0;L;;;;;N;;;;;
+11A20;ZANABAZAR SQUARE LETTER BA;Lo;0;L;;;;;N;;;;;
+11A21;ZANABAZAR SQUARE LETTER BHA;Lo;0;L;;;;;N;;;;;
+11A22;ZANABAZAR SQUARE LETTER MA;Lo;0;L;;;;;N;;;;;
+11A23;ZANABAZAR SQUARE LETTER TSA;Lo;0;L;;;;;N;;;;;
+11A24;ZANABAZAR SQUARE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+11A25;ZANABAZAR SQUARE LETTER DZA;Lo;0;L;;;;;N;;;;;
+11A26;ZANABAZAR SQUARE LETTER DZHA;Lo;0;L;;;;;N;;;;;
+11A27;ZANABAZAR SQUARE LETTER ZHA;Lo;0;L;;;;;N;;;;;
+11A28;ZANABAZAR SQUARE LETTER ZA;Lo;0;L;;;;;N;;;;;
+11A29;ZANABAZAR SQUARE LETTER -A;Lo;0;L;;;;;N;;;;;
+11A2A;ZANABAZAR SQUARE LETTER YA;Lo;0;L;;;;;N;;;;;
+11A2B;ZANABAZAR SQUARE LETTER RA;Lo;0;L;;;;;N;;;;;
+11A2C;ZANABAZAR SQUARE LETTER LA;Lo;0;L;;;;;N;;;;;
+11A2D;ZANABAZAR SQUARE LETTER VA;Lo;0;L;;;;;N;;;;;
+11A2E;ZANABAZAR SQUARE LETTER SHA;Lo;0;L;;;;;N;;;;;
+11A2F;ZANABAZAR SQUARE LETTER SSA;Lo;0;L;;;;;N;;;;;
+11A30;ZANABAZAR SQUARE LETTER SA;Lo;0;L;;;;;N;;;;;
+11A31;ZANABAZAR SQUARE LETTER HA;Lo;0;L;;;;;N;;;;;
+11A32;ZANABAZAR SQUARE LETTER KSSA;Lo;0;L;;;;;N;;;;;
+11A33;ZANABAZAR SQUARE FINAL CONSONANT MARK;Mn;0;NSM;;;;;N;;;;;
+11A34;ZANABAZAR SQUARE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11A35;ZANABAZAR SQUARE SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11A36;ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;;
+11A37;ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT;Mn;0;NSM;;;;;N;;;;;
+11A38;ZANABAZAR SQUARE SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11A39;ZANABAZAR SQUARE SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11A3A;ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;;
+11A3B;ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA;Mn;0;NSM;;;;;N;;;;;
+11A3C;ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA;Mn;0;NSM;;;;;N;;;;;
+11A3D;ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA;Mn;0;NSM;;;;;N;;;;;
+11A3E;ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA;Mn;0;NSM;;;;;N;;;;;
+11A3F;ZANABAZAR SQUARE INITIAL HEAD MARK;Po;0;L;;;;;N;;;;;
+11A40;ZANABAZAR SQUARE CLOSING HEAD MARK;Po;0;L;;;;;N;;;;;
+11A41;ZANABAZAR SQUARE MARK TSHEG;Po;0;L;;;;;N;;;;;
+11A42;ZANABAZAR SQUARE MARK SHAD;Po;0;L;;;;;N;;;;;
+11A43;ZANABAZAR SQUARE MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;
+11A44;ZANABAZAR SQUARE MARK LONG TSHEG;Po;0;L;;;;;N;;;;;
+11A45;ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;;
+11A46;ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK;Po;0;L;;;;;N;;;;;
+11A47;ZANABAZAR SQUARE SUBJOINER;Mn;9;NSM;;;;;N;;;;;
+11A50;SOYOMBO LETTER A;Lo;0;L;;;;;N;;;;;
+11A51;SOYOMBO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11A52;SOYOMBO VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;;
+11A53;SOYOMBO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11A54;SOYOMBO VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11A55;SOYOMBO VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11A56;SOYOMBO VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;;
+11A57;SOYOMBO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+11A58;SOYOMBO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+11A59;SOYOMBO VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11A5A;SOYOMBO VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11A5B;SOYOMBO VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+11A5C;SOYOMBO LETTER KA;Lo;0;L;;;;;N;;;;;
+11A5D;SOYOMBO LETTER KHA;Lo;0;L;;;;;N;;;;;
+11A5E;SOYOMBO LETTER GA;Lo;0;L;;;;;N;;;;;
+11A5F;SOYOMBO LETTER GHA;Lo;0;L;;;;;N;;;;;
+11A60;SOYOMBO LETTER NGA;Lo;0;L;;;;;N;;;;;
+11A61;SOYOMBO LETTER CA;Lo;0;L;;;;;N;;;;;
+11A62;SOYOMBO LETTER CHA;Lo;0;L;;;;;N;;;;;
+11A63;SOYOMBO LETTER JA;Lo;0;L;;;;;N;;;;;
+11A64;SOYOMBO LETTER JHA;Lo;0;L;;;;;N;;;;;
+11A65;SOYOMBO LETTER NYA;Lo;0;L;;;;;N;;;;;
+11A66;SOYOMBO LETTER TTA;Lo;0;L;;;;;N;;;;;
+11A67;SOYOMBO LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11A68;SOYOMBO LETTER DDA;Lo;0;L;;;;;N;;;;;
+11A69;SOYOMBO LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11A6A;SOYOMBO LETTER NNA;Lo;0;L;;;;;N;;;;;
+11A6B;SOYOMBO LETTER TA;Lo;0;L;;;;;N;;;;;
+11A6C;SOYOMBO LETTER THA;Lo;0;L;;;;;N;;;;;
+11A6D;SOYOMBO LETTER DA;Lo;0;L;;;;;N;;;;;
+11A6E;SOYOMBO LETTER DHA;Lo;0;L;;;;;N;;;;;
+11A6F;SOYOMBO LETTER NA;Lo;0;L;;;;;N;;;;;
+11A70;SOYOMBO LETTER PA;Lo;0;L;;;;;N;;;;;
+11A71;SOYOMBO LETTER PHA;Lo;0;L;;;;;N;;;;;
+11A72;SOYOMBO LETTER BA;Lo;0;L;;;;;N;;;;;
+11A73;SOYOMBO LETTER BHA;Lo;0;L;;;;;N;;;;;
+11A74;SOYOMBO LETTER MA;Lo;0;L;;;;;N;;;;;
+11A75;SOYOMBO LETTER TSA;Lo;0;L;;;;;N;;;;;
+11A76;SOYOMBO LETTER TSHA;Lo;0;L;;;;;N;;;;;
+11A77;SOYOMBO LETTER DZA;Lo;0;L;;;;;N;;;;;
+11A78;SOYOMBO LETTER ZHA;Lo;0;L;;;;;N;;;;;
+11A79;SOYOMBO LETTER ZA;Lo;0;L;;;;;N;;;;;
+11A7A;SOYOMBO LETTER -A;Lo;0;L;;;;;N;;;;;
+11A7B;SOYOMBO LETTER YA;Lo;0;L;;;;;N;;;;;
+11A7C;SOYOMBO LETTER RA;Lo;0;L;;;;;N;;;;;
+11A7D;SOYOMBO LETTER LA;Lo;0;L;;;;;N;;;;;
+11A7E;SOYOMBO LETTER VA;Lo;0;L;;;;;N;;;;;
+11A7F;SOYOMBO LETTER SHA;Lo;0;L;;;;;N;;;;;
+11A80;SOYOMBO LETTER SSA;Lo;0;L;;;;;N;;;;;
+11A81;SOYOMBO LETTER SA;Lo;0;L;;;;;N;;;;;
+11A82;SOYOMBO LETTER HA;Lo;0;L;;;;;N;;;;;
+11A83;SOYOMBO LETTER KSSA;Lo;0;L;;;;;N;;;;;
+11A86;SOYOMBO CLUSTER-INITIAL LETTER RA;Lo;0;L;;;;;N;;;;;
+11A87;SOYOMBO CLUSTER-INITIAL LETTER LA;Lo;0;L;;;;;N;;;;;
+11A88;SOYOMBO CLUSTER-INITIAL LETTER SHA;Lo;0;L;;;;;N;;;;;
+11A89;SOYOMBO CLUSTER-INITIAL LETTER SA;Lo;0;L;;;;;N;;;;;
+11A8A;SOYOMBO FINAL CONSONANT SIGN G;Mn;0;NSM;;;;;N;;;;;
+11A8B;SOYOMBO FINAL CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;;
+11A8C;SOYOMBO FINAL CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;;
+11A8D;SOYOMBO FINAL CONSONANT SIGN D;Mn;0;NSM;;;;;N;;;;;
+11A8E;SOYOMBO FINAL CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;;
+11A8F;SOYOMBO FINAL CONSONANT SIGN B;Mn;0;NSM;;;;;N;;;;;
+11A90;SOYOMBO FINAL CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;;
+11A91;SOYOMBO FINAL CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;;
+11A92;SOYOMBO FINAL CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;;
+11A93;SOYOMBO FINAL CONSONANT SIGN SH;Mn;0;NSM;;;;;N;;;;;
+11A94;SOYOMBO FINAL CONSONANT SIGN S;Mn;0;NSM;;;;;N;;;;;
+11A95;SOYOMBO FINAL CONSONANT SIGN -A;Mn;0;NSM;;;;;N;;;;;
+11A96;SOYOMBO SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11A97;SOYOMBO SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11A98;SOYOMBO GEMINATION MARK;Mn;0;NSM;;;;;N;;;;;
+11A99;SOYOMBO SUBJOINER;Mn;9;NSM;;;;;N;;;;;
+11A9A;SOYOMBO MARK TSHEG;Po;0;L;;;;;N;;;;;
+11A9B;SOYOMBO MARK SHAD;Po;0;L;;;;;N;;;;;
+11A9C;SOYOMBO MARK DOUBLE SHAD;Po;0;L;;;;;N;;;;;
+11A9E;SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME;Po;0;L;;;;;N;;;;;
+11A9F;SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME;Po;0;L;;;;;N;;;;;
+11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;;
+11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;;
+11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;;
11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;;
11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;;
11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;;
@@ -19889,6 +20316,246 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
11AF6;PAU CIN HAU LOW-FALLING TONE LONG FINAL;Lo;0;L;;;;;N;;;;;
11AF7;PAU CIN HAU LOW-FALLING TONE FINAL;Lo;0;L;;;;;N;;;;;
11AF8;PAU CIN HAU GLOTTAL STOP FINAL;Lo;0;L;;;;;N;;;;;
+11C00;BHAIKSUKI LETTER A;Lo;0;L;;;;;N;;;;;
+11C01;BHAIKSUKI LETTER AA;Lo;0;L;;;;;N;;;;;
+11C02;BHAIKSUKI LETTER I;Lo;0;L;;;;;N;;;;;
+11C03;BHAIKSUKI LETTER II;Lo;0;L;;;;;N;;;;;
+11C04;BHAIKSUKI LETTER U;Lo;0;L;;;;;N;;;;;
+11C05;BHAIKSUKI LETTER UU;Lo;0;L;;;;;N;;;;;
+11C06;BHAIKSUKI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+11C07;BHAIKSUKI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+11C08;BHAIKSUKI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+11C0A;BHAIKSUKI LETTER E;Lo;0;L;;;;;N;;;;;
+11C0B;BHAIKSUKI LETTER AI;Lo;0;L;;;;;N;;;;;
+11C0C;BHAIKSUKI LETTER O;Lo;0;L;;;;;N;;;;;
+11C0D;BHAIKSUKI LETTER AU;Lo;0;L;;;;;N;;;;;
+11C0E;BHAIKSUKI LETTER KA;Lo;0;L;;;;;N;;;;;
+11C0F;BHAIKSUKI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11C10;BHAIKSUKI LETTER GA;Lo;0;L;;;;;N;;;;;
+11C11;BHAIKSUKI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11C12;BHAIKSUKI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11C13;BHAIKSUKI LETTER CA;Lo;0;L;;;;;N;;;;;
+11C14;BHAIKSUKI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11C15;BHAIKSUKI LETTER JA;Lo;0;L;;;;;N;;;;;
+11C16;BHAIKSUKI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11C17;BHAIKSUKI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11C18;BHAIKSUKI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11C19;BHAIKSUKI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11C1A;BHAIKSUKI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11C1B;BHAIKSUKI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11C1C;BHAIKSUKI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11C1D;BHAIKSUKI LETTER TA;Lo;0;L;;;;;N;;;;;
+11C1E;BHAIKSUKI LETTER THA;Lo;0;L;;;;;N;;;;;
+11C1F;BHAIKSUKI LETTER DA;Lo;0;L;;;;;N;;;;;
+11C20;BHAIKSUKI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11C21;BHAIKSUKI LETTER NA;Lo;0;L;;;;;N;;;;;
+11C22;BHAIKSUKI LETTER PA;Lo;0;L;;;;;N;;;;;
+11C23;BHAIKSUKI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11C24;BHAIKSUKI LETTER BA;Lo;0;L;;;;;N;;;;;
+11C25;BHAIKSUKI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11C26;BHAIKSUKI LETTER MA;Lo;0;L;;;;;N;;;;;
+11C27;BHAIKSUKI LETTER YA;Lo;0;L;;;;;N;;;;;
+11C28;BHAIKSUKI LETTER RA;Lo;0;L;;;;;N;;;;;
+11C29;BHAIKSUKI LETTER LA;Lo;0;L;;;;;N;;;;;
+11C2A;BHAIKSUKI LETTER VA;Lo;0;L;;;;;N;;;;;
+11C2B;BHAIKSUKI LETTER SHA;Lo;0;L;;;;;N;;;;;
+11C2C;BHAIKSUKI LETTER SSA;Lo;0;L;;;;;N;;;;;
+11C2D;BHAIKSUKI LETTER SA;Lo;0;L;;;;;N;;;;;
+11C2E;BHAIKSUKI LETTER HA;Lo;0;L;;;;;N;;;;;
+11C2F;BHAIKSUKI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+11C30;BHAIKSUKI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11C31;BHAIKSUKI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11C32;BHAIKSUKI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11C33;BHAIKSUKI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11C34;BHAIKSUKI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11C35;BHAIKSUKI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+11C36;BHAIKSUKI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+11C38;BHAIKSUKI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11C39;BHAIKSUKI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11C3A;BHAIKSUKI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11C3B;BHAIKSUKI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11C3C;BHAIKSUKI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11C3D;BHAIKSUKI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11C3E;BHAIKSUKI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11C3F;BHAIKSUKI SIGN VIRAMA;Mn;9;L;;;;;N;;;;;
+11C40;BHAIKSUKI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+11C41;BHAIKSUKI DANDA;Po;0;L;;;;;N;;;;;
+11C42;BHAIKSUKI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11C43;BHAIKSUKI WORD SEPARATOR;Po;0;L;;;;;N;;;;;
+11C44;BHAIKSUKI GAP FILLER-1;Po;0;L;;;;;N;;;;;
+11C45;BHAIKSUKI GAP FILLER-2;Po;0;L;;;;;N;;;;;
+11C50;BHAIKSUKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11C51;BHAIKSUKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11C52;BHAIKSUKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11C53;BHAIKSUKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11C54;BHAIKSUKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11C55;BHAIKSUKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11C56;BHAIKSUKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11C57;BHAIKSUKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11C58;BHAIKSUKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11C59;BHAIKSUKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11C5A;BHAIKSUKI NUMBER ONE;No;0;L;;;;1;N;;;;;
+11C5B;BHAIKSUKI NUMBER TWO;No;0;L;;;;2;N;;;;;
+11C5C;BHAIKSUKI NUMBER THREE;No;0;L;;;;3;N;;;;;
+11C5D;BHAIKSUKI NUMBER FOUR;No;0;L;;;;4;N;;;;;
+11C5E;BHAIKSUKI NUMBER FIVE;No;0;L;;;;5;N;;;;;
+11C5F;BHAIKSUKI NUMBER SIX;No;0;L;;;;6;N;;;;;
+11C60;BHAIKSUKI NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+11C61;BHAIKSUKI NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+11C62;BHAIKSUKI NUMBER NINE;No;0;L;;;;9;N;;;;;
+11C63;BHAIKSUKI NUMBER TEN;No;0;L;;;;10;N;;;;;
+11C64;BHAIKSUKI NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+11C65;BHAIKSUKI NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+11C66;BHAIKSUKI NUMBER FORTY;No;0;L;;;;40;N;;;;;
+11C67;BHAIKSUKI NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+11C68;BHAIKSUKI NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+11C69;BHAIKSUKI NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+11C6A;BHAIKSUKI NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+11C6B;BHAIKSUKI NUMBER NINETY;No;0;L;;;;90;N;;;;;
+11C6C;BHAIKSUKI HUNDREDS UNIT MARK;No;0;L;;;;100;N;;;;;
+11C70;MARCHEN HEAD MARK;Po;0;L;;;;;N;;;;;
+11C71;MARCHEN MARK SHAD;Po;0;L;;;;;N;;;;;
+11C72;MARCHEN LETTER KA;Lo;0;L;;;;;N;;;;;
+11C73;MARCHEN LETTER KHA;Lo;0;L;;;;;N;;;;;
+11C74;MARCHEN LETTER GA;Lo;0;L;;;;;N;;;;;
+11C75;MARCHEN LETTER NGA;Lo;0;L;;;;;N;;;;;
+11C76;MARCHEN LETTER CA;Lo;0;L;;;;;N;;;;;
+11C77;MARCHEN LETTER CHA;Lo;0;L;;;;;N;;;;;
+11C78;MARCHEN LETTER JA;Lo;0;L;;;;;N;;;;;
+11C79;MARCHEN LETTER NYA;Lo;0;L;;;;;N;;;;;
+11C7A;MARCHEN LETTER TA;Lo;0;L;;;;;N;;;;;
+11C7B;MARCHEN LETTER THA;Lo;0;L;;;;;N;;;;;
+11C7C;MARCHEN LETTER DA;Lo;0;L;;;;;N;;;;;
+11C7D;MARCHEN LETTER NA;Lo;0;L;;;;;N;;;;;
+11C7E;MARCHEN LETTER PA;Lo;0;L;;;;;N;;;;;
+11C7F;MARCHEN LETTER PHA;Lo;0;L;;;;;N;;;;;
+11C80;MARCHEN LETTER BA;Lo;0;L;;;;;N;;;;;
+11C81;MARCHEN LETTER MA;Lo;0;L;;;;;N;;;;;
+11C82;MARCHEN LETTER TSA;Lo;0;L;;;;;N;;;;;
+11C83;MARCHEN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+11C84;MARCHEN LETTER DZA;Lo;0;L;;;;;N;;;;;
+11C85;MARCHEN LETTER WA;Lo;0;L;;;;;N;;;;;
+11C86;MARCHEN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+11C87;MARCHEN LETTER ZA;Lo;0;L;;;;;N;;;;;
+11C88;MARCHEN LETTER -A;Lo;0;L;;;;;N;;;;;
+11C89;MARCHEN LETTER YA;Lo;0;L;;;;;N;;;;;
+11C8A;MARCHEN LETTER RA;Lo;0;L;;;;;N;;;;;
+11C8B;MARCHEN LETTER LA;Lo;0;L;;;;;N;;;;;
+11C8C;MARCHEN LETTER SHA;Lo;0;L;;;;;N;;;;;
+11C8D;MARCHEN LETTER SA;Lo;0;L;;;;;N;;;;;
+11C8E;MARCHEN LETTER HA;Lo;0;L;;;;;N;;;;;
+11C8F;MARCHEN LETTER A;Lo;0;L;;;;;N;;;;;
+11C92;MARCHEN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+11C93;MARCHEN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+11C94;MARCHEN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+11C95;MARCHEN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+11C96;MARCHEN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+11C97;MARCHEN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+11C98;MARCHEN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+11C99;MARCHEN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+11C9A;MARCHEN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+11C9B;MARCHEN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+11C9C;MARCHEN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+11C9D;MARCHEN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+11C9E;MARCHEN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+11C9F;MARCHEN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+11CA0;MARCHEN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+11CA1;MARCHEN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+11CA2;MARCHEN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+11CA3;MARCHEN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+11CA4;MARCHEN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+11CA5;MARCHEN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;;;;
+11CA6;MARCHEN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+11CA7;MARCHEN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+11CA9;MARCHEN SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;;
+11CAA;MARCHEN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;;;;
+11CAB;MARCHEN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+11CAC;MARCHEN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+11CAD;MARCHEN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+11CAE;MARCHEN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+11CAF;MARCHEN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+11CB0;MARCHEN VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+11CB1;MARCHEN VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+11CB2;MARCHEN VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11CB3;MARCHEN VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11CB4;MARCHEN VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+11CB5;MARCHEN SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11CB6;MARCHEN SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11D00;MASARAM GONDI LETTER A;Lo;0;L;;;;;N;;;;;
+11D01;MASARAM GONDI LETTER AA;Lo;0;L;;;;;N;;;;;
+11D02;MASARAM GONDI LETTER I;Lo;0;L;;;;;N;;;;;
+11D03;MASARAM GONDI LETTER II;Lo;0;L;;;;;N;;;;;
+11D04;MASARAM GONDI LETTER U;Lo;0;L;;;;;N;;;;;
+11D05;MASARAM GONDI LETTER UU;Lo;0;L;;;;;N;;;;;
+11D06;MASARAM GONDI LETTER E;Lo;0;L;;;;;N;;;;;
+11D08;MASARAM GONDI LETTER AI;Lo;0;L;;;;;N;;;;;
+11D09;MASARAM GONDI LETTER O;Lo;0;L;;;;;N;;;;;
+11D0B;MASARAM GONDI LETTER AU;Lo;0;L;;;;;N;;;;;
+11D0C;MASARAM GONDI LETTER KA;Lo;0;L;;;;;N;;;;;
+11D0D;MASARAM GONDI LETTER KHA;Lo;0;L;;;;;N;;;;;
+11D0E;MASARAM GONDI LETTER GA;Lo;0;L;;;;;N;;;;;
+11D0F;MASARAM GONDI LETTER GHA;Lo;0;L;;;;;N;;;;;
+11D10;MASARAM GONDI LETTER NGA;Lo;0;L;;;;;N;;;;;
+11D11;MASARAM GONDI LETTER CA;Lo;0;L;;;;;N;;;;;
+11D12;MASARAM GONDI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11D13;MASARAM GONDI LETTER JA;Lo;0;L;;;;;N;;;;;
+11D14;MASARAM GONDI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11D15;MASARAM GONDI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11D16;MASARAM GONDI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11D17;MASARAM GONDI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11D18;MASARAM GONDI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11D19;MASARAM GONDI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11D1A;MASARAM GONDI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11D1B;MASARAM GONDI LETTER TA;Lo;0;L;;;;;N;;;;;
+11D1C;MASARAM GONDI LETTER THA;Lo;0;L;;;;;N;;;;;
+11D1D;MASARAM GONDI LETTER DA;Lo;0;L;;;;;N;;;;;
+11D1E;MASARAM GONDI LETTER DHA;Lo;0;L;;;;;N;;;;;
+11D1F;MASARAM GONDI LETTER NA;Lo;0;L;;;;;N;;;;;
+11D20;MASARAM GONDI LETTER PA;Lo;0;L;;;;;N;;;;;
+11D21;MASARAM GONDI LETTER PHA;Lo;0;L;;;;;N;;;;;
+11D22;MASARAM GONDI LETTER BA;Lo;0;L;;;;;N;;;;;
+11D23;MASARAM GONDI LETTER BHA;Lo;0;L;;;;;N;;;;;
+11D24;MASARAM GONDI LETTER MA;Lo;0;L;;;;;N;;;;;
+11D25;MASARAM GONDI LETTER YA;Lo;0;L;;;;;N;;;;;
+11D26;MASARAM GONDI LETTER RA;Lo;0;L;;;;;N;;;;;
+11D27;MASARAM GONDI LETTER LA;Lo;0;L;;;;;N;;;;;
+11D28;MASARAM GONDI LETTER VA;Lo;0;L;;;;;N;;;;;
+11D29;MASARAM GONDI LETTER SHA;Lo;0;L;;;;;N;;;;;
+11D2A;MASARAM GONDI LETTER SSA;Lo;0;L;;;;;N;;;;;
+11D2B;MASARAM GONDI LETTER SA;Lo;0;L;;;;;N;;;;;
+11D2C;MASARAM GONDI LETTER HA;Lo;0;L;;;;;N;;;;;
+11D2D;MASARAM GONDI LETTER LLA;Lo;0;L;;;;;N;;;;;
+11D2E;MASARAM GONDI LETTER KSSA;Lo;0;L;;;;;N;;;;;
+11D2F;MASARAM GONDI LETTER JNYA;Lo;0;L;;;;;N;;;;;
+11D30;MASARAM GONDI LETTER TRA;Lo;0;L;;;;;N;;;;;
+11D31;MASARAM GONDI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+11D32;MASARAM GONDI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11D33;MASARAM GONDI VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+11D34;MASARAM GONDI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+11D35;MASARAM GONDI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+11D36;MASARAM GONDI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+11D3A;MASARAM GONDI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+11D3C;MASARAM GONDI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+11D3D;MASARAM GONDI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+11D3F;MASARAM GONDI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+11D40;MASARAM GONDI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11D41;MASARAM GONDI SIGN VISARGA;Mn;0;NSM;;;;;N;;;;;
+11D42;MASARAM GONDI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+11D43;MASARAM GONDI SIGN CANDRA;Mn;0;NSM;;;;;N;;;;;
+11D44;MASARAM GONDI SIGN HALANTA;Mn;9;NSM;;;;;N;;;;;
+11D45;MASARAM GONDI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11D46;MASARAM GONDI REPHA;Lo;0;L;;;;;N;;;;;
+11D47;MASARAM GONDI RA-KARA;Mn;0;NSM;;;;;N;;;;;
+11D50;MASARAM GONDI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11D51;MASARAM GONDI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11D52;MASARAM GONDI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11D53;MASARAM GONDI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+11D54;MASARAM GONDI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+11D55;MASARAM GONDI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+11D56;MASARAM GONDI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+11D57;MASARAM GONDI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+11D58;MASARAM GONDI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+11D59;MASARAM GONDI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
@@ -23685,8 +24352,1448 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;;
16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;;
16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;;
+16FE0;TANGUT ITERATION MARK;Lm;0;L;;;;;N;;;;;
+16FE1;NUSHU ITERATION MARK;Lm;0;L;;;;;N;;;;;
+17000;<Tangut Ideograph, First>;Lo;0;L;;;;;N;;;;;
+187EC;<Tangut Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+18800;TANGUT COMPONENT-001;Lo;0;L;;;;;N;;;;;
+18801;TANGUT COMPONENT-002;Lo;0;L;;;;;N;;;;;
+18802;TANGUT COMPONENT-003;Lo;0;L;;;;;N;;;;;
+18803;TANGUT COMPONENT-004;Lo;0;L;;;;;N;;;;;
+18804;TANGUT COMPONENT-005;Lo;0;L;;;;;N;;;;;
+18805;TANGUT COMPONENT-006;Lo;0;L;;;;;N;;;;;
+18806;TANGUT COMPONENT-007;Lo;0;L;;;;;N;;;;;
+18807;TANGUT COMPONENT-008;Lo;0;L;;;;;N;;;;;
+18808;TANGUT COMPONENT-009;Lo;0;L;;;;;N;;;;;
+18809;TANGUT COMPONENT-010;Lo;0;L;;;;;N;;;;;
+1880A;TANGUT COMPONENT-011;Lo;0;L;;;;;N;;;;;
+1880B;TANGUT COMPONENT-012;Lo;0;L;;;;;N;;;;;
+1880C;TANGUT COMPONENT-013;Lo;0;L;;;;;N;;;;;
+1880D;TANGUT COMPONENT-014;Lo;0;L;;;;;N;;;;;
+1880E;TANGUT COMPONENT-015;Lo;0;L;;;;;N;;;;;
+1880F;TANGUT COMPONENT-016;Lo;0;L;;;;;N;;;;;
+18810;TANGUT COMPONENT-017;Lo;0;L;;;;;N;;;;;
+18811;TANGUT COMPONENT-018;Lo;0;L;;;;;N;;;;;
+18812;TANGUT COMPONENT-019;Lo;0;L;;;;;N;;;;;
+18813;TANGUT COMPONENT-020;Lo;0;L;;;;;N;;;;;
+18814;TANGUT COMPONENT-021;Lo;0;L;;;;;N;;;;;
+18815;TANGUT COMPONENT-022;Lo;0;L;;;;;N;;;;;
+18816;TANGUT COMPONENT-023;Lo;0;L;;;;;N;;;;;
+18817;TANGUT COMPONENT-024;Lo;0;L;;;;;N;;;;;
+18818;TANGUT COMPONENT-025;Lo;0;L;;;;;N;;;;;
+18819;TANGUT COMPONENT-026;Lo;0;L;;;;;N;;;;;
+1881A;TANGUT COMPONENT-027;Lo;0;L;;;;;N;;;;;
+1881B;TANGUT COMPONENT-028;Lo;0;L;;;;;N;;;;;
+1881C;TANGUT COMPONENT-029;Lo;0;L;;;;;N;;;;;
+1881D;TANGUT COMPONENT-030;Lo;0;L;;;;;N;;;;;
+1881E;TANGUT COMPONENT-031;Lo;0;L;;;;;N;;;;;
+1881F;TANGUT COMPONENT-032;Lo;0;L;;;;;N;;;;;
+18820;TANGUT COMPONENT-033;Lo;0;L;;;;;N;;;;;
+18821;TANGUT COMPONENT-034;Lo;0;L;;;;;N;;;;;
+18822;TANGUT COMPONENT-035;Lo;0;L;;;;;N;;;;;
+18823;TANGUT COMPONENT-036;Lo;0;L;;;;;N;;;;;
+18824;TANGUT COMPONENT-037;Lo;0;L;;;;;N;;;;;
+18825;TANGUT COMPONENT-038;Lo;0;L;;;;;N;;;;;
+18826;TANGUT COMPONENT-039;Lo;0;L;;;;;N;;;;;
+18827;TANGUT COMPONENT-040;Lo;0;L;;;;;N;;;;;
+18828;TANGUT COMPONENT-041;Lo;0;L;;;;;N;;;;;
+18829;TANGUT COMPONENT-042;Lo;0;L;;;;;N;;;;;
+1882A;TANGUT COMPONENT-043;Lo;0;L;;;;;N;;;;;
+1882B;TANGUT COMPONENT-044;Lo;0;L;;;;;N;;;;;
+1882C;TANGUT COMPONENT-045;Lo;0;L;;;;;N;;;;;
+1882D;TANGUT COMPONENT-046;Lo;0;L;;;;;N;;;;;
+1882E;TANGUT COMPONENT-047;Lo;0;L;;;;;N;;;;;
+1882F;TANGUT COMPONENT-048;Lo;0;L;;;;;N;;;;;
+18830;TANGUT COMPONENT-049;Lo;0;L;;;;;N;;;;;
+18831;TANGUT COMPONENT-050;Lo;0;L;;;;;N;;;;;
+18832;TANGUT COMPONENT-051;Lo;0;L;;;;;N;;;;;
+18833;TANGUT COMPONENT-052;Lo;0;L;;;;;N;;;;;
+18834;TANGUT COMPONENT-053;Lo;0;L;;;;;N;;;;;
+18835;TANGUT COMPONENT-054;Lo;0;L;;;;;N;;;;;
+18836;TANGUT COMPONENT-055;Lo;0;L;;;;;N;;;;;
+18837;TANGUT COMPONENT-056;Lo;0;L;;;;;N;;;;;
+18838;TANGUT COMPONENT-057;Lo;0;L;;;;;N;;;;;
+18839;TANGUT COMPONENT-058;Lo;0;L;;;;;N;;;;;
+1883A;TANGUT COMPONENT-059;Lo;0;L;;;;;N;;;;;
+1883B;TANGUT COMPONENT-060;Lo;0;L;;;;;N;;;;;
+1883C;TANGUT COMPONENT-061;Lo;0;L;;;;;N;;;;;
+1883D;TANGUT COMPONENT-062;Lo;0;L;;;;;N;;;;;
+1883E;TANGUT COMPONENT-063;Lo;0;L;;;;;N;;;;;
+1883F;TANGUT COMPONENT-064;Lo;0;L;;;;;N;;;;;
+18840;TANGUT COMPONENT-065;Lo;0;L;;;;;N;;;;;
+18841;TANGUT COMPONENT-066;Lo;0;L;;;;;N;;;;;
+18842;TANGUT COMPONENT-067;Lo;0;L;;;;;N;;;;;
+18843;TANGUT COMPONENT-068;Lo;0;L;;;;;N;;;;;
+18844;TANGUT COMPONENT-069;Lo;0;L;;;;;N;;;;;
+18845;TANGUT COMPONENT-070;Lo;0;L;;;;;N;;;;;
+18846;TANGUT COMPONENT-071;Lo;0;L;;;;;N;;;;;
+18847;TANGUT COMPONENT-072;Lo;0;L;;;;;N;;;;;
+18848;TANGUT COMPONENT-073;Lo;0;L;;;;;N;;;;;
+18849;TANGUT COMPONENT-074;Lo;0;L;;;;;N;;;;;
+1884A;TANGUT COMPONENT-075;Lo;0;L;;;;;N;;;;;
+1884B;TANGUT COMPONENT-076;Lo;0;L;;;;;N;;;;;
+1884C;TANGUT COMPONENT-077;Lo;0;L;;;;;N;;;;;
+1884D;TANGUT COMPONENT-078;Lo;0;L;;;;;N;;;;;
+1884E;TANGUT COMPONENT-079;Lo;0;L;;;;;N;;;;;
+1884F;TANGUT COMPONENT-080;Lo;0;L;;;;;N;;;;;
+18850;TANGUT COMPONENT-081;Lo;0;L;;;;;N;;;;;
+18851;TANGUT COMPONENT-082;Lo;0;L;;;;;N;;;;;
+18852;TANGUT COMPONENT-083;Lo;0;L;;;;;N;;;;;
+18853;TANGUT COMPONENT-084;Lo;0;L;;;;;N;;;;;
+18854;TANGUT COMPONENT-085;Lo;0;L;;;;;N;;;;;
+18855;TANGUT COMPONENT-086;Lo;0;L;;;;;N;;;;;
+18856;TANGUT COMPONENT-087;Lo;0;L;;;;;N;;;;;
+18857;TANGUT COMPONENT-088;Lo;0;L;;;;;N;;;;;
+18858;TANGUT COMPONENT-089;Lo;0;L;;;;;N;;;;;
+18859;TANGUT COMPONENT-090;Lo;0;L;;;;;N;;;;;
+1885A;TANGUT COMPONENT-091;Lo;0;L;;;;;N;;;;;
+1885B;TANGUT COMPONENT-092;Lo;0;L;;;;;N;;;;;
+1885C;TANGUT COMPONENT-093;Lo;0;L;;;;;N;;;;;
+1885D;TANGUT COMPONENT-094;Lo;0;L;;;;;N;;;;;
+1885E;TANGUT COMPONENT-095;Lo;0;L;;;;;N;;;;;
+1885F;TANGUT COMPONENT-096;Lo;0;L;;;;;N;;;;;
+18860;TANGUT COMPONENT-097;Lo;0;L;;;;;N;;;;;
+18861;TANGUT COMPONENT-098;Lo;0;L;;;;;N;;;;;
+18862;TANGUT COMPONENT-099;Lo;0;L;;;;;N;;;;;
+18863;TANGUT COMPONENT-100;Lo;0;L;;;;;N;;;;;
+18864;TANGUT COMPONENT-101;Lo;0;L;;;;;N;;;;;
+18865;TANGUT COMPONENT-102;Lo;0;L;;;;;N;;;;;
+18866;TANGUT COMPONENT-103;Lo;0;L;;;;;N;;;;;
+18867;TANGUT COMPONENT-104;Lo;0;L;;;;;N;;;;;
+18868;TANGUT COMPONENT-105;Lo;0;L;;;;;N;;;;;
+18869;TANGUT COMPONENT-106;Lo;0;L;;;;;N;;;;;
+1886A;TANGUT COMPONENT-107;Lo;0;L;;;;;N;;;;;
+1886B;TANGUT COMPONENT-108;Lo;0;L;;;;;N;;;;;
+1886C;TANGUT COMPONENT-109;Lo;0;L;;;;;N;;;;;
+1886D;TANGUT COMPONENT-110;Lo;0;L;;;;;N;;;;;
+1886E;TANGUT COMPONENT-111;Lo;0;L;;;;;N;;;;;
+1886F;TANGUT COMPONENT-112;Lo;0;L;;;;;N;;;;;
+18870;TANGUT COMPONENT-113;Lo;0;L;;;;;N;;;;;
+18871;TANGUT COMPONENT-114;Lo;0;L;;;;;N;;;;;
+18872;TANGUT COMPONENT-115;Lo;0;L;;;;;N;;;;;
+18873;TANGUT COMPONENT-116;Lo;0;L;;;;;N;;;;;
+18874;TANGUT COMPONENT-117;Lo;0;L;;;;;N;;;;;
+18875;TANGUT COMPONENT-118;Lo;0;L;;;;;N;;;;;
+18876;TANGUT COMPONENT-119;Lo;0;L;;;;;N;;;;;
+18877;TANGUT COMPONENT-120;Lo;0;L;;;;;N;;;;;
+18878;TANGUT COMPONENT-121;Lo;0;L;;;;;N;;;;;
+18879;TANGUT COMPONENT-122;Lo;0;L;;;;;N;;;;;
+1887A;TANGUT COMPONENT-123;Lo;0;L;;;;;N;;;;;
+1887B;TANGUT COMPONENT-124;Lo;0;L;;;;;N;;;;;
+1887C;TANGUT COMPONENT-125;Lo;0;L;;;;;N;;;;;
+1887D;TANGUT COMPONENT-126;Lo;0;L;;;;;N;;;;;
+1887E;TANGUT COMPONENT-127;Lo;0;L;;;;;N;;;;;
+1887F;TANGUT COMPONENT-128;Lo;0;L;;;;;N;;;;;
+18880;TANGUT COMPONENT-129;Lo;0;L;;;;;N;;;;;
+18881;TANGUT COMPONENT-130;Lo;0;L;;;;;N;;;;;
+18882;TANGUT COMPONENT-131;Lo;0;L;;;;;N;;;;;
+18883;TANGUT COMPONENT-132;Lo;0;L;;;;;N;;;;;
+18884;TANGUT COMPONENT-133;Lo;0;L;;;;;N;;;;;
+18885;TANGUT COMPONENT-134;Lo;0;L;;;;;N;;;;;
+18886;TANGUT COMPONENT-135;Lo;0;L;;;;;N;;;;;
+18887;TANGUT COMPONENT-136;Lo;0;L;;;;;N;;;;;
+18888;TANGUT COMPONENT-137;Lo;0;L;;;;;N;;;;;
+18889;TANGUT COMPONENT-138;Lo;0;L;;;;;N;;;;;
+1888A;TANGUT COMPONENT-139;Lo;0;L;;;;;N;;;;;
+1888B;TANGUT COMPONENT-140;Lo;0;L;;;;;N;;;;;
+1888C;TANGUT COMPONENT-141;Lo;0;L;;;;;N;;;;;
+1888D;TANGUT COMPONENT-142;Lo;0;L;;;;;N;;;;;
+1888E;TANGUT COMPONENT-143;Lo;0;L;;;;;N;;;;;
+1888F;TANGUT COMPONENT-144;Lo;0;L;;;;;N;;;;;
+18890;TANGUT COMPONENT-145;Lo;0;L;;;;;N;;;;;
+18891;TANGUT COMPONENT-146;Lo;0;L;;;;;N;;;;;
+18892;TANGUT COMPONENT-147;Lo;0;L;;;;;N;;;;;
+18893;TANGUT COMPONENT-148;Lo;0;L;;;;;N;;;;;
+18894;TANGUT COMPONENT-149;Lo;0;L;;;;;N;;;;;
+18895;TANGUT COMPONENT-150;Lo;0;L;;;;;N;;;;;
+18896;TANGUT COMPONENT-151;Lo;0;L;;;;;N;;;;;
+18897;TANGUT COMPONENT-152;Lo;0;L;;;;;N;;;;;
+18898;TANGUT COMPONENT-153;Lo;0;L;;;;;N;;;;;
+18899;TANGUT COMPONENT-154;Lo;0;L;;;;;N;;;;;
+1889A;TANGUT COMPONENT-155;Lo;0;L;;;;;N;;;;;
+1889B;TANGUT COMPONENT-156;Lo;0;L;;;;;N;;;;;
+1889C;TANGUT COMPONENT-157;Lo;0;L;;;;;N;;;;;
+1889D;TANGUT COMPONENT-158;Lo;0;L;;;;;N;;;;;
+1889E;TANGUT COMPONENT-159;Lo;0;L;;;;;N;;;;;
+1889F;TANGUT COMPONENT-160;Lo;0;L;;;;;N;;;;;
+188A0;TANGUT COMPONENT-161;Lo;0;L;;;;;N;;;;;
+188A1;TANGUT COMPONENT-162;Lo;0;L;;;;;N;;;;;
+188A2;TANGUT COMPONENT-163;Lo;0;L;;;;;N;;;;;
+188A3;TANGUT COMPONENT-164;Lo;0;L;;;;;N;;;;;
+188A4;TANGUT COMPONENT-165;Lo;0;L;;;;;N;;;;;
+188A5;TANGUT COMPONENT-166;Lo;0;L;;;;;N;;;;;
+188A6;TANGUT COMPONENT-167;Lo;0;L;;;;;N;;;;;
+188A7;TANGUT COMPONENT-168;Lo;0;L;;;;;N;;;;;
+188A8;TANGUT COMPONENT-169;Lo;0;L;;;;;N;;;;;
+188A9;TANGUT COMPONENT-170;Lo;0;L;;;;;N;;;;;
+188AA;TANGUT COMPONENT-171;Lo;0;L;;;;;N;;;;;
+188AB;TANGUT COMPONENT-172;Lo;0;L;;;;;N;;;;;
+188AC;TANGUT COMPONENT-173;Lo;0;L;;;;;N;;;;;
+188AD;TANGUT COMPONENT-174;Lo;0;L;;;;;N;;;;;
+188AE;TANGUT COMPONENT-175;Lo;0;L;;;;;N;;;;;
+188AF;TANGUT COMPONENT-176;Lo;0;L;;;;;N;;;;;
+188B0;TANGUT COMPONENT-177;Lo;0;L;;;;;N;;;;;
+188B1;TANGUT COMPONENT-178;Lo;0;L;;;;;N;;;;;
+188B2;TANGUT COMPONENT-179;Lo;0;L;;;;;N;;;;;
+188B3;TANGUT COMPONENT-180;Lo;0;L;;;;;N;;;;;
+188B4;TANGUT COMPONENT-181;Lo;0;L;;;;;N;;;;;
+188B5;TANGUT COMPONENT-182;Lo;0;L;;;;;N;;;;;
+188B6;TANGUT COMPONENT-183;Lo;0;L;;;;;N;;;;;
+188B7;TANGUT COMPONENT-184;Lo;0;L;;;;;N;;;;;
+188B8;TANGUT COMPONENT-185;Lo;0;L;;;;;N;;;;;
+188B9;TANGUT COMPONENT-186;Lo;0;L;;;;;N;;;;;
+188BA;TANGUT COMPONENT-187;Lo;0;L;;;;;N;;;;;
+188BB;TANGUT COMPONENT-188;Lo;0;L;;;;;N;;;;;
+188BC;TANGUT COMPONENT-189;Lo;0;L;;;;;N;;;;;
+188BD;TANGUT COMPONENT-190;Lo;0;L;;;;;N;;;;;
+188BE;TANGUT COMPONENT-191;Lo;0;L;;;;;N;;;;;
+188BF;TANGUT COMPONENT-192;Lo;0;L;;;;;N;;;;;
+188C0;TANGUT COMPONENT-193;Lo;0;L;;;;;N;;;;;
+188C1;TANGUT COMPONENT-194;Lo;0;L;;;;;N;;;;;
+188C2;TANGUT COMPONENT-195;Lo;0;L;;;;;N;;;;;
+188C3;TANGUT COMPONENT-196;Lo;0;L;;;;;N;;;;;
+188C4;TANGUT COMPONENT-197;Lo;0;L;;;;;N;;;;;
+188C5;TANGUT COMPONENT-198;Lo;0;L;;;;;N;;;;;
+188C6;TANGUT COMPONENT-199;Lo;0;L;;;;;N;;;;;
+188C7;TANGUT COMPONENT-200;Lo;0;L;;;;;N;;;;;
+188C8;TANGUT COMPONENT-201;Lo;0;L;;;;;N;;;;;
+188C9;TANGUT COMPONENT-202;Lo;0;L;;;;;N;;;;;
+188CA;TANGUT COMPONENT-203;Lo;0;L;;;;;N;;;;;
+188CB;TANGUT COMPONENT-204;Lo;0;L;;;;;N;;;;;
+188CC;TANGUT COMPONENT-205;Lo;0;L;;;;;N;;;;;
+188CD;TANGUT COMPONENT-206;Lo;0;L;;;;;N;;;;;
+188CE;TANGUT COMPONENT-207;Lo;0;L;;;;;N;;;;;
+188CF;TANGUT COMPONENT-208;Lo;0;L;;;;;N;;;;;
+188D0;TANGUT COMPONENT-209;Lo;0;L;;;;;N;;;;;
+188D1;TANGUT COMPONENT-210;Lo;0;L;;;;;N;;;;;
+188D2;TANGUT COMPONENT-211;Lo;0;L;;;;;N;;;;;
+188D3;TANGUT COMPONENT-212;Lo;0;L;;;;;N;;;;;
+188D4;TANGUT COMPONENT-213;Lo;0;L;;;;;N;;;;;
+188D5;TANGUT COMPONENT-214;Lo;0;L;;;;;N;;;;;
+188D6;TANGUT COMPONENT-215;Lo;0;L;;;;;N;;;;;
+188D7;TANGUT COMPONENT-216;Lo;0;L;;;;;N;;;;;
+188D8;TANGUT COMPONENT-217;Lo;0;L;;;;;N;;;;;
+188D9;TANGUT COMPONENT-218;Lo;0;L;;;;;N;;;;;
+188DA;TANGUT COMPONENT-219;Lo;0;L;;;;;N;;;;;
+188DB;TANGUT COMPONENT-220;Lo;0;L;;;;;N;;;;;
+188DC;TANGUT COMPONENT-221;Lo;0;L;;;;;N;;;;;
+188DD;TANGUT COMPONENT-222;Lo;0;L;;;;;N;;;;;
+188DE;TANGUT COMPONENT-223;Lo;0;L;;;;;N;;;;;
+188DF;TANGUT COMPONENT-224;Lo;0;L;;;;;N;;;;;
+188E0;TANGUT COMPONENT-225;Lo;0;L;;;;;N;;;;;
+188E1;TANGUT COMPONENT-226;Lo;0;L;;;;;N;;;;;
+188E2;TANGUT COMPONENT-227;Lo;0;L;;;;;N;;;;;
+188E3;TANGUT COMPONENT-228;Lo;0;L;;;;;N;;;;;
+188E4;TANGUT COMPONENT-229;Lo;0;L;;;;;N;;;;;
+188E5;TANGUT COMPONENT-230;Lo;0;L;;;;;N;;;;;
+188E6;TANGUT COMPONENT-231;Lo;0;L;;;;;N;;;;;
+188E7;TANGUT COMPONENT-232;Lo;0;L;;;;;N;;;;;
+188E8;TANGUT COMPONENT-233;Lo;0;L;;;;;N;;;;;
+188E9;TANGUT COMPONENT-234;Lo;0;L;;;;;N;;;;;
+188EA;TANGUT COMPONENT-235;Lo;0;L;;;;;N;;;;;
+188EB;TANGUT COMPONENT-236;Lo;0;L;;;;;N;;;;;
+188EC;TANGUT COMPONENT-237;Lo;0;L;;;;;N;;;;;
+188ED;TANGUT COMPONENT-238;Lo;0;L;;;;;N;;;;;
+188EE;TANGUT COMPONENT-239;Lo;0;L;;;;;N;;;;;
+188EF;TANGUT COMPONENT-240;Lo;0;L;;;;;N;;;;;
+188F0;TANGUT COMPONENT-241;Lo;0;L;;;;;N;;;;;
+188F1;TANGUT COMPONENT-242;Lo;0;L;;;;;N;;;;;
+188F2;TANGUT COMPONENT-243;Lo;0;L;;;;;N;;;;;
+188F3;TANGUT COMPONENT-244;Lo;0;L;;;;;N;;;;;
+188F4;TANGUT COMPONENT-245;Lo;0;L;;;;;N;;;;;
+188F5;TANGUT COMPONENT-246;Lo;0;L;;;;;N;;;;;
+188F6;TANGUT COMPONENT-247;Lo;0;L;;;;;N;;;;;
+188F7;TANGUT COMPONENT-248;Lo;0;L;;;;;N;;;;;
+188F8;TANGUT COMPONENT-249;Lo;0;L;;;;;N;;;;;
+188F9;TANGUT COMPONENT-250;Lo;0;L;;;;;N;;;;;
+188FA;TANGUT COMPONENT-251;Lo;0;L;;;;;N;;;;;
+188FB;TANGUT COMPONENT-252;Lo;0;L;;;;;N;;;;;
+188FC;TANGUT COMPONENT-253;Lo;0;L;;;;;N;;;;;
+188FD;TANGUT COMPONENT-254;Lo;0;L;;;;;N;;;;;
+188FE;TANGUT COMPONENT-255;Lo;0;L;;;;;N;;;;;
+188FF;TANGUT COMPONENT-256;Lo;0;L;;;;;N;;;;;
+18900;TANGUT COMPONENT-257;Lo;0;L;;;;;N;;;;;
+18901;TANGUT COMPONENT-258;Lo;0;L;;;;;N;;;;;
+18902;TANGUT COMPONENT-259;Lo;0;L;;;;;N;;;;;
+18903;TANGUT COMPONENT-260;Lo;0;L;;;;;N;;;;;
+18904;TANGUT COMPONENT-261;Lo;0;L;;;;;N;;;;;
+18905;TANGUT COMPONENT-262;Lo;0;L;;;;;N;;;;;
+18906;TANGUT COMPONENT-263;Lo;0;L;;;;;N;;;;;
+18907;TANGUT COMPONENT-264;Lo;0;L;;;;;N;;;;;
+18908;TANGUT COMPONENT-265;Lo;0;L;;;;;N;;;;;
+18909;TANGUT COMPONENT-266;Lo;0;L;;;;;N;;;;;
+1890A;TANGUT COMPONENT-267;Lo;0;L;;;;;N;;;;;
+1890B;TANGUT COMPONENT-268;Lo;0;L;;;;;N;;;;;
+1890C;TANGUT COMPONENT-269;Lo;0;L;;;;;N;;;;;
+1890D;TANGUT COMPONENT-270;Lo;0;L;;;;;N;;;;;
+1890E;TANGUT COMPONENT-271;Lo;0;L;;;;;N;;;;;
+1890F;TANGUT COMPONENT-272;Lo;0;L;;;;;N;;;;;
+18910;TANGUT COMPONENT-273;Lo;0;L;;;;;N;;;;;
+18911;TANGUT COMPONENT-274;Lo;0;L;;;;;N;;;;;
+18912;TANGUT COMPONENT-275;Lo;0;L;;;;;N;;;;;
+18913;TANGUT COMPONENT-276;Lo;0;L;;;;;N;;;;;
+18914;TANGUT COMPONENT-277;Lo;0;L;;;;;N;;;;;
+18915;TANGUT COMPONENT-278;Lo;0;L;;;;;N;;;;;
+18916;TANGUT COMPONENT-279;Lo;0;L;;;;;N;;;;;
+18917;TANGUT COMPONENT-280;Lo;0;L;;;;;N;;;;;
+18918;TANGUT COMPONENT-281;Lo;0;L;;;;;N;;;;;
+18919;TANGUT COMPONENT-282;Lo;0;L;;;;;N;;;;;
+1891A;TANGUT COMPONENT-283;Lo;0;L;;;;;N;;;;;
+1891B;TANGUT COMPONENT-284;Lo;0;L;;;;;N;;;;;
+1891C;TANGUT COMPONENT-285;Lo;0;L;;;;;N;;;;;
+1891D;TANGUT COMPONENT-286;Lo;0;L;;;;;N;;;;;
+1891E;TANGUT COMPONENT-287;Lo;0;L;;;;;N;;;;;
+1891F;TANGUT COMPONENT-288;Lo;0;L;;;;;N;;;;;
+18920;TANGUT COMPONENT-289;Lo;0;L;;;;;N;;;;;
+18921;TANGUT COMPONENT-290;Lo;0;L;;;;;N;;;;;
+18922;TANGUT COMPONENT-291;Lo;0;L;;;;;N;;;;;
+18923;TANGUT COMPONENT-292;Lo;0;L;;;;;N;;;;;
+18924;TANGUT COMPONENT-293;Lo;0;L;;;;;N;;;;;
+18925;TANGUT COMPONENT-294;Lo;0;L;;;;;N;;;;;
+18926;TANGUT COMPONENT-295;Lo;0;L;;;;;N;;;;;
+18927;TANGUT COMPONENT-296;Lo;0;L;;;;;N;;;;;
+18928;TANGUT COMPONENT-297;Lo;0;L;;;;;N;;;;;
+18929;TANGUT COMPONENT-298;Lo;0;L;;;;;N;;;;;
+1892A;TANGUT COMPONENT-299;Lo;0;L;;;;;N;;;;;
+1892B;TANGUT COMPONENT-300;Lo;0;L;;;;;N;;;;;
+1892C;TANGUT COMPONENT-301;Lo;0;L;;;;;N;;;;;
+1892D;TANGUT COMPONENT-302;Lo;0;L;;;;;N;;;;;
+1892E;TANGUT COMPONENT-303;Lo;0;L;;;;;N;;;;;
+1892F;TANGUT COMPONENT-304;Lo;0;L;;;;;N;;;;;
+18930;TANGUT COMPONENT-305;Lo;0;L;;;;;N;;;;;
+18931;TANGUT COMPONENT-306;Lo;0;L;;;;;N;;;;;
+18932;TANGUT COMPONENT-307;Lo;0;L;;;;;N;;;;;
+18933;TANGUT COMPONENT-308;Lo;0;L;;;;;N;;;;;
+18934;TANGUT COMPONENT-309;Lo;0;L;;;;;N;;;;;
+18935;TANGUT COMPONENT-310;Lo;0;L;;;;;N;;;;;
+18936;TANGUT COMPONENT-311;Lo;0;L;;;;;N;;;;;
+18937;TANGUT COMPONENT-312;Lo;0;L;;;;;N;;;;;
+18938;TANGUT COMPONENT-313;Lo;0;L;;;;;N;;;;;
+18939;TANGUT COMPONENT-314;Lo;0;L;;;;;N;;;;;
+1893A;TANGUT COMPONENT-315;Lo;0;L;;;;;N;;;;;
+1893B;TANGUT COMPONENT-316;Lo;0;L;;;;;N;;;;;
+1893C;TANGUT COMPONENT-317;Lo;0;L;;;;;N;;;;;
+1893D;TANGUT COMPONENT-318;Lo;0;L;;;;;N;;;;;
+1893E;TANGUT COMPONENT-319;Lo;0;L;;;;;N;;;;;
+1893F;TANGUT COMPONENT-320;Lo;0;L;;;;;N;;;;;
+18940;TANGUT COMPONENT-321;Lo;0;L;;;;;N;;;;;
+18941;TANGUT COMPONENT-322;Lo;0;L;;;;;N;;;;;
+18942;TANGUT COMPONENT-323;Lo;0;L;;;;;N;;;;;
+18943;TANGUT COMPONENT-324;Lo;0;L;;;;;N;;;;;
+18944;TANGUT COMPONENT-325;Lo;0;L;;;;;N;;;;;
+18945;TANGUT COMPONENT-326;Lo;0;L;;;;;N;;;;;
+18946;TANGUT COMPONENT-327;Lo;0;L;;;;;N;;;;;
+18947;TANGUT COMPONENT-328;Lo;0;L;;;;;N;;;;;
+18948;TANGUT COMPONENT-329;Lo;0;L;;;;;N;;;;;
+18949;TANGUT COMPONENT-330;Lo;0;L;;;;;N;;;;;
+1894A;TANGUT COMPONENT-331;Lo;0;L;;;;;N;;;;;
+1894B;TANGUT COMPONENT-332;Lo;0;L;;;;;N;;;;;
+1894C;TANGUT COMPONENT-333;Lo;0;L;;;;;N;;;;;
+1894D;TANGUT COMPONENT-334;Lo;0;L;;;;;N;;;;;
+1894E;TANGUT COMPONENT-335;Lo;0;L;;;;;N;;;;;
+1894F;TANGUT COMPONENT-336;Lo;0;L;;;;;N;;;;;
+18950;TANGUT COMPONENT-337;Lo;0;L;;;;;N;;;;;
+18951;TANGUT COMPONENT-338;Lo;0;L;;;;;N;;;;;
+18952;TANGUT COMPONENT-339;Lo;0;L;;;;;N;;;;;
+18953;TANGUT COMPONENT-340;Lo;0;L;;;;;N;;;;;
+18954;TANGUT COMPONENT-341;Lo;0;L;;;;;N;;;;;
+18955;TANGUT COMPONENT-342;Lo;0;L;;;;;N;;;;;
+18956;TANGUT COMPONENT-343;Lo;0;L;;;;;N;;;;;
+18957;TANGUT COMPONENT-344;Lo;0;L;;;;;N;;;;;
+18958;TANGUT COMPONENT-345;Lo;0;L;;;;;N;;;;;
+18959;TANGUT COMPONENT-346;Lo;0;L;;;;;N;;;;;
+1895A;TANGUT COMPONENT-347;Lo;0;L;;;;;N;;;;;
+1895B;TANGUT COMPONENT-348;Lo;0;L;;;;;N;;;;;
+1895C;TANGUT COMPONENT-349;Lo;0;L;;;;;N;;;;;
+1895D;TANGUT COMPONENT-350;Lo;0;L;;;;;N;;;;;
+1895E;TANGUT COMPONENT-351;Lo;0;L;;;;;N;;;;;
+1895F;TANGUT COMPONENT-352;Lo;0;L;;;;;N;;;;;
+18960;TANGUT COMPONENT-353;Lo;0;L;;;;;N;;;;;
+18961;TANGUT COMPONENT-354;Lo;0;L;;;;;N;;;;;
+18962;TANGUT COMPONENT-355;Lo;0;L;;;;;N;;;;;
+18963;TANGUT COMPONENT-356;Lo;0;L;;;;;N;;;;;
+18964;TANGUT COMPONENT-357;Lo;0;L;;;;;N;;;;;
+18965;TANGUT COMPONENT-358;Lo;0;L;;;;;N;;;;;
+18966;TANGUT COMPONENT-359;Lo;0;L;;;;;N;;;;;
+18967;TANGUT COMPONENT-360;Lo;0;L;;;;;N;;;;;
+18968;TANGUT COMPONENT-361;Lo;0;L;;;;;N;;;;;
+18969;TANGUT COMPONENT-362;Lo;0;L;;;;;N;;;;;
+1896A;TANGUT COMPONENT-363;Lo;0;L;;;;;N;;;;;
+1896B;TANGUT COMPONENT-364;Lo;0;L;;;;;N;;;;;
+1896C;TANGUT COMPONENT-365;Lo;0;L;;;;;N;;;;;
+1896D;TANGUT COMPONENT-366;Lo;0;L;;;;;N;;;;;
+1896E;TANGUT COMPONENT-367;Lo;0;L;;;;;N;;;;;
+1896F;TANGUT COMPONENT-368;Lo;0;L;;;;;N;;;;;
+18970;TANGUT COMPONENT-369;Lo;0;L;;;;;N;;;;;
+18971;TANGUT COMPONENT-370;Lo;0;L;;;;;N;;;;;
+18972;TANGUT COMPONENT-371;Lo;0;L;;;;;N;;;;;
+18973;TANGUT COMPONENT-372;Lo;0;L;;;;;N;;;;;
+18974;TANGUT COMPONENT-373;Lo;0;L;;;;;N;;;;;
+18975;TANGUT COMPONENT-374;Lo;0;L;;;;;N;;;;;
+18976;TANGUT COMPONENT-375;Lo;0;L;;;;;N;;;;;
+18977;TANGUT COMPONENT-376;Lo;0;L;;;;;N;;;;;
+18978;TANGUT COMPONENT-377;Lo;0;L;;;;;N;;;;;
+18979;TANGUT COMPONENT-378;Lo;0;L;;;;;N;;;;;
+1897A;TANGUT COMPONENT-379;Lo;0;L;;;;;N;;;;;
+1897B;TANGUT COMPONENT-380;Lo;0;L;;;;;N;;;;;
+1897C;TANGUT COMPONENT-381;Lo;0;L;;;;;N;;;;;
+1897D;TANGUT COMPONENT-382;Lo;0;L;;;;;N;;;;;
+1897E;TANGUT COMPONENT-383;Lo;0;L;;;;;N;;;;;
+1897F;TANGUT COMPONENT-384;Lo;0;L;;;;;N;;;;;
+18980;TANGUT COMPONENT-385;Lo;0;L;;;;;N;;;;;
+18981;TANGUT COMPONENT-386;Lo;0;L;;;;;N;;;;;
+18982;TANGUT COMPONENT-387;Lo;0;L;;;;;N;;;;;
+18983;TANGUT COMPONENT-388;Lo;0;L;;;;;N;;;;;
+18984;TANGUT COMPONENT-389;Lo;0;L;;;;;N;;;;;
+18985;TANGUT COMPONENT-390;Lo;0;L;;;;;N;;;;;
+18986;TANGUT COMPONENT-391;Lo;0;L;;;;;N;;;;;
+18987;TANGUT COMPONENT-392;Lo;0;L;;;;;N;;;;;
+18988;TANGUT COMPONENT-393;Lo;0;L;;;;;N;;;;;
+18989;TANGUT COMPONENT-394;Lo;0;L;;;;;N;;;;;
+1898A;TANGUT COMPONENT-395;Lo;0;L;;;;;N;;;;;
+1898B;TANGUT COMPONENT-396;Lo;0;L;;;;;N;;;;;
+1898C;TANGUT COMPONENT-397;Lo;0;L;;;;;N;;;;;
+1898D;TANGUT COMPONENT-398;Lo;0;L;;;;;N;;;;;
+1898E;TANGUT COMPONENT-399;Lo;0;L;;;;;N;;;;;
+1898F;TANGUT COMPONENT-400;Lo;0;L;;;;;N;;;;;
+18990;TANGUT COMPONENT-401;Lo;0;L;;;;;N;;;;;
+18991;TANGUT COMPONENT-402;Lo;0;L;;;;;N;;;;;
+18992;TANGUT COMPONENT-403;Lo;0;L;;;;;N;;;;;
+18993;TANGUT COMPONENT-404;Lo;0;L;;;;;N;;;;;
+18994;TANGUT COMPONENT-405;Lo;0;L;;;;;N;;;;;
+18995;TANGUT COMPONENT-406;Lo;0;L;;;;;N;;;;;
+18996;TANGUT COMPONENT-407;Lo;0;L;;;;;N;;;;;
+18997;TANGUT COMPONENT-408;Lo;0;L;;;;;N;;;;;
+18998;TANGUT COMPONENT-409;Lo;0;L;;;;;N;;;;;
+18999;TANGUT COMPONENT-410;Lo;0;L;;;;;N;;;;;
+1899A;TANGUT COMPONENT-411;Lo;0;L;;;;;N;;;;;
+1899B;TANGUT COMPONENT-412;Lo;0;L;;;;;N;;;;;
+1899C;TANGUT COMPONENT-413;Lo;0;L;;;;;N;;;;;
+1899D;TANGUT COMPONENT-414;Lo;0;L;;;;;N;;;;;
+1899E;TANGUT COMPONENT-415;Lo;0;L;;;;;N;;;;;
+1899F;TANGUT COMPONENT-416;Lo;0;L;;;;;N;;;;;
+189A0;TANGUT COMPONENT-417;Lo;0;L;;;;;N;;;;;
+189A1;TANGUT COMPONENT-418;Lo;0;L;;;;;N;;;;;
+189A2;TANGUT COMPONENT-419;Lo;0;L;;;;;N;;;;;
+189A3;TANGUT COMPONENT-420;Lo;0;L;;;;;N;;;;;
+189A4;TANGUT COMPONENT-421;Lo;0;L;;;;;N;;;;;
+189A5;TANGUT COMPONENT-422;Lo;0;L;;;;;N;;;;;
+189A6;TANGUT COMPONENT-423;Lo;0;L;;;;;N;;;;;
+189A7;TANGUT COMPONENT-424;Lo;0;L;;;;;N;;;;;
+189A8;TANGUT COMPONENT-425;Lo;0;L;;;;;N;;;;;
+189A9;TANGUT COMPONENT-426;Lo;0;L;;;;;N;;;;;
+189AA;TANGUT COMPONENT-427;Lo;0;L;;;;;N;;;;;
+189AB;TANGUT COMPONENT-428;Lo;0;L;;;;;N;;;;;
+189AC;TANGUT COMPONENT-429;Lo;0;L;;;;;N;;;;;
+189AD;TANGUT COMPONENT-430;Lo;0;L;;;;;N;;;;;
+189AE;TANGUT COMPONENT-431;Lo;0;L;;;;;N;;;;;
+189AF;TANGUT COMPONENT-432;Lo;0;L;;;;;N;;;;;
+189B0;TANGUT COMPONENT-433;Lo;0;L;;;;;N;;;;;
+189B1;TANGUT COMPONENT-434;Lo;0;L;;;;;N;;;;;
+189B2;TANGUT COMPONENT-435;Lo;0;L;;;;;N;;;;;
+189B3;TANGUT COMPONENT-436;Lo;0;L;;;;;N;;;;;
+189B4;TANGUT COMPONENT-437;Lo;0;L;;;;;N;;;;;
+189B5;TANGUT COMPONENT-438;Lo;0;L;;;;;N;;;;;
+189B6;TANGUT COMPONENT-439;Lo;0;L;;;;;N;;;;;
+189B7;TANGUT COMPONENT-440;Lo;0;L;;;;;N;;;;;
+189B8;TANGUT COMPONENT-441;Lo;0;L;;;;;N;;;;;
+189B9;TANGUT COMPONENT-442;Lo;0;L;;;;;N;;;;;
+189BA;TANGUT COMPONENT-443;Lo;0;L;;;;;N;;;;;
+189BB;TANGUT COMPONENT-444;Lo;0;L;;;;;N;;;;;
+189BC;TANGUT COMPONENT-445;Lo;0;L;;;;;N;;;;;
+189BD;TANGUT COMPONENT-446;Lo;0;L;;;;;N;;;;;
+189BE;TANGUT COMPONENT-447;Lo;0;L;;;;;N;;;;;
+189BF;TANGUT COMPONENT-448;Lo;0;L;;;;;N;;;;;
+189C0;TANGUT COMPONENT-449;Lo;0;L;;;;;N;;;;;
+189C1;TANGUT COMPONENT-450;Lo;0;L;;;;;N;;;;;
+189C2;TANGUT COMPONENT-451;Lo;0;L;;;;;N;;;;;
+189C3;TANGUT COMPONENT-452;Lo;0;L;;;;;N;;;;;
+189C4;TANGUT COMPONENT-453;Lo;0;L;;;;;N;;;;;
+189C5;TANGUT COMPONENT-454;Lo;0;L;;;;;N;;;;;
+189C6;TANGUT COMPONENT-455;Lo;0;L;;;;;N;;;;;
+189C7;TANGUT COMPONENT-456;Lo;0;L;;;;;N;;;;;
+189C8;TANGUT COMPONENT-457;Lo;0;L;;;;;N;;;;;
+189C9;TANGUT COMPONENT-458;Lo;0;L;;;;;N;;;;;
+189CA;TANGUT COMPONENT-459;Lo;0;L;;;;;N;;;;;
+189CB;TANGUT COMPONENT-460;Lo;0;L;;;;;N;;;;;
+189CC;TANGUT COMPONENT-461;Lo;0;L;;;;;N;;;;;
+189CD;TANGUT COMPONENT-462;Lo;0;L;;;;;N;;;;;
+189CE;TANGUT COMPONENT-463;Lo;0;L;;;;;N;;;;;
+189CF;TANGUT COMPONENT-464;Lo;0;L;;;;;N;;;;;
+189D0;TANGUT COMPONENT-465;Lo;0;L;;;;;N;;;;;
+189D1;TANGUT COMPONENT-466;Lo;0;L;;;;;N;;;;;
+189D2;TANGUT COMPONENT-467;Lo;0;L;;;;;N;;;;;
+189D3;TANGUT COMPONENT-468;Lo;0;L;;;;;N;;;;;
+189D4;TANGUT COMPONENT-469;Lo;0;L;;;;;N;;;;;
+189D5;TANGUT COMPONENT-470;Lo;0;L;;;;;N;;;;;
+189D6;TANGUT COMPONENT-471;Lo;0;L;;;;;N;;;;;
+189D7;TANGUT COMPONENT-472;Lo;0;L;;;;;N;;;;;
+189D8;TANGUT COMPONENT-473;Lo;0;L;;;;;N;;;;;
+189D9;TANGUT COMPONENT-474;Lo;0;L;;;;;N;;;;;
+189DA;TANGUT COMPONENT-475;Lo;0;L;;;;;N;;;;;
+189DB;TANGUT COMPONENT-476;Lo;0;L;;;;;N;;;;;
+189DC;TANGUT COMPONENT-477;Lo;0;L;;;;;N;;;;;
+189DD;TANGUT COMPONENT-478;Lo;0;L;;;;;N;;;;;
+189DE;TANGUT COMPONENT-479;Lo;0;L;;;;;N;;;;;
+189DF;TANGUT COMPONENT-480;Lo;0;L;;;;;N;;;;;
+189E0;TANGUT COMPONENT-481;Lo;0;L;;;;;N;;;;;
+189E1;TANGUT COMPONENT-482;Lo;0;L;;;;;N;;;;;
+189E2;TANGUT COMPONENT-483;Lo;0;L;;;;;N;;;;;
+189E3;TANGUT COMPONENT-484;Lo;0;L;;;;;N;;;;;
+189E4;TANGUT COMPONENT-485;Lo;0;L;;;;;N;;;;;
+189E5;TANGUT COMPONENT-486;Lo;0;L;;;;;N;;;;;
+189E6;TANGUT COMPONENT-487;Lo;0;L;;;;;N;;;;;
+189E7;TANGUT COMPONENT-488;Lo;0;L;;;;;N;;;;;
+189E8;TANGUT COMPONENT-489;Lo;0;L;;;;;N;;;;;
+189E9;TANGUT COMPONENT-490;Lo;0;L;;;;;N;;;;;
+189EA;TANGUT COMPONENT-491;Lo;0;L;;;;;N;;;;;
+189EB;TANGUT COMPONENT-492;Lo;0;L;;;;;N;;;;;
+189EC;TANGUT COMPONENT-493;Lo;0;L;;;;;N;;;;;
+189ED;TANGUT COMPONENT-494;Lo;0;L;;;;;N;;;;;
+189EE;TANGUT COMPONENT-495;Lo;0;L;;;;;N;;;;;
+189EF;TANGUT COMPONENT-496;Lo;0;L;;;;;N;;;;;
+189F0;TANGUT COMPONENT-497;Lo;0;L;;;;;N;;;;;
+189F1;TANGUT COMPONENT-498;Lo;0;L;;;;;N;;;;;
+189F2;TANGUT COMPONENT-499;Lo;0;L;;;;;N;;;;;
+189F3;TANGUT COMPONENT-500;Lo;0;L;;;;;N;;;;;
+189F4;TANGUT COMPONENT-501;Lo;0;L;;;;;N;;;;;
+189F5;TANGUT COMPONENT-502;Lo;0;L;;;;;N;;;;;
+189F6;TANGUT COMPONENT-503;Lo;0;L;;;;;N;;;;;
+189F7;TANGUT COMPONENT-504;Lo;0;L;;;;;N;;;;;
+189F8;TANGUT COMPONENT-505;Lo;0;L;;;;;N;;;;;
+189F9;TANGUT COMPONENT-506;Lo;0;L;;;;;N;;;;;
+189FA;TANGUT COMPONENT-507;Lo;0;L;;;;;N;;;;;
+189FB;TANGUT COMPONENT-508;Lo;0;L;;;;;N;;;;;
+189FC;TANGUT COMPONENT-509;Lo;0;L;;;;;N;;;;;
+189FD;TANGUT COMPONENT-510;Lo;0;L;;;;;N;;;;;
+189FE;TANGUT COMPONENT-511;Lo;0;L;;;;;N;;;;;
+189FF;TANGUT COMPONENT-512;Lo;0;L;;;;;N;;;;;
+18A00;TANGUT COMPONENT-513;Lo;0;L;;;;;N;;;;;
+18A01;TANGUT COMPONENT-514;Lo;0;L;;;;;N;;;;;
+18A02;TANGUT COMPONENT-515;Lo;0;L;;;;;N;;;;;
+18A03;TANGUT COMPONENT-516;Lo;0;L;;;;;N;;;;;
+18A04;TANGUT COMPONENT-517;Lo;0;L;;;;;N;;;;;
+18A05;TANGUT COMPONENT-518;Lo;0;L;;;;;N;;;;;
+18A06;TANGUT COMPONENT-519;Lo;0;L;;;;;N;;;;;
+18A07;TANGUT COMPONENT-520;Lo;0;L;;;;;N;;;;;
+18A08;TANGUT COMPONENT-521;Lo;0;L;;;;;N;;;;;
+18A09;TANGUT COMPONENT-522;Lo;0;L;;;;;N;;;;;
+18A0A;TANGUT COMPONENT-523;Lo;0;L;;;;;N;;;;;
+18A0B;TANGUT COMPONENT-524;Lo;0;L;;;;;N;;;;;
+18A0C;TANGUT COMPONENT-525;Lo;0;L;;;;;N;;;;;
+18A0D;TANGUT COMPONENT-526;Lo;0;L;;;;;N;;;;;
+18A0E;TANGUT COMPONENT-527;Lo;0;L;;;;;N;;;;;
+18A0F;TANGUT COMPONENT-528;Lo;0;L;;;;;N;;;;;
+18A10;TANGUT COMPONENT-529;Lo;0;L;;;;;N;;;;;
+18A11;TANGUT COMPONENT-530;Lo;0;L;;;;;N;;;;;
+18A12;TANGUT COMPONENT-531;Lo;0;L;;;;;N;;;;;
+18A13;TANGUT COMPONENT-532;Lo;0;L;;;;;N;;;;;
+18A14;TANGUT COMPONENT-533;Lo;0;L;;;;;N;;;;;
+18A15;TANGUT COMPONENT-534;Lo;0;L;;;;;N;;;;;
+18A16;TANGUT COMPONENT-535;Lo;0;L;;;;;N;;;;;
+18A17;TANGUT COMPONENT-536;Lo;0;L;;;;;N;;;;;
+18A18;TANGUT COMPONENT-537;Lo;0;L;;;;;N;;;;;
+18A19;TANGUT COMPONENT-538;Lo;0;L;;;;;N;;;;;
+18A1A;TANGUT COMPONENT-539;Lo;0;L;;;;;N;;;;;
+18A1B;TANGUT COMPONENT-540;Lo;0;L;;;;;N;;;;;
+18A1C;TANGUT COMPONENT-541;Lo;0;L;;;;;N;;;;;
+18A1D;TANGUT COMPONENT-542;Lo;0;L;;;;;N;;;;;
+18A1E;TANGUT COMPONENT-543;Lo;0;L;;;;;N;;;;;
+18A1F;TANGUT COMPONENT-544;Lo;0;L;;;;;N;;;;;
+18A20;TANGUT COMPONENT-545;Lo;0;L;;;;;N;;;;;
+18A21;TANGUT COMPONENT-546;Lo;0;L;;;;;N;;;;;
+18A22;TANGUT COMPONENT-547;Lo;0;L;;;;;N;;;;;
+18A23;TANGUT COMPONENT-548;Lo;0;L;;;;;N;;;;;
+18A24;TANGUT COMPONENT-549;Lo;0;L;;;;;N;;;;;
+18A25;TANGUT COMPONENT-550;Lo;0;L;;;;;N;;;;;
+18A26;TANGUT COMPONENT-551;Lo;0;L;;;;;N;;;;;
+18A27;TANGUT COMPONENT-552;Lo;0;L;;;;;N;;;;;
+18A28;TANGUT COMPONENT-553;Lo;0;L;;;;;N;;;;;
+18A29;TANGUT COMPONENT-554;Lo;0;L;;;;;N;;;;;
+18A2A;TANGUT COMPONENT-555;Lo;0;L;;;;;N;;;;;
+18A2B;TANGUT COMPONENT-556;Lo;0;L;;;;;N;;;;;
+18A2C;TANGUT COMPONENT-557;Lo;0;L;;;;;N;;;;;
+18A2D;TANGUT COMPONENT-558;Lo;0;L;;;;;N;;;;;
+18A2E;TANGUT COMPONENT-559;Lo;0;L;;;;;N;;;;;
+18A2F;TANGUT COMPONENT-560;Lo;0;L;;;;;N;;;;;
+18A30;TANGUT COMPONENT-561;Lo;0;L;;;;;N;;;;;
+18A31;TANGUT COMPONENT-562;Lo;0;L;;;;;N;;;;;
+18A32;TANGUT COMPONENT-563;Lo;0;L;;;;;N;;;;;
+18A33;TANGUT COMPONENT-564;Lo;0;L;;;;;N;;;;;
+18A34;TANGUT COMPONENT-565;Lo;0;L;;;;;N;;;;;
+18A35;TANGUT COMPONENT-566;Lo;0;L;;;;;N;;;;;
+18A36;TANGUT COMPONENT-567;Lo;0;L;;;;;N;;;;;
+18A37;TANGUT COMPONENT-568;Lo;0;L;;;;;N;;;;;
+18A38;TANGUT COMPONENT-569;Lo;0;L;;;;;N;;;;;
+18A39;TANGUT COMPONENT-570;Lo;0;L;;;;;N;;;;;
+18A3A;TANGUT COMPONENT-571;Lo;0;L;;;;;N;;;;;
+18A3B;TANGUT COMPONENT-572;Lo;0;L;;;;;N;;;;;
+18A3C;TANGUT COMPONENT-573;Lo;0;L;;;;;N;;;;;
+18A3D;TANGUT COMPONENT-574;Lo;0;L;;;;;N;;;;;
+18A3E;TANGUT COMPONENT-575;Lo;0;L;;;;;N;;;;;
+18A3F;TANGUT COMPONENT-576;Lo;0;L;;;;;N;;;;;
+18A40;TANGUT COMPONENT-577;Lo;0;L;;;;;N;;;;;
+18A41;TANGUT COMPONENT-578;Lo;0;L;;;;;N;;;;;
+18A42;TANGUT COMPONENT-579;Lo;0;L;;;;;N;;;;;
+18A43;TANGUT COMPONENT-580;Lo;0;L;;;;;N;;;;;
+18A44;TANGUT COMPONENT-581;Lo;0;L;;;;;N;;;;;
+18A45;TANGUT COMPONENT-582;Lo;0;L;;;;;N;;;;;
+18A46;TANGUT COMPONENT-583;Lo;0;L;;;;;N;;;;;
+18A47;TANGUT COMPONENT-584;Lo;0;L;;;;;N;;;;;
+18A48;TANGUT COMPONENT-585;Lo;0;L;;;;;N;;;;;
+18A49;TANGUT COMPONENT-586;Lo;0;L;;;;;N;;;;;
+18A4A;TANGUT COMPONENT-587;Lo;0;L;;;;;N;;;;;
+18A4B;TANGUT COMPONENT-588;Lo;0;L;;;;;N;;;;;
+18A4C;TANGUT COMPONENT-589;Lo;0;L;;;;;N;;;;;
+18A4D;TANGUT COMPONENT-590;Lo;0;L;;;;;N;;;;;
+18A4E;TANGUT COMPONENT-591;Lo;0;L;;;;;N;;;;;
+18A4F;TANGUT COMPONENT-592;Lo;0;L;;;;;N;;;;;
+18A50;TANGUT COMPONENT-593;Lo;0;L;;;;;N;;;;;
+18A51;TANGUT COMPONENT-594;Lo;0;L;;;;;N;;;;;
+18A52;TANGUT COMPONENT-595;Lo;0;L;;;;;N;;;;;
+18A53;TANGUT COMPONENT-596;Lo;0;L;;;;;N;;;;;
+18A54;TANGUT COMPONENT-597;Lo;0;L;;;;;N;;;;;
+18A55;TANGUT COMPONENT-598;Lo;0;L;;;;;N;;;;;
+18A56;TANGUT COMPONENT-599;Lo;0;L;;;;;N;;;;;
+18A57;TANGUT COMPONENT-600;Lo;0;L;;;;;N;;;;;
+18A58;TANGUT COMPONENT-601;Lo;0;L;;;;;N;;;;;
+18A59;TANGUT COMPONENT-602;Lo;0;L;;;;;N;;;;;
+18A5A;TANGUT COMPONENT-603;Lo;0;L;;;;;N;;;;;
+18A5B;TANGUT COMPONENT-604;Lo;0;L;;;;;N;;;;;
+18A5C;TANGUT COMPONENT-605;Lo;0;L;;;;;N;;;;;
+18A5D;TANGUT COMPONENT-606;Lo;0;L;;;;;N;;;;;
+18A5E;TANGUT COMPONENT-607;Lo;0;L;;;;;N;;;;;
+18A5F;TANGUT COMPONENT-608;Lo;0;L;;;;;N;;;;;
+18A60;TANGUT COMPONENT-609;Lo;0;L;;;;;N;;;;;
+18A61;TANGUT COMPONENT-610;Lo;0;L;;;;;N;;;;;
+18A62;TANGUT COMPONENT-611;Lo;0;L;;;;;N;;;;;
+18A63;TANGUT COMPONENT-612;Lo;0;L;;;;;N;;;;;
+18A64;TANGUT COMPONENT-613;Lo;0;L;;;;;N;;;;;
+18A65;TANGUT COMPONENT-614;Lo;0;L;;;;;N;;;;;
+18A66;TANGUT COMPONENT-615;Lo;0;L;;;;;N;;;;;
+18A67;TANGUT COMPONENT-616;Lo;0;L;;;;;N;;;;;
+18A68;TANGUT COMPONENT-617;Lo;0;L;;;;;N;;;;;
+18A69;TANGUT COMPONENT-618;Lo;0;L;;;;;N;;;;;
+18A6A;TANGUT COMPONENT-619;Lo;0;L;;;;;N;;;;;
+18A6B;TANGUT COMPONENT-620;Lo;0;L;;;;;N;;;;;
+18A6C;TANGUT COMPONENT-621;Lo;0;L;;;;;N;;;;;
+18A6D;TANGUT COMPONENT-622;Lo;0;L;;;;;N;;;;;
+18A6E;TANGUT COMPONENT-623;Lo;0;L;;;;;N;;;;;
+18A6F;TANGUT COMPONENT-624;Lo;0;L;;;;;N;;;;;
+18A70;TANGUT COMPONENT-625;Lo;0;L;;;;;N;;;;;
+18A71;TANGUT COMPONENT-626;Lo;0;L;;;;;N;;;;;
+18A72;TANGUT COMPONENT-627;Lo;0;L;;;;;N;;;;;
+18A73;TANGUT COMPONENT-628;Lo;0;L;;;;;N;;;;;
+18A74;TANGUT COMPONENT-629;Lo;0;L;;;;;N;;;;;
+18A75;TANGUT COMPONENT-630;Lo;0;L;;;;;N;;;;;
+18A76;TANGUT COMPONENT-631;Lo;0;L;;;;;N;;;;;
+18A77;TANGUT COMPONENT-632;Lo;0;L;;;;;N;;;;;
+18A78;TANGUT COMPONENT-633;Lo;0;L;;;;;N;;;;;
+18A79;TANGUT COMPONENT-634;Lo;0;L;;;;;N;;;;;
+18A7A;TANGUT COMPONENT-635;Lo;0;L;;;;;N;;;;;
+18A7B;TANGUT COMPONENT-636;Lo;0;L;;;;;N;;;;;
+18A7C;TANGUT COMPONENT-637;Lo;0;L;;;;;N;;;;;
+18A7D;TANGUT COMPONENT-638;Lo;0;L;;;;;N;;;;;
+18A7E;TANGUT COMPONENT-639;Lo;0;L;;;;;N;;;;;
+18A7F;TANGUT COMPONENT-640;Lo;0;L;;;;;N;;;;;
+18A80;TANGUT COMPONENT-641;Lo;0;L;;;;;N;;;;;
+18A81;TANGUT COMPONENT-642;Lo;0;L;;;;;N;;;;;
+18A82;TANGUT COMPONENT-643;Lo;0;L;;;;;N;;;;;
+18A83;TANGUT COMPONENT-644;Lo;0;L;;;;;N;;;;;
+18A84;TANGUT COMPONENT-645;Lo;0;L;;;;;N;;;;;
+18A85;TANGUT COMPONENT-646;Lo;0;L;;;;;N;;;;;
+18A86;TANGUT COMPONENT-647;Lo;0;L;;;;;N;;;;;
+18A87;TANGUT COMPONENT-648;Lo;0;L;;;;;N;;;;;
+18A88;TANGUT COMPONENT-649;Lo;0;L;;;;;N;;;;;
+18A89;TANGUT COMPONENT-650;Lo;0;L;;;;;N;;;;;
+18A8A;TANGUT COMPONENT-651;Lo;0;L;;;;;N;;;;;
+18A8B;TANGUT COMPONENT-652;Lo;0;L;;;;;N;;;;;
+18A8C;TANGUT COMPONENT-653;Lo;0;L;;;;;N;;;;;
+18A8D;TANGUT COMPONENT-654;Lo;0;L;;;;;N;;;;;
+18A8E;TANGUT COMPONENT-655;Lo;0;L;;;;;N;;;;;
+18A8F;TANGUT COMPONENT-656;Lo;0;L;;;;;N;;;;;
+18A90;TANGUT COMPONENT-657;Lo;0;L;;;;;N;;;;;
+18A91;TANGUT COMPONENT-658;Lo;0;L;;;;;N;;;;;
+18A92;TANGUT COMPONENT-659;Lo;0;L;;;;;N;;;;;
+18A93;TANGUT COMPONENT-660;Lo;0;L;;;;;N;;;;;
+18A94;TANGUT COMPONENT-661;Lo;0;L;;;;;N;;;;;
+18A95;TANGUT COMPONENT-662;Lo;0;L;;;;;N;;;;;
+18A96;TANGUT COMPONENT-663;Lo;0;L;;;;;N;;;;;
+18A97;TANGUT COMPONENT-664;Lo;0;L;;;;;N;;;;;
+18A98;TANGUT COMPONENT-665;Lo;0;L;;;;;N;;;;;
+18A99;TANGUT COMPONENT-666;Lo;0;L;;;;;N;;;;;
+18A9A;TANGUT COMPONENT-667;Lo;0;L;;;;;N;;;;;
+18A9B;TANGUT COMPONENT-668;Lo;0;L;;;;;N;;;;;
+18A9C;TANGUT COMPONENT-669;Lo;0;L;;;;;N;;;;;
+18A9D;TANGUT COMPONENT-670;Lo;0;L;;;;;N;;;;;
+18A9E;TANGUT COMPONENT-671;Lo;0;L;;;;;N;;;;;
+18A9F;TANGUT COMPONENT-672;Lo;0;L;;;;;N;;;;;
+18AA0;TANGUT COMPONENT-673;Lo;0;L;;;;;N;;;;;
+18AA1;TANGUT COMPONENT-674;Lo;0;L;;;;;N;;;;;
+18AA2;TANGUT COMPONENT-675;Lo;0;L;;;;;N;;;;;
+18AA3;TANGUT COMPONENT-676;Lo;0;L;;;;;N;;;;;
+18AA4;TANGUT COMPONENT-677;Lo;0;L;;;;;N;;;;;
+18AA5;TANGUT COMPONENT-678;Lo;0;L;;;;;N;;;;;
+18AA6;TANGUT COMPONENT-679;Lo;0;L;;;;;N;;;;;
+18AA7;TANGUT COMPONENT-680;Lo;0;L;;;;;N;;;;;
+18AA8;TANGUT COMPONENT-681;Lo;0;L;;;;;N;;;;;
+18AA9;TANGUT COMPONENT-682;Lo;0;L;;;;;N;;;;;
+18AAA;TANGUT COMPONENT-683;Lo;0;L;;;;;N;;;;;
+18AAB;TANGUT COMPONENT-684;Lo;0;L;;;;;N;;;;;
+18AAC;TANGUT COMPONENT-685;Lo;0;L;;;;;N;;;;;
+18AAD;TANGUT COMPONENT-686;Lo;0;L;;;;;N;;;;;
+18AAE;TANGUT COMPONENT-687;Lo;0;L;;;;;N;;;;;
+18AAF;TANGUT COMPONENT-688;Lo;0;L;;;;;N;;;;;
+18AB0;TANGUT COMPONENT-689;Lo;0;L;;;;;N;;;;;
+18AB1;TANGUT COMPONENT-690;Lo;0;L;;;;;N;;;;;
+18AB2;TANGUT COMPONENT-691;Lo;0;L;;;;;N;;;;;
+18AB3;TANGUT COMPONENT-692;Lo;0;L;;;;;N;;;;;
+18AB4;TANGUT COMPONENT-693;Lo;0;L;;;;;N;;;;;
+18AB5;TANGUT COMPONENT-694;Lo;0;L;;;;;N;;;;;
+18AB6;TANGUT COMPONENT-695;Lo;0;L;;;;;N;;;;;
+18AB7;TANGUT COMPONENT-696;Lo;0;L;;;;;N;;;;;
+18AB8;TANGUT COMPONENT-697;Lo;0;L;;;;;N;;;;;
+18AB9;TANGUT COMPONENT-698;Lo;0;L;;;;;N;;;;;
+18ABA;TANGUT COMPONENT-699;Lo;0;L;;;;;N;;;;;
+18ABB;TANGUT COMPONENT-700;Lo;0;L;;;;;N;;;;;
+18ABC;TANGUT COMPONENT-701;Lo;0;L;;;;;N;;;;;
+18ABD;TANGUT COMPONENT-702;Lo;0;L;;;;;N;;;;;
+18ABE;TANGUT COMPONENT-703;Lo;0;L;;;;;N;;;;;
+18ABF;TANGUT COMPONENT-704;Lo;0;L;;;;;N;;;;;
+18AC0;TANGUT COMPONENT-705;Lo;0;L;;;;;N;;;;;
+18AC1;TANGUT COMPONENT-706;Lo;0;L;;;;;N;;;;;
+18AC2;TANGUT COMPONENT-707;Lo;0;L;;;;;N;;;;;
+18AC3;TANGUT COMPONENT-708;Lo;0;L;;;;;N;;;;;
+18AC4;TANGUT COMPONENT-709;Lo;0;L;;;;;N;;;;;
+18AC5;TANGUT COMPONENT-710;Lo;0;L;;;;;N;;;;;
+18AC6;TANGUT COMPONENT-711;Lo;0;L;;;;;N;;;;;
+18AC7;TANGUT COMPONENT-712;Lo;0;L;;;;;N;;;;;
+18AC8;TANGUT COMPONENT-713;Lo;0;L;;;;;N;;;;;
+18AC9;TANGUT COMPONENT-714;Lo;0;L;;;;;N;;;;;
+18ACA;TANGUT COMPONENT-715;Lo;0;L;;;;;N;;;;;
+18ACB;TANGUT COMPONENT-716;Lo;0;L;;;;;N;;;;;
+18ACC;TANGUT COMPONENT-717;Lo;0;L;;;;;N;;;;;
+18ACD;TANGUT COMPONENT-718;Lo;0;L;;;;;N;;;;;
+18ACE;TANGUT COMPONENT-719;Lo;0;L;;;;;N;;;;;
+18ACF;TANGUT COMPONENT-720;Lo;0;L;;;;;N;;;;;
+18AD0;TANGUT COMPONENT-721;Lo;0;L;;;;;N;;;;;
+18AD1;TANGUT COMPONENT-722;Lo;0;L;;;;;N;;;;;
+18AD2;TANGUT COMPONENT-723;Lo;0;L;;;;;N;;;;;
+18AD3;TANGUT COMPONENT-724;Lo;0;L;;;;;N;;;;;
+18AD4;TANGUT COMPONENT-725;Lo;0;L;;;;;N;;;;;
+18AD5;TANGUT COMPONENT-726;Lo;0;L;;;;;N;;;;;
+18AD6;TANGUT COMPONENT-727;Lo;0;L;;;;;N;;;;;
+18AD7;TANGUT COMPONENT-728;Lo;0;L;;;;;N;;;;;
+18AD8;TANGUT COMPONENT-729;Lo;0;L;;;;;N;;;;;
+18AD9;TANGUT COMPONENT-730;Lo;0;L;;;;;N;;;;;
+18ADA;TANGUT COMPONENT-731;Lo;0;L;;;;;N;;;;;
+18ADB;TANGUT COMPONENT-732;Lo;0;L;;;;;N;;;;;
+18ADC;TANGUT COMPONENT-733;Lo;0;L;;;;;N;;;;;
+18ADD;TANGUT COMPONENT-734;Lo;0;L;;;;;N;;;;;
+18ADE;TANGUT COMPONENT-735;Lo;0;L;;;;;N;;;;;
+18ADF;TANGUT COMPONENT-736;Lo;0;L;;;;;N;;;;;
+18AE0;TANGUT COMPONENT-737;Lo;0;L;;;;;N;;;;;
+18AE1;TANGUT COMPONENT-738;Lo;0;L;;;;;N;;;;;
+18AE2;TANGUT COMPONENT-739;Lo;0;L;;;;;N;;;;;
+18AE3;TANGUT COMPONENT-740;Lo;0;L;;;;;N;;;;;
+18AE4;TANGUT COMPONENT-741;Lo;0;L;;;;;N;;;;;
+18AE5;TANGUT COMPONENT-742;Lo;0;L;;;;;N;;;;;
+18AE6;TANGUT COMPONENT-743;Lo;0;L;;;;;N;;;;;
+18AE7;TANGUT COMPONENT-744;Lo;0;L;;;;;N;;;;;
+18AE8;TANGUT COMPONENT-745;Lo;0;L;;;;;N;;;;;
+18AE9;TANGUT COMPONENT-746;Lo;0;L;;;;;N;;;;;
+18AEA;TANGUT COMPONENT-747;Lo;0;L;;;;;N;;;;;
+18AEB;TANGUT COMPONENT-748;Lo;0;L;;;;;N;;;;;
+18AEC;TANGUT COMPONENT-749;Lo;0;L;;;;;N;;;;;
+18AED;TANGUT COMPONENT-750;Lo;0;L;;;;;N;;;;;
+18AEE;TANGUT COMPONENT-751;Lo;0;L;;;;;N;;;;;
+18AEF;TANGUT COMPONENT-752;Lo;0;L;;;;;N;;;;;
+18AF0;TANGUT COMPONENT-753;Lo;0;L;;;;;N;;;;;
+18AF1;TANGUT COMPONENT-754;Lo;0;L;;;;;N;;;;;
+18AF2;TANGUT COMPONENT-755;Lo;0;L;;;;;N;;;;;
1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
+1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;;
+1B003;HENTAIGANA LETTER A-2;Lo;0;L;;;;;N;;;;;
+1B004;HENTAIGANA LETTER A-3;Lo;0;L;;;;;N;;;;;
+1B005;HENTAIGANA LETTER A-WO;Lo;0;L;;;;;N;;;;;
+1B006;HENTAIGANA LETTER I-1;Lo;0;L;;;;;N;;;;;
+1B007;HENTAIGANA LETTER I-2;Lo;0;L;;;;;N;;;;;
+1B008;HENTAIGANA LETTER I-3;Lo;0;L;;;;;N;;;;;
+1B009;HENTAIGANA LETTER I-4;Lo;0;L;;;;;N;;;;;
+1B00A;HENTAIGANA LETTER U-1;Lo;0;L;;;;;N;;;;;
+1B00B;HENTAIGANA LETTER U-2;Lo;0;L;;;;;N;;;;;
+1B00C;HENTAIGANA LETTER U-3;Lo;0;L;;;;;N;;;;;
+1B00D;HENTAIGANA LETTER U-4;Lo;0;L;;;;;N;;;;;
+1B00E;HENTAIGANA LETTER U-5;Lo;0;L;;;;;N;;;;;
+1B00F;HENTAIGANA LETTER E-2;Lo;0;L;;;;;N;;;;;
+1B010;HENTAIGANA LETTER E-3;Lo;0;L;;;;;N;;;;;
+1B011;HENTAIGANA LETTER E-4;Lo;0;L;;;;;N;;;;;
+1B012;HENTAIGANA LETTER E-5;Lo;0;L;;;;;N;;;;;
+1B013;HENTAIGANA LETTER E-6;Lo;0;L;;;;;N;;;;;
+1B014;HENTAIGANA LETTER O-1;Lo;0;L;;;;;N;;;;;
+1B015;HENTAIGANA LETTER O-2;Lo;0;L;;;;;N;;;;;
+1B016;HENTAIGANA LETTER O-3;Lo;0;L;;;;;N;;;;;
+1B017;HENTAIGANA LETTER KA-1;Lo;0;L;;;;;N;;;;;
+1B018;HENTAIGANA LETTER KA-2;Lo;0;L;;;;;N;;;;;
+1B019;HENTAIGANA LETTER KA-3;Lo;0;L;;;;;N;;;;;
+1B01A;HENTAIGANA LETTER KA-4;Lo;0;L;;;;;N;;;;;
+1B01B;HENTAIGANA LETTER KA-5;Lo;0;L;;;;;N;;;;;
+1B01C;HENTAIGANA LETTER KA-6;Lo;0;L;;;;;N;;;;;
+1B01D;HENTAIGANA LETTER KA-7;Lo;0;L;;;;;N;;;;;
+1B01E;HENTAIGANA LETTER KA-8;Lo;0;L;;;;;N;;;;;
+1B01F;HENTAIGANA LETTER KA-9;Lo;0;L;;;;;N;;;;;
+1B020;HENTAIGANA LETTER KA-10;Lo;0;L;;;;;N;;;;;
+1B021;HENTAIGANA LETTER KA-11;Lo;0;L;;;;;N;;;;;
+1B022;HENTAIGANA LETTER KA-KE;Lo;0;L;;;;;N;;;;;
+1B023;HENTAIGANA LETTER KI-1;Lo;0;L;;;;;N;;;;;
+1B024;HENTAIGANA LETTER KI-2;Lo;0;L;;;;;N;;;;;
+1B025;HENTAIGANA LETTER KI-3;Lo;0;L;;;;;N;;;;;
+1B026;HENTAIGANA LETTER KI-4;Lo;0;L;;;;;N;;;;;
+1B027;HENTAIGANA LETTER KI-5;Lo;0;L;;;;;N;;;;;
+1B028;HENTAIGANA LETTER KI-6;Lo;0;L;;;;;N;;;;;
+1B029;HENTAIGANA LETTER KI-7;Lo;0;L;;;;;N;;;;;
+1B02A;HENTAIGANA LETTER KI-8;Lo;0;L;;;;;N;;;;;
+1B02B;HENTAIGANA LETTER KU-1;Lo;0;L;;;;;N;;;;;
+1B02C;HENTAIGANA LETTER KU-2;Lo;0;L;;;;;N;;;;;
+1B02D;HENTAIGANA LETTER KU-3;Lo;0;L;;;;;N;;;;;
+1B02E;HENTAIGANA LETTER KU-4;Lo;0;L;;;;;N;;;;;
+1B02F;HENTAIGANA LETTER KU-5;Lo;0;L;;;;;N;;;;;
+1B030;HENTAIGANA LETTER KU-6;Lo;0;L;;;;;N;;;;;
+1B031;HENTAIGANA LETTER KU-7;Lo;0;L;;;;;N;;;;;
+1B032;HENTAIGANA LETTER KE-1;Lo;0;L;;;;;N;;;;;
+1B033;HENTAIGANA LETTER KE-2;Lo;0;L;;;;;N;;;;;
+1B034;HENTAIGANA LETTER KE-3;Lo;0;L;;;;;N;;;;;
+1B035;HENTAIGANA LETTER KE-4;Lo;0;L;;;;;N;;;;;
+1B036;HENTAIGANA LETTER KE-5;Lo;0;L;;;;;N;;;;;
+1B037;HENTAIGANA LETTER KE-6;Lo;0;L;;;;;N;;;;;
+1B038;HENTAIGANA LETTER KO-1;Lo;0;L;;;;;N;;;;;
+1B039;HENTAIGANA LETTER KO-2;Lo;0;L;;;;;N;;;;;
+1B03A;HENTAIGANA LETTER KO-3;Lo;0;L;;;;;N;;;;;
+1B03B;HENTAIGANA LETTER KO-KI;Lo;0;L;;;;;N;;;;;
+1B03C;HENTAIGANA LETTER SA-1;Lo;0;L;;;;;N;;;;;
+1B03D;HENTAIGANA LETTER SA-2;Lo;0;L;;;;;N;;;;;
+1B03E;HENTAIGANA LETTER SA-3;Lo;0;L;;;;;N;;;;;
+1B03F;HENTAIGANA LETTER SA-4;Lo;0;L;;;;;N;;;;;
+1B040;HENTAIGANA LETTER SA-5;Lo;0;L;;;;;N;;;;;
+1B041;HENTAIGANA LETTER SA-6;Lo;0;L;;;;;N;;;;;
+1B042;HENTAIGANA LETTER SA-7;Lo;0;L;;;;;N;;;;;
+1B043;HENTAIGANA LETTER SA-8;Lo;0;L;;;;;N;;;;;
+1B044;HENTAIGANA LETTER SI-1;Lo;0;L;;;;;N;;;;;
+1B045;HENTAIGANA LETTER SI-2;Lo;0;L;;;;;N;;;;;
+1B046;HENTAIGANA LETTER SI-3;Lo;0;L;;;;;N;;;;;
+1B047;HENTAIGANA LETTER SI-4;Lo;0;L;;;;;N;;;;;
+1B048;HENTAIGANA LETTER SI-5;Lo;0;L;;;;;N;;;;;
+1B049;HENTAIGANA LETTER SI-6;Lo;0;L;;;;;N;;;;;
+1B04A;HENTAIGANA LETTER SU-1;Lo;0;L;;;;;N;;;;;
+1B04B;HENTAIGANA LETTER SU-2;Lo;0;L;;;;;N;;;;;
+1B04C;HENTAIGANA LETTER SU-3;Lo;0;L;;;;;N;;;;;
+1B04D;HENTAIGANA LETTER SU-4;Lo;0;L;;;;;N;;;;;
+1B04E;HENTAIGANA LETTER SU-5;Lo;0;L;;;;;N;;;;;
+1B04F;HENTAIGANA LETTER SU-6;Lo;0;L;;;;;N;;;;;
+1B050;HENTAIGANA LETTER SU-7;Lo;0;L;;;;;N;;;;;
+1B051;HENTAIGANA LETTER SU-8;Lo;0;L;;;;;N;;;;;
+1B052;HENTAIGANA LETTER SE-1;Lo;0;L;;;;;N;;;;;
+1B053;HENTAIGANA LETTER SE-2;Lo;0;L;;;;;N;;;;;
+1B054;HENTAIGANA LETTER SE-3;Lo;0;L;;;;;N;;;;;
+1B055;HENTAIGANA LETTER SE-4;Lo;0;L;;;;;N;;;;;
+1B056;HENTAIGANA LETTER SE-5;Lo;0;L;;;;;N;;;;;
+1B057;HENTAIGANA LETTER SO-1;Lo;0;L;;;;;N;;;;;
+1B058;HENTAIGANA LETTER SO-2;Lo;0;L;;;;;N;;;;;
+1B059;HENTAIGANA LETTER SO-3;Lo;0;L;;;;;N;;;;;
+1B05A;HENTAIGANA LETTER SO-4;Lo;0;L;;;;;N;;;;;
+1B05B;HENTAIGANA LETTER SO-5;Lo;0;L;;;;;N;;;;;
+1B05C;HENTAIGANA LETTER SO-6;Lo;0;L;;;;;N;;;;;
+1B05D;HENTAIGANA LETTER SO-7;Lo;0;L;;;;;N;;;;;
+1B05E;HENTAIGANA LETTER TA-1;Lo;0;L;;;;;N;;;;;
+1B05F;HENTAIGANA LETTER TA-2;Lo;0;L;;;;;N;;;;;
+1B060;HENTAIGANA LETTER TA-3;Lo;0;L;;;;;N;;;;;
+1B061;HENTAIGANA LETTER TA-4;Lo;0;L;;;;;N;;;;;
+1B062;HENTAIGANA LETTER TI-1;Lo;0;L;;;;;N;;;;;
+1B063;HENTAIGANA LETTER TI-2;Lo;0;L;;;;;N;;;;;
+1B064;HENTAIGANA LETTER TI-3;Lo;0;L;;;;;N;;;;;
+1B065;HENTAIGANA LETTER TI-4;Lo;0;L;;;;;N;;;;;
+1B066;HENTAIGANA LETTER TI-5;Lo;0;L;;;;;N;;;;;
+1B067;HENTAIGANA LETTER TI-6;Lo;0;L;;;;;N;;;;;
+1B068;HENTAIGANA LETTER TI-7;Lo;0;L;;;;;N;;;;;
+1B069;HENTAIGANA LETTER TU-1;Lo;0;L;;;;;N;;;;;
+1B06A;HENTAIGANA LETTER TU-2;Lo;0;L;;;;;N;;;;;
+1B06B;HENTAIGANA LETTER TU-3;Lo;0;L;;;;;N;;;;;
+1B06C;HENTAIGANA LETTER TU-4;Lo;0;L;;;;;N;;;;;
+1B06D;HENTAIGANA LETTER TU-TO;Lo;0;L;;;;;N;;;;;
+1B06E;HENTAIGANA LETTER TE-1;Lo;0;L;;;;;N;;;;;
+1B06F;HENTAIGANA LETTER TE-2;Lo;0;L;;;;;N;;;;;
+1B070;HENTAIGANA LETTER TE-3;Lo;0;L;;;;;N;;;;;
+1B071;HENTAIGANA LETTER TE-4;Lo;0;L;;;;;N;;;;;
+1B072;HENTAIGANA LETTER TE-5;Lo;0;L;;;;;N;;;;;
+1B073;HENTAIGANA LETTER TE-6;Lo;0;L;;;;;N;;;;;
+1B074;HENTAIGANA LETTER TE-7;Lo;0;L;;;;;N;;;;;
+1B075;HENTAIGANA LETTER TE-8;Lo;0;L;;;;;N;;;;;
+1B076;HENTAIGANA LETTER TE-9;Lo;0;L;;;;;N;;;;;
+1B077;HENTAIGANA LETTER TO-1;Lo;0;L;;;;;N;;;;;
+1B078;HENTAIGANA LETTER TO-2;Lo;0;L;;;;;N;;;;;
+1B079;HENTAIGANA LETTER TO-3;Lo;0;L;;;;;N;;;;;
+1B07A;HENTAIGANA LETTER TO-4;Lo;0;L;;;;;N;;;;;
+1B07B;HENTAIGANA LETTER TO-5;Lo;0;L;;;;;N;;;;;
+1B07C;HENTAIGANA LETTER TO-6;Lo;0;L;;;;;N;;;;;
+1B07D;HENTAIGANA LETTER TO-RA;Lo;0;L;;;;;N;;;;;
+1B07E;HENTAIGANA LETTER NA-1;Lo;0;L;;;;;N;;;;;
+1B07F;HENTAIGANA LETTER NA-2;Lo;0;L;;;;;N;;;;;
+1B080;HENTAIGANA LETTER NA-3;Lo;0;L;;;;;N;;;;;
+1B081;HENTAIGANA LETTER NA-4;Lo;0;L;;;;;N;;;;;
+1B082;HENTAIGANA LETTER NA-5;Lo;0;L;;;;;N;;;;;
+1B083;HENTAIGANA LETTER NA-6;Lo;0;L;;;;;N;;;;;
+1B084;HENTAIGANA LETTER NA-7;Lo;0;L;;;;;N;;;;;
+1B085;HENTAIGANA LETTER NA-8;Lo;0;L;;;;;N;;;;;
+1B086;HENTAIGANA LETTER NA-9;Lo;0;L;;;;;N;;;;;
+1B087;HENTAIGANA LETTER NI-1;Lo;0;L;;;;;N;;;;;
+1B088;HENTAIGANA LETTER NI-2;Lo;0;L;;;;;N;;;;;
+1B089;HENTAIGANA LETTER NI-3;Lo;0;L;;;;;N;;;;;
+1B08A;HENTAIGANA LETTER NI-4;Lo;0;L;;;;;N;;;;;
+1B08B;HENTAIGANA LETTER NI-5;Lo;0;L;;;;;N;;;;;
+1B08C;HENTAIGANA LETTER NI-6;Lo;0;L;;;;;N;;;;;
+1B08D;HENTAIGANA LETTER NI-7;Lo;0;L;;;;;N;;;;;
+1B08E;HENTAIGANA LETTER NI-TE;Lo;0;L;;;;;N;;;;;
+1B08F;HENTAIGANA LETTER NU-1;Lo;0;L;;;;;N;;;;;
+1B090;HENTAIGANA LETTER NU-2;Lo;0;L;;;;;N;;;;;
+1B091;HENTAIGANA LETTER NU-3;Lo;0;L;;;;;N;;;;;
+1B092;HENTAIGANA LETTER NE-1;Lo;0;L;;;;;N;;;;;
+1B093;HENTAIGANA LETTER NE-2;Lo;0;L;;;;;N;;;;;
+1B094;HENTAIGANA LETTER NE-3;Lo;0;L;;;;;N;;;;;
+1B095;HENTAIGANA LETTER NE-4;Lo;0;L;;;;;N;;;;;
+1B096;HENTAIGANA LETTER NE-5;Lo;0;L;;;;;N;;;;;
+1B097;HENTAIGANA LETTER NE-6;Lo;0;L;;;;;N;;;;;
+1B098;HENTAIGANA LETTER NE-KO;Lo;0;L;;;;;N;;;;;
+1B099;HENTAIGANA LETTER NO-1;Lo;0;L;;;;;N;;;;;
+1B09A;HENTAIGANA LETTER NO-2;Lo;0;L;;;;;N;;;;;
+1B09B;HENTAIGANA LETTER NO-3;Lo;0;L;;;;;N;;;;;
+1B09C;HENTAIGANA LETTER NO-4;Lo;0;L;;;;;N;;;;;
+1B09D;HENTAIGANA LETTER NO-5;Lo;0;L;;;;;N;;;;;
+1B09E;HENTAIGANA LETTER HA-1;Lo;0;L;;;;;N;;;;;
+1B09F;HENTAIGANA LETTER HA-2;Lo;0;L;;;;;N;;;;;
+1B0A0;HENTAIGANA LETTER HA-3;Lo;0;L;;;;;N;;;;;
+1B0A1;HENTAIGANA LETTER HA-4;Lo;0;L;;;;;N;;;;;
+1B0A2;HENTAIGANA LETTER HA-5;Lo;0;L;;;;;N;;;;;
+1B0A3;HENTAIGANA LETTER HA-6;Lo;0;L;;;;;N;;;;;
+1B0A4;HENTAIGANA LETTER HA-7;Lo;0;L;;;;;N;;;;;
+1B0A5;HENTAIGANA LETTER HA-8;Lo;0;L;;;;;N;;;;;
+1B0A6;HENTAIGANA LETTER HA-9;Lo;0;L;;;;;N;;;;;
+1B0A7;HENTAIGANA LETTER HA-10;Lo;0;L;;;;;N;;;;;
+1B0A8;HENTAIGANA LETTER HA-11;Lo;0;L;;;;;N;;;;;
+1B0A9;HENTAIGANA LETTER HI-1;Lo;0;L;;;;;N;;;;;
+1B0AA;HENTAIGANA LETTER HI-2;Lo;0;L;;;;;N;;;;;
+1B0AB;HENTAIGANA LETTER HI-3;Lo;0;L;;;;;N;;;;;
+1B0AC;HENTAIGANA LETTER HI-4;Lo;0;L;;;;;N;;;;;
+1B0AD;HENTAIGANA LETTER HI-5;Lo;0;L;;;;;N;;;;;
+1B0AE;HENTAIGANA LETTER HI-6;Lo;0;L;;;;;N;;;;;
+1B0AF;HENTAIGANA LETTER HI-7;Lo;0;L;;;;;N;;;;;
+1B0B0;HENTAIGANA LETTER HU-1;Lo;0;L;;;;;N;;;;;
+1B0B1;HENTAIGANA LETTER HU-2;Lo;0;L;;;;;N;;;;;
+1B0B2;HENTAIGANA LETTER HU-3;Lo;0;L;;;;;N;;;;;
+1B0B3;HENTAIGANA LETTER HE-1;Lo;0;L;;;;;N;;;;;
+1B0B4;HENTAIGANA LETTER HE-2;Lo;0;L;;;;;N;;;;;
+1B0B5;HENTAIGANA LETTER HE-3;Lo;0;L;;;;;N;;;;;
+1B0B6;HENTAIGANA LETTER HE-4;Lo;0;L;;;;;N;;;;;
+1B0B7;HENTAIGANA LETTER HE-5;Lo;0;L;;;;;N;;;;;
+1B0B8;HENTAIGANA LETTER HE-6;Lo;0;L;;;;;N;;;;;
+1B0B9;HENTAIGANA LETTER HE-7;Lo;0;L;;;;;N;;;;;
+1B0BA;HENTAIGANA LETTER HO-1;Lo;0;L;;;;;N;;;;;
+1B0BB;HENTAIGANA LETTER HO-2;Lo;0;L;;;;;N;;;;;
+1B0BC;HENTAIGANA LETTER HO-3;Lo;0;L;;;;;N;;;;;
+1B0BD;HENTAIGANA LETTER HO-4;Lo;0;L;;;;;N;;;;;
+1B0BE;HENTAIGANA LETTER HO-5;Lo;0;L;;;;;N;;;;;
+1B0BF;HENTAIGANA LETTER HO-6;Lo;0;L;;;;;N;;;;;
+1B0C0;HENTAIGANA LETTER HO-7;Lo;0;L;;;;;N;;;;;
+1B0C1;HENTAIGANA LETTER HO-8;Lo;0;L;;;;;N;;;;;
+1B0C2;HENTAIGANA LETTER MA-1;Lo;0;L;;;;;N;;;;;
+1B0C3;HENTAIGANA LETTER MA-2;Lo;0;L;;;;;N;;;;;
+1B0C4;HENTAIGANA LETTER MA-3;Lo;0;L;;;;;N;;;;;
+1B0C5;HENTAIGANA LETTER MA-4;Lo;0;L;;;;;N;;;;;
+1B0C6;HENTAIGANA LETTER MA-5;Lo;0;L;;;;;N;;;;;
+1B0C7;HENTAIGANA LETTER MA-6;Lo;0;L;;;;;N;;;;;
+1B0C8;HENTAIGANA LETTER MA-7;Lo;0;L;;;;;N;;;;;
+1B0C9;HENTAIGANA LETTER MI-1;Lo;0;L;;;;;N;;;;;
+1B0CA;HENTAIGANA LETTER MI-2;Lo;0;L;;;;;N;;;;;
+1B0CB;HENTAIGANA LETTER MI-3;Lo;0;L;;;;;N;;;;;
+1B0CC;HENTAIGANA LETTER MI-4;Lo;0;L;;;;;N;;;;;
+1B0CD;HENTAIGANA LETTER MI-5;Lo;0;L;;;;;N;;;;;
+1B0CE;HENTAIGANA LETTER MI-6;Lo;0;L;;;;;N;;;;;
+1B0CF;HENTAIGANA LETTER MI-7;Lo;0;L;;;;;N;;;;;
+1B0D0;HENTAIGANA LETTER MU-1;Lo;0;L;;;;;N;;;;;
+1B0D1;HENTAIGANA LETTER MU-2;Lo;0;L;;;;;N;;;;;
+1B0D2;HENTAIGANA LETTER MU-3;Lo;0;L;;;;;N;;;;;
+1B0D3;HENTAIGANA LETTER MU-4;Lo;0;L;;;;;N;;;;;
+1B0D4;HENTAIGANA LETTER ME-1;Lo;0;L;;;;;N;;;;;
+1B0D5;HENTAIGANA LETTER ME-2;Lo;0;L;;;;;N;;;;;
+1B0D6;HENTAIGANA LETTER ME-MA;Lo;0;L;;;;;N;;;;;
+1B0D7;HENTAIGANA LETTER MO-1;Lo;0;L;;;;;N;;;;;
+1B0D8;HENTAIGANA LETTER MO-2;Lo;0;L;;;;;N;;;;;
+1B0D9;HENTAIGANA LETTER MO-3;Lo;0;L;;;;;N;;;;;
+1B0DA;HENTAIGANA LETTER MO-4;Lo;0;L;;;;;N;;;;;
+1B0DB;HENTAIGANA LETTER MO-5;Lo;0;L;;;;;N;;;;;
+1B0DC;HENTAIGANA LETTER MO-6;Lo;0;L;;;;;N;;;;;
+1B0DD;HENTAIGANA LETTER YA-1;Lo;0;L;;;;;N;;;;;
+1B0DE;HENTAIGANA LETTER YA-2;Lo;0;L;;;;;N;;;;;
+1B0DF;HENTAIGANA LETTER YA-3;Lo;0;L;;;;;N;;;;;
+1B0E0;HENTAIGANA LETTER YA-4;Lo;0;L;;;;;N;;;;;
+1B0E1;HENTAIGANA LETTER YA-5;Lo;0;L;;;;;N;;;;;
+1B0E2;HENTAIGANA LETTER YA-YO;Lo;0;L;;;;;N;;;;;
+1B0E3;HENTAIGANA LETTER YU-1;Lo;0;L;;;;;N;;;;;
+1B0E4;HENTAIGANA LETTER YU-2;Lo;0;L;;;;;N;;;;;
+1B0E5;HENTAIGANA LETTER YU-3;Lo;0;L;;;;;N;;;;;
+1B0E6;HENTAIGANA LETTER YU-4;Lo;0;L;;;;;N;;;;;
+1B0E7;HENTAIGANA LETTER YO-1;Lo;0;L;;;;;N;;;;;
+1B0E8;HENTAIGANA LETTER YO-2;Lo;0;L;;;;;N;;;;;
+1B0E9;HENTAIGANA LETTER YO-3;Lo;0;L;;;;;N;;;;;
+1B0EA;HENTAIGANA LETTER YO-4;Lo;0;L;;;;;N;;;;;
+1B0EB;HENTAIGANA LETTER YO-5;Lo;0;L;;;;;N;;;;;
+1B0EC;HENTAIGANA LETTER YO-6;Lo;0;L;;;;;N;;;;;
+1B0ED;HENTAIGANA LETTER RA-1;Lo;0;L;;;;;N;;;;;
+1B0EE;HENTAIGANA LETTER RA-2;Lo;0;L;;;;;N;;;;;
+1B0EF;HENTAIGANA LETTER RA-3;Lo;0;L;;;;;N;;;;;
+1B0F0;HENTAIGANA LETTER RA-4;Lo;0;L;;;;;N;;;;;
+1B0F1;HENTAIGANA LETTER RI-1;Lo;0;L;;;;;N;;;;;
+1B0F2;HENTAIGANA LETTER RI-2;Lo;0;L;;;;;N;;;;;
+1B0F3;HENTAIGANA LETTER RI-3;Lo;0;L;;;;;N;;;;;
+1B0F4;HENTAIGANA LETTER RI-4;Lo;0;L;;;;;N;;;;;
+1B0F5;HENTAIGANA LETTER RI-5;Lo;0;L;;;;;N;;;;;
+1B0F6;HENTAIGANA LETTER RI-6;Lo;0;L;;;;;N;;;;;
+1B0F7;HENTAIGANA LETTER RI-7;Lo;0;L;;;;;N;;;;;
+1B0F8;HENTAIGANA LETTER RU-1;Lo;0;L;;;;;N;;;;;
+1B0F9;HENTAIGANA LETTER RU-2;Lo;0;L;;;;;N;;;;;
+1B0FA;HENTAIGANA LETTER RU-3;Lo;0;L;;;;;N;;;;;
+1B0FB;HENTAIGANA LETTER RU-4;Lo;0;L;;;;;N;;;;;
+1B0FC;HENTAIGANA LETTER RU-5;Lo;0;L;;;;;N;;;;;
+1B0FD;HENTAIGANA LETTER RU-6;Lo;0;L;;;;;N;;;;;
+1B0FE;HENTAIGANA LETTER RE-1;Lo;0;L;;;;;N;;;;;
+1B0FF;HENTAIGANA LETTER RE-2;Lo;0;L;;;;;N;;;;;
+1B100;HENTAIGANA LETTER RE-3;Lo;0;L;;;;;N;;;;;
+1B101;HENTAIGANA LETTER RE-4;Lo;0;L;;;;;N;;;;;
+1B102;HENTAIGANA LETTER RO-1;Lo;0;L;;;;;N;;;;;
+1B103;HENTAIGANA LETTER RO-2;Lo;0;L;;;;;N;;;;;
+1B104;HENTAIGANA LETTER RO-3;Lo;0;L;;;;;N;;;;;
+1B105;HENTAIGANA LETTER RO-4;Lo;0;L;;;;;N;;;;;
+1B106;HENTAIGANA LETTER RO-5;Lo;0;L;;;;;N;;;;;
+1B107;HENTAIGANA LETTER RO-6;Lo;0;L;;;;;N;;;;;
+1B108;HENTAIGANA LETTER WA-1;Lo;0;L;;;;;N;;;;;
+1B109;HENTAIGANA LETTER WA-2;Lo;0;L;;;;;N;;;;;
+1B10A;HENTAIGANA LETTER WA-3;Lo;0;L;;;;;N;;;;;
+1B10B;HENTAIGANA LETTER WA-4;Lo;0;L;;;;;N;;;;;
+1B10C;HENTAIGANA LETTER WA-5;Lo;0;L;;;;;N;;;;;
+1B10D;HENTAIGANA LETTER WI-1;Lo;0;L;;;;;N;;;;;
+1B10E;HENTAIGANA LETTER WI-2;Lo;0;L;;;;;N;;;;;
+1B10F;HENTAIGANA LETTER WI-3;Lo;0;L;;;;;N;;;;;
+1B110;HENTAIGANA LETTER WI-4;Lo;0;L;;;;;N;;;;;
+1B111;HENTAIGANA LETTER WI-5;Lo;0;L;;;;;N;;;;;
+1B112;HENTAIGANA LETTER WE-1;Lo;0;L;;;;;N;;;;;
+1B113;HENTAIGANA LETTER WE-2;Lo;0;L;;;;;N;;;;;
+1B114;HENTAIGANA LETTER WE-3;Lo;0;L;;;;;N;;;;;
+1B115;HENTAIGANA LETTER WE-4;Lo;0;L;;;;;N;;;;;
+1B116;HENTAIGANA LETTER WO-1;Lo;0;L;;;;;N;;;;;
+1B117;HENTAIGANA LETTER WO-2;Lo;0;L;;;;;N;;;;;
+1B118;HENTAIGANA LETTER WO-3;Lo;0;L;;;;;N;;;;;
+1B119;HENTAIGANA LETTER WO-4;Lo;0;L;;;;;N;;;;;
+1B11A;HENTAIGANA LETTER WO-5;Lo;0;L;;;;;N;;;;;
+1B11B;HENTAIGANA LETTER WO-6;Lo;0;L;;;;;N;;;;;
+1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;;
+1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;;
+1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;;
+1B170;NUSHU CHARACTER-1B170;Lo;0;L;;;;;N;;;;;
+1B171;NUSHU CHARACTER-1B171;Lo;0;L;;;;;N;;;;;
+1B172;NUSHU CHARACTER-1B172;Lo;0;L;;;;;N;;;;;
+1B173;NUSHU CHARACTER-1B173;Lo;0;L;;;;;N;;;;;
+1B174;NUSHU CHARACTER-1B174;Lo;0;L;;;;;N;;;;;
+1B175;NUSHU CHARACTER-1B175;Lo;0;L;;;;;N;;;;;
+1B176;NUSHU CHARACTER-1B176;Lo;0;L;;;;;N;;;;;
+1B177;NUSHU CHARACTER-1B177;Lo;0;L;;;;;N;;;;;
+1B178;NUSHU CHARACTER-1B178;Lo;0;L;;;;;N;;;;;
+1B179;NUSHU CHARACTER-1B179;Lo;0;L;;;;;N;;;;;
+1B17A;NUSHU CHARACTER-1B17A;Lo;0;L;;;;;N;;;;;
+1B17B;NUSHU CHARACTER-1B17B;Lo;0;L;;;;;N;;;;;
+1B17C;NUSHU CHARACTER-1B17C;Lo;0;L;;;;;N;;;;;
+1B17D;NUSHU CHARACTER-1B17D;Lo;0;L;;;;;N;;;;;
+1B17E;NUSHU CHARACTER-1B17E;Lo;0;L;;;;;N;;;;;
+1B17F;NUSHU CHARACTER-1B17F;Lo;0;L;;;;;N;;;;;
+1B180;NUSHU CHARACTER-1B180;Lo;0;L;;;;;N;;;;;
+1B181;NUSHU CHARACTER-1B181;Lo;0;L;;;;;N;;;;;
+1B182;NUSHU CHARACTER-1B182;Lo;0;L;;;;;N;;;;;
+1B183;NUSHU CHARACTER-1B183;Lo;0;L;;;;;N;;;;;
+1B184;NUSHU CHARACTER-1B184;Lo;0;L;;;;;N;;;;;
+1B185;NUSHU CHARACTER-1B185;Lo;0;L;;;;;N;;;;;
+1B186;NUSHU CHARACTER-1B186;Lo;0;L;;;;;N;;;;;
+1B187;NUSHU CHARACTER-1B187;Lo;0;L;;;;;N;;;;;
+1B188;NUSHU CHARACTER-1B188;Lo;0;L;;;;;N;;;;;
+1B189;NUSHU CHARACTER-1B189;Lo;0;L;;;;;N;;;;;
+1B18A;NUSHU CHARACTER-1B18A;Lo;0;L;;;;;N;;;;;
+1B18B;NUSHU CHARACTER-1B18B;Lo;0;L;;;;;N;;;;;
+1B18C;NUSHU CHARACTER-1B18C;Lo;0;L;;;;;N;;;;;
+1B18D;NUSHU CHARACTER-1B18D;Lo;0;L;;;;;N;;;;;
+1B18E;NUSHU CHARACTER-1B18E;Lo;0;L;;;;;N;;;;;
+1B18F;NUSHU CHARACTER-1B18F;Lo;0;L;;;;;N;;;;;
+1B190;NUSHU CHARACTER-1B190;Lo;0;L;;;;;N;;;;;
+1B191;NUSHU CHARACTER-1B191;Lo;0;L;;;;;N;;;;;
+1B192;NUSHU CHARACTER-1B192;Lo;0;L;;;;;N;;;;;
+1B193;NUSHU CHARACTER-1B193;Lo;0;L;;;;;N;;;;;
+1B194;NUSHU CHARACTER-1B194;Lo;0;L;;;;;N;;;;;
+1B195;NUSHU CHARACTER-1B195;Lo;0;L;;;;;N;;;;;
+1B196;NUSHU CHARACTER-1B196;Lo;0;L;;;;;N;;;;;
+1B197;NUSHU CHARACTER-1B197;Lo;0;L;;;;;N;;;;;
+1B198;NUSHU CHARACTER-1B198;Lo;0;L;;;;;N;;;;;
+1B199;NUSHU CHARACTER-1B199;Lo;0;L;;;;;N;;;;;
+1B19A;NUSHU CHARACTER-1B19A;Lo;0;L;;;;;N;;;;;
+1B19B;NUSHU CHARACTER-1B19B;Lo;0;L;;;;;N;;;;;
+1B19C;NUSHU CHARACTER-1B19C;Lo;0;L;;;;;N;;;;;
+1B19D;NUSHU CHARACTER-1B19D;Lo;0;L;;;;;N;;;;;
+1B19E;NUSHU CHARACTER-1B19E;Lo;0;L;;;;;N;;;;;
+1B19F;NUSHU CHARACTER-1B19F;Lo;0;L;;;;;N;;;;;
+1B1A0;NUSHU CHARACTER-1B1A0;Lo;0;L;;;;;N;;;;;
+1B1A1;NUSHU CHARACTER-1B1A1;Lo;0;L;;;;;N;;;;;
+1B1A2;NUSHU CHARACTER-1B1A2;Lo;0;L;;;;;N;;;;;
+1B1A3;NUSHU CHARACTER-1B1A3;Lo;0;L;;;;;N;;;;;
+1B1A4;NUSHU CHARACTER-1B1A4;Lo;0;L;;;;;N;;;;;
+1B1A5;NUSHU CHARACTER-1B1A5;Lo;0;L;;;;;N;;;;;
+1B1A6;NUSHU CHARACTER-1B1A6;Lo;0;L;;;;;N;;;;;
+1B1A7;NUSHU CHARACTER-1B1A7;Lo;0;L;;;;;N;;;;;
+1B1A8;NUSHU CHARACTER-1B1A8;Lo;0;L;;;;;N;;;;;
+1B1A9;NUSHU CHARACTER-1B1A9;Lo;0;L;;;;;N;;;;;
+1B1AA;NUSHU CHARACTER-1B1AA;Lo;0;L;;;;;N;;;;;
+1B1AB;NUSHU CHARACTER-1B1AB;Lo;0;L;;;;;N;;;;;
+1B1AC;NUSHU CHARACTER-1B1AC;Lo;0;L;;;;;N;;;;;
+1B1AD;NUSHU CHARACTER-1B1AD;Lo;0;L;;;;;N;;;;;
+1B1AE;NUSHU CHARACTER-1B1AE;Lo;0;L;;;;;N;;;;;
+1B1AF;NUSHU CHARACTER-1B1AF;Lo;0;L;;;;;N;;;;;
+1B1B0;NUSHU CHARACTER-1B1B0;Lo;0;L;;;;;N;;;;;
+1B1B1;NUSHU CHARACTER-1B1B1;Lo;0;L;;;;;N;;;;;
+1B1B2;NUSHU CHARACTER-1B1B2;Lo;0;L;;;;;N;;;;;
+1B1B3;NUSHU CHARACTER-1B1B3;Lo;0;L;;;;;N;;;;;
+1B1B4;NUSHU CHARACTER-1B1B4;Lo;0;L;;;;;N;;;;;
+1B1B5;NUSHU CHARACTER-1B1B5;Lo;0;L;;;;;N;;;;;
+1B1B6;NUSHU CHARACTER-1B1B6;Lo;0;L;;;;;N;;;;;
+1B1B7;NUSHU CHARACTER-1B1B7;Lo;0;L;;;;;N;;;;;
+1B1B8;NUSHU CHARACTER-1B1B8;Lo;0;L;;;;;N;;;;;
+1B1B9;NUSHU CHARACTER-1B1B9;Lo;0;L;;;;;N;;;;;
+1B1BA;NUSHU CHARACTER-1B1BA;Lo;0;L;;;;;N;;;;;
+1B1BB;NUSHU CHARACTER-1B1BB;Lo;0;L;;;;;N;;;;;
+1B1BC;NUSHU CHARACTER-1B1BC;Lo;0;L;;;;;N;;;;;
+1B1BD;NUSHU CHARACTER-1B1BD;Lo;0;L;;;;;N;;;;;
+1B1BE;NUSHU CHARACTER-1B1BE;Lo;0;L;;;;;N;;;;;
+1B1BF;NUSHU CHARACTER-1B1BF;Lo;0;L;;;;;N;;;;;
+1B1C0;NUSHU CHARACTER-1B1C0;Lo;0;L;;;;;N;;;;;
+1B1C1;NUSHU CHARACTER-1B1C1;Lo;0;L;;;;;N;;;;;
+1B1C2;NUSHU CHARACTER-1B1C2;Lo;0;L;;;;;N;;;;;
+1B1C3;NUSHU CHARACTER-1B1C3;Lo;0;L;;;;;N;;;;;
+1B1C4;NUSHU CHARACTER-1B1C4;Lo;0;L;;;;;N;;;;;
+1B1C5;NUSHU CHARACTER-1B1C5;Lo;0;L;;;;;N;;;;;
+1B1C6;NUSHU CHARACTER-1B1C6;Lo;0;L;;;;;N;;;;;
+1B1C7;NUSHU CHARACTER-1B1C7;Lo;0;L;;;;;N;;;;;
+1B1C8;NUSHU CHARACTER-1B1C8;Lo;0;L;;;;;N;;;;;
+1B1C9;NUSHU CHARACTER-1B1C9;Lo;0;L;;;;;N;;;;;
+1B1CA;NUSHU CHARACTER-1B1CA;Lo;0;L;;;;;N;;;;;
+1B1CB;NUSHU CHARACTER-1B1CB;Lo;0;L;;;;;N;;;;;
+1B1CC;NUSHU CHARACTER-1B1CC;Lo;0;L;;;;;N;;;;;
+1B1CD;NUSHU CHARACTER-1B1CD;Lo;0;L;;;;;N;;;;;
+1B1CE;NUSHU CHARACTER-1B1CE;Lo;0;L;;;;;N;;;;;
+1B1CF;NUSHU CHARACTER-1B1CF;Lo;0;L;;;;;N;;;;;
+1B1D0;NUSHU CHARACTER-1B1D0;Lo;0;L;;;;;N;;;;;
+1B1D1;NUSHU CHARACTER-1B1D1;Lo;0;L;;;;;N;;;;;
+1B1D2;NUSHU CHARACTER-1B1D2;Lo;0;L;;;;;N;;;;;
+1B1D3;NUSHU CHARACTER-1B1D3;Lo;0;L;;;;;N;;;;;
+1B1D4;NUSHU CHARACTER-1B1D4;Lo;0;L;;;;;N;;;;;
+1B1D5;NUSHU CHARACTER-1B1D5;Lo;0;L;;;;;N;;;;;
+1B1D6;NUSHU CHARACTER-1B1D6;Lo;0;L;;;;;N;;;;;
+1B1D7;NUSHU CHARACTER-1B1D7;Lo;0;L;;;;;N;;;;;
+1B1D8;NUSHU CHARACTER-1B1D8;Lo;0;L;;;;;N;;;;;
+1B1D9;NUSHU CHARACTER-1B1D9;Lo;0;L;;;;;N;;;;;
+1B1DA;NUSHU CHARACTER-1B1DA;Lo;0;L;;;;;N;;;;;
+1B1DB;NUSHU CHARACTER-1B1DB;Lo;0;L;;;;;N;;;;;
+1B1DC;NUSHU CHARACTER-1B1DC;Lo;0;L;;;;;N;;;;;
+1B1DD;NUSHU CHARACTER-1B1DD;Lo;0;L;;;;;N;;;;;
+1B1DE;NUSHU CHARACTER-1B1DE;Lo;0;L;;;;;N;;;;;
+1B1DF;NUSHU CHARACTER-1B1DF;Lo;0;L;;;;;N;;;;;
+1B1E0;NUSHU CHARACTER-1B1E0;Lo;0;L;;;;;N;;;;;
+1B1E1;NUSHU CHARACTER-1B1E1;Lo;0;L;;;;;N;;;;;
+1B1E2;NUSHU CHARACTER-1B1E2;Lo;0;L;;;;;N;;;;;
+1B1E3;NUSHU CHARACTER-1B1E3;Lo;0;L;;;;;N;;;;;
+1B1E4;NUSHU CHARACTER-1B1E4;Lo;0;L;;;;;N;;;;;
+1B1E5;NUSHU CHARACTER-1B1E5;Lo;0;L;;;;;N;;;;;
+1B1E6;NUSHU CHARACTER-1B1E6;Lo;0;L;;;;;N;;;;;
+1B1E7;NUSHU CHARACTER-1B1E7;Lo;0;L;;;;;N;;;;;
+1B1E8;NUSHU CHARACTER-1B1E8;Lo;0;L;;;;;N;;;;;
+1B1E9;NUSHU CHARACTER-1B1E9;Lo;0;L;;;;;N;;;;;
+1B1EA;NUSHU CHARACTER-1B1EA;Lo;0;L;;;;;N;;;;;
+1B1EB;NUSHU CHARACTER-1B1EB;Lo;0;L;;;;;N;;;;;
+1B1EC;NUSHU CHARACTER-1B1EC;Lo;0;L;;;;;N;;;;;
+1B1ED;NUSHU CHARACTER-1B1ED;Lo;0;L;;;;;N;;;;;
+1B1EE;NUSHU CHARACTER-1B1EE;Lo;0;L;;;;;N;;;;;
+1B1EF;NUSHU CHARACTER-1B1EF;Lo;0;L;;;;;N;;;;;
+1B1F0;NUSHU CHARACTER-1B1F0;Lo;0;L;;;;;N;;;;;
+1B1F1;NUSHU CHARACTER-1B1F1;Lo;0;L;;;;;N;;;;;
+1B1F2;NUSHU CHARACTER-1B1F2;Lo;0;L;;;;;N;;;;;
+1B1F3;NUSHU CHARACTER-1B1F3;Lo;0;L;;;;;N;;;;;
+1B1F4;NUSHU CHARACTER-1B1F4;Lo;0;L;;;;;N;;;;;
+1B1F5;NUSHU CHARACTER-1B1F5;Lo;0;L;;;;;N;;;;;
+1B1F6;NUSHU CHARACTER-1B1F6;Lo;0;L;;;;;N;;;;;
+1B1F7;NUSHU CHARACTER-1B1F7;Lo;0;L;;;;;N;;;;;
+1B1F8;NUSHU CHARACTER-1B1F8;Lo;0;L;;;;;N;;;;;
+1B1F9;NUSHU CHARACTER-1B1F9;Lo;0;L;;;;;N;;;;;
+1B1FA;NUSHU CHARACTER-1B1FA;Lo;0;L;;;;;N;;;;;
+1B1FB;NUSHU CHARACTER-1B1FB;Lo;0;L;;;;;N;;;;;
+1B1FC;NUSHU CHARACTER-1B1FC;Lo;0;L;;;;;N;;;;;
+1B1FD;NUSHU CHARACTER-1B1FD;Lo;0;L;;;;;N;;;;;
+1B1FE;NUSHU CHARACTER-1B1FE;Lo;0;L;;;;;N;;;;;
+1B1FF;NUSHU CHARACTER-1B1FF;Lo;0;L;;;;;N;;;;;
+1B200;NUSHU CHARACTER-1B200;Lo;0;L;;;;;N;;;;;
+1B201;NUSHU CHARACTER-1B201;Lo;0;L;;;;;N;;;;;
+1B202;NUSHU CHARACTER-1B202;Lo;0;L;;;;;N;;;;;
+1B203;NUSHU CHARACTER-1B203;Lo;0;L;;;;;N;;;;;
+1B204;NUSHU CHARACTER-1B204;Lo;0;L;;;;;N;;;;;
+1B205;NUSHU CHARACTER-1B205;Lo;0;L;;;;;N;;;;;
+1B206;NUSHU CHARACTER-1B206;Lo;0;L;;;;;N;;;;;
+1B207;NUSHU CHARACTER-1B207;Lo;0;L;;;;;N;;;;;
+1B208;NUSHU CHARACTER-1B208;Lo;0;L;;;;;N;;;;;
+1B209;NUSHU CHARACTER-1B209;Lo;0;L;;;;;N;;;;;
+1B20A;NUSHU CHARACTER-1B20A;Lo;0;L;;;;;N;;;;;
+1B20B;NUSHU CHARACTER-1B20B;Lo;0;L;;;;;N;;;;;
+1B20C;NUSHU CHARACTER-1B20C;Lo;0;L;;;;;N;;;;;
+1B20D;NUSHU CHARACTER-1B20D;Lo;0;L;;;;;N;;;;;
+1B20E;NUSHU CHARACTER-1B20E;Lo;0;L;;;;;N;;;;;
+1B20F;NUSHU CHARACTER-1B20F;Lo;0;L;;;;;N;;;;;
+1B210;NUSHU CHARACTER-1B210;Lo;0;L;;;;;N;;;;;
+1B211;NUSHU CHARACTER-1B211;Lo;0;L;;;;;N;;;;;
+1B212;NUSHU CHARACTER-1B212;Lo;0;L;;;;;N;;;;;
+1B213;NUSHU CHARACTER-1B213;Lo;0;L;;;;;N;;;;;
+1B214;NUSHU CHARACTER-1B214;Lo;0;L;;;;;N;;;;;
+1B215;NUSHU CHARACTER-1B215;Lo;0;L;;;;;N;;;;;
+1B216;NUSHU CHARACTER-1B216;Lo;0;L;;;;;N;;;;;
+1B217;NUSHU CHARACTER-1B217;Lo;0;L;;;;;N;;;;;
+1B218;NUSHU CHARACTER-1B218;Lo;0;L;;;;;N;;;;;
+1B219;NUSHU CHARACTER-1B219;Lo;0;L;;;;;N;;;;;
+1B21A;NUSHU CHARACTER-1B21A;Lo;0;L;;;;;N;;;;;
+1B21B;NUSHU CHARACTER-1B21B;Lo;0;L;;;;;N;;;;;
+1B21C;NUSHU CHARACTER-1B21C;Lo;0;L;;;;;N;;;;;
+1B21D;NUSHU CHARACTER-1B21D;Lo;0;L;;;;;N;;;;;
+1B21E;NUSHU CHARACTER-1B21E;Lo;0;L;;;;;N;;;;;
+1B21F;NUSHU CHARACTER-1B21F;Lo;0;L;;;;;N;;;;;
+1B220;NUSHU CHARACTER-1B220;Lo;0;L;;;;;N;;;;;
+1B221;NUSHU CHARACTER-1B221;Lo;0;L;;;;;N;;;;;
+1B222;NUSHU CHARACTER-1B222;Lo;0;L;;;;;N;;;;;
+1B223;NUSHU CHARACTER-1B223;Lo;0;L;;;;;N;;;;;
+1B224;NUSHU CHARACTER-1B224;Lo;0;L;;;;;N;;;;;
+1B225;NUSHU CHARACTER-1B225;Lo;0;L;;;;;N;;;;;
+1B226;NUSHU CHARACTER-1B226;Lo;0;L;;;;;N;;;;;
+1B227;NUSHU CHARACTER-1B227;Lo;0;L;;;;;N;;;;;
+1B228;NUSHU CHARACTER-1B228;Lo;0;L;;;;;N;;;;;
+1B229;NUSHU CHARACTER-1B229;Lo;0;L;;;;;N;;;;;
+1B22A;NUSHU CHARACTER-1B22A;Lo;0;L;;;;;N;;;;;
+1B22B;NUSHU CHARACTER-1B22B;Lo;0;L;;;;;N;;;;;
+1B22C;NUSHU CHARACTER-1B22C;Lo;0;L;;;;;N;;;;;
+1B22D;NUSHU CHARACTER-1B22D;Lo;0;L;;;;;N;;;;;
+1B22E;NUSHU CHARACTER-1B22E;Lo;0;L;;;;;N;;;;;
+1B22F;NUSHU CHARACTER-1B22F;Lo;0;L;;;;;N;;;;;
+1B230;NUSHU CHARACTER-1B230;Lo;0;L;;;;;N;;;;;
+1B231;NUSHU CHARACTER-1B231;Lo;0;L;;;;;N;;;;;
+1B232;NUSHU CHARACTER-1B232;Lo;0;L;;;;;N;;;;;
+1B233;NUSHU CHARACTER-1B233;Lo;0;L;;;;;N;;;;;
+1B234;NUSHU CHARACTER-1B234;Lo;0;L;;;;;N;;;;;
+1B235;NUSHU CHARACTER-1B235;Lo;0;L;;;;;N;;;;;
+1B236;NUSHU CHARACTER-1B236;Lo;0;L;;;;;N;;;;;
+1B237;NUSHU CHARACTER-1B237;Lo;0;L;;;;;N;;;;;
+1B238;NUSHU CHARACTER-1B238;Lo;0;L;;;;;N;;;;;
+1B239;NUSHU CHARACTER-1B239;Lo;0;L;;;;;N;;;;;
+1B23A;NUSHU CHARACTER-1B23A;Lo;0;L;;;;;N;;;;;
+1B23B;NUSHU CHARACTER-1B23B;Lo;0;L;;;;;N;;;;;
+1B23C;NUSHU CHARACTER-1B23C;Lo;0;L;;;;;N;;;;;
+1B23D;NUSHU CHARACTER-1B23D;Lo;0;L;;;;;N;;;;;
+1B23E;NUSHU CHARACTER-1B23E;Lo;0;L;;;;;N;;;;;
+1B23F;NUSHU CHARACTER-1B23F;Lo;0;L;;;;;N;;;;;
+1B240;NUSHU CHARACTER-1B240;Lo;0;L;;;;;N;;;;;
+1B241;NUSHU CHARACTER-1B241;Lo;0;L;;;;;N;;;;;
+1B242;NUSHU CHARACTER-1B242;Lo;0;L;;;;;N;;;;;
+1B243;NUSHU CHARACTER-1B243;Lo;0;L;;;;;N;;;;;
+1B244;NUSHU CHARACTER-1B244;Lo;0;L;;;;;N;;;;;
+1B245;NUSHU CHARACTER-1B245;Lo;0;L;;;;;N;;;;;
+1B246;NUSHU CHARACTER-1B246;Lo;0;L;;;;;N;;;;;
+1B247;NUSHU CHARACTER-1B247;Lo;0;L;;;;;N;;;;;
+1B248;NUSHU CHARACTER-1B248;Lo;0;L;;;;;N;;;;;
+1B249;NUSHU CHARACTER-1B249;Lo;0;L;;;;;N;;;;;
+1B24A;NUSHU CHARACTER-1B24A;Lo;0;L;;;;;N;;;;;
+1B24B;NUSHU CHARACTER-1B24B;Lo;0;L;;;;;N;;;;;
+1B24C;NUSHU CHARACTER-1B24C;Lo;0;L;;;;;N;;;;;
+1B24D;NUSHU CHARACTER-1B24D;Lo;0;L;;;;;N;;;;;
+1B24E;NUSHU CHARACTER-1B24E;Lo;0;L;;;;;N;;;;;
+1B24F;NUSHU CHARACTER-1B24F;Lo;0;L;;;;;N;;;;;
+1B250;NUSHU CHARACTER-1B250;Lo;0;L;;;;;N;;;;;
+1B251;NUSHU CHARACTER-1B251;Lo;0;L;;;;;N;;;;;
+1B252;NUSHU CHARACTER-1B252;Lo;0;L;;;;;N;;;;;
+1B253;NUSHU CHARACTER-1B253;Lo;0;L;;;;;N;;;;;
+1B254;NUSHU CHARACTER-1B254;Lo;0;L;;;;;N;;;;;
+1B255;NUSHU CHARACTER-1B255;Lo;0;L;;;;;N;;;;;
+1B256;NUSHU CHARACTER-1B256;Lo;0;L;;;;;N;;;;;
+1B257;NUSHU CHARACTER-1B257;Lo;0;L;;;;;N;;;;;
+1B258;NUSHU CHARACTER-1B258;Lo;0;L;;;;;N;;;;;
+1B259;NUSHU CHARACTER-1B259;Lo;0;L;;;;;N;;;;;
+1B25A;NUSHU CHARACTER-1B25A;Lo;0;L;;;;;N;;;;;
+1B25B;NUSHU CHARACTER-1B25B;Lo;0;L;;;;;N;;;;;
+1B25C;NUSHU CHARACTER-1B25C;Lo;0;L;;;;;N;;;;;
+1B25D;NUSHU CHARACTER-1B25D;Lo;0;L;;;;;N;;;;;
+1B25E;NUSHU CHARACTER-1B25E;Lo;0;L;;;;;N;;;;;
+1B25F;NUSHU CHARACTER-1B25F;Lo;0;L;;;;;N;;;;;
+1B260;NUSHU CHARACTER-1B260;Lo;0;L;;;;;N;;;;;
+1B261;NUSHU CHARACTER-1B261;Lo;0;L;;;;;N;;;;;
+1B262;NUSHU CHARACTER-1B262;Lo;0;L;;;;;N;;;;;
+1B263;NUSHU CHARACTER-1B263;Lo;0;L;;;;;N;;;;;
+1B264;NUSHU CHARACTER-1B264;Lo;0;L;;;;;N;;;;;
+1B265;NUSHU CHARACTER-1B265;Lo;0;L;;;;;N;;;;;
+1B266;NUSHU CHARACTER-1B266;Lo;0;L;;;;;N;;;;;
+1B267;NUSHU CHARACTER-1B267;Lo;0;L;;;;;N;;;;;
+1B268;NUSHU CHARACTER-1B268;Lo;0;L;;;;;N;;;;;
+1B269;NUSHU CHARACTER-1B269;Lo;0;L;;;;;N;;;;;
+1B26A;NUSHU CHARACTER-1B26A;Lo;0;L;;;;;N;;;;;
+1B26B;NUSHU CHARACTER-1B26B;Lo;0;L;;;;;N;;;;;
+1B26C;NUSHU CHARACTER-1B26C;Lo;0;L;;;;;N;;;;;
+1B26D;NUSHU CHARACTER-1B26D;Lo;0;L;;;;;N;;;;;
+1B26E;NUSHU CHARACTER-1B26E;Lo;0;L;;;;;N;;;;;
+1B26F;NUSHU CHARACTER-1B26F;Lo;0;L;;;;;N;;;;;
+1B270;NUSHU CHARACTER-1B270;Lo;0;L;;;;;N;;;;;
+1B271;NUSHU CHARACTER-1B271;Lo;0;L;;;;;N;;;;;
+1B272;NUSHU CHARACTER-1B272;Lo;0;L;;;;;N;;;;;
+1B273;NUSHU CHARACTER-1B273;Lo;0;L;;;;;N;;;;;
+1B274;NUSHU CHARACTER-1B274;Lo;0;L;;;;;N;;;;;
+1B275;NUSHU CHARACTER-1B275;Lo;0;L;;;;;N;;;;;
+1B276;NUSHU CHARACTER-1B276;Lo;0;L;;;;;N;;;;;
+1B277;NUSHU CHARACTER-1B277;Lo;0;L;;;;;N;;;;;
+1B278;NUSHU CHARACTER-1B278;Lo;0;L;;;;;N;;;;;
+1B279;NUSHU CHARACTER-1B279;Lo;0;L;;;;;N;;;;;
+1B27A;NUSHU CHARACTER-1B27A;Lo;0;L;;;;;N;;;;;
+1B27B;NUSHU CHARACTER-1B27B;Lo;0;L;;;;;N;;;;;
+1B27C;NUSHU CHARACTER-1B27C;Lo;0;L;;;;;N;;;;;
+1B27D;NUSHU CHARACTER-1B27D;Lo;0;L;;;;;N;;;;;
+1B27E;NUSHU CHARACTER-1B27E;Lo;0;L;;;;;N;;;;;
+1B27F;NUSHU CHARACTER-1B27F;Lo;0;L;;;;;N;;;;;
+1B280;NUSHU CHARACTER-1B280;Lo;0;L;;;;;N;;;;;
+1B281;NUSHU CHARACTER-1B281;Lo;0;L;;;;;N;;;;;
+1B282;NUSHU CHARACTER-1B282;Lo;0;L;;;;;N;;;;;
+1B283;NUSHU CHARACTER-1B283;Lo;0;L;;;;;N;;;;;
+1B284;NUSHU CHARACTER-1B284;Lo;0;L;;;;;N;;;;;
+1B285;NUSHU CHARACTER-1B285;Lo;0;L;;;;;N;;;;;
+1B286;NUSHU CHARACTER-1B286;Lo;0;L;;;;;N;;;;;
+1B287;NUSHU CHARACTER-1B287;Lo;0;L;;;;;N;;;;;
+1B288;NUSHU CHARACTER-1B288;Lo;0;L;;;;;N;;;;;
+1B289;NUSHU CHARACTER-1B289;Lo;0;L;;;;;N;;;;;
+1B28A;NUSHU CHARACTER-1B28A;Lo;0;L;;;;;N;;;;;
+1B28B;NUSHU CHARACTER-1B28B;Lo;0;L;;;;;N;;;;;
+1B28C;NUSHU CHARACTER-1B28C;Lo;0;L;;;;;N;;;;;
+1B28D;NUSHU CHARACTER-1B28D;Lo;0;L;;;;;N;;;;;
+1B28E;NUSHU CHARACTER-1B28E;Lo;0;L;;;;;N;;;;;
+1B28F;NUSHU CHARACTER-1B28F;Lo;0;L;;;;;N;;;;;
+1B290;NUSHU CHARACTER-1B290;Lo;0;L;;;;;N;;;;;
+1B291;NUSHU CHARACTER-1B291;Lo;0;L;;;;;N;;;;;
+1B292;NUSHU CHARACTER-1B292;Lo;0;L;;;;;N;;;;;
+1B293;NUSHU CHARACTER-1B293;Lo;0;L;;;;;N;;;;;
+1B294;NUSHU CHARACTER-1B294;Lo;0;L;;;;;N;;;;;
+1B295;NUSHU CHARACTER-1B295;Lo;0;L;;;;;N;;;;;
+1B296;NUSHU CHARACTER-1B296;Lo;0;L;;;;;N;;;;;
+1B297;NUSHU CHARACTER-1B297;Lo;0;L;;;;;N;;;;;
+1B298;NUSHU CHARACTER-1B298;Lo;0;L;;;;;N;;;;;
+1B299;NUSHU CHARACTER-1B299;Lo;0;L;;;;;N;;;;;
+1B29A;NUSHU CHARACTER-1B29A;Lo;0;L;;;;;N;;;;;
+1B29B;NUSHU CHARACTER-1B29B;Lo;0;L;;;;;N;;;;;
+1B29C;NUSHU CHARACTER-1B29C;Lo;0;L;;;;;N;;;;;
+1B29D;NUSHU CHARACTER-1B29D;Lo;0;L;;;;;N;;;;;
+1B29E;NUSHU CHARACTER-1B29E;Lo;0;L;;;;;N;;;;;
+1B29F;NUSHU CHARACTER-1B29F;Lo;0;L;;;;;N;;;;;
+1B2A0;NUSHU CHARACTER-1B2A0;Lo;0;L;;;;;N;;;;;
+1B2A1;NUSHU CHARACTER-1B2A1;Lo;0;L;;;;;N;;;;;
+1B2A2;NUSHU CHARACTER-1B2A2;Lo;0;L;;;;;N;;;;;
+1B2A3;NUSHU CHARACTER-1B2A3;Lo;0;L;;;;;N;;;;;
+1B2A4;NUSHU CHARACTER-1B2A4;Lo;0;L;;;;;N;;;;;
+1B2A5;NUSHU CHARACTER-1B2A5;Lo;0;L;;;;;N;;;;;
+1B2A6;NUSHU CHARACTER-1B2A6;Lo;0;L;;;;;N;;;;;
+1B2A7;NUSHU CHARACTER-1B2A7;Lo;0;L;;;;;N;;;;;
+1B2A8;NUSHU CHARACTER-1B2A8;Lo;0;L;;;;;N;;;;;
+1B2A9;NUSHU CHARACTER-1B2A9;Lo;0;L;;;;;N;;;;;
+1B2AA;NUSHU CHARACTER-1B2AA;Lo;0;L;;;;;N;;;;;
+1B2AB;NUSHU CHARACTER-1B2AB;Lo;0;L;;;;;N;;;;;
+1B2AC;NUSHU CHARACTER-1B2AC;Lo;0;L;;;;;N;;;;;
+1B2AD;NUSHU CHARACTER-1B2AD;Lo;0;L;;;;;N;;;;;
+1B2AE;NUSHU CHARACTER-1B2AE;Lo;0;L;;;;;N;;;;;
+1B2AF;NUSHU CHARACTER-1B2AF;Lo;0;L;;;;;N;;;;;
+1B2B0;NUSHU CHARACTER-1B2B0;Lo;0;L;;;;;N;;;;;
+1B2B1;NUSHU CHARACTER-1B2B1;Lo;0;L;;;;;N;;;;;
+1B2B2;NUSHU CHARACTER-1B2B2;Lo;0;L;;;;;N;;;;;
+1B2B3;NUSHU CHARACTER-1B2B3;Lo;0;L;;;;;N;;;;;
+1B2B4;NUSHU CHARACTER-1B2B4;Lo;0;L;;;;;N;;;;;
+1B2B5;NUSHU CHARACTER-1B2B5;Lo;0;L;;;;;N;;;;;
+1B2B6;NUSHU CHARACTER-1B2B6;Lo;0;L;;;;;N;;;;;
+1B2B7;NUSHU CHARACTER-1B2B7;Lo;0;L;;;;;N;;;;;
+1B2B8;NUSHU CHARACTER-1B2B8;Lo;0;L;;;;;N;;;;;
+1B2B9;NUSHU CHARACTER-1B2B9;Lo;0;L;;;;;N;;;;;
+1B2BA;NUSHU CHARACTER-1B2BA;Lo;0;L;;;;;N;;;;;
+1B2BB;NUSHU CHARACTER-1B2BB;Lo;0;L;;;;;N;;;;;
+1B2BC;NUSHU CHARACTER-1B2BC;Lo;0;L;;;;;N;;;;;
+1B2BD;NUSHU CHARACTER-1B2BD;Lo;0;L;;;;;N;;;;;
+1B2BE;NUSHU CHARACTER-1B2BE;Lo;0;L;;;;;N;;;;;
+1B2BF;NUSHU CHARACTER-1B2BF;Lo;0;L;;;;;N;;;;;
+1B2C0;NUSHU CHARACTER-1B2C0;Lo;0;L;;;;;N;;;;;
+1B2C1;NUSHU CHARACTER-1B2C1;Lo;0;L;;;;;N;;;;;
+1B2C2;NUSHU CHARACTER-1B2C2;Lo;0;L;;;;;N;;;;;
+1B2C3;NUSHU CHARACTER-1B2C3;Lo;0;L;;;;;N;;;;;
+1B2C4;NUSHU CHARACTER-1B2C4;Lo;0;L;;;;;N;;;;;
+1B2C5;NUSHU CHARACTER-1B2C5;Lo;0;L;;;;;N;;;;;
+1B2C6;NUSHU CHARACTER-1B2C6;Lo;0;L;;;;;N;;;;;
+1B2C7;NUSHU CHARACTER-1B2C7;Lo;0;L;;;;;N;;;;;
+1B2C8;NUSHU CHARACTER-1B2C8;Lo;0;L;;;;;N;;;;;
+1B2C9;NUSHU CHARACTER-1B2C9;Lo;0;L;;;;;N;;;;;
+1B2CA;NUSHU CHARACTER-1B2CA;Lo;0;L;;;;;N;;;;;
+1B2CB;NUSHU CHARACTER-1B2CB;Lo;0;L;;;;;N;;;;;
+1B2CC;NUSHU CHARACTER-1B2CC;Lo;0;L;;;;;N;;;;;
+1B2CD;NUSHU CHARACTER-1B2CD;Lo;0;L;;;;;N;;;;;
+1B2CE;NUSHU CHARACTER-1B2CE;Lo;0;L;;;;;N;;;;;
+1B2CF;NUSHU CHARACTER-1B2CF;Lo;0;L;;;;;N;;;;;
+1B2D0;NUSHU CHARACTER-1B2D0;Lo;0;L;;;;;N;;;;;
+1B2D1;NUSHU CHARACTER-1B2D1;Lo;0;L;;;;;N;;;;;
+1B2D2;NUSHU CHARACTER-1B2D2;Lo;0;L;;;;;N;;;;;
+1B2D3;NUSHU CHARACTER-1B2D3;Lo;0;L;;;;;N;;;;;
+1B2D4;NUSHU CHARACTER-1B2D4;Lo;0;L;;;;;N;;;;;
+1B2D5;NUSHU CHARACTER-1B2D5;Lo;0;L;;;;;N;;;;;
+1B2D6;NUSHU CHARACTER-1B2D6;Lo;0;L;;;;;N;;;;;
+1B2D7;NUSHU CHARACTER-1B2D7;Lo;0;L;;;;;N;;;;;
+1B2D8;NUSHU CHARACTER-1B2D8;Lo;0;L;;;;;N;;;;;
+1B2D9;NUSHU CHARACTER-1B2D9;Lo;0;L;;;;;N;;;;;
+1B2DA;NUSHU CHARACTER-1B2DA;Lo;0;L;;;;;N;;;;;
+1B2DB;NUSHU CHARACTER-1B2DB;Lo;0;L;;;;;N;;;;;
+1B2DC;NUSHU CHARACTER-1B2DC;Lo;0;L;;;;;N;;;;;
+1B2DD;NUSHU CHARACTER-1B2DD;Lo;0;L;;;;;N;;;;;
+1B2DE;NUSHU CHARACTER-1B2DE;Lo;0;L;;;;;N;;;;;
+1B2DF;NUSHU CHARACTER-1B2DF;Lo;0;L;;;;;N;;;;;
+1B2E0;NUSHU CHARACTER-1B2E0;Lo;0;L;;;;;N;;;;;
+1B2E1;NUSHU CHARACTER-1B2E1;Lo;0;L;;;;;N;;;;;
+1B2E2;NUSHU CHARACTER-1B2E2;Lo;0;L;;;;;N;;;;;
+1B2E3;NUSHU CHARACTER-1B2E3;Lo;0;L;;;;;N;;;;;
+1B2E4;NUSHU CHARACTER-1B2E4;Lo;0;L;;;;;N;;;;;
+1B2E5;NUSHU CHARACTER-1B2E5;Lo;0;L;;;;;N;;;;;
+1B2E6;NUSHU CHARACTER-1B2E6;Lo;0;L;;;;;N;;;;;
+1B2E7;NUSHU CHARACTER-1B2E7;Lo;0;L;;;;;N;;;;;
+1B2E8;NUSHU CHARACTER-1B2E8;Lo;0;L;;;;;N;;;;;
+1B2E9;NUSHU CHARACTER-1B2E9;Lo;0;L;;;;;N;;;;;
+1B2EA;NUSHU CHARACTER-1B2EA;Lo;0;L;;;;;N;;;;;
+1B2EB;NUSHU CHARACTER-1B2EB;Lo;0;L;;;;;N;;;;;
+1B2EC;NUSHU CHARACTER-1B2EC;Lo;0;L;;;;;N;;;;;
+1B2ED;NUSHU CHARACTER-1B2ED;Lo;0;L;;;;;N;;;;;
+1B2EE;NUSHU CHARACTER-1B2EE;Lo;0;L;;;;;N;;;;;
+1B2EF;NUSHU CHARACTER-1B2EF;Lo;0;L;;;;;N;;;;;
+1B2F0;NUSHU CHARACTER-1B2F0;Lo;0;L;;;;;N;;;;;
+1B2F1;NUSHU CHARACTER-1B2F1;Lo;0;L;;;;;N;;;;;
+1B2F2;NUSHU CHARACTER-1B2F2;Lo;0;L;;;;;N;;;;;
+1B2F3;NUSHU CHARACTER-1B2F3;Lo;0;L;;;;;N;;;;;
+1B2F4;NUSHU CHARACTER-1B2F4;Lo;0;L;;;;;N;;;;;
+1B2F5;NUSHU CHARACTER-1B2F5;Lo;0;L;;;;;N;;;;;
+1B2F6;NUSHU CHARACTER-1B2F6;Lo;0;L;;;;;N;;;;;
+1B2F7;NUSHU CHARACTER-1B2F7;Lo;0;L;;;;;N;;;;;
+1B2F8;NUSHU CHARACTER-1B2F8;Lo;0;L;;;;;N;;;;;
+1B2F9;NUSHU CHARACTER-1B2F9;Lo;0;L;;;;;N;;;;;
+1B2FA;NUSHU CHARACTER-1B2FA;Lo;0;L;;;;;N;;;;;
+1B2FB;NUSHU CHARACTER-1B2FB;Lo;0;L;;;;;N;;;;;
1BC00;DUPLOYAN LETTER H;Lo;0;L;;;;;N;;;;;
1BC01;DUPLOYAN LETTER X;Lo;0;L;;;;;N;;;;;
1BC02;DUPLOYAN LETTER P;Lo;0;L;;;;;N;;;;;
@@ -26154,6 +28261,44 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;;
1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;;
1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;;
+1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;;
+1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;;
+1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;;
+1E003;COMBINING GLAGOLITIC LETTER GLAGOLI;Mn;230;NSM;;;;;N;;;;;
+1E004;COMBINING GLAGOLITIC LETTER DOBRO;Mn;230;NSM;;;;;N;;;;;
+1E005;COMBINING GLAGOLITIC LETTER YESTU;Mn;230;NSM;;;;;N;;;;;
+1E006;COMBINING GLAGOLITIC LETTER ZHIVETE;Mn;230;NSM;;;;;N;;;;;
+1E008;COMBINING GLAGOLITIC LETTER ZEMLJA;Mn;230;NSM;;;;;N;;;;;
+1E009;COMBINING GLAGOLITIC LETTER IZHE;Mn;230;NSM;;;;;N;;;;;
+1E00A;COMBINING GLAGOLITIC LETTER INITIAL IZHE;Mn;230;NSM;;;;;N;;;;;
+1E00B;COMBINING GLAGOLITIC LETTER I;Mn;230;NSM;;;;;N;;;;;
+1E00C;COMBINING GLAGOLITIC LETTER DJERVI;Mn;230;NSM;;;;;N;;;;;
+1E00D;COMBINING GLAGOLITIC LETTER KAKO;Mn;230;NSM;;;;;N;;;;;
+1E00E;COMBINING GLAGOLITIC LETTER LJUDIJE;Mn;230;NSM;;;;;N;;;;;
+1E00F;COMBINING GLAGOLITIC LETTER MYSLITE;Mn;230;NSM;;;;;N;;;;;
+1E010;COMBINING GLAGOLITIC LETTER NASHI;Mn;230;NSM;;;;;N;;;;;
+1E011;COMBINING GLAGOLITIC LETTER ONU;Mn;230;NSM;;;;;N;;;;;
+1E012;COMBINING GLAGOLITIC LETTER POKOJI;Mn;230;NSM;;;;;N;;;;;
+1E013;COMBINING GLAGOLITIC LETTER RITSI;Mn;230;NSM;;;;;N;;;;;
+1E014;COMBINING GLAGOLITIC LETTER SLOVO;Mn;230;NSM;;;;;N;;;;;
+1E015;COMBINING GLAGOLITIC LETTER TVRIDO;Mn;230;NSM;;;;;N;;;;;
+1E016;COMBINING GLAGOLITIC LETTER UKU;Mn;230;NSM;;;;;N;;;;;
+1E017;COMBINING GLAGOLITIC LETTER FRITU;Mn;230;NSM;;;;;N;;;;;
+1E018;COMBINING GLAGOLITIC LETTER HERU;Mn;230;NSM;;;;;N;;;;;
+1E01B;COMBINING GLAGOLITIC LETTER SHTA;Mn;230;NSM;;;;;N;;;;;
+1E01C;COMBINING GLAGOLITIC LETTER TSI;Mn;230;NSM;;;;;N;;;;;
+1E01D;COMBINING GLAGOLITIC LETTER CHRIVI;Mn;230;NSM;;;;;N;;;;;
+1E01E;COMBINING GLAGOLITIC LETTER SHA;Mn;230;NSM;;;;;N;;;;;
+1E01F;COMBINING GLAGOLITIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;
+1E020;COMBINING GLAGOLITIC LETTER YERI;Mn;230;NSM;;;;;N;;;;;
+1E021;COMBINING GLAGOLITIC LETTER YATI;Mn;230;NSM;;;;;N;;;;;
+1E023;COMBINING GLAGOLITIC LETTER YU;Mn;230;NSM;;;;;N;;;;;
+1E024;COMBINING GLAGOLITIC LETTER SMALL YUS;Mn;230;NSM;;;;;N;;;;;
+1E026;COMBINING GLAGOLITIC LETTER YO;Mn;230;NSM;;;;;N;;;;;
+1E027;COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS;Mn;230;NSM;;;;;N;;;;;
+1E028;COMBINING GLAGOLITIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;;
+1E029;COMBINING GLAGOLITIC LETTER IOTATED BIG YUS;Mn;230;NSM;;;;;N;;;;;
+1E02A;COMBINING GLAGOLITIC LETTER FITA;Mn;230;NSM;;;;;N;;;;;
1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;;
1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;;
1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;;
@@ -26367,6 +28512,93 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1E8D4;MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS;Mn;220;NSM;;;;;N;;;;;
1E8D5;MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS;Mn;220;NSM;;;;;N;;;;;
1E8D6;MENDE KIKAKUI COMBINING NUMBER MILLIONS;Mn;220;NSM;;;;;N;;;;;
+1E900;ADLAM CAPITAL LETTER ALIF;Lu;0;R;;;;;N;;;;1E922;
+1E901;ADLAM CAPITAL LETTER DAALI;Lu;0;R;;;;;N;;;;1E923;
+1E902;ADLAM CAPITAL LETTER LAAM;Lu;0;R;;;;;N;;;;1E924;
+1E903;ADLAM CAPITAL LETTER MIIM;Lu;0;R;;;;;N;;;;1E925;
+1E904;ADLAM CAPITAL LETTER BA;Lu;0;R;;;;;N;;;;1E926;
+1E905;ADLAM CAPITAL LETTER SINNYIIYHE;Lu;0;R;;;;;N;;;;1E927;
+1E906;ADLAM CAPITAL LETTER PE;Lu;0;R;;;;;N;;;;1E928;
+1E907;ADLAM CAPITAL LETTER BHE;Lu;0;R;;;;;N;;;;1E929;
+1E908;ADLAM CAPITAL LETTER RA;Lu;0;R;;;;;N;;;;1E92A;
+1E909;ADLAM CAPITAL LETTER E;Lu;0;R;;;;;N;;;;1E92B;
+1E90A;ADLAM CAPITAL LETTER FA;Lu;0;R;;;;;N;;;;1E92C;
+1E90B;ADLAM CAPITAL LETTER I;Lu;0;R;;;;;N;;;;1E92D;
+1E90C;ADLAM CAPITAL LETTER O;Lu;0;R;;;;;N;;;;1E92E;
+1E90D;ADLAM CAPITAL LETTER DHA;Lu;0;R;;;;;N;;;;1E92F;
+1E90E;ADLAM CAPITAL LETTER YHE;Lu;0;R;;;;;N;;;;1E930;
+1E90F;ADLAM CAPITAL LETTER WAW;Lu;0;R;;;;;N;;;;1E931;
+1E910;ADLAM CAPITAL LETTER NUN;Lu;0;R;;;;;N;;;;1E932;
+1E911;ADLAM CAPITAL LETTER KAF;Lu;0;R;;;;;N;;;;1E933;
+1E912;ADLAM CAPITAL LETTER YA;Lu;0;R;;;;;N;;;;1E934;
+1E913;ADLAM CAPITAL LETTER U;Lu;0;R;;;;;N;;;;1E935;
+1E914;ADLAM CAPITAL LETTER JIIM;Lu;0;R;;;;;N;;;;1E936;
+1E915;ADLAM CAPITAL LETTER CHI;Lu;0;R;;;;;N;;;;1E937;
+1E916;ADLAM CAPITAL LETTER HA;Lu;0;R;;;;;N;;;;1E938;
+1E917;ADLAM CAPITAL LETTER QAAF;Lu;0;R;;;;;N;;;;1E939;
+1E918;ADLAM CAPITAL LETTER GA;Lu;0;R;;;;;N;;;;1E93A;
+1E919;ADLAM CAPITAL LETTER NYA;Lu;0;R;;;;;N;;;;1E93B;
+1E91A;ADLAM CAPITAL LETTER TU;Lu;0;R;;;;;N;;;;1E93C;
+1E91B;ADLAM CAPITAL LETTER NHA;Lu;0;R;;;;;N;;;;1E93D;
+1E91C;ADLAM CAPITAL LETTER VA;Lu;0;R;;;;;N;;;;1E93E;
+1E91D;ADLAM CAPITAL LETTER KHA;Lu;0;R;;;;;N;;;;1E93F;
+1E91E;ADLAM CAPITAL LETTER GBE;Lu;0;R;;;;;N;;;;1E940;
+1E91F;ADLAM CAPITAL LETTER ZAL;Lu;0;R;;;;;N;;;;1E941;
+1E920;ADLAM CAPITAL LETTER KPO;Lu;0;R;;;;;N;;;;1E942;
+1E921;ADLAM CAPITAL LETTER SHA;Lu;0;R;;;;;N;;;;1E943;
+1E922;ADLAM SMALL LETTER ALIF;Ll;0;R;;;;;N;;;1E900;;1E900
+1E923;ADLAM SMALL LETTER DAALI;Ll;0;R;;;;;N;;;1E901;;1E901
+1E924;ADLAM SMALL LETTER LAAM;Ll;0;R;;;;;N;;;1E902;;1E902
+1E925;ADLAM SMALL LETTER MIIM;Ll;0;R;;;;;N;;;1E903;;1E903
+1E926;ADLAM SMALL LETTER BA;Ll;0;R;;;;;N;;;1E904;;1E904
+1E927;ADLAM SMALL LETTER SINNYIIYHE;Ll;0;R;;;;;N;;;1E905;;1E905
+1E928;ADLAM SMALL LETTER PE;Ll;0;R;;;;;N;;;1E906;;1E906
+1E929;ADLAM SMALL LETTER BHE;Ll;0;R;;;;;N;;;1E907;;1E907
+1E92A;ADLAM SMALL LETTER RA;Ll;0;R;;;;;N;;;1E908;;1E908
+1E92B;ADLAM SMALL LETTER E;Ll;0;R;;;;;N;;;1E909;;1E909
+1E92C;ADLAM SMALL LETTER FA;Ll;0;R;;;;;N;;;1E90A;;1E90A
+1E92D;ADLAM SMALL LETTER I;Ll;0;R;;;;;N;;;1E90B;;1E90B
+1E92E;ADLAM SMALL LETTER O;Ll;0;R;;;;;N;;;1E90C;;1E90C
+1E92F;ADLAM SMALL LETTER DHA;Ll;0;R;;;;;N;;;1E90D;;1E90D
+1E930;ADLAM SMALL LETTER YHE;Ll;0;R;;;;;N;;;1E90E;;1E90E
+1E931;ADLAM SMALL LETTER WAW;Ll;0;R;;;;;N;;;1E90F;;1E90F
+1E932;ADLAM SMALL LETTER NUN;Ll;0;R;;;;;N;;;1E910;;1E910
+1E933;ADLAM SMALL LETTER KAF;Ll;0;R;;;;;N;;;1E911;;1E911
+1E934;ADLAM SMALL LETTER YA;Ll;0;R;;;;;N;;;1E912;;1E912
+1E935;ADLAM SMALL LETTER U;Ll;0;R;;;;;N;;;1E913;;1E913
+1E936;ADLAM SMALL LETTER JIIM;Ll;0;R;;;;;N;;;1E914;;1E914
+1E937;ADLAM SMALL LETTER CHI;Ll;0;R;;;;;N;;;1E915;;1E915
+1E938;ADLAM SMALL LETTER HA;Ll;0;R;;;;;N;;;1E916;;1E916
+1E939;ADLAM SMALL LETTER QAAF;Ll;0;R;;;;;N;;;1E917;;1E917
+1E93A;ADLAM SMALL LETTER GA;Ll;0;R;;;;;N;;;1E918;;1E918
+1E93B;ADLAM SMALL LETTER NYA;Ll;0;R;;;;;N;;;1E919;;1E919
+1E93C;ADLAM SMALL LETTER TU;Ll;0;R;;;;;N;;;1E91A;;1E91A
+1E93D;ADLAM SMALL LETTER NHA;Ll;0;R;;;;;N;;;1E91B;;1E91B
+1E93E;ADLAM SMALL LETTER VA;Ll;0;R;;;;;N;;;1E91C;;1E91C
+1E93F;ADLAM SMALL LETTER KHA;Ll;0;R;;;;;N;;;1E91D;;1E91D
+1E940;ADLAM SMALL LETTER GBE;Ll;0;R;;;;;N;;;1E91E;;1E91E
+1E941;ADLAM SMALL LETTER ZAL;Ll;0;R;;;;;N;;;1E91F;;1E91F
+1E942;ADLAM SMALL LETTER KPO;Ll;0;R;;;;;N;;;1E920;;1E920
+1E943;ADLAM SMALL LETTER SHA;Ll;0;R;;;;;N;;;1E921;;1E921
+1E944;ADLAM ALIF LENGTHENER;Mn;230;NSM;;;;;N;;;;;
+1E945;ADLAM VOWEL LENGTHENER;Mn;230;NSM;;;;;N;;;;;
+1E946;ADLAM GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1E947;ADLAM HAMZA;Mn;230;NSM;;;;;N;;;;;
+1E948;ADLAM CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;;
+1E949;ADLAM GEMINATE CONSONANT MODIFIER;Mn;230;NSM;;;;;N;;;;;
+1E94A;ADLAM NUKTA;Mn;7;NSM;;;;;N;;;;;
+1E950;ADLAM DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
+1E951;ADLAM DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
+1E952;ADLAM DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
+1E953;ADLAM DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
+1E954;ADLAM DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
+1E955;ADLAM DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
+1E956;ADLAM DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
+1E957;ADLAM DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
+1E958;ADLAM DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
+1E959;ADLAM DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
+1E95E;ADLAM INITIAL EXCLAMATION MARK;Po;0;R;;;;;N;;;;;
+1E95F;ADLAM INITIAL QUESTION MARK;Po;0;R;;;;;N;;;;;
1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL;<font> 0627;;;;N;;;;;
1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL;<font> 0628;;;;N;;;;;
1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL;<font> 062C;;;;N;;;;;
@@ -26883,6 +29115,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F198;SQUARED SOS;So;0;L;;;;;N;;;;;
1F199;SQUARED UP WITH EXCLAMATION MARK;So;0;L;;;;;N;;;;;
1F19A;SQUARED VS;So;0;L;;;;;N;;;;;
+1F19B;SQUARED THREE D;So;0;L;;;;;N;;;;;
+1F19C;SQUARED SECOND SCREEN;So;0;L;;;;;N;;;;;
+1F19D;SQUARED TWO K;So;0;L;;;;;N;;;;;
+1F19E;SQUARED FOUR K;So;0;L;;;;;N;;;;;
+1F19F;SQUARED EIGHT K;So;0;L;;;;;N;;;;;
+1F1A0;SQUARED FIVE POINT ONE;So;0;L;;;;;N;;;;;
+1F1A1;SQUARED SEVEN POINT ONE;So;0;L;;;;;N;;;;;
+1F1A2;SQUARED TWENTY-TWO POINT TWO;So;0;L;;;;;N;;;;;
+1F1A3;SQUARED SIXTY P;So;0;L;;;;;N;;;;;
+1F1A4;SQUARED ONE HUNDRED TWENTY P;So;0;L;;;;;N;;;;;
+1F1A5;SQUARED LATIN SMALL LETTER D;So;0;L;;;;;N;;;;;
+1F1A6;SQUARED HC;So;0;L;;;;;N;;;;;
+1F1A7;SQUARED HDR;So;0;L;;;;;N;;;;;
+1F1A8;SQUARED HI-RES;So;0;L;;;;;N;;;;;
+1F1A9;SQUARED LOSSLESS;So;0;L;;;;;N;;;;;
+1F1AA;SQUARED SHV;So;0;L;;;;;N;;;;;
+1F1AB;SQUARED UHD;So;0;L;;;;;N;;;;;
+1F1AC;SQUARED VOD;So;0;L;;;;;N;;;;;
1F1E6;REGIONAL INDICATOR SYMBOL LETTER A;So;0;L;;;;;N;;;;;
1F1E7;REGIONAL INDICATOR SYMBOL LETTER B;So;0;L;;;;;N;;;;;
1F1E8;REGIONAL INDICATOR SYMBOL LETTER C;So;0;L;;;;;N;;;;;
@@ -26955,6 +29205,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F238;SQUARED CJK UNIFIED IDEOGRAPH-7533;So;0;L;<square> 7533;;;;N;;;;;
1F239;SQUARED CJK UNIFIED IDEOGRAPH-5272;So;0;L;<square> 5272;;;;N;;;;;
1F23A;SQUARED CJK UNIFIED IDEOGRAPH-55B6;So;0;L;<square> 55B6;;;;N;;;;;
+1F23B;SQUARED CJK UNIFIED IDEOGRAPH-914D;So;0;L;<square> 914D;;;;N;;;;;
1F240;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C;So;0;L;<compat> 3014 672C 3015;;;;N;;;;;
1F241;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09;So;0;L;<compat> 3014 4E09 3015;;;;N;;;;;
1F242;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C;So;0;L;<compat> 3014 4E8C 3015;;;;N;;;;;
@@ -26966,6 +29217,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F248;TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557;So;0;L;<compat> 3014 6557 3015;;;;N;;;;;
1F250;CIRCLED IDEOGRAPH ADVANTAGE;So;0;L;<circle> 5F97;;;;N;;;;;
1F251;CIRCLED IDEOGRAPH ACCEPT;So;0;L;<circle> 53EF;;;;N;;;;;
+1F260;ROUNDED SYMBOL FOR FU;So;0;ON;;;;;N;;;;;
+1F261;ROUNDED SYMBOL FOR LU;So;0;ON;;;;;N;;;;;
+1F262;ROUNDED SYMBOL FOR SHOU;So;0;ON;;;;;N;;;;;
+1F263;ROUNDED SYMBOL FOR XI;So;0;ON;;;;;N;;;;;
+1F264;ROUNDED SYMBOL FOR SHUANGXI;So;0;ON;;;;;N;;;;;
+1F265;ROUNDED SYMBOL FOR CAI;So;0;ON;;;;;N;;;;;
1F300;CYCLONE;So;0;ON;;;;;N;;;;;
1F301;FOGGY;So;0;ON;;;;;N;;;;;
1F302;CLOSED UMBRELLA;So;0;ON;;;;;N;;;;;
@@ -27600,6 +29857,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F577;SPIDER;So;0;ON;;;;;N;;;;;
1F578;SPIDER WEB;So;0;ON;;;;;N;;;;;
1F579;JOYSTICK;So;0;ON;;;;;N;;;;;
+1F57A;MAN DANCING;So;0;ON;;;;;N;;;;;
1F57B;LEFT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
1F57C;TELEPHONE RECEIVER WITH PAGE;So;0;ON;;;;;N;;;;;
1F57D;RIGHT HAND TELEPHONE RECEIVER;So;0;ON;;;;;N;;;;;
@@ -27641,6 +29899,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F5A1;SIDEWAYS BLACK DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
1F5A2;BLACK UP POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
1F5A3;BLACK DOWN POINTING BACKHAND INDEX;So;0;ON;;;;;N;;;;;
+1F5A4;BLACK HEART;So;0;ON;;;;;N;;;;;
1F5A5;DESKTOP COMPUTER;So;0;ON;;;;;N;;;;;
1F5A6;KEYBOARD AND MOUSE;So;0;ON;;;;;N;;;;;
1F5A7;THREE NETWORKED COMPUTERS;So;0;ON;;;;;N;;;;;
@@ -27941,6 +30200,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6CE;BELLHOP BELL;So;0;ON;;;;;N;;;;;
1F6CF;BED;So;0;ON;;;;;N;;;;;
1F6D0;PLACE OF WORSHIP;So;0;ON;;;;;N;;;;;
+1F6D1;OCTAGONAL SIGN;So;0;ON;;;;;N;;;;;
+1F6D2;SHOPPING TROLLEY;So;0;ON;;;;;N;;;;;
+1F6D3;STUPA;So;0;ON;;;;;N;;;;;
+1F6D4;PAGODA;So;0;ON;;;;;N;;;;;
1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;;
1F6E1;SHIELD;So;0;ON;;;;;N;;;;;
1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;;
@@ -27958,6 +30221,11 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F6F1;ONCOMING FIRE ENGINE;So;0;ON;;;;;N;;;;;
1F6F2;DIESEL LOCOMOTIVE;So;0;ON;;;;;N;;;;;
1F6F3;PASSENGER SHIP;So;0;ON;;;;;N;;;;;
+1F6F4;SCOOTER;So;0;ON;;;;;N;;;;;
+1F6F5;MOTOR SCOOTER;So;0;ON;;;;;N;;;;;
+1F6F6;CANOE;So;0;ON;;;;;N;;;;;
+1F6F7;SLED;So;0;ON;;;;;N;;;;;
+1F6F8;FLYING SAUCER;So;0;ON;;;;;N;;;;;
1F700;ALCHEMICAL SYMBOL FOR QUINTESSENCE;So;0;ON;;;;;N;;;;;
1F701;ALCHEMICAL SYMBOL FOR AIR;So;0;ON;;;;;N;;;;;
1F702;ALCHEMICAL SYMBOL FOR FIRE;So;0;ON;;;;;N;;;;;
@@ -28307,6 +30575,18 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F8AB;RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW;So;0;ON;;;;;N;;;;;
1F8AC;WHITE ARROW SHAFT WIDTH ONE;So;0;ON;;;;;N;;;;;
1F8AD;WHITE ARROW SHAFT WIDTH TWO THIRDS;So;0;ON;;;;;N;;;;;
+1F900;CIRCLED CROSS FORMEE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;
+1F901;CIRCLED CROSS FORMEE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+1F902;CIRCLED CROSS FORMEE;So;0;ON;;;;;N;;;;;
+1F903;LEFT HALF CIRCLE WITH FOUR DOTS;So;0;ON;;;;;N;;;;;
+1F904;LEFT HALF CIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;
+1F905;LEFT HALF CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+1F906;LEFT HALF CIRCLE WITH DOT;So;0;ON;;;;;N;;;;;
+1F907;LEFT HALF CIRCLE;So;0;ON;;;;;N;;;;;
+1F908;DOWNWARD FACING HOOK;So;0;ON;;;;;N;;;;;
+1F909;DOWNWARD FACING NOTCHED HOOK;So;0;ON;;;;;N;;;;;
+1F90A;DOWNWARD FACING HOOK WITH DOT;So;0;ON;;;;;N;;;;;
+1F90B;DOWNWARD FACING NOTCHED HOOK WITH DOT;So;0;ON;;;;;N;;;;;
1F910;ZIPPER-MOUTH FACE;So;0;ON;;;;;N;;;;;
1F911;MONEY-MOUTH FACE;So;0;ON;;;;;N;;;;;
1F912;FACE WITH THERMOMETER;So;0;ON;;;;;N;;;;;
@@ -28316,12 +30596,133 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F916;ROBOT FACE;So;0;ON;;;;;N;;;;;
1F917;HUGGING FACE;So;0;ON;;;;;N;;;;;
1F918;SIGN OF THE HORNS;So;0;ON;;;;;N;;;;;
+1F919;CALL ME HAND;So;0;ON;;;;;N;;;;;
+1F91A;RAISED BACK OF HAND;So;0;ON;;;;;N;;;;;
+1F91B;LEFT-FACING FIST;So;0;ON;;;;;N;;;;;
+1F91C;RIGHT-FACING FIST;So;0;ON;;;;;N;;;;;
+1F91D;HANDSHAKE;So;0;ON;;;;;N;;;;;
+1F91E;HAND WITH INDEX AND MIDDLE FINGERS CROSSED;So;0;ON;;;;;N;;;;;
+1F91F;I LOVE YOU HAND SIGN;So;0;ON;;;;;N;;;;;
+1F920;FACE WITH COWBOY HAT;So;0;ON;;;;;N;;;;;
+1F921;CLOWN FACE;So;0;ON;;;;;N;;;;;
+1F922;NAUSEATED FACE;So;0;ON;;;;;N;;;;;
+1F923;ROLLING ON THE FLOOR LAUGHING;So;0;ON;;;;;N;;;;;
+1F924;DROOLING FACE;So;0;ON;;;;;N;;;;;
+1F925;LYING FACE;So;0;ON;;;;;N;;;;;
+1F926;FACE PALM;So;0;ON;;;;;N;;;;;
+1F927;SNEEZING FACE;So;0;ON;;;;;N;;;;;
+1F928;FACE WITH ONE EYEBROW RAISED;So;0;ON;;;;;N;;;;;
+1F929;GRINNING FACE WITH STAR EYES;So;0;ON;;;;;N;;;;;
+1F92A;GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE;So;0;ON;;;;;N;;;;;
+1F92B;FACE WITH FINGER COVERING CLOSED LIPS;So;0;ON;;;;;N;;;;;
+1F92C;SERIOUS FACE WITH SYMBOLS COVERING MOUTH;So;0;ON;;;;;N;;;;;
+1F92D;SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH;So;0;ON;;;;;N;;;;;
+1F92E;FACE WITH OPEN MOUTH VOMITING;So;0;ON;;;;;N;;;;;
+1F92F;SHOCKED FACE WITH EXPLODING HEAD;So;0;ON;;;;;N;;;;;
+1F930;PREGNANT WOMAN;So;0;ON;;;;;N;;;;;
+1F931;BREAST-FEEDING;So;0;ON;;;;;N;;;;;
+1F932;PALMS UP TOGETHER;So;0;ON;;;;;N;;;;;
+1F933;SELFIE;So;0;ON;;;;;N;;;;;
+1F934;PRINCE;So;0;ON;;;;;N;;;;;
+1F935;MAN IN TUXEDO;So;0;ON;;;;;N;;;;;
+1F936;MOTHER CHRISTMAS;So;0;ON;;;;;N;;;;;
+1F937;SHRUG;So;0;ON;;;;;N;;;;;
+1F938;PERSON DOING CARTWHEEL;So;0;ON;;;;;N;;;;;
+1F939;JUGGLING;So;0;ON;;;;;N;;;;;
+1F93A;FENCER;So;0;ON;;;;;N;;;;;
+1F93B;MODERN PENTATHLON;So;0;ON;;;;;N;;;;;
+1F93C;WRESTLERS;So;0;ON;;;;;N;;;;;
+1F93D;WATER POLO;So;0;ON;;;;;N;;;;;
+1F93E;HANDBALL;So;0;ON;;;;;N;;;;;
+1F940;WILTED FLOWER;So;0;ON;;;;;N;;;;;
+1F941;DRUM WITH DRUMSTICKS;So;0;ON;;;;;N;;;;;
+1F942;CLINKING GLASSES;So;0;ON;;;;;N;;;;;
+1F943;TUMBLER GLASS;So;0;ON;;;;;N;;;;;
+1F944;SPOON;So;0;ON;;;;;N;;;;;
+1F945;GOAL NET;So;0;ON;;;;;N;;;;;
+1F946;RIFLE;So;0;ON;;;;;N;;;;;
+1F947;FIRST PLACE MEDAL;So;0;ON;;;;;N;;;;;
+1F948;SECOND PLACE MEDAL;So;0;ON;;;;;N;;;;;
+1F949;THIRD PLACE MEDAL;So;0;ON;;;;;N;;;;;
+1F94A;BOXING GLOVE;So;0;ON;;;;;N;;;;;
+1F94B;MARTIAL ARTS UNIFORM;So;0;ON;;;;;N;;;;;
+1F94C;CURLING STONE;So;0;ON;;;;;N;;;;;
+1F950;CROISSANT;So;0;ON;;;;;N;;;;;
+1F951;AVOCADO;So;0;ON;;;;;N;;;;;
+1F952;CUCUMBER;So;0;ON;;;;;N;;;;;
+1F953;BACON;So;0;ON;;;;;N;;;;;
+1F954;POTATO;So;0;ON;;;;;N;;;;;
+1F955;CARROT;So;0;ON;;;;;N;;;;;
+1F956;BAGUETTE BREAD;So;0;ON;;;;;N;;;;;
+1F957;GREEN SALAD;So;0;ON;;;;;N;;;;;
+1F958;SHALLOW PAN OF FOOD;So;0;ON;;;;;N;;;;;
+1F959;STUFFED FLATBREAD;So;0;ON;;;;;N;;;;;
+1F95A;EGG;So;0;ON;;;;;N;;;;;
+1F95B;GLASS OF MILK;So;0;ON;;;;;N;;;;;
+1F95C;PEANUTS;So;0;ON;;;;;N;;;;;
+1F95D;KIWIFRUIT;So;0;ON;;;;;N;;;;;
+1F95E;PANCAKES;So;0;ON;;;;;N;;;;;
+1F95F;DUMPLING;So;0;ON;;;;;N;;;;;
+1F960;FORTUNE COOKIE;So;0;ON;;;;;N;;;;;
+1F961;TAKEOUT BOX;So;0;ON;;;;;N;;;;;
+1F962;CHOPSTICKS;So;0;ON;;;;;N;;;;;
+1F963;BOWL WITH SPOON;So;0;ON;;;;;N;;;;;
+1F964;CUP WITH STRAW;So;0;ON;;;;;N;;;;;
+1F965;COCONUT;So;0;ON;;;;;N;;;;;
+1F966;BROCCOLI;So;0;ON;;;;;N;;;;;
+1F967;PIE;So;0;ON;;;;;N;;;;;
+1F968;PRETZEL;So;0;ON;;;;;N;;;;;
+1F969;CUT OF MEAT;So;0;ON;;;;;N;;;;;
+1F96A;SANDWICH;So;0;ON;;;;;N;;;;;
+1F96B;CANNED FOOD;So;0;ON;;;;;N;;;;;
1F980;CRAB;So;0;ON;;;;;N;;;;;
1F981;LION FACE;So;0;ON;;;;;N;;;;;
1F982;SCORPION;So;0;ON;;;;;N;;;;;
1F983;TURKEY;So;0;ON;;;;;N;;;;;
1F984;UNICORN FACE;So;0;ON;;;;;N;;;;;
+1F985;EAGLE;So;0;ON;;;;;N;;;;;
+1F986;DUCK;So;0;ON;;;;;N;;;;;
+1F987;BAT;So;0;ON;;;;;N;;;;;
+1F988;SHARK;So;0;ON;;;;;N;;;;;
+1F989;OWL;So;0;ON;;;;;N;;;;;
+1F98A;FOX FACE;So;0;ON;;;;;N;;;;;
+1F98B;BUTTERFLY;So;0;ON;;;;;N;;;;;
+1F98C;DEER;So;0;ON;;;;;N;;;;;
+1F98D;GORILLA;So;0;ON;;;;;N;;;;;
+1F98E;LIZARD;So;0;ON;;;;;N;;;;;
+1F98F;RHINOCEROS;So;0;ON;;;;;N;;;;;
+1F990;SHRIMP;So;0;ON;;;;;N;;;;;
+1F991;SQUID;So;0;ON;;;;;N;;;;;
+1F992;GIRAFFE FACE;So;0;ON;;;;;N;;;;;
+1F993;ZEBRA FACE;So;0;ON;;;;;N;;;;;
+1F994;HEDGEHOG;So;0;ON;;;;;N;;;;;
+1F995;SAUROPOD;So;0;ON;;;;;N;;;;;
+1F996;T-REX;So;0;ON;;;;;N;;;;;
+1F997;CRICKET;So;0;ON;;;;;N;;;;;
1F9C0;CHEESE WEDGE;So;0;ON;;;;;N;;;;;
+1F9D0;FACE WITH MONOCLE;So;0;ON;;;;;N;;;;;
+1F9D1;ADULT;So;0;ON;;;;;N;;;;;
+1F9D2;CHILD;So;0;ON;;;;;N;;;;;
+1F9D3;OLDER ADULT;So;0;ON;;;;;N;;;;;
+1F9D4;BEARDED PERSON;So;0;ON;;;;;N;;;;;
+1F9D5;PERSON WITH HEADSCARF;So;0;ON;;;;;N;;;;;
+1F9D6;PERSON IN STEAMY ROOM;So;0;ON;;;;;N;;;;;
+1F9D7;PERSON CLIMBING;So;0;ON;;;;;N;;;;;
+1F9D8;PERSON IN LOTUS POSITION;So;0;ON;;;;;N;;;;;
+1F9D9;MAGE;So;0;ON;;;;;N;;;;;
+1F9DA;FAIRY;So;0;ON;;;;;N;;;;;
+1F9DB;VAMPIRE;So;0;ON;;;;;N;;;;;
+1F9DC;MERPERSON;So;0;ON;;;;;N;;;;;
+1F9DD;ELF;So;0;ON;;;;;N;;;;;
+1F9DE;GENIE;So;0;ON;;;;;N;;;;;
+1F9DF;ZOMBIE;So;0;ON;;;;;N;;;;;
+1F9E0;BRAIN;So;0;ON;;;;;N;;;;;
+1F9E1;ORANGE HEART;So;0;ON;;;;;N;;;;;
+1F9E2;BILLED CAP;So;0;ON;;;;;N;;;;;
+1F9E3;SCARF;So;0;ON;;;;;N;;;;;
+1F9E4;GLOVES;So;0;ON;;;;;N;;;;;
+1F9E5;COAT;So;0;ON;;;;;N;;;;;
+1F9E6;SOCKS;So;0;ON;;;;;N;;;;;
20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
2A700;<CJK Ideograph Extension C, First>;Lo;0;L;;;;;N;;;;;
@@ -28330,6 +30731,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
2B81D;<CJK Ideograph Extension D, Last>;Lo;0;L;;;;;N;;;;;
2B820;<CJK Ideograph Extension E, First>;Lo;0;L;;;;;N;;;;;
2CEA1;<CJK Ideograph Extension E, Last>;Lo;0;L;;;;;N;;;;;
+2CEB0;<CJK Ideograph Extension F, First>;Lo;0;L;;;;;N;;;;;
+2EBE0;<CJK Ideograph Extension F, Last>;Lo;0;L;;;;;N;;;;;
2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
diff --git a/util/unicode/data/WordBreakProperty.txt b/util/unicode/data/WordBreakProperty.txt
index dc8e82020f..4c5440a894 100644
--- a/util/unicode/data/WordBreakProperty.txt
+++ b/util/unicode/data/WordBreakProperty.txt
@@ -1,10 +1,11 @@
-# WordBreakProperty-8.0.0.txt
-# Date: 2015-02-14, 10:26:15 GMT [MD]
+# WordBreakProperty-10.0.0.txt
+# Date: 2017-03-10, 02:00:42 GMT
+# © 2017 Unicode®, Inc.
+# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# Copyright (c) 1991-2015 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see http://www.unicode.org/reports/tr44/
# ================================================
@@ -89,6 +90,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
+08D4..08E1 ; Extend # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA
0903 ; Extend # Mc DEVANAGARI SIGN VISARGA
093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE
@@ -131,6 +133,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
0ACB..0ACC ; Extend # Mc [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
0ACD ; Extend # Mn GUJARATI SIGN VIRAMA
0AE2..0AE3 ; Extend # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
+0AFA..0AFF ; Extend # Mn [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
0B01 ; Extend # Mn ORIYA SIGN CANDRABINDU
0B02..0B03 ; Extend # Mc [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
0B3C ; Extend # Mn ORIYA SIGN NUKTA
@@ -172,8 +175,9 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
0CCC..0CCD ; Extend # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
0CD5..0CD6 ; Extend # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
0CE2..0CE3 ; Extend # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
-0D01 ; Extend # Mn MALAYALAM SIGN CANDRABINDU
+0D00..0D01 ; Extend # Mn [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
0D02..0D03 ; Extend # Mc [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
+0D3B..0D3C ; Extend # Mn [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
0D3E..0D40 ; Extend # Mc [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
0D41..0D44 ; Extend # Mn [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
0D46..0D48 ; Extend # Mc [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
@@ -243,6 +247,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
17DD ; Extend # Mn KHMER SIGN ATTHACAN
180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
+1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA
1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
1923..1926 ; Extend # Mc [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
@@ -307,10 +312,11 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW
1CED ; Extend # Mn VEDIC SIGN TIRYAK
1CF2..1CF3 ; Extend # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE
+1CF7 ; Extend # Mc VEDIC SIGN ATIKRAMA
1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
-1DC0..1DF5 ; Extend # Mn [54] COMBINING DOTTED GRAVE ACCENT..COMBINING UP TACK ABOVE
-1DFC..1DFF ; Extend # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
-200C..200D ; Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
+1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
+1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+200C ; Extend # Cf ZERO WIDTH NON-JOINER
20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
20E1 ; Extend # Mn COMBINING LEFT RIGHT ARROW ABOVE
@@ -335,7 +341,7 @@ A825..A826 ; Extend # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL
A827 ; Extend # Mc SYLOTI NAGRI VOWEL SIGN OO
A880..A881 ; Extend # Mc [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
A8B4..A8C3 ; Extend # Mc [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
-A8C4 ; Extend # Mn SAURASHTRA SIGN VIRAMA
+A8C4..A8C5 ; Extend # Mn [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
A8E0..A8F1 ; Extend # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A926..A92D ; Extend # Mn [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
A947..A951 ; Extend # Mn [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
@@ -417,6 +423,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11234 ; Extend # Mn KHOJKI SIGN ANUSVARA
11235 ; Extend # Mc KHOJKI SIGN VIRAMA
11236..11237 ; Extend # Mn [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
+1123E ; Extend # Mn KHOJKI SIGN SUKUN
112DF ; Extend # Mn KHUDAWADI SIGN ANUSVARA
112E0..112E2 ; Extend # Mc [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
112E3..112EA ; Extend # Mn [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
@@ -432,6 +439,12 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11362..11363 ; Extend # Mc [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
11366..1136C ; Extend # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
11370..11374 ; Extend # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
+11435..11437 ; Extend # Mc [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
+11438..1143F ; Extend # Mn [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
+11440..11441 ; Extend # Mc [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
+11442..11444 ; Extend # Mn [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
+11445 ; Extend # Mc NEWA SIGN VISARGA
+11446 ; Extend # Mn NEWA SIGN NUKTA
114B0..114B2 ; Extend # Mc [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
114B3..114B8 ; Extend # Mn [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
114B9 ; Extend # Mc TIRHUTA VOWEL SIGN E
@@ -465,6 +478,36 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
11722..11725 ; Extend # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
11726 ; Extend # Mc AHOM VOWEL SIGN E
11727..1172B ; Extend # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
+11A01..11A06 ; Extend # Mn [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
+11A07..11A08 ; Extend # Mc [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
+11A09..11A0A ; Extend # Mn [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
+11A33..11A38 ; Extend # Mn [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
+11A39 ; Extend # Mc ZANABAZAR SQUARE SIGN VISARGA
+11A3B..11A3E ; Extend # Mn [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
+11A47 ; Extend # Mn ZANABAZAR SQUARE SUBJOINER
+11A51..11A56 ; Extend # Mn [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
+11A57..11A58 ; Extend # Mc [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
+11A59..11A5B ; Extend # Mn [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
+11A8A..11A96 ; Extend # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
+11A97 ; Extend # Mc SOYOMBO SIGN VISARGA
+11A98..11A99 ; Extend # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
+11C2F ; Extend # Mc BHAIKSUKI VOWEL SIGN AA
+11C30..11C36 ; Extend # Mn [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
+11C38..11C3D ; Extend # Mn [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
+11C3E ; Extend # Mc BHAIKSUKI SIGN VISARGA
+11C3F ; Extend # Mn BHAIKSUKI SIGN VIRAMA
+11C92..11CA7 ; Extend # Mn [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
+11CA9 ; Extend # Mc MARCHEN SUBJOINED LETTER YA
+11CAA..11CB0 ; Extend # Mn [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
+11CB1 ; Extend # Mc MARCHEN VOWEL SIGN I
+11CB2..11CB3 ; Extend # Mn [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
+11CB4 ; Extend # Mc MARCHEN VOWEL SIGN O
+11CB5..11CB6 ; Extend # Mn [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
+11D31..11D36 ; Extend # Mn [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
+11D3A ; Extend # Mn MASARAM GONDI VOWEL SIGN E
+11D3C..11D3D ; Extend # Mn [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
+11D3F..11D45 ; Extend # Mn [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
+11D47 ; Extend # Mn MASARAM GONDI RA-KARA
16AF0..16AF4 ; Extend # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
16B30..16B36 ; Extend # Mn [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
16F51..16F7E ; Extend # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
@@ -483,10 +526,17 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT
1DA84 ; Extend # Mn SIGNWRITING LOCATION HEAD NECK
1DA9B..1DA9F ; Extend # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
1DAA1..1DAAF ; Extend # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
+1E000..1E006 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
+1E008..1E018 ; Extend # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
+1E01B..1E021 ; Extend # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
+1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
+1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
+1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
+E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG
E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 1967
+# Total code points: 2276
# ================================================
@@ -501,6 +551,7 @@ E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
061C ; Format # Cf ARABIC LETTER MARK
06DD ; Format # Cf ARABIC END OF AYAH
070F ; Format # Cf SYRIAC ABBREVIATION MARK
+08E2 ; Format # Cf ARABIC DISPUTED END OF AYAH
180E ; Format # Cf MONGOLIAN VOWEL SEPARATOR
200E..200F ; Format # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
202A..202E ; Format # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
@@ -512,9 +563,8 @@ FFF9..FFFB ; Format # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANN
1BCA0..1BCA3 ; Format # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
1D173..1D17A ; Format # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
E0001 ; Format # Cf LANGUAGE TAG
-E0020..E007F ; Format # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 147
+# Total code points: 52
# ================================================
@@ -551,10 +601,15 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
0294 ; ALetter # Lo LATIN LETTER GLOTTAL STOP
0295..02AF ; ALetter # L& [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
02B0..02C1 ; ALetter # Lm [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C2..02C5 ; ALetter # Sk [4] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER DOWN ARROWHEAD
02C6..02D1 ; ALetter # Lm [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02D2..02D7 ; ALetter # Sk [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
+02DE..02DF ; ALetter # Sk [2] MODIFIER LETTER RHOTIC HOOK..MODIFIER LETTER CROSS ACCENT
02E0..02E4 ; ALetter # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
02EC ; ALetter # Lm MODIFIER LETTER VOICING
+02ED ; ALetter # Sk MODIFIER LETTER UNASPIRATED
02EE ; ALetter # Lm MODIFIER LETTER DOUBLE APOSTROPHE
+02EF..02FF ; ALetter # Sk [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
0370..0373 ; ALetter # L& [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
0374 ; ALetter # Lm GREEK NUMERAL SIGN
0376..0377 ; ALetter # L& [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
@@ -594,7 +649,9 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
0824 ; ALetter # Lm SAMARITAN MODIFIER LETTER SHORT A
0828 ; ALetter # Lm SAMARITAN MODIFIER LETTER I
0840..0858 ; ALetter # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0860..086A ; ALetter # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
08A0..08B4 ; ALetter # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
+08B6..08BD ; ALetter # Lo [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
0904..0939 ; ALetter # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
093D ; ALetter # Lo DEVANAGARI SIGN AVAGRAHA
0950 ; ALetter # Lo DEVANAGARI OM
@@ -612,6 +669,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
09DC..09DD ; ALetter # Lo [2] BENGALI LETTER RRA..BENGALI LETTER RHA
09DF..09E1 ; ALetter # Lo [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
09F0..09F1 ; ALetter # Lo [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+09FC ; ALetter # Lo BENGALI LETTER VEDIC ANUSVARA
0A05..0A0A ; ALetter # Lo [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
0A0F..0A10 ; ALetter # Lo [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
0A13..0A28 ; ALetter # Lo [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
@@ -660,6 +718,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
0C3D ; ALetter # Lo TELUGU SIGN AVAGRAHA
0C58..0C5A ; ALetter # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
0C60..0C61 ; ALetter # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
+0C80 ; ALetter # Lo KANNADA SIGN SPACING CANDRABINDU
0C85..0C8C ; ALetter # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
0C8E..0C90 ; ALetter # Lo [3] KANNADA LETTER E..KANNADA LETTER AI
0C92..0CA8 ; ALetter # Lo [23] KANNADA LETTER O..KANNADA LETTER NA
@@ -674,6 +733,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
0D12..0D3A ; ALetter # Lo [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
0D3D ; ALetter # Lo MALAYALAM SIGN AVAGRAHA
0D4E ; ALetter # Lo MALAYALAM LETTER DOT REPH
+0D54..0D56 ; ALetter # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
0D5F..0D61 ; ALetter # Lo [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
0D7A..0D7F ; ALetter # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
0D85..0D96 ; ALetter # Lo [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
@@ -724,7 +784,8 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
1820..1842 ; ALetter # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
1843 ; ALetter # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
1844..1877 ; ALetter # Lo [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
-1880..18A8 ; ALetter # Lo [41] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER MANCHU ALI GALI BHA
+1880..1884 ; ALetter # Lo [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
+1887..18A8 ; ALetter # Lo [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
18AA ; ALetter # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA
18B0..18F5 ; ALetter # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
1900..191E ; ALetter # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
@@ -738,6 +799,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
1C4D..1C4F ; ALetter # Lo [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
1C5A..1C77 ; ALetter # Lo [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
1C78..1C7D ; ALetter # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
+1C80..1C88 ; ALetter # L& [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
1CE9..1CEC ; ALetter # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
1CEE..1CF1 ; ALetter # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
1CF5..1CF6 ; ALetter # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
@@ -813,7 +875,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
3005 ; ALetter # Lm IDEOGRAPHIC ITERATION MARK
303B ; ALetter # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
303C ; ALetter # Lo MASU MARK
-3105..312D ; ALetter # Lo [41] BOPOMOFO LETTER B..BOPOMOFO LETTER IH
+3105..312E ; ALetter # Lo [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
3131..318E ; ALetter # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
31A0..31BA ; ALetter # Lo [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
A000..A014 ; ALetter # Lo [21] YI SYLLABLE IT..YI SYLLABLE E
@@ -833,13 +895,15 @@ A69C..A69D ; ALetter # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER
A6A0..A6E5 ; ALetter # Lo [70] BAMUM LETTER A..BAMUM LETTER KI
A6E6..A6EF ; ALetter # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
A717..A71F ; ALetter # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
+A720..A721 ; ALetter # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
A722..A76F ; ALetter # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
A770 ; ALetter # Lm MODIFIER LETTER US
A771..A787 ; ALetter # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A788 ; ALetter # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A789..A78A ; ALetter # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
A78B..A78E ; ALetter # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
A78F ; ALetter # Lo LATIN LETTER SINOLOGICAL DOT
-A790..A7AD ; ALetter # L& [30] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER L WITH BELT
+A790..A7AE ; ALetter # L& [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I
A7B0..A7B7 ; ALetter # L& [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
A7F7 ; ALetter # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I
A7F8..A7F9 ; ALetter # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
@@ -870,6 +934,7 @@ AB11..AB16 ; ALetter # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
AB20..AB26 ; ALetter # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
AB28..AB2E ; ALetter # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
AB30..AB5A ; ALetter # L& [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
+AB5B ; ALetter # Sk MODIFIER BREVE WITH INVERTED BREVE
AB5C..AB5F ; ALetter # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
AB60..AB65 ; ALetter # L& [6] LATIN SMALL LETTER SAKHA YAT..GREEK LETTER SMALL CAPITAL OMEGA
AB70..ABBF ; ALetter # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
@@ -904,7 +969,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
10280..1029C ; ALetter # Lo [29] LYCIAN LETTER A..LYCIAN LETTER X
102A0..102D0 ; ALetter # Lo [49] CARIAN LETTER A..CARIAN LETTER UUU3
10300..1031F ; ALetter # Lo [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
-10330..10340 ; ALetter # Lo [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
+1032D..10340 ; ALetter # Lo [20] OLD ITALIC LETTER YE..GOTHIC LETTER PAIRTHRA
10341 ; ALetter # Nl GOTHIC LETTER NINETY
10342..10349 ; ALetter # Lo [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
1034A ; ALetter # Nl GOTHIC LETTER NINE HUNDRED
@@ -915,6 +980,8 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
103D1..103D5 ; ALetter # Nl [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
10400..1044F ; ALetter # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
10450..1049D ; ALetter # Lo [78] SHAVIAN LETTER PEEP..OSMANYA LETTER OO
+104B0..104D3 ; ALetter # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
+104D8..104FB ; ALetter # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
10500..10527 ; ALetter # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE
10530..10563 ; ALetter # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
10600..10736 ; ALetter # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
@@ -976,6 +1043,8 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1133D ; ALetter # Lo GRANTHA SIGN AVAGRAHA
11350 ; ALetter # Lo GRANTHA OM
1135D..11361 ; ALetter # Lo [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
+11400..11434 ; ALetter # Lo [53] NEWA LETTER A..NEWA LETTER HA
+11447..1144A ; ALetter # Lo [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
11480..114AF ; ALetter # Lo [48] TIRHUTA ANJI..TIRHUTA LETTER HA
114C4..114C5 ; ALetter # Lo [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
114C7 ; ALetter # Lo TIRHUTA OM
@@ -986,7 +1055,21 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
11680..116AA ; ALetter # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
118A0..118DF ; ALetter # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
118FF ; ALetter # Lo WARANG CITI OM
+11A00 ; ALetter # Lo ZANABAZAR SQUARE LETTER A
+11A0B..11A32 ; ALetter # Lo [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
+11A3A ; ALetter # Lo ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
+11A50 ; ALetter # Lo SOYOMBO LETTER A
+11A5C..11A83 ; ALetter # Lo [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA
+11A86..11A89 ; ALetter # Lo [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA
11AC0..11AF8 ; ALetter # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
+11C00..11C08 ; ALetter # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
+11C0A..11C2E ; ALetter # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
+11C40 ; ALetter # Lo BHAIKSUKI SIGN AVAGRAHA
+11C72..11C8F ; ALetter # Lo [30] MARCHEN LETTER KA..MARCHEN LETTER A
+11D00..11D06 ; ALetter # Lo [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
+11D08..11D09 ; ALetter # Lo [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
+11D0B..11D30 ; ALetter # Lo [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
+11D46 ; ALetter # Lo MASARAM GONDI REPHA
12000..12399 ; ALetter # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
12400..1246E ; ALetter # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
12480..12543 ; ALetter # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
@@ -1002,6 +1085,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
16F00..16F44 ; ALetter # Lo [69] MIAO LETTER PA..MIAO LETTER HHA
16F50 ; ALetter # Lo MIAO LETTER NASALIZATION
16F93..16F9F ; ALetter # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+16FE0..16FE1 ; ALetter # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
1BC00..1BC6A ; ALetter # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
1BC70..1BC7C ; ALetter # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
1BC80..1BC88 ; ALetter # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
@@ -1037,6 +1121,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1D7AA..1D7C2 ; ALetter # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
1D7C4..1D7CB ; ALetter # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
1E800..1E8C4 ; ALetter # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
+1E900..1E943 ; ALetter # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
1EE00..1EE03 ; ALetter # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
1EE05..1EE1F ; ALetter # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
1EE21..1EE22 ; ALetter # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
@@ -1074,13 +1159,12 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL
1F150..1F169 ; ALetter # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
1F170..1F189 ; ALetter # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z
-# Total code points: 27697
+# Total code points: 28179
# ================================================
003A ; MidLetter # Po COLON
00B7 ; MidLetter # Po MIDDLE DOT
-02D7 ; MidLetter # Sk MODIFIER LETTER MINUS SIGN
0387 ; MidLetter # Po GREEK ANO TELEIA
05F4 ; MidLetter # Po HEBREW PUNCTUATION GERSHAYIM
2027 ; MidLetter # Po HYPHENATION POINT
@@ -1088,7 +1172,7 @@ FE13 ; MidLetter # Po PRESENTATION FORM FOR VERTICAL COLON
FE55 ; MidLetter # Po SMALL COLON
FF1A ; MidLetter # Po FULLWIDTH COLON
-# Total code points: 9
+# Total code points: 8
# ================================================
@@ -1166,26 +1250,110 @@ ABF0..ABF9 ; Numeric # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT N
11136..1113F ; Numeric # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
111D0..111D9 ; Numeric # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
112F0..112F9 ; Numeric # Nd [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
+11450..11459 ; Numeric # Nd [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
114D0..114D9 ; Numeric # Nd [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
11650..11659 ; Numeric # Nd [10] MODI DIGIT ZERO..MODI DIGIT NINE
116C0..116C9 ; Numeric # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
11730..11739 ; Numeric # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
118E0..118E9 ; Numeric # Nd [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
+11C50..11C59 ; Numeric # Nd [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
+11D50..11D59 ; Numeric # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
16A60..16A69 ; Numeric # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE
16B50..16B59 ; Numeric # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
1D7CE..1D7FF ; Numeric # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1E950..1E959 ; Numeric # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
-# Total code points: 541
+# Total code points: 581
# ================================================
005F ; ExtendNumLet # Pc LOW LINE
+202F ; ExtendNumLet # Zs NARROW NO-BREAK SPACE
203F..2040 ; ExtendNumLet # Pc [2] UNDERTIE..CHARACTER TIE
2054 ; ExtendNumLet # Pc INVERTED UNDERTIE
FE33..FE34 ; ExtendNumLet # Pc [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
FE4D..FE4F ; ExtendNumLet # Pc [3] DASHED LOW LINE..WAVY LOW LINE
FF3F ; ExtendNumLet # Pc FULLWIDTH LOW LINE
-# Total code points: 10
+# Total code points: 11
+
+# ================================================
+
+261D ; E_Base # So WHITE UP POINTING INDEX
+26F9 ; E_Base # So PERSON WITH BALL
+270A..270D ; E_Base # So [4] RAISED FIST..WRITING HAND
+1F385 ; E_Base # So FATHER CHRISTMAS
+1F3C2..1F3C4 ; E_Base # So [3] SNOWBOARDER..SURFER
+1F3C7 ; E_Base # So HORSE RACING
+1F3CA..1F3CC ; E_Base # So [3] SWIMMER..GOLFER
+1F442..1F443 ; E_Base # So [2] EAR..NOSE
+1F446..1F450 ; E_Base # So [11] WHITE UP POINTING BACKHAND INDEX..OPEN HANDS SIGN
+1F46E ; E_Base # So POLICE OFFICER
+1F470..1F478 ; E_Base # So [9] BRIDE WITH VEIL..PRINCESS
+1F47C ; E_Base # So BABY ANGEL
+1F481..1F483 ; E_Base # So [3] INFORMATION DESK PERSON..DANCER
+1F485..1F487 ; E_Base # So [3] NAIL POLISH..HAIRCUT
+1F4AA ; E_Base # So FLEXED BICEPS
+1F574..1F575 ; E_Base # So [2] MAN IN BUSINESS SUIT LEVITATING..SLEUTH OR SPY
+1F57A ; E_Base # So MAN DANCING
+1F590 ; E_Base # So RAISED HAND WITH FINGERS SPLAYED
+1F595..1F596 ; E_Base # So [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+1F645..1F647 ; E_Base # So [3] FACE WITH NO GOOD GESTURE..PERSON BOWING DEEPLY
+1F64B..1F64F ; E_Base # So [5] HAPPY PERSON RAISING ONE HAND..PERSON WITH FOLDED HANDS
+1F6A3 ; E_Base # So ROWBOAT
+1F6B4..1F6B6 ; E_Base # So [3] BICYCLIST..PEDESTRIAN
+1F6C0 ; E_Base # So BATH
+1F6CC ; E_Base # So SLEEPING ACCOMMODATION
+1F918..1F91C ; E_Base # So [5] SIGN OF THE HORNS..RIGHT-FACING FIST
+1F91E..1F91F ; E_Base # So [2] HAND WITH INDEX AND MIDDLE FINGERS CROSSED..I LOVE YOU HAND SIGN
+1F926 ; E_Base # So FACE PALM
+1F930..1F939 ; E_Base # So [10] PREGNANT WOMAN..JUGGLING
+1F93D..1F93E ; E_Base # So [2] WATER POLO..HANDBALL
+1F9D1..1F9DD ; E_Base # So [13] ADULT..ELF
+
+# Total code points: 98
+
+# ================================================
+
+1F3FB..1F3FF ; E_Modifier # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
+
+# Total code points: 5
+
+# ================================================
+
+200D ; ZWJ # Cf ZERO WIDTH JOINER
+
+# Total code points: 1
+
+# ================================================
+
+2640 ; Glue_After_Zwj # So FEMALE SIGN
+2642 ; Glue_After_Zwj # So MALE SIGN
+2695..2696 ; Glue_After_Zwj # So [2] STAFF OF AESCULAPIUS..SCALES
+2708 ; Glue_After_Zwj # So AIRPLANE
+2764 ; Glue_After_Zwj # So HEAVY BLACK HEART
+1F308 ; Glue_After_Zwj # So RAINBOW
+1F33E ; Glue_After_Zwj # So EAR OF RICE
+1F373 ; Glue_After_Zwj # So COOKING
+1F393 ; Glue_After_Zwj # So GRADUATION CAP
+1F3A4 ; Glue_After_Zwj # So MICROPHONE
+1F3A8 ; Glue_After_Zwj # So ARTIST PALETTE
+1F3EB ; Glue_After_Zwj # So SCHOOL
+1F3ED ; Glue_After_Zwj # So FACTORY
+1F48B ; Glue_After_Zwj # So KISS MARK
+1F4BB..1F4BC ; Glue_After_Zwj # So [2] PERSONAL COMPUTER..BRIEFCASE
+1F527 ; Glue_After_Zwj # So WRENCH
+1F52C ; Glue_After_Zwj # So MICROSCOPE
+1F5E8 ; Glue_After_Zwj # So LEFT SPEECH BUBBLE
+1F680 ; Glue_After_Zwj # So ROCKET
+1F692 ; Glue_After_Zwj # So FIRE ENGINE
+
+# Total code points: 22
+
+# ================================================
+
+1F466..1F469 ; E_Base_GAZ # So [4] BOY..WOMAN
+
+# Total code points: 4
# EOF
diff --git a/util/unicode/main.cpp b/util/unicode/main.cpp
index fe6d4fbca1..0f3c28137d 100644
--- a/util/unicode/main.cpp
+++ b/util/unicode/main.cpp
@@ -38,8 +38,8 @@
#include <private/qunicodetables_p.h>
#endif
-#define DATA_VERSION_S "8.0"
-#define DATA_VERSION_STR "QChar::Unicode_8_0"
+#define DATA_VERSION_S "10.0"
+#define DATA_VERSION_STR "QChar::Unicode_10_0"
static QHash<QByteArray, QChar::UnicodeVersion> age_map;
@@ -67,6 +67,8 @@ static void initAgeMap()
{ QChar::Unicode_6_3, "6.3" },
{ QChar::Unicode_7_0, "7.0" },
{ QChar::Unicode_8_0, "8.0" },
+ { QChar::Unicode_9_0, "9.0" },
+ { QChar::Unicode_10_0, "10.0" },
{ QChar::Unicode_Unassigned, 0 }
};
AgeMap *d = ageMap;
@@ -272,11 +274,12 @@ static void initJoiningMap()
static const char *grapheme_break_class_string =
"enum GraphemeBreakClass {\n"
- " GraphemeBreak_Other,\n"
+ " GraphemeBreak_Any,\n"
" GraphemeBreak_CR,\n"
" GraphemeBreak_LF,\n"
" GraphemeBreak_Control,\n"
" GraphemeBreak_Extend,\n"
+ " GraphemeBreak_ZWJ,\n"
" GraphemeBreak_RegionalIndicator,\n"
" GraphemeBreak_Prepend,\n"
" GraphemeBreak_SpacingMark,\n"
@@ -284,15 +287,21 @@ static const char *grapheme_break_class_string =
" GraphemeBreak_V,\n"
" GraphemeBreak_T,\n"
" GraphemeBreak_LV,\n"
- " GraphemeBreak_LVT\n"
+ " GraphemeBreak_LVT,\n"
+ " Graphemebreak_E_Base,\n"
+ " Graphemebreak_E_Modifier,\n"
+ " Graphemebreak_Glue_After_Zwj,\n"
+ " Graphemebreak_E_Base_GAZ,\n"
+ " NumGraphemeBreakClasses,\n"
"};\n\n";
enum GraphemeBreakClass {
- GraphemeBreak_Other,
+ GraphemeBreak_Any,
GraphemeBreak_CR,
GraphemeBreak_LF,
GraphemeBreak_Control,
GraphemeBreak_Extend,
+ GraphemeBreak_ZWJ,
GraphemeBreak_RegionalIndicator,
GraphemeBreak_Prepend,
GraphemeBreak_SpacingMark,
@@ -300,9 +309,13 @@ enum GraphemeBreakClass {
GraphemeBreak_V,
GraphemeBreak_T,
GraphemeBreak_LV,
- GraphemeBreak_LVT
+ GraphemeBreak_LVT,
+ Graphemebreak_E_Base,
+ Graphemebreak_E_Modifier,
+ Graphemebreak_Glue_After_Zwj,
+ Graphemebreak_E_Base_GAZ,
- , GraphemeBreak_Unassigned
+ GraphemeBreak_Unassigned
};
static QHash<QByteArray, GraphemeBreakClass> grapheme_break_map;
@@ -313,11 +326,12 @@ static void initGraphemeBreak()
GraphemeBreakClass brk;
const char *name;
} breaks[] = {
- { GraphemeBreak_Other, "Other" },
+ { GraphemeBreak_Any, "Any" },
{ GraphemeBreak_CR, "CR" },
{ GraphemeBreak_LF, "LF" },
{ GraphemeBreak_Control, "Control" },
{ GraphemeBreak_Extend, "Extend" },
+ { GraphemeBreak_ZWJ, "ZWJ" },
{ GraphemeBreak_RegionalIndicator, "Regional_Indicator" },
{ GraphemeBreak_Prepend, "Prepend" },
{ GraphemeBreak_SpacingMark, "SpacingMark" },
@@ -326,6 +340,10 @@ static void initGraphemeBreak()
{ GraphemeBreak_T, "T" },
{ GraphemeBreak_LV, "LV" },
{ GraphemeBreak_LVT, "LVT" },
+ { Graphemebreak_E_Base, "E_Base" },
+ { Graphemebreak_E_Modifier, "E_Modifier" },
+ { Graphemebreak_Glue_After_Zwj, "Glue_After_Zwj" },
+ { Graphemebreak_E_Base_GAZ, "E_Base_GAZ" },
{ GraphemeBreak_Unassigned, 0 }
};
GraphemeBreakList *d = breaks;
@@ -338,11 +356,13 @@ static void initGraphemeBreak()
static const char *word_break_class_string =
"enum WordBreakClass {\n"
- " WordBreak_Other,\n"
+ " WordBreak_Any,\n"
" WordBreak_CR,\n"
" WordBreak_LF,\n"
" WordBreak_Newline,\n"
" WordBreak_Extend,\n"
+ " WordBreak_ZWJ,\n"
+ " WordBreak_Format,\n"
" WordBreak_RegionalIndicator,\n"
" WordBreak_Katakana,\n"
" WordBreak_HebrewLetter,\n"
@@ -353,15 +373,22 @@ static const char *word_break_class_string =
" WordBreak_MidLetter,\n"
" WordBreak_MidNum,\n"
" WordBreak_Numeric,\n"
- " WordBreak_ExtendNumLet\n"
+ " WordBreak_ExtendNumLet,\n"
+ " WordBreak_E_Base,\n"
+ " WordBreak_E_Modifier,\n"
+ " WordBreak_Glue_After_Zwj,\n"
+ " WordBreak_E_Base_GAZ,\n"
+ " NumWordBreakClasses,\n"
"};\n\n";
enum WordBreakClass {
- WordBreak_Other,
+ WordBreak_Any,
WordBreak_CR,
WordBreak_LF,
WordBreak_Newline,
WordBreak_Extend,
+ WordBreak_ZWJ,
+ WordBreak_Format,
WordBreak_RegionalIndicator,
WordBreak_Katakana,
WordBreak_HebrewLetter,
@@ -372,9 +399,13 @@ enum WordBreakClass {
WordBreak_MidLetter,
WordBreak_MidNum,
WordBreak_Numeric,
- WordBreak_ExtendNumLet
+ WordBreak_ExtendNumLet,
+ WordBreak_E_Base,
+ WordBreak_E_Modifier,
+ WordBreak_Glue_After_Zwj,
+ WordBreak_E_Base_GAZ,
- , WordBreak_Unassigned
+ WordBreak_Unassigned
};
static QHash<QByteArray, WordBreakClass> word_break_map;
@@ -385,12 +416,13 @@ static void initWordBreak()
WordBreakClass brk;
const char *name;
} breaks[] = {
- { WordBreak_Other, "Other" },
+ { WordBreak_Any, "Any" },
{ WordBreak_CR, "CR" },
{ WordBreak_LF, "LF" },
{ WordBreak_Newline, "Newline" },
{ WordBreak_Extend, "Extend" },
- { WordBreak_Extend, "Format" },
+ { WordBreak_ZWJ, "ZWJ" },
+ { WordBreak_Format, "Format" },
{ WordBreak_RegionalIndicator, "Regional_Indicator" },
{ WordBreak_Katakana, "Katakana" },
{ WordBreak_HebrewLetter, "Hebrew_Letter" },
@@ -402,6 +434,10 @@ static void initWordBreak()
{ WordBreak_MidNum, "MidNum" },
{ WordBreak_Numeric, "Numeric" },
{ WordBreak_ExtendNumLet, "ExtendNumLet" },
+ { WordBreak_E_Base, "E_Base" },
+ { WordBreak_E_Modifier, "E_Modifier" },
+ { WordBreak_Glue_After_Zwj, "Glue_After_Zwj" },
+ { WordBreak_E_Base_GAZ, "E_Base_GAZ" },
{ WordBreak_Unassigned, 0 }
};
WordBreakList *d = breaks;
@@ -414,7 +450,7 @@ static void initWordBreak()
static const char *sentence_break_class_string =
"enum SentenceBreakClass {\n"
- " SentenceBreak_Other,\n"
+ " SentenceBreak_Any,\n"
" SentenceBreak_CR,\n"
" SentenceBreak_LF,\n"
" SentenceBreak_Sep,\n"
@@ -427,11 +463,12 @@ static const char *sentence_break_class_string =
" SentenceBreak_ATerm,\n"
" SentenceBreak_SContinue,\n"
" SentenceBreak_STerm,\n"
- " SentenceBreak_Close\n"
+ " SentenceBreak_Close,\n"
+ " NumSentenceBreakClasses\n"
"};\n\n";
enum SentenceBreakClass {
- SentenceBreak_Other,
+ SentenceBreak_Any,
SentenceBreak_CR,
SentenceBreak_LF,
SentenceBreak_Sep,
@@ -457,7 +494,7 @@ static void initSentenceBreak()
SentenceBreakClass brk;
const char *name;
} breaks[] = {
- { SentenceBreak_Other, "Other" },
+ { SentenceBreak_Any, "Any" },
{ SentenceBreak_CR, "CR" },
{ SentenceBreak_LF, "LF" },
{ SentenceBreak_Sep, "Sep" },
@@ -492,8 +529,10 @@ static const char *line_break_class_string =
" LineBreak_IN, LineBreak_HY, LineBreak_BA, LineBreak_BB, LineBreak_B2,\n"
" LineBreak_ZW, LineBreak_CM, LineBreak_WJ, LineBreak_H2, LineBreak_H3,\n"
" LineBreak_JL, LineBreak_JV, LineBreak_JT, LineBreak_RI, LineBreak_CB,\n"
- " LineBreak_SA, LineBreak_SG, LineBreak_SP, LineBreak_CR, LineBreak_LF,\n"
- " LineBreak_BK\n"
+ " LineBreak_EB, LineBreak_EM, LineBreak_ZWJ,\n"
+ " LineBreak_SA, LineBreak_SG, LineBreak_SP,\n"
+ " LineBreak_CR, LineBreak_LF, LineBreak_BK,\n"
+ " NumLineBreakClasses\n"
"};\n\n";
enum LineBreakClass {
@@ -503,10 +542,11 @@ enum LineBreakClass {
LineBreak_IN, LineBreak_HY, LineBreak_BA, LineBreak_BB, LineBreak_B2,
LineBreak_ZW, LineBreak_CM, LineBreak_WJ, LineBreak_H2, LineBreak_H3,
LineBreak_JL, LineBreak_JV, LineBreak_JT, LineBreak_RI, LineBreak_CB,
- LineBreak_SA, LineBreak_SG, LineBreak_SP, LineBreak_CR, LineBreak_LF,
- LineBreak_BK
+ LineBreak_EB, LineBreak_EM, LineBreak_ZWJ,
+ LineBreak_SA, LineBreak_SG, LineBreak_SP,
+ LineBreak_CR, LineBreak_LF, LineBreak_BK,
- , LineBreak_Unassigned
+ LineBreak_Unassigned
};
static QHash<QByteArray, LineBreakClass> line_break_map;
@@ -561,6 +601,9 @@ static void initLineBreak()
{ LineBreak_RI, "RI" },
{ LineBreak_SA, "SA" },
{ LineBreak_AL, "XX" },
+ { LineBreak_EB, "EB" },
+ { LineBreak_EM, "EM" },
+ { LineBreak_ZWJ, "ZWJ" },
{ LineBreak_Unassigned, 0 }
};
LineBreakList *d = breaks;
@@ -722,6 +765,20 @@ static void initScriptMap()
{ QChar::Script_Multani, "Multani" },
{ QChar::Script_OldHungarian, "OldHungarian" },
{ QChar::Script_SignWriting, "SignWriting" },
+ // 9.0
+ { QChar::Script_Adlam, "Adlam" },
+ { QChar::Script_Bhaiksuki, "Bhaiksuki" },
+ { QChar::Script_Marchen, "Marchen" },
+ { QChar::Script_Newa, "Newa" },
+ { QChar::Script_Osage, "Osage" },
+ { QChar::Script_Tangut, "Tangut" },
+ // 10.0
+ { QChar::Script_MasaramGondi, "MasaramGondi" },
+ { QChar::Script_Nushu, "Nushu" },
+ { QChar::Script_Soyombo, "Soyombo" },
+ { QChar::Script_ZanabazarSquare, "ZanabazarSquare" },
+
+
// unhandled
{ QChar::Script_Unknown, 0 }
};
@@ -752,10 +809,10 @@ static const char *property_string =
" signed short caseFoldDiff : 15;\n"
" ushort unicodeVersion : 8; /* 5 used */\n"
" ushort nfQuickCheck : 8;\n" // could be narrowed
- " ushort graphemeBreakClass : 4; /* 4 used */\n"
- " ushort wordBreakClass : 4; /* 4 used */\n"
+ " ushort graphemeBreakClass : 5; /* 5 used */\n"
+ " ushort wordBreakClass : 5; /* 5 used */\n"
" ushort sentenceBreakClass : 8; /* 4 used */\n"
- " ushort lineBreakClass : 8; /* 6 used */\n"
+ " ushort lineBreakClass : 6; /* 6 used */\n"
" ushort script : 8;\n"
"};\n\n"
"Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW;\n"
@@ -1018,9 +1075,9 @@ struct UnicodeData {
p.upperCaseSpecial = 0;
p.titleCaseSpecial = 0;
p.caseFoldSpecial = 0;
- p.graphemeBreakClass = GraphemeBreak_Other;
- p.wordBreakClass = WordBreak_Other;
- p.sentenceBreakClass = SentenceBreak_Other;
+ p.graphemeBreakClass = GraphemeBreak_Any;
+ p.wordBreakClass = WordBreak_Any;
+ p.sentenceBreakClass = SentenceBreak_Any;
p.script = QChar::Script_Unknown;
p.nfQuickCheck = 0;
propertyIndex = -1;
@@ -1897,7 +1954,7 @@ static void readWordBreak()
if (codepoint == 0x002E) // FULL STOP
brk = WordBreak_MidNum;
else if (codepoint == 0x003A) // COLON
- brk = WordBreak_Other;
+ brk = WordBreak_Any;
// ] ###
UnicodeData &ud = UnicodeData::valueRef(codepoint);
ud.p.wordBreakClass = brk;
@@ -2440,10 +2497,10 @@ static QByteArray createPropertyInfo()
// " ushort nfQuickCheck : 8;\n"
out += QByteArray::number( p.nfQuickCheck );
out += ", ";
-// " ushort graphemeBreakClass : 4; /* 4 used */\n"
-// " ushort wordBreakClass : 4; /* 4 used */\n"
+// " ushort graphemeBreakClass : 5; /* 5 used */\n"
+// " ushort wordBreakClass : 5; /* 5 used */\n"
// " ushort sentenceBreakClass : 8; /* 4 used */\n"
-// " ushort lineBreakClass : 8; /* 6 used */\n"
+// " ushort lineBreakClass : 6; /* 6 used */\n"
out += QByteArray::number( p.graphemeBreakClass );
out += ", ";
out += QByteArray::number( p.wordBreakClass );